diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractServiceImpl.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractServiceImpl.java index 868d3bd..6cf1aec 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractServiceImpl.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractServiceImpl.java @@ -27,6 +27,7 @@ import com.zt.plat.module.contractorder.enums.ProcessConstants; import com.zt.plat.module.contractorder.enums.TableFieldConstants; import com.zt.plat.module.contractorder.enums.contract.DictEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpContractPageReqVO; +import com.zt.plat.module.erp.controller.admin.erp.vo.ErpContractSaveReqVO; import com.zt.plat.module.erp.dal.dataobject.erp.ErpContractDO; import com.zt.plat.module.erp.service.erp.ErpCompanyService; import com.zt.plat.module.erp.service.erp.ErpContractService; @@ -838,9 +839,9 @@ public class ContractServiceImpl implements ContractService { if (contractMainDO != null) { // 生成ERP合同映射表 - ErpContractDO erpContractDO = new ErpContractDO(); + ErpContractSaveReqVO erpContractVO = new ErpContractSaveReqVO(); // 合同主信息表主键:BSE_CTRT_MAIN - erpContractDO.setContractMainId(id); + erpContractVO.setContractMainId(id); // 操作标识:OPTN_ID // 1、先调用009ERP接口查询合同信息 ErpContractPageReqVO pageReqVO = new ErpContractPageReqVO(); @@ -863,111 +864,126 @@ public class ContractServiceImpl implements ContractService { PageResult erpContractPage = erpContractService.getErpContractPage(pageReqVO); if (erpContractPage.getTotal() > 0) { // 2、如果009接口返回值中“合同编号”字段存在值,并且与传入的相同,则OPTN_ID值为“1” - erpContractDO.setOperationId("1"); + erpContractVO.setOperationId("1"); } else { // 3、如果009接口返回值中“合同编号”字段不存在值,根据合同主键查询映射表中是否存在没有删除的数据,如果有,值为“1”,如果没有,值为“0” - /*ErpContractDO erpContract = erpContractService.getErpContractByMainId(id); + ErpContractDO erpContract = erpContractService.getErpContractByMainId(id); if (erpContract != null) { - erpContractDO.setOperationId("1"); + erpContractVO.setOperationId("1"); } else { - erpContractDO.setOperationId("0"); - }*/ + erpContractVO.setOperationId("0"); + } } - // erpContractDO.setOperationId(); // 合同编号:CTRT_PPR_NUM - erpContractDO.setContractPaperNumber(contractMainDO.getContractPaperNumber()); + erpContractVO.setContractPaperNumber(contractMainDO.getContractPaperNumber()); // 合同名称:CTRT_NAME - erpContractDO.setContractName(contractMainDO.getContractName()); + erpContractVO.setContractName(contractMainDO.getContractName()); // 合同类型编号:CTRT_TP_NUM - erpContractDO.setContractTypeNumber(contractMainDO.getConstructionTypeNumber()); + erpContractVO.setContractTypeNumber(contractMainDO.getConstructionTypeNumber()); // 合同类型名称:CTRT_TP_NAME - erpContractDO.setContractTypeName(contractMainDO.getConstructionTypeName()); + erpContractVO.setContractTypeName(contractMainDO.getConstructionTypeName()); // 合同类别:CTRT_CTGR - erpContractDO.setContractCategory(contractMainDO.getCategory()); + erpContractVO.setContractCategory(contractMainDO.getCategory()); // 是否虚拟合同:IS_VRTL_CTRT - erpContractDO.setIsVirtualContract(contractMainDO.getContractVirtual()); + erpContractVO.setIsVirtualContract(contractMainDO.getContractVirtual()); // 客商编号:SPLR_NUM 根据合同主表的收支方向判断,如果为“支出”,值为“ERP乙方公司编码”,反之为“ERP甲方公司编码” // 客商名称:SPLR_NAME 根据合同主表的收支方向判断,如果为“支出”,值为“ERP乙方公司名称”,反之为“ERP甲方公司名称” if (DictEnum.ERP_RCV_DLVY_EXPENSES.getCode().equals(contractMainDO.getDirection())) { - erpContractDO.setSupplierNumber(contractMainDO.getSalesCompanyNumber()); - erpContractDO.setSupplierName(contractMainDO.getSalesCompanyName()); + erpContractVO.setSupplierNumber(contractMainDO.getSalesCompanyNumber()); + erpContractVO.setSupplierName(contractMainDO.getSalesCompanyName()); } else if (DictEnum.ERP_RCV_DLVY_INCOME.getCode().equals(contractMainDO.getDirection())) { - erpContractDO.setSupplierNumber(contractMainDO.getPurchaseCompanyNumber()); - erpContractDO.setSupplierName(contractMainDO.getPurchaseCompanyName()); + erpContractVO.setSupplierNumber(contractMainDO.getPurchaseCompanyNumber()); + erpContractVO.setSupplierName(contractMainDO.getPurchaseCompanyName()); } // 代理方:AGT - erpContractDO.setAgent(contractMainDO.getAgent()); + erpContractVO.setAgent(contractMainDO.getAgent()); // 合同实施主体编号:CTRT_IMPL_NUM 根据合同主表的收支方向判断,如果为“支出”,值为“ERP甲方公司编码”,反之为“ERP乙方公司编码” // 合同签订主体编号:CTRT_SGN_NUM 根据合同主表的收支方向判断,如果为“支出”,值为“ERP甲方公司名称”,反之为“ERP乙方公司名称” if (DictEnum.ERP_RCV_DLVY_EXPENSES.getCode().equals(contractMainDO.getDirection())) { - erpContractDO.setContractImplementNumber(contractMainDO.getPurchaseCompanyNumber()); - erpContractDO.setContractSignNumber(contractMainDO.getPurchaseCompanyName()); + erpContractVO.setContractImplementNumber(contractMainDO.getPurchaseCompanyNumber()); + erpContractVO.setContractSignNumber(contractMainDO.getPurchaseCompanyName()); } else if (DictEnum.ERP_RCV_DLVY_INCOME.getCode().equals(contractMainDO.getDirection())) { - erpContractDO.setContractImplementNumber(contractMainDO.getSalesCompanyNumber()); - erpContractDO.setContractSignNumber(contractMainDO.getSalesCompanyName()); + erpContractVO.setContractImplementNumber(contractMainDO.getSalesCompanyNumber()); + erpContractVO.setContractSignNumber(contractMainDO.getSalesCompanyName()); } // 合同签订日期:SGN_DT if (contractMainDO.getSignDate() != null) { - erpContractDO.setSignDate(contractMainDO.getSignDate().toLocalDate()); + erpContractVO.setSignDate(contractMainDO.getSignDate().toLocalDate()); } // 合同起始日期:STRT_DT if (contractMainDO.getStartDate() != null) { - erpContractDO.setStartDate(contractMainDO.getStartDate().toLocalDate()); + erpContractVO.setStartDate(contractMainDO.getStartDate().toLocalDate()); } // 合同终止日期:STOP_DT if (contractMainDO.getEndDate() != null) { - erpContractDO.setStopDate(contractMainDO.getEndDate().toLocalDate()); + erpContractVO.setStopDate(contractMainDO.getEndDate().toLocalDate()); } // 币种编号:CUR - erpContractDO.setCurrency(contractMainDO.getCurrency()); + erpContractVO.setCurrency(contractMainDO.getCurrency()); // 合同总金额(原币-含税):SRC_AMT - erpContractDO.setSourceAmount(contractMainDO.getCooAmount()); + erpContractVO.setSourceAmount(contractMainDO.getCooAmount()); // 合同总金额(本位币-含税):BSC_AMT - erpContractDO.setBasicAmount(contractMainDO.getBasicAmount()); + erpContractVO.setBasicAmount(contractMainDO.getBasicAmount()); // 变更后合同总金额(原币-含税):CHG_SRC_AMT - erpContractDO.setChangeSourceAmount(contractMainDO.getChangeCooAmount()); + erpContractVO.setChangeSourceAmount(contractMainDO.getChangeCooAmount()); // 变更后合同总金额(本位币-含税):CHG_BSC_AMT - erpContractDO.setChangeBasicAmount(contractMainDO.getChangeBasicAmount()); + erpContractVO.setChangeBasicAmount(contractMainDO.getChangeBasicAmount()); // 合同状态编号:STS_NUM 参照060接口 - erpContractDO.setStatusNumber(DictEnum.SUBMIT_ERP_CTRT_STS_EF.getCode()); + erpContractVO.setStatusNumber(DictEnum.SUBMIT_ERP_CTRT_STS_EF.getCode()); // 合同状态名称:STS_NAME 参照060接口 - erpContractDO.setStatusName(DictEnum.SUBMIT_ERP_CTRT_STS_EF.getLabel()); + erpContractVO.setStatusName(DictEnum.SUBMIT_ERP_CTRT_STS_EF.getLabel()); // 是否有预付款:IS_PPYM - erpContractDO.setIsPrepayment(contractMainDO.getHasPrepayment()); + erpContractVO.setIsPrepayment(contractMainDO.getHasPrepayment()); // 预付款比例:PPYM_RTIO - erpContractDO.setPrepaymentRatio(contractMainDO.getPrepaymentRatio()); + erpContractVO.setPrepaymentRatio(contractMainDO.getPrepaymentRatio()); // 预付款金额:PPYM_AMT - erpContractDO.setPrepaymentAmount(contractMainDO.getPrepaymentAmount()); + erpContractVO.setPrepaymentAmount(contractMainDO.getPrepaymentAmount()); // 履约保证金-变更前(原币):SRC_BFR_BND - erpContractDO.setSourceBeforeBond(contractMainDO.getChangeCooAmountDeposit()); + erpContractVO.setSourceBeforeBond(contractMainDO.getChangeCooAmountDeposit()); // 履约保证金-变更前(本位币):BSC_BFR_BND - erpContractDO.setBasicBeforeBond(contractMainDO.getChangeBasicAmountDeposit()); + erpContractVO.setBasicBeforeBond(contractMainDO.getChangeBasicAmountDeposit()); // 履约保证金-变更后(原币):SRC_AFT_BND - erpContractDO.setSourceAfterBond(contractMainDO.getChangeCooAmountDeposit()); + erpContractVO.setSourceAfterBond(contractMainDO.getChangeCooAmountDeposit()); // 履约保证金-变更后(本位币):BSC_AFT_BND - erpContractDO.setBasicAfterBond(contractMainDO.getChangeBasicAmountDeposit()); + erpContractVO.setBasicAfterBond(contractMainDO.getChangeBasicAmountDeposit()); // 是否含质保金:IS_QUA_AMT - erpContractDO.setIsQualityassuranceAmount(contractMainDO.getHasQualityAmount()); + erpContractVO.setIsQualityassuranceAmount(contractMainDO.getHasQualityAmount()); // 质保金比例:QUA_RTIO - erpContractDO.setQualityassuranceRatio(contractMainDO.getQualityRatio()); + erpContractVO.setQualityassuranceRatio(contractMainDO.getQualityRatio()); // 质保金金额:QUA_AMT - erpContractDO.setQualityassuranceAmount(contractMainDO.getQualityAmount()); + erpContractVO.setQualityassuranceAmount(contractMainDO.getQualityAmount()); // 是否内部企业:IS_INTL - erpContractDO.setIsInternal(contractMainDO.getIsInternal()); + erpContractVO.setIsInternal(contractMainDO.getIsInternal()); // 收支性质:NTR - erpContractDO.setNature(contractMainDO.getDirection()); + erpContractVO.setNature(contractMainDO.getDirection()); // 备注信息:RMK - erpContractDO.setRemark(contractMainDO.getRemark()); + erpContractVO.setRemark(contractMainDO.getRemark()); // 是否框架合同:IS_FMWK - erpContractDO.setIsFramework(contractMainDO.getIsFramework()); + erpContractVO.setIsFramework(contractMainDO.getIsFramework()); // 境内/境外:IS_DOM - erpContractDO.setIsDomestic(contractMainDO.getIsDomestic()); + erpContractVO.setIsDomestic(contractMainDO.getIsDomestic()); // 达到收款条件金额:PYEE_CND_AMT - erpContractDO.setPayeeConditionAmount(contractMainDO.getPayeeConditionAmount()); + erpContractVO.setPayeeConditionAmount(contractMainDO.getPayeeConditionAmount()); // 建筑服务发生地:ARCH_SVC_PLCE - erpContractDO.setArchitectureService‌Place(contractMainDO.getArchitectureServicePlace()); + erpContractVO.setArchitectureService‌Place(contractMainDO.getArchitectureServicePlace()); + + // 公司编号 + erpContractVO.setCompanyId(contractMainDO.getCompanyId()); + // 公司名称 + erpContractVO.setCompanyName(contractMainDO.getCompanyName()); + // 部门编号 + erpContractVO.setDeptId(contractMainDO.getDeptId()); + // 部门名称 + erpContractVO.setDeptName(contractMainDO.getDeptName()); + // 岗位编号 + erpContractVO.setPostId(contractMainDO.getPostId()); + // 创建者 + erpContractVO.setCreatorName(contractMainDO.getCreatorName()); + // 更新者 + erpContractVO.setUpdaterName(contractMainDO.getUpdaterName()); // 调用ERP模块 + erpContractService.submitErp(erpContractVO); } }); } diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpContractSaveReqVO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpContractSaveReqVO.java index ea3330d..af1e079 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpContractSaveReqVO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpContractSaveReqVO.java @@ -199,4 +199,24 @@ public class ErpContractSaveReqVO { @Schema(description = "达到收款条件金额;销售合同,且类型为SAP02COSR必填") private BigDecimal payeeConditionAmount; + @Schema(description = "公司编号") + private Long companyId; + + @Schema(description = "公司名称") + private String companyName; + + @Schema(description = "部门编号") + private Long deptId; + + @Schema(description = "部门名称") + private String deptName; + + @Schema(description = "岗位编号") + private Long postId; + + @Schema(description = "创建者") + private String creatorName; + + @Schema(description = "更新者") + private String updaterName; } \ No newline at end of file diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpContractService.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpContractService.java index cef2ab5..ca681b4 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpContractService.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpContractService.java @@ -70,4 +70,12 @@ public interface ErpContractService { PageResult getErpContractPage(ErpContractPageReqVO pageReqVO); void callErpRfcInterface(); + + /** + * 合同提交ERP + * + * @param erpContractVO ERP合同映射数据 + * @return ERP合同映射 + */ + String submitErp(ErpContractSaveReqVO erpContractVO); } \ No newline at end of file diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpContractServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpContractServiceImpl.java index 4b5e095..78cd703 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpContractServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpContractServiceImpl.java @@ -6,6 +6,9 @@ import com.alibaba.fastjson.JSONObject; import com.xxl.job.core.handler.annotation.XxlJob; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; +import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; +import com.zt.plat.module.erp.api.ErpExternalApi; +import com.zt.plat.module.erp.api.dto.ErpSubmitReqDTO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpContractPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpContractRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpContractSaveReqVO; @@ -46,6 +49,9 @@ public class ErpContractServiceImpl implements ErpContractService { @Resource private ErpConfig erpConfig; + @Resource + public ErpExternalApi erpExternalApi; + @Override public ErpContractRespVO createErpContract(ErpContractSaveReqVO createReqVO) { // 插入 @@ -226,6 +232,121 @@ public class ErpContractServiceImpl implements ErpContractService { } } + @Override + public String submitErp(ErpContractSaveReqVO erpContractVO) { + + // 转换为DO + ErpContractDO erpContract = BeanUtils.toBean(erpContractVO, ErpContractDO.class); + + // 根据合同主信息ID查询合同映射 + ErpContractDO erpContractDO = getErpContractByMainId(erpContract.getContractMainId()); + if (erpContractDO == null) { + // 不存在映射表则新增 + erpContractMapper.insert(erpContract); + } else { + // 存在映射表则更新 + erpContract.setId(erpContractDO.getId()); + erpContractMapper.updateById(erpContract); + } + + // 构建ERP接口的参数 + ErpSubmitReqDTO erpSubmitReqDTO = new ErpSubmitReqDTO(); + erpSubmitReqDTO.setFuncnr("060"); + erpSubmitReqDTO.setBskey(erpContract.getContractPaperNumber()); + erpSubmitReqDTO.setUsrid(SecurityFrameworkUtils.getLoginUserId().toString()); + erpSubmitReqDTO.setUsrnm(SecurityFrameworkUtils.getLoginUserNickname()); + + Map head = new HashMap<>(); + // CZBS 操作标识 枚举值0:新增 1:修改 + head.put("CZBS", erpContract.getOperationId()); + // HTBH 合同编号 + head.put("HTBH", erpContract.getContractPaperNumber()); + // HTMC 合同名称 + head.put("HTMC", erpContract.getContractName()); + // HTLXBH 合同类型编号 + head.put("HTLXBH", erpContract.getContractTypeNumber()); + // HTLXMC 合同类型名称 + head.put("HTLXMC", erpContract.getContractTypeName()); + // HTLB 合同类别 枚举值:1:购销合同 + head.put("HTLB", erpContract.getContractCategory()); + // SFXNHT 是否虚拟合同 枚举值 0:否 1:是 + head.put("SFXNHT", erpContract.getIsVirtualContract()); + // WLDWBH 客户/供应商编号 如果合同类型是收入类的,传客户编号和客户名称; + head.put("WLDWBH", erpContract.getSupplierNumber()); + // WLDWMC 客户/供应商名称 如果合同类型是支出类的,传供应商编号和供应商名称; + head.put("WLDWMC", erpContract.getSupplierName()); + // ZLIFNR 代理方 + head.put("ZLIFNR", erpContract.getAgent()); + // HTSSZTBH 合同实施主体编号 SAP公司代码 + head.put("HTSSZTBH", erpContract.getContractImplementNumber()); + // HTQDZTBH 合同签订主体编号 SAP公司代码 + head.put("HTQDZTBH", erpContract.getContractSignNumber()); + // HTQDRQ 合同签订日期 格式:YYYY-MM-DD + head.put("HTQDRQ", erpContract.getSignDate()); + // HTQSRQ 合同起始日期 格式:YYYY-MM-DD + head.put("HTQSRQ", erpContract.getStartDate()); + // HTZZRQ 合同终止日期 格式:YYYY-MM-DD + head.put("HTZZRQ", erpContract.getStopDate()); + // BZBH 币种编号 CNY、USD… + head.put("BZBH", erpContract.getCurrency()); + // HTYBZJE 合同总金额(原币-含税) + head.put("HTYBZJE", erpContract.getSourceAmount()); + // HTBWBZJE 合同总金额(本位币-含税) + head.put("HTBWBZJE", erpContract.getBasicAmount()); + // BGHHTYBZJE 变更后合同总金额(原币-含税) 如果未做合同变更,金额等于合同总金额(原币-含税) + head.put("BGHHTYBZJE", erpContract.getChangeSourceAmount()); + // BGHHTBWBZJE 变更后合同总金额(本位币-含税) 如果未做合同变更,金额等于合同总金额(本位币-含税) + head.put("BGHHTBWBZJE", erpContract.getChangeBasicAmount()); + // HTZTBH 合同状态编号 + head.put("HTZTBH", erpContract.getStatusNumber()); + // HTZTMC 合同状态名称 + head.put("HTZTMC", erpContract.getStatusName()); + // SFYYFK 是否有预付款 枚举值 0:否 1:是 + head.put("SFYYFK", erpContract.getIsPrepayment()); + // YFKBL 预付款比例 如果是否有预付款为1,则必填 + head.put("YFKBL", erpContract.getPrepaymentRatio()); + // YFKJE 预付款金额 + head.put("YFKJE", erpContract.getPrepaymentAmount()); + // LYBZJBGQYB 履约保证金-变更前(原币) + head.put("LYBZJBGQYB", erpContract.getSourceBeforeBond()); + // LYBZJBGQBWB 履约保证金-变更前(本位币) + head.put("LYBZJBGQBWB", erpContract.getBasicBeforeBond()); + // LYBZJBGHYB 履约保证金-变更后(原币) + head.put("LYBZJBGHYB", erpContract.getSourceAfterBond()); + // LYBZJBGHBWB 履约保证金-变更后(本位币) + head.put("LYBZJBGHBWB", erpContract.getBasicAfterBond()); + // SFHZBJ 是否含质保金 枚举值 0:否 1:是 + head.put("SFHZBJ", erpContract.getIsQualityassuranceAmount()); + // ZBJBL 质保金比例 如果是否含质保金为1,则必填 + head.put("ZBJBL", erpContract.getQualityassuranceRatio()); + // BZJJE 质保金金额 + head.put("BZJJE", erpContract.getQualityassuranceAmount()); + // SFNBQY 是否内部企业 枚举值 0:否 1:是 + head.put("SFNBQY", erpContract.getIsInternal()); + // SZXZ 收支性质 枚举值 1:收入 2:支出 + head.put("SZXZ", erpContract.getNature()); + // BZXX 备注信息 + head.put("BZXX", erpContract.getRemark()); + // SFKJHT 是否框架合同 0:否;1:是;当等于1时:合同总金额(本币)、合同总金额(原币)、变更后合同总金额(原币-含税)、变更后合同总金额(本位币-含税)赋默认值为:1000000000000000.00 + head.put("SFKJHT", erpContract.getIsFramework()); + // JNJW 境内/境外 枚举值 0:境内 1:境外 + head.put("JNJW", erpContract.getIsDomestic()); + // JZFWFSD 建筑服务发生地 + head.put("JZFWFSD", erpContract.getArchitectureService‌Place()); + // DDSKJE 达到收款条件金额 + head.put("DDSKJE", erpContract.getPayeeConditionAmount()); + + Map req = new HashMap<>(); + req.put("head", head); + erpSubmitReqDTO.setReq(req); + + HashMap response = erpExternalApi.submitDataToErp(erpSubmitReqDTO); + + System.out.println(response.get("resStr")); + + return ""; + } + /** * 处理数据,区分新增和更新 */