Просмотр исходного кода

Merge remote-tracking branch 'origin/dev' into dev

zk 2 лет назад
Родитель
Сommit
ddf740e45b

+ 70 - 4
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/DateUtils.java

@@ -1,11 +1,13 @@
 package com.sckw.core.utils;
 
 import cn.hutool.core.date.DateUtil;
+import com.sckw.core.exception.BusinessException;
 
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.*;
+import java.time.format.DateTimeFormatter;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.Objects;
@@ -607,7 +609,7 @@ public class DateUtils extends DateUtil {
     }
 
     /**
-     * @desc: 获取指定时间的周/月开始时间
+     * @desc: 获取指定时间的1日/2周/3/4年开始时间
      * @author: yzc
      * @date: 2023-09-12 10:20
      * @Param dateType:
@@ -617,15 +619,19 @@ public class DateUtils extends DateUtil {
     public static Date getStartTime(Integer dateType, LocalDateTime time) {
         LocalDateTime startTime;
         if (Objects.equals(dateType, 1)) {
+            startTime = LocalDateTime.of(time.toLocalDate(), LocalTime.MIN);
+        } else if (Objects.equals(dateType, 2)) {
             startTime = LocalDateTime.of(time.toLocalDate().minusDays(6), LocalTime.MIN);
-        } else {
+        } else if (Objects.equals(dateType, 3)) {
             startTime = LocalDateTime.of(time.toLocalDate().minusMonths(1).plusDays(1), LocalTime.MIN);
+        } else {
+            startTime = LocalDateTime.of(time.toLocalDate().minusYears(1).plusDays(1), LocalTime.MIN);
         }
         return formatDate(startTime);
     }
 
     /**
-     * @desc: 获取上周/月结束时间
+     * @desc: 获取上1日/2周/3/4年结束时间
      * @author: yzc
      * @date: 2023-09-12 10:21
      * @Param dateType:
@@ -634,13 +640,49 @@ public class DateUtils extends DateUtil {
     public static Date getLastEndTime(Integer dateType) {
         LocalDateTime endTime;
         if (Objects.equals(dateType, 1)) {
+            endTime = LocalDateTime.of(LocalDate.now().minusDays(1), LocalTime.MAX);
+        } else if (Objects.equals(dateType, 2)) {
             endTime = LocalDateTime.of(LocalDate.now().minusDays(7), LocalTime.MAX);
-        } else {
+        } else if (Objects.equals(dateType, 3)) {
             endTime = LocalDateTime.of(LocalDate.now().minusMonths(1), LocalTime.MAX);
+        } else {
+            endTime = LocalDateTime.of(LocalDate.now().minusYears(1), LocalTime.MAX);
         }
         return formatDate(endTime);
     }
 
+    /**
+     * @desc: 获取当前时间倒推一年开始时间
+     * @author: yzc
+     * @date: 2023-09-13 10:29
+     * @return: java.util.Date
+     */
+    public static Date getYearStartTime() {
+        //当前时间减去11个月
+        LocalDate localDate = LocalDate.now().minusMonths(11);
+        //获取localDate当月第一天
+        LocalDate date = LocalDate.of(localDate.getYear(), localDate.getMonth(), 1);
+        return formatDate(date.atStartOfDay());
+    }
+
+    /**
+     * @desc: 获取日期转换格式
+     * @author: yzc
+     * @date: 2023-09-13 9:32
+     * @Param dateType:  1日/3月/4年
+     * @return: java.lang.String
+     */
+    public static String getDateFormat(Integer dateType) {
+        String dateFormat;
+        switch (dateType) {
+            case 1 -> dateFormat = "%Y-%m-%d";
+            case 3 -> dateFormat = "%Y-%m";
+            case 4 -> dateFormat = "%Y";
+            default -> throw new BusinessException("Invalid dateType");
+        }
+        return dateFormat;
+    }
+
     /**
      * @desc: LocalDateTime转换为Date
      * @author: yzc
@@ -651,4 +693,28 @@ public class DateUtils extends DateUtil {
     public static Date formatDate(LocalDateTime time) {
         return Date.from(time.atZone(ZoneId.systemDefault()).toInstant());
     }
+
+    /**
+     * @desc: date转换为LocalDate
+     * @author: yzc
+     * @date: 2023-09-13 15:14
+     * @Param date:
+     * @return: java.time.LocalDate
+     */
+    public static LocalDate dateToLocalDate(Date date) {
+        return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+    }
+
+    /**
+     * @desc: localDate转换为String
+     * @author: yzc
+     * @date: 2023-09-13 15:21
+     * @Param date:
+     * @Param pattern:
+     * @return: java.lang.String
+     */
+    public static String localDateToString(LocalDate date, String pattern) {
+        DateTimeFormatter fmt = DateTimeFormatter.ofPattern(pattern);
+        return date.format(fmt);
+    }
 }

+ 38 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTradeOrderStatisticsController.java

@@ -0,0 +1,38 @@
+package com.sckw.order.controller;
+
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.order.model.vo.req.WbTOrderExcelStsParam;
+import com.sckw.order.serivce.KwoTradeOrderStatisticsService;
+import lombok.AllArgsConstructor;
+import org.springframework.http.MediaType;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @desc: 订单统计相关接口
+ * @author: yzc
+ * @date: 2023-09-13 8:34
+ */
+@AllArgsConstructor
+@RestController
+@RequestMapping("/kwoTradeOrderStatistics")
+public class KwoTradeOrderStatisticsController {
+
+    private final KwoTradeOrderStatisticsService kwoTradeOrderStatisticsService;
+
+
+    /**
+     * @desc: 工作台贸易订单表格统计
+     * @author: yzc
+     * @date: 2023-09-12 16:38
+     * @Param params:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/workbenchExcel", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult workbenchExcel(@RequestBody @Validated WbTOrderExcelStsParam params) {
+        return HttpResult.ok(kwoTradeOrderStatisticsService.workbenchExcel(params));
+    }
+}

+ 11 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderMapper.java

@@ -3,6 +3,8 @@ package com.sckw.order.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.order.api.model.TradeOrderCountStatisticsDTO;
 import com.sckw.order.model.KwoTradeOrder;
+import com.sckw.order.model.dto.WbTOrderExcelStsReqDTO;
+import com.sckw.order.model.dto.WbTOrderExcelStsResDTO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -34,4 +36,13 @@ public interface KwoTradeOrderMapper extends BaseMapper<KwoTradeOrder> {
      * @return: java.util.List<com.sckw.order.api.model.TradeOrderCountStatisticsDTO>
      */
     List<TradeOrderCountStatisticsDTO> getOrderNumByTopEntId(@Param("topEntId") Long topEntId);
+
+    /**
+     * @desc: 工作台贸易订单表格统计
+     * @author: yzc
+     * @date: 2023-09-13 15:46
+     * @Param item:
+     * @return: java.util.List<com.sckw.order.model.dto.WbTOrderExcelStsResDTO>
+     */
+    List<WbTOrderExcelStsResDTO> workbenchExcel(@Param("item") WbTOrderExcelStsReqDTO item);
 }

+ 55 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/WbTOrderExcelStsReqDTO.java

@@ -0,0 +1,55 @@
+package com.sckw.order.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @desc: 工作台表格统计请求dto
+ * @author: yzc
+ * @date: 2023-09-12 17:32
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class WbTOrderExcelStsReqDTO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 443735882514444569L;
+
+    /**
+     * 分组日期格式函数
+     */
+    private String dateFormat;
+
+    /**
+     * 订单类型(1采购订单、2销售订单)
+     */
+    private String unitType;
+
+    /**
+     * 一级企业id
+     */
+    private Long topEntId;
+
+    /**
+     * 开始时间
+     */
+    private Date startTime;
+
+    /**
+     * 统计因子1
+     */
+    private Integer stsFactorsOne;
+
+    /**
+     * 统计因子2
+     */
+    private Integer stsFactorsTwo;
+
+}

+ 37 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/WbTOrderExcelStsResDTO.java

@@ -0,0 +1,37 @@
+package com.sckw.order.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @desc: 工作台表格统计响应dto
+ * @author: yzc
+ * @date: 2023-09-12 17:32
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class WbTOrderExcelStsResDTO implements Serializable {
+    public WbTOrderExcelStsResDTO() {
+        this.stsFactorsOneValue = BigDecimal.ZERO;
+        this.stsFactorsTwoValue = BigDecimal.ZERO;
+    }
+
+
+    @Serial
+    private static final long serialVersionUID = 2911684774740265571L;
+
+    private String formatDate;
+
+    private BigDecimal stsFactorsOneValue;
+
+    private BigDecimal stsFactorsTwoValue;
+
+}

+ 51 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/WbTOrderExcelStsParam.java

@@ -0,0 +1,51 @@
+package com.sckw.order.model.vo.req;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.hibernate.validator.constraints.Range;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @desc: 工作台贸易订单数据统计请求参数
+ * @author: yzc
+ * @date: 2023-09-11 14:42
+ */
+@Getter
+@Setter
+@ToString
+public class WbTOrderExcelStsParam implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 4503103839537525731L;
+
+
+    /**
+     * 订单类型(1采购订单、2销售订单)
+     */
+    @Range(min = 1, max = 2, message = "非法订单类型")
+    @NotNull(message = "订单类型不能为空")
+    private Integer orderType;
+    /**
+     * 统计因子1
+     */
+    @Range(min = 1, max = 2, message = "非法统计因子")
+    @NotNull(message = "统计因子不能为空")
+    private Integer stsFactorsOne;
+
+    /**
+     * 统计因子2
+     */
+    @Range(min = 1, max = 2, message = "非法统计因子")
+    @NotNull(message = "统计因子不能为空")
+    private Integer stsFactorsTwo;
+    /**
+     * 统计日期类型(1日、3月)
+     */
+    @Range(min = 1, max = 3, message = "非法日期类型")
+    @NotNull(message = "日期类型不能为空")
+    private Integer dateType;
+
+}

+ 36 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/WbTOrderExcelStsResVO.java

@@ -0,0 +1,36 @@
+package com.sckw.order.model.vo.res;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @desc: 工作台表格统计响应vo
+ * @author: yzc
+ * @date: 2023-09-13 14:55
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class WbTOrderExcelStsResVO implements Serializable {
+    public WbTOrderExcelStsResVO() {
+        this.stsFactorsOneValue = BigDecimal.ZERO;
+        this.stsFactorsTwoValue = BigDecimal.ZERO;
+    }
+
+    @Serial
+    private static final long serialVersionUID = 5199453430808720945L;
+
+    private String formatDate;
+
+    private BigDecimal stsFactorsOneValue;
+
+    private BigDecimal stsFactorsTwoValue;
+
+}

+ 16 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -25,6 +25,8 @@ import com.sckw.order.api.model.TradeOrderCountStatisticsDTO;
 import com.sckw.order.dao.KwoTradeOrderMapper;
 import com.sckw.order.model.*;
 import com.sckw.order.model.dto.OrderCheckDTO;
+import com.sckw.order.model.dto.WbTOrderExcelStsReqDTO;
+import com.sckw.order.model.dto.WbTOrderExcelStsResDTO;
 import com.sckw.order.model.vo.req.*;
 import com.sckw.order.model.vo.res.*;
 import com.sckw.payment.api.dubbo.PayCenterDubboService;
@@ -885,7 +887,7 @@ public class KwoTradeOrderService {
         }
         kwoTradeOrderMapper.updateById(order);
         //更新商品价格
-        kwoTradeOrderGoodsService.updateUnitPrice(param.getId(),param.getUnitPrice());
+        kwoTradeOrderGoodsService.updateUnitPrice(param.getId(), param.getUnitPrice());
         //保存合同信息
         KwoTradeOrderContract tradeOrderContract = BeanUtils.copyProperties(contractInfo, KwoTradeOrderContract.class);
         tradeOrderContract.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo());
@@ -1227,4 +1229,17 @@ public class KwoTradeOrderService {
     public List<TradeOrderCountStatisticsDTO> getOrderNumByTopEntId(Long topEntId) {
         return kwoTradeOrderMapper.getOrderNumByTopEntId(topEntId);
     }
+
+    /**
+     * @desc: 工作台贸易订单表格统计
+     * @author: yzc
+     * @date: 2023-09-13 15:46
+     * @Param reqDTO:
+     * @return: java.util.List<com.sckw.order.model.dto.WbTOrderExcelStsResDTO>
+     */
+    public List<WbTOrderExcelStsResDTO> workbenchExcel(WbTOrderExcelStsReqDTO reqDTO) {
+        List<WbTOrderExcelStsResDTO> list = kwoTradeOrderMapper.workbenchExcel(reqDTO);
+        return CollectionUtils.emptyIfNull(list);
+    }
+
 }

+ 107 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderStatisticsService.java

@@ -0,0 +1,107 @@
+package com.sckw.order.serivce;
+
+import com.sckw.core.exception.BusinessException;
+import com.sckw.core.utils.DateUtils;
+import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.order.model.dto.WbTOrderExcelStsReqDTO;
+import com.sckw.order.model.dto.WbTOrderExcelStsResDTO;
+import com.sckw.order.model.vo.req.WbTOrderExcelStsParam;
+import com.sckw.order.model.vo.res.WbTOrderExcelStsResVO;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.temporal.TemporalAdjusters;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @desc: 贸易订单统计service
+ * @author: yzc
+ * @date: 2023-09-13 8:36
+ */
+@Service
+@Slf4j
+@RequiredArgsConstructor
+public class KwoTradeOrderStatisticsService {
+
+    private final KwoTradeOrderService kwoTradeOrderService;
+
+    /**
+     * @desc: 工作台贸易订单表格统计
+     * @author: yzc
+     * @date: 2023-09-13 15:46
+     * @Param params:
+     * @return: java.util.List<com.sckw.order.model.vo.res.WbTOrderExcelStsResVO>
+     */
+    public List<WbTOrderExcelStsResVO> workbenchExcel(WbTOrderExcelStsParam params) {
+        Integer dateType = params.getDateType();
+        Date startTime;
+        if (Objects.equals(1, dateType)) {
+            startTime = DateUtils.getStartTime(3, LocalDateTime.now());
+        } else if (Objects.equals(3, dateType)) {
+            startTime = DateUtils.getYearStartTime();
+        } else {
+            throw new BusinessException("Invalid date type");
+        }
+        List<WbTOrderExcelStsResVO> res = buildFormatDate(dateType, startTime);
+        WbTOrderExcelStsReqDTO reqDTO = new WbTOrderExcelStsReqDTO();
+        reqDTO.setUnitType(String.valueOf(params.getOrderType()))
+                .setDateFormat(DateUtils.getDateFormat(dateType))
+                .setStartTime(startTime)
+                .setTopEntId(LoginUserHolder.getEntId())
+                .setStsFactorsOne(params.getStsFactorsOne())
+                .setStsFactorsTwo(params.getStsFactorsTwo());
+        Map<String, WbTOrderExcelStsResDTO> map = kwoTradeOrderService.workbenchExcel(reqDTO).stream()
+                .collect(Collectors.toMap(WbTOrderExcelStsResDTO::getFormatDate, e -> e, (k1, k2) -> k1));
+        res.forEach(e->{
+            WbTOrderExcelStsResDTO dto = map.get(e.getFormatDate());
+            if (Objects.nonNull(dto)) {
+                e.setStsFactorsOneValue(dto.getStsFactorsOneValue());
+                e.setStsFactorsTwoValue(dto.getStsFactorsTwoValue());
+            }
+        });
+        return res;
+    }
+
+    /**
+     * @desc: 构建时间转换格式
+     * @author: yzc
+     * @date: 2023-09-13 15:45
+     * @Param dateType:
+     * @Param startTime:
+     * @return: java.util.List<com.sckw.order.model.vo.res.WbTOrderExcelStsResVO>
+     */
+    private List<WbTOrderExcelStsResVO> buildFormatDate(Integer dateType, Date startTime) {
+        LocalDate start = DateUtils.dateToLocalDate(startTime);
+        LocalDate end = LocalDate.now();
+        List<WbTOrderExcelStsResVO> res = new ArrayList<>();
+        if (dateType == 1) {
+            while (start.isBefore(end)) {
+                WbTOrderExcelStsResVO vo = new WbTOrderExcelStsResVO();
+                vo.setFormatDate(start.toString());
+                start = start.plusDays(1);
+                res.add(vo);
+            }
+            WbTOrderExcelStsResVO vo = new WbTOrderExcelStsResVO();
+            vo.setFormatDate(end.toString());
+            res.add(vo);
+        } else {
+            //当月第一天
+            end = end.with(TemporalAdjusters.firstDayOfMonth());
+            while (start.isBefore(end)) {
+                WbTOrderExcelStsResVO vo = new WbTOrderExcelStsResVO();
+                vo.setFormatDate(DateUtils.localDateToString(start, "yyyy-MM"));
+                start = start.plusMonths(1);
+                res.add(vo);
+            }
+            WbTOrderExcelStsResVO vo = new WbTOrderExcelStsResVO();
+            vo.setFormatDate(DateUtils.localDateToString(end, "yyyy-MM"));
+            res.add(vo);
+        }
+        return res;
+    }
+}
+

+ 34 - 7
sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderMapper.xml

@@ -4,17 +4,44 @@
 
 
     <select id="getMaxOrderNoByDate" resultType="java.lang.String">
-        SELECT MAX(t_order_no) FROM kwo_trade_order WHERE create_time &gt;= #{date};
+        SELECT MAX(t_order_no)
+        FROM kwo_trade_order
+        WHERE create_time &gt;= #{date};
     </select>
 
     <select id="getOrderNumByTopEntId" resultType="com.sckw.order.api.model.TradeOrderCountStatisticsDTO">
-        SELECT
-            u.unit_type AS orderType,
-            COUNT(*) AS num
+        SELECT u.unit_type AS orderType,
+               COUNT(*)    AS num
         FROM kwo_trade_order o
-        LEFT JOIN kwo_trade_order_unit u
-        ON o.id = u.t_order_id
-        WHERE o.del_flag =0 AND o.status != 0 and u.del_flag = 0 AND u.top_ent_id = #{topEntId}
+                 LEFT JOIN kwo_trade_order_unit u
+                           ON o.id = u.t_order_id
+        WHERE o.del_flag = 0
+          AND o.status != 0 and u.del_flag = 0 AND u.top_ent_id = #{topEntId}
         GROUP BY u.unit_type
     </select>
+
+    <select id="workbenchExcel" resultType="com.sckw.order.model.dto.WbTOrderExcelStsResDTO">
+        SELECT DATE_FORMAT(create_time, #{item.dateFormat}) AS formatDate,
+               SUM(CASE
+                       WHEN #{item.stsFactorsOne} = 1 THEN amount
+                       WHEN #{item.stsFactorsOne} = 2 THEN 1
+                       ELSE 0
+                   END)                                     AS stsFactorsOneValue,
+               SUM(CASE
+                       WHEN #{item.stsFactorsTwo} = 1 THEN amount
+                       WHEN #{item.stsFactorsTwo} = 2 THEN 1
+                       ELSE 0
+                   END)                                     AS stsFactorsTwoValue
+        FROM kwo_trade_order
+        WHERE
+          id IN (SELECT t_order_id
+                FROM kwo_trade_order_unit
+                WHERE del_flag = 0
+                AND unit_type = #{item.unitType}
+                AND top_ent_id = #{item.topEntId})
+          AND create_time >= #{item.startTime}
+          AND status NOT IN (0, 2)
+          AND del_flag = 0
+        GROUP BY DATE_FORMAT(create_time, #{item.dateFormat});
+    </select>
 </mapper>