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

dev
yinq 2 days 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.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<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) {
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<ErpProjectContracts> oldLinks = projectContractsMapper.selectList(
new LambdaQueryWrapper<ErpProjectContracts>().eq(ErpProjectContracts::getContractId, originalContractId));
new LambdaQueryWrapper<ErpProjectContracts>().eq(ErpProjectContracts::getContractId, originalContractId));
for (ErpProjectContracts oldLink : oldLinks) {
long cnt = projectContractsMapper.selectCount(
new LambdaQueryWrapper<ErpProjectContracts>()
.eq(ErpProjectContracts::getContractId, newContractId)
.eq(ErpProjectContracts::getProjectId, oldLink.getProjectId()));
new LambdaQueryWrapper<ErpProjectContracts>()
.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<ErpProjectInfo>()
.eq(ErpProjectInfo::getContractId, originalContractId)
.eq(ErpProjectInfo::getProjectCategory, ProjectCategoryConstant.CONTRACT_ORDER)
);
}
/**

Loading…
Cancel
Save