1.0.92 新合同激活时:若该合同为由内容变更产生的新合同,则继承原合同的关联项目,同时删除原合同,解除原合同与项目关联并删除原合同订单信息。

dev
yinq 1 day ago
parent a121afb545
commit 92147b6408

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

Loading…
Cancel
Save