From e26f3b48dc5da1b75c2f7503398205e0fd816709 Mon Sep 17 00:00:00 2001 From: zhizhi wu <2377881365@qq.com> Date: Thu, 6 May 2021 15:23:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E6=82=A3=E8=80=85ID=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E7=94=9F=E7=89=A9=E6=A0=B7=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tall/service/ProTaskDetailService.java | 1 - .../tcm/api/BiologicalSamplesController.java | 10 +++ .../tcm/bean/dto/BiologicalSamplesDto.java | 31 +++++--- .../com/ccsens/tcm/bean/dto/PatientDto.java | 13 +++ .../tcm/bean/vo/BiologicalSamplesVo.java | 4 +- .../java/com/ccsens/tcm/bean/vo/DoctorVo.java | 33 ++++++++ .../com/ccsens/tcm/persist/dao/DoctorDao.java | 21 +++++ .../ccsens/tcm/persist/dao/PatientDao.java | 16 +++- .../ccsens/tcm/service/IPatientService.java | 8 ++ .../ccsens/tcm/service/PatientService.java | 79 ++++++++++++------- .../java/com/ccsens/tcm/uitl/Constant.java | 3 + .../main/resources/mapper_dao/DoctorDao.xml | 24 ++++++ .../main/resources/mapper_dao/PatientDao.xml | 74 ++++++++++++++--- .../main/java/com/ccsens/util/CodeEnum.java | 2 +- 14 files changed, 264 insertions(+), 55 deletions(-) create mode 100644 tcm/src/main/java/com/ccsens/tcm/bean/vo/DoctorVo.java create mode 100644 tcm/src/main/java/com/ccsens/tcm/persist/dao/DoctorDao.java create mode 100644 tcm/src/main/resources/mapper_dao/DoctorDao.xml diff --git a/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java index f6eb89b8..9da80e61 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java @@ -28,7 +28,6 @@ import com.ccsens.util.exception.BaseException; import com.fasterxml.jackson.annotation.JsonFormat; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; -import com.sun.xml.internal.fastinfoset.util.ValueArrayResourceException; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.apache.ibatis.annotations.Param; diff --git a/tcm/src/main/java/com/ccsens/tcm/api/BiologicalSamplesController.java b/tcm/src/main/java/com/ccsens/tcm/api/BiologicalSamplesController.java index 8630a294..db9b346b 100644 --- a/tcm/src/main/java/com/ccsens/tcm/api/BiologicalSamplesController.java +++ b/tcm/src/main/java/com/ccsens/tcm/api/BiologicalSamplesController.java @@ -51,6 +51,16 @@ public class BiologicalSamplesController { log.info("查询生物样本完成"); return JsonResponse.newInstance().ok(selBiologPageInfo); } + @MustLogin + @ApiOperation(value = "根据患者ID查询生物样本信息", notes = "whj:根据患者ID查询生物样本信息") + @RequestMapping(value = "/queryByPatient", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse> queryByPatient(@ApiParam @Validated @RequestBody QueryDto params) { + log.info("根据患者ID查询生物样本信息:{}",params); + List infos= patientService.queryByPatient(params.getParam(),params.getUserId()); + log.info("根据患者ID查询生物样本信息完成:{}", infos); + return JsonResponse.newInstance().ok(infos); + } + @MustLogin @ApiOperation(value = "统计生物样本数量", notes = "w:统计每个医院的生物样本的数量") @RequestMapping(value = "/selAllYBS", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) diff --git a/tcm/src/main/java/com/ccsens/tcm/bean/dto/BiologicalSamplesDto.java b/tcm/src/main/java/com/ccsens/tcm/bean/dto/BiologicalSamplesDto.java index a431c55b..8d23e050 100644 --- a/tcm/src/main/java/com/ccsens/tcm/bean/dto/BiologicalSamplesDto.java +++ b/tcm/src/main/java/com/ccsens/tcm/bean/dto/BiologicalSamplesDto.java @@ -1,39 +1,48 @@ package com.ccsens.tcm.bean.dto; -import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import java.util.Date; +import javax.validation.constraints.*; +import java.util.List; +/** + * @author 23778 + */ @Data public class BiologicalSamplesDto { @Data @ApiModel("添加生物样本-1007") public static class AddBiolog { - @ApiModelProperty("王-样本类型 0:抗血凝10ml 1:促凝血5ml 2:晨尿10ml 3:24小时尿10ml") - private Byte sampleType; + @NotEmpty + @ApiModelProperty("样本类型 0:尿标本 1:抗凝血标本") + private List sampleTypes; @NotBlank - @ApiModelProperty("住院号") - private String hospitalization; + @ApiModelProperty("病例研究编号") + private String code; @ApiModelProperty("采集时间") private Integer collectTime; } + @Data + @ApiModel("根据患者ID查询生物样本-dto") + public static class QueryByPatient{ + @ApiModelProperty("患者ID") + private Long patientId; + } + @Data @ApiModel("查询生物样本-1007") public static class SelBiolog { @ApiModelProperty("医院id") private Long hospitalId; - @ApiModelProperty("样本类型 0:抗血凝10ml 1:促凝血5ml 2:晨尿10ml 3:24小时尿10ml") + @ApiModelProperty("样本类型 0:尿标本 1:抗凝血标本") private Byte sampleType; @ApiModelProperty("患者住院号") private String hospitalization; + @ApiModelProperty("病例研究编号") + private String code; @ApiModelProperty("采集时间") private Integer collectTime; @Min(1) diff --git a/tcm/src/main/java/com/ccsens/tcm/bean/dto/PatientDto.java b/tcm/src/main/java/com/ccsens/tcm/bean/dto/PatientDto.java index f2baa89e..708ffa52 100644 --- a/tcm/src/main/java/com/ccsens/tcm/bean/dto/PatientDto.java +++ b/tcm/src/main/java/com/ccsens/tcm/bean/dto/PatientDto.java @@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.*; +import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -23,6 +24,10 @@ public class PatientDto { @NotNull(message = "请选择对照组") @ApiModelProperty("对照组id") private Long inpatientId; + @ApiModelProperty("编号顺序") + private int codeNum; + + @ApiModelProperty("录入状态:0:新建 1:数据搜集中 2数据搜集完成 3数据搜集超时 4:废弃") private Byte inputStatus=0; // @ApiModelProperty("医院id") @@ -33,12 +38,18 @@ public class PatientDto { public static class SelPatientList { @ApiModelProperty("病患id") private Long id; + @ApiModelProperty("研究编号") + private String code; @ApiModelProperty("住院号") private String hospitalization; @ApiModelProperty("对照组id") private Long inpatientId; @ApiModelProperty("录入状态:0:新建 1:数据搜集中 2数据搜集完成 3数据搜集超时 4:废弃") private Byte inputStatus; + @ApiModelProperty("医生名字") + private String doctorName; + @ApiModelProperty("查看权限 0:仅自己 1:医院 2:全部") + private byte queryAuthority = 0; @Min(1) @ApiModelProperty("当前页") private Integer pageNum=1; @@ -46,6 +57,8 @@ public class PatientDto { @Max(20) @ApiModelProperty("每页数量") private Integer pageSize=10; + @ApiModelProperty("医院id 前端不传") + private List hospitalIds = new ArrayList<>(); } @Data @ApiModel("保存患者的多个病例信息") diff --git a/tcm/src/main/java/com/ccsens/tcm/bean/vo/BiologicalSamplesVo.java b/tcm/src/main/java/com/ccsens/tcm/bean/vo/BiologicalSamplesVo.java index e24152d4..eff49dd2 100644 --- a/tcm/src/main/java/com/ccsens/tcm/bean/vo/BiologicalSamplesVo.java +++ b/tcm/src/main/java/com/ccsens/tcm/bean/vo/BiologicalSamplesVo.java @@ -18,9 +18,7 @@ public class BiologicalSamplesVo { private String hospitalization; @ApiModelProperty("患者研究编号") private String patientCode; - @ApiModelProperty("生物样本编号") - private String code; - @ApiModelProperty("样本类型 0:抗血凝10ml 1:促凝血5ml 2:晨尿10ml 3:24小时尿10ml") + @ApiModelProperty("样本类型 0:尿标本 1:抗凝血标本") private Byte sampleType; @ApiModelProperty("采集时间") private Integer collectTime; diff --git a/tcm/src/main/java/com/ccsens/tcm/bean/vo/DoctorVo.java b/tcm/src/main/java/com/ccsens/tcm/bean/vo/DoctorVo.java new file mode 100644 index 00000000..f88e2095 --- /dev/null +++ b/tcm/src/main/java/com/ccsens/tcm/bean/vo/DoctorVo.java @@ -0,0 +1,33 @@ +package com.ccsens.tcm.bean.vo; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: whj + * @time: 2021/5/6 10:54 + */ +public class DoctorVo { + + @ApiModel("医生详细信息") + @Data + public static class Detail{ + @ApiModelProperty("医生ID") + private Long id; + @ApiModelProperty("医生名字") + private String name; + @ApiModelProperty("userId") + private Long userId; + @ApiModelProperty("医院ID") + private Long hospitalId; + @ApiModelProperty("医院编码") + private String hospitalCode; + @ApiModelProperty("医院名") + private String hospitalName; + @ApiModelProperty("医院类型 0:项目 1:医院") + private byte hospitalType; + } +} diff --git a/tcm/src/main/java/com/ccsens/tcm/persist/dao/DoctorDao.java b/tcm/src/main/java/com/ccsens/tcm/persist/dao/DoctorDao.java new file mode 100644 index 00000000..0158d55a --- /dev/null +++ b/tcm/src/main/java/com/ccsens/tcm/persist/dao/DoctorDao.java @@ -0,0 +1,21 @@ +package com.ccsens.tcm.persist.dao; + +import com.ccsens.tcm.bean.vo.DoctorVo; +import com.ccsens.tcm.persist.mapper.DoctorMapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + + +/** + * @author whj + */ +public interface DoctorDao extends DoctorMapper { + + /** + * 查询医生详细信息 + * @param userId 登录ID + * @return 医生+医院信息 + */ + List queryDetail(@Param("userId") Long userId); +} diff --git a/tcm/src/main/java/com/ccsens/tcm/persist/dao/PatientDao.java b/tcm/src/main/java/com/ccsens/tcm/persist/dao/PatientDao.java index 1158faaa..4f3e1530 100644 --- a/tcm/src/main/java/com/ccsens/tcm/persist/dao/PatientDao.java +++ b/tcm/src/main/java/com/ccsens/tcm/persist/dao/PatientDao.java @@ -22,7 +22,13 @@ public interface PatientDao { List selPatientMesList(PatientDto.SelPatlenConditionList param); - List selPatientInformationList(PatientDto.SelPatientList param); + /** + * 查询患者基本信息 + * @param param 搜索条件 + * @param userId 搜索人ID + * @return 基本信息 + */ + List selPatientInformationList(@Param("param") PatientDto.SelPatientList param, @Param("userId") Long userId); List countCase(@Param("param") StatisticDto.SelCount param,@Param("inputStatus") byte inputStatus); @@ -71,4 +77,12 @@ public interface PatientDao { List stringLists(Long testQuestionsId); List selByHosAllYBS(@Param("id") Long id); + + /** + * 根据患者ID查询生物样本信息 + * @param param 患者ID + * @param userId userId + * @return 生物样本 + */ + List queryByPatient(@Param("param") BiologicalSamplesDto.QueryByPatient param, @Param("userId") Long userId); } diff --git a/tcm/src/main/java/com/ccsens/tcm/service/IPatientService.java b/tcm/src/main/java/com/ccsens/tcm/service/IPatientService.java index 3239e86a..715474ae 100644 --- a/tcm/src/main/java/com/ccsens/tcm/service/IPatientService.java +++ b/tcm/src/main/java/com/ccsens/tcm/service/IPatientService.java @@ -82,4 +82,12 @@ public interface IPatientService { List selByHosAllYBS(Long id); void upPatientMes(PatientDto.UpPatient param, Long userId); + + /** + * 根据患者ID查询生物样本信息 + * @param param 患者ID + * @param userId userId + * @return 生物样本 + */ + List queryByPatient(BiologicalSamplesDto.QueryByPatient param, Long userId); } diff --git a/tcm/src/main/java/com/ccsens/tcm/service/PatientService.java b/tcm/src/main/java/com/ccsens/tcm/service/PatientService.java index d723651a..cde65129 100644 --- a/tcm/src/main/java/com/ccsens/tcm/service/PatientService.java +++ b/tcm/src/main/java/com/ccsens/tcm/service/PatientService.java @@ -3,33 +3,29 @@ package com.ccsens.tcm.service; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; import com.ccsens.tcm.bean.dto.BiologicalSamplesDto; import com.ccsens.tcm.bean.dto.ConRecDto; import com.ccsens.tcm.bean.dto.PatientDto; import com.ccsens.tcm.bean.dto.StatisticDto; import com.ccsens.tcm.bean.po.*; import com.ccsens.tcm.bean.vo.*; +import com.ccsens.tcm.persist.dao.DoctorDao; import com.ccsens.tcm.persist.dao.PatientDao; import com.ccsens.tcm.persist.mapper.*; import com.ccsens.tcm.uitl.Constant; import com.ccsens.util.CodeEnum; import com.ccsens.util.RedisUtil; -import com.ccsens.util.bean.dto.QueryDto; import com.ccsens.util.exception.BaseException; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.text.DecimalFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.*; @Slf4j @@ -55,7 +51,8 @@ public class PatientService implements IPatientService { @Resource private HospitalMapper hospitalMapper; @Resource - private DoctorMapper doctorMapper; + private DoctorDao doctorDao; + // @Value("${day.one}") // public int one; // @Value("${day.two}") @@ -76,30 +73,30 @@ public class PatientService implements IPatientService { @Override public void savePatient(PatientDto.SavePatient param, Long userId) { Hospital hospital = selUserIdToHosId(userId); + Inpatient inpatient = inpatientMapper.selectByPrimaryKey(param.getInpatientId()); + if (inpatient == null) { + throw new BaseException(CodeEnum.PARAM_ERROR); + } + log.info("医院:{},对照组:{}", hospital, inpatient); + // 生成编号 + DecimalFormat df=new DecimalFormat("000"); + String num = hospital.getCode() + inpatient.getCode() + df.format(param.getCodeNum()); + log.info("编号:{}", num); // 判断住院号是否存在 PatientInformationExample patientInformationExample=new PatientInformationExample(); - patientInformationExample.createCriteria().andHospitalizationEqualTo(param.getHospitalization()) - .andHospitalIdEqualTo(hospital.getId()).andRecStatusEqualTo((byte)0); + patientInformationExample.createCriteria().andCodeEqualTo(num); long l = patientInformationMapper.countByExample(patientInformationExample); if(l>0){ throw new BaseException(CodeEnum.ZHUYUANIDCHONGFU); } - Inpatient inpatient = inpatientMapper.selectByPrimaryKey(param.getInpatientId()); - if (inpatient == null) { - throw new BaseException(CodeEnum.PARAM_ERROR); - } - log.info("医院:{},对照组:{}", hospital, inpatient); + PatientInformation patientInformation=new PatientInformation(); BeanUtils.copyProperties(param,patientInformation); patientInformation.setId(snowflake.nextId()); patientInformation.setHospitalId(hospital.getId()); patientInformation.setUserId(userId); - // 生成编号 - long incr = redisUtil.incr(StrUtil.format(Constant.Redis.HOSPITAL_NUM, hospital.getCode(), inpatient.getCode()) , 1); - DecimalFormat df=new DecimalFormat("000"); - String num = hospital.getCode() + inpatient.getCode() + df.format(incr); - log.info("编号:{}", num); + patientInformation.setCode(num); patientInformationMapper.insertSelective(patientInformation); } @@ -114,7 +111,7 @@ public class PatientService implements IPatientService { public Hospital selUserIdToHosId(Long userId) { DoctorExample doctorExample=new DoctorExample(); doctorExample.createCriteria().andUserIdEqualTo(userId).andRecStatusEqualTo((byte)0); - List doctors = doctorMapper.selectByExample(doctorExample); + List doctors = doctorDao.selectByExample(doctorExample); if(doctors.size()!=1){ throw new BaseException(CodeEnum.MEIYOUGAIYISHENG); } @@ -272,7 +269,21 @@ public class PatientService implements IPatientService { @Override public PageInfo selPatientInformationList(PatientDto.SelPatientList param, Long userId) { PageHelper.startPage(param.getPageNum(),param.getPageSize()); - List selPatientList= patientDao.selPatientInformationList(param); + if (param.getHospitalIds() == null) { + param.setHospitalIds(new ArrayList<>()); + } + List doctors = doctorDao.queryDetail(userId); + for (DoctorVo.Detail doctor: doctors) { + if (doctor.getHospitalType() == Constant.HOSPITAL_PROJECT) { + param.getHospitalIds().clear(); + break; + } else { + param.getHospitalIds().add(doctor.getHospitalId()); + } + } + + + List selPatientList= patientDao.selPatientInformationList(param, userId); return new PageInfo<>(selPatientList); } @@ -347,20 +358,27 @@ public class PatientService implements IPatientService { @Override public void addBiologicalSamples(BiologicalSamplesDto.AddBiolog param, Long userId) { + if (CollectionUtil.isEmpty(param.getSampleTypes())) { + return; + } PatientInformationExample patientInformationExample=new PatientInformationExample(); - patientInformationExample.createCriteria().andHospitalizationEqualTo(param.getHospitalization()).andRecStatusEqualTo((byte)0); + patientInformationExample.createCriteria().andCodeEqualTo(param.getCode()).andRecStatusEqualTo((byte)0); List patientInformations = patientInformationMapper.selectByExample(patientInformationExample); if(patientInformations.size()!=1){ throw new BaseException(CodeEnum.QUANTITYERROR); } - BiologicalSamples biologicalSamples=new BiologicalSamples(); - biologicalSamples.setUserId(userId); - biologicalSamples.setId(snowflake.nextId()); - biologicalSamples.setPatientInformationId(patientInformations.get(0).getId()); - BeanUtils.copyProperties(param,biologicalSamples); - biologicalSamples.setCode(patientInformations.get(0).getCode() + Constant.SPLIT_STRIKE + Constant.Biological.getByType(param.getSampleType()).getCode() + Constant.SPLIT_STRIKE + param.getCollectTime()); - biologicalSamplesMapper.insertSelective(biologicalSamples); + + param.getSampleTypes().forEach(type->{ + BiologicalSamples biologicalSamples=new BiologicalSamples(); + biologicalSamples.setUserId(userId); + biologicalSamples.setId(snowflake.nextId()); + biologicalSamples.setPatientInformationId(patientInformations.get(0).getId()); + biologicalSamples.setCollectTime(param.getCollectTime()); + biologicalSamples.setSampleType(type); + biologicalSamplesMapper.insertSelective(biologicalSamples); + }); + } @Override @@ -448,5 +466,10 @@ public class PatientService implements IPatientService { patientInformationMapper.updateByExampleSelective(patientInformation,patientInformationExample); } + @Override + public List queryByPatient(BiologicalSamplesDto.QueryByPatient param, Long userId) { + return patientDao.queryByPatient(param, userId); + } + } diff --git a/tcm/src/main/java/com/ccsens/tcm/uitl/Constant.java b/tcm/src/main/java/com/ccsens/tcm/uitl/Constant.java index 2a773a85..0b62b08f 100644 --- a/tcm/src/main/java/com/ccsens/tcm/uitl/Constant.java +++ b/tcm/src/main/java/com/ccsens/tcm/uitl/Constant.java @@ -36,6 +36,9 @@ public class Constant { public final static String STRING_DEFAULT = ""; public final static byte SEX_MAN = 0; public final static byte SEX_WOMAN = 1; + /**医院类型*/ + public final static byte HOSPITAL_PROJECT = 0; + public enum Biological { /**抗血凝*/ diff --git a/tcm/src/main/resources/mapper_dao/DoctorDao.xml b/tcm/src/main/resources/mapper_dao/DoctorDao.xml new file mode 100644 index 00000000..2d54a7b2 --- /dev/null +++ b/tcm/src/main/resources/mapper_dao/DoctorDao.xml @@ -0,0 +1,24 @@ + + + + + + + \ No newline at end of file diff --git a/tcm/src/main/resources/mapper_dao/PatientDao.xml b/tcm/src/main/resources/mapper_dao/PatientDao.xml index e68380b8..ad9d3bc5 100644 --- a/tcm/src/main/resources/mapper_dao/PatientDao.xml +++ b/tcm/src/main/resources/mapper_dao/PatientDao.xml @@ -165,19 +165,53 @@ LEFT JOIN t_doctor d on d.user_id = tpi.user_id and d.rec_status = 0 WHERE tpi.rec_status =0 - - and tpi.id=#{id} + + and tpi.id=#{param.id} - - - and tpi.hospitalization=#{hospitalization} + + + and tpi.hospitalization like concat('%', #{param.hospitalization}, '%') - - and tpi.inpatient_id= #{inpatientId} + + and tpi.code like concat('%',#{param.code}, '%') - - and tpi.input_status= #{inputStatus} + + and tpi.inpatient_id= #{param.inpatientId} + + and tpi.input_status= #{param.inputStatus} + + + and d.name like concat('%',#{param.doctorName},'%') + + + + and tpi.user_id = #{userId} + + + + + + and tpi.hospital_id=#{param.hospitalIds[0]} + + + and tpi.hospital_id in + + #{item} + + + + + + + + + + + and tpi.user_id = #{userId} + + + order by tpi.update_at desc @@ -399,7 +433,7 @@ t.user_id + \ No newline at end of file diff --git a/util/src/main/java/com/ccsens/util/CodeEnum.java b/util/src/main/java/com/ccsens/util/CodeEnum.java index d54fa552..0e012ba6 100644 --- a/util/src/main/java/com/ccsens/util/CodeEnum.java +++ b/util/src/main/java/com/ccsens/util/CodeEnum.java @@ -190,7 +190,7 @@ public enum CodeEnum { MESSAGEISNULL(152,"数据为空",true), QUANTITYERROR(153,"住院号不正确",true), NOT_HOSPITAL(154,"未找到医院信息",true), - ZHUYUANIDCHONGFU(155,"住院号重复",true), + ZHUYUANIDCHONGFU(155,"患者研究编号重复",true), MEIYOUGAIYISHENG(156,"该医生信息查询不正确",true), QINGTIJIAOSHITI(157,"未做出修改答案,修改后再提交",true), DOC_REPEAT(158,"输入文档已存在",true),