ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskController.java
@@ -96,12 +96,6 @@ @ApiOperation("查询患者随访信息") @PostMapping("/patItem") public Map<String, Object> patItem(@RequestBody ServiceSubtaskVO serviceSubtaskVO) { // if (serviceSubtaskVO.getLeavehospitaldistrictcodes() != null && serviceSubtaskVO.getLeavehospitaldistrictcodes().size() > 10) { // throw new BaseException("病区查询数量不能超过10个"); // } // if (serviceSubtaskVO.getLeaveldeptcodes() != null && serviceSubtaskVO.getLeaveldeptcodes().size() > 10) { // throw new BaseException("科室查询数量不能超过10个"); // } serviceSubtaskVO.setPageNum(PageUtils.getOffset(serviceSubtaskVO.getPageNum(), serviceSubtaskVO.getPageSize())); List<ServiceSubtaskRes> serviceSubtaskList = null; @@ -114,29 +108,45 @@ serviceSubtaskEntity.setContinueContent(ObjectUtils.isNotEmpty(serviceSubtaskVO.getContinueContent()) ? serviceSubtaskVO.getContinueContent().toString() : null); serviceSubtaskList = serviceSubtaskService.patItem(serviceSubtaskEntity); } for (ServiceSubtaskRes serviceSubtask : serviceSubtaskList) { ServiceSubtaskRecord serviceSubtaskRecord = new ServiceSubtaskRecord(); serviceSubtaskRecord.setSubtaskId(serviceSubtask.getId()); serviceSubtaskRecord.setOrgid(serviceSubtask.getOrgid()); if (ObjectUtils.isNotEmpty((serviceSubtask.getTaskid()))) serviceSubtaskRecord.setTaskid(serviceSubtask.getTaskid().toString()); serviceSubtask.setServiceSubtaskRecordList(serviceSubtaskRecordService.selectServiceSubtaskRecordList(serviceSubtaskRecord)); ServiceTask serviceTask = serviceTaskService.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); if (ObjectUtils.isNotEmpty(serviceTask)) serviceSubtask.setPreachform(serviceTask.getPreachform()); // 批量查 subtask_record,1次SQL替代循环中N次单独查 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<>())); } // patItemCount 调用redisCache记录统计数据 Map<String, Object> map = serviceSubtaskService.patItemCount(serviceSubtaskEntity); // patItemCount 走Redis缓存版,避免每次全表聚合扫描 Map<String, Object> map = getPatItemCountWithCache(serviceSubtaskEntity); map.put("serviceSubtaskList", serviceSubtaskList); List<Map<String, Object>> list = new ArrayList<>(); list.add(map); serviceSubtaskEntity.setPageNum(null); serviceSubtaskEntity.setPageSize(null); List<ServiceSubtaskRes> serviceSubtasks = serviceSubtaskService.patItem(serviceSubtaskEntity); // 直接从已有聚合结果推算total,避免去掉分页后再全量查一遍大表 long total = 0L; try { // * wzx: 未执行数量 // * ysf: 已随访数量 // * fssb: 发送失败数量 // * yfs: 已发送数量 // * dsf: 待随访数量 return getDataTable3(CollectionUtils.isNotEmpty(serviceSubtasks) ? serviceSubtasks.size() : 0L, list); // long wzx = map.get("wzx") != null ? ((Number) map.get("wzx")).longValue() : 0L; // long ysf = map.get("ysf") != null ? ((Number) map.get("ysf")).longValue() : 0L; // long dsf = map.get("dsf") != null ? ((Number) map.get("dsf")).longValue() : 0L; // long fssb = map.get("fssb") != null ? ((Number) map.get("fssb")).longValue() : 0L; total = map.get("total") != null ? ((Number) map.get("total")).longValue() : 0L; } catch (Exception e) { // 兜底:全量count serviceSubtaskEntity.setPageNum(null); serviceSubtaskEntity.setPageSize(null); List<ServiceSubtask> serviceSubtasks = serviceSubtaskService.selectServiceSubtaskList(serviceSubtaskEntity); total = CollectionUtils.isNotEmpty(serviceSubtasks) ? serviceSubtasks.size() : 0L; } return getDataTable3(total, list); } /** @@ -151,42 +161,48 @@ ServiceSubtaskEntity serviceSubtaskEntity = DtoConversionUtils.sourceToTarget(serviceSubtaskVO, ServiceSubtaskEntity.class); serviceSubtaskEntity.setContinueContent(ObjectUtils.isNotEmpty(serviceSubtaskVO.getContinueContent()) ? serviceSubtaskVO.getContinueContent().toString() : null); // 通过redis记录结果 Map<String, Object> redisMap = new HashMap<>(); LoginUser loginUser = getLoginUser(); SysUser user = null; Long userId = null; if (ObjectUtils.isNotEmpty(loginUser)) { user = loginUser.getUser(); if (ObjectUtils.isNotEmpty(user)) { userId = user.getUserId(); } if (ObjectUtils.isNotEmpty(loginUser) && ObjectUtils.isNotEmpty(loginUser.getUser())) { userId = loginUser.getUser().getUserId(); } if (ObjectUtils.isNotEmpty(userId)) { redisMap = redisCache.getCacheObject(userId + "patItemCount"); //记录是否有可用缓存 map = getPatItemCountWithCache(serviceSubtaskEntity); } map.put("code", HttpStatus.SUCCESS); return map; } /** * 带Redis缓存的统计查询,供patItem和patItemCount共用,条件不变时直接命中缓存 */ private Map<String, Object> getPatItemCountWithCache(ServiceSubtaskEntity serviceSubtaskEntity) { Map<String, Object> map = new HashMap<>(); LoginUser loginUser = getLoginUser(); Long userId = null; if (ObjectUtils.isNotEmpty(loginUser) && ObjectUtils.isNotEmpty(loginUser.getUser())) { userId = loginUser.getUser().getUserId(); } if (ObjectUtils.isNotEmpty(userId)) { Map<String, Object> redisMap = redisCache.getCacheObject(userId + "patItemCount"); Boolean redisFlag = false; ServiceSubtaskEntity oldCondition = null; if (MapUtils.isNotEmpty(redisMap)) { oldCondition = (ServiceSubtaskEntity) redisMap.get("searchCondition"); // 比较查询条件是否一致 ServiceSubtaskEntity oldCondition = (ServiceSubtaskEntity) redisMap.get("searchCondition"); if (ObjectUtils.isNotEmpty(oldCondition) && isSameCondition(oldCondition, serviceSubtaskEntity)) { // 条件一致,使用缓存 redisFlag = true; map = redisMap; redisCache.setCacheObject(userId + "patItemCount", map, 120, TimeUnit.MINUTES); } } // 如果没有缓存或者条件不一致,重新查询 if (!redisFlag) { map = serviceSubtaskService.patItemCount(serviceSubtaskEntity); map.put("searchCondition", serviceSubtaskEntity); redisCache.setCacheObject(userId + "patItemCount", map, 120, TimeUnit.MINUTES); } } else { map = serviceSubtaskService.patItemCount(serviceSubtaskEntity); } map.put("code", HttpStatus.SUCCESS); return map; } @@ -659,11 +675,12 @@ /** * 统计任务各种状态的数量(优化版) * * @return Map<String, Object> 包含各状态统计数据 * pendingVisitCount: 当前登录人截止今日待随访总量 * failedVisitCount: 当前登录人随访任务失败总量 * abnormalVisitVount: 当前登录人随访任务异常总量 * allVisitCount: 当前登录人随访任务总量 * pendingVisitCount: 当前登录人截止今日待随访总量 * failedVisitCount: 当前登录人随访任务失败总量 * abnormalVisitVount: 当前登录人随访任务异常总量 * allVisitCount: 当前登录人随访任务总量 */ @ApiOperation("获取当前用户随访数量统计") @PostMapping("/getCurrentUserServiceSubtaskCount") @@ -687,12 +704,12 @@ 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)){ if (ObjectUtils.isNotEmpty(sysUser)) { if (!("admin").equals(sysUser.getUserName())) { if (ObjectUtils.isNotEmpty(sysUserWards) && ObjectUtils.isNotEmpty(sysUserDepts)) { map = serviceSubtaskService.getCurrentUserServiceSubtaskCount(entity); } }else { } else { map = serviceSubtaskService.getCurrentUserServiceSubtaskCount(entity); } } ruoyi-admin/src/main/resources/application-druid.yml
@@ -118,7 +118,7 @@ database: 0 password: Smartor # 连接超时时间 timeout: 10s timeout: 30s lettuce: pool: # 连接池中的最小空闲连接 ruoyi-admin/src/main/resources/application-ls.yml
@@ -92,7 +92,7 @@ # 密码 password: Smartor # 连接超时时间 timeout: 10s timeout: 30s lettuce: pool: # 连接池中的最小空闲连接 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -1018,6 +1018,7 @@ //说明全发送失败了 serviceSubtask.setSendstate(5L); log.error("getSendPreachform方法 检查是否所有sendstate不等于9, 全失败了"); serviceSubtask.setRemark("所有发送方式均未获取结果,任务失败"); //人工发送超时 if(ObjectUtils.isNotEmpty(serviceSubtask.getCurrentPreachform()) && serviceSubtask.getCurrentPreachform().equals("1")){ serviceSubtask.setSendstate(7L); smartor/src/main/java/com/smartor/mapper/ServiceSubtaskRecordMapper.java
@@ -30,6 +30,11 @@ public List<ServiceSubtaskRecord> selectServiceSubtaskRecordList(ServiceSubtaskRecord serviceSubtaskRecord); /** * 按 subtask_id 列表批量查询随访记录,消除N+1 */ public List<ServiceSubtaskRecord> selectServiceSubtaskRecordBySubtaskIds(List<Long> subtaskIds); /** * 新增【请填写功能名称】 * * @param serviceSubtaskRecord 【请填写功能名称】 smartor/src/main/java/com/smartor/service/IServiceSubtaskRecordService.java
@@ -29,6 +29,11 @@ public List<ServiceSubtaskRecord> selectServiceSubtaskRecordList(ServiceSubtaskRecord serviceSubtaskRecord); /** * 按 subtask_id 列表批量查询,结果用 Map<subtaskId, records> 结构返回 */ public java.util.Map<Long, List<ServiceSubtaskRecord>> selectRecordMapBySubtaskIds(List<Long> subtaskIds); /** * 新增【请填写功能名称】 * * @param serviceSubtaskRecord 【请填写功能名称】 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskAnswerServiceImpl.java
@@ -202,7 +202,7 @@ //说明是第一题 List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = cacheList.get(0).getSvyTaskTemplateTargetoptions(); svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions); Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid); Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid, null); if (map == null) continue aa; if (!Objects.isNull(map.get("nextScriptNo"))) nextScriptno = Long.valueOf(map.get("nextScriptNo")); @@ -224,7 +224,7 @@ if (svyTaskTemplateScriptVO.getSort() != null && svyTaskTemplateScriptVO.getSort().equals(nextScriptno)) { // log.error("svyTaskTemplateScriptVO的值为:{}", svyTaskTemplateScriptVO); Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0])); Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]), null); log.error("nextScriptNo的信息为:{}", map.get("nextScriptNo")); if (!Objects.isNull(map.get("nextScriptNo"))) nextScriptno = Long.valueOf(map.get("nextScriptNo")); @@ -250,7 +250,7 @@ List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = cacheList.get(0).getIvrTaskScriptTargetoptionList(); // List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = DtoConversionUtils.sourceToTarget(ivrLibaTemplateTargetoptions, IvrTaskTemplateTargetoption.class); ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions); Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid); Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid, null); if (!Objects.isNull(map.get("nextScriptNo"))) nextScriptno = Long.valueOf(map.get("nextScriptNo")); if (score == null) { @@ -267,7 +267,7 @@ ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions); if (ivrTaskTemplateScriptVO.getSort() != null && Long.valueOf(ivrTaskTemplateScriptVO.getSort()).equals(nextScriptno)) { Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0])); Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, Long.valueOf(split[1]), Long.valueOf(split[0]), null); log.error("----nextScriptNo2的信息为:{}", map.get("nextScriptNo")); if (!Objects.isNull(map.get("nextScriptNo"))) nextScriptno = Long.valueOf(map.get("nextScriptNo")); @@ -325,6 +325,7 @@ public Integer saveQuestionDetail(ServiceSubTaskCacheReq serviceSubTaskCacheReq, Long flag) { Long tid = Long.valueOf(serviceSubTaskCacheReq.getParam1()); Long pid = Long.valueOf(serviceSubTaskCacheReq.getParam2()); Long subid = Long.valueOf(serviceSubTaskCacheReq.getParam6()); Double score = null; if (ObjectUtils.isNotEmpty(serviceSubTaskCacheReq)) { Long nextScriptno = null; @@ -341,7 +342,7 @@ //说明是第一题 List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = cacheList.get(0).getSvyTaskTemplateTargetoptions(); svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions); Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid); Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid, subid); if (map == null) continue; if (!Objects.isNull(map.get("nextScriptNo"))) nextScriptno = Long.valueOf(map.get("nextScriptNo")); @@ -361,7 +362,7 @@ svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions); if (svyTaskTemplateScriptVO.getSort() != null && svyTaskTemplateScriptVO.getSort().equals(nextScriptno)) { Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid); Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, tid, pid, subid); log.error("nextScriptNo的信息为:{}", map.get("nextScriptNo")); if (!Objects.isNull(map.get("nextScriptNo"))) nextScriptno = Long.valueOf(map.get("nextScriptNo")); @@ -376,19 +377,21 @@ } } else if (serviceSubTaskCacheReq.getType() == 1) { List<IvrTaskTemplateScriptVO> cacheList = serviceSubTaskCacheReq.getIvrTaskTemplateScriptVOList(); cacheList.sort(Comparator.comparingLong(IvrTaskTemplateScriptVO::getSort)); cacheList.sort(Comparator.comparingLong( vo -> Optional.ofNullable(vo.getSort()).orElse(0) )); log.error("电话随访问卷回答结果:{}", cacheList.size()); for (int i = 0; i < cacheList.size(); i++) { if (i == 0) { //这个时间要找到第一题 for (IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO : cacheList) { if (ivrTaskTemplateScriptVO.getSort() == 1L) { if (ivrTaskTemplateScriptVO.getSort() != null && ivrTaskTemplateScriptVO.getSort() == 1L) { //说明是第一题 List<IvrTaskTemplateTargetoption> ivrTaskTemplateTargetoptions = cacheList.get(0).getIvrTaskScriptTargetoptionList(); ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions); //它俩都是ivr_task_templatescript_id,所以这里需要设置一下 ivrTaskTemplateScriptVO.setId(ivrTaskTemplateScriptVO.getScriptID()); Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid); Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid, subid); if (!Objects.isNull(map.get("nextScriptNo"))) nextScriptno = Long.valueOf(map.get("nextScriptNo")); if (score == null) { @@ -406,7 +409,7 @@ ivrTaskTemplateScriptVO.setIvrTaskScriptTargetoptionList(ivrTaskTemplateTargetoptions); if (ivrTaskTemplateScriptVO.getSort() != null && Long.valueOf(ivrTaskTemplateScriptVO.getSort()).equals(nextScriptno)) { Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid); Map<String, String> map = setSFInfo(ivrTaskTemplateScriptVO, tid, pid, subid); log.error("----nextScriptNo2的信息为:{}", map.get("nextScriptNo")); if (!Objects.isNull(map.get("nextScriptNo"))) nextScriptno = Long.valueOf(map.get("nextScriptNo")); @@ -503,7 +506,7 @@ List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = svyTaskTemplateScriptVOS.get(0).getSvyTaskTemplateTargetoptions(); // List<SvyTaskTemplateTargetoption> svyTaskTemplateTargetoptions = DtoConversionUtils.sourceToTarget(svyTaskTemplateTargetoptions, SvyTaskTemplateTargetoption.class); svyTaskTemplateScriptVO.setSvyTaskTemplateTargetoptions(svyTaskTemplateTargetoptions); Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()), patid); Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()), patid, null); if (map == null) continue; if (!Objects.isNull(map.get("nextScriptNo"))) nextScriptno = Long.valueOf(map.get("nextScriptNo")); @@ -527,7 +530,7 @@ if (svyTaskTemplateScriptVO.getSort() != null && svyTaskTemplateScriptVO.getSort().equals(nextScriptno)) { log.error("svyTaskTemplateScriptVO的值为:{}", svyTaskTemplateScriptVO); Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()), patid); Map<String, String> map = setWJInfo(svyTaskTemplateScriptVO, Long.valueOf(serviceSubTaskMYDAnswerReq.getTaskId()), patid, null); log.error("map的信息为:{}", map); if (!Objects.isNull(map.get("nextScriptNo"))) nextScriptno = Long.valueOf(map.get("nextScriptNo")); @@ -792,7 +795,7 @@ return null; } private Map<String, String> setWJInfo(SvyTaskTemplateScriptVO svyTaskTemplateScriptVO, Long taskid, Long patid) { private Map<String, String> setWJInfo(SvyTaskTemplateScriptVO svyTaskTemplateScriptVO, Long taskid, Long patid, Long subid) { log.error("-----svyTaskTemplateScriptVO的值为:{}", svyTaskTemplateScriptVO); ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity(); serviceSubtaskVO.setTaskid(taskid); @@ -849,7 +852,7 @@ serviceSubtaskDetailVO.setGuid(serviceTask.getGuid()); serviceSubtaskDetailVO.setOrgid(serviceTask.getOrgid()); } serviceSubtaskDetailVO.setSubId(CollectionUtils.isNotEmpty(selectServiceSubtaskList) ? selectServiceSubtaskList.get(0).getId() : null); serviceSubtaskDetailVO.setSubId(subid == null ? CollectionUtils.isNotEmpty(selectServiceSubtaskList) ? selectServiceSubtaskList.get(0).getId() : null : subid); serviceSubtaskDetailVO.setTemplatequestionnum(svyTaskTemplateScriptVO.getId()); ServiceSubtaskDetail serviceSubtaskDetail = DtoConversionUtils.sourceToTarget(serviceSubtaskDetailVO, ServiceSubtaskDetail.class); @@ -922,8 +925,7 @@ if (CollectionUtils.isNotEmpty(serviceSubtaskDetailTraces)) { subtaskDetailTrace.setId(serviceSubtaskDetailTraces.get(0).getId()); traceService.updateServiceSubtaskDetailTtrace(subtaskDetailTrace); } else traceService.insertServiceSubtaskDetailTtrace(subtaskDetailTrace); } else traceService.insertServiceSubtaskDetailTtrace(subtaskDetailTrace); } else if (ObjectUtils.isNotEmpty(stt) && stt.getIsabnormal() != 1L) { //这里主要是怕医护人员把异常选项改成了非异常的,这里就需要查一下这条数据是不是在满意度异常表,如果在,则要删除 ServiceSubtaskDetailTraceVO subtaskDetailTraceVO = new ServiceSubtaskDetailTraceVO(); @@ -1033,7 +1035,7 @@ return commonTaskcallMQJson; } private Map<String, String> setSFInfo(IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO, Long taskid, Long patid) { private Map<String, String> setSFInfo(IvrTaskTemplateScriptVO ivrTaskTemplateScriptVO, Long taskid, Long patid, Long subid) { ServiceSubtaskEntity serviceSubtaskVO = new ServiceSubtaskEntity(); serviceSubtaskVO.setTaskid(taskid); serviceSubtaskVO.setPatid(patid); @@ -1044,7 +1046,7 @@ String nextScriptNo = null; ServiceSubtaskDetailVO serviceSubtaskDetailVO = new ServiceSubtaskDetailVO(); String isabnormalFlag = "0"; if (ivrTaskTemplateScriptVO.getScriptType().equals("1") || ivrTaskTemplateScriptVO.getScriptType().equals("2")) { if (ivrTaskTemplateScriptVO.getScriptType() != null && (ivrTaskTemplateScriptVO.getScriptType().equals("1") || ivrTaskTemplateScriptVO.getScriptType().equals("2"))) { //1、2为单选或多选 for (IvrTaskTemplateTargetoption ivrTaskTemplateTargetoption : ivrTaskTemplateScriptVO.getIvrTaskScriptTargetoptionList()) { //将问题选项记录下来 @@ -1069,9 +1071,9 @@ } } else { //非单多选 if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getQuestionResult())) { serviceSubtaskDetailVO.setAsrtext(ivrTaskTemplateScriptVO.getQuestionResult().replaceAll("^\"|\"$", "")); serviceSubtaskDetailVO.setMatchedtext(ivrTaskTemplateScriptVO.getQuestionResult().replaceAll("^\"|\"$", "")); if (StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getQuestionResult()) || StringUtils.isNotEmpty(ivrTaskTemplateScriptVO.getIvrtext())) { serviceSubtaskDetailVO.setAsrtext(ivrTaskTemplateScriptVO.getQuestionResult() != null ? ivrTaskTemplateScriptVO.getQuestionResult().replaceAll("^\"|\"$", "") : ivrTaskTemplateScriptVO.getIvrtext()); serviceSubtaskDetailVO.setMatchedtext(ivrTaskTemplateScriptVO.getQuestionResult() != null ? ivrTaskTemplateScriptVO.getQuestionResult().replaceAll("^\"|\"$", "") : ivrTaskTemplateScriptVO.getIvrtext()); serviceSubtaskDetailVO.setScore(ivrTaskTemplateScriptVO.getScore() != null ? ivrTaskTemplateScriptVO.getScore().toString() : "0"); nextScriptNo = ivrTaskTemplateScriptVO.getNextScriptno() == null ? null : ivrTaskTemplateScriptVO.getNextScriptno().toString(); if (ivrTaskTemplateScriptVO.getScore() != null) { @@ -1091,7 +1093,7 @@ serviceSubtaskDetailVO.setGuid(ivrTaskTemplateScriptVO.getGuid()); serviceSubtaskDetailVO.setOrgid(ivrTaskTemplateScriptVO.getOrgid()); serviceSubtaskDetailVO.setUpdateTime(new Date()); serviceSubtaskDetailVO.setSubId(selectServiceSubtaskList.get(0).getId()); serviceSubtaskDetailVO.setSubId(subid == null ? selectServiceSubtaskList.get(0).getId() : subid); serviceSubtaskDetailVO.setTemplatequestionnum(ivrTaskTemplateScriptVO.getId()); serviceSubtaskDetailVO.setTemplateType(1); serviceSubtaskDetailVO.setTemplateid(ivrTaskTemplateScriptVO.getTemplateID() == null ? null : ivrTaskTemplateScriptVO.getTemplateID().toString()); @@ -1168,9 +1170,8 @@ if (CollectionUtils.isNotEmpty(serviceSubtaskDetailTraces)) { subtaskDetailTrace.setId(serviceSubtaskDetailTraces.get(0).getId()); traceService.updateServiceSubtaskDetailTtrace(subtaskDetailTrace); } else traceService.insertServiceSubtaskDetailTtrace(subtaskDetailTrace); } else if (stt.getIsabnormal() != null && stt.getIsabnormal() != 1L) { } else traceService.insertServiceSubtaskDetailTtrace(subtaskDetailTrace); } else if (stt != null && stt.getIsabnormal() != null && stt.getIsabnormal() != 1L) { //这里主要是怕医护人员把异常选项改成了非异常的,这里就需要查一下这条数据是不是在满意度异常表,如果在,则要删除 ServiceSubtaskDetailTraceVO subtaskDetailTraceVO = new ServiceSubtaskDetailTraceVO(); subtaskDetailTraceVO.setSubId(serviceSubtaskDetailVO.getSubId()); smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskRecordServiceImpl.java
@@ -4,10 +4,14 @@ import com.smartor.domain.ServiceSubtaskRecord; import com.smartor.mapper.ServiceSubtaskRecordMapper; import com.smartor.service.IServiceSubtaskRecordService; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 【请填写功能名称】Service业务层处理 @@ -42,6 +46,14 @@ return serviceSubtaskRecordMapper.selectServiceSubtaskRecordList(serviceSubtaskRecord); } @Override public Map<Long, List<ServiceSubtaskRecord>> selectRecordMapBySubtaskIds(List<Long> subtaskIds) { if (CollectionUtils.isEmpty(subtaskIds)) return new java.util.HashMap<>(); List<ServiceSubtaskRecord> all = serviceSubtaskRecordMapper.selectServiceSubtaskRecordBySubtaskIds(subtaskIds); if (CollectionUtils.isEmpty(all)) return new java.util.HashMap<>(); return all.stream().collect(Collectors.groupingBy(ServiceSubtaskRecord::getSubtaskId)); } /** * 新增【请填写功能名称】 * smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -411,18 +411,18 @@ // 处理空异常 if (MapUtils.isEmpty(result)) { result = new HashMap<>(); // 确保所有 key 都有值,避免空指针异常 // MyBatis 的 SUM 在没有匹配行时会返回 null result.putIfAbsent("wzx", 0); result.putIfAbsent("ysf", 0); result.putIfAbsent("yc", 0); result.putIfAbsent("jg", 0); result.putIfAbsent("fssb", 0); result.putIfAbsent("yfs", 0); result.putIfAbsent("blq", 0); result.putIfAbsent("dsf", 0); result.putIfAbsent("total", 0); } // 确保所有 key 都有值,避免空指针异常 // MyBatis 的 SUM 在没有匹配行时会返回 null result.putIfAbsent("wzx", 0); result.putIfAbsent("ysf", 0); result.putIfAbsent("yc", 0); result.putIfAbsent("jg", 0); result.putIfAbsent("fssb", 0); result.putIfAbsent("yfs", 0); result.putIfAbsent("blq", 0); result.putIfAbsent("dsf", 0); return result; } smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -263,8 +263,7 @@ <select id="selectServiceSubtaskList" parameterType="com.smartor.domain.entity.ServiceSubtaskEntity" resultMap="ServiceSubtaskResult"> <include refid="selectServiceSubtaskVo"/> where 1=1 and del_flag = 0 where del_flag = 0 <if test="continueFlag != null ">and continue_flag = #{continueFlag}</if> <if test="continueTimeNow != null ">and continue_time_now = #{continueTimeNow,jdbcType=TIMESTAMP}</if> <if test="continueCount != null ">and continue_count = #{continueCount}</if> @@ -2128,7 +2127,8 @@ SUM(CASE WHEN sendstate = 2 THEN 1 ELSE 0 END) AS dsf, SUM(CASE WHEN sendstate = 1 THEN 1 ELSE 0 END) AS blq, SUM(CASE WHEN excep IS NOT NULL AND excep = '1' THEN 1 ELSE 0 END) AS yc, SUM(CASE WHEN excep IS NOT NULL AND excep = '2' THEN 1 ELSE 0 END) AS jg SUM(CASE WHEN excep IS NOT NULL AND excep = '2' THEN 1 ELSE 0 END) AS jg, COUNT(1) as total FROM service_subtask where 1=1 and del_flag = 0 smartor/src/main/resources/mapper/smartor/ServiceSubtaskRecordMapper.xml
@@ -74,6 +74,14 @@ <if test="remark != null and remark != ''">and remark = #{remark}</if> </select> <select id="selectServiceSubtaskRecordBySubtaskIds" resultMap="ServiceSubtaskRecordResult"> <include refid="selectServiceSubtaskRecordVo"/> where subtask_id IN <foreach collection="list" item="subtaskId" open="(" separator="," close=")"> #{subtaskId} </foreach> </select> <select id="selectServiceSubtaskRecordById" parameterType="Long" resultMap="ServiceSubtaskRecordResult"> <include refid="selectServiceSubtaskRecordVo"/> where id = #{id}