|
@ -5,15 +5,9 @@ import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.alibaba.fastjson.serializer.SerializerFeature;
|
|
|
import com.yihu.jw.care.config.AqgConfig;
|
|
|
import com.yihu.jw.care.dao.device.BaseSleepDeviceReportDao;
|
|
|
import com.yihu.jw.care.dao.device.DevicePatientHealthIndexDao;
|
|
|
import com.yihu.jw.care.dao.device.DeviceSosLogDao;
|
|
|
import com.yihu.jw.care.dao.device.PatientDeviceDao;
|
|
|
import com.yihu.jw.care.dao.device.*;
|
|
|
import com.yihu.jw.entity.base.patient.BasePatientDO;
|
|
|
import com.yihu.jw.entity.care.device.BaseSleepDeviceReport;
|
|
|
import com.yihu.jw.entity.care.device.DevicePatientHealthIndex;
|
|
|
import com.yihu.jw.entity.care.device.DevicePatientDevice;
|
|
|
import com.yihu.jw.entity.care.device.DeviceSosLogDO;
|
|
|
import com.yihu.jw.entity.care.device.*;
|
|
|
import com.yihu.jw.entity.hospital.message.SystemMessageDO;
|
|
|
import com.yihu.jw.entity.util.AesEncryptUtils;
|
|
|
import com.yihu.jw.hospital.message.dao.SystemMessageDao;
|
|
@ -80,6 +74,10 @@ public class DeviceService {
|
|
|
private ImUtil imUtil;
|
|
|
@Autowired
|
|
|
private BaseSleepDeviceReportDao sleepDeviceReportDao;
|
|
|
@Autowired
|
|
|
private BaseSleepNightRecordDao nightRecord;
|
|
|
@Autowired
|
|
|
private BasePatientOutBedDao outBedDao;
|
|
|
|
|
|
/**
|
|
|
* 获取爱牵挂管理员cookie
|
|
@ -121,12 +119,12 @@ public class DeviceService {
|
|
|
* 柏颐sos 接收
|
|
|
* @param imei 15位设备唯一序号
|
|
|
* @param time_begin 发生时间YYYY-MM-DD HH:mm:SS
|
|
|
* @param heartrate 心率 int
|
|
|
* @param city 城市 String
|
|
|
* @param address 地址 String
|
|
|
* @param lon 经度 double
|
|
|
* @param lat 纬度 double
|
|
|
* @param type 类型 0:Gps定位; 1:基站定位 String
|
|
|
* @param //heartrate 心率 int
|
|
|
* @param //city 城市 String
|
|
|
* @param //address 地址 String
|
|
|
* @param //lon 经度 double
|
|
|
* @param //lat 纬度 double
|
|
|
* @param //type 类型 0:Gps定位; 1:基站定位 String
|
|
|
*/
|
|
|
@Async
|
|
|
public void aqgsos(String imei,String label_mac,String time_begin, HttpServletRequest request) {
|
|
@ -241,8 +239,8 @@ public class DeviceService {
|
|
|
* @param type type=1 SOS,type=2 fall,type=3 new 新成员加入 ,type=4 电子围栏触发, type=5 设备低电,type=6 环境音
|
|
|
* @param deviceid 15位设备唯一序号
|
|
|
* @param communityid 机构ID
|
|
|
* @param url String 环境音下载地址 只有环境音(type=6)为必填,其他type都为非必填
|
|
|
* @param name String 设备名称
|
|
|
* @param //url String 环境音下载地址 只有环境音(type=6)为必填,其他type都为非必填
|
|
|
* @param //name String 设备名称
|
|
|
*/
|
|
|
|
|
|
@Async
|
|
@ -552,67 +550,176 @@ public class DeviceService {
|
|
|
* @param is_warn
|
|
|
*/
|
|
|
@Async
|
|
|
public void bySleep(String device,String time_begin,String heartrate,String breath,String turn_over,String is_warn) {
|
|
|
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)){
|
|
|
List<DevicePatientDevice> devicePatientDeviceDos = patientDeviceDao.findByDeviceSn(device);
|
|
|
if (devicePatientDeviceDos.size()>0){
|
|
|
if ("1".equals(is_warn)){//触发安防工单
|
|
|
BasePatientDO patientDO = patientDao.findById(devicePatientDeviceDos.get(0).getUser());
|
|
|
if(null!=patientDO){
|
|
|
String sql ="select DISTINCT pack.org_code,pack.org_name\n" +
|
|
|
" from base_service_package_sign_record sr,base_service_package_record pr,base_service_package_item item ,base_service_package pack\n" +
|
|
|
"where pr.patient = '"+patientDO.getId()+"' and sr.id = pr.sign_id and pr.service_package_id = item.service_package_id \tand item.`code`='preventOutOfBed' and item.service_package_id = pack.id \n" +
|
|
|
" and pack.del=1";
|
|
|
List<Map<String,Object>> sqlResult = jdbcTemplate.queryForList(sql);
|
|
|
if (sqlResult.size()>0){
|
|
|
Map<String, String> json = null;
|
|
|
String address= devicePatientDeviceDos.get(0).getSosAddress();
|
|
|
if (StringUtils.isNotBlank(devicePatientDeviceDos.get(0).getSosAddress())) {
|
|
|
json = LatitudeUtils.getGeocoderLatitude(address.replace("G.", "").replace("(糖友网)", "").replace("(高友网)", ""));
|
|
|
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;
|
|
|
}
|
|
|
String lat=null;
|
|
|
String lng=null;
|
|
|
if (json != null) {
|
|
|
lat= json.get("lat".toString());
|
|
|
lng = json.get("lng".toString());
|
|
|
}
|
|
|
}
|
|
|
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);
|
|
|
}
|
|
|
Map<String,Object> map = new HashMap();
|
|
|
String url = cloudCareUrl+"/cloudCare/noLogin/security/createOrder";
|
|
|
JSONObject jsonObject = new JSONObject();
|
|
|
jsonObject.put("patient",patientDO.getId());
|
|
|
jsonObject.put("patientName",patientDO.getName());
|
|
|
jsonObject.put("patientPhone",patientDO.getMobile());
|
|
|
jsonObject.put("serveDesc","疑似发生意外");
|
|
|
jsonObject.put("hospital",sqlResult.get(0).get("org_code"));
|
|
|
jsonObject.put("serveAddress",address.replace(" ",""));
|
|
|
jsonObject.put("serveLat",lat);
|
|
|
jsonObject.put("serveLon",lng);
|
|
|
jsonObject.put("topicItem","preventOutOfBed");
|
|
|
jsonObject.put("deviceSn",device);
|
|
|
JSONObject jsonObjectParam = new JSONObject();
|
|
|
jsonObjectParam.put("order", jsonObject);
|
|
|
map.put("jsonData", jsonObjectParam.toJSONString());
|
|
|
map.put("orderSource", 5);
|
|
|
map.put("warnStr", "疑似发生意外");
|
|
|
|
|
|
String content = com.alibaba.fastjson.JSONObject.toJSONString(map);
|
|
|
String postParams = AesEncryptUtils.agEncrypt(content);
|
|
|
String response = httpClientUtil.postBodyRawForm(url,postParams);
|
|
|
JSONObject result = com.alibaba.fastjson.JSONObject.parseObject(response);
|
|
|
JSONObject jsonObjectData =JSONObject.parseObject(AesEncryptUtils.agDecrypt(result.getString("data")));
|
|
|
System.out.println(jsonObjectData.toJSONString());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
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 ("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;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
public void outBedOrder(BaseSleepNightRecord record,DevicePatientDevice patientDevice,String patient ,String device,String serverName)throws Exception{
|
|
|
// //夜间十二点 起床半小时后未回床 触发安防工单
|
|
|
BasePatientDO patientDO = patientDao.findById(patient);
|
|
|
if(null!=patientDO){
|
|
|
String sql ="select DISTINCT pack.org_code,pack.org_name\n" +
|
|
|
" from base_service_package_sign_record sr,base_service_package_record pr,base_service_package_item item ,base_service_package pack\n" +
|
|
|
"where pr.patient = '"+patientDO.getId()+"' and sr.id = pr.sign_id and pr.service_package_id = item.service_package_id \tand item.`code`='preventOutOfBed' and item.service_package_id = pack.id \n" +
|
|
|
" and pack.del=1";
|
|
|
List<Map<String,Object>> sqlResult = jdbcTemplate.queryForList(sql);
|
|
|
if (sqlResult.size()>0){
|
|
|
Map<String, String> json = null;
|
|
|
String address= patientDevice.getSosAddress();
|
|
|
if (StringUtils.isNotBlank(patientDevice.getSosAddress())) {
|
|
|
json = LatitudeUtils.getGeocoderLatitude(address.replace("G.", "").replace("(糖友网)", "").replace("(高友网)", ""));
|
|
|
}
|
|
|
String lat=null;
|
|
|
String lng=null;
|
|
|
if (json != null) {
|
|
|
lat= json.get("lat".toString());
|
|
|
lng = json.get("lng".toString());
|
|
|
}
|
|
|
Map<String,Object> map = new HashMap();
|
|
|
String url = cloudCareUrl+"/cloudCare/noLogin/security/createOrder";
|
|
|
JSONObject jsonObject = new JSONObject();
|
|
|
jsonObject.put("patient",patientDO.getId());
|
|
|
jsonObject.put("patientName",patientDO.getName());
|
|
|
jsonObject.put("patientPhone",patientDO.getMobile());
|
|
|
jsonObject.put("serveDesc",serverName);
|
|
|
jsonObject.put("hospital",sqlResult.get(0).get("org_code"));
|
|
|
jsonObject.put("serveAddress",address.replace(" ",""));
|
|
|
jsonObject.put("serveLat",lat);
|
|
|
jsonObject.put("serveLon",lng);
|
|
|
jsonObject.put("topicItem","preventOutOfBed");
|
|
|
jsonObject.put("deviceSn",device);
|
|
|
JSONObject jsonObjectParam = new JSONObject();
|
|
|
jsonObjectParam.put("order", jsonObject);
|
|
|
map.put("jsonData", jsonObjectParam.toJSONString());
|
|
|
map.put("orderSource", 5);
|
|
|
map.put("warnStr", serverName);
|
|
|
|
|
|
String content = com.alibaba.fastjson.JSONObject.toJSONString(map);
|
|
|
String postParams = AesEncryptUtils.agEncrypt(content);
|
|
|
String response = httpClientUtil.postBodyRawForm(url,postParams);
|
|
|
JSONObject result = com.alibaba.fastjson.JSONObject.parseObject(response);
|
|
|
JSONObject jsonObjectData =JSONObject.parseObject(AesEncryptUtils.agDecrypt(result.getString("data")));
|
|
|
System.out.println(jsonObjectData.toJSONString());
|
|
|
}
|
|
|
}
|
|
|
if (null!=record){
|
|
|
record.setStatus(-1);
|
|
|
nightRecord.save(record);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void updatePatientSleepStatus(String device,String patient,String time_begin,String bed_status){
|
|
|
Integer status = Integer.parseInt(bed_status);
|
|
|
BasePatientOutBed outBed = outBedDao.findByPatientAndDeviceSnAndStatus(patient,device,0);
|
|
|
switch (status){
|
|
|
case 0://离床
|
|
|
if (null==outBed){
|
|
|
outBed = new BasePatientOutBed();
|
|
|
outBed.setPatient(patient);
|
|
|
outBed.setDeviceSn(device);
|
|
|
outBed.setStatus(status);
|
|
|
outBed.setCreateTime(DateUtil.strToDate(time_begin,DateUtil.YYYY_MM_DD_HH_MM_SS));
|
|
|
outBedDao.save(outBed);
|
|
|
}
|
|
|
break;
|
|
|
case 1://在床
|
|
|
if (null!=outBed){
|
|
|
outBed.setStatus(status);
|
|
|
outBed.setCreateTime(DateUtil.strToDate(time_begin,DateUtil.YYYY_MM_DD_HH_MM_SS));
|
|
|
outBedDao.save(outBed);
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Async
|
|
|
public void bySleepReport(String device,String dateStr,String fallasleep,String sleepTime,String restTime,String awakeTime,String lightTime,
|