From 0b584a8098b80a15f816ba2be5a9faccac606f9c Mon Sep 17 00:00:00 2001 From: liss <1780094091@qq.com> Date: Fri, 19 Sep 2025 19:12:15 +0800 Subject: [PATCH] =?UTF-8?q?erp=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/erp/common/conf/ErpConfig.java | 117 +++++++++----- .../module/erp/common/enums/OftenEnum.java | 6 +- .../admin/erp/ErpAssetController.java | 7 + .../admin/erp/ErpBomController.java | 7 + .../admin/erp/ErpContractController.java | 6 + .../admin/erp/ErpCostcenterController.java | 8 + .../admin/erp/ErpFactoryController.java | 7 + .../admin/erp/ErpInternalOrderController.java | 7 + .../admin/erp/ErpProcessController.java | 7 + .../erp/ErpProductiveOrderController.java | 7 + .../erp/ErpProductiveVersionController.java | 7 + .../ErpPurchaseOrganizationController.java | 7 + .../erp/ErpSalesOrganizationController.java | 7 + .../admin/erp/ErpWarehouseController.java | 7 + .../admin/erp/vo/ErpAssetPageReqVO.java | 3 +- .../admin/erp/vo/ErpAssetRespVO.java | 2 +- .../admin/erp/vo/ErpAssetSaveReqVO.java | 2 +- .../admin/erp/vo/ErpBomPageReqVO.java | 2 +- .../controller/admin/erp/vo/ErpBomRespVO.java | 2 +- .../admin/erp/vo/ErpBomSaveReqVO.java | 2 +- .../erp/dal/dataobject/erp/ErpAssetDO.java | 6 +- .../erp/dal/dataobject/erp/ErpBomDO.java | 13 +- .../dal/dataobject/erp/ErpBomDetailDO.java | 4 +- .../dal/dataobject/erp/ErpCostcenterDO.java | 4 +- .../erp/dal/dataobject/erp/ErpFactoryDO.java | 6 +- .../dataobject/erp/ErpInternalOrderDO.java | 4 +- .../erp/dal/dataobject/erp/ErpProcessDO.java | 4 +- .../dataobject/erp/ErpProcessDetailDO.java | 4 +- .../dataobject/erp/ErpProductiveOrderDO.java | 4 +- .../erp/ErpProductiveVersionDO.java | 4 +- .../erp/ErpPurchaseOrganizationDO.java | 4 +- .../erp/ErpSalesOrganizationDO.java | 4 +- .../erp/dal/mysql/erp/ErpAssetMapper.java | 2 +- .../erp/dal/mysql/erp/ErpFactoryMapper.java | 6 + .../erp/service/erp/ErpAssetService.java | 1 + .../erp/service/erp/ErpAssetServiceImpl.java | 143 ++++++++++++++++- .../module/erp/service/erp/ErpBomService.java | 1 + .../erp/service/erp/ErpBomServiceImpl.java | 146 +++++++++++++++++- .../erp/service/erp/ErpContractService.java | 1 + .../service/erp/ErpContractServiceImpl.java | 102 ++++++++++++ .../erp/service/erp/ErpCostcenterService.java | 1 + .../service/erp/ErpCostcenterServiceImpl.java | 121 +++++++++++++++ .../service/erp/ErpCustomerServiceImpl.java | 6 +- .../erp/service/erp/ErpFactoryService.java | 1 + .../service/erp/ErpFactoryServiceImpl.java | 119 ++++++++++++++ .../service/erp/ErpInternalOrderService.java | 1 + .../erp/ErpInternalOrderServiceImpl.java | 114 ++++++++++++++ .../service/erp/ErpMaterialServiceImpl.java | 44 +++--- .../erp/service/erp/ErpProcessService.java | 1 + .../service/erp/ErpProcessServiceImpl.java | 102 ++++++++++++ .../erp/ErpProductiveOrderService.java | 1 + .../erp/ErpProductiveOrderServiceImpl.java | 124 +++++++++++++++ .../erp/ErpProductiveVersionService.java | 1 + .../erp/ErpProductiveVersionServiceImpl.java | 117 ++++++++++++++ .../erp/ErpPurchaseOrganizationService.java | 1 + .../ErpPurchaseOrganizationServiceImpl.java | 111 +++++++++++++ .../erp/ErpSalesOrganizationService.java | 1 + .../erp/ErpSalesOrganizationServiceImpl.java | 119 ++++++++++++++ .../erp/service/erp/ErpWarehouseService.java | 1 + .../service/erp/ErpWarehouseServiceImpl.java | 120 ++++++++++++++ .../main/resources/mapper/ErpAssetMapper.xml | 20 ++- .../main/resources/mapper/ErpBomMapper.xml | 10 ++ .../resources/mapper/ErpCompanyMapper.xml | 10 ++ .../resources/mapper/ErpContractMapper.xml | 10 ++ .../resources/mapper/ErpCostcenterMapper.xml | 10 ++ .../resources/mapper/ErpCustomerMapper.xml | 10 ++ .../resources/mapper/ErpFactoryMapper.xml | 10 ++ .../mapper/ErpInternalOrderMapper.xml | 10 ++ .../resources/mapper/ErpMaterialMapper.xml | 10 ++ .../mapper/ErpProcessDetailMapper.xml | 10 ++ .../resources/mapper/ErpProcessMapper.xml | 10 ++ .../mapper/ErpProductiveOrderMapper.xml | 10 ++ .../mapper/ErpProductiveVersionMapper.xml | 10 ++ .../mapper/ErpPurchaseOrganizationMapper.xml | 10 ++ .../mapper/ErpSalesOrganizationMapper.xml | 10 ++ .../resources/mapper/ErpWarehouseMapper.xml | 10 ++ 76 files changed, 1852 insertions(+), 107 deletions(-) diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/common/conf/ErpConfig.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/common/conf/ErpConfig.java index 7fa68eb..639f86b 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/common/conf/ErpConfig.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/common/conf/ErpConfig.java @@ -35,46 +35,49 @@ public class ErpConfig { * 调用ERP接口获取公司数据 */ public JSONArray fetchDataFromERP(String funcnr, Map req) { - // 构建完整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); - } + 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); + // 设置请求头 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); - // 创建HTTP请求实体 - HttpEntity requestEntity = new HttpEntity<>(requestBody.toJSONString(), headers); + // 创建HTTP请求实体 + HttpEntity requestEntity = new HttpEntity<>(requestBody.toJSONString(), headers); - // 发送POST请求 - RestTemplate restTemplate = new RestTemplate(); - ResponseEntity response = restTemplate.postForEntity(url, requestEntity, String.class); + // 发送POST请求 + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity response = restTemplate.postForEntity(url, requestEntity, String.class); - // 解析响应结果 - String responseBody = response.getBody(); - if (responseBody == null) { - log.warn("ERP接口返回空响应"); - return null; - } + // 解析响应结果 + String responseBody = response.getBody(); + if (responseBody.isEmpty()) { + log.warn("无所选条件的查询数据"+req); + } - JSONObject jsonResponse = JSON.parseObject(responseBody); - if (jsonResponse == null) { - log.warn("ERP接口响应无法解析为JSON"); - return null; - } + 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 { - log.warn("ERP接口调用失败或返回错误标志"); + // 正确获取E_DATA数组 + JSONObject dataObject = jsonResponse.getJSONObject("data"); + if (dataObject != null && "S".equals(dataObject.getString("E_FLAG"))) { + return dataObject.getJSONArray("E_DATA"); + } else { + log.warn("ERP接口调用失败或返回错误标志"); + return null; + } + } catch (Exception e) { + log.error("调用ERP RFC接口失败: {}", e); return null; } } @@ -91,11 +94,29 @@ public class ErpConfig { // 提取有效的 BUKRS 编号 List existingNumbers = new ArrayList<>(); if (dataArray != null) { + // 将dataKey按"-"分割成多个部分 + String[] keyParts = dataKey.split("-"); existingNumbers = dataArray.stream() .filter(Objects::nonNull) - .map(dataJson -> ((JSONObject) dataJson).getString(dataKey)) - .filter(Objects::nonNull) - .map(String::trim) // 去除字符串首尾空格 + .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()); } @@ -121,4 +142,26 @@ public class ErpConfig { // 使用 Redis 更新缓存数据 redisTemplate.opsForValue().set(key, allnumbers); } + + public List getRedisCache(String key) { + // 使用 Redis 更新缓存数据 + return (List)redisTemplate.opsForValue().get("erp"+key); + } + + + public Map numbersMap(String key) { + // 使用 Redis 获取缓存数据 + Map result = (Map) redisTemplate.opsForValue().get(key); + return result; + } + +// public void updateRedisCache(String key, List allnumbers) { +// // 使用 Redis 更新缓存数据 +// redisTemplate.opsForValue().set(key, allnumbers); +// } +// +// public List getRedisCache(String key) { +// // 使用 Redis 更新缓存数据 +// return (List)redisTemplate.opsForValue().get("erp"+key); +// } } diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/common/enums/OftenEnum.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/common/enums/OftenEnum.java index 2023e46..8754f98 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/common/enums/OftenEnum.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/common/enums/OftenEnum.java @@ -14,7 +14,7 @@ public class OftenEnum { //接口编号枚举 public enum FuncnrEnum { 公司代码("001", "BUKRS", ""), - 工厂信息("002", "", ""), + 工厂信息("002", "WERKS", ""), 客商信息("003", "PARTNER", "DATUM"), 成本中心("004", "", ""), 内部订单("005", "", ""), @@ -22,11 +22,11 @@ public class OftenEnum { 采购组织("007", "", ""), 销售组织("008", "", ""), 合同信息("009", "", ""), - 资产卡片("010", "", ""), + 资产卡片("010", "ANLN1-BUKRS", "ERDAT"), 库存信息("011", "", ""), 辅组编码("012", "", ""), 生产订单("013", "", ""), - BOM清单("014", "", ""), + BOM清单("014", "MATNR-STLAL-WERKS", ""), 工艺路线("015", "", ""), 生产版本("016", "", ""), 生产投料("017", "", ""), diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpAssetController.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpAssetController.java index 1f55054..705d71c 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpAssetController.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpAssetController.java @@ -101,4 +101,11 @@ public class ErpAssetController { BeanUtils.toBean(list, ErpAssetRespVO.class)); } + @PostMapping("/getErpAssetTask") + @Operation(summary = "定时获得erp更新资产卡片") + @PreAuthorize("@ss.hasPermission('sply:erp-asset:query')") + public void getErpCompanyTask() { + erpAssetService.callErpRfcInterface(); + } + } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpBomController.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpBomController.java index 610e2c5..34c0b68 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpBomController.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpBomController.java @@ -101,4 +101,11 @@ public class ErpBomController { BeanUtils.toBean(list, ErpBomRespVO.class)); } + @PostMapping("/getErpBomTask") + @Operation(summary = "定时获得erp更新物料清单(BOM)") + @PreAuthorize("@ss.hasPermission('sply:erp-bom:query')") + public void getErpBomTask() { + erpBomService.callErpRfcInterface(); + } + } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpContractController.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpContractController.java index 8425fcb..14c9ef5 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpContractController.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpContractController.java @@ -101,4 +101,10 @@ public class ErpContractController { BeanUtils.toBean(list, ErpContractRespVO.class)); } + @PostMapping("/getErpContractTask") + @Operation(summary = "定时获得erp更新合同") + @PreAuthorize("@ss.hasPermission('sply:erp-contract:query')") + public void getErpContractTask() { + erpContractService.callErpRfcInterface(); + } } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpCostcenterController.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpCostcenterController.java index 45c270e..ef1c613 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpCostcenterController.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpCostcenterController.java @@ -101,4 +101,12 @@ public class ErpCostcenterController { BeanUtils.toBean(list, ErpCostcenterRespVO.class)); } + @PostMapping("/getErpCostcenterTask") + @Operation(summary = "定时获得erp更新成本中心") + @PreAuthorize("@ss.hasPermission('sply:erp-costcenter:query')") + public void getErpCostcenterTask() { + erpCostcenterService.callErpRfcInterface(); + } + + } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpFactoryController.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpFactoryController.java index 3194879..df3812f 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpFactoryController.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpFactoryController.java @@ -101,4 +101,11 @@ public class ErpFactoryController { BeanUtils.toBean(list, ErpFactoryRespVO.class)); } + @PostMapping("/getErpFactoryTask") + @Operation(summary = "定时获得erp工厂数据") + @PreAuthorize("@ss.hasPermission('sply:erp-factory:create')") + public void getErpFactoryTask() { + erpFactoryService.callErpRfcInterface(); + } + } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpInternalOrderController.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpInternalOrderController.java index 43b31e9..ba7e369 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpInternalOrderController.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpInternalOrderController.java @@ -101,4 +101,11 @@ public class ErpInternalOrderController { BeanUtils.toBean(list, ErpInternalOrderRespVO.class)); } + @PostMapping("/getErpInternalOrderTask") + @Operation(summary = "定时获得erp更新内部订单数据") + @PreAuthorize("@ss.hasPermission('sply:erp-internal-order:create')") + public void getErpInternalOrderTask() { + erpInternalOrderService.callErpRfcInterface(); + } + } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpProcessController.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpProcessController.java index 92831bd..85c77c4 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpProcessController.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpProcessController.java @@ -101,4 +101,11 @@ public class ErpProcessController { BeanUtils.toBean(list, ErpProcessRespVO.class)); } + @PostMapping("/getErpProcessTask") + @Operation(summary = "定时获得erp更新工艺路线") + @PreAuthorize("@ss.hasPermission('sply:erp-process:create')") + public void getErpProcessTask() { + erpProcessService.callErpRfcInterface(); + } + } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpProductiveOrderController.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpProductiveOrderController.java index dd6f93b..93a3ae7 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpProductiveOrderController.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpProductiveOrderController.java @@ -101,4 +101,11 @@ public class ErpProductiveOrderController { BeanUtils.toBean(list, ErpProductiveOrderRespVO.class)); } + @PostMapping("/getErpProductiveOrderTask") + @Operation(summary = "定时获得erp更新生产订单") + @PreAuthorize("@ss.hasPermission('sply:erp-productive-order:create')") + public void getErpProductiveOrderTask() { + erpProductiveOrderService.callErpRfcInterface(); + } + } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpProductiveVersionController.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpProductiveVersionController.java index 83e13a2..8b26299 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpProductiveVersionController.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpProductiveVersionController.java @@ -101,4 +101,11 @@ public class ErpProductiveVersionController { BeanUtils.toBean(list, ErpProductiveVersionRespVO.class)); } + @PostMapping("/getErpProductiveVersionTask") + @Operation(summary = "定时获得erp更新生产版本") + @PreAuthorize("@ss.hasPermission('sply:erp-productive-version:create')") + public void getErpProductiveVersionTask() { + erpProductiveVersionService.callErpRfcInterface(); + } + } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpPurchaseOrganizationController.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpPurchaseOrganizationController.java index 630eb0c..f5c848c 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpPurchaseOrganizationController.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpPurchaseOrganizationController.java @@ -101,4 +101,11 @@ public class ErpPurchaseOrganizationController { BeanUtils.toBean(list, ErpPurchaseOrganizationRespVO.class)); } + @PostMapping("/getErpPurchaseOrganizationTask") + @Operation(summary = "定时获得erp更新采购组织") + @PreAuthorize("@ss.hasPermission('sply:erp-purchase-organization:create')") + public void getErpPurchaseOrganizationTask() { + erpPurchaseOrganizationService.callErpRfcInterface(); + } + } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpSalesOrganizationController.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpSalesOrganizationController.java index 2976534..2418fb5 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpSalesOrganizationController.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpSalesOrganizationController.java @@ -101,4 +101,11 @@ public class ErpSalesOrganizationController { BeanUtils.toBean(list, ErpSalesOrganizationRespVO.class)); } + @PostMapping("/getErpSalesOrganizationTask") + @Operation(summary = "定时获得erp更新销售组织") + @PreAuthorize("@ss.hasPermission('sply:erp-sales-organization:create')") + public void getErpSalesOrganizationTask() { + erpSalesOrganizationService.callErpRfcInterface(); + } + } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpWarehouseController.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpWarehouseController.java index 4f967ae..875f296 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpWarehouseController.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/ErpWarehouseController.java @@ -101,4 +101,11 @@ public class ErpWarehouseController { BeanUtils.toBean(list, ErpWarehouseRespVO.class)); } + @PostMapping("/getErpWarehouseTask") + @Operation(summary = "定时获得erp更新库位") + @PreAuthorize("@ss.hasPermission('sply:erp-warehouse:create')") + public void getErpWarehouseTask() { + erpWarehouseService.callErpRfcInterface(); + } + } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpAssetPageReqVO.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpAssetPageReqVO.java index 8ab5deb..a596aea 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpAssetPageReqVO.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpAssetPageReqVO.java @@ -54,8 +54,7 @@ public class ErpAssetPageReqVO extends PageParam { private LocalDateTime[] depreciationStartDate; @Schema(description = "计划年使用期") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] planYearDate; + private String planYearDate; @Schema(description = "成本中心编码") private String costcenterNumber; diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpAssetRespVO.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpAssetRespVO.java index b98b3c0..53e6f70 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpAssetRespVO.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpAssetRespVO.java @@ -67,7 +67,7 @@ public class ErpAssetRespVO { @Schema(description = "计划年使用期") @ExcelProperty("计划年使用期") - private LocalDateTime planYearDate; + private String planYearDate; @Schema(description = "成本中心编码") @ExcelProperty("成本中心编码") diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpAssetSaveReqVO.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpAssetSaveReqVO.java index 432c5e6..1cf1b97 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpAssetSaveReqVO.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpAssetSaveReqVO.java @@ -56,7 +56,7 @@ public class ErpAssetSaveReqVO { private LocalDateTime depreciationStartDate; @Schema(description = "计划年使用期") - private LocalDateTime planYearDate; + private String planYearDate; @Schema(description = "成本中心编码") private String costcenterNumber; diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpBomPageReqVO.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpBomPageReqVO.java index f969188..50756a9 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpBomPageReqVO.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpBomPageReqVO.java @@ -11,7 +11,7 @@ import java.math.BigDecimal; public class ErpBomPageReqVO extends PageParam { @Schema(description = "工厂编码") - private BigDecimal factoryNumber; + private String factoryNumber; @Schema(description = "顶层物料编码") private String upMaterial; diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpBomRespVO.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpBomRespVO.java index d3cc055..51210c0 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpBomRespVO.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpBomRespVO.java @@ -18,7 +18,7 @@ public class ErpBomRespVO { @Schema(description = "工厂编码", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("工厂编码") - private BigDecimal factoryNumber; + private String factoryNumber; @Schema(description = "顶层物料编码", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("顶层物料编码") diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpBomSaveReqVO.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpBomSaveReqVO.java index 6a2ffcc..5233e6f 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpBomSaveReqVO.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/erp/vo/ErpBomSaveReqVO.java @@ -16,7 +16,7 @@ public class ErpBomSaveReqVO { @Schema(description = "工厂编码", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "工厂编码不能为空") - private BigDecimal factoryNumber; + private String factoryNumber; @Schema(description = "顶层物料编码", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "顶层物料编码不能为空") diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpAssetDO.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpAssetDO.java index 07aa266..1671f2d 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpAssetDO.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpAssetDO.java @@ -14,7 +14,7 @@ import java.time.LocalDateTime; @TableName("sply_erp_ast") @KeySequence("sply_erp_ast_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data -@EqualsAndHashCode(callSuper = true) +@EqualsAndHashCode @ToString(callSuper = true) @Builder @NoArgsConstructor @@ -22,7 +22,7 @@ import java.time.LocalDateTime; /** * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO */ -public class ErpAssetDO extends BaseDO { +public class ErpAssetDO{ @@ -95,7 +95,7 @@ public class ErpAssetDO extends BaseDO { * 计划年使用期 */ @TableField("PLN_YR_DT") - private LocalDateTime planYearDate; + private String planYearDate; /** * 成本中心编码 */ diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpBomDO.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpBomDO.java index af5ebba..a9ae0f0 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpBomDO.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpBomDO.java @@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.*; import lombok.*; import java.math.BigDecimal; +import java.util.List; + /** * ERP物料清单(BOM) DO * @@ -13,7 +15,7 @@ import java.math.BigDecimal; @TableName("sply_erp_bm") @KeySequence("sply_erp_bm_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data -@EqualsAndHashCode(callSuper = true) +@EqualsAndHashCode @ToString(callSuper = true) @Builder @NoArgsConstructor @@ -21,9 +23,7 @@ import java.math.BigDecimal; /** * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO */ -public class ErpBomDO extends BaseDO { - - +public class ErpBomDO { /** * 主键 @@ -34,7 +34,7 @@ public class ErpBomDO extends BaseDO { * 工厂编码 */ @TableField("FACT_NUM") - private BigDecimal factoryNumber; + private String factoryNumber; /** * 顶层物料编码 */ @@ -61,4 +61,7 @@ public class ErpBomDO extends BaseDO { @TableField("UNT") private String unit; + @TableField(fill = FieldFill.INSERT) + private List erpBomDetailDOList; + } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpBomDetailDO.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpBomDetailDO.java index 503cf37..5ad6182 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpBomDetailDO.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpBomDetailDO.java @@ -13,7 +13,7 @@ import java.math.BigDecimal; @TableName("sply_erp_bm_dtl") @KeySequence("sply_erp_bm_dtl_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data -@EqualsAndHashCode(callSuper = true) +@EqualsAndHashCode @ToString(callSuper = true) @Builder @NoArgsConstructor @@ -21,7 +21,7 @@ import java.math.BigDecimal; /** * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO */ -public class ErpBomDetailDO extends BaseDO { +public class ErpBomDetailDO { diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpCostcenterDO.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpCostcenterDO.java index 6826b48..53e8e3a 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpCostcenterDO.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpCostcenterDO.java @@ -13,7 +13,7 @@ import java.time.LocalDateTime; @TableName("sply_erp_cctr") @KeySequence("sply_erp_cctr_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data -@EqualsAndHashCode(callSuper = true) +@EqualsAndHashCode @ToString(callSuper = true) @Builder @NoArgsConstructor @@ -21,7 +21,7 @@ import java.time.LocalDateTime; /** * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO */ -public class ErpCostcenterDO extends BaseDO { +public class ErpCostcenterDO { diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpFactoryDO.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpFactoryDO.java index 425021b..f3d73e0 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpFactoryDO.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpFactoryDO.java @@ -11,7 +11,7 @@ import lombok.*; @TableName("sply_erp_fact") @KeySequence("sply_erp_fact_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data -@EqualsAndHashCode(callSuper = true) +@EqualsAndHashCode @ToString(callSuper = true) @Builder @NoArgsConstructor @@ -19,7 +19,7 @@ import lombok.*; /** * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO */ -public class ErpFactoryDO extends BaseDO { +public class ErpFactoryDO { @@ -42,6 +42,6 @@ public class ErpFactoryDO extends BaseDO { * 公司编号 */ @TableField("CPN_ID") - private Long companyId; + private String companyId; } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpInternalOrderDO.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpInternalOrderDO.java index 7bec09d..65070fe 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpInternalOrderDO.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpInternalOrderDO.java @@ -11,7 +11,7 @@ import lombok.*; @TableName("sply_erp_intl_ord") @KeySequence("sply_erp_intl_ord_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data -@EqualsAndHashCode(callSuper = true) +@EqualsAndHashCode @ToString(callSuper = true) @Builder @NoArgsConstructor @@ -19,7 +19,7 @@ import lombok.*; /** * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO */ -public class ErpInternalOrderDO extends BaseDO { +public class ErpInternalOrderDO { diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpProcessDO.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpProcessDO.java index d34bd98..56f5e26 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpProcessDO.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpProcessDO.java @@ -13,7 +13,7 @@ import java.math.BigDecimal; @TableName("sply_erp_prcs") @KeySequence("sply_erp_prcs_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data -@EqualsAndHashCode(callSuper = true) +@EqualsAndHashCode @ToString(callSuper = true) @Builder @NoArgsConstructor @@ -21,7 +21,7 @@ import java.math.BigDecimal; /** * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO */ -public class ErpProcessDO extends BaseDO { +public class ErpProcessDO { diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpProcessDetailDO.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpProcessDetailDO.java index 8689ba2..c4bb345 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpProcessDetailDO.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpProcessDetailDO.java @@ -13,7 +13,7 @@ import java.math.BigDecimal; @TableName("sply_erp_prcs_dtl") @KeySequence("sply_erp_prcs_dtl_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data -@EqualsAndHashCode(callSuper = true) +@EqualsAndHashCode @ToString(callSuper = true) @Builder @NoArgsConstructor @@ -21,7 +21,7 @@ import java.math.BigDecimal; /** * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO */ -public class ErpProcessDetailDO extends BaseDO { +public class ErpProcessDetailDO { diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpProductiveOrderDO.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpProductiveOrderDO.java index 12b4d48..cf8b5fc 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpProductiveOrderDO.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpProductiveOrderDO.java @@ -13,7 +13,7 @@ import java.time.LocalDateTime; @TableName("sply_erp_pdtv_ord") @KeySequence("sply_erp_pdtv_ord_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data -@EqualsAndHashCode(callSuper = true) +@EqualsAndHashCode @ToString(callSuper = true) @Builder @NoArgsConstructor @@ -21,7 +21,7 @@ import java.time.LocalDateTime; /** * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO */ -public class ErpProductiveOrderDO extends BaseDO { +public class ErpProductiveOrderDO{ diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpProductiveVersionDO.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpProductiveVersionDO.java index e40fbff..3025ffd 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpProductiveVersionDO.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpProductiveVersionDO.java @@ -13,7 +13,7 @@ import java.math.BigDecimal; @TableName("sply_erp_pdtv_ver") @KeySequence("sply_erp_pdtv_ver_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data -@EqualsAndHashCode(callSuper = true) +@EqualsAndHashCode @ToString(callSuper = true) @Builder @NoArgsConstructor @@ -21,7 +21,7 @@ import java.math.BigDecimal; /** * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO */ -public class ErpProductiveVersionDO extends BaseDO { +public class ErpProductiveVersionDO { diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpPurchaseOrganizationDO.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpPurchaseOrganizationDO.java index a7db67a..4a3d34a 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpPurchaseOrganizationDO.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpPurchaseOrganizationDO.java @@ -11,7 +11,7 @@ import lombok.*; @TableName("sply_erp_prch_orgz") @KeySequence("sply_erp_prch_orgz_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data -@EqualsAndHashCode(callSuper = true) +@EqualsAndHashCode @ToString(callSuper = true) @Builder @NoArgsConstructor @@ -19,7 +19,7 @@ import lombok.*; /** * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO */ -public class ErpPurchaseOrganizationDO extends BaseDO { +public class ErpPurchaseOrganizationDO { diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpSalesOrganizationDO.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpSalesOrganizationDO.java index e2d1feb..907f0ad 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpSalesOrganizationDO.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/dataobject/erp/ErpSalesOrganizationDO.java @@ -11,7 +11,7 @@ import lombok.*; @TableName("sply_erp_sale_orgz") @KeySequence("sply_erp_sale_orgz_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data -@EqualsAndHashCode(callSuper = true) +@EqualsAndHashCode @ToString(callSuper = true) @Builder @NoArgsConstructor @@ -19,7 +19,7 @@ import lombok.*; /** * 支持业务基类继承:isBusiness=true 时继承 BusinessBaseDO,否则继承 BaseDO */ -public class ErpSalesOrganizationDO extends BaseDO { +public class ErpSalesOrganizationDO { diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/erp/ErpAssetMapper.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/erp/ErpAssetMapper.java index 144ad46..a4c1d1d 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/erp/ErpAssetMapper.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/erp/ErpAssetMapper.java @@ -29,7 +29,7 @@ public interface ErpAssetMapper extends BaseMapperX { .eqIfPresent(ErpAssetDO::getAssetDescription, reqVO.getAssetDescription()) .eqIfPresent(ErpAssetDO::getAssetDescriptionAttach, reqVO.getAssetDescriptionAttach()) .betweenIfPresent(ErpAssetDO::getDepreciationStartDate, reqVO.getDepreciationStartDate()) - .betweenIfPresent(ErpAssetDO::getPlanYearDate, reqVO.getPlanYearDate()) + .eqIfPresent(ErpAssetDO::getPlanYearDate, reqVO.getPlanYearDate()) .eqIfPresent(ErpAssetDO::getCostcenterNumber, reqVO.getCostcenterNumber()) .eqIfPresent(ErpAssetDO::getDutyCostcenterNumber, reqVO.getDutyCostcenterNumber()) .orderByDesc(ErpAssetDO::getId)); diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/erp/ErpFactoryMapper.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/erp/ErpFactoryMapper.java index b3c195a..3bb9126 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/erp/ErpFactoryMapper.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/erp/ErpFactoryMapper.java @@ -5,7 +5,11 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpFactoryPageReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpFactoryDO; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * ERP工厂 Mapper @@ -22,4 +26,6 @@ public interface ErpFactoryMapper extends BaseMapperX { .orderByDesc(ErpFactoryDO::getId)); } + void updateBatch(@Param("toUpdate") List toUpdate); + } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpAssetService.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpAssetService.java index 81305a3..36e5617 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpAssetService.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpAssetService.java @@ -61,4 +61,5 @@ public interface ErpAssetService { */ PageResult getErpAssetPage(ErpAssetPageReqVO pageReqVO); + void callErpRfcInterface(); } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpAssetServiceImpl.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpAssetServiceImpl.java index 077c6f9..24cb4fb 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpAssetServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpAssetServiceImpl.java @@ -3,19 +3,31 @@ package cn.iocoder.yudao.module.erp.service.erp; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.erp.common.conf.ErpConfig; +import cn.iocoder.yudao.module.erp.common.enums.OftenEnum; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpAssetPageReqVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpAssetRespVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpAssetSaveReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpAssetDO; import cn.iocoder.yudao.module.erp.dal.mysql.erp.ErpAssetMapper; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.xxl.job.core.handler.annotation.XxlJob; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.ERP_ASSET_NOT_EXISTS; +import static dm.jdbc.util.DriverUtil.log; /** * ERP资产卡片 Service 实现类 @@ -29,6 +41,9 @@ public class ErpAssetServiceImpl implements ErpAssetService { @Resource private ErpAssetMapper erpAssetMapper; + @Resource + private ErpConfig erpConfig; + @Override public ErpAssetRespVO createErpAsset(ErpAssetSaveReqVO createReqVO) { // 插入 @@ -56,12 +71,12 @@ public class ErpAssetServiceImpl implements ErpAssetService { } @Override - public void deleteErpAssetListByIds(List ids) { + public void deleteErpAssetListByIds(List ids) { // 校验存在 validateErpAssetExists(ids); // 删除 erpAssetMapper.deleteByIds(ids); - } + } private void validateErpAssetExists(List ids) { List list = erpAssetMapper.selectByIds(ids); @@ -86,4 +101,128 @@ public class ErpAssetServiceImpl implements ErpAssetService { return erpAssetMapper.selectPage(pageReqVO); } + @Override + @Transactional + @XxlJob("getErpAssetTask") + public void callErpRfcInterface() { + try { + OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.资产卡片; + String funcnr = funcnrEnum.getFuncnr(); + // 构建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(); + List redisCache = erpConfig.getRedisCache(OftenEnum.FuncnrEnum.公司代码.getFuncnr()); + if (CollUtil.isEmpty(redisCache)) { + return; + } + for (String number : redisCache) { + req.put("BUKRS", number); + // 1. 调用ERP接口获取数据 + JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + if (dataArray == null || dataArray.isEmpty()) { + continue; + } + dataArrayALL.addAll(dataArray); + } + + // 2. 处理公司数据,区分新增和更新 + ProcessingResult result = processData(dataArrayALL, funcnrEnum); + + // 3. 批量保存数据 + saveData(result); + + } catch (Exception e) { + log.error("调用ERP RFC接口失败: {}", e); + throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e); + } + } + + /** + * 处理数据,区分新增和更新 + */ + private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { + String key = "erp" + funcnr.getFuncnr(); + Map> numbers = erpConfig.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) { + ErpAssetDO DO = new ErpAssetDO(); + DO.setCompanyNumber(dataJson.getString("BUKRS")); + DO.setMainAssetNumber(dataJson.getString("ANLN1")); + if (!dataJson.getString("ERDAT").equals("0000-00-00")) { + DO.setRecordCreateDate(LocalDateTime.parse(dataJson.getString("ERDAT") + "T00:00:00")); + } + DO.setUpdateUserName(dataJson.getString("ERNAM")); + DO.setAssetTypeNumber(dataJson.getString("ANLKL")); + DO.setAssetTypeName(dataJson.getString("TXK20")); + if (!dataJson.getString("AKTIV").equals("0000-00-00")) { + DO.setAssetDate(LocalDateTime.parse(dataJson.getString("AKTIV") + "T00:00:00")); + } + DO.setUom(dataJson.getString("MEINS")); + DO.setQuantity(dataJson.getBigDecimal("MENGE")); + DO.setAssetDescription(dataJson.getString("TXT50")); + DO.setAssetDescriptionAttach(dataJson.getString("TXA50")); + if (!dataJson.getString("AFABG").equals("0000-00-00")) { + DO.setDepreciationStartDate(LocalDateTime.parse(dataJson.getString("AFABG") + "T00:00:00")); + } + DO.setPlanYearDate(dataJson.getString("NDJAR")); + DO.setCostcenterNumber(dataJson.getString("KOSTL")); + DO.setDutyCostcenterNumber(dataJson.getString("KOSTLV")); + if (comnumbers.contains(DO.getMainAssetNumber()+"-"+DO.getCompanyNumber())) { + // 更新 + toUpdate.add(DO); + } else { + // 新增 + toInsert.add(DO); + } + } + } + + return new ProcessingResult(toUpdate, toInsert, key, allnumbers); + } + + /** + * 批量保存数据 + */ + private void saveData(ProcessingResult result) { + // 批量新增和更新 + if (!result.toInsert.isEmpty()) { + erpAssetMapper.insertBatch(result.toInsert); + } + if (!result.toUpdate.isEmpty()) { + erpAssetMapper.updateBatch(result.toUpdate); + } + erpConfig.updateRedisCache(result.key, result.allnumbers); + } + + /** + * 数据处理结果封装类 + */ + private static class ProcessingResult { + private final List toUpdate; + private final List toInsert; + private final String key; + private final List allnumbers; + + public ProcessingResult(List toUpdate, List toInsert, String key, List allnumbers) { + this.toUpdate = toUpdate; + this.toInsert = toInsert; + this.key = key; + this.allnumbers = allnumbers; + } + } + } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpBomService.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpBomService.java index 90da405..32c104d 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpBomService.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpBomService.java @@ -61,4 +61,5 @@ public interface ErpBomService { */ PageResult getErpBomPage(ErpBomPageReqVO pageReqVO); + void callErpRfcInterface(); } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpBomServiceImpl.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpBomServiceImpl.java index c187dbe..640013a 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpBomServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpBomServiceImpl.java @@ -3,19 +3,31 @@ package cn.iocoder.yudao.module.erp.service.erp; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.erp.common.conf.ErpConfig; +import cn.iocoder.yudao.module.erp.common.enums.OftenEnum; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpBomPageReqVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpBomRespVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpBomSaveReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpBomDO; +import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpBomDO; +import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpBomDetailDO; import cn.iocoder.yudao.module.erp.dal.mysql.erp.ErpBomMapper; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.xxl.job.core.handler.annotation.XxlJob; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +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 cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.ERP_BOM_NOT_EXISTS; +import static dm.jdbc.util.DriverUtil.log; /** * ERP物料清单(BOM) Service 实现类 @@ -29,6 +41,9 @@ public class ErpBomServiceImpl implements ErpBomService { @Resource private ErpBomMapper erpBomMapper; + @Resource + private ErpConfig erpConfig; + @Override public ErpBomRespVO createErpBom(ErpBomSaveReqVO createReqVO) { // 插入 @@ -56,12 +71,12 @@ public class ErpBomServiceImpl implements ErpBomService { } @Override - public void deleteErpBomListByIds(List ids) { + public void deleteErpBomListByIds(List ids) { // 校验存在 validateErpBomExists(ids); // 删除 erpBomMapper.deleteByIds(ids); - } + } private void validateErpBomExists(List ids) { List list = erpBomMapper.selectByIds(ids); @@ -86,4 +101,131 @@ public class ErpBomServiceImpl implements ErpBomService { return erpBomMapper.selectPage(pageReqVO); } + @Override + @Transactional + @XxlJob("getErpBomTask") + public void callErpRfcInterface() { + try { + OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.BOM清单; + String funcnr = funcnrEnum.getFuncnr(); + Map req = new HashMap<>(); + JSONArray dataArrayALL = new JSONArray(); + List redisCache = erpConfig.getRedisCache(OftenEnum.FuncnrEnum.工厂信息.getFuncnr()); + if (CollUtil.isEmpty(redisCache)) { + return; + } + for (String factoryNumber : redisCache) { + req.put("WERKS", factoryNumber); + // 1. 调用ERP接口获取数据 + JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + if (dataArray == null || dataArray.isEmpty()) { + continue; + } + dataArrayALL.addAll(dataArray); + } + + // 2. 处理公司数据,区分新增和更新 + ProcessingResult result = processData(dataArrayALL, funcnrEnum); + + // 3. 批量保存数据 + saveData(result); + + } catch (Exception e) { + log.error("调用ERP RFC接口失败: {}", e); + throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e); + } + } + + /** + * 处理数据,区分新增和更新 + */ + private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { + String key = "erp" + funcnr.getFuncnr(); + Map numbers = erpConfig.numbersMap(key); + Map numberDels = erpConfig.numbersMap(key+"del"); + List toUpdate = new ArrayList<>(); + List toInsert = new ArrayList<>(); + + List allnumbers = new ArrayList<>(); + for (int i = 0; i < dataArray.size(); i++) { + JSONObject dataJson = dataArray.getJSONObject(i); + if (dataJson != null) { + ErpBomDO DO = new ErpBomDO(); + DO.setFactoryNumber(dataJson.getString("WERKS")); + DO.setUpMaterial(dataJson.getString("MATNR")); + DO.setUseItem(dataJson.getString("STLAL")); +// DO.set(dataJson.getString("STLAN"));数据库无这个字段 + DO.setMaterialDescription(dataJson.getString("MAKTX")); + DO.setQuantity(dataJson.getBigDecimal("BMENG")); + DO.setUnit(dataJson.getString("BMEIN")); + String number =DO.getUpMaterial()+"-"+DO.getUseItem()+"-"+DO.getFactoryNumber(); + String domId = null; + if (numbers.get(number)!=null) { + // 更新 + domId = numbers.get(number); + DO.setId(Long.valueOf(domId)); + toUpdate.add(DO); + } else { + // 新增 + toInsert.add(DO); + } + + JSONArray dataJsonItem = dataJson.getJSONArray("ITEM"); + if (dataJsonItem != null) { + List erpBomDetailDOList =new ArrayList<>(); + for (int j = 0; j < dataJsonItem.size(); j++){ + JSONObject dataJsonItemJson = dataJsonItem.getJSONObject(j); + ErpBomDetailDO detailDO = new ErpBomDetailDO(); + String numberDel = number+dataJsonItemJson.getString("STVKN"); + if (numberDels.get( numberDel) != null){ + detailDO.setId(Long.valueOf(numberDels.get( numberDel))); + } + detailDO.setBomId(domId); + detailDO.setErpBomId(dataJsonItemJson.getString("STVKN")); + detailDO.setErpBomId(dataJsonItemJson.getString("IDNRK")); + detailDO.setErpBomId(dataJsonItemJson.getString("OJTXP")); + detailDO.setErpBomId(dataJsonItemJson.getString("POSTP")); + detailDO.setErpBomId(dataJsonItemJson.getString("MENGE")); + detailDO.setErpBomId(dataJsonItemJson.getString("MEINS")); + detailDO.setErpBomId(dataJsonItemJson.getString("WLCAT")); + erpBomDetailDOList.add(detailDO); + } + DO.setErpBomDetailDOList(erpBomDetailDOList); + } + } + } + + return new ProcessingResult(toUpdate, toInsert, key, allnumbers); + } + + /** + * 批量保存数据 + */ + private void saveData(ProcessingResult result) { + // 批量新增和更新 + if (!result.toInsert.isEmpty()) { + erpBomMapper.insertBatch(result.toInsert); + } + if (!result.toUpdate.isEmpty()) { + erpBomMapper.updateBatch(result.toUpdate); + } + erpConfig.updateRedisCache(result.key, result.allnumbers); + } + + /** + * 数据处理结果封装类 + */ + private static class ProcessingResult { + private final List toUpdate; + private final List toInsert; + private final String key; + private final List allnumbers; + + public ProcessingResult(List toUpdate, List toInsert, String key, List allnumbers) { + this.toUpdate = toUpdate; + this.toInsert = toInsert; + this.key = key; + this.allnumbers = allnumbers; + } + } } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpContractService.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpContractService.java index 36d81ed..dcaea71 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpContractService.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpContractService.java @@ -61,4 +61,5 @@ public interface ErpContractService { */ PageResult getErpContractPage(ErpContractPageReqVO pageReqVO); + void callErpRfcInterface(); } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpContractServiceImpl.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpContractServiceImpl.java index 857b322..d84966e 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpContractServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpContractServiceImpl.java @@ -3,19 +3,29 @@ package cn.iocoder.yudao.module.erp.service.erp; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.erp.common.conf.ErpConfig; +import cn.iocoder.yudao.module.erp.common.enums.OftenEnum; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpContractPageReqVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpContractRespVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpContractSaveReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpContractDO; +import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpContractDO; import cn.iocoder.yudao.module.erp.dal.mysql.erp.ErpContractMapper; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.xxl.job.core.handler.annotation.XxlJob; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.util.ArrayList; import java.util.List; +import java.util.Map; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.ERP_CONTRACT_NOT_EXISTS; +import static dm.jdbc.util.DriverUtil.log; /** * ERP合同映射 Service 实现类 @@ -29,6 +39,9 @@ public class ErpContractServiceImpl implements ErpContractService { @Resource private ErpContractMapper erpContractMapper; + @Resource + private ErpConfig erpConfig; + @Override public ErpContractRespVO createErpContract(ErpContractSaveReqVO createReqVO) { // 插入 @@ -86,4 +99,93 @@ public class ErpContractServiceImpl implements ErpContractService { return erpContractMapper.selectPage(pageReqVO); } + @Override + @Transactional + @XxlJob("getErpContractTask") + public void callErpRfcInterface() { + try { + OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.合同信息; + String funcnr = funcnrEnum.getFuncnr(); + // 1. 调用ERP接口获取数据 + JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, null); + if (dataArray == null || dataArray.isEmpty()) { + return; + } + + // 2. 处理公司数据,区分新增和更新 + ProcessingResult result = processData(dataArray,funcnrEnum); + + // 3. 批量保存数据 + saveData(result); + + } catch (Exception e) { + log.error("调用ERP RFC接口失败: {}", e); + throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e); + } + } + + /** + * 处理数据,区分新增和更新 + */ + private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { + String key = "erp" + funcnr.getFuncnr(); + Map> numbers = erpConfig.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("BUKRS").trim(); + if (number != null) { + ErpContractDO DO = new ErpContractDO(); +// DO.setName(dataJson.getString("BUTXT")); +// DO.setNumber(number); +// DO.setCurrency(dataJson.getString("WAERS")); + if (comnumbers.contains(number)) { + // 更新 + toUpdate.add(DO); + } else { + // 新增 + toInsert.add(DO); + } + } + } + } + + return new ProcessingResult(toUpdate, toInsert,key,allnumbers); + } + + /** + * 批量保存数据 + */ + private void saveData(ProcessingResult result) { + // 批量新增和更新 + if (!result.toInsert.isEmpty()) { + erpContractMapper.insertBatch(result.toInsert); + } + if (!result.toUpdate.isEmpty()) { + erpContractMapper.updateBatch(result.toUpdate); + } + erpConfig.updateRedisCache(result.key,result.allnumbers); + } + + /** + * 数据处理结果封装类 + */ + private static class ProcessingResult { + private final List toUpdate; + private final List toInsert; + private final String key; + private final List allnumbers; + + public ProcessingResult(List toUpdate, List toInsert,String key,List allnumbers) { + this.toUpdate = toUpdate; + this.toInsert = toInsert; + this.key = key; + this.allnumbers = allnumbers; + } + } } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpCostcenterService.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpCostcenterService.java index 08ea18e..58de712 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpCostcenterService.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpCostcenterService.java @@ -61,4 +61,5 @@ public interface ErpCostcenterService { */ PageResult getErpCostcenterPage(ErpCostcenterPageReqVO pageReqVO); + void callErpRfcInterface(); } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpCostcenterServiceImpl.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpCostcenterServiceImpl.java index 946a2f3..36de440 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpCostcenterServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpCostcenterServiceImpl.java @@ -3,19 +3,31 @@ package cn.iocoder.yudao.module.erp.service.erp; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.erp.common.conf.ErpConfig; +import cn.iocoder.yudao.module.erp.common.enums.OftenEnum; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpCostcenterPageReqVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpCostcenterRespVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpCostcenterSaveReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpCostcenterDO; +import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpCostcenterDO; import cn.iocoder.yudao.module.erp.dal.mysql.erp.ErpCostcenterMapper; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.xxl.job.core.handler.annotation.XxlJob; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.ERP_COSTCENTER_NOT_EXISTS; +import static dm.jdbc.util.DriverUtil.log; /** * ERP成本中心 Service 实现类 @@ -29,6 +41,9 @@ public class ErpCostcenterServiceImpl implements ErpCostcenterService { @Resource private ErpCostcenterMapper erpCostcenterMapper; + @Resource + private ErpConfig erpConfig; + @Override public ErpCostcenterRespVO createErpCostcenter(ErpCostcenterSaveReqVO createReqVO) { // 插入 @@ -86,4 +101,110 @@ public class ErpCostcenterServiceImpl implements ErpCostcenterService { return erpCostcenterMapper.selectPage(pageReqVO); } + @Override + @Transactional + @XxlJob("getErpCostcenterTask") + public void callErpRfcInterface() { + try { + OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.成本中心; + String funcnr = funcnrEnum.getFuncnr(); + + Map req = new HashMap<>(); + JSONArray dataArrayALL = new JSONArray(); + List redisCache = erpConfig.getRedisCache(OftenEnum.FuncnrEnum.公司代码.getFuncnr()); + if (CollUtil.isEmpty(redisCache)) { + return; + } + // 1. 调用ERP接口获取数据 + for (String number : redisCache) { + req.put("BUKRS", number); + // 1. 调用ERP接口获取数据 + JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + if (dataArray == null || dataArray.isEmpty()) { + continue; + } + dataArrayALL.addAll(dataArray); + } + + // 2. 处理公司数据,区分新增和更新 + ProcessingResult result = processData(dataArrayALL,funcnrEnum); + + // 3. 批量保存数据 + saveData(result); + + } catch (Exception e) { + log.error("调用ERP RFC接口失败: {}", e); + throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e); + } + } + + /** + * 处理数据,区分新增和更新 + */ + private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { + String key = "erp" + funcnr.getFuncnr(); + Map> numbers = erpConfig.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) { + ErpCostcenterDO DO = new ErpCostcenterDO(); + DO.setNumber(dataJson.getString("KOSTL")); + DO.setName(dataJson.getString("KTEX")); + DO.setIsUse(dataJson.getString("DRNAM")); + DO.setScopeNumber(dataJson.getString("FKBER")); + if (!dataJson.getString("AKTIV").equals("0000-00-00")) { + DO.setStartDate(LocalDateTime.parse(dataJson.getString("DATAB") + "T00:00:00")); + } + if (!dataJson.getString("AKTIV").equals("0000-00-00")) { + DO.setStartDate(LocalDateTime.parse(dataJson.getString("DATBI") + "T00:00:00")); + } + DO.setScopeName(dataJson.getString("FKBTX")); + if (comnumbers.contains(dataJson.getString("KOSTL"))) { + // 更新 + toUpdate.add(DO); + } else { + // 新增 + toInsert.add(DO); + } + } + } + + return new ProcessingResult(toUpdate, toInsert,key,allnumbers); + } + + /** + * 批量保存数据 + */ + private void saveData(ProcessingResult result) { + // 批量新增和更新 + if (!result.toInsert.isEmpty()) { + erpCostcenterMapper.insertBatch(result.toInsert); + } + if (!result.toUpdate.isEmpty()) { + erpCostcenterMapper.updateBatch(result.toUpdate); + } + erpConfig.updateRedisCache(result.key,result.allnumbers); + } + + /** + * 数据处理结果封装类 + */ + private static class ProcessingResult { + private final List toUpdate; + private final List toInsert; + private final String key; + private final List allnumbers; + + public ProcessingResult(List toUpdate, List toInsert,String key,List allnumbers) { + this.toUpdate = toUpdate; + this.toInsert = toInsert; + this.key = key; + this.allnumbers = allnumbers; + } + } } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpCustomerServiceImpl.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpCustomerServiceImpl.java index e24f78d..152c5d3 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpCustomerServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpCustomerServiceImpl.java @@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpCustomerDO; import cn.iocoder.yudao.module.erp.dal.mysql.erp.ErpCustomerMapper; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.xxl.job.core.handler.annotation.XxlJob; import jakarta.annotation.Resource; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @@ -108,6 +109,7 @@ public class ErpCustomerServiceImpl implements ErpCustomerService { @Override @Transactional + @XxlJob("getErpCustomerTask") public void callErpRfcInterface() { try { OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.客商信息; @@ -120,10 +122,8 @@ public class ErpCustomerServiceImpl implements ErpCustomerService { datumEntry.put("sign", "I"); datumEntry.put("option", "EQ"); datumEntry.put("low", LocalDate.now().toString()); -// datumEntry.put("low", "2021-05-17"); datumList.add(datumEntry); req.put(funcnrEnum.getDatekey(), datumList); -// req.put("BUKRS", "3001"); // 1. 调用ERP接口获取数据 for (OftenEnum.ModeTypeEnum type : OftenEnum.ModeTypeEnum.values()) { @@ -161,7 +161,7 @@ public class ErpCustomerServiceImpl implements ErpCustomerService { for (int i = 0; i < dataArray.size(); i++) { JSONObject dataJson = dataArray.getJSONObject(i); if (dataJson != null) { - String number = dataJson.getString("PARTNER").trim(); + String number = dataJson.getString(funcnrEnum.getDatakey()).trim(); if (number != null) { ErpCustomerDO DO = new ErpCustomerDO(); DO.setName(dataJson.getString("NAME_ORG1")); diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpFactoryService.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpFactoryService.java index 8d6e338..2730a94 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpFactoryService.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpFactoryService.java @@ -61,4 +61,5 @@ public interface ErpFactoryService { */ PageResult getErpFactoryPage(ErpFactoryPageReqVO pageReqVO); + void callErpRfcInterface(); } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpFactoryServiceImpl.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpFactoryServiceImpl.java index 56cd524..6f80fd7 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpFactoryServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpFactoryServiceImpl.java @@ -3,19 +3,30 @@ package cn.iocoder.yudao.module.erp.service.erp; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.erp.common.conf.ErpConfig; +import cn.iocoder.yudao.module.erp.common.enums.OftenEnum; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpFactoryPageReqVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpFactoryRespVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpFactorySaveReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpFactoryDO; +import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpFactoryDO; import cn.iocoder.yudao.module.erp.dal.mysql.erp.ErpFactoryMapper; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.xxl.job.core.handler.annotation.XxlJob; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +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 cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.ERP_FACTORY_NOT_EXISTS; +import static dm.jdbc.util.DriverUtil.log; /** * ERP工厂 Service 实现类 @@ -29,6 +40,9 @@ public class ErpFactoryServiceImpl implements ErpFactoryService { @Resource private ErpFactoryMapper erpFactoryMapper; + @Resource + private ErpConfig erpConfig; + @Override public ErpFactoryRespVO createErpFactory(ErpFactorySaveReqVO createReqVO) { // 插入 @@ -85,5 +99,110 @@ public class ErpFactoryServiceImpl implements ErpFactoryService { public PageResult getErpFactoryPage(ErpFactoryPageReqVO pageReqVO) { return erpFactoryMapper.selectPage(pageReqVO); } + @Override + @Transactional + @XxlJob("getErpFactoryTask") + public void callErpRfcInterface() { + try { + OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.工厂信息; + String funcnr = funcnrEnum.getFuncnr(); + // 1. 调用ERP接口获取数据 + Map req = new HashMap<>(); + JSONArray dataArrayALL = new JSONArray(); + List redisCache = erpConfig.getRedisCache(OftenEnum.FuncnrEnum.公司代码.getFuncnr()); + if (CollUtil.isEmpty(redisCache)) { + return; + } + for (String companyNumber : redisCache) { + req.put("BUKRS", companyNumber); + // 1. 调用ERP接口获取数据 + JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + if (dataArray == null || dataArray.isEmpty()) { + continue; + } + // 往每个子项中添加BUKRS字段 + for (int j = 0; j < dataArray.size(); j++) { + JSONObject item = dataArray.getJSONObject(j); + if (item != null) { + item.put("BUKRS", companyNumber); + } + } + dataArrayALL.addAll(dataArray); + } + + // 2. 处理公司数据,区分新增和更新 + ProcessingResult result = processData(dataArrayALL,funcnrEnum); + + // 3. 批量保存数据 + saveData(result); + + } catch (Exception e) { + log.error("调用ERP RFC接口失败: {}", e); + throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e); + } + } + + /** + * 处理数据,区分新增和更新 + */ + private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { + String key = "erp" + funcnr.getFuncnr(); + Map> numbers = erpConfig.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(funcnr.getDatakey()).trim(); + ErpFactoryDO DO = new ErpFactoryDO(); + DO.setName(dataJson.getString("NAME1")); + DO.setNumber(number); + DO.setCompanyId(dataJson.getString("BUKRS")); + if (comnumbers.contains(number)) { + // 更新 + toUpdate.add(DO); + } else { + // 新增 + toInsert.add(DO); + } + } + } + + return new ProcessingResult(toUpdate, toInsert,key,allnumbers); + } + + /** + * 批量保存数据 + */ + private void saveData(ProcessingResult result) { + // 批量新增和更新 + if (!result.toInsert.isEmpty()) { + erpFactoryMapper.insertBatch(result.toInsert); + } + if (!result.toUpdate.isEmpty()) { + erpFactoryMapper.updateBatch(result.toUpdate); + } + erpConfig.updateRedisCache(result.key,result.allnumbers); + } + + /** + * 数据处理结果封装类 + */ + private static class ProcessingResult { + private final List toUpdate; + private final List toInsert; + private final String key; + private final List allnumbers; + + public ProcessingResult(List toUpdate, List toInsert,String key,List allnumbers) { + this.toUpdate = toUpdate; + this.toInsert = toInsert; + this.key = key; + this.allnumbers = allnumbers; + } + } } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpInternalOrderService.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpInternalOrderService.java index 9350d5d..a370a9d 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpInternalOrderService.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpInternalOrderService.java @@ -61,4 +61,5 @@ public interface ErpInternalOrderService { */ PageResult getErpInternalOrderPage(ErpInternalOrderPageReqVO pageReqVO); + void callErpRfcInterface(); } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpInternalOrderServiceImpl.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpInternalOrderServiceImpl.java index 3c63b1c..0d967d9 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpInternalOrderServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpInternalOrderServiceImpl.java @@ -3,19 +3,30 @@ package cn.iocoder.yudao.module.erp.service.erp; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.erp.common.conf.ErpConfig; +import cn.iocoder.yudao.module.erp.common.enums.OftenEnum; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpInternalOrderPageReqVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpInternalOrderRespVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpInternalOrderSaveReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpInternalOrderDO; +import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpInternalOrderDO; import cn.iocoder.yudao.module.erp.dal.mysql.erp.ErpInternalOrderMapper; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.xxl.job.core.handler.annotation.XxlJob; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +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 cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.ERP_INTERNAL_ORDER_NOT_EXISTS; +import static dm.jdbc.util.DriverUtil.log; /** * ERP内部订单 Service 实现类 @@ -29,6 +40,9 @@ public class ErpInternalOrderServiceImpl implements ErpInternalOrderService { @Resource private ErpInternalOrderMapper erpInternalOrderMapper; + @Resource + private ErpConfig erpConfig; + @Override public ErpInternalOrderRespVO createErpInternalOrder(ErpInternalOrderSaveReqVO createReqVO) { // 插入 @@ -86,4 +100,104 @@ public class ErpInternalOrderServiceImpl implements ErpInternalOrderService { return erpInternalOrderMapper.selectPage(pageReqVO); } + @Override + @Transactional + @XxlJob("getErpInternalOrderTask") + public void callErpRfcInterface() { + try { + OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.内部订单; + String funcnr = funcnrEnum.getFuncnr(); + + Map req = new HashMap<>(); + JSONArray dataArrayALL = new JSONArray(); + List redisCache = erpConfig.getRedisCache(OftenEnum.FuncnrEnum.公司代码.getFuncnr()); + if (CollUtil.isEmpty(redisCache)) { + return; + } + // 1. 调用ERP接口获取数据 + for (String number : redisCache) { + req.put("BUKRS", number); + // 1. 调用ERP接口获取数据 + JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + if (dataArray == null || dataArray.isEmpty()) { + continue; + } + dataArrayALL.addAll(dataArray); + } + + // 2. 处理公司数据,区分新增和更新 + ProcessingResult result = processData(dataArrayALL,funcnrEnum); + + // 3. 批量保存数据 + saveData(result); + + } catch (Exception e) { + log.error("调用ERP RFC接口失败: {}", e); + throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e); + } + } + + /** + * 处理数据,区分新增和更新 + */ + private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { + String key = "erp" + funcnr.getFuncnr(); + Map> numbers = erpConfig.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) { + ErpInternalOrderDO DO = new ErpInternalOrderDO(); + DO.setName(dataJson.getString("KTEXT")); + DO.setNumber(dataJson.getString("AUFNR")); + DO.setType(dataJson.getString("AUART")); + DO.setIsOff(dataJson.getString("PHAS3")); + DO.setIsFinish(dataJson.getString("PHAS2")); + if (comnumbers.contains(dataJson.getString("AUFNR"))) { + // 更新 + toUpdate.add(DO); + } else { + // 新增 + toInsert.add(DO); + } + } + } + + return new ProcessingResult(toUpdate, toInsert,key,allnumbers); + } + + /** + * 批量保存数据 + */ + private void saveData(ProcessingResult result) { + // 批量新增和更新 + if (!result.toInsert.isEmpty()) { + erpInternalOrderMapper.insertBatch(result.toInsert); + } + if (!result.toUpdate.isEmpty()) { + erpInternalOrderMapper.updateBatch(result.toUpdate); + } + erpConfig.updateRedisCache(result.key,result.allnumbers); + } + + /** + * 数据处理结果封装类 + */ + private static class ProcessingResult { + private final List toUpdate; + private final List toInsert; + private final String key; + private final List allnumbers; + + public ProcessingResult(List toUpdate, List toInsert,String key,List allnumbers) { + this.toUpdate = toUpdate; + this.toInsert = toInsert; + this.key = key; + this.allnumbers = allnumbers; + } + } } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpMaterialServiceImpl.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpMaterialServiceImpl.java index e3e9df3..5325806 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpMaterialServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpMaterialServiceImpl.java @@ -13,6 +13,7 @@ import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpMaterialDO; import cn.iocoder.yudao.module.erp.dal.mysql.erp.ErpMaterialMapper; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.xxl.job.core.handler.annotation.XxlJob; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -102,6 +103,7 @@ public class ErpMaterialServiceImpl implements ErpMaterialService { @Override @Transactional + @XxlJob("getErpMaterialTask") public void callErpRfcInterface() { try { OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.物料数据; @@ -150,29 +152,27 @@ public class ErpMaterialServiceImpl implements ErpMaterialService { JSONObject dataJson = dataArray.getJSONObject(i); if (dataJson != null) { String number = dataJson.getString("MATNR").trim(); - if (number != null) { - ErpMaterialDO DO = new ErpMaterialDO(); - DO.setDownCenterNumber(number); - DO.setCenterNumber(dataJson.getString("BISMT")); - DO.setCreateDate(LocalDateTime.parse(dataJson.getString("ERSDA"))); - DO.setMaterialType(dataJson.getString("MTART")); - DO.setMaterialGroupDate(dataJson.getString("MATKL")); - DO.setExternalMaterialGroupDate(dataJson.getString("EXTWG")); - DO.setUnit(dataJson.getString("MEINS")); - DO.setUnitDescription(dataJson.getString("MSEHT")); - DO.setMaterialTypeDescription(dataJson.getString("MTBEZ")); - DO.setMaterialGroupDescription(dataJson.getString("WGBEZ")); - DO.setExternalMaterialGroupDescription(dataJson.getString("EWBEZ")); - DO.setMaterialName(dataJson.getString("MAKTX")); - DO.setMaterialLengthDescription(dataJson.getString("LDESC")); + ErpMaterialDO DO = new ErpMaterialDO(); + DO.setDownCenterNumber(number); + DO.setCenterNumber(dataJson.getString("BISMT")); + DO.setCreateDate(LocalDateTime.parse(dataJson.getString("ERSDA"))); + DO.setMaterialType(dataJson.getString("MTART")); + DO.setMaterialGroupDate(dataJson.getString("MATKL")); + DO.setExternalMaterialGroupDate(dataJson.getString("EXTWG")); + DO.setUnit(dataJson.getString("MEINS")); + DO.setUnitDescription(dataJson.getString("MSEHT")); + DO.setMaterialTypeDescription(dataJson.getString("MTBEZ")); + DO.setMaterialGroupDescription(dataJson.getString("WGBEZ")); + DO.setExternalMaterialGroupDescription(dataJson.getString("EWBEZ")); + DO.setMaterialName(dataJson.getString("MAKTX")); + DO.setMaterialLengthDescription(dataJson.getString("LDESC")); - if (comnumbers.contains(number)) { - // 更新 - toUpdate.add(DO); - } else { - // 新增 - toInsert.add(DO); - } + if (comnumbers.contains(number)) { + // 更新 + toUpdate.add(DO); + } else { + // 新增 + toInsert.add(DO); } } } diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProcessService.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProcessService.java index 4d020a4..5565302 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProcessService.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProcessService.java @@ -61,4 +61,5 @@ public interface ErpProcessService { */ PageResult getErpProcessPage(ErpProcessPageReqVO pageReqVO); + void callErpRfcInterface(); } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProcessServiceImpl.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProcessServiceImpl.java index bc1b832..4796a00 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProcessServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProcessServiceImpl.java @@ -3,19 +3,29 @@ package cn.iocoder.yudao.module.erp.service.erp; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.erp.common.conf.ErpConfig; +import cn.iocoder.yudao.module.erp.common.enums.OftenEnum; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpProcessPageReqVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpProcessRespVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpProcessSaveReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpProcessDO; +import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpProcessDO; import cn.iocoder.yudao.module.erp.dal.mysql.erp.ErpProcessMapper; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.xxl.job.core.handler.annotation.XxlJob; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.util.ArrayList; import java.util.List; +import java.util.Map; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.ERP_PROCESS_NOT_EXISTS; +import static dm.jdbc.util.DriverUtil.log; /** * ERP工艺路线 Service 实现类 @@ -29,6 +39,9 @@ public class ErpProcessServiceImpl implements ErpProcessService { @Resource private ErpProcessMapper erpProcessMapper; + @Resource + private ErpConfig erpConfig; + @Override public ErpProcessRespVO createErpProcess(ErpProcessSaveReqVO createReqVO) { // 插入 @@ -86,4 +99,93 @@ public class ErpProcessServiceImpl implements ErpProcessService { return erpProcessMapper.selectPage(pageReqVO); } + @Override + @Transactional + @XxlJob("getErpProcessTask") + public void callErpRfcInterface() { + try { + OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.公司代码; + String funcnr = funcnrEnum.getFuncnr(); + // 1. 调用ERP接口获取数据 + JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, null); + if (dataArray == null || dataArray.isEmpty()) { + return; + } + + // 2. 处理公司数据,区分新增和更新 + ProcessingResult result = processData(dataArray,funcnrEnum); + + // 3. 批量保存数据 + saveData(result); + + } catch (Exception e) { + log.error("调用ERP RFC接口失败: {}", e); + throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e); + } + } + + /** + * 处理数据,区分新增和更新 + */ + private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { + String key = "erp" + funcnr.getFuncnr(); + Map> numbers = erpConfig.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("BUKRS").trim(); + if (number != null) { + ErpProcessDO DO = new ErpProcessDO(); +// DO.setName(dataJson.getString("BUTXT")); +// DO.setNumber(number); +// DO.setCurrency(dataJson.getString("WAERS")); + if (comnumbers.contains(number)) { + // 更新 + toUpdate.add(DO); + } else { + // 新增 + toInsert.add(DO); + } + } + } + } + + return new ProcessingResult(toUpdate, toInsert,key,allnumbers); + } + + /** + * 批量保存数据 + */ + private void saveData(ProcessingResult result) { + // 批量新增和更新 + if (!result.toInsert.isEmpty()) { + erpProcessMapper.insertBatch(result.toInsert); + } + if (!result.toUpdate.isEmpty()) { + erpProcessMapper.updateBatch(result.toUpdate); + } + erpConfig.updateRedisCache(result.key,result.allnumbers); + } + + /** + * 数据处理结果封装类 + */ + private static class ProcessingResult { + private final List toUpdate; + private final List toInsert; + private final String key; + private final List allnumbers; + + public ProcessingResult(List toUpdate, List toInsert,String key,List allnumbers) { + this.toUpdate = toUpdate; + this.toInsert = toInsert; + this.key = key; + this.allnumbers = allnumbers; + } + } } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProductiveOrderService.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProductiveOrderService.java index 5fcaf6f..58ed1be 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProductiveOrderService.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProductiveOrderService.java @@ -61,4 +61,5 @@ public interface ErpProductiveOrderService { */ PageResult getErpProductiveOrderPage(ErpProductiveOrderPageReqVO pageReqVO); + void callErpRfcInterface(); } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProductiveOrderServiceImpl.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProductiveOrderServiceImpl.java index d9c7575..3180e82 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProductiveOrderServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProductiveOrderServiceImpl.java @@ -3,19 +3,31 @@ package cn.iocoder.yudao.module.erp.service.erp; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.erp.common.conf.ErpConfig; +import cn.iocoder.yudao.module.erp.common.enums.OftenEnum; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpProductiveOrderPageReqVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpProductiveOrderRespVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpProductiveOrderSaveReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpProductiveOrderDO; +import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpProductiveOrderDO; import cn.iocoder.yudao.module.erp.dal.mysql.erp.ErpProductiveOrderMapper; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.xxl.job.core.handler.annotation.XxlJob; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.ERP_PRODUCTIVE_ORDER_NOT_EXISTS; +import static dm.jdbc.util.DriverUtil.log; /** * ERP生产订单 Service 实现类 @@ -29,6 +41,9 @@ public class ErpProductiveOrderServiceImpl implements ErpProductiveOrderService @Resource private ErpProductiveOrderMapper erpProductiveOrderMapper; + @Resource + private ErpConfig erpConfig; + @Override public ErpProductiveOrderRespVO createErpProductiveOrder(ErpProductiveOrderSaveReqVO createReqVO) { // 插入 @@ -86,4 +101,113 @@ public class ErpProductiveOrderServiceImpl implements ErpProductiveOrderService return erpProductiveOrderMapper.selectPage(pageReqVO); } + @Override + @Transactional + @XxlJob("getErpProductiveOrderTask") + public void callErpRfcInterface() { + try { + OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.生产订单; + String funcnr = funcnrEnum.getFuncnr(); + + 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); + JSONArray dataArrayALL = new JSONArray(); + List redisCache = erpConfig.getRedisCache(OftenEnum.FuncnrEnum.工厂信息.getFuncnr()); + if (CollUtil.isEmpty(redisCache)) { + return; + } + // 1. 调用ERP接口获取数据 + for (String number : redisCache) { + req.put("WERKS", number); + // 1. 调用ERP接口获取数据 + JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + if (dataArray == null || dataArray.isEmpty()) { + continue; + } + dataArrayALL.addAll(dataArray); + } + + // 2. 处理公司数据,区分新增和更新 + ProcessingResult result = processData(dataArrayALL,funcnrEnum); + + // 3. 批量保存数据 + saveData(result); + + } catch (Exception e) { + log.error("调用ERP RFC接口失败: {}", e); + throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e); + } + } + + /** + * 处理数据,区分新增和更新 + */ + private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { + String key = "erp" + funcnr.getFuncnr(); + Map> numbers = erpConfig.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("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); + } + } + } + } + + return new ProcessingResult(toUpdate, toInsert,key,allnumbers); + } + + /** + * 批量保存数据 + */ + private void saveData(ProcessingResult result) { + // 批量新增和更新 + if (!result.toInsert.isEmpty()) { + erpProductiveOrderMapper.insertBatch(result.toInsert); + } + if (!result.toUpdate.isEmpty()) { + erpProductiveOrderMapper.updateBatch(result.toUpdate); + } + erpConfig.updateRedisCache(result.key,result.allnumbers); + } + + /** + * 数据处理结果封装类 + */ + private static class ProcessingResult { + private final List toUpdate; + private final List toInsert; + private final String key; + private final List allnumbers; + + public ProcessingResult(List toUpdate, List toInsert,String key,List allnumbers) { + this.toUpdate = toUpdate; + this.toInsert = toInsert; + this.key = key; + this.allnumbers = allnumbers; + } + } } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProductiveVersionService.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProductiveVersionService.java index 84ee98b..58c9f4c 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProductiveVersionService.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProductiveVersionService.java @@ -61,4 +61,5 @@ public interface ErpProductiveVersionService { */ PageResult getErpProductiveVersionPage(ErpProductiveVersionPageReqVO pageReqVO); + void callErpRfcInterface(); } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProductiveVersionServiceImpl.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProductiveVersionServiceImpl.java index 7ce359c..978cd0a 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProductiveVersionServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpProductiveVersionServiceImpl.java @@ -3,19 +3,30 @@ package cn.iocoder.yudao.module.erp.service.erp; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.erp.common.conf.ErpConfig; +import cn.iocoder.yudao.module.erp.common.enums.OftenEnum; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpProductiveVersionPageReqVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpProductiveVersionRespVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpProductiveVersionSaveReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpProductiveVersionDO; +import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpProductiveVersionDO; import cn.iocoder.yudao.module.erp.dal.mysql.erp.ErpProductiveVersionMapper; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.xxl.job.core.handler.annotation.XxlJob; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +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 cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.ERP_PRODUCTIVE_VERSION_NOT_EXISTS; +import static dm.jdbc.util.DriverUtil.log; /** * ERP生产版本 Service 实现类 @@ -29,6 +40,9 @@ public class ErpProductiveVersionServiceImpl implements ErpProductiveVersionServ @Resource private ErpProductiveVersionMapper erpProductiveVersionMapper; + @Resource + private ErpConfig erpConfig; + @Override public ErpProductiveVersionRespVO createErpProductiveVersion(ErpProductiveVersionSaveReqVO createReqVO) { // 插入 @@ -86,4 +100,107 @@ public class ErpProductiveVersionServiceImpl implements ErpProductiveVersionServ return erpProductiveVersionMapper.selectPage(pageReqVO); } + @Override + @Transactional + @XxlJob("getErpProductiveVersionTask") + public void callErpRfcInterface() { + try { + OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.生产版本; + String funcnr = funcnrEnum.getFuncnr(); + + Map req = new HashMap<>(); + JSONArray dataArrayALL = new JSONArray(); + List redisCache = erpConfig.getRedisCache(OftenEnum.FuncnrEnum.工厂信息.getFuncnr()); + if (CollUtil.isEmpty(redisCache)) { + return; + } + // 1. 调用ERP接口获取数据 + for (String number : redisCache) { + req.put("WERKS", number); + // 1. 调用ERP接口获取数据 + JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + if (dataArray == null || dataArray.isEmpty()) { + continue; + } + dataArrayALL.addAll(dataArray); + } + + // 2. 处理公司数据,区分新增和更新 + ProcessingResult result = processData(dataArrayALL,funcnrEnum); + + // 3. 批量保存数据 + saveData(result); + + } catch (Exception e) { + log.error("调用ERP RFC接口失败: {}", e); + throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e); + } + } + + /** + * 处理数据,区分新增和更新 + */ + private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { + String key = "erp" + funcnr.getFuncnr(); + Map> numbers = erpConfig.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("VERID").trim(); + ErpProductiveVersionDO DO = new ErpProductiveVersionDO(); +// DO.setFactoryNumber(dataJson.getString("MATNR")); + DO.setMaterialNumber(dataJson.getString("WERKS")); + DO.setProductiveVersionNumber(number); + DO.setProductiveVersionName(dataJson.getString("TEXT1")); + DO.setBomNumber(dataJson.getString("STLAL")); + DO.setBlineGroup(dataJson.getString("PLNNR")); +// DO.setGroupCount(dataJson.getString("ALNAL")); + if (comnumbers.contains(number)) { + // 更新 + toUpdate.add(DO); + } else { + // 新增 + toInsert.add(DO); + } + } + } + + return new ProcessingResult(toUpdate, toInsert,key,allnumbers); + } + + /** + * 批量保存数据 + */ + private void saveData(ProcessingResult result) { + // 批量新增和更新 + if (!result.toInsert.isEmpty()) { + erpProductiveVersionMapper.insertBatch(result.toInsert); + } + if (!result.toUpdate.isEmpty()) { + erpProductiveVersionMapper.updateBatch(result.toUpdate); + } + erpConfig.updateRedisCache(result.key,result.allnumbers); + } + + /** + * 数据处理结果封装类 + */ + private static class ProcessingResult { + private final List toUpdate; + private final List toInsert; + private final String key; + private final List allnumbers; + + public ProcessingResult(List toUpdate, List toInsert,String key,List allnumbers) { + this.toUpdate = toUpdate; + this.toInsert = toInsert; + this.key = key; + this.allnumbers = allnumbers; + } + } } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpPurchaseOrganizationService.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpPurchaseOrganizationService.java index 311b3e1..336b94e 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpPurchaseOrganizationService.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpPurchaseOrganizationService.java @@ -61,4 +61,5 @@ public interface ErpPurchaseOrganizationService { */ PageResult getErpPurchaseOrganizationPage(ErpPurchaseOrganizationPageReqVO pageReqVO); + void callErpRfcInterface(); } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpPurchaseOrganizationServiceImpl.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpPurchaseOrganizationServiceImpl.java index 6149485..786e81a 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpPurchaseOrganizationServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpPurchaseOrganizationServiceImpl.java @@ -3,19 +3,30 @@ package cn.iocoder.yudao.module.erp.service.erp; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.erp.common.conf.ErpConfig; +import cn.iocoder.yudao.module.erp.common.enums.OftenEnum; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpPurchaseOrganizationPageReqVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpPurchaseOrganizationRespVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpPurchaseOrganizationSaveReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpPurchaseOrganizationDO; +import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpPurchaseOrganizationDO; import cn.iocoder.yudao.module.erp.dal.mysql.erp.ErpPurchaseOrganizationMapper; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.xxl.job.core.handler.annotation.XxlJob; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +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 cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.ERP_PURCHASE_ORGANIZATION_NOT_EXISTS; +import static dm.jdbc.util.DriverUtil.log; /** * ERP采购组织 Service 实现类 @@ -29,6 +40,9 @@ public class ErpPurchaseOrganizationServiceImpl implements ErpPurchaseOrganizati @Resource private ErpPurchaseOrganizationMapper erpPurchaseOrganizationMapper; + @Resource + private ErpConfig erpConfig; + @Override public ErpPurchaseOrganizationRespVO createErpPurchaseOrganization(ErpPurchaseOrganizationSaveReqVO createReqVO) { // 插入 @@ -86,4 +100,101 @@ public class ErpPurchaseOrganizationServiceImpl implements ErpPurchaseOrganizati return erpPurchaseOrganizationMapper.selectPage(pageReqVO); } + @Override + @Transactional + @XxlJob("getErpPurchaseOrganizationTask") + public void callErpRfcInterface() { + try { + OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.采购组织; + String funcnr = funcnrEnum.getFuncnr(); + Map req = new HashMap<>(); + JSONArray dataArrayALL = new JSONArray(); + List redisCache = erpConfig.getRedisCache(OftenEnum.FuncnrEnum.工厂信息.getFuncnr()); + if (CollUtil.isEmpty(redisCache)) { + return; + } + // 1. 调用ERP接口获取数据 + for (String number : redisCache) { + req.put("WERKS", number); + // 1. 调用ERP接口获取数据 + JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + if (dataArray == null || dataArray.isEmpty()) { + continue; + } + dataArrayALL.addAll(dataArray); + } + + // 2. 处理公司数据,区分新增和更新 + ProcessingResult result = processData(dataArrayALL,funcnrEnum); + + // 3. 批量保存数据 + saveData(result); + + } catch (Exception e) { + log.error("调用ERP RFC接口失败: {}", e); + throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e); + } + } + + /** + * 处理数据,区分新增和更新 + */ + private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { + String key = "erp" + funcnr.getFuncnr(); + Map> numbers = erpConfig.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("EKORG").trim(); + ErpPurchaseOrganizationDO DO = new ErpPurchaseOrganizationDO(); + DO.setName(dataJson.getString("EKOTX")); + DO.setNumber(number); + if (comnumbers.contains(number)) { + // 更新 + toUpdate.add(DO); + } else { + // 新增 + toInsert.add(DO); + } + } + } + + return new ProcessingResult(toUpdate, toInsert,key,allnumbers); + } + + /** + * 批量保存数据 + */ + private void saveData(ProcessingResult result) { + // 批量新增和更新 + if (!result.toInsert.isEmpty()) { + erpPurchaseOrganizationMapper.insertBatch(result.toInsert); + } + if (!result.toUpdate.isEmpty()) { + erpPurchaseOrganizationMapper.updateBatch(result.toUpdate); + } + erpConfig.updateRedisCache(result.key,result.allnumbers); + } + + /** + * 数据处理结果封装类 + */ + private static class ProcessingResult { + private final List toUpdate; + private final List toInsert; + private final String key; + private final List allnumbers; + + public ProcessingResult(List toUpdate, List toInsert,String key,List allnumbers) { + this.toUpdate = toUpdate; + this.toInsert = toInsert; + this.key = key; + this.allnumbers = allnumbers; + } + } } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpSalesOrganizationService.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpSalesOrganizationService.java index 9f429e8..8371ef1 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpSalesOrganizationService.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpSalesOrganizationService.java @@ -61,4 +61,5 @@ public interface ErpSalesOrganizationService { */ PageResult getErpSalesOrganizationPage(ErpSalesOrganizationPageReqVO pageReqVO); + void callErpRfcInterface(); } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpSalesOrganizationServiceImpl.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpSalesOrganizationServiceImpl.java index c52bed3..333b8eb 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpSalesOrganizationServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpSalesOrganizationServiceImpl.java @@ -3,19 +3,30 @@ package cn.iocoder.yudao.module.erp.service.erp; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.erp.common.conf.ErpConfig; +import cn.iocoder.yudao.module.erp.common.enums.OftenEnum; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpSalesOrganizationPageReqVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpSalesOrganizationRespVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpSalesOrganizationSaveReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpSalesOrganizationDO; +import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpSalesOrganizationDO; import cn.iocoder.yudao.module.erp.dal.mysql.erp.ErpSalesOrganizationMapper; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.xxl.job.core.handler.annotation.XxlJob; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +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 cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.ERP_SALES_ORGANIZATION_NOT_EXISTS; +import static dm.jdbc.util.DriverUtil.log; /** * ERP销售组织 Service 实现类 @@ -29,6 +40,9 @@ public class ErpSalesOrganizationServiceImpl implements ErpSalesOrganizationServ @Resource private ErpSalesOrganizationMapper erpSalesOrganizationMapper; + @Resource + private ErpConfig erpConfig; + @Override public ErpSalesOrganizationRespVO createErpSalesOrganization(ErpSalesOrganizationSaveReqVO createReqVO) { // 插入 @@ -86,4 +100,109 @@ public class ErpSalesOrganizationServiceImpl implements ErpSalesOrganizationServ return erpSalesOrganizationMapper.selectPage(pageReqVO); } + @Override + @Transactional + @XxlJob("getErpSalesOrganizationTask") + public void callErpRfcInterface() { + try { + OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.销售组织; + String funcnr = funcnrEnum.getFuncnr(); + Map req = new HashMap<>(); + JSONArray dataArrayALL = new JSONArray(); + List redisCache = erpConfig.getRedisCache(OftenEnum.FuncnrEnum.公司代码.getFuncnr()); + if (CollUtil.isEmpty(redisCache)) { + return; + } + // 1. 调用ERP接口获取数据 + for (String number : redisCache) { + req.put("BUKRS", number); + // 1. 调用ERP接口获取数据 + JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + if (dataArray == null || dataArray.isEmpty()) { + continue; + } + // 往每个子项中添加BUKRS字段 + for (int j = 0; j < dataArray.size(); j++) { + JSONObject item = dataArray.getJSONObject(j); + if (item != null) { + item.put("BUKRS", number); + } + } + dataArrayALL.addAll(dataArray); + } + + // 2. 处理公司数据,区分新增和更新 + ProcessingResult result = processData(dataArrayALL,funcnrEnum); + + // 3. 批量保存数据 + saveData(result); + + } catch (Exception e) { + log.error("调用ERP RFC接口失败: {}", e); + throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e); + } + } + + /** + * 处理数据,区分新增和更新 + */ + private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { + String key = "erp" + funcnr.getFuncnr(); + Map> numbers = erpConfig.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("VKORG").trim(); + ErpSalesOrganizationDO DO = new ErpSalesOrganizationDO(); + DO.setName(dataJson.getString("VTEXT")); + DO.setNumber(number); + DO.setCompanyNumber(dataJson.getString("BUKRS")); + if (comnumbers.contains(number)) { + // 更新 + toUpdate.add(DO); + } else { + // 新增 + toInsert.add(DO); + } + } + } + + return new ProcessingResult(toUpdate, toInsert,key,allnumbers); + } + + /** + * 批量保存数据 + */ + private void saveData(ProcessingResult result) { + // 批量新增和更新 + if (!result.toInsert.isEmpty()) { + erpSalesOrganizationMapper.insertBatch(result.toInsert); + } + if (!result.toUpdate.isEmpty()) { + erpSalesOrganizationMapper.updateBatch(result.toUpdate); + } + erpConfig.updateRedisCache(result.key,result.allnumbers); + } + + /** + * 数据处理结果封装类 + */ + private static class ProcessingResult { + private final List toUpdate; + private final List toInsert; + private final String key; + private final List allnumbers; + + public ProcessingResult(List toUpdate, List toInsert,String key,List allnumbers) { + this.toUpdate = toUpdate; + this.toInsert = toInsert; + this.key = key; + this.allnumbers = allnumbers; + } + } } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpWarehouseService.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpWarehouseService.java index a29b367..3c96ea3 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpWarehouseService.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpWarehouseService.java @@ -61,4 +61,5 @@ public interface ErpWarehouseService { */ PageResult getErpWarehousePage(ErpWarehousePageReqVO pageReqVO); + void callErpRfcInterface(); } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpWarehouseServiceImpl.java b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpWarehouseServiceImpl.java index 60f24bb..8653686 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpWarehouseServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-server/src/main/java/cn/iocoder/yudao/module/erp/service/erp/ErpWarehouseServiceImpl.java @@ -3,19 +3,30 @@ package cn.iocoder.yudao.module.erp.service.erp; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.erp.common.conf.ErpConfig; +import cn.iocoder.yudao.module.erp.common.enums.OftenEnum; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpWarehousePageReqVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpWarehouseRespVO; import cn.iocoder.yudao.module.erp.controller.admin.erp.vo.ErpWarehouseSaveReqVO; import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpWarehouseDO; +import cn.iocoder.yudao.module.erp.dal.dataobject.erp.ErpWarehouseDO; import cn.iocoder.yudao.module.erp.dal.mysql.erp.ErpWarehouseMapper; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.xxl.job.core.handler.annotation.XxlJob; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +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 cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.ERP_WAREHOUSE_NOT_EXISTS; +import static dm.jdbc.util.DriverUtil.log; /** * ERP库位 Service 实现类 @@ -29,6 +40,9 @@ public class ErpWarehouseServiceImpl implements ErpWarehouseService { @Resource private ErpWarehouseMapper erpWarehouseMapper; + @Resource + private ErpConfig erpConfig; + @Override public ErpWarehouseRespVO createErpWarehouse(ErpWarehouseSaveReqVO createReqVO) { // 插入 @@ -86,4 +100,110 @@ public class ErpWarehouseServiceImpl implements ErpWarehouseService { return erpWarehouseMapper.selectPage(pageReqVO); } + @Override + @Transactional + @XxlJob("getErpWarehouseTask") + public void callErpRfcInterface() { + try { + OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.库位信息; + String funcnr = funcnrEnum.getFuncnr(); + Map req = new HashMap<>(); + JSONArray dataArrayALL = new JSONArray(); + List redisCache = erpConfig.getRedisCache(OftenEnum.FuncnrEnum.工厂信息.getFuncnr()); + if (CollUtil.isEmpty(redisCache)) { + return; + } + // 1. 调用ERP接口获取数据 + for (String number : redisCache) { + req.put("WERKS", number); + // 1. 调用ERP接口获取数据 + JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, req); + if (dataArray == null || dataArray.isEmpty()) { + continue; + } + // 往每个子项中添加BUKRS字段 + for (int j = 0; j < dataArray.size(); j++) { + JSONObject item = dataArray.getJSONObject(j); + if (item != null) { + item.put("WERKS", number); + } + } + + dataArrayALL.addAll(dataArray); + } + + // 2. 处理公司数据,区分新增和更新 + ProcessingResult result = processData(dataArrayALL,funcnrEnum); + + // 3. 批量保存数据 + saveData(result); + + } catch (Exception e) { + log.error("调用ERP RFC接口失败: {}", e); + throw new RuntimeException("调用ERP RFC接口失败: " + e.getMessage(), e); + } + } + + /** + * 处理数据,区分新增和更新 + */ + private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnr) { + String key = "erp" + funcnr.getFuncnr(); + Map> numbers = erpConfig.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("LGORT").trim(); + ErpWarehouseDO DO = new ErpWarehouseDO(); + DO.setName(dataJson.getString("LGOBE")); + DO.setNumber(number); + DO.setFactoryNumber(dataJson.getString("WERKS")); + if (comnumbers.contains(number)) { + // 更新 + toUpdate.add(DO); + } else { + // 新增 + toInsert.add(DO); + } + } + } + + return new ProcessingResult(toUpdate, toInsert,key,allnumbers); + } + + /** + * 批量保存数据 + */ + private void saveData(ProcessingResult result) { + // 批量新增和更新 + if (!result.toInsert.isEmpty()) { + erpWarehouseMapper.insertBatch(result.toInsert); + } + if (!result.toUpdate.isEmpty()) { + erpWarehouseMapper.updateBatch(result.toUpdate); + } + erpConfig.updateRedisCache(result.key,result.allnumbers); + } + + /** + * 数据处理结果封装类 + */ + private static class ProcessingResult { + private final List toUpdate; + private final List toInsert; + private final String key; + private final List allnumbers; + + public ProcessingResult(List toUpdate, List toInsert,String key,List allnumbers) { + this.toUpdate = toUpdate; + this.toInsert = toInsert; + this.key = key; + this.allnumbers = allnumbers; + } + } } \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpAssetMapper.xml b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpAssetMapper.xml index 983a178..e7798e0 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpAssetMapper.xml +++ b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpAssetMapper.xml @@ -8,5 +8,23 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> - + + UPDATE sply_erp_ast + + NAME = CASE + + WHEN CPN_NUM = #{item.companyNumber} AND MAIN_AST_NUM = #{item.mainAssetNumber} THEN #{item.name} + + END, + CPN_ID = CASE + + WHEN CPN_NUM = #{item.companyNumber} AND MAIN_AST_NUM = #{item.mainAssetNumber} THEN #{item.companyId} + + END + + WHERE (CPN_NUM, MAIN_AST_NUM) IN + + #{item.companyNumber}, #{item.mainAssetNumber} + + \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpBomMapper.xml b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpBomMapper.xml index 0143f61..7ebe538 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpBomMapper.xml +++ b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpBomMapper.xml @@ -9,4 +9,14 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE sply_erp_fact + + NAME = #{item.name}, + CPN_ID = #{item.companyId}, + + WHERE NUM = #{item.number} + + \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpCompanyMapper.xml b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpCompanyMapper.xml index fa69a7b..4e447e6 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpCompanyMapper.xml +++ b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpCompanyMapper.xml @@ -9,4 +9,14 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE sply_erp_fact + + NAME = #{item.name}, + CPN_ID = #{item.companyId}, + + WHERE NUM = #{item.number} + + \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpContractMapper.xml b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpContractMapper.xml index 2b078ec..f1f51ed 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpContractMapper.xml +++ b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpContractMapper.xml @@ -9,4 +9,14 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE sply_erp_fact + + NAME = #{item.name}, + CPN_ID = #{item.companyId}, + + WHERE NUM = #{item.number} + + \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpCostcenterMapper.xml b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpCostcenterMapper.xml index 809b486..54a7449 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpCostcenterMapper.xml +++ b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpCostcenterMapper.xml @@ -9,4 +9,14 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE sply_erp_fact + + NAME = #{item.name}, + CPN_ID = #{item.companyId}, + + WHERE NUM = #{item.number} + + \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpCustomerMapper.xml b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpCustomerMapper.xml index 612e402..65522cf 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpCustomerMapper.xml +++ b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpCustomerMapper.xml @@ -9,4 +9,14 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE sply_erp_fact + + NAME = #{item.name}, + CPN_ID = #{item.companyId}, + + WHERE NUM = #{item.number} + + \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpFactoryMapper.xml b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpFactoryMapper.xml index 31ccbe6..294a9c7 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpFactoryMapper.xml +++ b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpFactoryMapper.xml @@ -9,4 +9,14 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE sply_erp_fact + + NAME = #{item.name}, + CPN_ID = #{item.companyId}, + + WHERE NUM = #{item.number} + + \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpInternalOrderMapper.xml b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpInternalOrderMapper.xml index 2445fba..ef60853 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpInternalOrderMapper.xml +++ b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpInternalOrderMapper.xml @@ -9,4 +9,14 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE sply_erp_fact + + NAME = #{item.name}, + CPN_ID = #{item.companyId}, + + WHERE NUM = #{item.number} + + \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpMaterialMapper.xml b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpMaterialMapper.xml index 09aa5e2..6ce660c 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpMaterialMapper.xml +++ b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpMaterialMapper.xml @@ -9,4 +9,14 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE sply_erp_fact + + NAME = #{item.name}, + CPN_ID = #{item.companyId}, + + WHERE NUM = #{item.number} + + \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpProcessDetailMapper.xml b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpProcessDetailMapper.xml index 5fa8a22..51befb7 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpProcessDetailMapper.xml +++ b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpProcessDetailMapper.xml @@ -9,4 +9,14 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE sply_erp_fact + + NAME = #{item.name}, + CPN_ID = #{item.companyId}, + + WHERE NUM = #{item.number} + + \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpProcessMapper.xml b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpProcessMapper.xml index ac98f4b..0e5b7fc 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpProcessMapper.xml +++ b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpProcessMapper.xml @@ -9,4 +9,14 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE sply_erp_fact + + NAME = #{item.name}, + CPN_ID = #{item.companyId}, + + WHERE NUM = #{item.number} + + \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpProductiveOrderMapper.xml b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpProductiveOrderMapper.xml index 93ec181..4570fd8 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpProductiveOrderMapper.xml +++ b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpProductiveOrderMapper.xml @@ -9,4 +9,14 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE sply_erp_fact + + NAME = #{item.name}, + CPN_ID = #{item.companyId}, + + WHERE NUM = #{item.number} + + \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpProductiveVersionMapper.xml b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpProductiveVersionMapper.xml index 6e4eef9..a978df2 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpProductiveVersionMapper.xml +++ b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpProductiveVersionMapper.xml @@ -9,4 +9,14 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE sply_erp_fact + + NAME = #{item.name}, + CPN_ID = #{item.companyId}, + + WHERE NUM = #{item.number} + + \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpPurchaseOrganizationMapper.xml b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpPurchaseOrganizationMapper.xml index 5d62df9..195c2c6 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpPurchaseOrganizationMapper.xml +++ b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpPurchaseOrganizationMapper.xml @@ -9,4 +9,14 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE sply_erp_fact + + NAME = #{item.name}, + CPN_ID = #{item.companyId}, + + WHERE NUM = #{item.number} + + \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpSalesOrganizationMapper.xml b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpSalesOrganizationMapper.xml index 89027f8..3ed699f 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpSalesOrganizationMapper.xml +++ b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpSalesOrganizationMapper.xml @@ -9,4 +9,14 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE sply_erp_fact + + NAME = #{item.name}, + CPN_ID = #{item.companyId}, + + WHERE NUM = #{item.number} + + \ No newline at end of file diff --git a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpWarehouseMapper.xml b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpWarehouseMapper.xml index dde5ebd..4fb6b6c 100644 --- a/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpWarehouseMapper.xml +++ b/yudao-module-erp/yudao-module-erp-server/src/main/resources/mapper/ErpWarehouseMapper.xml @@ -9,4 +9,14 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> + + + UPDATE sply_erp_fact + + NAME = #{item.name}, + CPN_ID = #{item.companyId}, + + WHERE NUM = #{item.number} + + \ No newline at end of file