传入参数:
传入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) numberfrom order_detail od,orders owhere 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.nameORDER BY `number` DESClimit 0,10</select>