测试url,erp改为base

This commit is contained in:
liss
2025-09-24 11:18:39 +08:00
parent efab6957a3
commit 1dd55a02ae
19 changed files with 103 additions and 29 deletions

View File

@@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - ERP资产卡片") @Tag(name = "管理后台 - ERP资产卡片")
@RestController @RestController
@RequestMapping("/erp/erp-asset") @RequestMapping("/base/erp-asset")
@Validated @Validated
public class ErpAssetController { public class ErpAssetController {

View File

@@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - ERP物料清单(BOM)") @Tag(name = "管理后台 - ERP物料清单(BOM)")
@RestController @RestController
@RequestMapping("/erp/erp-bom") @RequestMapping("/base/erp-bom")
@Validated @Validated
public class ErpBomController { public class ErpBomController {

View File

@@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - ERP物料清单(BOM)明细") @Tag(name = "管理后台 - ERP物料清单(BOM)明细")
@RestController @RestController
@RequestMapping("/erp/erp-bom-detail") @RequestMapping("/base/erp-bom-detail")
@Validated @Validated
public class ErpBomDetailController { public class ErpBomDetailController {

View File

@@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - ERP公司") @Tag(name = "管理后台 - ERP公司")
@RestController @RestController
@RequestMapping("/erp/erp-company") @RequestMapping("/base/erp-company")
@Validated @Validated
public class ErpCompanyController { public class ErpCompanyController {

View File

@@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - ERP合同映射") @Tag(name = "管理后台 - ERP合同映射")
@RestController @RestController
@RequestMapping("/bse/erp-contract") @RequestMapping("/base/erp-contract")
@Validated @Validated
public class ErpContractController { public class ErpContractController {

View File

@@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - ERP成本中心") @Tag(name = "管理后台 - ERP成本中心")
@RestController @RestController
@RequestMapping("/erp/erp-costcenter") @RequestMapping("/base/erp-costcenter")
@Validated @Validated
public class ErpCostcenterController { public class ErpCostcenterController {

View File

@@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - ERP客商信息") @Tag(name = "管理后台 - ERP客商信息")
@RestController @RestController
@RequestMapping("/erp/erp-customer") @RequestMapping("/base/erp-customer")
@Validated @Validated
public class ErpCustomerController { public class ErpCustomerController {

View File

@@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - ERP工厂") @Tag(name = "管理后台 - ERP工厂")
@RestController @RestController
@RequestMapping("/erp/erp-factory") @RequestMapping("/base/erp-factory")
@Validated @Validated
public class ErpFactoryController { public class ErpFactoryController {

View File

@@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - ERP内部订单") @Tag(name = "管理后台 - ERP内部订单")
@RestController @RestController
@RequestMapping("/erp/erp-internal-order") @RequestMapping("/base/erp-internal-order")
@Validated @Validated
public class ErpInternalOrderController { public class ErpInternalOrderController {

View File

@@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - ERP物料信息") @Tag(name = "管理后台 - ERP物料信息")
@RestController @RestController
@RequestMapping("/erp/erp-material") @RequestMapping("/base/erp-material")
@Validated @Validated
public class ErpMaterialController { public class ErpMaterialController {

View File

@@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - ERP工艺路线") @Tag(name = "管理后台 - ERP工艺路线")
@RestController @RestController
@RequestMapping("/erp/erp-process") @RequestMapping("/base/erp-process")
@Validated @Validated
public class ErpProcessController { public class ErpProcessController {

View File

@@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - ERP工艺路线明细") @Tag(name = "管理后台 - ERP工艺路线明细")
@RestController @RestController
@RequestMapping("/erp/erp-process-detail") @RequestMapping("/base/erp-process-detail")
@Validated @Validated
public class ErpProcessDetailController { public class ErpProcessDetailController {

View File

@@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - ERP生产订单") @Tag(name = "管理后台 - ERP生产订单")
@RestController @RestController
@RequestMapping("/erp/erp-productive-order") @RequestMapping("/base/erp-productive-order")
@Validated @Validated
public class ErpProductiveOrderController { public class ErpProductiveOrderController {

View File

@@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - ERP生产版本") @Tag(name = "管理后台 - ERP生产版本")
@RestController @RestController
@RequestMapping("/erp/erp-productive-version") @RequestMapping("/base/erp-productive-version")
@Validated @Validated
public class ErpProductiveVersionController { public class ErpProductiveVersionController {

View File

@@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - ERP采购组织") @Tag(name = "管理后台 - ERP采购组织")
@RestController @RestController
@RequestMapping("/erp/erp-purchase-organization") @RequestMapping("/base/erp-purchase-organization")
@Validated @Validated
public class ErpPurchaseOrganizationController { public class ErpPurchaseOrganizationController {

View File

@@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - ERP销售组织") @Tag(name = "管理后台 - ERP销售组织")
@RestController @RestController
@RequestMapping("/erp/erp-sales-organization") @RequestMapping("/base/erp-sales-organization")
@Validated @Validated
public class ErpSalesOrganizationController { public class ErpSalesOrganizationController {

View File

@@ -30,7 +30,7 @@ import static com.zt.plat.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - ERP库位") @Tag(name = "管理后台 - ERP库位")
@RestController @RestController
@RequestMapping("/erp/erp-warehouse") @RequestMapping("/base/erp-warehouse")
@Validated @Validated
public class ErpWarehouseController { public class ErpWarehouseController {

View File

@@ -1,6 +1,8 @@
package com.zt.plat.module.erp.service.erp; package com.zt.plat.module.erp.service.erp;
import cn.hutool.core.collection.CollUtil; 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.pojo.PageResult;
import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.framework.common.util.object.BeanUtils;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX; 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.ErpBomDetailPageReqVO;
import com.zt.plat.module.erp.controller.admin.erp.vo.ErpBomDetailRespVO; 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.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.ErpBomDO;
import com.zt.plat.module.erp.dal.dataobject.erp.ErpBomDetailDO; import com.zt.plat.module.erp.dal.dataobject.erp.ErpBomDetailDO;
import com.zt.plat.module.erp.dal.mysql.erp.ErpBomDetailMapper; 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.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; 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.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_BOM_DETAIL_NOT_EXISTS; import static com.zt.plat.module.erp.enums.ErrorCodeConstants.ERP_BOM_DETAIL_NOT_EXISTS;
@@ -97,25 +102,83 @@ public class ErpBomDetailServiceImpl implements ErpBomDetailService {
} }
@Override @Override
public void saveOrUpdateErpBomDetail(List<ErpBomDetailDO> updateReqVO) { public void saveOrUpdateErpBomDetail(List<ErpBomDetailDO> updateReqVOS) {
String key = "erpMap" + OftenEnum.FuncnrEnum.BOM清单.getFuncnr()+ "Detail"; String key = "erpMap" + OftenEnum.FuncnrEnum.BOM清单.getFuncnr() + "Detail";
// 1. 处理公司数据,区分新增和更新
ProcessingResult result = processData(updateReqVOS, key);
// 2. 批量保存数据
saveData(result);
}
private ProcessingResult processData(List<ErpBomDetailDO> updateReqVOS, String key) {
if (erpConfig.getRedisCacheMap(key).isEmpty()) { if (erpConfig.getRedisCacheMap(key).isEmpty()) {
initializeMap(key); initializeMap(key);
} }
List<ErpBomDetailDO> toUpdate = new ArrayList<>(); List<ErpBomDetailDO> toUpdate = new ArrayList<>();
List<ErpBomDetailDO> toInsert = new ArrayList<>(); List<ErpBomDetailDO> toInsert = new ArrayList<>();
List<String> dataArrayNumbers = new ArrayList<>();
Map<String, Long> existingNumbers = erpConfig.getRedisCacheMap(key); Map<String, Long> existingNumbers = erpConfig.getRedisCacheMap(key);
// for (ErpBomDetailDO updateReqVO : updateReqVO){ for (ErpBomDetailDO updateReqVO : updateReqVOS) {
// String mapKey = updateReqVO.getBomId() + "-" + updateReqVO.getErpBomId(); String mapKey = updateReqVO.getBomId() + "-" + updateReqVO.getErpBomId();
// if (existingNumbers.get(mapKey)!=null) { if (updateReqVO.getId() == null) {
// toInsert.add(updateReqVO);
// updateReqVO.setId(existingNumbers.get(mapKey)); } else {
// } toUpdate.add(updateReqVO);
// } }
dataArrayNumbers.add(mapKey);
}
Map<String, Long> deleteNumbers = new HashMap<>();
for (Map.Entry<String, Long> 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<ErpBomDetailDO> insertedRecords = erpBomDetailMapper.selectList(
new LambdaQueryWrapperX<ErpBomDetailDO>()
.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<String, Long> 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<Long> 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<ErpBomDetailDO> toUpdate;
private final List<ErpBomDetailDO> toInsert;
private final Map<String, Long> deleteNumbers;
private final String key;
public ProcessingResult(List<ErpBomDetailDO> toUpdate, List<ErpBomDetailDO> toInsert, Map<String, Long> deleteNumbers, String key) {
this.toUpdate = toUpdate;
this.toInsert = toInsert;
this.deleteNumbers = deleteNumbers;
this.key = key;
}
} }
private void initializeMap(String key) { private void initializeMap(String key) {

View File

@@ -160,6 +160,8 @@ public class ErpBomServiceImpl implements ErpBomService {
List<String> allnumbers = new ArrayList<>(); List<String> allnumbers = new ArrayList<>();
List<ErpBomDetailDO> erpBomDetailDOList = new ArrayList<>(); List<ErpBomDetailDO> erpBomDetailDOList = new ArrayList<>();
Map<String, Long> addnumbers = new HashMap<>();
List<String> dataArrayNumbers = new ArrayList<>();
for (int i = 0; i < dataArray.size(); i++) { for (int i = 0; i < dataArray.size(); i++) {
JSONObject dataJson = dataArray.getJSONObject(i); JSONObject dataJson = dataArray.getJSONObject(i);
if (dataJson != null) { if (dataJson != null) {
@@ -179,8 +181,9 @@ public class ErpBomServiceImpl implements ErpBomService {
} else { } else {
// 为了避免数据重复先将主表数据插入数据库再获取主表ID再插入子表数据 // 为了避免数据重复先将主表数据插入数据库再获取主表ID再插入子表数据
erpBomMapper.insert(DO); erpBomMapper.insert(DO);
numbers.put(number, DO.getId()); addnumbers.put(number, DO.getId());
} }
dataArrayNumbers.add(number);
JSONArray dataJsonItem = dataJson.getJSONArray("ITEM"); JSONArray dataJsonItem = dataJson.getJSONArray("ITEM");
if (dataJsonItem != null) { if (dataJsonItem != null) {
@@ -201,7 +204,15 @@ public class ErpBomServiceImpl implements ErpBomService {
} }
} }
return new ProcessingResult(toUpdate, erpBomDetailDOList,key, allnumbers); // 过滤出numbers中有但dataArray中KOSTL没有的记录即为需要删除的数据
Map<String, Long> 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);
} }
/** /**