电子商务网站建设与维护ppt,wordpress博客主题模板,网站建设有哪些推广渠道,360优化大师历史版本营业额统计是基于折现图来展现#xff0c;并且按照天来展示的。实际上#xff0c;就是某一个时间范围之内的每一天的营业额。同时#xff0c;不管光标放在哪个点上#xff0c;那么它就会把具体的数值展示出来。并且还需要注意日期并不是固定写死的#xff0c;是由上边时间…营业额统计是基于折现图来展现并且按照天来展示的。实际上就是某一个时间范围之内的每一天的营业额。同时不管光标放在哪个点上那么它就会把具体的数值展示出来。并且还需要注意日期并不是固定写死的是由上边时间选择器来决定。比如选择是近7天、或者是近30日或者是本周就会把相应这个时间段之内的每一天日期通过横坐标展示。
代码开发
VO设计
根据接口定义设计对应的VO
在sky-pojo模块TurnoverReportVO.java已定义
package com.sky.vo;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;import java.io.Serializable;Data
Builder
NoArgsConstructor
AllArgsConstructor
public class TurnoverReportVO implements Serializable {//日期以逗号分隔例如2022-10-01,2022-10-02,2022-10-03private String dateList;//营业额以逗号分隔例如406.0,1520.0,75.0private String turnoverList;}Controller层
根据接口定义创建ReportController
package com.sky.controller.admin;import com.sky.result.Result;
import com.sky.service.ReportService;
import com.sky.vo.TurnoverReportVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDate;/*** 报表*/
RestController
RequestMapping(/admin/report)
Slf4j
Api(tags 统计报表相关接口)
public class ReportController {Autowiredprivate ReportService reportService;/*** 营业额数据统计** param begin* param end* return*/GetMapping(/turnoverStatistics)ApiOperation(营业额数据统计)public ResultTurnoverReportVO turnoverStatistics(DateTimeFormat(pattern yyyy-MM-dd)LocalDate begin,DateTimeFormat(pattern yyyy-MM-dd)LocalDate end) {return Result.success(reportService.getTurnover(begin, end));}}Service层接口
创建ReportService接口声明getTurnover方法
package com.sky.service;import com.sky.vo.TurnoverReportVO;
import java.time.LocalDate;public interface ReportService {/*** 根据时间区间统计营业额* param beginTime* param endTime* return*/TurnoverReportVO getTurnover(LocalDate beginTime, LocalDate endTime);
}Service层实现类
创建ReportServiceImpl实现类实现getTurnover方法:
package com.sky.service.impl;import com.sky.entity.Orders;
import com.sky.mapper.OrderMapper;
import com.sky.service.ReportService;
import com.sky.vo.TurnoverReportVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;Service
Slf4j
public class ReportServiceImpl implements ReportService {Autowiredprivate OrderMapper orderMapper;/*** 根据时间区间统计营业额* param begin* param end* return*/public TurnoverReportVO getTurnover(LocalDate begin, LocalDate end) {ListLocalDate dateList new ArrayList();dateList.add(begin);while (!begin.equals(end)){begin begin.plusDays(1);//日期计算获得指定日期后1天的日期dateList.add(begin);}ListDouble turnoverList new ArrayList();for (LocalDate date : dateList) {LocalDateTime beginTime LocalDateTime.of(date, LocalTime.MIN);LocalDateTime endTime LocalDateTime.of(date, LocalTime.MAX);Map map new HashMap();map.put(status, Orders.COMPLETED);map.put(begin,beginTime);map.put(end, endTime);Double turnover orderMapper.sumByMap(map); turnover turnover null ? 0.0 : turnover;turnoverList.add(turnover);}//数据封装return TurnoverReportVO.builder().dateList(StringUtils.join(dateList,,)).turnoverList(StringUtils.join(turnoverList,,)).build();}
}Mapper层
在OrderMapper接口声明sumByMap方法 /*** 根据动态条件统计营业额* param map*/Double sumByMap(Map map);在OrderMapper.xml文件中编写动态SQL
select idsumByMap resultTypejava.lang.Doubleselect sum(amount) from orderswhereif teststatus ! nulland status #{status}/ifif testbegin ! nulland order_time gt; #{begin}/ifif testend ! nulland order_time lt; #{end}/if/where
/select