销量排名

This commit is contained in:
bunny 2024-01-11 21:05:17 +08:00
parent 9d206c6c64
commit 9c6d9142c5
5 changed files with 97 additions and 7 deletions

View File

@ -3,6 +3,7 @@ package com.sky.controller.admin;
import com.sky.result.Result; import com.sky.result.Result;
import com.sky.service.ReportService; import com.sky.service.ReportService;
import com.sky.vo.OrderReportVO; import com.sky.vo.OrderReportVO;
import com.sky.vo.SalesTop10ReportVO;
import com.sky.vo.TurnoverReportVO; import com.sky.vo.TurnoverReportVO;
import com.sky.vo.UserReportVO; import com.sky.vo.UserReportVO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
@ -68,4 +69,19 @@ public class ReportController {
log.info("订单统计,开始时间:{};结束时间:{}", begin, end); log.info("订单统计,开始时间:{};结束时间:{}", begin, end);
return Result.success(reportService.ordersStatistics(begin, end)); return Result.success(reportService.ordersStatistics(begin, end));
} }
/**
* 销量排名
*
* @param begin 看起始时间
* @param end 结束时间
* @return OrderReportVO
*/
@ApiOperation("销量排名")
@GetMapping("/top10")
public Result<SalesTop10ReportVO> top10(@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate begin,
@DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
log.info("销量排名,开始时间:{};结束时间:{}", begin, end);
return Result.success(reportService.getSalesTop10(begin, end));
}
} }

View File

@ -1,6 +1,7 @@
package com.sky.mapper; package com.sky.mapper;
import com.github.pagehelper.Page; import com.github.pagehelper.Page;
import com.sky.dto.GoodsSalesDTO;
import com.sky.dto.OrdersPageQueryDTO; import com.sky.dto.OrdersPageQueryDTO;
import com.sky.entity.Orders; import com.sky.entity.Orders;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@ -88,4 +89,13 @@ public interface OrderMapper {
* @return Integer * @return Integer
*/ */
Integer countByMap(Map map); Integer countByMap(Map map);
/**
* 根据指定时间区间查询效率前十
*
* @param begin 开始时间
* @param end 结束时间
* @return GoodsSalesDTO
*/
List<GoodsSalesDTO> getSalesTop10(LocalDateTime begin, LocalDateTime end);
} }

View File

@ -1,6 +1,7 @@
package com.sky.service; package com.sky.service;
import com.sky.vo.OrderReportVO; import com.sky.vo.OrderReportVO;
import com.sky.vo.SalesTop10ReportVO;
import com.sky.vo.TurnoverReportVO; import com.sky.vo.TurnoverReportVO;
import com.sky.vo.UserReportVO; import com.sky.vo.UserReportVO;
@ -17,7 +18,7 @@ public interface ReportService {
TurnoverReportVO getTurnoverStatistics(LocalDate begin, LocalDate end); TurnoverReportVO getTurnoverStatistics(LocalDate begin, LocalDate end);
/** /**
* 用户统计 * 销量排名
* *
* @param begin 看起始时间 * @param begin 看起始时间
* @param end 结束时间 * @param end 结束时间
@ -33,4 +34,13 @@ public interface ReportService {
* @return OrderReportVO * @return OrderReportVO
*/ */
OrderReportVO ordersStatistics(LocalDate begin, LocalDate end); OrderReportVO ordersStatistics(LocalDate begin, LocalDate end);
/**
* 销量排名
*
* @param begin 看起始时间
* @param end 结束时间
* @return OrderReportVO
*/
SalesTop10ReportVO getSalesTop10(LocalDate begin, LocalDate end);
} }

View File

@ -1,10 +1,12 @@
package com.sky.service.impl; package com.sky.service.impl;
import com.sky.dto.GoodsSalesDTO;
import com.sky.entity.Orders; import com.sky.entity.Orders;
import com.sky.mapper.OrderMapper; import com.sky.mapper.OrderMapper;
import com.sky.mapper.UserMapper; import com.sky.mapper.UserMapper;
import com.sky.service.ReportService; import com.sky.service.ReportService;
import com.sky.vo.OrderReportVO; import com.sky.vo.OrderReportVO;
import com.sky.vo.SalesTop10ReportVO;
import com.sky.vo.TurnoverReportVO; import com.sky.vo.TurnoverReportVO;
import com.sky.vo.UserReportVO; import com.sky.vo.UserReportVO;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
@ -17,6 +19,7 @@ import java.time.LocalTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@Service @Service
public class ReportServiceImpl implements ReportService { public class ReportServiceImpl implements ReportService {
@ -25,6 +28,22 @@ public class ReportServiceImpl implements ReportService {
@Resource @Resource
private UserMapper userMapper; private UserMapper userMapper;
/**
* 获得订单数量
*
* @param beginTime 看起始时间
* @param endTime 结束时间
* @param status 状态
* @return Integer
*/
private Integer getOrderCount(LocalDateTime beginTime, LocalDateTime endTime, Integer status) {
HashMap map = new HashMap<>();
map.put("end", endTime);
map.put("begin", beginTime);
map.put("status", status);
return orderMapper.countByMap(map);
}
/** /**
* 营业额统计 * 营业额统计
* *
@ -152,11 +171,30 @@ public class ReportServiceImpl implements ReportService {
.build(); .build();
} }
private Integer getOrderCount(LocalDateTime endTime, LocalDateTime beginTime, Integer status) { /**
HashMap map = new HashMap<>(); * 销量排名
map.put("end", endTime); *
map.put("begin", beginTime); * @param begin 看起始时间
map.put("status", status); * @param end 结束时间
return orderMapper.countByMap(map); * @return UserReportVO
*/
@Override
public SalesTop10ReportVO getSalesTop10(LocalDate begin, LocalDate end) {
LocalDateTime beginTime = LocalDateTime.of(begin, LocalTime.MIN);
LocalDateTime endTime = LocalDateTime.of(end, LocalTime.MAX);
List<GoodsSalesDTO> salesTop10 = orderMapper.getSalesTop10(beginTime, endTime);
List<String> names = salesTop10.stream().map(GoodsSalesDTO::getName).collect(Collectors.toList());
String nameList = StringUtils.join(names, ",");
List<Integer> numbers = salesTop10.stream().map(GoodsSalesDTO::getNumber).collect(Collectors.toList());
String numberList = StringUtils.join(numbers, ",");
// 封装返回结果数据
return SalesTop10ReportVO
.builder()
.nameList(nameList)
.numberList(numberList)
.build();
} }
} }

View File

@ -142,4 +142,20 @@
</if> </if>
</where> </where>
</select> </select>
<!-- 根据指定时间区间查询效率前十 -->
<select id="getSalesTop10" resultType="com.sky.dto.GoodsSalesDTO">
select od.name, sum(od.number) as 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 &gt; #{begin}
</if>
<if test="end != null">
and o.order_time &lt; #{end}
</if>
group by od.name
order by number desc
limit 0,10
</select>
</mapper> </mapper>