From e1b933c0c344494afe86bae9162dca9bdc34fd56 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期三, 22 七月 2026 17:04:14 +0800
Subject: [PATCH] 【丽水】扫码生成外链

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java |  239 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 227 insertions(+), 12 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 3915cc4..0844150 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
@@ -1,5 +1,6 @@
 package com.ruoyi.web.controller.smartor;
 
+import com.alibaba.fastjson.JSON;
 import com.github.pagehelper.ISelect;
 import com.ruoyi.common.annotation.AddOrgId;
 import com.ruoyi.common.annotation.Log;
@@ -13,11 +14,9 @@
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.enums.PreachFormEnum;
+import com.ruoyi.common.enums.SendStateEnum;
 import com.ruoyi.common.exception.base.BaseException;
-import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.DtoConversionUtils;
-import com.ruoyi.common.utils.PageUtils;
-import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.*;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.common.utils.reflect.ReflectUtils;
 import com.ruoyi.quartz.service.ICollectHISService;
@@ -48,6 +47,8 @@
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
+
+import static com.ruoyi.common.utils.SecurityUtils.getLoginUser;
 
 /**
  * 鍗曚竴浠诲姟锛堥殢璁匡級Controller
@@ -89,6 +90,15 @@
     @Value("${spring.profiles.active}")
     private String active;
 
+    @Value("${localIP}")
+    private String localIP;
+
+    @Value("${req_path}")
+    private String req_path;
+
+    @Value("${isAdmin}")
+    private List<Long> isAdmin;
+
     @Autowired
     private RedisCache redisCache;
 
@@ -98,7 +108,6 @@
     @ApiOperation("鏌ヨ鎮h�呴殢璁夸俊鎭�")
     @PostMapping("/patItem")
     public Map<String, Object> patItem(@RequestBody ServiceSubtaskVO serviceSubtaskVO) {
-
         serviceSubtaskVO.setPageNum(PageUtils.getOffset(serviceSubtaskVO.getPageNum(), serviceSubtaskVO.getPageSize()));
         List<ServiceSubtaskRes> serviceSubtaskList = null;
         LoginUser loginUser = getLoginUser();
@@ -176,6 +185,15 @@
         if (ObjectUtils.isNotEmpty(loginUser) && ObjectUtils.isNotEmpty(loginUser.getUser())) {
             userId = loginUser.getUser().getUserId();
         }
+        if (serviceSubtaskEntity.getSendstateView() != null) {
+            //            1锛氬緟闅忚锛�1 琚鍙栥��2 寰呭彂閫併��3 宸插彂閫併��5 鍙戦�佸け璐ャ��7銆佽秴鏃讹級锛�2锛氬凡瀹屾垚锛� 6 宸插畬鎴愶級銆�3锛氭棤闇�闅忚锛�4 涓嶆墽琛岋級
+            if (serviceSubtaskEntity.getSendstateView() == 1)
+                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(1L, 2L, 3L, 5L, 7L)));
+            if (serviceSubtaskEntity.getSendstateView() == 2)
+                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(6L)));
+            if (serviceSubtaskEntity.getSendstateView() == 3)
+                serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(4L)));
+        }
         if (ObjectUtils.isNotEmpty(userId)) {
             Map<String, Object> redisMap = redisCache.getCacheObject(userId + "patItemCount");
             Boolean redisFlag = false;
@@ -211,10 +229,10 @@
 
 
     /**
-     * 瀵煎嚭鍗曚竴浠诲姟锛堥殢璁垮鏁欙級鍒楄〃
+     * 瀵煎嚭鍗曚竴浠诲姟鍒楄〃
      */
     //@PreAuthorize("@ss.hasPermi('system:taskcall:export')")
-    @Log(title = "鍗曚竴浠诲姟锛堥殢璁垮鏁欙級", businessType = BusinessType.EXPORT)
+    @Log(title = "鍗曚竴浠诲姟", businessType = BusinessType.EXPORT)
     @PostMapping("/patItemExport")
     public void patItemExport(HttpServletResponse response, ServiceSubtaskEntity serviceSubtaskVO) {
         LoginUser loginUser = getLoginUser();
@@ -225,11 +243,16 @@
             serviceSubtaskList = serviceSubtaskService.patItem(serviceSubtaskVO);
         }
         List<ServiceSubtaskExport> serviceSubtaskExports = null;
+        List<ServiceSubtaskDetailRatioExport> serviceSubtaskDetailRatioExports = null;
         if (!CollectionUtils.isEmpty(serviceSubtaskList)) {
             serviceSubtaskExports = DtoConversionUtils.sourceToTarget(serviceSubtaskList, ServiceSubtaskExport.class);
             for (ServiceSubtaskExport serviceSubtaskExport : serviceSubtaskExports) {
                 String pf = PreachFormEnum.getDescByCode(serviceSubtaskExport.getPreachform());
                 serviceSubtaskExport.setPreachform(pf);
+                if (serviceSubtaskExport.getSendstate() != null) {
+                    String stName = SendStateEnum.getDescByCode("" + serviceSubtaskExport.getSendstate());
+                    serviceSubtaskExport.setStName(stName);
+                }
 
                 //璁$畻鍑洪櫌澶╂暟
                 if (!Objects.isNull(serviceSubtaskExport.getEndtime())) {
@@ -238,11 +261,16 @@
                 }
             }
 
-        }
-        ExcelUtil<ServiceSubtaskExport> util = new ExcelUtil<ServiceSubtaskExport>(ServiceSubtaskExport.class);
-        util.exportExcel(response, serviceSubtaskExports, "鎮h�呴殢璁夸俊鎭〃鍗�");
-    }
+            //鑾峰彇serviceSubtaskList涓殑鎵�鏈塼askid
+            List<Long> taskIds = serviceSubtaskList.stream().map(ServiceSubtaskRes::getTaskid).filter(ObjectUtils::isNotEmpty).distinct().collect(Collectors.toList());
+            serviceSubtaskDetailRatioExports = serviceSubtaskService.statQuestionOption(taskIds, serviceSubtaskVO.getStartOutHospTime(), serviceSubtaskVO.getEndOutHospTime());
 
+        }
+
+
+        ExcelUtil<ServiceSubtaskExport> util = new ExcelUtil<ServiceSubtaskExport>(ServiceSubtaskExport.class);
+        util.exportExcelTwoSheet(response, serviceSubtaskExports, "鎮h�呴殢璁夸俊鎭〃鍗�", serviceSubtaskDetailRatioExports, "闂璇︽儏鍗犳瘮", ServiceSubtaskDetailRatioExport.class);
+    }
 
     /**
      * 鏌ヨ鎮h�呴殢璁夸俊鎭�
@@ -401,6 +429,7 @@
         ivrTaskVO.setCreateBy(user.getNickName());
         ivrTaskVO.setUpdateBy(user.getNickName());
         ivrTaskVO.setOrgid(user.getOrgid());
+        ivrTaskVO.setCampusid(user.getCampusid());
         return success(serviceSubtaskService.insertOrUpdateTask(ivrTaskVO));
     }
 
@@ -426,6 +455,7 @@
     public AjaxResult addSubTask(@RequestBody ServiceSubtask serviceSubtask) {
         SysUser user = getLoginUser().getUser();
         if (ObjectUtils.isNotEmpty(user)) serviceSubtask.setOrgid(user.getOrgid());
+        if (ObjectUtils.isNotEmpty(user)) serviceSubtask.setCampusid(user.getCampusid());
         return toAjax(serviceSubtaskService.insertServiceSubtask(serviceSubtask));
     }
 
@@ -435,6 +465,7 @@
     public AjaxResult addSubTaskAgain(@RequestBody ServiceSubtask serviceSubtask) {
         SysUser user = getLoginUser().getUser();
         if (ObjectUtils.isNotEmpty(user)) serviceSubtask.setOrgid(user.getOrgid());
+        if (ObjectUtils.isNotEmpty(user)) serviceSubtask.setCampusid(user.getCampusid());
         return success(serviceSubtaskService.addSubTaskAgain(serviceSubtask));
     }
 
@@ -538,6 +569,43 @@
         Integer offset = PageUtils.getOffset(serviceSubtaskCountReq.getPageNum(), serviceSubtaskCountReq.getPageSize());
         serviceSubtaskCountReq.setPageNum(offset);
 
+        Integer statisticaltype = serviceSubtaskCountReq.getStatisticaltype();
+
+        if (ObjectUtils.isNotEmpty(statisticaltype)) {
+            SysUser user = getLoginUser().getUser();
+            if (!isAdmin.contains(user.getUserId())) {
+                if (statisticaltype == 1) {
+                    if (CollectionUtils.isEmpty(serviceSubtaskCountReq.getLeavehospitaldistrictcodes())) {
+                        //鍏ㄩ儴鐥呭尯
+                        List<String> leavehospitaldistrictcodes = null;
+                        SysUserDept sysUserWard = new SysUserDept();
+                        sysUserWard.setUserId(user.getUserId());
+                        sysUserWard.setOrgid(user.getOrgid());
+                        sysUserWard.setDeptType("2");
+                        List<SysUserDept> wardList = sysUserDeptService.selectSysUserDeptList(sysUserWard);
+                        if(CollectionUtils.isNotEmpty(wardList)) {
+                            leavehospitaldistrictcodes = wardList.stream().map(SysUserDept::getDeptCode).collect(Collectors.toList());
+                        }
+                        serviceSubtaskCountReq.setLeavehospitaldistrictcodes(leavehospitaldistrictcodes);
+                    }
+                } else if (statisticaltype == 2) {
+                    if (CollectionUtils.isEmpty(serviceSubtaskCountReq.getDeptcodes())) {
+                        //鍏ㄩ儴绉戝
+                        List<String> deptCodes = null;
+                        SysUserDept sysUserDept = new SysUserDept();
+                        sysUserDept.setUserId(user.getUserId());
+                        sysUserDept.setOrgid(user.getOrgid());
+                        sysUserDept.setDeptType("1");
+                        List<SysUserDept> deptList = sysUserDeptService.selectSysUserDeptList(sysUserDept);
+                        if(CollectionUtils.isNotEmpty(deptList)){
+                            deptCodes = deptList.stream().map(SysUserDept::getDeptCode).collect(Collectors.toList());
+                        }
+                        serviceSubtaskCountReq.setDeptcodes(deptCodes);
+                    }
+                }
+            }
+        }
+
         String followUpCountStyle = configService.selectConfigByKey("followUpCountStyle", serviceSubtaskCountReq.getOrgid());
         if (ObjectUtils.isNotEmpty(followUpCountStyle)) {
             serviceSubtaskCountReq.setFollowUpCountStyle(followUpCountStyle);
@@ -548,6 +616,31 @@
         serviceSubtaskCountReq.setPageSize(null);
         List<ServiceSubtaskStatistic> sfStatistics = serviceSubtaskService.getSfStatistics(serviceSubtaskCountReq);
         return getDataTable4(CollectionUtils.isEmpty(sfStatistics) ? sfStatistics.size() : 0, serviceSubtaskService.getSfStatistics(serviceSubtaskCountReq));
+    }
+
+    /**
+     * 鑾峰彇涓撶梾闅忚缁熻姣斾緥
+     */
+    @ApiOperation("鑾峰彇涓撶梾闅忚缁熻姣斾緥")
+    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
+    @PostMapping("/getSpecialSfStatistics")
+    public Map<String, Object> getSpecialSfStatistics(@RequestBody ServiceSubtaskCountReq serviceSubtaskCountReq) {
+        if (CollectionUtils.isEmpty(serviceSubtaskCountReq.getServiceType())) {
+            return error("鏈嶅姟绫诲瀷涓嶈兘涓虹┖");
+        }
+        Integer offset = PageUtils.getOffset(serviceSubtaskCountReq.getPageNum(), serviceSubtaskCountReq.getPageSize());
+        serviceSubtaskCountReq.setPageNum(offset);
+
+        String followUpCountStyle = configService.selectConfigByKey("followUpCountStyle", serviceSubtaskCountReq.getOrgid());
+        if (ObjectUtils.isNotEmpty(followUpCountStyle)) {
+            serviceSubtaskCountReq.setFollowUpCountStyle(followUpCountStyle);
+        } else {
+            serviceSubtaskCountReq.setFollowUpCountStyle("1");
+        }
+        serviceSubtaskCountReq.setPageNum(null);
+        serviceSubtaskCountReq.setPageSize(null);
+        List<ServiceSubtaskStatistic> sfStatistics = serviceSubtaskService.getSpecialSfStatistics(serviceSubtaskCountReq);
+        return getDataTable4(CollectionUtils.isEmpty(sfStatistics) ? sfStatistics.size() : 0, serviceSubtaskService.getSpecialSfStatistics(serviceSubtaskCountReq));
     }
 
     /**
@@ -610,6 +703,63 @@
         return success(serviceSubtaskService.getSfStatisticsJoydetails(serviceSubtaskCountReq));
     }
 
+    /**
+     * 鑾峰彇闅忚缁熻瓒呴摼鎺�
+     * dischargeCountInfo
+     * followUpNeededAllInfo - sendstate != 4 (1,2,3,5,6,7)
+     * nonFollowUpInfo - sendstate = 4
+     * needFollowUpInfo - visitCount = 1 && sendstate != 4
+     * pendingFollowUpInfo - visitCount = 1 && sendstate = 2
+     * followUpSuccessInfo - visitCount = 1 && sendstate = 6
+     * followUpFailInfo - visitCount = 1 && (sendstate = 5 || sendstate = 7)
+     * manualInfo - visitCount = 1 && currentPreachForm = "1"
+     * voiceInfo - visitCount = 1 && currentPreachForm = "3"
+     * smsInfo - visitCount = 1 && currentPreachForm = "4"
+     * wechatInfo - visitCount = 1 && currentPreachForm = "5"
+     * abnormalInfo - visitCount = 1 && excep = "1"
+     * needFollowUpAgainInfo - visitCount > 1 && sendstate != 4
+     * pendingFollowUpAgainInfo -  visitCount > 1 && sendstate = 2
+     * followUpSuccessAgainInfo - visitCount > 1 && sendstate =6
+     * followUpFailAgainInfo - visitCount > 1 && (sendstate = 5 || sendstate = 7)
+     * manualAgainInfo - visitCount > 1 && currentPreachForm = "1"
+     * voiceAgainInfo - visitCount > 1 && currentPreachForm = "3"
+     * smsAgainInfo - visitCount > 1 && currentPreachForm = "4"
+     * wechatAgainInfo -  visitCount > 1 && currentPreachForm = "5"
+     * abnormalAgainInfo- visitCount > 1 && excep = "1"
+     * taskSituation1Info - taskSituation = 1
+     * taskSituation2Info - taskSituation = 2
+     * taskSituation3Info - taskSituation = 3
+     * taskSituation4Info - taskSituation = 4
+     * taskSituation5Info - taskSituation = 5
+     * taskSituation6Info - taskSituation = 7
+     * filterCountList - taskSituation = 6 && sendstate = 4
+     *
+     */
+    @ApiOperation("鑾峰彇闅忚缁熻瓒呴摼鎺�")
+    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
+    @PostMapping("/getSfStatisticsHyperlink")
+    public AjaxResult getSfStatisticsHyperlink(@RequestBody ServiceSubtaskCountReq serviceSubtaskCountReq) {
+        LoginUser loginUser = getLoginUser();
+        String orgid = loginUser.getUser().getOrgid();
+        String configKey = serviceSubtaskCountReq.getConfigKey();
+        if (StringUtils.isNotEmpty(configKey)) {
+            String configValue = configService.selectConfigByKey(configKey, orgid);
+            serviceSubtaskCountReq.setConfigValue(configValue);
+            if (StringUtils.isEmpty(configValue)) {
+                String logInfo = "getSfStatisticsCount-鍙傛暟 " + configKey + " 鏈厤缃�, 璇烽厤缃ソ鍚庨噸璇�";
+                log.error(logInfo);
+                return error(logInfo);
+            }
+        }
+
+        String followUpCountStyle = configService.selectConfigByKey("followUpCountStyle", orgid);
+        if (ObjectUtils.isNotEmpty(followUpCountStyle)) {
+            serviceSubtaskCountReq.setFollowUpCountStyle(followUpCountStyle);
+        } else {
+            serviceSubtaskCountReq.setFollowUpCountStyle("1");
+        }
+        return success(serviceSubtaskService.getSfStatisticsHyperlink(serviceSubtaskCountReq));
+    }
 
     /**
      * 寤剁画鎶ょ悊缁熻
@@ -654,7 +804,8 @@
             log.error(logInfo);
             return error(logInfo);
         }
-        return success(serviceSubtaskService.getSfStatisticsScript(serviceSubtaskCountReq));
+        List<ServiceSubtaskStatistic> serviceSubtaskStatistics = serviceSubtaskService.getSfStatisticsScript(serviceSubtaskCountReq);
+        return success(serviceSubtaskStatistics);
     }
 
     @ApiOperation("鑾峰彇闅忚鍒嗙被缁熻鏄庣粏璇︽儏")
@@ -753,14 +904,78 @@
         return serviceSubtaskService.getHeLibraryCount(heLibraryCountVO);
     }
 
+    @ApiOperation("鑾峰彇瀹f暀缁熻瓒呴摼鎺�")
+    @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
+    @PostMapping("/gethelibraryCountHyperlink")
+    public AjaxResult gethelibraryCountHyperlink(@RequestBody HeLibraryCountVO heLibraryCountVO) {
+        return success(serviceSubtaskService.gethelibraryCountHyperlink(heLibraryCountVO));
+    }
+
+    /**
+     * 鎵嬪姩鍙戦�侀棶鍗锋ā鏉跨殑鐭俊鍔熻兘
+     *
+     * @param subid
+     * @return
+     */
+    @GetMapping(value = "/smsSubTask/{subid}")
+    public Map<String, Object> smsSubTask(@PathVariable("subid") Long subid) {
+        return serviceSubtaskService.smsSubTask(subid);
+    }
+
+    /**
+     * 璺宠浆涓棿椤�
+     *
+     * @param taskId
+     * @return
+     */
+    @PostMapping(value = "/goSfRelay")
+    public AjaxResult goSfRelay(@RequestParam("taskId") Long taskId) {
+        String url = localIP + ":" + req_path + "/SfRelay?taskid=" + taskId;
+        return AjaxResult.success(url);
+    }
+
+    /**
+     * 鎵爜鐢熸垚瀛愪换鍔�
+     *
+     * @param serviceTask
+     * @return
+     */
+    @PostMapping(value = "/scanGenerateSubtask")
+    public AjaxResult scanGenerateSubtask(@RequestBody ServiceTask serviceTask) {
+        return AjaxResult.success(serviceSubtaskService.scanGenerateSubtask(serviceTask));
+    }
+
 
     @PostMapping("/test")
     public void test() {
         ryTask.dealOutHospInfo();
     }
 
+    @PostMapping("/compensateTasktest")
+    public void compensateTasktest(@RequestParam("subId") Long subId) {
+        ryTask.compensateTaskTest(subId);
+    }
+
+    @PostMapping("/longTaskSendtest")
+    public void longTaskSendtest(@RequestParam("subId") Long subId) {
+        ryTask.longTaskSendTest(subId);
+    }
+
     @PostMapping("/syncMedInhospForShiyi")
     public void syncMedInhospForShiyi(@RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime) {
         collectHISService.syncMedInhosp(startTime, endTime);
     }
+
+    @PostMapping("/syncMedOperForShiyi")
+    public void syncMedOperForShiyi(@RequestParam("startTime") String startTime, @RequestParam("endTime") String endTime) {
+        collectHISService.syncOper(startTime, endTime);
+    }
+
+    @PostMapping("/qwenLLMTest")
+    public int qwenLLMTest(@RequestParam("voiceText") String questionText, @RequestParam("voiceText") String voiceText, @RequestParam("value") String value, @RequestParam("regexText") String regexText) {
+        int result = ryTask.qwenLLMTest(questionText, voiceText, value, regexText);
+        return result;
+    }
+
+
 }

--
Gitblit v1.9.3