diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreHomepageController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreHomepageController.java index 3fb14c322..fc91464a2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreHomepageController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/StoreHomepageController.java @@ -6,6 +6,8 @@ import com.ruoyi.common.core.controller.XktBaseController; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.web.controller.xkt.vo.storeHomepage.StoreHomeDecorationVO; +import com.ruoyi.web.controller.xkt.vo.storeHomepage.StoreHomeProdResVO; +import com.ruoyi.web.controller.xkt.vo.storeHomepage.StoreHomeResVO; import com.ruoyi.xkt.dto.storeHomepage.StoreHomeDecorationDTO; import com.ruoyi.xkt.service.IStoreHomepageService; import io.swagger.annotations.Api; @@ -30,11 +32,11 @@ public class StoreHomepageController extends XktBaseController { final IStoreHomepageService storeHomeService; /** - * 新增档口首页装修数据 + * 新增档口装修数据 */ @PreAuthorize("@ss.hasPermi('system:homepage:add')") - @ApiOperation(value = "新增档口首页装修数据", httpMethod = "POST", response = R.class) - @Log(title = "新增档口首页装修数据", businessType = BusinessType.INSERT) + @ApiOperation(value = "新增档口装修数据", httpMethod = "POST", response = R.class) + @Log(title = "新增档口装修数据", businessType = BusinessType.INSERT) @PostMapping("/decoration/{storeId}/{templateNum}") public R addDecoration(@PathVariable("storeId") Long storeId, @PathVariable("templateNum") Integer templateNum, @Validated @RequestBody StoreHomeDecorationVO decorationVO) { @@ -42,26 +44,46 @@ public class StoreHomepageController extends XktBaseController { } /** - * 查询档口首页装修数据 + * 查询档口装修数据 */ @PreAuthorize("@ss.hasPermi('system:sale:query')") - @ApiOperation(value = "查询档口首页装修数据", httpMethod = "GET", response = R.class) + @ApiOperation(value = "查询档口装修数据", httpMethod = "GET", response = R.class) @GetMapping(value = "/decoration/{storeId}") public R getDecorationInfo(@PathVariable("storeId") Long storeId) { return R.ok(BeanUtil.toBean(storeHomeService.selectByStoreId(storeId), StoreHomeDecorationVO.class)); } /** - * 修改档口首页装修数据 + * 修改档口装修数据 */ @PreAuthorize("@ss.hasPermi('system:homepage:edit')") - @ApiOperation(value = "修改档口首页装修数据", httpMethod = "PUT", response = R.class) - @Log(title = "修改档口首页装修数据", businessType = BusinessType.UPDATE) + @ApiOperation(value = "修改档口装修数据", httpMethod = "PUT", response = R.class) + @Log(title = "修改档口装修数据", businessType = BusinessType.UPDATE) @PutMapping("/decoration/{storeId}/{templateNum}") public R editDecoration(@PathVariable("storeId") Long storeId, @PathVariable("templateNum") Integer templateNum, @Validated @RequestBody StoreHomeDecorationVO homepageVO) { return R.ok(storeHomeService.updateStoreHomepage(storeId, templateNum, BeanUtil.toBean(homepageVO, StoreHomeDecorationDTO.class))); } + /** + * 查询档口首页 + */ + @PreAuthorize("@ss.hasPermi('system:sale:query')") + @ApiOperation(value = "查询档口首页", httpMethod = "GET", response = R.class) + @GetMapping(value = "/{storeId}") + public R getHomepageInfo(@PathVariable("storeId") Long storeId) { + return R.ok(BeanUtil.toBean(storeHomeService.getHomepageInfo(storeId), StoreHomeResVO.class)); + } + + /** + * 查询档口商品详情 + */ + @PreAuthorize("@ss.hasPermi('system:sale:query')") + @ApiOperation(value = "查询档口商品详情", httpMethod = "GET", response = R.class) + @GetMapping(value = "/store-prod/{storeId}/{storeProdId}") + public R getStoreProdInfo(@PathVariable("storeId") Long storeId, @PathVariable("storeProdId") Long storeProdId) { + return R.ok(BeanUtil.toBean(storeHomeService.getStoreProdInfo(storeId, storeProdId), StoreHomeProdResVO.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 82c056d44..23e019098 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 @@ -49,6 +49,18 @@ public class StoreProductController extends XktBaseController { return R.ok(BeanUtil.copyToList(storeProdService.fuzzyQueryList(storeId, prodArtNum), StoreProdFuzzyResVO.class)); } + /** + * 模糊查询档口商品 + */ + @PreAuthorize("@ss.hasPermi('system:product:query')") + @ApiOperation(value = "模糊查询档口商品", httpMethod = "GET", response = R.class) + @GetMapping(value = "/fuzzy/pic") + public R> fuzzyQueryResPicList(@RequestParam(value = "prodArtNum", required = false) String prodArtNum, + @RequestParam("storeId") Long storeId) { + return R.ok(BeanUtil.copyToList(storeProdService.fuzzyQueryResPicList(storeId, prodArtNum), StoreProdFuzzyResPicVO.class)); + } + + /** * 查询档口商品列表 */ @@ -64,7 +76,7 @@ public class StoreProductController extends XktBaseController { */ @PreAuthorize("@ss.hasPermi('system:product:query')") @ApiOperation(value = "获取档口商品详细信息", httpMethod = "GET", response = R.class) - @GetMapping(value = "/{storeProdId}") + @GetMapping(value = "/detail/{storeProdId}") public R getInfo(@PathVariable("storeProdId") Long storeProdId) { return R.ok(BeanUtil.toBean(storeProdService.selectStoreProductByStoreProdId(storeProdId), StoreProdResVO.class)); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeHomepage/StoreHomeDecorationVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeHomepage/StoreHomeDecorationVO.java index b4df57d7a..ee0056390 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeHomepage/StoreHomeDecorationVO.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeHomepage/StoreHomeDecorationVO.java @@ -29,6 +29,8 @@ public class StoreHomeDecorationVO { @ApiModelProperty(value = "业务类型ID,如果选择:不跳转 不传,选择:跳转店铺,传storeId,选择:跳转商品,传storeProdId") private Long bizId; + @ApiModelProperty(value = "业务名称") + private String bizName; @ApiModelProperty(value = "跳转类型 1. 不跳转 2. 跳转店铺 3. 跳转商品") private Integer jumpType; @ApiModelProperty(value = "文件名称") @@ -50,6 +52,8 @@ public class StoreHomeDecorationVO { @ApiModelProperty(value = "文件大小") private Long bizId; + @ApiModelProperty(value = "业务名称") + private String bizName; @ApiModelProperty(value = "文件大小") private Integer jumpType; @ApiModelProperty(value = "文件类型 2轮播小图 3店家推荐 4人气爆款 5当季新品 6销量排行") diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeHomepage/StoreHomeProdResVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeHomepage/StoreHomeProdResVO.java new file mode 100644 index 000000000..3f852cdb7 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeHomepage/StoreHomeProdResVO.java @@ -0,0 +1,162 @@ +package com.ruoyi.web.controller.xkt.vo.storeHomepage; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +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 +@JsonInclude(JsonInclude.Include.NON_NULL) +public class StoreHomeProdResVO { + + @ApiModelProperty(value = "档口基本信息") + private StoreBasicVO store; + @ApiModelProperty(value = "档口商品不同状态数量") + private StoreProdStatusCountVO storeProdStatusCount; + @ApiModelProperty(value = "档口商品基本信息") + private StoreProdInfoVO storeProd; + @ApiModelProperty(value = "是否已关注档口") + private Integer followStore; + @ApiModelProperty(value = "是否已收藏商品") + private Integer collectProd; + + @Data + @ApiModel(value = "档口商品基本信息") + public static class StoreProdStatusCountVO { + @ApiModelProperty(value = "在售数量") + private Integer onSaleNum; + @ApiModelProperty(value = "尾货数量") + private Integer tailGoodsNum; + @ApiModelProperty(value = "已下架数量") + private Integer offSaleNum; + } + + @Data + @ApiModel(value = "档口基本信息") + public static class StoreBasicVO { + @ApiModelProperty(value = "档口模板ID") + private Integer templateNum; + @ApiModelProperty(value = "档口ID") + private Long storeId; + @ApiModelProperty(value = "档口名称") + private String storeName; + @ApiModelProperty(value = "经营年限") + private Integer operateYears; + @ApiModelProperty(value = "联系电话") + private String contactPhone; + @ApiModelProperty(value = "备选联系电话") + private String contactBackPhone; + @ApiModelProperty(value = "微信账号") + private String wechatAccount; + @ApiModelProperty(value = "QQ账号") + private String qqAccount; + @ApiModelProperty(value = "档口地址") + private String storeAddress; + @ApiModelProperty(name = "营业执照名称") + private String licenseName; + } + + @Data + @ApiModel(value = "档口商品基本信息") + @Accessors(chain = true) + public static class StoreProdInfoVO { + @ApiModelProperty("档口商品ID") + private Long storeProdId; + @ApiModelProperty("档口商品名称") + private String prodName; + @ApiModelProperty(value = "商品货号") + private String prodArtNum; + @ApiModelProperty(value = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + @ApiModelProperty(value = "商品标题") + private String prodTitle; + @ApiModelProperty(value = "大小码加价") + private Integer overPrice; + @ApiModelProperty(value = "详情内容") + private StoreProdDetailVO detail; + @ApiModelProperty(value = "档口商品尺码库存列表") + private List colorList; + @ApiModelProperty(value = "档口文件列表") + private List mainPicList; + @ApiModelProperty(value = "档口类目属性列表") + private List cateAttrList; + } + + @Data + @ApiModel(value = "档口商品类目属性") + public static class StoreProdCateAttrVO { + @ApiModelProperty(value = "系统设置类目") + private String dictType; + @ApiModelProperty(value = "系统设置类目值") + private String dictValue; + } + + + @Data + @ApiModel(value = "档口商品文件") + public static class StoreProdFileVO { + @ApiModelProperty("档口商品名称") + private Long storeProdId; + @ApiModelProperty(value = "系统文件ID") + private Long fileId; + @ApiModelProperty(value = "文件路径") + private String fileUrl; + @ApiModelProperty(value = "文件类型") + private Integer fileType; + @ApiModelProperty(value = "文件名称") + private String fileName; + @ApiModelProperty(value = "文件大小") + private BigDecimal fileSize; + @ApiModelProperty(value = "排序") + private Integer orderNum; + } + + @Data + @ApiModel(value = "档口商品详情") + public static class StoreProdDetailVO { + @ApiModelProperty(value = "详情内容") + private String detail; + } + + @Data + @ApiModel(value = "档口商品基本信息") + @Accessors(chain = true) + public static class StoreProdColorVO { + @ApiModelProperty(value = "档口商品颜色ID") + private Long storeProdColorId; + @ApiModelProperty(value = "档口颜色ID") + private Long storeColorId; + @ApiModelProperty(value = "颜色名称") + private String colorName; + @ApiModelProperty(value = "排序") + private Integer orderNum; + @ApiModelProperty(value = "档口商品定价") + private BigDecimal price; + @ApiModelProperty(value = "商品尺码及库存") + List sizeStockList; + } + + @Data + @ApiModel(value = "档口商品尺码及库存") + @Accessors(chain = true) + public static class StoreProdSizeStockVO { + @ApiModelProperty(value = "商品尺码") + private Integer size; + @ApiModelProperty(value = "尺码库存") + private Integer stock; + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeHomepage/StoreHomeResVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeHomepage/StoreHomeResVO.java new file mode 100644 index 000000000..9bb21c990 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeHomepage/StoreHomeResVO.java @@ -0,0 +1,57 @@ +package com.ruoyi.web.controller.xkt.vo.storeHomepage; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author liujiang + * @version v1.0 + * @date 2025/3/27 15:12 + */ +@ApiModel("档口首页返回数据") +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class StoreHomeResVO { + + @ApiModelProperty(value = "档口基本信息") + private StoreBasicVO storeBasic; + @ApiModelProperty(value = "档口首页商品基本信息") + private StoreProdBasicVO storeProdBasic; + + @Data + @ApiModel(value = "档口基本信息") + public static class StoreBasicVO { + @ApiModelProperty(value = "档口模板ID") + private Integer templateNum; + @ApiModelProperty(value = "档口ID") + private Long storeId; + @ApiModelProperty(value = "档口名称") + private String storeName; + @ApiModelProperty(value = "经营年限") + private Integer operateYears; + @ApiModelProperty(value = "联系电话") + private String contactPhone; + @ApiModelProperty(value = "备选联系电话") + private String contactBackPhone; + @ApiModelProperty(value = "微信账号") + private String wechatAccount; + @ApiModelProperty(value = "QQ账号") + private String qqAccount; + @ApiModelProperty(value = "档口地址") + private String storeAddress; + } + + @Data + @ApiModel(value = "档口商品基本信息") + public static class StoreProdBasicVO { + @ApiModelProperty(value = "在售数量") + private Integer onSaleNum; + @ApiModelProperty(value = "尾货数量") + private Integer tailGoodsNum; + @ApiModelProperty(value = "已下架数量") + private Integer offSaleNum; + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdFuzzyResPicVO.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdFuzzyResPicVO.java new file mode 100644 index 000000000..7262025dc --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/xkt/vo/storeProd/StoreProdFuzzyResPicVO.java @@ -0,0 +1,28 @@ +package com.ruoyi.web.controller.xkt.vo.storeProd; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @author liujiang + * @version v1.0 + * @date 2025/3/27 15:12 + */ +@ApiModel("店铺首页编辑查询商品") +@Data +@Builder +@Accessors(chain = true) +public class StoreProdFuzzyResPicVO { + + @ApiModelProperty(value = "档口商品ID") + private Long storeProdId; + @ApiModelProperty(value = "档口ID") + private Long storeId; + @ApiModelProperty(value = "商品货号") + private String prodArtNum; + @ApiModelProperty(value = "商品主图") + private String mainPicUrl; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java index 6058fdb10..62b512c83 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java @@ -193,6 +193,11 @@ public class Constants */ public static final Long PLATFORM_INTERNAL_ACCOUNT_ID = 1L; + /** + * 排序值1 + */ + public static final Integer ORDER_NUM_1 = 1; + diff --git a/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProductStock.java b/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProductStock.java index fbd3bface..2b43818ad 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProductStock.java +++ b/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProductStock.java @@ -46,6 +46,10 @@ public class StoreProductStock extends XktBaseEntity { */ @Excel(name = "档口商品颜色ID") private Long storeProdColorId; + /** + * 档口颜色ID + */ + private Long storeColorId; /** * 颜色名称 */ diff --git a/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProductStorageDetail.java b/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProductStorageDetail.java index fbf6c139c..87189712d 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProductStorageDetail.java +++ b/xkt/src/main/java/com/ruoyi/xkt/domain/StoreProductStorageDetail.java @@ -45,6 +45,11 @@ public class StoreProductStorageDetail extends XktBaseEntity { */ @Excel(name = "档口商品颜色ID") private Long storeProdColorId; + /** + * 档口商品颜色ID + */ + @Excel(name = "档口颜色ID") + private Long storeColorId; /** * 颜色名称 */ diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeHomepage/StoreHomeProdResDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeHomepage/StoreHomeProdResDTO.java new file mode 100644 index 000000000..cd9997650 --- /dev/null +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeHomepage/StoreHomeProdResDTO.java @@ -0,0 +1,120 @@ +package com.ruoyi.xkt.dto.storeHomepage; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.ruoyi.xkt.dto.storeProdCateAttr.StoreProdCateAttrDTO; +import com.ruoyi.xkt.dto.storeProdDetail.StoreProdDetailDTO; +import com.ruoyi.xkt.dto.storeProduct.StoreProdStatusCountDTO; +import com.ruoyi.xkt.dto.storeProductFile.StoreProdFileResDTO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +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 +@JsonInclude(JsonInclude.Include.NON_NULL) +public class StoreHomeProdResDTO { + + @ApiModelProperty(value = "档口基本信息") + private StoreBasicDTO store; + @ApiModelProperty(value = "档口商品不同状态数量") + private StoreProdStatusCountDTO storeProdStatusCount; + @ApiModelProperty(value = "档口商品基本信息") + private StoreProdInfoDTO storeProd; + @ApiModelProperty(value = "是否已关注档口") + private Integer followStore; + @ApiModelProperty(value = "是否已收藏商品") + private Integer collectProd; + + @Data + @ApiModel(value = "档口基本信息") + @Accessors(chain = true) + public static class StoreBasicDTO { + @ApiModelProperty(value = "档口模板ID") + private Integer templateNum; + @ApiModelProperty(value = "档口ID") + private Long storeId; + @ApiModelProperty(value = "档口名称") + private String storeName; + @ApiModelProperty(value = "经营年限") + private Integer operateYears; + @ApiModelProperty(value = "联系电话") + private String contactPhone; + @ApiModelProperty(value = "备选联系电话") + private String contactBackPhone; + @ApiModelProperty(value = "微信账号") + private String wechatAccount; + @ApiModelProperty(value = "QQ账号") + private String qqAccount; + @ApiModelProperty(value = "档口地址") + private String storeAddress; + @ApiModelProperty(name = "营业执照名称") + private String licenseName; + } + + @Data + @ApiModel(value = "档口商品基本信息") + @Accessors(chain = true) + public static class StoreProdInfoDTO { + @ApiModelProperty("档口商品ID") + private Long storeProdId; + @ApiModelProperty("档口商品名称") + private String prodName; + @ApiModelProperty(value = "商品货号") + private String prodArtNum; + @ApiModelProperty(value = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + @ApiModelProperty(value = "商品标题") + private String prodTitle; + @ApiModelProperty(value = "大小码加价") + private Integer overPrice; + @ApiModelProperty(value = "详情内容") + private StoreProdDetailDTO detail; + @ApiModelProperty(value = "档口商品尺码库存列表") + private List colorList; + @ApiModelProperty(value = "档口文件列表") + private List mainPicList; + @ApiModelProperty(value = "档口类目属性列表") + private List cateAttrList; + } + + @Data + @ApiModel(value = "档口商品基本信息") + @Accessors(chain = true) + public static class StoreProdColorDTO { + @ApiModelProperty(value = "档口商品颜色ID") + private Long storeProdColorId; + @ApiModelProperty(value = "档口颜色ID") + private Long storeColorId; + @ApiModelProperty(value = "颜色名称") + private String colorName; + @ApiModelProperty(value = "排序") + private Integer orderNum; + @ApiModelProperty(value = "档口商品定价") + private BigDecimal price; + @ApiModelProperty(value = "商品尺码及库存") + List sizeStockList; + } + + @Data + @ApiModel(value = "档口商品尺码及库存") + @Accessors(chain = true) + public static class StoreProdSizeStockDTO { + @ApiModelProperty(value = "商品尺码") + private Integer size; + @ApiModelProperty(value = "尺码库存") + private Integer stock; + } + +} diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeHomepage/StoreHomeResDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeHomepage/StoreHomeResDTO.java new file mode 100644 index 000000000..812415fe8 --- /dev/null +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeHomepage/StoreHomeResDTO.java @@ -0,0 +1,49 @@ +package com.ruoyi.xkt.dto.storeHomepage; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.ruoyi.xkt.dto.storeProduct.StoreProdStatusCountDTO; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @author liujiang + * @version v1.0 + * @date 2025/3/27 15:12 + */ +@ApiModel("档口首页返回数据") +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class StoreHomeResDTO { + + @ApiModelProperty(value = "档口基本信息") + private StoreBasicDTO store; + @ApiModelProperty(value = "档口首页商品基本信息") + private StoreProdStatusCountDTO storeProdStatusCount; + + @Data + @ApiModel(value = "档口基本信息") + @Accessors(chain = true) + public static class StoreBasicDTO { + @ApiModelProperty(value = "档口模板ID") + private Integer templateNum; + @ApiModelProperty(value = "档口ID") + private Long storeId; + @ApiModelProperty(value = "档口名称") + private String storeName; + @ApiModelProperty(value = "经营年限") + private Integer operateYears; + @ApiModelProperty(value = "联系电话") + private String contactPhone; + @ApiModelProperty(value = "备选联系电话") + private String contactBackPhone; + @ApiModelProperty(value = "微信账号") + private String wechatAccount; + @ApiModelProperty(value = "QQ账号") + private String qqAccount; + @ApiModelProperty(value = "档口地址") + private String storeAddress; + } + +} diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProdStorage/StoreProdStorageDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProdStorage/StoreProdStorageDTO.java index d2db4f8b2..939c7d10a 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProdStorage/StoreProdStorageDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProdStorage/StoreProdStorageDTO.java @@ -42,6 +42,9 @@ public class StoreProdStorageDTO { @NotNull(message = "档口商品颜色ID不能为空!") @ApiModelProperty(value = "档口商品颜色ID") private Long storeProdColorId; + @NotNull(message = "档口颜色ID不能为空!") + @ApiModelProperty(value = "档口颜色ID") + private Long storeColorId; @NotBlank(message = "颜色名称不能为空!") @ApiModelProperty(value = "颜色名称") private String colorName; diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdFuzzyResPicDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdFuzzyResPicDTO.java new file mode 100644 index 000000000..14537e803 --- /dev/null +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdFuzzyResPicDTO.java @@ -0,0 +1,28 @@ +package com.ruoyi.xkt.dto.storeProduct; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @author liujiang + * @version v1.0 + * @date 2025/3/27 15:12 + */ +@ApiModel("店铺首页编辑查询商品") +@Data +@Builder +@Accessors(chain = true) +public class StoreProdFuzzyResPicDTO { + + @ApiModelProperty(value = "档口商品ID") + private Long storeProdId; + @ApiModelProperty(value = "档口ID") + private Long storeId; + @ApiModelProperty(value = "商品货号") + private String prodArtNum; + @ApiModelProperty(value = "商品主图") + private String mainPicUrl; +} 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 1ec9c3d06..ab5c7526b 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 @@ -60,7 +60,7 @@ public class StoreProdResDTO { private List fileList; @ApiModelProperty(value = "档口类目属性列表") private List cateAttrList; - @ApiModelProperty(value = "档口宿友颜色列表") + @ApiModelProperty(value = "档口所有颜色列表") private List allColorList; @ApiModelProperty(value = "档口颜色列表") private List colorList; diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdStatusCountDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdStatusCountDTO.java new file mode 100644 index 000000000..248942bd3 --- /dev/null +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProduct/StoreProdStatusCountDTO.java @@ -0,0 +1,25 @@ +package com.ruoyi.xkt.dto.storeProduct; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author liujiang + * @version v1.0 + * @date 2025/3/27 15:12 + */ +@ApiModel("档口首页返回数据") +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class StoreProdStatusCountDTO { + + @ApiModelProperty(value = "在售数量") + private Integer onSaleNum; + @ApiModelProperty(value = "尾货数量") + private Integer tailGoodsNum; + @ApiModelProperty(value = "已下架数量") + private Integer offSaleNum; + +} diff --git a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductStock/StoreProdStockDTO.java b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductStock/StoreProdStockDTO.java index b607bb015..3e9582e1d 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductStock/StoreProdStockDTO.java +++ b/xkt/src/main/java/com/ruoyi/xkt/dto/storeProductStock/StoreProdStockDTO.java @@ -23,6 +23,8 @@ public class StoreProdStockDTO { private String prodArtNum; @ApiModelProperty(value = "档口商品颜色ID") private Long storeProdColorId; + @ApiModelProperty(value = "档口颜色ID") + private Long storeColorId; @ApiModelProperty(value = "颜色名称") private String colorName; @ApiModelProperty(value = "尺码30") 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 8cd6f5d2f..82f52bcde 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductFileMapper.java +++ b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductFileMapper.java @@ -95,4 +95,16 @@ public interface StoreProductFileMapper extends BaseMapper { */ List selectPicSpaceList(@Param("storeId") Long storeId, @Param("fileType") Integer fileType); + /** + * 查询所有的商品主图 + * + * @param storeProdId 档口商品ID + * @param storeId 档口ID + * @param fileType 文件类型 + * @return + */ + List selectTotalMainPicList(@Param("storeProdId") Long storeProdId, + @Param("storeId") Long storeId, + @Param("fileType") Integer fileType); + } diff --git a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductMapper.java b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductMapper.java index c5a0ecaee..05f2d9c65 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductMapper.java +++ b/xkt/src/main/java/com/ruoyi/xkt/mapper/StoreProductMapper.java @@ -2,7 +2,9 @@ package com.ruoyi.xkt.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.xkt.domain.StoreProduct; -import com.ruoyi.xkt.dto.storeProduct.StoreProdFuzzyResDTO; +import com.ruoyi.xkt.dto.storeHomepage.StoreHomeResDTO; +import com.ruoyi.xkt.dto.storeProduct.StoreProdFuzzyResPicDTO; +import com.ruoyi.xkt.dto.storeProduct.StoreProdStatusCountDTO; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @@ -64,4 +66,19 @@ public interface StoreProductMapper extends BaseMapper { */ public int deleteStoreProductByStoreProdIds(Long[] storeProdIds); + /** + * 根据商品货号模糊查询档口商品并返回商品主图 + * + * @param storeId 档口ID + * @param prodArtNum 货号 + * @return List + */ + List fuzzyQueryResPicList(@Param("storeId") Long storeId, @Param("prodArtNum") String prodArtNum); + + /** + * 查询档口的在售、尾货、下架数量 + * @param storeId 档口ID + * @return StoreProdCountDTO + */ + StoreProdStatusCountDTO selectStatusCount(Long storeId); } diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreCustomerService.java b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreCustomerService.java index 3a69a12d1..5628cc9a5 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreCustomerService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreCustomerService.java @@ -72,6 +72,7 @@ public interface IStoreCustomerService { /** * 模糊查询客户名称列表 + * * @param storeId 档口ID * @param cusName 客户名称 * @return List diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreFactoryService.java b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreFactoryService.java index a8395e7b2..6ef247bb7 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreFactoryService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreFactoryService.java @@ -18,7 +18,7 @@ public interface IStoreFactoryService { /** * 查询档口合作工厂 * - * @param storeId 档口ID + * @param storeId 档口ID * @param storeFacId 档口合作工厂主键 * @return 档口合作工厂 */ diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreHomepageService.java b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreHomepageService.java index e1e372866..ec18c4b4e 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreHomepageService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreHomepageService.java @@ -2,6 +2,8 @@ package com.ruoyi.xkt.service; import com.ruoyi.xkt.dto.storeHomepage.StoreHomeDecorationDTO; import com.ruoyi.xkt.dto.storeHomepage.StoreHomeDecorationResDTO; +import com.ruoyi.xkt.dto.storeHomepage.StoreHomeProdResDTO; +import com.ruoyi.xkt.dto.storeHomepage.StoreHomeResDTO; /** * 档口首页Service接口 @@ -39,4 +41,21 @@ public interface IStoreHomepageService { */ Integer updateStoreHomepage(Long storeId, Integer templateNum, StoreHomeDecorationDTO homeDTO); + /** + * 获取档口首页数据 + * + * @param storeId 档口ID + * @return StoreHomeResDTO + */ + StoreHomeResDTO getHomepageInfo(Long storeId); + + /** + * 首页查询档口商品详情 + * + * @param storeId 档口ID + * @param storeProdId 档口商品详情ID + * @return StoreHomeProdResDTO + */ + StoreHomeProdResDTO getStoreProdInfo(Long storeId, Long storeProdId); + } 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 810c800b2..fe7eeb77e 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,5 @@ package com.ruoyi.xkt.service; -import com.ruoyi.xkt.domain.StoreProductColor; import com.ruoyi.xkt.dto.storeProdColor.StoreProdColorResDTO; import java.util.List; @@ -15,7 +14,7 @@ public interface IStoreProductColorService { /** * 根据商店ID和产品款式编号模糊查询颜色列表 * - * @param storeId 商店ID,用于限定查询范围 + * @param storeId 商店ID,用于限定查询范围 * @param prodArtNum 产品款式编号,用于模糊匹配产品 * @return 返回一个列表,包含匹配的产品颜色信息 */ 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 48f1442f8..f510219ce 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductService.java @@ -19,14 +19,15 @@ public interface IStoreProductService { * @param storeProdId 档口商品主键 * @return 档口商品 */ - public StoreProdResDTO selectStoreProductByStoreProdId(Long storeProdId); + StoreProdResDTO selectStoreProductByStoreProdId(Long storeProdId); /** * 获取档口图片空间 + * * @param storeId 档口ID * @return StoreProdPicSpaceResDTO */ - public StoreProdPicSpaceResDTO getStoreProductPicSpace(Long storeId); + StoreProdPicSpaceResDTO getStoreProductPicSpace(Long storeId); /** * 查询档口商品列表 @@ -34,9 +35,9 @@ public interface IStoreProductService { * @param storeProduct 档口商品 * @return 档口商品集合 */ - public List selectStoreProductList(StoreProduct storeProduct); + List selectStoreProductList(StoreProduct storeProduct); - public Page page(StoreProdPageDTO pageDTO); + Page page(StoreProdPageDTO pageDTO); /** @@ -45,7 +46,7 @@ public interface IStoreProductService { * @param storeProdDTO 档口商品 * @return 结果 */ - public int insertStoreProduct(StoreProdDTO storeProdDTO); + int insertStoreProduct(StoreProdDTO storeProdDTO); /** * 修改档口商品 @@ -55,6 +56,11 @@ public interface IStoreProductService { */ public int updateStoreProduct(Long storeProdId, StoreProdDTO storeProdDTO); + /** + * 更新档口商品状态 + * + * @param prodStatusDTO 更新状态入参 + */ public void updateStoreProductStatus(StoreProdStatusDTO prodStatusDTO); /** @@ -75,10 +81,19 @@ public interface IStoreProductService { /** * 根据档口ID和商品货号模糊查询货号列表 - * @param storeId 档口ID + * + * @param storeId 档口ID * @param prodArtNum 商品货号 * @return List */ List fuzzyQueryList(Long storeId, String prodArtNum); + /** + * 根据档口ID和商品货号模糊查询货号列表,返回数据带上商品主图 + * + * @param storeId 档口ID + * @param prodArtNum 商品货号 + * @return List + */ + List fuzzyQueryResPicList(Long storeId, String prodArtNum); } diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductStockService.java b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductStockService.java index 930fc1c73..b125116fb 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductStockService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreProductStockService.java @@ -2,10 +2,10 @@ package com.ruoyi.xkt.service; import com.ruoyi.common.core.page.Page; import com.ruoyi.xkt.domain.StoreProductStock; +import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockDTO; import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageDTO; import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockPageResDTO; import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockResDTO; -import com.ruoyi.xkt.dto.storeProductStock.StoreProdStockDTO; import java.util.List; @@ -19,8 +19,7 @@ public interface IStoreProductStockService { /** * 查询档口商品库存 * - * - * @param storeId 档口ID + * @param storeId 档口ID * @param storeProdStockId 档口商品库存主键 * @return 档口商品库存 */ @@ -68,7 +67,8 @@ public interface IStoreProductStockService { /** * 增加库存 - * @param storeId 档口ID + * + * @param storeId 档口ID * @param increaseStockList 增加库存入参 * @return int */ @@ -76,7 +76,8 @@ public interface IStoreProductStockService { /** * 减少库存 - * @param storeId 档口ID + * + * @param storeId 档口ID * @param decreaseStockList 减少库存入参 * @return int */ @@ -84,7 +85,8 @@ public interface IStoreProductStockService { /** * 清空库存 - * @param storeId 档口ID + * + * @param storeId 档口ID * @param storeProdStockId 清空库存 * @return int */ @@ -92,8 +94,9 @@ public interface IStoreProductStockService { /** * 直接调整库存 - * @param storeId 档口ID - * @param updateStockList 调整库存入参 + * + * @param storeId 档口ID + * @param updateStockList 调整库存入参 * @param multiplierFactor 乘积因子 0 直接调整库存,将库存更新为页面输入的数量 1 不变数量 * @return int */ @@ -101,6 +104,7 @@ public interface IStoreProductStockService { /** * 查询档口商品分页 + * * @param pageDTO 分页入参 * @return List */ @@ -108,7 +112,8 @@ public interface IStoreProductStockService { /** * 根据档口ID和商品货号查询档口商品库存 - * @param storeId 档口ID + * + * @param storeId 档口ID * @param prodArtNum 商品货号 * @return String */ diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreQuickFunctionService.java b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreQuickFunctionService.java index f630cf91f..346c3ff4f 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreQuickFunctionService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreQuickFunctionService.java @@ -1,6 +1,5 @@ package com.ruoyi.xkt.service; -import com.ruoyi.xkt.domain.StoreQuickFunction; import com.ruoyi.xkt.dto.storeQuickFunction.StoreQuickFuncDTO; import java.util.List; @@ -14,6 +13,7 @@ import java.util.List; public interface IStoreQuickFunctionService { /** * 获取当前档口绑定的快捷功能 + * * @param storeId 当前档口ID * @return List */ @@ -21,6 +21,7 @@ public interface IStoreQuickFunctionService { /** * 更新档口绑定的快捷功能 + * * @param storeQuickFuncDTO 绑定档口快捷功能的DTO * @return */ diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreRoleAccountService.java b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreRoleAccountService.java index df3df7d23..693b9938e 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreRoleAccountService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreRoleAccountService.java @@ -46,6 +46,7 @@ public interface IStoreRoleAccountService { /** * 停用/启用档口子账号 + * * @param updateStatusDTO * @return */ diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreSaleService.java b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreSaleService.java index 71a502ba4..9246ad400 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/IStoreSaleService.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/IStoreSaleService.java @@ -1,15 +1,12 @@ package com.ruoyi.xkt.service; import com.ruoyi.common.core.page.Page; -import com.ruoyi.xkt.domain.StoreSale; import com.ruoyi.xkt.dto.storeCustomer.StoreCusGeneralSaleDTO; import com.ruoyi.xkt.dto.storeSale.StoreSaleDTO; import com.ruoyi.xkt.dto.storeSale.StoreSalePageDTO; import com.ruoyi.xkt.dto.storeSale.StoreSalePageResDTO; import com.ruoyi.xkt.dto.storeSale.StoreSalePayStatusDTO; -import java.util.List; - /** * 档口销售出库Service接口 * @@ -51,8 +48,9 @@ public interface IStoreSaleService { /** * 获取当前档口客户的销售业绩 - * @param days 查询时间ditff - * @param storeId 档口ID + * + * @param days 查询时间ditff + * @param storeId 档口ID * @param storeCusId 档口客户ID * @return StoreCusGeneralSaleDTO */ @@ -60,6 +58,7 @@ public interface IStoreSaleService { /** * 分页查询销售出库列表 + * * @param pageDTO 入参 * @return Page */ @@ -67,7 +66,7 @@ public interface IStoreSaleService { /** * 清除店铺顾客债务信息 - * + *

* 该方法旨在根据提供的店铺销售支付状态信息来清除或更新店铺顾客的债务记录 * 它通常在完成销售交易、债务偿还或其他需要调整顾客债务的情况下调用 * diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/ExpressServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/ExpressServiceImpl.java index 2cdd81092..c194c7a39 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/ExpressServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/ExpressServiceImpl.java @@ -60,8 +60,8 @@ public class ExpressServiceImpl implements IExpressService { Assert.notEmpty(cityCode); Assert.notEmpty(countyCode); Map map = expressFeeConfigMapper.selectList(Wrappers.lambdaQuery(ExpressFeeConfig.class) - .eq(ExpressFeeConfig::getExpressId, expressId) - .in(ExpressFeeConfig::getRegionCode, Arrays.asList(provinceCode, cityCode, countyCode))) + .eq(ExpressFeeConfig::getExpressId, expressId) + .in(ExpressFeeConfig::getRegionCode, Arrays.asList(provinceCode, cityCode, countyCode))) .stream() //过滤掉已被删除的配置 .filter(BeanValidators::exists) diff --git a/xkt/src/main/java/com/ruoyi/xkt/service/impl/FinanceBillServiceImpl.java b/xkt/src/main/java/com/ruoyi/xkt/service/impl/FinanceBillServiceImpl.java index 36cf38834..f6049d15e 100644 --- a/xkt/src/main/java/com/ruoyi/xkt/service/impl/FinanceBillServiceImpl.java +++ b/xkt/src/main/java/com/ruoyi/xkt/service/impl/FinanceBillServiceImpl.java @@ -2,12 +2,12 @@ package com.ruoyi.xkt.service.impl; import com.ruoyi.common.constant.Constants; import com.ruoyi.xkt.domain.InternalAccount; -import com.ruoyi.xkt.dto.order.StoreOrderInfo; import com.ruoyi.xkt.dto.finance.FinanceBillInfo; +import com.ruoyi.xkt.dto.order.StoreOrderInfo; import com.ruoyi.xkt.mapper.FinanceBillDetailMapper; import com.ruoyi.xkt.mapper.FinanceBillMapper; -import com.ruoyi.xkt.service.IInternalAccountService; import com.ruoyi.xkt.service.IFinanceBillService; +import com.ruoyi.xkt.service.IInternalAccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; 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 f9f63d8aa..ba86e4f0a 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 @@ -5,18 +5,20 @@ 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.Store; -import com.ruoyi.xkt.domain.StoreHomepage; -import com.ruoyi.xkt.domain.StoreProduct; -import com.ruoyi.xkt.domain.SysFile; +import com.ruoyi.xkt.domain.*; import com.ruoyi.xkt.dto.storeHomepage.StoreHomeDecorationDTO; import com.ruoyi.xkt.dto.storeHomepage.StoreHomeDecorationResDTO; +import com.ruoyi.xkt.dto.storeHomepage.StoreHomeProdResDTO; +import com.ruoyi.xkt.dto.storeHomepage.StoreHomeResDTO; +import com.ruoyi.xkt.dto.storeProdCateAttr.StoreProdCateAttrDTO; +import com.ruoyi.xkt.dto.storeProdDetail.StoreProdDetailDTO; +import com.ruoyi.xkt.dto.storeProduct.StoreProdStatusCountDTO; +import com.ruoyi.xkt.dto.storeProductFile.StoreProdFileResDTO; +import com.ruoyi.xkt.enums.FileType; import com.ruoyi.xkt.enums.HomepageJumpType; import com.ruoyi.xkt.enums.HomepageType; -import com.ruoyi.xkt.mapper.StoreHomepageMapper; -import com.ruoyi.xkt.mapper.StoreMapper; -import com.ruoyi.xkt.mapper.StoreProductMapper; -import com.ruoyi.xkt.mapper.SysFileMapper; +import com.ruoyi.xkt.enums.ProductSizeStatus; +import com.ruoyi.xkt.mapper.*; import com.ruoyi.xkt.service.IStoreHomepageService; import lombok.RequiredArgsConstructor; import org.apache.commons.collections4.CollectionUtils; @@ -30,6 +32,8 @@ import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import static com.ruoyi.common.constant.Constants.*; + /** * 档口首页Service业务层处理 * @@ -44,6 +48,13 @@ public class StoreHomepageServiceImpl implements IStoreHomepageService { final StoreHomepageMapper storeHomeMapper; final StoreMapper storeMapper; final StoreProductMapper storeProdMapper; + final StoreProductDetailMapper prodDetailMapper; + final StoreProductColorMapper prodColorMapper; + final StoreProductColorSizeMapper prodColorSizeMapper; + final StoreProductStockMapper prodStockMapper; + final StoreProductColorPriceMapper prodColorPriceMapper; + final StoreProductFileMapper prodFileMapper; + final StoreProductCategoryAttributeMapper prodCateAttrMapper; /** @@ -102,7 +113,7 @@ public class StoreHomepageServiceImpl implements IStoreHomepageService { StoreHomeDecorationResDTO.DecorationDTO decorationDTO = BeanUtil.toBean(x, StoreHomeDecorationResDTO.DecorationDTO.class) .setBizName((Objects.equals(x.getJumpType(), HomepageJumpType.JUMP_PRODUCT.getValue())) ? (storeProdMap.containsKey(x.getBizId()) ? storeProdMap.get(x.getBizId()).getProdName() : null) - : (ObjectUtils.isEmpty(x.getJumpType()) ? null : store.getStoreName())); + : (ObjectUtils.isEmpty(x.getBizId()) ? null : store.getStoreName())); if (fileMap.containsKey(x.getFileId())) { decorationDTO.setFileType(x.getFileType()).setFileName(fileMap.get(x.getFileId()).getFileName()) .setFileUrl(fileMap.get(x.getFileId()).getFileUrl()).setFileSize(fileMap.get(x.getFileId()).getFileSize()); @@ -156,6 +167,237 @@ public class StoreHomepageServiceImpl implements IStoreHomepageService { return homepageList.size(); } + /** + * 获取档口首页数据 + * + * @param storeId 档口ID + * @return StoreHomeResDTO + */ + @Override + @Transactional(readOnly = true) + public StoreHomeResDTO getHomepageInfo(Long storeId) { + // 档口基本信息 + Store store = Optional.ofNullable(this.storeMapper.selectOne(new LambdaQueryWrapper() + .eq(Store::getId, storeId).eq(Store::getDelFlag, Constants.UNDELETED))) + .orElseThrow(() -> new ServiceException("档口不存在!", HttpStatus.ERROR)); + // 档口各个状态的数量 + StoreProdStatusCountDTO statusCountDTO = this.storeProdMapper.selectStatusCount(storeId); + + // TODO 根据模板Num返回具体的模板数据 + // TODO 根据模板Num返回具体的模板数据 + // TODO 根据模板Num返回具体的模板数据 + + + return new StoreHomeResDTO() {{ + setStore(BeanUtil.toBean(store, StoreBasicDTO.class).setStoreId(storeId)); + setStoreProdStatusCount(statusCountDTO); + }}; + } + + /** + * 首页查询档口商品详情 + * + * @param storeId 档口ID + * @param storeProdId 档口商品详情ID + * @return StoreHomeProdResDTO + */ + @Override + @Transactional(readOnly = true) + public StoreHomeProdResDTO getStoreProdInfo(Long storeId, Long storeProdId) { + + // TODO 获取当前登录者,判断是否关注当前档口是否收藏当前商品 + // TODO 获取当前登录者,判断是否关注当前档口是否收藏当前商品 + // TODO 获取当前登录者,判断是否关注当前档口是否收藏当前商品 + + // 档口基本信息 + Store store = Optional.ofNullable(this.storeMapper.selectOne(new LambdaQueryWrapper() + .eq(Store::getId, storeId).eq(Store::getDelFlag, Constants.UNDELETED))) + .orElseThrow(() -> new ServiceException("档口不存在!", HttpStatus.ERROR)); + // 获取商品基本信息 + StoreProduct storeProd = Optional.ofNullable(this.storeProdMapper.selectOne(new LambdaQueryWrapper() + .eq(StoreProduct::getId, storeProdId).eq(StoreProduct::getDelFlag, Constants.UNDELETED) + .eq(StoreProduct::getStoreId, storeId))) + .orElseThrow(() -> new ServiceException("档口商品不存在!", HttpStatus.ERROR)); + // 档口各个状态的数量 + StoreProdStatusCountDTO statusCountDTO = this.storeProdMapper.selectStatusCount(storeId); + // 获取商品详情内容 + StoreProductDetail detail = this.prodDetailMapper.selectOne(new LambdaQueryWrapper() + .eq(StoreProductDetail::getStoreProdId, storeProdId).eq(StoreProductDetail::getDelFlag, Constants.UNDELETED)); + // 获取商品颜色列表 + List colorList = this.prodColorMapper.selectList(new LambdaQueryWrapper() + .eq(StoreProductColor::getStoreProdId, storeProdId).eq(StoreProductColor::getDelFlag, Constants.UNDELETED)); + // 档口商品主图列表 + List mainPicDTOList = this.prodFileMapper.selectTotalMainPicList(storeProdId, storeId, FileType.MAIN_PIC.getValue()); + // 档口商品颜色价格列表 + List colorPriceList = this.prodColorPriceMapper.selectList(new LambdaQueryWrapper() + .eq(StoreProductColorPrice::getStoreProdId, storeProdId).eq(StoreProductColorPrice::getDelFlag, Constants.UNDELETED)); + Map colorPriceMap = colorPriceList.stream().collect(Collectors + .toMap(x -> x.getStoreProdId().toString() + x.getStoreColorId().toString(), Function.identity())); + // 档口商品属性 + List prodAttrList = this.prodCateAttrMapper.selectList(new LambdaQueryWrapper() + .eq(StoreProductCategoryAttribute::getStoreProdId, storeProdId).eq(StoreProductCategoryAttribute::getDelFlag, Constants.UNDELETED)); + // 档口商品标准尺码 + List standardSizeList = this.prodColorSizeMapper.selectList(new LambdaQueryWrapper() + .eq(StoreProductColorSize::getStoreProdId, storeProdId).eq(StoreProductColorSize::getDelFlag, Constants.UNDELETED) + .eq(StoreProductColorSize::getStandard, ProductSizeStatus.STANDARD.getValue())); + Map> colorSizeMap = standardSizeList.stream().collect(Collectors + .groupingBy(x -> x.getStoreProdId().toString() + x.getStoreColorId().toString())); + // 根据标准尺码去找对应尺码的库存数量 + List prodStockList = this.prodStockMapper.selectList(new LambdaQueryWrapper() + .eq(StoreProductStock::getStoreProdId, storeProdId) + .in(StoreProductStock::getStoreProdColorId, colorList.stream().map(StoreProductColor::getId).distinct().collect(Collectors.toList())) + .eq(StoreProductStock::getDelFlag, Constants.UNDELETED)); + // 获取档口颜色尺码的库存数量 + Map> colorSizeStockMap = this.convertSizeStock(prodStockList, standardSizeList); + List colorSizeStockList = colorList.stream() + .map(color -> BeanUtil.toBean(color, StoreHomeProdResDTO.StoreProdColorDTO.class) + .setStoreProdColorId(color.getId()) + // 获取颜色设定的价格 + .setPrice(colorPriceMap.containsKey(color.getStoreProdId().toString() + color.getStoreColorId().toString()) + ? colorPriceMap.get(color.getStoreProdId().toString() + color.getStoreColorId().toString()).getPrice() : null) + // 设定库存 + .setSizeStockList(colorSizeMap.containsKey(color.getStoreProdId().toString() + color.getStoreColorId().toString()) + ? colorSizeStockMap.get(color.getStoreProdId().toString() + color.getStoreColorId().toString()) : null)) + .collect(Collectors.toList()); + // 商品基础信息 + StoreHomeProdResDTO.StoreProdInfoDTO storeProdDTO = BeanUtil.toBean(storeProd, StoreHomeProdResDTO.StoreProdInfoDTO.class) + .setStoreProdId(storeProdId).setMainPicList(mainPicDTOList) + .setDetail(BeanUtil.toBean(detail, StoreProdDetailDTO.class)) + .setCateAttrList(BeanUtil.copyToList(prodAttrList, StoreProdCateAttrDTO.class)) + .setColorList(colorSizeStockList); + return new StoreHomeProdResDTO() {{ + setStore(BeanUtil.toBean(store, StoreBasicDTO.class).setStoreId(storeId)); + setStoreProd(storeProdDTO); + setStoreProdStatusCount(statusCountDTO); + + // TODO 还有关注的档口及收藏的商品 + // TODO 还有关注的档口及收藏的商品 + // TODO 还有关注的档口及收藏的商品 + // TODO 还有关注的档口及收藏的商品 + + }}; + } + + /** + * 获取档口商品颜色尺码的库存 + * + * @param stockList 库存数量 + * @param standardSizeList 当前商品的标准尺码 + * @return Map> + */ + private Map> convertSizeStock(List stockList, List standardSizeList) { + Map> colorSizeStockMap = new HashMap<>(); + if (CollectionUtils.isEmpty(stockList)) { + return colorSizeStockMap; + } + // 标准尺码map + Map standardSizeMap = standardSizeList.stream().collect(Collectors.toMap(StoreProductColorSize::getSize, Function.identity())); + Map> map = stockList.stream().collect(Collectors.groupingBy(x -> x.getStoreProdId().toString() + x.getStoreColorId().toString())); + map.forEach((unionId, tempStockList) -> { + 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 StoreHomeProdResDTO.StoreProdSizeStockDTO() {{ + setSize(SIZE_30); + setStock(size30Stock); + }}); + } + Integer size31Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize31(), 0)).reduce(0, Integer::sum); + if (standardSizeMap.containsKey(SIZE_31)) { + sizeStockList.add(new StoreHomeProdResDTO.StoreProdSizeStockDTO() {{ + setSize(SIZE_31); + setStock(size31Stock); + }}); + } + Integer size32Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize32(), 0)).reduce(0, Integer::sum); + if (standardSizeMap.containsKey(SIZE_32)) { + sizeStockList.add(new StoreHomeProdResDTO.StoreProdSizeStockDTO() {{ + setSize(SIZE_32); + setStock(size32Stock); + }}); + } + Integer size33Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize33(), 0)).reduce(0, Integer::sum); + if (standardSizeMap.containsKey(SIZE_33)) { + sizeStockList.add(new StoreHomeProdResDTO.StoreProdSizeStockDTO() {{ + setSize(SIZE_33); + setStock(size33Stock); + }}); + } + Integer size34Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize34(), 0)).reduce(0, Integer::sum); + if (standardSizeMap.containsKey(SIZE_34)) { + sizeStockList.add(new StoreHomeProdResDTO.StoreProdSizeStockDTO() {{ + setSize(SIZE_34); + setStock(size34Stock); + }}); + } + Integer size35Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize35(), 0)).reduce(0, Integer::sum); + if (standardSizeMap.containsKey(SIZE_35)) { + sizeStockList.add(new StoreHomeProdResDTO.StoreProdSizeStockDTO() {{ + setSize(SIZE_35); + setStock(size35Stock); + }}); + } + Integer size36Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize36(), 0)).reduce(0, Integer::sum); + if (standardSizeMap.containsKey(SIZE_36)) { + sizeStockList.add(new StoreHomeProdResDTO.StoreProdSizeStockDTO() {{ + setSize(SIZE_36); + setStock(size36Stock); + }}); + } + Integer size37Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize37(), 0)).reduce(0, Integer::sum); + if (standardSizeMap.containsKey(SIZE_37)) { + sizeStockList.add(new StoreHomeProdResDTO.StoreProdSizeStockDTO() {{ + setSize(SIZE_37); + setStock(size37Stock); + }}); + } + Integer size38Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize38(), 0)).reduce(0, Integer::sum); + if (standardSizeMap.containsKey(SIZE_38)) { + sizeStockList.add(new StoreHomeProdResDTO.StoreProdSizeStockDTO() {{ + setSize(SIZE_38); + setStock(size38Stock); + }}); + } + Integer size39Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize39(), 0)).reduce(0, Integer::sum); + if (standardSizeMap.containsKey(SIZE_39)) { + sizeStockList.add(new StoreHomeProdResDTO.StoreProdSizeStockDTO() {{ + setSize(SIZE_39); + setStock(size39Stock); + }}); + } + Integer size40Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize40(), 0)).reduce(0, Integer::sum); + if (standardSizeMap.containsKey(SIZE_40)) { + sizeStockList.add(new StoreHomeProdResDTO.StoreProdSizeStockDTO() {{ + setSize(SIZE_40); + setStock(size40Stock); + }}); + } + Integer size41Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize41(), 0)).reduce(0, Integer::sum); + if (standardSizeMap.containsKey(SIZE_41)) { + sizeStockList.add(new StoreHomeProdResDTO.StoreProdSizeStockDTO() {{ + setSize(SIZE_41); + setStock(size41Stock); + }}); + } + Integer size42Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize42(), 0)).reduce(0, Integer::sum); + if (standardSizeMap.containsKey(SIZE_42)) { + sizeStockList.add(new StoreHomeProdResDTO.StoreProdSizeStockDTO() {{ + setSize(SIZE_42); + setStock(size42Stock); + }}); + } + Integer size43Stock = tempStockList.stream().map(x -> ObjectUtils.defaultIfNull(x.getSize43(), 0)).reduce(0, Integer::sum); + if (standardSizeMap.containsKey(SIZE_43)) { + sizeStockList.add(new StoreHomeProdResDTO.StoreProdSizeStockDTO() {{ + setSize(SIZE_43); + setStock(size43Stock); + }}); + } + colorSizeStockMap.put(unionId, sizeStockList); + }); + return colorSizeStockMap; + } + /** * 新增档口首页模板展示 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 318bc4370..7c1ead235 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 @@ -37,6 +37,8 @@ import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import static com.ruoyi.common.constant.Constants.ORDER_NUM_1; + /** * 档口商品Service业务层处理 * @@ -407,6 +409,19 @@ public class StoreProductServiceImpl implements IStoreProductService { .setColorList(colorMap.getOrDefault(x.getId(), new ArrayList<>()))).collect(Collectors.toList()); } + /** + * 根据档口ID和商品货号模糊查询货号列表,返回数据带上商品主图 + * + * @param storeId 档口ID + * @param prodArtNum 商品货号 + * @return List + */ + @Override + @Transactional(readOnly = true) + public List fuzzyQueryResPicList(Long storeId, String prodArtNum) { + return this.storeProdMapper.fuzzyQueryResPicList(storeId, prodArtNum); + } + /** * 处理档口商品属性 * 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 943c198da..ab41529f3 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 @@ -33,6 +33,8 @@ import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import static com.ruoyi.common.constant.Constants.ORDER_NUM_1; + /** * 档口商品库存Service业务层处理 * @@ -244,7 +246,7 @@ public class StoreProductStockServiceImpl implements IStoreProductStockService { StoreProductFile mainPic = Optional.ofNullable(this.storeProdFileMapper.selectOne(new LambdaQueryWrapper() .eq(StoreProductFile::getStoreProdId, stock.getStoreProdId()).eq(StoreProductFile::getStoreId, storeId) .eq(StoreProductFile::getDelFlag, Constants.UNDELETED).eq(StoreProductFile::getFileType, FileType.MAIN_PIC.getValue()) - .eq(StoreProductFile::getOrderNum, 1))) + .eq(StoreProductFile::getOrderNum, ORDER_NUM_1))) .orElseThrow(() -> new ServiceException("商品主图不存在!", HttpStatus.ERROR)); // 图片 SysFile file = Optional.ofNullable(this.fileMapper.selectOne(new LambdaQueryWrapper() diff --git a/xkt/src/main/resources/mapper/StoreProductFileMapper.xml b/xkt/src/main/resources/mapper/StoreProductFileMapper.xml index 6ec1c8e03..e36fab385 100644 --- a/xkt/src/main/resources/mapper/StoreProductFileMapper.xml +++ b/xkt/src/main/resources/mapper/StoreProductFileMapper.xml @@ -155,7 +155,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + diff --git a/xkt/src/main/resources/mapper/StoreProductMapper.xml b/xkt/src/main/resources/mapper/StoreProductMapper.xml index b3de6ad59..762c962bb 100644 --- a/xkt/src/main/resources/mapper/StoreProductMapper.xml +++ b/xkt/src/main/resources/mapper/StoreProductMapper.xml @@ -145,4 +145,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + \ No newline at end of file