From b8ecc6ff3a47a7712ab70aa043cbad119c1fab83 Mon Sep 17 00:00:00 2001 From: liujiang <569804566@qq.com> Date: Fri, 16 May 2025 00:37:34 +0800 Subject: [PATCH] =?UTF-8?q?master=EF=BC=9A=E5=85=A5=E5=BA=93=E5=8D=95?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E8=8E=B7=E5=8F=96=E9=9C=80=E6=B1=82=E6=8A=B5?= =?UTF-8?q?=E6=89=A3=E6=98=8E=E7=BB=86=E5=88=97=E8=A1=A8=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...eProductStorageDemandDeductController.java | 43 +++++++ ...ProductStorageDemandDeducteController.java | 21 ---- .../StoreProdDemandQuantityVO.java | 2 +- .../StoreProdStorageDemandDeductVO.java | 82 +++++++++++++ .../StoreProdDemandQuantityDTO.java | 28 ++--- .../StoreProdStorageDemandDeductDTO.java | 84 ++++++++++++++ ...oreProductStorageDemandDeducteService.java | 13 +++ .../impl/StoreProductDemandServiceImpl.java | 28 ++--- ...roductStorageDemandDeducteServiceImpl.java | 109 +++++++++++++++++- 9 files changed, 357 insertions(+), 53 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductStorageDemandDeductController.java delete mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductStorageDemandDeducteController.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProductStorageDemandDeduct/StoreProdStorageDemandDeductVO.java create mode 100644 xkt/src/main/java/com/ruoyi/xkt/dto/storeProductStorageDemandDeduct/StoreProdStorageDemandDeductDTO.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductStorageDemandDeductController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductStorageDemandDeductController.java new file mode 100644 index 000000000..b73ce101a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductStorageDemandDeductController.java @@ -0,0 +1,43 @@ +package com.ruoyi.web.controller.xkt; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.core.controller.XktBaseController; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.web.controller.xkt.vo.storeProductDemand.StoreProdDemandQuantityVO; +import com.ruoyi.web.controller.xkt.vo.storeProductStorageDemandDeduct.StoreProdStorageDemandDeductVO; +import com.ruoyi.xkt.service.IStoreProductStorageDemandDeducteService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * 档口商品入库抵扣需求Controller + * + * @author ruoyi + * @date 2025-03-26 + */ +@Api(tags = "档口商品入库抵扣需求") +@RestController +@RequiredArgsConstructor +@RequestMapping("/rest/v1/storages-demand-deducts") +public class StoreProductStorageDemandDeductController extends XktBaseController { + + final IStoreProductStorageDemandDeducteService prodStorageDemandDeductService; + + /** + * 入库单列表获取抵扣需求明细 + */ + @ApiOperation(value = "入库单列表获取抵扣需求明细", httpMethod = "GET", response = R.class) + @GetMapping(value = "/{storeId}/{storageCode}") + public R getStorageDemandDeductList(@PathVariable ("storeId") Long storeId, @PathVariable("storageCode") String storageCode) { + return R.ok(BeanUtil.toBean(prodStorageDemandDeductService.getStorageDemandDeductList(storeId, storageCode), StoreProdStorageDemandDeductVO.class)); + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductStorageDemandDeducteController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductStorageDemandDeducteController.java deleted file mode 100644 index 945bac63c..000000000 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductStorageDemandDeducteController.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.ruoyi.web.controller.xkt; - -import com.ruoyi.common.core.controller.XktBaseController; -import com.ruoyi.xkt.service.IStoreProductStorageDemandDeducteService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 档口商品入库抵扣需求Controller - * - * @author ruoyi - * @date 2025-03-26 - */ -@RestController -@RequestMapping("/rest/v1/storages-demand-deductes") -public class StoreProductStorageDemandDeducteController extends XktBaseController { - @Autowired - private IStoreProductStorageDemandDeducteService storeProductStorageDemandDeducteService; - -} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProductDemand/StoreProdDemandQuantityVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProductDemand/StoreProdDemandQuantityVO.java index 57161ddb5..d3ae8ccd8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProductDemand/StoreProdDemandQuantityVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProductDemand/StoreProdDemandQuantityVO.java @@ -17,7 +17,7 @@ import java.util.List; @Builder public class StoreProdDemandQuantityVO { - @ApiModelProperty(value = "货号") + @ApiModelProperty(value = "档口ID") private Long storeId; @ApiModelProperty(value = "档口商品ID") private Long storeProdId; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProductStorageDemandDeduct/StoreProdStorageDemandDeductVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProductStorageDemandDeduct/StoreProdStorageDemandDeductVO.java new file mode 100644 index 000000000..0ec7ade8e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProductStorageDemandDeduct/StoreProdStorageDemandDeductVO.java @@ -0,0 +1,82 @@ +package com.ruoyi.web.controller.xkt.vo.storeProductStorageDemandDeduct; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * @author liujiang + * @version v1.0 + * @date 2025/3/27 15:12 + */ +@ApiModel("入库单获取入库单据抵扣需求明细") +@Data +@Builder +public class StoreProdStorageDemandDeductVO { + + @ApiModelProperty(name = "入库code") + private String storageCode; + @ApiModelProperty(name = "入库类型 1 PROD_STORAGE 其它入库 2 OTHER_STORAGE 维修入库 3 REPAIR_STORAGE") + private Integer storageType; + @ApiModelProperty(value = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + @ApiModelProperty(name = "入库总数量") + private Integer quantity; + @ApiModelProperty(name = "生产成本金额") + private BigDecimal produceAmount; + @ApiModelProperty(name = "抵扣明细列表") + List detailList; + + @Data + @ApiModel(value = "抵扣明细列表") + @Accessors(chain = true) + public static class SPSDDDemandDetailVO { + @ApiModelProperty("档口入库需求抵扣ID") + private Long spsddId; + @ApiModelProperty(value = "货号") + private String prodArtNum; + @ApiModelProperty(value = "颜色") + private String colorName; + @ApiModelProperty(value = "需求code列表") + List demandCodeList; + @ApiModelProperty(value = "数量对比列") + private List compareStrList; + @ApiModelProperty(value = "尺码为30的数量") + private List size30List; + @ApiModelProperty(value = "尺码为31的数量") + private List size31List; + @ApiModelProperty(value = "尺码为32的数量") + private List size32List; + @ApiModelProperty(value = "尺码为33的数量") + private List size33List; + @ApiModelProperty(value = "尺码为34的数量") + private List size34List; + @ApiModelProperty(value = "尺码为35的数量") + private List size35List; + @ApiModelProperty(value = "尺码为36的数量") + private List size36List; + @ApiModelProperty(value = "尺码为37的数量") + private List size37List; + @ApiModelProperty(value = "尺码为38的数量") + private List size38List; + @ApiModelProperty(value = "尺码为39的数量") + private List size39List; + @ApiModelProperty(value = "尺码为40的数量") + private List size40List; + @ApiModelProperty(value = "尺码为41的数量") + private List size41List; + @ApiModelProperty(value = "尺码为42的数量") + private List size42List; + @ApiModelProperty(value = "尺码为43的数量") + private List size43List; + } + +} diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductDemand/StoreProdDemandQuantityDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductDemand/StoreProdDemandQuantityDTO.java index 5253d29a7..057c2e050 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductDemand/StoreProdDemandQuantityDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductDemand/StoreProdDemandQuantityDTO.java @@ -34,32 +34,32 @@ public class StoreProdDemandQuantityDTO { @ApiModelProperty(value = "数量对比列") private List compareStrList; @ApiModelProperty(value = "尺码为30的数量") - private List size30List; + private List size30List; @ApiModelProperty(value = "尺码为31的数量") - private List size31List; + private List size31List; @ApiModelProperty(value = "尺码为32的数量") - private List size32List; + private List size32List; @ApiModelProperty(value = "尺码为33的数量") - private List size33List; + private List size33List; @ApiModelProperty(value = "尺码为34的数量") - private List size34List; + private List size34List; @ApiModelProperty(value = "尺码为35的数量") - private List size35List; + private List size35List; @ApiModelProperty(value = "尺码为36的数量") - private List size36List; + private List size36List; @ApiModelProperty(value = "尺码为37的数量") - private List size37List; + private List size37List; @ApiModelProperty(value = "尺码为38的数量") - private List size38List; + private List size38List; @ApiModelProperty(value = "尺码为39的数量") - private List size39List; + private List size39List; @ApiModelProperty(value = "尺码为40的数量") - private List size40List; + private List size40List; @ApiModelProperty(value = "尺码为41的数量") - private List size41List; + private List size41List; @ApiModelProperty(value = "尺码为42的数量") - private List size42List; + private List size42List; @ApiModelProperty(value = "尺码为43的数量") - private List size43List; + private List size43List; } diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductStorageDemandDeduct/StoreProdStorageDemandDeductDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductStorageDemandDeduct/StoreProdStorageDemandDeductDTO.java new file mode 100644 index 000000000..e0049e955 --- /dev/null +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductStorageDemandDeduct/StoreProdStorageDemandDeductDTO.java @@ -0,0 +1,84 @@ +package com.ruoyi.xkt.dto.storeProductStorageDemandDeduct; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * @author liujiang + * @version v1.0 + * @date 2025/3/27 15:12 + */ +@ApiModel("入库单获取入库单据抵扣需求明细") +@Data +@Builder +@Accessors(chain = true) +public class StoreProdStorageDemandDeductDTO { + + @ApiModelProperty(name = "入库code") + private String storageCode; + @ApiModelProperty(name = "入库类型 1 PROD_STORAGE 其它入库 2 OTHER_STORAGE 维修入库 3 REPAIR_STORAGE") + private Integer storageType; + @ApiModelProperty(value = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + @ApiModelProperty(name = "入库总数量") + private Integer quantity; + @ApiModelProperty(name = "生产成本金额") + private BigDecimal produceAmount; + @ApiModelProperty(name = "抵扣明细列表") + List detailList; + + @Data + @ApiModel(value = "抵扣明细列表") + @Accessors(chain = true) + @Builder + public static class SPSDDDemandDetailDTO { + @ApiModelProperty("档口入库需求抵扣ID") + private Long spsddId; + @ApiModelProperty(value = "货号") + private String prodArtNum; + @ApiModelProperty(value = "颜色") + private String colorName; + @ApiModelProperty(value = "需求code列表") + List demandCodeList; + @ApiModelProperty(value = "数量对比列") + private List compareStrList; + @ApiModelProperty(value = "尺码为30的数量") + private List size30List; + @ApiModelProperty(value = "尺码为31的数量") + private List size31List; + @ApiModelProperty(value = "尺码为32的数量") + private List size32List; + @ApiModelProperty(value = "尺码为33的数量") + private List size33List; + @ApiModelProperty(value = "尺码为34的数量") + private List size34List; + @ApiModelProperty(value = "尺码为35的数量") + private List size35List; + @ApiModelProperty(value = "尺码为36的数量") + private List size36List; + @ApiModelProperty(value = "尺码为37的数量") + private List size37List; + @ApiModelProperty(value = "尺码为38的数量") + private List size38List; + @ApiModelProperty(value = "尺码为39的数量") + private List size39List; + @ApiModelProperty(value = "尺码为40的数量") + private List size40List; + @ApiModelProperty(value = "尺码为41的数量") + private List size41List; + @ApiModelProperty(value = "尺码为42的数量") + private List size42List; + @ApiModelProperty(value = "尺码为43的数量") + private List size43List; + } + +} diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductStorageDemandDeducteService.java b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductStorageDemandDeducteService.java index 1cb526c8d..c9323f7bc 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductStorageDemandDeducteService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductStorageDemandDeducteService.java @@ -1,5 +1,9 @@ package com.ruoyi.xkt.service; +import com.ruoyi.xkt.dto.storeProductStorageDemandDeduct.StoreProdStorageDemandDeductDTO; + +import java.util.List; + /** * 档口商品入库抵扣需求Service接口 * @@ -8,4 +12,13 @@ package com.ruoyi.xkt.service; */ public interface IStoreProductStorageDemandDeducteService { + /** + * 入库单列表获取抵扣需求明细列表 + * + * @param storeId 档口ID + * @param storageCode 入库单号 + * @return List + */ + StoreProdStorageDemandDeductDTO getStorageDemandDeductList(Long storeId, String storageCode); + } 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 cdcab8394..ac8294218 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 @@ -99,20 +99,20 @@ public class StoreProductDemandServiceImpl implements IStoreProductDemandService Integer size41Demand = Optional.ofNullable(demandDetailList).map(x -> x.stream().map(StoreProductDemandDetail::getSize41).reduce(0, Integer::sum)).orElse(0); Integer size42Demand = Optional.ofNullable(demandDetailList).map(x -> x.stream().map(StoreProductDemandDetail::getSize42).reduce(0, Integer::sum)).orElse(0); Integer size43Demand = Optional.ofNullable(demandDetailList).map(x -> x.stream().map(StoreProductDemandDetail::getSize43).reduce(0, Integer::sum)).orElse(0); - List size30List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize30()) ? stock.getSize30().toString() : Constants.UNDELETED, size30Demand.toString()); - List size31List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize31()) ? stock.getSize31().toString() : Constants.UNDELETED, size31Demand.toString()); - List size32List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize32()) ? stock.getSize32().toString() : Constants.UNDELETED, size32Demand.toString()); - List size33List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize33()) ? stock.getSize33().toString() : Constants.UNDELETED, size33Demand.toString()); - List size34List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize34()) ? stock.getSize34().toString() : Constants.UNDELETED, size34Demand.toString()); - List size35List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize35()) ? stock.getSize35().toString() : Constants.UNDELETED, size35Demand.toString()); - List size36List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize36()) ? stock.getSize36().toString() : Constants.UNDELETED, size36Demand.toString()); - List size37List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize37()) ? stock.getSize37().toString() : Constants.UNDELETED, size37Demand.toString()); - List size38List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize38()) ? stock.getSize38().toString() : Constants.UNDELETED, size38Demand.toString()); - List size39List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize39()) ? stock.getSize39().toString() : Constants.UNDELETED, size39Demand.toString()); - List size40List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize40()) ? stock.getSize40().toString() : Constants.UNDELETED, size40Demand.toString()); - List size41List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize41()) ? stock.getSize41().toString() : Constants.UNDELETED, size41Demand.toString()); - List size42List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize42()) ? stock.getSize42().toString() : Constants.UNDELETED, size42Demand.toString()); - List size43List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize43()) ? stock.getSize43().toString() : Constants.UNDELETED, size43Demand.toString()); + List size30List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize30()) ? stock.getSize30() : 0, size30Demand); + List size31List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize31()) ? stock.getSize31() : 0, size31Demand); + List size32List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize32()) ? stock.getSize32() : 0, size32Demand); + List size33List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize33()) ? stock.getSize33() : 0, size33Demand); + List size34List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize34()) ? stock.getSize34() : 0, size34Demand); + List size35List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize35()) ? stock.getSize35() : 0, size35Demand); + List size36List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize36()) ? stock.getSize36() : 0, size36Demand); + List size37List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize37()) ? stock.getSize37() : 0, size37Demand); + List size38List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize38()) ? stock.getSize38() : 0, size38Demand); + List size39List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize39()) ? stock.getSize39() : 0, size39Demand); + List size40List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize40()) ? stock.getSize40() : 0, size40Demand); + List size41List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize41()) ? stock.getSize41() : 0, size41Demand); + List size42List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize42()) ? stock.getSize42() : 0, size42Demand); + List size43List = Arrays.asList(ObjectUtils.isNotEmpty(stock) && ObjectUtils.isNotEmpty(stock.getSize43()) ? stock.getSize43() : 0, size43Demand); return StoreProdDemandQuantityDTO.builder().storeId(storeId).storeProdId(storeProd.getId()).storeProdColorId(prodColor.getId()) .prodArtNum(storeProd.getProdArtNum()).colorName(prodColor.getColorName()).compareStrList(compareStrList) // 判断 demandDetailList 中是否有 createTime 为当天的对象 diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductStorageDemandDeducteServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductStorageDemandDeducteServiceImpl.java index 70ccea6e6..870c51a2b 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductStorageDemandDeducteServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductStorageDemandDeducteServiceImpl.java @@ -1,9 +1,28 @@ package com.ruoyi.xkt.service.impl; +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.HttpStatus; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.xkt.domain.StoreProductStorage; +import com.ruoyi.xkt.domain.StoreProductStorageDemandDeduct; +import com.ruoyi.xkt.domain.StoreProductStorageDetail; +import com.ruoyi.xkt.dto.storeProductStorageDemandDeduct.StoreProdStorageDemandDeductDTO; import com.ruoyi.xkt.mapper.StoreProductStorageDemandDeductMapper; +import com.ruoyi.xkt.mapper.StoreProductStorageDetailMapper; +import com.ruoyi.xkt.mapper.StoreProductStorageMapper; import com.ruoyi.xkt.service.IStoreProductStorageDemandDeducteService; -import org.springframework.beans.factory.annotation.Autowired; +import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +import static com.ruoyi.common.constant.Constants.*; /** * 档口商品入库抵扣需求Service业务层处理 @@ -12,9 +31,93 @@ import org.springframework.stereotype.Service; * @date 2025-03-26 */ @Service +@RequiredArgsConstructor public class StoreProductStorageDemandDeducteServiceImpl implements IStoreProductStorageDemandDeducteService { - @Autowired - private StoreProductStorageDemandDeductMapper storeProductStorageDemandDeducteMapper; + + final StoreProductStorageMapper prodStorageMapper; + final StoreProductStorageDetailMapper productStorageDetailMapper; + final StoreProductStorageDemandDeductMapper prodStorageDemandDeductMapper; + + + /** + * 入库单列表获取抵扣需求明细列表 + * + * @param storeId 档口ID + * @param storageCode 入库单号 + * @return List + */ + @Override + @Transactional(readOnly = true) + public StoreProdStorageDemandDeductDTO getStorageDemandDeductList(Long storeId, String storageCode) { + // 根据storageCode找到入库单 + StoreProductStorage storage = Optional.ofNullable(this.prodStorageMapper.selectOne(new LambdaQueryWrapper() + .eq(StoreProductStorage::getCode, storageCode).eq(StoreProductStorage::getStoreId, storeId) + .eq(StoreProductStorage::getDelFlag, Constants.UNDELETED))) + .orElseThrow(() -> new ServiceException("档口商品入库不存在!", HttpStatus.ERROR)); + List storageDetailList = this.productStorageDetailMapper.selectList(new LambdaQueryWrapper() + .eq(StoreProductStorageDetail::getStoreProdStorId, storage.getId()).eq(StoreProductStorageDetail::getDelFlag, Constants.UNDELETED)); + List demandDeductList = this.prodStorageDemandDeductMapper.selectList(new LambdaQueryWrapper() + .eq(StoreProductStorageDemandDeduct::getStorageCode, storageCode).eq(StoreProductStorageDemandDeduct::getDelFlag, Constants.UNDELETED)); + StoreProdStorageDemandDeductDTO dto = BeanUtil.toBean(storage, StoreProdStorageDemandDeductDTO.class).setStorageCode(storageCode); + if (CollectionUtils.isEmpty(demandDeductList)) { + return dto; + } + Map> demandDeductMap = demandDeductList.stream().collect(Collectors.groupingBy(StoreProductStorageDemandDeduct::getStoreProdStorageDetailId)); + List demandDetailDTOList = storageDetailList.stream().map(storageDetail -> { + List demandDetailList = demandDeductMap.get(storageDetail.getId()); + if (CollectionUtils.isEmpty(demandDetailList)) { + return StoreProdStorageDemandDeductDTO.SPSDDDemandDetailDTO.builder() + .prodArtNum(storageDetail.getProdArtNum()).colorName(storageDetail.getColorName()) + .build(); + } + // 抵扣的需求明细列表 再按照code进行分类 + Map> demandSizeMap = demandDetailList.stream().collect(Collectors.groupingBy(StoreProductStorageDemandDeduct::getDemandCode)); + // 生产需求单号列 + final List demandCodeList = new ArrayList(){{ + add(""); + // 生产需求单号列表 + demandDetailList.stream().map(StoreProductStorageDemandDeduct::getDemandCode).distinct().sorted(Comparator.comparing(x -> x)).forEach(this::add); + }}; + // 初始化数量对比 列 + List compareNumStrList = new ArrayList(){{ + add("入库数量"); + // 根据生产需求单号数量 生成 对应的 抵扣数量 + demandDetailList.stream().map(StoreProductStorageDemandDeduct::getDemandCode).distinct().forEach(x -> this.add("抵扣需求数量")); + }}; + return StoreProdStorageDemandDeductDTO.SPSDDDemandDetailDTO.builder().spsddId(storageDetail.getId()) + .prodArtNum(storageDetail.getProdArtNum()).colorName(storageDetail.getColorName()) + .demandCodeList(demandCodeList).compareStrList(compareNumStrList) + .size30List(this.getSizeQuantityList(demandCodeList, demandSizeMap, SIZE_30)) + .size31List(this.getSizeQuantityList(demandCodeList, demandSizeMap, SIZE_31)) + .size32List(this.getSizeQuantityList(demandCodeList, demandSizeMap, SIZE_32)) + .size33List(this.getSizeQuantityList(demandCodeList, demandSizeMap, SIZE_33)) + .size34List(this.getSizeQuantityList(demandCodeList, demandSizeMap, SIZE_34)) + .size35List(this.getSizeQuantityList(demandCodeList, demandSizeMap, SIZE_35)) + .size36List(this.getSizeQuantityList(demandCodeList, demandSizeMap, SIZE_36)) + .size37List(this.getSizeQuantityList(demandCodeList, demandSizeMap, SIZE_37)) + .size38List(this.getSizeQuantityList(demandCodeList, demandSizeMap, SIZE_38)) + .size39List(this.getSizeQuantityList(demandCodeList, demandSizeMap, SIZE_39)) + .size40List(this.getSizeQuantityList(demandCodeList, demandSizeMap, SIZE_40)) + .size41List(this.getSizeQuantityList(demandCodeList, demandSizeMap, SIZE_41)) + .size42List(this.getSizeQuantityList(demandCodeList, demandSizeMap, SIZE_42)) + .size43List(this.getSizeQuantityList(demandCodeList, demandSizeMap, SIZE_43)) + .build(); + }).collect(Collectors.toList()); + return dto.setDetailList(demandDetailDTOList); + } + + + + private List getSizeQuantityList(List demandCodeList, Map> demandSizeMap, Integer size) { + // 每一个尺码的数量对比明细 + return demandCodeList.stream().map(demandCode -> { + List demandSizeList = demandSizeMap.get(demandCode); + return CollectionUtils.isEmpty(demandSizeList) ? 0 + : demandSizeList.stream().filter(x -> Objects.equals(x.getSize(), size)) + .map(x -> ObjectUtils.defaultIfNull(x.getQuantity(), 0)).reduce(0, Integer::sum); + }).collect(Collectors.toList()); + } + }