Yangzw пре 7 месеци
родитељ
комит
6896f78e41

+ 2 - 2
feifan-framework/feifan-common/src/main/java/cn/newfeifan/mall/framework/common/pojo/echarts/EChartsResult.java

@@ -44,7 +44,7 @@ public class EChartsResult {
 
     @Data
     public static class Series{
-        private Integer type;
-        private List<Integer> data;
+        private Long money;
+        private Integer count;
     }
 }

+ 4 - 1
feifan-module-mall/feifan-module-product-api/src/main/java/cn/newfeifan/mall/module/product/enums/ErrorCodeConstants.java

@@ -4,7 +4,6 @@ import cn.newfeifan.mall.framework.common.exception.ErrorCode;
 
 /**
  * Product 错误码枚举类
- *
  * product 系统,使用 1-008-000-000 段
  */
 public interface ErrorCodeConstants {
@@ -52,5 +51,9 @@ public interface ErrorCodeConstants {
     // ========== 商品 收藏 1-008-008-000 ==========
     ErrorCode FAVORITE_EXISTS = new ErrorCode(1_008_008_000, "该商品已经被收藏");
     ErrorCode FAVORITE_NOT_EXISTS = new ErrorCode(1_008_008_001, "商品收藏不存在");
+    ErrorCode HIGH_PRECISION_PRICE_NOT_ENOUGH = new ErrorCode(1_008_008_002, "结算价不能大于成本价");
+    ErrorCode SKU_APPLY_NOT_EXISTS = new ErrorCode(1_008_008_003, "sku申请表不存在");
+    ErrorCode SPU_APPLY_NOT_EXISTS = new ErrorCode(1_008_008_004, "spu申请表不存在");
+    ErrorCode SPU_APPLY_LOG_NOT_EXISTS = new ErrorCode(1_008_008_005, "spu申请表日志不存在");
 
 }

+ 7 - 4
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/admin/order/TradeOrderController.java

@@ -6,6 +6,7 @@ import cn.newfeifan.mall.framework.common.pojo.CommonResult;
 import cn.newfeifan.mall.framework.common.pojo.PageParam;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.common.pojo.echarts.EChartsResult;
+import cn.newfeifan.mall.framework.common.util.date.DateUtils;
 import cn.newfeifan.mall.framework.excel.core.util.ExcelUtils;
 import cn.newfeifan.mall.framework.operatelog.core.annotations.OperateLog;
 import cn.newfeifan.mall.module.distri.mq.message.order.CalcMessage;
@@ -45,6 +46,7 @@ import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -54,6 +56,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -409,12 +412,12 @@ public class TradeOrderController {
                 list);
     }
 
-    @GetMapping("/getOrderStatusCount")
-    @Operation(summary = "获得订单状态数量")
+    @GetMapping("/getOrderCountWithMoney")
+    @Operation(summary = "获得对应日期订单数量及金额")
     @PreAuthorize("@ss.hasPermission('trade:order:query')")
-    public CommonResult<EChartsResult> getOrderStatusCount(String selectTime) {
+    public CommonResult<EChartsResult> getOrderCountWithMoney(@DateTimeFormat(pattern = DateUtils.FORMAT_YEAR_MONTH_DAY) LocalDate startTime, @DateTimeFormat(pattern = DateUtils.FORMAT_YEAR_MONTH_DAY) LocalDate endTime) {
 
-        return success(tradeOrderQueryService.getOrderStatusCount(selectTime));
+        return success(tradeOrderQueryService.getOrderCountWithMoney(startTime,endTime));
     }
 
 }

+ 2 - 2
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/dal/mysql/order/TradeOrderMapper.java

@@ -10,7 +10,7 @@ import cn.newfeifan.mall.module.trade.controller.app.order.vo.AppTradeOrderPageR
 import cn.newfeifan.mall.module.trade.dal.dataobject.order.TradeOrderDO;
 import cn.newfeifan.mall.module.trade.enums.order.TradeOrderRefundStatusEnum;
 import cn.newfeifan.mall.module.trade.enums.order.TradeOrderStatusEnum;
-import cn.newfeifan.mall.module.trade.service.order.TradeOrderStatusCount;
+import cn.newfeifan.mall.module.trade.service.order.TradeOrderCountWithMoney;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import org.apache.ibatis.annotations.Mapper;
@@ -217,5 +217,5 @@ public interface TradeOrderMapper extends BaseMapperX<TradeOrderDO> {
         );
     }
 
-    List<TradeOrderStatusCount> selectOrderCountByStatusWithTime(@Param("start") LocalDate start, @Param("end") LocalDate end, @Param("status") Integer status);
+    List<TradeOrderCountWithMoney> selectOrderCountWithTime(@Param("start") LocalDate start, @Param("end") LocalDate end);
 }

+ 14 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderCountWithMoney.java

@@ -0,0 +1,14 @@
+package cn.newfeifan.mall.module.trade.service.order;
+
+import lombok.Data;
+
+/**
+ * 订单状态数量统计
+ */
+
+@Data
+public class TradeOrderCountWithMoney {
+
+    private Integer count;
+    private Long money;
+}

+ 4 - 2
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderQueryService.java

@@ -14,6 +14,7 @@ import cn.newfeifan.mall.module.trade.dal.dataobject.order.TradeOrderDO;
 import cn.newfeifan.mall.module.trade.dal.dataobject.order.TradeOrderItemDO;
 import cn.newfeifan.mall.module.trade.framework.delivery.core.client.dto.ExpressTrackRespDTO;
 
+import java.time.LocalDate;
 import java.util.Collection;
 import java.util.List;
 
@@ -254,8 +255,9 @@ public interface TradeOrderQueryService {
 
     /**
      * 根据选择的时间段获取对应的订单状态数量
-     * @param selectTime 时间段
+     * @param startTime 开始时间段
+     * @param endTime 结束时间段
      * @return 订单状态数量
      */
-    EChartsResult getOrderStatusCount(String selectTime);
+    EChartsResult getOrderCountWithMoney(LocalDate startTime, LocalDate endTime);
 }

+ 14 - 81
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderQueryServiceImpl.java

@@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.common.pojo.echarts.EChartsResult;
+import cn.newfeifan.mall.framework.common.util.object.BeanUtils;
 import cn.newfeifan.mall.module.distri.dal.mysql.ordersettlement.OrderSettlementMapper;
 import cn.newfeifan.mall.module.distri.mq.message.order.DistriOrderMessage;
 import cn.newfeifan.mall.module.distri.mq.message.order.OrderCalcMessage;
@@ -57,13 +58,11 @@ import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import static cn.newfeifan.mall.framework.common.enums.SelectTimeEnum.*;
 import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.newfeifan.mall.framework.common.util.collection.CollectionUtils.convertSet;
 import static cn.newfeifan.mall.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 import static cn.newfeifan.mall.module.trade.enums.ErrorCodeConstants.EXPRESS_NOT_EXISTS;
 import static cn.newfeifan.mall.module.trade.enums.ErrorCodeConstants.ORDER_NOT_FOUND;
-import static cn.newfeifan.mall.module.trade.enums.order.TradeOrderStatusEnum.*;
 
 /**
  * 交易订单【读】 Service 实现类
@@ -361,57 +360,27 @@ public class TradeOrderQueryServiceImpl implements TradeOrderQueryService {
     }
 
     @Override
-    public EChartsResult getOrderStatusCount(String selectTime) {
+    public EChartsResult getOrderCountWithMoney(LocalDate startTime, LocalDate endTime) {
         LocalDate today = LocalDate.now(); // 获取今天的日期
 
-        // 本周
-        if(selectTime.equals(WEEK.getType())){
-            LocalDate weekStart = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); // 获取本周的开始日期
-            LocalDate weekEnd = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); // 获取本周的结束日期
-
-            List<LocalDate> weekDates = generateWeekDates(weekStart, weekEnd); // 生成本周的日期数组
-
-            return EChartsResult.builder()
-                    .xaxis(new EChartsResult.Axis()
-                            .setData(weekDates))
-                    .series(getSeries(weekStart,today))
-                    .build()
-            ;
-        } else if(selectTime.equals(LAST_WEEK.getType())){
-            // 上周
-            LocalDate lastWeekStart = today.minusWeeks(1).with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); // 获取上周的开始日期
-            LocalDate lastWeekEnd = today.minusWeeks(1).with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); // 获取上周的结束日期
-
-            List<LocalDate> weekDates = generateWeekDates(lastWeekStart, lastWeekEnd); // 生成上周的日期数组
-
-            return EChartsResult.builder()
-                    .xaxis(new EChartsResult.Axis()
-                            .setData(weekDates))
-                    .series(getSeries(lastWeekStart,lastWeekEnd))
-                    .build()
-                    ;
-        } else if(selectTime.equals(LAST_MONTH.getType())){
-            // 上月
-            LocalDate lastMonthStart = today.minusMonths(1).with(TemporalAdjusters.firstDayOfMonth()); // 获取上个月的开始日期
-            LocalDate lastMonthEnd = today.minusMonths(1).with(TemporalAdjusters.lastDayOfMonth()); // 获取上个月的结束日期
-
-            List<LocalDate> weekDates = generateWeekDates(lastMonthStart, lastMonthEnd); // 生成上周的日期数组
-            return EChartsResult.builder()
-                    .xaxis(new EChartsResult.Axis()
-                            .setData(weekDates))
-                    .series(getSeries(lastMonthStart,lastMonthEnd))
-                    .build()
-                    ;
+        if (startTime == null && endTime == null) {
+            startTime = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); // 获取本周的开始日期
+            endTime = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); // 获取本周的结束日期
         }
-
-
-        return null;
+        List<LocalDate> weekDates = generateWeekDates(startTime, endTime); // 生成本周的日期数组
+        return EChartsResult.builder()
+                .xaxis(new EChartsResult.Axis()
+                        .setData(weekDates))
+                .series(BeanUtils.toBean(tradeOrderMapper.selectOrderCountWithTime(startTime, endTime), EChartsResult.Series.class))
+                .build()
+                ;
     }
 
     /**
      * 生成指定日期范围内的日期数组
+     *
      * @param start 开始日期
-     * @param end 结束日期
+     * @param end   结束日期
      * @return 日期数组
      */
     private static List<LocalDate> generateWeekDates(LocalDate start, LocalDate end) {
@@ -420,42 +389,6 @@ public class TradeOrderQueryServiceImpl implements TradeOrderQueryService {
                 .collect(Collectors.toList());
     }
 
-    /**
-     * 根据日期范围获取订单状态数量
-     * @param start 开始日期
-     * @param end 结束日期
-     * @param status 状态
-     * @param series 系列列表
-     */
-    private void selectOrderCountByStatusWithTime(LocalDate start, LocalDate end, Integer status, List<EChartsResult.Series> series) {
-        List<TradeOrderStatusCount> counts = tradeOrderMapper.selectOrderCountByStatusWithTime(start, end, status);
-        series.add(new EChartsResult.Series()
-                .setData(counts.stream().map(TradeOrderStatusCount::getOrderCount).collect(Collectors.toList()))
-                .setType(status));
-    }
-
-    /**
-     * 获取系列列表
-     * @param start 开始日期
-     * @param end 结束日期
-     * @return 系列列表
-     */
-    private List<EChartsResult.Series> getSeries(LocalDate start, LocalDate end){
-        List<EChartsResult.Series> series = new ArrayList<>();
-        // 待支付
-        selectOrderCountByStatusWithTime(start,end,UNPAID.getStatus(),series);
-        // 待发货
-        selectOrderCountByStatusWithTime(start,end,UNDELIVERED.getStatus(), series);
-        // 已发货
-        selectOrderCountByStatusWithTime(start,end,DELIVERED.getStatus(), series);
-        // 已完成
-        selectOrderCountByStatusWithTime(start,end,COMPLETED.getStatus(), series);
-        // 已取消
-        selectOrderCountByStatusWithTime(start, end, CANCELED.getStatus(), series);
-
-        return series;
-    }
-
     public static ShopBO getShopBO(StringRedisTemplate stringRedisTemplate, AdminUserMapper userMapper, Logger log) {
         Long loginUserId = getLoginUserId();
         String s = stringRedisTemplate.opsForValue().get("shop:" + loginUserId);

+ 0 - 16
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderStatusCount.java

@@ -1,16 +0,0 @@
-package cn.newfeifan.mall.module.trade.service.order;
-
-import lombok.Data;
-
-import java.time.LocalDate;
-
-/**
- * 订单状态数量统计
- */
-
-@Data
-public class TradeOrderStatusCount {
-
-    private LocalDate orderDate;
-    private Integer orderCount;
-}

+ 12 - 11
feifan-module-mall/feifan-module-trade-biz/src/main/resources/mapper/order/BrokerageUserMapper.xml

@@ -85,22 +85,23 @@
           and DATE(tor.create_time) &lt; CURDATE()
 --           and DATE(tor.create_time) = '2024-06-20'
     </select>
-    <select id="selectOrderCountByStatusWithTime"
-            resultType="cn.newfeifan.mall.module.trade.service.order.TradeOrderStatusCount">
-        WITH RECURSIVE dates AS (
+    <select id="selectOrderCountWithTime"
+            resultType="cn.newfeifan.mall.module.trade.service.order.TradeOrderCountWithMoney">
+        WITH RECURSIVE date_series AS (
         SELECT #{start} AS date_val
         UNION ALL
         SELECT DATE_ADD(date_val, INTERVAL 1 DAY)
-        FROM dates
+        FROM date_series
         WHERE date_val &lt; #{end}
         )
         SELECT
-        dates.date_val AS orderDate,
-        COUNT(trade_order.id) AS orderCount
-        FROM dates
-        LEFT JOIN trade_order ON DATE(trade_order.create_time) = dates.date_val
-        and trade_order.status = #{status}
-        GROUP BY dates.date_val
-        ORDER BY dates.date_val;
+        ds.date_val AS order_date,
+        COUNT(o.id) AS count,
+        IFNULL(SUM(o.pay_rmb) + (SUM(o.pay_integral) / 10000), 0) AS money
+        FROM date_series ds
+        LEFT JOIN trade_order o ON DATE(o.create_time) = ds.date_val and o.pay_status = 1
+        WHERE ds.date_val BETWEEN #{start} AND #{end}
+        GROUP BY ds.date_val
+        ORDER BY ds.date_val;
     </select>
 </mapper>