| | |
| | | @ApiOperation("查询患者随访信息") |
| | | @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(); |
| | |
| | | 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次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<>())); |
| | | } |
| | | // 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,入参id数={}", 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 走Redis缓存版,避免每次全表聚合扫描 |
| | | 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); |
| | |
| | | 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); |
| | | } |
| | | |
| | |
| | | @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("科室或病区不能为空"); |
| | | } |
| | | //复诊统计 |
| | |
| | | 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取count缓存={}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; |
| | | } |