package com.ruoyi.satisfaction.api; import com.ruoyi.satisfaction.domain.ServiceSubtaskDetailRatioExport; import com.ruoyi.satisfaction.service.SatisfactionSubtaskService; import com.ruoyi.satisfaction.support.MydOptionRatioChartBuilder; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.util.List; import java.util.Map; /** * {@link SatisfactionApi} 的内部实现(常驻 Bean)。 *

* 开关已改为存放在 {@code sys_config} 参数表的 {@code satisfaction.enabled}, * 运行时热读,因此本 Bean 无条件创建: *

* 之所以不再用 {@code @ConditionalOnProperty}:那个注解只在启动时求值一次, * 与"改完参数配置即时生效"的诉求冲突。 *

* 调用方不要直接注入本类,应注入 {@link SatisfactionFacade}。 */ @Slf4j @Component public class DefaultSatisfactionApi implements SatisfactionApi { private final SatisfactionSubtaskService satisfactionSubtaskService; public DefaultSatisfactionApi(SatisfactionSubtaskService satisfactionSubtaskService) { this.satisfactionSubtaskService = satisfactionSubtaskService; } @Override public boolean isEnabled() { return true; } @Override public Map getSatisfactionCategories(String orgid) { return satisfactionSubtaskService.getSatisfactionCategories(orgid); } @Override public SatisfactionExportBundle getQuestionOptionRatioExport(List subtaskIds, String questiontext) { List rows = satisfactionSubtaskService.statMydQuestionOptionForExport(subtaskIds, questiontext); if (rows == null || rows.isEmpty()) { // 没有行时不给图表构建器:ExcelUtil 会跳过该 Sheet(与原实现"空数据不画图"一致) return new SatisfactionExportBundle(rows, ServiceSubtaskDetailRatioExport.class, null); } return new SatisfactionExportBundle(rows, ServiceSubtaskDetailRatioExport.class, new MydOptionRatioChartBuilder(rows)); } @Override public boolean hasSatisfactionCategory(String orgid) { Map categories = satisfactionSubtaskService.getSatisfactionCategories(orgid); if (categories == null || categories.isEmpty()) { return false; } Object voice = categories.get("voiceCategories"); Object questionnaire = categories.get("questionnaireCategorys"); return isNotEmpty(voice) || isNotEmpty(questionnaire); } private boolean isNotEmpty(Object value) { return value instanceof java.util.Collection && !((java.util.Collection) value).isEmpty(); } @Override public Map getSatisfactionIndex(String type, String code, String orgid, Long ivrCategoryid, Long svyCategoryid) { return satisfactionSubtaskService.getSatisfactionIndex(type, code, orgid, ivrCategoryid, svyCategoryid); } }