统计销量前十的订单
传入参数:
传入begin和end两个时间
返回参数
返回nameList和numberList两个String类型的列表
controller层
@GetMapping("/top10")
public Result<SalesTop10ReportVO> top10(
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
SalesTop10ReportVO salesTop10ReportVO = reportService.getSaleTop10(begin, end);
return Result.success(salesTop10ReportVO);
}
实现类
public SalesTop10ReportVO getSaleTop10(LocalDate begin, LocalDate end) {
LocalDateTime beginTime = LocalDateTime.of(begin, LocalTime.MIN);
LocalDateTime endTime = LocalDateTime.of(end, LocalTime.MAX);
List<GoodsSalesDTO> saleTop = orderMapper.getSaleTop(beginTime, endTime);
List<String> nameList = saleTop.stream().map(GoodsSalesDTO::getName).collect(Collectors.toList());
String namelist = StringUtils.join(nameList, ",");
List<Integer> numberList = saleTop.stream().map(GoodsSalesDTO::getNumber).collect(Collectors.toList());
String numberlist = StringUtils.join(numberList, ",");
SalesTop10ReportVO salesTop10ReportVO = SalesTop10ReportVO.builder()
.nameList(namelist)
.numberList(numberlist)
.build();
return salesTop10ReportVO;
}
mapper
sql:
select od.name, sum(od.number) number from order_detail od,orders o where od.order_id = o.id and o.status = 5 AND o.order_time < '2022-10-30' AND o.order_time > '2022-10-01'
GROUP BY od.name
ORDER BY `number` DESC
limit 0,10
<select id="getSaleTop" resultType="com.sky.dto.GoodsSalesDTO">
select od.name, sum(od.number) number
from order_detail od,orders o
where od.order_id = o.id and o.status = 5
<if test="begin != null">
AND o.order_time > #{begin}
</if>
<if test="end != null">
AND o.order_time < #{end}
</if>
GROUP BY od.name
ORDER BY `number` DESC
limit 0,10
</select>