Browse Source

新增u店订单统计接口

zhangchen 1 week ago
parent
commit
d4fe41b561

+ 36 - 2
alien-entity/src/main/java/shop/alien/mapper/LifeUserOrderMapper.java

@@ -164,11 +164,45 @@ public interface LifeUserOrderMapper extends BaseMapper<LifeUserOrder> {
             "LEFT JOIN life_discount_coupon_user ldcu ON ldcu.id = luo.quan_id " +
             "LEFT JOIN life_discount_coupon ldc ON ldc.id = ldcu.coupon_id " +
             "${ew.customSqlSegment} " +
-            "AND ocm.status IS NOT NULL " +
-            "GROUP BY luo.status")
+            "GROUP BY ocm.status")
     List<Map<String, Object>> countOrdersByStatus(@Param(Constants.WRAPPER) QueryWrapper<LifeUserOrderVo> queryWrapper);
 
     /**
+     * 统计全部订单数量
+     * <p>
+     * 统计符合条件的全部订单数量,不区分状态
+     * </p>
+     *
+     * @param queryWrapper 查询条件包装器
+     * @return 全部订单数量
+     */
+    @Select("WITH total_coupon AS (\n" +
+            "    -- 团购\n" +
+            "    SELECT id coupon_id, 2 coupon_type, lgbm.group_name coupon_name, " +
+            "           SUBSTRING_INDEX(image_id, ',', 1) AS image_id, " +
+            "           effective_date_type, effective_date_value \n" +
+            "    FROM life_group_buy_main lgbm \n" +
+            "    UNION ALL\n" +
+            "    -- 代金券\n" +
+            "    SELECT id coupon_id, 1 coupon_type, lc.name coupon_name, " +
+            "           SUBSTRING_INDEX(image_path, ',', 1) AS image_id, " +
+            "           0 effective_date_type, expiration_date effective_date_value \n" +
+            "    FROM life_coupon lc \n" +
+            ")\n" +
+            "SELECT COUNT(DISTINCT luo.id) AS totalOrderCount " +
+            "FROM life_user_order luo " +
+            "LEFT JOIN store_info si ON si.id = luo.store_id " +
+            "LEFT JOIN life_user lu ON lu.id = luo.user_id AND lu.delete_flag = 0 " +
+            "LEFT JOIN order_coupon_middle ocm ON ocm.order_id = luo.id " +
+            "LEFT JOIN total_coupon tc ON tc.coupon_id = ocm.coupon_id AND tc.coupon_type = luo.coupon_type " +
+            "LEFT JOIN store_img simg ON simg.id = tc.image_id AND simg.delete_flag = 0 " +
+            "LEFT JOIN store_comment sc ON sc.business_id = luo.id AND sc.delete_flag = 0 AND sc.business_type = 5 " +
+            "LEFT JOIN life_discount_coupon_user ldcu ON ldcu.id = luo.quan_id " +
+            "LEFT JOIN life_discount_coupon ldc ON ldc.id = ldcu.coupon_id " +
+            "${ew.customSqlSegment}")
+    Long countTotalOrders(@Param(Constants.WRAPPER) QueryWrapper<LifeUserOrderVo> queryWrapper);
+
+    /**
      * 查询过期退款订单
      * @param selectWrapper
      * @return

+ 1 - 1
alien-lawyer/src/main/java/shop/alien/lawyer/service/impl/LawyerConsultationOrderServiceImpl.java

@@ -670,7 +670,7 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
         resultMap.put("lawyerCompleteOrderCount", completeCount);
         resultMap.put("lawyerCancelStatusOrderCount", cancelStatusCount);
         resultMap.put("lawyerRefundedStatusOrderCount", refundedStatusCount);
-        resultMap.put("lawyerOrderCount", totalOrderCount);
+        resultMap.put("total", totalOrderCount);
 
         // 设置订单列表
         List<LawyerConsultationOrderVO> orderList = (voPage != null && voPage.getRecords() != null)

+ 1 - 2
alien-store/src/main/java/shop/alien/store/controller/LifeUserOrderController.java

@@ -10,7 +10,6 @@ import org.springframework.web.bind.annotation.*;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.LifeRefundOrder;
 import shop.alien.entity.store.dto.LifeUserOrderDto;
-import shop.alien.entity.store.vo.LifeUserOrderListWithStatisticsVO;
 import shop.alien.entity.store.vo.LifeUserOrderVo;
 import shop.alien.store.service.LifeUserOrderService;
 
@@ -156,7 +155,7 @@ public class LifeUserOrderController {
             @ApiImplicitParam(name = "name", value = "订单名称", required = false)
     })
     @GetMapping("/queryUserOrderListWithStatistics")
-    public R<LifeUserOrderListWithStatisticsVO> queryUserOrderListWithStatistics(
+    public R<Map<String, Object>> queryUserOrderListWithStatistics(
             @RequestParam(value = "page", defaultValue = "1") Integer page,
             @RequestParam(value = "size", defaultValue = "10") Integer size,
             @RequestParam(required = false) String userId,

+ 89 - 42
alien-store/src/main/java/shop/alien/store/service/LifeUserOrderService.java

@@ -19,7 +19,6 @@ import shop.alien.entity.store.*;
 import shop.alien.entity.store.dto.LifeUserOrderDto;
 import shop.alien.entity.store.excelVo.LifeUserOrderExcelVo;
 import shop.alien.entity.store.excelVo.util.ExcelGenerator;
-import shop.alien.entity.store.vo.LifeUserOrderListWithStatisticsVO;
 import shop.alien.entity.store.vo.LifeUserOrderVo;
 import shop.alien.entity.store.vo.StoreInfoVo;
 import shop.alien.entity.store.vo.WebSocketVo;
@@ -1038,6 +1037,56 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
     private static final String TIME_END_SUFFIX = " 23:59:59";
 
     /**
+     * Map key:订单列表
+     */
+    private static final String KEY_ORDER_LIST = "orderList";
+
+    /**
+     * Map key:待支付订单数量
+     */
+    private static final String KEY_WAIT_PAY_COUNT = "waitPayCount";
+
+    /**
+     * Map key:已支付/待使用订单数量
+     */
+    private static final String KEY_WAIT_USE_COUNT = "waitUseCount";
+
+    /**
+     * Map key:已核销订单数量
+     */
+    private static final String KEY_USED_COUNT = "usedCount";
+
+    /**
+     * Map key:已过期订单数量
+     */
+    private static final String KEY_EXPIRE_COUNT = "expireCount";
+
+    /**
+     * Map key:已取消订单数量
+     */
+    private static final String KEY_CANCEL_COUNT = "cancelCount";
+
+    /**
+     * Map key:已退款订单数量
+     */
+    private static final String KEY_REFUND_COUNT = "refundCount";
+
+    /**
+     * Map key:退款失败订单数量
+     */
+    private static final String KEY_REFUND_FAILED_COUNT = "refundFailedCount";
+
+    /**
+     * Map key:已完成订单数量
+     */
+    private static final String KEY_COMPLETE_COUNT = "completeCount";
+
+    /**
+     * Map key:全部订单数量
+     */
+    private static final String KEY_TOTAL_ORDER_COUNT = "total";
+
+    /**
      * 查询用户订单列表(包含各状态订单数量统计)
      *
      * @param page        页码
@@ -1049,9 +1098,9 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
      * @param name        订单名称
      * @param startTime   开始时间
      * @param endTime     结束时间
-     * @return 订单列表及统计信息
+     * @return 订单列表及统计信息Map
      */
-    public LifeUserOrderListWithStatisticsVO queryUserOrderListWithStatistics(
+    public Map<String, Object> queryUserOrderListWithStatistics(
             Integer page, Integer size, String userId, String storeId, String couponType,
             String orderStatus, String name, String startTime, String endTime) {
         // 查询订单列表
@@ -1065,15 +1114,29 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
         // 统计各状态订单数量
         List<Map<String, Object>> statusCountList = lifeUserOrderMapper.countOrdersByStatus(statisticsQueryWrapper);
 
-        // 构建返回结果
-        LifeUserOrderListWithStatisticsVO result = new LifeUserOrderListWithStatisticsVO();
-        result.setOrderList(orderList);
+        // 统计全部订单数量
+        Long totalOrderCount = lifeUserOrderMapper.countTotalOrders(statisticsQueryWrapper);
+        if (totalOrderCount == null) {
+            totalOrderCount = DEFAULT_ORDER_COUNT;
+        }
+
+        // 构建返回结果Map
+        Map<String, Object> result = new HashMap<>(16);
+        result.put(KEY_ORDER_LIST, orderList.getRecords());
+        result.put(KEY_TOTAL_ORDER_COUNT, totalOrderCount);
 
         // 初始化各状态订单数量
-        initializeStatusCounts(result);
+        result.put(KEY_WAIT_PAY_COUNT, DEFAULT_ORDER_COUNT);
+        result.put(KEY_WAIT_USE_COUNT, DEFAULT_ORDER_COUNT);
+        result.put(KEY_USED_COUNT, DEFAULT_ORDER_COUNT);
+        result.put(KEY_EXPIRE_COUNT, DEFAULT_ORDER_COUNT);
+        result.put(KEY_CANCEL_COUNT, DEFAULT_ORDER_COUNT);
+        result.put(KEY_REFUND_COUNT, DEFAULT_ORDER_COUNT);
+        result.put(KEY_REFUND_FAILED_COUNT, DEFAULT_ORDER_COUNT);
+        result.put(KEY_COMPLETE_COUNT, DEFAULT_ORDER_COUNT);
 
         // 填充各状态订单数量
-        fillStatusCounts(result, statusCountList);
+        fillStatusCountsToMap(result, statusCountList);
 
         return result;
     }
@@ -1109,29 +1172,13 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
     }
 
     /**
-     * 初始化各状态订单数量为0
-     *
-     * @param result 结果对象
-     */
-    private void initializeStatusCounts(LifeUserOrderListWithStatisticsVO result) {
-        result.setWaitPayCount(DEFAULT_ORDER_COUNT);
-        result.setWaitUseCount(DEFAULT_ORDER_COUNT);
-        result.setUsedCount(DEFAULT_ORDER_COUNT);
-        result.setExpireCount(DEFAULT_ORDER_COUNT);
-        result.setCancelCount(DEFAULT_ORDER_COUNT);
-        result.setRefundCount(DEFAULT_ORDER_COUNT);
-        result.setRefundFailedCount(DEFAULT_ORDER_COUNT);
-        result.setCompleteCount(DEFAULT_ORDER_COUNT);
-    }
-
-    /**
-     * 填充各状态订单数量
+     * 填充各状态订单数量到Map
      *
-     * @param result          结果对象
+     * @param result         结果Map
      * @param statusCountList 状态统计列表
      */
-    private void fillStatusCounts(LifeUserOrderListWithStatisticsVO result,
-                                   List<Map<String, Object>> statusCountList) {
+    private void fillStatusCountsToMap(Map<String, Object> result,
+                                       List<Map<String, Object>> statusCountList) {
         if (statusCountList == null || statusCountList.isEmpty()) {
             return;
         }
@@ -1140,35 +1187,35 @@ public class LifeUserOrderService extends ServiceImpl<LifeUserOrderMapper, LifeU
             Integer status = getIntegerValue(item.get(KEY_ORDER_STATUS));
             Long count = getLongValue(item.get(KEY_ORDER_COUNT));
             if (status != null && count != null) {
-                setStatusCount(result, status, count);
+                setStatusCountToMap(result, status, count);
             }
         }
     }
 
     /**
-     * 根据订单状态设置对应的数量
+     * 根据订单状态设置对应的数量到Map
      *
-     * @param result  结果对象
-     * @param status  订单状态
-     * @param count   订单数量
+     * @param result 结果Map
+     * @param status 订单状态
+     * @param count  订单数量
      */
-    private void setStatusCount(LifeUserOrderListWithStatisticsVO result, Integer status, Long count) {
+    private void setStatusCountToMap(Map<String, Object> result, Integer status, Long count) {
         if (OrderStatusEnum.WAIT_PAY.getStatus().equals(status)) {
-            result.setWaitPayCount(count);
+            result.put(KEY_WAIT_PAY_COUNT, count);
         } else if (OrderStatusEnum.WAIT_USE.getStatus().equals(status)) {
-            result.setWaitUseCount(count);
+            result.put(KEY_WAIT_USE_COUNT, count);
         } else if (OrderStatusEnum.USED.getStatus().equals(status)) {
-            result.setUsedCount(count);
+            result.put(KEY_USED_COUNT, count);
         } else if (OrderStatusEnum.EXPIRE.getStatus().equals(status)) {
-            result.setExpireCount(count);
+            result.put(KEY_EXPIRE_COUNT, count);
         } else if (OrderStatusEnum.CANCEL.getStatus().equals(status)) {
-            result.setCancelCount(count);
+            result.put(KEY_CANCEL_COUNT, count);
         } else if (OrderStatusEnum.REFUND.getStatus().equals(status)) {
-            result.setRefundCount(count);
+            result.put(KEY_REFUND_COUNT, count);
         } else if (OrderStatusEnum.REFUND_FAILED.getStatus().equals(status)) {
-            result.setRefundFailedCount(count);
+            result.put(KEY_REFUND_FAILED_COUNT, count);
         } else if (OrderStatusEnum.COMPLETE.getStatus().equals(status)) {
-            result.setCompleteCount(count);
+            result.put(KEY_COMPLETE_COUNT, count);
         }
     }