From fd12c3a4d5c0a247c89ab59faba189075a302ffd Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期一, 09 六月 2025 18:50:19 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 smartor/src/main/java/com/smartor/domain/ServiceSubtask.java                  |   11 ++
 smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java         |   81 +++++++++++++++++---
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java |  101 ++++++++++++++++++++++++
 smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java          |    5 +
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml            |   24 +++++-
 smartor/src/main/java/com/smartor/domain/ServiceSubtaskVO.java                |    9 ++
 6 files changed, 211 insertions(+), 20 deletions(-)

diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtask.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtask.java
index 1c6ca80..97c62ff 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtask.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtask.java
@@ -587,9 +587,20 @@
     @ApiModelProperty(value = "闅忚鏃堕棿")
     private Date visitTime;
 
+    /**
+     * 闅忚鏂瑰紡
+     */
+    @ApiModelProperty(value = "闅忚鏂瑰紡")
+    private String visitType;
+
+
+
     @ApiModelProperty(value = "闅忚閮ㄩ棬缂栫爜")
     private String visitDeptCode;
 
     @ApiModelProperty(value = "闅忚閮ㄩ棬鍚嶇О")
     private String visitDeptName;
+
+    @ApiModelProperty(value = "闅忚閮ㄩ棬缂栫爜闆嗗悎")
+    private List<String> visitDeptCodes;
 }
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
index a95e1e7..86a77cc 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskCountReq.java
@@ -39,4 +39,9 @@
     @ApiModelProperty(value = "鐥呭尯Code闆嗗悎")
     private List<String> leavehospitaldistrictcodes;
 
+    @ApiModelProperty(value = "绉戝Code闆嗗悎")
+    private List<String> deptcodes;
+
+    @ApiModelProperty(value = "绉戝鐥呭尯")
+    private Integer statisticaltype;
 }
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java
index 6f187ee..4c6ff11 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskStatistic.java
@@ -16,19 +16,6 @@
 public class ServiceSubtaskStatistic {
     private static final long serialVersionUID = 1L;
 
-    /**
-     * 鍑洪櫌鐥呭尯缂栧彿
-     */
-    @ApiModelProperty(value = "鍑洪櫌鐥呭尯缂栧彿")
-    private String leavehospitaldistrictcode;
-
-    /**
-     * 鍑洪櫌鐥呭尯鍚嶇О
-     */
-    @ApiModelProperty(value = "鍑洪櫌鐥呭尯鍚嶇О")
-    @Excel(name = " 鍑洪櫌鐥呭尯鍚嶇О ")
-    private String leavehospitaldistrictname;
-
     @ApiModelProperty(value = "鏈嶅姟鎬婚噺")
     @Excel(name = " 鏈嶅姟鎬婚噺 ")
     private Integer serviceCount = 0;
@@ -87,4 +74,72 @@
     @ApiModelProperty(value = "鍥炲寮傚父鏁�")
     @Excel(name = " 鍥炲寮傚父鏁� ")
     private Long hfycs = 0L;
+
+    /**
+     *   06-04鏂扮粺璁¢〉闈㈠瓧娈�
+     */
+
+    @ApiModelProperty(value = "鍑洪櫌鐥呭尯缂栧彿")
+    private String leavehospitaldistrictcode;
+
+    @ApiModelProperty(value = "鍑洪櫌鐥呭尯鍚嶇О")
+    @Excel(name = " 鍑洪櫌鐥呭尯鍚嶇О ")
+    private String leavehospitaldistrictname;
+
+    @ApiModelProperty(value = "鍑洪櫌绉戝缂栧彿")
+    private String deptcode;
+
+    @ApiModelProperty(value = "鍑洪櫌绉戝鍚嶇О")
+    @Excel(name = " 鍑洪櫌鐥呭尯鍚嶇О ")
+    private String deptname;
+
+    @ApiModelProperty(value = "鍑洪櫌浜烘")
+    @Excel(name = " 鍑洪櫌浜烘 ")
+    private Integer dischargeCount = 0;
+
+    @ApiModelProperty(value = "鏃犻渶闅忚浜烘")
+    @Excel(name = " 鏃犻渶闅忚浜烘 ")
+    private Long nonFollowUp = 0L;
+
+    @ApiModelProperty(value = "搴旈殢璁夸汉娆�")
+    @Excel(name = " 搴旈殢璁夸汉娆� ")
+    private Long followUpNeeded = 0L;
+
+    @ApiModelProperty(value = "棣栨搴旈殢璁�")
+    private Long needFollowUp = 0L;
+    @ApiModelProperty(value = "棣栨寰呴殢璁�")
+    private Long pendingFollowUp = 0L;
+    @ApiModelProperty(value = "棣栨闅忚鎴愬姛")
+    private Long followUpSuccess = 0L;
+    @ApiModelProperty(value = "棣栨闅忚澶辫触")
+    private Long followUpFail = 0L;
+    @ApiModelProperty(value = "棣栨闅忚鐜�")
+    private String followUpRate;
+    @ApiModelProperty(value = "棣栨浜哄伐")
+    private Long manual = 0L;
+    @ApiModelProperty(value = "棣栨鐭俊")
+    private Long sms = 0L;
+    @ApiModelProperty(value = "棣栨寰俊")
+    private Long weChat = 0L;
+    @ApiModelProperty(value = "缁撴灉寮傚父")
+    private Long abnormal = 0L;
+
+    @ApiModelProperty(value = "浜屾搴旈殢璁�")
+    private Long needFollowUpAgain = 0L;
+    @ApiModelProperty(value = "浜屾寰呴殢璁�")
+    private Long pendingFollowUpAgain = 0L;
+    @ApiModelProperty(value = "浜屾闅忚鎴愬姛")
+    private Long followUpSuccessAgain = 0L;
+    @ApiModelProperty(value = "浜屾闅忚澶辫触")
+    private Long followUpFailAgain = 0L;
+    @ApiModelProperty(value = "浜屾闅忚鐜�")
+    private String followUpRateAgain;
+    @ApiModelProperty(value = "浜屾浜哄伐")
+    private Long manualAgain = 0L;
+    @ApiModelProperty(value = "浜屾鐭俊")
+    private Long smsAgain = 0L;
+    @ApiModelProperty(value = "浜屾寰俊")
+    private Long weChatAgain = 0L;
+    @ApiModelProperty(value = "缁撴灉寮傚父")
+    private Long abnormalAgain = 0L;
 }
diff --git a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskVO.java b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskVO.java
index 993341f..4b7783d 100644
--- a/smartor/src/main/java/com/smartor/domain/ServiceSubtaskVO.java
+++ b/smartor/src/main/java/com/smartor/domain/ServiceSubtaskVO.java
@@ -683,10 +683,19 @@
 
     @ApiModelProperty(value = "闅忚鏃堕棿")
     private Date visitTime;
+
+    /**
+     * 闅忚鏂瑰紡
+     */
+    @ApiModelProperty(value = "闅忚鏂瑰紡")
+    private String visitType;
     
     @ApiModelProperty(value = "闅忚閮ㄩ棬缂栫爜")
     private String visitDeptCode;
 
     @ApiModelProperty(value = "闅忚閮ㄩ棬鍚嶇О")
     private String visitDeptName;
+
+    @ApiModelProperty(value = "闅忚閮ㄩ棬缂栫爜闆嗗悎")
+    private List<String> visitDeptCodes;
 }
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 e389236..52382bf 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -24,6 +24,7 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
 import java.time.Duration;
 import java.time.LocalDate;
@@ -359,6 +360,9 @@
         serviceSubtask2.setSendstate(2L);
         serviceSubtask2.setCreateTime(new Date());
         serviceSubtask2.setUpdateTime(new Date());
+        serviceSubtask2.setVisitType(serviceSubtask.getVisitType());
+        serviceSubtask2.setVisitDeptCode(serviceSubtask.getVisitDeptCode());
+        serviceSubtask2.setVisitDeptName(serviceSubtask.getVisitDeptName());
         int i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask2);
         if (i == 1) {
             //鏂板鎴愬姛鍚庯紝闇�瑕佸皢涔嬪墠鐨勪换鍔¤缃负涓嶈鍐嶉殢璁匡紙闃叉閲嶅鐐癸紝鐒跺悗閲嶅鐢熸垚锛�
@@ -2177,7 +2181,14 @@
     public List<ServiceSubtaskStatistic> getSfStatistics(ServiceSubtaskCountReq serviceSubtaskCountReq) {
         log.error("getSfStatistics鐨勫叆鍙備负锛歿}", serviceSubtaskCountReq);
         List<ServiceSubtaskStatistic> serviceSubtaskStatistics = new ArrayList<>();
-        Map<String, List<ServiceSubtask>> collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictname()).orElse("Unknown")));
+        //Map<String, List<ServiceSubtask>> collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictname()).orElse("Unknown")));
+        Map<String, List<ServiceSubtask>> collect = new HashMap<>();
+        if (serviceSubtaskCountReq.getStatisticaltype() != null && serviceSubtaskCountReq.getStatisticaltype() == 1) {
+            collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictname()).orElse("Unknown")));
+
+        }else if (serviceSubtaskCountReq.getStatisticaltype() != null && serviceSubtaskCountReq.getStatisticaltype() == 2){
+            collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDeptname()).orElse("Unknown")));
+        }
         for (List<ServiceSubtask> serviceSubtaskList : collect.values()) {
             if (CollectionUtils.isEmpty(serviceSubtaskList)) {
                 continue;
@@ -2192,9 +2203,92 @@
 
     private ServiceSubtaskStatistic getStatistic(List<ServiceSubtask> serviceSubtaskList) {
         ServiceSubtaskStatistic serviceSubtaskStatistic = new ServiceSubtaskStatistic();
+        //鏍煎紡鍖栦负涓や綅灏忔暟鐨勭櫨鍒嗘瘮
+        DecimalFormat percentFormat = new DecimalFormat("##.##%");
+        serviceSubtaskStatistic.setDeptname(serviceSubtaskList.get(0).getDeptname());
+        serviceSubtaskStatistic.setDeptcode(serviceSubtaskList.get(0).getDeptcode());
         serviceSubtaskStatistic.setLeavehospitaldistrictname(serviceSubtaskList.get(0).getLeavehospitaldistrictname());
         serviceSubtaskStatistic.setLeavehospitaldistrictcode(serviceSubtaskList.get(0).getLeavehospitaldistrictcode());
-        serviceSubtaskStatistic.setServiceCount(serviceSubtaskList.size());
+        //鍑洪櫌浜烘
+        serviceSubtaskStatistic.setDischargeCount(serviceSubtaskList.size());
+        for (ServiceSubtask serviceSubtask : serviceSubtaskList){
+            //鏃犻渶闅忚浜烘
+            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) {
+                serviceSubtaskStatistic.setNonFollowUp(serviceSubtaskStatistic.getNonFollowUp() + 1L);
+            }
+            //搴旈殢璁夸汉娆�
+            if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() != 4) {
+                serviceSubtaskStatistic.setFollowUpNeeded(serviceSubtaskStatistic.getFollowUpNeeded() + 1L);
+            }
+            //棣栨鍑洪櫌闅忚
+            if(serviceSubtask.getVisitCount() == 1){
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() != 4) {
+                    serviceSubtaskStatistic.setNeedFollowUp(serviceSubtaskStatistic.getNeedFollowUp() + 1L);
+                }
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 2) {
+                    serviceSubtaskStatistic.setPendingFollowUp(serviceSubtaskStatistic.getPendingFollowUp() + 1L);
+                }
+                if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate() == 1 || serviceSubtask.getSendstate() == 3 || serviceSubtask.getSendstate() == 6)){
+                    serviceSubtaskStatistic.setFollowUpSuccess(serviceSubtaskStatistic.getFollowUpSuccess() + 1L);
+                }
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 5){
+                    serviceSubtaskStatistic.setFollowUpFail(serviceSubtaskStatistic.getFollowUpFail() + 1L);
+                }
+                if (serviceSubtaskStatistic.getNeedFollowUp() > 0) {
+                    double rate = (double)(serviceSubtaskStatistic.getFollowUpSuccess() + serviceSubtaskStatistic.getFollowUpFail()) / serviceSubtaskStatistic.getNeedFollowUp();
+                    serviceSubtaskStatistic.setFollowUpRate(percentFormat.format(rate));
+                } else {
+                    serviceSubtaskStatistic.setFollowUpRate("0.00%");
+                }
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")){
+                    serviceSubtaskStatistic.setManual(serviceSubtaskStatistic.getManual() + 1L);
+                }
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")){
+                    serviceSubtaskStatistic.setSms(serviceSubtaskStatistic.getSms() + 1L);
+                }
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")){
+                    serviceSubtaskStatistic.setWeChat(serviceSubtaskStatistic.getWeChat() + 1L);
+                }
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getExcep().equals("1")){
+                    serviceSubtaskStatistic.setAbnormal(serviceSubtaskStatistic.getAbnormal() + 1L);
+                }
+            }//浜屾鍑洪櫌闅忚
+            else if (serviceSubtask.getVisitCount() > 1){
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() != 4) {
+                    serviceSubtaskStatistic.setNeedFollowUpAgain(serviceSubtaskStatistic.getNeedFollowUpAgain() + 1L);
+                }
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 2) {
+                    serviceSubtaskStatistic.setPendingFollowUpAgain(serviceSubtaskStatistic.getPendingFollowUpAgain() + 1L);
+                }
+                if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate() == 1 || serviceSubtask.getSendstate() == 3 || serviceSubtask.getSendstate() == 6)){
+                    serviceSubtaskStatistic.setFollowUpSuccessAgain(serviceSubtaskStatistic.getFollowUpSuccessAgain() + 1L);
+                }
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 5){
+                    serviceSubtaskStatistic.setFollowUpFailAgain(serviceSubtaskStatistic.getFollowUpFailAgain() + 1L);
+                }
+                if (serviceSubtaskStatistic.getNeedFollowUp() > 0) {
+                    double rate = (double)(serviceSubtaskStatistic.getFollowUpSuccessAgain() + serviceSubtaskStatistic.getFollowUpFailAgain()) / serviceSubtaskStatistic.getNeedFollowUpAgain();
+                    serviceSubtaskStatistic.setFollowUpRateAgain(percentFormat.format(rate));
+                } else {
+                    serviceSubtaskStatistic.setFollowUpRateAgain("0.00%");
+                }
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")){
+                    serviceSubtaskStatistic.setManualAgain(serviceSubtaskStatistic.getManualAgain() + 1L);
+                }
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")){
+                    serviceSubtaskStatistic.setSmsAgain(serviceSubtaskStatistic.getSmsAgain() + 1L);
+                }
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")){
+                    serviceSubtaskStatistic.setWeChatAgain(serviceSubtaskStatistic.getWeChatAgain() + 1L);
+                }
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getExcep().equals("1")){
+                    serviceSubtaskStatistic.setAbnormalAgain(serviceSubtaskStatistic.getAbnormalAgain() + 1L);
+                }
+            }
+
+
+        }
+        /*serviceSubtaskStatistic.setServiceCount(serviceSubtaskList.size());
         for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
             //涓嶉殢璁挎暟閲�
             if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) {
@@ -2235,7 +2329,8 @@
 //            BigDecimal multiply = BigDecimal.valueOf(serviceSubtaskStatistic.getYfsCount()).divide(BigDecimal.valueOf(serviceSubtaskList.size()), 2, BigDecimal.ROUND_HALF_UP);
             BigDecimal multiply = new BigDecimal(serviceSubtaskStatistic.getYwcCount().toString()).divide(new BigDecimal(serviceSubtaskStatistic.getYsfCount().toString()), 2, BigDecimal.ROUND_HALF_UP);
             serviceSubtaskStatistic.setSfwcl(multiply.toString());
-        }
+        }*/
+
 
         return serviceSubtaskStatistic;
     }
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
index 2ffd536..98673e3 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -169,7 +169,8 @@
                leavehospitaldistrictcode,
                leavehospitaldistrictname,
                leavediagname,
-               leaveicd10code
+               leaveicd10code,
+               visit_type
         from service_subtask
     </sql>
 
@@ -306,8 +307,16 @@
             <if test="taskGuid != null">and task_guid = #{taskGuid}</if>
             <if test="isVisitAgain != null">and is_visit_again = #{isVisitAgain}</if>
             <if test="visitTime != null">and visit_time = #{visitTime}</if>
-            <if test="visitDeptCode != null">and visit_dept_code = #{visitDeptCode}</if>
-            <if test="visitDeptName != null">and visit_dept_name = #{visitDeptName}</if>
+            <!--<if test="visitDeptCode != null">and visit_dept_code = #{visitDeptCode}</if>
+            <if test="visitDeptName != null">and visit_dept_name = #{visitDeptName}</if>-->
+            <if test="visitCount != null and visitCount > 1 and visitDeptCodes != null and visitDeptCodes.size() > 0">
+                AND visit_dept_code IN
+                <foreach collection="visitDeptCodes" item="visitDeptCodes" open="("
+                         separator=","
+                         close=")">
+                    #{visitDeptCodes}
+                </foreach>
+            </if>
         </where>
         <if test="sort != null  and sort==0">order by endtime asc</if>
         <if test="sort != null  and sort==1">order by endtime desc</if>
@@ -487,7 +496,7 @@
             <if test="visitCount != null ">visit_count,</if>
             <if test="isVisitAgain != null ">is_visit_again,</if>
             <if test="upid != null ">upid,</if>
-            <if test="visit_time != null ">visitTime,</if>
+            <if test="visitTime != null ">visit_Time,</if>
             <if test="visitDeptCode != null">visit_dept_code,</if>
             <if test="visitDeptName != null">visit_dept_name,</if>
         </trim>
@@ -952,6 +961,13 @@
                     #{leavehospitaldistrictcode}
                 </foreach>
             </if>
+            <if test="deptcodes != null and deptcodes.size() > 0">
+                AND leavehospitaldistrictcode IN
+                <foreach collection="deptcodes" item="deptcode" open="(" separator=","
+                         close=")">
+                    #{leavehospitaldistrictcode}
+                </foreach>
+            </if>
             <if test="serviceType != null and serviceType.size() > 0">
                 AND service_type IN
                 <foreach collection="serviceType" item="serviceType" open="(" separator=","

--
Gitblit v1.9.3