From 033d2347440dc01a6da934f2ba778e68f4c16320 Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Mon, 3 Mar 2025 00:32:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SmErpSpuController.java | 4 + .../service/impl/SmErpSpuServiceImpl.java | 150 +++++++++++++++--- 2 files changed, 129 insertions(+), 25 deletions(-) diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpSpuController.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpSpuController.java index c9964d334..25d833a9b 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpSpuController.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpSpuController.java @@ -22,6 +22,7 @@ import com.bsd.pjcloud.supermarket.entity.SmErpUnitEntity; import com.bsd.pjcloud.supermarket.service.*; import com.bsd.pjcloud.supermarket.task.TaskStoreService; import com.bsd.pjcloud.supermarket.vo.erpspu.SmErpSpuSimpleVo; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; @@ -238,6 +239,9 @@ public class SmErpSpuController { System.out.println(collect); // List collect1 = dtos.stream().filter(smErpSpuImportDto -> StringUtils.isBlank(smErpSpuImportDto.getClassification())).collect(Collectors.toList()); // System.out.println(collect); + if (CollectionUtils.isEmpty(collect)) { + return R.failed("导入数据不能为空"); + } return smErpSpuService.importErpSpu(collect, bindingResult); } diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpSpuServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpSpuServiceImpl.java index 6b4511037..16b5fa78f 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpSpuServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpSpuServiceImpl.java @@ -17,10 +17,7 @@ import com.bsd.pjcloud.supermarket.dto.erpspu.SmErpSpuImportDto; import com.bsd.pjcloud.supermarket.dto.inventoryrecords.UpdateStockDTO; import com.bsd.pjcloud.supermarket.dto.supplier.SmErpSupplierImportDto; import com.bsd.pjcloud.supermarket.entity.*; -import com.bsd.pjcloud.supermarket.mapper.SmErpCategoryMapper; -import com.bsd.pjcloud.supermarket.mapper.SmErpSpuMapper; -import com.bsd.pjcloud.supermarket.mapper.SmErpStockMapper; -import com.bsd.pjcloud.supermarket.mapper.SmSpuMapper; +import com.bsd.pjcloud.supermarket.mapper.*; import com.bsd.pjcloud.supermarket.service.*; import com.bsd.pjcloud.supermarket.task.TaskStoreService; import com.bsd.pjcloud.supermarket.validarot.ErpSpuValidator; @@ -48,6 +45,7 @@ import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -74,6 +72,8 @@ public class SmErpSpuServiceImpl extends ServiceImpl selectWStockWrapper = new LambdaQueryWrapper<>(); selectWStockWrapper.eq(SmErpStockEntity::getErpSpuId, supermarketSpu.getId()); - SmErpStockEntity queryStock = smErpStockMapper.selectOne(selectWStockWrapper); + SmErpStockEntity queryStock = smErpStockMapper.selectOne(selectWStockWrapper); //得到单据进出的库存数量 Double inventoryStockNum = queryStock.getCurrentStock() - queryStock.getBaseStock(); @@ -138,10 +138,10 @@ public class SmErpSpuServiceImpl extends ServiceImpl smErpUnitEntityList = supermarketSpu.getSmErpUnitEntityList(); @@ -192,14 +192,14 @@ public class SmErpSpuServiceImpl extends ServiceImpl updateStockDTOS=new ArrayList(); + List updateStockDTOS = new ArrayList(); for (SupermarketSpuUpdateStockReqDTO.Item v : updateStockReqDTO.getItems()) { // 查询当前库存 SmErpSpuEntity spu = baseMapper.selectById(v.getId()); if (spu == null) { return R.failed(spu.getProductName() + "商品不存在"); } - if (v.getIncrCount() == 0){ + if (v.getIncrCount() == 0) { return R.failed("扣减不能为0"); } LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); @@ -234,7 +234,7 @@ public class SmErpSpuServiceImpl extends ServiceImpl records = pageData.getRecords(); - if (CollectionUtils.isNotEmpty(records)){ + if (CollectionUtils.isNotEmpty(records)) { Set erpSpuIds = records.stream().map(smErpSpuEntity -> smErpSpuEntity.getId()).collect(Collectors.toSet()); // 批量查询库存信息 @@ -244,7 +244,7 @@ public class SmErpSpuServiceImpl extends ServiceImpl stockMap = stocks.stream() - .collect(Collectors.toMap(SmErpStockEntity::getErpSpuId,smErpStockEntity -> smErpStockEntity)); + .collect(Collectors.toMap(SmErpStockEntity::getErpSpuId, smErpStockEntity -> smErpStockEntity)); records.forEach(spu -> { @@ -325,9 +325,9 @@ public class SmErpSpuServiceImpl extends ServiceImpl getErpSpuPage(Page page, ErpCgPlanDTO erpCgPlanDTO) { LambdaQueryWrapper smErpUnitEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); - smErpUnitEntityLambdaQueryWrapper.eq(SmErpSpuEntity::getStatus,"0"); - smErpUnitEntityLambdaQueryWrapper.eq(StringUtils.isNotBlank(erpCgPlanDTO.getProductCode()),SmErpSpuEntity::getProductCode, erpCgPlanDTO.getProductCode()); - smErpUnitEntityLambdaQueryWrapper.like(StringUtils.isNotBlank(erpCgPlanDTO.getProductName()),SmErpSpuEntity::getProductName, erpCgPlanDTO.getProductName()); + smErpUnitEntityLambdaQueryWrapper.eq(SmErpSpuEntity::getStatus, "0"); + smErpUnitEntityLambdaQueryWrapper.eq(StringUtils.isNotBlank(erpCgPlanDTO.getProductCode()), SmErpSpuEntity::getProductCode, erpCgPlanDTO.getProductCode()); + smErpUnitEntityLambdaQueryWrapper.like(StringUtils.isNotBlank(erpCgPlanDTO.getProductName()), SmErpSpuEntity::getProductName, erpCgPlanDTO.getProductName()); Page spuPage = baseMapper.selectPageByScope(page, smErpUnitEntityLambdaQueryWrapper, DataScope.of()); // 将 SmErpSpuEntity 转换为 SmErpPageScopeVo @@ -338,7 +338,7 @@ public class SmErpSpuServiceImpl extends ServiceImpl spuIds = voList.stream().map(vo -> vo.getId()).collect(Collectors.toList()); - List unitList = smErpUnitService.list(new LambdaQueryWrapper().in(SmErpUnitEntity::getSpuId, spuIds)); + List unitList = smErpUnitService.list(new LambdaQueryWrapper().in(SmErpUnitEntity::getSpuId, spuIds)); voList.stream().forEach(vo -> { List unitEntities = unitList.stream().filter(unit -> unit.getSpuId().equals(vo.getId())).collect(Collectors.toList()); @@ -875,14 +875,27 @@ public class SmErpSpuServiceImpl extends ServiceImpl smErpSpuImportDtos, BindingResult bindingResult) { - if (CollectionUtils.isEmpty(smErpSpuImportDtos)) { - return R.failed("导入数据不能为空"); - } - + //错误集合 List> errorList = new ArrayList<>(); - List spuBatch = new ArrayList<>(); +// List spuBatch = new ArrayList<>(); + //货号-商品映射 Map productCodeToSpuMap = new HashMap<>(); + // 第一阶段:处理商品主数据(新增/更新分离) + List insertBatch = new ArrayList<>(); // 需要插入的列表 + List updateBatch = new ArrayList<>(); // 需要更新的列表 + // 预处理:批量查询所有 productCode 是否存在 + Set existingProductCodes = smErpSpuImportDtos.stream() + .map(SmErpSpuImportDto::getProductCode) + .collect(Collectors.toSet()); + + Map existingSpuMap = baseMapper.selectListByScope( + new LambdaQueryWrapper() + .in(SmErpSpuEntity::getProductCode, existingProductCodes),DataScope.of() + ).stream().collect(Collectors.toMap( + SmErpSpuEntity::getProductCode, + Function.identity() + )); // 第一阶段:处理商品主数据 for (int i = 0; i < smErpSpuImportDtos.size(); i++) { int rowNumber = i + 1; @@ -893,11 +906,13 @@ public class SmErpSpuServiceImpl extends ServiceImpl validationErrors = ErpSpuValidator.validate(dto, rowNumber); + //添加验证错误记录 if (!validationErrors.isEmpty()) { errorList.add(createErrorInfo(rowNumber, productCode, validationErrors)); continue; } + // 处理分类(带完整错误处理) Long categoryId = resolveCategory( dto.getClassification(), @@ -909,15 +924,35 @@ public class SmErpSpuServiceImpl extends ServiceImpl e.get("productCode").equals(productCode) && - (int)e.get("row") == rowNumber)) { + (int) e.get("row") == rowNumber)) { continue; } @@ -1029,6 +1068,67 @@ public class SmErpSpuServiceImpl extends ServiceImpl errorReasons, + int rowNumber, + String productCode) { + if (StringUtils.isBlank(supplierName)) { + errorReasons.add("供应商名称不能为空"); + return null; + } + + try { + LambdaQueryWrapper smErpSupplierEntityLambdaQueryWrapper = new LambdaQueryWrapper<>(); + smErpSupplierEntityLambdaQueryWrapper.eq(SmErpSupplierEntity::getSupplierName, supplierName); + // 1. 查询现有供应商(名称唯一) + SmErpSupplierEntity existSupplier = smErpSupplierMapper.selectListByScope(smErpSupplierEntityLambdaQueryWrapper + ,DataScope.of() + ).get(0); + + if (existSupplier != null) { + return existSupplier.getSupplierId(); + } else { + errorReasons.add("供应商不存在,请先导入'" + supplierName + "'该供应商"); + return null; + } + + // 2. 创建新供应商 +// SmErpSupplierEntity newSupplier = new SmErpSupplierEntity(); +// newSupplier.setSupplierName(supplierName); +// newSupplier.setStatus("0"); // 假设0为启用状态 +// newSupplier.setContactPerson("待补充"); // 默认值(按需调整) +// newSupplier.setContactPhone("待补充"); +// +// int insertResult = smErpSupplierMapper.insert(newSupplier); +// if (insertResult > 0) { +// return newSupplier.getId(); +// } +// +// errorReasons.add("供应商创建失败"); +// return null; + + } catch (DuplicateKeyException e) { + // 处理并发创建冲突:重新查询 + SmErpSupplierEntity conflictSupplier = smErpSupplierMapper.selectListByScope( + new LambdaQueryWrapper() + .eq(SmErpSupplierEntity::getSupplierName, supplierName),DataScope.of() + ).get(0); + return conflictSupplier != null ? conflictSupplier.getSupplierId() : null; + + } catch (Exception e) { + errorReasons.add("供应商处理异常: " + e.getMessage()); + return null; + } + } // 分类处理(完整实现) private Long resolveCategory(String categoryName, List errorReasons,