master:档口首页商品详情;

pull/1121/head
liujiang 2025-04-09 22:25:17 +08:00
parent 955979c249
commit 25f8114230
34 changed files with 953 additions and 51 deletions

View File

@ -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<Integer> 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<StoreHomeDecorationVO> 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<Integer> 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<StoreHomeResVO> 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<StoreHomeProdResVO> getStoreProdInfo(@PathVariable("storeId") Long storeId, @PathVariable("storeProdId") Long storeProdId) {
return R.ok(BeanUtil.toBean(storeHomeService.getStoreProdInfo(storeId, storeProdId), StoreHomeProdResVO.class));
}
}

View File

@ -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<List<StoreProdFuzzyResPicVO>> 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<StoreProdResVO> getInfo(@PathVariable("storeProdId") Long storeProdId) {
return R.ok(BeanUtil.toBean(storeProdService.selectStoreProductByStoreProdId(storeProdId), StoreProdResVO.class));
}

View File

@ -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销量排行")

View File

@ -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<StoreProdColorVO> colorList;
@ApiModelProperty(value = "档口文件列表")
private List<StoreProdFileVO> mainPicList;
@ApiModelProperty(value = "档口类目属性列表")
private List<StoreProdCateAttrVO> 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<StoreHomeProdResVO.StoreProdSizeStockVO> sizeStockList;
}
@Data
@ApiModel(value = "档口商品尺码及库存")
@Accessors(chain = true)
public static class StoreProdSizeStockVO {
@ApiModelProperty(value = "商品尺码")
private Integer size;
@ApiModelProperty(value = "尺码库存")
private Integer stock;
}
}

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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;

View File

@ -46,6 +46,10 @@ public class StoreProductStock extends XktBaseEntity {
*/
@Excel(name = "档口商品颜色ID")
private Long storeProdColorId;
/**
* ID
*/
private Long storeColorId;
/**
*
*/

View File

@ -45,6 +45,11 @@ public class StoreProductStorageDetail extends XktBaseEntity {
*/
@Excel(name = "档口商品颜色ID")
private Long storeProdColorId;
/**
* ID
*/
@Excel(name = "档口颜色ID")
private Long storeColorId;
/**
*
*/

View File

@ -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<StoreProdColorDTO> colorList;
@ApiModelProperty(value = "档口文件列表")
private List<StoreProdFileResDTO> mainPicList;
@ApiModelProperty(value = "档口类目属性列表")
private List<StoreProdCateAttrDTO> 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<StoreProdSizeStockDTO> sizeStockList;
}
@Data
@ApiModel(value = "档口商品尺码及库存")
@Accessors(chain = true)
public static class StoreProdSizeStockDTO {
@ApiModelProperty(value = "商品尺码")
private Integer size;
@ApiModelProperty(value = "尺码库存")
private Integer stock;
}
}

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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;
}

View File

@ -60,7 +60,7 @@ public class StoreProdResDTO {
private List<StoreProdFileResDTO> fileList;
@ApiModelProperty(value = "档口类目属性列表")
private List<StoreProdCateAttrDTO> cateAttrList;
@ApiModelProperty(value = "档口宿友颜色列表")
@ApiModelProperty(value = "档口所有颜色列表")
private List<StoreColorDTO> allColorList;
@ApiModelProperty(value = "档口颜色列表")
private List<StoreProdColorDTO> colorList;

View File

@ -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;
}

View File

@ -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")

View File

@ -95,4 +95,16 @@ public interface StoreProductFileMapper extends BaseMapper<StoreProductFile> {
*/
List<StoreProdFilePicSpaceResDTO> selectPicSpaceList(@Param("storeId") Long storeId, @Param("fileType") Integer fileType);
/**
*
*
* @param storeProdId ID
* @param storeId ID
* @param fileType
* @return
*/
List<StoreProdFileResDTO> selectTotalMainPicList(@Param("storeProdId") Long storeProdId,
@Param("storeId") Long storeId,
@Param("fileType") Integer fileType);
}

View File

@ -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<StoreProduct> {
*/
public int deleteStoreProductByStoreProdIds(Long[] storeProdIds);
/**
*
*
* @param storeId ID
* @param prodArtNum
* @return List<StoreProdFuzzyResPicDTO>
*/
List<StoreProdFuzzyResPicDTO> fuzzyQueryResPicList(@Param("storeId") Long storeId, @Param("prodArtNum") String prodArtNum);
/**
*
* @param storeId ID
* @return StoreProdCountDTO
*/
StoreProdStatusCountDTO selectStatusCount(Long storeId);
}

View File

@ -72,6 +72,7 @@ public interface IStoreCustomerService {
/**
*
*
* @param storeId ID
* @param cusName
* @return List<StoreCusFuzzyResDTO>

View File

@ -18,7 +18,7 @@ public interface IStoreFactoryService {
/**
*
*
* @param storeId ID
* @param storeId ID
* @param storeFacId
* @return
*/

View File

@ -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);
}

View File

@ -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
*/

View File

@ -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<StoreProduct> selectStoreProductList(StoreProduct storeProduct);
List<StoreProduct> selectStoreProductList(StoreProduct storeProduct);
public Page<StoreProdPageResDTO> page(StoreProdPageDTO pageDTO);
Page<StoreProdPageResDTO> 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<StoreProdFuzzyResDTO>
*/
List<StoreProdFuzzyResDTO> fuzzyQueryList(Long storeId, String prodArtNum);
/**
* ID
*
* @param storeId ID
* @param prodArtNum
* @return List<StoreProdFuzzyResPicDTO>
*/
List<StoreProdFuzzyResPicDTO> fuzzyQueryResPicList(Long storeId, String prodArtNum);
}

View File

@ -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<StoreProdStockPageResDTO>
*/
@ -108,7 +112,8 @@ public interface IStoreProductStockService {
/**
* ID
* @param storeId ID
*
* @param storeId ID
* @param prodArtNum
* @return String
*/

View File

@ -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<StoreQuickFuncDTO.DetailDTO>
*/
@ -21,6 +21,7 @@ public interface IStoreQuickFunctionService {
/**
*
*
* @param storeQuickFuncDTO DTO
* @return
*/

View File

@ -46,6 +46,7 @@ public interface IStoreRoleAccountService {
/**
* /
*
* @param updateStatusDTO
* @return
*/

View File

@ -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 {
/**
*
*
* <p>
*
*
*

View File

@ -60,8 +60,8 @@ public class ExpressServiceImpl implements IExpressService {
Assert.notEmpty(cityCode);
Assert.notEmpty(countyCode);
Map<String, ExpressFeeConfig> 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)

View File

@ -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;

View File

@ -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<Store>()
.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<Store>()
.eq(Store::getId, storeId).eq(Store::getDelFlag, Constants.UNDELETED)))
.orElseThrow(() -> new ServiceException("档口不存在!", HttpStatus.ERROR));
// 获取商品基本信息
StoreProduct storeProd = Optional.ofNullable(this.storeProdMapper.selectOne(new LambdaQueryWrapper<StoreProduct>()
.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<StoreProductDetail>()
.eq(StoreProductDetail::getStoreProdId, storeProdId).eq(StoreProductDetail::getDelFlag, Constants.UNDELETED));
// 获取商品颜色列表
List<StoreProductColor> colorList = this.prodColorMapper.selectList(new LambdaQueryWrapper<StoreProductColor>()
.eq(StoreProductColor::getStoreProdId, storeProdId).eq(StoreProductColor::getDelFlag, Constants.UNDELETED));
// 档口商品主图列表
List<StoreProdFileResDTO> mainPicDTOList = this.prodFileMapper.selectTotalMainPicList(storeProdId, storeId, FileType.MAIN_PIC.getValue());
// 档口商品颜色价格列表
List<StoreProductColorPrice> colorPriceList = this.prodColorPriceMapper.selectList(new LambdaQueryWrapper<StoreProductColorPrice>()
.eq(StoreProductColorPrice::getStoreProdId, storeProdId).eq(StoreProductColorPrice::getDelFlag, Constants.UNDELETED));
Map<String, StoreProductColorPrice> colorPriceMap = colorPriceList.stream().collect(Collectors
.toMap(x -> x.getStoreProdId().toString() + x.getStoreColorId().toString(), Function.identity()));
// 档口商品属性
List<StoreProductCategoryAttribute> prodAttrList = this.prodCateAttrMapper.selectList(new LambdaQueryWrapper<StoreProductCategoryAttribute>()
.eq(StoreProductCategoryAttribute::getStoreProdId, storeProdId).eq(StoreProductCategoryAttribute::getDelFlag, Constants.UNDELETED));
// 档口商品标准尺码
List<StoreProductColorSize> standardSizeList = this.prodColorSizeMapper.selectList(new LambdaQueryWrapper<StoreProductColorSize>()
.eq(StoreProductColorSize::getStoreProdId, storeProdId).eq(StoreProductColorSize::getDelFlag, Constants.UNDELETED)
.eq(StoreProductColorSize::getStandard, ProductSizeStatus.STANDARD.getValue()));
Map<String, List<StoreProductColorSize>> colorSizeMap = standardSizeList.stream().collect(Collectors
.groupingBy(x -> x.getStoreProdId().toString() + x.getStoreColorId().toString()));
// 根据标准尺码去找对应尺码的库存数量
List<StoreProductStock> prodStockList = this.prodStockMapper.selectList(new LambdaQueryWrapper<StoreProductStock>()
.eq(StoreProductStock::getStoreProdId, storeProdId)
.in(StoreProductStock::getStoreProdColorId, colorList.stream().map(StoreProductColor::getId).distinct().collect(Collectors.toList()))
.eq(StoreProductStock::getDelFlag, Constants.UNDELETED));
// 获取档口颜色尺码的库存数量
Map<String, List<StoreHomeProdResDTO.StoreProdSizeStockDTO>> colorSizeStockMap = this.convertSizeStock(prodStockList, standardSizeList);
List<StoreHomeProdResDTO.StoreProdColorDTO> 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<Long, Map < Integer, Integer>>
*/
private Map<String, List<StoreHomeProdResDTO.StoreProdSizeStockDTO>> convertSizeStock(List<StoreProductStock> stockList, List<StoreProductColorSize> standardSizeList) {
Map<String, List<StoreHomeProdResDTO.StoreProdSizeStockDTO>> colorSizeStockMap = new HashMap<>();
if (CollectionUtils.isEmpty(stockList)) {
return colorSizeStockMap;
}
// 标准尺码map
Map<Integer, StoreProductColorSize> standardSizeMap = standardSizeList.stream().collect(Collectors.toMap(StoreProductColorSize::getSize, Function.identity()));
Map<String, List<StoreProductStock>> map = stockList.stream().collect(Collectors.groupingBy(x -> x.getStoreProdId().toString() + x.getStoreColorId().toString()));
map.forEach((unionId, tempStockList) -> {
List<StoreHomeProdResDTO.StoreProdSizeStockDTO> 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;
}
/**
*

View File

@ -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<StoreProdFuzzyResPicDTO>
*/
@Override
@Transactional(readOnly = true)
public List<StoreProdFuzzyResPicDTO> fuzzyQueryResPicList(Long storeId, String prodArtNum) {
return this.storeProdMapper.fuzzyQueryResPicList(storeId, prodArtNum);
}
/**
*
*

View File

@ -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<StoreProductFile>()
.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<SysFile>()

View File

@ -155,7 +155,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectTotalMainPicList" resultType="com.ruoyi.xkt.dto.storeProductFile.StoreProdFileResDTO">
SELECT
spf.store_prod_id AS storeProdId,
spf.file_id AS fileId,
sf.file_url AS fileUrl,
spf.file_type AS fileType,
spf.file_size AS fileSize,
sf.file_name AS fileName,
spf.order_num AS orderNum
FROM
store_product_file spf
LEFT JOIN sys_file sf ON spf.file_id = sf.id
WHERE
spf.del_flag = 0
AND spf.file_type = #{fileType}
AND spf.store_id = #{storeId}
</select>

View File

@ -145,4 +145,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</foreach>
</delete>
<select id="fuzzyQueryResPicList" resultType="com.ruoyi.xkt.dto.storeProduct.StoreProdFuzzyResPicDTO">
SELECT
sp.id AS storeProdId,
sp.store_id AS storeId,
sp.prod_art_num AS prodArtNum,
sf.file_url AS mainPicUrl
FROM
store_product sp
LEFT JOIN store_product_file spf ON sp.id = spf.store_prod_id
LEFT JOIN sys_file sf ON spf.file_id = sf.id
WHERE
sp.del_flag = 0
AND spf.order_num = 1
AND spf.file_type = 1
AND sp.store_id = #{storeId}
<if test="prodArtNum != null and prodArtNum != ''">
AND sp.prod_art_num like concat('%', #{prodArtNum}, '%')
</if>
</select>
<select id="selectStatusCount" resultType="com.ruoyi.xkt.dto.storeProduct.StoreProdStatusCountDTO">
SELECT
SUM( CASE WHEN prod_status = 2 THEN 1 ELSE 0 END ) AS onSaleNum,
SUM( CASE WHEN prod_status = 3 THEN 1 ELSE 0 END ) AS tailGoodsNum,
SUM( CASE WHEN prod_status = 4 THEN 1 ELSE 0 END ) AS offSaleNum
FROM
store_product
WHERE
del_flag = 0 AND store_id = #{storeId}
</select>
</mapper>