From cdb32d015012f973baa148d9b9e400ccfe966b52 Mon Sep 17 00:00:00 2001
From: jay <jay7417988@163.com>
Date: Mon, 9 Oct 2023 18:53:36 +0800
Subject: [PATCH] 修改代码

---
 pz-admin/src/main/java/com/pz/web/controller/system/DataViewController.java   | 15 +++++++++------
 pz-common/src/main/java/com/pz/common/utils/DateUtils.java                    | 36 +++++++++++++++++++++++++++++++++++-
 pz-system/src/main/java/com/pz/system/domain/bo/OrderColumnarBo.java          | 25 +++++++++++++++++++++++++
 pz-system/src/main/java/com/pz/system/domain/bo/YypzOrderBo.java              |  2 +-
 pz-system/src/main/java/com/pz/system/domain/vo/OrderColumnarVo.java          |  5 ++++-
 pz-system/src/main/java/com/pz/system/domain/vo/OrderLineVo.java              | 13 +++++++++++++
 pz-system/src/main/java/com/pz/system/mapper/TotalOrderMapper.java            |  2 +-
 pz-system/src/main/java/com/pz/system/service/ITotalOrderService.java         | 12 ++++++++++++
 pz-system/src/main/java/com/pz/system/service/impl/TotalOrderServiceImpl.java | 39 +++++++++++++++++++++++++++++++++++++++
 pz-system/src/main/resources/mapper/system/TotalOrderMapper.xml               |  5 ++++-
 pz-system/src/main/resources/mapper/system/YypzOrderMapper.xml                | 12 +++++++++---
 11 files changed, 152 insertions(+), 14 deletions(-)
 create mode 100644 pz-system/src/main/java/com/pz/system/domain/bo/OrderColumnarBo.java
 create mode 100644 pz-system/src/main/java/com/pz/system/domain/vo/OrderLineVo.java

diff --git a/pz-admin/src/main/java/com/pz/web/controller/system/DataViewController.java b/pz-admin/src/main/java/com/pz/web/controller/system/DataViewController.java
index 554f24f..397de6e 100644
--- a/pz-admin/src/main/java/com/pz/web/controller/system/DataViewController.java
+++ b/pz-admin/src/main/java/com/pz/web/controller/system/DataViewController.java
@@ -8,8 +8,10 @@ import com.pz.common.core.domain.PageQuery;
 import com.pz.common.core.domain.R;
 import com.pz.common.core.page.TableDataInfo;
 import com.pz.system.domain.bo.DbghOrderBo;
+import com.pz.system.domain.bo.OrderColumnarBo;
 import com.pz.system.domain.vo.DbghOrderVo;
 import com.pz.system.domain.vo.OrderColumnarVo;
+import com.pz.system.domain.vo.OrderLineVo;
 import com.pz.system.mapper.TotalOrderMapper;
 import com.pz.common.core.domain.R;
 import com.pz.merchant.service.ICompanyService;
@@ -21,6 +23,7 @@ import com.pz.system.domain.vo.DbghOrderVo;
 import com.pz.system.service.IStoreApplyService;
 import com.pz.system.service.ISysUserService;
 import com.pz.system.service.ITotalOrderService;
+import com.pz.system.service.ITotalOrderService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -32,6 +35,7 @@ import javax.validation.constraints.NotNull;
 
 import javax.validation.constraints.NotEmpty;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 数据总览
@@ -44,6 +48,7 @@ import java.util.List;
 @RestController
 @RequestMapping("/system/data")
 public class DataViewController extends BaseController {
+    private final ITotalOrderService iTotalOrderService;
 
     private final ISysUserService iSysUserService;
 
@@ -53,8 +58,6 @@ public class DataViewController extends BaseController {
 
     private final IStoreApplyService iStoreApplyService;
 
-    private final ITotalOrderService iTotalOrderService;
-
     /**
      * 新增用户统计
      */
@@ -126,9 +129,9 @@ public class DataViewController extends BaseController {
     /**
      * 数据总览柱状图
      */
-    @GetMapping("/findOrderColumnarVoList/{type}")
-    public R<List<OrderColumnarVo>> findOrderColumnarVoList(
-        @PathVariable Integer type) {
-        return R.ok(totalOrderMapper.findOrderColumnarVoList(type));
+    @GetMapping("/findOrderColumnarVoList")
+    public R<List<OrderLineVo>> findOrderColumnarVoList(
+        OrderColumnarBo bo) {
+        return R.ok(iTotalOrderService.findOrderColumnarVoList(bo));
     }
 }
diff --git a/pz-common/src/main/java/com/pz/common/utils/DateUtils.java b/pz-common/src/main/java/com/pz/common/utils/DateUtils.java
index 4a6d4e7..3ab22fb 100644
--- a/pz-common/src/main/java/com/pz/common/utils/DateUtils.java
+++ b/pz-common/src/main/java/com/pz/common/utils/DateUtils.java
@@ -16,7 +16,9 @@ import java.time.LocalTime;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
 
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 时间工具类
@@ -87,6 +89,37 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         }
     }
 
+    public static List<String> getRecentDates(int days) {
+        List<String> recentDates = new ArrayList<>();
+        LocalDate currentDate = LocalDate.now();
+        java.time.format.DateTimeFormatter formatter = java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd");
+
+        for (int i = 0; i < days; i++) {
+            String date = currentDate.format(formatter);
+            recentDates.add(date);
+            currentDate = currentDate.minusDays(1);
+        }
+        // 添加当天日期
+        recentDates.add(currentDate.format(formatter));
+        return recentDates;
+    }
+
+    public static List<String> getDateRange(String startDateStr, String endDateStr) {
+        List<String> dateList = new ArrayList<>();
+        LocalDate startDate = LocalDate.parse(startDateStr);
+        LocalDate endDate = LocalDate.parse(endDateStr);
+        LocalDate currentDate = startDate;
+        java.time.format.DateTimeFormatter formatter = java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd");
+
+        while (!currentDate.isAfter(endDate)) {
+            dateList.add(currentDate.format(formatter));
+            currentDate = currentDate.plusDays(1);
+        }
+
+        return dateList;
+    }
+
+
     /**
      * 日期路径 即年/月/日 如2018/08/08
      */
@@ -97,11 +130,12 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
 
     /**
      * 字符串转换成日期
+     *
      * @param strDate 日期字符串
      * @param pattern 日期的格式,如:DateUtils.DATE_TIME_PATTERN
      */
     public static Date stringToDate(String strDate, String pattern) {
-        if (StringUtils.isBlank(strDate)){
+        if (StringUtils.isBlank(strDate)) {
             return null;
         }
 
diff --git a/pz-system/src/main/java/com/pz/system/domain/bo/OrderColumnarBo.java b/pz-system/src/main/java/com/pz/system/domain/bo/OrderColumnarBo.java
new file mode 100644
index 0000000..3bc8014
--- /dev/null
+++ b/pz-system/src/main/java/com/pz/system/domain/bo/OrderColumnarBo.java
@@ -0,0 +1,25 @@
+package com.pz.system.domain.bo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class OrderColumnarBo implements Serializable {
+    /**
+     * 0:近七天,1:近三十天,2:自定义
+     */
+    private Integer type;
+
+    private String time;
+
+    /**
+     * 自定义开始时间
+     */
+    private String startTime;
+
+    /**
+     * 自定义结束时间
+     */
+    private String endTime;
+}
diff --git a/pz-system/src/main/java/com/pz/system/domain/bo/YypzOrderBo.java b/pz-system/src/main/java/com/pz/system/domain/bo/YypzOrderBo.java
index 94f4344..9d71187 100644
--- a/pz-system/src/main/java/com/pz/system/domain/bo/YypzOrderBo.java
+++ b/pz-system/src/main/java/com/pz/system/domain/bo/YypzOrderBo.java
@@ -79,5 +79,5 @@ public class YypzOrderBo extends BaseEntity {
      */
     private String remark;
 
-
+    private Long userId;
 }
diff --git a/pz-system/src/main/java/com/pz/system/domain/vo/OrderColumnarVo.java b/pz-system/src/main/java/com/pz/system/domain/vo/OrderColumnarVo.java
index 6436e19..2644847 100644
--- a/pz-system/src/main/java/com/pz/system/domain/vo/OrderColumnarVo.java
+++ b/pz-system/src/main/java/com/pz/system/domain/vo/OrderColumnarVo.java
@@ -11,7 +11,10 @@ public class OrderColumnarVo implements Serializable {
      * 业务名称
      */
     private String name;
-
+    /**
+     * 日期
+     */
+    private String time;
     /**
      * 数量
      */
diff --git a/pz-system/src/main/java/com/pz/system/domain/vo/OrderLineVo.java b/pz-system/src/main/java/com/pz/system/domain/vo/OrderLineVo.java
new file mode 100644
index 0000000..52660ed
--- /dev/null
+++ b/pz-system/src/main/java/com/pz/system/domain/vo/OrderLineVo.java
@@ -0,0 +1,13 @@
+package com.pz.system.domain.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class OrderLineVo implements Serializable {
+    private String key;
+
+    private List<OrderColumnarVo> list;
+}
diff --git a/pz-system/src/main/java/com/pz/system/mapper/TotalOrderMapper.java b/pz-system/src/main/java/com/pz/system/mapper/TotalOrderMapper.java
index 4dbb1e4..b87a4f3 100644
--- a/pz-system/src/main/java/com/pz/system/mapper/TotalOrderMapper.java
+++ b/pz-system/src/main/java/com/pz/system/mapper/TotalOrderMapper.java
@@ -71,5 +71,5 @@ public interface TotalOrderMapper extends BaseMapperPlus<TotalOrderMapper, Total
      * @param type
      * @return
      */
-    List<OrderColumnarVo> findOrderColumnarVoList(@Param("type") Integer type);
+    List<OrderColumnarVo> findOrderColumnarVoList(@Param("time") String time);
 }
diff --git a/pz-system/src/main/java/com/pz/system/service/ITotalOrderService.java b/pz-system/src/main/java/com/pz/system/service/ITotalOrderService.java
index 75506fd..780ee32 100644
--- a/pz-system/src/main/java/com/pz/system/service/ITotalOrderService.java
+++ b/pz-system/src/main/java/com/pz/system/service/ITotalOrderService.java
@@ -6,17 +6,22 @@ import com.pz.common.core.domain.R;
 import com.pz.system.domain.TotalOrder;
 import com.pz.system.domain.bo.CreateOrderBo;
 import com.pz.system.domain.bo.DataViewBo;
+import com.pz.system.domain.bo.OrderColumnarBo;
 import com.pz.system.domain.vo.AccompanyDemandVo;
 import com.pz.system.domain.vo.DataOrderVo;
 import com.pz.system.domain.vo.DataViewVo;
+import com.pz.system.domain.vo.OrderColumnarVo;
+import com.pz.system.domain.vo.OrderLineVo;
 import com.pz.system.domain.vo.TotalOrderVo;
 import com.pz.system.domain.bo.TotalOrderBo;
 import com.pz.common.core.page.TableDataInfo;
 import com.pz.common.core.domain.PageQuery;
+import org.apache.ibatis.annotations.Param;
 
 import javax.validation.constraints.NotNull;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 总订单Service接口
@@ -165,4 +170,11 @@ public interface ITotalOrderService {
      * 订单量
      */
     DataOrderVo orderQuantity(DataViewBo dataViewBo);
+
+    /**
+     * 数据总览
+     * @param bo
+     * @return
+     */
+    List<OrderLineVo> findOrderColumnarVoList(OrderColumnarBo bo);
 }
diff --git a/pz-system/src/main/java/com/pz/system/service/impl/TotalOrderServiceImpl.java b/pz-system/src/main/java/com/pz/system/service/impl/TotalOrderServiceImpl.java
index e13a703..a594c07 100644
--- a/pz-system/src/main/java/com/pz/system/service/impl/TotalOrderServiceImpl.java
+++ b/pz-system/src/main/java/com/pz/system/service/impl/TotalOrderServiceImpl.java
@@ -22,6 +22,7 @@ import com.pz.common.enums.CommonOrderStatus;
 import com.pz.common.enums.TotalOrderStatus;
 import com.pz.common.exception.ServiceException;
 import com.pz.common.helper.LoginHelper;
+import com.pz.common.utils.DateUtils;
 import com.pz.common.utils.HttpUtils;
 import com.pz.common.utils.JsonUtils;
 import com.pz.merchant.domain.Company;
@@ -38,6 +39,7 @@ import com.pz.system.datastructure.OrderDelayQueue;
 import com.pz.system.datastructure.TotalOrderDelayOperator;
 import com.pz.system.domain.*;
 import com.pz.system.domain.bo.CreateOrderBo;
+import com.pz.system.domain.bo.OrderColumnarBo;
 import com.pz.system.domain.bo.DataViewBo;
 import com.pz.system.domain.bo.TotalOrderBo;
 import com.pz.system.domain.vo.*;
@@ -60,6 +62,7 @@ import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeFormatterBuilder;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 /**
  * 总订单Service业务层处理
@@ -1237,6 +1240,42 @@ public class TotalOrderServiceImpl implements ITotalOrderService {
 
     }
 
+    @Override
+    public List<OrderLineVo> findOrderColumnarVoList(OrderColumnarBo bo) {
+        List<OrderLineVo> list = new ArrayList<>();
+        List<String> recentDates;
+        switch (bo.getType()) {
+            case 1:
+                recentDates = DateUtils.getRecentDates(7);
+                break;
+            case 2:
+                recentDates = DateUtils.getRecentDates(30);
+                break;
+            case 3:
+                recentDates = DateUtils.getDateRange(bo.getStartTime(), bo.getEndTime());
+                break;
+            default:
+                return list;
+        }
+        // 使用一个 Map 来缓存已经查询过的订单列列表
+        Map<String, List<OrderColumnarVo>> orderMap = new HashMap<>();
+        for (String time : recentDates) {
+            List<OrderColumnarVo> orderColumnarVoList = orderMap.get(time);
+            if (orderColumnarVoList == null) {
+                orderColumnarVoList = baseMapper.findOrderColumnarVoList(time);
+                orderMap.put(time, orderColumnarVoList);
+            }
+            OrderLineVo orderLineVo = new OrderLineVo();
+            orderLineVo.setKey(time);
+            orderLineVo.setList(orderColumnarVoList);
+            list.add(orderLineVo);
+        }
+
+        return list.stream()
+            .sorted(Comparator.comparing(OrderLineVo::getKey))
+            .collect(Collectors.toList());
+    }
+
     public String getOrderSn() {
         long timestamp = System.currentTimeMillis();
         String timestampStr = Long.toString(timestamp);
diff --git a/pz-system/src/main/resources/mapper/system/TotalOrderMapper.xml b/pz-system/src/main/resources/mapper/system/TotalOrderMapper.xml
index 1705359..0463f35 100644
--- a/pz-system/src/main/resources/mapper/system/TotalOrderMapper.xml
+++ b/pz-system/src/main/resources/mapper/system/TotalOrderMapper.xml
@@ -121,8 +121,11 @@
         where total_order.id = #{id}
     </select>
     <select id="findOrderColumnarVoList" resultType="com.pz.system.domain.vo.OrderColumnarVo">
-        SELECT b.`name` name, COUNT(t.business_id) AS num
+        SELECT b.`name` name,DATE (#{time}) AS time, COUNT(t.business_id) AS num
         FROM business b
+                 LEFT JOIN total_order t ON t.business_id = b.id
+            AND t.`status` = 2
+            AND DATE (t.create_time) = DATE (#{time})
         LEFT JOIN total_order t ON t.business_id = b.id
         AND t.`status` = 2
         <if test="type == 1">
diff --git a/pz-system/src/main/resources/mapper/system/YypzOrderMapper.xml b/pz-system/src/main/resources/mapper/system/YypzOrderMapper.xml
index b1849e8..8a4829f 100644
--- a/pz-system/src/main/resources/mapper/system/YypzOrderMapper.xml
+++ b/pz-system/src/main/resources/mapper/system/YypzOrderMapper.xml
@@ -49,9 +49,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                  LEFT JOIN department AS d ON d.id = yyod.did
                  LEFT JOIN services AS s ON s.id = tlo.service_id
                  LEFT JOIN employees AS e ON e.id = tlo.em_id
-        <if test="bo.orderSn != null and bo.orderSn != ''">
-            where tlo.order_sn LIKE CONCAT('%', #{bo.orderSn}, '%')
-        </if>
+                 LEFT JOIN company AS co ON co.id = e.company_id
+        <where>
+            <if test="bo.orderSn != null and bo.orderSn != ''">
+                and tlo.order_sn LIKE CONCAT('%', #{bo.orderSn}, '%')
+            </if>
+            <if test="bo.userId != null">
+                and co.uid = #{bo.userId}
+            </if>
+        </where>
     </select>
 
     <select id="selectSonOrderInfoByTotalId" resultType="com.pz.merchant.domain.vo.SonOrderVo">
--
libgit2 0.26.0