From f77a9d8f16bae6b4cf809891f037c038070e81ed Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期四, 19 六月 2025 17:12:50 +0800
Subject: [PATCH] 工单,数据中心用户查看数据的权限,合同考核每日,以及导出每日和按月

---
 ycl-server/src/main/java/com/ycl/utils/MongoUtil.java |  311 +++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 296 insertions(+), 15 deletions(-)

diff --git a/ycl-server/src/main/java/com/ycl/utils/MongoUtil.java b/ycl-server/src/main/java/com/ycl/utils/MongoUtil.java
index 0089c62..1fa737b 100644
--- a/ycl-server/src/main/java/com/ycl/utils/MongoUtil.java
+++ b/ycl-server/src/main/java/com/ycl/utils/MongoUtil.java
@@ -13,6 +13,8 @@
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 /**
  * mongo宸ュ叿绫�
@@ -26,40 +28,156 @@
      * 鏋勯�犳暟鎹腑蹇冩悳绱㈢殑鏉′欢
      *
      * @param params 鏁版嵁涓績璇锋眰鍙傛暟
-     * @param gbFiled 鍥芥爣鐮佸瓧娈垫槸鍝竴涓�
      * @param timeFiled 鏃堕棿瀛楁鏄摢涓�涓�
-     * @param gbList 鍥芥爣鐮�
+     * @param dataAuth 鐐逛綅绫诲瀷锛歯ull 鎵�鏈�  1 閮ㄧ骇  2 鐪佸巺  3 閲嶇偣  4 閲嶇偣鎸囨尌  5 鏄惁鏂拌澶�
+     * @param likeFileds 浣跨敤like鏌ヨ鐨勫瓧娈�
      */
-    public static Query getQuery(DataCenterQuery params, String gbFiled, String timeFiled, List<String> gbList) {
+    public static Query getQuery(DataCenterQuery params, String timeFiled, List<String> likeFileds, Integer dataAuth) {
         // 鍏抽敭瀛�
-        TextCriteria text = null;
-        if (StringUtils.hasText(params.getKeyword())) {
-            text = TextCriteria.forDefaultLanguage().matching(params.getKeyword());
+        List<Criteria> likeList = null;
+        if (StringUtils.hasText(params.getKeyword()) && !CollectionUtils.isEmpty(likeFileds)) {
+            // 杞箟
+            String keyword = Pattern.quote(params.getKeyword());
+            likeList = likeFileds.stream().map(filed -> {
+                return Criteria.where(filed).regex(".*?" + keyword + ".*");
+            }).collect(Collectors.toList());
+        }
+        // 灏唋ike瀛楁or璧锋潵
+        Criteria or = null;
+        if (! CollectionUtils.isEmpty(likeList)) {
+            or = new Criteria();
+            or.orOperator(likeList);
         }
 
-        Criteria in = null;
+        Criteria tag = null;
         // in
-        if (! CollectionUtils.isEmpty(gbList)) {
-            in = Criteria.where(gbFiled).in(gbList);
+        if (Objects.nonNull(dataAuth)) {
+            switch (dataAuth) {
+                case 1:
+                    tag = Criteria.where("deptTag").is(Boolean.TRUE);
+                    break;
+                case 2:
+                    tag = Criteria.where("provinceTag").is(Boolean.TRUE);
+                    break;
+                case 3:
+                    tag = Criteria.where("importantTag").is(Boolean.TRUE);
+                    break;
+                case 4:
+                    tag = Criteria.where("importantCommandImageTag").is(Boolean.TRUE);
+                    break;
+                case 5:
+                    tag = Criteria.where("newDevice").is(Boolean.TRUE);
+                    break;
+                default:
+                    break;
+            }
         }
 
         // 鏃堕棿
         Criteria time = Criteria.where(timeFiled).gte(params.getStartTime()).lte(params.getEndTime());
 
+        // 鏁版嵁绫诲瀷
+        Criteria dType = null;
+        if (params.getDataType().equals(1)) {
+            dType = Criteria.where("provinceTag").is(Boolean.TRUE);
+        }else if(params.getDataType().equals(2)){
+            dType = Criteria.where("deptTag").is(Boolean.TRUE);
+        }
+
         // 灏嗘煡璇㈡潯浠禷nd璧锋潵
         Criteria and = new Criteria();
         List<Criteria> qList = new ArrayList<>(3);
-        if (Objects.nonNull(text)) {
-            qList.add(Criteria.byExample(text));
-        }
-        if (Objects.nonNull(in)) {
-            qList.add(in);
-        }
         qList.add(time);
+        if (Objects.nonNull(tag)) {
+            qList.add(tag);
+        }
+        if (Objects.nonNull(or)) {
+            qList.add(or);
+        }
+        if (Objects.nonNull(dType)) {
+            qList.add(dType);
+        }
         and.andOperator(qList);
         // 杩斿洖鏌ヨ
         return Query.query(and);
     }
+
+
+    public static Query getQueryDataCenter(String deptCode, DataCenterQuery params, String timeFiled, List<String> likeFileds, Integer dataAuth,String fieldName) {
+        // 鍏抽敭瀛楁ā绯婃煡璇㈡潯浠�
+        List<Criteria> likeList = null;
+        if (StringUtils.hasText(params.getKeyword()) && !CollectionUtils.isEmpty(likeFileds)) {
+            // 杞箟鐗规畩瀛楃
+            String keyword = Pattern.quote(params.getKeyword());
+            likeList = likeFileds.stream()
+                    .map(filed -> Criteria.where(filed).regex(".*?" + keyword + ".*"))
+                    .collect(Collectors.toList());
+        }
+
+        // 灏嗘ā绯婃煡璇㈠瓧娈电敤OR杩炴帴
+        Criteria or = null;
+        if (!CollectionUtils.isEmpty(likeList)) {
+            or = new Criteria();
+            or.orOperator(likeList);
+        }
+
+        // 鏁版嵁鏉冮檺鏍囩鏉′欢
+        Criteria tag = null;
+        if (Objects.nonNull(dataAuth)) {
+            switch (dataAuth) {
+                case 1: tag = Criteria.where("deptTag").is(Boolean.TRUE); break;
+                case 2: tag = Criteria.where("provinceTag").is(Boolean.TRUE); break;
+                case 3: tag = Criteria.where("importantTag").is(Boolean.TRUE); break;
+                case 4: tag = Criteria.where("importantCommandImageTag").is(Boolean.TRUE); break;
+                case 5: tag = Criteria.where("newDevice").is(Boolean.TRUE); break;
+                default: break;
+            }
+        }
+
+        // 鏃堕棿鑼冨洿鏉′欢
+        Criteria time = Criteria.where(timeFiled).gte(params.getStartTime()).lte(params.getEndTime());
+
+        // 鏁版嵁绫诲瀷鏉′欢
+        Criteria dType = null;
+        if (params.getDataType().equals(1)) {
+            dType = Criteria.where("provinceTag").is(Boolean.TRUE);
+        } else if(params.getDataType().equals(2)) {
+            dType = Criteria.where("deptTag").is(Boolean.TRUE);
+        }
+        Criteria noStartsWithDept = null;
+        if("no".equals(fieldName)){
+            // 鏂板锛歯o瀛楁浠eptCode寮�澶寸殑鏉′欢
+
+            if (StringUtils.hasText(deptCode)) {
+                // 浣跨敤姝e垯琛ㄨ揪寮忓尮閰嶅紑澶达紝骞惰浆涔夌壒娈婂瓧绗�
+                noStartsWithDept = Criteria.where("no").regex("^" + Pattern.quote(deptCode));
+            }
+        }else if ("deviceNo".equals(fieldName)){
+            // 鏂板锛歯o瀛楁浠eptCode寮�澶寸殑鏉′欢
+            if (StringUtils.hasText(deptCode)) {
+                // 浣跨敤姝e垯琛ㄨ揪寮忓尮閰嶅紑澶达紝骞惰浆涔夌壒娈婂瓧绗�
+                noStartsWithDept = Criteria.where("deviceNo").regex("^" + Pattern.quote(deptCode));
+            }
+        }
+
+
+        // 灏嗘墍鏈夋潯浠剁敤AND杩炴帴
+        Criteria and = new Criteria();
+        List<Criteria> criteriaList = new ArrayList<>();
+        criteriaList.add(time);  // 鏃堕棿鏉′欢蹇呴』瀛樺湪
+
+        // 鍙�夋潯浠�
+        if (Objects.nonNull(tag)) criteriaList.add(tag);
+        if (Objects.nonNull(or)) criteriaList.add(or);
+        if (Objects.nonNull(dType)) criteriaList.add(dType);
+        if (Objects.nonNull(noStartsWithDept)) criteriaList.add(noStartsWithDept);  // 鏂板鏉′欢
+
+        and.andOperator(criteriaList);
+
+        return Query.query(and);
+    }
+
+
 
     /**
      * 鏋勯�犳暟鎹腑蹇冩悳绱㈢殑鏉′欢
@@ -73,4 +191,167 @@
         query.with(Sort.by(Sort.Order.desc(timeFiled))).skip(params.getSkipNum()).limit(Math.toIntExact(params.getPageSize()));
     }
 
+    /**
+     * 鏋勯�犳暟鎹腑蹇冩悳绱㈢殑鏉′欢
+     *
+     * @param query 鏌ヨ鏉′欢
+     * @param timeFiled 鏃堕棿瀛楁鏄摢涓�涓�
+     * @param params 璇锋眰鍙傛暟
+     */
+    public static void setNoPage(Query query,DataCenterQuery params, String timeFiled) {
+        // 鎺掑簭鍒嗛〉
+        query.with(Sort.by(Sort.Order.desc(timeFiled))).skip(params.getSkipNum());
+    }
+    /**
+     * 鏋勯�犳暟鎹腑蹇冩悳绱㈢殑鏉′欢
+     *
+     * @param params 鏁版嵁涓績璇锋眰鍙傛暟
+     * @param timeFiled 鏃堕棿瀛楁鏄摢涓�涓�
+     * @param dataAuth 鐐逛綅绫诲瀷锛歯ull 鎵�鏈�  1 閮ㄧ骇  2 鐪佸巺  3 閲嶇偣  4 閲嶇偣鎸囨尌  5 鏄惁鏂拌澶�
+     * @param likeFileds 浣跨敤like鏌ヨ鐨勫瓧娈�
+     */
+    public static List<Criteria> getAndCriteria(DataCenterQuery params, String timeFiled, List<String> likeFileds, Integer dataAuth) {
+        // 鍏抽敭瀛�
+        List<Criteria> likeList = null;
+        if (StringUtils.hasText(params.getKeyword()) && !CollectionUtils.isEmpty(likeFileds)) {
+            // 杞箟
+            String keyword = Pattern.quote(params.getKeyword());
+            likeList = likeFileds.stream().map(filed -> {
+                return Criteria.where(filed).regex(".*?" + keyword + ".*");
+            }).collect(Collectors.toList());
+        }
+        // 灏唋ike瀛楁or璧锋潵
+        Criteria or = null;
+        if (! CollectionUtils.isEmpty(likeList)) {
+            or = new Criteria();
+            or.orOperator(likeList);
+        }
+
+        Criteria tag = null;
+        // in
+        if (Objects.nonNull(dataAuth)) {
+            switch (dataAuth) {
+                case 1:
+                    tag = Criteria.where("deptTag").is(Boolean.TRUE);
+                    break;
+                case 2:
+                    tag = Criteria.where("provinceTag").is(Boolean.TRUE);
+                    break;
+                case 3:
+                    tag = Criteria.where("importantTag").is(Boolean.TRUE);
+                    break;
+                case 4:
+                    tag = Criteria.where("importantCommandImageTag").is(Boolean.TRUE);
+                    break;
+                case 5:
+                    tag = Criteria.where("newDevice").is(Boolean.TRUE);
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        // 鏃堕棿
+        Criteria time = Criteria.where(timeFiled).gte(params.getStartTime()).lte(params.getEndTime());
+
+        // 鏁版嵁绫诲瀷
+        Criteria dType = null;
+        if (params.getDataType().equals(1)) {
+            dType = Criteria.where("provinceTag").is(Boolean.TRUE);
+        }else if(params.getDataType().equals(2)){
+            dType = Criteria.where("deptTag").is(Boolean.TRUE);
+        }
+
+        List<Criteria> qList = new ArrayList<>(3);
+        qList.add(time);
+        if (Objects.nonNull(tag)) {
+            qList.add(tag);
+        }
+        if (Objects.nonNull(or)) {
+            qList.add(or);
+        }
+        if (Objects.nonNull(dType)) {
+            qList.add(dType);
+        }
+
+        // 杩斿洖鏌ヨ
+        return qList;
+    }
+
+    public static List<Criteria> getAndCriteriaDateCenter(String deptCode,DataCenterQuery params, String timeFiled, List<String> likeFileds, Integer dataAuth) {
+        // 鍏抽敭瀛�
+        List<Criteria> likeList = null;
+        if (StringUtils.hasText(params.getKeyword()) && !CollectionUtils.isEmpty(likeFileds)) {
+            // 杞箟
+            String keyword = Pattern.quote(params.getKeyword());
+            likeList = likeFileds.stream().map(filed -> {
+                return Criteria.where(filed).regex(".*?" + keyword + ".*");
+            }).collect(Collectors.toList());
+        }
+        // 灏唋ike瀛楁or璧锋潵
+        Criteria or = null;
+        if (! CollectionUtils.isEmpty(likeList)) {
+            or = new Criteria();
+            or.orOperator(likeList);
+        }
+
+        Criteria tag = null;
+        // in
+        if (Objects.nonNull(dataAuth)) {
+            switch (dataAuth) {
+                case 1:
+                    tag = Criteria.where("deptTag").is(Boolean.TRUE);
+                    break;
+                case 2:
+                    tag = Criteria.where("provinceTag").is(Boolean.TRUE);
+                    break;
+                case 3:
+                    tag = Criteria.where("importantTag").is(Boolean.TRUE);
+                    break;
+                case 4:
+                    tag = Criteria.where("importantCommandImageTag").is(Boolean.TRUE);
+                    break;
+                case 5:
+                    tag = Criteria.where("newDevice").is(Boolean.TRUE);
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        // 鏃堕棿
+        Criteria time = Criteria.where(timeFiled).gte(params.getStartTime()).lte(params.getEndTime());
+
+        // 鏁版嵁绫诲瀷
+        Criteria dType = null;
+        if (params.getDataType().equals(1)) {
+            dType = Criteria.where("provinceTag").is(Boolean.TRUE);
+        }else if(params.getDataType().equals(2)){
+            dType = Criteria.where("deptTag").is(Boolean.TRUE);
+        }
+        // 鏂板锛歯o瀛楁浠eptCode寮�澶寸殑鏉′欢
+        Criteria noStartsWithDept = null;
+        if (StringUtils.hasText(deptCode)) {
+            // 浣跨敤姝e垯琛ㄨ揪寮忓尮閰嶅紑澶达紝骞惰浆涔夌壒娈婂瓧绗�
+            noStartsWithDept = Criteria.where("deviceNo").regex("^" + Pattern.quote(deptCode));
+        }
+
+        List<Criteria> qList = new ArrayList<>(4);
+
+
+        qList.add(time);
+        if (Objects.nonNull(tag)) {
+            qList.add(tag);
+        }
+        if (Objects.nonNull(or)) {
+            qList.add(or);
+        }
+        if (Objects.nonNull(dType)) {
+            qList.add(dType);
+        }
+        if (Objects.nonNull(noStartsWithDept)) qList.add(noStartsWithDept);
+
+        // 杩斿洖鏌ヨ
+        return qList;
+    }
 }

--
Gitblit v1.8.0