From 933846091c0b8f06158fcab23cfa0b59e8514f9b Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期四, 22 十月 2026 15:44:25 +0800
Subject: [PATCH] 【丽水】妇幼短信发送

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java |  122 ++++++++++++++++++++++++++++------------
 1 files changed, 84 insertions(+), 38 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 a4357cf..f4434ea 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
@@ -23,6 +23,7 @@
 import com.ruoyi.quartz.task.RyTask;
 import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.ISysUserDeptService;
+import com.smartor.common.MydOptionRatioChartBuilder;
 import com.smartor.domain.*;
 import com.smartor.domain.DTO.QuestionResultDTO;
 import com.smartor.domain.VO.*;
@@ -194,13 +195,14 @@
     //@PreAuthorize("@ss.hasPermi('system:taskcall:export')")
     @Log(title = "鍗曚竴浠诲姟", businessType = BusinessType.EXPORT)
     @PostMapping("/patItemExport")
-    public void patItemExport(HttpServletResponse response, ServiceSubtaskEntity serviceSubtaskVO) {
+    public void patItemExport(HttpServletResponse response, ServiceSubtaskVO serviceSubtaskVO) {
         LoginUser loginUser = getLoginUser();
         SysUser user = loginUser.getUser();
         serviceSubtaskVO.setOrgid(user.getOrgid());
         List<ServiceSubtaskRes> serviceSubtaskList = null;
         if (serviceSubtaskVO != null) {
-            serviceSubtaskList = serviceSubtaskService.patItem(serviceSubtaskVO);
+           ServiceSubtaskEntity serviceSubtaskEntity = DtoConversionUtils.sourceToTarget(serviceSubtaskVO, ServiceSubtaskEntity.class);
+            serviceSubtaskList = serviceSubtaskService.patItem(serviceSubtaskEntity);
         }
         List<ServiceSubtaskExport> serviceSubtaskExports = null;
         List<ServiceSubtaskDetailRatioExport> serviceSubtaskDetailRatioExports = null;
@@ -220,16 +222,22 @@
                     serviceSubtaskExport.setEndDay(endDay);
                 }
             }
-            QuestionResultVO questionResultVO = new QuestionResultVO();
-            questionResultVO.setServiceType(serviceSubtaskVO.getServiceType());
-            questionResultVO.setEndOutHospTime(serviceSubtaskVO.getEndOutHospTime());
-            questionResultVO.setStartOutHospTime(serviceSubtaskVO.getStartOutHospTime());
-            serviceSubtaskDetailRatioExports = serviceSubtaskService.getDetailRatio(questionResultVO, serviceSubtaskList);
+            //闂璇︽儏鍗犳瘮锛氬彧缁熻鏈瀵煎嚭鐨勮繖鎵规偅鑰咃紝鏁伴噺=閫夎閫夐」鐨勬偅鑰呮暟锛屾瘮渚�=鍗犺棰樹綔绛斾汉鏁�
+            List<Long> subtaskIds = new ArrayList<>();
+            for (ServiceSubtaskRes serviceSubtaskRes : serviceSubtaskList) {
+                if (serviceSubtaskRes.getId() != null) {
+                    subtaskIds.add(serviceSubtaskRes.getId());
+                }
+            }
+            serviceSubtaskDetailRatioExports = serviceSubtaskService.statMydQuestionOptionForExport(subtaskIds, null);
         }
 
 
         ExcelUtil<ServiceSubtaskExport> util = new ExcelUtil<ServiceSubtaskExport>(ServiceSubtaskExport.class);
-        util.exportExcelTwoSheet(response, serviceSubtaskExports, "鎮h�呴殢璁夸俊鎭〃鍗�", serviceSubtaskDetailRatioExports, "闂璇︽儏鍗犳瘮", ServiceSubtaskDetailRatioExport.class);
+        //绗笁涓猄heet锛氶棶棰樿鎯呭崰姣斿浘琛紙鎸変换鍔″悕绉板垎缁勶紝涓�涓换鍔′竴寮犳煴鐘跺浘锛�
+        util.exportExcelTwoSheetWithChart(response, serviceSubtaskExports, "鎮h�呴殢璁夸俊鎭〃鍗�",
+                serviceSubtaskDetailRatioExports, "闂璇︽儏鍗犳瘮", ServiceSubtaskDetailRatioExport.class,
+                new MydOptionRatioChartBuilder(serviceSubtaskDetailRatioExports));
     }
 
     /**
@@ -294,8 +302,7 @@
     public AjaxResult querySubtaskList(@RequestBody ServiceSubtaskVO serviceSubtaskVO) {
         ServiceSubtaskEntity serviceSubtaskEntity = DtoConversionUtils.sourceToTarget(serviceSubtaskVO, ServiceSubtaskEntity.class);
         serviceSubtaskEntity.setContinueContent(ObjectUtils.isNotEmpty(serviceSubtaskVO.getContinueContent()) ? serviceSubtaskVO.getContinueContent().toString() : null);
-        PageUtils.startPageByPost(serviceSubtaskEntity.getPageNum(), serviceSubtaskEntity.getPageSize());
-        serviceSubtaskService.selectServiceSubtaskList(serviceSubtaskEntity);
+        // 璇� SQL 宸插唴缃� limit ${pageSize} OFFSET ${pageNum}锛屼笉鍐嶈蛋 PageHelper锛岄伩鍏嶄袱濂楀垎椤靛彔鍔犱骇鐢熶袱涓� LIMIT
         return success(serviceSubtaskService.selectServiceSubtaskList(serviceSubtaskEntity));
     }
 
@@ -309,8 +316,8 @@
     public TableDataInfo querySubtaskListAgain(@RequestBody ServiceSubtaskVO serviceSubtaskVO) {
         ServiceSubtaskEntity serviceSubtaskEntity = DtoConversionUtils.sourceToTarget(serviceSubtaskVO, ServiceSubtaskEntity.class);
         serviceSubtaskEntity.setContinueContent(ObjectUtils.isNotEmpty(serviceSubtaskVO.getContinueContent()) ? serviceSubtaskVO.getContinueContent().toString() : null);
+        // 璇� SQL 鏈唴缃� limit锛屼娇鐢� PageHelper 鍒嗛〉锛涘彧璋冪敤涓�娆★紝getDataTable 鍙熀浜� Page 鍙栧埌姝g‘ total
         PageUtils.startPageByPost(serviceSubtaskEntity.getPageNum(), serviceSubtaskEntity.getPageSize());
-        serviceSubtaskService.selectServiceSubtaskListAgain(serviceSubtaskEntity);
         return getDataTable(serviceSubtaskService.selectServiceSubtaskListAgain(serviceSubtaskEntity));
     }
 
@@ -389,7 +396,11 @@
         ivrTaskVO.setCreateBy(user.getNickName());
         ivrTaskVO.setUpdateBy(user.getNickName());
         ivrTaskVO.setOrgid(user.getOrgid());
-        ivrTaskVO.setCampusid(user.getCampusid());
+        if(StringUtils.isNotEmpty(user.getCampusid())){
+            ivrTaskVO.setCampusid(user.getCampusid());
+        }else {
+            ivrTaskVO.setCampusid("1");
+        }
         return success(serviceSubtaskService.insertOrUpdateTask(ivrTaskVO));
     }
 
@@ -544,6 +555,7 @@
                         SysUserDept sysUserWard = new SysUserDept();
                         sysUserWard.setUserId(user.getUserId());
                         sysUserWard.setOrgid(user.getOrgid());
+                        sysUserWard.setCampusid(user.getCampusid());
                         sysUserWard.setDeptType("2");
                         List<SysUserDept> wardList = sysUserDeptService.selectSysUserDeptList(sysUserWard);
                         if (CollectionUtils.isNotEmpty(wardList)) {
@@ -558,6 +570,7 @@
                         SysUserDept sysUserDept = new SysUserDept();
                         sysUserDept.setUserId(user.getUserId());
                         sysUserDept.setOrgid(user.getOrgid());
+                        sysUserDept.setCampusid(user.getCampusid());
                         sysUserDept.setDeptType("1");
                         List<SysUserDept> deptList = sysUserDeptService.selectSysUserDeptList(sysUserDept);
                         if (CollectionUtils.isNotEmpty(deptList)) {
@@ -695,6 +708,7 @@
      * taskSituation4Info - taskSituation = 4
      * taskSituation5Info - taskSituation = 5
      * taskSituation6Info - taskSituation = 7
+     * manuallyCalledInfo - isManuallyCalled = 1L
      * filterCountList - taskSituation = 6 && sendstate = 4
      *
      */
@@ -818,46 +832,54 @@
     }
 
     /**
-     * 缁熻浠诲姟鍚勭鐘舵�佺殑鏁伴噺锛堜紭鍖栫増锛�
+     * 缁熻浠诲姟鍚勭鐘舵�佺殑鏁伴噺锛堜紭鍖栫増锛�-銆愰殢璁垮伐浣滃彴銆�
      *
+     * @param soonTimeoutHours 鍗冲皢瓒呮椂鏃堕棿锛堝皬鏃讹級锛岄粯璁� 48
      * @return Map<String, Object> 鍖呭惈鍚勭姸鎬佺粺璁℃暟鎹�
      * pendingVisitCount: 褰撳墠鐧诲綍浜烘埅姝粖鏃ュ緟闅忚鎬婚噺
      * failedVisitCount: 褰撳墠鐧诲綍浜洪殢璁夸换鍔″け璐ユ�婚噺
      * abnormalVisitVount: 褰撳墠鐧诲綍浜洪殢璁夸换鍔″紓甯告�婚噺
      * allVisitCount: 褰撳墠鐧诲綍浜洪殢璁夸换鍔℃�婚噺
+     * soonTimeoutCount: 褰撳墠鐧诲綍浜哄嵆灏嗚秴鏃舵暟閲忥紙瓒呮椂鎴鏃堕棿鍦� soonTimeoutHours 灏忔椂鍐咃級
      */
     @ApiOperation("鑾峰彇褰撳墠鐢ㄦ埛闅忚鏁伴噺缁熻")
     @PostMapping("/getCurrentUserServiceSubtaskCount")
-    public Map<String, Object> getCurrentUserServiceSubtaskCount() {
-        Map<String, Object> map = new HashMap<>();
-        LoginUser loginUser = getLoginUser();
+    public Map<String, Object> getCurrentUserServiceSubtaskCount(
+            @RequestParam(value = "soonTimeoutHours", required = false, defaultValue = "48") Integer soonTimeoutHours) {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if (loginUser == null || loginUser.getUser() == null) {
+            return new HashMap<>();
+        }
         SysUser sysUser = loginUser.getUser();
-        SysUserDept sysUserDept = new SysUserDept();
-        sysUserDept.setUserId(sysUser.getUserId());
-        sysUserDept.setOrgid(sysUser.getOrgid());
-        sysUserDept.setDeptType("1");
-        List<SysUserDept> sysUserDepts = sysUserDeptService.selectSysUserDeptList(sysUserDept);
-        SysUserDept sysUserWard = new SysUserDept();
-        sysUserWard.setUserId(sysUser.getUserId());
-        sysUserWard.setOrgid(sysUser.getOrgid());
-        sysUserWard.setDeptType("2");
-        List<SysUserDept> sysUserWards = sysUserDeptService.selectSysUserDeptList(sysUserWard);
-        List<String> deptCodes = sysUserDepts.stream().map(SysUserDept::getDeptCode).collect(Collectors.toList());
-        List<String> wardCodes = sysUserWards.stream().map(SysUserDept::getDeptCode).collect(Collectors.toList());
+        List<String> deptCodes = CollectionUtils.emptyIfNull(sysUser.getBelongDepts()).stream()
+                .map(item -> item.get("deptCode"))
+                .filter(Objects::nonNull) // 鍓旈櫎null
+                .map(Object::toString)
+                .collect(Collectors.toList());
+        List<String> wardCodes = CollectionUtils.emptyIfNull(sysUser.getBelongWards()).stream()
+                .map(item -> item.get("districtCode"))
+                .filter(Objects::nonNull) // 鍓旈櫎null
+                .map(Object::toString)
+                .collect(Collectors.toList());
         ServiceSubtaskEntity entity = new ServiceSubtaskEntity();
         entity.setOrgid(sysUser.getOrgid());
         entity.setLeaveldeptcodes(deptCodes);
         entity.setLeavehospitaldistrictcodes(wardCodes);
-        if (ObjectUtils.isNotEmpty(sysUser)) {
-            if (!("admin").equals(sysUser.getUserName())) {
-                if (ObjectUtils.isNotEmpty(sysUserWards) && ObjectUtils.isNotEmpty(sysUserDepts)) {
-                    map = serviceSubtaskService.getCurrentUserServiceSubtaskCount(entity);
-                }
-            } else {
-                map = serviceSubtaskService.getCurrentUserServiceSubtaskCount(entity);
-            }
+        entity.setSoonTimeoutHours(soonTimeoutHours);
+        // admin 鏌ョ湅鍏ㄩ櫌锛涢潪 admin 鍙閰嶇疆浜嗙瀹ゆ垨鐥呭尯浠讳竴缁村害鍗冲彲鏌ヨ锛圫QL 涓负 OR 鍏崇郴锛�
+        boolean isAdmin = "admin".equals(sysUser.getUserName());
+        if (isAdmin || CollectionUtils.isNotEmpty(deptCodes) || CollectionUtils.isNotEmpty(wardCodes)) {
+            return serviceSubtaskService.getCurrentUserServiceSubtaskCount(entity);
         }
-        return map;
+        // 闈� admin 涓旀湭閰嶇疆浠讳綍绉戝/鐥呭尯鏉冮檺鏃讹紝杩斿洖榛樿 0 鍊硷紝閬垮厤鍓嶇鍙栦笉鍒� key
+        Map<String, Object> empty = new HashMap<>();
+        empty.put("pendingVisitCount", 0);
+        empty.put("failedVisitCount", 0);
+        empty.put("abnormalVisitCount", 0);
+        empty.put("warnningVisitCount", 0);
+        empty.put("allVisitCount", 0);
+        empty.put("soonTimeoutCount", 0);
+        return empty;
     }
 
     @ApiOperation("鑾峰彇褰撳墠鐢ㄦ埛瀹f暀鏁伴噺缁熻")
@@ -883,6 +905,17 @@
     @GetMapping(value = "/smsSubTask/{subid}")
     public Map<String, Object> smsSubTask(@PathVariable("subid") Long subid) {
         return serviceSubtaskService.smsSubTask(subid);
+    }
+
+    /**
+     * 鎵嬪姩鍙戦�侀棶鍗锋ā鏉跨殑寰俊鍔熻兘
+     *
+     * @param subid
+     * @return
+     */
+    @GetMapping(value = "/weChatSubTask/{subid}")
+    public Map<String, Object> weChatSubTask(@PathVariable("subid") Long subid) {
+        return serviceSubtaskService.weChatSubTask(subid);
     }
 
     /**
@@ -952,6 +985,13 @@
         ryTask.dealSubtaskDeadline(orgid, day);
         return AjaxResult.success("銆恉ealSubtaskDeadline銆戝悓姝ヤ换鍔″凡鍚姩锛屽ぉ鏁颁负" + day + "澶╋紝璇风◢鍚庢煡鐪嬬粨鏋�");
     }
+
+    @PostMapping("/sendExceptInfo")
+    public AjaxResult sendExceptInfo() throws Exception {
+        ryTask.sendExceptInfo();
+        return AjaxResult.success("sendExceptInfo");
+    }
+
     /**
      * 甯edis缂撳瓨鐨勭粺璁℃煡璇紝渚沺atItem鍜宲atItemCount鍏辩敤锛屾潯浠朵笉鍙樻椂鐩存帴鍛戒腑缂撳瓨
      */
@@ -1006,5 +1046,11 @@
     }
 
 
-
+    @ApiOperation("鑾峰彇缁熻鏁�")
+    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
+    @PostMapping("/countByCondition")
+    public Map<String, Object>  countByCondition(@RequestBody ServiceSubtaskEntity condition) {
+        Map<String, Object> map = serviceSubtaskService.countByCondition(condition);
+        return map;
+    }
 }

--
Gitblit v1.9.3