ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -21,16 +21,15 @@ public static void main(String[] args) { // System.setProperty("spring.devtools.restart.enabled", "false"); SpringApplication.run(RuoYiApplication.class, args); System.out.println("(♥◠‿◠)ノ゙ 智慧服务启动成功 ლ(´ڡ`ლ)゙ \n" + " .-------. ____ __ \n" + " | _ _ \\ \\ \\ / / \n" + " | ( ' ) | \\ _. / ' \n" + " |(_ o _) / _( )_ .' \n" + " | (_,_).' __ ___(_ o _)' \n" + " | |\\ \\ | || |(_,_)' \n" + " | | \\ `' /| `-' / \n" + " | | \\ / \\ / \n" + " ''-' `'-' `-..-' "); System.out.println(" 智慧服务启动成功 \n" + " ██╗ ██╗ ██████╗ ██████╗\n" + " ██║ ██║ ██╔══██╗ ██╔════╝\n" + " ███████║ ██████╔╝ █████╗\n" + " ██╔══██║ ██╔══██╗ ╚════██╗\n" + " ██║ ██║ ██║ ██║ ██████╔╝\n" + " ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝\n" + " 亥 尔 时\n"); // //开启SOCKET // new SocketCommunication().socketCommunication(); } ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/ServiceSubtaskDetailTraceController.java
@@ -65,13 +65,20 @@ public Map<String, Object> tracedeallist(@RequestBody DetailTraceDealVO detailTraceDealVO) { Integer offset = PageUtils.getOffset(detailTraceDealVO.getPageNum(), detailTraceDealVO.getPageSize()); detailTraceDealVO.setPageNum(offset); List<DetailTraceDealDTO> list = serviceSubtaskDetailTraceService.tracedeallist(detailTraceDealVO); Map<String, Object> result = serviceSubtaskDetailTraceService.tracedeallist(detailTraceDealVO); // 查询总数(不分页) detailTraceDealVO.setPageNum(null); detailTraceDealVO.setPageSize(null); List<DetailTraceDealDTO> total = serviceSubtaskDetailTraceService.tracedeallist(detailTraceDealVO); Map<String, Object> totalResult = serviceSubtaskDetailTraceService.tracedeallist(detailTraceDealVO); List<?> totalRows = (List<?>) totalResult.get("rows"); return getDataTable3(CollectionUtils.isNotEmpty(total) ? total.size() : 0, list); //将总数信息添加到结果中 result.put("totalException", totalResult.get("totalException")); result.put("noDealException", totalResult.get("noDealException")); result.put("yesDealException", totalResult.get("yesDealException")); return getDataTable3(CollectionUtils.isNotEmpty(totalRows) ? totalRows.size() : 0, result); } /** smartor/src/main/java/com/smartor/domain/DTO/DetailTraceDealDTO.java
@@ -29,6 +29,22 @@ @Excel(name = "问题内容") private String questiontext; /** * 问题ID */ @ApiModelProperty("问题ID") @Excel(name = "问题ID") private Long scriptid; /** * 模板类型:1.语音 2.问卷 */ @ApiModelProperty("模板类型:1.语音 2.问卷") @Excel(name = "模板类型:1.语音 2.问卷") private Integer templateType; /** * [{ * "deptName": "科室名称", smartor/src/main/java/com/smartor/domain/PatArchive.java
@@ -81,7 +81,7 @@ */ @ApiModelProperty("来源(1:HIS;2:数据平台;3:文件导入)") @Excel(name = " 来源(1:HIS;2:数据平台;3:文件导入) ") private Integer sourcefrom; private Long sourcefrom; /** * his系统的患者id smartor/src/main/java/com/smartor/domain/PatArchiveVO.java
@@ -21,7 +21,7 @@ */ @ApiModel(value = "PatArchiveVO", description = "患者档案对象") @Data public class PatArchiveVO extends BaseEntity { public class PatArchiveVO extends PatArchive { /** * 自增ID smartor/src/main/java/com/smartor/domain/PatMedInhosp.java
@@ -296,11 +296,6 @@ */ @ApiModelProperty(value = "疾病长期任务,是否处理:0未处理 1处理成功 2处理失败 ") private String diagcheckFlag; /** * 手术长期任务,是否处理:0未处理 1处理 */ @ApiModelProperty(value = "手术长期任务,是否处理:0未处理 1处理成功 2处理失败 ") private String opercheckFlag; /** * 年龄 smartor/src/main/java/com/smartor/domain/PatMedOperationItem.java
@@ -146,5 +146,14 @@ @Excel(name = "父ID") private Long pid; /** * 手术长期任务,是否处理:0未处理 1处理 */ @ApiModelProperty(value = "手术长期任务,是否处理:0未处理 1处理成功 2处理失败 ") private String opercheckFlag; @ApiModelProperty("长期任务 ,失败原因") @Excel(name = "长期任务 ,失败原因") private String longTaskReason; } smartor/src/main/java/com/smartor/domain/ServiceSLTDInhospReqVO.java
@@ -16,6 +16,12 @@ @ApiModelProperty(value = "院区ID") private Long campusId; @ApiModelProperty(value = "当前页") private Long current; @ApiModelProperty(value = "每页数量") private Long size; @ApiModelProperty(value = "患者姓名 必填一个") private String patientName; smartor/src/main/java/com/smartor/domain/ServiceSubtask.java
@@ -669,4 +669,7 @@ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "继续时间下次") private Date continueTimeNext; @ApiModelProperty(value = "手术记录id 对应pat_med_operation_item.id") private Long operationItemId; } smartor/src/main/java/com/smartor/service/IServiceSubtaskDetailTraceService.java
@@ -36,9 +36,9 @@ /** * 异常问题处理情况查询 * @param detailTraceDealVO * @return * @return 包含分页列表及汇总统计(totalException/noDealException/yesDealException)的Map */ public List<DetailTraceDealDTO> tracedeallist(DetailTraceDealVO detailTraceDealVO); public Map<String, Object> tracedeallist(DetailTraceDealVO detailTraceDealVO); /** * 新增随访任务异常记录跟踪 smartor/src/main/java/com/smartor/service/impl/PatMedInhospServiceImpl.java
@@ -52,6 +52,11 @@ private ServiceSubtaskMapper serviceSubtaskMapper; @Autowired private ServiceSubtaskPreachformMapper serviceSubtaskPreachformMapper; @Autowired private PatMedOperationMapper patMedOperationMapper; @Autowired private PatMedOperationItemMapper patMedOperationItemMapper; @Value("${spring.profiles.active}") private String active; @@ -379,59 +384,47 @@ } } // 手术随访 // PatMedInhosp pmss = new PatMedInhosp(); // //获取需要出院疾病随访,未处理的数据 // pmss.setOpercheckFlag("0"); // pmss.setInhospstate("1"); // pmss.setFuflag("1"); // List<PatMedInhosp> patMedInhospSSs = patMedInhospMapper.selectPatMedInhospList(pmss); // log.info("dealOutHospInfo需要处理的出院疾病患者信息:{}", CollectionUtils.isNotEmpty(patMedInhospSSs) ? patMedInhospSSs.size() : null); // for (PatMedInhosp patMedInhosp1 : patMedInhospSSs) { // String tagname = patMedInhospMapper.getTagnameBypatid(patMedInhosp1.getPatid()); // patMedInhosp1.setTagname(tagname); // } // // for (PatMedInhosp pmiSS : patMedInhospSSs) { // //获取患者信息 // PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(pmiSS.getPatid()); // if (Objects.isNull(patArchive)) { // pmiSS.setDiagcheckFlag("2"); // pmiSS.setLongTaskReason("患者基本信息为空"); // patMedInhospMapper.updatePatMedInhosp(pmiSS); // continue; // } // try { //// if (StringUtils.isEmpty(pmiSS.getLeaveicd10code())) { //// continue; //// } // // 根据患者的疾病,获取该疾病的长期任务 // ServiceTaskoper serviceTaskoper = new ServiceTaskoper(); // serviceTaskoper.setLongtask(1L); // serviceTaskoper.setOrgid(pmiSS.getOrgid()); // //todo // serviceTaskoper.setOplevelcode(""); // // List<ServiceTaskoper> serviceTaskopers = serviceTaskoperMapper.selectServiceTaskoperList(serviceTaskoper); // //如果部门模板为空(将deptIsNull设置为true) // if (CollectionUtils.isEmpty(serviceTaskopers) || serviceTaskopers.size() == 0) { // PatMedInhosp patMedInhosp = patMedInhospMapper.selectPatMedInhospByInhospid(pmiSS.getInhospid()); // pmiSS.setOpercheckFlag("2"); // pmiSS.setLongTaskReason(patMedInhosp.getLongTaskReason() + "所患的手术未配置长期任务;"); // patMedInhospMapper.updatePatMedInhosp(pmiSS); // } else { // for (ServiceTaskoper serviceTaskoper1 : serviceTaskopers) { // writeInSubTask(serviceTaskoper1.getTaskId(), true, pmiSS, patArchive, 3, config); // } // } // // } catch (Exception e) { // e.printStackTrace(); // log.error("人员手术处理出异常了:{}", e.getMessage()); // pmiSS.setOpercheckFlag("2"); // pmiSS.setLongTaskReason("人员手术处理异常:" + e.getMessage()); // patMedInhospMapper.updatePatMedInhosp(pmiSS); // } // } PatMedOperationItem pmoi = new PatMedOperationItem(); //获取需要出院疾病随访,未处理的数据 pmoi.setOpercheckFlag("0"); pmoi.setMainFlag("1"); List<PatMedOperationItem> patMedOperationItems = patMedOperationItemMapper.selectPatMedOperationItemList(pmoi); log.info("dealOutHospInfo需要处理的出院手术患者信息:{}", CollectionUtils.isNotEmpty(patMedOperationItems) ? patMedOperationItems.size() : null); for (PatMedOperationItem opItem : patMedOperationItems) { try { if (StringUtils.isEmpty(opItem.getOplevelcode())) { continue; } // 根据患者的疾病,获取该疾病的长期任务 ServiceTaskoper serviceTaskoper = new ServiceTaskoper(); serviceTaskoper.setLongtask(1L); serviceTaskoper.setOrgid(opItem.getOrgid()); serviceTaskoper.setOplevelcode(opItem.getOplevelcode()); List<ServiceTaskoper> serviceTaskopers = serviceTaskoperMapper.selectServiceTaskoperList(serviceTaskoper); //如果部门模板为空(将deptIsNull设置为true) if (CollectionUtils.isEmpty(serviceTaskopers) || serviceTaskopers.size() == 0) { PatMedOperationItem patMedOperationItem = patMedOperationItemMapper.selectPatMedOperationItemById(opItem.getId()); patMedOperationItem.setOpercheckFlag("2"); patMedOperationItem.setLongTaskReason(patMedOperationItem.getLongTaskReason() + "所患的手术未配置长期任务;"); patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem); } else { for (ServiceTaskoper serviceTaskoper1 : serviceTaskopers) { writeInSubTaskForOp(serviceTaskoper1.getTaskId(), true, opItem, config); } } } catch (Exception e) { e.printStackTrace(); log.error("人员手术处理出异常了:{}", e.getMessage()); opItem.setOpercheckFlag("2"); opItem.setLongTaskReason("人员手术处理异常:" + e.getMessage()); patMedOperationItemMapper.updatePatMedOperationItem(opItem); } } } //获取未处理在院的数据(如果刚刚出院的患者数据的出院时间,在下面查询出的入院时间之前,那之前的出院患者的数据,也得停掉,因为又入院了) @@ -958,6 +951,133 @@ } } /** * * @param taskid 任务id * @param check 是否需要校验 * @param patMedOperationItem 手术记录 * @param config 配置信息 visit.early.day */ //将患者放到subtask中 手术专用 private void writeInSubTaskForOp(Long taskid, Boolean check, PatMedOperationItem patMedOperationItem, String config) { String longTaskReason = patMedOperationItem.getLongTaskReason(); String orgId = patMedOperationItem.getOrgid(); if (StringUtils.isEmpty(longTaskReason)) longTaskReason = ""; ServiceTask st = new ServiceTask(); st.setTaskid(taskid); st.setSendState(2L); List<ServiceTask> serviceTasks = serviceTaskMapper.selectServiceTaskList(st); ServiceTask serviceTask = null; if (CollectionUtils.isEmpty(serviceTasks)) { log.info("该手术对应手术等级的长期任务不存在,任务ID为:{}", taskid); patMedOperationItem.setOpercheckFlag("2"); patMedOperationItem.setLongTaskReason(longTaskReason + " & 该手术对应手术等级的长期任务不存在,任务ID为:" + taskid); patMedOperationItemMapper.insertPatMedOperationItem(patMedOperationItem); return; } else { serviceTask = serviceTasks.get(0); } if (Objects.isNull(patMedOperationItem.getOpid())) { return; } if (Objects.isNull(patMedOperationItem.getOplevelcode())) { return; } PatMedOperation patMedOperation = patMedOperationMapper.selectPatMedOperationById(patMedOperationItem.getOpid()); if (Objects.isNull(patMedOperation)) { return; } PatArchive patArchive = patArchiveMapper.selectPatArchiveByPatid(patMedOperation.getPatid()); if (Objects.isNull(patArchive)) { return; } //封装serviceSubtask ServiceSubtask serviceSubtask = boxedServiceSubtaskForOp(serviceTask, patMedOperation, patMedOperationItem, patArchive, config); if (ObjectUtils.isEmpty(serviceSubtask)) { return; } serviceSubtask.setVisitDeptCode(patMedOperation.getReqdeptcode()); serviceSubtask.setVisitDeptName(patMedOperation.getReqdeptname()); //记录insertServiceSubtask语句返回状态 Integer i = 0; try { //先判断一下,是否需要校验 if (check && (Objects.isNull(serviceSubtask.getTaskSituation()) || serviceSubtask.getTaskSituation() != 6)) { //在新增之前,先通过患者ID,sendstate=2查询一下,在所有长期任务中,是不是还有该患者待执行的任务,有的话,比较之前的endtime是否小于当前的endtaime,如果之前的小于现在的,则直接将之前的停掉(原因再入院) ServiceSubtaskEntity subtask = new ServiceSubtaskEntity(); subtask.setPatid(patArchive.getId()); subtask.setSendstate(2L); subtask.setTaskid(taskid); List<ServiceSubtask> selectServiceSubtaskList = serviceSubtaskMapper.selectServiceSubtaskList(subtask); // log.info("该患者待执行的任务:{}", CollectionUtils.isNotEmpty(selectServiceSubtaskList) ? selectServiceSubtaskList.size() : null); if (CollectionUtils.isNotEmpty(selectServiceSubtaskList) && selectServiceSubtaskList.size() > 0) { for (ServiceSubtask serviceSubtask1 : selectServiceSubtaskList) { if (Objects.isNull(serviceSubtask1.getLongSendTime())) { //不是长期任务,不处理 continue; } } } else { if (StringUtils.isEmpty(serviceSubtask.getPhone())) { if (StringUtils.isNotEmpty(serviceSubtask.getRemark())) serviceSubtask.setRemark(serviceSubtask.getRemark() + ",手机号为空"); else serviceSubtask.setRemark("手机号为空"); serviceSubtask.setSendstate(4L); serviceSubtask.setResult("error"); } serviceSubtask.setCreateBy(serviceTask.getCreateBy()); serviceSubtask.setCreateTime(new Date()); i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); addServiceSubtaskPreachform(serviceSubtask, null); } } else if (serviceSubtask.getTaskSituation() == 6) { //说明该患者是被过滤的,不用再执行了 serviceSubtask.setCreateBy(serviceTask.getCreateBy()); serviceSubtask.setCreateTime(new Date()); i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); } else { if (StringUtils.isEmpty(serviceSubtask.getPhone())) { if (StringUtils.isNotEmpty(serviceSubtask.getRemark())) serviceSubtask.setRemark(serviceSubtask.getRemark() + ",手机号为空"); else serviceSubtask.setRemark("手机号为空"); serviceSubtask.setSendstate(4L); serviceSubtask.setResult("error"); } serviceSubtask.setCreateBy(serviceTask.getCreateBy()); serviceSubtask.setCreateTime(new Date()); i = serviceSubtaskMapper.insertServiceSubtask(serviceSubtask); addServiceSubtaskPreachform(serviceSubtask, null); } //将check_flag改成1(已处理) if (i == 1) { PatMedOperationItem patMedOperationItem2 = new PatMedOperationItem(); patMedOperationItem2.setId(patMedOperationItem.getId()); patMedOperationItem2.setOpercheckFlag("1"); patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem2); } else { //生成子任务失败, log.info("生成子任务失败serviceSubtask的taskid为:{},patid为:{}", serviceSubtask.getTaskid(), serviceSubtask.getPatid()); PatMedOperationItem patMedOperationItem2 = new PatMedOperationItem(); patMedOperationItem2.setId(patMedOperationItem.getId()); patMedOperationItem2.setOpercheckFlag("2"); patMedOperationItem2.setRemark("生成子任务失败 4"); patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem2); } } catch (Exception e) { //出错回滚事务 log.info("生成子任务报错回滚sserviceSubtask的taskid为:{},patid为:{}", serviceSubtask.getTaskid(), serviceSubtask.getPatid()); PatMedOperationItem patMedOperationItem2 = new PatMedOperationItem(); patMedOperationItem2.setId(patMedOperationItem.getId()); patMedOperationItem2.setOpercheckFlag("2"); patMedOperationItem2.setRemark("生成子任务报错回滚 4"); patMedOperationItemMapper.updatePatMedOperationItem(patMedOperationItem2); e.printStackTrace(); } } private Integer addServiceSubtaskPreachform(ServiceSubtask serviceSubtask, String sendstate) { //将preachformDesc的json对象,放到list集合中 ServiceTask serviceTask = serviceTaskMapper.selectServiceTaskByTaskid(serviceSubtask.getTaskid()); @@ -1083,6 +1203,71 @@ return serviceSubtask; } //封装serviceSubtask private ServiceSubtask boxedServiceSubtaskForOp(ServiceTask serviceTask, PatMedOperation patMedOperation, PatMedOperationItem patMedOperationItem, PatArchive patArchive, String config) { ServiceSubtask serviceSubtask = DtoConversionUtils.sourceToTarget(serviceTask, ServiceSubtask.class); serviceSubtask.setTaskid(serviceTask.getTaskid()); if (StringUtils.isNotEmpty(serviceTask.getLibtemplateid())) serviceSubtask.setLibtemplateid(Long.valueOf(serviceTask.getLibtemplateid())); serviceSubtask.setNurseId(patMedOperation.getNurseId()); serviceSubtask.setNurseName(patMedOperation.getNurseName()); // serviceSubtask.setInhospid(patMedInhosp.getInhospid()); serviceSubtask.setDrcode(patMedOperation.getDrcode()); serviceSubtask.setDrname(patMedOperation.getDrname()); serviceSubtask.setDeptcode(patMedOperation.getDeptcode()); serviceSubtask.setDeptname(patMedOperation.getDeptname()); serviceSubtask.setTemplateid(serviceTask.getTemplateid()); serviceSubtask.setTemplatename(serviceTask.getTemplatename()); serviceSubtask.setPatid(patArchive.getId()); serviceSubtask.setSendname(patArchive.getName()); serviceSubtask.setSfzh(patArchive.getIdcardno()); serviceSubtask.setPhone(patArchive.getTelcode()); if (StringUtils.isBlank(patArchive.getTelcode())) serviceSubtask.setPhone(patArchive.getRelativetelcode()); serviceSubtask.setSex(patArchive.getSex()); serviceSubtask.setAge(patArchive.getAge()); serviceSubtask.setSendstate(2L); serviceSubtask.setManagementDoctor(patMedOperation.getDrname()); serviceSubtask.setManagementDoctorCode(patMedOperation.getDrcode()); // serviceSubtask.setStarttime(patMedInhosp.getStarttime()); // serviceSubtask.setEndtime(patMedInhosp.getEndtime()); serviceSubtask.setServiceType(serviceTask.getServiceType()); serviceSubtask.setPreachform(serviceTask.getPreachform()); serviceSubtask.setHospType("2"); serviceSubtask.setCreateTime(new Date()); serviceSubtask.setUpdateTime(new Date()); serviceSubtask.setCreateBy(patMedOperation.getNurseName()); // serviceSubtask.setLeavehospitaldistrictcode(patArchive.getLeavehospitaldistrictcode()); // serviceSubtask.setLeavehospitaldistrictname(patArchive.getLeavehospitaldistrictname()); serviceSubtask.setOperationItemId(patMedOperationItem.getId()); serviceSubtask.setUpdateBy(serviceTask.getUpdateBy()); serviceSubtask.setUpdateTime(new Date()); //设置发送时间 if (serviceTask.getSendDay() == null) serviceTask.setSendDay(1L); Date newDate = null; //todo newDate = addDays(patMedOperation.getCreateTime(), serviceTask.getSendDay().intValue()); serviceSubtask.setLongSendTime(newDate); serviceSubtask.setVisitTime(newDate); //如果是通知的话,需要提前几天将通过短信发出去(具体几天,这个可以配置在sys_conf表中) if ("3".equals(serviceTask.getType())) { serviceSubtask.setVisitTime(minusDay(newDate, StringUtils.isNotEmpty(config) ? Integer.parseInt(config) : 0)); } //患者发送时间 if (StringUtils.isNotEmpty(patArchive.getNotrequiredFlag()) && patArchive.getNotrequiredFlag().equals("1")) { String remark = patArchive.getNotrequiredreason(); serviceSubtask.setRemark(remark); serviceSubtask.setResult("error"); serviceSubtask.setTaskSituation(6); //不执行 serviceSubtask.setSendstate(4L); } return serviceSubtask; } /** * 减去相应天数 * smartor/src/main/java/com/smartor/service/impl/ServiceExternalServiceImpl.java
@@ -1469,7 +1469,7 @@ patArchive.setPatientno(externalInHospPatientInfo.getJiuZhenKH()); patArchive.setBirthdate(parse); patArchive.setPatidHis(externalInHospPatientInfo.getBingRenID()); patArchive.setSourcefrom(1); patArchive.setSourcefrom(1L); patArchive.setPattype("2"); patArchive.setName(externalInHospPatientInfo.getXingMing()); if (StringUtils.isNotEmpty(externalInHospPatientInfo.getXingBieDM())) smartor/src/main/java/com/smartor/service/impl/ServiceSLTDHealthcareRecordServiceImpl.java
@@ -759,7 +759,7 @@ patArchive.setPatientno("" + dto.getPatientId()); patArchive.setIdcardno(StringUtils.isEmpty(dto.getIdCardNo()) ? "" + dto.getMedicalCardId() : dto.getIdCardNo().trim()); patArchive.setName(dto.getPatientName()); patArchive.setSourcefrom(2); patArchive.setSourcefrom(2L); patArchive.setPattype("2"); patArchive.setSex("男".equals(dto.getGender()) ? 1L : 2L); patArchive.setNation(dto.getNation()); smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskDetailTraceServiceImpl.java
@@ -71,47 +71,39 @@ } @Override public List<DetailTraceDealDTO> tracedeallist(DetailTraceDealVO detailTraceDealVO) { // 获取所有需要处理的记录 public Map<String, Object> tracedeallist(DetailTraceDealVO detailTraceDealVO) { // 分页查询 List<ServiceSubtaskDetailTrace> tracedeallist = serviceSubtaskDetailTraceMapper.tracedeallist(detailTraceDealVO); // 按 questiontext 分组 Map<String, List<ServiceSubtaskDetailTrace>> groupByQuestion = tracedeallist.stream() .filter(t -> t.getQuestiontext() != null) .collect(Collectors.groupingBy(ServiceSubtaskDetailTrace::getQuestiontext)); Map<String, List<ServiceSubtaskDetailTrace>> groupByQuestion = tracedeallist.stream().filter(t -> t.getQuestiontext() != null).collect(Collectors.groupingBy(ServiceSubtaskDetailTrace::getQuestiontext)); List<DetailTraceDealDTO> detailTraceDealDTOList = new ArrayList<>(); long totalException = 0L; long noDealException = 0L; long yesDealException = 0L; for (Map.Entry<String, List<ServiceSubtaskDetailTrace>> entry : groupByQuestion.entrySet()) { List<ServiceSubtaskDetailTrace> group = entry.getValue(); DetailTraceDealDTO dto = new DetailTraceDealDTO(); // 问题内容 dto.setQuestiontext(entry.getKey()); if (CollectionUtils.isNotEmpty(group)) { dto.setScriptid(group.get(0).getScriptid()); dto.setTemplateType(group.get(0).getTemplateType()); } // 负责科室(去重) List<Map<String, Object>> responsibleDept = group.stream() .filter(t -> t.getTodeptcode() != null) .collect(Collectors.collectingAndThen( Collectors.toMap( ServiceSubtaskDetailTrace::getTodeptcode, t -> { Map<String, Object> deptMap = new HashMap<>(); deptMap.put("deptName", t.getTodeptname()); deptMap.put("deptCode", t.getTodeptcode()); return deptMap; }, (existing, replacement) -> existing ), map -> new ArrayList<>(map.values()) )); List<Map<String, Object>> responsibleDept = group.stream().filter(t -> t.getTodeptcode() != null).collect(Collectors.collectingAndThen(Collectors.toMap(ServiceSubtaskDetailTrace::getTodeptcode, t -> { Map<String, Object> deptMap = new HashMap<>(); deptMap.put("deptName", t.getTodeptname()); deptMap.put("deptCode", t.getTodeptcode()); return deptMap; }, (existing, replacement) -> existing), map -> new ArrayList<>(map.values()))); dto.setResponsibleDept(responsibleDept); // 有效填写数:通过组内的 scriptid 去 service_subtask_detail 表查询 List<Long> scriptIds = group.stream() .map(ServiceSubtaskDetailTrace::getScriptid) .filter(Objects::nonNull) .distinct() .collect(Collectors.toList()); List<Long> scriptIds = group.stream().map(ServiceSubtaskDetailTrace::getScriptid).filter(Objects::nonNull).distinct().collect(Collectors.toList()); long effectiveFillNum = 0L; if (CollectionUtils.isNotEmpty(scriptIds)) { ServiceSubtaskDetail query = new ServiceSubtaskDetail(); @@ -140,19 +132,26 @@ exceptionQuesNum.put("all", exceptionFillNum); dto.setExceptionQuesNum(exceptionQuesNum); // 汇总统计累加 totalException += exceptionFillNum; noDealException += noDeal; yesDealException += yesDeal; // 最新处理人和处理时间(取 handleTime 最新的一条) group.stream() .filter(t -> t.getHandleTime() != null) .max(Comparator.comparing(ServiceSubtaskDetailTrace::getHandleTime)) .ifPresent(latest -> { dto.setHandleBy(latest.getHandleBy()); dto.setHandleTime(latest.getHandleTime()); }); group.stream().filter(t -> t.getHandleTime() != null).max(Comparator.comparing(ServiceSubtaskDetailTrace::getHandleTime)).ifPresent(latest -> { dto.setHandleBy(latest.getHandleBy()); dto.setHandleTime(latest.getHandleTime()); }); detailTraceDealDTOList.add(dto); } return detailTraceDealDTOList; Map<String, Object> result = new HashMap<>(); result.put("detailTraceDealDTOList", detailTraceDealDTOList); result.put("totalException", totalException); result.put("noDealException", noDealException); result.put("yesDealException", yesDealException); return result; } /** smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -3839,7 +3839,7 @@ if (serviceSubtaskPreachform1.getSort() == spSize.size() && failSendstate.equals("4")) { serviceSubtask.setCurrentPreachform(preachform); serviceSubtask.setSendstate(5L); serviceSubtask.setRemark("setFailPreachForm方法 当前的preachform已经是最后一个了,全失败了"); // serviceSubtask.setRemark("setFailPreachForm方法 当前的preachform已经是最后一个了,全失败了"); serviceSubtaskMapper.updateServiceSubtask(serviceSubtask); return true; } smartor/src/main/java/com/smartor/service/impl/XHGatherPatArchiveServiceImpl.java
@@ -390,7 +390,7 @@ patArchive.setPatientno(thiedInhospInfo.getPatiMediaNo()); patArchive.setIdcardno(thiedInhospInfo.getPatiIdCardNo().trim()); patArchive.setName(thiedInhospInfo.getPatiRecordName()); patArchive.setSourcefrom(2); patArchive.setSourcefrom(2L); patArchive.setPattype("2"); // 性别 smartor/src/main/resources/mapper/smartor/PatMedOperationItemMapper.xml
@@ -27,10 +27,12 @@ <result property="pguid" column="pguid"/> <result property="guid" column="guid"/> <result property="pid" column="pid"/> <result property="opercheckFlag" column="opercheck_flag"/> <result property="longTaskReason" column="long_task_reason"/> </resultMap> <sql id="selectPatMedOperationItemVo"> select id, operationid, opid, opcode, opdesc, main_flag, incitypecode, incitypedesc, oplevelcode, opleveldesc, opposition, del_flag, update_by, update_time, create_by, create_time, isupload, upload_time, orgid, pguid, guid, pid select id, operationid, opid, opcode, opdesc, main_flag, incitypecode, incitypedesc, oplevelcode, opleveldesc, opposition, del_flag, update_by, update_time, create_by, create_time, isupload, upload_time, orgid, pguid, guid, pid, opercheck_flag, long_task_reason from pat_med_operation_item </sql> @@ -141,6 +143,10 @@ </if> <if test="pid != null">pid, </if> <if test="opercheckFlag != null">opercheck_flag, </if> <if test="longTaskReason != null">long_task_reason, </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="id != null">#{id}, @@ -186,6 +192,10 @@ <if test="guid != null">#{guid}, </if> <if test="pid != null">#{pid}, </if> <if test="opercheckFlag != null">#{opercheckFlag}, </if> <if test="longTaskReason != null">#{longTaskReason}, </if> </trim> </insert> @@ -256,6 +266,12 @@ <if test="pid != null">pid = #{pid}, </if> <if test="opercheckFlag != null">opercheck_flag = #{opercheckFlag}, </if> <if test="longTaskReason != null">long_task_reason = #{longTaskReason}, </if> </trim> where id = #{id} </update> smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -92,6 +92,7 @@ <result property="continueContent" column="continue_content"/> <result property="continueCount" column="continue_count"/> <result property="continueTimeNext" column="continue_time_next"/> <result property="operationItemId" column="operation_item_id"/> </resultMap> <resultMap type="com.smartor.domain.ServiceSubtaskCount" id="ServiceSubtaskResult2"> @@ -212,6 +213,7 @@ continue_content, continue_count, continue_time_next, operation_item_id, task_situation from service_subtask </sql> @@ -852,6 +854,7 @@ <if test="continueCount != null ">continue_count,</if> <if test="continueTimeNext != null ">continue_time_next,</if> <if test="continueContent != null ">continue_content,</if> <if test="operationItemId != null ">operation_item_id,</if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="sendname != null">#{sendname},</if> @@ -943,6 +946,7 @@ <if test="continueCount != null ">#{continueCount},</if> <if test="continueTimeNext != null ">#{continueTimeNext,jdbcType=TIMESTAMP},</if> <if test="continueContent != null ">#{continueContent},</if> <if test="operationItemId != null ">#{operationItemId},</if> </trim> </insert> @@ -1039,6 +1043,7 @@ <if test="continueCount != null ">continue_count = #{continueCount},</if> <if test="continueTimeNext != null ">continue_time_next = #{continueTimeNext,jdbcType=TIMESTAMP},</if> <if test="continueContent != null ">continue_content = #{continueContent},</if> <if test="operationItemId != null ">operation_item_id = #{operationItemId},</if> </trim> where id = #{id} </update>