From b3ba85a04a61d342f21b457bc2caad3e844bbf68 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期一, 05 一月 2026 14:08:11 +0800
Subject: [PATCH] 【市一】随访满意度明细调整

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java |   32 ++++++++++++++++
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java            |   52 ++++++++++++++++++++++++++
 smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java                       |   15 +++++++
 smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java                    |    2 +
 4 files changed, 101 insertions(+), 0 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
index b274e73..47a4889 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
@@ -16,9 +16,11 @@
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.DtoConversionUtils;
 import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.common.utils.reflect.ReflectUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
+import com.ruoyi.system.service.ISysConfigService;
 import com.smartor.domain.*;
 import com.smartor.mapper.PatMedInhospMapper;
 import com.smartor.mapper.PatMedOuthospMapper;
@@ -66,6 +68,9 @@
 
     @Autowired
     private IServiceSubtaskRecordService serviceSubtaskRecordService;
+
+    @Autowired
+    private ISysConfigService configService;
 
     @Value("${spring.profiles.active}")
     private String active;
@@ -533,6 +538,33 @@
         return success(serviceSubtaskService.getSfStatisticsJoydetails(serviceSubtaskCountReq));
     }
 
+    @ApiOperation("鑾峰彇闅忚鍒嗙被缁熻鏄庣粏")
+    @PostMapping("/getSfStatisticsCountDetails")
+    public AjaxResult getSfStatisticsCountDetails(@RequestBody ServiceSubtaskCountReq serviceSubtaskCountReq) {
+        if (serviceSubtaskCountReq.getLeavehospitaldistrictcodes().size() == 0 && serviceSubtaskCountReq.getDeptcodes().size() == 0) {
+            return error("绉戝鎴栫梾鍖轰笉鑳戒负绌�");
+        }
+        //澶嶈瘖缁熻
+        String configKey = serviceSubtaskCountReq.getConfigKey();
+        if(StringUtils.isNotEmpty(configKey)){
+            String configValue = configService.selectConfigByKey(configKey);
+            if(StringUtils.isEmpty(configValue)){
+                String logInfo =  "getSfStatisticsCountDetails-鍙傛暟 " + configKey + " 鏈厤缃�, 璇烽厤缃ソ鍚庨噸璇�";
+                log.error(logInfo);
+                return error(logInfo);
+            }
+            serviceSubtaskCountReq.setConfigValue(configValue);
+        }else {
+            String logInfo =  "getSfStatisticsCountDetails-鍙傛暟configKey鏈紶鍏�, 璇烽厤缃ソ鍚庨噸璇�";
+            log.error(logInfo);
+            return error(logInfo);
+        }
+
+        LoginUser loginUser = getLoginUser();
+        String orgid = loginUser.getUser().getOrgid();
+        serviceSubtaskCountReq.setOrgid(orgid);
+        return success(serviceSubtaskService.getSfStatisticsScriptDetails(serviceSubtaskCountReq));
+    }
 
     /**
      * 鍙戦�佺煭淇℃ā鏉�
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
index cd8f56c..d283754 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
@@ -105,6 +105,21 @@
 
     public List<ServiceSubtaskCount> getSfStatisticsJoydetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
+    /**
+     * 鑾峰彇闂缁熻缁撴灉锛堥殢璁匡級
+     *
+     * @return 缁撴灉
+     */
+    public List<ServiceSubtaskScriptCount> getSfStatisticsScriptDetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
+
+    /**
+     * 鑾峰彇闂鍥炵瓟缁熻缁撴灉锛堥殢璁匡級
+     *
+     * @return 缁撴灉
+     */
+    public List<ServiceSubtaskScriptCount> getSfStatisticsScriptItemDetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
+
+
     public List<PatMedRes> getDeptRanking(PatMedReq patMedReq);
 
     public List<ServiceStatisticsResponse> getServiceStatistics(ServiceStatisticsRequest serviceStatisticsRequest);
diff --git a/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java b/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
index aa1eca1..c0dcb0b 100644
--- a/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
+++ b/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
@@ -139,6 +139,8 @@
 
     public List<ServiceStatisticsResponse> getServiceStatistics(ServiceStatisticsRequest request);
 
+    public Map<String, ServiceSubtaskScriptCount> getSfStatisticsScriptDetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
+
     public List<PatArchiveSrmVO> sendMsgTemplate(List<PatArchiveSrmVO> patArchiveSrmVOS);
 
     public List<ServiceSubtaskDiagname> convertToDiagnameList(List<ServiceSubtask> subtaskList) ;
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
index 8664428..50fdda2 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -2928,6 +2928,58 @@
         return serviceSubtaskMapper.getSfStatisticsJoydetails(serviceSubtaskCountReq);
     }
 
+    @Override
+    public Map<String, ServiceSubtaskScriptCount> getSfStatisticsScriptDetails(ServiceSubtaskCountReq serviceSubtaskCountReq) {
+        Map<String, ServiceSubtaskScriptCount> result = new HashMap<>();
+        List<ServiceSubtaskScriptCount> allCounts = new ArrayList<>();
+        List<ServiceSubtaskScriptCount> allItemCounts = new ArrayList<>();
+        if(ObjectUtils.isEmpty(serviceSubtaskCountReq.getType())){
+            //鏌ヨ璇煶缁熻鏄庣粏
+            serviceSubtaskCountReq.setType("1");
+            List<ServiceSubtaskScriptCount> ivyCounts = serviceSubtaskMapper.getSfStatisticsScriptDetails(serviceSubtaskCountReq);
+            List<ServiceSubtaskScriptCount> ivyItemCounts = serviceSubtaskMapper.getSfStatisticsScriptItemDetails(serviceSubtaskCountReq);
+
+            //鏌ヨ鐭俊缁熻鏄庣粏
+            serviceSubtaskCountReq.setType("2");
+            List<ServiceSubtaskScriptCount> svyCounts = serviceSubtaskMapper.getSfStatisticsScriptDetails(serviceSubtaskCountReq);
+            List<ServiceSubtaskScriptCount> svyItemCounts = serviceSubtaskMapper.getSfStatisticsScriptItemDetails(serviceSubtaskCountReq);
+
+            allCounts.addAll(ivyCounts);
+            allCounts.addAll(svyCounts);
+            allItemCounts.addAll(ivyItemCounts);
+            allItemCounts.addAll(svyItemCounts);
+        }else {
+            allCounts = serviceSubtaskMapper.getSfStatisticsScriptDetails(serviceSubtaskCountReq);
+            allItemCounts = serviceSubtaskMapper.getSfStatisticsScriptItemDetails(serviceSubtaskCountReq);
+        }
+
+
+        for(ServiceSubtaskScriptCount count : allCounts){
+            List<ServiceSubtaskScriptCount> itemCounts = new ArrayList<>();
+            allItemCounts.forEach(itemCount ->{
+                if(ObjectUtils.isNotEmpty(count.getScriptid()) && ObjectUtils.isNotEmpty(itemCount.getScriptid())){
+                    if(count.getScriptid().equals(itemCount.getScriptid())){
+                        //鏀惧叆缁熻淇℃伅
+                        itemCount.setScriptContent(count.getScriptContent());
+                        itemCount.setCompletedQuantity(count.getCompletedQuantity());
+                        itemCount.setAllQuantity(count.getAllQuantity());
+                        //璁$畻閫夋嫨姣斾緥
+                        int chosenQuantity = ObjectUtils.isNotEmpty(itemCount.getChosenQuantity())?itemCount.getChosenQuantity():0;
+                        int completedQuantity = itemCount.getCompletedQuantity();
+                        if(ObjectUtils.isNotEmpty(completedQuantity) && completedQuantity != 0){
+                            BigDecimal chosenPercentage = (new BigDecimal(chosenQuantity)).divide(new BigDecimal(completedQuantity), 2, RoundingMode.HALF_UP);
+                            itemCount.setChosenPercentage(chosenPercentage.toString());
+                        }
+                        itemCounts.add(itemCount);
+                    }
+                }
+            });
+            count.setDetails(itemCounts);
+            result.put(count.getScriptid().toString(),count);
+        }
+        return result;
+    }
+
 
     /**
      * @param serviceSubtask

--
Gitblit v1.9.3