From 6750e811b130b5ebb5d59dbe046db50df024fd50 Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Wed, 12 Mar 2025 17:21:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=87=BA=E5=85=A5=E5=BA=93?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E4=BF=AE=E6=94=B9=E5=BA=93=E5=AD=98=EF=BC=8C?= =?UTF-8?q?=E7=9B=98=E7=82=B9=E6=9B=B4=E6=96=B0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/inventoryrecords/PDItemUpdateDTO.java | 78 +++++++++++ .../dto/inventoryrecords/PDUpdateDTO.java | 67 +++++++++ .../SmErpInventoryRecordsController.java | 10 ++ .../service/SmErpInventoryRecordsService.java | 13 +- .../SmErpInventoryRecordsServiceImpl.java | 129 +++++++++++++++++- .../service/impl/SmErpSpuServiceImpl.java | 6 + 6 files changed, 298 insertions(+), 5 deletions(-) create mode 100644 pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/PDItemUpdateDTO.java create mode 100644 pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/PDUpdateDTO.java diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/PDItemUpdateDTO.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/PDItemUpdateDTO.java new file mode 100644 index 000000000..f3f8c6a0a --- /dev/null +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/PDItemUpdateDTO.java @@ -0,0 +1,78 @@ +package com.bsd.pjcloud.supermarket.dto.inventoryrecords; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * + * + * @author zjf + * @date 2025-02-11 17:11:41 + */ +@Data +@Schema(description = "盘点-item") +public class PDItemUpdateDTO { + + + /** + * 库存商品id + */ + @Schema(description="库存商品id") + private Long erpSpuId; + + + @Schema(description="账面数量") + private Double accountNumber; + + @Schema(description="实际数量") + private Double realNumber; + + @Schema(description="账面单价") + private Integer unitPrice; + + + /** + * 数据库意思就是实际单价,这里等价于盘点单价 + */ + @Schema(description="盘点单价") + private Integer realPrice; + /** + * 盘盈盘亏 + */ + @Schema(description="盈") + private Double profit; + + /** + * 盘盈盘亏 + */ + @Schema(description="亏") + private Double loss; + + + + @Schema(description="盘后总数") + private Integer totalNumber; + + /** + * 累计总金额 + */ + @Schema(description="盘后总金额") + private Integer totalAmount; + + + /** + * 1等于盘盈 2等于盘亏 + */ + @Schema(description="订单类型,1入库,2出库") + @NotNull + private String orderType; + + /** + * 备注 + */ + @Schema(description="备注") + private String remark; + + +} \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/PDUpdateDTO.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/PDUpdateDTO.java new file mode 100644 index 000000000..0ac0ed3a5 --- /dev/null +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/PDUpdateDTO.java @@ -0,0 +1,67 @@ +package com.bsd.pjcloud.supermarket.dto.inventoryrecords; + + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.time.LocalDate; +import java.util.List; + +/** + * + * 新增一个采购计划 + */ +@Data +@Schema(description = "盘点保存对象") +public class PDUpdateDTO { + + + @Schema(description="id") + @NotNull + private Long id; + /** + * 采编号 + */ + @Schema(description="编号") + private String inventoryCode; + + /** + * 采购计划单据日期 + */ + @Schema(description="单据日期") + private LocalDate inventoryDate; + + /** + * 仓库id + */ + @Schema(description="仓库id") + private String warehouseId; + + /** + * 经办人id + */ + @Schema(description="经办人id") + private Long handlerUserId; + + + + /** + * 备注 + */ + @Schema(description="备注") + private String remark; + + + + /** + * @Link SmCgPlanSaveItemDTO + */ + @Schema(description="盘点-item") + @NotNull + private List items; + + + + +} 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 8d56b777d..e9beafcba 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 @@ -264,4 +264,14 @@ public class SmErpInventoryRecordsController { public R getPDById(@PathVariable("id" ) Long id) { return R.ok(smErpInventoryRecordsService.getPDDetailById(id)); } + + + + @Operation(summary = "修改盘点" , description = "修改盘点" ) + @SysLog("修改出入库记录表" ) + @PutMapping("updatePD") + @PreAuthorize("@pms.hasPermission('supermarket_smErpInventoryRecords_edit')" ) + public R updatePDById(@RequestBody PDUpdateDTO pdfUpdateDTO) { + return R.ok(smErpInventoryRecordsService.updateIPD(pdfUpdateDTO)); + } } \ No newline at end of file diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpInventoryRecordsService.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpInventoryRecordsService.java index e426abf43..85e24fa2e 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpInventoryRecordsService.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/SmErpInventoryRecordsService.java @@ -3,10 +3,7 @@ package com.bsd.pjcloud.supermarket.service; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryDetailQueryDTO; -import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordEditDTO; -import com.bsd.pjcloud.supermarket.dto.inventoryrecords.InventoryRecordSaveDTO; -import com.bsd.pjcloud.supermarket.dto.inventoryrecords.PDSaveDTO; +import com.bsd.pjcloud.supermarket.dto.inventoryrecords.*; import com.bsd.pjcloud.supermarket.entity.SmErpInventoryRecordsEntity; import java.util.ArrayList; @@ -93,4 +90,12 @@ public interface SmErpInventoryRecordsService extends IService items = inventoryRecordEditDTO.getItems(); - List smErpInventoryRecordsItemEntityList = BeanUtils.toBean(items, SmErpInventoryRecordsItemEntity.class); + List updateStockDTOS = new ArrayList<>(); + List smErpInventoryRecordsItemEntityList = new ArrayList<>(); + + for (InventoryRecordEditItemDTO item : items){ + SmErpInventoryRecordsItemEntity smErpInventoryRecordsItemEntity = new SmErpInventoryRecordsItemEntity(); + org.springframework.beans.BeanUtils.copyProperties(item,smErpInventoryRecordsItemEntity); + //库存更新对象 + UpdateStockDTO updateStockDTO = new UpdateStockDTO(); + updateStockDTO.setId(item.getErpSpuId()); + Double quantity = item.getQuantity(); + String orderType = item.getOrderType(); + smErpInventoryRecordsItemEntity.setOrderType(orderType); + if (orderType.equals(OrderTypeEnum.RK.getType())){ + updateStockDTO.setIncrCount(quantity); + }else if (orderType.equals(OrderTypeEnum.CK.getType())){ + updateStockDTO.setIncrCount(-quantity); + }else { + throw new RuntimeException("订单类型错误"); + } + + smErpInventoryRecordsItemEntityList.add(smErpInventoryRecordsItemEntity); + updateStockDTOS.add(updateStockDTO); + + } + List insertItems = smErpInventoryRecordsItemEntityList.stream(). filter(smErpInventoryRecordsItemEntity -> smErpInventoryRecordsItemEntity.getId() == null).collect(Collectors.toList()); List updateItems = smErpInventoryRecordsItemEntityList.stream(). filter(smErpInventoryRecordsItemEntity -> smErpInventoryRecordsItemEntity.getId() != null).collect(Collectors.toList()); + + + //更新的话,查询之前保存了哪些item,然后去库存表删掉从新计算库存 + List dataBaseSmErpInventoryRecordsItemEntityList = smErpInventoryRecordsItemMapper + .selectList(new LambdaQueryWrapper().eq(SmErpInventoryRecordsItemEntity::getInventoryId, inventoryRecordEditDTO.getId())); + + //这部分是数据库原本添加的库存数据,需要全部减掉,重新添加更新的库存数据进去 + dataBaseSmErpInventoryRecordsItemEntityList.forEach(item -> { + UpdateStockDTO updateStockDTO = new UpdateStockDTO(); + updateStockDTO.setId(item.getErpSpuId()); + updateStockDTO.setIncrCount(-item.getQuantity()); + updateStockDTOS.add(updateStockDTO); + }); + + smErpInventoryRecordsItemMapper.updateById(updateItems); smErpInventoryRecordsItemMapper.insert(insertItems); @@ -370,6 +409,9 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl items = pdfUpdateDTO.getItems(); + + List updateStockDTOS = new ArrayList<>(); + List smErpInventoryRecordsItemEntityList = new ArrayList<>(); + for (PDItemUpdateDTO item : items){ + //库存更新对象 + UpdateStockDTO updateStockDTO = new UpdateStockDTO(); + updateStockDTO.setId(item.getErpSpuId()); + //出入库对象 + SmErpInventoryRecordsItemEntity smErpInventoryRecordsItemEntity = new SmErpInventoryRecordsItemEntity(); + org.springframework.beans.BeanUtils.copyProperties(item,smErpInventoryRecordsItemEntity); + String orderType = item.getOrderType(); + smErpInventoryRecordsItemEntity.setOrderType(orderType); + if (orderType.equals(OrderTypeEnum.RK.getType())){ + Double profit = item.getProfit(); + updateStockDTO.setIncrCount(profit); + smErpInventoryRecordsItemEntity.setQuantity(profit); + }else if (orderType.equals(OrderTypeEnum.CK.getType())){ + Double loss = item.getLoss(); + updateStockDTO.setIncrCount(loss); + smErpInventoryRecordsItemEntity.setQuantity(loss); + }else { + throw new RuntimeException("订单类型错误"); + } + + smErpInventoryRecordsItemEntityList.add(smErpInventoryRecordsItemEntity); + updateStockDTOS.add(updateStockDTO); + } + + + + List insertItems = smErpInventoryRecordsItemEntityList.stream(). + filter(smErpInventoryRecordsItemEntity -> smErpInventoryRecordsItemEntity.getId() == null).collect(Collectors.toList()); + List updateItems = smErpInventoryRecordsItemEntityList.stream(). + filter(smErpInventoryRecordsItemEntity -> smErpInventoryRecordsItemEntity.getId() != null).collect(Collectors.toList()); + + //更新的话,查询之前保存了哪些item,然后减去之前出入的库存。从新计算库存 + List dataBaseSmErpInventoryRecordsItemEntityList = smErpInventoryRecordsItemMapper + .selectList(new LambdaQueryWrapper().eq(SmErpInventoryRecordsItemEntity::getInventoryId, pdfUpdateDTO.getId())); + + //这部分是数据库原本添加的库存数据,需要全部减掉,重新添加更新的库存数据进去 + dataBaseSmErpInventoryRecordsItemEntityList.forEach(item -> { + UpdateStockDTO updateStockDTO = new UpdateStockDTO(); + updateStockDTO.setId(item.getErpSpuId()); + updateStockDTO.setIncrCount(-item.getQuantity()); + updateStockDTOS.add(updateStockDTO); + }); + + smErpInventoryRecordsItemMapper.updateById(updateItems); + smErpInventoryRecordsItemMapper.insert(insertItems); + + List existingCodeIds = smErpInventoryRecordsItemMapper.selectList( + new LambdaQueryWrapper() + .eq(SmErpInventoryRecordsItemEntity::getInventoryId, smErpInventoryRecordsEntity.getId()) + ).stream().map(SmErpInventoryRecordsItemEntity::getId).collect(Collectors.toList()); + + // 收集本次提交的ID(排除新增的) + List submittedCodeIds = updateItems.stream() + .map(SmErpInventoryRecordsItemEntity::getId) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + // 计算需要删除的ID + List toDeleteCodeIds = existingCodeIds.stream() + .filter(id -> !submittedCodeIds.contains(id)) + .collect(Collectors.toList()); + + // 批量删除失效条码 + if (!toDeleteCodeIds.isEmpty()) { + smErpInventoryRecordsItemMapper.deleteByIds(toDeleteCodeIds); + } + + //todo 实际上应该审批后才会入库 + //更新库存 + smErpStockService.updateStock(updateStockDTOS); + + return i; + } + } \ No newline at end of file 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 48b720ae2..0f61f336b 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 @@ -96,6 +96,12 @@ public class SmErpSpuServiceImpl extends ServiceImpl().eq(SmErpSpuEntity::getProductCode, supermarketSpu.getProductCode())) != null) { + return R.failed("货号为" + supermarketSpu.getProductCode() + "的货号已存在"); + } + baseMapper.insert(supermarketSpu); //库存表