From 92147b6408f0a0f38c69d1a40f1d88366f201e2d Mon Sep 17 00:00:00 2001 From: yinq Date: Thu, 19 Mar 2026 09:06:19 +0800 Subject: [PATCH] =?UTF-8?q?1.0.92=20=E6=96=B0=E5=90=88=E5=90=8C=E6=BF=80?= =?UTF-8?q?=E6=B4=BB=E6=97=B6=EF=BC=9A=E8=8B=A5=E8=AF=A5=E5=90=88=E5=90=8C?= =?UTF-8?q?=E4=B8=BA=E7=94=B1=E5=86=85=E5=AE=B9=E5=8F=98=E6=9B=B4=E4=BA=A7?= =?UTF-8?q?=E7=94=9F=E7=9A=84=E6=96=B0=E5=90=88=E5=90=8C=EF=BC=8C=E5=88=99?= =?UTF-8?q?=E7=BB=A7=E6=89=BF=E5=8E=9F=E5=90=88=E5=90=8C=E7=9A=84=E5=85=B3?= =?UTF-8?q?=E8=81=94=E9=A1=B9=E7=9B=AE=EF=BC=8C=E5=90=8C=E6=97=B6=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=8E=9F=E5=90=88=E5=90=8C=EF=BC=8C=E8=A7=A3=E9=99=A4?= =?UTF-8?q?=E5=8E=9F=E5=90=88=E5=90=8C=E4=B8=8E=E9=A1=B9=E7=9B=AE=E5=85=B3?= =?UTF-8?q?=E8=81=94=E5=B9=B6=E5=88=A0=E9=99=A4=E5=8E=9F=E5=90=88=E5=90=8C?= =?UTF-8?q?=E8=AE=A2=E5=8D=95=E4=BF=A1=E6=81=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ErpContractChangeServiceImpl.java | 71 ++++++++++--------- 1 file changed, 39 insertions(+), 32 deletions(-) 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) + ); } /**