master:商城首页商品详情接口完善;

pull/1121/head
liujiang 2025-06-01 16:10:44 +08:00
parent a7d3165f18
commit 99b5466e5f
29 changed files with 211 additions and 49 deletions

View File

@ -158,6 +158,16 @@ public class StoreProductController extends XktBaseController {
return R.ok(BeanUtil.toBean(storeProdService.getStatusNum(storeId), StoreProdStatusCountResVO.class));
}
/**
*
*/
@ApiOperation(value = "获取商品各个状态下的分类数量", httpMethod = "POST", response = R.class)
@PostMapping(value = "/status/cate/num/{storeId}")
public R<List<StoreProdStatusCateCountResVO>> getStatusCateNum(@Validated @RequestBody StoreProdStatusCateNumVO cateCountVO) {
return R.ok(BeanUtil.copyToList(storeProdService.getStatusCateNum(
BeanUtil.toBean(cateCountVO, StoreProdStatusCateNumDTO.class)), StoreProdStatusCateCountResVO.class));
}
/**
*

View File

@ -6,8 +6,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;

View File

@ -5,7 +5,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import java.util.Date;
import java.util.List;
/**

View File

@ -5,7 +5,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
/**

View File

@ -14,7 +14,7 @@ public class StoreOrderPrintRespVO {
@ApiModelProperty(value = "物流单号")
private String expressWaybillNo;
@ApiModelProperty(value = "文件流Base64编码")
private String result;

View File

@ -5,9 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
/**
* @author liujiang

View File

@ -1,6 +1,5 @@
package com.ruoyi.web.controller.xkt.vo.store;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ -12,7 +11,6 @@ import lombok.Data;
*/
@ApiModel("档口返回基本数据")
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class StoreSimpleResVO {
@ApiModelProperty(value = "档口模板ID")

View File

@ -7,7 +7,6 @@ import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
/**
* @author liujiang

View File

@ -7,7 +7,6 @@ import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
/**
* @author liujiang

View File

@ -1,7 +1,6 @@
package com.ruoyi.web.controller.xkt.vo.storeProd;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.xkt.dto.storeProductFile.StoreProdFileResDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

View File

@ -6,7 +6,6 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

View File

@ -0,0 +1,35 @@
package com.ruoyi.web.controller.xkt.vo.storeProd;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口商品各个状态下分类数量")
@Data
public class StoreProdStatusCateCountResVO {
@ApiModelProperty(value = "商品状态")
private Integer prodStatus;
@ApiModelProperty(value = "状态下分类数量")
List<SPSCCCateCountVO> cateCountList;
@Data
@Accessors(chain = true)
public static class SPSCCCateCountVO {
@ApiModelProperty(value = "商品分类ID")
private Long prodCateId;
@ApiModelProperty(value = "商品分类名称")
private String prodCateName;
@ApiModelProperty(value = "商品分类数量")
private Integer cateCount;
}
}

View File

@ -0,0 +1,26 @@
package com.ruoyi.web.controller.xkt.vo.storeProd;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口状态下分类数量")
@Data
public class StoreProdStatusCateNumVO {
@NotNull(message = "档口ID不能为空!")
@ApiModelProperty(value = "档口ID", required = true)
private Long storeId;
@ApiModelProperty(value = "商品状态列表")
@NotNull(message = "商品状态列表不能为空!")
List<Integer> prodStatusList;
}

View File

@ -4,7 +4,6 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;

View File

@ -9,7 +9,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;

View File

@ -5,8 +5,6 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;

View File

@ -6,7 +6,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @author liujiang

View File

@ -6,9 +6,9 @@ spring:
druid:
# 主库数据源
master:
url: jdbc:mysql://47.100.64.234:3377/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
url: jdbc:mysql://127.0.0.1:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: hongtu56@Mysql0212
password: 123456
# 从库数据源
slave:
# 从数据源开关/默认关闭

View File

@ -100,13 +100,13 @@ spring:
# redis 配置
redis:
# 地址
host: 47.100.64.234
host: 127.0.0.1
# 端口默认为6379
port: 6699
port: 6379
# 数据库索引
database: 0
# 密码
password: hongtu56@Redis0212
password:
# 连接超时时间
timeout: 10s
lettuce:

View File

@ -14,7 +14,7 @@ import lombok.experimental.Accessors;
*/
@ApiModel("档口返回基本数据")
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
@Accessors(chain = true)
public class StoreSimpleResDTO {
@ApiModelProperty(value = "档口模板ID")

View File

@ -0,0 +1,30 @@
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;
import lombok.experimental.Accessors;
import java.util.List;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口商品各个状态下分类数量")
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class StoreProdStatusCateCountDTO {
@ApiModelProperty(value = "商品状态")
private Integer prodStatus;
@ApiModelProperty(value = "商品分类ID")
private Long prodCateId;
@ApiModelProperty(value = "商品分类名称")
private String prodCateName;
@ApiModelProperty(value = "商品分类数量")
private Integer cateCount;
}

View File

@ -0,0 +1,37 @@
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;
import lombok.experimental.Accessors;
import java.util.List;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口商品各个状态下分类数量")
@Data
@Accessors(chain = true)
public class StoreProdStatusCateCountResDTO {
@ApiModelProperty(value = "商品状态")
private Integer prodStatus;
@ApiModelProperty(value = "状态下分类数量")
List<SPSCCCateCountDTO> cateCountList;
@Data
@Accessors(chain = true)
public static class SPSCCCateCountDTO {
@ApiModelProperty(value = "商品分类ID")
private Long prodCateId;
@ApiModelProperty(value = "商品分类名称")
private String prodCateName;
@ApiModelProperty(value = "商品分类数量")
private Integer cateCount;
}
}

View File

@ -0,0 +1,23 @@
package com.ruoyi.xkt.dto.storeProduct;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @author liujiang
* @version v1.0
* @date 2025/3/27 15:12
*/
@ApiModel("档口状态下分类数量")
@Data
public class StoreProdStatusCateNumDTO {
@ApiModelProperty(value = "档口ID")
private Long storeId;
@ApiModelProperty(value = "商品状态列表")
List<Integer> prodStatusList;
}

View File

@ -19,14 +19,6 @@ import java.util.List;
@Repository
public interface StoreMapper extends BaseMapper<Store> {
/**
*
*
* @param store
* @return
*/
List<Store> selectStoreList(Store store);
/**
*
*
@ -41,9 +33,8 @@ public interface StoreMapper extends BaseMapper<Store> {
* PC
*
* @param storeId ID
* @param userId ID
* @return StoreBasicResDTO
*/
StoreSimpleResDTO getSimpleInfo(@Param("storeId") Long storeId, @Param("userId") Long userId);
StoreSimpleResDTO getSimpleInfo(@Param("storeId") Long storeId);
}

View File

@ -35,14 +35,6 @@ public interface StoreProductMapper extends BaseMapper<StoreProduct> {
*/
List<StoreProdFuzzyResPicDTO> fuzzyQueryResPicList(@Param("storeId") Long storeId, @Param("prodArtNum") String prodArtNum);
/**
*
*
* @param storeId ID
* @return StoreProdCountDTO
*/
StoreProdStatusCountDTO selectStatusCount(Long storeId);
/**
* ID
*
@ -120,11 +112,19 @@ public interface StoreProductMapper extends BaseMapper<StoreProduct> {
/**
*
* @param storeId ID
*
* @param storeId ID
* @param statusList
* @return StoreProdStatusCountResDTO
*/
StoreProdStatusCountResDTO getStatusNum(@Param("storeId") Long storeId, @Param("statusList") List<Integer> statusList);
/**
*
*
* @param cateNumDTO
* @return StoreProdStatusCateCountResDTO
*/
List<StoreProdStatusCateCountDTO> getStatusCateNum(StoreProdStatusCateNumDTO cateNumDTO);
}

View File

@ -134,4 +134,11 @@ public interface IStoreProductService {
*/
StoreProdStatusCountResDTO getStatusNum(Long storeId);
/**
*
*
* @param dto
* @return StoreProdStatusCateCountResDTO
*/
List<StoreProdStatusCateCountResDTO> getStatusCateNum(StoreProdStatusCateNumDTO dto);
}

View File

@ -7,12 +7,10 @@ import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.xkt.domain.*;
import com.ruoyi.xkt.dto.storeHomepage.*;
import com.ruoyi.xkt.dto.storeProdCateAttr.StoreProdCateAttrDTO;
import com.ruoyi.xkt.dto.storeProdDetail.StoreProdDetailDTO;
import com.ruoyi.xkt.dto.storeProduct.StoreProdPriceAndMainPicAndTagDTO;
import com.ruoyi.xkt.dto.storeProduct.StoreProdStatusCountDTO;
import com.ruoyi.xkt.dto.storeProductFile.StoreProdFileResDTO;
import com.ruoyi.xkt.enums.*;
import com.ruoyi.xkt.enums.AdDisplayType;
import com.ruoyi.xkt.enums.HomepageJumpType;
import com.ruoyi.xkt.enums.HomepageType;
import com.ruoyi.xkt.mapper.*;
import com.ruoyi.xkt.service.IStoreHomepageService;
import lombok.RequiredArgsConstructor;

View File

@ -709,6 +709,23 @@ public class StoreProductServiceImpl implements IStoreProductService {
.asList(EProductStatus.ON_SALE.getValue(), EProductStatus.TAIL_GOODS.getValue(), EProductStatus.OFF_SALE.getValue()));
}
/**
*
*
* @param cateNumDTO
* @return StoreProdStatusCateCountResDTO
*/
@Override
@Transactional(readOnly = true)
public List<StoreProdStatusCateCountResDTO> getStatusCateNum(StoreProdStatusCateNumDTO cateNumDTO) {
List<StoreProdStatusCateCountDTO> statusCateNumList = this.storeProdMapper.getStatusCateNum(cateNumDTO);
List<StoreProdStatusCateCountResDTO> countList = new ArrayList<>();
statusCateNumList.stream().collect(Collectors.groupingBy(StoreProdStatusCateCountDTO::getProdStatus))
.forEach((prodStatus, cateList) -> countList.add(new StoreProdStatusCateCountResDTO().setProdStatus(prodStatus)
.setCateCountList(BeanUtil.copyToList(cateList, StoreProdStatusCateCountResDTO.SPSCCCateCountDTO.class))));
return countList;
}
/**
* sku
*

View File

@ -356,7 +356,12 @@ public class StoreServiceImpl implements IStoreService {
@Override
@Transactional (readOnly = true)
public StoreSimpleResDTO getSimpleInfo(Long storeId) {
return this.storeMapper.getSimpleInfo(storeId, SecurityUtils.getUserId());
StoreSimpleResDTO simpleDTO = this.storeMapper.getSimpleInfo(storeId);
final Long userId = SecurityUtils.getUserId();
UserSubscriptions userSub = ObjectUtils.isEmpty(userId) ? null
: this.userSubMapper.selectOne(new LambdaQueryWrapper<UserSubscriptions>().eq(UserSubscriptions::getUserId, userId)
.eq(UserSubscriptions::getStoreId, storeId).eq(UserSubscriptions::getDelFlag, Constants.UNDELETED));
return simpleDTO.setFocus(ObjectUtils.isNotEmpty(userSub) ? Boolean.TRUE : Boolean.FALSE);
}
}