Selaa lähdekoodia

1.工作台贸易订单数据统计接口开发
2.工作台采购订单列表接口开发
3.运营端贸易订单管理相关接口

yzc 1 vuosi sitten
vanhempi
commit
79a836263c
18 muutettua tiedostoa jossa 1209 lisäystä ja 7 poistoa
  1. 25 4
      sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTradeOrderStatisticsController.java
  2. 87 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/TradeOrderManageController.java
  3. 14 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderMapper.java
  4. 86 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/OperatorTOrderListStsConditionDTO.java
  5. 50 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/OrderStsInfoDTO.java
  6. 47 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/WorkbenchOrderStsDTO.java
  7. 56 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/WorkbenchPurchaseDTO.java
  8. 24 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/OperatorTOrderContractParam.java
  9. 35 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/OperatorTOrderExportQueryVO.java
  10. 39 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/OperatorTOrderListQueryVO.java
  11. 81 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/OperatorTOrderStsQueryVO.java
  12. 42 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/WbTOrderDataStsParam.java
  13. 66 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/TOrderDataStsResVO.java
  14. 86 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/WbTOrderDataStsResVO.java
  15. 69 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/WorkbenchPurchaseVO.java
  16. 202 3
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderStatisticsService.java
  17. 139 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/TradeOrderManageService.java
  18. 61 0
      sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderMapper.xml

+ 25 - 4
sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTradeOrderStatisticsController.java

@@ -1,15 +1,13 @@
 package com.sckw.order.controller;
 
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.order.model.vo.req.WbTOrderDataStsParam;
 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;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * @desc: 订单统计相关接口
@@ -35,4 +33,27 @@ public class KwoTradeOrderStatisticsController {
     public HttpResult workbenchExcel(@RequestBody @Validated WbTOrderExcelStsParam params) {
         return HttpResult.ok(kwoTradeOrderStatisticsService.workbenchExcel(params));
     }
+
+    /**
+     * @desc: 工作台贸易订单数据统计
+     * @author: yzc
+     * @date: 2023-09-11 14:43
+     * @Param params:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/workbenchData", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult workbenchData(@RequestBody @Validated WbTOrderDataStsParam params) {
+        return HttpResult.ok(kwoTradeOrderStatisticsService.workbenchData(params));
+    }
+
+    /**
+     * @desc: 工作台采购订单列表
+     * @author: yzc
+     * @date: 2023-09-13 19:13
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @GetMapping(value = "/workbenchPurchaseList", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult workbenchPurchaseList() {
+        return HttpResult.ok(kwoTradeOrderStatisticsService.workbenchPurchaseList());
+    }
 }

+ 87 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/TradeOrderManageController.java

@@ -0,0 +1,87 @@
+package com.sckw.order.controller;
+
+import com.sckw.core.exception.CustomPromptException;
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.excel.utils.ExcelUtil;
+import com.sckw.order.model.vo.req.*;
+import com.sckw.order.serivce.TradeOrderManageService;
+import jakarta.servlet.http.HttpServletResponse;
+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;
+
+import java.util.List;
+
+/**
+ * @desc: 运营端贸易订单管理相关接口
+ * @author: yzc
+ * @date: 2023-09-14 11:21
+ */
+@AllArgsConstructor
+@RestController
+@RequestMapping("/kwOrderManage")
+public class TradeOrderManageController {
+
+    private final TradeOrderManageService tradeOrderManageService;
+
+
+    /**
+     * @desc: 贸易订单列表分页查询
+     * @author: yzc
+     * @date: 2023-07-17 10:29
+     * @Param params:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/listPaging", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult listPaging(@RequestBody @Validated OperatorTOrderListQueryVO params) {
+        return HttpResult.ok(tradeOrderManageService.listPaging(params));
+    }
+
+    /**
+     * @desc: 贸易订单列表统计查询
+     * @author: yzc
+     * @date: 2023-07-17 10:29
+     * @Param params:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/listStatistic", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult listStatistic(@RequestBody @Validated OperatorTOrderStsQueryVO params) {
+        return HttpResult.ok(tradeOrderManageService.listStatistic(params));
+    }
+
+    /**
+     * @desc: 贸易订单列表导出
+     * @author: yzc
+     * @date: 2023-09-14 14:40
+     * @Param params:
+     * @Param response:
+     * @return: void
+     */
+    @PostMapping(value = "/listExport", produces = MediaType.APPLICATION_JSON_VALUE)
+    public void listExport(@RequestBody @Validated OperatorTOrderExportQueryVO params, HttpServletResponse response) {
+        List<TradeOrderListExport> list = tradeOrderManageService.export(params);
+        if (CollectionUtils.isEmpty(list)) {
+            throw new CustomPromptException(HttpStatus.SUCCESS_CODE, "暂无数据,请确认");
+        }
+        ExcelUtil.downData(response, TradeOrderListExport.class, list);
+    }
+
+    /**
+     * @desc: 合同关联订单列表
+     * @author: yzc
+     * @date: 2023-09-14 14:51
+     * @Param params:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/contractAssociationList", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult contractAssociationList(@RequestBody @Validated OperatorTOrderContractParam params) {
+        return HttpResult.ok(tradeOrderManageService.contractAssociationList(params));
+    }
+
+}

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

@@ -125,4 +125,18 @@ public interface KwoTradeOrderMapper extends BaseMapper<KwoTradeOrder> {
      */
     List<OrderListResDTO> tradeOrderContractList(@Param("query") TradeOrderContractParamDTO query,
                                                  @Param("contractIds") List<Long> contractIds);
+
+    /**
+     * @desc TODO
+     * @param procureTopEntId 
+     * @param excludeStatuses 
+     * @return java.util.List<com.sckw.order.model.dto.WorkbenchPurchaseDTO>
+     * @author yzc
+     * @date 2024/3/18 17:04
+     */
+    List<WorkbenchPurchaseDTO> workbenchPurchaseList(@Param("procureTopEntId") Long procureTopEntId,
+                                                     @Param("excludeStatuses") List<Integer> excludeStatuses);
+
+    WorkbenchOrderStsDTO getOrderStsInfo(@Param("query") OrderStsInfoDTO query,
+                                         @Param("excludeStatuses") List<Integer> excludeStatuses);
 }

+ 86 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/OperatorTOrderListStsConditionDTO.java

@@ -0,0 +1,86 @@
+package com.sckw.order.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @desc: 运营端贸易订单列表统计查询条件dto
+ * @author: yzc
+ * @date: 2023-09-14 11:33
+ */
+@Getter
+@Setter
+@ToString
+public class OperatorTOrderListStsConditionDTO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1352493248166762988L;
+
+
+    /**
+     * 订单编号、单位、商品名称(模糊匹配共用)
+     */
+    private String keywords;
+    /**
+     * 创建时间开始(yyyy-MM-dd HH:mm:ss)
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startCreateTime;
+
+    /**
+     * 创建时间结束(yyyy-MM-dd HH:mm:ss)
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endCreateTime;
+
+    /**
+     * 装货地址code
+     */
+    private String shippingAddressCode;
+
+    /**
+     * 装货地址等级
+     */
+    private Integer shippingAddressLevel;
+
+    /**
+     * 装货地址code
+     */
+    private String unloadingAddressCode;
+
+    /**
+     * 卸货地址等级
+     */
+    private Integer unloadingAddressLevel;
+
+    /**
+     * 交易方式(预付款、货到付款)
+     */
+    private String trading;
+
+    /**
+     * 提货方式(采方自提、供应配送)
+     */
+    private String pickupType;
+
+    /**
+     * 交付类型(签发交付、签收交付)
+     */
+    private String deliveryType;
+
+    /**
+     * 下单方式(1采购下单/2代客下单)
+     */
+    private String source;
+
+    /**
+     * 订单状态
+     */
+    private Integer status;
+
+}

+ 50 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/OrderStsInfoDTO.java

@@ -0,0 +1,50 @@
+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;
+
+/**
+ * @author: yzc
+ * @date: 2024-03-18  11:12
+ * @desc: 订单统计信息查询dto
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class OrderStsInfoDTO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -6956677587145390841L;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 订单类型(1采购订单、2销售订单)
+     */
+    private Integer orderType;
+
+    /**
+     * 商品单位
+     */
+    private String unit;
+
+    /**
+     * 创建时间开始(yyyy-MM-dd HH:mm:ss)
+     */
+    private Date startCreateTime;
+
+    /**
+     * 创建时间结束(yyyy-MM-dd HH:mm:ss)
+     */
+    private Date endCreateTime;
+
+}

+ 47 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/WorkbenchOrderStsDTO.java

@@ -0,0 +1,47 @@
+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-11 17:45
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class WorkbenchOrderStsDTO implements Serializable {
+
+    public WorkbenchOrderStsDTO() {
+        this.orderAmount = BigDecimal.ZERO.doubleValue();
+        this.orderPrice = BigDecimal.ZERO.doubleValue();
+        this.orderActualAmount = BigDecimal.ZERO.doubleValue();
+    }
+
+    @Serial
+    private static final long serialVersionUID = -925557546832266552L;
+
+    /**
+     * 订单总量
+     */
+    private Double orderAmount;
+
+    /**
+     * 订单总金额
+     */
+    private Double orderPrice;
+
+    /**
+     * 订单总实际成交量
+     */
+    private Double orderActualAmount;
+
+}

+ 56 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/WorkbenchPurchaseDTO.java

@@ -0,0 +1,56 @@
+package com.sckw.order.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author: yzc
+ * @date: 2024-03-18  09:56
+ * @desc: 工作台采购订单列表DTO
+ */
+@Getter
+@Setter
+@ToString
+public class WorkbenchPurchaseDTO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 2058696103492482712L;
+
+    /**
+     * 订单主键
+     */
+    @JsonProperty("tOrderId")
+    private Long tOrderId;
+
+    /**
+     * 订单成交数量
+     */
+    private BigDecimal amount;
+
+    /**
+     * 订单单位(吨、方、箱、件)
+     */
+    private String unit;
+
+    /**
+     * 商品id
+     */
+    private Long goodsId;
+
+    /**
+     * 采购企业名称
+     */
+    private String procureFirmName;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+}

+ 24 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/OperatorTOrderContractParam.java

@@ -0,0 +1,24 @@
+package com.sckw.order.model.vo.req;
+
+import com.sckw.core.model.page.PageRequest;
+import jakarta.validation.constraints.NotBlank;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+/**
+ * @desc: 合同关联订单列表请求参数
+ * @author: yzc
+ * @date: 2023-07-27 16:48
+ */
+@Getter
+@Setter
+@ToString
+@EqualsAndHashCode(callSuper = true)
+public class OperatorTOrderContractParam extends PageRequest {
+
+    @NotBlank(message = "合同ids不能为空")
+    private String contractIds;
+
+}

+ 35 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/OperatorTOrderExportQueryVO.java

@@ -0,0 +1,35 @@
+package com.sckw.order.model.vo.req;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.hibernate.validator.constraints.Range;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @desc: 运营端贸易订单列表导出查询参数vo
+ * @author: yzc
+ * @date: 2023-09-14 11:33
+ */
+@Getter
+@Setter
+@ToString
+public class OperatorTOrderExportQueryVO extends OperatorTOrderStsQueryVO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 3904961009951552659L;
+
+    /**
+     * 订单状态
+     */
+    @Range(min = 1, max = 7, message = "非法订单状态")
+    private Integer status;
+
+    /**
+     * 订单ids
+     */
+    private String ids;
+
+}

+ 39 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/OperatorTOrderListQueryVO.java

@@ -0,0 +1,39 @@
+package com.sckw.order.model.vo.req;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.hibernate.validator.constraints.Range;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @desc: 运营端贸易订单列表分页查询参数vo
+ * @author: yzc
+ * @date: 2023-09-14 11:33
+ */
+@Getter
+@Setter
+@ToString
+public class OperatorTOrderListQueryVO extends OperatorTOrderStsQueryVO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 3904961009951552659L;
+
+    /**
+     * 当前页码
+     */
+    private int page = 1;
+    /**
+     * 每页数量
+     */
+    private int pageSize = 10;
+
+    /**
+     * 订单状态
+     */
+    @Range(min = 1, max = 7, message = "非法订单状态")
+    private Integer status;
+
+}

+ 81 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/OperatorTOrderStsQueryVO.java

@@ -0,0 +1,81 @@
+package com.sckw.order.model.vo.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @desc: 运营端贸易订单统计查询参数vo
+ * @author: yzc
+ * @date: 2023-09-14 11:33
+ */
+@Getter
+@Setter
+@ToString
+public class OperatorTOrderStsQueryVO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 1352493248166762988L;
+
+
+    /**
+     * 订单编号、单位、商品名称(模糊匹配共用)
+     */
+    private String keywords;
+    /**
+     * 创建时间开始(yyyy-MM-dd HH:mm:ss)
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startCreateTime;
+
+    /**
+     * 创建时间结束(yyyy-MM-dd HH:mm:ss)
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endCreateTime;
+
+    /**
+     * 装货地址code
+     */
+    private String shippingAddressCode;
+
+    /**
+     * 装货地址等级
+     */
+    private Integer shippingAddressLevel;
+
+    /**
+     * 装货地址code
+     */
+    private String unloadingAddressCode;
+
+    /**
+     * 卸货地址等级
+     */
+    private Integer unloadingAddressLevel;
+
+    /**
+     * 交易方式(预付款、货到付款)
+     */
+    private String trading;
+
+    /**
+     * 提货方式(采方自提、供应配送)
+     */
+    private String pickupType;
+
+    /**
+     * 交付类型(签发交付、签收交付)
+     */
+    private String deliveryType;
+
+    /**
+     * 下单方式(1采购下单/2代客下单)
+     */
+    private String source;
+
+}

+ 42 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/WbTOrderDataStsParam.java

@@ -0,0 +1,42 @@
+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 WbTOrderDataStsParam implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 4503103839537525731L;
+
+
+    /**
+     * 订单类型(1采购订单、2销售订单)
+     */
+    @Range(min = 1, max = 2, message = "非法订单类型")
+    @NotNull(message = "订单类型不能为空")
+    private Integer orderType;
+    /**
+     * 商品单位
+     */
+    private String unit;
+    /**
+     * 统计日期类型(2周、3月)
+     */
+    @Range(min = 2, max = 3, message = "非法日期类型")
+    @NotNull(message = "日期类型不能为空")
+    private Integer dateType;
+
+}

+ 66 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/TOrderDataStsResVO.java

@@ -0,0 +1,66 @@
+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: 贸易订单统计数据响应对象
+ * @author: yzc
+ * @date: 2023-09-11 14:58
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class TOrderDataStsResVO implements Serializable {
+
+    public TOrderDataStsResVO() {
+        this.goodsNum = 0L;
+        this.orderAmount = BigDecimal.ZERO;
+        this.orderPrice = BigDecimal.ZERO;
+        this.waitCollectedPrice = BigDecimal.ZERO;
+        this.notArrivedAmount = BigDecimal.ZERO;
+    }
+
+
+    @Serial
+    private static final long serialVersionUID = -6132733716009809627L;
+
+    /**
+     * 1当前周、月;2上周、月
+     */
+    private Integer type;
+    /**
+     * 商品数量
+     */
+    private Long goodsNum;
+
+    /**
+     * 订单总量
+     */
+    private BigDecimal orderAmount;
+
+    /**
+     * 订单金额
+     */
+    private BigDecimal orderPrice;
+
+    /**
+     * 待付款金额
+     */
+    private BigDecimal waitCollectedPrice;
+
+    /**
+     * 未到货量
+     */
+    private BigDecimal notArrivedAmount;
+
+
+
+}

+ 86 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/WbTOrderDataStsResVO.java

@@ -0,0 +1,86 @@
+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;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @desc: 工作台贸易订单数据统计响应vo
+ * @author: yzc
+ * @date: 2023-09-11 14:58
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class WbTOrderDataStsResVO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -8601548022756611241L;
+
+    public WbTOrderDataStsResVO() {
+        this.tOrderDataStsList = new ArrayList<>();
+        this.goodsNumRingRate = BigDecimal.ZERO;
+        this.orderAmountRingRate = BigDecimal.ZERO;
+        this.orderPriceRingRate = BigDecimal.ZERO;
+        this.waitCollectedPriceRingRate = BigDecimal.ZERO;
+        this.notArrivedAmountRingRate = BigDecimal.ZERO;
+    }
+
+    /**
+     * 贸易订单数据统计列表
+     */
+   private List<TOrderDataStsResVO> tOrderDataStsList;
+
+    /**
+     * 商品数量环比
+     */
+    private BigDecimal goodsNumRingRate;
+    /**
+     * 商品数量环比标识 true上升,false下降
+     */
+    private Boolean goodsNumFlag;
+
+    /**
+     * 订单总量环比
+     */
+    private BigDecimal orderAmountRingRate;
+    /**
+     * 订单总量环比标识 true上升,false下降
+     */
+    private Boolean orderAmountFlag;;
+
+    /**
+     * 订单金额环比
+     */
+    private BigDecimal orderPriceRingRate;
+    /**
+     *  订单金额环比标识  true上升,false下降
+     */
+    private Boolean orderPriceFlag;
+
+    /**
+     * 待付款金额环比
+     */
+    private BigDecimal waitCollectedPriceRingRate;
+    /**
+     * 待付款金额环比标识  true上升,false下降
+     */
+    private Boolean waitCollectedPriceFlag;
+
+    /**
+     * 未到货量环比
+     */
+    private BigDecimal notArrivedAmountRingRate;
+    /**
+     * 未到货量环比标识  true上升,false下降
+     */
+    private Boolean notArrivedAmountFlag;
+
+}

+ 69 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/WorkbenchPurchaseVO.java

@@ -0,0 +1,69 @@
+package com.sckw.order.model.vo.res;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+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;
+import java.util.Date;
+
+/**
+ * @desc: 工作台采购订单列表vo
+ * @author: yzc
+ * @date: 2023-09-13 19:22
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class WorkbenchPurchaseVO implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 3393583069721972947L;
+
+    /**
+     * 订单主键
+     */
+    @JsonProperty("tOrderId")
+    private Long tOrderId;
+
+    /**
+     * 订单成交数量
+     */
+    private BigDecimal amount;
+
+    /**
+     * 订单单位(吨、方、箱、件)
+     */
+    private String unit;
+
+    private String unitLabel;
+
+    /**
+     * 商品名称
+     */
+    private String goodsName;
+
+    /**
+     * 商品类型
+     */
+    private String goodsType;
+
+    private String goodsTypeLabel;
+
+    /**
+     * 采购企业名称
+     */
+    private String procureFirmName;
+
+    /**
+     * 创建时间
+     */
+    @JsonFormat(pattern="yyyy-MM-dd", timezone = "GMT+8")
+    private Date createTime;
+
+}

+ 202 - 3
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderStatisticsService.java

@@ -1,15 +1,32 @@
 package com.sckw.order.serivce;
 
-import com.sckw.core.model.constant.NumberConstant;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.model.constant.NumberConstant;
+import com.sckw.core.utils.BeanUtils;
 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.dao.KwoTradeOrderMapper;
+import com.sckw.order.model.dto.*;
+import com.sckw.order.model.vo.req.WbTOrderDataStsParam;
 import com.sckw.order.model.vo.req.WbTOrderExcelStsParam;
+import com.sckw.order.model.vo.res.TOrderDataStsResVO;
+import com.sckw.order.model.vo.res.WbTOrderDataStsResVO;
 import com.sckw.order.model.vo.res.WbTOrderExcelStsResVO;
+import com.sckw.order.model.vo.res.WorkbenchPurchaseVO;
+import com.sckw.payment.api.dubbo.PaymentDubboService;
+import com.sckw.payment.api.model.dto.SettlementMoney;
+import com.sckw.product.api.dubbo.GoodsInfoService;
+import com.sckw.product.api.dubbo.GoodsStatisticsService;
+import com.sckw.product.api.model.GoodsNumStsParam;
+import com.sckw.product.api.model.KwpGoods;
+import com.sckw.system.api.RemoteSystemService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
@@ -31,6 +48,16 @@ import java.util.stream.Collectors;
 public class KwoTradeOrderStatisticsService {
 
     private final KwoTradeOrderService kwoTradeOrderService;
+    private final KwoTradeOrderMapper tradeOrderMapper;
+
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private GoodsInfoService goodsInfoService;
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private GoodsStatisticsService goodsStatisticsService;
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private PaymentDubboService paymentDubboService;
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private RemoteSystemService remoteSystemService;
 
     /**
      * @desc: 工作台贸易订单表格统计
@@ -114,5 +141,177 @@ public class KwoTradeOrderStatisticsService {
         }
         return res;
     }
+
+    /**
+     * @desc: 工作台贸易订单数据统计
+     * @author: yzc
+     * @date: 2023-09-11 15:32
+     * @Param params:
+     * @return: com.sckw.report.model.vo.WbTOrderDataStsResVO
+     */
+    public WbTOrderDataStsResVO workbenchData(WbTOrderDataStsParam params) {
+        WbTOrderDataStsResVO res = new WbTOrderDataStsResVO();
+        List<TOrderDataStsResVO> list = new ArrayList<>();
+        Long entId = LoginUserHolder.getEntId();
+        String unit = params.getUnit();
+        Integer orderType = params.getOrderType();
+        Integer dateType = params.getDateType();
+        Date currentStart = DateUtils.getStartTime(dateType, LocalDateTime.now());
+        Date lastEnd = DateUtils.getLastEndTime(dateType);
+        Date lastStart = DateUtils.getStartTime(dateType, DateUtil.toLocalDateTime(lastEnd));
+        //当前数据
+        TOrderDataStsResVO currentDataSts = new TOrderDataStsResVO();
+        //商品数量
+        GoodsNumStsParam goodsNumStsParam = new GoodsNumStsParam();
+        goodsNumStsParam.setTopEntId(entId).setUnit(unit);
+        Long currentGoodsNum = goodsStatisticsService.getOnShelfGoodsNum(goodsNumStsParam);
+        //待付款金额
+        SettlementMoney settlement = Objects.equals(orderType, 1) ?
+                paymentDubboService.countPurchase(entId, dateType) : paymentDubboService.countSell(entId, dateType);
+        //订单统计
+        WorkbenchOrderStsDTO currentOrderSts = getOrderStsInfo(orderType, unit, currentStart, null);
+        BigDecimal currentAmount = BigDecimal.valueOf(currentOrderSts.getOrderAmount());
+        BigDecimal currentPrice = BigDecimal.valueOf(currentOrderSts.getOrderPrice());
+        currentDataSts.setType(NumberConstant.ONE)
+                .setGoodsNum(currentGoodsNum)
+                .setOrderAmount(currentAmount)
+                .setOrderPrice(currentPrice)
+                .setWaitCollectedPrice(new BigDecimal(settlement.getCurrent()))
+                .setNotArrivedAmount(currentAmount.subtract(BigDecimal.valueOf(currentOrderSts.getOrderActualAmount())));
+        list.add(currentDataSts);
+
+        //上周/上月数据
+        TOrderDataStsResVO lastDataSts = new TOrderDataStsResVO();
+        //商品数量
+        goodsNumStsParam.setEndDate(lastEnd);
+        Long lastGoodsNum = goodsStatisticsService.getOnShelfGoodsNum(goodsNumStsParam);
+        //订单统计
+        WorkbenchOrderStsDTO lastOrderSts = getOrderStsInfo(orderType, unit, lastStart, lastEnd);
+        BigDecimal lastAmount = BigDecimal.valueOf(lastOrderSts.getOrderAmount());
+        BigDecimal lastPrice = BigDecimal.valueOf(lastOrderSts.getOrderPrice());
+        lastDataSts.setType(NumberConstant.TWO)
+                .setGoodsNum(lastGoodsNum)
+                .setOrderAmount(lastAmount)
+                .setOrderPrice(lastPrice)
+                .setWaitCollectedPrice(new BigDecimal(settlement.getBefore()))
+                .setNotArrivedAmount(lastAmount.subtract(BigDecimal.valueOf(lastOrderSts.getOrderActualAmount())));
+        list.add(lastDataSts);
+        res.setTOrderDataStsList(list);
+        //商品数量环比
+        BigDecimal goodsNumRingRate = getRingRate(new BigDecimal(currentGoodsNum), new BigDecimal(lastGoodsNum));
+        boolean goodsNumFlag = goodsNumRingRate.compareTo(BigDecimal.ZERO) >= 0;
+        goodsNumRingRate = goodsNumRingRate.abs();
+        //订单总量环比
+        BigDecimal orderAmountRingRate = getRingRate(currentAmount, lastAmount);
+        boolean orderAmountFlag = orderAmountRingRate.compareTo(BigDecimal.ZERO) >= 0;
+        orderAmountRingRate = orderAmountRingRate.abs();
+        //订单总金额环比
+        BigDecimal orderPriceRingRate = getRingRate(currentPrice, lastPrice);
+        boolean orderPriceFlag = orderPriceRingRate.compareTo(BigDecimal.ZERO) >= 0;
+        orderPriceRingRate = orderPriceRingRate.abs();
+        //未到货量环比
+        BigDecimal notArrivedAmountRingRate = getRingRate(currentDataSts.getNotArrivedAmount(), lastDataSts.getNotArrivedAmount());
+        boolean notArrivedAmountFlag = notArrivedAmountRingRate.compareTo(BigDecimal.ZERO) >= 0;
+        notArrivedAmountRingRate = notArrivedAmountRingRate.abs();
+
+        res.setGoodsNumRingRate(goodsNumRingRate)
+                .setGoodsNumFlag(goodsNumFlag)
+                .setOrderAmountRingRate(orderAmountRingRate)
+                .setOrderAmountFlag(orderAmountFlag)
+                .setOrderPriceRingRate(orderPriceRingRate)
+                .setOrderPriceFlag(orderPriceFlag)
+                .setNotArrivedAmountRingRate(notArrivedAmountRingRate)
+                .setNotArrivedAmountFlag(notArrivedAmountFlag)
+                .setWaitCollectedPriceRingRate(new BigDecimal(settlement.getPercent().replace("%", "")))
+                .setWaitCollectedPriceFlag(Objects.equals(settlement.getFlag(), 1));
+        return res;
+    }
+
+    private BigDecimal getRingRate(BigDecimal current, BigDecimal last) {
+        BigDecimal res;
+        if (last.compareTo(BigDecimal.ZERO) == 0) {
+            res = (current.subtract(last)).compareTo(BigDecimal.ZERO) != 0 ? NumberConstant.ONE_HUNDRED : BigDecimal.ZERO;
+        } else {
+            res = (current.subtract(last)).multiply(NumberConstant.ONE_HUNDRED).divide(last, 2, RoundingMode.HALF_UP);
+        }
+        return res;
+    }
+
+    /**
+     * @desc: 获取订单统计信息
+     * @author: yzc
+     * @date: 2023-09-11 17:55
+     * @Param orderType:
+     * @Param unit:
+     * @Param start:
+     * @Param end:
+     * @return: com.sckw.report.model.dto.WorkbenchOrderStsDTO
+     */
+    private WorkbenchOrderStsDTO getOrderStsInfo(Integer orderType, String unit, Date start, Date end) {
+        OrderStsInfoDTO dto = new OrderStsInfoDTO();
+        dto.setOrderType(orderType).setUnit(unit)
+                .setEntId(LoginUserHolder.getEntId())
+                .setStartCreateTime(start)
+                .setEndCreateTime(end);
+        List<Integer> excludeStatuses = Arrays.asList(0, 2);
+        WorkbenchOrderStsDTO result = tradeOrderMapper.getOrderStsInfo(dto, excludeStatuses);
+        return Objects.isNull(result) ? new WorkbenchOrderStsDTO() : result;
+    }
+
+    /**
+     * @desc: 工作台采购订单列表
+     * @author: yzc
+     * @date: 2023-09-13 19:37
+     * @return: java.util.List<com.sckw.report.model.vo.WorkbenchPurchaseVO>
+     */
+    public List<WorkbenchPurchaseVO> workbenchPurchaseList() {
+        Long procureTopEntId = LoginUserHolder.getEntId();
+        List<Integer> excludeStatuses = Arrays.asList(0, 2, 7);
+        List<WorkbenchPurchaseDTO> orders = tradeOrderMapper.workbenchPurchaseList(procureTopEntId, excludeStatuses);
+        if (CollUtil.isEmpty(orders)) {
+            return Collections.emptyList();
+        }
+        Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(
+                DictTypeEnum.UNIT_TYPE.getType(), DictTypeEnum.PRODUCT_NAME_TYPE.getType()));
+        Map<String, String> unitMap, goodsTypeMap;
+        if (CollUtil.isNotEmpty(dict)) {
+            unitMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.UNIT_TYPE.getType())) ?
+                    dict.get(DictTypeEnum.UNIT_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            goodsTypeMap = CollUtil.isNotEmpty(dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType())) ?
+                    dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType()) : new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        } else {
+            unitMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            goodsTypeMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        }
+        List<Long> goodsIds = orders.stream().map(WorkbenchPurchaseDTO::getGoodsId).toList();
+        Map<Long, KwpGoods> goodsMap = goodsInfoService.getGoodsByIds(goodsIds);
+        List<WorkbenchPurchaseVO> result = new ArrayList<>();
+        orders.forEach(e -> {
+            WorkbenchPurchaseVO vo = BeanUtils.copyProperties(e, WorkbenchPurchaseVO.class);
+            vo.setUnitLabel(unitMap.get(e.getUnit())).setAmount(setScale(e.getAmount()));
+            KwpGoods goods = goodsMap.get(e.getGoodsId());
+            if (Objects.nonNull(goods)) {
+                vo.setGoodsName(goods.getName()).setGoodsType(goods.getGoodsType())
+                        .setGoodsTypeLabel(goodsTypeMap.get(goods.getGoodsType()));
+            }
+            result.add(vo);
+        });
+        return result;
+    }
+
+
+    /**
+     * @desc: 设置两位小数
+     * @author: yzc
+     * @date: 2023-09-26 10:11
+     * @Param d:
+     * @return: java.lang.BigDecimal
+     */
+    private BigDecimal setScale(BigDecimal d) {
+        if (Objects.isNull(d) || BigDecimal.ZERO.compareTo(d) == 0) {
+            return NumberConstant.ZERO_TWO;
+        }
+        return d.setScale(2, RoundingMode.HALF_UP);
+    }
 }
 

+ 139 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/TradeOrderManageService.java

@@ -0,0 +1,139 @@
+package com.sckw.order.serivce;
+
+import com.github.pagehelper.PageHelper;
+import com.sckw.core.model.page.PageResult;
+import com.sckw.core.model.vo.TableBottom;
+import com.sckw.core.model.vo.TableStatisticRes;
+import com.sckw.core.model.vo.TableTop;
+import com.sckw.core.utils.BeanUtils;
+import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.StringUtils;
+import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.order.dao.KwoTradeOrderMapper;
+import com.sckw.order.enums.OrderStatusEnum;
+import com.sckw.order.model.dto.OperatorTOrderListStsConditionDTO;
+import com.sckw.order.model.vo.req.*;
+import com.sckw.system.api.RemoteUserService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @desc: 运营端贸易订单管理相关service
+ * @author: yzc
+ * @date: 2023-09-14 11:23
+ */
+@Service
+@Slf4j
+@AllArgsConstructor
+public class TradeOrderManageService {
+
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private RemoteUserService remoteUserService;
+
+    private final KwoTradeOrderService tradeOrderService;
+    private final KwoTradeOrderMapper tradeOrderMapper;
+
+
+    /**
+     * @desc: 贸易订单列表分页查询
+     * @author: yzc
+     * @date: 2023-09-14 14:24
+     * @Param params:
+     * @return: com.sckw.core.model.page.PageResult
+     */
+    public PageResult listPaging(OperatorTOrderListQueryVO params) {
+        List<Long> authEntIdList = LoginUserHolder.getAuthEntIdList();
+        if (CollectionUtils.isEmpty(authEntIdList)) {
+            List<Long> ids = remoteUserService.findEnterpriseIdsByUserIdIsMain(LoginUserHolder.getUserId());
+            if (CollectionUtils.isEmpty(ids)) {
+                return PageResult.build(params.getPage(), params.getPageSize(), 0L, Collections.emptyList());
+            }
+            authEntIdList.addAll(ids);
+        }
+        OperatorTOrderListStsConditionDTO dto = BeanUtils.copyProperties(params, OperatorTOrderListStsConditionDTO.class);
+        PageHelper.startPage(params.getPage(), params.getPageSize());
+//        List<OrderListResDTO> list = tradeOrderMapper.listPaging(dto,authEntIdList,);
+//        return tradeOrderService.buildResult(list, params.getPageSize());
+        return null;
+    }
+
+    /**
+     * @desc: 贸易订单列表统计查询
+     * @author: yzc
+     * @date: 2023-09-14 14:22
+     * @Param params:
+     * @return: com.sckw.core.model.vo.TableStatisticRes
+     */
+    public TableStatisticRes listStatistic(OperatorTOrderStsQueryVO params) {
+        List<Long> authEntIdList = LoginUserHolder.getAuthEntIdList();
+        if (CollectionUtils.isEmpty(authEntIdList)) {
+            List<Long> ids = remoteUserService.findEnterpriseIdsByUserIdIsMain(LoginUserHolder.getUserId());
+            if (CollectionUtils.isEmpty(ids)) {
+                List<OrderStatusEnum> enums = OrderStatusEnum.getSortList();
+                enums.remove(0);
+                List<TableTop> list = new ArrayList<>();
+                for (OrderStatusEnum e : enums) {
+                    Integer value = e.getCode();
+                    TableTop tableTop = new TableTop();
+                    tableTop.setName(e.getMsg()).setValue(value).setTotal(0);
+                    list.add(tableTop);
+                }
+                TableTop all = new TableTop();
+                all.setName("全部").setTotal(0);
+                list.add(0, all);
+                TableBottom tableBottom = new TableBottom();
+                tableBottom.setTotal(0);
+                TableStatisticRes res = new TableStatisticRes();
+                res.setTableTops(list).setTableBottom(tableBottom);
+                return res;
+            }
+            authEntIdList.addAll(ids);
+        }
+        List<OrderStatusEnum> enums = OrderStatusEnum.getSortList();
+        enums.remove(0);
+        return null;
+    }
+
+    /**
+     * @desc: 贸易订单列表导出
+     * @author: yzc
+     * @date: 2023-09-14 14:40
+     * @Param params:
+     * @return: java.util.List<com.sckw.report.service.param.TradeOrderListExport>
+     */
+    public List<TradeOrderListExport> export(OperatorTOrderExportQueryVO params) {
+        List<Long> authEntIdList = LoginUserHolder.getAuthEntIdList();
+        if (CollectionUtils.isEmpty(authEntIdList)) {
+            List<Long> ids = remoteUserService.findEnterpriseIdsByUserIdIsMain(LoginUserHolder.getUserId());
+            if (CollectionUtils.isEmpty(ids)) {
+                List<TradeOrderListExport> exports = new ArrayList<>();
+                return exports;
+            }
+            authEntIdList.addAll(ids);
+        }
+        return null;
+    }
+
+    /**
+     * @desc: 合同关联订单列表
+     * @author: yzc
+     * @date: 2023-09-14 14:52
+     * @Param params:
+     * @return: com.sckw.core.model.page.PageResult
+     */
+    public PageResult contractAssociationList(OperatorTOrderContractParam params) {
+        Criteria criteria = new Criteria();
+        List<Long> ids = StringUtils.splitStrToList(params.getContractIds(), ",", Long.class);
+        criteria.and("contractId").in(ids).and("delFlag").is(0);
+        Sort sort = Sort.by(Sort.Direction.DESC, "contractId", "createTime");
+        return null;
+    }
+}

+ 61 - 0
sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderMapper.xml

@@ -459,6 +459,29 @@
         ORDER BY f.contract_id, a.create_time DESC
     </select>
 
+    <select id="workbenchPurchaseList" resultType="com.sckw.order.model.dto.WorkbenchPurchaseDTO">
+        SELECT
+        a.id as tOrderId, a.amount as amount, a.unit as unit, a.create_time as createTime,
+        g.goods_id as goodsId, d.firm_name as procureFirmName
+        FROM kwo_trade_order a
+        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id
+        AND d.unit_type = "1" AND d.del_flag = 0
+        LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
+        <where>
+            a.del_flag = 0
+            <if test="procureTopEntId != null">
+                and d.top_ent_id = #{procureTopEntId}
+            </if>
+            <if test="excludeStatuses != null and excludeStatuses.size() > 0">
+                and a.status not in
+                <foreach collection="excludeStatuses" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        ORDER BY a.create_time DESC LIMIT 10;
+    </select>
+
     <select id="tradeOrderStatistic" resultType="com.sckw.core.model.vo.TableTop">
         SELECT a.status AS `value`, COUNT(a.status) AS total
         FROM kwo_trade_order a
@@ -673,6 +696,44 @@
 
     </select>
 
+    <select id="getOrderStsInfo" resultType="com.sckw.order.model.dto.WorkbenchOrderStsDTO">
+        SELECT SUM(a.amount) AS orderAmount, SUM(a.price) AS orderPrice,
+               SUM(a.actual_amount) AS orderActualAmount
+        FROM kwo_trade_order a
+        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id
+        AND d.unit_type = "1" AND d.del_flag = 0
+        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id
+        AND e.unit_type = "2" AND e.del_flag = 0
+        <where>
+            a.del_flag = 0
+            <if test="query.unit != null and query.unit != ''">
+                and a.unit =#{query.unit}
+            </if>
+            <if test="query.startCreateTime != null ">
+                and a.create_time &gt;= #{query.startCreateTime}
+            </if>
+            <if test="query.endCreateTime != null ">
+                and a.create_time &lt;= #{query.endCreateTime}
+            </if>
+            <if test="excludeStatuses != null and excludeStatuses.size() > 0">
+                and a.status not in
+                <foreach collection="excludeStatuses" item="item" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="query.orderType == 1">
+                <if test="query.entId != null">
+                    and d.top_ent_id = #{query.entId}
+                </if>
+            </if>
+            <if test="query.orderType == 2">
+                <if test="query.entId != null">
+                    and e.top_ent_id = #{query.entId}
+                </if>
+            </if>
+        </where>
+    </select>
+
     <select id="getMaxOrderNoByDate" resultType="java.lang.String">
         SELECT MAX(t_order_no)
         FROM kwo_trade_order