Prechádzať zdrojové kódy

1.贸易订单下单地址相关优化
2.地址档案根据企业查询支持地址名称模糊匹配搜索

yzc 1 rok pred
rodič
commit
13f87435a7

+ 5 - 0
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/model/vo/req/QueryByEntReqVo.java

@@ -21,6 +21,11 @@ public class QueryByEntReqVo implements Serializable {
      */
     private Long id;
 
+    /**
+     * 地址名称
+     */
+    private String name;
+
     /**
      * 地址名
      */

+ 3 - 0
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmAddressService.java

@@ -429,6 +429,9 @@ public class KwmAddressService {
         if (StringUtils.isNotBlank(reqVo.getCityTrueName())) {
             wrapper.eq(KwmAddress::getName, reqVo.getCityTrueName());
         }
+        if (StringUtils.isNotBlank(reqVo.getName())) {
+            wrapper.like(KwmAddress::getName, reqVo.getName());
+        }
         if (StringUtils.isNotBlank(reqVo.getCityName())) {
             wrapper.and(wp -> wp.like(KwmAddress::getCityName, reqVo.getCityName()).or().
                     like(KwmAddress::getDetailAddress, reqVo.getCityName()));

+ 70 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTradeOrderController.java

@@ -1,15 +1,22 @@
 package com.sckw.order.controller;
 
 import com.sckw.core.annotation.RepeatSubmit;
+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.KwoTradeOrderService;
 import io.seata.spring.annotation.GlobalTransactional;
+import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.MediaType;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 /**
  * @desc: 贸易订单相关
  * @author: yzc
@@ -221,4 +228,67 @@ public class KwoTradeOrderController {
         return HttpResult.ok(kwoTradeOrderService.tradeOrderSelect(params));
     }
 
+    /**
+     * @desc: 贸易订单列表统计查询
+     * @author: yzc
+     * @date: 2023-07-17 10:29
+     * @Param params:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/tradeOrderStatistic", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult statistic(@RequestBody @Validated TradeOrderListStatisticParam params) {
+        return HttpResult.ok(kwoTradeOrderService.tradeOrderStatistic(params));
+    }
+
+    /**
+     * @desc: app主界面贸易订单统计
+     * @author: yzc
+     * @date: 2023-08-21 17:38
+     * @Param params:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/tradeOrderAppStatistic", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult appStatistic(@RequestBody @Validated TradeOrderAppStatisticParam params) {
+        return HttpResult.ok(kwoTradeOrderService.appStatistic(params));
+    }
+
+    /**
+     * @desc: 贸易订单列表导出
+     * @author: yzc
+     * @date: 2023-07-17 10:29
+     * @Param params:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/tradeOrderExport", produces = MediaType.APPLICATION_JSON_VALUE)
+    public void export(@RequestBody @Validated TradeOrderListExportParam params, HttpServletResponse response) {
+        List<TradeOrderListExport> list = kwoTradeOrderService.export(params);
+        if (CollectionUtils.isEmpty(list)) {
+            throw new CustomPromptException(HttpStatus.SUCCESS_CODE, "暂无数据,请确认");
+        }
+        ExcelUtil.downData(response, TradeOrderListExport.class, list);
+    }
+
+    /**
+     * @desc: 贸易订单对账单分页列表查询
+     * @author: yzc
+     * @date: 2023-07-20 15:03
+     * @Param params:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/tradeOrderStatementList", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult tradeOrderStatementList(@RequestBody @Validated TradeOrderStatementList params) {
+        return HttpResult.ok(kwoTradeOrderService.tradeOrderStatementList(params));
+    }
+
+    /**
+     * @desc: 合同关联订单列表
+     * @author: yzc
+     * @date: 2023-07-27 16:48
+     * @Param params:
+     * @return: com.sckw.core.web.response.HttpResult
+     */
+    @PostMapping(value = "/tradeOrderContractList", produces = MediaType.APPLICATION_JSON_VALUE)
+    public HttpResult tradeOrderContractList(@RequestBody @Validated TradeOrderContractParam params) {
+        return HttpResult.ok(kwoTradeOrderService.tradeOrderContractList(params));
+    }
 }

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

@@ -1,6 +1,7 @@
 package com.sckw.order.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.core.model.vo.TableTop;
 import com.sckw.order.api.model.TradeOrderCountStatisticsDTO;
 import com.sckw.order.model.KwoTradeOrder;
 import com.sckw.order.model.dto.OrderListResDTO;
@@ -60,4 +61,18 @@ public interface KwoTradeOrderMapper extends BaseMapper<KwoTradeOrder> {
     List<OrderListResDTO> tradeOrderSelect(@Param("query") TradeOrderListSelectDTO query,
                                            @Param("goodIds") List<Long> goodIds,
                                            @Param("authUserIds")List<Long> authUserIds);
+
+
+    /***
+     * @desc 贸易订单列表统计查询
+     * @param query
+     * @param goodIds
+     * @param authUserIds
+     * @return java.util.List<com.sckw.core.model.vo.TableTop>
+     * @author yzc
+     * @date 2024/3/14 14:34
+     */
+    List<TableTop> tradeOrderStatistic(@Param("query") TradeOrderListSelectDTO query,
+                                       @Param("goodIds") List<Long> goodIds,
+                                       @Param("authUserIds")List<Long> authUserIds);
 }

+ 10 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/enums/OrderStatusEnum.java

@@ -3,6 +3,11 @@ package com.sckw.order.enums;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * @desc: 订单状态枚举
  * @author: yzc
@@ -36,4 +41,9 @@ public enum OrderStatusEnum {
         return null;
     }
 
+    public static List<OrderStatusEnum> getSortList() {
+        OrderStatusEnum[] enums = OrderStatusEnum.values();
+        return Arrays.stream(enums).sorted(Comparator.comparingInt(OrderStatusEnum::getCode)).collect(Collectors.toList());
+    }
+
 }

+ 6 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/dto/TradeOrderListSelectDTO.java

@@ -6,6 +6,7 @@ import lombok.ToString;
 import lombok.experimental.Accessors;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * @author: yzc
@@ -42,6 +43,11 @@ public class TradeOrderListSelectDTO {
      */
     private String keywords;
 
+    /**
+     * 商品名称(模糊匹配查出的商品id)
+     */
+    private List<Long> goodIds;
+
     /**
      * 创建时间开始(yyyy-MM-dd HH:mm:ss)
      */

+ 25 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/TradeOrderAppStatisticParam.java

@@ -0,0 +1,25 @@
+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;
+
+/**
+ * @desc: 贸易订单app统计
+ * @author: yzc
+ * @date: 2023-08-21 17:21
+ */
+@Getter
+@Setter
+@ToString
+public class TradeOrderAppStatisticParam {
+
+    /**
+     * 订单类型(2销售订单、1采购订单)
+     */
+    @Range(min = 1, max = 2, message = "非法订单类型")
+    @NotNull(message = "订单类型不能为空")
+    private Integer orderType;
+}

+ 28 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/TradeOrderContractParam.java

@@ -0,0 +1,28 @@
+package com.sckw.order.model.vo.req;
+
+import com.sckw.core.model.page.PageRequest;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.hibernate.validator.constraints.Range;
+
+/**
+ * @desc: 合同关联订单列表请求参数
+ * @author: yzc
+ * @date: 2023-07-27 16:48
+ */
+@Getter
+@Setter
+@ToString
+public class TradeOrderContractParam extends PageRequest {
+
+    @NotBlank(message = "合同ids不能为空")
+    private String contractIds;
+
+    @Range(min = 1, max = 2, message = "非法订单类型")
+    @NotNull(message = "订单类型不能为空")
+    private Integer orderType;
+
+}

+ 2 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/TradeOrderListStatisticParam.java

@@ -49,6 +49,7 @@ public class TradeOrderListStatisticParam {
     /**
      * 装货地址等级
      */
+    @Range(min = 1,max = 3,message = "非法装货地址等级")
     private Integer shippingAddressLevel;
 
     /**
@@ -59,6 +60,7 @@ public class TradeOrderListStatisticParam {
     /**
      * 卸货地址等级
      */
+    @Range(min = 1,max = 3,message = "非法卸货地址等级")
     private Integer unloadingAddressLevel;
 
     /**

+ 94 - 33
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -21,6 +21,9 @@ import com.sckw.core.model.enums.CooperateTypeEnum;
 import com.sckw.core.model.enums.OrderRuleEnum;
 import com.sckw.core.model.enums.RedisOrderGenerateEnum;
 import com.sckw.core.model.page.PageRes;
+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.CollectionUtils;
 import com.sckw.core.utils.DateUtils;
 import com.sckw.core.utils.OrderGenerateSeqNoUtils;
@@ -67,6 +70,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -242,11 +246,12 @@ public class KwoTradeOrderService {
             boolean loadFlag = false;
             boolean unloadFlag = false;
             for (AddressInfo e : addressInfos) {
+                BigDecimal addressAmount = Objects.isNull(e.getAmount()) ? BigDecimal.ZERO : e.getAmount();
                 if (Objects.equals(e.getAddressType(), OrderAddressTypeEnum.LOAD.getType())) {
-                    totalLoadAmount = totalLoadAmount.add(e.getAmount());
+                    totalLoadAmount = totalLoadAmount.add(addressAmount);
                     loadFlag = true;
                 } else {
-                    totalUnloadAmount = totalUnloadAmount.add(e.getAmount());
+                    totalUnloadAmount = totalUnloadAmount.add(addressAmount);
                     unloadFlag = true;
                 }
             }
@@ -256,15 +261,19 @@ public class KwoTradeOrderService {
             if (unloadFlag && totalUnloadAmount.compareTo(amount) != 0) {
                 throw new BusinessException("卸货分配量总量与订单总量不符!");
             }
+            AtomicInteger loadSort = new AtomicInteger(0);
+            AtomicInteger unloadSort = new AtomicInteger(0);
             addressInfos.forEach(e -> {
                 KwoTradeOrderAddress address = BeanUtil.copyProperties(e, KwoTradeOrderAddress.class);
                 address.setTOrderId(id).setTOrderNo(tOrderNo);
                 //todo MongoDB如何存多个地址信息?
                 if (Objects.equals(address.getAddressType(), OrderAddressTypeEnum.LOAD.getType())) {
+                    address.setSort(loadSort.getAndIncrement());
                     order.setLoadName(e.getName()).setLoadType(e.getType()).setLoadContacts(e.getContacts())
                             .setLoadPhone(e.getPhone()).setLoadCityCode(String.valueOf(e.getCityCode())).setLoadCityName(e.getCityName())
                             .setLoadDetailAddress(e.getDetailAddress()).setLoadLat(e.getLat()).setLoadLng(e.getLng());
                 } else {
+                    address.setSort(unloadSort.getAndIncrement());
                     order.setUnloadName(e.getName()).setUnloadType(e.getType()).setUnloadContacts(e.getContacts())
                             .setUnloadPhone(e.getPhone()).setUnloadCityCode(String.valueOf(e.getCityCode())).setUnloadCityName(e.getCityName())
                             .setUnloadDetailAddress(e.getDetailAddress()).setUnloadLat(e.getLat()).setUnloadLng(e.getLng());
@@ -1569,38 +1578,9 @@ public class KwoTradeOrderService {
     }
 
     public PageRes tradeOrderSelect(TradeOrderListSelectParam params) {
-        TradeOrderListSelectDTO dto = BeanUtil.copyProperties(params, TradeOrderListSelectDTO.class);
-        dto.setEntId(LoginUserHolder.getEntId())
-                .setUserId(LoginUserHolder.getUserId())
-                .setIsMain(LoginUserHolder.getIsMain());
-        //装卸货地址
-        String loadCode = params.getShippingAddressCode();
-        if (StringUtils.isNotBlank(loadCode)) {
-            switch (params.getShippingAddressLevel()) {
-                case 1 -> dto.setLoadAddressCode(
-                        loadCode.substring(0, 2).trim());
-                case 2 -> dto.setLoadAddressCode(
-                        loadCode.substring(0, 4).trim());
-                case 3 -> dto.setLoadAddressCode(loadCode);
-            }
-        }
-        String unloadCode = params.getUnloadingAddressCode();
-        if (StringUtils.isNotBlank(unloadCode)) {
-            switch (params.getUnloadingAddressLevel()) {
-                case 1 -> dto.setUnloadAddressCode(
-                        loadCode.substring(0, 2).trim());
-                case 2 -> dto.setUnloadAddressCode(
-                        loadCode.substring(0, 4).trim());
-                case 3 -> dto.setUnloadAddressCode(loadCode);
-            }
-        }
-        String keywords = params.getKeywords();
-        List<Long> goodIds = new ArrayList<>();
-        if (StringUtils.isNotBlank(keywords)) {
-            goodIds = goodsInfoService.selectIdsLikeGoodsName(keywords);
-        }
+        TradeOrderListSelectDTO dto = buildSelectParam(params);
         PageHelper.startPage(params.getPage(), params.getPageSize());
-        List<OrderListResDTO> list = kwoTradeOrderMapper.tradeOrderSelect(dto, goodIds, LoginUserHolder.getAuthUserIdList());
+        List<OrderListResDTO> list = kwoTradeOrderMapper.tradeOrderSelect(dto, dto.getGoodIds(), LoginUserHolder.getAuthUserIdList());
         List<OrderListResVO> result = new ArrayList<>();
         if (CollUtil.isEmpty(list)) {
             PageInfo<OrderListResVO> pageInfo = new PageInfo<>(result);
@@ -1695,6 +1675,40 @@ public class KwoTradeOrderService {
         return PageRes.build(pageInfo, result);
     }
 
+    private TradeOrderListSelectDTO buildSelectParam(TradeOrderListStatisticParam params) {
+        TradeOrderListSelectDTO dto = BeanUtil.copyProperties(params, TradeOrderListSelectDTO.class);
+        dto.setEntId(LoginUserHolder.getEntId())
+                .setUserId(LoginUserHolder.getUserId())
+                .setIsMain(LoginUserHolder.getIsMain());
+        //装卸货地址
+        String loadCode = params.getShippingAddressCode();
+        if (StringUtils.isNotBlank(loadCode) && Objects.nonNull(params.getShippingAddressLevel())) {
+            switch (params.getShippingAddressLevel()) {
+                case 1 -> dto.setLoadAddressCode(
+                        loadCode.substring(0, 2).trim());
+                case 2 -> dto.setLoadAddressCode(
+                        loadCode.substring(0, 4).trim());
+                case 3 -> dto.setLoadAddressCode(loadCode);
+            }
+        }
+        String unloadCode = params.getUnloadingAddressCode();
+        if (StringUtils.isNotBlank(unloadCode) && Objects.nonNull(params.getUnloadingAddressLevel())) {
+            switch (params.getUnloadingAddressLevel()) {
+                case 1 -> dto.setUnloadAddressCode(
+                        loadCode.substring(0, 2).trim());
+                case 2 -> dto.setUnloadAddressCode(
+                        loadCode.substring(0, 4).trim());
+                case 3 -> dto.setUnloadAddressCode(loadCode);
+            }
+        }
+        String keywords = params.getKeywords();
+        if (StringUtils.isNotBlank(keywords)) {
+            List<Long> goodIds = goodsInfoService.selectIdsLikeGoodsName(keywords);
+            dto.setGoodIds(goodIds);
+        }
+        return dto;
+    }
+
     /**
      * @desc: 设置两位小数
      * @author: yzc
@@ -1723,4 +1737,51 @@ public class KwoTradeOrderService {
         }
         return amount.subtract(entrustAmount);
     }
+
+    public TableStatisticRes tradeOrderStatistic(TradeOrderListStatisticParam params) {
+        TableStatisticRes res = new TableStatisticRes();
+        TradeOrderListSelectDTO dto = buildSelectParam(params);
+        dto.setStatus(null);
+        List<TableTop> tableTops = kwoTradeOrderMapper.tradeOrderStatistic(dto, dto.getGoodIds(), LoginUserHolder.getAuthUserIdList());
+        Map<Integer, Integer> map = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        if (CollUtil.isNotEmpty(tableTops)) {
+            map = tableTops.stream().collect(Collectors.toMap
+                    (TableTop::getValue, TableTop::getTotal, (k1, k2) -> k2));
+        }
+        List<TableTop> list = new ArrayList<>();
+        int count = 0;
+        for (OrderStatusEnum e : OrderStatusEnum.getSortList()) {
+            Integer value = e.getCode();
+            int total = Objects.isNull(map.get(value)) ? 0 : map.get(value);
+            TableTop tableTop = new TableTop();
+            tableTop.setName(e.getMsg()).setValue(value).setTotal(total);
+            list.add(tableTop);
+            count = count + total;
+        }
+        TableTop all = new TableTop();
+        all.setName("全部").setTotal(count);
+        list.add(0, all);
+        TableBottom tableBottom = new TableBottom();
+        tableBottom.setTotal(count);
+        res.setTableTops(list).setTableBottom(tableBottom);
+        return res;
+    }
+
+    public String appStatistic(TradeOrderAppStatisticParam params) {
+
+        return null;
+    }
+
+    public List<TradeOrderListExport> export(TradeOrderListExportParam params) {
+
+        return null;
+    }
+
+    public String tradeOrderStatementList(TradeOrderStatementList params) {
+        return null;
+    }
+
+    public String tradeOrderContractList(TradeOrderContractParam params) {
+        return null;
+    }
 }

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

@@ -202,6 +202,120 @@
         ORDER BY a.create_time DESC
     </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
+        LEFT JOIN kwo_trade_order_address b ON a.id = b.t_order_id
+        AND b.address_type = "1" AND b.del_flag = 0
+        LEFT JOIN kwo_trade_order_address c ON a.id = c.t_order_id
+        AND c.address_type = "2" AND c.del_flag = 0
+        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
+        LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
+        LEFT JOIN kwo_trade_order_contract f ON a.id = f.t_order_id AND f.del_flag = 0
+        <where>
+            a.del_flag = 0
+            --数据权限匹配
+            <if test="query.isMain == 0">
+                and (
+                (a.ent_id = #{query.entId}
+                <if test="authUserIds != null and authUserIds.size() > 0">
+                    and a.create_by in
+                    <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                        #{authUserId}
+                    </foreach>
+                </if>
+                )or
+                (<if test="query.orderType == 1">
+                d.top_ent_id = #{query.entId}
+                and d.contacts_id in
+                <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                    #{authUserId}
+                </foreach>
+            </if>
+                <if test="query.orderType == 2">
+                    e.top_ent_id = #{query.entId}
+                    and e.contacts_id in
+                    <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
+                        #{authUserId}
+                    </foreach>
+                </if>)
+                )
+            </if>
+            <if test="query.isMain == 1">
+                and (
+                (a.ent_id = #{query.entId})
+                or
+                (<if test="query.orderType == 1">
+                d.top_ent_id = #{query.entId}
+            </if>
+                <if test="query.orderType == 2">
+                    e.top_ent_id = #{query.entId}
+                </if>)
+                )
+            </if>
+            --状态匹配
+            <if test="query.status != null">
+                and a.status =#{query.status}
+                <if test="query.status == 0">
+                    --          草稿状态只能创建订单的人能看
+                    and a.create_by = #{query.userId}
+                </if>
+            </if>
+            <if test="query.status == null">
+                --           非草稿状态or草稿状态且是当前人
+                and (
+                a.status != 0
+                or (a.status = 0 and a.create_by = #{query.userId})
+                )
+            </if>
+            --          关键词匹配
+            <if test="query.keywords != null and query.keywords != ''">
+                and (
+                a.t_order_no like concat('%', #{query.keywords}, '%')
+                or a.l_order_no like concat('%', #{query.keywords}, '%')
+                or d.firm_name like concat('%', #{query.keywords}, '%')
+                or e.firm_name like concat('%', #{query.keywords}, '%')
+                <if test="goodIds != null and goodIds.size() > 0">
+                    or g.goods_id in
+                    <foreach collection="goodIds" item="goodId" open="(" close=")" separator=",">
+                        #{goodId}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="query.createStartTime != null ">
+                and a.create_time &gt;= #{query.createStartTime}
+            </if>
+            <if test="query.createEndTime != null ">
+                and a.create_time &lt;= #{query.createEndTime}
+            </if>
+            <if test="query.loadAddressCode != null and query.loadAddressCode != ''">
+                and b.city_code LIKE CONCAT(#{query.loadAddressCode}
+                , '%')
+            </if>
+            <if test="query.unloadAddressCode != null and query.unloadAddressCode != ''">
+                and c.city_code LIKE CONCAT(#{query.unloadAddressCode}
+                , '%')
+            </if>
+            <if test="query.trading != null and query.trading != ''">
+                and a.trading =#{query.trading}
+            </if>
+            <if test="query.source != null and query.source != ''">
+                and a.source =#{query.source}
+            </if>
+            <if test="query.deliveryType != null and query.deliveryType != ''">
+                and a.delivery_type =#{query.deliveryType}
+            </if>
+            <if test="query.deliveryType != null and query.deliveryType != ''">
+                and a.delivery_type =#{query.deliveryType}
+            </if>
+        </where>
+        GROUP BY a.status
+    </select>
+
     <select id="getMaxOrderNoByDate" resultType="java.lang.String">
         SELECT MAX(t_order_no)
         FROM kwo_trade_order
@@ -253,4 +367,5 @@
           AND del_flag = 0
         GROUP BY DATE_FORMAT(create_time, #{item.dateFormat});
     </select>
+
 </mapper>