From 58ed6f83836cb34fa5eefee5f1bc1299f1508ef3 Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Fri, 7 Mar 2025 13:24:20 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E5=8C=85=E8=A3=85?= =?UTF-8?q?=E5=8D=95=E4=BD=8D=E6=95=88=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../supermarket/vo/cgdd/SmErpCgDdVo.java | 2 +- .../SmErpInventoryRecordsController.java | 1 - .../service/impl/SmErpCgDdServiceImpl.java | 4 +- .../SmErpInventoryRecordsServiceImpl.java | 8 ++-- .../service/impl/SmErpSpuServiceImpl.java | 43 ++++++++++++++++--- .../src/main/resources/mapper/SmSpuMapper.xml | 2 +- 6 files changed, 48 insertions(+), 12 deletions(-) diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/vo/cgdd/SmErpCgDdVo.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/vo/cgdd/SmErpCgDdVo.java index c7559125e..dc721152d 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/vo/cgdd/SmErpCgDdVo.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/vo/cgdd/SmErpCgDdVo.java @@ -21,7 +21,7 @@ public class SmErpCgDdVo { private String code; - @Schema(description="据日期") + @Schema(description="单据日期") private LocalDate ddDate; /** diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpInventoryRecordsController.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpInventoryRecordsController.java index 52fc10988..d3b9b5294 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpInventoryRecordsController.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpInventoryRecordsController.java @@ -207,7 +207,6 @@ public class SmErpInventoryRecordsController { @Operation(summary = "获取出入库订单分页" , description = "关联订单" ) @GetMapping("/inventory/page" ) public R getInventoryPage(@ParameterObject Page page, @ParameterObject InventoryLinkQueryDTO inventoryLinkQueryDTO) { - LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.like(StrUtil.isNotBlank(inventoryLinkQueryDTO.getCode()),SmErpInventoryRecordsEntity::getInventoryCode,inventoryLinkQueryDTO.getCode()); wrapper.eq(Objects.nonNull(inventoryLinkQueryDTO.getDdDate()),SmErpInventoryRecordsEntity::getInventoryDate,inventoryLinkQueryDTO.getDdDate()); diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgDdServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgDdServiceImpl.java index b99455cfd..316562e00 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgDdServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpCgDdServiceImpl.java @@ -107,7 +107,9 @@ public class SmErpCgDdServiceImpl extends ServiceImpl pageData = baseMapper.selectPageByScope(page, wrapper, DataScope.of()); List records = pageData.getRecords(); - + if (CollectionUtils.isEmpty(records)){ + return pageData; + } // 2. 提前收集所有主表ID(去重处理) Set planIds = records.stream() .map(SmErpCgDdEntity::getId) diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpInventoryRecordsServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpInventoryRecordsServiceImpl.java index 9897f2aa5..d94f81ba0 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpInventoryRecordsServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpInventoryRecordsServiceImpl.java @@ -162,11 +162,13 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl wrapper) { Page pageData = baseMapper.selectPageByScope(page, wrapper, DataScope.of()); - List records = pageData.getRecords(); - + List records = pageData.getRecords(); + if (CollectionUtils.isEmpty(records)){ + return pageData; + } // 2. 提前收集所有主表ID(去重处理) Set planIds = records.stream() - .map(SmErpCgPlanEntity::getId) + .map(SmErpInventoryRecordsEntity::getId) .collect(Collectors.toSet()); // 3. 批量查询所有子表数据(仅1次数据库查询) 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 ce7da6ba5..c1d87ec14 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 @@ -109,6 +109,10 @@ public class SmErpSpuServiceImpl extends ServiceImpl smErpUnitEntityList = supermarketSpu.getSmErpUnitEntityList(); + List isBaseNum = smErpUnitEntityList.stream().filter(smErpUnitEntity -> smErpUnitEntity.getIsBase() == true).collect(Collectors.toList()); + if (isBaseNum.size()!=1){ + return R.failed("必须且只能指定一个基础包装单位!"); + } if (CollectionUtils.isNotEmpty(smErpUnitEntityList)) { smErpUnitEntityList.forEach(supermarketUnitEntity -> supermarketUnitEntity.setSpuId(supermarketSpu.getId())); smErpUnitService.saveBatch(smErpUnitEntityList); @@ -153,15 +157,44 @@ public class SmErpSpuServiceImpl extends ServiceImpl smErpUnitEntityList = supermarketSpu.getSmErpUnitEntityList(); + if (CollectionUtils.isNotEmpty(smErpUnitEntityList)) { + + List baseUnits = smErpUnitEntityList.stream() + .filter(unit -> Boolean.TRUE.equals(unit.getIsBase())) + .collect(Collectors.toList()); + + // 检查基础单位数量 + if ( baseUnits.size() != 1) { + return R.failed("必须且只能指定一个基础包装单位!"); + } + //id为null新增 - List insertCollect = smErpUnitEntityList.stream() + List insertUnits = smErpUnitEntityList.stream() .filter(supermarketUnitEntity -> supermarketUnitEntity.getId() == null).collect(Collectors.toList()); - insertCollect.forEach(supermarketUnitEntity -> supermarketUnitEntity.setSpuId(supermarketSpu.getId())); - List updateCollect = smErpUnitEntityList.stream() + insertUnits.forEach(supermarketUnitEntity -> supermarketUnitEntity.setSpuId(supermarketSpu.getId())); + List updateUnits = smErpUnitEntityList.stream() .filter(supermarketUnitEntity -> supermarketUnitEntity.getId() != null).collect(Collectors.toList()); - smErpUnitService.updateBatchById(updateCollect); - smErpUnitService.saveBatch(insertCollect); + smErpUnitService.updateBatchById(updateUnits); + smErpUnitService.saveBatch(insertUnits); + //判断是否修改了基础包装单位,如果修改了基础包装单位的类型,其他的要变成false + // 获取当前有效的基础单位ID(处理新增单位的情况) + Long currentBaseUnitId = baseUnits.get(0).getId() != null ? + baseUnits.get(0).getId() : + insertUnits.stream() + .filter(SmErpUnitEntity::getIsBase) + .findFirst() + .map(SmErpUnitEntity::getId) + .orElse(null); + // 更新其他单位为非基础 + if (currentBaseUnitId != null) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper + .eq(SmErpUnitEntity::getSpuId, supermarketSpu.getId()) + .ne(SmErpUnitEntity::getId, currentBaseUnitId) + .set(SmErpUnitEntity::getIsBase, false); + smErpUnitService.update(updateWrapper); + } } else { return R.failed("包装类型不能为空"); } diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/resources/mapper/SmSpuMapper.xml b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/resources/mapper/SmSpuMapper.xml index 57c96840c..076a8194f 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/resources/mapper/SmSpuMapper.xml +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/resources/mapper/SmSpuMapper.xml @@ -40,7 +40,7 @@ LEFT JOIN sm_erp_spu esp on sp.erp_spu_id = esp.id LEFT JOIN sm_erp_unit u - on esp.id=u.spu_id + on esp.id=u.spu_id and u.is_base=1 LEFT JOIN sm_erp_stock stock on esp.id = stock.erp_spu_id From 8f809fdea701c846c6860a7f8ed1db591321c003 Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Fri, 7 Mar 2025 14:19:48 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E5=BA=93=E5=AD=98=E6=89=A3=E5=87=8F?= =?UTF-8?q?=EF=BC=8C=E6=A0=B9=E6=8D=AE=E5=8C=85=E8=A3=85=E5=8D=95=E4=BD=8D?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/SupermarketSpuUpdateStockReqDTO.java | 2 +- .../dto/inventoryrecords/UpdateStockDTO.java | 2 +- .../SmErpInventoryRecordsItemEntity.java | 2 +- .../service/impl/SmErpSpuServiceImpl.java | 35 +++++++++++-------- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/SupermarketSpuUpdateStockReqDTO.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/SupermarketSpuUpdateStockReqDTO.java index 50359909d..17b864c1d 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/SupermarketSpuUpdateStockReqDTO.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/SupermarketSpuUpdateStockReqDTO.java @@ -45,7 +45,7 @@ public class SupermarketSpuUpdateStockReqDTO { * 负数:扣减库存 */ @NotNull(message = "库存变化数量不能为空") - private Integer incrCount; + private Double incrCount; } diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/UpdateStockDTO.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/UpdateStockDTO.java index bb16e1095..d27d92548 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/UpdateStockDTO.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/UpdateStockDTO.java @@ -31,7 +31,7 @@ public class UpdateStockDTO { * 负数:扣减库存 */ @NotNull(message = "库存变化数量不能为空") - private Integer incrCount; + private Double incrCount; } diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsItemEntity.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsItemEntity.java index fe2057254..627d47210 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsItemEntity.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsItemEntity.java @@ -57,7 +57,7 @@ public class SmErpInventoryRecordsItemEntity extends Model updateStockDTOS = new ArrayList(); + //出库主表数据 + SmErpInventoryRecordsEntity smErpInventoryRecordsEntity = new SmErpInventoryRecordsEntity(); + String s = sequence.nextNo(); + String result = InventoryTypeEnum.LSCK.getValue() + "-" + s; + smErpInventoryRecordsEntity.setInventoryCode(result); + smErpInventoryRecordsEntity.setInventoryDate(LocalDate.now()); + smErpInventoryRecordsEntity.setInventoryType(InventoryTypeEnum.LSCK.getType()); + smErpInventoryRecordsEntity.setOrderType(OrderTypeEnum.CK.getType()); + smErpInventoryRecordsEntity.setDeviceType(updateStockReqDTO.getDeviceType()); + //生成出入库记录 + smErpInventoryRecordsMapper.insert(smErpInventoryRecordsEntity); + List smErpInventoryRecordsItemEntityList = new ArrayList<>(); + for (SupermarketSpuUpdateStockReqDTO.Item v : updateStockReqDTO.getItems()) { SmErpUnitEntity smErpUnitEntity = smErpUnitService.getById(v.getId()); + //计算包装单位实际需要扣减的库存 + Double incrCount = (smErpUnitEntity.getPackageNum()) * v.getIncrCount(); // 查询当前库存 Long spuId = smErpUnitEntity.getSpuId(); SmErpSpuEntity spu = baseMapper.selectById(spuId); @@ -251,36 +266,28 @@ public class SmErpSpuServiceImpl extends ServiceImpl smErpStockEntity.getCurrentStock()) { + if (incrCount < 0 && Math.abs(incrCount) > smErpStockEntity.getCurrentStock()) { return R.failed(spu.getProductName() + "库存不足,无法完成操作"); } - UpdateStockDTO updateStockDTO = new UpdateStockDTO(spuId, v.getIncrCount()); + UpdateStockDTO updateStockDTO = new UpdateStockDTO(spuId, incrCount); updateStockDTOS.add(updateStockDTO); smErpStockService.updateStock(updateStockDTOS); - //todo 生成出入库记录 - SmErpInventoryRecordsEntity smErpInventoryRecordsEntity = new SmErpInventoryRecordsEntity(); - String s = sequence.nextNo(); - String result = InventoryTypeEnum.LSCK.getValue() + "-" + s; - smErpInventoryRecordsEntity.setInventoryCode(result); - smErpInventoryRecordsEntity.setInventoryDate(LocalDate.now()); - smErpInventoryRecordsEntity.setInventoryType(InventoryTypeEnum.LSCK.getType()); - smErpInventoryRecordsEntity.setOrderType(OrderTypeEnum.CK.getType()); - smErpInventoryRecordsEntity.setDeviceType(updateStockReqDTO.getDeviceType()); - smErpInventoryRecordsMapper.insert(smErpInventoryRecordsEntity); + //生成出入库记录 SmErpInventoryRecordsItemEntity smErpInventoryRecordsItemEntity = new SmErpInventoryRecordsItemEntity(); smErpInventoryRecordsItemEntity.setInventoryId(smErpInventoryRecordsEntity.getId()); smErpInventoryRecordsItemEntity.setErpSpuId(spuId); - smErpInventoryRecordsItemEntity.setQuantity(v.getIncrCount()); + smErpInventoryRecordsItemEntity.setQuantity(incrCount); smErpInventoryRecordsItemEntity.setUnitId(v.getId()); smErpInventoryRecordsItemEntity.setOrderType(OrderTypeEnum.CK.getType()); //todo 添加收款金额字段和会员卡号,用于记录零售业务 smErpInventoryRecordsItemEntity.setUnitPrice (smErpUnitEntity.getPromotionPrice()==null || smErpUnitEntity.getPromotionPrice()==0 ?smErpUnitEntity.getRetailPrice():smErpUnitEntity.getPromotionPrice()); - smErpInventoryRecordsItemMapper.insert(smErpInventoryRecordsItemEntity); + smErpInventoryRecordsItemEntityList.add(smErpInventoryRecordsItemEntity); } + smErpInventoryRecordsItemMapper.insert(smErpInventoryRecordsItemEntityList); return R.ok(); } From 21af312edd4cb2e5d9adec2bcbe659249970f139 Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Fri, 7 Mar 2025 15:10:53 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/SmErpInventoryRecordsEntity.java | 3 +++ .../service/impl/SmErpSpuServiceImpl.java | 13 ++++++++++--- .../mapper/SmErpInventoryRecordsMapper.xml | 1 + 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsEntity.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsEntity.java index 97ae11e38..01e9c9825 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsEntity.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/entity/SmErpInventoryRecordsEntity.java @@ -172,4 +172,7 @@ public class SmErpInventoryRecordsEntity extends Model smErpInventoryRecordsItemEntityList = new ArrayList<>(); for (SupermarketSpuUpdateStockReqDTO.Item v : updateStockReqDTO.getItems()) { @@ -281,12 +280,20 @@ public class SmErpSpuServiceImpl extends ServiceImpl smErpInventoryRecordsItemEntity.getUnitPrice()).mapToInt(Integer::intValue).sum(); + smErpInventoryRecordsEntity.setTotalAmount(sum); + smErpInventoryRecordsEntity.setReceiveAmount(sum); + //生成出入库记录 + smErpInventoryRecordsMapper.insert(smErpInventoryRecordsEntity); + smErpInventoryRecordsItemEntityList.forEach(smErpInventoryRecordsItemEntity -> { + smErpInventoryRecordsItemEntity.setInventoryId(smErpInventoryRecordsEntity.getId()); + }); smErpInventoryRecordsItemMapper.insert(smErpInventoryRecordsItemEntityList); return R.ok(); } diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/resources/mapper/SmErpInventoryRecordsMapper.xml b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/resources/mapper/SmErpInventoryRecordsMapper.xml index 9d00a4195..62052c9ba 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/resources/mapper/SmErpInventoryRecordsMapper.xml +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/resources/mapper/SmErpInventoryRecordsMapper.xml @@ -27,6 +27,7 @@ +