国贸2.0系统合同调用接口生成内部供应链的合同:根据客商信息列表提交多个合同映射到erp

This commit is contained in:
guojunyun
2025-10-28 17:14:25 +08:00
parent 1585b5611a
commit 520673fd0e
7 changed files with 58 additions and 35 deletions

View File

@@ -30,4 +30,7 @@ public class Partner {
private String partnerType; // 客商类型
@Schema(description = "境内/外")
private String domesticOrOverseas; // 境内/外
@Schema(description = "erp合同编号")
private String erpContractPaperNumber; // erp合同编号
}

View File

@@ -28,5 +28,6 @@ public interface ErrorCodeConstants {
ErrorCode CONTRACT_STATUS_NOT_SUBMIT_ERP = new ErrorCode(1_027_000_013, "{}状态合同不允许提交ERP");
ErrorCode CONTRACT_ORDER_EXISTS = new ErrorCode(1_027_000_014, "关联订单已存在");
ErrorCode CONTRACT_SUBMIT_ERP_FAIL = new ErrorCode(1_027_000_015, "合同提交erp失败{}");
ErrorCode CONTRACT_UNKNOWN_OPERATE = new ErrorCode(1_027_000_015, "未知的操作");
ErrorCode CONTRACT_UNKNOWN_OPERATE = new ErrorCode(1_027_000_016, "未知的操作");
ErrorCode CONTRACT_PARTNER_NOT_EXISTS = new ErrorCode(1_027_000_017, "客商信息不存在");
}

View File

@@ -186,17 +186,47 @@ public class ContractApiImpl implements ContractApi {
throw exception(CONTRACT_UNKNOWN_OPERATE);
}
// 提交合同到erp
// 生成ERP合同映射表
ErpContractSaveReqVO erpContractVO = contractService.getErpContract(contractMainDO);
// 根据客商信息列表提交多个合同映射到erp
if (reqVO.getPartnerList() == null || reqVO.getPartnerList().isEmpty()) {
throw exception(CONTRACT_PARTNER_NOT_EXISTS);
}
// 调用ERP模块
JSONObject erpResult = contractService.sendToErp(erpContractVO);
log.info("合同提交ERP结果{}", erpResult);
// 合同主信息-合同编号
String contractPaperNumber = contractMainDO.getContractPaperNumber();
// 合同主信息-合同名称
String contractName = contractMainDO.getContractName();
for (int i = 0; i < reqVO.getPartnerList().size(); i++) {
Partner partner = reqVO.getPartnerList().get(i);
// 调用ERP失败
if (!erpResult.getBool("success")) {
throw exception(CONTRACT_SUBMIT_ERP_FAIL, erpResult.getStr("errMsg"));
// 根据客商信息设置合同信息
// 合同编号
contractMainDO.setContractPaperNumber(contractPaperNumber + "_" + String.format("%03d", (i+1)));
reqVO.getPartnerList().get(i)
.setErpContractPaperNumber(contractPaperNumber + "_" + String.format("%03d", (i+1)));
// 合同名称
contractMainDO.setContractName(contractName + "_" + String.format("%03d", (i+1)));
// 境内/境外 -> 客商信息:境内/外
contractMainDO.setIsDomestic(partner.getDomesticOrOverseas());
// 乙方公司编号(销售方) -> 客商信息:供应商代码
contractMainDO.setSalesCompanyNumber(partner.getPartnerCode());
// ERP乙方公司编码
contractMainDO.setErpSalesCompanyNumber(partner.getPartnerCode());
// 乙方公司名称 -> 客商信息:供应商名称
contractMainDO.setSalesCompanyName(partner.getPartnerName());
// ERP乙方公司名称
contractMainDO.setErpSalesCompanyName(partner.getPartnerName());
// 生成ERP合同映射表
ErpContractSaveReqVO erpContractVO = contractService.getErpContract(contractMainDO);
// 调用ERP模块
JSONObject erpResult = contractService.sendToErp(erpContractVO);
log.info("合同提交ERP结果{}", erpResult);
// 调用ERP失败
if (!erpResult.getBool("success")) {
throw exception(CONTRACT_SUBMIT_ERP_FAIL, erpResult.getStr("errMsg"));
}
}
// 删除动态条款信息
@@ -339,6 +369,8 @@ public class ContractApiImpl implements ContractApi {
// 合同主信息表映射
ContractMainDO contractMainDO = new ContractMainDO();
// 系统合同编号
contractMainDO.setSystemContractNumber(contractService.generateSystemContractNumber("SAP02NCOZC"));
// 合同编号
contractMainDO.setContractPaperNumber(reqVO.getContractCode());
// 合同名称
@@ -385,10 +417,6 @@ public class ContractApiImpl implements ContractApi {
contractMainDO.setDirection(DictEnum.ERP_RCV_DLVY_EXPENSES.getCode());
// 是否框架合同
contractMainDO.setIsFramework(reqVO.getIsFramework());
// 境内/境外 -> 客商信息:境内/外
if (reqVO.getPartnerList() != null && !reqVO.getPartnerList().isEmpty()) {
contractMainDO.setIsDomestic(reqVO.getPartnerList().get(0).getDomesticOrOverseas());
}
// 建筑服务发生地 默认值:NULL
// 达到收款条件金额 默认值:NULL
// 是否有履约保证金 默认值:否
@@ -410,18 +438,6 @@ public class ContractApiImpl implements ContractApi {
contractMainDO.setErpPurchaseCompanyName("");
// 甲方地址 默认值:NULL
// 甲方法定代表人 默认值:NULL
// 乙方公司编号(销售方) -> 客商信息:供应商代码
if (reqVO.getPartnerList() != null && !reqVO.getPartnerList().isEmpty()) {
contractMainDO.setSalesCompanyNumber(reqVO.getPartnerList().get(0).getPartnerCode());
// ERP乙方公司编码
contractMainDO.setErpSalesCompanyNumber(reqVO.getPartnerList().get(0).getPartnerCode());
}
// 乙方公司名称 -> 客商信息:供应商名称
if (reqVO.getPartnerList() != null && !reqVO.getPartnerList().isEmpty()) {
contractMainDO.setSalesCompanyName(reqVO.getPartnerList().get(0).getPartnerName());
// ERP乙方公司名称
contractMainDO.setErpSalesCompanyName(reqVO.getPartnerList().get(0).getPartnerName());
}
// 乙方地址 默认值:NULL
// 乙方企业负责人 默认值:NULL

View File

@@ -207,4 +207,6 @@ public interface ContractService {
JSONObject sendToErp(ErpContractSaveReqVO erpContractVO);
ErpContractSaveReqVO getErpContract(ContractMainDO contractMainDO);
String generateSystemContractNumber(String category);
}

View File

@@ -1635,7 +1635,7 @@ public class ContractServiceImpl implements ContractService {
operationId = "1";
} else {
// 3、如果009接口返回值中“合同编号”字段不存在值根据合同主键查询映射表中是否存在没有删除的数据如果有值为“1”如果没有值为“0”
ErpContractDO erpContract = erpContractService.getErpContractByMainId(contractMainDO.getId());
ErpContractDO erpContract = erpContractService.getErpContractByPaperNumber(contractMainDO.getContractPaperNumber());
if (erpContract != null) {
operationId = "1";
} else {
@@ -1971,7 +1971,8 @@ public class ContractServiceImpl implements ContractService {
*
* @return 系统合同编号
*/
private String generateSystemContractNumber(String category) {
@Override
public String generateSystemContractNumber(String category) {
// 单据名称(拼音)
String documentName = "XTHT";

View File

@@ -55,12 +55,12 @@ public interface ErpContractService {
ErpContractDO getErpContract(Long id);
/**
* 获得ERP合同映射通过合同主信息主键
* 获得ERP合同映射通过合同编号
*
* @param contractMainId 合同主信息主键
* @param paperNumber 合同编号
* @return ERP合同映射
*/
ErpContractDO getErpContractByMainId(Long contractMainId);
ErpContractDO getErpContractByPaperNumber(String paperNumber);
/**
* 获得ERP合同映射分页

View File

@@ -104,8 +104,8 @@ public class ErpContractServiceImpl implements ErpContractService {
}
@Override
public ErpContractDO getErpContractByMainId(Long contractMainId) {
return erpContractMapper.selectOne("CTRT_MAIN_ID", contractMainId);
public ErpContractDO getErpContractByPaperNumber(String paperNumber) {
return erpContractMapper.selectOne("CTRT_PPR_NUM", paperNumber);
}
@Override
@@ -231,8 +231,8 @@ public class ErpContractServiceImpl implements ErpContractService {
// 转换为DO
ErpContractDO erpContract = BeanUtils.toBean(erpContractVO, ErpContractDO.class);
// 根据合同主信息ID查询合同映射
ErpContractDO erpContractDO = getErpContractByMainId(erpContract.getContractMainId());
// 根据合同编号查询合同映射
ErpContractDO erpContractDO = getErpContractByPaperNumber(erpContract.getContractPaperNumber());
if (erpContractDO == null) {
// 不存在映射表则新增
erpContract.setDeleted(false);