liubing 3 rokov pred
rodič
commit
28382adfb8
23 zmenil súbory, kde vykonal 1000 pridanie a 436 odobranie
  1. 26 2
      common/common-entity/sql记录
  2. 1 1
      common/common-entity/src/main/java/com/yihu/jw/entity/care/device/BasePatientOutBed.java
  3. 10 1
      common/common-entity/src/main/java/com/yihu/jw/entity/care/device/BaseSleepNightRecord.java
  4. 3 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/device/BaseSleepPlan.java
  5. 191 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/device/BaseSleepPlanDetail.java
  6. 10 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/device/DevicePatientDevice.java
  7. 9 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/securitymonitoring/SecurityMonitoringOrderDO.java
  8. 19 0
      common/common-util/src/main/java/com/yihu/jw/util/date/DateUtil.java
  9. 2 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/device/DeviceDetailDao.java
  10. 0 10
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/assistance/EmergencyAssistanceEndpoint.java
  11. 1 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/device/DoctorHealthController.java
  12. 125 7
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/device/PadDeviceController.java
  13. 6 5
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/device/PatientHealthIndexService.java
  14. 7 3
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/patient/CarePatientService.java
  15. 1 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/ArchiveService.java
  16. 19 0
      svr/svr-cloud-device/src/main/java/com/yihu/jw/care/dao/device/BaseSleepPlanDao.java
  17. 16 0
      svr/svr-cloud-device/src/main/java/com/yihu/jw/care/dao/device/BaseSleepPlanDetailDao.java
  18. 17 0
      svr/svr-cloud-device/src/main/java/com/yihu/jw/care/endpoint/DeviceUploadController.java
  19. 84 84
      svr/svr-cloud-device/src/main/java/com/yihu/jw/care/endpoint/SocketClientTest.java
  20. 103 103
      svr/svr-cloud-device/src/main/java/com/yihu/jw/care/endpoint/SocketServerTest.java
  21. 151 151
      svr/svr-cloud-device/src/main/java/com/yihu/jw/care/endpoint/WebSocketServer.java
  22. 187 67
      svr/svr-cloud-device/src/main/java/com/yihu/jw/care/service/DeviceService.java
  23. 12 0
      svr/svr-cloud-device/src/main/java/com/yihu/jw/care/service/DeviceUploadService.java

+ 26 - 2
common/common-entity/sql记录

@ -1287,7 +1287,7 @@ CREATE TABLE `base_sleep_night_record` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='睡眠带起夜记录数据';
-- 20210818 lb
CREATE TABLE base_patient_out_bed (
CREATE TABLE base_sleep_patient_out_bed (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `patient` varchar(50) DEFAULT NULL COMMENT '居民id',
  `device_sn` varchar(50) DEFAULT NULL COMMENT '睡眠带sn',
@ -1352,4 +1352,28 @@ CREATE TABLE `base_hvdevice_sos_log` (
ALTER table `base`.`wlyy_devices` add column `device_type` tinyint(2) DEFAULT NULL COMMENT '设备种类 0健康设备 1安防设备'
-- 20210819
alter table wlyy_devices add COLUMN device_type TINYINT(2) default null COMMENT '设备种类 0健康设备 1安防设备';
alter table wlyy_patient_device add COLUMN device_type TINYINT(2) default null COMMENT '设备种类 0健康设备 1安防设备';
alter table wlyy_patient_device add COLUMN device_type TINYINT(2) default null COMMENT '设备种类 0健康设备 1安防设备';
-- 20210823
alter table base_sleep_night_record add COLUMN day varchar(50) DEFAULT NULL COMMENT '睡眠监控日期';
CREATE TABLE `base_sleep_plan_detail` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `patient` varchar(50) DEFAULT NULL COMMENT '居民id',
  `device_sn` varchar(50) DEFAULT NULL COMMENT '睡眠带sn',
  `day` varchar(50) DEFAULT NULL COMMENT '睡眠监控日期',
  `up_status` tinyint(2) DEFAULT NULL COMMENT '起床状态 0未起床 1起床',
  `up_time` timestamp NULL DEFAULT NULL COMMENT '起床时间',
  `siesta_status` tinyint(2) DEFAULT NULL COMMENT '午睡状态 0未入床 1已入床 2无午睡计划',
  `siesta_time_begin` timestamp NULL DEFAULT NULL COMMENT '午睡开始时间',
  `siesta_time_end` timestamp NULL DEFAULT NULL COMMENT '午睡结束时间',
  `siesta_long` varchar(10) DEFAULT NULL COMMENT '午睡时长 单位秒',
  `in_status` varchar(10) DEFAULT NULL COMMENT '睡觉状态 0未入床 1已入床',
  `in_time_begin` varchar(10) DEFAULT NULL COMMENT '夜眠开始时间',
  `in_time_end` varchar(10) DEFAULT NULL COMMENT '夜眠结束时间 ',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '创建日期',
  `update_time` timestamp NULL DEFAULT NULL COMMENT '更新日期',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='睡眠带监测计划详情';
-- 20210824
alter table base_security_monitoring_order add COLUMN warn_info varchar(255) DEFAULT NULL COMMENT '触发工单时信息如 烟雾心率等';

+ 1 - 1
common/common-entity/src/main/java/com/yihu/jw/entity/care/device/BasePatientOutBed.java

@ -11,7 +11,7 @@ import java.util.Date;
 * Created by Bing on 2021/8/18.
 */
@Entity
@Table(name="base_patient_out_bed")
@Table(name="base_sleep_patient_out_bed")
public class BasePatientOutBed extends IdEntity {
    private String patient ;
    private String deviceSn;

+ 10 - 1
common/common-entity/src/main/java/com/yihu/jw/entity/care/device/BaseSleepNightRecord.java

@ -15,8 +15,9 @@ import java.util.Date;
public class BaseSleepNightRecord extends IdEntity {
    private String patient ;
    private String deviceSn;
    private String outTime;//离床时长
    private String outTime;//离床时长 秒
    private Integer status;//是否回床 0否,1是
    private String day;//监控日期
    private Date createTime;// 创建日期 即起床时间
    private Date updateTime;// 更新日期
@ -52,6 +53,14 @@ public class BaseSleepNightRecord extends IdEntity {
        this.status = status;
    }
    public String getDay() {
        return day;
    }
    public void setDay(String day) {
        this.day = day;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getCreateTime() {
        return createTime;

+ 3 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/device/BaseSleepPlan.java

@ -5,7 +5,9 @@ import com.yihu.jw.entity.IdEntity;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.Date;
import java.util.List;
/***
 * @ClassName: BaseSleepPlan
@ -71,4 +73,5 @@ public class BaseSleepPlan extends IdEntity {
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}

+ 191 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/device/BaseSleepPlanDetail.java

@ -0,0 +1,191 @@
package com.yihu.jw.entity.care.device;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.IdEntity;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.Date;
import java.util.List;
/**
 * Created by Bing on 2021/8/23.
 */
@Entity
@Table(name="base_sleep_plan_detail")
public class BaseSleepPlanDetail extends IdEntity {
    private String  patient;
    private String  deviceSn;
    private String  day; //睡眠监控日期
    private Integer  upStatus; //起床状态 0未起床 1起床
    private Date  upTime; //起床时间
    private Integer  siestaStatus; //午睡状态 0未入床 1已入床
    private Date  siestaTimeBegin; //午睡开始时间
    private Date  siestaTimeEnd;  //午睡结束时间
    private String  siestaLong; //午睡时长 单位秒
    private Integer  inStatus; //睡觉状态 0未入床 1已入床,2无午睡计划
    private Date  inTimeBegin; //夜眠开始时间
    private Date  inTimeEnd; //夜眠结束时间
    private Date createTime;
    private Date  updateTime;
    private List<BaseSleepNightRecord> sleepNightRecordList;
    private String heartRate;
    private String breath;
    private Integer bedStatus;
    public String getPatient() {
        return patient;
    }
    public void setPatient(String patient) {
        this.patient = patient;
    }
    public String getDeviceSn() {
        return deviceSn;
    }
    public void setDeviceSn(String deviceSn) {
        this.deviceSn = deviceSn;
    }
    public String getDay() {
        return day;
    }
    public void setDay(String day) {
        this.day = day;
    }
    public Integer getUpStatus() {
        return upStatus;
    }
    public void setUpStatus(Integer upStatus) {
        this.upStatus = upStatus;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getUpTime() {
        return upTime;
    }
    public void setUpTime(Date upTime) {
        this.upTime = upTime;
    }
    public Integer getSiestaStatus() {
        return siestaStatus;
    }
    public void setSiestaStatus(Integer siestaStatus) {
        this.siestaStatus = siestaStatus;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getSiestaTimeBegin() {
        return siestaTimeBegin;
    }
    public void setSiestaTimeBegin(Date siestaTimeBegin) {
        this.siestaTimeBegin = siestaTimeBegin;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getSiestaTimeEnd() {
        return siestaTimeEnd;
    }
    public void setSiestaTimeEnd(Date siestaTimeEnd) {
        this.siestaTimeEnd = siestaTimeEnd;
    }
    public String getSiestaLong() {
        return siestaLong;
    }
    public void setSiestaLong(String siestaLong) {
        this.siestaLong = siestaLong;
    }
    public Integer getInStatus() {
        return inStatus;
    }
    public void setInStatus(Integer inStatus) {
        this.inStatus = inStatus;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getInTimeBegin() {
        return inTimeBegin;
    }
    public void setInTimeBegin(Date inTimeBegin) {
        this.inTimeBegin = inTimeBegin;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getInTimeEnd() {
        return inTimeEnd;
    }
    public void setInTimeEnd(Date inTimeEnd) {
        this.inTimeEnd = inTimeEnd;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
    @Transient
    public List<BaseSleepNightRecord> getSleepNightRecordList() {
        return sleepNightRecordList;
    }
    public void setSleepNightRecordList(List<BaseSleepNightRecord> sleepNightRecordList) {
        this.sleepNightRecordList = sleepNightRecordList;
    }
    @Transient
    public String getHeartRate() {
        return heartRate;
    }
    public void setHeartRate(String heartRate) {
        this.heartRate = heartRate;
    }
    @Transient
    public String getBreath() {
        return breath;
    }
    public void setBreath(String breath) {
        this.breath = breath;
    }
    @Transient
    public Integer getBedStatus() {
        return bedStatus;
    }
    public void setBedStatus(Integer bedStatus) {
        this.bedStatus = bedStatus;
    }
}

+ 10 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/device/DevicePatientDevice.java

@ -78,6 +78,8 @@ public class DevicePatientDevice extends IdEntity {
     */
    private String deviceImgUrl;
    private Integer deviceType;//设备种类 0健康设备 1安防设备
    @Column(name = "device_id")
    public Long getDeviceId() {
        return deviceId;
@ -328,4 +330,12 @@ public class DevicePatientDevice extends IdEntity {
    public void setOnlineStatus(Integer onlineStatus) {
        this.onlineStatus = onlineStatus;
    }
    public Integer getDeviceType() {
        return deviceType;
    }
    public void setDeviceType(Integer deviceType) {
        this.deviceType = deviceType;
    }
}

+ 9 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/securitymonitoring/SecurityMonitoringOrderDO.java

@ -323,6 +323,7 @@ public class SecurityMonitoringOrderDO extends UuidIdentityEntityWithOperator {
    private String topicItem;//安防工单所属专题 base_system_dict_entry表service_item
    private String sceneImg;//现场照片
    private String deviceSn;//设备sn  设备触发是才有该字段值
    private String warnInfo;//触发工单时信息如 烟雾心率等
    /**
     * 医生确认医生结束服务时间
@ -736,4 +737,12 @@ public class SecurityMonitoringOrderDO extends UuidIdentityEntityWithOperator {
    public void setDeviceSn(String deviceSn) {
        this.deviceSn = deviceSn;
    }
    public String getWarnInfo() {
        return warnInfo;
    }
    public void setWarnInfo(String warnInfo) {
        this.warnInfo = warnInfo;
    }
}

+ 19 - 0
common/common-util/src/main/java/com/yihu/jw/util/date/DateUtil.java

@ -1355,6 +1355,23 @@ public class DateUtil {
        return dateTime.substring(0, 10);
    }
    /**
     * 判断时间是否在某个区间内
     * @param time
     * @param begin
     * @param end
     * @return
     */
    public static boolean isInArea(Date time,Date begin,Date end) {
        Long beginTime = DateUtil.compareDateTime(time,begin);
        Long endTime = DateUtil.compareDateTime(time, end);
        if (beginTime > 0 && endTime < 0) {
            return true;
        } else {
            return false;
        }
    }
    /**
     *  返回 xx天XX小时XX分钟XX秒前
     * @param date1 当前时间
@ -1405,4 +1422,6 @@ public class DateUtil {
        return result.toString();
    }
}

+ 2 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/device/DeviceDetailDao.java

@ -17,6 +17,8 @@ public interface DeviceDetailDao extends PagingAndSortingRepository<DeviceDetail
    List<DeviceDetail> findByDeviceCode(String deviceCode);
    List<DeviceDetail> findBySim(String sim);
    @Query("select a from DeviceDetail a where a.deviceCode = ?1 and a.manufacturerCode = ?2")
    DeviceDetail findByDeviceCodeAndManufacturerCode(String deviceCode,String manufacturerCode);

+ 0 - 10
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/assistance/EmergencyAssistanceEndpoint.java

@ -318,16 +318,6 @@ public class EmergencyAssistanceEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "getMonitorUrl")
    @ApiOperation(value = "获取监控录像地址")
    public ObjEnvelop getMonitorUrl(@ApiParam(name="patient")@RequestParam(value = "patient")String patient){
        try {
            return null;
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @PostMapping("doctorSendMessageLog")
    @ApiOperation(value = "助老员紧急预警im发送消息日志")
    public ObjEnvelop doctorSendMessageLog(

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/device/DoctorHealthController.java

@ -337,7 +337,7 @@ public class DoctorHealthController extends BaseController {
	@RequestMapping(value = "handleHealthIndex",method = RequestMethod.POST)
	@ApiOperation("医生体征干预")
	public String handleHealthIndex(@ApiParam(name="ids")@RequestParam(value = "ids")Long[] ids) {
	public String handleHealthIndex(@ApiParam(name="user")@RequestParam(value = "user")String ids) {
		try {
			healthIndexService.handleHealthIndex(ids);
			return write(200, "处理成功");

+ 125 - 7
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/device/PadDeviceController.java

@ -2,7 +2,9 @@ package com.yihu.jw.care.endpoint.device;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.care.dao.device.DeviceDetailDao;
import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.care.endpoint.BaseController;
import com.yihu.jw.care.service.contacts.ContactsService;
@ -13,6 +15,7 @@ import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.sync.BaseSyncDataDO;
import com.yihu.jw.entity.care.device.DeviceDetail;
import com.yihu.jw.entity.care.device.BaseSleepPlan;
import com.yihu.jw.entity.care.device.DevicePatientDevice;
import com.yihu.jw.patient.dao.BasePatientDao;
@ -24,16 +27,19 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import jxl.Sheet;
import jxl.Workbook;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;
/***
 * @ClassName: PadDeviceController
@ -57,6 +63,9 @@ public class PadDeviceController extends BaseController {
    private BaseDoctorDao baseDoctorDao;
    @Autowired
    private ContactsService contactsService;
    @Autowired
    private DeviceDetailDao deviceDetailDao;
    /**
     * 设备列表获取
     *
@ -180,5 +189,114 @@ public class PadDeviceController extends BaseController {
        }
    }
    @RequestMapping(value = "/importDeviceFromExcel", produces = "application/json;charset=UTF-8",method = RequestMethod.POST)
    @ResponseBody
    public String importFromExcel(HttpServletRequest request,@ApiParam(value = "文件", required = true)
    @RequestParam(value = "file", required = true) MultipartFile file) {
        List errorLs = new ArrayList<>();
        List correctLs = new ArrayList<>();
        Map<String, String> errorMsgMap = new HashMap<>();
        List<String> deviceCodes = new ArrayList<>();
        try {
            request.setCharacterEncoding("UTF-8");
            InputStream inputStream = file.getInputStream();
            Workbook rwb = Workbook.getWorkbook(inputStream);
            Sheet[] sheets = rwb.getSheets();
            int rows;
            int row;
            String manufacturer=null;//厂商名称
            String deviceName; //设备名称
            String deviceModel; //设备型号
            String deviceCode;  //设备SN
            String sim;  //sim卡号
            String bindingCount; //单人{"1":"0"}  多人{"1":"0", "2":"0"}
            String deviceType; //设备种类  0健康设备 1安防设备
            Sheet sheet = sheets[0];    //第一张表
            rows = sheet.getRows();
            for (int j = 1; j < rows; j++) {
                if (sheet.getRow(j).length == 0) {
                    continue;
                }
                DeviceDetail deviceDetail = new DeviceDetail();
                row = j;
                manufacturer = sheet.getCell(0, row).getContents().trim();    //0 厂商名称
                deviceName = sheet.getCell(1, row).getContents().trim();  //1 设备名称
                deviceModel = sheet.getCell(2, row).getContents().trim();   //2 设备型号
                deviceCode = sheet.getCell(3, row).getContents().trim(); //3 设备SN
                sim = sheet.getCell(4, row).getContents().trim();  //4 sim卡号
                bindingCount = sheet.getCell(5, row).getContents().trim(); //5
                deviceType = sheet.getCell(6, row).getContents().trim(); //6 设备种类
                if (StringUtils.isBlank(deviceCode)){
                    continue;
                }
                if (deviceCodes.contains(deviceCode)){
                    errorMsgMap.put(deviceCode,"设备SN码重复");
                    continue;
                }
                deviceCodes.add(deviceCode);
                if (StringUtils.isBlank(manufacturer)){
                    errorMsgMap.put(deviceCode,"厂商名称不能为空");
                    continue;
                }
                if (StringUtils.isBlank(deviceName)){
                    errorMsgMap.put(deviceCode,"设备名称不能为空");
                    continue;
                }
                if (StringUtils.isBlank(deviceModel)){
                    errorMsgMap.put(deviceCode,"设备型号不能为空");
                    continue;
                }
                if (StringUtils.isBlank(bindingCount)){
                    errorMsgMap.put(deviceCode,"设备类型不能为空");
                    continue;
                }
                if (StringUtils.isBlank(deviceType)){
                    errorMsgMap.put(deviceCode,"设备种类不能为空");
                    continue;
                }else {
                    if ("健康设备".equals(deviceType)){
                        deviceType = "1";
                    }
                    else if ("安防设备".equals(deviceType)){
                        deviceType= "0";
                    }
                    else {
                        errorMsgMap.put(deviceCode,"不支持该设备种类");
                        continue;
                    }
                }
                if (deviceDetailDao.findByDeviceCode(deviceCode).size()>0){
                    errorMsgMap.put(deviceCode,"该设备SN码已存在");
                    continue;
                }
                if (deviceDetailDao.findBySim(sim).size()>0){
                    errorMsgMap.put(deviceCode,"该sim卡号已存在");
                    continue;
                }
                deviceDetail.setManufacturer(manufacturer);
                deviceDetail.setDeviceName(deviceName);
                deviceDetail.setDeviceModel(deviceModel);
                deviceDetail.setDeviceCode(deviceCode);
                deviceDetail.setSim(sim);
                deviceDetail.setBindingCount(bindingCount);
                deviceDetail.setDeviceType(Integer.parseInt(deviceType));
                correctLs.add(deviceDetail);
            }
            deviceDetailDao.save(correctLs);
            //包装导入结果(导入成功数量、错误对象集合)
            Map<String, Object> map = new HashMap<>();
            map.put("successNum", correctLs.size());
            map.put("failedNum", rows-1 - correctLs.size() );
            map.put("errorData", JSON.toJSONString(errorMsgMap, SerializerFeature.WriteMapNullValue));
            return write(200, "操作成功", "data", map);
        } catch (Exception e) {
            error(e);
            return error(-1, "操作失败!");
        }
    }
}

+ 6 - 5
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/device/PatientHealthIndexService.java

@ -1607,8 +1607,8 @@ public class PatientHealthIndexService extends BaseJpaService<DevicePatientHealt
    }
    public List<Map<String,Object>> getErrorHealthIndexPatients(String doctor){
        String sql = " select count(id),patient,photo,mobile,record_date from (\n" +
                "select idx.id,p.id patient,p.photo,DATE_FORMAT(idx.record_date,'%Y-%m-%d %H:%i:%S')record_date ,p.mobile from wlyy_patient_health_index idx,base_patient p " +
        String sql = " select count(id),patient,name,photo,mobile,record_date from (\n" +
                "select idx.id,p.id patient,p.name,p.photo,DATE_FORMAT(idx.record_date,'%Y-%m-%d %H:%i:%S')record_date ,p.mobile from wlyy_patient_health_index idx,base_patient p " +
                "where  idx.user = p.id and  status=1 and (manage_result=0 or manage_result is null)  and EXISTS ( " +
                " SELECT 1 from base_service_package_sign_record sr,base_service_package_record r ,base_team_member m where " +
                "idx.user = CONVERT(sr.patient USING utf8) and  sr.id = r.sign_id and sr.status=1 and   m.team_code = r.team_code  " +
@ -1619,14 +1619,15 @@ public class PatientHealthIndexService extends BaseJpaService<DevicePatientHealt
    }
    public List<Map<String,Object>> getErrorHealthIndexByPatients(String patient){
        String sql = " select *,cast(DATE_FORMAT(max(idx.record_date),'%Y-%m-%d %H:%i:%S') as char)record_date  from  wlyy_patient_health_index where user='"+patient+"' and  " +
        String sql = " select *,cast(DATE_FORMAT(max(idx.record_date),'%Y-%m-%d %H:%i:%S') as char)record_date  from  wlyy_patient_health_index idx where user='"+patient+"' and  " +
                "status=1 and (manage_result=0 or manage_result is null) ";
        List<Map<String,Object>> result = jdbcTemplate.queryForList(sql);
        return result;
    }
    @Transactional
    public void handleHealthIndex(Long[] id){
        patientHealthIndexDao.handleHealthIndex(id);
    public void handleHealthIndex(String id){
        String sql = " update wlyy_patient_health_index a set a.manageResult=1 where a.user='"+id+"' and  status=1 and (manage_result=0 or manage_result is null)  ";
        jdbcTemplate.execute(sql);
    }
}

+ 7 - 3
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/patient/CarePatientService.java

@ -249,17 +249,21 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
     */
    @Transactional(rollbackFor = Exception.class)
    public void updPatientLabel(String jsonData,String patientId) throws Exception{
        patientLabelDao.deleteByPatientAndLabelType(patientId,"2");
        JSONArray jsonArray = JSON.parseArray(jsonData);
        List<WlyyPatientLabelDO> labelDOList = new ArrayList<>();
        for (int i=0;i<jsonArray.size();i++){
            WlyyPatientLabelDO labelDO = JSONObject.parseObject(jsonArray.getJSONObject(i).toJSONString(), WlyyPatientLabelDO.class);
            labelDO.setPatient(patientId);
            labelDO.setCzrq(new Date());
            labelDO.setLabelType("2");
            if(StringUtils.isNotBlank(labelDO.getLabelType())){
                patientLabelDao.deleteByPatientAndLabelType(patientId,labelDO.getLabelType());
            }else {
                patientLabelDao.deleteByPatientAndLabelType(patientId,"2");
                labelDO.setLabelType("2");
            }
            labelDOList.add(labelDO);
        }
        patientLabelDao.save(labelDOList);
            patientLabelDao.save(labelDOList);
    }
    public Boolean updatePatientPw(String id,String pw,String orgPw){

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/ArchiveService.java

@ -81,7 +81,7 @@ public class ArchiveService extends BaseJpaService<ArchiveDO, ArchiveDao> {
    }
    public PageEnvelop<List<Map<String,Object>>> archiveList(String doctorId, int page, int size,Integer signStatus,String name){
        String sql = " select * from ( SELECT a.create_time,p.openid,p.idcard,p.mobile,p.name,p.sex,p.id,p.photo,CAST(a.sign_status AS char) sign_status ";
        String sql = " select * from ( SELECT a.create_time,p.openid,p.pad_imei padImei,p.idcard,p.mobile,p.name,p.sex,p.id,p.photo,CAST(a.sign_status AS char) sign_status ";
        String countSql = "SELECT count(*) from ( ";
        String filters = "from wlyy_archive a,base_patient p " +

+ 19 - 0
svr/svr-cloud-device/src/main/java/com/yihu/jw/care/dao/device/BaseSleepPlanDao.java

@ -0,0 +1,19 @@
package com.yihu.jw.care.dao.device;
import com.yihu.jw.entity.care.device.BaseSleepPlan;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/***
 * @ClassName: BaseSleepPlanDao
 * @Description:
 * @Auther: shi kejing
 * @Date: 2021/8/23 17:20
 */
public interface BaseSleepPlanDao extends PagingAndSortingRepository<BaseSleepPlan,Long>,
        JpaSpecificationExecutor<BaseSleepPlan> {
    List<BaseSleepPlan> findByPatientAndDeviceSn(String patient,String deviceSn);
}

+ 16 - 0
svr/svr-cloud-device/src/main/java/com/yihu/jw/care/dao/device/BaseSleepPlanDetailDao.java

@ -0,0 +1,16 @@
package com.yihu.jw.care.dao.device;
import com.yihu.jw.entity.care.device.BaseSleepPlanDetail;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Created by Bing on 2021/8/23.
 */
public interface BaseSleepPlanDetailDao extends PagingAndSortingRepository<BaseSleepPlanDetail,Long>,
        JpaSpecificationExecutor<BaseSleepPlanDetail> {
    List<BaseSleepPlanDetail> findByDay(String day);
}

+ 17 - 0
svr/svr-cloud-device/src/main/java/com/yihu/jw/care/endpoint/DeviceUploadController.java

@ -49,4 +49,21 @@ public class DeviceUploadController {
            return Result.error("Device data incoming failure!"+ex.getMessage());
        }
    }
    @ApiOperation("拐杖数据接收")
    @RequestMapping(value = "/cane_upload", produces = "application/json;charset=UTF-8", method = RequestMethod.POST)
    public Result uploadDevicesData(
            @ApiParam(value="message",name="message")
            @RequestParam(value = "message", required = true)String message)
    {
        try{
            logger.info("message="+message);
            return deviceUploadService.caneUpload(message);
        }
        catch (Exception ex)
        {
            return Result.error("Device data incoming failure!"+ex.getMessage());
        }
    }
}

+ 84 - 84
svr/svr-cloud-device/src/main/java/com/yihu/jw/care/endpoint/SocketClientTest.java

@ -1,84 +1,84 @@
package com.yihu.jw.care.endpoint;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
/***
 * @ClassName: SocketTest
 * @Description: scoket客户端
 * @Auther: shi kejing
 * @Date: 2021/8/20 11:00
 */
public class SocketClientTest {
    public static void main(String[] args) {
        SocketClientTest client=new SocketClientTest();
        client.startAction();
    }
    void readSocketInfo(BufferedReader reader){
        new Thread(new MyRuns(reader)).start();
    }
    class MyRuns implements Runnable{
        BufferedReader reader;
        public MyRuns(BufferedReader reader) {
            super();
            this.reader = reader;
        }
        public void run() {
            try {
                String lineString="";
                while( (lineString = reader.readLine())!=null ){
                    System.out.println(lineString);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    public void startAction(){
        Socket socket=null;
        BufferedReader reader=null;
        BufferedWriter writer=null;
        BufferedReader reader2=null;
        try {
            socket=new Socket("172.26.0.107", 9112);
            reader = new BufferedReader(new InputStreamReader(System.in));
            reader2=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            readSocketInfo(reader2);
            String lineString="";
            while(!(lineString=reader.readLine()).equals("exit")){
                writer.write(lineString+"\n");
                writer.flush();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (reader!=null) {
                    reader.close();
                }
                if (writer!=null) {
                    writer.close();
                }
                if (socket!=null) {
                    socket.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }
}
//package com.yihu.jw.care.endpoint;
//
//import java.io.BufferedReader;
//import java.io.BufferedWriter;
//import java.io.InputStreamReader;
//import java.io.OutputStreamWriter;
//import java.net.Socket;
//
///***
// * @ClassName: SocketTest
// * @Description: scoket客户端
// * @Auther: shi kejing
// * @Date: 2021/8/20 11:00
// */
//public class SocketClientTest {
//
//    public static void main(String[] args) {
//        SocketClientTest client=new SocketClientTest();
//        client.startAction();
//    }
//
//    void readSocketInfo(BufferedReader reader){
//        new Thread(new MyRuns(reader)).start();
//    }
//
//    class MyRuns implements Runnable{
//
//        BufferedReader reader;
//
//        public MyRuns(BufferedReader reader) {
//            super();
//            this.reader = reader;
//        }
//
//        public void run() {
//            try {
//                String lineString="";
//                while( (lineString = reader.readLine())!=null ){
//                    System.out.println(lineString);
//                }
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
//
//    }
//
//    public void startAction(){
//        Socket socket=null;
//        BufferedReader reader=null;
//        BufferedWriter writer=null;
//        BufferedReader reader2=null;
//        try {
//            socket=new Socket("172.26.0.107", 9112);
//            reader = new BufferedReader(new InputStreamReader(System.in));
//            reader2=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//            writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
//            readSocketInfo(reader2);
//            String lineString="";
//            while(!(lineString=reader.readLine()).equals("exit")){
//                writer.write(lineString+"\n");
//                writer.flush();
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            try {
//                if (reader!=null) {
//                    reader.close();
//                }
//                if (writer!=null) {
//                    writer.close();
//                }
//                if (socket!=null) {
//                    socket.close();
//                }
//            } catch (Exception e2) {
//                e2.printStackTrace();
//            }
//        }
//    }
//
//
//}

+ 103 - 103
svr/svr-cloud-device/src/main/java/com/yihu/jw/care/endpoint/SocketServerTest.java

@ -1,103 +1,103 @@
package com.yihu.jw.care.endpoint;
import com.tencentcloudapi.oceanus.v20190422.models.SystemResourceItem;
import com.yihu.jw.entity.util.SystemConfEntity;
import jdk.internal.cmm.SystemResourcePressureImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.convert.Property;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
/***
 * @ClassName: SocketServerTest
 * @Description: socket服务器端
 * @Auther: shi kejing
 * @Date: 2021/8/20 11:04
 */
@Component
public class SocketServerTest {
    private final static Logger logger = LoggerFactory.getLogger(SocketServerTest.class);
    public static void main(String[] args) {
        SocketServerTest st = new SocketServerTest();
        st.startAction();
    }
//    @PostConstruct
    public void startAction(){
        logger.info("服务端服务启动监听:");
        ServerSocket serverSocket=null;
        try {
            serverSocket=new ServerSocket(9112);  //端口号
            logger.info("服务端服务启动监听:");
            //通过死循环开启长连接,开启线程去处理消息
            while(true){
                Socket socket=serverSocket.accept();
                new Thread(new SocketServerTest.MyRuns(socket)).start();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (serverSocket!=null) {
                    serverSocket.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }
    class MyRuns implements Runnable{
        Socket socket;
        BufferedReader reader;
        BufferedWriter writer;
        public MyRuns(Socket socket) {
            super();
            this.socket = socket;
        }
        public void run() {
            try {
                reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));//读取客户端消息
                writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));//向客户端写消息
                String lineString=""; //服务器接受到的消息
                while(!(lineString=reader.readLine()).equals("bye")){
                    logger.info("收到来自客户端的发送的消息是:" + lineString);
                    writer.write("服务器返回:"+lineString+"\n");
                    writer.flush();
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (reader!=null) {
                        reader.close();
                    }
                    if (writer!=null) {
                        writer.close();
                    }
                    if (socket!=null) {
                        socket.close();
                    }
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
        }
    }
}
//package com.yihu.jw.care.endpoint;
//
//import com.tencentcloudapi.oceanus.v20190422.models.SystemResourceItem;
//import com.yihu.jw.entity.util.SystemConfEntity;
//import jdk.internal.cmm.SystemResourcePressureImpl;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.core.convert.Property;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.PostConstruct;
//import java.io.BufferedReader;
//import java.io.BufferedWriter;
//import java.io.InputStreamReader;
//import java.io.OutputStreamWriter;
//import java.net.ServerSocket;
//import java.net.Socket;
//
///***
// * @ClassName: SocketServerTest
// * @Description: socket服务器端
// * @Auther: shi kejing
// * @Date: 2021/8/20 11:04
// */
//@Component
//public class SocketServerTest {
//    private final static Logger logger = LoggerFactory.getLogger(SocketServerTest.class);
//
//    public static void main(String[] args) {
//        SocketServerTest st = new SocketServerTest();
//        st.startAction();
//    }
//
////    @PostConstruct
//    public void startAction(){
//        logger.info("服务端服务启动监听:");
//        ServerSocket serverSocket=null;
//        try {
//            serverSocket=new ServerSocket(9112);  //端口号
//            logger.info("服务端服务启动监听:");
//            //通过死循环开启长连接,开启线程去处理消息
//            while(true){
//                Socket socket=serverSocket.accept();
//                new Thread(new SocketServerTest.MyRuns(socket)).start();
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            try {
//                if (serverSocket!=null) {
//                    serverSocket.close();
//                }
//            } catch (Exception e2) {
//                e2.printStackTrace();
//            }
//        }
//    }
//
//    class MyRuns implements Runnable{
//
//        Socket socket;
//        BufferedReader reader;
//        BufferedWriter writer;
//
//        public MyRuns(Socket socket) {
//            super();
//            this.socket = socket;
//        }
//
//        public void run() {
//            try {
//                reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));//读取客户端消息
//                writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));//向客户端写消息
//                String lineString=""; //服务器接受到的消息
//
//                while(!(lineString=reader.readLine()).equals("bye")){
//                    logger.info("收到来自客户端的发送的消息是:" + lineString);
//                    writer.write("服务器返回:"+lineString+"\n");
//                    writer.flush();
//                }
//            } catch (Exception e) {
//                e.printStackTrace();
//            } finally {
//                try {
//                    if (reader!=null) {
//                        reader.close();
//                    }
//                    if (writer!=null) {
//                        writer.close();
//                    }
//                    if (socket!=null) {
//                        socket.close();
//                    }
//                } catch (Exception e2) {
//                    e2.printStackTrace();
//                }
//            }
//        }
//
//    }
//
//
//}

+ 151 - 151
svr/svr-cloud-device/src/main/java/com/yihu/jw/care/endpoint/WebSocketServer.java

@ -1,151 +1,151 @@
package com.yihu.jw.care.endpoint;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;
import com.alibaba.fastjson.JSON;
/***
 * @ClassName: WebSocketServer
 * @Description:
 * @Auther: shi kejing
 * @Date: 2021/8/20 14:20
 */
@ServerEndpoint("/")
@Component
public class WebSocketServer {
    private final static Logger log = LoggerFactory.getLogger(WebSocketServer.class);
    /**静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。*/
    private static int onlineCount = 0;
    /**concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。*/
    private static ConcurrentHashMap<String,WebSocketServer> webSocketMap = new ConcurrentHashMap<>();
    /**与某个客户端的连接会话,需要通过它来给客户端发送数据*/
    private Session session;
    /**接收userId*/
    private String userId="ijk";
    /**
     * 连接建立成功调用的方法*/
    @OnOpen
    public void onOpen(Session session,@PathParam("userId") String userId) {
        userId="ijk";
        log.info("userId = "+userId);
        this.session = session;
        this.userId=userId;
        if(webSocketMap.containsKey(userId)){
            webSocketMap.remove(userId);
            webSocketMap.put(userId,this);
            //加入set中
        }else{
            webSocketMap.put(userId,this);
            //加入set中
            addOnlineCount();
            //在线数加1
        }
        log.info("用户连接:"+userId+",当前在线人数为:" + getOnlineCount());
        try {
            sendMessage("连接成功");
        } catch (IOException e) {
            log.error("用户:"+userId+",网络异常!!!!!!");
        }
    }
    /**
     * 连接关闭调用的方法
     */
    @OnClose
    public void onClose() {
        if(webSocketMap.containsKey(userId)){
            webSocketMap.remove(userId);
            //从set中删除
            subOnlineCount();
        }
        log.info("用户退出:"+userId+",当前在线人数为:" + getOnlineCount());
    }
    /**
     * 收到客户端消息后调用的方法
     *
     * @param message 客户端发送过来的消息*/
    @OnMessage
    public void onMessage(String message, Session session) {
        log.info("用户消息:"+userId+",报文:"+message);
        //可以群发消息
        //消息保存到数据库、redis
        if(StringUtils.isNotBlank(message)){
            try {
                //解析发送的报文
                JSONObject jsonObject = JSON.parseObject(message);
                //追加发送人(防止串改)
                jsonObject.put("fromUserId",this.userId);
                String toUserId=jsonObject.getString("toUserId");
                //传送给对应toUserId用户的websocket
                if(StringUtils.isNotBlank(toUserId)&&webSocketMap.containsKey(toUserId)){
                    webSocketMap.get(toUserId).sendMessage(jsonObject.toJSONString());
                }else{
                    log.error("请求的userId:"+toUserId+"不在该服务器上");
                    //否则不在这个服务器上,发送到mysql或者redis
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
    /**
     *
     * @param session
     * @param error
     */
    @OnError
    public void onError(Session session, Throwable error) {
        log.error("用户错误:"+this.userId+",原因:"+error.getMessage());
        error.printStackTrace();
    }
    /**
     * 实现服务器主动推送
     */
    public void sendMessage(String message) throws IOException {
        this.session.getBasicRemote().sendText(message);
    }
    /**
     * 发送自定义消息
     * */
    public static void sendInfo(String message,@PathParam("userId") String userId) throws IOException {
        log.info("发送消息到:"+userId+",报文:"+message);
        if(StringUtils.isNotBlank(userId)&&webSocketMap.containsKey(userId)){
            webSocketMap.get(userId).sendMessage(message);
        }else{
            log.error("用户"+userId+",不在线!");
        }
    }
    public static synchronized int getOnlineCount() {
        return onlineCount;
    }
    public static synchronized void addOnlineCount() {
        WebSocketServer.onlineCount++;
    }
    public static synchronized void subOnlineCount() {
        WebSocketServer.onlineCount--;
    }
}
//package com.yihu.jw.care.endpoint;
//
//import com.alibaba.fastjson.JSONObject;
//import org.apache.commons.lang.StringUtils;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.stereotype.Component;
//
//
//import javax.websocket.*;
//import javax.websocket.server.PathParam;
//import javax.websocket.server.ServerEndpoint;
//import java.io.IOException;
//import java.util.concurrent.ConcurrentHashMap;
//import com.alibaba.fastjson.JSON;
//
///***
// * @ClassName: WebSocketServer
// * @Description:
// * @Auther: shi kejing
// * @Date: 2021/8/20 14:20
// */
//@ServerEndpoint("/")
//@Component
//public class WebSocketServer {
//
//
//    private final static Logger log = LoggerFactory.getLogger(WebSocketServer.class);
//    /**静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。*/
//    private static int onlineCount = 0;
//    /**concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。*/
//    private static ConcurrentHashMap<String,WebSocketServer> webSocketMap = new ConcurrentHashMap<>();
//    /**与某个客户端的连接会话,需要通过它来给客户端发送数据*/
//    private Session session;
//    /**接收userId*/
//    private String userId="ijk";
//
//    /**
//     * 连接建立成功调用的方法*/
//    @OnOpen
//    public void onOpen(Session session,@PathParam("userId") String userId) {
//        userId="ijk";
//        log.info("userId = "+userId);
//        this.session = session;
//        this.userId=userId;
//        if(webSocketMap.containsKey(userId)){
//            webSocketMap.remove(userId);
//            webSocketMap.put(userId,this);
//            //加入set中
//        }else{
//            webSocketMap.put(userId,this);
//            //加入set中
//            addOnlineCount();
//            //在线数加1
//        }
//
//        log.info("用户连接:"+userId+",当前在线人数为:" + getOnlineCount());
//
//        try {
//            sendMessage("连接成功");
//        } catch (IOException e) {
//            log.error("用户:"+userId+",网络异常!!!!!!");
//        }
//    }
//
//    /**
//     * 连接关闭调用的方法
//     */
//    @OnClose
//    public void onClose() {
//        if(webSocketMap.containsKey(userId)){
//            webSocketMap.remove(userId);
//            //从set中删除
//            subOnlineCount();
//        }
//        log.info("用户退出:"+userId+",当前在线人数为:" + getOnlineCount());
//    }
//
//    /**
//     * 收到客户端消息后调用的方法
//     *
//     * @param message 客户端发送过来的消息*/
//    @OnMessage
//    public void onMessage(String message, Session session) {
//        log.info("用户消息:"+userId+",报文:"+message);
//        //可以群发消息
//        //消息保存到数据库、redis
//        if(StringUtils.isNotBlank(message)){
//            try {
//                //解析发送的报文
//                JSONObject jsonObject = JSON.parseObject(message);
//                //追加发送人(防止串改)
//                jsonObject.put("fromUserId",this.userId);
//                String toUserId=jsonObject.getString("toUserId");
//                //传送给对应toUserId用户的websocket
//                if(StringUtils.isNotBlank(toUserId)&&webSocketMap.containsKey(toUserId)){
//                    webSocketMap.get(toUserId).sendMessage(jsonObject.toJSONString());
//                }else{
//                    log.error("请求的userId:"+toUserId+"不在该服务器上");
//                    //否则不在这个服务器上,发送到mysql或者redis
//                }
//            }catch (Exception e){
//                e.printStackTrace();
//            }
//        }
//    }
//
//    /**
//     *
//     * @param session
//     * @param error
//     */
//    @OnError
//    public void onError(Session session, Throwable error) {
//        log.error("用户错误:"+this.userId+",原因:"+error.getMessage());
//        error.printStackTrace();
//    }
//    /**
//     * 实现服务器主动推送
//     */
//    public void sendMessage(String message) throws IOException {
//        this.session.getBasicRemote().sendText(message);
//    }
//
//
//    /**
//     * 发送自定义消息
//     * */
//    public static void sendInfo(String message,@PathParam("userId") String userId) throws IOException {
//        log.info("发送消息到:"+userId+",报文:"+message);
//        if(StringUtils.isNotBlank(userId)&&webSocketMap.containsKey(userId)){
//            webSocketMap.get(userId).sendMessage(message);
//        }else{
//            log.error("用户"+userId+",不在线!");
//        }
//    }
//
//    public static synchronized int getOnlineCount() {
//        return onlineCount;
//    }
//
//    public static synchronized void addOnlineCount() {
//        WebSocketServer.onlineCount++;
//    }
//
//    public static synchronized void subOnlineCount() {
//        WebSocketServer.onlineCount--;
//    }
//
//
//}

+ 187 - 67
svr/svr-cloud-device/src/main/java/com/yihu/jw/care/service/DeviceService.java

@ -78,6 +78,10 @@ public class DeviceService {
    private BaseSleepNightRecordDao nightRecord;
    @Autowired
    private BasePatientOutBedDao outBedDao;
    @Autowired
    private BaseSleepPlanDetailDao sleepPlanDetailDao;
    @Autowired
    private BaseSleepPlanDao sleepPlanDao;
    /**
     * 获取爱牵挂管理员cookie
@ -552,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);//当前时间
                        //12点以后
                        Calendar today = Calendar.getInstance();
                        today.set(Calendar.HOUR_OF_DAY, 4);
                        today.set(Calendar.MINUTE, 59);
                        today.set(Calendar.SECOND, 59);
                        today.set(Calendar.MILLISECOND, 999);
                        Date bedUp = DateUtil.strToDate(DateUtil.getStringDateShort()+" "+sleepPlan.getGetUpTime());// 起床时间 起床前一小时内算为起床
                        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());
                            SiestaBegin = DateUtil.getNextMin(SiestaTime,-60);// 午睡开始时间
                        }
                        String dayTime = DateUtil.dateToStr(bedUp,DateUtil.YYYY_MM_DD);//监测日期
                        String inTime = sleepPlan.getNightRestTime();
                        Date bedIn = null;// 入睡时间
                        Date bedBegin = null;// 入睡开始时间
                        if (inTime.charAt(0)=='0') {
                            bedIn = DateUtil.strToDate(dayTime+" "+sleepPlan.getNightRestTime());
                            bedIn = DateUtil.getNextDay1(bedIn,1);
                        }else {
                            bedIn = DateUtil.strToDate(dayTime+" "+sleepPlan.getNightRestTime());
                        }
                        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.toJSONString(planDetail,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(1==planDetail.getSiestaStatus()&&null==planDetail.getSiestaTimeEnd()){//午睡起床
                                    planDetail.setSiestaTimeEnd(timeDate);
                                    timeDiffer = (planDetail.getSiestaTimeEnd().getTime()-planDetail.getSiestaTimeBegin().getTime())/1000;
                                    planDetail.setSiestaLong(timeDiffer+"");
                                }
                                else if (null==planDetail.getSiestaStatus()){//超时未午睡午睡
                                    timeDiffer = timeDate.getTime() - SiestaTime.getTime();
                                    if (0<timeDiffer&&timeDiffer<3600*siestaLongWarn*1000){
                                        planDetail.setSiestaStatus(0);
                                        planDetail.setBedStatus(0);
                                        outBedOrder(null,devicePatientDeviceDos.get(0),patient,device,"超时未午睡",JSON.toJSONString(planDetail,SerializerFeature.WriteMapNullValue));
                                        orderCreate=true;
                                    }
                                }
                            }
                            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.toJSONString(planDetail,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.before(bedUp)){ //起夜记录
                            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 (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.toJSONString(planDetail,SerializerFeature.WriteMapNullValue));
                                            orderCreate=true;
                                        }
                                    }
                                }else if(null==planDetail.getInStatus()){
                                    timeDiffer = timeDate.getTime() - bedIn.getTime();
                                    if (0<timeDiffer&&timeDiffer<3600*nightLongWarn*1000){
                                        planDetail.setSiestaStatus(0);
                                        planDetail.setBedStatus(1);
                                        outBedOrder(null,devicePatientDeviceDos.get(0),patient,device,"超时未上床晚休",JSON.toJSONString(planDetail,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.toJSONString(planDetail,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.toJSONString(planDetail,SerializerFeature.WriteMapNullValue));
                                    return null;
                                }
                            }
                        }
                    }
                }
@ -642,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){
@ -676,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());

+ 12 - 0
svr/svr-cloud-device/src/main/java/com/yihu/jw/care/service/DeviceUploadService.java

@ -418,5 +418,17 @@ public class DeviceUploadService {
            return false;
        }
    }
    //[XT*334588000000156*00CD*UD,180916,025723,A,22.570733,N,113.8626083,E,0.00,249.5,0.0,6,100,
    //60,0,0,00000010,7,255,460,1,9529,21809,158,9529,63555,133,9529,63554,129,9529,21405,126,95
    //29,21242,124,9529,21151,120,9529,63556,119,0]
    public Result caneUpload(String message)throws Exception {
        if (StringUtils.isBlank(message)){
            return Result.error("message is null");
        }else {
            String[] messages = message.split(",");
        }
        return Result.success("success");
    }
}