diff --git a/util/src/main/java/com/ccsens/util/CodeEnum.java b/util/src/main/java/com/ccsens/util/CodeEnum.java index e1ded545..3c449481 100644 --- a/util/src/main/java/com/ccsens/util/CodeEnum.java +++ b/util/src/main/java/com/ccsens/util/CodeEnum.java @@ -217,6 +217,7 @@ public enum CodeEnum { WISDOM_CAR_RUNNED(177,"这段时间内平车正在运行,请结束平车运行或重新选择平车",true), WISDOM_CAR_IS_EXIST(178,"平车不存在,请检查后操作",true), TASK_IS_EXIST(179,"任务不存在,请检查后操作",true), + PATIENT_PROJECT_REPEAT(180,"已创建该患者的病例,请不要重复操作",true), ; diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/api/OtherRecordsController.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/api/OtherRecordsController.java index 34390732..d190899e 100644 --- a/wisdomcar/src/main/java/com/ccsens/wisdomcar/api/OtherRecordsController.java +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/api/OtherRecordsController.java @@ -1,5 +1,6 @@ package com.ccsens.wisdomcar.api; +import com.ccsens.cloudutil.annotation.MustLogin; import com.ccsens.util.JsonResponse; import com.ccsens.util.bean.dto.QueryDto; import com.ccsens.wisdomcar.bean.dto.OtherRecordsDto; @@ -31,11 +32,12 @@ public class OtherRecordsController { @Resource private IOtherRecordsService iOtherRecordsService; - @ApiOperation(value = "上传图片和记录", notes = "1007") + @MustLogin + @ApiOperation(value = "上传图片和记录(与点击开始合并了)", notes = "") @RequestMapping(value = "/upload", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public JsonResponse upload(@ApiParam @Validated @RequestBody QueryDto params){ log.info("上传图片和记录:{}", params); - iOtherRecordsService.upload(params.getParam()); + iOtherRecordsService.upload(params.getParam(),params.getUserId()); log.info("上传图片和记录成功"); return JsonResponse.newInstance().ok(); } diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/api/ProjectController.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/api/ProjectController.java index ecad47a1..0007233e 100644 --- a/wisdomcar/src/main/java/com/ccsens/wisdomcar/api/ProjectController.java +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/api/ProjectController.java @@ -45,7 +45,7 @@ public class ProjectController { private IProjectService projectService; @MustLogin - @ApiOperation(value = "点击开始", notes = "whj") + @ApiOperation(value = "点击开始(暂不使用)", notes = "whj") @RequestMapping(value = "/start", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public JsonResponse start(@ApiParam @Validated @RequestBody QueryDto params){ log.info("点击开始:{}", params); diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/CreateCaseDto.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/CreateCaseDto.java index 63c22ae7..ca1d4da3 100644 --- a/wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/CreateCaseDto.java +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/CreateCaseDto.java @@ -34,6 +34,7 @@ public class CreateCaseDto { private String medicalRecordNum; @ApiModelProperty("患者家属姓名") private String familyName; + @Pattern(regexp="^\\s{0}$|^[1]([3-9])[0-9]{9}$",message="请输入正确的手机号") @ApiModelProperty("患者家属手机号") private String familyPhone; } diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/OtherRecordsDto.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/OtherRecordsDto.java index b7a01bbf..0575198c 100644 --- a/wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/OtherRecordsDto.java +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/OtherRecordsDto.java @@ -25,7 +25,14 @@ public class OtherRecordsDto { private List pictures; @ApiModelProperty("上传记录") private String records; + + @ApiModelProperty("开始时间") + private Long startTime = System.currentTimeMillis(); +// @NotNull(message="请说明您的任务") +// @ApiModelProperty("分解任务ID") +// private Long taskSubId; } + @Data @ApiModel("查询上传图片和记录") public static class QueryId { diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/StepDto.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/StepDto.java index 2bf4987f..2482cdb2 100644 --- a/wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/StepDto.java +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/bean/dto/StepDto.java @@ -15,8 +15,8 @@ public class StepDto { @Data @ApiModel("查看环节完成状态") public static class FindStepStatus{ - @NotNull(message = "请选择要查看的患者平车") - @ApiModelProperty("患者平车id") - private Long patientCarId; + @NotNull(message = "请选择要查看的数据") + @ApiModelProperty("分解任务id") + private Long taskSubId; } } diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/persist/dao/StepDao.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/persist/dao/StepDao.java index 426f0feb..31e613f1 100644 --- a/wisdomcar/src/main/java/com/ccsens/wisdomcar/persist/dao/StepDao.java +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/persist/dao/StepDao.java @@ -33,8 +33,8 @@ public interface StepDao extends StepMapper { /** * 查看环节是否完成 - * @param patientCarId 患者平车id + * @param taskSubId 患者平车id * @return 环节信息 */ - List findStepIsOver(@Param("patientCarId") Long patientCarId); + List findStepIsOver(@Param("taskSubId") Long taskSubId); } diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/IOtherRecordsService.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/IOtherRecordsService.java index 31d53da0..b608c866 100644 --- a/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/IOtherRecordsService.java +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/IOtherRecordsService.java @@ -13,7 +13,7 @@ public interface IOtherRecordsService { * @param * @throws */ - void upload(OtherRecordsDto.PicturesAndRecords param); + void upload(OtherRecordsDto.PicturesAndRecords param,Long userId); /** * 查询上传图片和记录 diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/OtherRecordsService.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/OtherRecordsService.java index 230356fe..6afa962b 100644 --- a/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/OtherRecordsService.java +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/OtherRecordsService.java @@ -7,6 +7,7 @@ import com.ccsens.util.CodeEnum; import com.ccsens.util.StringUtil; import com.ccsens.util.exception.BaseException; import com.ccsens.wisdomcar.bean.dto.OtherRecordsDto; +import com.ccsens.wisdomcar.bean.dto.ProjectDto; import com.ccsens.wisdomcar.bean.po.PatientInformationRecord; import com.ccsens.wisdomcar.bean.po.PatientInformationRecordExample; import com.ccsens.wisdomcar.bean.po.PatientWisdomCar; @@ -50,10 +51,12 @@ public class OtherRecordsService implements IOtherRecordsService { @Resource private Snowflake snowflake; + @Resource + private ProjectService projectService; @Override - public void upload(OtherRecordsDto.PicturesAndRecords param) { + public void upload(OtherRecordsDto.PicturesAndRecords param,Long userId) { //通过t_patient_information_record里面的分解任务id 找到患者平车id 最新的 拿到患者平车id t_patient_information_record //拿到患者平车id ProjectVo.BindCar bindCar = stepTaskDao.getBindCarTaskId(param.getId()); @@ -61,6 +64,22 @@ public class OtherRecordsService implements IOtherRecordsService { log.info("没有找到绑定的平车信息:{}", param); throw new BaseException(CodeEnum.PARAM_ERROR); }*/ + + //添加开始时间 + if (ObjectUtil.isNotNull(param.getStartTime())){ + PatientInformationRecord patientInformationRecord = new PatientInformationRecord(); + patientInformationRecord.setId(snowflake.nextId()); + patientInformationRecord.setInformationType((byte) 3); + patientInformationRecord.setTaskSubId(param.getId()); + patientInformationRecord.setPatientCarId(bindCar == null ? 0 : bindCar.getId()); + patientInformationRecord.setContent(param.getStartTime().toString()); + patientInformationRecordMapper.insertSelective(patientInformationRecord); + ProjectDto.Start start = new ProjectDto.Start(); + start.setStartTime(param.getStartTime()); + start.setTaskSubId(param.getId()); + //点击开始接口 + projectService.start(start,userId); + } //判断是否是图片是否为空 if (CollectionUtil.isNotEmpty(param.getPictures())){ for (int i = 0; i < param.getPictures().size(); i++) { diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/PatientAndFamilyService.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/PatientAndFamilyService.java index 28908c11..7dd63d6b 100644 --- a/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/PatientAndFamilyService.java +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/PatientAndFamilyService.java @@ -66,6 +66,26 @@ public class PatientAndFamilyService implements IPatientAndFamilyService{ if (ObjectUtil.isNotNull(param.getSex())){ patient.setSex(param.getSex()); } + //添加患者成员 + if (ObjectUtil.isNotNull(param.getPhone()) && ObjectUtil.isNull(patient.getPhone())){ + MemberRoleDto.SaveMemberForTemplate saveMemberForTemplate = new MemberRoleDto.SaveMemberForTemplate(); + List memberList = new ArrayList<>(); + MemberRoleDto.MemberForTemplate memberForTemplate = new MemberRoleDto.MemberForTemplate(); + if (StrUtil.isNotBlank(param.getName())){ + memberForTemplate.setMemberName(param.getName()); + } + memberForTemplate.setPhone(param.getPhone()); + List roleName = new ArrayList<>(); + roleName.add(Constant.PATIENT); + memberForTemplate.setRoleName(roleName); + memberList.add(memberForTemplate); + saveMemberForTemplate.setProjectId(patient.getProjectId()); + saveMemberForTemplate.setMemberForTemplate(memberList); + QueryDto queryDto = new QueryDto<>(); + queryDto.setParam(saveMemberForTemplate); + //调用tall添加成员接口 + addMemberOfTall(queryDto); + } if (ObjectUtil.isNotNull(param.getPhone())){ patient.setPhone(param.getPhone()); } @@ -75,13 +95,33 @@ public class PatientAndFamilyService implements IPatientAndFamilyService{ patientFamilyExample.createCriteria().andPatientIdEqualTo(param.getId()); List patientFamilies = patientFamilyDao.selectByExample(patientFamilyExample); if (CollectionUtil.isNotEmpty(patientFamilies)){ + //添加患者家属成员 + if (StrUtil.isNotBlank(param.getFamilyPhone()) && StrUtil.isBlank(patientFamilies.get(0).getPhone())){ + MemberRoleDto.SaveMemberForTemplate saveMemberForTemplate = new MemberRoleDto.SaveMemberForTemplate(); + List memberList = new ArrayList<>(); + MemberRoleDto.MemberForTemplate memberForTemplate = new MemberRoleDto.MemberForTemplate(); + if (StrUtil.isNotBlank(param.getFamilyName())){ + memberForTemplate.setMemberName(param.getFamilyName()); + } + memberForTemplate.setPhone(param.getFamilyPhone()); + List roleName = new ArrayList<>(); + roleName.add(Constant.PATIENT_FAMILY); + memberForTemplate.setRoleName(roleName); + memberList.add(memberForTemplate); + saveMemberForTemplate.setProjectId(patient.getProjectId()); + saveMemberForTemplate.setMemberForTemplate(memberList); + QueryDto queryDto = new QueryDto<>(); + queryDto.setParam(saveMemberForTemplate); + System.out.println(queryDto); + addMemberOfTall(queryDto); + } if (StrUtil.isNotBlank(param.getFamilyName())){ patientFamilies.get(0).setName(param.getFamilyName()); } if (ObjectUtil.isNotNull(param.getFamilyPhone())){ patientFamilies.get(0).setPhone(param.getFamilyPhone()); } - patientFamilyDao.updateByPrimaryKeySelective(patientFamilies.get(0)); + patientFamilyDao.updateByPrimaryKeySelective(patientFamilies.get(0)); }else{ //没有查到患者信息并且传入家属信息则新建一条 if (StrUtil.isNotBlank(param.getFamilyName()) || ObjectUtil.isNotNull(param.getFamilyPhone())){ @@ -185,4 +225,20 @@ public class PatientAndFamilyService implements IPatientAndFamilyService{ } return patientInfo; } + + + /** + * 调用tall添加成员接口 + * @param queryDto + */ + private void addMemberOfTall(QueryDto queryDto){ + log.info("调用tall添加成员接口:{}",queryDto); + JsonResponse jsonResponse = tallFeignClient.addMemberForTemplate(queryDto); + log.info("调用tall添加成员接口结束返回:{}",jsonResponse); + if(!jsonResponse.getCode().equals(Constant.RESPONSE_OK)){ + log.info("调用tall异常后返回:{}", jsonResponse.getMsg()); + throw new BaseException(Constant.RETURN_ERROR); + } + } + } diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/ProjectService.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/ProjectService.java index 81038f85..d819667d 100644 --- a/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/ProjectService.java +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/ProjectService.java @@ -92,8 +92,22 @@ public class ProjectService implements IProjectService { dataExample.createCriteria().andTaskSubIdEqualTo(stepTask.getTaskSubId()).andStepIdEqualTo(stepTask.getStepId()); List patientData = patientDataDao.selectByExample(dataExample); if (CollectionUtil.isNotEmpty(patientData)){ - log.info("taskId:{}, stepId:{}已经存在,不再修改", stepTask.getTaskSubId(), stepTask.getStepId()); +// log.info("taskId:{}, stepId:{}已经存在,不再修改", stepTask.getTaskSubId(), stepTask.getStepId()); + log.info("修改开始时间"); PatientData data = patientData.get(0); + data.setStartTime(startTime); + //平车上传 + if (Constant.OPERATION_CAR == operation){ + data.setPatientCarId(patientCarId); + data.setWisdomCarRecordId(operationId); + } + //用户上传 + if (Constant.OPERATION_USER == operation){ + data.setUserId(operationId); + } + data.setType(operation); + + patientDataDao.updateByPrimaryKeySelective(data); // 未推送 if (data.getPushStatus() == Constant.PUSH_STATUS_SUCCESS) { log.info("已推送成功,不处理"); diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/StepService.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/StepService.java index 1cbe1067..9bbad5f3 100644 --- a/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/StepService.java +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/StepService.java @@ -1,11 +1,16 @@ package com.ccsens.wisdomcar.service; +import cn.hutool.core.collection.CollectionUtil; +import com.ccsens.util.CodeEnum; import com.ccsens.util.exception.BaseException; import com.ccsens.wisdomcar.bean.dto.StepDto; +import com.ccsens.wisdomcar.bean.po.StepTask; +import com.ccsens.wisdomcar.bean.po.StepTaskExample; import com.ccsens.wisdomcar.bean.vo.StepVo; import com.ccsens.wisdomcar.persist.dao.PatientWisdomCarDao; import com.ccsens.wisdomcar.persist.dao.StepDao; +import com.ccsens.wisdomcar.persist.dao.StepTaskDao; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; @@ -26,15 +31,18 @@ public class StepService implements IStepService { @Resource private StepDao stepDao; @Resource - private PatientWisdomCarDao patientWisdomCarDao; + private StepTaskDao stepTaskDao; + @Override public List findStepIsOver(StepDto.FindStepStatus param) { - Integer isExist = patientWisdomCarDao.findIsExist(param.getPatientCarId()); - if (0 == isExist){ - throw new BaseException("请检查患者是否绑定平车"); + StepTaskExample stepTaskExample = new StepTaskExample(); + stepTaskExample.createCriteria().andTaskSubIdEqualTo(param.getTaskSubId()); + List stepTasks = stepTaskDao.selectByExample(stepTaskExample); + if (CollectionUtil.isEmpty(stepTasks)){ + throw new BaseException(CodeEnum.TASK_IS_EXIST); } - return stepDao.findStepIsOver(param.getPatientCarId()); + return stepDao.findStepIsOver(param.getTaskSubId()); } } diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/WisdomCarService.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/WisdomCarService.java index ce62a6a7..f9093918 100644 --- a/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/WisdomCarService.java +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/service/WisdomCarService.java @@ -72,6 +72,23 @@ public class WisdomCarService implements IWisdomCarService { @Override public WisdomCarVo.PatientProject createCase(CreateCaseDto.PatientInfo param, Long userId) { + String idCard = ""; + if (StrUtil.isNotBlank(param.getPatientIdCard())){ + idCard = (String) redisUtil.get(Constant.REDIS_ID_CARD+param.getPatientIdCard()); + + if (StrUtil.isBlank(idCard)){ + redisUtil.set(Constant.REDIS_ID_CARD+param.getPatientIdCard(),param.getPatientIdCard(),300); + }else{ + throw new BaseException(CodeEnum.PATIENT_PROJECT_REPEAT); + } + PatientProjectExample patientExample = new PatientProjectExample(); + patientExample.createCriteria().andIdCardEqualTo(param.getPatientIdCard()); + List patientProjects = patientProjectDao.selectByExample(patientExample); + if (CollectionUtil.isNotEmpty(patientProjects)){ + throw new BaseException(CodeEnum.PATIENT_PROJECT_REPEAT); + } + } + Long patientProjectId = null; //tall中需要添加的成员 MemberRoleDto.SaveMemberForTemplate saveMemberForTemplate = new MemberRoleDto.SaveMemberForTemplate(); @@ -109,6 +126,18 @@ public class WisdomCarService implements IWisdomCarService { patient.setPhone(param.getPatientPhone()); } patientProjectDao.insertSelective(patient); + //添加患者成员 + if (ObjectUtil.isNotNull(param.getPatientPhone())){ + MemberRoleDto.MemberForTemplate memberForTemplate = new MemberRoleDto.MemberForTemplate(); + List roleName = new ArrayList<>(); + roleName.add(Constant.PATIENT_FAMILY); + memberForTemplate.setPhone(param.getPatientPhone()); + memberForTemplate.setRoleName(roleName); + if (ObjectUtil.isNotNull(param.getPatientName())){ + memberForTemplate.setMemberName(param.getPatientName()); + } + memberList.add(memberForTemplate); + } //患者家属 if (ObjectUtil.isNotNull(param.getFamilyName()) || ObjectUtil.isNotNull(param.getFamilyPhone())){ @@ -118,18 +147,18 @@ public class WisdomCarService implements IWisdomCarService { patientFamily.setPhone(param.getFamilyPhone()); patientFamily.setPatientId(patient.getId()); patientFamilyDao.insertSelective(patientFamily); -// if (ObjectUtil.isNotNull(param.getFamilyPhone())){ -// MemberRoleDto.MemberForTemplate memberForTemplate = new MemberRoleDto.MemberForTemplate(); -// //添加对应角色名称 -// List roleName = new ArrayList<>(); -// roleName.add(Constant.PATIENT_FAMILY); -// memberForTemplate.setRoleName(roleName); -// memberForTemplate.setPhone(param.getFamilyPhone()); -// if (ObjectUtil.isNotNull(param.getFamilyName())){ -// memberForTemplate.setMemberName(param.getFamilyName()); -// } -// memberList.add(memberForTemplate); -// } + //添加患者家属成员 + if (ObjectUtil.isNotNull(param.getFamilyPhone())){ + MemberRoleDto.MemberForTemplate memberForTemplate = new MemberRoleDto.MemberForTemplate(); + List roleName = new ArrayList<>(); + roleName.add(Constant.PATIENT_FAMILY); + memberForTemplate.setRoleName(roleName); + memberForTemplate.setPhone(param.getFamilyPhone()); + if (ObjectUtil.isNotNull(param.getFamilyName())){ + memberForTemplate.setMemberName(param.getFamilyName()); + } + memberList.add(memberForTemplate); + } } //查找正在值班得急救医生和急救护士 diff --git a/wisdomcar/src/main/java/com/ccsens/wisdomcar/util/Constant.java b/wisdomcar/src/main/java/com/ccsens/wisdomcar/util/Constant.java index 34cdd6f7..5f746f98 100644 --- a/wisdomcar/src/main/java/com/ccsens/wisdomcar/util/Constant.java +++ b/wisdomcar/src/main/java/com/ccsens/wisdomcar/util/Constant.java @@ -59,6 +59,11 @@ public class Constant { */ public static final String PROJECT_NAME = "卒中急救流程"; + /** + * 角色名称:患者 + */ + public static final String PATIENT = "患者"; + /** * 角色名称:患者家属 */ @@ -129,6 +134,9 @@ public class Constant { * 调用Tall异常 */ public static final Byte TASK_DETAIL_LEVEL_TWO = 2; + + public static final String REDIS_ID_CARD = "patient_id_card"; + public static class BaiDu{ public static final String APP_KEY = "F43SLi3hDra3EgWiSi8bIH8c"; public static final String SECRET_KEY = "wGhbTXGsrbxfuCQT7WyLDndYRxrSYqbD"; diff --git a/wisdomcar/src/main/resources/application.yml b/wisdomcar/src/main/resources/application.yml index a47f2a7b..ac92adb9 100644 --- a/wisdomcar/src/main/resources/application.yml +++ b/wisdomcar/src/main/resources/application.yml @@ -1,6 +1,6 @@ spring: profiles: - active: dev - include: common, util-dev + active: test + include: common, util-test diff --git a/wisdomcar/src/main/resources/mapper_dao/StepDao.xml b/wisdomcar/src/main/resources/mapper_dao/StepDao.xml index 27cb7927..9e26de44 100644 --- a/wisdomcar/src/main/resources/mapper_dao/StepDao.xml +++ b/wisdomcar/src/main/resources/mapper_dao/StepDao.xml @@ -46,16 +46,35 @@ s.`code` AS stepCode, s.`name` AS stepName, pd.start_time AS startTime, - pd.type type, - hm.member_name AS memberName + pd.type AS type, + hm.member_name AS memberName, + s.id FROM t_step AS s - LEFT JOIN t_patient_data AS pd ON s.id = pd.step_id - AND pd.patient_car_id = #{patientCarId} - LEFT JOIN t_hospital_member AS hm ON pd.user_id = hm.user_id + LEFT JOIN t_patient_data AS pd ON s.id = pd.step_id + AND pd.task_sub_id IN ( + SELECT + st.task_sub_id + FROM + t_step_task AS st, + ( + SELECT + st.batch, + st.patient_id + FROM + t_step_task AS st + WHERE + st.task_sub_id = #{taskSubId} + ) AS bat + WHERE + st.patient_id = bat.patient_id + AND st.batch = bat.batch + ) + LEFT JOIN t_hospital_member AS hm ON pd.user_id = hm.user_id WHERE s.step_type = 0 - ORDER BY s.`code`+1 + ORDER BY + s.`code` + 1