package com.neu.his.cloud.service.pms.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.neu.his.cloud.service.pms.dto.dms.DmsCaseHistoryResult; import com.neu.his.cloud.service.pms.dto.pms.PmsDiagnosisPatientListResult; import com.neu.his.cloud.service.pms.dto.pms.PmsDiagnosisPatientResult; import com.neu.his.cloud.service.pms.dto.pms.PmsPatientResult; import com.neu.his.cloud.service.pms.mapper.*; import com.neu.his.cloud.service.pms.model.*; import com.neu.his.cloud.service.pms.service.PmsPatientService; import com.neu.his.cloud.service.pms.util.AgeStrUtil; import com.neu.his.cloud.service.pms.util.DateUtil; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; @Service public class PmsPatientServiceImpl implements PmsPatientService { @Autowired private PmsPatientMapper pmsPatientMapper; @Autowired private SmsStaffMapper smsStaffMapper; @Autowired private DmsRegistrationMapper dmsRegistrationMapper; @Autowired private SmsSkdMapper smsSkdMapper; @Autowired private DmsCaseHistoryMapper dmsCaseHistoryMapper; //1.调用PmsPatientDao根据身份证号查询病人信息,并封装 //2. 如果病人信息不存在,则直接返回 @Override public PmsPatientResult selectPatientByIdNo(String identificationNo) { int count;//用于记录是否存在该病人 PmsPatientExample example = new PmsPatientExample(); example.createCriteria().andIdentificationNoEqualTo(identificationNo); List<PmsPatient> pmsPatientList = pmsPatientMapper.selectByExample(example); if(pmsPatientList.size()>0){//如果存在该病人 PmsPatientResult pmsPatientResult = new PmsPatientResult(); pmsPatientResult.setName(pmsPatientList.get(0).getName()); //处理年龄 Date dateOfBirth = pmsPatientList.get(0).getDateOfBirth(); String age = AgeStrUtil.getAgeStr(dateOfBirth); pmsPatientResult.setAge(age); pmsPatientResult.setDateOfBirth(pmsPatientList.get(0).getDateOfBirth()); pmsPatientResult.setGender(pmsPatientList.get(0).getGender()); pmsPatientResult.setHomeAddress(pmsPatientList.get(0).getHomeAddress()); pmsPatientResult.setPhoneNo(pmsPatientList.get(0).getPhoneNo()); pmsPatientResult.setMedicalRecordNo(pmsPatientList.get(0).getMedicalRecordNo()); return pmsPatientResult; } return null; } //1.传入医生id // 2.先根据医生id查找部门id,再从dms_registration中根据bind_status(0)、attendance_date、dept_id、status(1)查找出科室待诊患者 // 3. // 3.1先通过午别、时间、医生id在表sms_skd中查找出sms_skd的id // 3.1.从dms_registration中根据bind_status(1)、attendance_date、skd_id查找出分配了的患者信息,并根据status分类(1,2,3) /** * 描述: * <p>author:王思阳 * <p>author:赵煜 修改mysql5.7中比较时间错误 * 修改空指针异常 * 修改通过无别筛选列表错误 */ @Override public PmsDiagnosisPatientListResult refreshPatient(Long staffId) { //根据医生id查找部门id SmsStaffExample smsStaffExample = new SmsStaffExample(); smsStaffExample.createCriteria().andIdEqualTo(staffId); List<SmsStaff> smsStaffList = smsStaffMapper.selectByExample(smsStaffExample); Long deptId = smsStaffList.get(0).getDeptId(); System.err.println("deptId:"+deptId); //从dms_registration中根据bind_status(0)、attendance_date、dept_id、status(1)查找出科室待诊患者 DmsRegistrationExample dmsRegistrationExample = new DmsRegistrationExample(); Date date = new Date();//注意:这里的时间判断可能有问题 //时间 对于科室等待患者,列出今天和昨天的(防止12点出故障) Date beforeAday= DateUtil.getDateBefore(date,1); System.err.println("date:"+date); System.err.println("beforeAday:"+beforeAday); dmsRegistrationExample.createCriteria().andBindStatusEqualTo(0).andDeptIdEqualTo(deptId).andStatusEqualTo(1).andAttendanceDateBetween(beforeAday,date); List<DmsRegistration> dmsRegistrationList = dmsRegistrationMapper.selectByExample(dmsRegistrationExample); System.err.println("dmsRegistrationList.size: " + dmsRegistrationList.size()); //映射List<DmsRegistration>到List<PmsDiagnosisPatientResult> List<PmsDiagnosisPatientResult> deptWaitList = new ArrayList<>();//科室待诊列表 for (DmsRegistration dmsRegistration : dmsRegistrationList) { PmsDiagnosisPatientResult pmsDiagnosisPatientResult = new PmsDiagnosisPatientResult(); pmsDiagnosisPatientResult.setPatientId(dmsRegistration.getPatientId()); pmsDiagnosisPatientResult.setPatientAge(dmsRegistration.getPatientAgeStr()); pmsDiagnosisPatientResult.setRegistrationId(dmsRegistration.getId()); pmsDiagnosisPatientResult.setRegistrationStatus(dmsRegistration.getStatus()); //从PmsPatient中查询其他字段并封装 PmsPatientExample pmsPatientExample = new PmsPatientExample(); pmsPatientExample.createCriteria().andIdEqualTo(dmsRegistration.getPatientId()); List<PmsPatient> pmsPatientList = pmsPatientMapper.selectByExample(pmsPatientExample); pmsDiagnosisPatientResult.setPatientName(pmsPatientList.get(0).getName()); pmsDiagnosisPatientResult.setPatientHomeAdress(pmsPatientList.get(0).getHomeAddress()); pmsDiagnosisPatientResult.setPatientGender(pmsPatientList.get(0).getGender()); pmsDiagnosisPatientResult.setPatientMedicalRecordNo(pmsPatientList.get(0).getMedicalRecordNo()); deptWaitList.add(pmsDiagnosisPatientResult);//加入List<PmsDiagnosisPatientResult> } System.err.println("deptWaitList.size: " + deptWaitList.size()); //获取当前午别 SimpleDateFormat df = new SimpleDateFormat("HH"); String hourStr = df.format(date); //通过午别、时间、医生id在表sms_skd中查找出sms_skd的id SmsSkdExample smsSkdExample = new SmsSkdExample(); System.err.println("staffId:"+staffId); smsSkdExample.createCriteria().andStaffIdEqualTo(staffId).andDateEqualTo(DateUtil.getDate(DateUtil.setMilliSecond(date,0))); List<SmsSkd> smsSkdList = smsSkdMapper.selectByExample(smsSkdExample); System.err.println(smsSkdList==null?"smsSkdList=null":"smsSkdList!=null"); System.err.println(smsSkdList.size()); if(CollectionUtil.isEmpty(smsSkdList)){ return null; } List<Long> idList = new ArrayList<>(); for(SmsSkd skd : smsSkdList){ idList.add(skd.getId()); } //从dms_registration中根据bind_status(1)、attendance_date、skd_id查找出分配了的患者信息,并根据status分类(1,2,3) DmsRegistrationExample dmsRegistrationExample1 = new DmsRegistrationExample(); //使用DateUtil只截取日期部分 dmsRegistrationExample1.createCriteria().andBindStatusEqualTo(1).andAttendanceDateEqualTo(DateUtil.getDate(DateUtil.setMilliSecond(date,0))).andSkdIdIn(idList); ; List<DmsRegistration> dmsRegistrationList1 = dmsRegistrationMapper.selectByExample(dmsRegistrationExample1); List<PmsDiagnosisPatientResult> personalWaitList = new ArrayList<>();//个人待诊 List<PmsDiagnosisPatientResult> personalDuringList = new ArrayList<>();//个人诊中 List<PmsDiagnosisPatientResult> personalEndList = new ArrayList<>();//个人已诊 for (DmsRegistration dmsRegistration:dmsRegistrationList1) { PmsDiagnosisPatientResult pmsDiagnosisPatientResult = new PmsDiagnosisPatientResult(); pmsDiagnosisPatientResult.setPatientId(dmsRegistration.getPatientId()); pmsDiagnosisPatientResult.setPatientAge(dmsRegistration.getPatientAgeStr()); pmsDiagnosisPatientResult.setRegistrationId(dmsRegistration.getId()); pmsDiagnosisPatientResult.setRegistrationStatus(dmsRegistration.getStatus()); //从PmsPatient中查询其他字段并封装 PmsPatientExample pmsPatientExample = new PmsPatientExample(); pmsPatientExample.createCriteria().andIdEqualTo(dmsRegistration.getPatientId()); List<PmsPatient> pmsPatientList = pmsPatientMapper.selectByExample(pmsPatientExample); pmsDiagnosisPatientResult.setPatientName(pmsPatientList.get(0).getName()); pmsDiagnosisPatientResult.setPatientHomeAdress(pmsPatientList.get(0).getHomeAddress()); pmsDiagnosisPatientResult.setPatientGender(pmsPatientList.get(0).getGender()); pmsDiagnosisPatientResult.setPatientMedicalRecordNo(pmsPatientList.get(0).getMedicalRecordNo()); if (pmsDiagnosisPatientResult.getRegistrationStatus() == 1){//待诊 personalWaitList.add(pmsDiagnosisPatientResult); } else if (pmsDiagnosisPatientResult.getRegistrationStatus() == 2){//诊中 personalDuringList.add(pmsDiagnosisPatientResult); } else if (pmsDiagnosisPatientResult.getRegistrationStatus() == 3){//诊毕 personalEndList.add(pmsDiagnosisPatientResult); } } //封装PmsDiagnosisPatientListResult对象并返回 PmsDiagnosisPatientListResult pmsDiagnosisPatientListResult = new PmsDiagnosisPatientListResult(); pmsDiagnosisPatientListResult.setDeptWaitList(deptWaitList); pmsDiagnosisPatientListResult.setPersonalWaitList(personalWaitList); pmsDiagnosisPatientListResult.setPersonalDuringList(personalDuringList); pmsDiagnosisPatientListResult.setPersonalEndList(personalEndList); return pmsDiagnosisPatientListResult; } //1. 传入dms_registration的id和医生id //2. 先根据医生id、时间、午别查找sms_skd的id //3.根据dms_registration的id修改dms_registration中bind_status为1,并添加skd_id @Override public int bindPatient(Long registrationId, Long staffId) { //根据医生id、时间、午别查找sms_skd的id //获取当前午别 Date date = new Date(); SimpleDateFormat df = new SimpleDateFormat("HH"); String hourStr = df.format(date); int hour = Integer.parseInt(hourStr); Integer noon;//午别 if (hour <= 12){ noon = 0;//上午 } else { noon = 1;//下午 } SmsSkdExample smsSkdExample = new SmsSkdExample(); smsSkdExample.createCriteria().andStaffIdEqualTo(staffId).andDateEqualTo(DateUtil.getDate(DateUtil.setMilliSecond(date,0))).andNoonEqualTo(noon); /* 时间判断问题 */ //smsSkdExample.createCriteria().andStaffIdEqualTo(staffId).andNoonEqualTo(noon); List<SmsSkd> smsSkdList = smsSkdMapper.selectByExample(smsSkdExample); Long skdId = smsSkdList.get(0).getId(); if (skdId == null){ return 0; } //根据dms_registration的id修改dms_registration中bind_status为1,并添加skd_id DmsRegistrationExample dmsRegistrationExample = new DmsRegistrationExample(); dmsRegistrationExample.createCriteria().andIdEqualTo(registrationId); DmsRegistration dmsRegistration = new DmsRegistration(); dmsRegistration.setBindStatus(1); dmsRegistration.setSkdId(skdId); dmsRegistrationMapper.updateByExampleSelective(dmsRegistration,dmsRegistrationExample); return 1; } //1.调用PmsPatientService的updateDiagnosisSatus 根据挂号id修改status状态为2 //2.调用PmsPatientService的selectCaseHistoryByPatient() @Override public DmsCaseHistoryResult startDiagnosis(Long registrationId) { updateDiagnosisStatus(registrationId,2); DmsCaseHistoryResult dmsCaseHistoryResult = selectCaseHistoryByPatient(registrationId); return dmsCaseHistoryResult; } //修改状态通用方法 @Override public int updateDiagnosisStatus(Long registrationId, Integer status) { DmsRegistration dmsRegistration = new DmsRegistration(); dmsRegistration.setId(registrationId); dmsRegistration.setStatus(status); dmsRegistrationMapper.updateByPrimaryKeySelective(dmsRegistration); return 1; } //1.根据registrationId查找出patientId //2.根据patientId查询历史病历(status为2) @Override public DmsCaseHistoryResult selectCaseHistoryByPatient(Long registrationId) { DmsRegistration dmsRegistration = dmsRegistrationMapper.selectByPrimaryKey(registrationId); Long patientId = dmsRegistration.getPatientId(); //List<DmsCaseHistory> dmsCaseHistoryList = new ArrayList<>(); DmsCaseHistoryExample dmsCaseHistoryExample = new DmsCaseHistoryExample(); dmsCaseHistoryExample.createCriteria().andPatientIdEqualTo(patientId).andStatusEqualTo(2); dmsCaseHistoryExample.setOrderByClause("create_time desc");//按创建时间降序 List<DmsCaseHistory> dmsCaseHistoryList = dmsCaseHistoryMapper.selectByExample(dmsCaseHistoryExample); DmsCaseHistoryResult dmsCaseHistoryResult = new DmsCaseHistoryResult(); dmsCaseHistoryResult.setDmsCaseHistoryList(dmsCaseHistoryList); return dmsCaseHistoryResult; } @Override public PmsPatientResult patientLogin(String identificationNo, String medicalRecordNo) { PmsPatientExample pmsPatientExample=new PmsPatientExample(); pmsPatientExample.createCriteria().andIdentificationNoEqualTo(identificationNo).andMedicalRecordNoEqualTo(medicalRecordNo); List<PmsPatient> pmsPatientList = pmsPatientMapper.selectByExample(pmsPatientExample); if(CollectionUtil.isEmpty(pmsPatientList)||pmsPatientList.size()>1){ return null; } //数据正常的情况下,只会返回一个病人 PmsPatientResult pmsPatientResult=new PmsPatientResult(); BeanUtils.copyProperties(pmsPatientList.get(0),pmsPatientResult); return pmsPatientResult; } }