|
|
|
|
@ -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)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|