liusheng
2026-10-12 26d1f59f0266672398975ba0337bb3d8267c2d95
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -16,6 +16,7 @@
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.common.core.service.IUserExtInfoService;
import com.ruoyi.common.core.service.ISatisfactionCategoryService;
import com.ruoyi.system.mapper.SysUserDeptMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -314,12 +315,43 @@
            }
            sysUser.setBelongDepts(list);
            // 设置满意度分类(走缓存)
            sysUser.setSatisfactionCategories(userExtInfoService.getSatisfactionCategories(sysUser.getOrgid()));
            // 满意度模块化后:不再经由 smartor 的 IUserExtInfoService,
            // 改为按 ruoyi-common 的 ISatisfactionCategoryService 接口查找实现
            // (实现在 ruoyi-satisfaction,由常驻门面保证"模块关闭/缺失时返回空 Map")
            sysUser.setSatisfactionCategories(loadSatisfactionCategories(sysUser.getOrgid()));
        }
        return sysUser;
    }
    /**
     * 安全地获取满意度分类。
     * <p>
     * 满意度模块可以被配置关闭({@code sys_config} 参数 {@code satisfaction.enabled=false}),也可以整体不在依赖里;
     * 这两种情况下都必须<b>不影响登录主流程</b>,因此这里:
     * <ul>
     *   <li>容器里没有 {@code ISatisfactionCategoryService} 实现时返回空 Map;</li>
     *   <li>调用过程中抛任何异常也只记日志并返回空 Map。</li>
     * </ul>
     *
     * @param orgid 机构ID
     * @return 满意度分类;不可用时返回空 Map(不会返回 null)
     */
    private Map<String, Object> loadSatisfactionCategories(String orgid) {
        try {
            ISatisfactionCategoryService satisfactionCategoryService =
                    SpringUtils.getBean(ISatisfactionCategoryService.class);
            if (satisfactionCategoryService == null) {
                return Collections.emptyMap();
            }
            Map<String, Object> categories = satisfactionCategoryService.getSatisfactionCategories(orgid);
            return categories == null ? Collections.emptyMap() : categories;
        } catch (Exception e) {
            log.warn("获取满意度分类失败,已降级为空结果(不影响登录)。orgid={}", orgid, e);
            return Collections.emptyMap();
        }
    }
    /**
     * 按deptCode去重
     */
    private List<SysUserDept> distinctByDeptCode(List<SysUserDept> list) {