diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangeServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangeServiceImpl.java index 2c3d14be..22dec48c 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangeServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractChangeServiceImpl.java @@ -36,6 +36,7 @@ import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.domain.RemoteStartProcess; import org.dromara.common.core.exception.ServiceException; import org.apache.seata.spring.annotation.GlobalTransactional; +import org.dromara.oa.erp.constant.ProjectCategoryConstant; import org.apache.dubbo.config.annotation.DubboReference; @@ -68,6 +69,7 @@ public class ErpContractChangeServiceImpl implements IErpContractChangeService { private final ErpContractMaterialMapper contractMaterialMapper; private final ErpContractPaymentMethodMapper contractPaymentMethodMapper; private final ErpProjectContractsMapper projectContractsMapper; + private final ErpProjectInfoMapper projectInfoMapper; private final IErpContractInfoService contractInfoService; @DubboReference @@ -76,20 +78,34 @@ public class ErpContractChangeServiceImpl implements IErpContractChangeService { @DubboReference(timeout = 30000) private RemoteWorkflowService remoteWorkflowService; - /** 合同变更流程定义编码(与流程引擎中 flowCode 一致) */ + /** + * 合同变更流程定义编码(与流程引擎中 flowCode 一致) + */ public static final String FLOW_CODE_CONTRACT_CHANGE = "HTBG"; - /** 变更单编号规则编码(调用编码规则服务生成变更编号) */ + /** + * 变更单编号规则编码(调用编码规则服务生成变更编号) + */ private static final String CONTRACT_CHANGE_CODE_RULE = "1021"; - /** 变更类型:1-内容变更(需维护变更后信息/物料/付款方式快照) */ + /** + * 变更类型:1-内容变更(需维护变更后信息/物料/付款方式快照) + */ private static final String CHANGE_TYPE_CONTENT = "1"; - /** 变更类型:2-解除合同(仅更新原合同激活标识) */ + /** + * 变更类型:2-解除合同(仅更新原合同激活标识) + */ private static final String CHANGE_TYPE_TERMINATE = "2"; - /** 回写标识:0-未回写 */ + /** + * 回写标识:0-未回写 + */ private static final String WRITE_BACK_NO = "0"; - /** 回写标识:1-已回写(审批通过并已写回原合同后不再允许修改回写相关字段) */ + /** + * 回写标识:1-已回写(审批通过并已写回原合同后不再允许修改回写相关字段) + */ private static final String WRITE_BACK_YES = "1"; - /** 变更状态:3-可用(审批完成且已回写后的终态) */ + /** + * 变更状态:3-可用(审批完成且已回写后的终态) + */ private static final String CHANGE_STATUS_AVAILABLE = "3"; /** @@ -502,7 +518,9 @@ public class ErpContractChangeServiceImpl implements IErpContractChangeService { baseMapper.updateById(change); } - /** 解除合同回写 */ + /** + * 解除合同回写 + */ private void doWriteBackTerminate(Long contractId) { ErpContractInfo info = contractInfoMapper.selectById(contractId); if (info != null) { @@ -513,8 +531,7 @@ public class ErpContractChangeServiceImpl implements IErpContractChangeService { } /** - * 新合同激活时:若该合同为由内容变更产生的新合同,则继承原合同关联项目、作废原合同、解除原合同与项目关联并删除原合同订单信息。幂等。 - * 优先从合同表 original_contract_id 取原合同ID,若无则从 erp_contract_change.new_contract_id 反查。 + * 新合同激活时:若该合同为由内容变更产生的新合同,则继承原合同关联项目、删除原合同、解除原合同与项目关联并删除原合同订单信息。 */ @Override @Transactional(rollbackFor = Exception.class) @@ -527,16 +544,6 @@ public class ErpContractChangeServiceImpl implements IErpContractChangeService { if (newContract != null && newContract.getOriginalContractId() != null) { originalContractId = newContract.getOriginalContractId(); } - if (originalContractId == null) { - List list = baseMapper.selectList( - new LambdaQueryWrapper() - .eq(ErpContractChange::getNewContractId, newContractId) - .last("limit 1")); - if (list.isEmpty()) { - return; - } - originalContractId = list.get(0).getContractId(); - } if (originalContractId == null) { return; } @@ -544,16 +551,13 @@ public class ErpContractChangeServiceImpl implements IErpContractChangeService { if (originalContract == null) { return; } - if ("0".equals(originalContract.getActiveFlag()) && OAStatusEnum.INVALID.getStatus().equals(originalContract.getContractStatus())) { - return; - } List oldLinks = projectContractsMapper.selectList( - new LambdaQueryWrapper().eq(ErpProjectContracts::getContractId, originalContractId)); + new LambdaQueryWrapper().eq(ErpProjectContracts::getContractId, originalContractId)); for (ErpProjectContracts oldLink : oldLinks) { long cnt = projectContractsMapper.selectCount( - new LambdaQueryWrapper() - .eq(ErpProjectContracts::getContractId, newContractId) - .eq(ErpProjectContracts::getProjectId, oldLink.getProjectId())); + new LambdaQueryWrapper() + .eq(ErpProjectContracts::getContractId, newContractId) + .eq(ErpProjectContracts::getProjectId, oldLink.getProjectId())); if (cnt > 0) { continue; } @@ -561,17 +565,20 @@ public class ErpContractChangeServiceImpl implements IErpContractChangeService { newLink.setContractId(newContractId); newLink.setProjectId(oldLink.getProjectId()); newLink.setSortOrder(oldLink.getSortOrder()); - newLink.setRemark(oldLink.getRemark()); - newLink.setActiveFlag(StringUtils.isNotBlank(oldLink.getActiveFlag()) ? oldLink.getActiveFlag() : "1"); newLink.setProjectSource(oldLink.getProjectSource()); projectContractsMapper.insert(newLink); } - originalContract.setActiveFlag("0"); - originalContract.setContractStatus(OAStatusEnum.INVALID.getStatus()); - contractInfoMapper.updateById(originalContract); + //原合同更新并逻辑删除 + contractInfoMapper.deleteById(originalContractId); for (ErpProjectContracts oldLink : oldLinks) { projectContractsMapper.deleteById(oldLink.getProjectContractsId()); } + // 原合同订单删除 + projectInfoMapper.delete( + new LambdaQueryWrapper() + .eq(ErpProjectInfo::getContractId, originalContractId) + .eq(ErpProjectInfo::getProjectCategory, ProjectCategoryConstant.CONTRACT_ORDER) + ); } /**