Преглед на файлове

订单列表条件查询优化

yzc преди 2 години
родител
ревизия
e7609b79a9
променени са 1 файла, в които са добавени 35 реда и са изтрити 66 реда
  1. 35 66
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwOrderService.java

+ 35 - 66
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwOrderService.java

@@ -112,88 +112,75 @@ public class KwOrderService {
      */
     private Query getQuery(TradeOrderListStatisticParam params, Boolean isStatistic) {
         Long entId = LoginUserHolder.getEntId();
+        Long userId = LoginUserHolder.getUserId();
         Query query = new Query();
-        Criteria andCriteria = new Criteria();
-        andCriteria.and("delFlag").is(0);
-        if (Objects.equals(params.getOrderType(), 1)) {
-            //采购订单
-            andCriteria.and("procureTopEntId").is(entId);
-        } else {
-            //销售订单
-            andCriteria.and("supplyTopEntId").is(entId);
-        }
+        Criteria criteria = new Criteria();
+        criteria.and("delFlag").is(0);
+        String topEnt = Objects.equals(params.getOrderType(), 1) ? "procureTopEntId" : "supplyTopEntId";
+        criteria.and(topEnt).is(entId);
         //日期范围
         if (Objects.nonNull(params.getStartCreateTime()) && Objects.nonNull(params.getEndCreateTime())) {
-            andCriteria.and("createTime").gte(params.getStartCreateTime()).lte(DateUtil.offsetDay(params.getEndCreateTime(), 1));
+            criteria.and("createTime").gte(params.getStartCreateTime()).lte(DateUtil.offsetDay(params.getEndCreateTime(), 1));
         } else if (Objects.nonNull(params.getStartCreateTime())) {
-            andCriteria.and("createTime").gte(params.getStartCreateTime());
+            criteria.and("createTime").gte(params.getStartCreateTime());
         } else if (Objects.nonNull(params.getEndCreateTime())) {
-            andCriteria.and("createTime").lte(DateUtil.offsetDay(params.getEndCreateTime(), 1));
+            criteria.and("createTime").lte(DateUtil.offsetDay(params.getEndCreateTime(), 1));
         }
         //装卸货地址
         String loadCode = params.getShippingAddressCode();
         if (StringUtils.isNotBlank(loadCode)) {
             switch (params.getShippingAddressLevel()) {
-                case 1 -> andCriteria.and("loadCityCode")
+                case 1 -> criteria.and("loadCityCode")
                         .regex(Pattern.compile("^" + loadCode.substring(0, 2) + ".*$", Pattern.CASE_INSENSITIVE));
-                case 2 -> andCriteria.and("loadCityCode")
+                case 2 -> criteria.and("loadCityCode")
                         .regex(Pattern.compile("^" + loadCode.substring(0, 4) + ".*$", Pattern.CASE_INSENSITIVE));
-                case 3 -> andCriteria.and("loadCityCode").is(loadCode);
+                case 3 -> criteria.and("loadCityCode").is(loadCode);
             }
         }
         String unloadCode = params.getUnloadingAddressCode();
         if (StringUtils.isNotBlank(unloadCode)) {
             switch (params.getUnloadingAddressLevel()) {
-                case 1 -> andCriteria.and("unloadCityCode")
+                case 1 -> criteria.and("unloadCityCode")
                         .regex(Pattern.compile("^" + unloadCode.substring(0, 2) + ".*$", Pattern.CASE_INSENSITIVE));
-                case 2 -> andCriteria.and("unloadCityCode")
+                case 2 -> criteria.and("unloadCityCode")
                         .regex(Pattern.compile("^" + unloadCode.substring(0, 4) + ".*$", Pattern.CASE_INSENSITIVE));
-                case 3 -> andCriteria.and("unloadCityCode").is(unloadCode);
+                case 3 -> criteria.and("unloadCityCode").is(unloadCode);
             }
         }
         //提货方式
         if (StringUtils.isNotBlank(params.getPickupType())) {
-            andCriteria.and("pickupType").is(params.getPickupType());
+            criteria.and("pickupType").is(params.getPickupType());
         }
         //交易方式
         if (StringUtils.isNotBlank(params.getTrading())) {
-            andCriteria.and("trading").is(params.getTrading());
+            criteria.and("trading").is(params.getTrading());
         }
         //交付类型
         if (StringUtils.isNotBlank(params.getDeliveryType())) {
-            andCriteria.and("deliveryType").is(params.getDeliveryType());
+            criteria.and("deliveryType").is(params.getDeliveryType());
         }
         //下单方式
         if (StringUtils.isNotBlank(params.getSource())) {
-            andCriteria.and("source").is(params.getSource());
+            criteria.and("source").is(params.getSource());
         }
-        List<Criteria> orCriteriaList = new ArrayList<>();
         //订单状态
         if (Objects.nonNull(params.getStatus()) && !isStatistic) {
-            andCriteria.and("status").is(params.getStatus());
-            if (Objects.equals(params.getStatus(), Integer.valueOf(DictEnum.TORDER_STATUS_0.getValue()))) {
-                //草稿状态只能创建订单的企业能看
-                andCriteria.and("entId").is(entId);
+            criteria.and("status").is(params.getStatus());
+            if (Objects.equals(params.getStatus(), 0)) {
+                //草稿状态只能创建订单的能看
+                criteria.and("createBy").is(userId);
             }
         } else {
-            //非草稿状态
-            andCriteria.and("status").ne(Integer.valueOf(DictEnum.TORDER_STATUS_0.getValue()));
-            //or草稿状态且是当前企业
-            orCriteriaList.add(Criteria.where("entId").is(entId).and("status")
-                    .is(Integer.valueOf(DictEnum.TORDER_STATUS_0.getValue())).and("delFlag").is(0));
+            //非草稿状态or草稿状态且是当前人且一级企业匹配
+            criteria.orOperator(Criteria.where("status").ne(0),
+                    Criteria.where("status").is(0).and("createBy").is(userId));
+
         }
-        orCriteriaList.add(andCriteria);
         //关键字模糊匹配
         if (StringUtils.isNotBlank(params.getKeywords())) {
             Pattern pattern = Pattern.compile("^.*" + params.getKeywords() + ".*$", Pattern.CASE_INSENSITIVE);
-            orCriteriaList.add(Criteria.where("tOrderNo").regex(pattern).and("delFlag").is(0));
-            orCriteriaList.add(Criteria.where("procureFirmName").regex(pattern).and("delFlag").is(0));
-            orCriteriaList.add(Criteria.where("supplyFirmName").regex(pattern).and("delFlag").is(0));
-            orCriteriaList.add(Criteria.where("goodsName").regex(pattern).and("delFlag").is(0));
-        }
-        Criteria criteria = new Criteria();
-        if (CollectionUtils.isNotEmpty(orCriteriaList)) {
-            criteria.orOperator(orCriteriaList);
+            criteria.orOperator(Criteria.where("tOrderNo").regex(pattern), Criteria.where("procureFirmName").regex(pattern),
+                    Criteria.where("supplyFirmName").regex(pattern), Criteria.where("goodsName").regex(pattern));
         }
         return query.addCriteria(criteria);
     }
@@ -243,14 +230,8 @@ public class KwOrderService {
             List<Long> ids = StringUtils.splitStrToList(params.getIds(), ",", Long.class);
             Long entId = LoginUserHolder.getEntId();
             Criteria criteria = new Criteria();
-            criteria.and("tOrderId").in(ids).and("delFlag").is(0);
-            if (Objects.equals(params.getOrderType(), 1)) {
-                //采购订单
-                criteria.and("procureTopEntId").is(entId);
-            } else {
-                //销售订单
-                criteria.and("supplyTopEntId").is(entId);
-            }
+            String topEnt = Objects.equals(params.getOrderType(), 1) ? "procureTopEntId" : "supplyTopEntId";
+            criteria.and("tOrderId").in(ids).and(topEnt).is(entId).and("delFlag").is(0);
             query.addCriteria(criteria);
         } else {
             query = getQuery(params, false);
@@ -294,14 +275,8 @@ public class KwOrderService {
         Query query = new Query();
         Long entId = LoginUserHolder.getEntId();
         Criteria criteria = new Criteria();
-        criteria.and("status").is(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue())).and("delFlag").is(0);
-        if (Objects.equals(params.getOrderType(), 1)) {
-            //采购订单
-            criteria.and("procureTopEntId").is(entId);
-        } else {
-            //销售订单
-            criteria.and("supplyTopEntId").is(entId);
-        }
+        String topEnt = Objects.equals(params.getOrderType(), 1) ? "procureTopEntId" : "supplyTopEntId";
+        criteria.and(topEnt).is(entId).and("status").is(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue())).and("delFlag").is(0);
         //采购企业
         if (Objects.nonNull(params.getProcureEntId())) {
             criteria.and("procureEntId").is(params.getProcureEntId());
@@ -338,18 +313,12 @@ public class KwOrderService {
         Long entId = LoginUserHolder.getEntId();
         Query query = new Query();
         Criteria criteria = new Criteria();
-        if (Objects.equals(params.getOrderType(), 1)) {
-            //采购订单
-            criteria.and("procureTopEntId").is(entId);
-        } else {
-            //销售订单
-            criteria.and("supplyTopEntId").is(entId);
-        }
+        String topEnt = Objects.equals(params.getOrderType(), 1) ? "procureTopEntId" : "supplyTopEntId";
         List<Long> ids = StringUtils.splitStrToList(params.getContractIds(), ",", Long.class);
-        criteria.and("contractId").in(ids).and("delFlag").is(0);
+        criteria.and("contractId").in(ids).and(topEnt).is(entId).and("delFlag").is(0);
         query.addCriteria(criteria);
         long count = mongoTemplate.count(query, SckwTradeOrder.class);
-        Sort sort = Sort.by(Sort.Direction.DESC, "contractId","createTime");
+        Sort sort = Sort.by(Sort.Direction.DESC, "contractId", "createTime");
         SpringDataPageAble pageAble = new SpringDataPageAble(params.getPage(), params.getPageSize(), sort);
         query.with(pageAble);
         List<SckwTradeOrder> list = mongoTemplate.find(query, SckwTradeOrder.class);