Files
java-template/BACKEND_FIX_GUIDE.md
T
2025-08-27 15:56:11 +08:00

255 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 后端修复指南
## 问题概述
前端已经完成了告警配置三标签页的实现,但后端还需要进行以下修复:
### 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
<!-- 修改查询字段 -->
<select id="selectList" resultType="...">
SELECT id, customer_id, type, corp_id, agent_id, secret,
appid, appsecret, template_id, enabled,
create_user, create_user_id, create_time,
update_user, update_user_id, update_time, is_deleted
FROM t_wechat_alert_config
WHERE is_deleted = 0
<if test="customerId != null">
AND customer_id = #{customerId}
</if>
</select>
```
### 步骤4:修改Service层
**文件位置**:`ljwx-boot-modules/src/main/java/.../service/impl/TWechatAlertConfigServiceImpl.java`
```java
@Override
public IPage<TWechatAlertConfig> listTWechatAlertConfigPage(TWechatAlertConfigPageReqVO reqVO) {
LambdaQueryWrapper<TWechatAlertConfig> 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<TMessageConfig> {
}
```
#### 5.3 创建Service
**文件位置**:`ljwx-boot-modules/src/main/java/.../service/TMessageConfigService.java`
```java
public interface TMessageConfigService extends IService<TMessageConfig> {
IPage<TMessageConfig> listTMessageConfigPage(TMessageConfigPageReqVO reqVO);
}
```
**实现类**:
```java
@Service
public class TMessageConfigServiceImpl extends ServiceImpl<TMessageConfigMapper, TMessageConfig>
implements TMessageConfigService {
@Override
public IPage<TMessageConfig> listTMessageConfigPage(TMessageConfigPageReqVO reqVO) {
LambdaQueryWrapper<TMessageConfig> 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<PageResult<TMessageConfig>> page(TMessageConfigPageReqVO reqVO) {
IPage<TMessageConfig> page = messageConfigService.listTMessageConfigPage(reqVO);
return Result.success(PageResult.of(page));
}
@PostMapping("/")
public Result<Boolean> create(@RequestBody TMessageConfigCreateReqVO reqVO) {
TMessageConfig entity = BeanUtils.copyProperties(reqVO, TMessageConfig.class);
return Result.success(messageConfigService.save(entity));
}
@PutMapping("/")
public Result<Boolean> update(@RequestBody TMessageConfigUpdateReqVO reqVO) {
TMessageConfig entity = BeanUtils.copyProperties(reqVO, TMessageConfig.class);
return Result.success(messageConfigService.updateById(entity));
}
@DeleteMapping("/")
public Result<Boolean> 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. **参数校验**:检查请求参数是否正确传递
完成以上修复后,告警配置页面应该能够正常工作。