diff --git a/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/controller/AllOrderInfoController.java b/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/controller/AllOrderInfoController.java index 5be0c4e8f..06a5fac1c 100644 --- a/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/controller/AllOrderInfoController.java +++ b/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/controller/AllOrderInfoController.java @@ -333,6 +333,17 @@ public class AllOrderInfoController extends BaseController { return getSuccessResult(allOrderInfoService.getDataShow(map)); } + /** + * 油站首页数据统计 + * @param startTime + * @param endTime + * @return + */ + @GetMapping("getDataCount") + public ResponseObject getDataCount(String startTime, String endTime) { + return getSuccessResult(allOrderInfoService.getDataCount(startTime, endTime)); + } + /** * 消费记录(小程序) * @param pageNo diff --git a/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/AllOrderInfoService.java b/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/AllOrderInfoService.java index 238aa3114..e1ded674c 100644 --- a/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/AllOrderInfoService.java +++ b/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/AllOrderInfoService.java @@ -188,4 +188,12 @@ AllOrderActivityVo getOneByOrderId(Integer orderId); * @return */ AllOrderInfoUniVo queryByOrderNo(String orderNo); + + /** + * 油站首页数据统计 + * @param startTime + * @param endTime + * @return + */ + HomeDataShowVo getDataCount(String startTime, String endTime); } diff --git a/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/impl/AllOrderInfoServiceImpl.java b/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/impl/AllOrderInfoServiceImpl.java index 89d891208..9ec00fd5b 100644 --- a/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/impl/AllOrderInfoServiceImpl.java +++ b/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/impl/AllOrderInfoServiceImpl.java @@ -3,6 +3,7 @@ package com.fuint.business.order.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateTime; +import cn.hutool.core.date.DateUnit; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.excel.EasyExcel; @@ -1792,9 +1793,9 @@ public class AllOrderInfoServiceImpl extends ServiceImpl oilPrices = new ArrayList<>(); for (OilNumber oilNumber : oilNumbers) { //查询油品交易总金额 - double price = oilOrderMapper.selectSumMoneyByDayAndOilNumber(oilNumber.getOilName(), day, nowAccountInfo.getStoreId()); - oilPrices.add(price); + double price = oilOrderMapper.selectSumMoneyByDayAndOilNumber(oilNumber.getOilName(), day, nowAccountInfo.getStoreId()); + oilPrices.add(price); } mapData.put("oilPrices", oilPrices); oilData.add(mapData); @@ -1894,6 +1895,7 @@ public class AllOrderInfoServiceImpl extends ServiceImpl allOrderInfos = baseMapper.selectList(new LambdaQueryWrapper() + .eq(AllOrderInfo::getStoreId, nowAccountInfo.getStoreId()) + .eq(AllOrderInfo::getStatus, "paid") + .between(AllOrderInfo::getPayTime, DateUtil.beginOfDay(DateUtil.parse(startTime)), DateUtil.endOfDay(DateUtil.parse(endTime)))); + + List allDatesBetween = getAllDatesBetween(startTime, endTime); + + List oilNames = new ArrayList<>(); + List> oilData = new ArrayList<>(); + oilNames.add("油品交易额"); + oilNames.add("会员充值金额"); + oilNames.add("非油品交易额"); + oilNames.add("会员消费金额"); + for (String time : allDatesBetween) { + DateTime dateTime = DateUtil.beginOfDay(DateUtil.parse(time)); + DateTime dateTime1 = DateUtil.endOfDay(dateTime); + Map params = new HashMap<>(); + params.put("time", time); + List money = new ArrayList<>(); + //油品交易额 + List oilOrder = filterOrders(allOrderInfos, dateTime, dateTime1, "1", null, null); + double sum = oilOrder.stream().mapToDouble(AllOrderInfo::getPayMoney).sum(); + money.add(sum); + //会员充值金额 + List mtTopUp = filterOrders(allOrderInfos, dateTime, dateTime1, null, "充值", null); + double mtSum = mtTopUp.stream().mapToDouble(AllOrderInfo::getPayMoney).sum(); + money.add(mtSum); + //非油品交易额 + List otherOrder = filterOrders(allOrderInfos, dateTime, dateTime1, null, null, "2"); + double otherSum = otherOrder.stream().mapToDouble(AllOrderInfo::getPayMoney).sum(); + money.add(otherSum); + //会员消费金额 + List userOrder = filterOrders(allOrderInfos, dateTime, dateTime1, null, "订单", null); + double userSum = userOrder.stream().mapToDouble(AllOrderInfo::getPayMoney).sum(); + money.add(userSum); + + params.put("money", money); + oilData.add(params); + } + homeDataShowVo.setOilNames(oilNames); + homeDataShowVo.setOilData(oilData); + } + return homeDataShowVo; + } + + /** + * 根据开始时间、结束时间、订单类型和内容过滤订单。 + * + * @param orders 订单集合 + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param type 订单类型(如果为空,则不筛选类型) + * @param content 内容(如果不为空,筛选包含该内容的订单) + * @return 符合条件的订单集合 + */ + public List filterOrders( + List orders, + Date startTime, + Date endTime, + String type, + String content, + String excludeType + ) { + return orders.stream() + .filter(order -> + // 检查payTime是否在开始和结束时间范围内 + (startTime == null || !order.getPayTime().before(startTime)) && + (endTime == null || !order.getPayTime().after(endTime)) && + + // 检查type是否匹配 + (type == null || order.getType().equals(type)) && + + // 检查excludeType,排除指定type的订单 + (excludeType == null || !order.getType().equals(excludeType)) && + + // 检查content是否包含指定内容 + (content == null || order.getContent() != null && order.getContent().contains(content)) + ) + .collect(Collectors.toList()); + } + private long dayCount(String beginTimeStr, String endTimeStr) { // 将字符串表示的时间转换成 LocalDate 对象