feat(oms): 运输业务单新增反审核功能
审核通过后支持反审核,恢复订单到待审核状态以便修改 - 新增 /businessDocumentOrderApi/cancelAudit 接口 - 仅"审核通过(reviewStatus=1)"且未生成执行单的订单允许反审核 - 拆单主单反审核时级联清理生成的子单、子单地址及配送明细回填
This commit is contained in:
+8
@@ -147,6 +147,14 @@ public class BusinessDocumentOrderApplicationService {
|
||||
{
|
||||
return businessDocumentOrderDomainService.audit(businessAuditDTO);
|
||||
}
|
||||
|
||||
/**
|
||||
* 业务单反审核
|
||||
*/
|
||||
public Boolean cancelAudit(BusinessAuditDTO businessAuditDTO)
|
||||
{
|
||||
return businessDocumentOrderDomainService.cancelAudit(businessAuditDTO);
|
||||
}
|
||||
public boolean execute(List<Long> ids) {
|
||||
return businessDocumentOrderDomainService.execute(ids);
|
||||
}
|
||||
|
||||
+5
@@ -49,6 +49,11 @@ public interface IBusinessDocumentOrderService extends IService<BusinessDocument
|
||||
|
||||
public Boolean audit( List<Long> ids, Long reviewStatus, String SalesManager,String reviewOpinion);
|
||||
|
||||
/**
|
||||
* 业务单反审核(将已审核订单恢复到待审核)
|
||||
*/
|
||||
public Boolean cancelAudit(List<Long> ids);
|
||||
|
||||
String selectByMakerCodeNc(String salesmanCodeNc);
|
||||
|
||||
String selectByMakerCodeNc1(String salesmanCodeNc);
|
||||
|
||||
+83
@@ -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<BusinessDocumentOrder
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean cancelAudit(List<Long> 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<ExecuteOrder>()
|
||||
.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<BusinessDocumentOrder> subOrders = businessDocumentOrderMapper.selectList(
|
||||
new LambdaQueryWrapper<BusinessDocumentOrder>()
|
||||
.eq(BusinessDocumentOrder::getMainOrderId, String.valueOf(id))
|
||||
.eq(BusinessDocumentOrder::getDelFlag, 1));
|
||||
if (subOrders != null && !subOrders.isEmpty()) {
|
||||
List<String> subIdStrs = new ArrayList<>();
|
||||
for (BusinessDocumentOrder sub : subOrders) {
|
||||
// 校验4:子单若已生成执行单,主单不可反审核
|
||||
ExecuteOrder subExec = executeOrderMapper.selectOne(new LambdaQueryWrapper<ExecuteOrder>()
|
||||
.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<BusinessDocumentAddressMulti>()
|
||||
.in(BusinessDocumentAddressMulti::getOrderId, subIdStrs)
|
||||
.set(BusinessDocumentAddressMulti::getDelFlag, 2));
|
||||
// 清空审核时回填到 business_delivery_details_link.sub_order_id 的子单id
|
||||
businessDeliveryDetailsLinkMapper.update(null,
|
||||
new LambdaUpdateWrapper<BusinessDeliveryDetailsLink>()
|
||||
.eq(BusinessDeliveryDetailsLink::getOrderId, id)
|
||||
.isNotNull(BusinessDeliveryDetailsLink::getSubOrderId)
|
||||
.set(BusinessDeliveryDetailsLink::getSubOrderId, null));
|
||||
}
|
||||
}
|
||||
|
||||
// 状态复位 + 清空审核信息(用 UpdateWrapper.set 确保 null 能写入;updateById 默认不更新 null)
|
||||
LambdaUpdateWrapper<BusinessDocumentOrder> updateWrapper = new LambdaUpdateWrapper<BusinessDocumentOrder>()
|
||||
.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<Long> ids) {
|
||||
|
||||
+9
@@ -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<Long> ids) {
|
||||
return businessDocumentOrderService.execute(ids);
|
||||
}
|
||||
|
||||
+10
@@ -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));
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量执行【业务单】
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user