From 0c1f8c479065739f3c7a5126de8e667035d00b58 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期一, 12 十月 2026 14:21:52 +0800
Subject: [PATCH] 【丽水】满意度模块化:新增 ruoyi-satisfaction 独立模块

---
 ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/service/impl/PatSatisfactionServiceImpl.java |  322 ++++++++++++++++++++++++-----------------------------
 1 files changed, 148 insertions(+), 174 deletions(-)

diff --git a/smartor/src/main/java/com/smartor/service/impl/PatSatisfactionServiceImpl.java b/ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/service/impl/PatSatisfactionServiceImpl.java
similarity index 79%
rename from smartor/src/main/java/com/smartor/service/impl/PatSatisfactionServiceImpl.java
rename to ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/service/impl/PatSatisfactionServiceImpl.java
index 9e07d77..5d1078a 100644
--- a/smartor/src/main/java/com/smartor/service/impl/PatSatisfactionServiceImpl.java
+++ b/ruoyi-satisfaction/src/main/java/com/ruoyi/satisfaction/service/impl/PatSatisfactionServiceImpl.java
@@ -1,4 +1,4 @@
-package com.smartor.service.impl;
+package com.ruoyi.satisfaction.service.impl;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -12,18 +12,27 @@
 import com.ruoyi.common.utils.ArrayListUtils;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.DtoConversionUtils;
-import com.smartor.domain.*;
-import com.smartor.domain.DTO.ServiceSubtaskDetailDTO;
-import com.smartor.domain.VO.PatSatisfactionReqVO;
-import com.smartor.domain.VO.PatSatisfactionResVO;
-import com.smartor.domain.entity.PatSatisfactionDetailEntity;
-import com.smartor.domain.entity.SatisfactionStatQuery;
-import com.smartor.domain.entity.ServiceSubtaskSatisfactionEntity;
-import com.smartor.mapper.*;
+import com.ruoyi.satisfaction.domain.vo.PatSatisfactionReqVO;
+import com.ruoyi.satisfaction.domain.vo.PatSatisfactionResVO;
+import com.ruoyi.satisfaction.domain.entity.PatSatisfactionDetailEntity;
+import com.ruoyi.satisfaction.domain.entity.SatisfactionStatQuery;
+import com.ruoyi.satisfaction.domain.entity.ServiceSubtaskSatisfactionEntity;
+import com.ruoyi.satisfaction.mapper.PatSatisfactionMapper;
+import com.ruoyi.satisfaction.mapper.SatisfactionMapper;
+import com.ruoyi.satisfaction.mapper.SatisfactionScriptMapper;
+import com.ruoyi.satisfaction.domain.row.SatisfactionCategoryRow;
+import com.ruoyi.satisfaction.domain.row.SatisfactionIvrScriptRow;
+import com.ruoyi.satisfaction.domain.row.SatisfactionOptionScoreRow;
+import com.ruoyi.satisfaction.domain.row.SatisfactionScriptQuery;
+import com.ruoyi.satisfaction.domain.row.SatisfactionSvyScriptRow;
+import com.ruoyi.satisfaction.domain.ServiceSubtaskDetailRatioExport;
+import com.ruoyi.satisfaction.service.strategy.SatisfactionScoreStrategyResolver;
+import com.ruoyi.satisfaction.service.strategy.SatisfactionSites;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.smartor.service.IPatSatisfactionService;
+import com.ruoyi.satisfaction.domain.PatSatisfaction;
+import com.ruoyi.satisfaction.service.IPatSatisfactionService;
 
 import static com.ruoyi.common.utils.SecurityUtils.getLoginUser;
 
@@ -39,28 +48,21 @@
     private PatSatisfactionMapper patSatisfactionMapper;
 
     @Autowired
-    private ServiceSubtaskMapper serviceSubtaskMapper;
+    private SatisfactionMapper satisfactionMapper;
 
     @Autowired
-    private ServiceSubtaskDetailMapper serviceSubtaskDetailMapper;
+    private SatisfactionScriptMapper satisfactionScriptMapper;
 
+    /**
+     * 绔欑偣鍙e緞绛栫暐瑙f瀽鍣ㄣ��
+     * <p>
+     * 鏈被鐨� {@code averageScoreByStat} 灏辨槸銆岄�氱敤鍙e緞锛堝崡鍗庯級銆嶇殑缁煎悎婊℃剰搴﹀緱鍒嗗彛寰勶紝
+     * 鐜版敼涓哄鎵� {@link com.ruoyi.satisfaction.service.strategy.CommonSatisfactionScoreStrategy}锛�
+     * 涓庣渷绔嬪悓寰峰彛寰勶紙{@code SltdSatisfactionScoreStrategy}锛夐�氳繃鍚屼竴绛栫暐鎺ュ彛骞跺垪锛�
+     * 閬垮厤鍚屼竴涓蹇靛湪涓ゅ鍚勫啓涓�浠藉疄鐜般��
+     */
     @Autowired
-    private IvrLibaTemplateScriptMapper ivrLibaTemplateScriptMapper;
-
-    @Autowired
-    private IvrLibaScriptAssortMapper ivrLibaScriptAssortMapper;
-
-    @Autowired
-    private SvyLibScriptCategoryMapper svyLibScriptCategoryMapper;
-
-    @Autowired
-    private IvrLibaTemplateTargetoptionMapper ivrLibaTemplateTargetoptionMapper;
-
-    @Autowired
-    private SvyLibTemplateTargetoptionMapper svyLibTemplateTargetoptionMapper;
-
-    @Autowired
-    private SvyLibTemplateScriptMapper svyLibTemplateScriptMapper;
+    private SatisfactionScoreStrategyResolver satisfactionScoreStrategyResolver;
 
     /**
      * 鏌ヨ鎮h�呮弧鎰忓害
@@ -201,41 +203,33 @@
         int[] personTotals = new int[2];
 
         // 鍙煡鏈鏉′欢涓嬪疄闄呭瓨鍦ㄥ摢浜� type锛堝師鏉ユ槸鎶婃帴杩戝叏琛ㄧ殑涓婄櫨涓瓧娈垫煡鍥炴潵锛屼粎鐢ㄤ簬鍒ゆ柇涓嬮潰涓や釜鍒嗘敮鏄惁涓虹┖锛�
-        List<String> types = serviceSubtaskMapper.selectSatisfactionSubtaskTypes(patSatisfactionReqVO);
+        List<String> types = satisfactionMapper.selectSatisfactionSubtaskTypes(patSatisfactionReqVO);
         boolean hasVoice = types != null && types.contains("1");
         boolean hasQuestionnaire = types != null && types.contains("2");
 
         if (hasVoice) {
-            //1. 鍏堣幏鍙杋vr_liba_script_assort鐨勬弧鎰忓害鍒嗙被ID
-            IvrLibaScriptAssort ivrLibaScriptAssort = new IvrLibaScriptAssort();
-            ivrLibaScriptAssort.setOrgid(patSatisfactionReqVO.getOrgid());
-            List<IvrLibaScriptAssort> ivrLibaScriptAssorts = ivrLibaScriptAssortMapper.selectIvrLibaScriptAssortList(ivrLibaScriptAssort);
-            List<Long> mydIdList = ivrLibaScriptAssorts.stream().filter(item -> item.getType() != null && item.getType().contains("myd")).map(IvrLibaScriptAssort::getId).collect(Collectors.toList());
+            List<SatisfactionCategoryRow> ivrLibaScriptAssorts = satisfactionScriptMapper.selectIvrCategoryList(ivrCategoryQuery(patSatisfactionReqVO));
+            List<Long> mydIdList = ivrLibaScriptAssorts.stream().filter(item -> item.getType() != null && item.getType().contains("myd")).map(SatisfactionCategoryRow::getId).collect(Collectors.toList());
 
-            //2 鍐嶈幏鍙栬闂婊℃剰搴﹀垎绫讳笅鐨処vrLibaTemplateScript鐨勯泦鍚�
-            List<IvrLibaTemplateScript> ivrLibaTemplateScripts = ivrLibaTemplateScriptMapper.queryLibTemplateIds(mydIdList);
+            List<SatisfactionIvrScriptRow> ivrLibaTemplateScripts = satisfactionScriptMapper.queryIvrScriptByAssort(assortQuery(mydIdList));
 
             //3 涓�娆$粺璁″叏閮ㄩ棶棰樼殑鍙戦�侀噺/濉姤閲�/閫夐」鍒嗗�硷紙鍘熸潵鏄瘡涓棶棰樺悇鏌� 3 娆★級
             List<SatScriptRef> scriptRefs = new ArrayList<>();
-            for (IvrLibaTemplateScript ivrLibaTemplateScript : ivrLibaTemplateScripts) {
+            for (SatisfactionIvrScriptRow ivrLibaTemplateScript : ivrLibaTemplateScripts) {
                 scriptRefs.add(new SatScriptRef(ivrLibaTemplateScript.getTemplateid(), ivrLibaTemplateScript.getScriptid(), ivrLibaTemplateScript.getScriptContent()));
             }
             buildSatisfactionDetailEntities(patSatisfactionReqVO, "1", true, scriptRefs, patSatisfactionDetailEntities, personTotals);
         }
 
         if (hasQuestionnaire) {
-            //1. 鍏堣幏鍙杝vy_lib_script_category鐨勬弧鎰忓害鍒嗙被ID
-            SvyLibScriptCategory svyLibScriptCategory = new SvyLibScriptCategory();
-            svyLibScriptCategory.setOrgid(patSatisfactionReqVO.getOrgid());
-            List<SvyLibScriptCategory> svyLibScriptCategories = svyLibScriptCategoryMapper.selectSvyLibScriptCategoryList(svyLibScriptCategory);
-            List<Long> mydIdList = svyLibScriptCategories.stream().filter(item -> item.getType() != null && item.getType().contains("myd")).map(SvyLibScriptCategory::getId).collect(Collectors.toList());
+            List<SatisfactionCategoryRow> svyLibScriptCategories = satisfactionScriptMapper.selectSvyCategoryList(svyCategoryQuery(patSatisfactionReqVO));
+            List<Long> mydIdList = svyLibScriptCategories.stream().filter(item -> item.getType() != null && item.getType().contains("myd")).map(SatisfactionCategoryRow::getId).collect(Collectors.toList());
 
-            //2 鍐嶈幏鍙栬闂婊℃剰搴﹀垎绫讳笅鐨処vrLibaTemplateScript鐨勯泦鍚�
-            List<SvyLibTemplateScript> svyLibTemplateScripts = svyLibTemplateScriptMapper.querySvyLibTemplateIds(mydIdList);
+            List<SatisfactionSvyScriptRow> svyLibTemplateScripts = satisfactionScriptMapper.querySvyScriptByCategory(categoryQuery(mydIdList));
 
             //3 涓�娆$粺璁″叏閮ㄩ棶棰樼殑鍙戦�侀噺/濉姤閲�/閫夐」鍒嗗�硷紙鍘熸潵鏄瘡涓棶棰樺悇鏌� 3 娆★級
             List<SatScriptRef> scriptRefs = new ArrayList<>();
-            for (SvyLibTemplateScript svyLibTemplateScript : svyLibTemplateScripts) {
+            for (SatisfactionSvyScriptRow svyLibTemplateScript : svyLibTemplateScripts) {
                 // 闂嵎鐨勯�夐」琛ㄦ寜 svy_lib_template_script 鐨勪富閿叧鑱�
                 scriptRefs.add(new SatScriptRef(svyLibTemplateScript.getSvyid(), svyLibTemplateScript.getId(), svyLibTemplateScript.getScriptContent()));
             }
@@ -264,21 +258,18 @@
         int[] personTotals = new int[2];
 
         // 鍙煡鏈鏉′欢涓嬪疄闄呭瓨鍦ㄥ摢浜� type锛堝師鏉ユ槸鎶婃帴杩戝叏琛ㄧ殑涓婄櫨涓瓧娈垫煡鍥炴潵锛屼粎鐢ㄤ簬鍒ゆ柇涓嬮潰涓や釜鍒嗘敮鏄惁涓虹┖锛�
-        List<String> types = serviceSubtaskMapper.selectSatisfactionSubtaskTypes(patSatisfactionReqVO);
+        List<String> types = satisfactionMapper.selectSatisfactionSubtaskTypes(patSatisfactionReqVO);
         boolean hasVoice = types != null && types.contains("1");
         boolean hasQuestionnaire = types != null && types.contains("2");
 
         if (hasVoice) {
             //1. 鍏堣幏鍙栧叆鍙備腑鐨勭淮鎶ら泦鍚�
-            IvrLibaTemplateScript iltscript = new IvrLibaTemplateScript();
-            iltscript.setDimensionList(patSatisfactionReqVO.getDimensionList());
 
-            //2 鍐嶈幏鍙栬闂婊℃剰搴﹀垎绫讳笅鐨処vrLibaTemplateScript鐨勯泦鍚�
-            List<IvrLibaTemplateScript> ivrLibaTemplateScripts = ivrLibaTemplateScriptMapper.selectILTSBydimension(iltscript);
+            List<SatisfactionIvrScriptRow> ivrLibaTemplateScripts = satisfactionScriptMapper.selectIvrScriptByDimension(dimensionQuery(patSatisfactionReqVO));
             if (CollectionUtils.isNotEmpty(ivrLibaTemplateScripts)) {
                 //3 涓�娆$粺璁″叏閮ㄩ棶棰樼殑鍙戦�侀噺/濉姤閲�/閫夐」鍒嗗�硷紙鍘熸潵鏄瘡涓棶棰樺悇鏌� 3 娆★級
                 List<SatScriptRef> scriptRefs = new ArrayList<>();
-                for (IvrLibaTemplateScript ivrLibaTemplateScript : ivrLibaTemplateScripts) {
+                for (SatisfactionIvrScriptRow ivrLibaTemplateScript : ivrLibaTemplateScripts) {
                     scriptRefs.add(new SatScriptRef(ivrLibaTemplateScript.getTemplateid(), ivrLibaTemplateScript.getScriptid(), ivrLibaTemplateScript.getScriptContent()));
                 }
                 buildSatisfactionDetailEntities(patSatisfactionReqVO, "1", true, scriptRefs, patSatisfactionDetailEntities, personTotals);
@@ -287,14 +278,11 @@
 
         if (hasQuestionnaire) {
             //1. 鍏堣幏鍙栧叆鍙備腑鐨勬弧鎰忓害缁村害
-            SvyLibTemplateScriptVO svyLibTemplateScriptVO = new SvyLibTemplateScriptVO();
-            svyLibTemplateScriptVO.setDimensionList(patSatisfactionReqVO.getDimensionList());
-            //2 鍐嶈幏鍙栬闂婊℃剰搴﹀垎绫讳笅鐨処vrLibaTemplateScript鐨勯泦鍚�
-            List<SvyLibTemplateScript> svyLibTemplateScripts = svyLibTemplateScriptMapper.selectSLTScriptListBydimension(svyLibTemplateScriptVO);
+            List<SatisfactionSvyScriptRow> svyLibTemplateScripts = satisfactionScriptMapper.selectSvyScriptByDimension(dimensionQuery(patSatisfactionReqVO));
             if (CollectionUtils.isNotEmpty(svyLibTemplateScripts)) {
                 //3 涓�娆$粺璁″叏閮ㄩ棶棰樼殑鍙戦�侀噺/濉姤閲�/閫夐」鍒嗗�硷紙鍘熸潵鏄瘡涓棶棰樺悇鏌� 3 娆★級
                 List<SatScriptRef> scriptRefs = new ArrayList<>();
-                for (SvyLibTemplateScript svyLibTemplateScript : svyLibTemplateScripts) {
+                for (SatisfactionSvyScriptRow svyLibTemplateScript : svyLibTemplateScripts) {
                     // 闂嵎鐨勯�夐」琛ㄦ寜 svy_lib_template_script 鐨勪富閿叧鑱�
                     scriptRefs.add(new SatScriptRef(svyLibTemplateScript.getSvyid(), svyLibTemplateScript.getId(), svyLibTemplateScript.getScriptContent()));
                 }
@@ -317,24 +305,20 @@
         Map<String, List<ScoreCount>> assortNameFillCountMap = new HashMap<>();
 
         if (patSatisfactionReqVO.getType() == null || patSatisfactionReqVO.getType() == 1) {
-            //1. 鍏堣幏鍙杋vr_liba_script_assort鐨勬弧鎰忓害鍒嗙被ID
-            IvrLibaScriptAssort ivrLibaScriptAssort = new IvrLibaScriptAssort();
-            ivrLibaScriptAssort.setOrgid(patSatisfactionReqVO.getOrgid());
-            List<IvrLibaScriptAssort> ivrLibaScriptAssorts = ivrLibaScriptAssortMapper.selectIvrLibaScriptAssortList(ivrLibaScriptAssort);
-            List<Long> mydIdList = ivrLibaScriptAssorts.stream().filter(item -> item.getType() != null && item.getType().contains("myd")).map(IvrLibaScriptAssort::getId).collect(Collectors.toList());
+            List<SatisfactionCategoryRow> ivrLibaScriptAssorts = satisfactionScriptMapper.selectIvrCategoryList(ivrCategoryQuery(patSatisfactionReqVO));
+            List<Long> mydIdList = ivrLibaScriptAssorts.stream().filter(item -> item.getType() != null && item.getType().contains("myd")).map(SatisfactionCategoryRow::getId).collect(Collectors.toList());
 
-            //2 鍐嶈幏鍙栬闂婊℃剰搴﹀垎绫讳笅鐨処vrLibaTemplateScript鐨勯泦鍚�
-            List<IvrLibaTemplateScript> ivrLibaTemplateScripts = ivrLibaTemplateScriptMapper.queryLibTemplateIds(mydIdList);
+            List<SatisfactionIvrScriptRow> ivrLibaTemplateScripts = satisfactionScriptMapper.queryIvrScriptByAssort(assortQuery(mydIdList));
 
             //2.1 涓�娆℃�ф妸鏈璇锋眰鍏ㄩ儴妯℃澘鐨勫彂閫侀噺銆佸洖鏀朵汉鏁版煡鍥炴潵锛堝師鏉ユ槸姣忎釜妯℃澘闂鍚勬煡涓ゆ锛�
             SatisfactionStatQuery statQuery = buildSatisfactionStatQuery(patSatisfactionReqVO, "1",
-                    ivrLibaTemplateScripts.stream().map(IvrLibaTemplateScript::getTemplateid).collect(Collectors.toList()));
+                    ivrLibaTemplateScripts.stream().map(SatisfactionIvrScriptRow::getTemplateid).collect(Collectors.toList()));
             Map<Long, Long> sendCountMap = mapSatisfactionSendCount(statQuery);
             SatisfactionFillStat fillStat = querySatisfactionFillStat(statQuery);
             Map<Long, Long> fillPersonCountMap = mapSatisfactionFillPersonCount(statQuery);
 
             //3 鎸塻criptAssortname鍒嗙粍,骞惰幏鍙栨瘡涓泦鍚堣繘琛岄亶鍘嗭紝璁$畻姣忎釜鍒嗙被鐨勬�讳汉鏁板拰濉姤浜烘暟
-            Map<String, List<IvrLibaTemplateScript>> scriptGroupByAssortName = ivrLibaTemplateScripts.stream().filter(item -> item.getScriptAssortname() != null).collect(Collectors.groupingBy(IvrLibaTemplateScript::getScriptAssortname));
+            Map<String, List<SatisfactionIvrScriptRow>> scriptGroupByAssortName = ivrLibaTemplateScripts.stream().filter(item -> item.getScriptAssortname() != null).collect(Collectors.groupingBy(SatisfactionIvrScriptRow::getScriptAssortname));
             if (scriptGroupByAssortName != null && !scriptGroupByAssortName.isEmpty()) {
                 for (String assortNameKey : scriptGroupByAssortName.keySet()) {
                     // 璇ュ垎绫绘秹鍙婄殑鍘婚噸妯℃澘锛氬彂閫佷汉鏁�/鍥炴敹浜烘暟閮芥寜妯℃澘缁熻锛�
@@ -343,8 +327,8 @@
                     //鑾峰彇璇ュ垎绫荤殑濉姤鎬绘暟閲忥紙鍙敤浜庣畻骞冲潎鍒嗭紝鎸夐鐩仛鍚堢殑琛屾暟锛�
                     List<ScoreCount> allFillCountList = new ArrayList<>();
 
-                    List<IvrLibaTemplateScript> ivrLibaTemplateScriptList = scriptGroupByAssortName.get(assortNameKey);
-                    for (IvrLibaTemplateScript ivrLibaTemplateScript : ivrLibaTemplateScriptList) {
+                    List<SatisfactionIvrScriptRow> ivrLibaTemplateScriptList = scriptGroupByAssortName.get(assortNameKey);
+                    for (SatisfactionIvrScriptRow ivrLibaTemplateScript : ivrLibaTemplateScriptList) {
                         Long templateId = ivrLibaTemplateScript.getTemplateid();
                         if (templateId != null) {
                             categoryTemplateIds.add(templateId);
@@ -375,24 +359,20 @@
         }
 
         if (patSatisfactionReqVO.getType() == null || patSatisfactionReqVO.getType() == 2) {
-            //1. 鍏堣幏鍙杝vy_lib_script_category鐨勬弧鎰忓害鍒嗙被ID
-            SvyLibScriptCategory svyLibScriptCategory = new SvyLibScriptCategory();
-            svyLibScriptCategory.setOrgid(patSatisfactionReqVO.getOrgid());
-            List<SvyLibScriptCategory> svyLibScriptCategories = svyLibScriptCategoryMapper.selectSvyLibScriptCategoryList(svyLibScriptCategory);
-            List<Long> mydIdList = svyLibScriptCategories.stream().filter(item -> item.getType() != null && item.getType().contains("myd")).map(SvyLibScriptCategory::getId).collect(Collectors.toList());
+            List<SatisfactionCategoryRow> svyLibScriptCategories = satisfactionScriptMapper.selectSvyCategoryList(svyCategoryQuery(patSatisfactionReqVO));
+            List<Long> mydIdList = svyLibScriptCategories.stream().filter(item -> item.getType() != null && item.getType().contains("myd")).map(SatisfactionCategoryRow::getId).collect(Collectors.toList());
 
-            //2 鍐嶈幏鍙栬闂婊℃剰搴﹀垎绫讳笅鐨処vrLibaTemplateScript鐨勯泦鍚�
-            List<SvyLibTemplateScript> svyLibTemplateScripts = svyLibTemplateScriptMapper.querySvyLibTemplateIds(mydIdList);
+            List<SatisfactionSvyScriptRow> svyLibTemplateScripts = satisfactionScriptMapper.querySvyScriptByCategory(categoryQuery(mydIdList));
 
             //2.1 涓�娆℃�ф妸鏈璇锋眰鍏ㄩ儴妯℃澘鐨勫彂閫侀噺銆佸洖鏀朵汉鏁版煡鍥炴潵锛堝師鏉ユ槸姣忎釜妯℃澘闂鍚勬煡涓ゆ锛�
             SatisfactionStatQuery statQuery = buildSatisfactionStatQuery(patSatisfactionReqVO, "2",
-                    svyLibTemplateScripts.stream().map(SvyLibTemplateScript::getSvyid).collect(Collectors.toList()));
+                    svyLibTemplateScripts.stream().map(SatisfactionSvyScriptRow::getSvyid).collect(Collectors.toList()));
             Map<Long, Long> sendCountMap = mapSatisfactionSendCount(statQuery);
             SatisfactionFillStat fillStat = querySatisfactionFillStat(statQuery);
             Map<Long, Long> fillPersonCountMap = mapSatisfactionFillPersonCount(statQuery);
 
             //3 鎸塻criptAssortname鍒嗙粍,骞惰幏鍙栨瘡涓泦鍚堣繘琛岄亶鍘嗭紝璁$畻姣忎釜鍒嗙被鐨勬�讳汉鏁板拰濉姤浜烘暟
-            Map<String, List<SvyLibTemplateScript>> scriptGroupByatCegoryName = svyLibTemplateScripts.stream().filter(item -> item.getCategoryName() != null).collect(Collectors.groupingBy(SvyLibTemplateScript::getCategoryName));
+            Map<String, List<SatisfactionSvyScriptRow>> scriptGroupByatCegoryName = svyLibTemplateScripts.stream().filter(item -> item.getCategoryName() != null).collect(Collectors.groupingBy(SatisfactionSvyScriptRow::getCategoryName));
             if (scriptGroupByatCegoryName != null && !scriptGroupByatCegoryName.isEmpty()) {
                 for (String categoryNameKey : scriptGroupByatCegoryName.keySet()) {
                     // 璇ュ垎绫绘秹鍙婄殑鍘婚噸妯℃澘锛氬彂閫佷汉鏁�/鍥炴敹浜烘暟閮芥寜妯℃澘缁熻锛�
@@ -401,8 +381,8 @@
                     //鑾峰彇璇ュ垎绫荤殑濉姤鎬绘暟閲忥紙鍙敤浜庣畻骞冲潎鍒嗭紝鎸夐鐩仛鍚堢殑琛屾暟锛�
                     List<ScoreCount> allFillCountList = new ArrayList<>();
 
-                    List<SvyLibTemplateScript> svyLibTemplateScriptList = scriptGroupByatCegoryName.get(categoryNameKey);
-                    for (SvyLibTemplateScript svyLibTemplateScript : svyLibTemplateScriptList) {
+                    List<SatisfactionSvyScriptRow> svyLibTemplateScriptList = scriptGroupByatCegoryName.get(categoryNameKey);
+                    for (SatisfactionSvyScriptRow svyLibTemplateScript : svyLibTemplateScriptList) {
                         Long templateId = svyLibTemplateScript.getSvyid();
                         if (templateId != null) {
                             categoryTemplateIds.add(templateId);
@@ -419,7 +399,6 @@
                         subidAll += sendCountMap.getOrDefault(templateId, 0L);
                         fillCountAll += fillPersonCountMap.getOrDefault(templateId, 0L);
                     }
-
 
                     // 杩欓噷鍏堣褰曚竴涓嬫瘡涓垎绫荤殑鎬讳汉鏁板拰濉姤浜烘暟
                     Map<String, Object> personCount = (Map<String, Object>) zzt.get(categoryNameKey);
@@ -449,7 +428,6 @@
         return zzt;
     }
 
-
     @Override
     public Map<String, Object> satisfactionGraphDimension(PatSatisfactionReqVO patSatisfactionReqVO) {
         //鐢ㄦ潵璁板綍鏌辩姸鍥句俊鎭紙key=婊℃剰搴︾淮搴﹀悕绉帮紝value=璇ョ淮搴︿笅鐨勬�讳汉鏁板拰濉姤浜烘暟锛�
@@ -459,21 +437,17 @@
         Map<String, List<ScoreCount>> assortNameFillCountMap = new HashMap<>();
 
         if (patSatisfactionReqVO.getType() == null || patSatisfactionReqVO.getType() == 1) {
-            //1. 浠庡叆鍙備腑鑾峰彇婊℃剰搴︾淮缁村害
-            IvrLibaTemplateScript ivrLibaTemplateScript2 = new IvrLibaTemplateScript();
-            ivrLibaTemplateScript2.setDimensionList(patSatisfactionReqVO.getDimensionList());
 
-            //2 鍐嶈幏鍙栬闂婊℃剰搴﹀垎绫讳笅鐨処vrLibaTemplateScript鐨勯泦鍚�
-            List<IvrLibaTemplateScript> ivrLibaTemplateScripts = ivrLibaTemplateScriptMapper.selectILTSBydimension(ivrLibaTemplateScript2);
+            List<SatisfactionIvrScriptRow> ivrLibaTemplateScripts = satisfactionScriptMapper.selectIvrScriptByDimension(dimensionQuery(patSatisfactionReqVO));
             if (ivrLibaTemplateScripts != null && !ivrLibaTemplateScripts.isEmpty()) {
                 //3 鎸塪imension缁村害鍒嗙粍,骞惰幏鍙栨瘡涓泦鍚堣繘琛岄亶鍘嗭紝璁$畻姣忎釜鍒嗙被鐨勬�讳汉鏁板拰濉姤浜烘暟
-                List<IvrLibaTemplateScript> dimensionScripts = ivrLibaTemplateScripts.stream().filter(item -> item.getDimension() != null).collect(Collectors.toList());
-                Map<String, List<IvrLibaTemplateScript>> groupByDimension = dimensionScripts.stream().collect(Collectors.groupingBy(IvrLibaTemplateScript::getDimension));
+                List<SatisfactionIvrScriptRow> dimensionScripts = ivrLibaTemplateScripts.stream().filter(item -> item.getDimension() != null).collect(Collectors.toList());
+                Map<String, List<SatisfactionIvrScriptRow>> groupByDimension = dimensionScripts.stream().collect(Collectors.groupingBy(SatisfactionIvrScriptRow::getDimension));
 
                 if (groupByDimension != null && !groupByDimension.isEmpty()) {
                     //3.1 涓�娆℃�ф妸鏈璇锋眰鍏ㄩ儴妯℃澘鐨勫彂閫侀噺銆佸洖鏀朵汉鏁版煡鍥炴潵锛堝師鏉ユ槸姣忎釜妯℃澘闂鍚勬煡涓ゆ锛�
                     SatisfactionStatQuery statQuery = buildSatisfactionStatQuery(patSatisfactionReqVO, "1",
-                            dimensionScripts.stream().map(IvrLibaTemplateScript::getTemplateid).collect(Collectors.toList()));
+                            dimensionScripts.stream().map(SatisfactionIvrScriptRow::getTemplateid).collect(Collectors.toList()));
                     Map<Long, Long> sendCountMap = mapSatisfactionSendCount(statQuery);
                     SatisfactionFillStat fillStat = querySatisfactionFillStat(statQuery);
                     Map<Long, Long> fillPersonCountMap = mapSatisfactionFillPersonCount(statQuery);
@@ -484,8 +458,8 @@
                         //鑾峰彇璇ョ淮搴︾殑濉姤鍒嗗�煎垎甯冿紙鍙敤浜庣畻骞冲潎鍒嗭級
                         List<ScoreCount> allFillCountList = new ArrayList<>();
 
-                        List<IvrLibaTemplateScript> ivrLibaTemplateScriptList = groupByDimension.get(dimension);
-                        for (IvrLibaTemplateScript ivrLibaTemplateScript : ivrLibaTemplateScriptList) {
+                        List<SatisfactionIvrScriptRow> ivrLibaTemplateScriptList = groupByDimension.get(dimension);
+                        for (SatisfactionIvrScriptRow ivrLibaTemplateScript : ivrLibaTemplateScriptList) {
                             Long templateId = ivrLibaTemplateScript.getTemplateid();
                             if (templateId != null) {
                                 dimensionTemplateIds.add(templateId);
@@ -518,19 +492,16 @@
 
         if (patSatisfactionReqVO.getType() == null || patSatisfactionReqVO.getType() == 2) {
             //1.  浠庡叆鍙備腑鑾峰彇婊℃剰搴︾淮缁村害
-            SvyLibTemplateScriptVO svyLibTemplateScriptVO = new SvyLibTemplateScriptVO();
-            svyLibTemplateScriptVO.setDimensionList(patSatisfactionReqVO.getDimensionList());
 
-            //2 鍐嶈幏鍙栬闂婊℃剰搴﹀垎绫讳笅鐨処vrLibaTemplateScript鐨勯泦鍚�
-            List<SvyLibTemplateScript> svyLibTemplateScripts = svyLibTemplateScriptMapper.selectSLTScriptListBydimension(svyLibTemplateScriptVO);
+            List<SatisfactionSvyScriptRow> svyLibTemplateScripts = satisfactionScriptMapper.selectSvyScriptByDimension(dimensionQuery(patSatisfactionReqVO));
             if (svyLibTemplateScripts != null && !svyLibTemplateScripts.isEmpty()) {
                 //3 鎸塪imension缁村害鍒嗙粍,骞惰幏鍙栨瘡涓泦鍚堣繘琛岄亶鍘嗭紝璁$畻姣忎釜鍒嗙被鐨勬�讳汉鏁板拰濉姤浜烘暟
-                List<SvyLibTemplateScript> dimensionScripts = svyLibTemplateScripts.stream().filter(item -> item.getDimension() != null).collect(Collectors.toList());
-                Map<String, List<SvyLibTemplateScript>> groupByDimension = dimensionScripts.stream().collect(Collectors.groupingBy(SvyLibTemplateScript::getDimension));
+                List<SatisfactionSvyScriptRow> dimensionScripts = svyLibTemplateScripts.stream().filter(item -> item.getDimension() != null).collect(Collectors.toList());
+                Map<String, List<SatisfactionSvyScriptRow>> groupByDimension = dimensionScripts.stream().collect(Collectors.groupingBy(SatisfactionSvyScriptRow::getDimension));
                 if (groupByDimension != null && !groupByDimension.isEmpty()) {
                     //3.1 涓�娆℃�ф妸鏈璇锋眰鍏ㄩ儴妯℃澘鐨勫彂閫侀噺銆佸洖鏀朵汉鏁版煡鍥炴潵锛堝師鏉ユ槸姣忎釜妯℃澘闂鍚勬煡涓ゆ锛�
                     SatisfactionStatQuery statQuery = buildSatisfactionStatQuery(patSatisfactionReqVO, "2",
-                            dimensionScripts.stream().map(SvyLibTemplateScript::getSvyid).collect(Collectors.toList()));
+                            dimensionScripts.stream().map(SatisfactionSvyScriptRow::getSvyid).collect(Collectors.toList()));
                     Map<Long, Long> sendCountMap = mapSatisfactionSendCount(statQuery);
                     SatisfactionFillStat fillStat = querySatisfactionFillStat(statQuery);
                     Map<Long, Long> fillPersonCountMap = mapSatisfactionFillPersonCount(statQuery);
@@ -541,8 +512,8 @@
                         //鑾峰彇璇ュ垎绫荤殑濉姤鍒嗗�煎垎甯冿紙鍙敤浜庣畻骞冲潎鍒嗭級
                         List<ScoreCount> allFillCountList = new ArrayList<>();
 
-                        List<SvyLibTemplateScript> svyLibTemplateScriptList = groupByDimension.get(dimension);
-                        for (SvyLibTemplateScript svyLibTemplateScript : svyLibTemplateScriptList) {
+                        List<SatisfactionSvyScriptRow> svyLibTemplateScriptList = groupByDimension.get(dimension);
+                        for (SatisfactionSvyScriptRow svyLibTemplateScript : svyLibTemplateScriptList) {
                             Long templateId = svyLibTemplateScript.getSvyid();
                             if (templateId != null) {
                                 dimensionTemplateIds.add(templateId);
@@ -559,7 +530,6 @@
                             subidAll += sendCountMap.getOrDefault(templateId, 0L);
                             fillCountAll += fillPersonCountMap.getOrDefault(templateId, 0L);
                         }
-
 
                         // 杩欓噷鍏堣褰曚竴涓嬫瘡涓垎绫荤殑鎬讳汉鏁板拰濉姤浜烘暟
                         Map<String, Object> personCount = (Map<String, Object>) zzt.get(dimension);
@@ -590,53 +560,7 @@
         return zzt;
     }
 
-    /**
-     * 鑾峰彇鏈�楂樺垎
-     *
-     * @param options
-     * @return
-     */
-    private Double maxScore(List<IvrLibaTemplateTargetoption> options) {
-        if (CollectionUtils.isEmpty(options)) return 0.0;
-        Double maxScore = options.stream()
-                .map(IvrLibaTemplateTargetoption::getScore)
-                .filter(scoreStr -> scoreStr != null && !scoreStr.isEmpty())
-                .mapToDouble(Double::parseDouble)
-                .max()
-                .orElse(0.0);
-        return maxScore;
-    }
-
-    /**
-     * 鑾峰彇鏈�浣庡垎
-     *
-     * @param options
-     * @return
-     */
-    private Double minScore(List<IvrLibaTemplateTargetoption> options) {
-        if (CollectionUtils.isEmpty(options)) return 0.0;
-        Double minScore = options.stream()
-                .map(IvrLibaTemplateTargetoption::getScore)
-                .filter(scoreStr -> scoreStr != null && !scoreStr.isEmpty())
-                .mapToDouble(Double::parseDouble)
-                .min()
-                .orElse(0.0);
-        return minScore;
-    }
-
-    /**
-     * 鑾峰彇骞冲潎鍒�
-     *
-     * @param fillCount
-     * @return
-     */
-    private Double averageScore(List<ServiceSubtaskDetailDTO> fillCount) {
-        if (CollectionUtils.isEmpty(fillCount)) return 0.0;
-        double sum = fillCount.stream().filter(dto -> dto.getScore() != null && !dto.getScore().isEmpty()).mapToDouble(dto -> Double.parseDouble(dto.getScore())).sum();
-        return new BigDecimal(sum / fillCount.size()).setScale(1, RoundingMode.HALF_UP).doubleValue();
-    }
-
-    // ==================== satisfactionGraph 鑱氬悎缁熻锛堟浛浠i�愪釜妯℃澘鏌ュ簱锛� ====================
+                // ==================== satisfactionGraph 鑱氬悎缁熻锛堟浛浠i�愪釜妯℃澘鏌ュ簱锛� ====================
 
     /**
      * 鏋勫缓鑱氬悎缁熻鍏ュ弬锛堝彇鍊兼潵婧愪笌鍘� DtoConversionUtils.sourceToTarget(patSatisfactionReqVO, ServiceSubtaskSatisfactionEntity.class) 涓�鑷达級
@@ -667,7 +591,7 @@
     private Map<Long, Long> mapSatisfactionSendCount(SatisfactionStatQuery statQuery) {
         Map<Long, Long> sendCountMap = new HashMap<>();
         if (statQuery == null || CollectionUtils.isEmpty(statQuery.getLibTemplateIds())) return sendCountMap;
-        List<Map<String, Object>> rows = serviceSubtaskMapper.selectSatisfactionSendCount(statQuery);
+        List<Map<String, Object>> rows = satisfactionMapper.selectSatisfactionSendCount(statQuery);
         if (CollectionUtils.isEmpty(rows)) return sendCountMap;
         for (Map<String, Object> row : rows) {
             Long templateId = toLong(row.get("libtemplateid"));
@@ -685,7 +609,7 @@
     private Map<Long, Long> mapSatisfactionFillPersonCount(SatisfactionStatQuery statQuery) {
         Map<Long, Long> fillPersonCountMap = new HashMap<>();
         if (statQuery == null || CollectionUtils.isEmpty(statQuery.getLibTemplateIds())) return fillPersonCountMap;
-        List<Map<String, Object>> rows = serviceSubtaskDetailMapper.selectSatisfactionFillPersonCount(statQuery);
+        List<Map<String, Object>> rows = satisfactionMapper.selectSatisfactionFillPersonCount(statQuery);
         if (CollectionUtils.isEmpty(rows)) return fillPersonCountMap;
         for (Map<String, Object> row : rows) {
             Long templateId = toLong(row.get("libtemplateid"));
@@ -701,7 +625,7 @@
     private SatisfactionFillStat querySatisfactionFillStat(SatisfactionStatQuery statQuery) {
         SatisfactionFillStat fillStat = new SatisfactionFillStat();
         if (statQuery == null || CollectionUtils.isEmpty(statQuery.getLibTemplateIds())) return fillStat;
-        List<Map<String, Object>> rows = serviceSubtaskDetailMapper.selectSatisfactionFillStat(statQuery);
+        List<Map<String, Object>> rows = satisfactionMapper.selectSatisfactionFillStat(statQuery);
         if (CollectionUtils.isEmpty(rows)) return fillStat;
         for (Map<String, Object> row : rows) {
             Long templateId = toLong(row.get("libtemplateid"));
@@ -719,22 +643,31 @@
     /**
      * 鑾峰彇骞冲潎鍒嗭紙鑱氬悎鐗堬細鍒嗗�间笌鏉℃暟锛�
      * <p>
-     * 鍙e緞涓� {@link #averageScore(List)} 瀹屽叏涓�鑷达細鍒嗗瓙涓哄彲瑙f瀽鍒嗗�间箣鍜岋紝鍒嗘瘝涓烘槑缁嗚鏁帮紙鍖呭惈鍒嗗�间负绌虹殑琛岋級銆�
+     * 鍙e緞涓庡師 {@code averageScore(List)} 瀹屽叏涓�鑷达細鍒嗗瓙涓哄彲瑙f瀽鍒嗗�间箣鍜岋紝鍒嗘瘝涓烘槑缁嗚鏁帮紙鍖呭惈鍒嗗�间负绌虹殑琛岋級銆�
      * 娉ㄦ剰涓嶈兘鏀规垚 sql 鐨� avg() 鎴栥�屾湁鍒嗗�肩殑琛屾暟銆嶅仛鍒嗘瘝锛屽惁鍒欒繑鍥炵殑 averageScore 浼氬彉銆�
+     * <p>
+     * <b>绛栫暐鍖栵紙2026锛�</b>锛氱湡姝g殑绠楁硶宸叉敹鏁涘埌銆岄�氱敤鍙e緞锛堝崡鍗庯級銆嶇瓥鐣�
+     * {@link com.ruoyi.satisfaction.service.strategy.CommonSatisfactionScoreStrategy}锛�
+     * 鏈柟娉曞彧鍋氬叆鍙傞�傞厤锛堟妸鍐呴儴 {@code ScoreCount} 杞垚缁熶竴鐨勫崰姣旇锛夈��
+     * <b>璁$畻缁撴灉涓庤縼绉诲墠閫愪綅鐩稿悓</b>锛堜繚鐣� 1 浣嶃�丠ALF_UP锛涙棤琛屾椂 0.0锛夈��
      */
     private Double averageScoreByStat(List<ScoreCount> fillCount) {
         if (CollectionUtils.isEmpty(fillCount)) return 0.0;
-        double sum = 0.0;
-        long rows = 0L;
+
+        // 閫傞厤鎴愮瓥鐣ョ殑缁熶竴鍏ュ弬锛氬彧甯� score 涓� count 涓や釜瀛楁锛堢瓥鐣ュ彧鐢ㄥ埌杩欎袱涓級
+        List<ServiceSubtaskDetailRatioExport> rows = new ArrayList<>(fillCount.size());
         for (ScoreCount scoreCount : fillCount) {
-            if (scoreCount.getCount() <= 0L) continue;
-            rows += scoreCount.getCount();
-            if (scoreCount.getScore() != null && !scoreCount.getScore().isEmpty()) {
-                sum += Double.parseDouble(scoreCount.getScore()) * scoreCount.getCount();
-            }
+            if (scoreCount.getCount() <= 0L) continue;   // 涓庡師鏂囦竴鑷达細闈炴鏁扮殑鑱氬悎琛屼笉鍙備笌
+            ServiceSubtaskDetailRatioExport row = new ServiceSubtaskDetailRatioExport();
+            row.setScore(scoreCount.getScore());
+            row.setCount(String.valueOf(scoreCount.getCount()));
+            rows.add(row);
         }
-        if (rows == 0L) return 0.0;
-        return new BigDecimal(sum / rows).setScale(1, RoundingMode.HALF_UP).doubleValue();
+
+        BigDecimal average = satisfactionScoreStrategyResolver
+                .resolve(SatisfactionSites.COMMON)
+                .comprehensiveScore(rows);
+        return average == null ? 0.0 : average.doubleValue();
     }
 
     /**
@@ -863,7 +796,7 @@
     private SatisfactionFillStatByMatchedtext querySatisfactionFillStatByMatchedtext(SatisfactionStatQuery statQuery) {
         SatisfactionFillStatByMatchedtext fillStat = new SatisfactionFillStatByMatchedtext();
         if (statQuery == null || CollectionUtils.isEmpty(statQuery.getLibTemplateIds())) return fillStat;
-        List<Map<String, Object>> rows = serviceSubtaskDetailMapper.selectSatisfactionFillStatByMatchedtext(statQuery);
+        List<Map<String, Object>> rows = satisfactionMapper.selectSatisfactionFillStatByMatchedtext(statQuery);
         if (CollectionUtils.isEmpty(rows)) return fillStat;
         for (Map<String, Object> row : rows) {
             Long templateId = toLong(row.get("libtemplateid"));
@@ -894,34 +827,33 @@
                 .filter(Objects::nonNull).distinct().collect(Collectors.toList());
         if (CollectionUtils.isNotEmpty(scriptIds)) {
             addTargetOptionScores(optionScores, voice
-                    ? ivrLibaTemplateTargetoptionMapper.selectIvrLibaTargetoptionScores(scriptIds)
-                    : svyLibTemplateTargetoptionMapper.selectSvyLibTargetoptionScores(scriptIds));
+                    ? satisfactionScriptMapper.selectIvrTargetOptionScores(scriptIds)
+                    : satisfactionScriptMapper.selectSvyTargetOptionScores(scriptIds));
         }
         if (scriptRefs.stream().anyMatch(ref -> ref.getOptionScriptId() == null)) {
             optionScores.put(null, collectTargetOptionScores(voice
-                    ? ivrLibaTemplateTargetoptionMapper.selectIvrLibaTargetoptionScores(null)
-                    : svyLibTemplateTargetoptionMapper.selectSvyLibTargetoptionScores(null)));
+                    ? satisfactionScriptMapper.selectIvrTargetOptionScores(null)
+                    : satisfactionScriptMapper.selectSvyTargetOptionScores(null)));
         }
         return optionScores;
     }
 
-    private void addTargetOptionScores(Map<Long, List<String>> optionScores, List<Map<String, Object>> rows) {
+    private void addTargetOptionScores(Map<Long, List<String>> optionScores,
+                                      List<SatisfactionOptionScoreRow> rows) {
         if (CollectionUtils.isEmpty(rows)) return;
-        for (Map<String, Object> row : rows) {
-            Long scriptId = toLong(row.get("scriptid"));
+        for (SatisfactionOptionScoreRow row : rows) {
+            Long scriptId = row.getScriptid();
             if (scriptId == null) continue;
-            Object score = row.get("score");
             optionScores.computeIfAbsent(scriptId, key -> new ArrayList<>())
-                    .add(score == null ? null : String.valueOf(score));
+                    .add(row.getScore());
         }
     }
 
-    private List<String> collectTargetOptionScores(List<Map<String, Object>> rows) {
+    private List<String> collectTargetOptionScores(List<SatisfactionOptionScoreRow> rows) {
         List<String> scores = new ArrayList<>();
         if (CollectionUtils.isEmpty(rows)) return scores;
-        for (Map<String, Object> row : rows) {
-            Object score = row.get("score");
-            scores.add(score == null ? null : String.valueOf(score));
+        for (SatisfactionOptionScoreRow row : rows) {
+            scores.add(row.getScore());
         }
         return scores;
     }
@@ -1101,4 +1033,46 @@
             return byTemplateQuestion.get(statKey(templateId, scriptContent));
         }
     }
+
+    // ==================== 婊℃剰搴︽ā鍧楀寲锛氭煡璇㈠璞℃瀯閫� ====================
+    // 鍘熷疄鐜扮洿鎺� new smartor 鐨勫疄浣撳綋鍏ュ弬锛涙ā鍧楀寲鍚庣粺涓�鐢� SatisfactionScriptQuery锛�
+    // 杩欓噷鎶婁笁澶勬瀯閫犳敹鏁涗负甯姪鏂规硶锛屾潯浠朵笌鍘熸潵閫愬瓧瀵瑰簲銆�
+
+    /** 婊℃剰搴﹀垎绫绘煡璇紙orgid + type=myd锛� */
+    private SatisfactionScriptQuery ivrCategoryQuery(PatSatisfactionReqVO reqVO) {
+        SatisfactionScriptQuery q = new SatisfactionScriptQuery();
+        q.setOrgid(reqVO.getOrgid());
+        q.setType("myd");
+        return q;
+    }
+
+    /** 婊℃剰搴﹀垎绫绘煡璇紙闂嵎渚э紝鏉′欢鍚岃闊充晶锛� */
+    private SatisfactionScriptQuery svyCategoryQuery(PatSatisfactionReqVO reqVO) {
+        SatisfactionScriptQuery q = new SatisfactionScriptQuery();
+        q.setOrgid(reqVO.getOrgid());
+        q.setType("myd");
+        return q;
+    }
+
+    /** 鎸夎闊冲垎绫� id 鍙栭棶棰� */
+    private SatisfactionScriptQuery assortQuery(List<Long> scriptAssortids) {
+        SatisfactionScriptQuery q = new SatisfactionScriptQuery();
+        q.setScriptAssortids(scriptAssortids);
+        return q;
+    }
+
+    /** 鎸夐棶鍗峰垎绫� id 鍙栭棶棰� */
+    private SatisfactionScriptQuery categoryQuery(List<Long> scriptCategoryids) {
+        SatisfactionScriptQuery q = new SatisfactionScriptQuery();
+        q.setScriptCategoryids(scriptCategoryids);
+        return q;
+    }
+
+    /** 鎸夌淮搴﹀彇闂锛堣闊�/闂嵎鍏辩敤锛涗袱渚с�宒imensionList 涓虹┖鏃舵槸鍚︽嫾 dimension IS NOT NULL銆嶇殑宸紓鍦� SQL 閲屼繚鐣欙級 */
+    private SatisfactionScriptQuery dimensionQuery(PatSatisfactionReqVO reqVO) {
+        SatisfactionScriptQuery q = new SatisfactionScriptQuery();
+        q.setDimensionList(reqVO.getDimensionList());
+        return q;
+    }
+
 }

--
Gitblit v1.9.3