package cn.iocoder.yudao.module.statistics.controller.admin.product; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.SortablePageParam; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; import cn.iocoder.yudao.module.product.api.spu.dto.ProductSpuRespDTO; import cn.iocoder.yudao.module.statistics.controller.admin.common.vo.DataComparisonRespVO; import cn.iocoder.yudao.module.statistics.controller.admin.product.vo.ProductStatisticsReqVO; import cn.iocoder.yudao.module.statistics.controller.admin.product.vo.ProductStatisticsRespVO; import cn.iocoder.yudao.module.statistics.dal.dataobject.product.ProductStatisticsDO; import cn.iocoder.yudao.module.statistics.service.product.ProductStatisticsService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.io.IOException; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; @Tag(name = "管理后台 - 商品统计") @RestController @RequestMapping("/statistics/product") @Validated public class ProductStatisticsController { @Resource private ProductStatisticsService productStatisticsService; @Resource private ProductSpuApi productSpuApi; @GetMapping("/analyse") @Operation(summary = "获得商品统计分析") @PreAuthorize("@ss.hasPermission('statistics:product:query')") public CommonResult> getProductStatisticsAnalyse(ProductStatisticsReqVO reqVO) { return success(productStatisticsService.getProductStatisticsAnalyse(reqVO)); } @GetMapping("/list") @Operation(summary = "获得商品统计明细(日期维度)") @PreAuthorize("@ss.hasPermission('statistics:product:query')") public CommonResult> getProductStatisticsList(ProductStatisticsReqVO reqVO) { List list = productStatisticsService.getProductStatisticsList(reqVO); return success(BeanUtils.toBean(list, ProductStatisticsRespVO.class)); } @GetMapping("/export-excel") @Operation(summary = "导出获得商品统计明细 Excel(日期维度)") @PreAuthorize("@ss.hasPermission('statistics:product:export')") public void exportProductStatisticsExcel(ProductStatisticsReqVO reqVO, HttpServletResponse response) throws IOException { List list = productStatisticsService.getProductStatisticsList(reqVO); // 导出 Excel List voList = BeanUtils.toBean(list, ProductStatisticsRespVO.class); ExcelUtils.write(response, "商品状况.xls", "数据", ProductStatisticsRespVO.class, voList); } @GetMapping("/rank-page") @Operation(summary = "获得商品统计排行榜分页(商品维度)") @PreAuthorize("@ss.hasPermission('statistics:product:query')") public CommonResult> getProductStatisticsRankPage(@Valid ProductStatisticsReqVO reqVO, @Valid SortablePageParam pageParam) { PageResult pageResult = productStatisticsService.getProductStatisticsRankPage(reqVO, pageParam); // 处理商品信息 Set spuIds = convertSet(pageResult.getList(), ProductStatisticsDO::getSpuId); Map spuMap = convertMap(productSpuApi.getSpuList(spuIds), ProductSpuRespDTO::getId); return success(BeanUtils.toBean(pageResult, ProductStatisticsRespVO.class, item -> Optional.ofNullable(spuMap.get(item.getSpuId())) .ifPresent(spu -> item.setName(spu.getName()).setPicUrl(spu.getPicUrl())))); } }