字典枚举优化,合同提交erp功能编写,

This commit is contained in:
guojunyun
2025-10-11 17:25:34 +08:00
parent 61802d4974
commit 2cd5df0d5f
8 changed files with 225 additions and 242 deletions

View File

@@ -148,6 +148,7 @@ public class ContractController implements BusinessControllerMarker {
@PostMapping("/submit/erp")
@Operation(summary = "提交ERP")
@PreAuthorize("@ss.hasPermission('base:contract:erp')")
public void submitErp() {
public void submitErp(@RequestBody List<Long> ids) {
contractService.submitErp(ids);
}
}

View File

@@ -94,4 +94,12 @@ public interface ContractService {
* @return 结算条款数据
*/
List<ContractFormulaRespDTO> getFormulasByPaperNumber(String contractPaperNumber);
/**
* 提交ERP
*
* @param ids 合同ID集合
* @return
*/
void submitErp(List<Long> ids);
}

View File

@@ -25,8 +25,8 @@ import com.zt.plat.module.contractorder.enums.ApiConstants;
import com.zt.plat.module.contractorder.enums.DateConstants;
import com.zt.plat.module.contractorder.enums.ProcessConstants;
import com.zt.plat.module.contractorder.enums.TableFieldConstants;
import com.zt.plat.module.contractorder.enums.contract.ContractStatusEnum;
import com.zt.plat.module.contractorder.enums.contract.ErpCtrtYesNoEnum;
import com.zt.plat.module.contractorder.enums.contract.DictEnum;
import com.zt.plat.module.erp.dal.dataobject.erp.ErpContractDO;
import com.zt.plat.module.erp.service.erp.ErpCompanyService;
import com.zt.plat.module.system.api.user.AdminUserApi;
import com.zt.plat.module.system.api.user.dto.AdminUserRespDTO;
@@ -134,7 +134,7 @@ public class ContractServiceImpl implements ContractService {
// 合同主信息
ContractMainDO contractMainDO = BeanUtils.toBean(reqVO, ContractMainDO.class);
// 合同状态保存为草稿
contractMainDO.setStatus(ContractStatusEnum.DRAFT.getCode());
contractMainDO.setStatus(DictEnum.BSE_CTRT_STS_DRAFT.getCode());
// 生成系统合同编号
contractMainDO.setSystemContractNumber(generateSystemContractNumber(reqVO.getCategory()));
@@ -400,14 +400,14 @@ public class ContractServiceImpl implements ContractService {
}
// 合同状态校验
if (ContractStatusEnum.DELETED.getCode().equals(oldContractMainDO.getStatus())
|| ContractStatusEnum.ARCHIVED.getCode().equals(oldContractMainDO.getStatus())
|| ContractStatusEnum.TERMINATED.getCode().equals(oldContractMainDO.getStatus())
|| ContractStatusEnum.IN_PROGRESS.getCode().equals(oldContractMainDO.getStatus())
|| ContractStatusEnum.UNDER_REVIEW.getCode().equals(oldContractMainDO.getStatus())) {
if (DictEnum.BSE_CTRT_STS_DELETED.getCode().equals(oldContractMainDO.getStatus())
|| DictEnum.BSE_CTRT_STS_ARCHIVED.getCode().equals(oldContractMainDO.getStatus())
|| DictEnum.BSE_CTRT_STS_TERMINATED.getCode().equals(oldContractMainDO.getStatus())
|| DictEnum.BSE_CTRT_STS_IN_PROGRESS.getCode().equals(oldContractMainDO.getStatus())
|| DictEnum.BSE_CTRT_STS_UNDER_REVIEW.getCode().equals(oldContractMainDO.getStatus())) {
throw exception(CONTRACT_STATUS_NOT_UPDATE,
ContractStatusEnum.valueOf(oldContractMainDO.getStatus()).getLabel());
DictEnum.valueOf(oldContractMainDO.getStatus()).getLabel());
}
// 请求更新的合同信息
@@ -606,14 +606,14 @@ public class ContractServiceImpl implements ContractService {
}
// 合同状态校验
if (ContractStatusEnum.UNDER_REVIEW.getCode().equals(contractMainDO.getStatus())
|| ContractStatusEnum.IN_PROGRESS.getCode().equals(contractMainDO.getStatus())
|| ContractStatusEnum.TERMINATED.getCode().equals(contractMainDO.getStatus())
|| ContractStatusEnum.ARCHIVED.getCode().equals(contractMainDO.getStatus())
|| ContractStatusEnum.DELETED.getCode().equals(contractMainDO.getStatus())) {
if (DictEnum.BSE_CTRT_STS_UNDER_REVIEW.getCode().equals(contractMainDO.getStatus())
|| DictEnum.BSE_CTRT_STS_IN_PROGRESS.getCode().equals(contractMainDO.getStatus())
|| DictEnum.BSE_CTRT_STS_TERMINATED.getCode().equals(contractMainDO.getStatus())
|| DictEnum.BSE_CTRT_STS_ARCHIVED.getCode().equals(contractMainDO.getStatus())
|| DictEnum.BSE_CTRT_STS_DELETED.getCode().equals(contractMainDO.getStatus())) {
throw exception(CONTRACT_STATUS_NOT_SUBMIT_APPROVAL,
ContractStatusEnum.valueOf(contractMainDO.getStatus()).getLabel());
DictEnum.valueOf(contractMainDO.getStatus()).getLabel());
}
// 合同内容校验
@@ -644,7 +644,7 @@ public class ContractServiceImpl implements ContractService {
BpmTaskRespDTO undoTask = taskList.get(taskList.size() - 1);
contractMainDO.setTaskNodeId(undoTask.getId());
}
contractMainDO.setStatus(ContractStatusEnum.UNDER_REVIEW.getCode());
contractMainDO.setStatus(DictEnum.BSE_CTRT_STS_UNDER_REVIEW.getCode());
contractMainMapper.updateById(contractMainDO);
return "提交审批成功";
}
@@ -671,20 +671,27 @@ public class ContractServiceImpl implements ContractService {
}
// 合同状态校验
if (ContractStatusEnum.DRAFT.getCode().equals(contractMainDO.getStatus())
|| ContractStatusEnum.IN_PROGRESS.getCode().equals(contractMainDO.getStatus())
|| ContractStatusEnum.REJECTED.getCode().equals(contractMainDO.getStatus())
|| ContractStatusEnum.TERMINATED.getCode().equals(contractMainDO.getStatus())
|| ContractStatusEnum.ARCHIVED.getCode().equals(contractMainDO.getStatus())
|| ContractStatusEnum.DELETED.getCode().equals(contractMainDO.getStatus())) {
if (DictEnum.BSE_CTRT_STS_DRAFT.getCode().equals(contractMainDO.getStatus())
|| DictEnum.BSE_CTRT_STS_IN_PROGRESS.getCode().equals(contractMainDO.getStatus())
|| DictEnum.BSE_CTRT_STS_REJECTED.getCode().equals(contractMainDO.getStatus())
|| DictEnum.BSE_CTRT_STS_TERMINATED.getCode().equals(contractMainDO.getStatus())
|| DictEnum.BSE_CTRT_STS_ARCHIVED.getCode().equals(contractMainDO.getStatus())
|| DictEnum.BSE_CTRT_STS_DELETED.getCode().equals(contractMainDO.getStatus())) {
throw exception(CONTRACT_STATUS_NOT_APPROVAL,
ContractStatusEnum.valueOf(contractMainDO.getStatus()).getLabel());
DictEnum.valueOf(contractMainDO.getStatus()).getLabel());
}
return "";
}
/**
* 获取合同ID集合
*
* @param contractName 合同名称
* @param contractPaperNumber 合同编号
* @return 合同ID集合
*/
private List<Long> getContractIds(String contractName, String contractPaperNumber) {
List<Long> contractIds = new ArrayList<>();
List<ContractMainDO> contractMainDOS = contractMainMapper.selectList(new LambdaQueryWrapperX<ContractMainDO>()
@@ -782,6 +789,115 @@ public class ContractServiceImpl implements ContractService {
return formulas;
}
@Override
public void submitErp(List<Long> ids) {
// 遍历合同ID集合
ids.forEach(id -> {
// 查询合同信息
ContractMainDO contractMainDO = contractMainMapper.selectById(id);
if (contractMainDO != null) {
// 生成ERP合同映射表
ErpContractDO erpContractDO = new ErpContractDO();
// 合同主信息表主键:BSE_CTRT_MAIN
erpContractDO.setContractMainId(id);
// 操作标识:OPTN_ID TODO
/*
1、先调用009ERP接口查询合同信息
2、如果009接口返回值中“合同编号”字段存在值并且与传入的相同则OPTN_ID值为“1”
3、如果009接口返回值中“合同编号”字段不存在值根据合同主键查询映射表中是否存在没有删除的数据如果有值为“1”如果没有值为“0”
*/
// 合同编号:CTRT_PPR_NUM
erpContractDO.setContractPaperNumber(contractMainDO.getContractPaperNumber());
// 合同名称:CTRT_NAME
erpContractDO.setContractName(contractMainDO.getContractName());
// 合同类型编号:CTRT_TP_NUM
erpContractDO.setContractTypeNumber(contractMainDO.getConstructionTypeNumber());
// 合同类型名称:CTRT_TP_NAME
erpContractDO.setContractTypeName(contractMainDO.getConstructionTypeName());
// 合同类别:CTRT_CTGR
erpContractDO.setContractCategory(contractMainDO.getCategory());
// 是否虚拟合同:IS_VRTL_CTRT
erpContractDO.setIsVirtualContract(contractMainDO.getContractVirtual());
// 客商编号:SPLR_NUM 根据合同主表的收支方向判断如果为“支出”值为“ERP乙方公司编码”反之为“ERP甲方公司编码”
// erpContractDO.setSupplierNumber();
// 客商名称:SPLR_NAME 根据合同主表的收支方向判断如果为“支出”值为“ERP乙方公司名称”反之为“ERP甲方公司名称”
// erpContractDO.setSupplierName();
// 代理方:AGT
erpContractDO.setAgent(contractMainDO.getAgent());
// 合同实施主体编号:CTRT_IMPL_NUM 根据合同主表的收支方向判断如果为“支出”值为“ERP甲方公司编码”反之为“ERP乙方公司编码”
// erpContractDO.setContractImplementNumber();
// 合同签订主体编号:CTRT_SGN_NUM 根据合同主表的收支方向判断如果为“支出”值为“ERP甲方公司名称”反之为“ERP乙方公司名称”
// erpContractDO.setContractSignNumber();
// 合同签订日期:SGN_DT
if (contractMainDO.getSignDate() != null) {
erpContractDO.setSignDate(contractMainDO.getSignDate().toLocalDate());
}
// 合同起始日期:STRT_DT
if (contractMainDO.getStartDate() != null) {
erpContractDO.setStartDate(contractMainDO.getStartDate().toLocalDate());
}
// 合同终止日期:STOP_DT
if (contractMainDO.getEndDate() != null) {
erpContractDO.setStopDate(contractMainDO.getEndDate().toLocalDate());
}
// 币种编号:CUR
erpContractDO.setCurrency(contractMainDO.getCurrency());
// 合同总金额(原币-含税):SRC_AMT
erpContractDO.setSourceAmount(contractMainDO.getCooAmount());
// 合同总金额(本位币-含税):BSC_AMT
erpContractDO.setBasicAmount(contractMainDO.getBasicAmount());
// 变更后合同总金额(原币-含税):CHG_SRC_AMT
erpContractDO.setChangeSourceAmount(contractMainDO.getChangeCooAmount());
// 变更后合同总金额(本位币-含税):CHG_BSC_AMT
erpContractDO.setChangeBasicAmount(contractMainDO.getChangeBasicAmount());
// 合同状态编号:STS_NUM 参照060接口
// erpContractDO.setStatusNumber();
// 合同状态名称:STS_NAME 参照060接口
// erpContractDO.setStatusName();
// 是否有预付款:IS_PPYM
erpContractDO.setIsPrepayment(contractMainDO.getHasPrepayment());
// 预付款比例:PPYM_RTIO
erpContractDO.setPrepaymentRatio(contractMainDO.getPrepaymentRatio());
// 预付款金额:PPYM_AMT
erpContractDO.setPrepaymentAmount(contractMainDO.getPrepaymentAmount());
// 履约保证金-变更前(原币):SRC_BFR_BND
erpContractDO.setSourceBeforeBond(contractMainDO.getChangeCooAmountDeposit());
// 履约保证金-变更前(本位币):BSC_BFR_BND
erpContractDO.setBasicBeforeBond(contractMainDO.getChangeBasicAmountDeposit());
// 履约保证金-变更后(原币):SRC_AFT_BND
erpContractDO.setSourceAfterBond(contractMainDO.getChangeCooAmountDeposit());
// 履约保证金-变更后(本位币):BSC_AFT_BND
erpContractDO.setBasicAfterBond(contractMainDO.getChangeBasicAmountDeposit());
// 是否含质保金:IS_QUA_AMT
erpContractDO.setIsQualityassuranceAmount(contractMainDO.getHasQualityAmount());
// 质保金比例:QUA_RTIO
erpContractDO.setQualityassuranceRatio(contractMainDO.getQualityRatio());
// 质保金金额:QUA_AMT
erpContractDO.setQualityassuranceAmount(contractMainDO.getQualityAmount());
// 是否内部企业:IS_INTL
erpContractDO.setIsInternal(contractMainDO.getIsInternal());
// 收支性质:NTR
erpContractDO.setNature(contractMainDO.getDirection());
// 备注信息:RMK
erpContractDO.setRemark(contractMainDO.getRemark());
// 是否框架合同:IS_FMWK
erpContractDO.setIsFramework(contractMainDO.getIsFramework());
// 境内/境外:IS_DOM
erpContractDO.setIsDomestic(contractMainDO.getIsDomestic());
// 达到收款条件金额:PYEE_CND_AMT
erpContractDO.setPayeeConditionAmount(contractMainDO.getPayeeConditionAmount());
// 建筑服务发生地:ARCH_SVC_PLCE
erpContractDO.setArchitectureServicePlace(contractMainDO.getArchitectureServicePlace());
// 调用ERP模块
}
});
}
/**
* 校验合同内容
*
@@ -873,7 +989,7 @@ public class ContractServiceImpl implements ContractService {
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_HS_DPST_LABEL);
}
// 是否有履约保证金为是的情况
if (ErpCtrtYesNoEnum.YES.getCode().equals(contract.getHasDeposit())) {
if (DictEnum.ERP_CTRT_YN_YES.getCode().equals(contract.getHasDeposit())) {
// 原币履约保证金不能为空
if (contract.getCooAmountDeposit() == null) {
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_COO_AMT_DPST_LABEL);
@@ -888,7 +1004,7 @@ public class ContractServiceImpl implements ContractService {
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_HS_PPYM_LABEL);
}
// 是否有预付款为是的情况
if (ErpCtrtYesNoEnum.YES.getCode().equals(contract.getHasPrepayment())) {
if (DictEnum.ERP_CTRT_YN_YES.getCode().equals(contract.getHasPrepayment())) {
// 预付款比例不能为空
if (contract.getPrepaymentRatio() == null) {
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_PPYM_RTIO_LABEL);
@@ -903,7 +1019,7 @@ public class ContractServiceImpl implements ContractService {
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_HS_QLT_AMT_LABEL);
}
// 是否有质保金为是的情况
if (ErpCtrtYesNoEnum.YES.getCode().equals(contract.getHasPrepayment())) {
if (DictEnum.ERP_CTRT_YN_YES.getCode().equals(contract.getHasPrepayment())) {
// 质保金比例不能为空
if (contract.getQualityRatio() == null) {
throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_QLT_RTIO_LABEL);