From 27c00b9cc4d52ab6d845b2d316ee325032dfecc8 Mon Sep 17 00:00:00 2001 From: liujiang <569804566@qq.com> Date: Mon, 15 Sep 2025 17:19:36 +0800 Subject: [PATCH] =?UTF-8?q?master=EF=BC=9A=E7=B3=BB=E7=BB=9F=E5=95=86?= =?UTF-8?q?=E5=93=81=E5=AE=9A=E4=BB=B7=E8=B0=83=E6=95=B4=EF=BC=8C=E6=B6=89?= =?UTF-8?q?=E5=8F=8A=E5=88=B0=E7=9A=84=E5=AE=A2=E6=88=B7=E9=94=80=E5=94=AE?= =?UTF-8?q?=E7=AE=A1=E7=90=86=EF=BC=8C=E5=AE=A2=E6=88=B7=E5=AE=9A=E4=BB=B7?= =?UTF-8?q?=E7=AD=89=E4=B8=80=E7=B3=BB=E5=88=97=E4=BC=98=E5=8C=96=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xkt/StoreProductColorPriceController.java | 8 +- .../xkt/StoreProductController.java | 7 - .../xkt/vo/storeProd/StoreProdCreateVO.java | 10 + .../xkt/vo/storeProd/StoreProdResVO.java | 29 ++- .../xkt/vo/storeProd/StoreProdVO.java | 22 --- .../StoreProdStockAndDiscountResVO.java | 2 - .../ShopCartEditDetailResVO.java | 4 +- .../java/com/ruoyi/quartz/task/XktTask.java | 8 +- .../xkt/domain/StoreProductColorPrice.java | 26 ++- .../StoreProdColorPriceResDTO.java | 2 +- .../storeProdColorSize/StoreProdSizeDTO.java | 8 + .../xkt/dto/storeProduct/StoreProdDTO.java | 83 ++------ .../xkt/dto/storeProduct/StoreProdResDTO.java | 2 - .../StoreProdStockAndDiscountResDTO.java | 6 +- .../ShopCartDetailResDTO.java | 8 +- .../xkt/mapper/StoreProductColorMapper.java | 19 ++ .../mapper/StoreProductColorPriceMapper.java | 58 +----- .../mapper/StoreProductColorSizeMapper.java | 19 ++ .../xkt/mapper/StoreProductFileMapper.java | 10 - .../IStoreProductColorPriceService.java | 27 --- .../service/IStoreProductColorService.java | 21 ++ .../xkt/service/IStoreProductService.java | 8 - .../service/impl/ShoppingCartServiceImpl.java | 163 ++++++---------- .../impl/StoreHomepageServiceImpl.java | 1 - .../StoreProductColorPriceServiceImpl.java | 57 ------ .../impl/StoreProductColorServiceImpl.java | 29 +++ .../service/impl/StoreProductServiceImpl.java | 179 ++++++++---------- .../impl/StoreProductStockServiceImpl.java | 8 +- .../impl/UserFavoritesServiceImpl.java | 17 +- .../mapper/StoreProductColorMapper.xml | 52 +++++ .../mapper/StoreProductColorPriceMapper.xml | 99 ---------- .../mapper/StoreProductColorSizeMapper.xml | 47 ++++- .../mapper/StoreProductFileMapper.xml | 25 --- 33 files changed, 419 insertions(+), 645 deletions(-) delete mode 100644 xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductColorPriceService.java delete mode 100644 xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductColorPriceServiceImpl.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductColorPriceController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductColorPriceController.java index d626c6aab..82b9e3f45 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductColorPriceController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductColorPriceController.java @@ -8,7 +8,7 @@ import com.ruoyi.web.controller.xkt.vo.storeProdColorPrice.StoreProdColorPricePa import com.ruoyi.web.controller.xkt.vo.storeProdColorPrice.StoreProdColorPriceVO; import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdColorPricePageDTO; import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdColorPriceResDTO; -import com.ruoyi.xkt.service.IStoreProductColorPriceService; +import com.ruoyi.xkt.service.IStoreProductColorService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; @@ -30,19 +30,19 @@ import java.util.List; @RequestMapping("/rest/v1/prod-color-prices") public class StoreProductColorPriceController extends XktBaseController { - final IStoreProductColorPriceService prodColorPriceService; + final IStoreProductColorService prodColorService; @ApiOperation(value = "根据storeProdId获取所有颜色分类及定价", httpMethod = "GET", response = R.class) @GetMapping(value = "/{storeId}/{storeProdId}") public R> getColorPriceByStoreProdId(@PathVariable(value = "storeProdId") Long storeProdId, @PathVariable("storeId") Long storeId) { - return R.ok(BeanUtil.copyToList(prodColorPriceService.getColorPriceByStoreProdId(storeId, storeProdId), StoreProdColorPriceVO.class)); + return R.ok(BeanUtil.copyToList(prodColorService.getColorPriceByStoreProdId(storeId, storeProdId), StoreProdColorPriceVO.class)); } @PreAuthorize("@ss.hasAnyRoles('admin,general_admin,store')||@ss.hasSupplierSubRole()") @ApiOperation(value = "获取商品颜色价格列表", httpMethod = "POST", response = R.class) @PostMapping("/page") public R> page(@Validated @RequestBody StoreProdColorPricePageVO pageVO) { - return R.ok(prodColorPriceService.page(BeanUtil.toBean(pageVO, StoreProdColorPricePageDTO.class))); + return R.ok(prodColorService.page(BeanUtil.toBean(pageVO, StoreProdColorPricePageDTO.class))); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductController.java index 211a8bbd6..ef6d20ac0 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreProductController.java @@ -120,13 +120,6 @@ public class StoreProductController extends XktBaseController { return R.ok(storeProdService.updateStoreProductStatus(BeanUtil.toBean(prodStatusVO, StoreProdStatusDTO.class))); } - @PreAuthorize("@ss.hasAnyRoles('admin,general_admin,store')||@ss.hasSupplierSubRole()") - @ApiOperation(value = "获取档口图片空间", httpMethod = "POST", response = R.class) - @PostMapping(value = "/pic-space") - public R getStoreProductPicSpace(@Validated @RequestBody StoreProdPicSpaceVO picSpaceVO) { - return R.ok(BeanUtil.toBean(storeProdService.getStoreProductPicSpace(BeanUtil.toBean(picSpaceVO, StoreProdPicSpaceDTO.class)), StoreProdPicSpaceResVO.class)); - } - @ApiOperation(value = "获取商品各个状态数量", httpMethod = "GET", response = R.class) @GetMapping(value = "/status/num/{storeId}") public R getStatusNum(@PathVariable Long storeId) { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdCreateVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdCreateVO.java index 862096104..b690c83c9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdCreateVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdCreateVO.java @@ -188,12 +188,22 @@ public class StoreProdCreateVO { @Valid @ApiModel public static class SPCSizeVO { + + @ApiModelProperty(value = "档口商品颜色ID") + private Long storeColorId; + @NotBlank(message = "颜色名称不能为空!") + @ApiModelProperty(value = "颜色名称", required = true) + private String colorName; @ApiModelProperty(value = "商品尺码", required = true) @NotNull(message = "档口商品定价不能为空!") private Integer size; + @NotNull(message = "档口商品定价不能为空!") + @ApiModelProperty(value = "档口商品定价", required = true) + private BigDecimal price; @NotNull(message = "是否是标准尺码不能为空!") @ApiModelProperty(value = "是否是标准尺码", required = true) private Integer standard; + } @Data diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdResVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdResVO.java index 95c234e84..a29f77282 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdResVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdResVO.java @@ -9,7 +9,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.Valid; -import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -58,8 +57,6 @@ public class StoreProdResVO { private List allColorList; @ApiModelProperty(value = "商品颜色列表") private List colorList; - @ApiModelProperty(value = "档口颜色价格列表") - private List priceList; @ApiModelProperty(value = "档口商品尺码列表") private List sizeList; @ApiModelProperty(value = "档口服务承诺") @@ -74,12 +71,16 @@ public class StoreProdResVO { @NoArgsConstructor @Valid public static class StoreProdSizeVO { - @ApiModelProperty(value = "商品尺码", required = true) - @NotNull(message = "档口商品定价不能为空!") + @ApiModelProperty(value = "档口商品颜色ID") + private Long storeColorId; + @ApiModelProperty(value = "颜色名称") + private String colorName; + @ApiModelProperty(value = "商品尺码") private Integer size; - @NotNull(message = "是否是标准尺码不能为空!") - @ApiModelProperty(value = "是否是标准尺码", required = true) + @ApiModelProperty(value = "是否是标准尺码") private Integer standard; + @ApiModelProperty(value = "尺码价格") + private BigDecimal price; } @Data @@ -98,11 +99,11 @@ public class StoreProdResVO { @Data public static class StoreProdCateAttrVO { - @ApiModelProperty(value = "帮面材质", required = true) + @ApiModelProperty(value = "帮面材质") private String upperMaterial; - @ApiModelProperty(value = "内里材质", required = true) + @ApiModelProperty(value = "内里材质") private String liningMaterial; - @ApiModelProperty(value = "鞋垫材质", required = true) + @ApiModelProperty(value = "鞋垫材质") private String insoleMaterial; @ApiModelProperty(value = "上市季节年份") private String releaseYearSeason; @@ -142,14 +143,6 @@ public class StoreProdResVO { private String suitablePerson; } - @Data - public static class StoreProdColorPriceVO { - @ApiModelProperty(value = "档口商品颜色ID") - private Long storeColorId; - @ApiModelProperty(value = "档口商品定价") - private BigDecimal price; - } - @Data public static class StoreProdSvcVO { @ApiModelProperty(value = "大小码及定制款可退") diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdVO.java index 592ba3716..be2afe45e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdVO.java @@ -81,10 +81,6 @@ public class StoreProdVO { @Valid @ApiModelProperty(value = "档口尺码列表", required = true) private List sizeList; - @Valid - @NotNull(message = "商品颜色价格列表不能为空!") - @ApiModelProperty(value = "档口颜色价格列表", required = true) - private List colorPriceList; @ApiModelProperty(value = "档口服务承诺") private StoreProdCreateVO.StoreProdSvcVO svc; @NotBlank(message = "详情内容不能为空!") @@ -94,24 +90,6 @@ public class StoreProdVO { private StoreProdCreateVO.StoreProdProcessVO process; - @Data - @Valid - @ApiModel - public static class SPCColorPriceVO { - @ApiModelProperty(value = "档口商品颜色ID") - private Long storeColorId; - @NotBlank(message = "颜色名称不能为空!") - @ApiModelProperty(value = "颜色名称", required = true) - private String colorName; - @NotNull(message = "档口商品定价不能为空!") - @ApiModelProperty(value = "档口商品定价", required = true) - private BigDecimal price; - @NotNull(message = "排序不能为空!") - @ApiModelProperty(value = "排序", required = true) - private Integer orderNum; - } - - @Data @Valid @ApiModel diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProdStock/StoreProdStockAndDiscountResVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProdStock/StoreProdStockAndDiscountResVO.java index 0cd28372e..89bb21eea 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProdStock/StoreProdStockAndDiscountResVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProdStock/StoreProdStockAndDiscountResVO.java @@ -28,8 +28,6 @@ public class StoreProdStockAndDiscountResVO { private BigDecimal price; @ApiModelProperty(value = "优惠金额") private Integer discount; - @ApiModelProperty(value = "大小码加价") - private Integer overPrice; @ApiModelProperty(value = "商品货号") private String prodArtNum; @ApiModelProperty(value = "档口商品ID") diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/userShoppingCart/ShopCartEditDetailResVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/userShoppingCart/ShopCartEditDetailResVO.java index a48740546..ed3ddd7d3 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/userShoppingCart/ShopCartEditDetailResVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/userShoppingCart/ShopCartEditDetailResVO.java @@ -55,8 +55,6 @@ public class ShopCartEditDetailResVO { private String colorName; @ApiModelProperty(value = "排序") private Integer orderNum; - @ApiModelProperty(value = "档口商品定价") - private BigDecimal price; @ApiModelProperty(value = "商品尺码及库存") List sizeStockList; } @@ -65,6 +63,8 @@ public class ShopCartEditDetailResVO { @ApiModel @Accessors(chain = true) public static class StoreProdSizeStockVO { + @ApiModelProperty(value = "档口商品定价") + private BigDecimal price; @ApiModelProperty(value = "商品尺码") private Integer size; @ApiModelProperty(value = "尺码库存") diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/XktTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/XktTask.java index b4fe62479..d1aaca5a7 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/XktTask.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/XktTask.java @@ -114,7 +114,6 @@ public class XktTask { final StoreProductFileMapper storeProdFileMapper; final UserSearchHistoryMapper userSearchHisMapper; final UserBrowsingHistoryMapper userBrowHisMapper; - final StoreProductColorPriceMapper prodColorPriceMapper; final IPictureService pictureService; final NoticeMapper noticeMapper; final UserNoticeMapper userNoticeMapper; @@ -123,6 +122,7 @@ public class XktTask { final IExpressService expressService; final ZtoExpressManagerImpl ztoExpressManager; final SysDictDataMapper dictDataMapper; + final StoreProductColorSizeMapper prodColorSizeMapper; public void test() throws IOException { System.err.println("aaa"); @@ -845,12 +845,8 @@ public class XktTask { List prodCateList = this.prodCateMapper.selectList(new LambdaQueryWrapper() .eq(SysProductCategory::getDelFlag, Constants.UNDELETED)); Map prodCateMap = prodCateList.stream().collect(Collectors.toMap(SysProductCategory::getId, x -> x)); - // 父级分类 - Map parProdCateMap = prodCateList.stream().collect(Collectors.toMap(SysProductCategory::getParentId, SysProductCategory::getParentId, (s1, s2) -> s2)); - // 子分类 - Map childProdCateMap = prodCateList.stream().collect(Collectors.toMap(SysProductCategory::getId, SysProductCategory::getId)); // 获取当前商品最低价格 - Map prodMinPriceMap = this.prodColorPriceMapper.selectStoreProdMinPriceList(storeProdIdList).stream().collect(Collectors + Map prodMinPriceMap = this.prodColorSizeMapper.selectStoreProdMinPriceList(storeProdIdList).stream().collect(Collectors .toMap(StoreProdMinPriceDTO::getStoreProdId, StoreProdMinPriceDTO::getPrice)); // 档口商品的属性map Map cateAttrMap = this.cateAttrMapper.selectList(new LambdaQueryWrapper() diff --git a/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProductColorPrice.java b/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProductColorPrice.java index 59daabdff..f108e9962 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProductColorPrice.java +++ b/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProductColorPrice.java @@ -17,33 +17,42 @@ import java.math.BigDecimal; * @author ruoyi * @date 2025-03-26 */ +/* @EqualsAndHashCode(callSuper = true) @Data @Accessors(chain = true) public class StoreProductColorPrice extends XktBaseEntity { private static final long serialVersionUID = 1L; - /** + */ +/** * 档口商品颜色价格ID - */ + *//* + @TableId private Long id; - /** + */ +/** * 档口颜色ID - */ + *//* + @Excel(name = "档口颜色ID") private Long storeColorId; - /** + */ +/** * 档口商品ID - */ + *//* + @Excel(name = "档口商品ID") private Long storeProdId; - /** + */ +/** * 档口商品定价 - */ + *//* + @Excel(name = "档口商品定价") private BigDecimal price; @@ -63,3 +72,4 @@ public class StoreProductColorPrice extends XktBaseEntity { .toString(); } } +*/ diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProdColorPrice/StoreProdColorPriceResDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProdColorPrice/StoreProdColorPriceResDTO.java index 7a8a744c8..eed055833 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProdColorPrice/StoreProdColorPriceResDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProdColorPrice/StoreProdColorPriceResDTO.java @@ -29,7 +29,7 @@ public class StoreProdColorPriceResDTO { private String prodArtNum; @ApiModelProperty(value = "颜色名称") private String colorName; - @ApiModelProperty(value = "档口商品颜色定价") + @ApiModelProperty(value = "档口商品颜色最低售价") private BigDecimal price; @ApiModelProperty(value = "大小码加价") private Integer overPrice; diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProdColorSize/StoreProdSizeDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProdColorSize/StoreProdSizeDTO.java index 19ecbe8fc..186db24cf 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProdColorSize/StoreProdSizeDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProdColorSize/StoreProdSizeDTO.java @@ -3,6 +3,8 @@ package com.ruoyi.xkt.dto.storeProdColorSize; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.math.BigDecimal; + /** * @author liujiang * @version v1.0 @@ -11,9 +13,15 @@ import lombok.Data; @Data public class StoreProdSizeDTO { + @ApiModelProperty(value = "档口商品颜色ID") + private Long storeColorId; + @ApiModelProperty(value = "颜色名称") + private String colorName; @ApiModelProperty(value = "商品尺码") private Integer size; @ApiModelProperty(value = "是否是标准尺码") private Integer standard; + @ApiModelProperty(value = "尺码价格") + private BigDecimal price; } diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdDTO.java index 804eee152..526ee0c3d 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdDTO.java @@ -1,6 +1,5 @@ package com.ruoyi.xkt.dto.storeProduct; -import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.xkt.dto.storeColor.StoreColorDTO; import com.ruoyi.xkt.dto.storeProdCateAttr.StoreProdCateAttrDTO; import com.ruoyi.xkt.dto.storeProdProcess.StoreProdProcessDTO; @@ -14,9 +13,6 @@ import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import javax.validation.Valid; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -33,25 +29,17 @@ public class StoreProdDTO { @ApiModelProperty(value = "档口商品名称") private String prodName; - @ApiModelProperty(value = "档口ID", required = true) - @NotNull(message = "档口ID不能为空!") + @ApiModelProperty(value = "档口ID") private Long storeId; - @ApiModelProperty(value = "商品分类ID", required = true) - @NotNull(message = "商品分类ID不能为空!") + @ApiModelProperty(value = "商品分类ID") private Long prodCateId; - @ApiModelProperty(value = "商品分类名称", required = true) - @NotBlank(message = "商品分类名称不能为空!") + @ApiModelProperty(value = "商品分类名称") private String prodCateName; @ApiModelProperty(value = "工厂货号") - @Size(min = 0, max = 15, message = "工厂货号不能超过60个字!") private String factoryArtNum; - @ApiModelProperty(value = "商品货号", required = true) - @Size(min = 0, max = 15, message = "商品货号不能超过60个字!") - @NotBlank(message = "商品货号不能为空!") + @ApiModelProperty(value = "商品货号") private String prodArtNum; - @ApiModelProperty(value = "商品标题", required = true) - @Size(min = 0, max = 60, message = "商品标题不能超过60个字!") - @NotBlank(message = "商品标题不能为空!") + @ApiModelProperty(value = "商品标题") private String prodTitle; @ApiModelProperty(value = "商品重量") private BigDecimal prodWeight; @@ -61,72 +49,41 @@ public class StoreProdDTO { private Integer overPrice; @ApiModelProperty(value = "发货时效") private Integer deliveryTime; - @ApiModelProperty(value = "上架方式:1 立即上架 2 定时上架", required = true) - @NotNull(message = "上架方式不能为空!") + @ApiModelProperty(value = "上架方式:1 立即上架 2 定时上架") private Integer listingWay; - @ApiModelProperty(value = "商品状态:1.未发布 2. 在售 3. 尾货 4.已下架 5. 已删除", required = true) - @NotNull(message = "商品状态不能为空!") + @ApiModelProperty(value = "商品状态:1.未发布 2. 在售 3. 尾货 4.已下架 5. 已删除") private Integer prodStatus; @ApiModelProperty(value = "定时发货时间(精确到小时)") - @JsonFormat(pattern = "yyyy-MM-dd HH") private Date listingWaySchedule; - @ApiModelProperty(value = "档口文件列表", required = true) - @NotNull(message = "档口文件不能为空!") - @Valid + @ApiModelProperty(value = "档口文件列表") private List fileList; - @NotNull(message = "档口类目属性不能为空!") - @Valid - @ApiModelProperty(value = "档口类目属性", required = true) + @ApiModelProperty(value = "档口类目属性") private StoreProdCateAttrDTO cateAttr; - @NotNull(message = "档口所有颜色列表不能为空!") - @ApiModelProperty(value = "档口所有颜色列表", required = true) - @Valid + @ApiModelProperty(value = "档口所有颜色列表") private List allColorList; - @NotNull(message = "档口尺码列表不能为空!") - @Valid - @ApiModelProperty(value = "档口尺码列表", required = true) + @ApiModelProperty(value = "档口尺码列表") private List sizeList; - @Valid - @NotNull(message = "商品颜色价格列表不能为空!") - @ApiModelProperty(value = "档口颜色价格列表", required = true) - private List colorPriceList; @ApiModelProperty(value = "档口服务承诺") private StoreProdSvcDTO svc; - @NotBlank(message = "详情内容不能为空!") - @ApiModelProperty(value = "详情内容", required = true) -// @Xss + @ApiModelProperty(value = "详情内容") private String detail; @ApiModelProperty(value = "档口生产工艺") private StoreProdProcessDTO process; - - @Data - @Valid - public static class SPCColorPriceDTO { - @ApiModelProperty(value = "档口商品颜色ID") - private Long storeColorId; - @NotBlank(message = "颜色名称不能为空!") - @ApiModelProperty(value = "颜色名称", required = true) - private String colorName; - @NotNull(message = "档口商品定价不能为空!") - @ApiModelProperty(value = "档口商品定价", required = true) - private BigDecimal price; - @NotNull(message = "排序不能为空!") - @ApiModelProperty(value = "排序", required = true) - private Integer orderNum; - } - - @Data @AllArgsConstructor @NoArgsConstructor @Valid public static class SPCSizeDTO { - @ApiModelProperty(value = "商品尺码", required = true) - @NotNull(message = "档口商品定价不能为空!") + @ApiModelProperty(value = "档口商品颜色ID") + private Long storeColorId; + @ApiModelProperty(value = "颜色名称") + private String colorName; + @ApiModelProperty(value = "商品尺码") private Integer size; - @NotNull(message = "是否是标准尺码不能为空!") - @ApiModelProperty(value = "是否是标准尺码", required = true) + @ApiModelProperty(value = "档口商品定价") + private BigDecimal price; + @ApiModelProperty(value = "是否是标准尺码") private Integer standard; } diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdResDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdResDTO.java index b4323e927..7a1da884c 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdResDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdResDTO.java @@ -65,8 +65,6 @@ public class StoreProdResDTO { private List colorList; @ApiModelProperty(value = "档口商品尺码列表") private List sizeList; - @ApiModelProperty(value = "档口颜色价格列表") - private List priceList; @ApiModelProperty(value = "档口服务承诺") private StoreProdSvcDTO svc; @ApiModelProperty(value = "详情内容") diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductStock/StoreProdStockAndDiscountResDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductStock/StoreProdStockAndDiscountResDTO.java index 4cc67bae0..97a040850 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductStock/StoreProdStockAndDiscountResDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductStock/StoreProdStockAndDiscountResDTO.java @@ -24,12 +24,8 @@ public class StoreProdStockAndDiscountResDTO { private Long storeCusId; @ApiModelProperty(value = "档口客户名称") private String storeCusName; - @ApiModelProperty(value = "销售金额") - private BigDecimal price; @ApiModelProperty(value = "优惠金额") private Integer discount; - @ApiModelProperty(value = "大小码加价") - private Integer overPrice; @ApiModelProperty(value = "商品货号") private String prodArtNum; @ApiModelProperty(value = "档口商品ID") @@ -45,6 +41,8 @@ public class StoreProdStockAndDiscountResDTO { @Data public static class SPSADSizeDTO { + @ApiModelProperty(value = "销售金额") + private BigDecimal price; @ApiModelProperty(value = "尺码") private Integer size; @ApiModelProperty(value = "是否是标准尺码") diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/userShoppingCart/ShopCartDetailResDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/userShoppingCart/ShopCartDetailResDTO.java index 2cbbe9053..2fbb41014 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/userShoppingCart/ShopCartDetailResDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/userShoppingCart/ShopCartDetailResDTO.java @@ -43,7 +43,7 @@ public class ShopCartDetailResDTO { } @Data - @ApiModel(value = "档口商品基本信息") + @ApiModel @Accessors(chain = true) public static class SCDStoreProdColorDTO { @ApiModelProperty(value = "档口商品颜色ID") @@ -54,16 +54,16 @@ public class ShopCartDetailResDTO { private String colorName; @ApiModelProperty(value = "排序") private Integer orderNum; - @ApiModelProperty(value = "档口商品定价") - private BigDecimal price; @ApiModelProperty(value = "商品尺码及库存") List sizeStockList; } @Data - @ApiModel(value = "档口商品尺码及库存") + @ApiModel @Accessors(chain = true) public static class SCDStoreProdSizeStockDTO { + @ApiModelProperty(value = "档口商品定价") + private BigDecimal price; @ApiModelProperty(value = "商品尺码") private Integer size; @ApiModelProperty(value = "尺码库存") diff --git a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductColorMapper.java b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductColorMapper.java index 8c94f08d4..a42109f59 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductColorMapper.java +++ b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductColorMapper.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.xkt.domain.StoreProductColor; import com.ruoyi.xkt.dto.storeProdColor.StoreProdColorDTO; import com.ruoyi.xkt.dto.storeProdColor.StoreProdColorResDTO; +import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdColorPricePageDTO; +import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdColorPriceResDTO; import com.ruoyi.xkt.dto.storeProduct.StoreProdPageDTO; import com.ruoyi.xkt.dto.storeProduct.StoreProdPageResDTO; import org.apache.ibatis.annotations.Param; @@ -22,6 +24,7 @@ public interface StoreProductColorMapper extends BaseMapper { /** * 将商品颜色置为无效 + * * @param storeProdId 档口商品ID */ void updateDelFlagByStoreProdId(Long storeProdId); @@ -51,4 +54,20 @@ public interface StoreProductColorMapper extends BaseMapper { */ List fuzzyQueryColorList(@Param("storeId") Long storeId, @Param("prodArtNum") String prodArtNum); + /** + * 获取商品颜色价格列表 + * + * @param storeProdId 档口商品ID + * @param storeId 档口ID + * @return List + */ + List selectListByStoreProdIdAndStoreId(@Param("storeProdId") Long storeProdId, @Param("storeId") Long storeId); + + /** + * 新增客户优惠获取所有的颜色及价格 + * + * @param pageDTO 入参 + * @return List + */ + List selectColorPricePage(StoreProdColorPricePageDTO pageDTO); } diff --git a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductColorPriceMapper.java b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductColorPriceMapper.java index fdd4782f2..b475fac99 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductColorPriceMapper.java +++ b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductColorPriceMapper.java @@ -1,63 +1,15 @@ package com.ruoyi.xkt.mapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.ruoyi.xkt.domain.StoreProductColorPrice; -import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdColorPricePageDTO; -import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdColorPriceResDTO; -import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdColorPriceSimpleDTO; -import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdMinPriceDTO; -import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockAndDiscountDTO; -import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockAndDiscountResDTO; -import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; -import java.util.List; - /** * 档口商品颜色定价Mapper接口 * * @author ruoyi * @date 2025-03-26 */ -@Repository -public interface StoreProductColorPriceMapper extends BaseMapper { - - - /** - * 商品列表编辑商品时 获取颜色列表 - * @param storeProdId 档口商品ID - * @return List - */ - List selectListByStoreProdId(Long storeProdId); - - /** - * 根据档口商品ID及档口ID获取所有颜色列表及定价 - * - * @param storeProdId 档口商品ID - * @param storeId 档口ID - * @return List - */ - List selectListByStoreProdIdAndStoreId(@Param("storeProdId") Long storeProdId, @Param("storeId") Long storeId); - - /** - * 获取档口商品的最低定价 - * - * @param storeProdIdList 档口商品ID列表 - * @return List - */ - List selectStoreProdMinPriceList(@Param("storeProdIdList") List storeProdIdList); - - /** - * 获取档口颜色价格分页 - * @param pageDTO 入参 - * @return List - */ - List selectPricePage(StoreProdColorPricePageDTO pageDTO); - - /** - * 销售出库,输入货号,查询颜色价格等信息 - * @param dto 入参 - * @return StoreProdStockAndDiscountResDTO - */ - StoreProdStockAndDiscountResDTO selectStockAndCusDiscount(StoreProdStockAndDiscountDTO dto); -} +//@Repository +//public interface StoreProductColorPriceMapper extends BaseMapper { +// +// +//} diff --git a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductColorSizeMapper.java b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductColorSizeMapper.java index 4877b7bcb..9526cbfa8 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductColorSizeMapper.java +++ b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductColorSizeMapper.java @@ -2,7 +2,10 @@ package com.ruoyi.xkt.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.xkt.domain.StoreProductColorSize; +import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdMinPriceDTO; import com.ruoyi.xkt.dto.storeProdColorSize.*; +import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockAndDiscountDTO; +import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockAndDiscountResDTO; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -97,5 +100,21 @@ public interface StoreProductColorSizeMapper extends BaseMapper selectUnsetProdList(@Param("storeId") Long storeId); + /** + * 获取档口商品最小价格 + * + * @param storeProdIdList 档口商品ID列表 + * @return List + */ + List selectStoreProdMinPriceList(@Param("storeProdIdList") List storeProdIdList); + + /** + * 销售出库,输入货号,查询颜色价格等信息 + * + * @param dto 入参 + * @return StoreProdStockAndDiscountResDTO + */ + StoreProdStockAndDiscountResDTO selectStockAndCusDiscount(StoreProdStockAndDiscountDTO dto); + } diff --git a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductFileMapper.java b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductFileMapper.java index cdd95d17e..7ac9f4e2a 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductFileMapper.java +++ b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductFileMapper.java @@ -43,16 +43,6 @@ public interface StoreProductFileMapper extends BaseMapper { @Param("fileType") Integer fileType, @Param("orderNum") Integer orderNum); - /** - * 获取档口图片空间的下载包 - * - * @param storeId 档口ID - * @param fileType 文件类型 - * @return List - */ - List selectPicSpaceList(@Param("storeId") Long storeId, @Param("fileType") Integer fileType, - @Param("storeProdIdList") List storeProdIdList); - /** * 根据storeProdIdList 查询所有主图 * diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductColorPriceService.java b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductColorPriceService.java deleted file mode 100644 index 6e11bdd8e..000000000 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductColorPriceService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.ruoyi.xkt.service; - -import com.ruoyi.common.core.page.Page; -import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdColorPricePageDTO; -import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdColorPriceResDTO; - -import java.util.List; - -/** - * 档口商品颜色定价Service接口 - * - * @author ruoyi - * @date 2025-03-26 - */ -public interface IStoreProductColorPriceService { - - List getColorPriceByStoreProdId(Long storeId, Long storeProdId); - - /** - * 查询档口商品颜色价格分页 - * - * @param pageDTO 入参 - * @return Page - */ - Page page(StoreProdColorPricePageDTO pageDTO); - -} diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductColorService.java b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductColorService.java index fe7eeb77e..79d04554e 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductColorService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductColorService.java @@ -1,6 +1,9 @@ package com.ruoyi.xkt.service; +import com.ruoyi.common.core.page.Page; import com.ruoyi.xkt.dto.storeProdColor.StoreProdColorResDTO; +import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdColorPricePageDTO; +import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdColorPriceResDTO; import java.util.List; @@ -19,4 +22,22 @@ public interface IStoreProductColorService { * @return 返回一个列表,包含匹配的产品颜色信息 */ List fuzzyQueryColorList(Long storeId, String prodArtNum); + + /** + * 获取档口某个商品所有颜色对应的价格等 + * + * @param storeId 档口ID + * @param storeProdId 档口商品ID + * @return + */ + List getColorPriceByStoreProdId(Long storeId, Long storeProdId); + + /** + * 查询档口商品颜色价格分页 + * + * @param pageDTO 入参 + * @return Page + */ + Page page(StoreProdColorPricePageDTO pageDTO); + } diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductService.java b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductService.java index 4125d8794..464f30b66 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductService.java @@ -23,14 +23,6 @@ public interface IStoreProductService { */ StoreProdResDTO selectStoreProductByStoreProdId(Long storeProdId); - /** - * 获取档口图片空间 - * - * @param spaceDTO 图片空间入参 - * @return StoreProdPicSpaceResDTO - */ - StoreProdPicSpaceResDTO getStoreProductPicSpace(StoreProdPicSpaceDTO spaceDTO); - /** * 查询档口商品列表 * diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/ShoppingCartServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/ShoppingCartServiceImpl.java index 239f35cf5..302e8d486 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/ShoppingCartServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/ShoppingCartServiceImpl.java @@ -47,7 +47,6 @@ public class ShoppingCartServiceImpl implements IShoppingCartService { final StoreProductColorSizeMapper prodColorSizeMapper; final StoreProductColorMapper prodColorMapper; final StoreProductStockMapper prodStockMapper; - final StoreProductColorPriceMapper prodColorPriceMapper; final StoreProductFileMapper prodFileMapper; final StoreProductCategoryAttributeMapper prodCateAttrMapper; final StoreMapper storeMapper; @@ -175,34 +174,27 @@ public class ShoppingCartServiceImpl implements IShoppingCartService { .eq(StoreProductColorSize::getStandard, ProductSizeStatus.STANDARD.getValue())); // 标准尺码 List standardList = standardSizeList.stream().map(StoreProductColorSize::getSize).distinct().sorted(Comparator.comparing(x -> x)).collect(Collectors.toList()); - Map> colorSizeMap = standardSizeList.stream().collect(Collectors - .groupingBy(x -> x.getStoreProdId().toString() + x.getStoreColorId().toString())); + // key storeColorId:size value price + Map standardSizePriceMap = standardSizeList.stream().collect(Collectors.toMap(x -> x.getStoreColorId() + ":" + x.getSize(), StoreProductColorSize::getPrice)); // 获取商品颜色列表 List colorList = this.prodColorMapper.selectList(new LambdaQueryWrapper() .eq(StoreProductColor::getStoreProdId, shoppingCart.getStoreProdId()).eq(StoreProductColor::getDelFlag, Constants.UNDELETED) .in(StoreProductColor::getProdStatus, Arrays.asList(EProductStatus.ON_SALE.getValue(), EProductStatus.TAIL_GOODS.getValue()))); - // 档口商品颜色价格列表 - List colorPriceList = this.prodColorPriceMapper.selectList(new LambdaQueryWrapper() - .eq(StoreProductColorPrice::getStoreProdId, shoppingCart.getStoreProdId()).eq(StoreProductColorPrice::getDelFlag, Constants.UNDELETED)); - Map colorPriceMap = colorPriceList.stream().collect(Collectors - .toMap(x -> x.getStoreProdId().toString() + x.getStoreColorId().toString(), Function.identity())); // 根据标准尺码去找对应尺码的库存数量 List prodStockList = this.prodStockMapper.selectList(new LambdaQueryWrapper() .eq(StoreProductStock::getStoreProdId, shoppingCart.getStoreProdId()) .in(StoreProductStock::getStoreProdColorId, colorList.stream().map(StoreProductColor::getId).distinct().collect(Collectors.toList())) .eq(StoreProductStock::getDelFlag, Constants.UNDELETED)); // 获取档口颜色尺码的库存数量 - Map> colorSizeStockMap = this.convertSizeStock(prodStockList, standardList); + Map> colorSizeStockMap = this.convertSizeStock(prodStockList, standardList, standardSizePriceMap); // 库存数量为0默认值 List defaultZeroStockList = standardList.stream().map(size -> new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO().setSize(size).setStock(0)).collect(Collectors.toList()); List colorSizeStockList = colorList.stream() .map(color -> BeanUtil.toBean(color, ShopCartDetailResDTO.SCDStoreProdColorDTO.class).setStoreProdColorId(color.getId()) - // 获取颜色设定的价格 - .setPrice(colorPriceMap.containsKey(color.getStoreProdId().toString() + color.getStoreColorId().toString()) - ? colorPriceMap.get(color.getStoreProdId().toString() + color.getStoreColorId().toString()).getPrice() : null) - // 设定库存 - .setSizeStockList(colorSizeStockMap.getOrDefault(color.getStoreProdId().toString() + color.getStoreColorId().toString(), defaultZeroStockList))) + // 设定尺码对应的库存及价格 + .setSizeStockList(colorSizeStockMap + .getOrDefault(color.getStoreProdId().toString() + ":" + color.getStoreColorId().toString(), defaultZeroStockList))) .collect(Collectors.toList()); return new ShopCartDetailResDTO() {{ setProdArtNum(shoppingCart.getProdArtNum()).setStoreProdId(shoppingCart.getStoreProdId()) @@ -288,14 +280,6 @@ public class ShoppingCartServiceImpl implements IShoppingCartService { List mainPicList = this.prodFileMapper.selectMainPicByStoreProdIdList(listDTO.getStoreProdIdList(), FileType.MAIN_PIC.getValue(), ORDER_NUM_1); Map mainPicMap = CollectionUtils.isEmpty(mainPicList) ? new HashMap<>() : mainPicList.stream() .collect(Collectors.toMap(StoreProdMainPicDTO::getStoreProdId, StoreProdMainPicDTO::getFileUrl)); - // 获取明细商品的价格 - List priceList = this.prodColorPriceMapper.selectList(new LambdaQueryWrapper() - .in(StoreProductColorPrice::getStoreProdId, shoppingCartList.stream().map(ShoppingCart::getStoreProdId).collect(Collectors.toList())) - .in(StoreProductColorPrice::getStoreColorId, detailList.stream().map(ShoppingCartDetail::getStoreColorId).collect(Collectors.toList())) - .eq(StoreProductColorPrice::getDelFlag, Constants.UNDELETED)); - // 商品价格map - Map priceMap = priceList.stream().collect(Collectors - .toMap(x -> x.getStoreProdId().toString() + x.getStoreColorId().toString(), x -> ObjectUtils.defaultIfNull(x.getPrice(), BigDecimal.ZERO))); // 获取商品价格尺码 List priceSizeList = this.prodColorSizeMapper.selectList(new LambdaQueryWrapper() .in(StoreProductColorSize::getStoreProdId, shoppingCartList.stream().map(ShoppingCart::getStoreProdId).collect(Collectors.toList())) @@ -306,18 +290,18 @@ public class ShoppingCartServiceImpl implements IShoppingCartService { .eq(StoreProduct::getDelFlag, Constants.UNDELETED)); Map storeProdMap = storeProdList.stream().collect(Collectors.toMap(StoreProduct::getId, Function.identity())); // 商品价格尺码map - Map priceSizeMap = priceSizeList.stream().collect(Collectors - .toMap(x -> x.getStoreProdId().toString() + x.getStoreColorId().toString() + x.getSize(), StoreProductColorSize::getId)); + Map priceSizeMap = priceSizeList.stream().collect(Collectors + .toMap(x -> x.getStoreProdId().toString() + x.getStoreColorId().toString() + x.getSize(), x -> x)); return shoppingCartList.stream().map(x -> { ShoppingCartDTO shopCartDTO = BeanUtil.toBean(x, ShoppingCartDTO.class).setMainPicUrl(mainPicMap.get(x.getStoreProdId())) .setProdTitle(ObjectUtils.isNotEmpty(storeProdMap.get(x.getStoreProdId())) ? storeProdMap.get(x.getStoreProdId()).getProdTitle() : "") .setStoreName(ObjectUtils.isNotEmpty(storeMap.get(x.getStoreId())) ? storeMap.get(x.getStoreId()).getStoreName() : ""); List shopCartDetailList = detailMap.get(x.getId()).stream().map(detail -> { - final BigDecimal price = ObjectUtils.defaultIfNull(priceMap.get(x.getStoreProdId().toString() + detail.getStoreColorId().toString()), BigDecimal.ZERO); - return BeanUtil.toBean(detail, ShoppingCartDTO.SCDetailDTO.class).setPrice(price) - .setStoreProdColorSizeId(priceSizeMap.get(x.getStoreProdId().toString() + detail.getStoreColorId().toString() + detail.getSize())) - .setAmount(price.multiply(BigDecimal.valueOf(detail.getQuantity()))); - }).collect(Collectors.toList()); + final StoreProductColorSize prodColorSize = priceSizeMap.get(x.getStoreProdId().toString() + detail.getStoreColorId().toString() + detail.getSize()); + return ObjectUtils.isEmpty(prodColorSize) ? null : BeanUtil.toBean(detail, ShoppingCartDTO.SCDetailDTO.class) + .setPrice(prodColorSize.getPrice()).setStoreProdColorSizeId(prodColorSize.getId()) + .setAmount(prodColorSize.getPrice().multiply(BigDecimal.valueOf(detail.getQuantity()))); + }).filter(ObjectUtils::isNotEmpty).collect(Collectors.toList()); return shopCartDTO.setDetailList(shopCartDetailList); }).collect(Collectors.toList()); } @@ -340,116 +324,91 @@ public class ShoppingCartServiceImpl implements IShoppingCartService { * * @param stockList 库存数量 * @param standardSizeList 当前商品的标准尺码 + * @param standardSizePriceMap 颜色尺码对应的价格 * @return Map> */ - private Map> convertSizeStock(List stockList, List standardSizeList) { + private Map> convertSizeStock(List stockList, List standardSizeList, + Map standardSizePriceMap) { Map> colorSizeStockMap = new HashMap<>(); if (CollectionUtils.isEmpty(stockList)) { return colorSizeStockMap; } // 标准尺码map Map standardSizeMap = standardSizeList.stream().collect(Collectors.toMap(x -> x, x -> x)); - Map> map = stockList.stream().collect(Collectors.groupingBy(x -> x.getStoreProdId().toString() + x.getStoreColorId().toString())); - map.forEach((unionId, tempStockList) -> { + Map colorStockMap = stockList.stream().collect(Collectors.toMap(x -> x.getStoreProdId().toString() + ":" + x.getStoreColorId().toString(), x -> x)); + colorStockMap.forEach((unionId, colorStock) -> { List sizeStockList = new ArrayList<>(); - Integer size30Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize30(), 0)).reduce(0, Integer::sum); if (standardSizeMap.containsKey(SIZE_30)) { - sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO() {{ - setSize(SIZE_30); - setStock(size30Stock); - }}); + sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO().setSize(SIZE_30) + .setStock(ObjectUtils.defaultIfNull(colorStock.getSize30(), 0)) + .setPrice(standardSizePriceMap.get(colorStock.getStoreColorId().toString() + ":" + SIZE_30))); } - Integer size31Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize31(), 0)).reduce(0, Integer::sum); if (standardSizeMap.containsKey(SIZE_31)) { - sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO() {{ - setSize(SIZE_31); - setStock(size31Stock); - }}); + sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO().setSize(SIZE_31) + .setStock(ObjectUtils.defaultIfNull(colorStock.getSize31(), 0)) + .setPrice(standardSizePriceMap.get(colorStock.getStoreColorId().toString() + ":" + SIZE_31))); } - Integer size32Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize32(), 0)).reduce(0, Integer::sum); if (standardSizeMap.containsKey(SIZE_32)) { - sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO() {{ - setSize(SIZE_32); - setStock(size32Stock); - }}); + sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO().setSize(SIZE_32) + .setStock(ObjectUtils.defaultIfNull(colorStock.getSize32(), 0)) + .setPrice(standardSizePriceMap.get(colorStock.getStoreColorId().toString() + ":" + SIZE_32))); } - Integer size33Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize33(), 0)).reduce(0, Integer::sum); if (standardSizeMap.containsKey(SIZE_33)) { - sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO() {{ - setSize(SIZE_33); - setStock(size33Stock); - }}); + sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO().setSize(SIZE_33) + .setStock(ObjectUtils.defaultIfNull(colorStock.getSize33(), 0)) + .setPrice(standardSizePriceMap.get(colorStock.getStoreColorId().toString() + ":" + SIZE_33))); } - Integer size34Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize34(), 0)).reduce(0, Integer::sum); if (standardSizeMap.containsKey(SIZE_34)) { - sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO() {{ - setSize(SIZE_34); - setStock(size34Stock); - }}); + sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO().setSize(SIZE_34) + .setStock(ObjectUtils.defaultIfNull(colorStock.getSize34(), 0)) + .setPrice(standardSizePriceMap.get(colorStock.getStoreColorId().toString() + ":" + SIZE_34))); } - Integer size35Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize35(), 0)).reduce(0, Integer::sum); if (standardSizeMap.containsKey(SIZE_35)) { - sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO() {{ - setSize(SIZE_35); - setStock(size35Stock); - }}); + sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO().setSize(SIZE_35) + .setStock(ObjectUtils.defaultIfNull(colorStock.getSize35(), 0)) + .setPrice(standardSizePriceMap.get(colorStock.getStoreColorId().toString() + ":" + SIZE_35))); } - Integer size36Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize36(), 0)).reduce(0, Integer::sum); if (standardSizeMap.containsKey(SIZE_36)) { - sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO() {{ - setSize(SIZE_36); - setStock(size36Stock); - }}); + sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO().setSize(SIZE_36) + .setStock(ObjectUtils.defaultIfNull(colorStock.getSize36(), 0)) + .setPrice(standardSizePriceMap.get(colorStock.getStoreColorId().toString() + ":" + SIZE_36))); } - Integer size37Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize37(), 0)).reduce(0, Integer::sum); if (standardSizeMap.containsKey(SIZE_37)) { - sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO() {{ - setSize(SIZE_37); - setStock(size37Stock); - }}); + sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO().setSize(SIZE_37) + .setStock(ObjectUtils.defaultIfNull(colorStock.getSize37(), 0)) + .setPrice(standardSizePriceMap.get(colorStock.getStoreColorId().toString() + ":" + SIZE_37))); } - Integer size38Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize38(), 0)).reduce(0, Integer::sum); if (standardSizeMap.containsKey(SIZE_38)) { - sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO() {{ - setSize(SIZE_38); - setStock(size38Stock); - }}); + sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO().setSize(SIZE_38) + .setStock(ObjectUtils.defaultIfNull(colorStock.getSize38(), 0)) + .setPrice(standardSizePriceMap.get(colorStock.getStoreColorId().toString() + ":" + SIZE_38))); } - Integer size39Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize39(), 0)).reduce(0, Integer::sum); if (standardSizeMap.containsKey(SIZE_39)) { - sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO() {{ - setSize(SIZE_39); - setStock(size39Stock); - }}); + sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO().setSize(SIZE_39) + .setStock(ObjectUtils.defaultIfNull(colorStock.getSize39(), 0)) + .setPrice(standardSizePriceMap.get(colorStock.getStoreColorId().toString() + ":" + SIZE_39))); } - Integer size40Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize40(), 0)).reduce(0, Integer::sum); if (standardSizeMap.containsKey(SIZE_40)) { - sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO() {{ - setSize(SIZE_40); - setStock(size40Stock); - }}); + sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO().setSize(SIZE_40) + .setStock(ObjectUtils.defaultIfNull(colorStock.getSize40(), 0)) + .setPrice(standardSizePriceMap.get(colorStock.getStoreColorId().toString() + ":" + SIZE_40))); } - Integer size41Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize41(), 0)).reduce(0, Integer::sum); if (standardSizeMap.containsKey(SIZE_41)) { - sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO() {{ - setSize(SIZE_41); - setStock(size41Stock); - }}); + sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO().setSize(SIZE_41) + .setStock(ObjectUtils.defaultIfNull(colorStock.getSize41(), 0)) + .setPrice(standardSizePriceMap.get(colorStock.getStoreColorId().toString() + ":" + SIZE_41))); } - Integer size42Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize42(), 0)).reduce(0, Integer::sum); if (standardSizeMap.containsKey(SIZE_42)) { - sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO() {{ - setSize(SIZE_42); - setStock(size42Stock); - }}); + sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO().setSize(SIZE_42) + .setStock(ObjectUtils.defaultIfNull(colorStock.getSize42(), 0)) + .setPrice(standardSizePriceMap.get(colorStock.getStoreColorId().toString() + ":" + SIZE_42))); } - Integer size43Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize43(), 0)).reduce(0, Integer::sum); if (standardSizeMap.containsKey(SIZE_43)) { - sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO() {{ - setSize(SIZE_43); - setStock(size43Stock); - }}); + sizeStockList.add(new ShopCartDetailResDTO.SCDStoreProdSizeStockDTO().setSize(SIZE_43) + .setStock(ObjectUtils.defaultIfNull(colorStock.getSize43(), 0)) + .setPrice(standardSizePriceMap.get(colorStock.getStoreColorId().toString() + ":" + SIZE_43))); } + colorSizeStockMap.put(unionId, sizeStockList); }); return colorSizeStockMap; diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreHomepageServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreHomepageServiceImpl.java index bc205f6a3..122d42518 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreHomepageServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreHomepageServiceImpl.java @@ -46,7 +46,6 @@ public class StoreHomepageServiceImpl implements IStoreHomepageService { final StoreProductDetailMapper prodDetailMapper; final StoreProductColorSizeMapper prodColorSizeMapper; final StoreProductStockMapper prodStockMapper; - final StoreProductColorPriceMapper prodColorPriceMapper; final StoreProductFileMapper prodFileMapper; final StoreProductCategoryAttributeMapper prodCateAttrMapper; final StoreCertificateMapper storeCertMapper; diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductColorPriceServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductColorPriceServiceImpl.java deleted file mode 100644 index 0098c0afd..000000000 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductColorPriceServiceImpl.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.ruoyi.xkt.service.impl; - -import com.github.pagehelper.PageHelper; -import com.github.pagehelper.PageInfo; -import com.ruoyi.common.core.page.Page; -import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdColorPricePageDTO; -import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdColorPriceResDTO; -import com.ruoyi.xkt.mapper.StoreProductColorPriceMapper; -import com.ruoyi.xkt.service.IStoreProductColorPriceService; -import lombok.RequiredArgsConstructor; -import org.apache.commons.collections4.CollectionUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.List; - -/** - * 档口商品颜色定价Service业务层处理 - * - * @author ruoyi - * @date 2025-03-26 - */ -@Service -@RequiredArgsConstructor -public class StoreProductColorPriceServiceImpl implements IStoreProductColorPriceService { - - final StoreProductColorPriceMapper prodColorPriceMapper; - - /** - * 根据档口ID 和 商品ID 获取所有颜色及价格 - * - * @param storeId 档口ID - * @param storeProdId 档口商品ID - * @return - */ - @Override - @Transactional(readOnly = true) - public List getColorPriceByStoreProdId(Long storeId, Long storeProdId) { - return this.prodColorPriceMapper.selectListByStoreProdIdAndStoreId(storeProdId, storeId); - } - - /** - * 查询档口商品颜色价格分页 - * - * @param pageDTO 入参 - * @return Page - */ - @Override - @Transactional(readOnly = true) - public Page page(StoreProdColorPricePageDTO pageDTO) { - PageHelper.startPage(pageDTO.getPageNum(), pageDTO.getPageSize()); - List list = this.prodColorPriceMapper.selectPricePage(pageDTO); - return CollectionUtils.isEmpty(list) ? Page.empty(pageDTO.getPageSize(), pageDTO.getPageNum()) - : Page.convert(new PageInfo<>(list)); - } - -} diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductColorServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductColorServiceImpl.java index 2d6c2a99b..ec8902212 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductColorServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductColorServiceImpl.java @@ -1,9 +1,15 @@ package com.ruoyi.xkt.service.impl; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.ruoyi.common.core.page.Page; import com.ruoyi.xkt.dto.storeProdColor.StoreProdColorResDTO; +import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdColorPricePageDTO; +import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdColorPriceResDTO; import com.ruoyi.xkt.mapper.StoreProductColorMapper; import com.ruoyi.xkt.service.IStoreProductColorService; import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -33,4 +39,27 @@ public class StoreProductColorServiceImpl implements IStoreProductColorService { public List fuzzyQueryColorList(Long storeId, String prodArtNum) { return storeProdColorMapper.fuzzyQueryColorList(storeId, prodArtNum); } + + /** + * 获取档口商品所有颜色及价格等 + * + * @param storeId 档口ID + * @param storeProdId 档口商品ID + * @return + */ + @Override + @Transactional(readOnly = true) + public List getColorPriceByStoreProdId(Long storeId, Long storeProdId) { + return this.storeProdColorMapper.selectListByStoreProdIdAndStoreId(storeProdId, storeId); + } + + @Override + @Transactional(readOnly = true) + public Page page(StoreProdColorPricePageDTO pageDTO) { + PageHelper.startPage(pageDTO.getPageNum(), pageDTO.getPageSize()); + List list = this.storeProdColorMapper.selectColorPricePage(pageDTO); + return CollectionUtils.isEmpty(list) ? Page.empty(pageDTO.getPageSize(), pageDTO.getPageNum()) : Page.convert(new PageInfo<>(list)); + } + + } diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductServiceImpl.java index 41b70f44a..4c0c5be21 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/StoreProductServiceImpl.java @@ -39,7 +39,6 @@ import com.ruoyi.xkt.dto.picture.ProductPicSyncResultDTO; import com.ruoyi.xkt.dto.storeColor.StoreColorDTO; import com.ruoyi.xkt.dto.storeProdCateAttr.StoreProdCateAttrDTO; import com.ruoyi.xkt.dto.storeProdColor.StoreProdColorDTO; -import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdColorPriceSimpleDTO; import com.ruoyi.xkt.dto.storeProdColorSize.StoreProdSizeDTO; import com.ruoyi.xkt.dto.storeProdProcess.StoreProdProcessDTO; import com.ruoyi.xkt.dto.storeProdSvc.StoreProdSvcDTO; @@ -91,7 +90,6 @@ public class StoreProductServiceImpl implements IStoreProductService { final StoreProductColorMapper storeProdColorMapper; final StoreProductServiceMapper storeProdSvcMapper; final StoreProductDetailMapper storeProdDetailMapper; - final StoreProductColorPriceMapper storeProdColorPriceMapper; final StoreColorMapper storeColorMapper; final SysFileMapper fileMapper; final StoreProductColorSizeMapper storeProdColorSizeMapper; @@ -135,10 +133,8 @@ public class StoreProductServiceImpl implements IStoreProductService { List allColorList = this.storeColorMapper.selectListByStoreProdId(storeProd.getStoreId()); // 档口当前商品颜色列表 List colorList = this.storeProdColorMapper.selectListByStoreProdId(storeProdId); - // 档口商品颜色尺码列表 + // 档口商品颜色尺码价格列表 List sizeList = this.storeProdColorSizeMapper.selectListByStoreProdId(storeProdId); - // 档口颜色价格列表 - List priceList = this.storeProdColorPriceMapper.selectListByStoreProdId(storeProdId); // 档口商品详情 StoreProductDetail prodDetail = this.storeProdDetailMapper.selectByStoreProdId(storeProdId); // 档口服务承诺 @@ -146,31 +142,8 @@ public class StoreProductServiceImpl implements IStoreProductService { // 档口生产工艺信息 StoreProductProcess prodProcess = this.storeProdProcMapper.selectByStoreProdId(storeProdId); return storeProdResDTO.setFileList(fileResList).setAllColorList(allColorList).setDetail(prodDetail.getDetail()) - .setColorList(colorList).setPriceList(priceList).setSizeList(sizeList) - .setCateAttr(BeanUtil.toBean(cateAttr, StoreProdCateAttrDTO.class)) - .setSvc(BeanUtil.toBean(storeProductSvc, StoreProdSvcDTO.class)) - .setProcess(BeanUtil.toBean(prodProcess, StoreProdProcessDTO.class)); - } - - @Override - @Transactional(readOnly = true) - public StoreProdPicSpaceResDTO getStoreProductPicSpace(StoreProdPicSpaceDTO spaceDTO) { - // 用户是否为档口管理者或子账户 - if (!SecurityUtils.isAdmin() && !SecurityUtils.isStoreManagerOrSub(spaceDTO.getStoreId())) { - throw new ServiceException("当前用户非档口管理者或子账号,无权限操作!", HttpStatus.ERROR); - } - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper().eq(StoreProduct::getId, spaceDTO.getStoreId()) - .eq(StoreProduct::getDelFlag, Constants.UNDELETED); - if (StringUtils.isNotBlank(spaceDTO.getProdArtNum())) { - queryWrapper.like(StoreProduct::getProdArtNum, spaceDTO.getProdArtNum()); - } - List storeProdList = this.storeProdMapper.selectList(queryWrapper); - List storeProdIdList = storeProdList.stream().map(StoreProduct::getId).collect(Collectors.toList()); - Store store = Optional.ofNullable(this.storeMapper.selectOne(new LambdaQueryWrapper() - .eq(Store::getId, spaceDTO.getStoreId()).eq(Store::getDelFlag, Constants.UNDELETED))) - .orElseThrow(() -> new ServiceException("档口不存在!", HttpStatus.ERROR)); - return StoreProdPicSpaceResDTO.builder().storeId(store.getId()).storeName(store.getStoreName()) - .fileList(this.storeProdFileMapper.selectPicSpaceList(store.getId(), FileType.DOWNLOAD.getValue(), storeProdIdList)).build(); + .setColorList(colorList).setSizeList(sizeList).setCateAttr(BeanUtil.toBean(cateAttr, StoreProdCateAttrDTO.class)) + .setSvc(BeanUtil.toBean(storeProductSvc, StoreProdSvcDTO.class)).setProcess(BeanUtil.toBean(prodProcess, StoreProdProcessDTO.class)); } /** @@ -359,66 +332,68 @@ public class StoreProductServiceImpl implements IStoreProductService { storeColorMap.putAll(newColorList.stream().collect(Collectors.toMap(StoreColor::getColorName, StoreColor::getId))); } // 所有颜色列表 - List prodColorList = this.storeProdColorMapper.selectList(new LambdaQueryWrapper() + List dbProdColorList = this.storeProdColorMapper.selectList(new LambdaQueryWrapper() .eq(StoreProductColor::getStoreProdId, storeProdId).eq(StoreProductColor::getDelFlag, Constants.UNDELETED)); - List existColorIdList = prodColorList.stream().map(StoreProductColor::getStoreColorId).collect(Collectors.toList()); - prodColorList.forEach(color -> { - // 判断有哪些是删除的颜色 - if (!storeColorMap.containsValue(color.getStoreColorId())) { - color.setDelFlag(Constants.DELETED); + // 当前商品已存在的storeColorId列表 + List exitProdColorIdList = dbProdColorList.stream().map(StoreProductColor::getStoreColorId).collect(Collectors.toList()); + // 当前商品待更新的storeColorId列表 + List updateProdColorIdList = updateDTO.getSizeList().stream().map(StoreProdDTO.SPCSizeDTO::getColorName).map(storeColorMap::get).collect(Collectors.toList()); + dbProdColorList.stream() + // 判断有哪些是删除的颜色 + .filter(color -> !updateProdColorIdList.contains(color.getStoreColorId())) + .forEach(color -> color.setDelFlag(Constants.DELETED)); + // 新增的颜色。分为两种情况:1. 完全新增的颜色 2. 已存在,新加到商品中 + final List updateProdColorNameList = updateDTO.getSizeList().stream().map(StoreProdDTO.SPCSizeDTO::getColorName).distinct().collect(Collectors.toList()); + for (int i = 1; i <= updateProdColorNameList.size(); i++) { + final Long updateProdColorId = storeColorMap.get(updateProdColorNameList.get(i)); + // 已存在的颜色则不新增 + if (exitProdColorIdList.contains(updateProdColorId)) { + continue; } - }); - this.storeProdColorMapper.updateById(prodColorList); - // 非新增颜色价格map - Map existColorPriceMap = updateDTO.getColorPriceList().stream().filter(x -> ObjectUtils.isNotEmpty(x.getStoreColorId())) - .collect(Collectors.toMap(StoreProdDTO.SPCColorPriceDTO::getStoreColorId, StoreProdDTO.SPCColorPriceDTO::getPrice)); - // 所有已存在的颜色价格列表 - List storeColorPriceList = this.storeProdColorPriceMapper.selectList(new LambdaQueryWrapper() - .eq(StoreProductColorPrice::getStoreProdId, storeProdId).eq(StoreProductColorPrice::getDelFlag, Constants.UNDELETED)); - storeColorPriceList.forEach(x -> { - // 判断有哪些是删除的颜色 - if (!storeColorMap.containsValue(x.getStoreColorId())) { - x.setDelFlag(Constants.DELETED); - } else { - // 更新颜色价格 - x.setPrice(existColorPriceMap.get(x.getStoreColorId())); - } - }); - // 标准尺码map - Map standardSizeMap = updateDTO.getSizeList().stream().collect(Collectors - .toMap(StoreProdDTO.SPCSizeDTO::getSize, StoreProdDTO.SPCSizeDTO::getStandard)); - // 所有已存在的颜色价格尺码列表 - List storeColorSizeList = this.storeProdColorSizeMapper.selectList(new LambdaQueryWrapper() - .eq(StoreProductColorSize::getStoreProdId, storeProdId).eq(StoreProductColorSize::getDelFlag, Constants.UNDELETED)); - storeColorSizeList.forEach(x -> { - // 哪些是删除颜色 - if (!storeColorMap.containsValue(x.getStoreColorId())) { - x.setDelFlag(Constants.DELETED); - } else { - // 更新标准尺码 - x.setStandard(standardSizeMap.get(x.getSize())); - } - }); - // 新增的颜色价格等 - List newColorPriceList = updateDTO.getColorPriceList().stream() - .filter(x -> !existColorIdList.contains(x.getStoreColorId())).collect(Collectors.toList()); - if (CollectionUtils.isNotEmpty(newColorPriceList)) { - // 新增的档口商品颜色 - List tempColorList = new ArrayList<>(); - newColorPriceList.forEach(newColorPrice -> { - Long storeColorId = storeColorMap.get(newColorPrice.getColorName()); - tempColorList.add(new StoreProductColor().setStoreProdId(storeProdId).setStoreColorId(storeColorMap.get(newColorPrice.getColorName())) - .setColorName(newColorPrice.getColorName()).setOrderNum(newColorPrice.getOrderNum()).setStoreId(storeId).setProdStatus(EProductStatus.ON_SALE.getValue())); - storeColorPriceList.add(new StoreProductColorPrice().setStoreColorId(storeColorId).setPrice(newColorPrice.getPrice()).setStoreProdId(storeProdId)); - updateDTO.getSizeList().forEach(size -> storeColorSizeList.add(new StoreProductColorSize().setStoreColorId(storeColorId).setSize(size.getSize()) - .setStoreProdId(storeProdId).setStandard(size.getStandard()).setNextSn(0))); - }); - this.storeProdColorMapper.insert(tempColorList); - // 设置了档口商品全部优惠的客户,新增商品优惠 - this.createStoreCusDiscount(tempColorList, storeProdId); + // 新增的商品颜色 + dbProdColorList.add(new StoreProductColor().setStoreColorId(updateProdColorId).setStoreProdId(storeProdId).setStoreId(storeId) + .setColorName(updateProdColorNameList.get(i)).setOrderNum(i).setProdStatus(EProductStatus.ON_SALE.getValue())); + } + // 更新商品颜色或新增商品颜色 + this.storeProdColorMapper.insertOrUpdate(dbProdColorList); + + // 待更新的商品颜色尺码map 按照颜色尺码 升序排列 + Map updateColorSizeMap = updateDTO.getSizeList().stream() + .sorted(Comparator.comparing(StoreProdDTO.SPCSizeDTO::getStoreColorId, Comparator.nullsLast(Comparator.naturalOrder())) + .thenComparing(StoreProdDTO.SPCSizeDTO::getSize)) + .collect(Collectors.toMap(x -> ObjectUtils.defaultIfNull(x.getStoreColorId(), "") + ":" + x.getSize(), + Function.identity(), (existing, replacement) -> existing, LinkedHashMap::new)); + // 处理商品颜色和尺码对应的价格 + List dbProdColorSizeList = this.storeProdColorSizeMapper.selectList(new LambdaQueryWrapper() + .eq(StoreProductColorSize::getStoreProdId, storeProdId).eq(StoreProductColorSize::getDelFlag, Constants.UNDELETED)); + Map dbProdColorSizeMap = dbProdColorSizeList.stream().collect(Collectors.toMap(x -> x.getStoreColorId() + ":" + x.getSize(), x -> x)); + dbProdColorSizeList.forEach(dbColorSize -> { + final String dbKey = dbColorSize.getStoreColorId() + ":" + dbColorSize.getSize(); + // 判断哪些颜色是删除的颜色 + if (!updateColorSizeMap.containsKey(dbKey)) { + dbColorSize.setDelFlag(Constants.DELETED); + } + }); + // 判断哪些颜色是新增 或 更新的颜色 + updateColorSizeMap.forEach((updateKey, updateColorSize) -> { + StoreProductColorSize dbColorSize = dbProdColorSizeMap.get(updateKey); + // 已存在则更新 + if (ObjectUtils.isNotEmpty(dbColorSize)) { + dbProdColorSizeList.add(dbColorSize.setPrice(updateColorSize.getPrice()).setStandard(updateColorSize.getStandard())); + } else { + // 不存在则新增 + dbProdColorSizeList.add(new StoreProductColorSize().setSize(updateColorSize.getSize()).setStoreProdId(storeProdId) + .setStandard(updateColorSize.getStandard()).setStoreColorId(storeColorMap.get(updateColorSize.getColorName())) + .setPrice(updateColorSize.getPrice()).setNextSn(0)); + } + }); + this.storeProdColorSizeMapper.insertOrUpdate(dbProdColorSizeList); + // 设置档口商品价格尺码的barcode_prefix + List nullSnPrefixList = dbProdColorSizeList.stream().filter(x -> StringUtils.isEmpty(x.getSnPrefix())) + .peek(x -> x.setSnPrefix(storeId + String.format("%08d", x.getId()))).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(nullSnPrefixList)) { + this.storeProdColorSizeMapper.updateById(nullSnPrefixList); } - this.storeProdColorPriceMapper.insertOrUpdate(storeColorPriceList); - this.storeProdColorSizeMapper.insertOrUpdate(storeColorSizeList); } /** @@ -469,28 +444,26 @@ public class StoreProductServiceImpl implements IStoreProductService { // 处理档口所有颜色 Map storeColorMap = createDTO.getAllColorList().stream().filter(x -> ObjectUtils.isNotEmpty(x.getStoreColorId())) .collect(Collectors.toMap(StoreColorDTO::getColorName, StoreColorDTO::getStoreColorId)); + // 新增的颜色 List newColorList = createDTO.getAllColorList().stream().filter(x -> ObjectUtils.isEmpty(x.getStoreColorId())) .map(x -> BeanUtil.toBean(x, StoreColor.class).setStoreId(createDTO.getStoreId())).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(newColorList)) { this.storeColorMapper.insert(newColorList); storeColorMap.putAll(newColorList.stream().collect(Collectors.toMap(StoreColor::getColorName, StoreColor::getId))); } - // 新增 档口颜色与尺码 - List prodColorPriceList = new ArrayList<>(); - List prodColorSizeList = new ArrayList<>(); + // 新增档口颜色尺码与价格 List prodColorList = new ArrayList<>(); - createDTO.getColorPriceList().forEach(colorPrice -> { - prodColorList.add(new StoreProductColor().setStoreProdId(storeProdId).setStoreColorId(storeColorMap.get(colorPrice.getColorName())) - .setColorName(colorPrice.getColorName()).setOrderNum(colorPrice.getOrderNum()).setStoreId(storeId).setProdStatus(EProductStatus.ON_SALE.getValue())); - prodColorPriceList.add(new StoreProductColorPrice().setStoreProdId(storeProdId).setPrice(colorPrice.getPrice()) - .setStoreColorId(storeColorMap.get(colorPrice.getColorName()))); - prodColorSizeList.addAll(createDTO.getSizeList().stream().map(x -> new StoreProductColorSize().setSize(x.getSize()).setStoreProdId(storeProdId) - .setStandard(x.getStandard()).setStoreColorId(storeColorMap.get(colorPrice.getColorName())).setNextSn(0)) - .collect(Collectors.toList())); - }); - this.storeProdColorPriceMapper.insert(prodColorPriceList); - this.storeProdColorSizeMapper.insert(prodColorSizeList); + final List prodColorNameList = createDTO.getSizeList().stream().map(StoreProdDTO.SPCSizeDTO::getColorName).distinct().collect(Collectors.toList()); + for (int i = 1; i <= prodColorNameList.size(); i++) { + prodColorList.add(new StoreProductColor().setStoreColorId(storeColorMap.get(prodColorNameList.get(i))).setStoreProdId(storeProdId) + .setStoreId(storeId).setColorName(prodColorNameList.get(i)).setOrderNum(i).setProdStatus(EProductStatus.ON_SALE.getValue())); + } this.storeProdColorMapper.insert(prodColorList); + // 新增档口颜色尺码对应价格 + List prodColorSizeList = createDTO.getSizeList().stream().map(x -> new StoreProductColorSize().setSize(x.getSize()).setStoreProdId(storeProdId) + .setStandard(x.getStandard()).setStoreColorId(storeColorMap.get(x.getColorName())).setPrice(x.getPrice()).setNextSn(0)) + .collect(Collectors.toList()); + this.storeProdColorSizeMapper.insert(prodColorSizeList); // 设置档口商品价格尺码的barcode_prefix prodColorSizeList.forEach(x -> x.setSnPrefix(storeId + String.format("%08d", x.getId()))); this.storeProdColorSizeMapper.updateById(prodColorSizeList); @@ -1098,8 +1071,8 @@ public class StoreProductServiceImpl implements IStoreProductService { // 获取上一级分类的分类ID 及 分类名称 ProdCateDTO parCate = this.prodCateMapper.getParentCate(updateDTO.getProdCateId()); // 获取当前商品的最低价格 - BigDecimal minPrice = updateDTO.getColorPriceList().stream().min(Comparator.comparing(StoreProdDTO.SPCColorPriceDTO::getPrice)) - .map(StoreProdDTO.SPCColorPriceDTO::getPrice).orElseThrow(() -> new ServiceException("商品价格不存在!", HttpStatus.ERROR)); + BigDecimal minPrice = updateDTO.getSizeList().stream().min(Comparator.comparing(StoreProdDTO.SPCSizeDTO::getPrice)) + .map(StoreProdDTO.SPCSizeDTO::getPrice).orElseThrow(() -> new ServiceException("商品价格不存在!", HttpStatus.ERROR)); // 获取使用季节 String season = updateDTO.getCateAttr().getSuitableSeason(); // 获取风格 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 c485d1499..7a343efa4 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 @@ -43,7 +43,6 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService { final StoreProductStockMapper storeProdStockMapper; final StoreProductFileMapper storeProdFileMapper; final SysFileMapper fileMapper; - final StoreProductColorPriceMapper prodColorPriceMapper; final StoreCustomerProductDiscountMapper storeCusProdDiscMapper; final StoreProductMapper storeProdMapper; final StoreProductColorSizeMapper prodColorSizeMapper; @@ -127,8 +126,8 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService { if (!SecurityUtils.isAdmin() && !SecurityUtils.isStoreManagerOrSub(dto.getStoreId())) { throw new ServiceException("当前用户非档口管理者或子账号,无权限操作!", HttpStatus.ERROR); } - // 商品颜色等基本信息 - StoreProdStockAndDiscountResDTO basicInfoDTO = ObjectUtils.defaultIfNull(this.prodColorPriceMapper.selectStockAndCusDiscount(dto), + // 获取商品的基本属性 + StoreProdStockAndDiscountResDTO basicInfoDTO = ObjectUtils.defaultIfNull(this.prodColorSizeMapper.selectStockAndCusDiscount(dto), new StoreProdStockAndDiscountResDTO()); // 档口商品颜色 的 库存 StoreProductStock stock = this.storeProdStockMapper.selectOne(new LambdaQueryWrapper() @@ -139,7 +138,8 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService { .eq(StoreProductColorSize::getStoreProdId, basicInfoDTO.getStoreProdId()).eq(StoreProductColorSize::getStoreColorId, basicInfoDTO.getStoreColorId()) .eq(StoreProductColorSize::getDelFlag, Constants.UNDELETED)); List sizeStockList = prodColorSizeList.stream().map(size -> new StoreProdStockAndDiscountResDTO.SPSADSizeDTO() - .setSize(size.getSize()).setStandard(size.getStandard()).setStock(this.getSizeStock(size.getSize(), stock))).collect(Collectors.toList()); + .setSize(size.getSize()).setStandard(size.getStandard()).setPrice(size.getPrice()).setStock(this.getSizeStock(size.getSize(), stock))) + .collect(Collectors.toList()); return basicInfoDTO.setStoreCusId(dto.getStoreCusId()).setStoreId(dto.getStoreId()).setSizeStockList(sizeStockList); } diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/UserFavoritesServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/UserFavoritesServiceImpl.java index b08a1fd1a..2b19c04fe 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/UserFavoritesServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/UserFavoritesServiceImpl.java @@ -11,6 +11,7 @@ import com.ruoyi.common.core.page.Page; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.xkt.domain.*; +import com.ruoyi.xkt.dto.storeProdColorPrice.StoreProdMinPriceDTO; import com.ruoyi.xkt.dto.storeProductFile.StoreProdMainPicDTO; import com.ruoyi.xkt.dto.userFavorite.*; import com.ruoyi.xkt.enums.*; @@ -46,7 +47,6 @@ public class UserFavoritesServiceImpl implements IUserFavoritesService { final StoreProductFileMapper prodFileMapper; final StoreProductColorSizeMapper prodColorSizeMapper; final ShoppingCartMapper shopCartMapper; - final StoreProductColorPriceMapper prodColorPriceMapper; final StoreProductColorMapper prodColorMapper; final ShoppingCartDetailMapper shopCartDetailMapper; final StoreMapper storeMapper; @@ -117,14 +117,11 @@ public class UserFavoritesServiceImpl implements IUserFavoritesService { if (CollectionUtils.isEmpty(favoriteList)) { return Page.empty(pageDTO.getPageNum(), pageDTO.getPageSize()); } - // 找到商品的定价 - List priceList = this.prodColorPriceMapper.selectList(new LambdaQueryWrapper() - .in(StoreProductColorPrice::getStoreProdId, favoriteList.stream().map(UserFavoritePageResDTO::getStoreProdId).collect(Collectors.toList())) - .eq(StoreProductColorPrice::getDelFlag, Constants.UNDELETED)); - // 按照storeProdId分组,并取价格最低的价格 - Map minPriceMap = priceList.stream().collect(Collectors.groupingBy(StoreProductColorPrice::getStoreProdId, - Collectors.collectingAndThen(Collectors.toList(), list -> list.stream().map(StoreProductColorPrice::getPrice) - .min(Comparator.comparing(Function.identity())).orElseThrow(() -> new ServiceException("商品价格不存在", HttpStatus.ERROR))))); + // 档口商品最低价格 + List prodMinPriceList = this.prodColorSizeMapper.selectStoreProdMinPriceList(favoriteList.stream() + .map(UserFavoritePageResDTO::getStoreProdId).map(String::valueOf).collect(Collectors.toList())); + Map prodMinPriceMap = CollectionUtils.isEmpty(prodMinPriceList) ? new HashMap<>() + : prodMinPriceList.stream().collect(Collectors.toMap(StoreProdMinPriceDTO::getStoreProdId, StoreProdMinPriceDTO::getPrice)); // 找到第一张商品主图 List mainPicList = this.prodFileMapper.selectMainPicByStoreProdIdList(favoriteList.stream() .map(UserFavoritePageResDTO::getStoreProdId).collect(Collectors.toList()), FileType.MAIN_PIC.getValue(), ORDER_NUM_1); @@ -150,7 +147,7 @@ public class UserFavoritesServiceImpl implements IUserFavoritesService { }))); favoriteList.forEach(x -> x.setStandardSize(minAndMaxSizeMap.getOrDefault(x.getStoreProdId(), "")) .setMainPicUrl(mainPicMap.getOrDefault(x.getStoreProdId(), null)) - .setPrice(minPriceMap.getOrDefault(x.getStoreProdId(), null))); + .setPrice(prodMinPriceMap.getOrDefault(x.getStoreProdId(), null))); return Page.convert(new PageInfo<>(favoriteList)); } diff --git a/xkt/src/main/resources/mapper/StoreProductColorMapper.xml b/xkt/src/main/resources/mapper/StoreProductColorMapper.xml index 24d17bf0b..e7574b123 100644 --- a/xkt/src/main/resources/mapper/StoreProductColorMapper.xml +++ b/xkt/src/main/resources/mapper/StoreProductColorMapper.xml @@ -80,4 +80,56 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + \ No newline at end of file diff --git a/xkt/src/main/resources/mapper/StoreProductColorPriceMapper.xml b/xkt/src/main/resources/mapper/StoreProductColorPriceMapper.xml index 12783d87c..fc63395e2 100644 --- a/xkt/src/main/resources/mapper/StoreProductColorPriceMapper.xml +++ b/xkt/src/main/resources/mapper/StoreProductColorPriceMapper.xml @@ -3,106 +3,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - \ No newline at end of file diff --git a/xkt/src/main/resources/mapper/StoreProductColorSizeMapper.xml b/xkt/src/main/resources/mapper/StoreProductColorSizeMapper.xml index ebbac9580..4b22e18a9 100644 --- a/xkt/src/main/resources/mapper/StoreProductColorSizeMapper.xml +++ b/xkt/src/main/resources/mapper/StoreProductColorSizeMapper.xml @@ -9,15 +9,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" @@ -170,4 +175,40 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND spcs.other_sn_prefix IS NULL; + + + + \ No newline at end of file diff --git a/xkt/src/main/resources/mapper/StoreProductFileMapper.xml b/xkt/src/main/resources/mapper/StoreProductFileMapper.xml index 34b32ce1b..6fe596416 100644 --- a/xkt/src/main/resources/mapper/StoreProductFileMapper.xml +++ b/xkt/src/main/resources/mapper/StoreProductFileMapper.xml @@ -47,31 +47,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - -