From 9e11e94f8a92a62695657bb2b3b59a1cf47058a5 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期五, 17 十月 2025 13:38:11 +0800
Subject: [PATCH] 大屏显示问题以及报备导出
---
ycl-server/src/main/java/com/ycl/utils/MongoUtil.java | 339 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 332 insertions(+), 7 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 4f88595..1fa737b 100644
--- a/ycl-server/src/main/java/com/ycl/utils/MongoUtil.java
+++ b/ycl-server/src/main/java/com/ycl/utils/MongoUtil.java
@@ -1,12 +1,20 @@
package com.ycl.utils;
+import com.ycl.platform.domain.query.DataCenterQuery;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.TextCriteria;
+import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.lang.reflect.Field;
+import java.util.ArrayList;
import java.util.Date;
+import java.util.List;
import java.util.Objects;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
/**
* mongo宸ュ叿绫�
@@ -17,16 +25,333 @@
public class MongoUtil {
/**
- * 鏋勯�犲叏鏂囩储寮曠殑鏉′欢
+ * 鏋勯�犳暟鎹腑蹇冩悳绱㈢殑鏉′欢
*
- * @param query
- * @param keyword
+ * @param params 鏁版嵁涓績璇锋眰鍙傛暟
+ * @param timeFiled 鏃堕棿瀛楁鏄摢涓�涓�
+ * @param dataAuth 鐐逛綅绫诲瀷锛歯ull 鎵�鏈� 1 閮ㄧ骇 2 鐪佸巺 3 閲嶇偣 4 閲嶇偣鎸囨尌 5 鏄惁鏂拌澶�
+ * @param likeFileds 浣跨敤like鏌ヨ鐨勫瓧娈�
*/
- public static void fullText(Query query, String keyword) {
- if (StringUtils.hasText(keyword)) {
- TextCriteria criteria = TextCriteria.forDefaultLanguage().matching(keyword);
- query.addCriteria(criteria);
+ public static Query getQuery(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);
+ }
+
+ // 灏嗘煡璇㈡潯浠禷nd璧锋潵
+ Criteria and = new Criteria();
+ 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);
+ }
+ 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);
+ }
+
+
+
+ /**
+ * 鏋勯�犳暟鎹腑蹇冩悳绱㈢殑鏉′欢
+ *
+ * @param query 鏌ヨ鏉′欢
+ * @param timeFiled 鏃堕棿瀛楁鏄摢涓�涓�
+ * @param params 璇锋眰鍙傛暟
+ */
+ public static void setPage(Query query,DataCenterQuery params, String timeFiled) {
+ // 鎺掑簭鍒嗛〉
+ 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