feat:统计接口增加销售额

This commit is contained in:
yangqingyuan
2024-08-22 13:29:18 +08:00
parent d71f723eb7
commit c7d07f0f91
6 changed files with 115 additions and 55 deletions

View File

@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.RestController;
import com.gxwebsoft.common.core.web.*; import com.gxwebsoft.common.core.web.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List;
/** /**
* 仪表盘,数据统计 * 仪表盘,数据统计
@@ -35,7 +36,7 @@ public class DashboardController extends BaseController {
@OperationLog @OperationLog
@ApiOperation("可查看一天日新增的订单量、一天日销售额以及总订单量、总销售额数据\n") @ApiOperation("可查看一天日新增的订单量、一天日销售额以及总订单量、总销售额数据\n")
@GetMapping("/statistics") @GetMapping("/statistics")
public ApiResult<Dashboard> day(DashBoardParam param) { public ApiResult<Dashboard> statistics(DashBoardParam param) {
//默认是今天 //默认是今天
if (param.getCreateTimeStart()==null){ if (param.getCreateTimeStart()==null){
@@ -52,4 +53,20 @@ public class DashboardController extends BaseController {
dashboard.setEquipmentStatistics(dashboardService.equipmentStatistics(param)); dashboard.setEquipmentStatistics(dashboardService.equipmentStatistics(param));
return success(dashboard); return success(dashboard);
} }
@OperationLog
@ApiOperation("销售额趋势图")
@GetMapping("/statistics/sales")
public ApiResult<List<Dashboard.SalesAmountStatistics>> statisticsSales(DashBoardParam param) {
if (param.getCreateTimeStart() == null){//时间不传递,默认开始时间为最近一周
param.setCreateTimeStart(DateUtil.formatDate(DateUtil.lastWeek()));
}
if (param.getCreateTimeEnd()==null){//结束时间为,今天
param.setCreateTimeEnd(DateUtil.today()+" 59:59:59");
}
return success(dashboardService.salesAmountStatisticsList(param));
}
} }

View File

@@ -2,18 +2,13 @@ package com.gxwebsoft.shop.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gxwebsoft.shop.entity.Dashboard; import com.gxwebsoft.shop.entity.Dashboard;
import com.gxwebsoft.shop.entity.OrderPay;
import com.gxwebsoft.shop.param.DashBoardParam; import com.gxwebsoft.shop.param.DashBoardParam;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
public interface DashboardMapper extends BaseMapper<Dashboard> { import java.util.List;
/** public interface DashboardMapper extends BaseMapper<Dashboard> {
* 订单统计
*
* @param param 查询参数
* @return OrderStatistics
*/
Dashboard.OrderStatistics orderStatistics(@Param("param") DashBoardParam param);
/** /**
* 销售额统计 * 销售额统计
@@ -21,22 +16,7 @@ public interface DashboardMapper extends BaseMapper<Dashboard> {
* @param param 查询参数 * @param param 查询参数
* @return SalesAmountStatistics * @return SalesAmountStatistics
*/ */
Dashboard.SalesAmountStatistics salesAmountStatistics(@Param("param") DashBoardParam param); List<OrderPay> selectOrderPayListRel(@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

@@ -16,9 +16,25 @@
<include refid="selectSql"></include> <include refid="selectSql"></include>
</select> </select>
<!-- 查询全部 --> <!-- 查询全部支付订单 -->
<select id="selectListRel" resultType="com.gxwebsoft.shop.entity.Dashboard"> <select id="selectOrderPayListRel" resultType="com.gxwebsoft.shop.entity.OrderPay">
<include refid="selectSql"></include> SELECT a.*,DATE_FORMAT(a.create_time,'%Y-%m-%d') AS createTime
FROM shop_order_pay a
<where>
AND a.pay_status = 20
<if test="param.goodsId != null">
AND a.merchant_code = #{param.goodsId}
</if>
<if test="param.shopId != null">
AND a.merchant_code = #{param.shopId}
</if>
<if test="param.createTimeStart != null">
AND a.create_time &gt;= #{param.createTimeStart}
</if>
<if test="param.createTimeEnd != null">
AND a.create_time &lt;= #{param.createTimeEnd}
</if>
</where>
ORDER BY a.create_time desc
</select> </select>
</mapper> </mapper>

View File

@@ -3,6 +3,7 @@ package com.gxwebsoft.shop.param;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import com.gxwebsoft.common.core.web.BaseParam; import com.gxwebsoft.common.core.web.BaseParam;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@@ -12,5 +13,12 @@ import lombok.EqualsAndHashCode;
@ApiModel(value = "DashBoardParam", description = "银表盘数据统计面板参数") @ApiModel(value = "DashBoardParam", description = "银表盘数据统计面板参数")
public class DashBoardParam extends BaseParam { public class DashBoardParam extends BaseParam {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "所属门店ID")
private Integer shopId;
@ApiModelProperty(value = "商品ID")
private Integer goodsId;
} }

View File

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.gxwebsoft.shop.entity.Dashboard; import com.gxwebsoft.shop.entity.Dashboard;
import com.gxwebsoft.shop.param.DashBoardParam; import com.gxwebsoft.shop.param.DashBoardParam;
import java.util.List;
/** /**
* 购物车记录表Service * 购物车记录表Service
* *
@@ -45,4 +47,13 @@ public interface DashboardService extends IService<Dashboard> {
*/ */
Dashboard.EquipmentStatistics equipmentStatistics(DashBoardParam param); Dashboard.EquipmentStatistics equipmentStatistics(DashBoardParam param);
/**
* 销售额统计趋势图
*
* @param param 查询参数
* @return SalesAmountStatistics
*/
List<Dashboard.SalesAmountStatistics> salesAmountStatisticsList(DashBoardParam param);
} }

View File

@@ -19,7 +19,8 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.*;
import java.util.stream.Collectors;
/** /**
* 仪表盘,数据统计 * 仪表盘,数据统计
@@ -52,14 +53,14 @@ public class DashboardServiceImpl extends ServiceImpl<DashboardMapper, Dashboard
public Dashboard.OrderStatistics orderStatistics(DashBoardParam param) { public Dashboard.OrderStatistics orderStatistics(DashBoardParam param) {
//某日订单数 //某日订单数
int dayNewOrderNum = orderService.count(Wrappers.lambdaQuery(Order.class) int dayNewOrderNum = orderService.count(Wrappers.lambdaQuery(Order.class)
.ge(Order::getCreateTime,param.getCreateTimeStart()) .ge(Order::getCreateTime, param.getCreateTimeStart())
.le(Order::getCreateTime,param.getCreateTimeEnd())); .le(Order::getCreateTime, param.getCreateTimeEnd()));
//订单总数 //订单总数
int totalOrderNum = orderService.count(Wrappers.lambdaQuery(Order.class) int totalOrderNum = orderService.count(Wrappers.lambdaQuery(Order.class)
.eq(Order::getIsRenew,0)//非继费订单 .eq(Order::getIsRenew, 0)//非继费订单
.eq(Order::getIsFreeze,1)//交押金 .eq(Order::getIsFreeze, 1)//交押金
.eq(Order::getDeleted,0));//注意:该过滤方式跟订单管理一致 TODO 这里不考虑巨量数据 .eq(Order::getDeleted, 0));//注意:该过滤方式跟订单管理一致 TODO 这里不考虑巨量数据
//订单统计 //订单统计
Dashboard.OrderStatistics orderStatistics = new Dashboard.OrderStatistics(); Dashboard.OrderStatistics orderStatistics = new Dashboard.OrderStatistics();
orderStatistics.setStartStatisticsDate(DateUtil.parse(param.getCreateTimeStart())); orderStatistics.setStartStatisticsDate(DateUtil.parse(param.getCreateTimeStart()));
@@ -78,22 +79,22 @@ public class DashboardServiceImpl extends ServiceImpl<DashboardMapper, Dashboard
@Override @Override
public Dashboard.SalesAmountStatistics salesAmountStatistics(DashBoardParam param) { public Dashboard.SalesAmountStatistics salesAmountStatistics(DashBoardParam param) {
//某日销售额 //某日销售额
BigDecimal dayTotalSale =BigDecimal.ZERO; BigDecimal dayTotalSale = BigDecimal.ZERO;
List<OrderPay> orderPayList=orderPayService.list(Wrappers.lambdaQuery(OrderPay.class) List<OrderPay> orderPayList = orderPayService.list(Wrappers.lambdaQuery(OrderPay.class)
.eq(OrderPay::getPayStatus,20) .eq(OrderPay::getPayStatus, 20)
.ge(OrderPay::getCreateTime,param.getCreateTimeStart()) .ge(OrderPay::getCreateTime, param.getCreateTimeStart())
.le(OrderPay::getCreateTime,param.getCreateTimeEnd())); .le(OrderPay::getCreateTime, param.getCreateTimeEnd()));
if (null!=orderPayList && !orderPayList.isEmpty()){ if (null != orderPayList && !orderPayList.isEmpty()) {
dayTotalSale= orderPayList.stream().map(OrderPay::getOrderPrice).reduce(BigDecimal.ZERO,BigDecimal::add); dayTotalSale = orderPayList.stream().map(OrderPay::getOrderPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
} }
//总销售额 //总销售额
BigDecimal totalSale =BigDecimal.ZERO; BigDecimal totalSale = BigDecimal.ZERO;
List<OrderPay> totalOrderPayList=orderPayService.list(Wrappers.lambdaQuery(OrderPay.class) List<OrderPay> totalOrderPayList = orderPayService.list(Wrappers.lambdaQuery(OrderPay.class)
.eq(OrderPay::getDeleted,0) .eq(OrderPay::getDeleted, 0)
.eq(OrderPay::getPayStatus,20));//过滤付款的 TODO 这里不考虑巨量数据 .eq(OrderPay::getPayStatus, 20));//过滤付款的 TODO 这里不考虑巨量数据
if (null!=totalOrderPayList && !orderPayList.isEmpty()){ if (null != totalOrderPayList && !orderPayList.isEmpty()) {
totalSale= totalOrderPayList.stream().map(OrderPay::getOrderPrice).reduce(BigDecimal.ZERO,BigDecimal::add); totalSale = totalOrderPayList.stream().map(OrderPay::getOrderPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
} }
//销售额统计 //销售额统计
@@ -116,12 +117,12 @@ public class DashboardServiceImpl extends ServiceImpl<DashboardMapper, Dashboard
public Dashboard.UserStatistics userStatistics(DashBoardParam param) { public Dashboard.UserStatistics userStatistics(DashBoardParam param) {
//某日新增用户数 //某日新增用户数
int dailyNewUsers = userService.count(Wrappers.lambdaQuery(User.class) int dailyNewUsers = userService.count(Wrappers.lambdaQuery(User.class)
.ge(User::getCreateTime,param.getCreateTimeStart()) .ge(User::getCreateTime, param.getCreateTimeStart())
.le(User::getCreateTime,param.getCreateTimeEnd())); .le(User::getCreateTime, param.getCreateTimeEnd()));
//用户总数 //用户总数
int totalUser = userService.count(Wrappers.lambdaQuery(User.class) int totalUser = userService.count(Wrappers.lambdaQuery(User.class)
.eq(User::getDeleted,0));//TODO 这里不考虑巨量数据 .eq(User::getDeleted, 0));//TODO 这里不考虑巨量数据
//用户统计 //用户统计
Dashboard.UserStatistics userStatistics = new Dashboard.UserStatistics(); Dashboard.UserStatistics userStatistics = new Dashboard.UserStatistics();
@@ -142,12 +143,12 @@ public class DashboardServiceImpl extends ServiceImpl<DashboardMapper, Dashboard
public Dashboard.EquipmentStatistics equipmentStatistics(DashBoardParam param) { public Dashboard.EquipmentStatistics equipmentStatistics(DashBoardParam param) {
//某日新增设备 //某日新增设备
int dailyEquipment = equipmentService.count(Wrappers.lambdaQuery(Equipment.class) int dailyEquipment = equipmentService.count(Wrappers.lambdaQuery(Equipment.class)
.ge(Equipment::getCreateTime,param.getCreateTimeStart()) .ge(Equipment::getCreateTime, param.getCreateTimeStart())
.le(Equipment::getCreateTime,param.getCreateTimeEnd())); .le(Equipment::getCreateTime, param.getCreateTimeEnd()));
//设备总数 //设备总数
int totalEquipment = equipmentService.count(Wrappers.lambdaQuery(Equipment.class) int totalEquipment = equipmentService.count(Wrappers.lambdaQuery(Equipment.class)
.eq(Equipment::getDeleted,0));//TODO 这里不考虑巨量数据 .eq(Equipment::getDeleted, 0));//TODO 这里不考虑巨量数据
//设备统计 //设备统计
Dashboard.EquipmentStatistics equipmentStatistics = new Dashboard.EquipmentStatistics(); Dashboard.EquipmentStatistics equipmentStatistics = new Dashboard.EquipmentStatistics();
@@ -158,4 +159,31 @@ public class DashboardServiceImpl extends ServiceImpl<DashboardMapper, Dashboard
return equipmentStatistics; return equipmentStatistics;
} }
/**
* 销售额统计趋势图
*
* @param param 查询参数
* @return List<SalesAmountStatistics>
*/
@Override
public List<Dashboard.SalesAmountStatistics> salesAmountStatisticsList(DashBoardParam param) {
List<OrderPay> orderPayList = baseMapper.selectOrderPayListRel(param);
Map<Date, List<OrderPay>> orderPayListMap = orderPayList.stream().collect(Collectors.groupingBy(OrderPay::getCreateTime));
List<Dashboard.SalesAmountStatistics> salesAmountStatisticsList = new ArrayList<>();
orderPayListMap.forEach((date, orderPays) -> {
Date statisticsDate = DateUtil.parseDate(DateUtil.formatDate(date));//将时间转化为
BigDecimal dailySale = orderPays.stream().map(OrderPay::getOrderPrice).reduce(BigDecimal.ZERO, BigDecimal::add);//将相同日期的订单额相加
Dashboard.SalesAmountStatistics statistics = new Dashboard.SalesAmountStatistics();
statistics.setDailySale(dailySale);
statistics.setStartStatisticsDate(statisticsDate);
statistics.setEndStatisticsDate(statisticsDate);
salesAmountStatisticsList.add(statistics);
});
//按照时间排序
Collections.sort(salesAmountStatisticsList, Comparator.comparing(Dashboard.BaseStatistics::getStartStatisticsDate));
return salesAmountStatisticsList;
}
} }