浏览代码

Merge remote-tracking branch 'origin/master'

颜琼丽 1 天之前
父节点
当前提交
796aeb0447
共有 12 个文件被更改,包括 377 次插入3 次删除
  1. 21 0
      jd-logistics-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java
  2. 50 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/IndexController.java
  3. 76 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/dto/DailyOrderStatisticsDto.java
  4. 70 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/dto/OrderStatisticsDto.java
  5. 6 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/BizWaybillCostDetailsMapper.java
  6. 18 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/BizWaybillOrderMapper.java
  7. 19 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/IBizWaybillOrderService.java
  8. 1 1
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/LogisticsOrderService.java
  9. 66 0
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizWaybillOrderServiceImpl.java
  10. 4 2
      jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/MonthQRCodeTaskServiceImpl.java
  11. 11 0
      jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/BizWaybillCostDetailsMapper.xml
  12. 35 0
      jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/BizWaybillOrderMapper.xml

+ 21 - 0
jd-logistics-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java

@@ -1,12 +1,14 @@
 package com.ruoyi.common.core.web.domain;
 
 import java.io.Serializable;
+import java.time.LocalDate;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonInclude;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * Entity基类
@@ -45,6 +47,9 @@ public class BaseEntity implements Serializable
     @JsonInclude(JsonInclude.Include.NON_EMPTY)
     private Map<String, Object> params;
 
+    private LocalDate startDate;
+    private LocalDate endDate;
+
     public String getSearchValue()
     {
         return searchValue;
@@ -126,4 +131,20 @@ public class BaseEntity implements Serializable
     public void setSearchKeyword(String searchKeyword) {
         this.searchKeyword = searchKeyword;
     }
+
+    public LocalDate getStartDate() {
+        return startDate;
+    }
+
+    public void setStartDate(LocalDate startDate) {
+        this.startDate = startDate;
+    }
+
+    public LocalDate getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(LocalDate endDate) {
+        this.endDate = endDate;
+    }
 }

+ 50 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/IndexController.java

@@ -0,0 +1,50 @@
+package com.ruoyi.logistics.controller;
+
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.logistics.domain.BizWaybillCostDetails;
+import com.ruoyi.logistics.domain.BizWaybillOrder;
+import com.ruoyi.logistics.service.IBizWaybillOrderService;
+import com.ruoyi.logistics.domain.dto.OrderStatisticsDto;
+import com.ruoyi.logistics.domain.dto.DailyOrderStatisticsDto;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * PC-首页指标
+ *
+ * @author RuiJing
+ * @date 2026-01-29
+ */
+@RestController
+@RequestMapping("/index")
+public class IndexController extends BaseController {
+
+    @Autowired
+    private IBizWaybillOrderService bizWaybillOrderService;
+
+    /**
+     * 获取订单数量汇总
+     * 返回京东运单数量、顺丰运单数量、总运单量
+     */
+
+    @RequiresPermissions("system:order:list")
+    @GetMapping("/getTotalOrdersByOrderType")
+    public OrderStatisticsDto getTotalOrdersByOrderType() {
+        return bizWaybillOrderService.getTotalOrdersByOrderType(new BizWaybillOrder(), new BizWaybillCostDetails());
+    }
+
+    /**
+     * 获取近七日每日订单统计
+     * 返回每日的京东订单数量、顺丰订单数量、总订单数量
+     */
+    @RequiresPermissions("system:order:list")
+    @GetMapping("/getLast7DaysOrderStatistics")
+    public List<DailyOrderStatisticsDto> getLast7DaysOrderStatistics() {
+        return bizWaybillOrderService.getLast7DaysOrderStatistics(new BizWaybillOrder());
+    }
+}

+ 76 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/dto/DailyOrderStatisticsDto.java

@@ -0,0 +1,76 @@
+package com.ruoyi.logistics.domain.dto;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 近七日每日订单统计DTO
+ *
+ * @author RuiJing
+ * @date 2026-02-27
+ */
+public class DailyOrderStatisticsDto {
+
+    /**
+     * 统计日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date statisticsDate;
+
+    /**
+     * 京东订单数量(非时效件)
+     */
+    private Long jdOrderCount;
+
+    /**
+     * 顺丰订单数量(时效件)
+     */
+    private Long sfOrderCount;
+
+    /**
+     * 订单总数量
+     */
+    private Long totalOrderCount;
+
+    public DailyOrderStatisticsDto() {
+    }
+
+    public DailyOrderStatisticsDto(Date statisticsDate, Long jdOrderCount, Long sfOrderCount, Long totalOrderCount) {
+        this.statisticsDate = statisticsDate;
+        this.jdOrderCount = jdOrderCount;
+        this.sfOrderCount = sfOrderCount;
+        this.totalOrderCount = totalOrderCount;
+    }
+
+    public Date getStatisticsDate() {
+        return statisticsDate;
+    }
+
+    public void setStatisticsDate(Date statisticsDate) {
+        this.statisticsDate = statisticsDate;
+    }
+
+    public Long getJdOrderCount() {
+        return jdOrderCount;
+    }
+
+    public void setJdOrderCount(Long jdOrderCount) {
+        this.jdOrderCount = jdOrderCount;
+    }
+
+    public Long getSfOrderCount() {
+        return sfOrderCount;
+    }
+
+    public void setSfOrderCount(Long sfOrderCount) {
+        this.sfOrderCount = sfOrderCount;
+    }
+
+    public Long getTotalOrderCount() {
+        return totalOrderCount;
+    }
+
+    public void setTotalOrderCount(Long totalOrderCount) {
+        this.totalOrderCount = totalOrderCount;
+    }
+}

+ 70 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/dto/OrderStatisticsDto.java

@@ -0,0 +1,70 @@
+package com.ruoyi.logistics.domain.dto;
+
+import java.math.BigDecimal;
+
+/**
+ * 订单统计结果DTO
+ *
+ * @author RuiJing
+ * @date 2026-02-27
+ */
+public class OrderStatisticsDto {
+
+    /**
+     * 京东运单数量(非时效件)
+     */
+    private Long jdOrderCount;
+
+    /**
+     * 顺丰运单数量(时效件)
+     */
+    private Long sfOrderCount;
+
+    /**
+     * 订单总数量
+     */
+    private Long totalOrderCount;
+
+    private BigDecimal totalAmount; // 订单总金额
+
+    public OrderStatisticsDto() {
+    }
+
+    public OrderStatisticsDto(Long jdOrderCount, Long sfOrderCount, Long totalOrderCount) {
+        this.jdOrderCount = jdOrderCount;
+        this.sfOrderCount = sfOrderCount;
+        this.totalOrderCount = totalOrderCount;
+    }
+
+    public Long getJdOrderCount() {
+        return jdOrderCount;
+    }
+
+    public void setJdOrderCount(Long jdOrderCount) {
+        this.jdOrderCount = jdOrderCount;
+    }
+
+    public Long getSfOrderCount() {
+        return sfOrderCount;
+    }
+
+    public void setSfOrderCount(Long sfOrderCount) {
+        this.sfOrderCount = sfOrderCount;
+    }
+
+    public Long getTotalOrderCount() {
+        return totalOrderCount;
+    }
+
+    public void setTotalOrderCount(Long totalOrderCount) {
+        this.totalOrderCount = totalOrderCount;
+    }
+
+    public BigDecimal getTotalAmount() {
+        return totalAmount;
+    }
+
+    public void setTotalAmount(BigDecimal totalAmount) {
+        this.totalAmount = totalAmount;
+    }
+}

+ 6 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/BizWaybillCostDetailsMapper.java

@@ -1,6 +1,9 @@
 package com.ruoyi.logistics.mapper;
 
+import java.math.BigDecimal;
 import java.util.List;
+
+import com.ruoyi.common.datascope.annotation.DataScope;
 import com.ruoyi.logistics.domain.BizWaybillCostDetails;
 
 /**
@@ -64,4 +67,7 @@ public interface BizWaybillCostDetailsMapper
     BizWaybillCostDetails getAccountAdjustmentById(BizWaybillCostDetails bizWaybillCostDetails);
 
     List<BizWaybillCostDetails> detaillist(BizWaybillCostDetails bizWaybillCostDetails);
+    
+    @DataScope(deptAlias = "d", userAlias = "u")
+    BigDecimal selectBizWaybillCostDetailsSum(BizWaybillCostDetails bizWaybillCostDetails);
 }

+ 18 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/mapper/BizWaybillOrderMapper.java

@@ -1,7 +1,11 @@
 package com.ruoyi.logistics.mapper;
 
+import java.time.LocalDate;
 import java.util.List;
 import com.ruoyi.logistics.domain.BizWaybillOrder;
+import com.ruoyi.logistics.domain.dto.OrderStatisticsDto;
+import com.ruoyi.logistics.domain.dto.DailyOrderStatisticsDto;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 运单管理Mapper接口
@@ -70,4 +74,18 @@ public interface BizWaybillOrderMapper
 
 
     int canceleBizWaybillOrder(BizWaybillOrder bizWaybillOrder);
+
+    /**
+     * 根据订单类型统计订单数量
+     *
+     * @return 订单统计结果
+     */
+    OrderStatisticsDto selectTotalOrdersByOrderType(BizWaybillOrder bizWaybillOrder);
+
+    /**
+     * 根据日期范围查询订单统计
+     *
+     * @return 订单统计结果列表
+     */
+    List<DailyOrderStatisticsDto> selectLast7DaysOrderStatisticsByDateRange(BizWaybillOrder bizWaybillOrder);
 }

+ 19 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/IBizWaybillOrderService.java

@@ -4,7 +4,12 @@ import java.io.UnsupportedEncodingException;
 import java.util.List;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.ruoyi.logistics.domain.BizWaybillCostDetails;
 import com.ruoyi.logistics.domain.BizWaybillOrder;
+import com.ruoyi.logistics.domain.dto.OrderStatisticsDto;
+import com.ruoyi.logistics.domain.dto.DailyOrderStatisticsDto;
+
+import java.util.List;
 
 /**
  * 运单管理Service接口
@@ -72,4 +77,18 @@ public interface IBizWaybillOrderService
     void updateBizWaybillOrderState(BizWaybillOrder bizWaybillOrder);
 
     int canceleBizWaybillOrder(BizWaybillOrder bizWaybillOrder) throws UnsupportedEncodingException;
+
+    /**
+     * 获取订单数量汇总
+     *
+     * @return 订单统计结果
+     */
+    OrderStatisticsDto getTotalOrdersByOrderType(BizWaybillOrder bizWaybillOrder, BizWaybillCostDetails bizWaybillCostDetails);
+
+    /**
+     * 获取近七日每日订单统计
+     *
+     * @return 近七日每日订单统计列表
+     */
+    List<DailyOrderStatisticsDto> getLast7DaysOrderStatistics(BizWaybillOrder bizWaybillOrder);
 }

+ 1 - 1
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/LogisticsOrderService.java

@@ -82,7 +82,7 @@ public class LogisticsOrderService {
         monthQRCodeDTO.setSource(source);
         monthQRCodeDTO.setCreateTime(bizMonthQrcodeRecord.getCreateTime());
 
-        redisService.setCacheObject(RedisCacheConstants.MONTH_QRCODE_CACHE_KEY + bizMonthQrcodeRecord.getQrcodeId(), monthQRCodeDTO, 660L, TimeUnit.SECONDS);
+        redisService.setCacheObject(RedisCacheConstants.MONTH_QRCODE_CACHE_KEY + bizMonthQrcodeRecord.getQrcodeId(), monthQRCodeDTO);
 
         // 生成二维码图片
         String qrCodeContent = qrCode.getString("msg");

+ 66 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizWaybillOrderServiceImpl.java

@@ -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;
+    }
 }

+ 4 - 2
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/MonthQRCodeTaskServiceImpl.java

@@ -149,8 +149,10 @@ public class MonthQRCodeTaskServiceImpl implements IMonthQRCodeTaskService {
                 bizWaybillOrder.setGoodsQty(orderInfo.getCargoes().get(0).getQuantity().longValue());
                 bizWaybillOrder.setOrderStatus(6);
                 bizWaybillOrder.setPickupType(orderInfo.getShipmentInfo().getPickupType());
-                bizWaybillOrder.setSendStartTime(new Date(orderInfo.getShipmentInfo().getPickupStartTime()));
-                bizWaybillOrder.setSendEndTime(new Date(orderInfo.getShipmentInfo().getPickupEndTime()));
+                if (orderInfo.getShipmentInfo() != null) {
+                    bizWaybillOrder.setSendStartTime(new Date(orderInfo.getShipmentInfo().getPickupStartTime()));
+                    bizWaybillOrder.setSendEndTime(new Date(orderInfo.getShipmentInfo().getPickupEndTime()));
+                }
 //                    bizWaybillOrder.setPickupTime(new Date(orderInfo.getShipmentInfo().geta()));
 //                    bizWaybillOrder.setDeliveryTime(waybillQRVerifyInfo.getDeliveryTime());
 //                    bizWaybillOrder.setSignTime(waybillQRVerifyInfo.getSignTime());

+ 11 - 0
jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/BizWaybillCostDetailsMapper.xml

@@ -233,4 +233,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{waybillDetailId}
         </foreach>
     </delete>
+
+    <select id="selectBizWaybillCostDetailsSum" parameterType="BizWaybillCostDetails" resultType="java.math.BigDecimal">
+        select coalesce(sum(coalesce(adjust_amount, rate_amount)), 0)
+        from biz_waybill_cost_details bwcd
+        left join sys_user u on bwcd.user_id = u.user_id
+        left join sys_dept d on bwcd.dept_id = d.dept_id
+        <where>
+            <!-- 数据范围过滤 -->
+            ${params.dataScope}
+        </where>
+    </select>
 </mapper>

+ 35 - 0
jd-logistics-modules/jd-logistics-system/src/main/resources/mapper/logistics/BizWaybillOrderMapper.xml

@@ -341,6 +341,41 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where external_waybill_no = #{externalWaybillNo}
     </update>
 
+    <select id="selectTotalOrdersByOrderType" parameterType="BizWaybillOrder" resultType="com.ruoyi.logistics.domain.dto.OrderStatisticsDto">
+        SELECT
+            COALESCE(SUM(CASE WHEN bwo.order_type = 1 THEN 1 ELSE 0 END), 0) AS jdOrderCount,
+            COALESCE(SUM(CASE WHEN bwo.order_type = 2 THEN 1 ELSE 0 END), 0) AS sfOrderCount,
+            COALESCE(COUNT(1), 0) AS totalOrderCount
+        FROM biz_waybill_order bwo
+        left join sys_user u on bwo.user_id = u.user_id
+        left join sys_dept d on bwo.dept_id = d.dept_id
+        <where>
+            bwo.del_flag = '0'
+            AND bwo.order_status != 6  <!-- 排除已取消的订单 -->
+            <!-- 数据范围过滤 -->
+            ${params.dataScope}
+        </where>
+    </select>
+
+    <select id="selectLast7DaysOrderStatisticsByDateRange" resultType="com.ruoyi.logistics.domain.dto.DailyOrderStatisticsDto" parameterType="map">
+        SELECT
+            DATE(bwo.create_time) AS statisticsDate,
+            COALESCE(SUM(CASE WHEN bwo.order_type = 1 THEN 1 ELSE 0 END), 0) AS jdOrderCount,
+            COALESCE(SUM(CASE WHEN bwo.order_type = 2 THEN 1 ELSE 0 END), 0) AS sfOrderCount,
+            COALESCE(COUNT(1), 0) AS totalOrderCount
+        FROM biz_waybill_order bwo
+        left join sys_user u on bwo.user_id = u.user_id
+        left join sys_dept d on bwo.dept_id = d.dept_id
+        <where>
+            bwo.del_flag = '0'
+            AND bwo.order_status != 6  <!-- 排除已取消的订单 -->
+            AND DATE(bwo.create_time) BETWEEN #{startDate} AND #{endDate}
+            <!-- 数据范围过滤 -->
+            ${params.dataScope}
+        </where>
+        GROUP BY DATE(bwo.create_time)
+        ORDER BY DATE(bwo.create_time) ASC
+    </select>
 
     <update id="canceleBizWaybillOrder" parameterType="com.ruoyi.logistics.domain.BizWaybillOrder">
         update biz_waybill_order