From 919038323f4148c1bc5bf1962903e2f865dd90be Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期二, 10 十一月 2026 11:17:38 +0800
Subject: [PATCH] 代码提交
---
ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceSubtaskController.java | 445 ++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 390 insertions(+), 55 deletions(-)
diff --git a/ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceSubtaskController.java b/ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceSubtaskController.java
index ae47d97..06b4a55 100644
--- a/ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceSubtaskController.java
+++ b/ruoyi-task/src/main/java/com/ruoyi/task/controller/ServiceSubtaskController.java
@@ -3,10 +3,12 @@
import com.alibaba.fastjson.JSON;
import com.github.pagehelper.ISelect;
import com.ruoyi.common.annotation.AddOrgId;
+import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.entity.SysUserDept;
import com.ruoyi.common.core.domain.model.LoginUser;
@@ -20,11 +22,8 @@
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.utils.reflect.ReflectUtils;
import com.ruoyi.common.core.service.TaskOpsTriggerApi;
-import com.ruoyi.task.api.spi.TaskSysConfigPort;
-import com.ruoyi.task.api.spi.TaskSysUserDeptPort;
import com.ruoyi.satisfaction.api.SatisfactionExportBundle;
import com.ruoyi.satisfaction.api.SatisfactionFacade;
-import com.ruoyi.task.api.spi.TaskSubtaskRecordPort;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@@ -54,6 +53,7 @@
import com.ruoyi.task.domain.ServiceSubtaskStatistic;
import com.ruoyi.task.domain.ServiceTask;
import com.ruoyi.task.domain.VO.ServiceSubtaskCotinueCountVO;
+import com.ruoyi.task.service.IServiceSubtaskRecordService;
import com.ruoyi.task.service.IServiceSubtaskService;
import com.ruoyi.task.service.IServiceTaskService;
import com.ruoyi.task.domain.PatArchiveSrmVO;
@@ -65,6 +65,9 @@
import com.ruoyi.task.domain.VO.ServiceSubtaskVO;
import com.ruoyi.task.domain.VO.TransferDeptVO;
import com.ruoyi.task.domain.ServiceSubtaskExport;
+import com.ruoyi.system.service.ISysConfigService;
+import com.ruoyi.system.service.ISysDeptService;
+import com.ruoyi.system.service.ISysUserDeptService;
/**
* 鍗曚竴浠诲姟锛堥殢璁匡級Controller
@@ -104,13 +107,16 @@
private IServiceTaskService serviceTaskService;
@Autowired
- private TaskSysUserDeptPort taskSysUserDeptPort;
+ private ISysUserDeptService sysUserDeptService;
@Autowired
- private TaskSubtaskRecordPort serviceSubtaskRecordService;
+ private IServiceSubtaskRecordService serviceSubtaskRecordService;
@Autowired
- private TaskSysConfigPort taskSysConfigPort;
+ private ISysConfigService sysConfigService;
+
+ @Autowired
+ private ISysDeptService sysDeptService;
/**
* 浠诲姟杩愮淮瑙﹀彂鑳藉姏銆�
@@ -160,11 +166,16 @@
@ApiOperation("鏌ヨ鎮h�呴殢璁夸俊鎭�")
@PostMapping("/patItem")
public Map<String, Object> patItem(@RequestBody ServiceSubtaskVO serviceSubtaskVO) {
+ // ==== 涓存椂璇婃柇璁℃椂锛氱‘璁ゆ參鍦ㄥ摢涓�娈靛悗鏁存鍒犻櫎鍗冲彲锛堝彧鍔犳棩蹇楋紝涓嶆敼閫昏緫锛�====
+ long tTotal = System.currentTimeMillis();
+ long tMark = tTotal;
+
serviceSubtaskVO.setPageNum(PageUtils.getOffset(serviceSubtaskVO.getPageNum(), serviceSubtaskVO.getPageSize()));
List<ServiceSubtaskRes> serviceSubtaskList = null;
LoginUser loginUser = getLoginUser();
SysUser user = loginUser.getUser();
serviceSubtaskVO.setOrgid(user.getOrgid());
+ // 闄㈠尯鍙栫櫥褰曚細璇濋噷鐨勫�硷紙鐧诲綍椤甸�夋嫨鐨勯櫌鍖猴紝瑙� SysLoginService#login锛�
serviceSubtaskVO.setCampusid(user.getCampusid());
ServiceSubtaskEntity serviceSubtaskEntity = null;
if (serviceSubtaskVO != null) {
@@ -172,17 +183,26 @@
serviceSubtaskEntity.setContinueContent(ObjectUtils.isNotEmpty(serviceSubtaskVO.getContinueContent()) ? serviceSubtaskVO.getContinueContent().toString() : null);
serviceSubtaskList = serviceSubtaskService.patItem(serviceSubtaskEntity);
}
+ log.info("[patItem鑰楁椂] 1.鍒楄〃椤�(涓ら樁娈靛垎椤�)={}ms锛岃鏁�={}", System.currentTimeMillis() - tMark,
+ serviceSubtaskList == null ? -1 : serviceSubtaskList.size());
+ tMark = System.currentTimeMillis();
// 鎵归噺鏌� subtask_record锛�1娆QL鏇夸唬寰幆涓璑娆″崟鐙煡
- List<Long> subtaskIds = serviceSubtaskList.stream().map(ServiceSubtaskRes::getId).filter(ObjectUtils::isNotEmpty).collect(Collectors.toList());
- Map<Long, List<ServiceSubtaskRecord>> recordMap = serviceSubtaskRecordService.selectRecordMapBySubtaskIds(subtaskIds);
-
- for (ServiceSubtaskRes serviceSubtask : serviceSubtaskList) {
- serviceSubtask.setServiceSubtaskRecordList(recordMap.getOrDefault(serviceSubtask.getId(), new ArrayList<>()));
- }
+// List<Long> subtaskIds = serviceSubtaskList.stream().map(ServiceSubtaskRes::getId).filter(ObjectUtils::isNotEmpty).collect(Collectors.toList());
+// Map<Long, List<ServiceSubtaskRecord>> recordMap = serviceSubtaskRecordService.selectRecordMapBySubtaskIds(subtaskIds);
+// log.info("[patItem鑰楁椂] 2.subtask_record鎵归噺={}ms锛屽叆鍙俰d鏁�={}", System.currentTimeMillis() - tMark, subtaskIds.size());
+// tMark = System.currentTimeMillis();
+//
+// for (ServiceSubtaskRes serviceSubtask : serviceSubtaskList) {
+// serviceSubtask.setServiceSubtaskRecordList(recordMap.getOrDefault(serviceSubtask.getId(), new ArrayList<>()));
+// }
+ log.info("[patItem鑰楁椂] 3.璁板綍鍥炲~={}ms", System.currentTimeMillis() - tMark);
+ tMark = System.currentTimeMillis();
// patItemCount 璧癛edis缂撳瓨鐗堬紝閬垮厤姣忔鍏ㄨ〃鑱氬悎鎵弿
Map<String, Object> map = getPatItemCountWithCache(serviceSubtaskEntity);
+ log.info("[patItem鑰楁椂] 4.缁熻patItemCount(鍚紦瀛�)={}ms", System.currentTimeMillis() - tMark);
+ tMark = System.currentTimeMillis();
map.put("serviceSubtaskList", serviceSubtaskList);
List<Map<String, Object>> list = new ArrayList<>();
list.add(map);
@@ -200,6 +220,8 @@
total = CollectionUtils.isNotEmpty(serviceSubtasks) ? serviceSubtasks.size() : 0L;
}
+ log.info("[patItem鑰楁椂] 5.缁勮杩斿洖total={}={}ms锛屾暣浣撳悎璁�={}ms", total,
+ System.currentTimeMillis() - tMark, System.currentTimeMillis() - tTotal);
return getDataTable3(total, list);
}
@@ -348,8 +370,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));
}
@@ -363,8 +384,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));
}
@@ -543,7 +564,7 @@
sysUserWard.setOrgid(user.getOrgid());
sysUserWard.setCampusid(user.getCampusid());
sysUserWard.setDeptType("2");
- List<SysUserDept> wardList = taskSysUserDeptPort.selectSysUserDeptList(sysUserWard);
+ List<SysUserDept> wardList = sysUserDeptService.selectSysUserDeptList(sysUserWard);
if (CollectionUtils.isNotEmpty(wardList)) {
leavehospitaldistrictcodes = wardList.stream().map(SysUserDept::getDeptCode).collect(Collectors.toList());
}
@@ -558,7 +579,7 @@
sysUserDept.setOrgid(user.getOrgid());
sysUserDept.setCampusid(user.getCampusid());
sysUserDept.setDeptType("1");
- List<SysUserDept> deptList = taskSysUserDeptPort.selectSysUserDeptList(sysUserDept);
+ List<SysUserDept> deptList = sysUserDeptService.selectSysUserDeptList(sysUserDept);
if (CollectionUtils.isNotEmpty(deptList)) {
deptCodes = deptList.stream().map(SysUserDept::getDeptCode).collect(Collectors.toList());
}
@@ -568,7 +589,7 @@
}
}
- String followUpCountStyle = taskSysConfigPort.selectConfigValue("followUpCountStyle", serviceSubtaskCountReq.getOrgid());
+ String followUpCountStyle = sysConfigService.selectConfigByKey("followUpCountStyle", serviceSubtaskCountReq.getOrgid());
if (ObjectUtils.isNotEmpty(followUpCountStyle)) {
serviceSubtaskCountReq.setFollowUpCountStyle(followUpCountStyle);
} else {
@@ -578,6 +599,155 @@
serviceSubtaskCountReq.setPageSize(null);
List<ServiceSubtaskStatistic> sfStatistics = serviceSubtaskService.getSfStatistics(serviceSubtaskCountReq);
return getDataTable4(CollectionUtils.isEmpty(sfStatistics) ? sfStatistics.size() : 0, serviceSubtaskService.getSfStatistics(serviceSubtaskCountReq));
+ }
+
+ // =====================================================================================
+ // 鍏嶇櫥褰曢殢璁跨粺璁★紙渚� public/html/sfstat.html 鐙珛椤甸潰浣跨敤锛孈Anonymous 鍗� SecurityConfig 鐨� permitAll锛�
+ // 鍙e緞涓� /getSfStatistics 瀹屽叏涓�鑷达紝鍖哄埆鍙湁涓ょ偣锛�
+ // 1. 涓嶄緷璧栫櫥褰曠敤鎴凤紝orgid / campusid 鐢辫姹備綋鏄惧紡浼犲叆锛�
+ // 2. 鏈寚瀹氱梾鍖猴紙绉戝锛夋椂锛屽彇璇ユ満鏋勶紙闄㈠尯锛変笅鐨勫叏閮ㄧ梾鍖猴紙绉戝锛夛紝鑰岄潪褰撳墠鐧诲綍鐢ㄦ埛鐨勬潈闄愯寖鍥淬��
+ // =====================================================================================
+
+ /**
+ * 鍏嶇櫥褰曪細闅忚缁熻锛堥娆� / 鍐嶆锛�
+ */
+ @Anonymous
+ @PostMapping("/publicSfStatistics")
+ public Map<String, Object> publicSfStatistics(@RequestBody ServiceSubtaskCountReq serviceSubtaskCountReq) {
+ if (CollectionUtils.isEmpty(serviceSubtaskCountReq.getServiceType())) {
+ return error("鏈嶅姟绫诲瀷涓嶈兘涓虹┖");
+ }
+ if (StringUtils.isEmpty(serviceSubtaskCountReq.getOrgid())) {
+ return error("缂哄皯鏈烘瀯鍙傛暟 orgid");
+ }
+ Integer statisticaltype = serviceSubtaskCountReq.getStatisticaltype();
+ if (statisticaltype != null && statisticaltype == 1) {
+ List<String> wardCodes = isAllSelected(serviceSubtaskCountReq.getLeavehospitaldistrictcodes())
+ ? listDeptCodesByType(serviceSubtaskCountReq.getOrgid(), serviceSubtaskCountReq.getCampusid(), "2")
+ : serviceSubtaskCountReq.getLeavehospitaldistrictcodes();
+ if (CollectionUtils.isEmpty(wardCodes)) {
+ return getDataTable4(0, new ArrayList<>());
+ }
+ serviceSubtaskCountReq.setLeavehospitaldistrictcodes(wardCodes);
+ serviceSubtaskCountReq.setDeptcodes(null);
+ } else if (statisticaltype != null && statisticaltype == 2) {
+ List<String> deptCodes = isAllSelected(serviceSubtaskCountReq.getDeptcodes())
+ ? listDeptCodesByType(serviceSubtaskCountReq.getOrgid(), serviceSubtaskCountReq.getCampusid(), "1")
+ : serviceSubtaskCountReq.getDeptcodes();
+ if (CollectionUtils.isEmpty(deptCodes)) {
+ return getDataTable4(0, new ArrayList<>());
+ }
+ serviceSubtaskCountReq.setDeptcodes(deptCodes);
+ serviceSubtaskCountReq.setLeavehospitaldistrictcodes(null);
+ }
+ String followUpCountStyle = sysConfigService.selectConfigByKey("followUpCountStyle", serviceSubtaskCountReq.getOrgid());
+ if (ObjectUtils.isNotEmpty(followUpCountStyle)) {
+ serviceSubtaskCountReq.setFollowUpCountStyle(followUpCountStyle);
+ } else {
+ serviceSubtaskCountReq.setFollowUpCountStyle("1");
+ }
+ if (serviceSubtaskCountReq.getRateDay() == null) {
+ serviceSubtaskCountReq.setRateDay(7);
+ }
+ serviceSubtaskCountReq.setPageNum(null);
+ serviceSubtaskCountReq.setPageSize(null);
+ List<ServiceSubtaskStatistic> sfStatistics = serviceSubtaskService.getSfStatistics(serviceSubtaskCountReq);
+ return getDataTable4(CollectionUtils.isEmpty(sfStatistics) ? 0 : sfStatistics.size(), sfStatistics);
+ }
+
+ /**
+ * 鍏嶇櫥褰曪細闅忚缁熻绛涢�夐」锛堢梾鍖哄垪琛� / 绉戝鍒楄〃锛�
+ *
+ * @param orgid 鏈烘瀯ID锛屽繀濉�
+ * @param campusid 闄㈠尯ID锛屽彲涓虹┖锛涗负绌烘椂鍙栬鏈烘瀯鍏ㄩ儴闄㈠尯
+ */
+ @Anonymous
+ @GetMapping("/publicSfStatisticsOptions") public AjaxResult publicSfStatisticsOptions(@RequestParam(value = "orgid", required = false) String orgid,
+ @RequestParam(value = "campusid", required = false) String campusid) {
+ if (StringUtils.isEmpty(orgid)) {
+ return error("缂哄皯鏈烘瀯鍙傛暟 orgid");
+ }
+ Map<String, Object> result = new LinkedHashMap<>();
+ result.put("orgid", orgid);
+ result.put("campusid", campusid);
+ result.put("wards", listDepts(orgid, campusid, "2"));
+ result.put("depts", listDepts(orgid, campusid, "1"));
+ return success(result);
+ }
+
+ /**
+ * 鍏嶇櫥褰曪細寤剁画鎶ょ悊缁熻锛堝彛寰勪笌 /getContinueNerseCount 涓�鑷达紝orgid / campusid 鐢辫姹備綋浼犲叆锛�
+ */
+ @Anonymous
+ @PostMapping("/publicContinueNerseCount")
+ public AjaxResult publicContinueNerseCount(@RequestBody ServiceSubtaskCotinueCountVO serviceSubtaskCotinueCountVO) {
+ if (StringUtils.isEmpty(serviceSubtaskCotinueCountVO.getOrgid())) {
+ return error("缂哄皯鏈烘瀯鍙傛暟 orgid");
+ }
+ List<String> districts = serviceSubtaskCotinueCountVO.getLeavehospitaldistrictcodes();
+ List<String> depts = serviceSubtaskCotinueCountVO.getDeptcodes();
+ boolean hasDistrict = !CollectionUtils.isEmpty(districts) && !districts.contains("all");
+ boolean hasDept = !CollectionUtils.isEmpty(depts) && !depts.contains("all");
+ if (hasDistrict && hasDept) {
+ return error("鐥呭尯Code闆嗗悎涓庣瀹ode闆嗗悎浜掓枼锛屼笉鑳藉悓鏃朵紶鍏�");
+ }
+ if (!hasDistrict && !hasDept) {
+ // 鏈寚瀹氱梾鍖�/绉戝锛氭寜璇ユ満鏋勶紙闄㈠尯锛変笅鍏ㄩ儴鐥呭尯缁熻
+ List<String> wardCodes = listDeptCodesByType(serviceSubtaskCotinueCountVO.getOrgid(),
+ serviceSubtaskCotinueCountVO.getCampusid(), "2");
+ if (CollectionUtils.isEmpty(wardCodes)) {
+ return success(new LinkedHashMap<>());
+ }
+ serviceSubtaskCotinueCountVO.setLeavehospitaldistrictcodes(wardCodes);
+ serviceSubtaskCotinueCountVO.setDeptcodes(null);
+ } else if (hasDistrict) {
+ serviceSubtaskCotinueCountVO.setDeptcodes(null);
+ } else {
+ serviceSubtaskCotinueCountVO.setLeavehospitaldistrictcodes(null);
+ }
+ return success(serviceSubtaskService.getContinueNurseCount(serviceSubtaskCotinueCountVO));
+ }
+
+ /**
+ * 鍓嶇鏈�夋嫨鍏蜂綋鐥呭尯/绉戝锛堟垨閫夋嫨浜� all锛夋椂锛岃涓衡�滃叏閮ㄢ��
+ */
+ private boolean isAllSelected(List<String> codes) {
+ return CollectionUtils.isEmpty(codes) || codes.contains("all");
+ }
+
+ private List<String> listDeptCodesByType(String orgid, String campusid, String deptType) {
+ List<String> codes = new ArrayList<>();
+ for (Map<String, String> item : listDepts(orgid, campusid, deptType)) {
+ codes.add(item.get("code"));
+ }
+ return codes;
+ }
+
+ /**
+ * 鏌ヨ鏈烘瀯锛堥櫌鍖猴級涓嬫寚瀹氱被鍨嬬殑閮ㄩ棬锛歞eptType=2 鐥呭尯锛宒eptType=1 绉戝
+ */
+ private List<Map<String, String>> listDepts(String orgid, String campusid, String deptType) {
+ List<Map<String, String>> result = new ArrayList<>();
+ SysDept query = new SysDept();
+ query.setOrgid(orgid);
+ query.setDeptType(deptType);
+ if (StringUtils.isNotEmpty(campusid) && !"all".equalsIgnoreCase(campusid)) {
+ query.setCampusid(campusid);
+ }
+ List<SysDept> depts = sysDeptService.selectSysDeptList(query);
+ if (CollectionUtils.isEmpty(depts)) {
+ return result;
+ }
+ for (SysDept dept : depts) {
+ if (StringUtils.isEmpty(dept.getDeptCode())) {
+ continue;
+ }
+ Map<String, String> item = new LinkedHashMap<>();
+ item.put("code", dept.getDeptCode());
+ item.put("name", dept.getDeptName());
+ result.add(item);
+ }
+ return result;
}
/**
@@ -593,7 +763,7 @@
Integer offset = PageUtils.getOffset(serviceSubtaskCountReq.getPageNum(), serviceSubtaskCountReq.getPageSize());
serviceSubtaskCountReq.setPageNum(offset);
- String followUpCountStyle = taskSysConfigPort.selectConfigValue("followUpCountStyle", serviceSubtaskCountReq.getOrgid());
+ String followUpCountStyle = sysConfigService.selectConfigByKey("followUpCountStyle", serviceSubtaskCountReq.getOrgid());
if (ObjectUtils.isNotEmpty(followUpCountStyle)) {
serviceSubtaskCountReq.setFollowUpCountStyle(followUpCountStyle);
} else {
@@ -677,6 +847,10 @@
* manualInfo - visitCount = 1 && currentPreachForm = "1"
* voiceInfo - visitCount = 1 && currentPreachForm = "3"
* smsInfo - visitCount = 1 && currentPreachForm = "4"
+ * manualSuccessInfo - visitCount = 1 && currentPreachForm = "1" && sendstate = 6
+ * voiceSuccessInfo - visitCount = 1 && currentPreachForm = "3" && sendstate = 6
+ * smsSuccessInfo - visitCount = 1 && currentPreachForm = "4" && sendstate = 6
+ * wechatSuccessInfo - visitCount = 1 && currentPreachForm = "5" && sendstate = 6
* wechatInfo - visitCount = 1 && currentPreachForm = "5"
* abnormalInfo - visitCount = 1 && excep = "1"
* needFollowUpAgainInfo - visitCount > 1 && sendstate != 4
@@ -694,6 +868,19 @@
* taskSituation4Info - taskSituation = 4
* taskSituation5Info - taskSituation = 5
* taskSituation6Info - taskSituation = 7
+ * manuallyCalledInfo - isManuallyCalled = 1L
+ * manualCallTimeoutInfo - visitCount = 1 && sendstate = 7 && isManuallyCalled = 0
+ * manualCallTimeoutAgainInfo - visitCount > 1 && sendstate = 7 && isManuallyCalled = 0
+ * pendingFollowUpAllInfo - visitCount = 1 && sendstate in (1,2,3,7)
+ * pendingFollowUpAllAgainInfo - visitCount > 1 && sendstate in (1,2,3,7)
+ * pendingFollowUpWaitSendInfo - visitCount = 1 && sendstate in (1,2)
+ * pendingFollowUpWaitSendAgainInfo - visitCount > 1 && sendstate in (1,2)
+ * pendingFollowUpSentInfo - visitCount = 1 && sendstate in (3,7)
+ * pendingFollowUpSentAgainInfo - visitCount > 1 && sendstate in (3,7)
+ * sentInfo - visitCount = 1 && sendstate = 3
+ * sentAgainInfo - visitCount > 1 && sendstate = 3
+ * firstDischargeCountInfo - visitCount = 1
+ * againFollowUpPushCountInfo - visitCount = 2 && visitDeptCode = sys.smartor.center.dept
* filterCountList - taskSituation = 6 && sendstate = 4
*
*/
@@ -705,7 +892,7 @@
String orgid = loginUser.getUser().getOrgid();
String configKey = serviceSubtaskCountReq.getConfigKey();
if (StringUtils.isNotEmpty(configKey)) {
- String configValue = taskSysConfigPort.selectConfigValue(configKey, orgid);
+ String configValue = sysConfigService.selectConfigByKey(configKey, orgid);
serviceSubtaskCountReq.setConfigValue(configValue);
if (StringUtils.isEmpty(configValue)) {
String logInfo = "getSfStatisticsCount-鍙傛暟 " + configKey + " 鏈厤缃�, 璇烽厤缃ソ鍚庨噸璇�";
@@ -714,7 +901,7 @@
}
}
- String followUpCountStyle = taskSysConfigPort.selectConfigValue("followUpCountStyle", orgid);
+ String followUpCountStyle = sysConfigService.selectConfigByKey("followUpCountStyle", orgid);
if (ObjectUtils.isNotEmpty(followUpCountStyle)) {
serviceSubtaskCountReq.setFollowUpCountStyle(followUpCountStyle);
} else {
@@ -754,7 +941,7 @@
}
String configKey = serviceSubtaskCountReq.getConfigKey();
if (StringUtils.isNotEmpty(configKey)) {
- String configValue = taskSysConfigPort.selectConfigValue(configKey, serviceSubtaskCountReq.getOrgid());
+ String configValue = sysConfigService.selectConfigByKey(configKey, serviceSubtaskCountReq.getOrgid());
serviceSubtaskCountReq.setConfigValue(configValue);
if (StringUtils.isEmpty(configValue)) {
String logInfo = "getSfStatisticsCount-鍙傛暟 " + configKey + " 鏈厤缃�, 璇烽厤缃ソ鍚庨噸璇�";
@@ -766,6 +953,9 @@
log.error(logInfo);
return error(logInfo);
}
+ // 鍒嗙被缁熻涓烘眹鎬荤粨鏋滐紝涓嶅弬涓庡垎椤碉紱鍚屾椂閬垮厤 pageNum/pageSize 褰卞搷鍒嗙粍 key 鐨勬敹闆嗐��
+ serviceSubtaskCountReq.setPageNum(null);
+ serviceSubtaskCountReq.setPageSize(null);
List<ServiceSubtaskStatistic> serviceSubtaskStatistics = serviceSubtaskService.getSfStatisticsScript(serviceSubtaskCountReq);
return success(serviceSubtaskStatistics);
}
@@ -774,13 +964,18 @@
@AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
@PostMapping("/getSfStatisticsCountDetails")
public AjaxResult getSfStatisticsCountDetails(@RequestBody ServiceSubtaskCountReq serviceSubtaskCountReq) {
- if (serviceSubtaskCountReq.getLeavehospitaldistrictcodes().size() == 0 && serviceSubtaskCountReq.getDeptcodes().size() == 0) {
+ boolean noDeptOrDistrict = CollectionUtils.isEmpty(serviceSubtaskCountReq.getLeavehospitaldistrictcodes())
+ && CollectionUtils.isEmpty(serviceSubtaskCountReq.getDeptcodes())
+ && CollectionUtils.isEmpty(serviceSubtaskCountReq.getLeaveldeptcodes())
+ && CollectionUtils.isEmpty(serviceSubtaskCountReq.getHospitaldeptcodes())
+ && CollectionUtils.isEmpty(serviceSubtaskCountReq.getHospitaldistrictcodes());
+ if (noDeptOrDistrict) {
return error("绉戝鎴栫梾鍖轰笉鑳戒负绌�");
}
//澶嶈瘖缁熻
String configKey = serviceSubtaskCountReq.getConfigKey();
if (StringUtils.isNotEmpty(configKey)) {
- String configValue = taskSysConfigPort.selectConfigValue(configKey, serviceSubtaskCountReq.getOrgid());
+ String configValue = sysConfigService.selectConfigByKey(configKey, serviceSubtaskCountReq.getOrgid());
if (StringUtils.isEmpty(configValue)) {
String logInfo = "getSfStatisticsCountDetails-鍙傛暟 " + configKey + " 鏈厤缃�, 璇烽厤缃ソ鍚庨噸璇�";
log.error(logInfo);
@@ -796,10 +991,54 @@
LoginUser loginUser = getLoginUser();
String orgid = loginUser.getUser().getOrgid();
serviceSubtaskCountReq.setOrgid(orgid);
- PageUtils.startPageByPost(serviceSubtaskCountReq.getPageNum(), serviceSubtaskCountReq.getPageSize());
- return success(serviceSubtaskService.getSfStatisticsScriptDetails(serviceSubtaskCountReq));
+ //娉ㄦ剰锛氳繖閲屼笉鑳藉啀璋冪敤 PageUtils.startPageByPost銆�
+ //杩斿洖缁撴瀯鏄� Map锛屼笖涓嶄紶 type 鏃朵細鎵ц涓ゆ潯 SQL锛孭ageHelper 鍙綔鐢ㄤ簬绗竴鏉� SQL锛�
+ //鍒嗛〉宸叉斁鍒� Service 閲屾寜棰樼洰锛坰criptid锛夊畬鎴愶紝淇濊瘉 total 鏄鐩�绘暟銆�
+ Map<String, Object> details = serviceSubtaskService.getSfStatisticsScriptDetails(serviceSubtaskCountReq);
+ AjaxResult ajax = success(details.get("data"));
+ //鍏煎鏃у墠绔細data 浠嶇劧鏄� {scriptid: 棰樼洰} 鐨� Map锛�
+ //鍚屾椂鎸� RuoYi 涔犳儻琛ヤ笂 rows/total/pageNum/pageSize 鏂逛究鍓嶇鍒嗛〉
+ ajax.put("rows", details.get("rows"));
+ ajax.put("total", details.get("total"));
+ ajax.put("pageNum", details.get("pageNum"));
+ ajax.put("pageSize", details.get("pageSize"));
+ return ajax;
}
+ @ApiOperation("鑾峰彇闅忚鍒嗙被缁熻鏄庣粏璇︽儏瓒呴摼鎺�")
+ @AddOrgId(field = "orgid", paramIndex = 0, campusField = "campusid")
+ @PostMapping("/getSfStatisticsCountDetailsHyperLink")
+ public AjaxResult getSfStatisticsCountDetailsHyperLink(@RequestBody ServiceSubtaskCountReq serviceSubtaskCountReq) {
+ Integer statisticaltype = serviceSubtaskCountReq.getStatisticaltype();
+ if (statisticaltype != null && statisticaltype != 1 && statisticaltype != 2 && statisticaltype != 3) {
+ return error("缁熻缁村害statisticaltype浠呮敮鎸侊細1-鎸夌梾鍖� 2-鎸夌瀹� 3-鎸塼askid");
+ }
+ if (serviceSubtaskCountReq.getScriptid() == null
+ && StringUtils.isEmpty(serviceSubtaskCountReq.getScriptContent())) {
+ return error("闂ID(scriptid)涓嶈兘涓虹┖");
+ }
+ if (serviceSubtaskCountReq.getOptionText() == null) {
+ return error("闂閫夐」(optionText)涓嶈兘涓虹┖");
+ }
+
+ LoginUser loginUser = getLoginUser();
+ String orgid = loginUser.getUser().getOrgid();
+ serviceSubtaskCountReq.setOrgid(orgid);
+
+ // 涓� getSfStatisticsCountDetails 淇濇寔鐩稿悓鐨勯厤缃瓫閫夊彛寰�
+ String configKey = serviceSubtaskCountReq.getConfigKey();
+ if (StringUtils.isNotEmpty(configKey)) {
+ String configValue = sysConfigService.selectConfigByKey(configKey, orgid);
+ serviceSubtaskCountReq.setConfigValue(configValue);
+ if (StringUtils.isEmpty(configValue)) {
+ String logInfo = "getSfStatisticsCountDetailsHyperLink-鍙傛暟 " + configKey + " 鏈厤缃�, 璇烽厤缃ソ鍚庨噸璇�";
+ log.error(logInfo);
+ return error(logInfo);
+ }
+ }
+
+ return success(serviceSubtaskService.getSfStatisticsScriptDetailsHyperlink(serviceSubtaskCountReq));
+ }
/**
* 鍙戦�佺煭淇℃ā鏉�
*/
@@ -817,48 +1056,125 @@
}
/**
- * 缁熻浠诲姟鍚勭鐘舵�佺殑鏁伴噺锛堜紭鍖栫増锛�
+ * 缁熻浠诲姟鍚勭鐘舵�佺殑鏁伴噺锛堜紭鍖栫増锛�-銆愰殢璁垮伐浣滃彴銆�
*
+ * @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.setCampusid(sysUser.getCampusid());
- sysUserDept.setDeptType("1");
- List<SysUserDept> sysUserDepts = taskSysUserDeptPort.selectSysUserDeptList(sysUserDept);
- SysUserDept sysUserWard = new SysUserDept();
- sysUserWard.setUserId(sysUser.getUserId());
- sysUserWard.setOrgid(sysUser.getOrgid());
- sysUserWard.setCampusid(sysUser.getCampusid());
- sysUserWard.setDeptType("2");
- List<SysUserDept> sysUserWards = taskSysUserDeptPort.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;
+ }
+
+ /**
+ * 褰撳墠鐧诲綍浜哄緟澶勭悊闅忚浠诲姟缁熻锛堟寜鍑洪櫌骞存湀鍒嗙粍锛屽嚭闄㈤殢璁裤�侀棬璇婇殢璁垮垎寮�璁℃暟锛�
+ * <p>
+ * 鍙e緞锛歴ervice_subtask 涓�
+ * service_type = '2' 鍑洪櫌闅忚 / '3' 闂ㄨ瘖闅忚
+ * + 寰呴殢璁跨姸鎬侊紙sendstate in 1,2,3,7锛屽彂閫佸け璐�(5) 涓嶈鍏ワ級
+ * + 鍑洪櫌婊� 7 澶╋紙鍚��7 澶╁墠閭d竴澶┿�嶅嚭闄㈢殑鎮h�咃級
+ * + 鍙湅鏈�杩� 4 涓嚭闄㈡湀浠斤紙鍚綋鏈堬級锛�
+ * 绉戝/鐥呭尯鏉冮檺鍙� OR锛堜笌闅忚鍒楄〃 deptOrDistrict=2 涓�鑷达級銆�
+ *
+ * @return { userName, nickName, total, months: [{ month: 'yyyy-MM', dischargeCount, outpatientCount }] }
+ * 鍙繑鍥炴湁鏁版嵁鐨勬湀浠斤紝娌℃湁鏁版嵁鐨勬湀浠界敱鍓嶇琛� 0
+ */
+ @ApiOperation("鑾峰彇褰撳墠鐧诲綍浜哄緟澶勭悊闅忚浠诲姟缁熻锛堟寜鍑洪櫌骞存湀锛�")
+ @PostMapping("/pendingTaskMonthStats")
+ public Map<String, Object> pendingTaskMonthStats() {
+ LoginUser loginUser = getLoginUser();
+ SysUser sysUser = loginUser.getUser();
+ Map<String, Object> result = new LinkedHashMap<>();
+ result.put("userName", sysUser.getUserName());
+ result.put("nickName", sysUser.getNickName());
+ result.put("total", 0L);
+ result.put("months", new ArrayList<>());
+
+ // 娉ㄦ剰锛氫笉瑕佺敤 sys_user_dept.campusid 杩囨护鈥斺�旇繖寮犺〃鐨� campusid 澶ч噺涓� NULL锛�
+ // 甯︿笂瀹冧細鐩存帴鏌ヤ笉鍑烘潈闄愶紝缁熻缁撴灉姘歌繙鏄� 0銆傞櫌鍖烘潈闄愮敱 orgid + userId + deptType 宸茶兘瀹氫綅銆�
+ SysUserDept deptQuery = new SysUserDept();
+ deptQuery.setUserId(sysUser.getUserId());
+ deptQuery.setOrgid(sysUser.getOrgid());
+ deptQuery.setDeptType("1");
+ List<SysUserDept> sysUserDepts = sysUserDeptService.selectSysUserDeptList(deptQuery);
+
+ SysUserDept wardQuery = new SysUserDept();
+ wardQuery.setUserId(sysUser.getUserId());
+ wardQuery.setOrgid(sysUser.getOrgid());
+ wardQuery.setDeptType("2");
+ List<SysUserDept> sysUserWards = sysUserDeptService.selectSysUserDeptList(wardQuery);
+
+ boolean isAdmin = "admin".equals(sysUser.getUserName());
+ // 娌℃湁绉戝/鐥呭尯閰嶇疆鐨勮处鍙凤紙濡傞儴鍒嗙鐞嗗憳璐﹀彿锛夛紝鍒楄〃鏈韩鏄寜 鏈烘瀯+闄㈠尯 鏌ョ殑锛�
+ // 杩欓噷涔熸寜鍚屾牱鍙e緞缁熻锛屽惁鍒欏垪琛ㄦ湁鏁版嵁銆佸崱鐗囧嵈鍏ㄦ槸 0銆�
+ if (!isAdmin && CollectionUtils.isEmpty(sysUserDepts) && CollectionUtils.isEmpty(sysUserWards)) {
+ log.info("[pendingTaskMonthStats] 鐢ㄦ埛 {} 鏈厤缃瀹�/鐥呭尯锛屾寜鏈烘瀯+闄㈠尯缁熻", sysUser.getUserName());
+ }
+
+ // sys_user_dept 閲屽悓涓�绉戝/鐥呭尯浼氶噸澶嶅緢澶氳锛屽幓閲嶅悗鍐嶆嫾 IN锛岄伩鍏� SQL 鍙傛暟杩囧
+ List<String> deptCodes = sysUserDepts.stream()
+ .map(SysUserDept::getDeptCode)
+ .filter(Objects::nonNull)
+ .distinct()
+ .collect(Collectors.toList());
+ List<String> wardCodes = sysUserWards.stream()
+ .map(SysUserDept::getDeptCode)
+ .filter(Objects::nonNull)
+ .distinct()
+ .collect(Collectors.toList());
+
+ ServiceSubtaskEntity entity = new ServiceSubtaskEntity();
+ entity.setOrgid(sysUser.getOrgid());
+ // 涓庡垪琛ㄤ竴鑷达細鎸夌櫥褰曚細璇濋噷鐨勯櫌鍖鸿繃婊わ紙鐧诲綍椤甸�夋嫨鐨勯櫌鍖猴級
+ entity.setCampusid(sysUser.getCampusid());
+ entity.setLeaveldeptcodes(deptCodes);
+ entity.setLeavehospitaldistrictcodes(wardCodes);
+
+ Map<String, Object> stats = serviceSubtaskService.getPendingManualTaskMonthStats(entity);
+ if (stats != null) {
+ result.putAll(stats);
+ }
+ return result;
}
@ApiOperation("鑾峰彇褰撳墠鐢ㄦ埛瀹f暀鏁伴噺缁熻")
@@ -884,6 +1200,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);
}
/**
@@ -971,32 +1298,40 @@
userId = loginUser.getUser().getUserId();
}
if (serviceSubtaskEntity.getSendstateView() != null) {
- // 1锛氬緟闅忚锛�1 琚鍙栥��2 寰呭彂閫併��3 宸插彂閫併��5 鍙戦�佸け璐ャ��7銆佽秴鏃讹級锛�2锛氬凡瀹屾垚锛� 6 宸插畬鎴愶級銆�3锛氭棤闇�闅忚锛�4 涓嶆墽琛岋級
+ // 1锛氬緟闅忚锛�1 琚鍙栥��2 寰呭彂閫併��3 宸插彂閫併��7 瓒呮椂锛涘彂閫佸け璐�(5) 鍗曠嫭缁熻锛夛紱2锛氬凡瀹屾垚锛� 6 宸插畬鎴愶級銆�3锛氭棤闇�闅忚锛�4 涓嶆墽琛岋級
if (serviceSubtaskEntity.getSendstateView() == 1)
- serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(1L, 2L, 3L, 5L, 7L)));
+ serviceSubtaskEntity.setSendstates(new ArrayList<>(Arrays.asList(1L, 2L, 3L, 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)) {
+ long tRedis = System.currentTimeMillis();
Map<String, Object> redisMap = redisCache.getCacheObject(userId + "patItemCount");
+ log.info("[patItem鑰楁椂] 4.1 Redis鍙朿ount缂撳瓨={}ms", System.currentTimeMillis() - tRedis);
Boolean redisFlag = false;
if (MapUtils.isNotEmpty(redisMap)) {
+ long tCmp = System.currentTimeMillis();
ServiceSubtaskEntity oldCondition = (ServiceSubtaskEntity) redisMap.get("searchCondition");
if (ObjectUtils.isNotEmpty(oldCondition) && isSameCondition(oldCondition, serviceSubtaskEntity)) {
redisFlag = true;
map = redisMap;
redisCache.setCacheObject(userId + "patItemCount", map, 60, TimeUnit.MINUTES);
}
+ log.info("[patItem鑰楁椂] 4.2 鏉′欢姣斿={}ms锛屽懡涓�={}", System.currentTimeMillis() - tCmp, redisFlag);
}
if (!redisFlag) {
+ long tCalc = System.currentTimeMillis();
map = serviceSubtaskService.patItemCount(serviceSubtaskEntity);
+ log.info("[patItem鑰楁椂] 4.3 count鑱氬悎(鏈懡涓紦瀛橈紝璧板簱)={}ms", System.currentTimeMillis() - tCalc);
map.put("searchCondition", serviceSubtaskEntity);
redisCache.setCacheObject(userId + "patItemCount", map, 120, TimeUnit.MINUTES);
}
} else {
+ long tCalc = System.currentTimeMillis();
map = serviceSubtaskService.patItemCount(serviceSubtaskEntity);
+ log.info("[patItem鑰楁椂] 4.3 count鑱氬悎(鏃犵櫥褰曚汉锛岃蛋搴�)={}ms", System.currentTimeMillis() - tCalc);
}
return map;
}
--
Gitblit v1.9.3