From e31f0c025a2d9d2d5b61a7537e7de6c72affed13 Mon Sep 17 00:00:00 2001 From: liujiang <569804566@qq.com> Date: Fri, 19 Sep 2025 21:42:42 +0800 Subject: [PATCH] =?UTF-8?q?master=EF=BC=9A=E5=BA=93=E5=AD=98=E7=9B=98?= =?UTF-8?q?=E7=82=B9=E8=8E=B7=E5=8F=96=E9=A2=9C=E8=89=B2=E5=B0=BA=E7=A0=81?= =?UTF-8?q?=E5=BA=93=E5=AD=98=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xkt/StoreProductStockController.java | 6 +- .../StoreProdStockTakeResVO.java | 50 ++++++++++++++ .../StoreProdStockTakeResDTO.java | 50 ++++++++++++++ .../service/IStoreProductStockService.java | 4 +- .../impl/StoreProductDemandServiceImpl.java | 7 +- .../impl/StoreProductStockServiceImpl.java | 68 +++++++++++++------ 6 files changed, 158 insertions(+), 27 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProdStock/StoreProdStockTakeResVO.java create mode 100644 xkt/src/main/java/com/ruoyi/xkt/dto/storeProductStock/StoreProdStockTakeResDTO.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductStockController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductStockController.java index c0ad352e8..3455e150b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductStockController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductStockController.java @@ -90,9 +90,9 @@ public class StoreProductStockController extends XktBaseController { } @ApiOperation(value = "根据货号查询档口商品库存", httpMethod = "GET", response = R.class) - @GetMapping(value = "/{storeId}/prod-art-num/{prodArtNum}") - public R> getByStoreIdAndProdArtNum(@PathVariable("storeId") Long storeId, @PathVariable("prodArtNum") String prodArtNum) { - return R.ok(BeanUtil.copyToList(storeProdStockService.selectByStoreIdAndProdArtNum(storeId, prodArtNum), StoreProdStockResVO.class)); + @GetMapping(value = "/{storeId}/store-prod-id/{storeProdId}") + public R getByStoreIdAndStoreProdId(@PathVariable("storeId") Long storeId, @PathVariable("storeProdId") Long storeProdId) { + return R.ok(BeanUtil.toBean(storeProdStockService.getByStoreIdAndStoreProdId(storeId, storeProdId), StoreProdStockTakeResVO.class)); } @PreAuthorize("@ss.hasAnyRoles('admin,general_admin,store')||@ss.hasSupplierSubRole()") diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProdStock/StoreProdStockTakeResVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProdStock/StoreProdStockTakeResVO.java new file mode 100644 index 000000000..cde50108d --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProdStock/StoreProdStockTakeResVO.java @@ -0,0 +1,50 @@ +package com.ruoyi.web.controller.xkt.vo.storeProdStock; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * @author liujiang + * @version v1.0 + * @date 2025/3/27 15:12 + */ +@Data +@Accessors(chain = true) +public class StoreProdStockTakeResVO { + + @ApiModelProperty(value = "档口商品ID") + private Long storeProdId; + @ApiModelProperty(value = "商品货号") + private String prodArtNum; + @ApiModelProperty(value = "颜色列表") + private List colorList; + + @Data + @ApiModel + @Accessors(chain = true) + public static class SPSTColorSizeVO { + @ApiModelProperty(value = "颜色ID") + private Long storeColorId; + @ApiModelProperty(value = "颜色名称") + private String colorName; + @ApiModelProperty(value = "尺码库存列表") + List sizeStockList; + } + + @Data + @ApiModel + @Accessors(chain = true) + public static class SPSTSizeStockVO { + @ApiModelProperty(value = "档口商品颜色尺码ID") + private Long storeProdColorSizeId; + @ApiModelProperty(value = "尺码尺码") + private Integer size; + @ApiModelProperty(value = "盘点库存") + private Integer stock; + } + +} diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductStock/StoreProdStockTakeResDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductStock/StoreProdStockTakeResDTO.java new file mode 100644 index 000000000..d93c56f49 --- /dev/null +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductStock/StoreProdStockTakeResDTO.java @@ -0,0 +1,50 @@ +package com.ruoyi.xkt.dto.storeProductStock; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.util.List; + +/** + * @author liujiang + * @version v1.0 + * @date 2025/3/27 15:12 + */ +@Data +@Accessors(chain = true) +public class StoreProdStockTakeResDTO { + + @ApiModelProperty(value = "档口商品ID") + private Long storeProdId; + @ApiModelProperty(value = "商品货号") + private String prodArtNum; + @ApiModelProperty(value = "颜色列表") + private List colorList; + + @Data + @ApiModel + @Accessors(chain = true) + public static class SPSTColorSizeDTO { + @ApiModelProperty(value = "颜色ID") + private Long storeColorId; + @ApiModelProperty(value = "颜色名称") + private String colorName; + @ApiModelProperty(value = "尺码库存列表") + List sizeStockList; + } + + @Data + @ApiModel + @Accessors(chain = true) + public static class SPSTSizeStockDTO { + @ApiModelProperty(value = "档口商品颜色尺码ID") + private Long storeProdColorSizeId; + @ApiModelProperty(value = "尺码尺码") + private Integer size; + @ApiModelProperty(value = "盘点库存") + private Integer stock; + } + +} diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductStockService.java b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductStockService.java index 0d778a182..56ae6c7ed 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductStockService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductStockService.java @@ -69,10 +69,10 @@ public interface IStoreProductStockService { * 根据档口ID和商品货号查询档口商品库存 * * @param storeId 档口ID - * @param prodArtNum 商品货号 + * @param storeProdId 档口商品ID * @return String */ - List selectByStoreIdAndProdArtNum(Long storeId, String prodArtNum); + StoreProdStockTakeResDTO getByStoreIdAndStoreProdId(Long storeId, Long storeProdId); /** * 销售出库,输入货号,查询客户优惠信息及当前货号颜色的库存 diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductDemandServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductDemandServiceImpl.java index 2db252043..c973f9c86 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductDemandServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductDemandServiceImpl.java @@ -634,7 +634,12 @@ public class StoreProductDemandServiceImpl implements IStoreProductDemandService .eq(StoreProductDemandDetail::getDelFlag, Constants.UNDELETED).eq(StoreProductDemandDetail::getStoreId, finishAllDTO.getStoreId()) .in(StoreProductDemandDetail::getId, finishAllDTO.getStoreProdDemandDetailIdList())); if (CollectionUtils.isEmpty(demandDetailList)) { - throw new ServiceException("没有找到任何需求单!", HttpStatus.ERROR); + throw new ServiceException("生产需求单不存在!", HttpStatus.ERROR); + } + // 如果生产需求单本来就是:已完成 状态,则不可再完成 + if (demandDetailList.stream().anyMatch(x -> Objects.equals(x.getDetailStatus(), DemandStatus.PRODUCTION_COMPLETE.getValue()))) { + throw new ServiceException(demandDetailList.stream().map(StoreProductDemandDetail::getProdArtNum).collect(Collectors.toList()) + + " 等生产需求单已处于已完成状态!", HttpStatus.ERROR); } // 调整状态为已完成 demandDetailList.forEach(demandDetail -> demandDetail.setDetailStatus(DemandStatus.PRODUCTION_COMPLETE.getValue())); diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductStockServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductStockServiceImpl.java index 4b6a2f4ac..444f98ffb 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductStockServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductStockServiceImpl.java @@ -9,6 +9,8 @@ import com.ruoyi.common.constant.HttpStatus; import com.ruoyi.common.core.page.Page; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.xkt.domain.StoreColor; +import com.ruoyi.xkt.domain.StoreProduct; import com.ruoyi.xkt.domain.StoreProductColorSize; import com.ruoyi.xkt.domain.StoreProductStock; import com.ruoyi.xkt.dto.storeProductFile.StoreProdMainPicDTO; @@ -46,6 +48,7 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService { final StoreCustomerProductDiscountMapper storeCusProdDiscMapper; final StoreProductMapper storeProdMapper; final StoreProductColorSizeMapper prodColorSizeMapper; + final StoreColorMapper storeColorMapper; /** @@ -116,18 +119,41 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService { /** * 根据档口ID和商品货号查询档口商品库存 * - * @param storeId 档口ID - * @param prodArtNum 商品货号 - * @return String + * @param storeId 档口ID + * @param storeProdId 商品ID + * @return StoreProdStockTakeResDTO */ @Override @Transactional(readOnly = true) - public List selectByStoreIdAndProdArtNum(Long storeId, String prodArtNum) { + public StoreProdStockTakeResDTO getByStoreIdAndStoreProdId(Long storeId, Long storeProdId) { + StoreProduct storeProd = Optional.ofNullable(this.storeProdMapper.selectById(storeProdId)).orElseThrow(() -> new ServiceException("该商品不存在", HttpStatus.ERROR)); + // 查询该商品所有颜色的库存 List stockList = this.storeProdStockMapper.selectList(new LambdaQueryWrapper() - .eq(StoreProductStock::getStoreId, storeId).eq(StoreProductStock::getProdArtNum, prodArtNum) + .eq(StoreProductStock::getStoreId, storeId).eq(StoreProductStock::getStoreProdId, storeProdId) .eq(StoreProductStock::getDelFlag, Constants.UNDELETED)); - return CollectionUtils.isEmpty(stockList) ? new ArrayList<>() - : stockList.stream().map(x -> BeanUtil.toBean(x, StoreProdStockResDTO.class).setStoreProdStockId(x.getId())).collect(Collectors.toList()); + // 商品颜色对应的库存map + Map colorSizeStockMap = stockList.stream().collect(Collectors.toMap(StoreProductStock::getStoreColorId, x -> x)); + // 档口商品颜色map + List storeColorList = this.storeColorMapper.selectList(new LambdaQueryWrapper() + .eq(StoreColor::getDelFlag, Constants.UNDELETED).eq(StoreColor::getStoreId, storeId)); + Map storeColorMap = storeColorList.stream().collect(Collectors.toMap(StoreColor::getId, x -> x)); + // 获取商品所有颜色的基础信息 + List prodColorSizeList = this.prodColorSizeMapper.selectList(new LambdaQueryWrapper() + .eq(StoreProductColorSize::getDelFlag, Constants.UNDELETED).eq(StoreProductColorSize::getStoreProdId, storeProdId)); + Map> colorSizeMap = prodColorSizeList.stream().collect(Collectors.groupingBy(StoreProductColorSize::getStoreColorId)); + List colorResList = new ArrayList<>(); + colorSizeMap.forEach((colorId, colorSizeList) -> { + // 商品颜色数据 + StoreProdStockTakeResDTO.SPSTColorSizeDTO color = new StoreProdStockTakeResDTO.SPSTColorSizeDTO() + .setStoreColorId(colorId).setColorName(storeColorMap.containsKey(colorId) ? storeColorMap.get(colorId).getColorName() : "") + // 商品对应颜色的库存 + .setSizeStockList(colorSizeList.stream().sorted(Comparator.comparing(StoreProductColorSize::getSize)) + .map(x -> new StoreProdStockTakeResDTO.SPSTSizeStockDTO().setStoreProdColorSizeId(x.getId()).setSize(x.getSize()) + .setStock(this.getSizeStock(x.getSize(), colorSizeStockMap.get(colorId)))) + .collect(Collectors.toList())); + colorResList.add(color); + }); + return new StoreProdStockTakeResDTO().setStoreProdId(storeProdId).setProdArtNum(storeProd.getProdArtNum()).setColorList(colorResList); } /** @@ -516,33 +542,33 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService { if (ObjectUtils.isEmpty(stock)) { return null; } - if (size == 30) { + if (Objects.equals(size, SIZE_30)) { return stock.getSize30(); - } else if (size == 31) { + } else if (Objects.equals(size, SIZE_31)) { return stock.getSize31(); - } else if (size == 32) { + } else if (Objects.equals(size, SIZE_32)) { return stock.getSize32(); - } else if (size == 33) { + } else if (Objects.equals(size, SIZE_33)) { return stock.getSize33(); - } else if (size == 34) { + } else if (Objects.equals(size, SIZE_34)) { return stock.getSize34(); - } else if (size == 35) { + } else if (Objects.equals(size, SIZE_35)) { return stock.getSize35(); - } else if (size == 36) { + } else if (Objects.equals(size, SIZE_36)) { return stock.getSize36(); - } else if (size == 37) { + } else if (Objects.equals(size, SIZE_37)) { return stock.getSize37(); - } else if (size == 38) { + } else if (Objects.equals(size, SIZE_38)) { return stock.getSize38(); - } else if (size == 39) { + } else if (Objects.equals(size, SIZE_39)) { return stock.getSize39(); - } else if (size == 40) { + } else if (Objects.equals(size, SIZE_40)) { return stock.getSize40(); - } else if (size == 41) { + } else if (Objects.equals(size, SIZE_41)) { return stock.getSize41(); - } else if (size == 42) { + } else if (Objects.equals(size, SIZE_42)) { return stock.getSize42(); - } else if (size == 43) { + } else if (Objects.equals(size, SIZE_43)) { return stock.getSize43(); } return null;