diff --git a/tcm/src/main/java/com/ccsens/tcm/api/PatientController.java b/tcm/src/main/java/com/ccsens/tcm/api/PatientController.java index 8335267a..376559f6 100644 --- a/tcm/src/main/java/com/ccsens/tcm/api/PatientController.java +++ b/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> selPatientMesList(@ApiParam @Validated @RequestBody QueryDto params) { - log.info("添加患者病例信息:{}",params); + log.info("通过搜索条件查询病例信息:{}",params); PageInfo 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> selSearchCriteriaList() { List selSearchCriteriaList= patientService.selSearchCriteriaList(); - log.info("通过查询搜索条件"); + log.info("查询搜索条件"); return JsonResponse.newInstance().ok(selSearchCriteriaList); } diff --git a/tcm/src/main/java/com/ccsens/tcm/api/StatisticalAnalysisController.java b/tcm/src/main/java/com/ccsens/tcm/api/StatisticalAnalysisController.java index 1fdf90fb..23f71a8f 100644 --- a/tcm/src/main/java/com/ccsens/tcm/api/StatisticalAnalysisController.java +++ b/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> countAnalysis(@ApiParam @Validated @RequestBody QueryDto params) { + log.info("病例分析参数:{}", params); + List selGroupNum = patientService.countAnalysis(params.getParam(), params.getUserId()); + log.info("病例分析调用完成"); + return JsonResponse.newInstance().ok(selGroupNum); + } @MustLogin @ApiOperation(value = "统计病例的完成情况", notes = "zy:") 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 26d7c502..c00db0e1 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 @@ -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 conditionList; @ApiModelProperty("搜索条件集合,是包含时间格式的条件") diff --git a/tcm/src/main/java/com/ccsens/tcm/bean/dto/StatisticDto.java b/tcm/src/main/java/com/ccsens/tcm/bean/dto/StatisticDto.java index 14e0098d..9bbac284 100644 --- a/tcm/src/main/java/com/ccsens/tcm/bean/dto/StatisticDto.java +++ b/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 conditionList; + @ApiModelProperty("搜索条件集合,是包含时间格式的条件") + private List 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("统计病例完成情况的查询条件") diff --git a/tcm/src/main/java/com/ccsens/tcm/bean/vo/StatisticVo.java b/tcm/src/main/java/com/ccsens/tcm/bean/vo/StatisticVo.java index ccf36e79..2b3511de 100644 --- a/tcm/src/main/java/com/ccsens/tcm/bean/vo/StatisticVo.java +++ b/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 list; } @Data @ApiModel("病例分析详细数量") public static class SelGroupList{ - private String contents; + @ApiModelProperty("试题内容") + private String content; + @ApiModelProperty("数量") private Integer nums; } 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 3b16e917..462f764f 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 @@ -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 conditionList, List conditionListDate, Long inpatientId, Long testQuestionsId,String hospitalization,Byte inputStatus,Long hospitalId); /** * 统计病例完成情况 * @param hospitalId 医院id 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 7c1a6c72..04ab68ee 100644 --- a/tcm/src/main/java/com/ccsens/tcm/service/IPatientService.java +++ b/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 countAnalysis(StatisticDto.SelBinLCount param, Long userId); /** * 统计病例完成情况 * @param param 搜索的条件 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 eb12cfdf..5099115b 100644 --- a/tcm/src/main/java/com/ccsens/tcm/service/PatientService.java +++ b/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 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 countAnalysis(StatisticDto.SelBinLCount param, Long userId) { + List selGroupNumsList= new ArrayList(); + 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 大时间 diff --git a/tcm/src/main/resources/mapper_dao/PatientDao.xml b/tcm/src/main/resources/mapper_dao/PatientDao.xml index 1f640b30..1f7a6eb7 100644 --- a/tcm/src/main/resources/mapper_dao/PatientDao.xml +++ b/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 - ( - - - 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 - - - SELECT - tpr.patient_id + + and tpi.hospital_id=#{hospitalId} + + + and tpi.hospitalization like concat('%',#{hospitalization},'%') + + + and tpi.inpatient_id=#{inpatientId} + + + and tpi.input_status=#{inputStatus} + + + 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 > #{item1.startTime} - AND tpr.contents < #{item1.endTime} - INTERSECT - - - ) t - ) + ( + + + + 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 + + + + + SELECT + tpr.patient_id + FROM + t_patient_record tpr + WHERE + tpr.rec_status = 0 + AND tpr.test_questions_id = #{item1.testQuestionsId} + + AND tpr.contents > #{item1.startTime} + + + AND tpr.contents < #{item1.endTime} + + INTERSECT + + + + ) t + ) + +