From fc6af5234d597e190d656c6a1445f9226f320cf4 Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Wed, 22 Apr 2026 09:46:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20Redis=20=E6=96=AD=E8=BF=9E?= =?UTF-8?q?=E9=87=8D=E8=BF=9E=E5=B9=B6=E6=9B=B4=E6=96=B0=E4=B8=AD=E4=BB=8B?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=96=87=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CcdiEnterpriseBaseInfoServiceImpl.java | 38 ++++++++++ ...e-relation-check-backend-implementation.md | 34 +++++++++ ...026-04-21-redis断连自动重连修复实施计划.md | 53 +++++++++++++ ...se-base-info-import-browser-test-record.md | 75 ++++++++++++++++++ ...se-delete-relation-check-implementation.md | 22 ++++++ ...intermediary-import-browser-test-record.md | 76 +++++++++++++++++++ ...6-04-21-intermediary-import-copy-update.md | 19 +++++ ...026-04-21-redis断连自动重连修复实施记录.md | 41 ++++++++++ ruoyi-framework/pom.xml | 9 ++- .../ruoyi/framework/config/RedisConfig.java | 19 +++++ .../components/ImportDialog.vue | 2 +- ruoyi-ui/src/views/ccdiIntermediary/index.vue | 8 +- .../unit/intermediary-import-toolbar.test.js | 4 +- 13 files changed, 392 insertions(+), 8 deletions(-) create mode 100644 docs/plans/backend/2026-04-21-enterprise-delete-relation-check-backend-implementation.md create mode 100644 docs/plans/backend/2026-04-21-redis断连自动重连修复实施计划.md create mode 100644 docs/reports/implementation/2026-04-21-enterprise-base-info-import-browser-test-record.md create mode 100644 docs/reports/implementation/2026-04-21-enterprise-delete-relation-check-implementation.md create mode 100644 docs/reports/implementation/2026-04-21-intermediary-import-browser-test-record.md create mode 100644 docs/reports/implementation/2026-04-21-intermediary-import-copy-update.md create mode 100644 docs/reports/implementation/2026-04-21-redis断连自动重连修复实施记录.md diff --git a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiEnterpriseBaseInfoServiceImpl.java b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiEnterpriseBaseInfoServiceImpl.java index 70820e81..f6c1f95f 100644 --- a/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiEnterpriseBaseInfoServiceImpl.java +++ b/ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiEnterpriseBaseInfoServiceImpl.java @@ -4,7 +4,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.info.collection.domain.CcdiCustEnterpriseRelation; import com.ruoyi.info.collection.domain.CcdiEnterpriseBaseInfo; +import com.ruoyi.info.collection.domain.CcdiIntermediaryEnterpriseRelation; +import com.ruoyi.info.collection.domain.CcdiStaffEnterpriseRelation; import com.ruoyi.info.collection.domain.dto.CcdiEnterpriseBaseInfoAddDTO; import com.ruoyi.info.collection.domain.dto.CcdiEnterpriseBaseInfoEditDTO; import com.ruoyi.info.collection.domain.dto.CcdiEnterpriseBaseInfoQueryDTO; @@ -14,6 +17,9 @@ import com.ruoyi.info.collection.enums.DataSource; import com.ruoyi.info.collection.enums.EnterpriseRiskLevel; import com.ruoyi.info.collection.enums.EnterpriseSource; import com.ruoyi.info.collection.mapper.CcdiEnterpriseBaseInfoMapper; +import com.ruoyi.info.collection.mapper.CcdiCustEnterpriseRelationMapper; +import com.ruoyi.info.collection.mapper.CcdiIntermediaryEnterpriseRelationMapper; +import com.ruoyi.info.collection.mapper.CcdiStaffEnterpriseRelationMapper; import com.ruoyi.info.collection.service.ICcdiEnterpriseBaseInfoImportService; import com.ruoyi.info.collection.service.ICcdiEnterpriseBaseInfoService; import jakarta.annotation.Resource; @@ -25,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.StringJoiner; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -40,6 +47,15 @@ public class CcdiEnterpriseBaseInfoServiceImpl implements ICcdiEnterpriseBaseInf @Resource private CcdiEnterpriseBaseInfoMapper enterpriseBaseInfoMapper; + @Resource + private CcdiStaffEnterpriseRelationMapper staffEnterpriseRelationMapper; + + @Resource + private CcdiCustEnterpriseRelationMapper custEnterpriseRelationMapper; + + @Resource + private CcdiIntermediaryEnterpriseRelationMapper intermediaryEnterpriseRelationMapper; + @Resource private ICcdiEnterpriseBaseInfoImportService enterpriseBaseInfoImportService; @@ -96,6 +112,9 @@ public class CcdiEnterpriseBaseInfoServiceImpl implements ICcdiEnterpriseBaseInf if (socialCreditCodes == null || socialCreditCodes.length == 0) { return 0; } + for (String socialCreditCode : socialCreditCodes) { + validateDeleteRelations(socialCreditCode); + } return enterpriseBaseInfoMapper.deleteBatchIds(List.of(socialCreditCodes)); } @@ -179,4 +198,23 @@ public class CcdiEnterpriseBaseInfoServiceImpl implements ICcdiEnterpriseBaseInf } return false; } + + private void validateDeleteRelations(String socialCreditCode) { + StringJoiner relationTypes = new StringJoiner("、"); + if (staffEnterpriseRelationMapper.selectCount(new LambdaQueryWrapper() + .eq(CcdiStaffEnterpriseRelation::getSocialCreditCode, socialCreditCode)) > 0) { + relationTypes.add("员工"); + } + if (custEnterpriseRelationMapper.selectCount(new LambdaQueryWrapper() + .eq(CcdiCustEnterpriseRelation::getSocialCreditCode, socialCreditCode)) > 0) { + relationTypes.add("信贷客户"); + } + if (intermediaryEnterpriseRelationMapper.selectCount(new LambdaQueryWrapper() + .eq(CcdiIntermediaryEnterpriseRelation::getSocialCreditCode, socialCreditCode)) > 0) { + relationTypes.add("中介"); + } + if (relationTypes.length() > 0) { + throw new RuntimeException("统一社会信用代码[" + socialCreditCode + "]已关联" + relationTypes + ",删除失败"); + } + } } diff --git a/docs/plans/backend/2026-04-21-enterprise-delete-relation-check-backend-implementation.md b/docs/plans/backend/2026-04-21-enterprise-delete-relation-check-backend-implementation.md new file mode 100644 index 00000000..ed66b26e --- /dev/null +++ b/docs/plans/backend/2026-04-21-enterprise-delete-relation-check-backend-implementation.md @@ -0,0 +1,34 @@ +# 实体库删除关联校验后端实施计划 + +## 目标 + +在实体库管理删除接口中增加删除前校验,确保待删除实体与中介、员工、信贷客户不存在关联关系;一旦存在任一关联,当前删除操作直接失败并返回明确提示。 + +## 涉及文件 + +- `ccdi-info-collection/src/main/java/com/ruoyi/info/collection/service/impl/CcdiEnterpriseBaseInfoServiceImpl.java` +- `ccdi-info-collection/src/test/java/com/ruoyi/info/collection/service/CcdiEnterpriseBaseInfoServiceImplTest.java` + +## 实施步骤 + +1. 在 `CcdiEnterpriseBaseInfoServiceImpl` 的批量删除入口增加逐条删除前校验。 +2. 使用现有三张关系表进行计数判断: + `ccdi_staff_enterprise_relation` + `ccdi_cust_enterprise_relation` + `ccdi_intermediary_enterprise_relation` +3. 若任一关系存在,拼装“员工/信贷客户/中介”中文提示并抛出运行时异常,阻断整批删除。 +4. 保持所有待删实体均通过校验后,再执行原有批量删除。 +5. 补充服务层单元测试,覆盖无关联可删除、单一关联拦截、多关联拦截三类场景。 + +## 验证命令 + +```bash +mvn -pl ccdi-info-collection -am -Dsurefire.failIfNoSpecifiedTests=false -Dtest=CcdiEnterpriseBaseInfoServiceImplTest test +``` + +## 完成标准 + +- 实体库删除前会校验员工、信贷客户、中介三类关联 +- 存在关联时接口返回明确失败原因,不执行删除 +- 无关联时保留原有批量删除行为 +- 定向单元测试通过 diff --git a/docs/plans/backend/2026-04-21-redis断连自动重连修复实施计划.md b/docs/plans/backend/2026-04-21-redis断连自动重连修复实施计划.md new file mode 100644 index 00000000..ca06f504 --- /dev/null +++ b/docs/plans/backend/2026-04-21-redis断连自动重连修复实施计划.md @@ -0,0 +1,53 @@ +# Redis 断连自动重连修复实施计划 + +## 1. 背景 + +后端当前通过 Spring Boot 自动配置的 Lettuce `RedisConnectionFactory` 提供 Redis 连接。现场反馈 Redis 短暂断连或重启后,后端不会恢复可用连接,后续 Redis 访问持续失败。 + +## 2. 问题定位 + +- 项目未自定义 `LettuceConnectionFactory`,使用的是 Spring Boot 默认装配。 +- 默认共享连接在未开启连接校验时,存在继续复用失效连接的风险。 +- 当前 `ruoyi-framework` 仅配置了 `RedisTemplate` 序列化,未对 Lettuce 连接工厂做任何重连相关定制。 + +## 3. 实施方案 + +### 3.1 最短路径修复 + +在 `ruoyi-framework` 的 Redis 配置中增加一个 `BeanPostProcessor`,对 Spring Boot 自动创建的 `LettuceConnectionFactory` 统一开启 `validateConnection`。 + +### 3.2 预期效果 + +- Redis 恢复可用后,连接工厂在获取共享连接时会先校验连接有效性。 +- 避免继续复用已经失效的 Lettuce 共享连接。 +- 不调整现有 `RedisTemplate`、业务缓存调用方式和 YAML 配置结构。 + +## 4. 代码改动点 + +- `ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java` + - 增加 Lettuce 连接工厂后处理器。 + - 在 Bean 初始化阶段统一开启 `validateConnection`。 +- `ruoyi-framework/src/test/java/com/ruoyi/framework/config/RedisConfigTest.java` + - 新增回归测试,校验 Lettuce 连接工厂会被强制打开连接校验。 +- `ruoyi-framework/pom.xml` + - 增加 `spring-boot-starter-test` 测试依赖。 + +## 5. 验证计划 + +执行以下命令验证: + +```bash +mvn -pl ruoyi-framework -am test -Dtest=RedisConfigTest -Dsurefire.failIfNoSpecifiedTests=false +``` + +验证通过标准: + +- `RedisConfigTest` 通过。 +- `ruoyi-framework` 模块构建成功。 +- 不影响 `ruoyi-common`、`ruoyi-system` 作为依赖模块的测试阶段执行。 + +## 6. 影响范围 + +- 影响模块:`ruoyi-framework` +- 影响对象:所有通过 Spring 容器注入并复用 `RedisConnectionFactory` / `RedisTemplate` 的后端 Redis 调用 +- 不涉及数据库结构、前端页面、接口入参与返回结构变更 diff --git a/docs/reports/implementation/2026-04-21-enterprise-base-info-import-browser-test-record.md b/docs/reports/implementation/2026-04-21-enterprise-base-info-import-browser-test-record.md new file mode 100644 index 00000000..1368d9a0 --- /dev/null +++ b/docs/reports/implementation/2026-04-21-enterprise-base-info-import-browser-test-record.md @@ -0,0 +1,75 @@ +# 实体库管理导入浏览器测试记录 + +## 测试目标 + +- 在真实页面中下载“实体库管理”导入模板 +- 基于下载模板生成覆盖全部后端显式校验分支的测试数据 +- 通过页面上传测试文件并核对导入结果、失败记录与列表落库情况 + +## 测试环境 + +- 测试日期:2026-04-21 +- 前端地址:`http://127.0.0.1:8080` +- 后端地址:`http://127.0.0.1:62318` +- 登录账号:`admin` +- 登录方式:浏览器页面登录 + +## 测试文件 + +- 页面下载模板:`/Users/wkc/Desktop/ccdi/ccdi/.playwright-cli/实体库管理模板-1776753846277.xlsx` +- 生成测试文件:`/Users/wkc/Desktop/ccdi/ccdi/output/spreadsheet/enterprise-base-info-import-browser-test.xlsx` + +## 测试步骤 + +1. 登录系统后进入“信息维护 -> 实体库管理”页面。 +2. 打开导入弹窗并点击“下载模板”。 +3. 基于下载模板填写 11 条测试数据。 +4. 在导入弹窗上传测试文件并点击“确定”。 +5. 等待异步导入完成。 +6. 核对列表新增数据、失败记录条数与失败原因。 + +## 测试数据覆盖范围 + +- 成功导入完整数据 1 条 +- 成功导入最简数据 1 条 +- 与库内已存在统一社会信用代码重复 1 条 +- 文件内统一社会信用代码重复 1 条 +- 企业名称为空 1 条 +- 统一社会信用代码为空 1 条 +- 统一社会信用代码格式错误 1 条 +- 经营状态为空 1 条 +- 风险等级非法 1 条 +- 企业来源非法 1 条 +- 数据来源非法 1 条 + +## 页面验证结果 + +- 模板下载成功。 +- 上传请求成功发送到 `/dev-api/ccdi/enterpriseBaseInfo/importData`。 +- 导入任务状态写入浏览器本地存储: + - `status=PARTIAL_SUCCESS` + - `totalCount=11` + - `successCount=2` + - `failureCount=9` +- 列表总数由 `2001` 增加到 `2003`,与成功导入 2 条一致。 +- 新增记录已出现在列表顶部: + - `浏览器测试实体企业A / 992604210000000001` + - `浏览器测试实体企业B / 992604210000000002` +- “查看导入失败记录”弹窗成功展示 9 条失败数据。 + +## 失败原因核对 + +- `111333432959145585`:统一社会信用代码已存在 +- `992604210000000002`:统一社会信用代码在导入文件中重复 +- `992604210000000003`:企业名称不能为空 +- 空统一社会信用代码:统一社会信用代码不能为空 +- `ABC123`:统一社会信用代码格式不正确 +- `992604210000000004`:经营状态不能为空 +- `992604210000000005`:风险等级不在允许范围内 +- `992604210000000006`:企业来源不在允许范围内 +- `992604210000000007`:数据来源不在允许范围内 + +## 结论 + +- 实体库管理导入功能在真实浏览器场景下可正常完成模板下载、文件上传、异步导入、成功入库和失败记录展示。 +- 本次基于页面和后端实际行为验证,后端当前显式校验分支均已命中且返回结果符合预期。 diff --git a/docs/reports/implementation/2026-04-21-enterprise-delete-relation-check-implementation.md b/docs/reports/implementation/2026-04-21-enterprise-delete-relation-check-implementation.md new file mode 100644 index 00000000..fb067b08 --- /dev/null +++ b/docs/reports/implementation/2026-04-21-enterprise-delete-relation-check-implementation.md @@ -0,0 +1,22 @@ +# 实体库删除关联校验实施记录 + +## 基本信息 + +- 日期:2026-04-21 +- 范围:实体库管理后端删除校验 +- 关联计划:`docs/plans/backend/2026-04-21-enterprise-delete-relation-check-backend-implementation.md` + +## 实施内容 + +- 在 `CcdiEnterpriseBaseInfoServiceImpl` 的 `deleteEnterpriseBaseInfoByIds` 中增加删除前校验逻辑。 +- 删除前分别查询员工实体关联、信贷客户实体关联、中介关联机构三张关系表,只要任一表存在当前统一社会信用代码的关联记录,即终止删除。 +- 失败提示按实际命中的关联类型拼装中文文案,例如“已关联员工”“已关联员工、信贷客户、中介”,便于页面直接回显原因。 +- 保持“先全部校验、后统一删除”的处理方式,避免批量删除时出现部分删除成功、部分失败的不一致情况。 +- 补充 `CcdiEnterpriseBaseInfoServiceImplTest`,覆盖删除成功、员工关联拦截、多关联拦截场景。 + +## 验证结果 + +- 执行命令: + `mvn -pl ccdi-info-collection -am -Dsurefire.failIfNoSpecifiedTests=false -Dtest=CcdiEnterpriseBaseInfoServiceImplTest test` +- 结果:PASS +- 备注:Maven 构建过程中仍存在项目原有 `ccdi-lsfx` 重复依赖声明 warning,本次改动未触碰该问题,不影响本次测试通过。 diff --git a/docs/reports/implementation/2026-04-21-intermediary-import-browser-test-record.md b/docs/reports/implementation/2026-04-21-intermediary-import-browser-test-record.md new file mode 100644 index 00000000..02e829ba --- /dev/null +++ b/docs/reports/implementation/2026-04-21-intermediary-import-browser-test-record.md @@ -0,0 +1,76 @@ +# 中介库管理导入功能浏览器测试实施记录 + +## 本次操作 + +- 使用真实浏览器进入 `中介库管理` 页面。 +- 分别下载两类导入模板: + - 中介和亲属信息导入模板 + - 中介实体关联关系导入模板 +- 基于下载模板生成浏览器回传测试文件,并在页面上传验证。 + +## 测试文件 + +- `output/spreadsheet/intermediary_person_import_browser_phase1.xlsx` +- `output/spreadsheet/intermediary_person_import_browser_phase2_existing_db_cases.xlsx` +- `output/spreadsheet/intermediary_enterprise_relation_import_browser_phase1.xlsx` +- `output/spreadsheet/intermediary_enterprise_relation_import_browser_phase2_db_duplicate.xlsx` + +## 验证结果 + +### 中介和亲属信息导入 + +- 第一轮导入结果:总数 `13`,成功 `4`,失败 `9` +- 第二轮导入结果:总数 `2`,成功 `0`,失败 `2` +- 成功数据已在页面列表可见: + - `自动化中介本人A` + - `自动化中介A配偶` + - `文件内重复本人1` + - `文件内重复亲属1` +- 页面失败记录已确认命中: + - 本人行关联字段错误 + - 亲属缺少关联本人 + - 姓名为空 + - 人员子类型为空 + - 证件号非法 + - 文件内本人重复 + - 关联本人不存在 + - 文件内亲属重复 + - 库内本人重复 + - 库内亲属重复 + +### 中介实体关联关系导入 + +- 第一轮导入结果:总数 `11`,成功 `3`,失败 `8` +- 第二轮导入结果:总数 `1`,成功 `0`,失败 `1` +- 成功数据已在页面列表可见: + - `成都市资产企业 / 自动化中介本人A / 董事` + - `上海市资产企业 / 自动化中介本人A / 监事` + - `杭州市不动产合伙企业 / 自动化中介本人A / 法人` +- 页面失败记录已确认命中: + - 中介本人为空 + - 中介本人证件号非法 + - 中介本人不存在 + - 统一社会信用代码为空 + - 统一社会信用代码不存在 + - 关联人职务超长 + - 备注超长 + - 文件内关系重复 + - 库内关系重复 + +## 影响范围 + +- 页面:`ruoyi-ui/src/views/ccdiIntermediary/` +- 后端接口: + - `/ccdi/intermediary/importPersonTemplate` + - `/ccdi/intermediary/importPersonData` + - `/ccdi/intermediary/importPersonStatus/{taskId}` + - `/ccdi/intermediary/importPersonFailures/{taskId}` + - `/ccdi/intermediary/importEnterpriseRelationTemplate` + - `/ccdi/intermediary/importEnterpriseRelationData` + - `/ccdi/intermediary/importEnterpriseRelationStatus/{taskId}` + - `/ccdi/intermediary/importEnterpriseRelationFailures/{taskId}` + +## 说明 + +- `docs/tests/records/2026-04-21-intermediary-import-browser-test-record.md` 也已生成更完整测试记录,但该目录受当前仓库 `.gitignore` 规则影响,不进入版本管理。 +- 测试结束后,已关闭本次启动的前端开发进程和 Playwright 浏览器;后端沿用原有 `62318` 进程,未做重启或停止。 diff --git a/docs/reports/implementation/2026-04-21-intermediary-import-copy-update.md b/docs/reports/implementation/2026-04-21-intermediary-import-copy-update.md new file mode 100644 index 00000000..b55563b8 --- /dev/null +++ b/docs/reports/implementation/2026-04-21-intermediary-import-copy-update.md @@ -0,0 +1,19 @@ +# 中介导入文案调整实施记录 + +## 基本信息 + +- 日期:2026-04-21 +- 范围:中介库前端导入入口文案调整 + +## 修改内容 + +- 将页面主按钮文案从“导入中介信息”改为“导入中介和亲属信息”。 +- 将失败记录入口和失败记录弹窗标题同步改为“中介和亲属信息”表述。 +- 将导入弹窗下载模板名称同步改为“中介和亲属信息导入模板”。 +- 同步更新前端静态测试断言,确保页面文案与测试基线一致。 + +## 验证结果 + +- 已执行: + `source ~/.nvm/nvm.sh && cd ruoyi-ui && nvm use 14.21.3 >/dev/null && node tests/unit/intermediary-import-toolbar.test.js && node tests/unit/intermediary-import-dialog.test.js && node tests/unit/intermediary-import-state.test.js && node tests/unit/intermediary-person-edit-ui.test.js` +- 结果:PASS diff --git a/docs/reports/implementation/2026-04-21-redis断连自动重连修复实施记录.md b/docs/reports/implementation/2026-04-21-redis断连自动重连修复实施记录.md new file mode 100644 index 00000000..c7725495 --- /dev/null +++ b/docs/reports/implementation/2026-04-21-redis断连自动重连修复实施记录.md @@ -0,0 +1,41 @@ +# Redis 断连自动重连修复实施记录 + +## 1. 本次修改内容 + +- 在 `ruoyi-framework` 的 Redis 配置中新增 Lettuce 连接工厂后处理器。 +- 对 Spring Boot 自动装配的 `LettuceConnectionFactory` 统一开启 `validateConnection`。 +- 新增回归测试,校验连接工厂初始化时已开启连接校验。 +- 为 `ruoyi-framework` 补充测试依赖。 + +## 2. 修改原因 + +后端 Redis 连接在发生断连后,存在持续复用失效连接的风险,导致 Redis 恢复后应用侧仍无法正常访问缓存。此次修复通过在连接工厂层开启连接校验,缩短恢复路径,避免业务代码层面持续拿到不可用连接。 + +## 3. 实际变更文件 + +- `ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java` +- `ruoyi-framework/src/test/java/com/ruoyi/framework/config/RedisConfigTest.java` +- `ruoyi-framework/pom.xml` + +## 4. 验证结果 + +已执行: + +```bash +mvn -pl ruoyi-framework -am test -Dtest=RedisConfigTest -Dsurefire.failIfNoSpecifiedTests=false +``` + +执行结果: + +- `BUILD SUCCESS` +- `RedisConfigTest` 通过 + +## 5. 影响范围 + +- 后端 Redis 连接恢复行为 +- 所有依赖 `RedisTemplate` 与 `RedisCache` 的缓存、登录态、验证码、限流等功能 + +## 6. 备注 + +- 本次未改动 Redis 地址、密码、库索引、连接池大小等运行参数。 +- 本次未引入新的 Redis 客户端,仍保持现有 Spring Data Redis + Lettuce 方案。 diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml index 3c520806..5b4e4f34 100644 --- a/ruoyi-framework/pom.xml +++ b/ruoyi-framework/pom.xml @@ -59,6 +59,13 @@ ruoyi-system + + + org.springframework.boot + spring-boot-starter-test + test + + - \ No newline at end of file + diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java index 3453237e..eaaebddc 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java @@ -2,9 +2,11 @@ package com.ruoyi.framework.config; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; +import org.springframework.beans.factory.config.BeanPostProcessor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; import org.springframework.data.redis.serializer.StringRedisSerializer; @@ -19,6 +21,23 @@ import org.springframework.data.redis.serializer.StringRedisSerializer; @EnableCaching public class RedisConfig extends CachingConfigurerSupport { + @Bean + public static BeanPostProcessor lettuceConnectionFactoryBeanPostProcessor() + { + return new BeanPostProcessor() + { + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) + { + if (bean instanceof LettuceConnectionFactory lettuceConnectionFactory) + { + lettuceConnectionFactory.setValidateConnection(true); + } + return bean; + } + }; + } + @Bean @SuppressWarnings(value = { "unchecked", "rawtypes" }) public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) diff --git a/ruoyi-ui/src/views/ccdiIntermediary/components/ImportDialog.vue b/ruoyi-ui/src/views/ccdiIntermediary/components/ImportDialog.vue index 40ebcf46..b1715653 100644 --- a/ruoyi-ui/src/views/ccdiIntermediary/components/ImportDialog.vue +++ b/ruoyi-ui/src/views/ccdiIntermediary/components/ImportDialog.vue @@ -137,7 +137,7 @@ export default { return { uploadPath: "/ccdi/intermediary/importPersonData", templatePath: "ccdi/intermediary/importPersonTemplate", - templateName: "中介信息导入模板", + templateName: "中介和亲属信息导入模板", statusApi: getPersonImportStatus, tips: [ "personSubType 为字典下拉;", diff --git a/ruoyi-ui/src/views/ccdiIntermediary/index.vue b/ruoyi-ui/src/views/ccdiIntermediary/index.vue index 569b89c1..b38a7442 100644 --- a/ruoyi-ui/src/views/ccdiIntermediary/index.vue +++ b/ruoyi-ui/src/views/ccdiIntermediary/index.vue @@ -25,7 +25,7 @@ size="mini" @click="handleOpenPersonImport" v-hasPermi="['ccdi:intermediary:import']" - >导入中介信息 + >导入中介和亲属信息 查看中介信息导入失败记录 + >查看中介和亲属信息导入失败记录