|  | @ -78,6 +78,10 @@ public class DeviceService {
 | 
	
		
			
				|  |  |     private BaseSleepNightRecordDao nightRecord;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private BasePatientOutBedDao outBedDao;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private BaseSleepPlanDetailDao sleepPlanDetailDao;
 | 
	
		
			
				|  |  |     @Autowired
 | 
	
		
			
				|  |  |     private BaseSleepPlanDao sleepPlanDao;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取爱牵挂管理员cookie
 | 
	
	
		
			
				|  | @ -361,13 +365,9 @@ public class DeviceService {
 | 
	
		
			
				|  |  |                     patientHealthIndex.setRecordDate(recordDate);
 | 
	
		
			
				|  |  |                     patientHealthIndex.setSortDate(recordDate);
 | 
	
		
			
				|  |  |                     patientHealthIndex.setCzrq(new Date());
 | 
	
		
			
				|  |  |                     if (heartrate >= theshold_heartrate_h || heartrate <= theshold_heartrate_l) {
 | 
	
		
			
				|  |  |                         patientHealthIndex.setStatus(1);
 | 
	
		
			
				|  |  |                     } else {
 | 
	
		
			
				|  |  |                         patientHealthIndex.setStatus(0);
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     patientHealthIndex.setStatus(0);
 | 
	
		
			
				|  |  |                     patientHealthIndex.setDel("1");
 | 
	
		
			
				|  |  |                     healthIndexDao.save(patientHealthIndex);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                     SystemMessageDO messageDO = new SystemMessageDO();
 | 
	
		
			
				|  |  |                     String typeName = "您有新的心率测量记录。心率:" + patientHealthIndex.getValue1() + "次/min";
 | 
	
	
		
			
				|  | @ -397,6 +397,9 @@ public class DeviceService {
 | 
	
		
			
				|  |  |                     String content_notice = null;
 | 
	
		
			
				|  |  |                     for (int i=0;i<errorIndex.size();i++){
 | 
	
		
			
				|  |  |                         com.alibaba.fastjson.JSONObject tmp = errorIndex.getJSONObject(i);
 | 
	
		
			
				|  |  |                         if (0!=tmp.getInteger("error")){
 | 
	
		
			
				|  |  |                             patientHealthIndex.setStatus(1);
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         if (1 == tmp.getInteger("error")){
 | 
	
		
			
				|  |  |                             content_notice += tmp.getString("indexName")+"、";
 | 
	
		
			
				|  |  |                         }
 | 
	
	
		
			
				|  | @ -406,6 +409,7 @@ public class DeviceService {
 | 
	
		
			
				|  |  |                         message.put("content_notice","您的key1过高,请注意饮食,尽量食用少油少盐食物".replace("key1",content_notice));
 | 
	
		
			
				|  |  |                         messageDO.setContent("您的key1过高,请注意饮食,尽量食用少油少盐食物".replace("key1",content_notice));
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     healthIndexDao.save(patientHealthIndex);
 | 
	
		
			
				|  |  |                     systemMessageDao.save(messageDO);
 | 
	
		
			
				|  |  |                     imUtil.sendPatientSystemMessage(messageDO.getReceiver(),JSON.toJSONString(message,SerializerFeature.WriteMapNullValue));
 | 
	
		
			
				|  |  | 
 | 
	
	
		
			
				|  | @ -445,14 +449,8 @@ public class DeviceService {
 | 
	
		
			
				|  |  |                     patientHealthIndex.setRecordDate(recordDate);
 | 
	
		
			
				|  |  |                     patientHealthIndex.setSortDate(recordDate);
 | 
	
		
			
				|  |  |                     patientHealthIndex.setCzrq(new Date());
 | 
	
		
			
				|  |  |                     if (sbp>=sbp_h||dbp<=dbp_l){
 | 
	
		
			
				|  |  |                         patientHealthIndex.setStatus(1);
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     else {
 | 
	
		
			
				|  |  |                         patientHealthIndex.setStatus(0);
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     patientHealthIndex.setStatus(0);
 | 
	
		
			
				|  |  |                     patientHealthIndex.setDel("1");
 | 
	
		
			
				|  |  |                     healthIndexDao.save(patientHealthIndex);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                     SystemMessageDO messageDO = new SystemMessageDO();
 | 
	
		
			
				|  |  |                     String typeName = "您有新的血压测量记录:收缩压:"+patientHealthIndex.getValue1()+"mmHg,收缩压:"
 | 
	
	
		
			
				|  | @ -481,6 +479,9 @@ public class DeviceService {
 | 
	
		
			
				|  |  |                     String content_notice = "";
 | 
	
		
			
				|  |  |                     for (int i=0;i<errorIndex.size();i++){
 | 
	
		
			
				|  |  |                         com.alibaba.fastjson.JSONObject tmp = errorIndex.getJSONObject(i);
 | 
	
		
			
				|  |  |                         if (0!=tmp.getInteger("error")){
 | 
	
		
			
				|  |  |                             patientHealthIndex.setStatus(1);
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         if (1 == tmp.getInteger("error")){
 | 
	
		
			
				|  |  |                             content_notice += tmp.getString("indexName")+"、";
 | 
	
		
			
				|  |  |                         }
 | 
	
	
		
			
				|  | @ -490,6 +491,8 @@ public class DeviceService {
 | 
	
		
			
				|  |  |                         message.put("content_notice","您的key1过高,请注意饮食,尽量食用少油少盐食物".replace("key1",content_notice));
 | 
	
		
			
				|  |  |                         messageDO.setContent("您的key1过高,请注意饮食,尽量食用少油少盐食物".replace("key1",content_notice));
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                     healthIndexDao.save(patientHealthIndex);
 | 
	
		
			
				|  |  |                     systemMessageDao.save(messageDO);
 | 
	
		
			
				|  |  |                     imUtil.sendPatientSystemMessage(messageDO.getReceiver(),JSON.toJSONString(message,SerializerFeature.WriteMapNullValue));
 | 
	
		
			
				|  |  |                 }
 | 
	
	
		
			
				|  | @ -553,86 +556,201 @@ public class DeviceService {
 | 
	
		
			
				|  |  |     public String bySleep(String device,String time_begin,String heartrate,String breath,String bed_status,String turn_over,String is_warn) {
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             if(StringUtils.isNotBlank(device)){
 | 
	
		
			
				|  |  |                 boolean orderCreate=false;
 | 
	
		
			
				|  |  |                 Integer upLongWarn=3; //起床预警时长
 | 
	
		
			
				|  |  |                 Integer siestaLongWarn=5;//午睡预警时长
 | 
	
		
			
				|  |  |                 Integer nightLongWarn=2;//起夜预警时长
 | 
	
		
			
				|  |  |                 List<DevicePatientDevice> devicePatientDeviceDos = patientDeviceDao.findByDeviceSn(device);
 | 
	
		
			
				|  |  |                 if (devicePatientDeviceDos.size()>0){
 | 
	
		
			
				|  |  |                     String patient = devicePatientDeviceDos.get(0).getUser();
 | 
	
		
			
				|  |  |                     //更新患者在床状态
 | 
	
		
			
				|  |  |                     updatePatientSleepStatus(device,patient,time_begin,bed_status);
 | 
	
		
			
				|  |  |                     //12点以后
 | 
	
		
			
				|  |  |                     Date bedIn = DateUtil.getDateStart();//入睡时间
 | 
	
		
			
				|  |  |                     Calendar today = Calendar.getInstance();
 | 
	
		
			
				|  |  |                     today.set(Calendar.HOUR_OF_DAY, 5);
 | 
	
		
			
				|  |  |                     today.set(Calendar.MINUTE, 59);
 | 
	
		
			
				|  |  |                     today.set(Calendar.SECOND, 59);
 | 
	
		
			
				|  |  |                     today.set(Calendar.MILLISECOND, 999);
 | 
	
		
			
				|  |  |                     Date bedUp = today.getTime();//起床时间
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                     Date timeDate = DateUtil.strToDate(time_begin);
 | 
	
		
			
				|  |  |                     Long timeDiffer = timeDate.getTime() - bedIn.getTime();
 | 
	
		
			
				|  |  |                     if (timeDiffer>0&&timeDate.before(bedUp)){ //起夜记录
 | 
	
		
			
				|  |  |                         BaseSleepNightRecord record = new BaseSleepNightRecord();
 | 
	
		
			
				|  |  |                         if ("0".equals(bed_status)){//离床
 | 
	
		
			
				|  |  |                             List<BaseSleepNightRecord> records = nightRecord.findBySnStaPaTime(device,patient,0,bedIn);
 | 
	
		
			
				|  |  |                             if (records.size()==0){
 | 
	
		
			
				|  |  |                                 record.setPatient(devicePatientDeviceDos.get(0).getUser());
 | 
	
		
			
				|  |  |                                 record.setDeviceSn(device);
 | 
	
		
			
				|  |  |                                 record.setStatus(0);
 | 
	
		
			
				|  |  |                                 record.setCreateTime(timeDate);
 | 
	
		
			
				|  |  |                                 nightRecord.save(record);
 | 
	
		
			
				|  |  |                             }else {//是否触发工单
 | 
	
		
			
				|  |  |                                 record = records.get(0);
 | 
	
		
			
				|  |  |                                 timeDiffer = timeDate.getTime()-record.getCreateTime().getTime();
 | 
	
		
			
				|  |  |                                 if (timeDiffer>1800*1000){//超过半小时 触发工单
 | 
	
		
			
				|  |  |                                     outBedOrder(records.get(0),devicePatientDeviceDos.get(0),patient,device,"起夜超时未回床");
 | 
	
		
			
				|  |  |                                     return null;
 | 
	
		
			
				|  |  |                     List<BaseSleepPlan> sleepPlans = sleepPlanDao.findByPatientAndDeviceSn(patient,device);
 | 
	
		
			
				|  |  |                     BaseSleepPlanDetail planDetail = new BaseSleepPlanDetail();
 | 
	
		
			
				|  |  |                     BaseSleepPlan sleepPlan= null;
 | 
	
		
			
				|  |  |                     if (sleepPlans.size()>0){
 | 
	
		
			
				|  |  |                         sleepPlan = sleepPlans.get(0);
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     if (null!=sleepPlan){
 | 
	
		
			
				|  |  |                         Date timeDate = DateUtil.strToDate(time_begin);//当前时间
 | 
	
		
			
				|  |  |                         Date bedUp = DateUtil.strToDate(DateUtil.getStringDateShort()+" "+sleepPlan.getGetUpTime()+":00");// 起床时间 起床前一小时内算为起床
 | 
	
		
			
				|  |  |                         if (timeDate.before(bedUp)){
 | 
	
		
			
				|  |  |                             bedUp = DateUtil.getNextDay1(bedUp,-1);
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         Date bedUpBegin = DateUtil.getNextMin(bedUp,-60);//起床时间 起床前一小时内算为起床
 | 
	
		
			
				|  |  |                         Date bedUpEnd = DateUtil.getNextMin(bedUp,60*3);//起床时间 起床后一小时内算为起床
 | 
	
		
			
				|  |  |                         boolean needSiesta=false;// 是否有午睡习惯
 | 
	
		
			
				|  |  |                         Date SiestaTime = null;// 午睡时间
 | 
	
		
			
				|  |  |                         Date SiestaBegin = null;// 午睡开始时间
 | 
	
		
			
				|  |  |                         if (StringUtils.isNotBlank(sleepPlan.getNapTime())){
 | 
	
		
			
				|  |  |                             needSiesta=true;
 | 
	
		
			
				|  |  |                             SiestaTime = DateUtil.strToDate(DateUtil.getStringDateShort()+" "+sleepPlan.getNapTime()+":00");
 | 
	
		
			
				|  |  |                             SiestaBegin = DateUtil.getNextMin(SiestaTime,-60);// 午睡开始时间
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         String inTime = sleepPlan.getNightRestTime();
 | 
	
		
			
				|  |  |                         Date bedIn = null;// 入睡时间
 | 
	
		
			
				|  |  |                         Date bedBegin = null;// 入睡开始时间
 | 
	
		
			
				|  |  |                         String dayTime = DateUtil.dateToStr(bedUp,DateUtil.YYYY_MM_DD);//监测日期
 | 
	
		
			
				|  |  |                         if (inTime.charAt(0)=='0') {
 | 
	
		
			
				|  |  |                             bedIn = DateUtil.strToDate(dayTime+" "+sleepPlan.getNightRestTime()+":00");
 | 
	
		
			
				|  |  |                             bedIn = DateUtil.getNextDay1(bedIn,1);
 | 
	
		
			
				|  |  |                         }else {
 | 
	
		
			
				|  |  |                             bedIn = DateUtil.strToDate(dayTime+" "+sleepPlan.getNightRestTime()+":00");
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         bedBegin = DateUtil.getNextMin(bedIn,-60*2);
 | 
	
		
			
				|  |  |                         List<BaseSleepPlanDetail> planDetails = sleepPlanDetailDao.findByDay(dayTime);
 | 
	
		
			
				|  |  |                         if (planDetails.size()>0){
 | 
	
		
			
				|  |  |                             planDetail = planDetails.get(0);
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         planDetail.setDay(dayTime);
 | 
	
		
			
				|  |  |                         planDetail.setPatient(patient);
 | 
	
		
			
				|  |  |                         planDetail.setDeviceSn(device);
 | 
	
		
			
				|  |  |                         /***起床***/
 | 
	
		
			
				|  |  |                         Long timeDiffer = timeDate.getTime() - bedUp.getTime();
 | 
	
		
			
				|  |  |                         if(DateUtil.isInArea(timeDate,bedUpBegin,bedUpEnd)){//起床时间内
 | 
	
		
			
				|  |  |                             if ("0".equals(bed_status)){//起床
 | 
	
		
			
				|  |  |                                 if (null==planDetail.getUpStatus()){
 | 
	
		
			
				|  |  |                                     planDetail.setUpStatus(1);
 | 
	
		
			
				|  |  |                                     planDetail.setUpTime(timeDate);
 | 
	
		
			
				|  |  |                                 }
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         if ("1".equals(bed_status)){//在床记录起夜时长
 | 
	
		
			
				|  |  |                             timeDiffer = bedUp.getTime()-timeDate.getTime();
 | 
	
		
			
				|  |  |                             if (timeDiffer>0){//6点之前入睡时间
 | 
	
		
			
				|  |  |                              List<BaseSleepNightRecord> records = nightRecord.findBySnStaPaTime(device,patient,0,bedIn);
 | 
	
		
			
				|  |  |                                 if (records.size()>0){//
 | 
	
		
			
				|  |  |                                     record = records.get(0);
 | 
	
		
			
				|  |  |                                     record.setStatus(1);
 | 
	
		
			
				|  |  |                                     record.setUpdateTime(timeDate);
 | 
	
		
			
				|  |  |                                     Date outDate = record.getCreateTime();
 | 
	
		
			
				|  |  |                                     timeDiffer = (timeDate.getTime() - outDate.getTime())/1000;
 | 
	
		
			
				|  |  |                                     record.setOutTime(timeDiffer+"");
 | 
	
		
			
				|  |  |                                     nightRecord.save(record);
 | 
	
		
			
				|  |  |                         else if (3600*upLongWarn*1000<timeDiffer&&timeDiffer<(3600*upLongWarn+600)*1000){//距离起床超过三个小时还在床
 | 
	
		
			
				|  |  |                             if ("1".equals(bed_status)){//还在床
 | 
	
		
			
				|  |  |                                 if (1==planDetail.getUpStatus()){}//起床后再次入睡超时未起床不触发
 | 
	
		
			
				|  |  |                                 else {
 | 
	
		
			
				|  |  |                                     if (null==planDetail.getUpStatus()){
 | 
	
		
			
				|  |  |                                         planDetail.setUpStatus(0);
 | 
	
		
			
				|  |  |                                         planDetail.setBedStatus(0);
 | 
	
		
			
				|  |  |                                         planDetail.setBreath(breath);
 | 
	
		
			
				|  |  |                                         planDetail.setHeartRate(heartrate);
 | 
	
		
			
				|  |  |                                         outBedOrder(null,devicePatientDeviceDos.get(0),patient,device,"超时未起床",JSON.toJSONStringWithDateFormat(planDetail,"yyyy-MM-dd HH:mm:ss",SerializerFeature.WriteMapNullValue));
 | 
	
		
			
				|  |  |                                         orderCreate=true;
 | 
	
		
			
				|  |  |                                     }
 | 
	
		
			
				|  |  |                                 }
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     else {
 | 
	
		
			
				|  |  |                         if ("1".equals(bed_status)){
 | 
	
		
			
				|  |  |                             timeDiffer = timeDate.getTime() - bedUp.getTime();
 | 
	
		
			
				|  |  |                             if (1800*1000<timeDiffer&&timeDiffer<3600*1000){//超过半小时未起床
 | 
	
		
			
				|  |  |                                 outBedOrder(null,devicePatientDeviceDos.get(0),patient,device,"超时未起床");
 | 
	
		
			
				|  |  |                                 return null;
 | 
	
		
			
				|  |  |                         /***午睡***/
 | 
	
		
			
				|  |  |                         if(needSiesta&&DateUtil.isInArea(timeDate,SiestaBegin,bedIn)){//午睡时段
 | 
	
		
			
				|  |  |                             if ("0".equals(bed_status)){
 | 
	
		
			
				|  |  |                                 if (null==planDetail.getSiestaStatus()){//超时未午睡午睡
 | 
	
		
			
				|  |  |                                     timeDiffer = timeDate.getTime() - SiestaTime.getTime();
 | 
	
		
			
				|  |  |                                     if (timeDiffer>3600*siestaLongWarn*1000){
 | 
	
		
			
				|  |  |                                         planDetail.setSiestaStatus(0);
 | 
	
		
			
				|  |  |                                         planDetail.setBedStatus(0);
 | 
	
		
			
				|  |  |                                         outBedOrder(null,devicePatientDeviceDos.get(0),patient,device,"超时未午睡",JSON.toJSONStringWithDateFormat(planDetail,"yyyy-MM-dd HH:mm:ss",SerializerFeature.WriteMapNullValue));
 | 
	
		
			
				|  |  |                                         orderCreate=true;
 | 
	
		
			
				|  |  |                                     }
 | 
	
		
			
				|  |  |                                 }
 | 
	
		
			
				|  |  |                                 else if(1 == planDetail.getSiestaStatus()&&null==planDetail.getSiestaTimeEnd()){//午睡起床
 | 
	
		
			
				|  |  |                                     planDetail.setSiestaTimeEnd(timeDate);
 | 
	
		
			
				|  |  |                                     timeDiffer = (planDetail.getSiestaTimeEnd().getTime()-planDetail.getSiestaTimeBegin().getTime())/1000;
 | 
	
		
			
				|  |  |                                     planDetail.setSiestaLong(timeDiffer+"");
 | 
	
		
			
				|  |  |                                 }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                             if ("1".equals(bed_status)){
 | 
	
		
			
				|  |  |                                 if (null==planDetail.getSiestaStatus()){
 | 
	
		
			
				|  |  |                                     planDetail.setSiestaStatus(1);
 | 
	
		
			
				|  |  |                                     planDetail.setSiestaTimeBegin(timeDate);
 | 
	
		
			
				|  |  |                                 }
 | 
	
		
			
				|  |  |                                 else if(1==planDetail.getSiestaStatus()&&null==planDetail.getSiestaTimeEnd()){
 | 
	
		
			
				|  |  |                                     timeDiffer = timeDate.getTime() - planDetail.getSiestaTimeBegin().getTime();
 | 
	
		
			
				|  |  |                                     if(3600*siestaLongWarn*1000<timeDiffer&&timeDiffer<(3600*siestaLongWarn+600)*1000){//午睡超时未起床
 | 
	
		
			
				|  |  |                                         planDetail.setBedStatus(0);
 | 
	
		
			
				|  |  |                                         planDetail.setBreath(breath);
 | 
	
		
			
				|  |  |                                         planDetail.setHeartRate(heartrate);
 | 
	
		
			
				|  |  |                                         outBedOrder(null,devicePatientDeviceDos.get(0),patient,device,"午睡超时未起床",JSON.toJSONStringWithDateFormat(planDetail,"yyyy-MM-dd HH:mm:ss",SerializerFeature.WriteMapNullValue));
 | 
	
		
			
				|  |  |                                         orderCreate=true;
 | 
	
		
			
				|  |  |                                     }
 | 
	
		
			
				|  |  |                                 }
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     if ("1".equals(bed_status)){//呼吸 心率检测
 | 
	
		
			
				|  |  |                         Integer theshold_breath_h = 25;
 | 
	
		
			
				|  |  |                         Integer theshold_breath_l = 8;
 | 
	
		
			
				|  |  |                         Integer theshold_heartrate_h = 100;
 | 
	
		
			
				|  |  |                         Integer theshold_heartrate_l = 50;
 | 
	
		
			
				|  |  |                         if (StringUtils.isNotBlank(breath)){
 | 
	
		
			
				|  |  |                           Integer breath1 = Integer.parseInt(breath);
 | 
	
		
			
				|  |  |                           if (breath1>theshold_breath_h||breath1<theshold_breath_l){
 | 
	
		
			
				|  |  |                               outBedOrder(null,devicePatientDeviceDos.get(0),patient,device,"心率和呼吸频率异常");
 | 
	
		
			
				|  |  |                               return null;
 | 
	
		
			
				|  |  |                           }
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         if (StringUtils.isNotBlank(heartrate)){
 | 
	
		
			
				|  |  |                             Integer heartrate1 = Integer.parseInt(heartrate);
 | 
	
		
			
				|  |  |                             if (heartrate1>theshold_heartrate_h||theshold_heartrate_h<theshold_heartrate_l){
 | 
	
		
			
				|  |  |                                 outBedOrder(null,devicePatientDeviceDos.get(0),patient,device,"心率和呼吸频率异常");
 | 
	
		
			
				|  |  |                                 return null;
 | 
	
		
			
				|  |  |                         /**晚休***/
 | 
	
		
			
				|  |  |                         timeDiffer = timeDate.getTime() - bedBegin.getTime();
 | 
	
		
			
				|  |  |                         if (timeDiffer>0&&timeDate.after(bedBegin)){ //起夜记录
 | 
	
		
			
				|  |  |                             BaseSleepNightRecord record = new BaseSleepNightRecord();
 | 
	
		
			
				|  |  |                             if ("1".equals(bed_status)){
 | 
	
		
			
				|  |  |                                 if (null==planDetail.getInStatus()){
 | 
	
		
			
				|  |  |                                     planDetail.setInStatus(1);
 | 
	
		
			
				|  |  |                                     planDetail.setInTimeBegin(timeDate);
 | 
	
		
			
				|  |  |                                 }
 | 
	
		
			
				|  |  |                                 else if (1==planDetail.getInStatus()){//在床记录起夜时长
 | 
	
		
			
				|  |  |                                     List<BaseSleepNightRecord> records = nightRecord.findBySnStaPaTime(device,patient,0,bedIn);
 | 
	
		
			
				|  |  |                                     if (records.size()>0){//
 | 
	
		
			
				|  |  |                                         record = records.get(0);
 | 
	
		
			
				|  |  |                                         record.setStatus(1);
 | 
	
		
			
				|  |  |                                         record.setUpdateTime(timeDate);
 | 
	
		
			
				|  |  |                                         Date outDate = record.getCreateTime();
 | 
	
		
			
				|  |  |                                         timeDiffer = (timeDate.getTime() - outDate.getTime())/1000;
 | 
	
		
			
				|  |  |                                         record.setOutTime(timeDiffer+"");
 | 
	
		
			
				|  |  |                                         nightRecord.save(record);
 | 
	
		
			
				|  |  |                                     }
 | 
	
		
			
				|  |  |                                 }
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                             if ("0".equals(bed_status)){//离床
 | 
	
		
			
				|  |  |                                 List<BaseSleepNightRecord> records = nightRecord.findBySnStaPaTime(device,patient,0,bedIn);
 | 
	
		
			
				|  |  |                                 if(null==planDetail.getInStatus()){
 | 
	
		
			
				|  |  |                                     timeDiffer = timeDate.getTime() - bedIn.getTime();
 | 
	
		
			
				|  |  |                                     if (timeDiffer>3600*nightLongWarn*1000){
 | 
	
		
			
				|  |  |                                         planDetail.setInStatus(0);
 | 
	
		
			
				|  |  |                                         planDetail.setBedStatus(1);
 | 
	
		
			
				|  |  |                                         planDetail.setSleepNightRecordList(records);
 | 
	
		
			
				|  |  |                                         outBedOrder(null,devicePatientDeviceDos.get(0),patient,device,"超时未上床晚休",JSON.toJSONStringWithDateFormat(planDetail,"yyyy-MM-dd HH:mm:ss",SerializerFeature.WriteMapNullValue));
 | 
	
		
			
				|  |  |                                         orderCreate=true;
 | 
	
		
			
				|  |  |                                     }
 | 
	
		
			
				|  |  |                                 }
 | 
	
		
			
				|  |  |                                 else if (1==planDetail.getInStatus()){
 | 
	
		
			
				|  |  |                                     if (records.size()==0){
 | 
	
		
			
				|  |  |                                         record.setPatient(devicePatientDeviceDos.get(0).getUser());
 | 
	
		
			
				|  |  |                                         record.setDeviceSn(device);
 | 
	
		
			
				|  |  |                                         record.setStatus(0);
 | 
	
		
			
				|  |  |                                         record.setDay(DateUtil.dateToStr(bedUp,DateUtil.YYYY_MM_DD));
 | 
	
		
			
				|  |  |                                         record.setCreateTime(timeDate);
 | 
	
		
			
				|  |  |                                         nightRecord.save(record);
 | 
	
		
			
				|  |  |                                     }else {//是否触发工单
 | 
	
		
			
				|  |  |                                         record = records.get(0);
 | 
	
		
			
				|  |  |                                         timeDiffer = timeDate.getTime()-record.getCreateTime().getTime();
 | 
	
		
			
				|  |  |                                         if (timeDiffer>3600*nightLongWarn*1000){//超过2未回床小时 触发工单
 | 
	
		
			
				|  |  |                                             planDetail.setSleepNightRecordList(records);
 | 
	
		
			
				|  |  |                                             planDetail.setBedStatus(0);
 | 
	
		
			
				|  |  |                                             outBedOrder(records.get(0),devicePatientDeviceDos.get(0),patient,device,"起夜超时未回床",JSON.toJSONStringWithDateFormat(planDetail,"yyyy-MM-dd HH:mm:ss",SerializerFeature.WriteMapNullValue));
 | 
	
		
			
				|  |  |                                             orderCreate=true;
 | 
	
		
			
				|  |  |                                         }
 | 
	
		
			
				|  |  |                                     }
 | 
	
		
			
				|  |  |                                 }
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                         sleepPlanDetailDao.save(planDetail);
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  |                     //更新患者在床状态
 | 
	
		
			
				|  |  |                     updatePatientSleepStatus(device,patient,time_begin,bed_status);
 | 
	
		
			
				|  |  |                     if (!orderCreate){
 | 
	
		
			
				|  |  |                         if ("1".equals(bed_status)){//呼吸 心率检测
 | 
	
		
			
				|  |  |                             Integer theshold_breath_h = 25;
 | 
	
		
			
				|  |  |                             Integer theshold_breath_l = 8;
 | 
	
		
			
				|  |  |                             Integer theshold_heartrate_h = 100;
 | 
	
		
			
				|  |  |                             Integer theshold_heartrate_l = 50;
 | 
	
		
			
				|  |  |                             if (StringUtils.isNotBlank(breath)){
 | 
	
		
			
				|  |  |                                 Integer breath1 = Integer.parseInt(breath);
 | 
	
		
			
				|  |  |                                 if (breath1>theshold_breath_h||breath1<theshold_breath_l){
 | 
	
		
			
				|  |  |                                     planDetail.setBreath(breath);
 | 
	
		
			
				|  |  |                                     planDetail.setHeartRate(heartrate);
 | 
	
		
			
				|  |  |                                     planDetail.setBedStatus(1);
 | 
	
		
			
				|  |  |                                     outBedOrder(null,devicePatientDeviceDos.get(0),patient,device,"心率和呼吸频率异常",JSON.toJSONStringWithDateFormat(planDetail,"yyyy-MM-dd HH:mm:ss",SerializerFeature.WriteMapNullValue));
 | 
	
		
			
				|  |  |                                     return null;
 | 
	
		
			
				|  |  |                                 }
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  |                             if (StringUtils.isNotBlank(heartrate)){
 | 
	
		
			
				|  |  |                                 Integer heartrate1 = Integer.parseInt(heartrate);
 | 
	
		
			
				|  |  |                                 if (heartrate1>theshold_heartrate_h||theshold_heartrate_h<theshold_heartrate_l){
 | 
	
		
			
				|  |  |                                     planDetail.setBreath(breath);
 | 
	
		
			
				|  |  |                                     planDetail.setHeartRate(heartrate);
 | 
	
		
			
				|  |  |                                     planDetail.setBedStatus(1);
 | 
	
		
			
				|  |  |                                     outBedOrder(null,devicePatientDeviceDos.get(0),patient,device,"心率和呼吸频率异常",JSON.toJSONStringWithDateFormat(planDetail,"yyyy-MM-dd HH:mm:ss",SerializerFeature.WriteMapNullValue));
 | 
	
		
			
				|  |  |                                     return null;
 | 
	
		
			
				|  |  |                                 }
 | 
	
		
			
				|  |  |                             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                         }
 | 
	
		
			
				|  |  |                     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |                 }
 | 
	
	
		
			
				|  | @ -643,7 +761,7 @@ public class DeviceService {
 | 
	
		
			
				|  |  |         return null;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public void outBedOrder(BaseSleepNightRecord record,DevicePatientDevice patientDevice,String patient ,String device,String serverName)throws Exception{
 | 
	
		
			
				|  |  |     public void outBedOrder(BaseSleepNightRecord record,DevicePatientDevice patientDevice,String patient ,String device,String serverName,String warnInfo)throws Exception{
 | 
	
		
			
				|  |  |         // //夜间十二点 起床半小时后未回床 触发安防工单
 | 
	
		
			
				|  |  |             BasePatientDO patientDO = patientDao.findById(patient);
 | 
	
		
			
				|  |  |             if(null!=patientDO){
 | 
	
	
		
			
				|  | @ -677,6 +795,7 @@ public class DeviceService {
 | 
	
		
			
				|  |  |                     jsonObject.put("serveLon",lng);
 | 
	
		
			
				|  |  |                     jsonObject.put("topicItem","preventOutOfBed");
 | 
	
		
			
				|  |  |                     jsonObject.put("deviceSn",device);
 | 
	
		
			
				|  |  |                     jsonObject.put("warnInfo",warnInfo);
 | 
	
		
			
				|  |  |                     JSONObject jsonObjectParam = new JSONObject();
 | 
	
		
			
				|  |  |                     jsonObjectParam.put("order", jsonObject);
 | 
	
		
			
				|  |  |                     map.put("jsonData", jsonObjectParam.toJSONString());
 |