diff --git a/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java b/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java index b3e99f7f0..776b4b2b1 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/application/service/businessDocumentOrder/BusinessDocumentOrderApplicationService.java @@ -147,6 +147,14 @@ public class BusinessDocumentOrderApplicationService { { return businessDocumentOrderDomainService.audit(businessAuditDTO); } + + /** + * 业务单反审核 + */ + public Boolean cancelAudit(BusinessAuditDTO businessAuditDTO) + { + return businessDocumentOrderDomainService.cancelAudit(businessAuditDTO); + } public boolean execute(List ids) { return businessDocumentOrderDomainService.execute(ids); } diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/repository/facade/IBusinessDocumentOrderService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/repository/facade/IBusinessDocumentOrderService.java index 948412564..b638970e9 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/repository/facade/IBusinessDocumentOrderService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/repository/facade/IBusinessDocumentOrderService.java @@ -49,6 +49,11 @@ public interface IBusinessDocumentOrderService extends IService ids, Long reviewStatus, String SalesManager,String reviewOpinion); + /** + * 业务单反审核(将已审核订单恢复到待审核) + */ + public Boolean cancelAudit(List ids); + String selectByMakerCodeNc(String salesmanCodeNc); String selectByMakerCodeNc1(String salesmanCodeNc); diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/repository/persistence/BusinessDocumentOrderImpl.java b/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/repository/persistence/BusinessDocumentOrderImpl.java index 9d4ee46ea..44f7ac880 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/repository/persistence/BusinessDocumentOrderImpl.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/repository/persistence/BusinessDocumentOrderImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mhd.common.core.domain.po.UserPo; import com.mhd.common.core.utils.OrderSequence; @@ -298,6 +299,88 @@ public class BusinessDocumentOrderImpl extends ServiceImpl ids) { // 取消审核 后端暂时未加鉴权 + if (CollectionUtils.isEmpty(ids)) { + throw new ServiceException("未选择反审核的业务单"); + } + for (Long id : ids) { + BusinessDocumentOrder order = businessDocumentOrderMapper.selectById(id); + if (ObjectUtil.isNull(order)) { + throw new ServiceException("未查询到业务单信息"); + } + // 校验1:子单(splicingOrderType=3)不允许单独反审核,需对主单操作 + if (order.getSplicingOrderType() != null && order.getSplicingOrderType() == 3L) { + throw new ServiceException("业务单【" + order.getGoodsNumber() + "】为子单,请对主单进行反审核"); + } + // 校验2:仅"审核通过(reviewStatus=1)"可反审核 + if (order.getReviewStatus() == null || order.getReviewStatus() != 1L) { + throw new ServiceException("业务单【" + order.getGoodsNumber() + "】非已审核状态,无法反审核"); + } + // 校验3:已生成执行单的不允许反审核,需先取消执行 + ExecuteOrder existExec = executeOrderMapper.selectOne(new LambdaQueryWrapper() + .eq(ExecuteOrder::getBusinessDocumentId, id) + .eq(ExecuteOrder::getDelFlag, 1).last("LIMIT 1")); + if (ObjectUtil.isNotNull(existExec)) { + throw new ServiceException("业务单【" + order.getGoodsNumber() + "】已生成执行单,请先取消执行"); + } + + boolean isMain = order.getSplicingOrderType() != null && order.getSplicingOrderType() == 4L; + // 拆单主单(isMain):清理审核时生成的子单、子单地址、以及回填到配送明细的 subOrderId + if (isMain) { + List subOrders = businessDocumentOrderMapper.selectList( + new LambdaQueryWrapper() + .eq(BusinessDocumentOrder::getMainOrderId, String.valueOf(id)) + .eq(BusinessDocumentOrder::getDelFlag, 1)); + if (subOrders != null && !subOrders.isEmpty()) { + List subIdStrs = new ArrayList<>(); + for (BusinessDocumentOrder sub : subOrders) { + // 校验4:子单若已生成执行单,主单不可反审核 + ExecuteOrder subExec = executeOrderMapper.selectOne(new LambdaQueryWrapper() + .eq(ExecuteOrder::getBusinessDocumentId, sub.getId()) + .eq(ExecuteOrder::getDelFlag, 1).last("LIMIT 1")); + if (ObjectUtil.isNotNull(subExec)) { + throw new ServiceException("子单【" + sub.getGoodsNumber() + "】已生成执行单,无法反审核主单"); + } + subIdStrs.add(String.valueOf(sub.getId())); + // 逻辑删除子单(与 delete() 方法一致:delFlag 2) + sub.setDelFlag(2); + businessDocumentOrderMapper.updateById(sub); + } + // 逻辑删除子单的地址(审核时按 orderId=子单id 生成) + businessDocumentAddressMultiMapper.update(null, + new LambdaUpdateWrapper() + .in(BusinessDocumentAddressMulti::getOrderId, subIdStrs) + .set(BusinessDocumentAddressMulti::getDelFlag, 2)); + // 清空审核时回填到 business_delivery_details_link.sub_order_id 的子单id + businessDeliveryDetailsLinkMapper.update(null, + new LambdaUpdateWrapper() + .eq(BusinessDeliveryDetailsLink::getOrderId, id) + .isNotNull(BusinessDeliveryDetailsLink::getSubOrderId) + .set(BusinessDeliveryDetailsLink::getSubOrderId, null)); + } + } + + // 状态复位 + 清空审核信息(用 UpdateWrapper.set 确保 null 能写入;updateById 默认不更新 null) + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() + .eq(BusinessDocumentOrder::getId, id) + .set(BusinessDocumentOrder::getReviewStatus, 0L) // 未审核 + .set(BusinessDocumentOrder::getOrderStatus, 0L) // 待审核 + .set(BusinessDocumentOrder::getExecuteStatus, 0L) // 无状态 + .set(BusinessDocumentOrder::getReviewId, null) + .set(BusinessDocumentOrder::getReview, null) + .set(BusinessDocumentOrder::getReviewTime, null) + .set(BusinessDocumentOrder::getReviewOpinion, null) + .set(BusinessDocumentOrder::getSalesManager, null); + if (isMain) { + updateWrapper.set(BusinessDocumentOrder::getDeliveryProgress, null); // 清空主单拆单数 + } + businessDocumentOrderMapper.update(null, updateWrapper); + } + return true; + } + @Override @Transactional(rollbackFor = Exception.class) public Boolean execute(List ids) { diff --git a/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/service/BusinessDocumentOrderDomainService.java b/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/service/BusinessDocumentOrderDomainService.java index 93585eeb6..385e3c3f9 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/service/BusinessDocumentOrderDomainService.java +++ b/mhd_oms/src/main/java/com/mhd/oms/domain/businessDocumentOrder/service/BusinessDocumentOrderDomainService.java @@ -932,6 +932,15 @@ public class BusinessDocumentOrderDomainService { return businessDocumentOrderService.audit(businessAuditDTO.getIds(),businessAuditDTO.getReviewStatus(),businessAuditDTO.getSalesManager(),businessAuditDTO.getReviewOpinion()); } + + /** + * 业务单反审核 + */ + public Boolean cancelAudit(BusinessAuditDTO businessAuditDTO) + { + return businessDocumentOrderService.cancelAudit(businessAuditDTO.getIds()); + } + public Boolean execute(List ids) { return businessDocumentOrderService.execute(ids); } diff --git a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/businessDocumentOrder/BusinessDocumentOrderApi.java b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/businessDocumentOrder/BusinessDocumentOrderApi.java index eb5c6df23..abce60fdb 100644 --- a/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/businessDocumentOrder/BusinessDocumentOrderApi.java +++ b/mhd_oms/src/main/java/com/mhd/oms/interfaces/facade/businessDocumentOrder/BusinessDocumentOrderApi.java @@ -108,6 +108,16 @@ public class BusinessDocumentOrderApi extends BaseController{ return AjaxResult.success(businessDocumentOrderApplicationService.audit(businessAuditDTO)); } + /** + * 业务单反审核(将已审核订单恢复到待审核,便于修改) + */ + @ApiOperation("业务单反审核") + @PostMapping(value = "/cancelAudit") + public AjaxResult cancelAudit(@RequestBody BusinessAuditDTO businessAuditDTO) + { + return toAjax(businessDocumentOrderApplicationService.cancelAudit(businessAuditDTO)); + } + /** * 批量执行【业务单】 */