From b8d866035605a72e131938116952b2d307352a3e Mon Sep 17 00:00:00 2001 From: liss <1780094091@qq.com> Date: Wed, 24 Sep 2025 15:27:45 +0800 Subject: [PATCH 1/3] =?UTF-8?q?pom=EF=BC=8C=E5=B7=A5=E8=89=BA=E8=B7=AF?= =?UTF-8?q?=E7=BA=BF=EF=BC=8C=E5=B0=81=E8=A3=85post=E6=8F=90=E4=BA=A4asp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plat/module/erp/api/ErpExternalApi.java | 4 +- .../module/erp/api/ErpExternalApiImpl.java | 4 +- .../module/erp/common/conf/ErpConfig.java | 137 ++++++++++++---- .../admin/erp/ErpAssetController.java | 2 +- .../admin/erp/vo/ErpProcessPageReqVO.java | 2 +- .../admin/erp/vo/ErpProcessRespVO.java | 2 +- .../admin/erp/vo/ErpProcessSaveReqVO.java | 2 +- .../erp/dal/dataobject/erp/ErpProcessDO.java | 4 +- .../dataobject/erp/ErpProcessDetailDO.java | 2 +- .../erp/service/erp/ErpBomServiceImpl.java | 4 +- .../erp/ErpProcessDetailServiceImpl.java | 99 ++++++++++++ .../service/erp/ErpProcessServiceImpl.java | 147 +++++++++++++----- 12 files changed, 328 insertions(+), 81 deletions(-) diff --git a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpExternalApi.java b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpExternalApi.java index f55cdfb..875db6a 100644 --- a/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpExternalApi.java +++ b/zt-module-erp/zt-module-erp-api/src/main/java/com/zt/plat/module/erp/api/ErpExternalApi.java @@ -11,6 +11,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; +import java.util.HashMap; + @FeignClient(name = ApiConstants.NAME) @Tag(name = "RPC 服务 - ERP") public interface ErpExternalApi { @@ -19,6 +21,6 @@ public interface ErpExternalApi { @PostMapping(PREFIX + "/submit") @Operation(summary = "erp数据提交") - ResponseEntity submitDataToErp(@Valid @RequestBody ErpSubmitReqDTO reqDTO); + HashMap submitDataToErp(@Valid @RequestBody ErpSubmitReqDTO reqDTO); } diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpExternalApiImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpExternalApiImpl.java index 6861777..27b4237 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpExternalApiImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/api/ErpExternalApiImpl.java @@ -7,6 +7,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RestController; +import java.util.HashMap; + /** * ERP Api 实现类 * @@ -21,7 +23,7 @@ public class ErpExternalApiImpl implements ErpExternalApi { private ErpConfig erpConfig; @Override - public ResponseEntity submitDataToErp(ErpSubmitReqDTO reqDTO) { + public HashMap submitDataToErp(ErpSubmitReqDTO reqDTO) { return erpConfig.pushDataToErp(reqDTO); } } diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/ErpConfig.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/ErpConfig.java index 487f5ed..096e015 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/ErpConfig.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/ErpConfig.java @@ -82,45 +82,114 @@ public class ErpConfig { } } + // GET请求处理 +// public HashMap getResult(SAPInterfaceResult result) { +// HashMap resMap = new HashMap<>(); +// String E_RSLT = null; +// JSONObject jsonObject = result.getData(); +// //判断 result里的succeed是否为true +// boolean succeed = result.isSucceed(); +// if (succeed && "S".equals(jsonObject.getString("E_FLAG"))) { +// JSONObject data = result.getData(); +// String flag = "S"; +// String E_RESP = data.getString("E_DATA"); +// +// String E_MSG = result.getMsg(); +//// log.info("请求SAP成功 E_RESP:{}", E_RESP); +//// log.info("请求SAP成功 E_MSG:{}", E_MSG); +// resMap.put("E_RESP", E_RESP); +// resMap.put("resStr", E_MSG); +// resMap.put("flag", flag); +// return resMap; +// } else { +// String E_MSG = result.getMsg(); +// String flag = "E"; +// resMap.put("resStr", E_MSG); +// resMap.put("flag", flag); +//// log.info("请求SAP失败 E_MSG:{}", E_MSG); +// return resMap; +// } +// } + /** * 调用ERP接口更新erp数据 */ -public ResponseEntity pushDataToErp(ErpSubmitReqDTO reqDTO) { - try { - // 构建完整URL - String url = "http://" + erpAddress + "/api/rfc/post"; - // 构建请求参数 - JSONObject requestBody = new JSONObject(); - requestBody.put("uuid", UUID.randomUUID().toString()); - requestBody.put("sapsys", sapsys); - requestBody.put("srcsys", "DSC"); - requestBody.put("funcnr", reqDTO.getFuncnr()); - requestBody.put("bskey", reqDTO.getBskey()); - requestBody.put("usrid", reqDTO.getUsrid()); - requestBody.put("usrnm", reqDTO.getUsrnm()); - if (reqDTO.getSign() != null){ - requestBody.put("sign", reqDTO.getSign()); + public HashMap pushDataToErp(ErpSubmitReqDTO reqDTO) { + try { + // 构建完整URL + String url = "http://" + erpAddress + "/api/rfc/post"; + // 构建请求参数 + JSONObject requestBody = new JSONObject(); + requestBody.put("uuid", UUID.randomUUID().toString()); + requestBody.put("sapsys", sapsys); + requestBody.put("srcsys", "DSC"); + requestBody.put("funcnr", reqDTO.getFuncnr()); + requestBody.put("bskey", reqDTO.getBskey()); + requestBody.put("usrid", reqDTO.getUsrid()); + requestBody.put("usrnm", reqDTO.getUsrnm()); + if (reqDTO.getSign() != null) { + requestBody.put("sign", reqDTO.getSign()); + } + if (reqDTO.getReq() != null) { + requestBody.put("req", reqDTO.getReq()); + } + // 设置请求头 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + // 创建HTTP请求实体 + HttpEntity requestEntity = new HttpEntity<>(requestBody.toJSONString(), headers); + + // 发送POST请求 + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity response = restTemplate.postForEntity(url, requestEntity, String.class); + + return postResult(response); + } catch (Exception e) { + log.error("调用ERP RFC接口失败:" + e.getMessage(), e); + return null; } - if (reqDTO.getReq() != null) { - requestBody.put("req", reqDTO.getReq()); - } - // 设置请求头 - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - - // 创建HTTP请求实体 - HttpEntity requestEntity = new HttpEntity<>(requestBody.toJSONString(), headers); - - // 发送POST请求 - RestTemplate restTemplate = new RestTemplate(); - ResponseEntity response = restTemplate.postForEntity(url, requestEntity, String.class); - - return response; - } catch (Exception e) { - log.error("调用ERP RFC接口失败:"+e.getMessage(), e); - return ResponseEntity.status(500).body("调用ERP接口失败: " + e.getMessage()); } -} + + // POST请求处理 + public HashMap postResult(ResponseEntity result) { + HashMap resMap = new HashMap<>(); + String E_RSLT = null; + + boolean succeed = result.getHeaders().containsKey("succeed"); +// JSONObject data = result.getBody("data"); +// if (data == null) { +// throw new RuntimeException("SAP接口返回值为空," + result.getMsg()); +// } else if (succeed && "S".equals(data.getString("E_FLAG"))) { +// String E_FLAG = data.getString("E_FLAG"); +// String flag = "S"; +// String E_RESP = data.getString("E_RESP"); +// String E_MSG = data.getString("ET_MSG"); +//// log.info("请求SAP成功 E_RESP:{}", E_RESP); +//// log.info("请求SAP成功 E_MSG:{}", E_MSG); +// resMap.put("E_RESP", E_RESP); +// resMap.put("resStr", E_MSG); +// resMap.put("flag", flag); +// return resMap; +// } else if (!succeed && "E".equals(data.getString("E_FLAG"))) { +// String E_FLAG = data.getString("E_FLAG"); +// String flag = "E"; +// String E_RESP = data.getString("E_DATA"); +// String E_MSG = data.getString("ET_MSG"); +// if (StrUtil.isBlank(E_MSG)) { +// E_MSG = result.getMsg(); +// E_MSG = "[{\"MESSAGE\":\"" + result.getMsg() + "\"}]"; +// } +// resMap.put("resStr", E_MSG); +// resMap.put("flag", flag); +//// log.info("请求SAP失败 E_MSG:{}", E_MSG); +// return resMap; +// } else { +// throw new RuntimeException("SAP接口异常," + result); +// } + return resMap; + } + //list public Map> numbers(JSONArray dataArray, String key, String dataKey) { diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpAssetController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpAssetController.java index 098191d..a129747 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpAssetController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpAssetController.java @@ -104,7 +104,7 @@ public class ErpAssetController { @PostMapping("/getErpAssetTask") @Operation(summary = "定时获得erp更新资产卡片") @PreAuthorize("@ss.hasPermission('sply:erp-asset:create')") - public CommonResult getErpCompanyTask() { + public CommonResult getErpAssetTask() { erpAssetService.callErpRfcInterface(); return success(true); } diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessPageReqVO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessPageReqVO.java index a6bdae0..ee384cf 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessPageReqVO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessPageReqVO.java @@ -11,7 +11,7 @@ import java.math.BigDecimal; public class ErpProcessPageReqVO extends PageParam { @Schema(description = "工厂编码") - private BigDecimal factoryNumber; + private String factoryNumber; @Schema(description = "物料编码") private String materialNumber; diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessRespVO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessRespVO.java index e7f9c44..fb285f1 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessRespVO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessRespVO.java @@ -18,7 +18,7 @@ public class ErpProcessRespVO { @Schema(description = "工厂编码", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("工厂编码") - private BigDecimal factoryNumber; + private String factoryNumber; @Schema(description = "物料编码", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("物料编码") diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessSaveReqVO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessSaveReqVO.java index b6ddd3c..b9dbe90 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessSaveReqVO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessSaveReqVO.java @@ -16,7 +16,7 @@ public class ErpProcessSaveReqVO { @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/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDO.java index 18de83f..e55a72a 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDO.java @@ -34,7 +34,7 @@ public class ErpProcessDO { * 工厂编码 */ @TableField("FACT_NUM") - private BigDecimal factoryNumber; + private String factoryNumber; /** * 物料编码 */ @@ -63,7 +63,7 @@ public class ErpProcessDO { /** * 计量单位 */ - @TableField("UOM") + @TableField("UNT") private String uom; /** * 用途 diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDetailDO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDetailDO.java index 306f013..31b09f6 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDetailDO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDetailDO.java @@ -48,7 +48,7 @@ public class ErpProcessDetailDO { /** * 作业的计量单位 */ - @TableField("UOM") + @TableField("UNT") private String uom; /** * 工作中心编号 diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBomServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBomServiceImpl.java index ee0ccce..7c3e518 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBomServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBomServiceImpl.java @@ -312,8 +312,8 @@ public class ErpBomServiceImpl implements ErpBomService { items.add(item); req.put("item", items); reqDTO.setReq(req); - ResponseEntity response = erpExternalApi.submitDataToErp(reqDTO); - if (response.getStatusCode() == HttpStatus.OK) { + HashMap response = erpExternalApi.submitDataToErp(reqDTO); + if (response.get("result").isEmpty()) { log.info("ERP数据提交成功"); } } diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessDetailServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessDetailServiceImpl.java index c1c1e32..472a12a 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessDetailServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessDetailServiceImpl.java @@ -3,16 +3,24 @@ package com.zt.plat.module.erp.service.erp; import cn.hutool.core.collection.CollUtil; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; +import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; +import com.zt.plat.module.erp.common.conf.ErpConfig; +import com.zt.plat.module.erp.common.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProcessDetailPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProcessDetailRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProcessDetailSaveReqVO; +import com.zt.plat.module.erp.dal.dataobject.erp.ErpBomDetailDO; import com.zt.plat.module.erp.dal.dataobject.erp.ErpProcessDetailDO; import com.zt.plat.module.erp.dal.mysql.erp.ErpProcessDetailMapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_PROCESS_DETAIL_NOT_EXISTS; @@ -29,6 +37,9 @@ public class ErpProcessDetailServiceImpl implements ErpProcessDetailService { @Resource private ErpProcessDetailMapper erpProcessDetailMapper; + @Resource + private ErpConfig erpConfig; + @Override public ErpProcessDetailRespVO createErpProcessDetail(ErpProcessDetailSaveReqVO createReqVO) { // 插入 @@ -86,4 +97,92 @@ public class ErpProcessDetailServiceImpl implements ErpProcessDetailService { return erpProcessDetailMapper.selectPage(pageReqVO); } + public void saveOrUpdateErpProcessDetail(List updateReqVOS) { + String key = "erpMap" + OftenEnum.FuncnrEnum.工艺路线.getFuncnr() + "Detail"; + // 1. 处理公司数据,区分新增和更新 + ProcessingResult result = processData(updateReqVOS, key); + + // 2. 批量保存数据 + saveData(result); + } + + private ProcessingResult processData(List updateReqVOS, String key) { + if (erpConfig.getRedisCacheMap(key).isEmpty()) { + initializeMap(key); + } + List toUpdate = new ArrayList<>(); + List toInsert = new ArrayList<>(); + + List dataArrayNumbers = new ArrayList<>(); + Map existingNumbers = erpConfig.getRedisCacheMap(key); + for (ErpProcessDetailDO updateReqVO : updateReqVOS) { + String mapKey = updateReqVO.getProcessId() + "-" + updateReqVO.getProcessingNumber().toEngineeringString(); + if (updateReqVO.getId() == null) { + toInsert.add(updateReqVO); + } else { + toUpdate.add(updateReqVO); + } + dataArrayNumbers.add(mapKey); + } + + Map deleteNumbers = new HashMap<>(); + for (Map.Entry entry : existingNumbers.entrySet()) { + if (!dataArrayNumbers.contains(entry.getKey())) { + deleteNumbers.put(entry.getKey(), entry.getValue()); + } + } + + return new ProcessingResult(toUpdate, toInsert, deleteNumbers, key); + } + + private void saveData(ProcessingResult result) { + // 批量新增和更新 + if (!result.toInsert.isEmpty()) { + erpProcessDetailMapper.insertBatch(result.toInsert); + // 批量查询刚插入数据的id,提升效率 + List insertedRecords = erpProcessDetailMapper.selectList( + new LambdaQueryWrapperX() + .in(ErpProcessDetailDO::getProcessId, result.toInsert.stream().map(ErpProcessDetailDO::getProcessId).distinct().collect(Collectors.toList())) + .in(ErpProcessDetailDO::getProcessingNumber, result.toInsert.stream().map(ErpProcessDetailDO::getProcessingNumber).distinct().collect(Collectors.toList())) + ); + Map numberIdMap = insertedRecords.stream() + .collect(Collectors.toMap(asset -> asset.getProcessId() + "-" + asset.getProcessingNumber(), ErpProcessDetailDO::getId)); + erpConfig.addRedisCacheMap(result.key, numberIdMap); + } + if (!result.toUpdate.isEmpty()) { + erpProcessDetailMapper.updateBatch(result.toUpdate); + } + if (!result.deleteNumbers.isEmpty()) { + // 使用流式处理和批处理优化删除逻辑 + List idsToDelete = new ArrayList<>(result.deleteNumbers.values()); + if (!idsToDelete.isEmpty()) { + erpProcessDetailMapper.deleteByIds(idsToDelete); + } + erpConfig.deleteRedisCacheMap(result.key, new ArrayList<>(result.deleteNumbers.keySet())); + } + } + + private static class ProcessingResult { + private final List toUpdate; + private final List toInsert; + private final Map deleteNumbers; + private final String key; + + public ProcessingResult(List toUpdate, List toInsert, Map deleteNumbers, String key) { + this.toUpdate = toUpdate; + this.toInsert = toInsert; + this.deleteNumbers = deleteNumbers; + this.key = key; + } + } + + private void initializeMap(String key) { + List assets = erpProcessDetailMapper.selectList(new LambdaQueryWrapperX()); + Map existingNumbers = new HashMap<>(); + for (ErpProcessDetailDO asset : assets) { + String mapKey = asset.getProcessId() + "-" + asset.getProcessingNumber(); + existingNumbers.put(mapKey, asset.getId()); + } + erpConfig.addRedisCacheMap(key, existingNumbers); + } } \ No newline at end of file diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessServiceImpl.java index e5a73a5..967fdf5 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessServiceImpl.java @@ -3,12 +3,13 @@ package com.zt.plat.module.erp.service.erp; import cn.hutool.core.collection.CollUtil; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; +import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; import com.zt.plat.module.erp.common.conf.ErpConfig; import com.zt.plat.module.erp.common.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProcessPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProcessRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpProcessSaveReqVO; -import com.zt.plat.module.erp.dal.dataobject.erp.ErpProcessDO; +import com.zt.plat.module.erp.dal.dataobject.erp.*; import com.zt.plat.module.erp.dal.dataobject.erp.ErpProcessDO; import com.zt.plat.module.erp.dal.mysql.erp.ErpProcessMapper; import com.alibaba.fastjson.JSONArray; @@ -20,10 +21,12 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; +import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_BOM_NOT_EXISTS; import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_PROCESS_NOT_EXISTS; import static dm.jdbc.util.DriverUtil.log; @@ -42,6 +45,10 @@ public class ErpProcessServiceImpl implements ErpProcessService { @Resource private ErpConfig erpConfig; + @Resource + private ErpProcessDetailServiceImpl processDetailService; + + @Override public ErpProcessRespVO createErpProcess(ErpProcessSaveReqVO createReqVO) { // 插入 @@ -69,12 +76,12 @@ public class ErpProcessServiceImpl implements ErpProcessService { } @Override - public void deleteErpProcessListByIds(List ids) { + public void deleteErpProcessListByIds(List ids) { // 校验存在 validateErpProcessExists(ids); // 删除 erpProcessMapper.deleteByIds(ids); - } + } private void validateErpProcessExists(List ids) { List list = erpProcessMapper.selectByIds(ids); @@ -104,16 +111,32 @@ public class ErpProcessServiceImpl implements ErpProcessService { @XxlJob("getErpProcessTask") public void callErpRfcInterface() { try { - OftenEnum.FuncnrEnum funcnrEnum =OftenEnum.FuncnrEnum.公司代码; + OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.公司代码; String funcnr = funcnrEnum.getFuncnr(); + String key = "erpMap" + funcnr; + if (erpConfig.getRedisCacheMap(key).isEmpty()) { + initializeMap(key); + } + Map req = new HashMap<>(); + JSONArray dataArrayALL = new JSONArray(); + String factKey = "erpMap" + OftenEnum.FuncnrEnum.工厂信息.getFuncnr(); + Map redisCache = erpConfig.getRedisCacheMap(factKey); + if (CollUtil.isEmpty(redisCache)) { + throw exception(ERP_PROCESS_NOT_EXISTS); + } // 1. 调用ERP接口获取数据 - JSONArray dataArray = erpConfig.fetchDataFromERP(funcnr, null); - if (dataArray == null || dataArray.isEmpty()) { - return; + for (String factoryNumber : redisCache.keySet()) { + 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(dataArray,funcnrEnum); + ProcessingResult result = processData(dataArrayALL, funcnrEnum); // 3. 批量保存数据 saveData(result); @@ -127,35 +150,65 @@ public class ErpProcessServiceImpl implements ErpProcessService { /** * 处理数据,区分新增和更新 */ - 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"); + private ProcessingResult processData(JSONArray dataArray, OftenEnum.FuncnrEnum funcnrEnum) { + String key = "erpMap" + funcnrEnum.getFuncnr(); + Map numbers = erpConfig.getRedisCacheMap(key); List toUpdate = new ArrayList<>(); - List toInsert = new ArrayList<>(); + + List erpProcessDetailDOList = new ArrayList<>(); + Map addnumbers = new HashMap<>(); + List dataArrayNumbers = new ArrayList<>(); for (int i = 0; i < dataArray.size(); i++) { JSONObject dataJson = dataArray.getJSONObject(i); if (dataJson != null) { - String number = dataJson.getString("BUKRS").trim(); - if (number != null) { - 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); + ErpProcessDO DO = new ErpProcessDO(); + DO.setFactoryNumber(dataJson.getString("WERKS")); + DO.setMaterialNumber(dataJson.getString("MATNR")); + DO.setMaterialName(dataJson.getString("MAKTX")); + DO.setBlineGroup(dataJson.getString("PLNAL")); + DO.setGroupCount(dataJson.getLong("PLNNR")); + DO.setBlineDescription(dataJson.getString("KTEXT")); + DO.setUom(dataJson.getString("PLNME")); + DO.setUseDescription(dataJson.getString("VERWE")); + DO.setStatus(dataJson.getString("STATU")); + String number = DO.getFactoryNumber() + "-" + DO.getMaterialNumber() + "-" + DO.getBlineGroup(); + dataArrayNumbers.add(number); + if (numbers.get(number) != null) { + // 更新 + toUpdate.add(DO); + } else { + // 新增 + erpProcessMapper.insert(DO); + addnumbers.put(number, DO.getId()); + } + + JSONArray dataJsonItem = dataJson.getJSONArray("ITEM"); + if (dataJsonItem != null && !dataJsonItem.isEmpty()) { + for (int j = 0; j < dataJsonItem.size(); j++) { + JSONObject itemJson = dataJsonItem.getJSONObject(j); + ErpProcessDetailDO detailDO = new ErpProcessDetailDO(); + detailDO.setProcessId(String.valueOf(DO.getId())); + detailDO.setProcessingNumber(itemJson.getBigDecimal("VORNR")); + detailDO.setProcessingName(itemJson.getString("LTXA1")); + detailDO.setUom(itemJson.getString("MEINH")); + detailDO.setWorkCenterNumber(itemJson.getString("ARBPL")); + detailDO.setWorkCenterName(itemJson.getString("KTEXT1")); + erpProcessDetailDOList.add(detailDO); } } } } - return new ProcessingResult(toUpdate, toInsert,key,allnumbers); + // 识别需要删除的数据 + List deleteNumbers = new ArrayList<>(); + for (String number : numbers.keySet()) { + if (!dataArrayNumbers.contains(number)) { + deleteNumbers.add(number); + } + } + + return new ProcessingResult(toUpdate, key, addnumbers, deleteNumbers, erpProcessDetailDOList); } /** @@ -163,13 +216,22 @@ public class ErpProcessServiceImpl implements ErpProcessService { */ 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); + // 保存或更新BOM详情 + if (!result.erpProcessDetailDOList.isEmpty()) { + processDetailService.saveOrUpdateErpProcessDetail(result.erpProcessDetailDOList); + } + + // 更新Redis缓存 + if (!result.addnumbers.isEmpty()) { + erpConfig.addRedisCacheMap(result.key, result.addnumbers); + } + + if (!result.deleteNumbers.isEmpty()) { + erpConfig.deleteRedisCacheMap(result.key, result.deleteNumbers); + } } /** @@ -177,15 +239,28 @@ public class ErpProcessServiceImpl implements ErpProcessService { */ private static class ProcessingResult { private final List toUpdate; - private final List toInsert; private final String key; - private final List allnumbers; + private final Map addnumbers; + private final List deleteNumbers; + private final List erpProcessDetailDOList; - public ProcessingResult(List toUpdate, List toInsert,String key,List allnumbers) { + public ProcessingResult(List toUpdate, String key, Map addnumbers, + List deleteNumbers, List erpProcessDetailDOList) { this.toUpdate = toUpdate; - this.toInsert = toInsert; this.key = key; - this.allnumbers = allnumbers; + this.addnumbers = addnumbers; + this.deleteNumbers = deleteNumbers; + this.erpProcessDetailDOList = erpProcessDetailDOList; } } + + private void initializeMap(String key) { + List bomList = erpProcessMapper.selectList(new LambdaQueryWrapperX()); + Map existingNumbers = new HashMap<>(); + for (ErpProcessDO bom : bomList) { + String mapKey = bom.getFactoryNumber() + "-" + bom.getMaterialNumber() + "-" + bom.getBlineGroup(); + existingNumbers.put(mapKey, bom.getId()); + } + erpConfig.addRedisCacheMap(key, existingNumbers); + } } \ No newline at end of file From 071790f01ad180dcad3ae771c76bcb37d1cf09b0 Mon Sep 17 00:00:00 2001 From: liss <1780094091@qq.com> Date: Wed, 24 Sep 2025 16:05:09 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=B0=81=E8=A3=85post?= =?UTF-8?q?=E6=8F=90=E4=BA=A4asp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/erp/common/conf/ErpConfig.java | 75 ++++++++++--------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/ErpConfig.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/ErpConfig.java index 096e015..81a66c9 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/ErpConfig.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/common/conf/ErpConfig.java @@ -1,5 +1,6 @@ package com.zt.plat.module.erp.common.conf; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -144,50 +145,50 @@ public class ErpConfig { RestTemplate restTemplate = new RestTemplate(); ResponseEntity response = restTemplate.postForEntity(url, requestEntity, String.class); - return postResult(response); + // 解析响应结果 + String responseBody = response.getBody(); + if (responseBody.isEmpty()) { + throw new RuntimeException("ERP接口返回结果为空"); + } + + JSONObject jsonResponse = JSON.parseObject(responseBody); + if (jsonResponse == null) { + throw new RuntimeException("ERP接口响应无法解析为JSON"); + } + return postResult(jsonResponse); } catch (Exception e) { - log.error("调用ERP RFC接口失败:" + e.getMessage(), e); - return null; + throw new RuntimeException("调用ERP RFC接口失败: " + e); } } // POST请求处理 - public HashMap postResult(ResponseEntity result) { + public HashMap postResult(JSONObject result) { HashMap resMap = new HashMap<>(); - String E_RSLT = null; - boolean succeed = result.getHeaders().containsKey("succeed"); -// JSONObject data = result.getBody("data"); -// if (data == null) { -// throw new RuntimeException("SAP接口返回值为空," + result.getMsg()); -// } else if (succeed && "S".equals(data.getString("E_FLAG"))) { -// String E_FLAG = data.getString("E_FLAG"); -// String flag = "S"; -// String E_RESP = data.getString("E_RESP"); -// String E_MSG = data.getString("ET_MSG"); -//// log.info("请求SAP成功 E_RESP:{}", E_RESP); -//// log.info("请求SAP成功 E_MSG:{}", E_MSG); -// resMap.put("E_RESP", E_RESP); -// resMap.put("resStr", E_MSG); -// resMap.put("flag", flag); -// return resMap; -// } else if (!succeed && "E".equals(data.getString("E_FLAG"))) { -// String E_FLAG = data.getString("E_FLAG"); -// String flag = "E"; -// String E_RESP = data.getString("E_DATA"); -// String E_MSG = data.getString("ET_MSG"); -// if (StrUtil.isBlank(E_MSG)) { -// E_MSG = result.getMsg(); -// E_MSG = "[{\"MESSAGE\":\"" + result.getMsg() + "\"}]"; -// } -// resMap.put("resStr", E_MSG); -// resMap.put("flag", flag); -//// log.info("请求SAP失败 E_MSG:{}", E_MSG); -// return resMap; -// } else { -// throw new RuntimeException("SAP接口异常," + result); -// } - return resMap; + boolean succeed = result.getBoolean("succeed"); + JSONObject data = result.getJSONObject("data"); + if (data == null) { + throw new RuntimeException("SAP接口返回值为空," + result.getString("msg")); + } else if (succeed && "S".equals(data.getString("E_FLAG"))) { + String flag = "S"; + String E_RESP = data.getString("E_RESP"); + String E_MSG = data.getString("ET_MSG"); + resMap.put("E_RESP", E_RESP); + resMap.put("resStr", E_MSG); + resMap.put("flag", flag); + return resMap; + } else if (!succeed && "E".equals(data.getString("E_FLAG"))) { + String flag = "E"; + String E_MSG = data.getString("ET_MSG"); + if (StrUtil.isBlank(E_MSG)) { + E_MSG = result.getString("msg"); + } + resMap.put("resStr", E_MSG); + resMap.put("flag", flag); + return resMap; + } else { + throw new RuntimeException("SAP接口异常," + result); + } } From 1266bb23c584972dc7fc03b43c858a7ee84515a2 Mon Sep 17 00:00:00 2001 From: liss <1780094091@qq.com> Date: Wed, 24 Sep 2025 17:16:34 +0800 Subject: [PATCH 3/3] =?UTF-8?q?Pom=EF=BC=8C=E5=B7=A5=E8=89=BA=E8=B7=AF?= =?UTF-8?q?=E7=BA=BF=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/erp/ErpFactoryController.java | 16 ++++++++-------- .../admin/erp/vo/ErpProcessDetailPageReqVO.java | 2 +- .../admin/erp/vo/ErpProcessDetailRespVO.java | 2 +- .../admin/erp/vo/ErpProcessDetailSaveReqVO.java | 2 +- .../dal/dataobject/erp/ErpProcessDetailDO.java | 2 +- .../erp/service/erp/ErpBomDetailServiceImpl.java | 3 +++ .../service/erp/ErpProcessDetailServiceImpl.java | 10 +++++++--- .../erp/service/erp/ErpProcessServiceImpl.java | 8 ++++++-- 8 files changed, 28 insertions(+), 17 deletions(-) diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpFactoryController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpFactoryController.java index 529fd95..cd0d51f 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpFactoryController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpFactoryController.java @@ -40,14 +40,14 @@ public class ErpFactoryController { @PostMapping("/create") @Operation(summary = "创建ERP工厂") - @PreAuthorize("@ss.hasPermission('sply:erp-factory:create')") + @PreAuthorize("@ss.hasPermission('base:erp-factory:create')") public CommonResult createErpFactory(@Valid @RequestBody ErpFactorySaveReqVO createReqVO) { return success(erpFactoryService.createErpFactory(createReqVO)); } @PutMapping("/update") @Operation(summary = "更新ERP工厂") - @PreAuthorize("@ss.hasPermission('sply:erp-factory:update')") + @PreAuthorize("@ss.hasPermission('base:erp-factory:update')") public CommonResult updateErpFactory(@Valid @RequestBody ErpFactorySaveReqVO updateReqVO) { erpFactoryService.updateErpFactory(updateReqVO); return success(true); @@ -56,7 +56,7 @@ public class ErpFactoryController { @DeleteMapping("/delete") @Operation(summary = "删除ERP工厂") @Parameter(name = "id", description = "编号", required = true) - @PreAuthorize("@ss.hasPermission('sply:erp-factory:delete')") + @PreAuthorize("@ss.hasPermission('base:erp-factory:delete')") public CommonResult deleteErpFactory(@RequestParam("id") Long id) { erpFactoryService.deleteErpFactory(id); return success(true); @@ -65,7 +65,7 @@ public class ErpFactoryController { @DeleteMapping("/delete-list") @Parameter(name = "ids", description = "编号", required = true) @Operation(summary = "批量删除ERP工厂") - @PreAuthorize("@ss.hasPermission('sply:erp-factory:delete')") + @PreAuthorize("@ss.hasPermission('base:erp-factory:delete')") public CommonResult deleteErpFactoryList(@RequestBody BatchDeleteReqVO req) { erpFactoryService.deleteErpFactoryListByIds(req.getIds()); return success(true); @@ -74,7 +74,7 @@ public class ErpFactoryController { @GetMapping("/get") @Operation(summary = "获得ERP工厂") @Parameter(name = "id", description = "编号", required = true, example = "1024") - @PreAuthorize("@ss.hasPermission('sply:erp-factory:query')") + @PreAuthorize("@ss.hasPermission('base:erp-factory:query')") public CommonResult getErpFactory(@RequestParam("id") Long id) { ErpFactoryDO erpFactory = erpFactoryService.getErpFactory(id); return success(BeanUtils.toBean(erpFactory, ErpFactoryRespVO.class)); @@ -82,7 +82,7 @@ public class ErpFactoryController { @GetMapping("/page") @Operation(summary = "获得ERP工厂分页") - @PreAuthorize("@ss.hasPermission('sply:erp-factory:query')") + @PreAuthorize("@ss.hasPermission('base:erp-factory:query')") public CommonResult> getErpFactoryPage(@Valid ErpFactoryPageReqVO pageReqVO) { PageResult pageResult = erpFactoryService.getErpFactoryPage(pageReqVO); return success(BeanUtils.toBean(pageResult, ErpFactoryRespVO.class)); @@ -90,7 +90,7 @@ public class ErpFactoryController { @GetMapping("/export-excel") @Operation(summary = "导出ERP工厂 Excel") - @PreAuthorize("@ss.hasPermission('sply:erp-factory:export')") + @PreAuthorize("@ss.hasPermission('base:erp-factory:export')") @ApiAccessLog(operateType = EXPORT) public void exportErpFactoryExcel(@Valid ErpFactoryPageReqVO pageReqVO, HttpServletResponse response) throws IOException { @@ -103,7 +103,7 @@ public class ErpFactoryController { @PostMapping("/getErpFactoryTask") @Operation(summary = "定时获得erp工厂数据") - @PreAuthorize("@ss.hasPermission('sply:erp-factory:create')") + @PreAuthorize("@ss.hasPermission('base:erp-factory:create')") public CommonResult getErpFactoryTask() { erpFactoryService.callErpRfcInterface(); return success(true); diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessDetailPageReqVO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessDetailPageReqVO.java index 9cd7eba..3925ead 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessDetailPageReqVO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessDetailPageReqVO.java @@ -14,7 +14,7 @@ public class ErpProcessDetailPageReqVO extends PageParam { private String processId; @Schema(description = "工序编码") - private BigDecimal processingNumber; + private String processingNumber; @Schema(description = "工序描述", example = "李四") private String processingName; diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessDetailRespVO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessDetailRespVO.java index ad2b968..29c9b3a 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessDetailRespVO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessDetailRespVO.java @@ -22,7 +22,7 @@ public class ErpProcessDetailRespVO { @Schema(description = "工序编码", requiredMode = Schema.RequiredMode.REQUIRED) @ExcelProperty("工序编码") - private BigDecimal processingNumber; + private String processingNumber; @Schema(description = "工序描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") @ExcelProperty("工序描述") diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessDetailSaveReqVO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessDetailSaveReqVO.java index 97071e4..1986e59 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessDetailSaveReqVO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/vo/ErpProcessDetailSaveReqVO.java @@ -20,7 +20,7 @@ public class ErpProcessDetailSaveReqVO { @Schema(description = "工序编码", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "工序编码不能为空") - private BigDecimal processingNumber; + private String processingNumber; @Schema(description = "工序描述", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") @NotEmpty(message = "工序描述不能为空") diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDetailDO.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDetailDO.java index 31b09f6..c231121 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDetailDO.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/dal/dataobject/erp/ErpProcessDetailDO.java @@ -39,7 +39,7 @@ public class ErpProcessDetailDO { * 工序编码 */ @TableField("PROC_NUM") - private BigDecimal processingNumber; + private String processingNumber; /** * 工序描述 */ diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBomDetailServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBomDetailServiceImpl.java index c5ef5f3..7fa332d 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBomDetailServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpBomDetailServiceImpl.java @@ -122,6 +122,9 @@ public class ErpBomDetailServiceImpl implements ErpBomDetailService { Map existingNumbers = erpConfig.getRedisCacheMap(key); for (ErpBomDetailDO updateReqVO : updateReqVOS) { String mapKey = updateReqVO.getBomId() + "-" + updateReqVO.getErpBomId(); + if (existingNumbers.containsKey(mapKey)) { + updateReqVO.setId(existingNumbers.get(mapKey)); + } if (updateReqVO.getId() == null) { toInsert.add(updateReqVO); } else { diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessDetailServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessDetailServiceImpl.java index 472a12a..c56a898 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessDetailServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessDetailServiceImpl.java @@ -116,7 +116,10 @@ public class ErpProcessDetailServiceImpl implements ErpProcessDetailService { List dataArrayNumbers = new ArrayList<>(); Map existingNumbers = erpConfig.getRedisCacheMap(key); for (ErpProcessDetailDO updateReqVO : updateReqVOS) { - String mapKey = updateReqVO.getProcessId() + "-" + updateReqVO.getProcessingNumber().toEngineeringString(); + String mapKey = updateReqVO.getProcessId() + "-" + updateReqVO.getProcessingNumber()+"-"+updateReqVO.getProcessingName(); + if (existingNumbers.containsKey(mapKey)) { + updateReqVO.setId(existingNumbers.get(mapKey)); + } if (updateReqVO.getId() == null) { toInsert.add(updateReqVO); } else { @@ -144,9 +147,10 @@ public class ErpProcessDetailServiceImpl implements ErpProcessDetailService { new LambdaQueryWrapperX() .in(ErpProcessDetailDO::getProcessId, result.toInsert.stream().map(ErpProcessDetailDO::getProcessId).distinct().collect(Collectors.toList())) .in(ErpProcessDetailDO::getProcessingNumber, result.toInsert.stream().map(ErpProcessDetailDO::getProcessingNumber).distinct().collect(Collectors.toList())) + .in(ErpProcessDetailDO::getProcessingName, result.toInsert.stream().map(ErpProcessDetailDO::getProcessingName).distinct().collect(Collectors.toList())) ); Map numberIdMap = insertedRecords.stream() - .collect(Collectors.toMap(asset -> asset.getProcessId() + "-" + asset.getProcessingNumber(), ErpProcessDetailDO::getId)); + .collect(Collectors.toMap(asset -> asset.getProcessId() + "-" + asset.getProcessingNumber()+"-"+asset.getProcessingName(), ErpProcessDetailDO::getId)); erpConfig.addRedisCacheMap(result.key, numberIdMap); } if (!result.toUpdate.isEmpty()) { @@ -180,7 +184,7 @@ public class ErpProcessDetailServiceImpl implements ErpProcessDetailService { List assets = erpProcessDetailMapper.selectList(new LambdaQueryWrapperX()); Map existingNumbers = new HashMap<>(); for (ErpProcessDetailDO asset : assets) { - String mapKey = asset.getProcessId() + "-" + asset.getProcessingNumber(); + String mapKey = asset.getProcessId() + "-" + asset.getProcessingNumber()+"-"+asset.getProcessingName(); existingNumbers.put(mapKey, asset.getId()); } erpConfig.addRedisCacheMap(key, existingNumbers); diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessServiceImpl.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessServiceImpl.java index 967fdf5..ea7f504 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessServiceImpl.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/service/erp/ErpProcessServiceImpl.java @@ -111,7 +111,7 @@ public class ErpProcessServiceImpl implements ErpProcessService { @XxlJob("getErpProcessTask") public void callErpRfcInterface() { try { - OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.公司代码; + OftenEnum.FuncnrEnum funcnrEnum = OftenEnum.FuncnrEnum.工艺路线; String funcnr = funcnrEnum.getFuncnr(); String key = "erpMap" + funcnr; if (erpConfig.getRedisCacheMap(key).isEmpty()) { @@ -189,7 +189,11 @@ public class ErpProcessServiceImpl implements ErpProcessService { JSONObject itemJson = dataJsonItem.getJSONObject(j); ErpProcessDetailDO detailDO = new ErpProcessDetailDO(); detailDO.setProcessId(String.valueOf(DO.getId())); - detailDO.setProcessingNumber(itemJson.getBigDecimal("VORNR")); + String processingNumber = itemJson.getString("VORNR"); + if (processingNumber != null) { + processingNumber = processingNumber.replaceFirst("^0+(?!$)", ""); + } + detailDO.setProcessingNumber(processingNumber); detailDO.setProcessingName(itemJson.getString("LTXA1")); detailDO.setUom(itemJson.getString("MEINH")); detailDO.setWorkCenterNumber(itemJson.getString("ARBPL"));