feat:完善统计接口数据

This commit is contained in:
yangqingyuan
2024-08-21 22:47:34 +08:00
parent 3bc882457c
commit 83f5f2a137
6 changed files with 350 additions and 27 deletions

View File

@@ -1,30 +1,26 @@
package com.gxwebsoft.shop.controller;
import com.alipay.api.domain.DashboardParam;
import com.gxwebsoft.common.core.annotation.OperationLog;
import com.gxwebsoft.common.core.web.ApiResult;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.shop.entity.Coupon;
import com.gxwebsoft.shop.entity.Dashboard;
import com.gxwebsoft.shop.param.CouponParam;
import com.gxwebsoft.shop.service.CouponService;
import com.gxwebsoft.shop.service.OrderService;
import com.gxwebsoft.shop.entity.*;
import com.gxwebsoft.shop.param.DashBoardParam;
import com.gxwebsoft.shop.service.DashboardService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.gxwebsoft.common.core.web.*;
import javax.annotation.Resource;
import java.math.BigDecimal;
/**
* 仪表盘,数据统计
*
* @author 科技小王子
* @since 2022-11-28 18:26:05
* @author yqy
* @since 2024-08-21 18:26:05
*/
@Api(tags = "数据统计")
@RestController
@@ -32,18 +28,18 @@ import java.math.BigDecimal;
public class DashboardController extends BaseController {
@Resource
private OrderService orderService;
private DashboardService dashboardService;
//@PreAuthorize("hasAuthority('shop:dashboard')")
//@PreAuthorize("hasAuthority('shop:dashboard:day')")
@OperationLog
@ApiOperation("可查看一天日新增的订单量、一天日销售额以及总订单量、总销售额数据\n")
@ApiOperation("可查看一天日新增的订单量、一天日销售额以及总订单量、总销售额数据\n")
@GetMapping("/day")
public ApiResult<Dashboard> day(DashboardParam param) {
public ApiResult<Dashboard> day(DashBoardParam param) {
Dashboard dashboard = new Dashboard();
dashboard.setDayTotalSale(BigDecimal.valueOf(30));
dashboard.setDayNewOrderNum(20);
dashboard.setTotalSale(BigDecimal.valueOf(5000));
dashboard.setTotalOrderNum(2000);;
dashboard.setOrderStatistics(dashboardService.orderStatistics(param));
dashboard.setSalesAmountStatistics(dashboardService.salesAmountStatistics(param));
dashboard.setUserStatistics(dashboardService.userStatistics(param));
dashboard.setEquipmentStatistics(dashboardService.equipmentStatistics(param));
return success(dashboard);
}
}

View File

@@ -6,21 +6,73 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value = "Dashboard对象", description = "仪表盘数据统计字段")
public class Dashboard {
@ApiModelProperty(value = "新增的订单量")
private int dayNewOrderNum;
@ApiModelProperty(value = "销售统计")
private SalesAmountStatistics salesAmountStatistics;//日销售额,总销售额
@ApiModelProperty(value = "当日销售额")
private BigDecimal dayTotalSale;
@ApiModelProperty(value = "订单统计")
private OrderStatistics orderStatistics;//当日新增的订单量,总订单量
@ApiModelProperty(value = "总订单量")
private int totalOrderNum;
@ApiModelProperty(value = "用户统计")
private UserStatistics userStatistics;//当日新增的订单量,总订单量
@ApiModelProperty(value = "设备统计")
private EquipmentStatistics equipmentStatistics;//当日新增的设备,总设备
@Data
@ApiModel(value = "BaseStatistics", description = "基础统计")
public static class BaseStatistics{
private Date startStatisticsDate; // 开始统计日期
private Date endStatisticsDate; // 结束统计日期
}
@Data
@ApiModel(value = "UserStatistics", description = "统计当日新增用户数、平台总用户数")
public static class UserStatistics extends BaseStatistics {
@ApiModelProperty(value = "新增用户")
private int dailyNewUsers;
@ApiModelProperty(value = "平台总用户数")
private int totalUsers;
}
@Data
@ApiModel(value = "OrderStatistics", description = "日新增订单数、平台总订单数")
public static class OrderStatistics extends BaseStatistics{
@ApiModelProperty(value = "新增的订单量")
private int dailyNewOrders;
@ApiModelProperty(value = "平台总订单数")
private int totalOrders;
}
@Data
@ApiModel(value = "SalesAmount", description = "销售额统计")
public static class SalesAmountStatistics extends BaseStatistics{
@ApiModelProperty(value = "每日销售额")
private BigDecimal dailySale;
@ApiModelProperty(value = "总销售额")
private BigDecimal totalSale;
}
@Data
@ApiModel(value = "EquipmentStatistics", description = "设备统计")
public static class EquipmentStatistics extends BaseStatistics{
@ApiModelProperty(value = "每日新增设备")
private int dailyEquipment;
@ApiModelProperty(value = "设备总数")
private int totalEquipment;
}
@ApiModelProperty(value = "总销售额")
private BigDecimal totalSale;
}

View File

@@ -0,0 +1,42 @@
package com.gxwebsoft.shop.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gxwebsoft.shop.entity.Dashboard;
import com.gxwebsoft.shop.param.DashBoardParam;
import org.apache.ibatis.annotations.Param;
public interface DashboardMapper extends BaseMapper<Dashboard> {
/**
* 订单统计
*
* @param param 查询参数
* @return OrderStatistics
*/
Dashboard.OrderStatistics orderStatistics(@Param("param") DashBoardParam param);
/**
* 销售额统计
*
* @param param 查询参数
* @return SalesAmountStatistics
*/
Dashboard.SalesAmountStatistics salesAmountStatistics(@Param("param") DashBoardParam param);
/**
* 用户统计
*
* @param param 查询参数
* @return UserStatistics
*/
Dashboard.UserStatistics userStatistics(@Param("param") DashBoardParam param);
/**
* 设备统计
*
* @param param 查询参数
* @return UserStatistics
*/
Dashboard.EquipmentStatistics equipmentStatistics(@Param("param") DashBoardParam param);
}

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gxwebsoft.shop.mapper.DashboardMapper">
<!-- 关联查询sql -->
<sql id="selectSql">
SELECT a.*
FROM shop_cart a
<where>
</where>
</sql>
<!-- 分页查询 -->
<select id="selectPageRel" resultType="com.gxwebsoft.shop.entity.Dashboard">
<include refid="selectSql"></include>
</select>
<!-- 查询全部 -->
<select id="selectListRel" resultType="com.gxwebsoft.shop.entity.Dashboard">
<include refid="selectSql"></include>
</select>
</mapper>

View File

@@ -0,0 +1,48 @@
package com.gxwebsoft.shop.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gxwebsoft.shop.entity.Dashboard;
import com.gxwebsoft.shop.param.DashBoardParam;
/**
* 购物车记录表Service
*
* @author 科技小王子
* @since 2022-11-25 19:04:43
*/
public interface DashboardService extends IService<Dashboard> {
/**
* 订单统计
*
* @param param 查询参数
* @return OrderStatistics
*/
Dashboard.OrderStatistics orderStatistics(DashBoardParam param);
/**
* 销售额统计
*
* @param param 查询参数
* @return SalesAmountStatistics
*/
Dashboard.SalesAmountStatistics salesAmountStatistics(DashBoardParam param);
/**
* 用户统计
*
* @param param 查询参数
* @return UserStatistics
*/
Dashboard.UserStatistics userStatistics(DashBoardParam param);
/**
* 设备统计
*
* @param param 查询参数
* @return UserStatistics
*/
Dashboard.EquipmentStatistics equipmentStatistics(DashBoardParam param);
}

View File

@@ -0,0 +1,161 @@
package com.gxwebsoft.shop.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gxwebsoft.apps.entity.Equipment;
import com.gxwebsoft.apps.service.EquipmentService;
import com.gxwebsoft.common.system.entity.User;
import com.gxwebsoft.common.system.service.UserService;
import com.gxwebsoft.shop.entity.Dashboard;
import com.gxwebsoft.shop.entity.Order;
import com.gxwebsoft.shop.entity.OrderPay;
import com.gxwebsoft.shop.mapper.DashboardMapper;
import com.gxwebsoft.shop.param.DashBoardParam;
import com.gxwebsoft.shop.service.DashboardService;
import com.gxwebsoft.shop.service.OrderPayService;
import com.gxwebsoft.shop.service.OrderService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
/**
* 仪表盘,数据统计
*
* @author yqy
* @since 2024-08-21
*/
@Service
public class DashboardServiceImpl extends ServiceImpl<DashboardMapper, Dashboard> implements DashboardService {
@Resource
private OrderService orderService;
@Resource
private UserService userService;
@Resource
private OrderPayService orderPayService;
@Resource
private EquipmentService equipmentService;
/**
* 订单统计
*
* @param param 查询参数
* @return OrderStatistics
*/
@Override
public Dashboard.OrderStatistics orderStatistics(DashBoardParam param) {
//某日订单数
int dayNewOrderNum = orderService.count(Wrappers.lambdaQuery(Order.class)
.ge(Order::getCreateTime,param.getCreateTimeStart())
.le(Order::getCreateTime,param.getCreateTimeEnd()));
//订单总数
int totalOrderNum = orderService.count(Wrappers.lambdaQuery(Order.class)
.eq(Order::getIsRenew,0)//非继费订单
.eq(Order::getIsFreeze,1)//交押金
.eq(Order::getDeleted,0));//注意:该过滤方式跟订单管理一致 TODO 这里不考虑巨量数据
//订单统计
Dashboard.OrderStatistics orderStatistics = new Dashboard.OrderStatistics();
orderStatistics.setStartStatisticsDate(DateUtil.parse(param.getCreateTimeStart()));
orderStatistics.setEndStatisticsDate(DateUtil.parse(param.getCreateTimeEnd()));
orderStatistics.setTotalOrders(totalOrderNum);
orderStatistics.setDailyNewOrders(dayNewOrderNum);
return orderStatistics;
}
/**
* 销售额统计
*
* @param param 查询参数
* @return SalesAmountStatistics
*/
@Override
public Dashboard.SalesAmountStatistics salesAmountStatistics(DashBoardParam param) {
//某日销售额
BigDecimal dayTotalSale =BigDecimal.ZERO;
List<OrderPay> orderPayList=orderPayService.list(Wrappers.lambdaQuery(OrderPay.class)
.eq(OrderPay::getPayStatus,20)
.ge(OrderPay::getCreateTime,param.getCreateTimeStart())
.le(OrderPay::getCreateTime,param.getCreateTimeEnd()));
if (null!=orderPayList && !orderPayList.isEmpty()){
dayTotalSale= orderPayList.stream().map(OrderPay::getOrderPrice).reduce(BigDecimal.ZERO,BigDecimal::add);
}
//总销售额
BigDecimal totalSale =BigDecimal.ZERO;
List<OrderPay> totalOrderPayList=orderPayService.list(Wrappers.lambdaQuery(OrderPay.class)
.eq(OrderPay::getDeleted,0)
.eq(OrderPay::getPayStatus,20));//过滤付款的 TODO 这里不考虑巨量数据
if (null!=totalOrderPayList && !orderPayList.isEmpty()){
totalSale= totalOrderPayList.stream().map(OrderPay::getOrderPrice).reduce(BigDecimal.ZERO,BigDecimal::add);
}
//销售额统计
Dashboard.SalesAmountStatistics salesAmountStatistics = new Dashboard.SalesAmountStatistics();
salesAmountStatistics.setStartStatisticsDate(DateUtil.parse(param.getCreateTimeStart()));
salesAmountStatistics.setEndStatisticsDate(DateUtil.parse(param.getCreateTimeEnd()));
salesAmountStatistics.setDailySale(dayTotalSale);
salesAmountStatistics.setTotalSale(totalSale);
return salesAmountStatistics;
}
/**
* 用户统计
*
* @param param 查询参数
* @return UserStatistics
*/
@Override
public Dashboard.UserStatistics userStatistics(DashBoardParam param) {
//某日新增用户数
int dailyNewUsers = userService.count(Wrappers.lambdaQuery(User.class)
.ge(User::getCreateTime,param.getCreateTimeStart())
.le(User::getCreateTime,param.getCreateTimeEnd()));
//用户总数
int totalUser = userService.count(Wrappers.lambdaQuery(User.class)
.eq(User::getDeleted,0));//TODO 这里不考虑巨量数据
//用户统计
Dashboard.UserStatistics userStatistics = new Dashboard.UserStatistics();
userStatistics.setStartStatisticsDate(DateUtil.parse(param.getCreateTimeStart()));
userStatistics.setEndStatisticsDate(DateUtil.parse(param.getCreateTimeEnd()));
userStatistics.setTotalUsers(totalUser);
userStatistics.setDailyNewUsers(dailyNewUsers);
return userStatistics;
}
/**
* 设备统计
*
* @param param 查询参数
* @return EquipmentStatistics
*/
@Override
public Dashboard.EquipmentStatistics equipmentStatistics(DashBoardParam param) {
//某日新增设备
int dailyEquipment = equipmentService.count(Wrappers.lambdaQuery(Equipment.class)
.ge(Equipment::getCreateTime,param.getCreateTimeStart())
.le(Equipment::getCreateTime,param.getCreateTimeEnd()));
//设备总数
int totalEquipment = equipmentService.count(Wrappers.lambdaQuery(Equipment.class)
.eq(Equipment::getDeleted,0));//TODO 这里不考虑巨量数据
//设备统计
Dashboard.EquipmentStatistics equipmentStatistics = new Dashboard.EquipmentStatistics();
equipmentStatistics.setStartStatisticsDate(DateUtil.parse(param.getCreateTimeStart()));
equipmentStatistics.setEndStatisticsDate(DateUtil.parse(param.getCreateTimeEnd()));
equipmentStatistics.setDailyEquipment(dailyEquipment);
equipmentStatistics.setTotalEquipment(totalEquipment);
return equipmentStatistics;
}
}