liusheng
15 小时以前 c24d16a37523a49080392610357872ce580cbc38
ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/controller/SltdSatisfactionController.java
@@ -2,6 +2,7 @@
import com.ruoyi.common.annotation.AddOrgId;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.satisfaction.config.SatisfactionSwitch;
import com.ruoyi.satisfaction.domain.ServiceSubtaskDetailRatioExport;
import com.ruoyi.satisfaction.domain.dto.QuestionResultDTO;
import com.ruoyi.satisfaction.domain.row.SatisfactionSubtaskQuery;
@@ -12,7 +13,6 @@
import com.ruoyi.satisfaction.domain.vo.SltdMydTotalVO;
import com.ruoyi.satisfaction.service.SatisfactionSubtaskService;
import com.ruoyi.satisfaction.service.strategy.SatisfactionScoreStrategyResolver;
import com.ruoyi.satisfaction.service.strategy.SatisfactionSites;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections4.CollectionUtils;
@@ -53,11 +53,22 @@
public class SltdSatisfactionController extends BaseController {
    /**
     * 站点口径策略解析器:综合满意度得分按站点(省立同德)取策略计算,
     * 站点口径策略解析器:综合满意度得分按站点取策略计算,
     * 不再把算法与常量写在 Controller 里。
     * <p>
     * 站点来自 {@code sys_config: satisfaction.site}(见 {@link SatisfactionSwitch#site()}):
     * 同德用 {@code sltd}(五档文案加权),南华用 {@code common}(按明细 score 求平均)。
     */
    @Autowired
    private SatisfactionScoreStrategyResolver satisfactionScoreStrategyResolver;
    /**
     * 运行时配置(站点口径)。2026-10-21 新增:
     * 原来这里把口径写死成 {@code SatisfactionSites.SLTD},南华的数据(没有"很满意/满意/…"五档文案)
     * 一条选项都匹配不上 → 综合得分恒为 0.00。
     */
    @Autowired
    private SatisfactionSwitch satisfactionSwitch;
    @Autowired
    private SatisfactionSubtaskService satisfactionSubtaskService;
@@ -83,8 +94,22 @@
                query.setServiceType(st);
                query.setEndOutHospTime(sltdMydTotalVO.getEndOutHospTime());
                query.setStartOutHospTime(sltdMydTotalVO.getStartOutHospTime());
                //完成时间:页面提交的是 startFinishTime / endFinishTime。
                //原来这两个条件没有向下传,取子任务的 SQL 完全没有时间条件
                //→ 口径偏大(统计了全部历史)且 service_subtask 被整表扫描
                query.setStartFinishTime(sltdMydTotalVO.getStartFinishTime());
                query.setEndFinishTime(sltdMydTotalVO.getEndFinishTime());
                query.setDeptOrDistrict(sltdMydTotalVO.getDeptOrDistrict());
                //病区 / 科室:按「传进来的是哪一组参数」决定过滤哪一列,不再一律按离院病区过滤
                //  hospitaldistrictcodes      → hospitaldistrictcode      在院/当前病区
                //  leavehospitaldistrictcodes → leavehospitaldistrictcode 离院病区
                //  deptcodes                  → deptcode                 在院/当前科室
                //  leaveldeptcodes            → leaveldeptcode           离院科室
                //原来 hospitaldistrictcodes 这个字段在 VO 上根本不存在,被 Jackson 静默丢弃,
                //导致病区条件从未拼进 SQL(查 40003514 病区却把骨科等其它病区的数据一起统计了)
                query.setHospitaldistrictcodes(sltdMydTotalVO.getHospitaldistrictcodes());
                query.setLeavehospitaldistrictcodes(sltdMydTotalVO.getLeavehospitaldistrictcodes());
                query.setDeptcodes(sltdMydTotalVO.getDeptcodes());
                query.setLeaveldeptcodes(sltdMydTotalVO.getLeaveldeptcodes());
                //机构/院区由 @AddOrgId 注入,落到查询条件上,避免跨机构取数
                query.setOrgid(sltdMydTotalVO.getOrgid());
@@ -165,7 +190,7 @@
     */
    private String calcMydScore(List<ServiceSubtaskDetailRatioExport> exportList) {
        BigDecimal score = satisfactionScoreStrategyResolver
                .resolve(SatisfactionSites.SLTD)
                .resolve(satisfactionSwitch.site())
                .comprehensiveScore(exportList);
        return score == null ? "0.00" : score.toPlainString();
    }