list = satisfactionMapper.selectMzMydScoreRank(mzMydScoreRankVO);
if (CollectionUtils.isEmpty(list)) {
return new ArrayList<>();
}
// 名次:SQL 已按综合得分降序返回,这里顺序编号
for (int i = 0; i < list.size(); i++) {
list.get(i).setRank(i + 1);
}
return list;
}
/**
* 是否空白字符(含全角空格)。
*
* 迁移说明:原为 ServiceSubtaskServiceImpl 的私有静态方法,满意度方法用到(trimAll),一并搬入。
*/
private static Boolean isBlankChar(char c) {
return c == '\u3000' // 全角空格
|| c == ' ' // 半角空格
|| c == '\t' || c == '\n' || c == '\r' || c == '\f' || Character.isWhitespace(c);
}
/**
* 按机构/院区/服务类型/出院时间/科室病区取子任务引用(只含 id、taskid)。
*
* 原实现走 {@code serviceSubtaskService.getServiceSubtasks(ServiceSubtaskEntity)},
* 该方法位于随访主干 Service 且依赖 patArchiveService,不能搬;
* 这里用满意度专用查询复现其实际用到的条件口径(逐条见 mapper XML 注释)。
*/
@Override
public List getMydSubtaskRefs(SatisfactionSubtaskQuery query) {
if (query == null) {
return new ArrayList<>();
}
List refs = satisfactionMapper.selectMydSubtaskRefs(query);
return refs == null ? new ArrayList<>() : refs;
}
// ==================== 满意度分类(供登录链路,带缓存) ====================
/**
* 满意度分类缓存 key 前缀(与迁移前一致)
*/
private static final String SATISFACTION_CACHE_KEY = "satisfaction:categories:";
/**
* 满意度分类缓存时长(分钟,与迁移前一致)
*/
private static final int SATISFACTION_CACHE_TTL = 30;
@Autowired
private RedisCache redisCache;
/**
* 获取满意度问题分类(语音 + 问卷),带 Redis 缓存。
*
* 迁移说明:原为 {@code smartor.UserExtInfoServiceImpl.getSatisfactionCategories},
* 因属于满意度逻辑,按模块化要求搬入本模块;缓存 key 与 TTL 保持原值。
*/
@Override
@SuppressWarnings("unchecked")
public Map getSatisfactionCategories(String orgid) {
// 先查缓存
String cacheKey = SATISFACTION_CACHE_KEY + orgid;
Map cached = redisCache.getCacheObject(cacheKey);
if (cached != null) {
return cached;
}
Map satisfactionCategories = new HashMap<>();
// 获取语音问题分类
List ivrLibaScriptAssorts =
satisfactionScriptMapper.selectIvrCategoryList(categoryQueryByOrgid(orgid));
List