diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/ElementController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/ElementController.java index ff591d1..ec41347 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/ElementController.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/ElementController.java @@ -88,6 +88,14 @@ public class ElementController { return success(BeanUtils.toBean(pageResult, ElementRespVO.class)); } + @GetMapping("/pageByEnable") + @Operation(summary = "获得启用的金属元素分页") + @PreAuthorize("@ss.hasPermission('base:element:query')") + public CommonResult> getElementPageByEnable(@Valid ElementPageReqVO pageReqVO) { + PageResult pageResult = elementService.getElementPageByEnable(pageReqVO); + return success(BeanUtils.toBean(pageResult, ElementRespVO.class)); + } + @GetMapping("/export-excel") @Operation(summary = "导出金属元素 Excel") @PreAuthorize("@ss.hasPermission('base:element:export')") diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/base/ElementMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/base/ElementMapper.java index 766d73c..3906984 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/base/ElementMapper.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/base/ElementMapper.java @@ -23,6 +23,7 @@ public interface ElementMapper extends BaseMapperX { .likeIfPresent(ElementDO::getAbbreviation, reqVO.getAbbreviation()) .likeIfPresent(ElementDO::getName, reqVO.getName()) .eqIfPresent(ElementDO::getDecimalValue, reqVO.getDecimalValue()) + .eqIfPresent(ElementDO::getIsEnable, reqVO.getIsEnable()) .likeIfPresent(ElementDO::getCoding, reqVO.getCoding()) .eqIfPresent(ElementDO::getGradeUnit, reqVO.getGradeUnit()) .betweenIfPresent(ElementDO::getCreateTime, reqVO.getCreateTime()) @@ -36,4 +37,9 @@ public interface ElementMapper extends BaseMapperX { .eq(ElementDO::getIsEnable, 1) .orderByDesc(ElementDO::getSort)); } + + default ElementDO getElementName(String code){ + return selectOne(new LambdaQueryWrapperX() + .eq(ElementDO::getAbbreviation, code)); + }; } \ No newline at end of file diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/ElementService.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/ElementService.java index d93a7d5..6d13099 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/ElementService.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/ElementService.java @@ -65,4 +65,6 @@ public interface ElementService { void enableElementList(List saveReqVOS); List getElementNoPage(); + + PageResult getElementPageByEnable(ElementPageReqVO pageReqVO); } \ No newline at end of file diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/ElementServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/ElementServiceImpl.java index 79290b0..19b1bcc 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/ElementServiceImpl.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/base/ElementServiceImpl.java @@ -35,6 +35,8 @@ public class ElementServiceImpl implements ElementService { public ElementRespVO createElement(ElementSaveReqVO createReqVO) { // 插入 ElementDO element = BeanUtils.toBean(createReqVO, ElementDO.class); + // 校验存在 + validateElementCodeExists(createReqVO.getAbbreviation()); //金属编码自动生成,格式 JSYS-00001,依次新增 String maxCode = elementMapper.selectMaxCode(); if (maxCode == null) { @@ -55,6 +57,8 @@ public class ElementServiceImpl implements ElementService { public void updateElement(ElementSaveReqVO updateReqVO) { // 校验存在 validateElementExists(updateReqVO.getId()); + // 校验存在 + validateElementCodeExists(updateReqVO.getAbbreviation()); // 更新 ElementDO updateObj = BeanUtils.toBean(updateReqVO, ElementDO.class); elementMapper.updateById(updateObj); @@ -69,12 +73,12 @@ public class ElementServiceImpl implements ElementService { } @Override - public void deleteElementListByIds(List ids) { + public void deleteElementListByIds(List ids) { // 校验存在 validateElementExists(ids); // 删除 elementMapper.deleteByIds(ids); - } + } private void validateElementExists(List ids) { List list = elementMapper.selectByIds(ids); @@ -89,6 +93,13 @@ public class ElementServiceImpl implements ElementService { } } + private void validateElementCodeExists(String code) { + ElementDO elementDO = elementMapper.getElementName(code); + if (elementDO == null) { + throw exception(ELEMENT_NOT_EXISTS); + } + } + @Override public ElementDO getElement(Long id) { return elementMapper.selectById(id); @@ -102,7 +113,7 @@ public class ElementServiceImpl implements ElementService { @Override public void enableElementList(List saveReqVOS) { List updateObj = BeanUtils.toBean(saveReqVOS, ElementDO.class); - List count = elementMapper.updateById(updateObj); + List count = elementMapper.updateById(updateObj); if (CollUtil.isEmpty(count)) { throw exception(ELEMENT_NOT_EXISTS); } @@ -113,4 +124,12 @@ public class ElementServiceImpl implements ElementService { return elementMapper.getElementNoPage(); } + @Override + public PageResult getElementPageByEnable(ElementPageReqVO pageReqVO) { + if (pageReqVO!=null&&pageReqVO.getIsEnable()==null){ + pageReqVO.setIsEnable("1"); + } + return elementMapper.selectPage(pageReqVO); + } + } \ No newline at end of file diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/contract/ContractRespDTO.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/contract/ContractRespDTO.java index 9426017..42f265f 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/contract/ContractRespDTO.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/dto/contract/ContractRespDTO.java @@ -242,6 +242,30 @@ public class ContractRespDTO { @Schema(description = "模板中间表ID") private Long businessId; + @Schema(description = "甲方户名") + private String purchaseAccountName; + + @Schema(description = "甲方开户行") + private String purchaseBankAccount; + + @Schema(description = "甲方户号") + private String purchaseAccountNumber; + + @Schema(description = "甲方税号/社会信用代码") + private String purchaseTaxNumber; + + @Schema(description = "乙方户名") + private String salesAccountName; + + @Schema(description = "乙方开户行") + private String salesBankAccount; + + @Schema(description = "乙方户号") + private String salesAccountNumber; + + @Schema(description = "乙方税号/社会信用代码") + private String salesTaxNumber; + // 物料信息 private List detail; diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractRespVO.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractRespVO.java index 23fda3e..b695085 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractRespVO.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractRespVO.java @@ -248,6 +248,30 @@ public class ContractRespVO { @Schema(description = "模板中间表ID") private Long businessId; + @Schema(description = "甲方户名") + private String purchaseAccountName; + + @Schema(description = "甲方开户行") + private String purchaseBankAccount; + + @Schema(description = "甲方户号") + private String purchaseAccountNumber; + + @Schema(description = "甲方税号/社会信用代码") + private String purchaseTaxNumber; + + @Schema(description = "乙方户名") + private String salesAccountName; + + @Schema(description = "乙方开户行") + private String salesBankAccount; + + @Schema(description = "乙方户号") + private String salesAccountNumber; + + @Schema(description = "乙方税号/社会信用代码") + private String salesTaxNumber; + // 物料信息 private List detail; diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractSaveReqVO.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractSaveReqVO.java index 484e95a..e517129 100644 --- a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractSaveReqVO.java +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/ContractSaveReqVO.java @@ -218,6 +218,30 @@ public class ContractSaveReqVO { @Schema(description = "模板中间表ID") private Long businessId; + @Schema(description = "甲方户名") + private String purchaseAccountName; + + @Schema(description = "甲方开户行") + private String purchaseBankAccount; + + @Schema(description = "甲方户号") + private String purchaseAccountNumber; + + @Schema(description = "甲方税号/社会信用代码") + private String purchaseTaxNumber; + + @Schema(description = "乙方户名") + private String salesAccountName; + + @Schema(description = "乙方开户行") + private String salesBankAccount; + + @Schema(description = "乙方户号") + private String salesAccountNumber; + + @Schema(description = "乙方税号/社会信用代码") + private String salesTaxNumber; + // 物料信息 private List detail; diff --git a/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/TransactionInfoRespVO.java b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/TransactionInfoRespVO.java new file mode 100644 index 0000000..d874afa --- /dev/null +++ b/zt-module-contract-order/zt-module-contract-order-api/src/main/java/com/zt/plat/module/contractorder/api/vo/contract/TransactionInfoRespVO.java @@ -0,0 +1,45 @@ +package com.zt.plat.module.contractorder.api.vo.contract; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 合同交易信息 Response VO") +@Data +public class TransactionInfoRespVO { + + @Schema(description = "公司编号") + private String companyNumber; + + @Schema(description = "公司名称") + private String companyName; + + @Schema(description = "公司户名") + private String companyAccountName; + + @Schema(description = "公司开户行") + private String companyBankAccount; + + @Schema(description = "公司户号") + private String companyAccountNumber; + + @Schema(description = "公司税号/社会信用代码") + private String companyTaxNumber; + + @Schema(description = "客商编号") + private String supplierNumber; + + @Schema(description = "客商名称") + private String supplierName; + + @Schema(description = "客商户名") + private String supplierAccountName; + + @Schema(description = "客商开户行") + private String supplierBankAccount; + + @Schema(description = "客商户号") + private String supplierAccountNumber; + + @Schema(description = "客商税号/社会信用代码") + private String supplierTaxNumber; +} 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 4857d3c..821fa3d 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 @@ -213,5 +213,14 @@ public class ContractController implements BusinessControllerMarker { @PreAuthorize("@ss.hasPermission('base:contract:query')") public CommonResult> getOrderByOrderNo(@RequestBody List orderNoS){ return contractApi.getOrderByOrderNo(orderNoS); - }; + } + + @GetMapping("/transaction-info/by-paper-number") + @Operation(summary = "根据合同编号获得交易信息") + @PreAuthorize("@ss.hasPermission('base:contract:get')") + public CommonResult transactionInfoByPaperNumber( + @RequestParam("contractPaperNumber") String contractPaperNumber + ) { + return success(contractService.transactionInfoByPaperNumber(contractPaperNumber)); + } } diff --git a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PurchaseOrderDetailsRespVO.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PurchaseOrderDetailsRespVO.java index 1feda79..273ed08 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PurchaseOrderDetailsRespVO.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/controller/admin/purchaseorder/vo/PurchaseOrderDetailsRespVO.java @@ -195,4 +195,9 @@ public class PurchaseOrderDetailsRespVO { * 订单类型 */ private String splyBsnTp; + + /** + * 单位 + */ + private String unt; } 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 4a34ee2..5b0a4c5 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 @@ -410,4 +410,44 @@ public class ContractMainDO extends BusinessBaseDO { */ @TableField("BSN_ID") private Long businessId; + /** + * 甲方户名 + */ + @TableField("PRCH_ACCT_NAME") + private String purchaseAccountName; + /** + * 甲方开户行 + */ + @TableField("PRCH_BNK_ACCT") + private String purchaseBankAccount; + /** + * 甲方户号 + */ + @TableField("PRCH_ACCT_NUM") + private String purchaseAccountNumber; + /** + * 甲方税号/社会信用代码 + */ + @TableField("PRCH_TAX_NUM") + private String purchaseTaxNumber; + /** + * 乙方户名 + */ + @TableField("SALE_ACCT_NAME") + private String salesAccountName; + /** + * 乙方开户行 + */ + @TableField("SALE_BNK_ACCT") + private String salesBankAccount; + /** + * 乙方户号 + */ + @TableField("SALE_ACCT_NUM") + private String salesAccountNumber; + /** + * 乙方税号/社会信用代码 + */ + @TableField("SALE_TAX_NUM") + private String salesTaxNumber; } \ 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/ContractService.java b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractService.java index ef487e5..6b112c6 100644 --- a/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractService.java +++ b/zt-module-contract-order/zt-module-contract-order-server/src/main/java/com/zt/plat/module/contractorder/service/contract/ContractService.java @@ -231,4 +231,12 @@ public interface ContractService { * @return 系统合同编号 */ String generateSystemContractNumber(String category); + + /** + * 根据合同编号获得交易信息 + * + * @param contractPaperNumber 合同编号 + * @return 交易信息 + */ + TransactionInfoRespVO transactionInfoByPaperNumber(String contractPaperNumber); } 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 97d3450..e8aaaf7 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 @@ -17,10 +17,7 @@ import com.zt.plat.module.base.controller.admin.templtp.vo.TmplInscBsnRelSaveReq import com.zt.plat.module.base.controller.admin.templtp.vo.TmplInscDatBsnSaveReqVO; import com.zt.plat.module.base.controller.admin.templtp.vo.TmplInscItmBsnSaveReqVO; import com.zt.plat.module.base.dal.dataobject.tmpltp.TmplInscBsnRelDO; -import com.zt.plat.module.base.dal.mysql.tmpltp.TemplateInstanceDataMapper; -import com.zt.plat.module.base.dal.mysql.tmpltp.TemplateInstanceItemMapper; import com.zt.plat.module.base.dal.mysql.tmpltp.TmplInscBsnRelMapper; -import com.zt.plat.module.base.service.tmpltp.TemplateInstanceDataService; import com.zt.plat.module.base.service.tmpltp.TmplInscBsnRelService; import com.zt.plat.module.base.service.tmpltp.TmplInscDatBsnService; import com.zt.plat.module.base.service.tmpltp.TmplInscItmBsnService; @@ -40,7 +37,6 @@ import com.zt.plat.module.contractorder.enums.contract.DictEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpContractPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpContractSaveReqVO; import com.zt.plat.module.erp.dal.dataobject.erp.ErpContractDO; -import com.zt.plat.module.erp.service.erp.ErpCompanyService; import com.zt.plat.module.erp.service.erp.ErpContractService; import com.zt.plat.module.infra.api.file.FileApi; import com.zt.plat.module.infra.api.file.dto.FileRespDTO; @@ -88,12 +84,6 @@ public class ContractServiceImpl implements ContractService { @Resource private ContractPlanMapper contractPlanMapper; @Resource - private TemplateInstanceDataService templateInstanceDataService; - @Resource - private TemplateInstanceDataMapper templateInstanceDataMapper; - @Resource - private TemplateInstanceItemMapper templateInstanceItemMapper; - @Resource private ContractFormulaMapper contractFormulaMapper; @Resource private ContractCoefficientMapper contractCoefficientMapper; @@ -114,8 +104,6 @@ public class ContractServiceImpl implements ContractService { @Resource private ContractDemoteMapper contractDemoteMapper; @Resource - private ErpCompanyService erpCompanyService; - @Resource private ErpContractService erpContractService; @Resource private SystemRelativityMapper systemRelativityMapper; @@ -1803,6 +1791,53 @@ public class ContractServiceImpl implements ContractService { return erpContractVO; } + @Override + public TransactionInfoRespVO transactionInfoByPaperNumber(String contractPaperNumber) { + + // 通过合同编号查询合同信息 + ContractMainDO contractMainDO = contractMainMapper + .selectOne(TableFieldConstants.BSE_CTRT_MAIN_CTRT_PPR_NUM, contractPaperNumber); + + // 合同不存在 + if (contractMainDO == null) { + throw exception(CONTRACT_NOT_EXISTS); + } + + // 交易信息 + TransactionInfoRespVO infoRespVO = new TransactionInfoRespVO(); + + if (DictEnum.ERP_RCV_DLVY_INCOME.getCode().equals(contractMainDO.getDirection())) { // 收入 + // 收支性质为收入,公司信息为乙方信息,客商信息为甲方信息 + infoRespVO.setCompanyNumber(contractMainDO.getSalesCompanyNumber()); + infoRespVO.setCompanyName(contractMainDO.getSalesCompanyName()); + infoRespVO.setCompanyAccountName(contractMainDO.getSalesAccountName()); + infoRespVO.setCompanyBankAccount(contractMainDO.getSalesBankAccount()); + infoRespVO.setCompanyAccountNumber(contractMainDO.getSalesAccountNumber()); + infoRespVO.setCompanyTaxNumber(contractMainDO.getSalesTaxNumber()); + infoRespVO.setSupplierName(contractMainDO.getPurchaseCompanyNumber()); + infoRespVO.setSupplierName(contractMainDO.getPurchaseCompanyName()); + infoRespVO.setSupplierAccountName(contractMainDO.getPurchaseAccountName()); + infoRespVO.setSupplierBankAccount(contractMainDO.getPurchaseBankAccount()); + infoRespVO.setSupplierAccountNumber(contractMainDO.getPurchaseAccountNumber()); + infoRespVO.setSupplierTaxNumber(contractMainDO.getPurchaseTaxNumber()); + } else { // 支出 + // 收支性质为支出,公司信息为甲方信息,客商信息为乙方信息 + infoRespVO.setCompanyNumber(contractMainDO.getPurchaseCompanyNumber()); + infoRespVO.setCompanyName(contractMainDO.getPurchaseCompanyName()); + infoRespVO.setCompanyAccountName(contractMainDO.getPurchaseAccountName()); + infoRespVO.setCompanyBankAccount(contractMainDO.getPurchaseBankAccount()); + infoRespVO.setCompanyAccountNumber(contractMainDO.getPurchaseAccountNumber()); + infoRespVO.setCompanyTaxNumber(contractMainDO.getPurchaseTaxNumber()); + infoRespVO.setSupplierName(contractMainDO.getSalesCompanyNumber()); + infoRespVO.setSupplierName(contractMainDO.getSalesCompanyName()); + infoRespVO.setSupplierAccountName(contractMainDO.getSalesAccountName()); + infoRespVO.setSupplierBankAccount(contractMainDO.getSalesBankAccount()); + infoRespVO.setSupplierAccountNumber(contractMainDO.getSalesAccountNumber()); + infoRespVO.setSupplierTaxNumber(contractMainDO.getSalesTaxNumber()); + } + return infoRespVO; + } + /** * 校验合同内容 * diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpCompanyController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpCompanyController.java index 63629bd..acb5473 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpCompanyController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpCompanyController.java @@ -125,12 +125,4 @@ public class ErpCompanyController { return success(TEST); } - @PostMapping("/test2") - @Operation(summary = "获取base的金属元素") - @PreAuthorize("@ss.hasPermission('sply:erp-company:get')") - public CommonResult test2() { - String TEST = erpCompanyService.test2(); - return success(TEST); - } - } \ No newline at end of file diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProductiveOrderPageReqVO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProductiveOrderPageReqVO.java index fa17335..332923d 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProductiveOrderPageReqVO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProductiveOrderPageReqVO.java @@ -19,7 +19,7 @@ public class ErpProductiveOrderPageReqVO extends PageParam { private String companyNumber; @Schema(description = "工厂编码") - @NotEmpty(message = "公司编号不能为空") + @NotEmpty(message = "工厂编码不能为空") private String factoryNumber; @Schema(description = "工厂名称", example = "赵六") @@ -30,12 +30,12 @@ public class ErpProductiveOrderPageReqVO extends PageParam { @Schema(description = "基本开始日期") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @NotEmpty(message = "公司编号不能为空") + @NotEmpty(message = "基本开始日期不能为空") private LocalDateTime[] startDate; @Schema(description = "基本完成日期") @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - @NotEmpty(message = "公司编号不能为空") + @NotEmpty(message = "基本完成日期不能为空") private LocalDateTime[] endDate; @Schema(description = "主产品物料编号") diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/mysql/erp/ErpCustomerMapper.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/mysql/erp/ErpCustomerMapper.java index fda05c3..08d90e4 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/mysql/erp/ErpCustomerMapper.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/mysql/erp/ErpCustomerMapper.java @@ -6,6 +6,9 @@ import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpCustomerPageReqVO; import com.zt.plat.module.erp.dal.dataobject.erp.ErpCustomerDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * ERP客商主数据 Mapper @@ -29,4 +32,5 @@ public interface ErpCustomerMapper extends BaseMapperX { .orderByDesc(ErpCustomerDO::getId)); } + void updateBatchByNumber(@Param("toUpdate") List toUpdate); } \ 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/ErpCompanyService.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpCompanyService.java index b79382b..c69ba0a 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpCompanyService.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpCompanyService.java @@ -74,6 +74,4 @@ public interface ErpCompanyService { void test(); String test1(); - - String test2(); } \ 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/ErpCompanyServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpCompanyServiceImpl.java index d2fcf07..17dfba6 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 @@ -286,11 +286,4 @@ public class ErpCompanyServiceImpl implements ErpCompanyService { return url + requestEntity; } } - - @Override - public String test2() { - ElementDTO respVO = new ElementDTO(); - CommonResult> dtos = baseApi.getElementNoPage(); - return dtos.toString(); - } } \ 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 5b843a3..f0b3ca0 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,6 +7,7 @@ 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.dal.dataobject.erp.ErpMaterialDO; import com.zt.plat.module.erp.utils.ErpConfig; import com.zt.plat.module.erp.utils.MyRedisConfig; import com.zt.plat.module.erp.enums.OftenEnum; @@ -113,31 +114,37 @@ public class ErpCustomerServiceImpl implements ErpCustomerService { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.客商信息; String funcnr = funcnrEnum.getFuncnr(); - String key = "erpMap" + funcnrEnum.getFuncnr(); - if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { - initializeMap(key); + String key = "erp" + funcnrEnum.getFuncnr(); + if (myRedisConfig.getRedisCache(key) == null) { + initialize(key); } - // 构建req参数 - Map req = new HashMap<>(); - List> datumList = new ArrayList<>(); - Map datumEntry = new HashMap<>(); - // 构建datum参数数组 - datumEntry.put("sign", "I"); - datumEntry.put("option", "EQ"); - datumEntry.put("low", LocalDate.now().toString()); - datumList.add(datumEntry); - req.put(funcnrEnum.getDatekey(), datumList); - - // 1. 调用ERP接口获取数据 + //循环近五年日期, JSONArray dataArrayALL = new JSONArray(); - for (OftenEnum.ModeTypeEnum type : OftenEnum.ModeTypeEnum.values()) { - req.put("mode", type.modetype); - HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); - JSONArray dataArray = (JSONArray) dataFromERP.get(funcnrEnum.getDatakey()); - if (dataArray == null || dataArray.isEmpty()) { - continue; + LocalDate endDate = LocalDate.now(); + LocalDate startDate = endDate.minusYears(5); + for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) { + // 构建req参数 + Map req = new HashMap<>(); + List> datumList = new ArrayList<>(); + Map datumEntry = new HashMap<>(); + // 构建datum参数数组 + datumEntry.put("sign", "I"); + datumEntry.put("option", "EQ"); + // 把每次循环的日期,放在这里 + datumEntry.put("low", date.toString()); + datumList.add(datumEntry); + req.put(funcnrEnum.getDatekey(), datumList); + + // 1. 调用ERP接口获取数据 + for (OftenEnum.ModeTypeEnum type : OftenEnum.ModeTypeEnum.values()) { + req.put("MODE", type.modetype); + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); + JSONArray dataArray = (JSONArray) dataFromERP.get(funcnrEnum.getDatakey()); + if (dataArray == null || dataArray.isEmpty()) { + continue; + } + dataArrayALL.addAll(dataArray); } - dataArrayALL.addAll(dataArray); } if (dataArrayALL.isEmpty()) { return; @@ -153,17 +160,18 @@ public class ErpCustomerServiceImpl implements ErpCustomerService { /** * 处理数据,区分新增和更新 */ - private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnrEnum) { - String key = "erpMap" + funcnrEnum.getFuncnr(); - Map numbers = myRedisConfig.getRedisCacheMap(key); - + private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { + String key = "erp" + funcnr.getFuncnr(); + Map> numbers = myRedisConfig.numbers(dataArray, key, funcnr.getDatakey()); + List allnumbers = numbers.get("all"); + List comnumbers = numbers.get("com"); List toUpdate = new ArrayList<>(); List toInsert = new ArrayList<>(); for (int i = 0; i < dataArray.size(); i++) { JSONObject dataJson = dataArray.getJSONObject(i); if (dataJson != null) { - String number = dataJson.getString(funcnrEnum.getDatakey()); + String number = dataJson.getString(funcnr.getDatakey()); if (number != null) { number = number.trim(); } @@ -185,10 +193,8 @@ public class ErpCustomerServiceImpl implements ErpCustomerService { DO.setIsProvisional(dataJson.getString("XBLCK")); DO.setTaxNumber(dataJson.getString("TAXNO")); - // 使用 Map 优化查找效率,避免每次遍历 comnumbers 列表 - if (number != null && numbers.get(number) != null) { + if (comnumbers.contains(number)) { // 更新 - DO.setId(numbers.get(number)); toUpdate.add(DO); } else { // 新增 @@ -197,7 +203,7 @@ public class ErpCustomerServiceImpl implements ErpCustomerService { } } - return new ProcessingResult(toUpdate, toInsert, key); + return new ProcessingResult(toUpdate, toInsert, key, allnumbers); } /** @@ -207,21 +213,11 @@ public class ErpCustomerServiceImpl implements ErpCustomerService { // 批量新增和更新 if (!result.toInsert.isEmpty()) { erpCustomerMapper.insertBatch(result.toInsert); - // 批量查询刚插入数据的id,提升效率 - List insertedNumbers = result.toInsert.stream() - .map(ErpCustomerDO::getNumber) - .collect(Collectors.toList()); - List insertedRecords = erpCustomerMapper.selectList( - new LambdaQueryWrapperX() - .in(ErpCustomerDO::getNumber, insertedNumbers) - ); - Map numberIdMap = insertedRecords.stream() - .collect(Collectors.toMap(ErpCustomerDO::getNumber, ErpCustomerDO::getId)); - myRedisConfig.addRedisCacheMap(result.key, numberIdMap); } if (!result.toUpdate.isEmpty()) { - erpCustomerMapper.updateBatch(result.toUpdate); + erpCustomerMapper.updateBatchByNumber(result.toUpdate); } + myRedisConfig.updateRedisCache(result.key, result.allnumbers); } /** @@ -231,18 +227,21 @@ public class ErpCustomerServiceImpl implements ErpCustomerService { private final List toUpdate; private final List toInsert; private final String key; + private final List allnumbers; - public ProcessingResult(List toUpdate, List toInsert, String key) { + public ProcessingResult(List toUpdate, List toInsert, String key, List allnumbers) { this.toUpdate = toUpdate; this.toInsert = toInsert; this.key = key; + this.allnumbers = allnumbers; } } - private void initializeMap(String key) { - Map existingNumbers = erpCustomerMapper.selectList(new LambdaQueryWrapperX()) + private void initialize(String key) { + List existingNumbers = erpCustomerMapper.selectList(new LambdaQueryWrapperX()) .stream() - .collect(Collectors.toMap(ErpCustomerDO::getNumber, ErpCustomerDO::getId)); - myRedisConfig.addRedisCacheMap(key, existingNumbers); + .map(ErpCustomerDO::getNumber) + .collect(Collectors.toList()); + 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/ErpProductiveOrderServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProductiveOrderServiceImpl.java index 01de59e..db00697 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,10 @@ import com.alibaba.fastjson.JSONObject; import com.xxl.job.core.handler.annotation.XxlJob; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; +import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProductiveVersionPageReqVO; import com.zt.plat.module.erp.dal.dataobject.erp.ErpProductiveVersionDO; +import com.zt.plat.module.erp.dal.dataobject.erp.ErpPurchaseOrganizationDO; import com.zt.plat.module.erp.utils.ErpConfig; import com.zt.plat.module.erp.utils.MyRedisConfig; import com.zt.plat.module.erp.enums.OftenEnum; @@ -28,6 +30,7 @@ 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.*; @@ -102,123 +105,158 @@ public class ErpProductiveOrderServiceImpl implements ErpProductiveOrderService return erpProductiveOrderMapper.selectById(id); } - @Override - public PageResult getErpProductiveOrderPage(ErpProductiveOrderPageReqVO pageReqVO) { - return erpProductiveOrderMapper.selectPage(pageReqVO); - } - - //直接从erp查询生产订单 // @Override // public PageResult getErpProductiveOrderPage(ErpProductiveOrderPageReqVO pageReqVO) { -// OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.生产订单; -// String funcnr = funcnrEnum.getFuncnr(); -// Map req = new HashMap<>(); -// -// // 构建查询参数 -// req.put("BUKRS", pageReqVO.getCompanyNumber()); -// req.put("WERKS", pageReqVO.getFactoryNumber()); -// -// // 处理日期参数 -// if (pageReqVO.getStartDate() != null) { -// req.put("BEGDA", pageReqVO.getStartDate()[0].format(DateTimeFormatter.ofPattern("yyyyMMdd"))); -// } -// if (pageReqVO.getEndDate() != null) { -// req.put("ENDDA", pageReqVO.getEndDate()[0].format(DateTimeFormatter.ofPattern("yyyyMMdd"))); -// } -// -// // 调用ERP接口获取数据 -// HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); -// JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); -// if (dataArray == null || dataArray.isEmpty()) { -// // 返回空结果而不是抛出异常 -// return new PageResult<>(new ArrayList<>(), 0L); -// } -// -// List list = new ArrayList<>(); -// for (int i = 0; i < dataArray.size(); i++) { -// JSONObject dataJson = dataArray.getJSONObject(i); -// if (dataJson != null) { -// ErpProductiveOrderDO orderDO = new ErpProductiveOrderDO(); -// -// // 基本信息 -// orderDO.setCompanyNumber(dataJson.getString("BUKRS")); -// orderDO.setFactoryNumber(dataJson.getString("WERKS").trim()); -// orderDO.setFactoryName(dataJson.getString("NAME1")); -// orderDO.setOrderNumber(dataJson.getString("AUFNR")); -// -// // 日期处理 -// String plannedStartDate = dataJson.getString("GLTRP"); -// String actualStartDate = dataJson.getString("GSTRP"); -// -// if (plannedStartDate != null && !plannedStartDate.equals("0000-00-00")) { -// try { -// orderDO.setStartDate(LocalDateTime.parse(plannedStartDate)); -// } catch (Exception e) { -// // 忽略日期解析错误 -// } -// } -// -// if (actualStartDate != null && !actualStartDate.equals("0000-00-00")) { -// try { -// orderDO.setEndDate(LocalDateTime.parse(actualStartDate)); -// } catch (Exception e) { -// // 忽略日期解析错误 -// } -// } -// -// // 物料和工艺信息 -// orderDO.setMainMaterialNumber(dataJson.getString("STLBEZ")); -// orderDO.setUnit(dataJson.getString("GMEIN")); -// orderDO.setMaterialDescription(dataJson.getString("MAKTX")); -// orderDO.setProcessingList(dataJson.getString("L_AFVC")); -// orderDO.setProcessingNumber(dataJson.getString("VORNR")); -// orderDO.setProcessingDescription(dataJson.getString("LTXA1")); -// orderDO.setObjectNumber(dataJson.getString("OBJID")); -// orderDO.setWorkCenterNumber(dataJson.getString("ARBPL")); -// orderDO.setWorkCenterDescription(dataJson.getString("KTEXT")); -// orderDO.setCostcenterNumber(dataJson.getString("KOSTL")); -// orderDO.setCostcenterName(dataJson.getString("TEXT_C")); -// -// list.add(orderDO); -// } -// } -// -// // 返回分页结果 -// return new PageResult<>(list, (long) list.size()); +// return erpProductiveOrderMapper.selectPage(pageReqVO); // } + // 直接从erp查询生产订单 + @Override + public PageResult getErpProductiveOrderPage(ErpProductiveOrderPageReqVO pageReqVO) { + OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.生产订单明细; + String funcnr = funcnrEnum.getFuncnr(); + Map req = new HashMap<>(); + + // 构建查询参数 + req.put("BUKRS", pageReqVO.getCompanyNumber()); + req.put("WERKS", pageReqVO.getFactoryNumber()); + + // 处理日期参数 + if (pageReqVO.getStartDate() != null) { + req.put("BEGDA", pageReqVO.getStartDate()[0].format(DateTimeFormatter.ofPattern("yyyyMMdd"))); + } + if (pageReqVO.getEndDate() != null) { + req.put("ENDDA", pageReqVO.getEndDate()[0].format(DateTimeFormatter.ofPattern("yyyyMMdd"))); + } + + // 调用ERP接口获取数据 + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); + JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); + if (dataArray == null || dataArray.isEmpty()) { + // 返回空结果而不是抛出异常 + return new PageResult<>(new ArrayList<>(), 0L); + } + + List list = new ArrayList<>(); + for (int i = 0; i < dataArray.size(); i++) { + JSONObject dataJson = dataArray.getJSONObject(i); + if (dataJson != null) { + ErpProductiveOrderDO orderDO = new ErpProductiveOrderDO(); + + // 基本信息 + orderDO.setCompanyNumber(dataJson.getString("BUKRS")); + orderDO.setFactoryNumber(dataJson.getString("WERKS").trim()); + orderDO.setFactoryName(dataJson.getString("NAME1")); + orderDO.setOrderNumber(dataJson.getString("AUFNR")); + + // 日期处理 + String plannedStartDate = dataJson.getString("GLTRP"); + String actualStartDate = dataJson.getString("GSTRP"); + + if (plannedStartDate != null && !plannedStartDate.equals("0000-00-00")) { + try { + orderDO.setStartDate(LocalDateTime.parse(plannedStartDate)); + } catch (Exception e) { + // 忽略日期解析错误 + } + } + + if (actualStartDate != null && !actualStartDate.equals("0000-00-00")) { + try { + orderDO.setEndDate(LocalDateTime.parse(actualStartDate)); + } catch (Exception e) { + // 忽略日期解析错误 + } + } + + // 物料和工艺信息 + orderDO.setMainMaterialNumber(dataJson.getString("STLBEZ")); + orderDO.setUnit(dataJson.getString("GMEIN")); + orderDO.setMaterialDescription(dataJson.getString("MAKTX")); + orderDO.setProcessingList(dataJson.getString("L_AFVC")); + orderDO.setProcessingNumber(dataJson.getString("VORNR")); + orderDO.setProcessingDescription(dataJson.getString("LTXA1")); + orderDO.setObjectNumber(dataJson.getString("OBJID")); + orderDO.setWorkCenterNumber(dataJson.getString("ARBPL")); + orderDO.setWorkCenterDescription(dataJson.getString("KTEXT")); + orderDO.setCostcenterNumber(dataJson.getString("KOSTL")); + orderDO.setCostcenterName(dataJson.getString("TEXT_C")); + + list.add(orderDO); + } + } + + List listLast = list.stream() + .filter(orderDO -> pageReqVO.getFactoryName() == null || pageReqVO.getFactoryName().equals(orderDO.getFactoryName())) + .filter(orderDO -> pageReqVO.getOrderNumber() == null || pageReqVO.getOrderNumber().equals(orderDO.getOrderNumber())) + .filter(orderDO -> pageReqVO.getMainMaterialNumber() == null || pageReqVO.getMainMaterialNumber().equals(orderDO.getMainMaterialNumber())) + .filter(orderDO -> pageReqVO.getProcessingList() == null || pageReqVO.getProcessingList().equals(orderDO.getProcessingList())) + .filter(orderDO -> pageReqVO.getProcessingNumber() == null || pageReqVO.getProcessingNumber().equals(orderDO.getProcessingNumber())) + .filter(orderDO -> pageReqVO.getProcessingDescription() == null || pageReqVO.getProcessingDescription().equals(orderDO.getProcessingDescription())) + .filter(orderDO -> pageReqVO.getObjectNumber() == null || pageReqVO.getObjectNumber().equals(orderDO.getObjectNumber())) + .filter(orderDO -> pageReqVO.getWorkCenterNumber() == null || pageReqVO.getWorkCenterNumber().equals(orderDO.getWorkCenterNumber())) + .filter(orderDO -> pageReqVO.getWorkCenterDescription() == null || pageReqVO.getWorkCenterDescription().equals(orderDO.getWorkCenterDescription())) + .filter(orderDO -> pageReqVO.getCostcenterNumber() == null || pageReqVO.getCostcenterNumber().equals(orderDO.getCostcenterNumber())) + .filter(orderDO -> pageReqVO.getCostcenterName() == null || pageReqVO.getCostcenterName().equals(orderDO.getCostcenterName())) + .toList(); + + // 返回分页结果 + return new PageResult<>(listLast, (long) listLast.size()); + } + @Override @Transactional - @XxlJob("getErpProductiveOrderTask") +// @XxlJob("getErpProductiveOrderTask") public void callErpRfcInterface() { - OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.生产订单; + OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.生产订单明细; String funcnr = funcnrEnum.getFuncnr(); + //防止缓存数据丢失 + String key = "erpMap" + funcnrEnum.getFuncnr(); + if (myRedisConfig.getRedisCacheMap(key).isEmpty()) { + initializeMap(key); + } Map req = new HashMap<>(); - List> datumList = new ArrayList<>(); - Map datumEntry = new HashMap<>(); + List> datumListS = new ArrayList<>(); + Map datumEntryS = new HashMap<>(); // 构建datum参数数组 - datumEntry.put("sign", "I"); - datumEntry.put("option", "EQ"); - datumEntry.put("low", LocalDate.now().toString()); - datumList.add(datumEntry); - req.put(funcnrEnum.getDatekey(), datumList); + datumEntryS.put("sign", "I"); + datumEntryS.put("option", "EQ"); + datumEntryS.put("low", LocalDate.now().toString()); + datumListS.add(datumEntryS); + req.put("BEGDA", datumListS); + List> datumListE = new ArrayList<>(); + Map datumEntryE = new HashMap<>(); + // 构建datum参数数组 + datumEntryE.put("sign", "I"); + datumEntryE.put("option", "EQ"); + datumEntryE.put("low", LocalDate.now().toString()); + datumListE.add(datumEntryE); + req.put("ENDDA", datumListE); JSONArray dataArrayALL = new JSONArray(); - List redisCache = myRedisConfig.getRedisCache(OftenEnum.FuncnrEnum.工厂信息.getFuncnr()); - if (CollUtil.isEmpty(redisCache)) { + List redisCacheF = myRedisConfig.getRedisCache(OftenEnum.FuncnrEnum.工厂信息.getFuncnr()); + if (CollUtil.isEmpty(redisCacheF)) { + throw exception(ERP_FACTORY_NOT_EXISTS); + } + List redisCacheC = myRedisConfig.getRedisCache(OftenEnum.FuncnrEnum.公司代码.getFuncnr()); + if (CollUtil.isEmpty(redisCacheC)) { throw exception(ERP_FACTORY_NOT_EXISTS); } // 1. 调用ERP接口获取数据 - for (String number : redisCache) { - req.put("WERKS", number); - // 1. 调用ERP接口获取数据 - HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); - JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); - if (dataArray == null || dataArray.isEmpty()) { - continue; + for (String numberC : redisCacheC) { + for (String numberF : redisCacheF) { + req.put("BUKRS", numberC); + req.put("WERKS", numberF); + // 1. 调用ERP接口获取数据 + HashMap dataFromERP = erpConfig.fetchDataFromERP(funcnr, req); + JSONArray dataArray = (JSONArray) dataFromERP.get("E_RESP"); + if (dataArray == null || dataArray.isEmpty()) { + continue; + } + dataArrayALL.addAll(dataArray); } - dataArrayALL.addAll(dataArray); } + if (dataArrayALL.isEmpty()) { throw exception(ERP_PRODUCTIVE_ORDER_NOT_EXISTS); } @@ -234,34 +272,58 @@ public class ErpProductiveOrderServiceImpl implements ErpProductiveOrderService * 处理数据,区分新增和更新 */ private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { - String key = "erp" + funcnr.getFuncnr(); - Map> numbers = myRedisConfig.numbers(dataArray, key, funcnr.getDatakey()); - List allnumbers = numbers.get("all"); - List comnumbers = numbers.get("com"); + String key = "erpMap" + funcnr.getFuncnr(); + Map numbers = myRedisConfig.getRedisCacheMap(key); List toUpdate = new ArrayList<>(); List toInsert = new ArrayList<>(); + List dataArrayNumbers = new ArrayList<>(); for (int i = 0; i < dataArray.size(); i++) { JSONObject dataJson = dataArray.getJSONObject(i); if (dataJson != null) { - String number = dataJson.getString("BUKRS").trim(); - if (number != null) { - ErpProductiveOrderDO DO = new ErpProductiveOrderDO(); -// DO.setName(dataJson.getString("BUTXT")); -// DO.setNumber(number); -// DO.setCurrency(dataJson.getString("WAERS")); - if (comnumbers.contains(number)) { - // 更新 - toUpdate.add(DO); - } else { - // 新增 - toInsert.add(DO); - } + String number = dataJson.getString("AUFNR").trim(); + ErpProductiveOrderDO DO = new ErpProductiveOrderDO(); + DO.setCompanyNumber(dataJson.getString("BUKRS").trim()); + DO.setFactoryNumber(dataJson.getString("WERKS").trim()); + DO.setFactoryName(dataJson.getString("NAME1").trim()); + DO.setOrderNumber(dataJson.getString("AUFNR").trim()); + if (!dataJson.getString("GLTRP").equals("0000-00-00")) { + DO.setStartDate(LocalDateTime.parse(dataJson.getString("GLTRP") + "T00:00:00")); } + if (!dataJson.getString("GSTRP").equals("0000-00-00")) { + DO.setEndDate(LocalDateTime.parse(dataJson.getString("GSTRP") + "T00:00:00")); + } + DO.setMainMaterialNumber(dataJson.getString("STLBEZ").trim()); + DO.setUnit(dataJson.getString("GMEIN").trim()); + DO.setMaterialDescription(dataJson.getString("MAKTX").trim()); + DO.setProcessingList(dataJson.getString("L_AFVC").trim()); + DO.setProcessingNumber(dataJson.getString("VORNR").trim()); + DO.setProcessingDescription(dataJson.getString("LTXA1").trim()); + DO.setObjectNumber(dataJson.getString("OBJID").trim()); + DO.setWorkCenterNumber(dataJson.getString("ARBPL").trim()); + DO.setWorkCenterDescription(dataJson.getString("KTEXT").trim()); + DO.setCostcenterNumber(dataJson.getString("KOSTL").trim()); + DO.setCostcenterName(dataJson.getString("TEXT_C").trim()); + if (numbers.get(number) != null) { + // 更新 + DO.setId(numbers.get(number)); + toUpdate.add(DO); + } else { + // 新增 + toInsert.add(DO); + } + dataArrayNumbers.add(number); + } + } + // 过滤出numbers中有,但dataArray中KOSTL没有的记录,即为需要删除的数据 + List deleteNumbers = new ArrayList<>(); + for (String number : numbers.keySet()) { + if (!dataArrayNumbers.contains(number)) { + deleteNumbers.add(number); } } - return new ProcessingResult(toUpdate, toInsert, key, allnumbers); + return new ProcessingResult(toUpdate, toInsert, key, deleteNumbers); } /** @@ -271,11 +333,26 @@ public class ErpProductiveOrderServiceImpl implements ErpProductiveOrderService // 批量新增和更新 if (!result.toInsert.isEmpty()) { erpProductiveOrderMapper.insertBatch(result.toInsert); + // 批量查询刚插入数据的id,提升效率 + List insertedNumbers = result.toInsert.stream() + .map(ErpProductiveOrderDO::getOrderNumber) + .collect(Collectors.toList()); + List insertedRecords = erpProductiveOrderMapper.selectList( + new LambdaQueryWrapperX() + .in(ErpProductiveOrderDO::getOrderNumber, insertedNumbers) + ); + Map numberIdMap = insertedRecords.stream() + .collect(Collectors.toMap(ErpProductiveOrderDO::getOrderNumber, ErpProductiveOrderDO::getId)); + myRedisConfig.addRedisCacheMap(result.key, numberIdMap); } if (!result.toUpdate.isEmpty()) { erpProductiveOrderMapper.updateBatch(result.toUpdate); } - myRedisConfig.updateRedisCache(result.key, result.allnumbers); + if (!result.deleteNumbers.isEmpty()) { + // 使用 in 条件批量删除,提高删除效率 + erpProductiveOrderMapper.delete(new LambdaQueryWrapperX().in(ErpProductiveOrderDO::getOrderNumber, result.deleteNumbers)); + myRedisConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); + } } /** @@ -285,13 +362,24 @@ public class ErpProductiveOrderServiceImpl implements ErpProductiveOrderService private final List toUpdate; private final List toInsert; private final String key; - private final List allnumbers; + private final List deleteNumbers; - public ProcessingResult(List toUpdate, List toInsert, String key, List allnumbers) { + public ProcessingResult(List toUpdate, List toInsert, String key, List deleteNumbers) { this.toUpdate = toUpdate; this.toInsert = toInsert; this.key = key; - this.allnumbers = allnumbers; + this.deleteNumbers = deleteNumbers; } } + + + private void initializeMap(String key) { + List assets = erpProductiveOrderMapper.selectList(new LambdaQueryWrapperX()); + Map existingNumbers = new HashMap<>(); + for (ErpProductiveOrderDO asset : assets) { + String mapKey = asset.getOrderNumber(); + existingNumbers.put(mapKey, asset.getId()); + } + myRedisConfig.addRedisCacheMap(key, existingNumbers); + } } \ No newline at end of file diff --git a/zt-module-erp/zt-module-erp-server/src/main/resources/mapper/ErpCustomerMapper.xml b/zt-module-erp/zt-module-erp-server/src/main/resources/mapper/ErpCustomerMapper.xml index 8e76ec1..f783092 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/resources/mapper/ErpCustomerMapper.xml +++ b/zt-module-erp/zt-module-erp-server/src/main/resources/mapper/ErpCustomerMapper.xml @@ -8,4 +8,22 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE sply_erp_cstm + + NUM = #{item.number}, + NAME = #{item.name}, + ACCT_GRP = #{item.accountGroup}, + DSP = #{item.description}, + CTR_NUM = #{item.centerNumber}, + CRT_DT = #{item.createDate}, + RPR_DT = #{item.repairDate}, + IS_GIV = #{item.isGiveback}, + IS_PRVS = #{item.isProvisional}, + TAX_NUM = #{item.taxNumber}, + + WHERE NUM = #{item.downCenterNumber} + + \ No newline at end of file