# 后端修复指南 ## 问题概述 前端已经完成了告警配置三标签页的实现,但后端还需要进行以下修复: ### 1. 数据库问题 - 后端代码查询 `t_wechat_alert_config` 表,但使用了 `tenant_id` 字段 - 需要统一使用 `customer_id` 字段 ### 2. 接口问题 - 消息配置接口 `/t_message_config/page` 不存在 ## 🔧 修复步骤 ### 步骤1:执行数据库修复脚本 ```bash # 执行数据库修复脚本 mysql -u root -p < fix_table_structure_customer_id.sql ``` ### 步骤2:修改后端实体类 需要修改 `TWechatAlertConfig` 实体类,将 `tenantId` 改为 `customerId`: **文件位置**:`ljwx-boot-modules/src/main/java/.../entity/TWechatAlertConfig.java` ```java @TableName("t_wechat_alert_config") public class TWechatAlertConfig { @TableId(value = "id", type = IdType.AUTO) private Long id; // 将 tenantId 改为 customerId @TableField("customer_id") private Long customerId; // 原来是 tenantId @TableField("type") private String type; // ... 其他字段保持不变 } ``` ### 步骤3:修改Mapper XML **文件位置**:`ljwx-boot-modules/src/main/resources/mapper/TWechatAlertConfigMapper.xml` 将所有的 `tenant_id` 替换为 `customer_id`: ```xml ``` ### 步骤4:修改Service层 **文件位置**:`ljwx-boot-modules/src/main/java/.../service/impl/TWechatAlertConfigServiceImpl.java` ```java @Override public IPage listTWechatAlertConfigPage(TWechatAlertConfigPageReqVO reqVO) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); // 将 tenantId 改为 customerId wrapper.eq(reqVO.getCustomerId() != null, TWechatAlertConfig::getCustomerId, reqVO.getCustomerId()); wrapper.eq(StringUtils.hasText(reqVO.getType()), TWechatAlertConfig::getType, reqVO.getType()); wrapper.eq(reqVO.getEnabled() != null, TWechatAlertConfig::getEnabled, reqVO.getEnabled()); wrapper.eq(TWechatAlertConfig::getIsDeleted, false); return this.page(new Page<>(reqVO.getPage(), reqVO.getPageSize()), wrapper); } ``` ### 步骤5:创建消息配置相关类 #### 5.1 创建实体类 **文件位置**:`ljwx-boot-modules/src/main/java/.../entity/TMessageConfig.java` ```java @Data @TableName("t_message_config") public class TMessageConfig extends BaseEntity { @TableId(value = "id", type = IdType.AUTO) private Long id; @TableField("customer_id") private Long customerId; @TableField("name") private String name; @TableField("type") private String type; @TableField("endpoint") private String endpoint; @TableField("access_key") private String accessKey; @TableField("secret_key") private String secretKey; @TableField("template_id") private String templateId; @TableField("enabled") private Boolean enabled; @TableField("description") private String description; } ``` #### 5.2 创建Mapper **文件位置**:`ljwx-boot-modules/src/main/java/.../mapper/TMessageConfigMapper.java` ```java @Mapper public interface TMessageConfigMapper extends BaseMapper { } ``` #### 5.3 创建Service **文件位置**:`ljwx-boot-modules/src/main/java/.../service/TMessageConfigService.java` ```java public interface TMessageConfigService extends IService { IPage listTMessageConfigPage(TMessageConfigPageReqVO reqVO); } ``` **实现类**: ```java @Service public class TMessageConfigServiceImpl extends ServiceImpl implements TMessageConfigService { @Override public IPage listTMessageConfigPage(TMessageConfigPageReqVO reqVO) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(reqVO.getCustomerId() != null, TMessageConfig::getCustomerId, reqVO.getCustomerId()); wrapper.like(StringUtils.hasText(reqVO.getName()), TMessageConfig::getName, reqVO.getName()); wrapper.eq(StringUtils.hasText(reqVO.getType()), TMessageConfig::getType, reqVO.getType()); wrapper.eq(reqVO.getEnabled() != null, TMessageConfig::getEnabled, reqVO.getEnabled()); wrapper.eq(TMessageConfig::getIsDeleted, false); wrapper.orderByDesc(TMessageConfig::getCreateTime); return this.page(new Page<>(reqVO.getPage(), reqVO.getPageSize()), wrapper); } } ``` #### 5.4 创建Controller **文件位置**:`ljwx-boot-admin/src/main/java/.../controller/TMessageConfigController.java` ```java @RestController @RequestMapping("/t_message_config") @RequiredArgsConstructor public class TMessageConfigController { private final TMessageConfigService messageConfigService; @GetMapping("/page") public Result> page(TMessageConfigPageReqVO reqVO) { IPage page = messageConfigService.listTMessageConfigPage(reqVO); return Result.success(PageResult.of(page)); } @PostMapping("/") public Result create(@RequestBody TMessageConfigCreateReqVO reqVO) { TMessageConfig entity = BeanUtils.copyProperties(reqVO, TMessageConfig.class); return Result.success(messageConfigService.save(entity)); } @PutMapping("/") public Result update(@RequestBody TMessageConfigUpdateReqVO reqVO) { TMessageConfig entity = BeanUtils.copyProperties(reqVO, TMessageConfig.class); return Result.success(messageConfigService.updateById(entity)); } @DeleteMapping("/") public Result delete(@RequestBody DeleteReqVO reqVO) { return Result.success(messageConfigService.removeByIds(reqVO.getIds())); } } ``` ### 步骤6:修改前端API参数名称 确保前端API调用使用正确的参数名: **文件位置**:前端已经修改完成,使用 `customerId` 而不是 `tenantId` ## 🧪 测试验证 ### 1. 数据库验证 ```sql -- 检查表结构 DESCRIBE t_wechat_alert_config; DESCRIBE t_message_config; -- 检查数据 SELECT * FROM t_wechat_alert_config WHERE customer_id = 1; SELECT * FROM t_message_config WHERE customer_id = 1; ``` ### 2. API测试 ```bash # 测试微信配置接口 curl -X GET "http://localhost:9998/t_wechat_alarm_config/page?customerId=1" # 测试消息配置接口 curl -X GET "http://localhost:9998/t_message_config/page?customerId=1" ``` ### 3. 前端测试 访问 `http://localhost:3333/alert/config` 验证三个标签页都能正常加载数据。 ## 📝 检查清单 - [ ] 数据库脚本已执行 - [ ] TWechatAlertConfig实体类已修改 - [ ] Mapper XML已更新 - [ ] Service层已修改 - [ ] TMessageConfig相关类已创建 - [ ] Controller接口已实现 - [ ] API测试通过 - [ ] 前端页面正常显示 ## 🔍 常见问题 1. **字段映射错误**:确保实体类字段名与数据库列名一致 2. **权限问题**:确保用户有对应的接口访问权限 3. **参数校验**:检查请求参数是否正确传递 完成以上修复后,告警配置页面应该能够正常工作。