Browse Source

根据患者ID查询生物样本

logistics
zhizhi wu 4 years ago
parent
commit
e26f3b48dc
  1. 1
      tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java
  2. 10
      tcm/src/main/java/com/ccsens/tcm/api/BiologicalSamplesController.java
  3. 31
      tcm/src/main/java/com/ccsens/tcm/bean/dto/BiologicalSamplesDto.java
  4. 13
      tcm/src/main/java/com/ccsens/tcm/bean/dto/PatientDto.java
  5. 4
      tcm/src/main/java/com/ccsens/tcm/bean/vo/BiologicalSamplesVo.java
  6. 33
      tcm/src/main/java/com/ccsens/tcm/bean/vo/DoctorVo.java
  7. 21
      tcm/src/main/java/com/ccsens/tcm/persist/dao/DoctorDao.java
  8. 16
      tcm/src/main/java/com/ccsens/tcm/persist/dao/PatientDao.java
  9. 8
      tcm/src/main/java/com/ccsens/tcm/service/IPatientService.java
  10. 79
      tcm/src/main/java/com/ccsens/tcm/service/PatientService.java
  11. 3
      tcm/src/main/java/com/ccsens/tcm/uitl/Constant.java
  12. 24
      tcm/src/main/resources/mapper_dao/DoctorDao.xml
  13. 74
      tcm/src/main/resources/mapper_dao/PatientDao.xml
  14. 2
      util/src/main/java/com/ccsens/util/CodeEnum.java

1
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;

10
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<List<BiologicalSamplesVo.selBiolog>> queryByPatient(@ApiParam @Validated @RequestBody QueryDto<BiologicalSamplesDto.QueryByPatient> params) {
log.info("根据患者ID查询生物样本信息:{}",params);
List<BiologicalSamplesVo.selBiolog> 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"})

31
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<Byte> 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)

13
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<Long> hospitalIds = new ArrayList<>();
}
@Data
@ApiModel("保存患者的多个病例信息")

4
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;

33
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;
}
}

21
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<DoctorVo.Detail> queryDetail(@Param("userId") Long userId);
}

16
tcm/src/main/java/com/ccsens/tcm/persist/dao/PatientDao.java

@ -22,7 +22,13 @@ public interface PatientDao {
List<PatientVo.SelPatient> selPatientMesList(PatientDto.SelPatlenConditionList param);
List<PatientVo.SelPatient> selPatientInformationList(PatientDto.SelPatientList param);
/**
* 查询患者基本信息
* @param param 搜索条件
* @param userId 搜索人ID
* @return 基本信息
*/
List<PatientVo.SelPatient> selPatientInformationList(@Param("param") PatientDto.SelPatientList param, @Param("userId") Long userId);
List<StatisticVo.Shuliang> countCase(@Param("param") StatisticDto.SelCount param,@Param("inputStatus") byte inputStatus);
@ -71,4 +77,12 @@ public interface PatientDao {
List<String> stringLists(Long testQuestionsId);
List<BiologicalSamplesVo.selByHosAllYBS> selByHosAllYBS(@Param("id") Long id);
/**
* 根据患者ID查询生物样本信息
* @param param 患者ID
* @param userId userId
* @return 生物样本
*/
List<BiologicalSamplesVo.selBiolog> queryByPatient(@Param("param") BiologicalSamplesDto.QueryByPatient param, @Param("userId") Long userId);
}

8
tcm/src/main/java/com/ccsens/tcm/service/IPatientService.java

@ -82,4 +82,12 @@ public interface IPatientService {
List<BiologicalSamplesVo.selByHosAllYBS> selByHosAllYBS(Long id);
void upPatientMes(PatientDto.UpPatient param, Long userId);
/**
* 根据患者ID查询生物样本信息
* @param param 患者ID
* @param userId userId
* @return 生物样本
*/
List<BiologicalSamplesVo.selBiolog> queryByPatient(BiologicalSamplesDto.QueryByPatient param, Long userId);
}

79
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<Doctor> doctors = doctorMapper.selectByExample(doctorExample);
List<Doctor> 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<PatientVo.SelPatient> selPatientInformationList(PatientDto.SelPatientList param, Long userId) {
PageHelper.startPage(param.getPageNum(),param.getPageSize());
List<PatientVo.SelPatient> selPatientList= patientDao.selPatientInformationList(param);
if (param.getHospitalIds() == null) {
param.setHospitalIds(new ArrayList<>());
}
List<DoctorVo.Detail> 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<PatientVo.SelPatient> 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<PatientInformation> 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<BiologicalSamplesVo.selBiolog> queryByPatient(BiologicalSamplesDto.QueryByPatient param, Long userId) {
return patientDao.queryByPatient(param, userId);
}
}

3
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 {
/**抗血凝*/

24
tcm/src/main/resources/mapper_dao/DoctorDao.xml

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ccsens.tcm.persist.dao.DoctorDao">
<select id="queryDetail" resultType="com.ccsens.tcm.bean.vo.DoctorVo$Detail">
SELECT
d.id,
d.name,
d.user_id AS userId,
d.hospital_id AS hospitalId,
h.CODE AS hospitalCode,
h.NAME AS hospitalName,
h.hospital_type AS hospitalType
FROM
t_doctor d,
t_hospital h
WHERE
d.hospital_id = h.id
AND d.user_id = #{userId}
AND d.rec_status = 0
AND h.rec_status = 0
</select>
</mapper>

74
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
<if test="id != null and id!=0">
and tpi.id=#{id}
<if test="param.id != null and param.id!=0">
and tpi.id=#{param.id}
</if>
<if test="id == null">
<if test="hospitalization!=null and hospitalization!='' ">
and tpi.hospitalization=#{hospitalization}
<if test="param.id == null">
<if test="param.hospitalization!=null and param.hospitalization!='' ">
and tpi.hospitalization like concat('%', #{param.hospitalization}, '%')
</if>
<if test="inpatientId!=null and inpatientId!=0 ">
and tpi.inpatient_id= #{inpatientId}
<if test="param.code!=null and param.code!='' ">
and tpi.code like concat('%',#{param.code}, '%')
</if>
<if test="inputStatus!=null and inputStatus!=0 ">
and tpi.input_status= #{inputStatus}
<if test="param.inpatientId!=null and param.inpatientId!=0 ">
and tpi.inpatient_id= #{param.inpatientId}
</if>
<if test="param.inputStatus!=null and param.inputStatus!=0 ">
and tpi.input_status= #{param.inputStatus}
</if>
<if test="param.doctorName!=null and param.doctorName!='' ">
and d.name like concat('%',#{param.doctorName},'%')
</if>
<choose>
<when test="param.queryAuthority == 0">
and tpi.user_id = #{userId}
</when>
<when test="param.queryAuthority == 1">
<if test="param.hospitalIds != null and param.hospitalIds.size() > 0">
<choose>
<when test="param.hospitalIds.size() == 1">
and tpi.hospital_id=#{param.hospitalIds[0]}
</when>
<otherwise>
and tpi.hospital_id in
<foreach collection="param.hospitalIds" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</otherwise>
</choose>
</if>
</when>
<when test="param.queryAuthority == 2">
</when>
<otherwise>
and tpi.user_id = #{userId}
</otherwise>
</choose>
</if>
order by tpi.update_at desc
</select>
@ -399,7 +433,7 @@
t.user_id
</select>
<select id="selBiologicalSamples" resultType="com.ccsens.tcm.bean.vo.BiologicalSamplesVo$selBiolog">
select th.name,tbs.sample_type as sampleType, tpi.hospitalization, tpi.code as patientCode, tbs.code, tbs.collect_time as collectTime,
select th.name,tbs.sample_type as sampleType, tpi.hospitalization, tpi.code as patientCode, tbs.collect_time as collectTime,
tbs.update_at as updateAt,
tbs.user_id as userId,
d.`name` as doctorName
@ -417,6 +451,9 @@
<if test="hospitalization!=null and hospitalization!=''">
and tpi.hospitalization like concat('%',#{hospitalization},'%')
</if>
<if test="code!=null and code!=''">
and tpi.code like concat('%',#{code},'%')
</if>
<if test="collectTime!=null">
and tbs.collect_time=#{collectTime}
</if>
@ -522,4 +559,21 @@
GROUP BY
tbs.sample_type
</select>
<select id="queryByPatient" resultType="com.ccsens.tcm.bean.vo.BiologicalSamplesVo$selBiolog">
select th.name,tbs.sample_type as sampleType, tpi.hospitalization, tpi.code as patientCode, tbs.collect_time as collectTime,
tbs.update_at as updateAt,
tbs.user_id as userId,
d.`name` as doctorName
from t_biological_samples tbs, t_patient_information tpi, t_hospital th, t_doctor d
where
tpi.id=tbs.patient_information_id
and th.id=tpi.hospital_id
and d.user_id = tbs.user_id
and tbs.patient_information_id = #{param.patientId}
and tbs.rec_status=0
and tpi.rec_status=0
and th.rec_status=0
and d.rec_status = 0
order by tbs.update_at desc
</select>
</mapper>

2
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),

Loading…
Cancel
Save