| | |
| | | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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()); |
| | |
| | | */ |
| | | private String calcMydScore(List<ServiceSubtaskDetailRatioExport> exportList) { |
| | | BigDecimal score = satisfactionScoreStrategyResolver |
| | | .resolve(SatisfactionSites.SLTD) |
| | | .resolve(satisfactionSwitch.site()) |
| | | .comprehensiveScore(exportList); |
| | | return score == null ? "0.00" : score.toPlainString(); |
| | | } |