From a596b6f3207e5b43d24c406e7a1f028f24dca0c0 Mon Sep 17 00:00:00 2001 From: guojunyun Date: Mon, 29 Sep 2025 16:19:38 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=90=88=E5=90=8C=E4=B8=BB=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E5=AD=97=E6=AE=B5=E6=B7=BB=E5=8A=A0=E3=80=81=E5=90=88?= =?UTF-8?q?=E5=90=8C=E6=8F=90=E4=BA=A4=E5=AE=A1=E6=A0=B8=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E3=80=81=E5=90=88=E5=90=8C=E6=96=B0=E5=A2=9E=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/ErrorCodeConstants.java | 1 + .../admin/contract/ContractController.java | 6 +- .../vo/contract/ContractPageReqVO.java | 3 + .../vo/contract/ContractSaveReqVO.java | 101 ++++++++---------- .../vo/contract/ContractViewRespVO.java | 94 ++++++++++++++-- .../dataobject/contract/ContractMainDO.java | 60 +++++++++++ .../mysql/contract/ContractMainMapper.java | 1 + .../service/contract/ContractServiceImpl.java | 39 ++++++- 8 files changed, 232 insertions(+), 73 deletions(-) diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErrorCodeConstants.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErrorCodeConstants.java index ef4c42e..e958890 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErrorCodeConstants.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErrorCodeConstants.java @@ -19,4 +19,5 @@ public interface ErrorCodeConstants { ErrorCode CONTRACT_ID_NOT_EXISTS = new ErrorCode(1_027_000_004, "合同主键为空"); ErrorCode CONTRACT_STATUS_NOT_UPDATE = new ErrorCode(1_027_000_005, "{}合同不允许修改"); ErrorCode CONTRACT_DATA_NOT_EXISTS = new ErrorCode(1_027_000_006, "{}不存在"); + ErrorCode CONTRACT_STATUS_NOT_SUBMIT_APPROVAL = new ErrorCode(1_027_000_005, "{}合同不允许提交审核"); } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/ContractController.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/ContractController.java index ea9ce98..ea93e04 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/ContractController.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/ContractController.java @@ -1,5 +1,6 @@ package com.zt.plat.module.contractorder.controller.admin.contract; +import cn.hutool.json.JSONObject; import com.zt.plat.framework.business.interceptor.BusinessControllerMarker; import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.pojo.PageResult; @@ -43,9 +44,9 @@ public class ContractController implements BusinessControllerMarker { @PostMapping("/create") @Operation(summary = "新增合同") @PreAuthorize("@ss.hasPermission('system:contract:create')") - public CommonResult create(@Valid @RequestBody ContractSaveReqVO reqVO) { + public CommonResult create(@Valid @RequestBody ContractSaveReqVO reqVO) { Long id = contractService.createContract(reqVO); - return success(id); + return success(new JSONObject().putOnce("id", id)); } @GetMapping("/get") @@ -101,7 +102,6 @@ public class ContractController implements BusinessControllerMarker { public void archive() { } - // TODO @GetMapping("/submit/approval") @Operation(summary = "合同提交审批") @PreAuthorize("@ss.hasPermission('system:contract:approval')") diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractPageReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractPageReqVO.java index c451e11..294acac 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractPageReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractPageReqVO.java @@ -20,6 +20,9 @@ public class ContractPageReqVO extends PageParam { @Schema(description = "合同编号;与ERP(HTBH)对应,校验唯一") private String contractPaperNumber; + @Schema(description = "状态", example = "DRAFT") + private String status; + @Schema(description = "甲方公司名称", example = "王五") private String purchaseCompanyName; diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractSaveReqVO.java index beaff54..07a48b7 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractSaveReqVO.java @@ -21,132 +21,144 @@ public class ContractSaveReqVO { @NotNull(message = "步骤不能为空") @Schema(description = "步骤", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty("步骤") private Integer step; + @Schema(description = "交货地点") + private String deliveryAddress; + + @Schema(description = "交货方式(字典:FRCST_ASN)") + private String deliveryWay; + + // 基础信息 + @Schema(description = "附件对象存储") + private String fileObject; + + @Schema(description = "其它附件对象存储") + private String fileObjectOther; + // 合同基本信息 @Schema(description = "甲方公司编号;如果是采购合同,查询组织机构自动带出,且与ERP(HTQDZTBH)对应,如果是销售合同,手动选择,且与ERP(WLDWBH)对应。", example = "甲方公司编号") - @ExcelProperty("甲方公司编号;如果是采购合同,查询组织机构自动带出,且与ERP(HTQDZTBH)对应,如果是销售合同,手动选择,且与ERP(WLDWBH)对应。") private String purchaseCompanyNumber; @Schema(description = "甲方公司名称", example = "甲方公司名称") - @ExcelProperty("甲方公司名称") private String purchaseCompanyName; @Schema(description = "甲方地址", example = "甲方地址") - @ExcelProperty("甲方地址") private String purchaseAddress; @Schema(description = "甲方法定代表人", example = "甲方法定代表人") - @ExcelProperty("甲方法定代表人") private String purchaseLeader; + @Schema(description = "甲方联系人", example = "甲方联系人") + private String purchaseHuman; + + @Schema(description = "甲方电话", example = "甲方电话") + private String purchaseTel; + + @Schema(description = "甲方邮箱", example = "甲方邮箱") + private String purchaseEmail; + + @Schema(description = "甲方传真", example = "甲方传真") + private String purchaseFax; + + @Schema(description = "甲方联系地址", example = "甲方联系地址") + private String purchaseContactAddress; + @Schema(description = "乙方公司编号;如果是销售合同,查询组织机构自动带出,且与ERP(HTQDZTBH)对应,如果是采购合同,手动选择,且与ERP(WLDWBH)对应。", example = "乙方公司编号") - @ExcelProperty("乙方公司编号;如果是销售合同,查询组织机构自动带出,且与ERP(HTQDZTBH)对应,如果是采购合同,手动选择,且与ERP(WLDWBH)对应。") private String salesCompanyNumber; @Schema(description = "乙方公司名称", example = "乙方公司名称") - @ExcelProperty("乙方公司名称") private String salesCompanyName; @Schema(description = "乙方地址", example = "乙方地址") - @ExcelProperty("乙方地址") private String salesAddress; @Schema(description = "乙方企业负责人", example = "乙方企业负责人") - @ExcelProperty("乙方企业负责人") private String salesPurchaseLeader; + @Schema(description = "乙方联系人", example = "乙方联系人") + private String salesHuman; + + @Schema(description = "乙方电话", example = "乙方电话") + private String salesTel; + + @Schema(description = "乙方邮箱", example = "乙方邮箱") + private String salesEmail; + + @Schema(description = "乙方传真", example = "乙方传真") + private String salesFax; + + @Schema(description = "乙方联系地址", example = "乙方联系地址") + private String salesContactAddress; + @NotBlank(message = "合同名称不能为空") @Size(max = 90, message = "合同名称长度不能超过90个字符") @Schema(description = "合同名称;与ERP(HTMC)对应,校验唯一", example = "合同名称") - @ExcelProperty("合同名称;与ERP(HTMC)对应,校验唯一") private String contractName; @Schema(description = "合同编号;与ERP(HTBH)对应,校验唯一", example = "合同编号") - @ExcelProperty("合同编号;与ERP(HTBH)对应,校验唯一") private String contractPaperNumber; - @NotBlank(message = "合同类型不能为空") + // @NotBlank(message = "合同类型不能为空") @Schema(description = "合同类型", example = "PRCH") - @ExcelProperty("合同类型") private String contractType; @Schema(description = "收支性质;与ERP(SZXZ)对应", example = "EXPENSES") - @ExcelProperty("收支性质;与ERP(SZXZ)对应") private String direction; @Schema(description = "签署日期;与ERP(HTQDRQ)对应") - @ExcelProperty("签署日期;与ERP(HTQDRQ)对应") private String signDate; @Schema(description = "开始日期;与ERP(HTQSRQ)对应") - @ExcelProperty("开始日期;与ERP(HTQSRQ)对应") private String startDate; @Schema(description = "结束日期;与ERP(HTZZRQ)对应") - @ExcelProperty("结束日期;与ERP(HTZZRQ)对应") private String endDate; @Schema(description = "签署地", example = "签署地") - @ExcelProperty("签署地") private String signPlace; // 金额信息 @Schema(description = "币种;与ERP(BZBH)对应", example = "CNY") - @ExcelProperty("币种;与ERP(BZBH)对应") private String currency; @Schema(description = "本币金额;与ERP(HTBWBZJE)对应") - @ExcelProperty("本币金额;与ERP(HTBWBZJE)对应") private BigDecimal basicAmount; @Schema(description = "原币金额;与ERP(HTYBZJE)对应,币种不是人民币时,显示并手动填写,如果是人民币,隐藏且等于本币金额") - @ExcelProperty("原币金额;与ERP(HTYBZJE)对应,币种不是人民币时,显示并手动填写,如果是人民币,隐藏且等于本币金额") private BigDecimal cooAmount; @Schema(description = "是否有履约保证金;为是,则保证金必填。", example = "1") - @ExcelProperty("是否有履约保证金;为是,则保证金必填。") private String hasDeposit; @Schema(description = "原币履约保证金;与ERP(LYBZJBGQYB)对应,币种不是人民币时,显示并手动填写,如果是人民币,隐藏且等于本币金额") - @ExcelProperty("原币履约保证金;与ERP(LYBZJBGQYB)对应,币种不是人民币时,显示并手动填写,如果是人民币,隐藏且等于本币金额") private BigDecimal cooAmountDeposit; @Schema(description = "本币履约保证金-变更后;与ERP(LYBZJBGHBWB)对应,拓展信息") - @ExcelProperty("本币履约保证金-变更后;与ERP(LYBZJBGHBWB)对应,拓展信息") private BigDecimal changeBasicAmountDeposit; @Schema(description = "是否有预付款;与ERP(SFYYFK)对应", example = "1") - @ExcelProperty("是否有预付款;与ERP(SFYYFK)对应") private String hasPrepayment; @Schema(description = "预付款比例;与ERP(YFKBL)对应") - @ExcelProperty("预付款比例;与ERP(YFKBL)对应") private BigDecimal prepaymentRatio; @Schema(description = "预付款金额;与ERP(YFKJE)对应") - @ExcelProperty("预付款金额;与ERP(YFKJE)对应") private BigDecimal prepaymentAmount; @Schema(description = "是否有质保金;与ERP(SFHZBJ)对应", example = "1") - @ExcelProperty("是否有质保金;与ERP(SFHZBJ)对应") private String hasQualityAmount; @Schema(description = "质保金比例;与ERP(ZBJBL)对应") - @ExcelProperty("质保金比例;与ERP(ZBJBL)对应") private BigDecimal qualityRatio; @Schema(description = "质保金金额;与ERP(BZJJE)对应") - @ExcelProperty("质保金金额;与ERP(BZJJE)对应") private BigDecimal qualityAmount; @Schema(description = "是否先款后货", example = "1") - @ExcelProperty("是否先款后货") private String hasPayable; @Schema(description = "备注;与ERP(BZXX)对应", example = "备注") - @ExcelProperty("备注;与ERP(BZXX)对应") private String remark; // 物料信息 @@ -154,72 +166,49 @@ public class ContractSaveReqVO { // 扩展信息 @Schema(description = "原币金额-变更后;与ERP(BGHHTYBZJE)对应,拓展信息") - @ExcelProperty("原币金额-变更后;与ERP(BGHHTYBZJE)对应,拓展信息") private BigDecimal changeCooAmount; @Schema(description = "本币金额-变更后;与ERP(BGHHTBWBZJE)对应,拓展信息") - @ExcelProperty("本币金额-变更后;与ERP(BGHHTBWBZJE)对应,拓展信息") private BigDecimal changeBasicAmount; @Schema(description = "原币履约保证金-变更后;与ERP(LYBZJBGHYB)对应,拓展信息") - @ExcelProperty("原币履约保证金-变更后;与ERP(LYBZJBGHYB)对应,拓展信息") private BigDecimal changeCooAmountDeposit; @Schema(description = "本币履约保证金;与ERP(LYBZJBGQBWB)对应") - @ExcelProperty("本币履约保证金;与ERP(LYBZJBGQBWB)对应") private BigDecimal basicAmountDeposit; @Schema(description = "是否框架合同;与ERP(SFKJHT)对应,拓展信息", example = "1") - @ExcelProperty("是否框架合同;与ERP(SFKJHT)对应,拓展信息") private String isFramework; @Schema(description = "境内/境外;与ERP(JNJW)对应,拓展信息", example = "DOMESTIC") - @ExcelProperty("境内/境外;与ERP(JNJW)对应,拓展信息") private String isDomestic; @Schema(description = "施工类型编号;与ERP(HTLXBH)对应,拓展信息", example = "施工类型编号") - @ExcelProperty("施工类型编号;与ERP(HTLXBH)对应,拓展信息") private String constructionTypeNumber; @Schema(description = "施工类型名称;与ERP(HTLXMC)对应,拓展信息", example = "施工类型名称") - @ExcelProperty("施工类型名称;与ERP(HTLXMC)对应,拓展信息") private String constructionTypeName; @Schema(description = "代理方;与ERP(ZLIFNR)对应,拓展信息", example = "代理方") - @ExcelProperty("代理方;与ERP(ZLIFNR)对应,拓展信息") private String agent; @Schema(description = "类别;与ERP(HTLB)对应,拓展信息", example = "PROCESSING") - @ExcelProperty("类别;与ERP(HTLB)对应,拓展信息") private String category; @Schema(description = "是否虚拟合同;与ERP(SFXNHT)对应", example = "1") - @ExcelProperty("是否虚拟合同;与ERP(SFXNHT)对应") private String contractVirtual; @Schema(description = "补充协议类型;变更协议/增加条款", example = "补充协议类型") - @ExcelProperty("补充协议类型;变更协议/增加条款") private String replenishAgreementType; @Schema(description = "建筑服务发生地;与ERP(JZFWFSD)对应,拓展信息,销售合同,且类型为SAP02COSR必填", example = "建筑服务发生地") - @ExcelProperty("建筑服务发生地;与ERP(JZFWFSD)对应,拓展信息,销售合同,且类型为SAP02COSR必填") private String architectureServicePlace; @Schema(description = "达到收款条件金额;与ERP(DDSKJE)对应,拓展信息,销售合同,且类型为SAP02COSR必填") - @ExcelProperty("达到收款条件金额;与ERP(DDSKJE)对应,拓展信息,销售合同,且类型为SAP02COSR必填") private BigDecimal payeeConditionAmount; - @Schema(description = "附件对象存储") - @ExcelProperty("附件对象存储") - private String fileObject; - - @Schema(description = "其它附件对象存储") - @ExcelProperty("其它附件对象存储") - private String fileObjectOther; - - // 模板部分查询 + // 模板部分 @Schema(description = "模板实例主键", example = "10196") - @ExcelProperty("模板实例主键") private Long instanceId; // 合同动态表单 diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewRespVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewRespVO.java index 9a6cb80..316a237 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewRespVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewRespVO.java @@ -16,11 +16,11 @@ import java.util.List; @ExcelIgnoreUnannotated public class ContractViewRespVO { - @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "2090") + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "2476") @ExcelProperty("主键") private Long id; - @Schema(description = "模板实例主键", example = "10196") + @Schema(description = "模板实例主键", example = "5352") @ExcelProperty("模板实例主键") private Long instanceId; @@ -28,11 +28,11 @@ public class ContractViewRespVO { @ExcelProperty("系统合同编号;自动生成,校验唯一") private String systemContractNumber; - @Schema(description = "状态", example = "1") + @Schema(description = "状态", example = "2") @ExcelProperty("状态") private String status; - @Schema(description = "合同名称;与ERP(HTMC)对应,校验唯一", example = "芋艿") + @Schema(description = "合同名称;与ERP(HTMC)对应,校验唯一", example = "李四") @ExcelProperty("合同名称;与ERP(HTMC)对应,校验唯一") private String contractName; @@ -52,7 +52,7 @@ public class ContractViewRespVO { @ExcelProperty("收支性质;与ERP(SZXZ)对应") private String direction; - @Schema(description = "合同类型", example = "1") + @Schema(description = "合同类型", example = "2") @ExcelProperty("合同类型") private String contractType; @@ -76,7 +76,7 @@ public class ContractViewRespVO { @ExcelProperty("甲方公司编号;如果是采购合同,查询组织机构自动带出,且与ERP(HTQDZTBH)对应,如果是销售合同,手动选择,且与ERP(WLDWBH)对应。") private String purchaseCompanyNumber; - @Schema(description = "甲方公司名称", example = "王五") + @Schema(description = "甲方公司名称", example = "芋艿") @ExcelProperty("甲方公司名称") private String purchaseCompanyName; @@ -92,7 +92,7 @@ public class ContractViewRespVO { @ExcelProperty("乙方公司编号;如果是销售合同,查询组织机构自动带出,且与ERP(HTQDZTBH)对应,如果是采购合同,手动选择,且与ERP(WLDWBH)对应。") private String salesCompanyNumber; - @Schema(description = "乙方公司名称", example = "王五") + @Schema(description = "乙方公司名称", example = "赵六") @ExcelProperty("乙方公司名称") private String salesCompanyName; @@ -152,7 +152,7 @@ public class ContractViewRespVO { @ExcelProperty("质保金金额;与ERP(BZJJE)对应") private BigDecimal qualityAmount; - @Schema(description = "补充协议类型;变更协议/增加条款", example = "1") + @Schema(description = "补充协议类型;变更协议/增加条款", example = "2") @ExcelProperty("补充协议类型;变更协议/增加条款") private String replenishAgreementType; @@ -164,7 +164,7 @@ public class ContractViewRespVO { @ExcelProperty("施工类型编号;与ERP(HTLXBH)对应,拓展信息") private String constructionTypeNumber; - @Schema(description = "施工类型名称;与ERP(HTLXMC)对应,拓展信息", example = "张三") + @Schema(description = "施工类型名称;与ERP(HTLXMC)对应,拓展信息", example = "李四") @ExcelProperty("施工类型名称;与ERP(HTLXMC)对应,拓展信息") private String constructionTypeName; @@ -216,6 +216,82 @@ public class ContractViewRespVO { @ExcelProperty("步骤") private Integer step; + @Schema(description = "ERP请求状态", example = "1") + @ExcelProperty("ERP请求状态") + private String erpStatus; + + @Schema(description = "ERP请求失败原因") + @ExcelProperty("ERP请求失败原因") + private String cause; + + @Schema(description = "流程实例编号", example = "27511") + @ExcelProperty("流程实例编号") + private String processInstanceId; + + @Schema(description = "审批意见") + @ExcelProperty("审批意见") + private String reviewOpinion; + + @Schema(description = "任务节点主键", example = "26040") + @ExcelProperty("任务节点主键") + private String taskNodeId; + + @Schema(description = "模板附件对象存储") + @ExcelProperty("模板附件对象存储") + private String fileObject; + + @Schema(description = "其它附件对象存储") + @ExcelProperty("其它附件对象存储") + private String fileObjectOther; + + @Schema(description = "交货地点") + @ExcelProperty("交货地点") + private String deliveryAddress; + + @Schema(description = "交货方式(字典:FRCST_ASN)") + @ExcelProperty("交货方式(字典:FRCST_ASN)") + private String deliveryWay; + + @Schema(description = "甲方联系人") + @ExcelProperty("甲方联系人") + private String purchaseHuman; + + @Schema(description = "甲方电话") + @ExcelProperty("甲方电话") + private String purchaseTel; + + @Schema(description = "甲方邮箱") + @ExcelProperty("甲方邮箱") + private String purchaseEmail; + + @Schema(description = "甲方传真") + @ExcelProperty("甲方传真") + private String purchaseFax; + + @Schema(description = "甲方联系地址") + @ExcelProperty("甲方联系地址") + private String purchaseContactAddress; + + @Schema(description = "乙方联系人") + @ExcelProperty("乙方联系人") + private String salesHuman; + + @Schema(description = "乙方电话") + @ExcelProperty("乙方电话") + private String salesTel; + + @Schema(description = "乙方邮箱") + @ExcelProperty("乙方邮箱") + private String salesEmail; + + @Schema(description = "乙方传真") + @ExcelProperty("乙方传真") + private String salesFax; + + @Schema(description = "乙方联系地址") + @ExcelProperty("乙方联系地址") + private String salesContactAddress; + // 物料信息 private List detail; diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractMainDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractMainDO.java index 240c1b7..4cc33ce 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractMainDO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractMainDO.java @@ -304,4 +304,64 @@ public class ContractMainDO extends BusinessBaseDO { */ @TableField("FILE_OBJ_OTH") private String fileObjectOther; + /** + * 交货地点 + */ + @TableField("DLVY_ADR") + private String deliveryAddress; + /** + * 交货方式(字典:FRCST_ASN) + */ + @TableField("DLVY_WY") + private String deliveryWay; + /** + * 甲方联系人 + */ + @TableField("PRCH_HMN") + private String purchaseHuman; + /** + * 甲方电话 + */ + @TableField("PRCH_TEL") + private String purchaseTel; + /** + * 甲方邮箱 + */ + @TableField("PRCH_EM") + private String purchaseEmail; + /** + * 甲方传真 + */ + @TableField("PRCH_FAX") + private String purchaseFax; + /** + * 甲方联系地址 + */ + @TableField("PRCH_CTCT_ADR") + private String purchaseContactAddress; + /** + * 乙方联系人 + */ + @TableField("SALE_HMN") + private String salesHuman; + /** + * 乙方电话 + */ + @TableField("SALE_TEL") + private String salesTel; + /** + * 乙方邮箱 + */ + @TableField("SALE_EM") + private String salesEmail; + /** + * 乙方传真 + */ + @TableField("SALE_FAX") + private String salesFax; + /** + * 乙方联系地址 + */ + @TableField("SALE_CTCT_ADR") + private String salesContactAddress; } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractMainMapper.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractMainMapper.java index 9f7ab87..bc36ddf 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractMainMapper.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/mysql/contract/ContractMainMapper.java @@ -22,6 +22,7 @@ public interface ContractMainMapper extends BaseMapperX { .betweenIfPresent(ContractMainDO::getSignDate, reqVO.getSignDate()) .likeIfPresent(ContractMainDO::getPurchaseCompanyName, reqVO.getPurchaseCompanyName()) .eqIfPresent(ContractMainDO::getBasicAmount, reqVO.getBasicAmount()) + .eqIfPresent(ContractMainDO::getStatus, reqVO.getStatus()) .orderByDesc(ContractMainDO::getCreateTime)); } } \ No newline at end of file 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 864cf4b..878659a 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 @@ -543,10 +543,21 @@ public class ContractServiceImpl implements ContractService { throw exception(CONTRACT_NOT_EXISTS); } - // 合同内容校验 TODO + // 合同状态校验 + 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())) { + + throw exception(CONTRACT_STATUS_NOT_SUBMIT_APPROVAL, + ContractStatusEnum.valueOf(contractMainDO.getStatus()).getLabel()); + } + + // 合同内容校验 verifyContract(get(id)); - // 查询用户 + // 查询登陆用户 AdminUserRespDTO adminUserRespDTO = adminUserApi .getUser(SecurityFrameworkUtils.getLoginUserId()).getData(); @@ -571,6 +582,11 @@ public class ContractServiceImpl implements ContractService { return "提交审批失败"; } + /** + * 校验合同内容 + * + * @param contract 合同数据 + */ private void verifyContract(ContractViewRespVO contract) { /* 合同基本信息 */ @@ -703,9 +719,22 @@ public class ContractServiceImpl implements ContractService { } /* 物料信息 */ - // 物料名称不能为空 - // 数量不能为空 - // 计量单位不能为空 + if (contract.getDetail() != null && !contract.getDetail().isEmpty()) { + contract.getDetail().forEach(detail -> { + // 物料名称不能为空 + if (StringUtils.isBlank(detail.getMaterialName())) { + throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_DTL_MTRL_NAME_LABEL); + } + // 数量不能为空 + if (detail.getQuantity() != null) { + throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_DTL_QTY_LABEL); + } + // 计量单位不能为空 + if (StringUtils.isBlank(detail.getUnit())) { + throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_DTL_UNT_LABEL); + } + }); + } /* 扩展信息 */ // 是否框架合同不能为空 From 1d9521b0d1f9a941705fc010bb9675fd794ada59 Mon Sep 17 00:00:00 2001 From: guojunyun Date: Mon, 29 Sep 2025 17:57:59 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=90=88=E5=90=8C=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vo/contract/ContractSaveReqVO.java | 1 + .../service/contract/ContractServiceImpl.java | 32 +++++++++---------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractSaveReqVO.java index 07a48b7..c826d7f 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractSaveReqVO.java @@ -192,6 +192,7 @@ public class ContractSaveReqVO { @Schema(description = "代理方;与ERP(ZLIFNR)对应,拓展信息", example = "代理方") private String agent; + @NotBlank(message = "合同类别不能为空") @Schema(description = "类别;与ERP(HTLB)对应,拓展信息", example = "PROCESSING") private String category; 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 878659a..a891525 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 @@ -112,7 +112,7 @@ public class ContractServiceImpl implements ContractService { // 合同状态保存为草稿 contractMainDO.setStatus(ContractStatusEnum.DRAFT.getCode()); // 生成系统合同编号 - contractMainDO.setSystemContractNumber(generateSystemContractNumber(reqVO.getContractType())); + contractMainDO.setSystemContractNumber(generateSystemContractNumber(reqVO.getCategory())); // 保存合同主信息 contractMainMapper.insert(contractMainDO); @@ -639,15 +639,15 @@ public class ContractServiceImpl implements ContractService { throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_DRCT_LABEL); } // 签署日期不能为空 - if (contract.getSignDate() != null) { + if (contract.getSignDate() == null) { throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_SGN_DT_LABEL); } // 开始日期不能为空 - if (contract.getStartDate() != null) { + if (contract.getStartDate() == null) { throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_STRT_DT_LABEL); } // 结束日期不能为空 - if (contract.getEndDate() != null) { + if (contract.getEndDate() == null) { throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_END_DT_LABEL); } // 签署地不能为空 @@ -661,11 +661,11 @@ public class ContractServiceImpl implements ContractService { throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_CUR_LABEL); } // 本币金额不能为空 - if (contract.getBasicAmount() != null) { + if (contract.getBasicAmount() == null) { throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_BSC_AMT_LABEL); } // 原币金额不能为空 - if (contract.getCooAmount() != null) { + if (contract.getCooAmount() == null) { throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_COO_AMT_LABEL); } // 是否有履约保证金不能为空 @@ -675,11 +675,11 @@ public class ContractServiceImpl implements ContractService { // 是否有履约保证金为是的情况 if (ErpCtrtYesNoEnum.YES.getCode().equals(contract.getHasDeposit())) { // 原币履约保证金不能为空 - if (contract.getCooAmountDeposit() != null) { + if (contract.getCooAmountDeposit() == null) { throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_COO_AMT_DPST_LABEL); } // 本币履约保证金不能为空 - if (contract.getBasicAmountDeposit() != null) { + if (contract.getBasicAmountDeposit() == null) { throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_BSC_AMT_DPST_LABEL); } } @@ -690,11 +690,11 @@ public class ContractServiceImpl implements ContractService { // 是否有预付款为是的情况 if (ErpCtrtYesNoEnum.YES.getCode().equals(contract.getHasPrepayment())) { // 预付款比例不能为空 - if (contract.getPrepaymentRatio() != null) { + if (contract.getPrepaymentRatio() == null) { throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_PPYM_RTIO_LABEL); } // 预付款金额不能为空 - if (contract.getPrepaymentAmount() != null) { + if (contract.getPrepaymentAmount() == null) { throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_PPYM_AMT_LABEL); } } @@ -705,11 +705,11 @@ public class ContractServiceImpl implements ContractService { // 是否有质保金为是的情况 if (ErpCtrtYesNoEnum.YES.getCode().equals(contract.getHasPrepayment())) { // 质保金比例不能为空 - if (contract.getQualityRatio() != null) { + if (contract.getQualityRatio() == null) { throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_QLT_RTIO_LABEL); } // 质保金金额不能为空 - if (contract.getQualityAmount() != null) { + if (contract.getQualityAmount() == null) { throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_MAIN_QLT_AMT_LABEL); } } @@ -726,7 +726,7 @@ public class ContractServiceImpl implements ContractService { throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_DTL_MTRL_NAME_LABEL); } // 数量不能为空 - if (detail.getQuantity() != null) { + if (detail.getQuantity() == null) { throw exception(CONTRACT_DATA_NOT_EXISTS, TableFieldConstants.BSE_CTRT_DTL_QTY_LABEL); } // 计量单位不能为空 @@ -770,11 +770,11 @@ public class ContractServiceImpl implements ContractService { * 单据名称(拼音)-类型-公司编码-年月日-六位编号 * 如请款单: QKD-ZGQK-3000-20250915-00001 * - * @param contractType 合同类型 + * @param category 合同类别 * * @return 系统合同编号 */ - private String generateSystemContractNumber(String contractType) { + private String generateSystemContractNumber(String category) { // 单据名称(拼音) String documentName = "XTHT"; @@ -784,7 +784,7 @@ public class ContractServiceImpl implements ContractService { String yearMounth8Bit = LocalDate.now() .format(DateTimeFormatter.ofPattern(DateConstants.DATE_FORMAT_YEAR_MONTH_DAY_8_BIT)); // 查询最大编号 - String numPrefix = documentName+"-"+contractType+"-"+companyId+"-"+yearMounth8Bit; + String numPrefix = documentName+"-"+category+"-"+companyId+"-"+yearMounth8Bit; QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.likeRight("SYS_CTRT_NUM", numPrefix); queryWrapper.orderByDesc("SYS_CTRT_NUM"); From 41250ab1279f0277f317749e8e0ed237a5f1b84d Mon Sep 17 00:00:00 2001 From: zhangt Date: Mon, 29 Sep 2025 18:10:25 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=94=B6=E8=B4=A7erp?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/zt/plat/module/erp/api/ErpBillMainApiImpl.java | 3 +++ .../zt/plat/module/erp/service/erp/ErpBillMainServiceImpl.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpBillMainApiImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpBillMainApiImpl.java index e0257fe..e225d65 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpBillMainApiImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpBillMainApiImpl.java @@ -4,12 +4,15 @@ import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.module.erp.api.dto.ErpBillMainSaveReqDTO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpBillMainSaveReqVO; import com.zt.plat.module.erp.service.erp.ErpBillMainService; + import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RestController; @RestController @Validated +@Slf4j public class ErpBillMainApiImpl implements ErpBillMainApi{ @Resource diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBillMainServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBillMainServiceImpl.java index e51621b..ea310f6 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBillMainServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBillMainServiceImpl.java @@ -75,7 +75,7 @@ public class ErpBillMainServiceImpl implements ErpBillMainService { // 抽取重复代码:提交 ERP 并记录日志 private String submitToErp(ErpSubmitReqDTO reqDTO) { HashMap response = erpExternalApi.submitDataToErp(reqDTO); - return response.get("data"); + return response.get("resStr"); } @NotNull From 88b5ae2b64cc5b407e006aaadcc1f6e9f7bf95bc Mon Sep 17 00:00:00 2001 From: liss <1780094091@qq.com> Date: Tue, 30 Sep 2025 10:56:58 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E6=8A=9B=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/erp/enums/ErrorCodeConstants.java | 54 +++- .../module/erp/api/ErpExternalApiImpl.java | 2 +- .../module/erp/common/conf/ErpConfig.java | 299 ------------------ .../module/erp/common/conf/MyRedisConfig.java | 61 ---- .../erp/common/task/statisticstask.java | 32 -- .../erp/{common => }/enums/OftenEnum.java | 2 +- .../erp/service/erp/ErpAssetServiceImpl.java | 37 +-- .../service/erp/ErpBomDetailServiceImpl.java | 17 +- .../erp/service/erp/ErpBomServiceImpl.java | 30 +- .../service/erp/ErpCompanyServiceImpl.java | 26 +- .../service/erp/ErpContractServiceImpl.java | 20 +- .../service/erp/ErpCostcenterServiceImpl.java | 26 +- .../service/erp/ErpCustomerServiceImpl.java | 23 +- .../service/erp/ErpFactoryServiceImpl.java | 30 +- .../erp/ErpInternalOrderServiceImpl.java | 29 +- .../service/erp/ErpMaterialServiceImpl.java | 23 +- .../erp/ErpProcessDetailServiceImpl.java | 27 +- .../service/erp/ErpProcessServiceImpl.java | 30 +- .../erp/ErpProductiveOrderServiceImpl.java | 26 +- .../erp/ErpProductiveVersionServiceImpl.java | 29 +- .../ErpPurchaseOrganizationServiceImpl.java | 29 +- .../erp/ErpSalesOrganizationServiceImpl.java | 29 +- .../service/erp/ErpWarehouseServiceImpl.java | 30 +- .../zt/plat/module/erp/utils/ErpConfig.java | 170 ++++++++++ .../plat/module/erp/utils/MyRedisConfig.java | 191 +++++++++++ 25 files changed, 684 insertions(+), 588 deletions(-) delete mode 100644 zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/ErpConfig.java delete mode 100644 zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/MyRedisConfig.java delete mode 100644 zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/task/statisticstask.java rename zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/{common => }/enums/OftenEnum.java (97%) create mode 100644 zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/utils/ErpConfig.java create mode 100644 zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/utils/MyRedisConfig.java diff --git a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/enums/ErrorCodeConstants.java b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/enums/ErrorCodeConstants.java index cab4bec..9449fe0 100644 --- a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/enums/ErrorCodeConstants.java +++ b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/enums/ErrorCodeConstants.java @@ -6,21 +6,43 @@ import com.zt.plat.framework.common.exception.ErrorCode; public interface ErrorCodeConstants { // ========== 示例模块 1-001-000-000 ========== + ErrorCode ERP_NOT_EXISTS = new ErrorCode(1_000_000_001, "获取ERP数据为空"); + ErrorCode ERP_NOT_JSON_EXISTS = new ErrorCode(1_000_000_002, "ERP接口响应无法解析为JSON"); + ErrorCode ERP_ERROR_EXISTS = new ErrorCode(1_000_000_003, "调用ERP RFC接口失败"); + ErrorCode ERP_CUSTOMER_NOT_EXISTS = new ErrorCode(1_001_000_001, "ERP客商主数据不存在"); - ErrorCode ERP_MATERIAL_NOT_EXISTS = new ErrorCode(1_001_000_002, "ERP物料数据不存在"); - ErrorCode ERP_COMPANY_NOT_EXISTS = new ErrorCode(1_001_000_003, "ERP物料数据不存在"); - ErrorCode ERP_BOM_NOT_EXISTS = new ErrorCode(1_001_000_003, "ERP物料数据不存在"); - ErrorCode ERP_BOM_DETAIL_NOT_EXISTS = new ErrorCode(1_001_000_003, "ERP物料数据不存在"); - ErrorCode ERP_PROCESS_NOT_EXISTS = new ErrorCode(1_001_000_003, "ERP物料数据不存在"); - ErrorCode ERP_PROCESS_DETAIL_NOT_EXISTS = new ErrorCode(1_001_000_003, "ERP物料数据不存在"); - ErrorCode ERP_FACTORY_NOT_EXISTS = new ErrorCode(1_001_000_003, "ERP物料数据不存在"); - ErrorCode ERP_COSTCENTER_NOT_EXISTS = new ErrorCode(1_001_000_003, "ERP物料数据不存在"); - ErrorCode ERP_PRODUCTIVE_VERSION_NOT_EXISTS = new ErrorCode(1_001_000_003, "ERP物料数据不存在"); - ErrorCode ERP_PURCHASE_ORGANIZATION_NOT_EXISTS = new ErrorCode(1_001_000_003, "ERP物料数据不存在"); - ErrorCode ERP_INTERNAL_ORDER_NOT_EXISTS = new ErrorCode(1_001_000_003, "ERP物料数据不存在"); - ErrorCode ERP_SALES_ORGANIZATION_NOT_EXISTS = new ErrorCode(1_001_000_003, "ERP物料数据不存在"); - ErrorCode ERP_WAREHOUSE_NOT_EXISTS = new ErrorCode(1_001_000_003, "ERP物料数据不存在"); - ErrorCode ERP_ASSET_NOT_EXISTS = new ErrorCode(1_001_000_003, "ERP物料数据不存在"); - ErrorCode ERP_CONTRACT_NOT_EXISTS = new ErrorCode(1_001_000_003, "ERP物料数据不存在"); - ErrorCode ERP_PRODUCTIVE_ORDER_NOT_EXISTS = new ErrorCode(1_001_000_003, "ERP物料数据不存在"); + + ErrorCode ERP_MATERIAL_NOT_EXISTS = new ErrorCode(1_002_000_001, "ERP物料数据不存在"); + + ErrorCode ERP_COMPANY_NOT_EXISTS = new ErrorCode(1_003_000_001, "ERP公司数据不存在"); + ErrorCode ERP_COMPANY_REDIS_NOT_EXISTS = new ErrorCode(1_003_000_002, "ERP公司代码缓存数据丢失,请重新同步公司代码"); + + ErrorCode ERP_BOM_NOT_EXISTS = new ErrorCode(1_004_000_001, "ERPBOM数据不存在"); + + ErrorCode ERP_BOM_DETAIL_NOT_EXISTS = new ErrorCode(1_005_000_001, "ERPBOM明细数据不存在"); + + ErrorCode ERP_PROCESS_NOT_EXISTS = new ErrorCode(1_006_000_001, "ERP工艺路线数据不存在"); + + ErrorCode ERP_PROCESS_DETAIL_NOT_EXISTS = new ErrorCode(1_007_000_001, "ERP工艺路线明细数据不存在"); + + ErrorCode ERP_FACTORY_NOT_EXISTS = new ErrorCode(1_008_000_001, "ERP工厂数据不存在"); + ErrorCode ERP_FACTORY_REDIS_NOT_EXISTS = new ErrorCode(1_008_000_002, "ERP工厂redis数据不存在"); + + ErrorCode ERP_COSTCENTER_NOT_EXISTS = new ErrorCode(1_009_000_001, "ERP成本中心数据不存在"); + + ErrorCode ERP_PRODUCTIVE_VERSION_NOT_EXISTS = new ErrorCode(1_010_000_001, "ERP生产版本数据不存在"); + + ErrorCode ERP_PURCHASE_ORGANIZATION_NOT_EXISTS = new ErrorCode(1_011_000_001, "ERP采购组织数据不存在"); + + ErrorCode ERP_INTERNAL_ORDER_NOT_EXISTS = new ErrorCode(1_012_000_001, "ERP内部订单数据不存在"); + + ErrorCode ERP_SALES_ORGANIZATION_NOT_EXISTS = new ErrorCode(1_013_000_001, "ERP销售组织数据不存在"); + + ErrorCode ERP_WAREHOUSE_NOT_EXISTS = new ErrorCode(1_014_000_001, "ERP库位数据不存在"); + + ErrorCode ERP_ASSET_NOT_EXISTS = new ErrorCode(1_015_000_001, "ERP资产卡片数据不存在"); + + ErrorCode ERP_CONTRACT_NOT_EXISTS = new ErrorCode(1_016_000_001, "ERP合同数据不存在"); + + ErrorCode ERP_PRODUCTIVE_ORDER_NOT_EXISTS = new ErrorCode(1_017_000_001, "ERP生产订单数据不存在"); } \ No newline at end of file diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpExternalApiImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpExternalApiImpl.java index 1096c17..ade41ae 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpExternalApiImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpExternalApiImpl.java @@ -1,7 +1,7 @@ package com.zt.plat.module.erp.api; import com.zt.plat.module.erp.api.dto.ErpSubmitReqDTO; -import com.zt.plat.module.erp.common.conf.ErpConfig; +import com.zt.plat.module.erp.utils.ErpConfig; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RestController; diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/ErpConfig.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/ErpConfig.java deleted file mode 100644 index 81a66c9..0000000 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/ErpConfig.java +++ /dev/null @@ -1,299 +0,0 @@ -package com.zt.plat.module.erp.common.conf; - -import cn.hutool.core.util.StrUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.zt.plat.module.erp.api.dto.ErpSubmitReqDTO; -import jakarta.annotation.Resource; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.web.client.RestTemplate; - -import java.util.*; -import java.util.stream.Collectors; - -import static dm.jdbc.util.DriverUtil.log; - -@Configuration -public class ErpConfig { - - @Value("${erp.address}") - private String erpAddress; - - @Value("${erp.sapsys}") - private String sapsys; - - @Resource - private RedisTemplate redisTemplate; - - - /** - * 调用ERP接口获取erp数据 - */ - public JSONArray fetchDataFromERP(String funcnr, Map req) { - try { - // 构建完整URL - String url = "http://" + erpAddress + "/api/rfc/get"; - // 构建请求参数 - JSONObject requestBody = new JSONObject(); - requestBody.put("sapsys", sapsys); - requestBody.put("funcnr", funcnr); // 获取枚举值 - if (req != null) { - requestBody.put("req", req); - } - - // 设置请求头 - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - - // 创建HTTP请求实体 - HttpEntity requestEntity = new HttpEntity<>(requestBody.toJSONString(), headers); - - // 发送POST请求 - RestTemplate restTemplate = new RestTemplate(); - ResponseEntity response = restTemplate.postForEntity(url, requestEntity, String.class); - - // 解析响应结果 - String responseBody = response.getBody(); - if (responseBody.isEmpty()) { - log.warn("无所选条件的查询数据" + req); - } - - JSONObject jsonResponse = JSON.parseObject(responseBody); - if (jsonResponse == null) { - log.warn("ERP接口响应无法解析为JSON"); - } - - // 正确获取E_DATA数组 - JSONObject dataObject = jsonResponse.getJSONObject("data"); - if (dataObject != null && "S".equals(dataObject.getString("E_FLAG"))) { - return dataObject.getJSONArray("E_DATA"); - } else { - return null; - } - } catch (Exception e) { - log.error("调用ERP RFC接口失败: {}", e); - return null; - } - } - - // GET请求处理 -// public HashMap getResult(SAPInterfaceResult result) { -// HashMap resMap = new HashMap<>(); -// String E_RSLT = null; -// JSONObject jsonObject = result.getData(); -// //判断 result里的succeed是否为true -// boolean succeed = result.isSucceed(); -// if (succeed && "S".equals(jsonObject.getString("E_FLAG"))) { -// JSONObject data = result.getData(); -// String flag = "S"; -// String E_RESP = data.getString("E_DATA"); -// -// String E_MSG = result.getMsg(); -//// log.info("请求SAP成功 E_RESP:{}", E_RESP); -//// log.info("请求SAP成功 E_MSG:{}", E_MSG); -// resMap.put("E_RESP", E_RESP); -// resMap.put("resStr", E_MSG); -// resMap.put("flag", flag); -// return resMap; -// } else { -// String E_MSG = result.getMsg(); -// String flag = "E"; -// resMap.put("resStr", E_MSG); -// resMap.put("flag", flag); -//// log.info("请求SAP失败 E_MSG:{}", E_MSG); -// return resMap; -// } -// } - - /** - * 调用ERP接口更新erp数据 - */ - public HashMap pushDataToErp(ErpSubmitReqDTO reqDTO) { - try { - // 构建完整URL - String url = "http://" + erpAddress + "/api/rfc/post"; - // 构建请求参数 - JSONObject requestBody = new JSONObject(); - requestBody.put("uuid", UUID.randomUUID().toString()); - requestBody.put("sapsys", sapsys); - requestBody.put("srcsys", "DSC"); - requestBody.put("funcnr", reqDTO.getFuncnr()); - requestBody.put("bskey", reqDTO.getBskey()); - requestBody.put("usrid", reqDTO.getUsrid()); - requestBody.put("usrnm", reqDTO.getUsrnm()); - if (reqDTO.getSign() != null) { - requestBody.put("sign", reqDTO.getSign()); - } - if (reqDTO.getReq() != null) { - requestBody.put("req", reqDTO.getReq()); - } - // 设置请求头 - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - - // 创建HTTP请求实体 - HttpEntity requestEntity = new HttpEntity<>(requestBody.toJSONString(), headers); - - // 发送POST请求 - RestTemplate restTemplate = new RestTemplate(); - ResponseEntity response = restTemplate.postForEntity(url, requestEntity, String.class); - - // 解析响应结果 - String responseBody = response.getBody(); - if (responseBody.isEmpty()) { - throw new RuntimeException("ERP接口返回结果为空"); - } - - JSONObject jsonResponse = JSON.parseObject(responseBody); - if (jsonResponse == null) { - throw new RuntimeException("ERP接口响应无法解析为JSON"); - } - return postResult(jsonResponse); - } catch (Exception e) { - throw new RuntimeException("调用ERP RFC接口失败: " + e); - } - } - - // POST请求处理 - public HashMap postResult(JSONObject result) { - HashMap resMap = new HashMap<>(); - - boolean succeed = result.getBoolean("succeed"); - JSONObject data = result.getJSONObject("data"); - if (data == null) { - throw new RuntimeException("SAP接口返回值为空," + result.getString("msg")); - } else if (succeed && "S".equals(data.getString("E_FLAG"))) { - String flag = "S"; - String E_RESP = data.getString("E_RESP"); - String E_MSG = data.getString("ET_MSG"); - resMap.put("E_RESP", E_RESP); - resMap.put("resStr", E_MSG); - resMap.put("flag", flag); - return resMap; - } else if (!succeed && "E".equals(data.getString("E_FLAG"))) { - String flag = "E"; - String E_MSG = data.getString("ET_MSG"); - if (StrUtil.isBlank(E_MSG)) { - E_MSG = result.getString("msg"); - } - resMap.put("resStr", E_MSG); - resMap.put("flag", flag); - return resMap; - } else { - throw new RuntimeException("SAP接口异常," + result); - } - } - - - //list - public Map> numbers(JSONArray dataArray, String key, String dataKey) { - // 使用 Redis 获取缓存数据 - Map> numbers = new HashMap<>(); - List cachedNumbers = (List) redisTemplate.opsForValue().get(key); - if (cachedNumbers == null) { - cachedNumbers = new ArrayList<>(); - } - - // 提取有效的 BUKRS 编号 - List existingNumbers; - if (dataArray != null) { - // 将dataKey按"-"分割成多个部分 - String[] keyParts = dataKey.split("-"); - existingNumbers = dataArray.stream() - .filter(Objects::nonNull) - .map(dataJson -> { - JSONObject jsonObject = (JSONObject) dataJson; - // 根据每个部分逐级获取值并拼接 - StringBuilder sb = new StringBuilder(); - for (String part : keyParts) { - String value = jsonObject.getString(part); - if (value != null) { - if (sb.length() > 0) { - sb.append("-"); - } - sb.append(value.trim()); - } else { - // 如果某一部分为空,则整个值视为无效 - return null; - } - } - return sb.toString(); - }) - .filter(Objects::nonNull) // 过滤掉无效值 - .collect(Collectors.toList()); - } else { - existingNumbers = new ArrayList<>(); - } - - // 找出共同存在的编号 - Set cachedNumberSet = new HashSet<>(cachedNumbers != null ? cachedNumbers : new ArrayList<>()); - List commonNumbers = existingNumbers.stream() - .filter(cachedNumberSet::contains) - .collect(Collectors.toList()); - numbers.put("com", commonNumbers); - - //找出需要删除的字段。只有erp查询全部的接口能用到 - List deleteNumbers = cachedNumberSet.stream() - .filter(num -> !existingNumbers.contains(num)) - .collect(Collectors.toList()); - numbers.put("delete", deleteNumbers); - - // 找出需要新增的编号 - List newNumbers = existingNumbers.stream() - .filter(num -> !cachedNumberSet.contains(num)) - .toList(); - - // 合并所有编号 - List allNumbers = new ArrayList<>(cachedNumbers); - allNumbers.addAll(newNumbers); - numbers.put("all", allNumbers); - - return numbers; - } - - public void updateRedisCache(String key, List allnumbers) { - // 使用 Redis 更新缓存数据 - redisTemplate.opsForValue().set(key, allnumbers); - } - - public List getRedisCache(String key) { - // 使用 Redis 更新缓存数据 - return (List) redisTemplate.opsForValue().get(key); - } - - //map - public Map getRedisCacheMap(String key) { - // 使用 Redis 获取缓存数据 - Map result = (Map) redisTemplate.opsForHash().entries(key); - return result; - } - - public void addRedisCacheMap(String key, Map allnumbers) { - // 使用 Redis 更新缓存数据 - redisTemplate.opsForHash().putAll(key, allnumbers); - } - - public void deleteRedisCacheMap(String key, List deleteNumbers) { - if (deleteNumbers == null || deleteNumbers.isEmpty()) { - log.debug("No items to delete from Redis hash: {}", key); - return; - } - - try { - Object[] keysToDelete = deleteNumbers.toArray(new String[0]); - Long deletedCount = redisTemplate.opsForHash().delete(key, keysToDelete); - log.debug("Deleted" + deletedCount + "items from Redis hash:" + key); - } catch (Exception e) { - log.error("Failed to delete items from Redis hash:" + key, e); - throw e; - } - } - -} diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/MyRedisConfig.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/MyRedisConfig.java deleted file mode 100644 index c213195..0000000 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/MyRedisConfig.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.zt.plat.module.erp.common.conf; - -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; -import org.springframework.data.redis.serializer.RedisSerializer; -import org.springframework.data.redis.serializer.StringRedisSerializer; - - -/** - * @author wuxz - * @create 2022-06-07 20:54 - */ -@Primary -@Configuration -public class MyRedisConfig { - @Bean(value = "MyRedisTemplate") - public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { - RedisTemplate redisTemplate = new RedisTemplate<>(); - redisTemplate.setConnectionFactory(redisConnectionFactory); - - // 通过 Jackson 组件进行序列化 - RedisSerializer serializer = redisSerializer(); - - // key 和 value - // 一般来说, redis-key采用字符串序列化; - // redis-value采用json序列化, json的体积小,可读性高,不需要实现serializer接口。 - redisTemplate.setKeySerializer(new StringRedisSerializer()); - redisTemplate.setValueSerializer(serializer); - - redisTemplate.setHashKeySerializer(new StringRedisSerializer()); - redisTemplate.setHashValueSerializer(serializer); - - redisTemplate.afterPropertiesSet(); - return redisTemplate; - } - - - @Bean - public RedisSerializer redisSerializer() { - //创建JSON序列化器 - Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<>(Object.class); - ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); - // objectMapper.enableDefaultTyping()被弃用 - objectMapper.activateDefaultTyping( - LaissezFaireSubTypeValidator.instance, - ObjectMapper.DefaultTyping.NON_FINAL, - JsonTypeInfo.As.WRAPPER_ARRAY); - serializer.setObjectMapper(objectMapper); - return serializer; - } -} \ No newline at end of file diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/task/statisticstask.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/task/statisticstask.java deleted file mode 100644 index a726e56..0000000 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/task/statisticstask.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.zt.plat.module.erp.common.task; - -import com.zt.plat.module.erp.service.erp.ErpCompanyService; -import jakarta.annotation.Resource; -import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.transaction.annotation.Transactional; - -/** - * @ClassName energyTask - * @Description TODO - * @Author chen - * @Date 2023/9/25 - **/ -@Configuration -@EnableScheduling -public class statisticstask { - - @Resource - private ErpCompanyService erpCompanyService; - - //能源定时每日获取成本配置机台水电数据 - @Scheduled(cron = "0 0 12 * * ?") - @Transactional - public void erpCompany(){ - erpCompanyService.callErpRfcInterface(); - } - - - -} diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/enums/OftenEnum.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/enums/OftenEnum.java similarity index 97% rename from zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/enums/OftenEnum.java rename to zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/enums/OftenEnum.java index 6155c96..f7f8803 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/enums/OftenEnum.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/enums/OftenEnum.java @@ -1,4 +1,4 @@ -package com.zt.plat.module.erp.common.enums; +package com.zt.plat.module.erp.enums; import lombok.Data; diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpAssetServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpAssetServiceImpl.java index e450a06..26bfaaf 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpAssetServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpAssetServiceImpl.java @@ -7,8 +7,9 @@ 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.mybatis.core.query.LambdaQueryWrapperX; -import com.zt.plat.module.erp.common.conf.ErpConfig; -import com.zt.plat.module.erp.common.enums.OftenEnum; +import com.zt.plat.module.erp.utils.ErpConfig; +import com.zt.plat.module.erp.utils.MyRedisConfig; +import com.zt.plat.module.erp.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpAssetPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpAssetRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpAssetSaveReqVO; @@ -28,6 +29,7 @@ import java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_ASSET_NOT_EXISTS; +import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_COMPANY_REDIS_NOT_EXISTS; import static dm.jdbc.util.DriverUtil.log; /** @@ -42,6 +44,8 @@ public class ErpAssetServiceImpl implements ErpAssetService { @Resource private ErpAssetMapper erpAssetMapper; + @Resource + private MyRedisConfig myRedisConfig; @Resource private ErpConfig erpConfig; @@ -110,33 +114,30 @@ public class ErpAssetServiceImpl implements ErpAssetService { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.资产卡片; String funcnr = funcnrEnum.getFuncnr(); String key = "erpMap" + funcnr; - if (erpConfig.getRedisCacheMap(key).isEmpty()) { + if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key); } // 构建req参数 Map req = new HashMap<>(); -// List> datumList = new ArrayList<>(); -// Map datumEntry = new HashMap<>(); -// datumEntry.put("sign", "I"); -// datumEntry.put("option", "EQ"); -// datumEntry.put("low", LocalDate.now().toString()); -// datumList.add(datumEntry); -// req.put(funcnrEnum.getDatekey(), datumList); JSONArray dataArrayALL = new JSONArray(); String companyKey ="erpMap"+ OftenEnum.FuncnrEnum.公司代码.getFuncnr(); - Map redisCache = erpConfig.getRedisCacheMap(companyKey); + Map redisCache = myRedisConfig.getRedisCacheMap(companyKey); if (CollUtil.isEmpty(redisCache)) { - return; + throw exception(ERP_COMPANY_REDIS_NOT_EXISTS); } for (String number : redisCache.keySet()) { req.put("BUKRS", number); // 1. 调用ERP接口获取数据 - JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); - if (dataArray == null || dataArray.isEmpty()) { + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); + JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); + if (dataArray==null) { continue; } dataArrayALL.addAll(dataArray); } + if (CollUtil.isEmpty(dataArrayALL)) { + throw exception(ERP_ASSET_NOT_EXISTS); + } // 2. 处理公司数据,区分新增和更新 ProcessingResult result = processData(dataArrayALL, funcnrEnum); @@ -155,7 +156,7 @@ public class ErpAssetServiceImpl implements ErpAssetService { */ private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnrEnum) { String key = "erpMap" + funcnrEnum.getFuncnr(); - Map numbers = erpConfig.getRedisCacheMap(key); + Map numbers = myRedisConfig.getRedisCacheMap(key); List toUpdate = new ArrayList<>(); List toInsert = new ArrayList<>(); @@ -222,7 +223,7 @@ public class ErpAssetServiceImpl implements ErpAssetService { ); Map numberIdMap = insertedRecords.stream() .collect(Collectors.toMap(asset -> asset.getCompanyNumber() + "-" + asset.getMainAssetNumber(), ErpAssetDO::getId)); - erpConfig.addRedisCacheMap(result.key,numberIdMap); + myRedisConfig.addRedisCacheMap(result.key,numberIdMap); } if (!result.toUpdate.isEmpty()) { erpAssetMapper.updateBatch(result.toUpdate); @@ -231,7 +232,7 @@ public class ErpAssetServiceImpl implements ErpAssetService { // 使用流式处理和批处理优化删除逻辑 List idsToDelete = new ArrayList<>(result.deleteNumbers.values()); erpAssetMapper.deleteByIds(idsToDelete); - erpConfig.deleteRedisCacheMap(result.key, new ArrayList<>(result.deleteNumbers.keySet())); + myRedisConfig.deleteRedisCacheMap(result.key, new ArrayList<>(result.deleteNumbers.keySet())); } } @@ -259,7 +260,7 @@ public class ErpAssetServiceImpl implements ErpAssetService { String mapKey = asset.getCompanyNumber() + "-" + asset.getMainAssetNumber(); existingNumbers.put(mapKey, asset.getId()); } - erpConfig.addRedisCacheMap(key, existingNumbers); + myRedisConfig.addRedisCacheMap(key, existingNumbers); } } \ 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/ErpBomDetailServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBomDetailServiceImpl.java index 72fcf7c..88f7f83 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBomDetailServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBomDetailServiceImpl.java @@ -4,8 +4,9 @@ import cn.hutool.core.collection.CollUtil; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.zt.plat.module.erp.common.conf.ErpConfig; -import com.zt.plat.module.erp.common.enums.OftenEnum; +import com.zt.plat.module.erp.utils.ErpConfig; +import com.zt.plat.module.erp.utils.MyRedisConfig; +import com.zt.plat.module.erp.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpBomDetailPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpBomDetailRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpBomDetailSaveReqVO; @@ -36,6 +37,8 @@ public class ErpBomDetailServiceImpl implements ErpBomDetailService { @Resource private ErpBomDetailMapper erpBomDetailMapper; + @Resource + private MyRedisConfig myRedisConfig; @Resource private ErpConfig erpConfig; @@ -107,14 +110,14 @@ public class ErpBomDetailServiceImpl implements ErpBomDetailService { } private ProcessingResult processData(List updateReqVOS, String key) { - if (erpConfig.getRedisCacheMap(key).isEmpty()) { + if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key); } List toUpdate = new ArrayList<>(); List toInsert = new ArrayList<>(); List dataArrayNumbers = new ArrayList<>(); - Map existingNumbers = erpConfig.getRedisCacheMap(key); + Map existingNumbers = myRedisConfig.getRedisCacheMap(key); for (ErpBomDetailDO updateReqVO : updateReqVOS) { String mapKey = updateReqVO.getBomId() + "-" + updateReqVO.getErpBomId(); if (existingNumbers.containsKey(mapKey)) { @@ -150,7 +153,7 @@ public class ErpBomDetailServiceImpl implements ErpBomDetailService { ); Map numberIdMap = insertedRecords.stream() .collect(Collectors.toMap(asset -> asset.getBomId() + "-" + asset.getErpBomId(), ErpBomDetailDO::getId)); - erpConfig.addRedisCacheMap(result.key, numberIdMap); + myRedisConfig.addRedisCacheMap(result.key, numberIdMap); } if (!result.toUpdate.isEmpty()) { erpBomDetailMapper.updateBatch(result.toUpdate); @@ -161,7 +164,7 @@ public class ErpBomDetailServiceImpl implements ErpBomDetailService { if (!idsToDelete.isEmpty()) { erpBomDetailMapper.deleteByIds(idsToDelete); } - erpConfig.deleteRedisCacheMap(result.key, new ArrayList<>(result.deleteNumbers.keySet())); + myRedisConfig.deleteRedisCacheMap(result.key, new ArrayList<>(result.deleteNumbers.keySet())); } } @@ -186,6 +189,6 @@ public class ErpBomDetailServiceImpl implements ErpBomDetailService { String mapKey = asset.getBomId() + "-" + asset.getErpBomId(); existingNumbers.put(mapKey, asset.getId()); } - erpConfig.addRedisCacheMap(key, existingNumbers); + myRedisConfig.addRedisCacheMap(key, existingNumbers); } } \ 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/ErpBomServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBomServiceImpl.java index d5cbe2b..38354f2 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBomServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBomServiceImpl.java @@ -9,8 +9,9 @@ import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.module.erp.api.ErpExternalApi; import com.zt.plat.module.erp.api.dto.ErpSubmitReqDTO; -import com.zt.plat.module.erp.common.conf.ErpConfig; -import com.zt.plat.module.erp.common.enums.OftenEnum; +import com.zt.plat.module.erp.utils.ErpConfig; +import com.zt.plat.module.erp.utils.MyRedisConfig; +import com.zt.plat.module.erp.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpBomPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpBomRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpBomSaveReqVO; @@ -28,7 +29,7 @@ import java.util.List; import java.util.Map; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_BOM_NOT_EXISTS; +import static com.zt.plat.module.erp.enums.ErrorCodeConstants.*; import static dm.jdbc.util.DriverUtil.log; /** @@ -43,6 +44,9 @@ public class ErpBomServiceImpl implements ErpBomService { @Resource private ErpBomMapper erpBomMapper; + @Resource + private MyRedisConfig myRedisConfig; + @Resource private ErpConfig erpConfig; @@ -117,25 +121,29 @@ public class ErpBomServiceImpl implements ErpBomService { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.BOM清单; String funcnr = funcnrEnum.getFuncnr(); String key = "erpMap" + funcnr; - if (erpConfig.getRedisCacheMap(key).isEmpty()) { + if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key); } Map req = new HashMap<>(); JSONArray dataArrayALL = new JSONArray(); String factKey = "erpMap" + OftenEnum.FuncnrEnum.工厂信息.getFuncnr(); - Map redisCache = erpConfig.getRedisCacheMap(factKey); + Map redisCache = myRedisConfig.getRedisCacheMap(factKey); if (CollUtil.isEmpty(redisCache)) { - throw exception(ERP_BOM_NOT_EXISTS); + throw exception(ERP_FACTORY_REDIS_NOT_EXISTS); } for (String factoryNumber : redisCache.keySet()) { req.put("WERKS", factoryNumber); // 1. 调用ERP接口获取数据 - JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); + JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); if (dataArray == null || dataArray.isEmpty()) { continue; } dataArrayALL.addAll(dataArray); } + if (CollUtil.isEmpty(dataArrayALL)) { + throw exception(ERP_BOM_NOT_EXISTS); + } // 2. 处理公司数据,区分新增和更新 ProcessingResult result = processData(dataArrayALL, funcnrEnum); @@ -154,7 +162,7 @@ public class ErpBomServiceImpl implements ErpBomService { */ private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnrEnum) { String key = "erpMap" + funcnrEnum.getFuncnr(); - Map numbers = erpConfig.getRedisCacheMap(key); + Map numbers = myRedisConfig.getRedisCacheMap(key); List toUpdate = new ArrayList<>(); List erpBomDetailDOList = new ArrayList<>(); @@ -231,11 +239,11 @@ public class ErpBomServiceImpl implements ErpBomService { // 更新Redis缓存 if (!result.addnumbers.isEmpty()) { - erpConfig.addRedisCacheMap(result.key, result.addnumbers); + myRedisConfig.addRedisCacheMap(result.key, result.addnumbers); } if (!result.deleteNumbers.isEmpty()) { - erpConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); + myRedisConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); } } @@ -266,7 +274,7 @@ public class ErpBomServiceImpl implements ErpBomService { String mapKey = bom.getFactoryNumber() + "-" + bom.getUpMaterial() + "-" + bom.getUseItem(); existingNumbers.put(mapKey, bom.getId()); } - erpConfig.addRedisCacheMap(key, existingNumbers); + myRedisConfig.addRedisCacheMap(key, existingNumbers); } diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpCompanyServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpCompanyServiceImpl.java index 64308e5..5f86f82 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpCompanyServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpCompanyServiceImpl.java @@ -7,8 +7,9 @@ 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.mybatis.core.query.LambdaQueryWrapperX; -import com.zt.plat.module.erp.common.conf.ErpConfig; -import com.zt.plat.module.erp.common.enums.OftenEnum; +import com.zt.plat.module.erp.utils.ErpConfig; +import com.zt.plat.module.erp.utils.MyRedisConfig; +import com.zt.plat.module.erp.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpCompanyPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpCompanyRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpCompanySaveReqVO; @@ -20,11 +21,13 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_BOM_NOT_EXISTS; import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_COMPANY_NOT_EXISTS; import static dm.jdbc.util.DriverUtil.log; @@ -40,6 +43,8 @@ public class ErpCompanyServiceImpl implements ErpCompanyService { @Resource private ErpCompanyMapper erpCompanyMapper; + @Resource + private MyRedisConfig myRedisConfig; @Resource private ErpConfig erpConfig; @@ -109,13 +114,14 @@ public class ErpCompanyServiceImpl implements ErpCompanyService { String funcnr = funcnrEnum.getFuncnr(); //防止缓存数据丢失 String key = "erpMap" + funcnrEnum.getFuncnr(); - if (erpConfig.getRedisCacheMap(key).isEmpty()) { + if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key); } // 1. 调用ERP接口获取数据 - JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, null); - if (dataArray == null || dataArray.isEmpty()) { - return; + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, null); + JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); + if (CollUtil.isEmpty(dataArray)) { + throw exception(ERP_COMPANY_NOT_EXISTS); } // 2. 处理公司数据,区分新增和更新 @@ -135,7 +141,7 @@ public class ErpCompanyServiceImpl implements ErpCompanyService { */ private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { String key = "erpMap" + funcnr.getFuncnr(); - Map numbers = erpConfig.getRedisCacheMap(key); + Map numbers = myRedisConfig.getRedisCacheMap(key); List toUpdate = new ArrayList<>(); List toInsert = new ArrayList<>(); @@ -187,7 +193,7 @@ public class ErpCompanyServiceImpl implements ErpCompanyService { ); Map numberIdMap = insertedRecords.stream() .collect(Collectors.toMap(ErpCompanyDO::getNumber, ErpCompanyDO::getId)); - erpConfig.addRedisCacheMap(result.key,numberIdMap); + myRedisConfig.addRedisCacheMap(result.key,numberIdMap); } if (!result.toUpdate.isEmpty()) { erpCompanyMapper.updateBatch(result.toUpdate); @@ -195,7 +201,7 @@ public class ErpCompanyServiceImpl implements ErpCompanyService { if (!result.deleteNumbers.isEmpty()) { // 使用 in 条件批量删除,提高删除效率 erpCompanyMapper.delete(new LambdaQueryWrapperX().in(ErpCompanyDO::getNumber, result.deleteNumbers)); - erpConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); + myRedisConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); } } @@ -221,7 +227,7 @@ public class ErpCompanyServiceImpl implements ErpCompanyService { Map existingNumbers = erpCompanyMapper.selectList(new LambdaQueryWrapperX()) .stream() .collect(Collectors.toMap(ErpCompanyDO::getNumber, ErpCompanyDO::getId)); - erpConfig.addRedisCacheMap(key, existingNumbers); + myRedisConfig.addRedisCacheMap(key, existingNumbers); } } \ 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 0aaac6b..ff51402 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,8 +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.module.erp.common.conf.ErpConfig; -import com.zt.plat.module.erp.common.enums.OftenEnum; +import com.zt.plat.module.erp.utils.ErpConfig; +import com.zt.plat.module.erp.utils.MyRedisConfig; +import com.zt.plat.module.erp.enums.OftenEnum; 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; @@ -19,10 +20,12 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_COMPANY_NOT_EXISTS; import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_CONTRACT_NOT_EXISTS; import static dm.jdbc.util.DriverUtil.log; @@ -38,6 +41,8 @@ public class ErpContractServiceImpl implements ErpContractService { @Resource private ErpContractMapper erpContractMapper; + @Resource + private MyRedisConfig myRedisConfig; @Resource private ErpConfig erpConfig; @@ -106,9 +111,10 @@ public class ErpContractServiceImpl implements ErpContractService { OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.合同信息; String funcnr = funcnrEnum.getFuncnr(); // 1. 调用ERP接口获取数据 - JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, null); - if (dataArray == null || dataArray.isEmpty()) { - return; + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, null); + JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); + if (CollUtil.isEmpty(dataArray)) { + throw exception(ERP_CONTRACT_NOT_EXISTS); } // 2. 处理公司数据,区分新增和更新 @@ -128,7 +134,7 @@ public class ErpContractServiceImpl implements ErpContractService { */ private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { String key = "erp" + funcnr.getFuncnr(); - Map> numbers = erpConfig.numbers(dataArray, key,funcnr.getDatakey()); + Map> numbers = myRedisConfig.numbers(dataArray, key,funcnr.getDatakey()); List allnumbers = numbers.get("all"); List comnumbers = numbers.get("com"); List toUpdate = new ArrayList<>(); @@ -168,7 +174,7 @@ public class ErpContractServiceImpl implements ErpContractService { if (!result.toUpdate.isEmpty()) { erpContractMapper.updateBatch(result.toUpdate); } - erpConfig.updateRedisCache(result.key,result.allnumbers); + myRedisConfig.updateRedisCache(result.key,result.allnumbers); } /** diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpCostcenterServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpCostcenterServiceImpl.java index bf01f04..094497c 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpCostcenterServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpCostcenterServiceImpl.java @@ -7,8 +7,9 @@ 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.mybatis.core.query.LambdaQueryWrapperX; -import com.zt.plat.module.erp.common.conf.ErpConfig; -import com.zt.plat.module.erp.common.enums.OftenEnum; +import com.zt.plat.module.erp.utils.ErpConfig; +import com.zt.plat.module.erp.utils.MyRedisConfig; +import com.zt.plat.module.erp.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpCostcenterPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpCostcenterRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpCostcenterSaveReqVO; @@ -27,6 +28,7 @@ import java.util.Map; import java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_CONTRACT_NOT_EXISTS; import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_COSTCENTER_NOT_EXISTS; import static dm.jdbc.util.DriverUtil.log; @@ -42,6 +44,8 @@ public class ErpCostcenterServiceImpl implements ErpCostcenterService { @Resource private ErpCostcenterMapper erpCostcenterMapper; + @Resource + private MyRedisConfig myRedisConfig; @Resource private ErpConfig erpConfig; @@ -111,13 +115,13 @@ public class ErpCostcenterServiceImpl implements ErpCostcenterService { String funcnr = funcnrEnum.getFuncnr(); //防止缓存数据丢失 String key = "erpMap" + funcnr; - if (erpConfig.getRedisCacheMap( key).isEmpty()){ + if (myRedisConfig.getRedisCacheMap( key).isEmpty()){ initializeMap(key); } Map req = new HashMap<>(); JSONArray dataArrayALL = new JSONArray(); String commanyKey ="erpMap"+ OftenEnum.FuncnrEnum.公司代码.getFuncnr(); - Map redisCache = erpConfig.getRedisCacheMap(commanyKey); + Map redisCache = myRedisConfig.getRedisCacheMap(commanyKey); if (CollUtil.isEmpty(redisCache)) { return; } @@ -125,12 +129,16 @@ public class ErpCostcenterServiceImpl implements ErpCostcenterService { for (String number : redisCache.keySet()) { req.put("BUKRS", number); // 1. 调用ERP接口获取数据 - JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); + JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); if (dataArray == null || dataArray.isEmpty()) { continue; } dataArrayALL.addAll(dataArray); } + if (CollUtil.isEmpty(dataArrayALL)) { + throw exception(ERP_COSTCENTER_NOT_EXISTS); + } // 2. 处理公司数据,区分新增和更新 ProcessingResult result = processData(dataArrayALL,funcnrEnum); @@ -149,7 +157,7 @@ public class ErpCostcenterServiceImpl implements ErpCostcenterService { */ private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { String key = "erpMap" + funcnr.getFuncnr(); - Map numbers = erpConfig.getRedisCacheMap(key); + Map numbers = myRedisConfig.getRedisCacheMap(key); List toUpdate = new ArrayList<>(); List toInsert = new ArrayList<>(); @@ -208,7 +216,7 @@ public class ErpCostcenterServiceImpl implements ErpCostcenterService { ); Map numberIdMap = insertedRecords.stream() .collect(Collectors.toMap(ErpCostcenterDO::getNumber, ErpCostcenterDO::getId)); - erpConfig.addRedisCacheMap(result.key,numberIdMap); + myRedisConfig.addRedisCacheMap(result.key,numberIdMap); } if (!result.toUpdate.isEmpty()) { erpCostcenterMapper.updateBatch(result.toUpdate); @@ -216,7 +224,7 @@ public class ErpCostcenterServiceImpl implements ErpCostcenterService { if (!result.deleteNumbers.isEmpty()) { // 使用 in 条件批量删除,提高删除效率 erpCostcenterMapper.delete(new LambdaQueryWrapperX().in(ErpCostcenterDO::getNumber, result.deleteNumbers)); - erpConfig.deleteRedisCacheMap(result.key,result.deleteNumbers); + myRedisConfig.deleteRedisCacheMap(result.key,result.deleteNumbers); } } @@ -240,6 +248,6 @@ public class ErpCostcenterServiceImpl implements ErpCostcenterService { Map existingNumbers = erpCostcenterMapper.selectList(new LambdaQueryWrapperX()) .stream() .collect(Collectors.toMap(ErpCostcenterDO::getNumber, ErpCostcenterDO::getId)); - erpConfig.addRedisCacheMap(key, existingNumbers); + myRedisConfig.addRedisCacheMap(key, existingNumbers); } } \ 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/ErpCustomerServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpCustomerServiceImpl.java index 8dc60dd..95c22e0 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpCustomerServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpCustomerServiceImpl.java @@ -7,8 +7,9 @@ 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.mybatis.core.query.LambdaQueryWrapperX; -import com.zt.plat.module.erp.common.conf.ErpConfig; -import com.zt.plat.module.erp.common.enums.OftenEnum; +import com.zt.plat.module.erp.utils.ErpConfig; +import com.zt.plat.module.erp.utils.MyRedisConfig; +import com.zt.plat.module.erp.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpCustomerPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpCustomerRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpCustomerSaveReqVO; @@ -41,10 +42,12 @@ import static dm.jdbc.util.DriverUtil.log; public class ErpCustomerServiceImpl implements ErpCustomerService { @Resource - private ErpConfig erpConfig; + private MyRedisConfig myRedisConfig; @Resource private ErpCustomerMapper erpCustomerMapper; + @Resource + private ErpConfig erpConfig; @Override public ErpCustomerRespVO createErpCustomer(ErpCustomerSaveReqVO createReqVO) { @@ -112,7 +115,7 @@ public class ErpCustomerServiceImpl implements ErpCustomerService { String funcnr = funcnrEnum.getFuncnr(); String key = "erpMap" + funcnrEnum.getFuncnr(); - if (erpConfig.getRedisCacheMap(key).isEmpty()) { + if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key); } // 构建req参数 @@ -130,12 +133,16 @@ public class ErpCustomerServiceImpl implements ErpCustomerService { JSONArray dataArrayALL = new JSONArray(); for (OftenEnum.ModeTypeEnum type : OftenEnum.ModeTypeEnum.values()) { req.put("mode", type.modetype); - JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); + JSONArray dataArray = (JSONArray) dataFromERP.get(funcnrEnum.getDatakey()); if (dataArray == null || dataArray.isEmpty()) { continue; } dataArrayALL.addAll(dataArray); } + if (dataArrayALL.isEmpty()){ + throw exception(ERP_CUSTOMER_NOT_EXISTS); + } // 2. 处理数据,区分新增和更新 ProcessingResult result = processData(dataArrayALL, funcnrEnum); @@ -154,7 +161,7 @@ public class ErpCustomerServiceImpl implements ErpCustomerService { */ private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnrEnum) { String key = "erpMap" + funcnrEnum.getFuncnr(); - Map numbers = erpConfig.getRedisCacheMap(key); + Map numbers = myRedisConfig.getRedisCacheMap(key); List toUpdate = new ArrayList<>(); List toInsert = new ArrayList<>(); @@ -211,7 +218,7 @@ public class ErpCustomerServiceImpl implements ErpCustomerService { ); Map numberIdMap = insertedRecords.stream() .collect(Collectors.toMap(ErpCustomerDO::getNumber, ErpCustomerDO::getId)); - erpConfig.addRedisCacheMap(result.key,numberIdMap); + myRedisConfig.addRedisCacheMap(result.key,numberIdMap); } if (!result.toUpdate.isEmpty()) { erpCustomerMapper.updateBatch(result.toUpdate); @@ -237,6 +244,6 @@ public class ErpCustomerServiceImpl implements ErpCustomerService { Map existingNumbers = erpCustomerMapper.selectList(new LambdaQueryWrapperX()) .stream() .collect(Collectors.toMap(ErpCustomerDO::getNumber, ErpCustomerDO::getId)); - erpConfig.addRedisCacheMap(key, existingNumbers); + myRedisConfig.addRedisCacheMap(key, existingNumbers); } } \ 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/ErpFactoryServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpFactoryServiceImpl.java index 039d8de..e4d09c6 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpFactoryServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpFactoryServiceImpl.java @@ -7,8 +7,9 @@ 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.mybatis.core.query.LambdaQueryWrapperX; -import com.zt.plat.module.erp.common.conf.ErpConfig; -import com.zt.plat.module.erp.common.enums.OftenEnum; +import com.zt.plat.module.erp.utils.ErpConfig; +import com.zt.plat.module.erp.utils.MyRedisConfig; +import com.zt.plat.module.erp.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpFactoryPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpFactoryRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpFactorySaveReqVO; @@ -26,7 +27,7 @@ import java.util.Map; import java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_FACTORY_NOT_EXISTS; +import static com.zt.plat.module.erp.enums.ErrorCodeConstants.*; import static dm.jdbc.util.DriverUtil.log; /** @@ -41,6 +42,8 @@ public class ErpFactoryServiceImpl implements ErpFactoryService { @Resource private ErpFactoryMapper erpFactoryMapper; + @Resource + private MyRedisConfig myRedisConfig; @Resource private ErpConfig erpConfig; @@ -109,21 +112,22 @@ public class ErpFactoryServiceImpl implements ErpFactoryService { String funcnr = funcnrEnum.getFuncnr(); //防止缓存数据丢失 String key = "erpMap" + funcnrEnum.getFuncnr(); - if (erpConfig.getRedisCacheMap(key).isEmpty()) { + if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key); } // 1. 调用ERP接口获取数据 Map req = new HashMap<>(); JSONArray dataArrayALL = new JSONArray(); String companykey = "erp" + OftenEnum.FuncnrEnum.公司代码.getFuncnr(); - Map redisCache = erpConfig.getRedisCacheMap(companykey); + Map redisCache = myRedisConfig.getRedisCacheMap(companykey); if (CollUtil.isEmpty(redisCache)) { - throw new RuntimeException("ERP公司代码缓存数据丢失,请重新同步公司代码"); + throw exception(ERP_COMPANY_REDIS_NOT_EXISTS); } for (String companyNumber : redisCache.keySet()) { req.put("BUKRS", companyNumber); // 1. 调用ERP接口获取数据 - JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); + JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); if (dataArray == null || dataArray.isEmpty()) { continue; } @@ -134,9 +138,11 @@ public class ErpFactoryServiceImpl implements ErpFactoryService { item.put("BUKRS", companyNumber); } } - dataArrayALL.addAll(dataArray); } + if (CollUtil.isEmpty(dataArrayALL)) { + throw exception(ERP_FACTORY_NOT_EXISTS); + } // 2. 处理公司数据,区分新增和更新 ProcessingResult result = processData(dataArrayALL,funcnrEnum); @@ -155,7 +161,7 @@ public class ErpFactoryServiceImpl implements ErpFactoryService { */ private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { String key = "erpMap" + funcnr.getFuncnr(); - Map numbers = erpConfig.getRedisCacheMap(key); + Map numbers = myRedisConfig.getRedisCacheMap(key); List toUpdate = new ArrayList<>(); List toInsert = new ArrayList<>(); @@ -207,7 +213,7 @@ public class ErpFactoryServiceImpl implements ErpFactoryService { ); Map numberIdMap = insertedRecords.stream() .collect(Collectors.toMap(ErpFactoryDO::getNumber, ErpFactoryDO::getId)); - erpConfig.addRedisCacheMap(result.key,numberIdMap); + myRedisConfig.addRedisCacheMap(result.key,numberIdMap); } if (!result.toUpdate.isEmpty()) { erpFactoryMapper.updateBatch(result.toUpdate); @@ -215,7 +221,7 @@ public class ErpFactoryServiceImpl implements ErpFactoryService { if (!result.deleteNumbers.isEmpty()) { // 使用 in 条件批量删除,提高删除效率 erpFactoryMapper.delete(new LambdaQueryWrapperX().in(ErpFactoryDO::getNumber, result.deleteNumbers)); - erpConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); + myRedisConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); } } @@ -240,6 +246,6 @@ public class ErpFactoryServiceImpl implements ErpFactoryService { Map existingNumbers = erpFactoryMapper.selectList(new LambdaQueryWrapperX()) .stream() .collect(Collectors.toMap(ErpFactoryDO::getNumber, ErpFactoryDO::getId)); - erpConfig.addRedisCacheMap(key, existingNumbers); + myRedisConfig.addRedisCacheMap(key, existingNumbers); } } \ 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/ErpInternalOrderServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpInternalOrderServiceImpl.java index fc09dbd..b16b474 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpInternalOrderServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpInternalOrderServiceImpl.java @@ -7,8 +7,9 @@ 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.mybatis.core.query.LambdaQueryWrapperX; -import com.zt.plat.module.erp.common.conf.ErpConfig; -import com.zt.plat.module.erp.common.enums.OftenEnum; +import com.zt.plat.module.erp.utils.ErpConfig; +import com.zt.plat.module.erp.utils.MyRedisConfig; +import com.zt.plat.module.erp.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpInternalOrderPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpInternalOrderRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpInternalOrderSaveReqVO; @@ -26,7 +27,7 @@ import java.util.Map; import java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_INTERNAL_ORDER_NOT_EXISTS; +import static com.zt.plat.module.erp.enums.ErrorCodeConstants.*; import static dm.jdbc.util.DriverUtil.log; /** @@ -41,6 +42,8 @@ public class ErpInternalOrderServiceImpl implements ErpInternalOrderService { @Resource private ErpInternalOrderMapper erpInternalOrderMapper; + @Resource + private MyRedisConfig myRedisConfig; @Resource private ErpConfig erpConfig; @@ -110,27 +113,31 @@ public class ErpInternalOrderServiceImpl implements ErpInternalOrderService { String funcnr = funcnrEnum.getFuncnr(); //防止缓存数据丢失 String key = "erpMap" + funcnrEnum.getFuncnr(); - if (erpConfig.getRedisCacheMap(key).isEmpty()) { + if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key); } Map req = new HashMap<>(); JSONArray dataArrayALL = new JSONArray(); String companyCode = "erpMap" + OftenEnum.FuncnrEnum.公司代码.getFuncnr(); - Map redisCache = erpConfig.getRedisCacheMap(companyCode); + Map redisCache = myRedisConfig.getRedisCacheMap(companyCode); if (CollUtil.isEmpty(redisCache)) { - return; + throw exception(ERP_COMPANY_REDIS_NOT_EXISTS); } // 1. 调用ERP接口获取数据 for (String number : redisCache.keySet()) { req.put("BUKRS", number); // 1. 调用ERP接口获取数据 - JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); + JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); if (dataArray == null || dataArray.isEmpty()) { continue; } dataArrayALL.addAll(dataArray); } + if (CollUtil.isEmpty(dataArrayALL)) { + throw exception(ERP_INTERNAL_ORDER_NOT_EXISTS); + } // 2. 处理公司数据,区分新增和更新 ProcessingResult result = processData(dataArrayALL, funcnrEnum); @@ -149,7 +156,7 @@ public class ErpInternalOrderServiceImpl implements ErpInternalOrderService { */ private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { String key = "erpMap" + funcnr.getFuncnr(); - Map numbers = erpConfig.getRedisCacheMap(key); + Map numbers = myRedisConfig.getRedisCacheMap(key); List toUpdate = new ArrayList<>(); List toInsert = new ArrayList<>(); @@ -203,7 +210,7 @@ public class ErpInternalOrderServiceImpl implements ErpInternalOrderService { ); Map numberIdMap = insertedRecords.stream() .collect(Collectors.toMap(ErpInternalOrderDO::getNumber, ErpInternalOrderDO::getId)); - erpConfig.addRedisCacheMap(result.key,numberIdMap); + myRedisConfig.addRedisCacheMap(result.key,numberIdMap); } if (!result.toUpdate.isEmpty()) { erpInternalOrderMapper.updateBatch(result.toUpdate); @@ -211,7 +218,7 @@ public class ErpInternalOrderServiceImpl implements ErpInternalOrderService { if (!result.deleteNumbers.isEmpty()) { // 使用 in 条件批量删除,提高删除效率 erpInternalOrderMapper.delete(new LambdaQueryWrapperX().in(ErpInternalOrderDO::getNumber, result.deleteNumbers)); - erpConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); + myRedisConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); } } @@ -236,6 +243,6 @@ public class ErpInternalOrderServiceImpl implements ErpInternalOrderService { Map existingNumbers = erpInternalOrderMapper.selectList(new LambdaQueryWrapperX()) .stream() .collect(Collectors.toMap(ErpInternalOrderDO::getNumber, ErpInternalOrderDO::getId)); - erpConfig.addRedisCacheMap(key, existingNumbers); + myRedisConfig.addRedisCacheMap(key, existingNumbers); } } \ 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/ErpMaterialServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpMaterialServiceImpl.java index 8d785d5..0d953ab 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpMaterialServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpMaterialServiceImpl.java @@ -7,8 +7,9 @@ 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.mybatis.core.query.LambdaQueryWrapperX; -import com.zt.plat.module.erp.common.conf.ErpConfig; -import com.zt.plat.module.erp.common.enums.OftenEnum; +import com.zt.plat.module.erp.utils.ErpConfig; +import com.zt.plat.module.erp.utils.MyRedisConfig; +import com.zt.plat.module.erp.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpMaterialPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpMaterialRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpMaterialSaveReqVO; @@ -28,6 +29,7 @@ import java.util.Map; import java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_INTERNAL_ORDER_NOT_EXISTS; import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_MATERIAL_NOT_EXISTS; import static dm.jdbc.util.DriverUtil.log; @@ -43,6 +45,8 @@ public class ErpMaterialServiceImpl implements ErpMaterialService { @Resource private ErpMaterialMapper erpMaterialMapper; @Resource + private MyRedisConfig myRedisConfig; + @Resource private ErpConfig erpConfig; @Override @@ -111,7 +115,7 @@ public class ErpMaterialServiceImpl implements ErpMaterialService { String funcnr = funcnrEnum.getFuncnr(); //防止缓存数据丢失 String key = "erp" + funcnrEnum.getFuncnr(); - if (erpConfig.getRedisCache(key)==null) { + if (myRedisConfig.getRedisCache(key)==null) { initialize(key); } @@ -127,9 +131,10 @@ public class ErpMaterialServiceImpl implements ErpMaterialService { req.put(funcnrEnum.getDatekey(), datumList); // 1. 调用ERP接口获取数据 - JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); - if (dataArray == null || dataArray.isEmpty()) { - return; + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); + JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); + if (CollUtil.isEmpty(dataArray)) { + throw exception(ERP_MATERIAL_NOT_EXISTS); } // 2. 处理公司数据,区分新增和更新 @@ -149,7 +154,7 @@ public class ErpMaterialServiceImpl implements ErpMaterialService { */ private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { String key = "erp" + funcnr.getFuncnr(); - Map> numbers = erpConfig.numbers(dataArray, key,funcnr.getDatakey()); + Map> numbers = myRedisConfig.numbers(dataArray, key,funcnr.getDatakey()); List allnumbers = numbers.get("all"); List comnumbers = numbers.get("com"); List toUpdate = new ArrayList<>(); @@ -200,7 +205,7 @@ public class ErpMaterialServiceImpl implements ErpMaterialService { if (!result.toUpdate.isEmpty()) { erpMaterialMapper.updateBatchByNumber(result.toUpdate); } - erpConfig.updateRedisCache(result.key,result.allnumbers); + myRedisConfig.updateRedisCache(result.key,result.allnumbers); } /** @@ -225,6 +230,6 @@ public class ErpMaterialServiceImpl implements ErpMaterialService { .stream() .map(ErpMaterialDO::getDownCenterNumber) .collect(Collectors.toList()); - erpConfig.updateRedisCache(key, existingNumbers); + myRedisConfig.updateRedisCache(key, existingNumbers); } } \ 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/ErpProcessDetailServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessDetailServiceImpl.java index 66dd1ce..183c2ab 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessDetailServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessDetailServiceImpl.java @@ -4,8 +4,8 @@ import cn.hutool.core.collection.CollUtil; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; -import com.zt.plat.module.erp.common.conf.ErpConfig; -import com.zt.plat.module.erp.common.enums.OftenEnum; +import com.zt.plat.module.erp.utils.MyRedisConfig; +import com.zt.plat.module.erp.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProcessDetailPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProcessDetailRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProcessDetailSaveReqVO; @@ -37,7 +37,7 @@ public class ErpProcessDetailServiceImpl implements ErpProcessDetailService { private ErpProcessDetailMapper erpProcessDetailMapper; @Resource - private ErpConfig erpConfig; + private MyRedisConfig myRedisConfig; @Override public ErpProcessDetailRespVO createErpProcessDetail(ErpProcessDetailSaveReqVO createReqVO) { @@ -106,16 +106,19 @@ public class ErpProcessDetailServiceImpl implements ErpProcessDetailService { } private ProcessingResult processData(List updateReqVOS, String key) { - if (erpConfig.getRedisCacheMap(key).isEmpty()) { + if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key); } List toUpdate = new ArrayList<>(); List toInsert = new ArrayList<>(); List dataArrayNumbers = new ArrayList<>(); - Map existingNumbers = erpConfig.getRedisCacheMap(key); + Map existingNumbers = myRedisConfig.getRedisCacheMap(key); for (ErpProcessDetailDO updateReqVO : updateReqVOS) { - String mapKey = updateReqVO.getProcessId() + "-" + updateReqVO.getProcessingNumber()+"-"+updateReqVO.getProcessingName(); + if (updateReqVO.getProcessingName() == null|| updateReqVO.getProcessingName().isEmpty()){ + continue; + } + String mapKey = updateReqVO.getProcessId() + "-" + updateReqVO.getProcessingNumber(); if (existingNumbers.containsKey(mapKey)) { updateReqVO.setId(existingNumbers.get(mapKey)); } @@ -146,11 +149,11 @@ public class ErpProcessDetailServiceImpl implements ErpProcessDetailService { new LambdaQueryWrapperX() .in(ErpProcessDetailDO::getProcessId, result.toInsert.stream().map(ErpProcessDetailDO::getProcessId).distinct().collect(Collectors.toList())) .in(ErpProcessDetailDO::getProcessingNumber, result.toInsert.stream().map(ErpProcessDetailDO::getProcessingNumber).distinct().collect(Collectors.toList())) - .in(ErpProcessDetailDO::getProcessingName, result.toInsert.stream().map(ErpProcessDetailDO::getProcessingName).distinct().collect(Collectors.toList())) +// .in(ErpProcessDetailDO::getProcessingName, result.toInsert.stream().map(ErpProcessDetailDO::getProcessingName).distinct().collect(Collectors.toList())) ); Map numberIdMap = insertedRecords.stream() - .collect(Collectors.toMap(asset -> asset.getProcessId() + "-" + asset.getProcessingNumber()+"-"+asset.getProcessingName(), ErpProcessDetailDO::getId)); - erpConfig.addRedisCacheMap(result.key, numberIdMap); + .collect(Collectors.toMap(asset -> asset.getProcessId() + "-" + asset.getProcessingNumber(), ErpProcessDetailDO::getId)); + myRedisConfig.addRedisCacheMap(result.key, numberIdMap); } if (!result.toUpdate.isEmpty()) { erpProcessDetailMapper.updateBatch(result.toUpdate); @@ -161,7 +164,7 @@ public class ErpProcessDetailServiceImpl implements ErpProcessDetailService { if (!idsToDelete.isEmpty()) { erpProcessDetailMapper.deleteByIds(idsToDelete); } - erpConfig.deleteRedisCacheMap(result.key, new ArrayList<>(result.deleteNumbers.keySet())); + myRedisConfig.deleteRedisCacheMap(result.key, new ArrayList<>(result.deleteNumbers.keySet())); } } @@ -183,9 +186,9 @@ public class ErpProcessDetailServiceImpl implements ErpProcessDetailService { List assets = erpProcessDetailMapper.selectList(new LambdaQueryWrapperX()); Map existingNumbers = new HashMap<>(); for (ErpProcessDetailDO asset : assets) { - String mapKey = asset.getProcessId() + "-" + asset.getProcessingNumber()+"-"+asset.getProcessingName(); + String mapKey = asset.getProcessId() + "-" + asset.getProcessingNumber(); existingNumbers.put(mapKey, asset.getId()); } - erpConfig.addRedisCacheMap(key, existingNumbers); + myRedisConfig.addRedisCacheMap(key, existingNumbers); } } \ 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/ErpProcessServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessServiceImpl.java index 8135e63..542f815 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessServiceImpl.java @@ -7,8 +7,9 @@ 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.mybatis.core.query.LambdaQueryWrapperX; -import com.zt.plat.module.erp.common.conf.ErpConfig; -import com.zt.plat.module.erp.common.enums.OftenEnum; +import com.zt.plat.module.erp.utils.ErpConfig; +import com.zt.plat.module.erp.utils.MyRedisConfig; +import com.zt.plat.module.erp.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProcessPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProcessRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProcessSaveReqVO; @@ -26,6 +27,7 @@ import java.util.List; import java.util.Map; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_FACTORY_NOT_EXISTS; import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_PROCESS_NOT_EXISTS; import static dm.jdbc.util.DriverUtil.log; @@ -41,6 +43,9 @@ public class ErpProcessServiceImpl implements ErpProcessService { @Resource private ErpProcessMapper erpProcessMapper; + @Resource + private MyRedisConfig myRedisConfig; + @Resource private ErpConfig erpConfig; @@ -113,26 +118,30 @@ public class ErpProcessServiceImpl implements ErpProcessService { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.工艺路线; String funcnr = funcnrEnum.getFuncnr(); String key = "erpMap" + funcnr; - if (erpConfig.getRedisCacheMap(key).isEmpty()) { + if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key); } Map req = new HashMap<>(); JSONArray dataArrayALL = new JSONArray(); String factKey = "erpMap" + OftenEnum.FuncnrEnum.工厂信息.getFuncnr(); - Map redisCache = erpConfig.getRedisCacheMap(factKey); + Map redisCache = myRedisConfig.getRedisCacheMap(factKey); if (CollUtil.isEmpty(redisCache)) { - throw exception(ERP_PROCESS_NOT_EXISTS); + throw exception(ERP_FACTORY_NOT_EXISTS); } // 1. 调用ERP接口获取数据 for (String factoryNumber : redisCache.keySet()) { req.put("WERKS", factoryNumber); // 1. 调用ERP接口获取数据 - JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); + JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); if (dataArray == null || dataArray.isEmpty()) { continue; } dataArrayALL.addAll(dataArray); } + if (dataArrayALL.isEmpty()){ + throw exception(ERP_PROCESS_NOT_EXISTS); + } // 2. 处理公司数据,区分新增和更新 ProcessingResult result = processData(dataArrayALL, funcnrEnum); @@ -151,7 +160,7 @@ public class ErpProcessServiceImpl implements ErpProcessService { */ private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnrEnum) { String key = "erpMap" + funcnrEnum.getFuncnr(); - Map numbers = erpConfig.getRedisCacheMap(key); + Map numbers = myRedisConfig.getRedisCacheMap(key); List toUpdate = new ArrayList<>(); List erpProcessDetailDOList = new ArrayList<>(); @@ -175,6 +184,7 @@ public class ErpProcessServiceImpl implements ErpProcessService { dataArrayNumbers.add(number); if (numbers.get(number) != null) { // 更新 + DO.setId(numbers.get(number)); toUpdate.add(DO); } else { // 新增 @@ -229,11 +239,11 @@ public class ErpProcessServiceImpl implements ErpProcessService { // 更新Redis缓存 if (!result.addnumbers.isEmpty()) { - erpConfig.addRedisCacheMap(result.key, result.addnumbers); + myRedisConfig.addRedisCacheMap(result.key, result.addnumbers); } if (!result.deleteNumbers.isEmpty()) { - erpConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); + myRedisConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); } } @@ -264,6 +274,6 @@ public class ErpProcessServiceImpl implements ErpProcessService { String mapKey = bom.getFactoryNumber() + "-" + bom.getMaterialNumber() + "-" + bom.getBlineGroup(); existingNumbers.put(mapKey, bom.getId()); } - erpConfig.addRedisCacheMap(key, existingNumbers); + myRedisConfig.addRedisCacheMap(key, existingNumbers); } } \ 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/ErpProductiveOrderServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProductiveOrderServiceImpl.java index af449b3..af51f56 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProductiveOrderServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProductiveOrderServiceImpl.java @@ -6,8 +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.module.erp.common.conf.ErpConfig; -import com.zt.plat.module.erp.common.enums.OftenEnum; +import com.zt.plat.module.erp.utils.ErpConfig; +import com.zt.plat.module.erp.utils.MyRedisConfig; +import com.zt.plat.module.erp.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProductiveOrderPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProductiveOrderRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProductiveOrderSaveReqVO; @@ -27,7 +28,7 @@ import java.util.List; import java.util.Map; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_PRODUCTIVE_ORDER_NOT_EXISTS; +import static com.zt.plat.module.erp.enums.ErrorCodeConstants.*; import static dm.jdbc.util.DriverUtil.log; /** @@ -44,6 +45,8 @@ public class ErpProductiveOrderServiceImpl implements ErpProductiveOrderService @Resource private ErpConfig erpConfig; + @Resource + private MyRedisConfig myRedisConfig; @Override public ErpProductiveOrderRespVO createErpProductiveOrder(ErpProductiveOrderSaveReqVO createReqVO) { @@ -116,7 +119,8 @@ public class ErpProductiveOrderServiceImpl implements ErpProductiveOrderService } // 调用ERP接口获取数据 - JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); + JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); if (dataArray == null || dataArray.isEmpty()) { // 返回空结果而不是抛出异常 return new PageResult<>(new ArrayList<>(), 0L); @@ -193,20 +197,24 @@ public class ErpProductiveOrderServiceImpl implements ErpProductiveOrderService datumList.add(datumEntry); req.put(funcnrEnum.getDatekey(), datumList); JSONArray dataArrayALL = new JSONArray(); - List redisCache = erpConfig.getRedisCache(OftenEnum.FuncnrEnum.工厂信息.getFuncnr()); + List redisCache = myRedisConfig.getRedisCache(OftenEnum.FuncnrEnum.工厂信息.getFuncnr()); if (CollUtil.isEmpty(redisCache)) { - return; + throw exception(ERP_FACTORY_NOT_EXISTS); } // 1. 调用ERP接口获取数据 for (String number : redisCache) { req.put("WERKS", number); // 1. 调用ERP接口获取数据 - JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); + JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); if (dataArray == null || dataArray.isEmpty()) { continue; } dataArrayALL.addAll(dataArray); } + if (dataArrayALL.isEmpty()){ + throw exception(ERP_PRODUCTIVE_ORDER_NOT_EXISTS); + } // 2. 处理公司数据,区分新增和更新 ProcessingResult result = processData(dataArrayALL, funcnrEnum); @@ -225,7 +233,7 @@ public class ErpProductiveOrderServiceImpl implements ErpProductiveOrderService */ private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { String key = "erp" + funcnr.getFuncnr(); - Map> numbers = erpConfig.numbers(dataArray, key, funcnr.getDatakey()); + Map> numbers = myRedisConfig.numbers(dataArray, key, funcnr.getDatakey()); List allnumbers = numbers.get("all"); List comnumbers = numbers.get("com"); List toUpdate = new ArrayList<>(); @@ -265,7 +273,7 @@ public class ErpProductiveOrderServiceImpl implements ErpProductiveOrderService if (!result.toUpdate.isEmpty()) { erpProductiveOrderMapper.updateBatch(result.toUpdate); } - erpConfig.updateRedisCache(result.key, result.allnumbers); + myRedisConfig.updateRedisCache(result.key, result.allnumbers); } /** diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProductiveVersionServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProductiveVersionServiceImpl.java index ce6bbf5..0f94a4b 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProductiveVersionServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProductiveVersionServiceImpl.java @@ -7,8 +7,9 @@ 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.mybatis.core.query.LambdaQueryWrapperX; -import com.zt.plat.module.erp.common.conf.ErpConfig; -import com.zt.plat.module.erp.common.enums.OftenEnum; +import com.zt.plat.module.erp.utils.ErpConfig; +import com.zt.plat.module.erp.utils.MyRedisConfig; +import com.zt.plat.module.erp.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProductiveVersionPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProductiveVersionRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProductiveVersionSaveReqVO; @@ -26,7 +27,7 @@ import java.util.Map; import java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_PRODUCTIVE_VERSION_NOT_EXISTS; +import static com.zt.plat.module.erp.enums.ErrorCodeConstants.*; import static dm.jdbc.util.DriverUtil.log; /** @@ -41,6 +42,8 @@ public class ErpProductiveVersionServiceImpl implements ErpProductiveVersionServ @Resource private ErpProductiveVersionMapper erpProductiveVersionMapper; + @Resource + private MyRedisConfig myRedisConfig; @Resource private ErpConfig erpConfig; @@ -110,27 +113,31 @@ public class ErpProductiveVersionServiceImpl implements ErpProductiveVersionServ String funcnr = funcnrEnum.getFuncnr(); //防止缓存数据丢失 String key = "erpMap" + funcnrEnum.getFuncnr(); - if (erpConfig.getRedisCacheMap(key).isEmpty()) { + if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key); } Map req = new HashMap<>(); JSONArray dataArrayALL = new JSONArray(); String factKey ="erpMap"+ OftenEnum.FuncnrEnum.工厂信息.getFuncnr(); - Map redisCache = erpConfig.getRedisCacheMap(factKey); + Map redisCache = myRedisConfig.getRedisCacheMap(factKey); if (CollUtil.isEmpty(redisCache)) { - return; + throw exception(ERP_FACTORY_NOT_EXISTS); } // 1. 调用ERP接口获取数据 for (String number : redisCache.keySet()) { req.put("WERKS", number); // 1. 调用ERP接口获取数据 - JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); + JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); if (dataArray == null || dataArray.isEmpty()) { continue; } dataArrayALL.addAll(dataArray); } + if (dataArrayALL.isEmpty()){ + throw exception(ERP_PRODUCTIVE_VERSION_NOT_EXISTS); + } // 2. 处理公司数据,区分新增和更新 ProcessingResult result = processData(dataArrayALL,funcnrEnum); @@ -149,7 +156,7 @@ public class ErpProductiveVersionServiceImpl implements ErpProductiveVersionServ */ private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { String key = "erpMap" + funcnr.getFuncnr(); - Map numbers = erpConfig.getRedisCacheMap(key); + Map numbers = myRedisConfig.getRedisCacheMap(key); List toUpdate = new ArrayList<>(); List toInsert = new ArrayList<>(); @@ -204,7 +211,7 @@ public class ErpProductiveVersionServiceImpl implements ErpProductiveVersionServ ); Map numberIdMap = insertedRecords.stream() .collect(Collectors.toMap(asset -> asset.getFactoryNumber() + "-" + asset.getMaterialNumber()+ "-" + asset.getProductiveVersionNumber(), ErpProductiveVersionDO::getId)); - erpConfig.addRedisCacheMap(result.key,numberIdMap); + myRedisConfig.addRedisCacheMap(result.key,numberIdMap); } if (!result.toUpdate.isEmpty()) { erpProductiveVersionMapper.updateBatch(result.toUpdate); @@ -213,7 +220,7 @@ public class ErpProductiveVersionServiceImpl implements ErpProductiveVersionServ // 使用流式处理和批处理优化删除逻辑 List idsToDelete = new ArrayList<>(result.deleteNumbers.values()); erpProductiveVersionMapper.deleteByIds(idsToDelete); - erpConfig.deleteRedisCacheMap(result.key, new ArrayList<>(result.deleteNumbers.keySet())); + myRedisConfig.deleteRedisCacheMap(result.key, new ArrayList<>(result.deleteNumbers.keySet())); } } @@ -241,6 +248,6 @@ public class ErpProductiveVersionServiceImpl implements ErpProductiveVersionServ String mapKey = asset.getFactoryNumber() + "-" + asset.getMaterialNumber() + "-" + asset.getProductiveVersionNumber(); existingNumbers.put(mapKey, asset.getId()); } - erpConfig.addRedisCacheMap(key, existingNumbers); + myRedisConfig.addRedisCacheMap(key, existingNumbers); } } \ 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/ErpPurchaseOrganizationServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpPurchaseOrganizationServiceImpl.java index d23e2d5..e0ee45d 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpPurchaseOrganizationServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpPurchaseOrganizationServiceImpl.java @@ -7,8 +7,9 @@ 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.mybatis.core.query.LambdaQueryWrapperX; -import com.zt.plat.module.erp.common.conf.ErpConfig; -import com.zt.plat.module.erp.common.enums.OftenEnum; +import com.zt.plat.module.erp.utils.ErpConfig; +import com.zt.plat.module.erp.utils.MyRedisConfig; +import com.zt.plat.module.erp.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpPurchaseOrganizationPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpPurchaseOrganizationRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpPurchaseOrganizationSaveReqVO; @@ -26,7 +27,7 @@ import java.util.Map; import java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_PURCHASE_ORGANIZATION_NOT_EXISTS; +import static com.zt.plat.module.erp.enums.ErrorCodeConstants.*; import static dm.jdbc.util.DriverUtil.log; /** @@ -41,6 +42,8 @@ public class ErpPurchaseOrganizationServiceImpl implements ErpPurchaseOrganizati @Resource private ErpPurchaseOrganizationMapper erpPurchaseOrganizationMapper; + @Resource + private MyRedisConfig myRedisConfig; @Resource private ErpConfig erpConfig; @@ -110,7 +113,7 @@ public class ErpPurchaseOrganizationServiceImpl implements ErpPurchaseOrganizati String funcnr = funcnrEnum.getFuncnr(); //防止缓存数据丢失 String key = "erpMap" + funcnrEnum.getFuncnr(); - if (erpConfig.getRedisCacheMap(key).isEmpty()) { + if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key); } @@ -118,15 +121,16 @@ public class ErpPurchaseOrganizationServiceImpl implements ErpPurchaseOrganizati JSONArray dataArrayALL = new JSONArray(); // String factKey ="erpMap"+ OftenEnum.FuncnrEnum.工厂信息.getFuncnr(); String factKey ="erpMap"+ OftenEnum.FuncnrEnum.公司代码.getFuncnr(); - Map redisCache = erpConfig.getRedisCacheMap(factKey); + Map redisCache = myRedisConfig.getRedisCacheMap(factKey); if (CollUtil.isEmpty(redisCache)) { - return; + throw exception(ERP_COMPANY_REDIS_NOT_EXISTS); } // 1. 调用ERP接口获取数据 for (String number : redisCache.keySet()) { req.put("BUKRS", number); // 1. 调用ERP接口获取数据 - JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); + JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); if (dataArray == null || dataArray.isEmpty()) { continue; } @@ -139,6 +143,9 @@ public class ErpPurchaseOrganizationServiceImpl implements ErpPurchaseOrganizati } dataArrayALL.addAll(dataArray); } + if (dataArrayALL.isEmpty()){ + throw exception(ERP_PURCHASE_ORGANIZATION_NOT_EXISTS); + } // 2. 处理公司数据,区分新增和更新 ProcessingResult result = processData(dataArrayALL,funcnrEnum); @@ -157,7 +164,7 @@ public class ErpPurchaseOrganizationServiceImpl implements ErpPurchaseOrganizati */ private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { String key = "erpMap" + funcnr.getFuncnr(); - Map numbers = erpConfig.getRedisCacheMap(key); + Map numbers = myRedisConfig.getRedisCacheMap(key); List toUpdate = new ArrayList<>(); List toInsert = new ArrayList<>(); @@ -209,7 +216,7 @@ public class ErpPurchaseOrganizationServiceImpl implements ErpPurchaseOrganizati ); Map numberIdMap = insertedRecords.stream() .collect(Collectors.toMap(ErpPurchaseOrganizationDO::getNumber, ErpPurchaseOrganizationDO::getId)); - erpConfig.addRedisCacheMap(result.key,numberIdMap); + myRedisConfig.addRedisCacheMap(result.key,numberIdMap); } if (!result.toUpdate.isEmpty()) { erpPurchaseOrganizationMapper.updateBatch(result.toUpdate); @@ -217,7 +224,7 @@ public class ErpPurchaseOrganizationServiceImpl implements ErpPurchaseOrganizati if (!result.deleteNumbers.isEmpty()){ // 使用 in 条件批量删除,提高删除效率 erpPurchaseOrganizationMapper.delete(new LambdaQueryWrapperX().in(ErpPurchaseOrganizationDO::getNumber, result.deleteNumbers)); - erpConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); + myRedisConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); } } @@ -242,6 +249,6 @@ public class ErpPurchaseOrganizationServiceImpl implements ErpPurchaseOrganizati Map existingNumbers = erpPurchaseOrganizationMapper.selectList(new LambdaQueryWrapperX()) .stream() .collect(Collectors.toMap(ErpPurchaseOrganizationDO::getNumber, ErpPurchaseOrganizationDO::getId)); - erpConfig.addRedisCacheMap(key, existingNumbers); + myRedisConfig.addRedisCacheMap(key, existingNumbers); } } \ 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/ErpSalesOrganizationServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpSalesOrganizationServiceImpl.java index 64e43a3..51cb5bf 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpSalesOrganizationServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpSalesOrganizationServiceImpl.java @@ -7,8 +7,9 @@ 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.mybatis.core.query.LambdaQueryWrapperX; -import com.zt.plat.module.erp.common.conf.ErpConfig; -import com.zt.plat.module.erp.common.enums.OftenEnum; +import com.zt.plat.module.erp.utils.ErpConfig; +import com.zt.plat.module.erp.utils.MyRedisConfig; +import com.zt.plat.module.erp.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpSalesOrganizationPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpSalesOrganizationRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpSalesOrganizationSaveReqVO; @@ -26,7 +27,7 @@ import java.util.Map; import java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_SALES_ORGANIZATION_NOT_EXISTS; +import static com.zt.plat.module.erp.enums.ErrorCodeConstants.*; import static dm.jdbc.util.DriverUtil.log; /** @@ -41,6 +42,8 @@ public class ErpSalesOrganizationServiceImpl implements ErpSalesOrganizationServ @Resource private ErpSalesOrganizationMapper erpSalesOrganizationMapper; + @Resource + private MyRedisConfig myRedisConfig; @Resource private ErpConfig erpConfig; @@ -110,22 +113,23 @@ public class ErpSalesOrganizationServiceImpl implements ErpSalesOrganizationServ String funcnr = funcnrEnum.getFuncnr(); //防止缓存数据丢失 String key = "erpMap" + funcnrEnum.getFuncnr(); - if (erpConfig.getRedisCacheMap(key).isEmpty()) { + if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key); } Map req = new HashMap<>(); JSONArray dataArrayALL = new JSONArray(); String factKey ="erpMap"+ OftenEnum.FuncnrEnum.公司代码.getFuncnr(); - Map redisCache = erpConfig.getRedisCacheMap(factKey); + Map redisCache = myRedisConfig.getRedisCacheMap(factKey); if (CollUtil.isEmpty(redisCache)) { - return; + throw exception(ERP_COMPANY_REDIS_NOT_EXISTS); } // 1. 调用ERP接口获取数据 for (String number : redisCache.keySet()) { req.put("BUKRS", number); // 1. 调用ERP接口获取数据 - JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); + JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); if (dataArray == null || dataArray.isEmpty()) { continue; } @@ -138,6 +142,9 @@ public class ErpSalesOrganizationServiceImpl implements ErpSalesOrganizationServ } dataArrayALL.addAll(dataArray); } + if (dataArrayALL.isEmpty()){ + throw exception(ERP_SALES_ORGANIZATION_NOT_EXISTS); + } // 2. 处理公司数据,区分新增和更新 ProcessingResult result = processData(dataArrayALL,funcnrEnum); @@ -156,7 +163,7 @@ public class ErpSalesOrganizationServiceImpl implements ErpSalesOrganizationServ */ private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { String key = "erpMap" + funcnr.getFuncnr(); - Map numbers = erpConfig.getRedisCacheMap(key); + Map numbers = myRedisConfig.getRedisCacheMap(key); List toUpdate = new ArrayList<>(); List toInsert = new ArrayList<>(); @@ -207,7 +214,7 @@ public class ErpSalesOrganizationServiceImpl implements ErpSalesOrganizationServ ); Map numberIdMap = insertedRecords.stream() .collect(Collectors.toMap(ErpSalesOrganizationDO::getNumber, ErpSalesOrganizationDO::getId)); - erpConfig.addRedisCacheMap(result.key,numberIdMap); + myRedisConfig.addRedisCacheMap(result.key,numberIdMap); } if (!result.toUpdate.isEmpty()) { erpSalesOrganizationMapper.updateBatch(result.toUpdate); @@ -215,7 +222,7 @@ public class ErpSalesOrganizationServiceImpl implements ErpSalesOrganizationServ if (!result.deleteNumbers.isEmpty()) { // 使用 in 条件批量删除,提高删除效率 erpSalesOrganizationMapper.delete(new LambdaQueryWrapperX().in(ErpSalesOrganizationDO::getNumber, result.deleteNumbers)); - erpConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); + myRedisConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); } } @@ -240,6 +247,6 @@ public class ErpSalesOrganizationServiceImpl implements ErpSalesOrganizationServ Map existingNumbers = erpSalesOrganizationMapper.selectList(new LambdaQueryWrapperX()) .stream() .collect(Collectors.toMap(ErpSalesOrganizationDO::getNumber, ErpSalesOrganizationDO::getId)); - erpConfig.addRedisCacheMap(key, existingNumbers); + myRedisConfig.addRedisCacheMap(key, existingNumbers); } } \ 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/ErpWarehouseServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpWarehouseServiceImpl.java index 41bb769..27c07a4 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpWarehouseServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpWarehouseServiceImpl.java @@ -7,8 +7,9 @@ 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.mybatis.core.query.LambdaQueryWrapperX; -import com.zt.plat.module.erp.common.conf.ErpConfig; -import com.zt.plat.module.erp.common.enums.OftenEnum; +import com.zt.plat.module.erp.utils.ErpConfig; +import com.zt.plat.module.erp.utils.MyRedisConfig; +import com.zt.plat.module.erp.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpWarehousePageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpWarehouseRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpWarehouseSaveReqVO; @@ -26,7 +27,7 @@ import java.util.Map; import java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; -import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_WAREHOUSE_NOT_EXISTS; +import static com.zt.plat.module.erp.enums.ErrorCodeConstants.*; import static dm.jdbc.util.DriverUtil.log; /** @@ -41,6 +42,8 @@ public class ErpWarehouseServiceImpl implements ErpWarehouseService { @Resource private ErpWarehouseMapper erpWarehouseMapper; + @Resource + private MyRedisConfig myRedisConfig; @Resource private ErpConfig erpConfig; @@ -110,22 +113,23 @@ public class ErpWarehouseServiceImpl implements ErpWarehouseService { String funcnr = funcnrEnum.getFuncnr(); //防止缓存数据丢失 String key = "erpMap" + funcnrEnum.getFuncnr(); - if (erpConfig.getRedisCacheMap(key).isEmpty()) { + if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { initializeMap(key); } Map req = new HashMap<>(); JSONArray dataArrayALL = new JSONArray(); String factKey = "erpMap" + OftenEnum.FuncnrEnum.工厂信息.getFuncnr(); - Map redisCache = erpConfig.getRedisCacheMap(factKey); + Map redisCache = myRedisConfig.getRedisCacheMap(factKey); if (CollUtil.isEmpty(redisCache)) { - return; + throw exception(ERP_FACTORY_NOT_EXISTS); } // 1. 调用ERP接口获取数据 for (String number : redisCache.keySet()) { req.put("WERKS", number); // 1. 调用ERP接口获取数据 - JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); + JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); if (dataArray == null || dataArray.isEmpty()) { continue; } @@ -136,9 +140,11 @@ public class ErpWarehouseServiceImpl implements ErpWarehouseService { item.put("WERKS", number); } } - dataArrayALL.addAll(dataArray); } + if (dataArrayALL.isEmpty()){ + throw exception(ERP_WAREHOUSE_NOT_EXISTS); + } // 2. 处理公司数据,区分新增和更新 ProcessingResult result = processData(dataArrayALL, funcnrEnum); @@ -157,7 +163,7 @@ public class ErpWarehouseServiceImpl implements ErpWarehouseService { */ private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { String key = "erpMap" + funcnr.getFuncnr(); - Map numbers = erpConfig.getRedisCacheMap(key); + Map numbers = myRedisConfig.getRedisCacheMap(key); List toUpdate = new ArrayList<>(); List toInsert = new ArrayList<>(); @@ -207,7 +213,7 @@ public class ErpWarehouseServiceImpl implements ErpWarehouseService { ); Map numberIdMap = insertedRecords.stream() .collect(Collectors.toMap(asset -> asset.getFactoryNumber() + "-" + asset.getNumber(), ErpWarehouseDO::getId)); - erpConfig.addRedisCacheMap(result.key,numberIdMap); + myRedisConfig.addRedisCacheMap(result.key,numberIdMap); } if (!result.toUpdate.isEmpty()) { erpWarehouseMapper.updateBatch(result.toUpdate); @@ -216,7 +222,7 @@ public class ErpWarehouseServiceImpl implements ErpWarehouseService { // 使用流式处理和批处理优化删除逻辑 List idsToDelete = new ArrayList<>(result.deleteNumbers.values()); erpWarehouseMapper.deleteByIds(idsToDelete); - erpConfig.deleteRedisCacheMap(result.key, new ArrayList<>(result.deleteNumbers.keySet())); + myRedisConfig.deleteRedisCacheMap(result.key, new ArrayList<>(result.deleteNumbers.keySet())); } } @@ -244,6 +250,6 @@ public class ErpWarehouseServiceImpl implements ErpWarehouseService { String mapKey = asset.getFactoryNumber() + "-" + asset.getNumber(); existingNumbers.put(mapKey, asset.getId()); } - erpConfig.addRedisCacheMap(key, existingNumbers); + myRedisConfig.addRedisCacheMap(key, existingNumbers); } } \ No newline at end of file diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/utils/ErpConfig.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/utils/ErpConfig.java new file mode 100644 index 0000000..1d8f667 --- /dev/null +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/utils/ErpConfig.java @@ -0,0 +1,170 @@ +package com.zt.plat.module.erp.utils; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.zt.plat.module.erp.api.dto.ErpSubmitReqDTO; +import jakarta.annotation.Resource; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestTemplate; + +import java.util.*; +import java.util.stream.Collectors; + +import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zt.plat.module.erp.enums.ErrorCodeConstants.*; +import static dm.jdbc.util.DriverUtil.log; + +@Configuration +public class ErpConfig { + + @Value("${erp.address}") + private String erpAddress; + + @Value("${erp.sapsys}") + private String sapsys; + + /** + * 调用ERP接口获取erp数据 + */ + public HashMap fetchDataFromERP(String funcnr, Map req) { + try { + // 构建完整URL + String url = "http://" + erpAddress + "/api/rfc/get"; + // 构建请求参数 + JSONObject requestBody = new JSONObject(); + requestBody.put("sapsys", sapsys); + requestBody.put("funcnr", funcnr); // 获取枚举值 + if (req != null) { + requestBody.put("req", req); + } + + // 设置请求头 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + // 创建HTTP请求实体 + HttpEntity requestEntity = new HttpEntity<>(requestBody.toJSONString(), headers); + + // 发送POST请求 + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity response = restTemplate.postForEntity(url, requestEntity, String.class); + + // 解析响应结果 + String responseBody = response.getBody(); + if (responseBody.isEmpty()) { + throw exception(ERP_NOT_EXISTS); + } + + HashMap resMap = new HashMap<>(); + JSONObject jsonResponse = JSON.parseObject(responseBody); + if (jsonResponse == null) { + throw exception(ERP_NOT_JSON_EXISTS); + } + // 正确获取E_DATA数组 + JSONObject dataObject = jsonResponse.getJSONObject("data"); + //判断 result里的succeed是否为true + boolean succeed = jsonResponse.getBoolean("succeed"); + if (succeed && "S".equals(dataObject.getString("E_FLAG"))) { + String flag = "S"; + JSONArray E_RESP = dataObject.getJSONArray("E_DATA"); + String E_MSG = dataObject.getString("E_MSG"); + resMap.put("E_RESP", E_RESP); + resMap.put("resStr", E_MSG); + resMap.put("flag", flag); + return resMap; + } else { + String E_MSG = dataObject.getString("E_MSG"); + String flag = "E"; + resMap.put("E_RESP", null); + resMap.put("resStr", E_MSG); + resMap.put("flag", flag); + return resMap; + } + } catch (Exception e) { + log.error("调用ERP RFC接口失败: {}", e); + throw exception(ERP_ERROR_EXISTS); + } + } + + /** + * 调用ERP接口更新erp数据 + */ + public HashMap pushDataToErp(ErpSubmitReqDTO reqDTO) { + try { + // 构建完整URL + String url = "http://" + erpAddress + "/api/rfc/post"; + // 构建请求参数 + JSONObject requestBody = new JSONObject(); + requestBody.put("uuid", UUID.randomUUID().toString()); + requestBody.put("sapsys", sapsys); + requestBody.put("srcsys", "DSC"); + requestBody.put("funcnr", reqDTO.getFuncnr()); + requestBody.put("bskey", reqDTO.getBskey()); + requestBody.put("usrid", reqDTO.getUsrid()); + requestBody.put("usrnm", reqDTO.getUsrnm()); + if (reqDTO.getSign() != null) { + requestBody.put("sign", reqDTO.getSign()); + } + if (reqDTO.getReq() != null) { + requestBody.put("req", reqDTO.getReq()); + } + // 设置请求头 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + // 创建HTTP请求实体 + HttpEntity requestEntity = new HttpEntity<>(requestBody.toJSONString(), headers); + + // 发送POST请求 + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity response = restTemplate.postForEntity(url, requestEntity, String.class); + + // 解析响应结果 + String responseBody = response.getBody(); + if (responseBody.isEmpty()) { + throw exception(ERP_NOT_EXISTS); + } + + JSONObject jsonResponse = JSON.parseObject(responseBody); + if (jsonResponse == null) { + throw exception(ERP_NOT_JSON_EXISTS); + } + + HashMap resMap = new HashMap<>(); + boolean succeed = jsonResponse.getBoolean("succeed"); + JSONObject data = jsonResponse.getJSONObject("data"); + if (data == null) { + log.error("SAP接口返回值为空," + jsonResponse.getString("msg")); + throw exception(ERP_NOT_EXISTS); + } else if (succeed && "S".equals(data.getString("E_FLAG"))) { + String flag = "S"; + String E_RESP = data.getString("E_RESP"); + String E_MSG = data.getString("ET_MSG"); + resMap.put("E_RESP", E_RESP); + resMap.put("resStr", E_MSG); + resMap.put("flag", flag); + } else if (!succeed && "E".equals(data.getString("E_FLAG"))) { + String flag = "E"; + String E_MSG = data.getString("ET_MSG"); + if (StrUtil.isBlank(E_MSG)) { + E_MSG = jsonResponse.getString("msg"); + } + resMap.put("resStr", E_MSG); + resMap.put("flag", flag); + } + return resMap; + } catch (Exception e) { + log.error("调用ERP RFC接口失败: {}", e); + throw exception(ERP_ERROR_EXISTS); + } + } + +} diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/utils/MyRedisConfig.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/utils/MyRedisConfig.java new file mode 100644 index 0000000..e7fb2b7 --- /dev/null +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/utils/MyRedisConfig.java @@ -0,0 +1,191 @@ +package com.zt.plat.module.erp.utils; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; +import jakarta.annotation.Resource; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +import java.util.*; +import java.util.stream.Collectors; + +import static dm.jdbc.util.DriverUtil.log; + + +/** + * @author wuxz + * @create 2022-06-07 20:54 + */ +@Primary +@Configuration +public class MyRedisConfig { + + @Resource + private RedisTemplate redisTemplate; + + @Bean(value = "MyRedisTemplate") + public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(redisConnectionFactory); + + // 通过 Jackson 组件进行序列化 + RedisSerializer serializer = redisSerializer(); + + // key 和 value + // 一般来说, redis-key采用字符串序列化; + // redis-value采用json序列化, json的体积小,可读性高,不需要实现serializer接口。 + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setValueSerializer(serializer); + + redisTemplate.setHashKeySerializer(new StringRedisSerializer()); + redisTemplate.setHashValueSerializer(serializer); + + redisTemplate.afterPropertiesSet(); + return redisTemplate; + } + + + @Bean + public RedisSerializer redisSerializer() { + //创建JSON序列化器 + Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<>(Object.class); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + // objectMapper.enableDefaultTyping()被弃用 + objectMapper.activateDefaultTyping( + LaissezFaireSubTypeValidator.instance, + ObjectMapper.DefaultTyping.NON_FINAL, + JsonTypeInfo.As.WRAPPER_ARRAY); + serializer.setObjectMapper(objectMapper); + return serializer; + } + + + + + //list + public Map> numbers(JSONArray dataArray, String key, String dataKey) { + // 使用 Redis 获取缓存数据 + Map> numbers = new HashMap<>(); + List cachedNumbers = (List) redisTemplate.opsForValue().get(key); + if (cachedNumbers == null) { + cachedNumbers = new ArrayList<>(); + } + + // 提取有效的 BUKRS 编号 + List existingNumbers; + if (dataArray != null) { + // 将dataKey按"-"分割成多个部分 + String[] keyParts = dataKey.split("-"); + existingNumbers = dataArray.stream() + .filter(Objects::nonNull) + .map(dataJson -> { + JSONObject jsonObject = (JSONObject) dataJson; + // 根据每个部分逐级获取值并拼接 + StringBuilder sb = new StringBuilder(); + for (String part : keyParts) { + String value = jsonObject.getString(part); + if (value != null) { + if (sb.length() > 0) { + sb.append("-"); + } + sb.append(value.trim()); + } else { + // 如果某一部分为空,则整个值视为无效 + return null; + } + } + return sb.toString(); + }) + .filter(Objects::nonNull) // 过滤掉无效值 + .collect(Collectors.toList()); + } else { + existingNumbers = new ArrayList<>(); + } + + // 找出共同存在的编号 + Set cachedNumberSet = new HashSet<>(cachedNumbers != null ? cachedNumbers : new ArrayList<>()); + List commonNumbers = existingNumbers.stream() + .filter(cachedNumberSet::contains) + .collect(Collectors.toList()); + numbers.put("com", commonNumbers); + + //找出需要删除的字段。只有erp查询全部的接口能用到 + List deleteNumbers = cachedNumberSet.stream() + .filter(num -> !existingNumbers.contains(num)) + .collect(Collectors.toList()); + numbers.put("delete", deleteNumbers); + + // 找出需要新增的编号 + List newNumbers = existingNumbers.stream() + .filter(num -> !cachedNumberSet.contains(num)) + .toList(); + + // 合并所有编号 + List allNumbers = new ArrayList<>(cachedNumbers); + allNumbers.addAll(newNumbers); + numbers.put("all", allNumbers); + + return numbers; + } + + public void updateRedisCache(String key, List allnumbers) { + // 使用 Redis 更新缓存数据 + redisTemplate.opsForValue().set(key, allnumbers); + } + + public List getRedisCache(String key) { + // 使用 Redis 更新缓存数据 + return (List) redisTemplate.opsForValue().get(key); + } + + //map + public Map getRedisCacheMap(String key) { + // 使用 Redis 获取缓存数据 + Map result = (Map) redisTemplate.opsForHash().entries(key); + return result; + } + + public void addRedisCacheMap(String key, Map allnumbers) { + // 使用 Redis 更新缓存数据 + redisTemplate.opsForHash().putAll(key, allnumbers); + } + + public void deleteRedisCacheMap(String key, List deleteNumbers) { + if (deleteNumbers == null || deleteNumbers.isEmpty()) { + log.debug("No items to delete from Redis hash: {}", key); + return; + } + + try { + Object[] keysToDelete = deleteNumbers.toArray(new String[0]); + Long deletedCount = redisTemplate.opsForHash().delete(key, keysToDelete); + log.debug("Deleted" + deletedCount + "items from Redis hash:" + key); + } catch (Exception e) { + log.error("Failed to delete items from Redis hash:" + key, e); + throw e; + } + } + + + + + + + + + + + +} \ No newline at end of file From 88063d84ae784857e6b2299911fb8c6d862e413a Mon Sep 17 00:00:00 2001 From: chenbowen Date: Thu, 9 Oct 2025 09:16:48 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20xxl-job=20=E5=9B=9E?= =?UTF-8?q?=E8=B0=83=E7=AB=AF=E5=8F=A3=E6=98=A0=E5=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deployment.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/deployment.yaml b/deployment.yaml index 59cad93..fb94915 100644 --- a/deployment.yaml +++ b/deployment.yaml @@ -65,3 +65,7 @@ spec: port: 48100 targetPort: 48100 nodePort: 30097 + - protocol: TCP + port: 9999 + targetPort: 9999 + nodePort: 30197 From 303ce4ec4de8c59563214c3994693df08d3c52bf Mon Sep 17 00:00:00 2001 From: guojunyun Date: Thu, 9 Oct 2025 09:34:08 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E5=90=88=E5=90=8C=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E4=BF=AE=E6=94=B9=E3=80=81=E5=90=88=E5=90=8C?= =?UTF-8?q?=E5=AE=A1=E6=A0=B8=E6=8E=A5=E5=8F=A3=E9=83=A8=E5=88=86=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/ErrorCodeConstants.java | 5 +- .../enums/TableFieldConstants.java | 4 +- .../enums/contract/AuditResultEnum.java | 46 ++ .../admin/contract/ContractController.java | 17 +- .../vo/contract/ContractApprovalReqVO.java | 23 + .../vo/contract/ContractDetailSaveReqVO.java | 3 - .../vo/contract/ContractFormulaSaveReqVO.java | 16 +- .../vo/contract/ContractSaveReqVO.java | 3 + .../vo/contract/ContractViewDetailRespVO.java | 3 - .../contract/ContractViewFormulaRespVO.java | 15 +- .../vo/contract/ContractViewRespVO.java | 3 + .../contract/ContractFormulaDO.java | 6 +- .../service/contract/ContractService.java | 3 + .../service/contract/ContractServiceImpl.java | 459 ++++++++++-------- 14 files changed, 364 insertions(+), 242 deletions(-) create mode 100644 zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/contract/AuditResultEnum.java create mode 100644 zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractApprovalReqVO.java diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErrorCodeConstants.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErrorCodeConstants.java index e958890..57c28fb 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErrorCodeConstants.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/ErrorCodeConstants.java @@ -17,7 +17,8 @@ public interface ErrorCodeConstants { ErrorCode CONTRACT_PAPER_NUMBER_EXISTS = new ErrorCode(1_027_000_002, "合同编号已存在"); ErrorCode CONTRACT_NOT_EXISTS = new ErrorCode(1_027_000_003, "合同不存在"); ErrorCode CONTRACT_ID_NOT_EXISTS = new ErrorCode(1_027_000_004, "合同主键为空"); - ErrorCode CONTRACT_STATUS_NOT_UPDATE = new ErrorCode(1_027_000_005, "{}合同不允许修改"); + ErrorCode CONTRACT_STATUS_NOT_UPDATE = new ErrorCode(1_027_000_005, "{}状态合同不允许修改"); ErrorCode CONTRACT_DATA_NOT_EXISTS = new ErrorCode(1_027_000_006, "{}不存在"); - ErrorCode CONTRACT_STATUS_NOT_SUBMIT_APPROVAL = new ErrorCode(1_027_000_005, "{}合同不允许提交审核"); + ErrorCode CONTRACT_STATUS_NOT_SUBMIT_APPROVAL = new ErrorCode(1_027_000_007, "{}状态合同不允许提交审核"); + ErrorCode CONTRACT_STATUS_NOT_APPROVAL = new ErrorCode(1_027_000_008, "{}状态合同不允许审核"); } diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/TableFieldConstants.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/TableFieldConstants.java index 9880f79..ff910b3 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/TableFieldConstants.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/TableFieldConstants.java @@ -99,8 +99,8 @@ public class TableFieldConstants { public static final String BSE_CTRT_PLN_CTRT_DTL_ID = "CTRT_DTL_ID"; /* 价款结算条款表 */ - // 合同明细主键 - public static final String BSE_CTRT_FMU_CTRT_DTL_ID = "CTRT_DTL_ID"; + // 合同主键 + public static final String BSE_CTRT_FMU_CTRT_ID = "CTRT_ID"; /* 基础系数配置表 */ // 条款主键 diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/contract/AuditResultEnum.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/contract/AuditResultEnum.java new file mode 100644 index 0000000..14da5a3 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/enums/contract/AuditResultEnum.java @@ -0,0 +1,46 @@ +package com.zt.plat.module.contractorder.enums.contract; + +/** + * 合同审核结果 + */ +public enum AuditResultEnum { + /** + * 合同状态-草稿 + */ + PASS("通过","PASS", null), + /** + * 合同状态-正在审核 + */ + REJECT("驳回","REJECT",null); + + AuditResultEnum(String label, String code, String remark) { + this.label = label; + this.code = code; + this.remark = remark; + } + + /** + * 标签 + */ + private final String label; + /** + * 编码 + */ + private final String code; + /** + * 备注 + */ + private final String remark; + + public String getLabel() { + return label; + } + + public String getCode() { + return code; + } + + public String getRemark() { + return remark; + } +} diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/ContractController.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/ContractController.java index ea93e04..545fce1 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/ContractController.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/ContractController.java @@ -5,10 +5,7 @@ import com.zt.plat.framework.business.interceptor.BusinessControllerMarker; import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; -import com.zt.plat.module.contractorder.controller.admin.contract.vo.contract.ContractPageReqVO; -import com.zt.plat.module.contractorder.controller.admin.contract.vo.contract.ContractRespVO; -import com.zt.plat.module.contractorder.controller.admin.contract.vo.contract.ContractSaveReqVO; -import com.zt.plat.module.contractorder.controller.admin.contract.vo.contract.ContractViewRespVO; +import com.zt.plat.module.contractorder.controller.admin.contract.vo.contract.*; import com.zt.plat.module.contractorder.dal.dataobject.contract.ContractMainDO; import com.zt.plat.module.contractorder.service.contract.ContractService; import io.swagger.v3.oas.annotations.Operation; @@ -109,6 +106,14 @@ public class ContractController implements BusinessControllerMarker { return success(contractService.submitApproval(id)); } + // TODO + @PostMapping("/approval") + @Operation(summary = "合同审批") + @PreAuthorize("@ss.hasPermission('system:contract:approval')") + public CommonResult approval(@Valid @RequestBody ContractApprovalReqVO reqVO) { + return success(contractService.approval(reqVO)); + } + // TODO @PostMapping("/view/approval") @Operation(summary = "查看审批") @@ -117,9 +122,9 @@ public class ContractController implements BusinessControllerMarker { } // TODO - @PostMapping("/submit/ERP") + @PostMapping("/submit/erp") @Operation(summary = "提交ERP") @PreAuthorize("@ss.hasPermission('system:contract:erp')") - public void submitERP() { + public void submitErp() { } } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractApprovalReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractApprovalReqVO.java new file mode 100644 index 0000000..5e14731 --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractApprovalReqVO.java @@ -0,0 +1,23 @@ +package com.zt.plat.module.contractorder.controller.admin.contract.vo.contract; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Schema(description = "管理后台 - 合同审核请求对象 Request VO") +@Data +public class ContractApprovalReqVO { + + @Schema(description = "合同主键ID", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "合同主键ID不能为空") + private Long id; + + @Schema(description = "审核结果(通过:PASS,驳回:REJECT)", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "审核结果不能为空") + private String auditResult; + + @Schema(description = "审批意见", requiredMode = Schema.RequiredMode.REQUIRED) + @NotBlank(message = "审核意见不能为空") + private String reviewOpinion; +} diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractDetailSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractDetailSaveReqVO.java index 29ed52a..d6a9460 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractDetailSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractDetailSaveReqVO.java @@ -42,7 +42,4 @@ public class ContractDetailSaveReqVO { // 交货计划 private List plans; - - // 价款结算条款 - private List formulas; } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractFormulaSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractFormulaSaveReqVO.java index f96295c..528d930 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractFormulaSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractFormulaSaveReqVO.java @@ -10,14 +10,14 @@ import java.util.List; @Data public class ContractFormulaSaveReqVO { - @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "28539") + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "22933") private Long id; - @Schema(description = "合同明细主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "8181") - @NotNull(message = "合同明细主键不能为空") - private Long contractDetailId; + @Schema(description = "合同主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "9162") + @NotNull(message = "合同主键不能为空") + private Long contractId; - @Schema(description = "公式类型;单价/总价/水扣款/加工费", example = "UNIT_PRICE") + @Schema(description = "公式类型;单价/总价/水扣款/加工费", example = "1") private String formulaType; @Schema(description = "公式") @@ -26,7 +26,7 @@ public class ContractFormulaSaveReqVO { @Schema(description = "编码公式") private String numberFormula; - @Schema(description = "物料名称", example = "物料名称") + @Schema(description = "物料名称", example = "赵六") private String materialName; @Schema(description = "物料编码") @@ -41,10 +41,10 @@ public class ContractFormulaSaveReqVO { @Schema(description = "金属元素缩写") private String elementAbbreviation; - @Schema(description = "金属元素名称", example = "金属元素名称") + @Schema(description = "金属元素名称", example = "赵六") private String elementName; - @Schema(description = "结算类型,多条使用逗号分隔(字典:PRCH_STLM_TP)", example = "LST") + @Schema(description = "结算类型,多条使用逗号分隔(字典:PRCH_STLM_TP)", example = "1") private String settlementType; // 基础系数配置 diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractSaveReqVO.java index c826d7f..34bb064 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractSaveReqVO.java @@ -214,4 +214,7 @@ public class ContractSaveReqVO { // 合同动态表单 private List dynamicsFields; + + // 价款结算条款 + private List formulas; } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewDetailRespVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewDetailRespVO.java index 9385e22..938385b 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewDetailRespVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewDetailRespVO.java @@ -38,7 +38,4 @@ public class ContractViewDetailRespVO { // 交货计划 private List plans; - - // 价款结算条款 - private List formulas; } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewFormulaRespVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewFormulaRespVO.java index ae04390..1db5876 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewFormulaRespVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewFormulaRespVO.java @@ -8,13 +8,13 @@ import java.util.List; @Schema(description = "管理后台 - 价款结算条款 Response VO") @Data public class ContractViewFormulaRespVO { - @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "28539") + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "22933") private Long id; - @Schema(description = "合同明细主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "8181") - private Long contractDetailId; + @Schema(description = "合同主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "9162") + private Long contractId; - @Schema(description = "公式类型;单价/总价/水扣款/加工费", example = "UNIT_PRICE") + @Schema(description = "公式类型;单价/总价/水扣款/加工费", example = "1") private String formulaType; @Schema(description = "公式") @@ -23,7 +23,7 @@ public class ContractViewFormulaRespVO { @Schema(description = "编码公式") private String numberFormula; - @Schema(description = "物料名称", example = "物料名称") + @Schema(description = "物料名称", example = "赵六") private String materialName; @Schema(description = "物料编码") @@ -38,9 +38,12 @@ public class ContractViewFormulaRespVO { @Schema(description = "金属元素缩写") private String elementAbbreviation; - @Schema(description = "金属元素名称", example = "金属元素名称") + @Schema(description = "金属元素名称", example = "赵六") private String elementName; + @Schema(description = "结算类型,多条使用逗号分隔(字典:PRCH_STLM_TP)", example = "1") + private String settlementType; + // 基础系数配置 private List coefficients; // 品位等级价配置 diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewRespVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewRespVO.java index 316a237..049bed7 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewRespVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/contract/vo/contract/ContractViewRespVO.java @@ -300,4 +300,7 @@ public class ContractViewRespVO { // 合同动态条款 private List dynamicsItems; + + // 价款结算条款 + private List formulas; } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractFormulaDO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractFormulaDO.java index 2c92df2..5fb92d1 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractFormulaDO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/dal/dataobject/contract/ContractFormulaDO.java @@ -28,10 +28,10 @@ public class ContractFormulaDO extends BusinessBaseDO { @TableId(type = IdType.ASSIGN_ID) private Long id; /** - * 合同明细主键 + * 合同主键 */ - @TableField("CTRT_DTL_ID") - private Long contractDetailId; + @TableField("CTRT_ID") + private Long contractId; /** * 公式类型;单价/总价/水扣款/加工费 */ diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractService.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractService.java index 783cd53..dc64e89 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractService.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractService.java @@ -1,6 +1,7 @@ package com.zt.plat.module.contractorder.service.contract; import com.zt.plat.framework.common.pojo.PageResult; +import com.zt.plat.module.contractorder.controller.admin.contract.vo.contract.ContractApprovalReqVO; import com.zt.plat.module.contractorder.controller.admin.contract.vo.contract.ContractPageReqVO; import com.zt.plat.module.contractorder.controller.admin.contract.vo.contract.ContractSaveReqVO; import com.zt.plat.module.contractorder.controller.admin.contract.vo.contract.ContractViewRespVO; @@ -53,4 +54,6 @@ public interface ContractService { * @return 审批结果 */ String submitApproval(Long id); + + String approval(@Valid ContractApprovalReqVO reqVO); } 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 a891525..fd003dd 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 @@ -142,74 +142,74 @@ public class ContractServiceImpl implements ContractService { contractPlanMapper.insert(planDO); }); } + }); + } - // 价款结算条款 - if (detail.getFormulas() != null && !detail.getFormulas().isEmpty()) { - detail.getFormulas().forEach(formula -> { - // 价款结算条款DO - ContractFormulaDO formulaDO = BeanUtils.toBean(formula, ContractFormulaDO.class); - // 合同明细主键 - formulaDO.setContractDetailId(detailDOId); - // 保存价款结算条款 - contractFormulaMapper.insert(formulaDO); + // 价款结算条款 + if (reqVO.getFormulas() != null && !reqVO.getFormulas().isEmpty()) { + reqVO.getFormulas().forEach(formula -> { + // 价款结算条款DO + ContractFormulaDO formulaDO = BeanUtils.toBean(formula, ContractFormulaDO.class); + // 合同主键 + formulaDO.setContractId(contractId); + // 保存价款结算条款 + contractFormulaMapper.insert(formulaDO); - // 价款结算条款ID - Long formulaDOId = formulaDO.getId(); - // 基础系数配置 - if (formula.getCoefficients() != null && !formula.getCoefficients().isEmpty()) { - formula.getCoefficients().forEach(coefficient -> { - // 基础系数配置DO - ContractCoefficientDO coefficientDO = BeanUtils.toBean(coefficient, ContractCoefficientDO.class); - // 条款主键 - coefficientDO.setFormulaId(formulaDOId); - // 保存基础系数配置 - contractCoefficientMapper.insert(coefficientDO); - }); - } - // 品位等级价配置 - if (formula.getGrades() != null && !formula.getGrades().isEmpty()) { - formula.getGrades().forEach(grade -> { - // 品位等级价配置DO - ContractGradeDO gradeDO = BeanUtils.toBean(grade, ContractGradeDO.class); - // 条款主键 - gradeDO.setFormulaId(formulaDOId); - // 保存品位等级价配置 - contractGradeMapper.insert(gradeDO); - }); - } - // 调整价配置 - if (formula.getDeducts() != null && !formula.getDeducts().isEmpty()) { - formula.getDeducts().forEach(deduct -> { - // 调整价配置DO - ContractDeductDO deductDO = BeanUtils.toBean(deduct, ContractDeductDO.class); - // 条款主键 - deductDO.setFormulaId(formulaDOId); - // 保存品位等级价配置 - contractDeductMapper.insert(deductDO); - }); - } - // 市场价配置 - if (formula.getPrices()!= null && !formula.getPrices().isEmpty()) { - formula.getPrices().forEach(price -> { - // 市场价配置DO - ContractPriceDO priceDO = BeanUtils.toBean(price, ContractPriceDO.class); - // 条款主键 - priceDO.setFormulaId(formulaDOId); - // 保存市场价配置 - contractPriceMapper.insert(priceDO); - }); - } - // 品位不计价配置 - if (formula.getNots() != null && !formula.getNots().isEmpty()) { - formula.getNots().forEach(not -> { - // 品位不计价配置DO - ContractNotDO notDO = BeanUtils.toBean(not, ContractNotDO.class); - // 条款主键 - notDO.setFormulaId(formulaDOId); - // 保存品位不计价配置 - contractNotMapper.insert(notDO); - }); - } + // 价款结算条款ID + Long formulaDOId = formulaDO.getId(); + // 基础系数配置 + if (formula.getCoefficients() != null && !formula.getCoefficients().isEmpty()) { + formula.getCoefficients().forEach(coefficient -> { + // 基础系数配置DO + ContractCoefficientDO coefficientDO = BeanUtils.toBean(coefficient, ContractCoefficientDO.class); + // 条款主键 + coefficientDO.setFormulaId(formulaDOId); + // 保存基础系数配置 + contractCoefficientMapper.insert(coefficientDO); + }); + } + // 品位等级价配置 + if (formula.getGrades() != null && !formula.getGrades().isEmpty()) { + formula.getGrades().forEach(grade -> { + // 品位等级价配置DO + ContractGradeDO gradeDO = BeanUtils.toBean(grade, ContractGradeDO.class); + // 条款主键 + gradeDO.setFormulaId(formulaDOId); + // 保存品位等级价配置 + contractGradeMapper.insert(gradeDO); + }); + } + // 调整价配置 + if (formula.getDeducts() != null && !formula.getDeducts().isEmpty()) { + formula.getDeducts().forEach(deduct -> { + // 调整价配置DO + ContractDeductDO deductDO = BeanUtils.toBean(deduct, ContractDeductDO.class); + // 条款主键 + deductDO.setFormulaId(formulaDOId); + // 保存品位等级价配置 + contractDeductMapper.insert(deductDO); + }); + } + // 市场价配置 + if (formula.getPrices()!= null && !formula.getPrices().isEmpty()) { + formula.getPrices().forEach(price -> { + // 市场价配置DO + ContractPriceDO priceDO = BeanUtils.toBean(price, ContractPriceDO.class); + // 条款主键 + priceDO.setFormulaId(formulaDOId); + // 保存市场价配置 + contractPriceMapper.insert(priceDO); + }); + } + // 品位不计价配置 + if (formula.getNots() != null && !formula.getNots().isEmpty()) { + formula.getNots().forEach(not -> { + // 品位不计价配置DO + ContractNotDO notDO = BeanUtils.toBean(not, ContractNotDO.class); + // 条款主键 + notDO.setFormulaId(formulaDOId); + // 保存品位不计价配置 + contractNotMapper.insert(notDO); }); } }); @@ -259,46 +259,46 @@ public class ContractServiceImpl implements ContractService { if (planDOS != null && !planDOS.isEmpty()) { detail.setPlans(BeanUtils.toBean(planDOS, ContractViewPlanRespVO.class)); } + }); + } - // 查询并设置价款结算条款 - List formulaDOS = contractFormulaMapper - .selectList(TableFieldConstants.BSE_CTRT_FMU_CTRT_DTL_ID, detail.getId()); - if (formulaDOS != null && !formulaDOS.isEmpty()) { - detail.setFormulas(BeanUtils.toBean(formulaDOS, ContractViewFormulaRespVO.class)); + // 查询并设置价款结算条款 + List formulaDOS = contractFormulaMapper + .selectList(TableFieldConstants.BSE_CTRT_FMU_CTRT_ID, contractMainDO.getId()); + if (formulaDOS != null && !formulaDOS.isEmpty()) { + respVO.setFormulas(BeanUtils.toBean(formulaDOS, ContractViewFormulaRespVO.class)); - detail.getFormulas().forEach(formula -> { + respVO.getFormulas().forEach(formula -> { - // 查询并设置基础系数配置 - List coefficientDOS = contractCoefficientMapper - .selectList(TableFieldConstants.BSE_CTRT_COEF_FMU_ID, formula.getId()); - if (coefficientDOS != null && !coefficientDOS.isEmpty()) { - formula.setCoefficients(BeanUtils.toBean(coefficientDOS, ContractViewCoefficientRespVO.class)); - } - // 查询并设置品位等级价配置 - List gradeDOS = contractGradeMapper - .selectList(TableFieldConstants.BSE_CTRT_GRD_FMU_ID, formula.getId()); - if (gradeDOS != null && !gradeDOS.isEmpty()) { - formula.setGrades(BeanUtils.toBean(gradeDOS, ContractViewGradeRespVO.class)); - } - // 查询并设置调整价配置 - List deductDOS = contractDeductMapper - .selectList(TableFieldConstants.BSE_CTRT_DDCT_FMU_ID, formula.getId()); - if (deductDOS != null && !deductDOS.isEmpty()) { - formula.setDeducts(BeanUtils.toBean(deductDOS, ContractViewDeductRespVO.class)); - } - // 查询并设置市场价配置 - List priceDOS = contractPriceMapper - .selectList(TableFieldConstants.BSE_CTRT_PRC_FMU_ID, formula.getId()); - if (priceDOS != null && !priceDOS.isEmpty()) { - formula.setPrices(BeanUtils.toBean(priceDOS, ContractViewPriceRespVO.class)); - } - // 查询并设置品位不计价配置 - List notDOS = contractNotMapper - .selectList(TableFieldConstants.BSE_CTRT_NT_FMU_ID, formula.getId()); - if (notDOS != null && !notDOS.isEmpty()) { - formula.setNots(BeanUtils.toBean(notDOS, ContractViewNotRespVO.class)); - } - }); + // 查询并设置基础系数配置 + List coefficientDOS = contractCoefficientMapper + .selectList(TableFieldConstants.BSE_CTRT_COEF_FMU_ID, formula.getId()); + if (coefficientDOS != null && !coefficientDOS.isEmpty()) { + formula.setCoefficients(BeanUtils.toBean(coefficientDOS, ContractViewCoefficientRespVO.class)); + } + // 查询并设置品位等级价配置 + List gradeDOS = contractGradeMapper + .selectList(TableFieldConstants.BSE_CTRT_GRD_FMU_ID, formula.getId()); + if (gradeDOS != null && !gradeDOS.isEmpty()) { + formula.setGrades(BeanUtils.toBean(gradeDOS, ContractViewGradeRespVO.class)); + } + // 查询并设置调整价配置 + List deductDOS = contractDeductMapper + .selectList(TableFieldConstants.BSE_CTRT_DDCT_FMU_ID, formula.getId()); + if (deductDOS != null && !deductDOS.isEmpty()) { + formula.setDeducts(BeanUtils.toBean(deductDOS, ContractViewDeductRespVO.class)); + } + // 查询并设置市场价配置 + List priceDOS = contractPriceMapper + .selectList(TableFieldConstants.BSE_CTRT_PRC_FMU_ID, formula.getId()); + if (priceDOS != null && !priceDOS.isEmpty()) { + formula.setPrices(BeanUtils.toBean(priceDOS, ContractViewPriceRespVO.class)); + } + // 查询并设置品位不计价配置 + List notDOS = contractNotMapper + .selectList(TableFieldConstants.BSE_CTRT_NT_FMU_ID, formula.getId()); + if (notDOS != null && !notDOS.isEmpty()) { + formula.setNots(BeanUtils.toBean(notDOS, ContractViewNotRespVO.class)); } }); } @@ -378,37 +378,37 @@ public class ContractServiceImpl implements ContractService { // 删除交货计划 contractPlanMapper.delete(TableFieldConstants.BSE_CTRT_PLN_CTRT_DTL_ID, detailDOId.toString()); - - // 查询价款结算条款 - List formulaDOS = contractFormulaMapper - .selectList(TableFieldConstants.BSE_CTRT_FMU_CTRT_DTL_ID, detailDOId.toString()); - if (formulaDOS != null && !formulaDOS.isEmpty()) { - formulaDOS.forEach(formulaDO -> { - - // 价款结算条款ID - Long formulaDOId = formulaDO.getId(); - - // 删除基础系数配置 - contractCoefficientMapper.delete(TableFieldConstants.BSE_CTRT_COEF_FMU_ID, formulaDOId.toString()); - // 删除品位等级价配置 - contractGradeMapper.delete(TableFieldConstants.BSE_CTRT_GRD_FMU_ID, formulaDOId.toString()); - // 删除调整价配置 - contractDeductMapper.delete(TableFieldConstants.BSE_CTRT_DDCT_FMU_ID, formulaDOId.toString()); - // 删除市场价配置 - contractPriceMapper.delete(TableFieldConstants.BSE_CTRT_PRC_FMU_ID, formulaDOId.toString()); - // 删除品位不计价配置 - contractNotMapper.delete(TableFieldConstants.BSE_CTRT_NT_FMU_ID, formulaDOId.toString()); - }); - } - - // 删除价款结算条款 - contractFormulaMapper.delete(TableFieldConstants.BSE_CTRT_FMU_CTRT_DTL_ID, detailDOId.toString()); }); // 删除合同明细 contractDetailMapper.delete(TableFieldConstants.BSE_CTRT_DTL_CTRT_MAIN_ID, id.toString()); } + // 查询价款结算条款 + List formulaDOS = contractFormulaMapper + .selectList(TableFieldConstants.BSE_CTRT_FMU_CTRT_ID, id); + if (formulaDOS != null && !formulaDOS.isEmpty()) { + formulaDOS.forEach(formulaDO -> { + + // 价款结算条款ID + Long formulaDOId = formulaDO.getId(); + + // 删除基础系数配置 + contractCoefficientMapper.delete(TableFieldConstants.BSE_CTRT_COEF_FMU_ID, formulaDOId.toString()); + // 删除品位等级价配置 + contractGradeMapper.delete(TableFieldConstants.BSE_CTRT_GRD_FMU_ID, formulaDOId.toString()); + // 删除调整价配置 + contractDeductMapper.delete(TableFieldConstants.BSE_CTRT_DDCT_FMU_ID, formulaDOId.toString()); + // 删除市场价配置 + contractPriceMapper.delete(TableFieldConstants.BSE_CTRT_PRC_FMU_ID, formulaDOId.toString()); + // 删除品位不计价配置 + contractNotMapper.delete(TableFieldConstants.BSE_CTRT_NT_FMU_ID, formulaDOId.toString()); + }); + + // 删除价款结算条款 + contractFormulaMapper.delete(TableFieldConstants.BSE_CTRT_FMU_CTRT_ID, id.toString()); + } + // 重新插入关联信息 if (reqVO.getDetail() != null && !reqVO.getDetail().isEmpty()) { reqVO.getDetail().forEach(detail -> { @@ -432,74 +432,74 @@ public class ContractServiceImpl implements ContractService { contractPlanMapper.insert(planDO); }); } + }); + } - // 价款结算条款 - if (detail.getFormulas() != null && !detail.getFormulas().isEmpty()) { - detail.getFormulas().forEach(formula -> { - // 价款结算条款DO - ContractFormulaDO formulaDO = BeanUtils.toBean(formula, ContractFormulaDO.class); - // 合同明细主键 - formulaDO.setContractDetailId(detailDOId); - // 保存价款结算条款 - contractFormulaMapper.insert(formulaDO); + // 价款结算条款 + if (reqVO.getFormulas() != null && !reqVO.getFormulas().isEmpty()) { + reqVO.getFormulas().forEach(formula -> { + // 价款结算条款DO + ContractFormulaDO formulaDO = BeanUtils.toBean(formula, ContractFormulaDO.class); + // 合同主键 + formulaDO.setContractId(id); + // 保存价款结算条款 + contractFormulaMapper.insert(formulaDO); - // 价款结算条款ID - Long formulaDOId = formulaDO.getId(); - // 基础系数配置 - if (formula.getCoefficients() != null && !formula.getCoefficients().isEmpty()) { - formula.getCoefficients().forEach(coefficient -> { - // 基础系数配置DO - ContractCoefficientDO coefficientDO = BeanUtils.toBean(coefficient, ContractCoefficientDO.class); - // 条款主键 - coefficientDO.setFormulaId(formulaDOId); - // 保存基础系数配置 - contractCoefficientMapper.insert(coefficientDO); - }); - } - // 品位等级价配置 - if (formula.getGrades() != null && !formula.getGrades().isEmpty()) { - formula.getGrades().forEach(grade -> { - // 品位等级价配置DO - ContractGradeDO gradeDO = BeanUtils.toBean(grade, ContractGradeDO.class); - // 条款主键 - gradeDO.setFormulaId(formulaDOId); - // 保存品位等级价配置 - contractGradeMapper.insert(gradeDO); - }); - } - // 调整价配置 - if (formula.getDeducts() != null && !formula.getDeducts().isEmpty()) { - formula.getDeducts().forEach(deduct -> { - // 调整价配置DO - ContractDeductDO deductDO = BeanUtils.toBean(deduct, ContractDeductDO.class); - // 条款主键 - deductDO.setFormulaId(formulaDOId); - // 保存品位等级价配置 - contractDeductMapper.insert(deductDO); - }); - } - // 市场价配置 - if (formula.getPrices()!= null && !formula.getPrices().isEmpty()) { - formula.getPrices().forEach(price -> { - // 市场价配置DO - ContractPriceDO priceDO = BeanUtils.toBean(price, ContractPriceDO.class); - // 条款主键 - priceDO.setFormulaId(formulaDOId); - // 保存市场价配置 - contractPriceMapper.insert(priceDO); - }); - } - // 品位不计价配置 - if (formula.getNots() != null && !formula.getNots().isEmpty()) { - formula.getNots().forEach(not -> { - // 品位不计价配置DO - ContractNotDO notDO = BeanUtils.toBean(not, ContractNotDO.class); - // 条款主键 - notDO.setFormulaId(formulaDOId); - // 保存品位不计价配置 - contractNotMapper.insert(notDO); - }); - } + // 价款结算条款ID + Long formulaDOId = formulaDO.getId(); + // 基础系数配置 + if (formula.getCoefficients() != null && !formula.getCoefficients().isEmpty()) { + formula.getCoefficients().forEach(coefficient -> { + // 基础系数配置DO + ContractCoefficientDO coefficientDO = BeanUtils.toBean(coefficient, ContractCoefficientDO.class); + // 条款主键 + coefficientDO.setFormulaId(formulaDOId); + // 保存基础系数配置 + contractCoefficientMapper.insert(coefficientDO); + }); + } + // 品位等级价配置 + if (formula.getGrades() != null && !formula.getGrades().isEmpty()) { + formula.getGrades().forEach(grade -> { + // 品位等级价配置DO + ContractGradeDO gradeDO = BeanUtils.toBean(grade, ContractGradeDO.class); + // 条款主键 + gradeDO.setFormulaId(formulaDOId); + // 保存品位等级价配置 + contractGradeMapper.insert(gradeDO); + }); + } + // 调整价配置 + if (formula.getDeducts() != null && !formula.getDeducts().isEmpty()) { + formula.getDeducts().forEach(deduct -> { + // 调整价配置DO + ContractDeductDO deductDO = BeanUtils.toBean(deduct, ContractDeductDO.class); + // 条款主键 + deductDO.setFormulaId(formulaDOId); + // 保存品位等级价配置 + contractDeductMapper.insert(deductDO); + }); + } + // 市场价配置 + if (formula.getPrices()!= null && !formula.getPrices().isEmpty()) { + formula.getPrices().forEach(price -> { + // 市场价配置DO + ContractPriceDO priceDO = BeanUtils.toBean(price, ContractPriceDO.class); + // 条款主键 + priceDO.setFormulaId(formulaDOId); + // 保存市场价配置 + contractPriceMapper.insert(priceDO); + }); + } + // 品位不计价配置 + if (formula.getNots() != null && !formula.getNots().isEmpty()) { + formula.getNots().forEach(not -> { + // 品位不计价配置DO + ContractNotDO notDO = BeanUtils.toBean(not, ContractNotDO.class); + // 条款主键 + notDO.setFormulaId(formulaDOId); + // 保存品位不计价配置 + contractNotMapper.insert(notDO); }); } }); @@ -561,27 +561,68 @@ public class ContractServiceImpl implements ContractService { AdminUserRespDTO adminUserRespDTO = adminUserApi .getUser(SecurityFrameworkUtils.getLoginUserId()).getData(); - // 先创建流程,后更新状态 - BpmProcessInstanceCreateReqDTO pidto = new BpmProcessInstanceCreateReqDTO(); - pidto.setProcessDefinitionKey(ProcessConstants.CONTRACT_APPROVAL_PROCESS); - pidto.setBusinessKey(String.valueOf(id)); - String data = bpmProcessInstanceApi.createProcessInstance(adminUserRespDTO.getId(), pidto).getData(); - if (StringUtils.isNotBlank(data)) { - // 获取流程当前审批的任务节点 - List taskList = bpmTaskApi.getTaskListByProcessInstanceId(data).getData(); - contractMainDO.setProcessInstanceId(data); - if (CollectionUtils.isNotEmpty(taskList)) { - BpmTaskRespDTO undoTask = taskList.get(taskList.size() - 1); - contractMainDO.setTaskNodeId(undoTask.getId()); + if (StringUtils.isNotBlank(contractMainDO.getProcessInstanceId())) { + + // TODO:驳回状态重新提交审批处理 + // 进入审批流程的合同,查询当前审批的任务节点 + List taskList = bpmTaskApi.getTaskListByProcessInstanceId(contractMainDO.getProcessInstanceId()).getData(); + } else { + + // 未进入审批流程的合同,创建审批流程 + BpmProcessInstanceCreateReqDTO pidto = new BpmProcessInstanceCreateReqDTO(); + pidto.setProcessDefinitionKey(ProcessConstants.CONTRACT_APPROVAL_PROCESS); + pidto.setBusinessKey(String.valueOf(id)); + String data = bpmProcessInstanceApi.createProcessInstance(adminUserRespDTO.getId(), pidto).getData(); + if (StringUtils.isNotBlank(data)) { + + // 获取流程当前审批的任务节点,更新合同审批状态 + List taskList = bpmTaskApi.getTaskListByProcessInstanceId(data).getData(); + contractMainDO.setProcessInstanceId(data); + if (CollectionUtils.isNotEmpty(taskList)) { + BpmTaskRespDTO undoTask = taskList.get(taskList.size() - 1); + contractMainDO.setTaskNodeId(undoTask.getId()); + } + contractMainDO.setStatus(ContractStatusEnum.UNDER_REVIEW.getCode()); + contractMainMapper.updateById(contractMainDO); + return "提交审批成功"; } - contractMainDO.setStatus(ContractStatusEnum.UNDER_REVIEW.getCode()); - contractMainMapper.updateById(contractMainDO); - return "提交审批成功"; } return "提交审批失败"; } + @Override + public String approval(ContractApprovalReqVO reqVO) { + + // 合同主键ID + Long id = reqVO.getId(); + + // 判断主键 + if (ObjectUtils.isEmpty(id)) { + throw exception(CONTRACT_ID_NOT_EXISTS); + } + + // 查询合同是否存在 + ContractMainDO contractMainDO = contractMainMapper.selectById(id); + if (contractMainDO == null) { + throw exception(CONTRACT_NOT_EXISTS); + } + + // 合同状态校验 + 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())) { + + throw exception(CONTRACT_STATUS_NOT_APPROVAL, + ContractStatusEnum.valueOf(contractMainDO.getStatus()).getLabel()); + } + + return ""; + } + /** * 校验合同内容 *