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 76a9a8f..ca3d485 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 @@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - ERP资产卡片") @RestController -@RequestMapping("/erp/erp-asset") +@RequestMapping("/base/erp-asset") @Validated public class ErpAssetController { diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpBomController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpBomController.java index 8a1a78a..c609995 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpBomController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpBomController.java @@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - ERP物料清单(BOM)") @RestController -@RequestMapping("/erp/erp-bom") +@RequestMapping("/base/erp-bom") @Validated public class ErpBomController { diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpBomDetailController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpBomDetailController.java index 985ef85..25674e4 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpBomDetailController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpBomDetailController.java @@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - ERP物料清单(BOM)明细") @RestController -@RequestMapping("/erp/erp-bom-detail") +@RequestMapping("/base/erp-bom-detail") @Validated public class ErpBomDetailController { diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpCompanyController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpCompanyController.java index e4bbce7..1e27352 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpCompanyController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpCompanyController.java @@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - ERP公司") @RestController -@RequestMapping("/erp/erp-company") +@RequestMapping("/base/erp-company") @Validated public class ErpCompanyController { diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpContractController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpContractController.java index c32e793..c901871 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpContractController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpContractController.java @@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - ERP合同映射") @RestController -@RequestMapping("/bse/erp-contract") +@RequestMapping("/base/erp-contract") @Validated public class ErpContractController { diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpCostcenterController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpCostcenterController.java index 08c2f61..e29bf1f 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpCostcenterController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpCostcenterController.java @@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - ERP成本中心") @RestController -@RequestMapping("/erp/erp-costcenter") +@RequestMapping("/base/erp-costcenter") @Validated public class ErpCostcenterController { diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpCustomerController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpCustomerController.java index 753f9a3..90c1ea0 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpCustomerController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpCustomerController.java @@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - ERP客商信息") @RestController -@RequestMapping("/erp/erp-customer") +@RequestMapping("/base/erp-customer") @Validated public class ErpCustomerController { 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 aa78d24..21847ef 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 @@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - ERP工厂") @RestController -@RequestMapping("/erp/erp-factory") +@RequestMapping("/base/erp-factory") @Validated public class ErpFactoryController { diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpInternalOrderController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpInternalOrderController.java index 99ef3a3..4f745fd 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpInternalOrderController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpInternalOrderController.java @@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - ERP内部订单") @RestController -@RequestMapping("/erp/erp-internal-order") +@RequestMapping("/base/erp-internal-order") @Validated public class ErpInternalOrderController { diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpMaterialController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpMaterialController.java index 227bd07..8fc47fb 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpMaterialController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpMaterialController.java @@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - ERP物料信息") @RestController -@RequestMapping("/erp/erp-material") +@RequestMapping("/base/erp-material") @Validated public class ErpMaterialController { diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpProcessController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpProcessController.java index fa1c8ba..17cd2aa 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpProcessController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpProcessController.java @@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - ERP工艺路线") @RestController -@RequestMapping("/erp/erp-process") +@RequestMapping("/base/erp-process") @Validated public class ErpProcessController { diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpProcessDetailController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpProcessDetailController.java index ba78aab..451343b 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpProcessDetailController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpProcessDetailController.java @@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - ERP工艺路线明细") @RestController -@RequestMapping("/erp/erp-process-detail") +@RequestMapping("/base/erp-process-detail") @Validated public class ErpProcessDetailController { diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpProductiveOrderController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpProductiveOrderController.java index 502fc5e..e807d36 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpProductiveOrderController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpProductiveOrderController.java @@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - ERP生产订单") @RestController -@RequestMapping("/erp/erp-productive-order") +@RequestMapping("/base/erp-productive-order") @Validated public class ErpProductiveOrderController { diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpProductiveVersionController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpProductiveVersionController.java index aaee9a6..8add346 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpProductiveVersionController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpProductiveVersionController.java @@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - ERP生产版本") @RestController -@RequestMapping("/erp/erp-productive-version") +@RequestMapping("/base/erp-productive-version") @Validated public class ErpProductiveVersionController { diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpPurchaseOrganizationController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpPurchaseOrganizationController.java index 525c2be..ea30d65 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpPurchaseOrganizationController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpPurchaseOrganizationController.java @@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - ERP采购组织") @RestController -@RequestMapping("/erp/erp-purchase-organization") +@RequestMapping("/base/erp-purchase-organization") @Validated public class ErpPurchaseOrganizationController { diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpSalesOrganizationController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpSalesOrganizationController.java index 1fa1bc0..53b10a1 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpSalesOrganizationController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpSalesOrganizationController.java @@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - ERP销售组织") @RestController -@RequestMapping("/erp/erp-sales-organization") +@RequestMapping("/base/erp-sales-organization") @Validated public class ErpSalesOrganizationController { diff --git a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpWarehouseController.java b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpWarehouseController.java index 0759d1b..52ea813 100644 --- a/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpWarehouseController.java +++ b/zt-module-erp/zt-module-erp-server/src/main/java/com/zt/plat/module/erp/controller/admin/erp/ErpWarehouseController.java @@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - ERP库位") @RestController -@RequestMapping("/erp/erp-warehouse") +@RequestMapping("/base/erp-warehouse") @Validated public class ErpWarehouseController { 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 ccb4961..c5ef5f3 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 @@ -1,6 +1,8 @@ package com.zt.plat.module.erp.service.erp; import cn.hutool.core.collection.CollUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; 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; @@ -9,6 +11,7 @@ import com.zt.plat.module.erp.common.enums.OftenEnum; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpBomDetailPageReqVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpBomDetailRespVO; import com.zt.plat.module.erp.controller.admin.erp.vo.ErpBomDetailSaveReqVO; +import com.zt.plat.module.erp.dal.dataobject.erp.ErpAssetDO; import com.zt.plat.module.erp.dal.dataobject.erp.ErpBomDO; import com.zt.plat.module.erp.dal.dataobject.erp.ErpBomDetailDO; import com.zt.plat.module.erp.dal.mysql.erp.ErpBomDetailMapper; @@ -16,10 +19,12 @@ import jakarta.annotation.Resource; import org.springframework.stereotype.Service; 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 java.util.stream.Collectors; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_BOM_DETAIL_NOT_EXISTS; @@ -97,25 +102,83 @@ public class ErpBomDetailServiceImpl implements ErpBomDetailService { } @Override - public void saveOrUpdateErpBomDetail(List updateReqVO) { - String key = "erpMap" + OftenEnum.FuncnrEnum.BOM清单.getFuncnr()+ "Detail"; + public void saveOrUpdateErpBomDetail(List updateReqVOS) { + String key = "erpMap" + OftenEnum.FuncnrEnum.BOM清单.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 (ErpBomDetailDO updateReqVO : updateReqVO){ -// String mapKey = updateReqVO.getBomId() + "-" + updateReqVO.getErpBomId(); -// if (existingNumbers.get(mapKey)!=null) { -// -// updateReqVO.setId(existingNumbers.get(mapKey)); -// } -// } + for (ErpBomDetailDO updateReqVO : updateReqVOS) { + String mapKey = updateReqVO.getBomId() + "-" + updateReqVO.getErpBomId(); + 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()); + } + } -// erpBomDetailMapper.saveOrUpdateErpBomDetail(updateReqVO); + return new ProcessingResult(toUpdate, toInsert, deleteNumbers, key); + } + + private void saveData(ProcessingResult result) { + // 批量新增和更新 + if (!result.toInsert.isEmpty()) { + erpBomDetailMapper.insertBatch(result.toInsert); + // 批量查询刚插入数据的id,提升效率 + List insertedRecords = erpBomDetailMapper.selectList( + new LambdaQueryWrapperX() + .in(ErpBomDetailDO::getBomId, result.toInsert.stream().map(ErpBomDetailDO::getBomId).distinct().collect(Collectors.toList())) + .in(ErpBomDetailDO::getErpBomId, result.toInsert.stream().map(ErpBomDetailDO::getErpBomId).distinct().collect(Collectors.toList())) + ); + Map numberIdMap = insertedRecords.stream() + .collect(Collectors.toMap(asset -> asset.getBomId() + "-" + asset.getErpBomId(), ErpBomDetailDO::getId)); + erpConfig.addRedisCacheMap(result.key, numberIdMap); + } + if (!result.toUpdate.isEmpty()) { + erpBomDetailMapper.updateBatch(result.toUpdate); + } + if (!result.deleteNumbers.isEmpty()) { + // 使用流式处理和批处理优化删除逻辑 + List idsToDelete = new ArrayList<>(result.deleteNumbers.values()); + if (!idsToDelete.isEmpty()) { + erpBomDetailMapper.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) { 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 5355fad..578c913 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 @@ -160,6 +160,8 @@ public class ErpBomServiceImpl implements ErpBomService { List allnumbers = new ArrayList<>(); List erpBomDetailDOList = 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) { @@ -179,8 +181,9 @@ public class ErpBomServiceImpl implements ErpBomService { } else { // 为了避免数据重复,先将主表数据插入数据库,再获取主表ID,再插入子表数据 erpBomMapper.insert(DO); - numbers.put(number, DO.getId()); + addnumbers.put(number, DO.getId()); } + dataArrayNumbers.add(number); JSONArray dataJsonItem = dataJson.getJSONArray("ITEM"); if (dataJsonItem != null) { @@ -201,7 +204,15 @@ public class ErpBomServiceImpl implements ErpBomService { } } - return new ProcessingResult(toUpdate, erpBomDetailDOList,key, allnumbers); + // 过滤出numbers中有,但dataArray中KOSTL没有的记录,即为需要删除的数据 + Map deleteNumbers = new HashMap<>(); + for (String number : numbers.keySet()) { + if (!dataArrayNumbers.contains(number)) { + deleteNumbers.put(number, numbers.get(number)); + } + } + + return new ProcessingResult(toUpdate, erpBomDetailDOList, key, allnumbers); } /**