master:app商品访问量功能完善;
parent
ac7e42ce11
commit
0f881d9459
|
|
@ -0,0 +1,36 @@
|
|||
package com.ruoyi.web.controller.xkt;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.ruoyi.common.core.controller.BaseController;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.web.controller.xkt.vo.StoreProductStatistics.StoreProdAppViewRankResVO;
|
||||
import com.ruoyi.web.controller.xkt.vo.notice.NoticeResVO;
|
||||
import com.ruoyi.xkt.service.IStoreProductStatisticsService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 档口商品统计
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Api(tags = "档口商品统计")
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/rest/v1/store-prod-statistics")
|
||||
public class StoreProductStatisticsController extends BaseController {
|
||||
|
||||
final IStoreProductStatisticsService prodStatisticsService;
|
||||
|
||||
@ApiOperation(value = "APP商品访问榜", httpMethod = "GET", response = R.class)
|
||||
@GetMapping("/app/view-rank")
|
||||
public R<StoreProdAppViewRankResVO> getAppViewRank() {
|
||||
return R.ok(BeanUtil.toBean(prodStatisticsService.getAppViewRank(), StoreProdAppViewRankResVO.class));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
package com.ruoyi.web.controller.xkt.vo.StoreProductStatistics;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author liujiang
|
||||
* @version v1.0
|
||||
* @date 2025/3/27 15:12
|
||||
*/
|
||||
@ApiModel
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class StoreProdAppViewRankResVO {
|
||||
|
||||
@ApiModelProperty(value = "商品浏览量列表")
|
||||
private List<SPAVRViewCountVO> viewCountList;
|
||||
|
||||
@Data
|
||||
public static class SPAVRViewCountVO {
|
||||
@ApiModelProperty(value = "档口ID")
|
||||
private Long storeId;
|
||||
@ApiModelProperty(value = "档口名称")
|
||||
private String storeName;
|
||||
@ApiModelProperty(value = "商品主图")
|
||||
private String mainPicUrl;
|
||||
@ApiModelProperty(value = "商品ID")
|
||||
private Long storeProdId;
|
||||
@ApiModelProperty(value = "商品货号")
|
||||
private String prodArtNum;
|
||||
@ApiModelProperty(value = "商品最低价格")
|
||||
private BigDecimal price;
|
||||
@ApiModelProperty(value = "商品浏览量")
|
||||
private Long viewCount;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -3173,6 +3173,7 @@ CREATE TABLE `store`
|
|||
`template_num` int UNSIGNED NULL DEFAULT NULL COMMENT '档口模板ID',
|
||||
`store_status` tinyint UNSIGNED NULL DEFAULT NULL COMMENT '档口状态',
|
||||
`stock_sys` int UNSIGNED NULL DEFAULT NULL COMMENT '库存系统',
|
||||
`view_count` bigint UNSIGNED NULL DEFAULT NULL COMMENT '浏览量',
|
||||
`reject_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '拒绝理由',
|
||||
`version` bigint UNSIGNED NOT NULL COMMENT '版本号',
|
||||
`del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '删除标志(0代表存在 2代表删除)',
|
||||
|
|
|
|||
|
|
@ -0,0 +1,43 @@
|
|||
package com.ruoyi.xkt.dto.StoreProductStatistics;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author liujiang
|
||||
* @version v1.0
|
||||
* @date 2025/3/27 15:12
|
||||
*/
|
||||
@ApiModel
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class StoreProdAppViewRankResDTO {
|
||||
|
||||
@ApiModelProperty(value = "商品浏览量列表")
|
||||
private List<SPAVRViewCountDTO> viewCountList;
|
||||
|
||||
@Data
|
||||
public static class SPAVRViewCountDTO {
|
||||
@ApiModelProperty(value = "档口ID")
|
||||
private Long storeId;
|
||||
@ApiModelProperty(value = "档口名称")
|
||||
private String storeName;
|
||||
@ApiModelProperty(value = "商品主图")
|
||||
private String mainPicUrl;
|
||||
@ApiModelProperty(value = "商品ID")
|
||||
private Long storeProdId;
|
||||
@ApiModelProperty(value = "商品货号")
|
||||
private String prodArtNum;
|
||||
@ApiModelProperty(value = "商品最低价格")
|
||||
private BigDecimal price;
|
||||
@ApiModelProperty(value = "商品浏览量")
|
||||
private Long viewCount;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -32,6 +32,8 @@ public class ShopCartPageResDTO {
|
|||
private String prodTitle;
|
||||
@ApiModelProperty(value = "商品状态")
|
||||
private String prodStatus;
|
||||
@ApiModelProperty(value = "标注尺码")
|
||||
private String standardSize;
|
||||
@ApiModelProperty(value = "进货车明细列表")
|
||||
List<ShopCartPageDetailResDTO> detailList;
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.ruoyi.xkt.mapper;
|
|||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.ruoyi.xkt.domain.StoreProductStatistics;
|
||||
import com.ruoyi.xkt.dto.StoreProductStatistics.StoreProdAppViewRankResDTO;
|
||||
import com.ruoyi.xkt.dto.dailyStoreTag.DailyStoreTagDTO;
|
||||
import com.ruoyi.xkt.dto.picture.ProductImgSearchCountDTO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
|
@ -44,5 +45,12 @@ public interface StoreProductStatisticsMapper extends BaseMapper<StoreProductSta
|
|||
*/
|
||||
List<DailyStoreTagDTO> downloadTop10Prod(@Param("oneMonthAgo") Date oneMonthAgo, @Param("yesterday") Date yesterday);
|
||||
|
||||
|
||||
/**
|
||||
* 筛选近三月APP商品浏览量前10
|
||||
*
|
||||
* @param threeMonthAgo 三月前
|
||||
* @param yesterday 昨天
|
||||
* @return List<StoreProdAppViewRankResDTO.SPAVRViewCountDTO>
|
||||
*/
|
||||
List<StoreProdAppViewRankResDTO.SPAVRViewCountDTO> selectTop10ProdViewCount(@Param("threeMonthAgo") Date threeMonthAgo, @Param("yesterday") Date yesterday);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
package com.ruoyi.xkt.service;
|
||||
|
||||
import com.ruoyi.xkt.dto.StoreProductStatistics.StoreProdAppViewRankResDTO;
|
||||
|
||||
/**
|
||||
* 档口商品统计 服务层
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public interface IStoreProductStatisticsService {
|
||||
|
||||
/**
|
||||
* 档口商品访问榜
|
||||
*
|
||||
* @return StoreProdAppViewRankResDTO
|
||||
*/
|
||||
StoreProdAppViewRankResDTO getAppViewRank();
|
||||
}
|
||||
|
|
@ -128,11 +128,11 @@ public class ShoppingCartServiceImpl implements IShoppingCartService {
|
|||
sizes -> sizes.stream().sorted().map(String::valueOf).collect(Collectors.joining(",")))));
|
||||
shoppingCartList.forEach(x -> {
|
||||
x.setMainPicUrl(mainPicMap.getOrDefault(x.getStoreProdId(), null));
|
||||
x.setStandardSize(prodStandardSizeMap.getOrDefault(x.getStoreProdId(), ""));
|
||||
x.getDetailList()
|
||||
.forEach(detail -> {
|
||||
StoreProductColorSize prodColorSize = priceSizeMap.get(x.getStoreProdId().toString() + detail.getStoreColorId().toString() + detail.getSize());
|
||||
detail.setStandardSize(prodStandardSizeMap.getOrDefault(x.getStoreProdId(), ""))
|
||||
.setAmount((ObjectUtils.isNotEmpty(prodColorSize)
|
||||
detail.setAmount((ObjectUtils.isNotEmpty(prodColorSize)
|
||||
? prodColorSize.getPrice() : BigDecimal.ZERO).multiply(new BigDecimal(detail.getQuantity())))
|
||||
.setPrice(ObjectUtils.isNotEmpty(prodColorSize) ? prodColorSize.getPrice() : null)
|
||||
.setStoreProdColorSizeId(ObjectUtils.isNotEmpty(prodColorSize) ? prodColorSize.getId() : null);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,37 @@
|
|||
package com.ruoyi.xkt.service.impl;
|
||||
|
||||
import com.ruoyi.xkt.dto.StoreProductStatistics.StoreProdAppViewRankResDTO;
|
||||
import com.ruoyi.xkt.mapper.StoreProductStatisticsMapper;
|
||||
import com.ruoyi.xkt.service.IStoreProductStatisticsService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 档口商品统计 服务层实现
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class StoreProductStatisticsServiceImpl implements IStoreProductStatisticsService {
|
||||
|
||||
final StoreProductStatisticsMapper prodStatisticsMapper;
|
||||
|
||||
/**
|
||||
* 档口商品访问榜
|
||||
*
|
||||
* @return StoreProdAppViewRankResDTO
|
||||
*/
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public StoreProdAppViewRankResDTO getAppViewRank() {
|
||||
final Date yesterday = java.sql.Date.valueOf(LocalDate.now().minusDays(1));
|
||||
final Date threeMonthAgo = java.sql.Date.valueOf(LocalDate.now().minusDays(1).minusMonths(3));
|
||||
return new StoreProdAppViewRankResDTO().setViewCountList(prodStatisticsMapper.selectTop10ProdViewCount(threeMonthAgo, yesterday));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -57,5 +57,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
LIMIT 10
|
||||
</select>
|
||||
|
||||
<select id="selectTop10ProdViewCount">
|
||||
SELECT
|
||||
sps.store_id,
|
||||
s.store_name,
|
||||
sps.store_prod_id,
|
||||
sp.prod_art_num,
|
||||
spcp.min_price AS price,
|
||||
sps.view_count,
|
||||
sf.file_url AS mainPicUrl
|
||||
FROM
|
||||
store_product_statistics sps
|
||||
JOIN store s ON sps.store_id = s.id
|
||||
JOIN store_product sp ON sps.store_prod_id = sp.id
|
||||
JOIN store_product_file spf ON sps.store_prod_id = spf.store_prod_id AND spf.del_flag = 0 AND spf.file_type = 1 AND spf.order_num = 1
|
||||
JOIN sys_file sf ON spf.file_id = sf.id
|
||||
LEFT JOIN ( SELECT store_prod_id, MIN( price ) AS min_price FROM store_product_color_size GROUP BY store_prod_id ) spcp ON sp.id = spcp.store_prod_id
|
||||
WHERE
|
||||
sps.del_flag = 0
|
||||
AND sps.voucher_date BETWEEN #{threeMonthAgo} AND #{yesterday}
|
||||
ORDER BY
|
||||
sps.view_count DESC
|
||||
LIMIT 10
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue