|
|
|
|
@ -168,6 +168,7 @@ public class ErpContractChangeServiceImpl implements IErpContractChangeService {
|
|
|
|
|
.eq(bo.getUndertakeDeptId() != null, ErpContractChange::getUndertakeDeptId, bo.getUndertakeDeptId())
|
|
|
|
|
.eq(bo.getUndertakeBy() != null, ErpContractChange::getUndertakeBy, bo.getUndertakeBy())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getIndustryRegion()), ErpContractChange::getIndustryRegion, bo.getIndustryRegion())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getBusinessDirection()), ErpContractChange::getBusinessDirection, bo.getBusinessDirection())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getSealLegalEntity()), ErpContractChange::getSealLegalEntity, bo.getSealLegalEntity())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getChangeStatus()), ErpContractChange::getChangeStatus, bo.getChangeStatus())
|
|
|
|
|
.eq(StringUtils.isNotBlank(bo.getFlowStatus()), ErpContractChange::getFlowStatus, bo.getFlowStatus())
|
|
|
|
|
@ -438,6 +439,7 @@ public class ErpContractChangeServiceImpl implements IErpContractChangeService {
|
|
|
|
|
e.setUndertakeDeptId(bo.getUndertakeDeptId());
|
|
|
|
|
e.setUndertakeBy(bo.getUndertakeBy());
|
|
|
|
|
e.setIndustryRegion(bo.getIndustryRegion());
|
|
|
|
|
e.setBusinessDirection(bo.getBusinessDirection());
|
|
|
|
|
e.setSealLegalEntity(bo.getSealLegalEntity());
|
|
|
|
|
e.setChangeStatus(StringUtils.isNotBlank(bo.getChangeStatus()) ? bo.getChangeStatus() : "1");
|
|
|
|
|
e.setFlowStatus(bo.getFlowStatus());
|
|
|
|
|
@ -531,7 +533,7 @@ public class ErpContractChangeServiceImpl implements IErpContractChangeService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 新合同激活时:若该合同为由内容变更产生的新合同,则继承原合同关联项目、删除原合同、解除原合同与项目关联并删除原合同订单信息。
|
|
|
|
|
* 新合同激活时:若该合同为由内容变更产生的新合同,则继承原合同关联项目、将原合同激活标识置为 0(不逻辑删除原合同主表)、解除原合同与项目关联并删除原合同订单信息。
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
@ -568,8 +570,12 @@ public class ErpContractChangeServiceImpl implements IErpContractChangeService {
|
|
|
|
|
newLink.setProjectSource(oldLink.getProjectSource());
|
|
|
|
|
projectContractsMapper.insert(newLink);
|
|
|
|
|
}
|
|
|
|
|
//原合同更新并逻辑删除
|
|
|
|
|
contractInfoMapper.deleteById(originalContractId);
|
|
|
|
|
// 原合同:仅将激活标识置为 0,保留主表数据(不再逻辑删除)
|
|
|
|
|
ErpContractInfo originalInactive = new ErpContractInfo();
|
|
|
|
|
originalInactive.setContractId(originalContractId);
|
|
|
|
|
originalInactive.setContractStatus(OAStatusEnum.INVALID.getStatus());
|
|
|
|
|
originalInactive.setActiveFlag("0");
|
|
|
|
|
contractInfoMapper.updateById(originalInactive);
|
|
|
|
|
for (ErpProjectContracts oldLink : oldLinks) {
|
|
|
|
|
projectContractsMapper.deleteById(oldLink.getProjectContractsId());
|
|
|
|
|
}
|
|
|
|
|
@ -581,39 +587,6 @@ public class ErpContractChangeServiceImpl implements IErpContractChangeService {
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 内容变更回写:用变更信息快照更新原合同主表;原合同物料/付款方式先逻辑删除后按变更快照插入(逻辑删除,实体带 @TableLogic)。
|
|
|
|
|
*/
|
|
|
|
|
private void doWriteBackContent(Long contractChangeId, Long contractId) {
|
|
|
|
|
List<ErpContractChangeInfoVo> infoList = changeInfoMapper.selectVoList(
|
|
|
|
|
new LambdaQueryWrapper<ErpContractChangeInfo>().eq(ErpContractChangeInfo::getContractChangeId, contractChangeId));
|
|
|
|
|
if (!infoList.isEmpty()) {
|
|
|
|
|
ErpContractInfo contractInfo = contractInfoMapper.selectById(contractId);
|
|
|
|
|
if (contractInfo != null) {
|
|
|
|
|
copyChangeInfoToContract(infoList.get(0), contractInfo);
|
|
|
|
|
contractInfoMapper.updateById(contractInfo);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 逻辑删除原合同下物料(@TableLogic)
|
|
|
|
|
LambdaQueryWrapper<ErpContractMaterial> materialDel = new LambdaQueryWrapper<ErpContractMaterial>().eq(ErpContractMaterial::getContractId, contractId);
|
|
|
|
|
contractMaterialMapper.delete(materialDel);
|
|
|
|
|
List<ErpContractChangeMaterial> materials = changeMaterialMapper.selectList(
|
|
|
|
|
new LambdaQueryWrapper<ErpContractChangeMaterial>().eq(ErpContractChangeMaterial::getContractChangeId, contractChangeId));
|
|
|
|
|
for (ErpContractChangeMaterial m : materials) {
|
|
|
|
|
contractMaterialMapper.insert(copyChangeMaterialToContract(m, contractId));
|
|
|
|
|
}
|
|
|
|
|
// 逻辑删除原合同下付款方式(@TableLogic)
|
|
|
|
|
LambdaQueryWrapper<ErpContractPaymentMethod> paymentDel = new LambdaQueryWrapper<ErpContractPaymentMethod>().eq(ErpContractPaymentMethod::getContractId, contractId);
|
|
|
|
|
contractPaymentMethodMapper.delete(paymentDel);
|
|
|
|
|
List<ErpContractChangePaymentMethod> payments = changePaymentMethodMapper.selectList(
|
|
|
|
|
new LambdaQueryWrapper<ErpContractChangePaymentMethod>().eq(ErpContractChangePaymentMethod::getContractChangeId, contractChangeId));
|
|
|
|
|
for (ErpContractChangePaymentMethod p : payments) {
|
|
|
|
|
contractPaymentMethodMapper.insert(copyChangePaymentToContract(p, contractId));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ======================= 流程监听 =======================
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 合同变更流程事件监听(flowCode=HTBG):根据流程状态同步变更单 flowStatus/changeStatus,审批完成时触发回写。
|
|
|
|
|
* <ul>
|
|
|
|
|
@ -650,50 +623,6 @@ public class ErpContractChangeServiceImpl implements IErpContractChangeService {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ======================= 回写时的数据拷贝 =======================
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 将变更信息快照字段拷贝到原合同主表(回写内容变更时用)
|
|
|
|
|
*/
|
|
|
|
|
private void copyChangeInfoToContract(ErpContractChangeInfoVo snap, ErpContractInfo contract) {
|
|
|
|
|
contract.setContractFlag(snap.getContractFlag());
|
|
|
|
|
contract.setCustomerContractCode(snap.getCustomerContractCode());
|
|
|
|
|
contract.setContractCode(snap.getContractCode());
|
|
|
|
|
contract.setContractName(snap.getContractName());
|
|
|
|
|
contract.setContractCategory(snap.getContractCategory());
|
|
|
|
|
contract.setContractType(snap.getContractType());
|
|
|
|
|
contract.setBusinessDirection(snap.getBusinessDirection());
|
|
|
|
|
contract.setContractDeptId(snap.getContractDeptId());
|
|
|
|
|
contract.setContractDate(snap.getContractDate());
|
|
|
|
|
contract.setTotalPrice(snap.getTotalPrice());
|
|
|
|
|
contract.setOneCustomerId(snap.getOneCustomerId());
|
|
|
|
|
contract.setOneRepresent(snap.getOneRepresent());
|
|
|
|
|
contract.setOneDate(snap.getOneDate());
|
|
|
|
|
contract.setTwoCustomerId(snap.getTwoCustomerId());
|
|
|
|
|
contract.setTwoRepresent(snap.getTwoRepresent());
|
|
|
|
|
contract.setTwoDate(snap.getTwoDate());
|
|
|
|
|
contract.setContractManagerId(snap.getContractManagerId());
|
|
|
|
|
contract.setTemplateId(snap.getTemplateId());
|
|
|
|
|
contract.setOssId(snap.getOssId());
|
|
|
|
|
contract.setPaymentAccountId(snap.getPaymentAccountId());
|
|
|
|
|
contract.setPaymentMethod(snap.getPaymentMethod());
|
|
|
|
|
contract.setSignatureAppendix(snap.getSignatureAppendix());
|
|
|
|
|
contract.setWarrantyPeriod(snap.getWarrantyPeriod());
|
|
|
|
|
contract.setInternalContractCode(snap.getInternalContractCode());
|
|
|
|
|
contract.setExternalContractCode(snap.getExternalContractCode());
|
|
|
|
|
contract.setOrderContractCode(snap.getOrderContractCode());
|
|
|
|
|
contract.setProjectContractCode(snap.getProjectContractCode());
|
|
|
|
|
contract.setDeliveryStart(snap.getDeliveryStart() != null ? snap.getDeliveryStart().intValue() : null);
|
|
|
|
|
contract.setWarrantyPeriodDescription(snap.getWarrantyPeriodDescription());
|
|
|
|
|
contract.setDeliveryLocation(snap.getDeliveryLocation());
|
|
|
|
|
contract.setShipMethod(snap.getShipMethod());
|
|
|
|
|
contract.setTaxRate(snap.getTaxRate());
|
|
|
|
|
contract.setSigningPlace(snap.getSigningPlace());
|
|
|
|
|
contract.setMaterialRemark(snap.getMaterialRemark());
|
|
|
|
|
contract.setContractTemplateFlag(snap.getContractTemplateFlag());
|
|
|
|
|
contract.setCapitalizedAmount(snap.getCapitalizedAmount());
|
|
|
|
|
contract.setRemark(snap.getRemark());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 将单条变更物料快照转为原合同下的合同物料实体(回写时插入 erp_contract_material)
|
|
|
|
|
|