Files
release/BACKEND_FIX_GUIDE.md
2025-08-27 15:56:11 +08:00

7.4 KiB
Raw Permalink Blame History

后端修复指南

问题概述

前端已经完成了告警配置三标签页的实现,但后端还需要进行以下修复:

1. 数据库问题

  • 后端代码查询 t_wechat_alert_config 表,但使用了 tenant_id 字段
  • 需要统一使用 customer_id 字段

2. 接口问题

  • 消息配置接口 /t_message_config/page 不存在

🔧 修复步骤

步骤1:执行数据库修复脚本

# 执行数据库修复脚本
mysql -u root -p < fix_table_structure_customer_id.sql

步骤2:修改后端实体类

需要修改 TWechatAlertConfig 实体类,将 tenantId 改为 customerId:

文件位置:ljwx-boot-modules/src/main/java/.../entity/TWechatAlertConfig.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:

<!-- 修改查询字段 -->
<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

@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

@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

@Mapper
public interface TMessageConfigMapper extends BaseMapper<TMessageConfig> {
}

5.3 创建Service

文件位置:ljwx-boot-modules/src/main/java/.../service/TMessageConfigService.java

public interface TMessageConfigService extends IService<TMessageConfig> {
    IPage<TMessageConfig> listTMessageConfigPage(TMessageConfigPageReqVO reqVO);
}

实现类:

@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

@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. 数据库验证

-- 检查表结构
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测试

# 测试微信配置接口
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. 参数校验:检查请求参数是否正确传递

完成以上修复后,告警配置页面应该能够正常工作。