|
|
@@ -1,7 +1,15 @@
|
|
|
package com.ruoyi.logistics.service.impl;
|
|
|
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Comparator;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
@@ -11,16 +19,23 @@ import com.ruoyi.common.core.utils.DateUtils;
|
|
|
import com.ruoyi.common.datascope.annotation.DataScope;
|
|
|
import com.ruoyi.common.redis.service.RedisIdGenerator;
|
|
|
import com.ruoyi.common.security.utils.SecurityUtils;
|
|
|
+import com.ruoyi.logistics.domain.BizWaybillCostDetails;
|
|
|
+import com.ruoyi.logistics.domain.dto.OrderStatisticsDto;
|
|
|
import com.ruoyi.logistics.enums.OrderStatusEnum;
|
|
|
+import com.ruoyi.logistics.mapper.BizWaybillCostDetailsMapper;
|
|
|
import com.ruoyi.logistics.service.LogisticsOrderService;
|
|
|
import com.ruoyi.system.api.model.LoginUser;
|
|
|
+import org.apache.commons.lang3.time.DateFormatUtils;
|
|
|
import org.checkerframework.checker.units.qual.A;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import com.ruoyi.logistics.mapper.BizWaybillOrderMapper;
|
|
|
import com.ruoyi.logistics.domain.BizWaybillOrder;
|
|
|
+import com.ruoyi.logistics.domain.dto.DailyOrderStatisticsDto;
|
|
|
import com.ruoyi.logistics.service.IBizWaybillOrderService;
|
|
|
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
/**
|
|
|
* 运单管理Service业务层处理
|
|
|
*
|
|
|
@@ -38,6 +53,9 @@ public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService
|
|
|
@Autowired
|
|
|
private RedisIdGenerator redisIdGenerator;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private BizWaybillCostDetailsMapper bizWaybillCostDetailsMapper;
|
|
|
+
|
|
|
/**
|
|
|
* 查询运单管理
|
|
|
*
|
|
|
@@ -162,4 +180,52 @@ public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService
|
|
|
return bizWaybillOrderMapper.canceleBizWaybillOrder(bizWaybillOrder);
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+ @DataScope(deptAlias = "d", userAlias = "u")
|
|
|
+ @Override
|
|
|
+ public OrderStatisticsDto getTotalOrdersByOrderType(BizWaybillOrder bizWaybillOrder, BizWaybillCostDetails bizWaybillCostDetails) {
|
|
|
+ OrderStatisticsDto orderStatisticsDto = bizWaybillOrderMapper.selectTotalOrdersByOrderType(bizWaybillOrder);
|
|
|
+ BigDecimal totalAmount = bizWaybillCostDetailsMapper.selectBizWaybillCostDetailsSum(bizWaybillCostDetails);
|
|
|
+ orderStatisticsDto.setTotalAmount(totalAmount);
|
|
|
+ return orderStatisticsDto;
|
|
|
+ }
|
|
|
+
|
|
|
+ @DataScope(deptAlias = "d", userAlias = "u")
|
|
|
+ @Override
|
|
|
+ public List<DailyOrderStatisticsDto> getLast7DaysOrderStatistics(BizWaybillOrder bizWaybillOrder) {
|
|
|
+ // 获取最近7天的日期范围
|
|
|
+ LocalDate endDate = LocalDate.now();
|
|
|
+ LocalDate startDate = endDate.minusDays(6); // 包含今天在内的7天
|
|
|
+ bizWaybillOrder.setStartDate(startDate);
|
|
|
+ bizWaybillOrder.setEndDate(endDate);
|
|
|
+
|
|
|
+ // 查询数据库中指定日期范围的所有数据
|
|
|
+ List<DailyOrderStatisticsDto> recentData = bizWaybillOrderMapper.selectLast7DaysOrderStatisticsByDateRange(bizWaybillOrder);
|
|
|
+
|
|
|
+ // 创建一个Map来存储查询结果,以日期为键
|
|
|
+ Map<String, DailyOrderStatisticsDto> dataMap = new HashMap<>();
|
|
|
+ for (DailyOrderStatisticsDto dto : recentData) {
|
|
|
+ String dateStr = DateFormatUtils.format(dto.getStatisticsDate(), "yyyy-MM-dd"); // 假设日期格式为yyyy-MM-dd
|
|
|
+ dataMap.put(dateStr, dto);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 构建完整的7天数据,缺失的日期用0填充
|
|
|
+ List<DailyOrderStatisticsDto> result = new ArrayList<>();
|
|
|
+ for (LocalDate date = startDate; !date.isAfter(endDate); date = date.plusDays(1)) {
|
|
|
+ String dateStr = date.toString();
|
|
|
+ if (dataMap.containsKey(dateStr)) {
|
|
|
+ result.add(dataMap.get(dateStr));
|
|
|
+ } else {
|
|
|
+ // 如果当天没有数据,则创建一个全为0的记录
|
|
|
+ DailyOrderStatisticsDto emptyDto = new DailyOrderStatisticsDto();
|
|
|
+ emptyDto.setStatisticsDate(java.util.Date.from(date.atStartOfDay(java.time.ZoneId.systemDefault()).toInstant()));
|
|
|
+ emptyDto.setJdOrderCount(0L);
|
|
|
+ emptyDto.setSfOrderCount(0L);
|
|
|
+ emptyDto.setTotalOrderCount(0L);
|
|
|
+ result.add(emptyDto);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
}
|