From 9691382d22efb241056177f92cd22040e3224303 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期四, 14 八月 2025 11:21:45 +0800
Subject: [PATCH] no message

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/AsnOrderMapper.java            |   11 +
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/StockTransItemDto.java |   34 +++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java |   74 +++++++++++
 rsf-server/src/main/Test/ChineseMD5Util.java                                                  |   78 +++++++++----
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderService.java          |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/common/utils/DateUtils.java                   |   20 +++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/StockTrandDto.java     |   24 ++++
 rsf-server/src/main/resources/mapper/manager/AsnOrderMapper.xml                               |   31 +++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WkOrderController.java     |   15 ++
 rsf-admin/.env                                                                                |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/DashboardDto.java      |   39 ++++++
 11 files changed, 304 insertions(+), 28 deletions(-)

diff --git a/rsf-admin/.env b/rsf-admin/.env
index f793907..a3c69b2 100644
--- a/rsf-admin/.env
+++ b/rsf-admin/.env
@@ -1,3 +1,3 @@
-VITE_BASE_IP=192.168.4.151
+VITE_BASE_IP=127.0.0.1
 # VITE_BASE_IP=47.76.147.249
 VITE_BASE_PORT=8080
diff --git a/rsf-server/src/main/Test/ChineseMD5Util.java b/rsf-server/src/main/Test/ChineseMD5Util.java
index c73e2d3..0c71353 100644
--- a/rsf-server/src/main/Test/ChineseMD5Util.java
+++ b/rsf-server/src/main/Test/ChineseMD5Util.java
@@ -1,38 +1,68 @@
 import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.time.LocalDate;
+import java.time.YearMonth;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 public class ChineseMD5Util {
 
-    public static List<Integer> getSelectedIndices(int[] arr) {
-        List<Integer> indices = new ArrayList<>();
-        int index = 0;
-        int step = 3;
-        while (index < arr.length) {
-            indices.add(index);
-            index += step;
-            step = (step == 3) ? 1 : 3;
-        }
-        return indices;
-    }
+//    public static List<Integer> getSelectedIndices(int[] arr) {
+//        List<Integer> indices = new ArrayList<>();
+//        int index = 0;
+//        int step = 3;
+//        while (index < arr.length) {
+//            indices.add(index);
+//            index += step;
+//            step = (step == 3) ? 1 : 3;
+//        }
+//        return indices;
+//    }
+//
+//    public static Integer getNextSelectedValue(int[] arr, int inputIndex) {
+//        List<Integer> selectedIndices = getSelectedIndices(arr);
+//        int currentPos = selectedIndices.indexOf(inputIndex);
+//        if (currentPos != -1 && currentPos + 1 < selectedIndices.size()) {
+//            return arr[selectedIndices.get(currentPos + 1)];
+//        }
+//        return null; // 鎴栨寜闇�澶勭悊
+//    }
+//
+//    public static void main(String[] args) {
+//        int[] arr = {2, 5, 8, 10, 15, 20, 25, 30, 35, 40, 45, 50, 15, 40, 32, 48};
+//        System.out.println("杈撳叆 0锛岃緭鍑�: " + getNextSelectedValue(arr, 0)); // 10
+//        System.out.println("杈撳叆 3锛岃緭鍑�: " + getNextSelectedValue(arr, 3)); // 15
+//        System.out.println("杈撳叆 4锛岃緭鍑�: " + getNextSelectedValue(arr, 4)); // 30
+//        System.out.println("杈撳叆 4锛岃緭鍑�: " + getNextSelectedValue(arr, 5)); // 30
+//
+//    }
 
-    public static Integer getNextSelectedValue(int[] arr, int inputIndex) {
-        List<Integer> selectedIndices = getSelectedIndices(arr);
-        int currentPos = selectedIndices.indexOf(inputIndex);
-        if (currentPos != -1 && currentPos + 1 < selectedIndices.size()) {
-            return arr[selectedIndices.get(currentPos + 1)];
-        }
-        return null; // 鎴栨寜闇�澶勭悊
+
+    public static List<String> getFormattedDatesOfPreviousMonth(String pattern) {
+//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
+//        YearMonth previousMonth = YearMonth.now().minusMonths(1);
+//
+//        return IntStream.rangeClosed(1, previousMonth.lengthOfMonth())
+//                .mapToObj(day -> previousMonth.atDay(day).format(formatter))
+//                .collect(Collectors.toList());
+        LocalDate today = LocalDate.now().minusDays(1);
+        LocalDate oneMonthAgo = today.minusMonths(1);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
+        return IntStream.iterate(0, i -> i + 1)
+                .limit(ChronoUnit.DAYS.between(oneMonthAgo, today) + 1)
+                .mapToObj(oneMonthAgo::plusDays)
+                .map(date -> date.format(formatter))
+                .collect(Collectors.toList());
     }
 
     public static void main(String[] args) {
-        int[] arr = {2, 5, 8, 10, 15, 20, 25, 30, 35, 40, 45, 50, 15, 40, 32, 48};
-        System.out.println("杈撳叆 0锛岃緭鍑�: " + getNextSelectedValue(arr, 0)); // 10
-        System.out.println("杈撳叆 3锛岃緭鍑�: " + getNextSelectedValue(arr, 3)); // 15
-        System.out.println("杈撳叆 4锛岃緭鍑�: " + getNextSelectedValue(arr, 4)); // 30
-        System.out.println("杈撳叆 4锛岃緭鍑�: " + getNextSelectedValue(arr, 5)); // 30
-
+        List<String> formattedDates = getFormattedDatesOfPreviousMonth("yyyy-MM-dd");
+        formattedDates.forEach(System.out::println);
     }
+
 }
\ No newline at end of file
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/DateUtils.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/DateUtils.java
index ff3c883..38d4e4d 100755
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/DateUtils.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/DateUtils.java
@@ -6,7 +6,10 @@
 import java.text.SimpleDateFormat;
 import java.time.*;
 import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 /**
  * 鏃ユ湡鏃堕棿宸ュ叿绫�
@@ -232,6 +235,23 @@
     }
 
     /**
+     * 鑾峰彇鍓�30澶╂墍鏈夋棩鏈�
+     * @param pattern
+     * @return
+     */
+    public static List<String> getLastMonthDays(String pattern) {
+        LocalDate today = LocalDate.now().minusDays(1);
+        LocalDate oneMonthAgo = today.minusMonths(1);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
+        return IntStream.iterate(0, i -> i + 1)
+                .limit(ChronoUnit.DAYS.between(oneMonthAgo, today) + 1)
+                .mapToObj(oneMonthAgo::plusDays)
+                .map(date -> date.format(formatter))
+                .collect(Collectors.toList());
+    }
+
+
+    /**
      * 鏃ユ湡鍨嬪瓧绗︿覆杞寲涓烘棩鏈� 鏍煎紡
      * { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm",
      * "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm",
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WkOrderController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WkOrderController.java
index 9be475a..8ed1ab3 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WkOrderController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WkOrderController.java
@@ -60,6 +60,21 @@
         return R.ok().add(asnOrderService.page(pageParam, queryWrapper));
     }
 
+    @ApiOperation("鑾峰彇棣栭〉琛ㄥご鏁版嵁")
+    @PostMapping("/asnOrder/dashbord/header")
+    @PreAuthorize("hasAuthority('manager:asnOrder:list')")
+    public R getDashbord() {
+        return R.ok().add(asnOrderService.getDashbord());
+    }
+
+    @ApiOperation("鑾峰彇鍑哄叆搴撹秼鍔垮浘")
+    @PostMapping("/asnOrder/stock/trand")
+    @PreAuthorize("hasAuthority('manager:asnOrder:list')")
+    public R getStockTrand() {
+        return R.ok().add(asnOrderService.getStockTrand());
+    }
+
+
     @PreAuthorize("hasAuthority('manager:asnOrder:list')")
     @PostMapping("/asnOrder/list")
     public R list(@RequestBody Map<String, Object> map) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/DashboardDto.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/DashboardDto.java
new file mode 100644
index 0000000..029fe5e
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/DashboardDto.java
@@ -0,0 +1,39 @@
+package com.vincent.rsf.server.manager.controller.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModel;
+import lombok.experimental.Accessors;
+import lombok.Data;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "DashboardDto", description = "棣栭〉琛ㄥご鏁版嵁")
+public class DashboardDto {
+
+    @ApiModelProperty("寰呭叆搴撴暟閲�")
+    private Integer inAnf;
+
+    @ApiModelProperty("寰呭嚭搴撴暟閲�")
+    private Integer outAnf;
+
+    @ApiModelProperty("瀹為檯鍏ュ簱鏁伴噺")
+    private Integer taskIn;
+
+    @ApiModelProperty("瀹為檯鍑哄簱鏁伴噺")
+    private Integer taskOut;
+
+    @ApiModelProperty("鎬诲叆搴撴暟閲�")
+    private Integer totalIn;
+
+    @ApiModelProperty("鎬诲嚭搴撴暟閲�")
+    private Integer totalOut;
+
+    @ApiModelProperty("浠诲姟鎵ц鏁伴噺")
+    private Integer taskQty;
+
+    private Integer anfme;
+
+    private Integer realAnfme;
+
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/StockTrandDto.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/StockTrandDto.java
new file mode 100644
index 0000000..417ae00
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/StockTrandDto.java
@@ -0,0 +1,24 @@
+package com.vincent.rsf.server.manager.controller.dto;
+
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.experimental.Accessors;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "StockTrandDto", description = "鍑哄叆搴撹秼鍔垮浘")
+public class StockTrandDto {
+
+    List<StockTransItemDto> trandItem;
+
+    @ApiModelProperty("鏈�澶ф鏁�")
+    Integer maxQty;
+
+    @ApiModelProperty("鏈�澶ф暟閲�")
+    Integer maxAnfme;
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/StockTransItemDto.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/StockTransItemDto.java
new file mode 100644
index 0000000..71b9a99
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/dto/StockTransItemDto.java
@@ -0,0 +1,34 @@
+package com.vincent.rsf.server.manager.controller.dto;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModel;
+import lombok.experimental.Accessors;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@Accessors(chain = true)
+@ApiModel(value = "StockTransItemDto", description = "搴撳瓨瓒嬪娍鍥�")
+public class StockTransItemDto implements Serializable {
+
+    @ApiModelProperty("鍏ュ簱鏁伴噺")
+    private Integer inAnfme;
+
+    @ApiModelProperty("鍑哄簱鏁伴噺")
+    private Integer outAnfme;
+
+    @ApiModelProperty("鍗曟嵁鏃堕棿")
+    private String orderTime;
+
+    @ApiModelProperty("鍏ュ簱鏁伴噺")
+    private Integer inQty;
+
+    @ApiModelProperty("鍑哄簱鏁伴噺")
+    private Integer outQty;
+
+    @ApiModelProperty("浠诲姟绫诲瀷")
+    private Integer taskType;
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/AsnOrderMapper.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/AsnOrderMapper.java
index 26f2ad2..1b0f90e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/AsnOrderMapper.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/mapper/AsnOrderMapper.java
@@ -1,12 +1,23 @@
 package com.vincent.rsf.server.manager.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.vincent.rsf.server.manager.controller.dto.DashboardDto;
+import com.vincent.rsf.server.manager.controller.dto.StockTransItemDto;
+import com.vincent.rsf.server.manager.entity.StockStatistic;
 import com.vincent.rsf.server.manager.entity.WkOrder;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
+
+import java.util.List;
 
 @Mapper
 @Repository
 public interface AsnOrderMapper extends BaseMapper<WkOrder> {
 
+    DashboardDto getDashbord(@Param("type") String type, @Param("taskType") String taskType);
+
+    List<StockTransItemDto> getStockTrand(@Param(Constants.WRAPPER) LambdaQueryWrapper<StockStatistic> queryWrapper);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderService.java
index 641902a..70a771e 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderService.java
@@ -28,4 +28,8 @@
     R  createByPo(Map<String, Object> params);
 
     R removeOrders(List<Long> list);
+
+    R getDashbord();
+
+    R getStockTrand();
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
index 626d2d4..ee6b2e7 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
@@ -9,11 +9,14 @@
 import com.vincent.rsf.server.api.entity.dto.PoItemsDto;
 import com.vincent.rsf.server.api.service.ReceiveMsgService;
 import com.vincent.rsf.server.api.service.ReportMsgService;
+import com.vincent.rsf.server.common.utils.DateUtils;
+import com.vincent.rsf.server.manager.controller.dto.DashboardDto;
+import com.vincent.rsf.server.manager.controller.dto.StockTrandDto;
+import com.vincent.rsf.server.manager.controller.dto.StockTransItemDto;
 import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams;
 import com.vincent.rsf.server.manager.controller.params.BatchUpdateParam;
 import com.vincent.rsf.server.manager.entity.*;
-import com.vincent.rsf.server.manager.enums.AsnExceStatus;
-import com.vincent.rsf.server.manager.enums.POExceStatus;
+import com.vincent.rsf.server.manager.enums.*;
 import com.vincent.rsf.server.manager.mapper.AsnOrderMapper;
 import com.vincent.rsf.server.manager.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -27,6 +30,9 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.text.DateFormat;
+import java.text.ParsePosition;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -59,6 +65,10 @@
     private PurchaseService purchaseService;
     @Autowired
     private PurchaseItemService purchaseItemService;
+    @Autowired
+    private AsnOrderService asnOrderService;
+    @Autowired
+    private TaskService taskService;
 
     @Override
     public boolean notifyInspect(List<WkOrder> orders) {
@@ -392,7 +402,6 @@
             throw new CoolException("浠诲姟涓崟鎹笉鍙垹闄わ紒锛�");
         }
 
-
         if (!asnOrderItemService.remove(new LambdaQueryWrapper<WkOrderItem>()
                 .in(WkOrderItem::getOrderId, ids))) {
 //            throw new CoolException("Details Delete Fail");
@@ -402,6 +411,65 @@
     }
 
     /**
+     * 鑾峰彇棣栭〉琛ㄥご鏁版嵁
+     * @return
+     */
+    @Override
+    public R getDashbord() {
+        DashboardDto dto = new DashboardDto();
+        //鑾峰彇鍏ュ簱鏁伴噺
+        DashboardDto trandDto = this.baseMapper.getDashbord(OrderType.ORDER_IN.type, TaskType.TASK_TYPE_IN.type + "");
+        dto.setInAnf(trandDto.getAnfme()).setTaskIn(trandDto.getRealAnfme()).setTotalIn(trandDto.getAnfme() + trandDto.getRealAnfme());
+
+        //鑾峰彇鍑哄簱鍗曟暟閲�
+        DashboardDto outTrand = this.baseMapper.getDashbord(OrderType.ORDER_OUT.type, TaskType.TASK_TYPE_OUT.type + "");
+        dto.setOutAnf(outTrand.getAnfme()).setTaskOut(outTrand.getRealAnfme()).setTotalOut(outTrand.getAnfme() + outTrand.getRealAnfme());
+
+        //鑾峰彇鎵ц涓换鍔℃暟閲�
+        List<Task> tasks = taskService.list(new LambdaQueryWrapper<>());
+        if (!tasks.isEmpty()) {
+            outTrand.setTaskQty(tasks.size());
+        }
+        return R.ok().add(dto);
+    }
+
+    /**
+     * 鑾峰彇鍑哄叆搴撹秼鍔�
+     * @return
+     */
+    @Override
+    public R getStockTrand() {
+        List<String> days = DateUtils.getLastMonthDays("yyyy-MM-dd");
+        LambdaQueryWrapper<StockStatistic> queryWrapper = new LambdaQueryWrapper<StockStatistic>()
+                .in(StockStatistic::getTaskType, Arrays.asList(TaskType.TASK_TYPE_IN.type, TaskType.TASK_TYPE_OUT.type));
+       List<StockTransItemDto> items = this.baseMapper.getStockTrand(queryWrapper);
+       if (items.isEmpty()) {
+           return R.ok();
+       }
+       List<StockTransItemDto> stockDtos = new ArrayList<>();
+       days.forEach(day -> {
+           StockTransItemDto itemDto = new StockTransItemDto();
+           itemDto.setInQty(0).setOutQty(0).setOutAnfme(0).setOutAnfme(0);
+           items.forEach(item -> {
+               if (item.getOrderTime().equals(day)) {
+                   BeanUtils.copyProperties(item, itemDto);
+               }
+           });
+           itemDto.setOrderTime(day);
+           stockDtos.add(itemDto);
+       });
+
+       //鑾峰彇鏈�澶у��
+        Optional<Integer> max = stockDtos.stream().map(StockTransItemDto::getInQty).filter(Objects::nonNull).max(Comparator.naturalOrder());
+        Optional<Integer> maxOut = stockDtos.stream().map(StockTransItemDto::getOutQty).filter(Objects::nonNull).max(Comparator.naturalOrder());
+        int maxed = Math.max(max.orElse(Integer.MIN_VALUE), maxOut.orElse(Integer.MIN_VALUE));
+
+        StockTrandDto trandDto = new StockTrandDto();
+        trandDto.setMaxQty(maxed).setTrandItem(stockDtos);
+        return R.ok().add(trandDto);
+    }
+
+    /**
      * @param
      * @return
      * @author Ryan
diff --git a/rsf-server/src/main/resources/mapper/manager/AsnOrderMapper.xml b/rsf-server/src/main/resources/mapper/manager/AsnOrderMapper.xml
index fac628a..d839a40 100644
--- a/rsf-server/src/main/resources/mapper/manager/AsnOrderMapper.xml
+++ b/rsf-server/src/main/resources/mapper/manager/AsnOrderMapper.xml
@@ -1,5 +1,36 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.vincent.rsf.server.manager.mapper.AsnOrderMapper">
+    <select id="getDashbord" resultType="com.vincent.rsf.server.manager.controller.dto.DashboardDto">
+        SELECT
+            ( SELECT COUNT( 1 ) FROM man_asn_order WHERE DATE(create_time) = CURRENT_DATE()  AND `type` = #{type} ) AS anfme,
+            COUNT( id ) AS real_anfme
+        FROM
+            man_task_log
+        WHERE
+            DATE(create_time) = CURRENT_DATE()
+          AND task_type = #{taskType}
+    </select>
 
+    <select id="getStockTrand" resultType="com.vincent.rsf.server.manager.controller.dto.StockTransItemDto">
+        SELECT * FROM
+            (
+                SELECT
+                    id,
+                    IF ( task_type = 1, COUNT( 1 ), 0 ) AS in_qty,
+                    IF ( task_type = 1, SUM( anfme ), 0 ) AS in_anfme,
+                    IF ( task_type = 101, SUM( anfme ), 0 ) AS out_anfme,
+                    IF ( task_type = 101, COUNT( 1 ), 0 ) AS out_qty,
+                    task_type,
+                    day_time AS order_time
+                FROM
+                    view_stock_statistic
+                WHERE
+                    `day_time` BETWEEN ( CURDATE() - INTERVAL 1 MONTH )
+                        AND CURDATE()
+                GROUP BY
+                    `day_time`, task_type
+            ) t
+        ${ew.customSqlSegment}
+    </select>
 </mapper>

--
Gitblit v1.9.1