云联一号 há 1 semana atrás
pai
commit
e768ff8e6e

+ 2 - 0
fs-admin-saas/src/main/java/com/fs/config/RedissonConfig.java

@@ -3,6 +3,7 @@ package com.fs.config;
 import org.redisson.Redisson;
 import org.redisson.Redisson;
 import org.redisson.api.RedissonClient;
 import org.redisson.api.RedissonClient;
 import org.redisson.config.Config;
 import org.redisson.config.Config;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
@@ -12,6 +13,7 @@ import org.springframework.context.annotation.Configuration;
  * 排除RedissonAutoConfiguration后,避免Redisson接管RedisTemplate的连接工厂。
  * 排除RedissonAutoConfiguration后,避免Redisson接管RedisTemplate的连接工厂。
  */
  */
 @Configuration
 @Configuration
+@ConditionalOnProperty(name = "spring.redis.host")
 public class RedissonConfig {
 public class RedissonConfig {
 
 
     @Value("${spring.redis.host:localhost}")
     @Value("${spring.redis.host:localhost}")

+ 3 - 0
fs-admin-saas/src/main/resources/application-dev.yml

@@ -1,5 +1,8 @@
 # 数据源配置
 # 数据源配置
 spring:
 spring:
+    # 允许Bean定义覆盖(解决RedissonConfig重复注册)
+    main:
+        allow-bean-definition-overriding: true
     # redis 配置
     # redis 配置
     redis:
     redis:
         # 地址
         # 地址

+ 4 - 1
fs-company/src/main/java/com/fs/company/controller/workflow/LobsterPromptController.java

@@ -51,9 +51,12 @@ public class LobsterPromptController extends BaseController {
             params.add("%" + search + "%");
             params.add("%" + search + "%");
         }
         }
         List<Object> countParams = new ArrayList<>(params);
         List<Object> countParams = new ArrayList<>(params);
+        // 添加 LIMIT / OFFSET 参数
+        params.add(size);
+        params.add((page - 1) * size);
         List<Map<String, Object>> list = jdbcTemplate.queryForList(
         List<Map<String, Object>> list = jdbcTemplate.queryForList(
                 "SELECT * FROM " + TABLE + where + "ORDER BY company_id, industry_type, sort_order LIMIT ? OFFSET ?",
                 "SELECT * FROM " + TABLE + where + "ORDER BY company_id, industry_type, sort_order LIMIT ? OFFSET ?",
-                ((Object[]) (params.toArray(new Object[0])).clone()));
+                params.toArray());
         Long total = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM " + TABLE + where, Long.class, countParams.toArray());
         Long total = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM " + TABLE + where, Long.class, countParams.toArray());
 
 
         Map<String, Object> result = new HashMap<>();
         Map<String, Object> result = new HashMap<>();

+ 3 - 0
fs-company/src/main/resources/application-dev.yml

@@ -1,4 +1,7 @@
 spring:
 spring:
+    devtools:
+        restart:
+            enabled: false
     redis:
     redis:
         host: localhost
         host: localhost
         port: 6379
         port: 6379

+ 2 - 0
fs-service/src/main/java/com/fs/admin/helper/AdminCrossTenantHelper.java

@@ -8,6 +8,7 @@ import com.fs.tenant.service.TenantInfoService;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Profile;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
@@ -25,6 +26,7 @@ import java.util.function.BiFunction;
  * 每行结果自动注入: companyId / companyName / tenantCode
  * 每行结果自动注入: companyId / companyName / tenantCode
  */
  */
 @Component
 @Component
+@Profile("admin")
 public class AdminCrossTenantHelper {
 public class AdminCrossTenantHelper {
 
 
     private static final Logger log = LoggerFactory.getLogger(AdminCrossTenantHelper.class);
     private static final Logger log = LoggerFactory.getLogger(AdminCrossTenantHelper.class);

+ 2 - 0
fs-service/src/main/java/com/fs/framework/task/TenantTaskRunner.java

@@ -13,6 +13,7 @@ import com.fs.system.mapper.SysConfigMapper;
 import com.fs.tenant.domain.TenantInfo;
 import com.fs.tenant.domain.TenantInfo;
 import com.fs.tenant.service.TenantInfoService;
 import com.fs.tenant.service.TenantInfoService;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Profile;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
@@ -27,6 +28,7 @@ import java.util.stream.Collectors;
  */
  */
 @Slf4j
 @Slf4j
 @Component
 @Component
+@Profile("admin")
 public class TenantTaskRunner {
 public class TenantTaskRunner {
 
 
     @Resource
     @Resource

+ 2 - 2
fs-service/src/main/java/com/fs/his/task/Task.java

@@ -205,7 +205,7 @@ public class Task {
     @Autowired
     @Autowired
     private FsUserOperationLogMapper fsUserOperationLogMapper;
     private FsUserOperationLogMapper fsUserOperationLogMapper;
 
 
-    @Autowired
+    @Autowired(required = false)
     private TenantTaskRunner tenantTaskRunner;
     private TenantTaskRunner tenantTaskRunner;
 
 
     /** SaaS 模式:为 true 时定时任务按租户执行 */
     /** SaaS 模式:为 true 时定时任务按租户执行 */
@@ -1804,7 +1804,7 @@ public class Task {
     @Scheduled(cron = "0 0 1 * * ?")
     @Scheduled(cron = "0 0 1 * * ?")
 //    @Scheduled(cron = "0 * * * * ?") //测试每分钟执行一次
 //    @Scheduled(cron = "0 * * * * ?") //测试每分钟执行一次
     public void deleteUserOperationLog() {
     public void deleteUserOperationLog() {
-        if (saasTaskEnabled) {
+        if (saasTaskEnabled && tenantTaskRunner != null) {
             tenantTaskRunner.runForEachTenant("deleteUserOperationLog", this::doDeleteUserOperationLog);
             tenantTaskRunner.runForEachTenant("deleteUserOperationLog", this::doDeleteUserOperationLog);
         } else {
         } else {
             doDeleteUserOperationLog();
             doDeleteUserOperationLog();