Browse Source

Merge branch 'pt' of dd.tall.wiki:ccsens_wiki/ccsenscloud into pt

recovery
zy_Java 4 years ago
parent
commit
acfd1c5f42
  1. 6
      tcm/src/main/java/com/ccsens/tcm/api/PatientController.java
  2. 10
      tcm/src/main/java/com/ccsens/tcm/api/StatisticalAnalysisController.java
  3. 9
      tcm/src/main/java/com/ccsens/tcm/bean/dto/PatientDto.java
  4. 20
      tcm/src/main/java/com/ccsens/tcm/bean/dto/StatisticDto.java
  5. 6
      tcm/src/main/java/com/ccsens/tcm/bean/vo/StatisticVo.java
  6. 12
      tcm/src/main/java/com/ccsens/tcm/persist/dao/PatientDao.java
  7. 1
      tcm/src/main/java/com/ccsens/tcm/service/IPatientService.java
  8. 73
      tcm/src/main/java/com/ccsens/tcm/service/PatientService.java
  9. 160
      tcm/src/main/resources/mapper_dao/PatientDao.xml

6
tcm/src/main/java/com/ccsens/tcm/api/PatientController.java

@ -63,16 +63,16 @@ public class PatientController {
@ApiOperation(value = "通过搜索条件查询患者病例的信息", notes = "w:通过搜索条件查询患者病例的信息")
@RequestMapping(value = "/selPatientMesList", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<PageInfo<PatientVo.SelPatient>> selPatientMesList(@ApiParam @Validated @RequestBody QueryDto<PatientDto.SelPatlenConditionList> params) {
log.info("添加患者病例信息:{}",params);
log.info("通过搜索条件查询病例信息:{}",params);
PageInfo<PatientVo.SelPatient> selPatientListPageInfo= patientService.selPatientMesList(params.getParam(),0L);
log.info("添加患者病例信息成功");
log.info("通过搜索条件查询病例信息成功");
return JsonResponse.newInstance().ok(selPatientListPageInfo);
}
@ApiOperation(value = "查询搜索条件", notes = "w:查询搜索条件")
@RequestMapping(value = "/selSearchCriteriaList", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<QuestionVo.ReportCodeVo>> selSearchCriteriaList() {
List<QuestionVo.ReportCodeVo> selSearchCriteriaList= patientService.selSearchCriteriaList();
log.info("通过查询搜索条件");
log.info("查询搜索条件");
return JsonResponse.newInstance().ok(selSearchCriteriaList);
}

10
tcm/src/main/java/com/ccsens/tcm/api/StatisticalAnalysisController.java

@ -42,7 +42,15 @@ public class StatisticalAnalysisController {
log.info("统计每日病例调用完成");
return JsonResponse.newInstance().ok(countCase);
}
@MustLogin
@ApiOperation(value = "病例分析", notes = "w:病例分析")
@RequestMapping(value = "/countAnalysis", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<StatisticVo.SelGroupNum>> countAnalysis(@ApiParam @Validated @RequestBody QueryDto<StatisticDto.SelBinLCount> params) {
log.info("病例分析参数:{}", params);
List<StatisticVo.SelGroupNum> selGroupNum = patientService.countAnalysis(params.getParam(), params.getUserId());
log.info("病例分析调用完成");
return JsonResponse.newInstance().ok(selGroupNum);
}
@MustLogin
@ApiOperation(value = "统计病例的完成情况", notes = "zy:")

9
tcm/src/main/java/com/ccsens/tcm/bean/dto/PatientDto.java

@ -87,6 +87,15 @@ public class PatientDto {
@Data
@ApiModel("查询患者的搜索条件集合")
public static class SelPatlenConditionList{
@ApiModelProperty("医院id")
private Long hospitalId;
@ApiModelProperty("录入状态")
private Byte inputStatus;
@ApiModelProperty("对照组id")
private Long inpatientId;
@ApiModelProperty("住院号")
private String hospitalization="";
@ApiModelProperty("搜索条件集合,不包含时间格式的条件")
private List<Condition> conditionList;
@ApiModelProperty("搜索条件集合,是包含时间格式的条件")

20
tcm/src/main/java/com/ccsens/tcm/bean/dto/StatisticDto.java

@ -7,10 +7,12 @@ import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
@Data
public class StatisticDto {
@Data
@ApiModel("每日病例统计传参")
public static class SelCount{
@ApiModelProperty("主治大夫id")
private Long userId;
@ -23,6 +25,24 @@ public class StatisticDto {
@ApiModelProperty("结束时间")
private Date endDate;
}
@Data
@ApiModel("病例分析传参")
public static class SelBinLCount {
@ApiModelProperty("搜索条件集合,不包含时间格式的条件")
private List<PatientDto.Condition> conditionList;
@ApiModelProperty("搜索条件集合,是包含时间格式的条件")
private List<PatientDto.ConditionDate> conditionListDate;
@ApiModelProperty("对照组id")
private Long[] inpatientId;
@ApiModelProperty("试题id")
private Long testQuestionsId;
@ApiModelProperty("录入状态")
private Byte inputStatus;
@ApiModelProperty("医院id")
private Long hospitalId;
@ApiModelProperty("住院号")
private String hospitalization="";
}
@Data
@ApiModel("统计病例完成情况的查询条件")

6
tcm/src/main/java/com/ccsens/tcm/bean/vo/StatisticVo.java

@ -19,13 +19,17 @@ public class StatisticVo {
@Data
@ApiModel("病例分析")
public static class SelGroupNum{
@ApiModelProperty("对照组id")
private Long inpatientId;
@ApiModelProperty("试题数量")
private List<SelGroupList> list;
}
@Data
@ApiModel("病例分析详细数量")
public static class SelGroupList{
private String contents;
@ApiModelProperty("试题内容")
private String content;
@ApiModelProperty("数量")
private Integer nums;
}

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

@ -24,6 +24,18 @@ public interface PatientDao {
Integer countCase(@Param("param") StatisticDto.SelCount param,@Param("inputStatus") byte inputStatus);
/**
*
* @param conditionList 没有时间条件
* @param conditionListDate 有时间条件
* @param inpatientId 对照组id
* @param testQuestionsId 测试题id
* @param hospitalization 住院号
* @param inputStatus 录入状态
* @param hospitalId 医院id
* @return
*/
StatisticVo.SelGroupList countAnalysis(List<PatientDto.Condition> conditionList, List<PatientDto.ConditionDate> conditionListDate, Long inpatientId, Long testQuestionsId,String hospitalization,Byte inputStatus,Long hospitalId);
/**
* 统计病例完成情况
* @param hospitalId 医院id

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

@ -29,6 +29,7 @@ public interface IPatientService {
StatisticVo.SelCountS countCase(StatisticDto.SelCount param, Long userId);
List<StatisticVo.SelGroupNum> countAnalysis(StatisticDto.SelBinLCount param, Long userId);
/**
* 统计病例完成情况
* @param param 搜索的条件

73
tcm/src/main/java/com/ccsens/tcm/service/PatientService.java

@ -5,15 +5,13 @@ import cn.hutool.core.lang.Snowflake;
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.PatientInformation;
import com.ccsens.tcm.bean.po.PatientRecord;
import com.ccsens.tcm.bean.po.PatientRecordExample;
import com.ccsens.tcm.bean.po.ReportCode;
import com.ccsens.tcm.bean.po.*;
import com.ccsens.tcm.bean.vo.ConRecVo;
import com.ccsens.tcm.bean.vo.PatientVo;
import com.ccsens.tcm.bean.vo.QuestionVo;
import com.ccsens.tcm.bean.vo.StatisticVo;
import com.ccsens.tcm.persist.dao.PatientDao;
import com.ccsens.tcm.persist.mapper.InpatientMapper;
import com.ccsens.tcm.persist.mapper.PatientInformationMapper;
import com.ccsens.tcm.persist.mapper.PatientRecordMapper;
import com.ccsens.tcm.persist.mapper.ReportCodeMapper;
@ -32,6 +30,8 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@ -51,6 +51,8 @@ public class PatientService implements IPatientService {
private PatientRecordMapper patientRecordMapper;
@Resource
private PatientDao patientDao;
@Resource
private InpatientMapper inpatientMapper;
@Override
public void savePatient(PatientDto.SavePatient param, Long userId) {
@ -62,28 +64,33 @@ public class PatientService implements IPatientService {
@Override
public void saveCaseMes(PatientDto.saveCaseMes param, Long userId) {
//获取上次的发病时间
//拿到这个患者的基本信息
PatientInformation patientInformation = patientInformationMapper.selectByPrimaryKey(param.getPatientId());
//发病时间的试题id
Long disease_time=Long.parseLong(String.valueOf(redisUtil.get(Constant.Redis.DISEASE_TIME)));
//Long disease_time=1355131504711442432L;
//升序查询,发病试题答案的数量
PatientRecordExample patientRecordExample1=new PatientRecordExample();
patientRecordExample1.setOrderByClause("rec_status");
patientRecordExample1.createCriteria().andPatientIdEqualTo(param.getPatientId()).andTestQuestionsIdEqualTo(disease_time).andRecStatusEqualTo((byte)0);
List<PatientRecord> patientRecordList = patientRecordMapper.selectByExample(patientRecordExample1);
Date onsetTime=null;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//获取上次的发病时间
if(patientRecordList.size()>0){
//有病发试题的情况
try {
onsetTime=format.parse(patientRecordList.get(0).getContents().trim());
} catch (ParseException e) {
PatientInformation patientInformation = patientInformationMapper.selectByPrimaryKey(param.getPatientId());
onsetTime=patientInformation.getCreatedAt();
e.printStackTrace();
}
}else {
//没有病发试题的情况
PatientInformation patientInformation = patientInformationMapper.selectByPrimaryKey(param.getPatientId());
onsetTime=patientInformation.getCreatedAt();
}
//试题只需要记录3次的 9 和30 算分界限 <9 =0 ;<30 =14 ; >30 =90 记录2次的 270 算分界线 <270 算180 ,>270 算365
int one=9;
int two=30;
@ -93,26 +100,30 @@ public class PatientService implements IPatientService {
int three=270;
int threeFront=180;
int threeAfter=365;
//试题只需要记录2次的
//是否需要去修改基本信息表中的录入状态
Boolean update=false;
//先查看这个患者的需要的记录次数,在下面的这个对照组对象中呢
Inpatient inpatient = inpatientMapper.selectByPrimaryKey(patientInformation.getInpatientId());
//下面是对试题进行提交
if(param.getList().size()>0) {
for (int i = 0; i < param.getList().size(); i++) {
//先查询试题id,查看需要记录的次数
ReportCode reportCode = reportCodeMapper.selectByPrimaryKey(param.getList().get(i).getTestQuestionsId());
// //先查询试题id,查看试题需要记录的次数
// ReportCode reportCode = reportCodeMapper.selectByPrimaryKey(param.getList().get(i).getTestQuestionsId());
//生成一个患者记录表的实例,并且赋值
PatientRecord patientRecord=new PatientRecord();
BeanUtils.copyProperties(param.getList().get(i),patientRecord);
patientRecord.setPatientId(param.getPatientId());
if(param.getList().get(i).getPatientRecordId()!=null){
//患者记录表的id
patientRecord.setId(param.getList().get(i).getPatientRecordId());
}
patientRecord.setUserId(userId);
if(reportCode.getReportType()==(byte)0){
if(inpatient.getCollectionNum()==1){
//试题只需要记录一次的
patientRecord.setCollectTime(0);
}else if(reportCode.getReportType()==(byte)1){
}else if(inpatient.getCollectionNum()==3){
//需要记录三次的
//算出时间差
int cha=timeDifference(patientRecord.getTimeSlot(),onsetTime);
if(cha<one){
@ -126,7 +137,7 @@ public class PatientService implements IPatientService {
patientRecord.setCollectTime(twoAfter);
}
}else if(reportCode.getReportType()==(byte)2){
}else if(inpatient.getCollectionNum()==2){
//试题需要记录两次的
int cha=timeDifference(patientRecord.getTimeSlot(),onsetTime);
if(cha<three){
@ -139,13 +150,26 @@ public class PatientService implements IPatientService {
if(patientRecord.getId()!=null){
//更新
patientRecordMapper.updateByPrimaryKeySelective(patientRecord);
}else {
//添加
patientRecord.setId(snowflake.nextId());
patientRecordMapper.insertSelective(patientRecord);
update=true;
}
}
}
//根据获取的发病时间答案数和需要搜集次数以及本次是需要更新,还是插入答案 , 来做修改基本信息中的录入状态
if (update){
if(patientRecordList.size()+1<inpatient.getCollectionNum()){
//数据搜集中
patientInformation.setInputStatus((byte)1);
}else if(patientRecordList.size()+1==inpatient.getCollectionNum()){
patientInformation.setInputStatus((byte)2);
}
patientInformationMapper.updateByPrimaryKeySelective(patientInformation);
}
}
@Override
@ -214,6 +238,21 @@ public class PatientService implements IPatientService {
return selCountS;
}
@Override
public List<StatisticVo.SelGroupNum> countAnalysis(StatisticDto.SelBinLCount param, Long userId) {
List<StatisticVo.SelGroupNum> selGroupNumsList= new ArrayList<StatisticVo.SelGroupNum>();
if(param.getInpatientId()!=null && param.getInpatientId().length==0)
return selGroupNumsList;
for (int i = 0; i < param.getInpatientId().length; i++) {
StatisticVo.SelGroupNum selGroupNum =new StatisticVo.SelGroupNum();
StatisticVo.SelGroupList selGroupList= patientDao.countAnalysis(param.getConditionList(),param.getConditionListDate(),param.getInpatientId()[i],param.getTestQuestionsId(),param.getHospitalization(),param.getInputStatus(),param.getHospitalId());
selGroupNum.setInpatientId(param.getInpatientId()[i]);
selGroupNum.getList().add(selGroupList);
selGroupNumsList.add(selGroupNum);
}
return selGroupNumsList;
}
/**
* 换算时间差 返回两个时间 之间差几天要是小于1天按照1的算要是大于1的话小于2的话说的是秒啊按照2的算,进一法啊
* @param bigDate 大时间

160
tcm/src/main/resources/mapper_dao/PatientDao.xml

@ -50,38 +50,62 @@
t_patient_information tpi left join t_inpatient ti on ti.rec_status=0 and ti.id=tpi.inpatient_id
WHERE
tpi.rec_status = 0
AND tpi.id IN (
SELECT DISTINCT
( t.patient_id )
FROM
(
<trim suffixOverrides="INTERSECT">
<foreach collection="conditionList" item="item">
SELECT
tpr.patient_id
FROM
t_patient_record tpr
WHERE
tpr.rec_status = 0
AND tpr.test_questions_id = #{item.testQuestionsId}
AND tpr.contents LIKE concat('%',#{item.contents},'%')
INTERSECT
</foreach>
<foreach collection="conditionListDate" item="item1">
SELECT
tpr.patient_id
<if test="hospitalId!=null and hospitalId !=0 ">
and tpi.hospital_id=#{hospitalId}
</if>
<if test="hospitalization!=null and hospitalization!=''">
and tpi.hospitalization like concat('%',#{hospitalization},'%')
</if>
<if test="inpatientId !=null and inpatientId!=0">
and tpi.inpatient_id=#{inpatientId}
</if>
<if test="inputStatus !=null">
and tpi.input_status=#{inputStatus}
</if>
<if test="(conditionList!=null and conditionList.size()!=0 ) or (conditionListDate != null and conditionListDate.size() !=0 )">
and tpi.id IN (
SELECT DISTINCT
( t.patient_id )
FROM
t_patient_record tpr
WHERE
tpr.rec_status = 0
AND tpr.test_questions_id = #{item1.testQuestionsId}
AND tpr.contents &gt; #{item1.startTime}
AND tpr.contents &lt; #{item1.endTime}
INTERSECT
</foreach>
</trim>
) t
)
(
<trim suffixOverrides="INTERSECT">
<if test="conditionList!=null and conditionList.size()!=0 ">
<foreach collection="conditionList" item="item">
SELECT
tpr.patient_id
FROM
t_patient_record tpr
WHERE
tpr.rec_status = 0
AND tpr.test_questions_id = #{item.testQuestionsId}
<if test="item.contents!=null and item.contents!=''">
AND tpr.contents LIKE concat('%',#{item.contents},'%')
</if>
INTERSECT
</foreach>
</if>
<if test="conditionListDate != null and conditionListDate.size() !=0 ">
<foreach collection="conditionListDate" item="item1">
SELECT
tpr.patient_id
FROM
t_patient_record tpr
WHERE
tpr.rec_status = 0
AND tpr.test_questions_id = #{item1.testQuestionsId}
<if test="item1.startTime!=null and item1.startTime!=''">
AND tpr.contents &gt; #{item1.startTime}
</if>
<if test="item1.endTime!=null and item1.endTime!=''">
AND tpr.contents &lt; #{item1.endTime}
</if>
INTERSECT
</foreach>
</if>
</trim>
) t
)
</if>
</select>
<select id="selPatientInformationList" resultType="com.ccsens.tcm.bean.vo.PatientVo$SelPatient">
SELECT
@ -130,6 +154,80 @@
and tpi.update_at &lt; #{param.endDate}
</if>
</select>
<select id="countAnalysis" resultType="com.ccsens.tcm.bean.vo.StatisticVo$SelGroupList">
select if(LOCATE('其他'),'其他',tpr.contents) as content,count(*) as nums from t_patient_information tpi left join t_patient_record tpr on tpi.id=tpr.patient_id and tpr.rec_status=0
where tpi.rec_status=0
<if test="testQuestionsId!=null and testQuestionsId!=0">
and tpr.test_questions_id=#{testQuestionsId}
</if>
and tpi.id in (
SELECT
tpi.id
FROM
t_patient_information tpi left join t_inpatient ti on ti.rec_status=0 and ti.id=tpi.inpatient_id
WHERE
tpi.rec_status = 0
<if test="hospitalId!=null and hospitalId !=0 ">
and tpi.hospital_id=#{hospitalId}
</if>
<if test="hospitalization!=null and hospitalization!=''">
and tpi.hospitalization like concat('%',#{hospitalization},'%')
</if>
<if test="inpatientId !=null and inpatientId!=0">
and tpi.inpatient_id=#{inpatientId}
</if>
<if test="inputStatus !=null">
and tpi.input_status=#{inputStatus}
</if>
<if test="(conditionList!=null and conditionList.size()!=0 ) or (conditionListDate != null and conditionListDate.size() !=0 )">
and tpi.id IN (
SELECT DISTINCT
( t.patient_id )
FROM
(
<trim suffixOverrides="INTERSECT">
<if test="conditionList!=null and conditionList.size()!=0 ">
<foreach collection="conditionList" item="item">
SELECT
tpr.patient_id
FROM
t_patient_record tpr
WHERE
tpr.rec_status = 0
AND tpr.test_questions_id = #{item.testQuestionsId}
<if test="item.contents!=null and item.contents!=''">
AND tpr.contents LIKE concat('%',#{item.contents},'%')
</if>
INTERSECT
</foreach>
</if>
<if test="conditionListDate != null and conditionListDate.size() !=0 ">
<foreach collection="conditionListDate" item="item1">
SELECT
tpr.patient_id
FROM
t_patient_record tpr
WHERE
tpr.rec_status = 0
AND tpr.test_questions_id = #{item1.testQuestionsId}
<if test="item1.startTime!=null and item1.startTime!=''">
AND tpr.contents &gt; #{item1.startTime}
</if>
<if test="item1.endTime!=null and item1.endTime!=''">
AND tpr.contents &lt; #{item1.endTime}
</if>
INTERSECT
</foreach>
</if>
</trim>
) t
)
</if>
)
<if test="testQuestionsId!=null">
group by content
</if>
</select>
<select id="statisticsComplete" resultType="com.ccsens.tcm.bean.vo.StatisticVo$StatisticsComplete">
SELECT
MAX(CASE t.input_status WHEN 0 THEN nums ELSE 0 END ) unfinished,

Loading…
Cancel
Save