feat(emergency): searchExpert接口返回ConDoctor专家数据 + 修复IM UserSig缓存key未区分secretKey的问题

1. searchExpert新增ConDoctor专家字段:
   - 新增ConDoctorMapper直接查询qh_con_doctor表(同库,避免跨模块依赖)
   - EmergencyProfessionUser新增17个@TableField(exist=false)字段承载专家数据
   - searchExpert方法中批量查询ConDoctor并逐字段填充
   - 用户非专家时ConDoctor字段为null
   - 更新API文档-移动端接口.md

2. IM签名缓存优化:
   - TencentCloudImUtil新增secretKey注入
   - Redis key从 silence:im_user_sig:{sdkAppId}:{id}
     改为 silence:im_user_sig:{hash(sdkAppId+secretKey)}:{id}
   - 解决secretKey变更时旧缓存签名仍被命中导致IM请求失败的问题

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-08-04 11:08:03 +08:00
co-authored by Claude
parent 44e8ac7da5
commit e9360d1ad9
5 changed files with 171 additions and 2 deletions
@@ -134,4 +134,62 @@ public class EmergencyProfessionUser implements Serializable {
// 手机号(非持久字段,查询时填充)
@TableField(exist = false)
private String phone;
// ===== 以下字段来源于 qh_con_doctor(咨询服务医生表),查询时批量填充 =====
// 医生姓名
@TableField(exist = false)
private String doctorName;
// 专家编号
@TableField(exist = false)
private String doctorNo;
// 医生头像
@TableField(exist = false)
private String photo;
// 医院名称
@TableField(exist = false)
private String resourceName;
// 科室id
@TableField(exist = false)
private String departmentId;
// 科室名称
@TableField(exist = false)
private String departmentName;
// 职务
@TableField(exist = false)
@Dict(dicCode = "z_doct_lev")
private String doctorTitle;
// 职称
@TableField(exist = false)
@Dict(dicCode = "z_doct_job")
private String doctorJob;
// 专家状态
@TableField(exist = false)
@Dict(dicCode = "doc_status")
private String doctorStatus;
// 是否开启咨询(1开启 3关闭)
@TableField(exist = false)
@Dict(dicCode = "z_doct_sta")
private String isAccept;
// 专家类型(z_doct_typ) —— 避免与人员type冲突,命名为doctorType
@TableField(exist = false)
@Dict(dicCode = "z_doct_typ")
private String doctorType;
// 是否提供音视频
@TableField(exist = false)
private String audioStatus;
// 是否跳过节假日
@TableField(exist = false)
private String tfJumpHoliday;
// 执业经历
@TableField(exist = false)
private String experience;
// 排序
@TableField(exist = false)
private Integer sort;
// 是否推荐(0否1是)
@TableField(exist = false)
private String tfRecommend;
// 简介
@TableField(exist = false)
private String introduction;
}