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

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java |   26 ++++++++
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java            |   94 +++++++++++++++++++++++++++++++
 smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java                       |    7 ++
 smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java                    |    2 
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml                       |   10 ---
 5 files changed, 129 insertions(+), 10 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 47a4889..13d4cd6 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
@@ -538,7 +538,33 @@
         return success(serviceSubtaskService.getSfStatisticsJoydetails(serviceSubtaskCountReq));
     }
 
+    /**
+     * 鑾峰彇闅忚鍒嗙被缁熻鏄庣粏
+     */
     @ApiOperation("鑾峰彇闅忚鍒嗙被缁熻鏄庣粏")
+    @PostMapping("/getSfStatisticsCount")
+    public Map<String, Object> getSfStatisticsCount(@RequestBody ServiceSubtaskCountReq serviceSubtaskCountReq) {
+        if (CollectionUtils.isEmpty(serviceSubtaskCountReq.getServiceType())) {
+            return error("鏈嶅姟绫诲瀷涓嶈兘涓虹┖");
+        }
+        String configKey = serviceSubtaskCountReq.getConfigKey();
+        if(StringUtils.isNotEmpty(configKey)){
+            String configValue = configService.selectConfigByKey(configKey);
+            serviceSubtaskCountReq.setConfigValue(configValue);
+            if(StringUtils.isEmpty(configValue)){
+                String logInfo =  "getSfStatisticsCount-鍙傛暟 " + configKey + " 鏈厤缃�, 璇烽厤缃ソ鍚庨噸璇�";
+                log.error(logInfo);
+                return error(logInfo);
+            }
+        }else {
+            String logInfo =  "getSfStatisticsCount-鍙傛暟configKey鏈紶鍏�, 璇烽厤缃ソ鍚庨噸璇�";
+            log.error(logInfo);
+            return error(logInfo);
+        }
+        return success(serviceSubtaskService.getSfStatisticsScript(serviceSubtaskCountReq));
+    }
+
+    @ApiOperation("鑾峰彇闅忚鍒嗙被缁熻鏄庣粏璇︽儏")
     @PostMapping("/getSfStatisticsCountDetails")
     public AjaxResult getSfStatisticsCountDetails(@RequestBody ServiceSubtaskCountReq serviceSubtaskCountReq) {
         if (serviceSubtaskCountReq.getLeavehospitaldistrictcodes().size() == 0 && serviceSubtaskCountReq.getDeptcodes().size() == 0) {
diff --git a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
index d283754..e44108c 100644
--- a/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/ServiceSubtaskMapper.java
@@ -110,6 +110,13 @@
      *
      * @return 缁撴灉
      */
+    public List<ServiceSubtaskCount> getSfStatisticsCategory(ServiceSubtaskCountReq serviceSubtaskCountReq);
+
+    /**
+     * 鑾峰彇闂缁熻缁撴灉锛堥殢璁匡級
+     *
+     * @return 缁撴灉
+     */
     public List<ServiceSubtaskScriptCount> getSfStatisticsScriptDetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
     /**
diff --git a/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java b/smartor/src/main/java/com/smartor/service/IServiceSubtaskService.java
index c0dcb0b..4a55058 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 List<ServiceSubtaskStatistic> getSfStatisticsScript(ServiceSubtaskCountReq serviceSubtaskCountReq);
+
     public Map<String, ServiceSubtaskScriptCount> getSfStatisticsScriptDetails(ServiceSubtaskCountReq serviceSubtaskCountReq);
 
     public List<PatArchiveSrmVO> sendMsgTemplate(List<PatArchiveSrmVO> patArchiveSrmVOS);
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 50fdda2..8982e03 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -2368,6 +2368,8 @@
         return serviceSubtaskStatistics;
     }
 
+
+
     /**
      * 鑾峰彇婊℃剰搴﹂鐩�婚噺
      * type : 1-绉戝   2鐥呭尯
@@ -2928,6 +2930,98 @@
         return serviceSubtaskMapper.getSfStatisticsJoydetails(serviceSubtaskCountReq);
     }
 
+    /**
+     * 鑾峰彇闅忚缁熻姣斾緥
+     *
+     * @param serviceSubtaskCountReq
+     * @return
+     */
+    @Override
+    @Cacheable(value = "sfStatisticsJoy", key = "T(org.springframework.util.DigestUtils).md5DigestAsHex(#serviceSubtaskCountReq.toString().getBytes())", unless = "#result == null or #result.isEmpty()")
+    public List<ServiceSubtaskStatistic> getSfStatisticsScript(ServiceSubtaskCountReq serviceSubtaskCountReq) {
+        log.error("getSfStatisticsScript鐨勫叆鍙備负锛歿}", serviceSubtaskCountReq);
+        List<ServiceSubtaskStatistic> serviceSubtaskStatistics = new ArrayList<>();
+
+        // 鏍规嵁鏉′欢杩涜鍒嗙粍
+        Map<String, List<ServiceSubtask>> collect = new HashMap<>();
+        String orgid = null;
+
+        if (serviceSubtaskCountReq.getLeavehospitaldistrictcodes() != null && serviceSubtaskCountReq.getLeavehospitaldistrictcodes().size() > 0) {
+            if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
+                collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrname()).orElse("Unknown")));
+
+            } else {
+                collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictname()).orElse("Unknown")));
+            }
+        } else if (serviceSubtaskCountReq.getDeptcodes() != null && serviceSubtaskCountReq.getDeptcodes().size() > 0) {
+            if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
+                collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDrname()).orElse("Unknown")));
+            } else {
+                collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDeptname()).orElse("Unknown")));
+            }
+        }
+        //鑾峰彇闅忚缁熻
+        List<ServiceSubtaskCount> subCount = new ArrayList<>();
+        subCount = serviceSubtaskMapper.getSfStatisticsCategory(serviceSubtaskCountReq);
+        for (List<ServiceSubtask> serviceSubtaskList : collect.values()) {
+            if (CollectionUtils.isEmpty(serviceSubtaskList)) {
+                continue;
+            }
+            ServiceSubtaskStatistic statistic = getStatisticJoy(serviceSubtaskList, subCount);
+            //鍙婃椂鐜�
+            ServiceSubtask ss = new ServiceSubtask();
+            orgid = serviceSubtaskList.get(0).getOrgid();
+            ss.setOrgid(orgid);
+
+            // 濡傛灉鏈夊尰鐢熺紪鐮侊紝璁剧疆鍖荤敓缂栫爜鐢ㄤ簬鍙婃椂鐜囨煡璇�
+            if (serviceSubtaskCountReq.getDrcode() != null && !serviceSubtaskCountReq.getDrcode().isEmpty()) {
+                ss.setDrcode(serviceSubtaskList.get(0).getDrcode());
+            } else {
+                if (CollectionUtils.isNotEmpty(serviceSubtaskCountReq.getLeavehospitaldistrictcodes())) {
+                    ss.setLeavehospitaldistrictcode(serviceSubtaskList.get(0).getLeavehospitaldistrictcode());
+                } else if (CollectionUtils.isNotEmpty(serviceSubtaskCountReq.getDeptcodes())) {
+                    ss.setDeptcode(serviceSubtaskList.get(0).getDeptcode());
+                }
+            }
+
+            ss.setStarttime(serviceSubtaskCountReq.getStartTime());
+            ss.setEndtime(serviceSubtaskCountReq.getEndTime());
+            if (serviceSubtaskCountReq.getEndTime() != null && new Date().before(serviceSubtaskCountReq.getEndTime())) {
+                ss.setEndtime(new Date());
+            }
+            Double jsRate = serviceSubtaskMapper.selectTimelyRate(ss);
+            statistic.setRate(jsRate);
+            if (ObjectUtils.isNotEmpty(statistic)) {
+                serviceSubtaskStatistics.add(statistic);
+            }
+        }
+        if (CollectionUtils.isNotEmpty(serviceSubtaskStatistics)) {
+            for (ServiceSubtaskStatistic serviceSubtaskStatistic : serviceSubtaskStatistics) {
+                //鑾峰彇婊℃剰搴﹂鐩�婚噺
+                BigDecimal mydtmzlsum = new BigDecimal(0);
+                //鑾峰彇婊℃剰搴﹂鐩~鎶ラ噺
+                BigDecimal mydtblsum = new BigDecimal(0);
+                //瀹屾垚姣斾緥
+                Double wcbl = null;
+                if(ObjectUtils.isNotEmpty(serviceSubtaskStatistic.getJoyAllCount())){
+                    mydtblsum = new BigDecimal(serviceSubtaskStatistic.getJoyAllCount());
+                }
+
+                if(ObjectUtils.isNotEmpty(serviceSubtaskStatistic.getJoyCount())){
+                    mydtmzlsum = new BigDecimal(serviceSubtaskStatistic.getJoyCount());
+                }
+                if(mydtmzlsum.intValue() != 0){
+                    wcbl = mydtblsum.divide(mydtmzlsum, 2, RoundingMode.HALF_UP).doubleValue();
+                }
+                serviceSubtaskStatistic.setJoyAllCount(mydtmzlsum.intValue());
+                serviceSubtaskStatistic.setJoyCount(mydtblsum.intValue());
+                serviceSubtaskStatistic.setJoyTotal(wcbl);
+            }
+        }
+
+        return serviceSubtaskStatistics;
+    }
+
     @Override
     public Map<String, ServiceSubtaskScriptCount> getSfStatisticsScriptDetails(ServiceSubtaskCountReq serviceSubtaskCountReq) {
         Map<String, ServiceSubtaskScriptCount> result = new HashMap<>();
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
index e58aa65..82214bc 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -100,16 +100,6 @@
 
     </resultMap>
 
-    <resultMap type="com.smartor.domain.ServiceSubtaskCategoryCount" id="ServiceSubtaskCategoryCountResult">
-        <result property="month" column="month"/>
-        <result property="serviceType" column="service_type"/>
-        <result property="subTaskId" column="subTaskId"/>
-        <result property="completedCount" column="completed_count"/>
-        <result property="allCount" column="all_count"/>
-        <result property="completedPercent" column="completed_percent"/>
-        <result property="name" column="name"/>
-    </resultMap>
-
     <resultMap type="com.smartor.domain.ServiceSubtaskScriptCount" id="ServiceSubtaskScriptCountResult">
         <result property="scriptid" column="scriptid"/>
         <result property="scriptContent" column="script_content"/>

--
Gitblit v1.9.3