From 7b304c15292a9067544815693fee7d32bd329da1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BD=98=E8=8D=A3=E6=99=9F?= <9691125+pan-rongsheng@user.noreply.gitee.com> Date: Mon, 29 Sep 2025 15:49:53 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=90=AF=E7=94=A8?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zt/plat/module/tmpltp/enums/DeleteStatusEnum.java | 3 ++- .../plat/module/tmpltp/enums/PublishStatusEnum.java | 3 ++- .../com/zt/plat/module/tmpltp/enums/TmplStsEnum.java | 3 ++- .../zt/plat/module/tmpltp/enums/UpdateStatusEnum.java | 5 +++-- .../admin/templtp/vo/TemplateInstanceRespVO.java | 5 +++++ .../service/tmpltp/TemplateInstanceServiceImpl.java | 11 ++++++++++- 6 files changed, 24 insertions(+), 6 deletions(-) diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/DeleteStatusEnum.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/DeleteStatusEnum.java index 9616b918..0bbd92fb 100644 --- a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/DeleteStatusEnum.java +++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/DeleteStatusEnum.java @@ -7,7 +7,8 @@ public enum DeleteStatusEnum { STATUS_DRF(TmplStsEnum.DRAFT.getCode(), new HashSet<>() {{add(TmplStsEnum.DRAFT.getCode());}}), STATUS_PUB(TmplStsEnum.PUBLISHED.getCode(), new HashSet<>()), - STATUS_STOP(TmplStsEnum.STOPPED.getCode(), new HashSet<>(){{add(TmplStsEnum.STOPPED.getCode());}}); + STATUS_STOP(TmplStsEnum.STOPPED.getCode(), new HashSet<>(){{add(TmplStsEnum.STOPPED.getCode());}}), + STATUS_START(TmplStsEnum.START.getCode(), new HashSet<>()); private final String code; diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/PublishStatusEnum.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/PublishStatusEnum.java index 42532dee..338e9701 100644 --- a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/PublishStatusEnum.java +++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/PublishStatusEnum.java @@ -10,7 +10,8 @@ public enum PublishStatusEnum { STATUS_DRF(TmplStsEnum.DRAFT.getCode(), new HashSet<>() {{add(TmplStsEnum.DRAFT.getCode());}}), STATUS_PUB(TmplStsEnum.PUBLISHED.getCode(), new HashSet<>()), - STATUS_STOP(TmplStsEnum.STOPPED.getCode(), new HashSet<>() ); + STATUS_STOP(TmplStsEnum.STOPPED.getCode(), new HashSet<>() ), + STATUS_START(TmplStsEnum.START.getCode(), new HashSet<>() {{add(TmplStsEnum.START.getCode());}}); private final String code; diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/TmplStsEnum.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/TmplStsEnum.java index 04d64071..3f9ce649 100644 --- a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/TmplStsEnum.java +++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/TmplStsEnum.java @@ -9,7 +9,8 @@ public enum TmplStsEnum { // 已发布状态 PUBLISHED("PUB", "已发布"), // 已停用状态 - STOPPED("STOP", "已停用"); + STOPPED("STOP", "已停用"), + START("START", "已启用"); // 获取状态编码 private final String code; diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/UpdateStatusEnum.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/UpdateStatusEnum.java index 2e34ef07..c2cd5bbf 100644 --- a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/UpdateStatusEnum.java +++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/tmpltp/enums/UpdateStatusEnum.java @@ -10,10 +10,11 @@ public enum UpdateStatusEnum { add(TmplStsEnum.STOPPED.getCode()); }}), STATUS_PUB(TmplStsEnum.PUBLISHED.getCode(), new HashSet<>()), - STATUS_STOP(TmplStsEnum.STOPPED.getCode(), new HashSet<>(){{ + STATUS_STOP(TmplStsEnum.STOPPED.getCode(), new HashSet<>() {{ add(TmplStsEnum.DRAFT.getCode()); add(TmplStsEnum.STOPPED.getCode()); - }}); + }}), + STATUS_START(TmplStsEnum.START.getCode(), new HashSet<>()); private final String code; diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceRespVO.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceRespVO.java index 324aa389..1ef75e59 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceRespVO.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/templtp/vo/TemplateInstanceRespVO.java @@ -75,4 +75,9 @@ public class TemplateInstanceRespVO { @ExcelProperty("模版分类名称") private String tpName; + + @Schema(description = "创建人", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建人") + private String creator; + } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java index 668aeb15..240ae148 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/tmpltp/TemplateInstanceServiceImpl.java @@ -224,6 +224,9 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { boolean transitionAllowed = false; if (status != null) { transitionAllowed = status.isTransitionAllowed(TmplStsEnum.DRAFT.getCode()); + if (!transitionAllowed){ + transitionAllowed = status.isTransitionAllowed(TmplStsEnum.START.getCode()); + } } if (!transitionAllowed) { throw exception(STATUS_OPERATION_FAIL); @@ -253,7 +256,7 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { code = TmplStsEnum.STOPPED.getCode(); } else if (reqVO.getType().equals("enable")) { // 启用 - code = TmplStsEnum.PUBLISHED.getCode(); + code = TmplStsEnum.START.getCode(); } if (code.isEmpty()) { throw exception(ILLEGAL_OPERATION_TYPE); @@ -269,8 +272,14 @@ public class TemplateInstanceServiceImpl implements TemplateInstanceService { public TemplateInstanceRespVO createVersion(String id) { validateTemplateInstanceExists(Long.valueOf(id)); TemplateInstanceDO templateInstanceDO = templateInstanceMapper.selectById(id); + //如果当前状态不是草稿或者是已启用则不能创建新版本 + log.info("当前状态【{}】", templateInstanceDO.getSts()); + if (!TmplStsEnum.DRAFT.getCode().equals(templateInstanceDO.getSts()) && !TmplStsEnum.START.getCode().equals(templateInstanceDO.getSts())) { + throw exception(STATUS_OPERATION_FAIL); + } TemplateInstanceDO newTpInstanceDO = BeanUtils.toBean(templateInstanceDO, TemplateInstanceDO.class); newTpInstanceDO.setId(null); + newTpInstanceDO.setTenantId(templateInstanceDO.getTenantId()); newTpInstanceDO.setVer(incrementVersion(templateInstanceDO.getVer())); newTpInstanceDO.setPublishTime(LocalDateTime.now()); newTpInstanceDO.setOrigCntt(templateInstanceDO.getCntt()!=null?templateInstanceDO.getCntt():templateInstanceDO.getOrigCntt());//模板实例内容,默认为上一个版本的当前文件内容 From a596b6f3207e5b43d24c406e7a1f028f24dca0c0 Mon Sep 17 00:00:00 2001 From: guojunyun Date: Mon, 29 Sep 2025 16:19:38 +0800 Subject: [PATCH 2/5] =?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 ef4c42e8..e9588909 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 ea9ce98b..ea93e043 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 c451e11a..294acac5 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 beaff542..07a48b7f 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 9a6cb806..316a237c 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 240c1b7a..4cc33ce2 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 9f7ab873..bc36ddfe 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 864cf4b1..878659a2 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 3/5] =?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 07a48b7f..c826d7f8 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 878659a2..a8915255 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 4/5] =?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 e0257fe3..e225d658 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 e51621b0..ea310f68 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 5/5] =?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 cab4bec6..9449fe0e 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 1096c171..ade41aee 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 81a66c92..00000000 --- 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 c2131958..00000000 --- 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 a726e567..00000000 --- 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 6155c966..f7f88031 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 e450a060..26bfaafc 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 72fcf7cf..88f7f83b 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 d5cbe2bc..38354f24 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 64308e5a..5f86f820 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 0aaac6b3..ff514024 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 bf01f046..094497c1 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 8dc60ddd..95c22e0c 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 039d8deb..e4d09c6e 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 fc09dbde..b16b4747 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 8d785d57..0d953ab3 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 66dd1ce9..183c2ab4 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 8135e637..542f8153 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 af449b3c..af51f56b 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 ce6bbf59..0f94a4bb 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 d23e2d5a..e0ee45d5 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 64e43a35..51cb5bf7 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 41bb769d..27c07a4c 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 00000000..1d8f667a --- /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 00000000..e7fb2b7d --- /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