From cedaeeed6d401aefebf93ea6ea21cc9e06d5f5db Mon Sep 17 00:00:00 2001
From: zqy <2522236926@qq.com>
Date: 星期二, 02 十二月 2025 10:36:48 +0800
Subject: [PATCH] 新增搜索 模块+同伴+时间
---
ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhang/EsSearchController.java | 29 +++++
zhang-content/src/main/java/com/ruoyi/service/impl/ZfEconomyServiceImpl.java | 37 +++++++
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/EsModel.java | 20 ++--
zhang-content/src/main/java/com/ruoyi/service/ModuleSearchable.java | 25 +++++
zhang-content/src/main/java/com/ruoyi/service/impl/InterfaceBasedSearchRouter.java | 137 +++++++++++++++++++++++++++
zhang-content/src/main/java/com/ruoyi/domain/ZfEconomy.java | 8 +
ruoyi-admin/src/main/resources/application.yml | 10 +
7 files changed, 252 insertions(+), 14 deletions(-)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhang/EsSearchController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhang/EsSearchController.java
index 6826295..3198f1a 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhang/EsSearchController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhang/EsSearchController.java
@@ -3,10 +3,15 @@
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.EsModel;
import com.ruoyi.service.EsService;
+import com.ruoyi.service.ZfEconomyService;
+import com.ruoyi.service.impl.InterfaceBasedSearchRouter;
+import com.ruoyi.service.impl.ZfEconomyServiceImpl;
+import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.websocket.server.PathParam;
+import java.util.Date;
import java.util.List;
/**
@@ -21,6 +26,12 @@
@Resource
EsService esService;
+
+ @Resource
+ InterfaceBasedSearchRouter interfaceBasedSearchRouter;
+
+ @Resource
+ ZfEconomyServiceImpl zfEconomyService;
@GetMapping()
public AjaxResult search(@PathParam("keyword") String keyword){
@@ -39,4 +50,22 @@
List<EsModel> modelList = esService.getAll();
return AjaxResult.success(modelList);
}
+
+ @GetMapping("/companion/{moduleCode}")
+ public AjaxResult getAllbyCAY( @PathVariable("moduleCode") String moduleCode,@RequestParam(value = "companion", required = false) String companion,
+ @RequestParam(value = "happenStartTime", required = false)
+ @DateTimeFormat(pattern = "yyyy-MM-dd") Date happenStartTime,
+ @RequestParam(value = "happenEndTime", required = false)
+ @DateTimeFormat(pattern = "yyyy-MM-dd") Date happenEndTime){
+ System.out.println("[[[[[["+moduleCode);
+ System.out.println("[[[[[["+companion);
+
+
+ System.out.println("[[[[[["+happenStartTime);
+ System.out.println("[[[[[["+happenEndTime);
+
+ return interfaceBasedSearchRouter.routeSearch(moduleCode,companion,happenStartTime,happenEndTime);
+ }
+
+
}
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 7949ae7..739c6ba 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -65,7 +65,7 @@
messages:
# 鍥介檯鍖栬祫婧愭枃浠惰矾寰�
basename: i18n/messages
- profiles:
+ profiles:
active: druid
# 鏂囦欢涓婁紶
servlet:
@@ -120,6 +120,10 @@
mail.smtp.ssl.trust: smtp.qq.com
mail.smtp.ssl.protocols: TLSv1.2
default-encoding: UTF-8
+ # 鐗瑰畾妯″潡鐨勭紦瀛樿繃鏈熸椂闂�
+ cache:
+ cache-names:
+ economy_search: 1800 # economy_search缂撳瓨1灏忔椂
# token閰嶇疆
token:
@@ -129,7 +133,7 @@
secret: abcdefghijklmnopqrstuvwxyz
# 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛�
expireTime: 100
-
+
# MyBatis閰嶇疆
mybatis-plus:
# 鎼滅储鎸囧畾鍖呭埆鍚�
@@ -140,7 +144,7 @@
# configLocation: classpath:mybatis/mybatis-config.xml
# PageHelper鍒嗛〉鎻掍欢
-pagehelper:
+pagehelper:
helperDialect: mysql
supportMethodsArguments: true
params: count=countSql
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/EsModel.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/EsModel.java
index 5a93b8c..0be4d6e 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/EsModel.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/EsModel.java
@@ -105,17 +105,17 @@
@Field(index = true,type = FieldType.Text,analyzer = "ik_max_word")
private int by13;
- /** 澶囩敤14 */
- @Field(index = true,type = FieldType.Date,analyzer = "ik_max_wor")
- private Date by14;
+// /** 澶囩敤14 */
+// @Field(index = true,type = FieldType.Date,analyzer = "ik_max_wor")
+// private Date by14;
+//
+// /** 澶囩敤15 */
+// @Field(index = true,type = FieldType.Date,analyzer = "ik_max_wor")
+// private Date by15;
- /** 澶囩敤15 */
- @Field(index = true,type = FieldType.Date,analyzer = "ik_max_wor")
- private Date by15;
-
- /** 澶囩敤16 */
- @Field(index = true,type = FieldType.Date,analyzer = "ik_max_wor ")
- private Timestamp by16;
+// /** 澶囩敤16 */
+// @Field(index = true,type = FieldType.Date,analyzer = "ik_max_wor")
+// private Timestamp by16;
}
diff --git a/zhang-content/src/main/java/com/ruoyi/domain/ZfEconomy.java b/zhang-content/src/main/java/com/ruoyi/domain/ZfEconomy.java
index 0d26bba..11c20ec 100644
--- a/zhang-content/src/main/java/com/ruoyi/domain/ZfEconomy.java
+++ b/zhang-content/src/main/java/com/ruoyi/domain/ZfEconomy.java
@@ -8,6 +8,7 @@
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import lombok.ToString;
+import org.springframework.data.annotation.Transient;
import java.io.Serializable;
import java.time.LocalDate;
@@ -118,4 +119,11 @@
private String cosKey;
+ /**
+ * 鍙備笌鑰�
+ */
+ private String companion;
+
+// @TableField(exist = false)
+// private Integer year;
}
diff --git a/zhang-content/src/main/java/com/ruoyi/service/ModuleSearchable.java b/zhang-content/src/main/java/com/ruoyi/service/ModuleSearchable.java
new file mode 100644
index 0000000..c9f6876
--- /dev/null
+++ b/zhang-content/src/main/java/com/ruoyi/service/ModuleSearchable.java
@@ -0,0 +1,25 @@
+package com.ruoyi.service;
+
+import com.ruoyi.domain.ZfEconomy;
+
+import java.util.Date;
+import java.util.List;
+
+public interface ModuleSearchable {
+ /**
+ * 鑾峰彇鏀寔鐨勬ā鍧楃紪鐮�
+ */
+ String getModuleCode();
+
+ /**
+ * 鎼滅储鏂规硶
+ */
+ List<?> search(String companion, Date happenStartTime,Date happenEndTime);
+
+ /**
+ * 妯″潡鍚嶇О
+ */
+ default String getModuleName() {
+ return getModuleCode();
+ }
+}
diff --git a/zhang-content/src/main/java/com/ruoyi/service/impl/InterfaceBasedSearchRouter.java b/zhang-content/src/main/java/com/ruoyi/service/impl/InterfaceBasedSearchRouter.java
new file mode 100644
index 0000000..b4ffc53
--- /dev/null
+++ b/zhang-content/src/main/java/com/ruoyi/service/impl/InterfaceBasedSearchRouter.java
@@ -0,0 +1,137 @@
+package com.ruoyi.service.impl;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysMenu;
+import com.ruoyi.service.ModuleSearchable;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.logging.Log;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+@Service
+@Slf4j
+public class InterfaceBasedSearchRouter {
+
+ private final Map<String, ModuleSearchable> moduleSearchMap;
+
+ /**
+ * 鑷姩鏀堕泦鎵�鏈夊疄鐜癕oduleSearchable鎺ュ彛鐨凚ean
+ */
+ @Autowired
+ public InterfaceBasedSearchRouter(List<ModuleSearchable> searchServices) {
+ this.moduleSearchMap = searchServices.stream()
+ .collect(Collectors.toMap(
+ ModuleSearchable::getModuleCode,
+ Function.identity(),
+ (existing, replacement) -> {
+ log.warn("鍙戠幇閲嶅鐨勬ā鍧楃紪鐮�: {}, 浣跨敤鍏堟敞鍐岀殑鏈嶅姟", existing.getModuleCode());
+ return existing;
+ }
+ ));
+
+ log.info("宸叉敞鍐屾悳绱㈡ā鍧�: {}", moduleSearchMap.keySet());
+ }
+
+ /**
+ * 閫氱敤鐨勮矾鐢辨悳绱㈣姹傦紙鏀寔涓嶅悓鍙傛暟绫诲瀷锛�
+ */
+ /**
+ * 閫氱敤鐨勮矾鐢辨悳绱㈣姹�
+ */
+ public AjaxResult routeSearch(String moduleCode, Object... args) {
+ log.info("璺敱鎼滅储: moduleCode={}, args={}", moduleCode, Arrays.toString(args));
+
+ ModuleSearchable searchService = moduleSearchMap.get(moduleCode);
+ if (searchService == null) {
+ String availableModules = String.join(", ", moduleSearchMap.keySet());
+ return AjaxResult.error("涓嶆敮鎸佺殑鎼滅储妯″潡: " + moduleCode + "銆傚彲鐢ㄦā鍧�: [" + availableModules + "]");
+ }
+
+ try {
+ // 鏍规嵁鍙傛暟鏁伴噺杩涜璺敱
+ if (args.length == 3) {
+ return handleFourArgs(searchService, args);
+ } else {
+ return AjaxResult.error("涓嶆敮鎸佺殑鍙傛暟鏁伴噺锛岄渶瑕�3涓弬鏁帮紝瀹為檯鏀跺埌: " + args.length);
+ }
+ } catch (Exception e) {
+ log.error("鎼滅储鎵ц澶辫触: moduleCode={}", moduleCode, e);
+ return AjaxResult.error("鎼滅储鎵ц澶辫触: " + e.getMessage());
+ }
+ }
+
+ /**
+ * 澶勭悊3涓弬鏁扮殑鎯呭喌锛坈ompanion + happenStartTime + happenEndTime锛�
+ */
+ private AjaxResult handleFourArgs(ModuleSearchable searchService, Object[] args) {
+ String companion = null;
+ Date happenStartTime = null;
+ Date happenEndTime = null;
+
+ // 澶勭悊companion鍙傛暟
+ if (args[0] instanceof String) {
+ companion = (String) args[0];
+ } else if (args[0] != null) {
+ companion = args[0].toString();
+ }
+
+ // 澶勭悊鏃堕棿鍙傛暟
+ if (args[1] instanceof Date) {
+ happenStartTime = (Date) args[1];
+ }
+
+ if (args[2] instanceof Date) {
+ happenEndTime = (Date) args[2];
+ }
+
+ // 鍒ゆ柇鎼滅储绫诲瀷
+ boolean hasTimeRange = happenStartTime != null && happenEndTime != null;
+
+ List<?> result;
+ if (hasTimeRange) {
+ // 鏈夋椂闂磋寖鍥达細鎵ц鏃堕棿鑼冨洿鎼滅储
+ log.info("鎵ц鏃堕棿鑼冨洿鎼滅储: companion={}, startTime={}, endTime={}",
+ companion, happenStartTime, happenEndTime);
+ result = searchService.search(companion, happenStartTime, happenEndTime);
+ } else {
+ // 鏃犳椂闂磋寖鍥达細鍙寜companion鎼滅储
+ log.info("鎵цcompanion鎼滅储: companion={}, 鏃堕棿鑼冨洿涓虹┖", companion);
+ result = searchService.search(companion, null, null);
+ }
+
+ return AjaxResult.success("鎼滅储鎴愬姛", result);
+ }
+//
+// /**
+// * 鑾峰彇鎵�鏈夊彲鎼滅储鐨勬ā鍧椾俊鎭�
+// */
+// public List<SysMenu> getAvailableModules() {
+// return moduleSearchMap.values().stream()
+// .map(service -> SysMenu.builder()
+// .moduleCode(service.getModuleCode())
+// .moduleName(service.getModuleName())
+// .build())
+// .collect(Collectors.toList());
+// }
+
+ /**
+ * 妫�鏌ユā鍧楁槸鍚︽敮鎸佹悳绱�
+ */
+ public boolean supports(String moduleCode) {
+ return moduleSearchMap.containsKey(moduleCode);
+ }
+
+ /**
+ * 鑾峰彇妯″潡鏈嶅姟瀹炰緥
+ */
+ public ModuleSearchable getModuleService(String moduleCode) {
+ return moduleSearchMap.get(moduleCode);
+ }
+}
diff --git a/zhang-content/src/main/java/com/ruoyi/service/impl/ZfEconomyServiceImpl.java b/zhang-content/src/main/java/com/ruoyi/service/impl/ZfEconomyServiceImpl.java
index 0b82238..4ed3f1c 100644
--- a/zhang-content/src/main/java/com/ruoyi/service/impl/ZfEconomyServiceImpl.java
+++ b/zhang-content/src/main/java/com/ruoyi/service/impl/ZfEconomyServiceImpl.java
@@ -18,6 +18,8 @@
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@@ -40,7 +42,7 @@
*/
@Service
@Slf4j
-public class ZfEconomyServiceImpl extends ServiceImpl<ZfEconomyMapper, ZfEconomy> implements ZfEconomyService {
+public class ZfEconomyServiceImpl extends ServiceImpl<ZfEconomyMapper, ZfEconomy> implements ZfEconomyService,ModuleSearchable{
@Resource
ZfEconomyService zfEconomyService;
@@ -76,8 +78,15 @@
lqw.like(StringUtils.isNotEmpty(zfEconomy.getUsePeople()),ZfEconomy::getUsePeople,zfEconomy.getUsePeople());
lqw.like(StringUtils.isNotEmpty(zfEconomy.getBalance()),ZfEconomy::getBalance,zfEconomy.getBalance());
lqw.like(StringUtils.isNotEmpty(zfEconomy.getRemark()),ZfEconomy::getRemark,zfEconomy.getRemark());
+ lqw.like(StringUtils.isNotEmpty(zfEconomy.getCompanion()),ZfEconomy::getCompanion,zfEconomy.getCompanion());
+// if (zfEconomy.getYear() != 0) {
+// System.out.println("pppppppppppppppppppppppppppppppppppppppppppppppppppp"+zfEconomy.getYear());
+// lqw.apply("YEAR(happen_time) = {0}", zfEconomy.getYear());
+// }
lqw.eq(zfEconomy.getHappenTime() != null, ZfEconomy::getHappenTime, zfEconomy.getHappenTime());
lqw.between(zfEconomy.getHappenStartTime() != null && zfEconomy.getHappenEndTime() != null, ZfEconomy::getHappenTime, zfEconomy.getHappenStartTime(), zfEconomy.getHappenEndTime());
+ System.out.println("鏌ヨ鏉′欢: " + lqw.getCustomSqlSegment());
+
return lqw;
}
@@ -425,6 +434,9 @@
@Override
public AjaxResult addData(ZfEconomy zfEconomy) {
+ //娓呴櫎redis涓瓃fEconomy鐨勭紦瀛�
+ clearAllCache();
+
ZInfoUser myself = zInfoUserService.getMyself();
Long familyId = myself.getFamilyId();
@@ -479,6 +491,9 @@
@Override
public AjaxResult updateData(ZfEconomy zfEconomy) {
+ //娓呴櫎redis涓瓃fEconomy鐨勭紦瀛�
+ clearAllCache();
+
ZInfoUser myself = zInfoUserService.getMyself();
Long familyId = myself.getFamilyId();
@@ -600,4 +615,24 @@
}
+ @Override
+ public String getModuleCode() {
+ return "2045";
+ }
+
+ @Override
+ @Cacheable(value = "economy_search", key = "T(String).format('2045_%s_%s_%s',#companion != null ? #companion : 'null',#happenStartTime != null ? #happenStartTime.getTime() : 0,#happenEndTime != null ? #happenEndTime.getTime() : 0)")
+ public List<?> search(String companion, Date happenStartTime,Date happenEndTime) {
+ ZfEconomy zfEconomy = new ZfEconomy();
+ zfEconomy.setCompanion(companion);
+ zfEconomy.setHappenStartTime(happenStartTime);
+ zfEconomy.setHappenEndTime(happenEndTime);
+ System.out.println("ssssss"+zfEconomy);
+ return selectByCondition(zfEconomy);
+ }
+
+ @CacheEvict(value = "economy_search", allEntries = true)
+ public void clearAllCache() {
+ System.out.println("娓呴櫎鎵�鏈夌粡娴庢悳绱㈢紦瀛�");
+ }
}
--
Gitblit v1.9.1