Browse Source

Merge branch 'dev' of liubing/wlyy2.0 into dev

liubing 3 years ago
parent
commit
2adf0941c5
42 changed files with 1556 additions and 116 deletions
  1. 3 3
      business/base-service/src/main/java/com/yihu/jw/patient/service/BasePatientService.java
  2. 16 1
      common/common-entity/sql记录
  3. 99 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/device/BasePatientMonitorDataDO.java
  4. 1 1
      common/common-entity/src/main/java/com/yihu/jw/entity/care/securitymonitoring/SecurityMonitoringOrderDO.java
  5. 12 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/device/BasePatientMonitorDataDao.java
  6. 12 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/device/DeviceDataPushLogDao.java
  7. 2 2
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/admin/CommonEndpoint.java
  8. 31 5
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/device/DoctorDeviceController.java
  9. 32 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/device/PatientDeviceController.java
  10. 17 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/lifeCare/DoctorLifeCareEndpoint.java
  11. 17 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/lifeCare/PatientLifeCareEndpoint.java
  12. 2 2
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/message/DoctorMessageEndpoint.java
  13. 35 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/security/SecurityMonitoringOrderEndpoint.java
  14. 23 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/statistics/DetectionPlatformEndpoint.java
  15. 1 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/statistics/OpenStatisticsEndpoint.java
  16. 6 5
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/assistance/EmergencyAssistanceService.java
  17. 56 64
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/common/CommomService.java
  18. 1 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/contacts/ContactsService.java
  19. 24 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/device/DeviceManageService.java
  20. 4 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/device/PatientDeviceService.java
  21. 2 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/family/PatientFamilyMemberService.java
  22. 15 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/lifeCare/LifeCareOrderService.java
  23. 188 7
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/patient/CarePatientService.java
  24. 138 2
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/security/SecurityMonitoringOrderService.java
  25. 3 2
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/ServicePackageService.java
  26. 46 10
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/statistics/StatisticsService.java
  27. 1 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/third/PatientInfoPlatFormService.java
  28. 137 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/DeviceDataPushLogUtil.java
  29. 116 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/DeviceLostMessageUtil.java
  30. 12 0
      svr/svr-cloud-device/src/main/java/com/yihu/jw/care/dao/device/BasePatientMonitorDataDao.java
  31. 19 4
      svr/svr-cloud-device/src/main/java/com/yihu/jw/care/service/DeviceService.java
  32. 8 0
      svr/svr-cloud-device/src/main/java/com/yihu/jw/care/service/DeviceUploadService.java
  33. 8 0
      svr/svr-cloud-device/src/main/java/com/yihu/jw/care/service/HvDeviceService.java
  34. 14 1
      svr/svr-cloud-device/src/main/java/com/yihu/jw/care/service/OnenetService.java
  35. 33 0
      svr/svr-cloud-device/src/main/java/com/yihu/jw/care/util/DeviceDataPushLogUtil.java
  36. 1 0
      svr/svr-cloud-device/src/main/java/com/yihu/jw/care/util/SecurityOrderUtil.java
  37. 11 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/dao/device/DeviceSosLogDao.java
  38. 23 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/dao/device/PatientSafeAreaDao.java
  39. 10 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/event/ApplicationEvent.java
  40. 82 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/job/order/DailyWaterJob.java
  41. 292 0
      svr/svr-cloud-job/src/main/java/com/yihu/jw/care/util/SecurityOrderUtil.java
  42. 3 1
      svr/svr-cloud-job/src/main/resources/system.properties

+ 3 - 3
business/base-service/src/main/java/com/yihu/jw/patient/service/BasePatientService.java

@ -809,13 +809,13 @@ public class BasePatientService<T, R extends CrudRepository> extends BaseJpaServ
                dictName="jiaoshinv";
                break;
            case "2-4-1"://助老员男
                dictName="shegongnan";
                dictName="zhulaoyuannan";
                break;
            case "2-4-2"://助老员女
                dictName="shegongnv";
                dictName="zhulaoyuannv";
                break;
            default:
                dictName="jiashunan";
                dictName="zhulaoyuannan";
                break;
        }
        String sql = " select dict_value from wlyy_hospital_sys_dict where dict_name='hz_default_avatar' and dict_code='"+dictName+"' ";

+ 16 - 1
common/common-entity/sql记录

@ -1789,4 +1789,19 @@ ALTER TABLE base_device_health_index add `power_value` varchar(20) DEFAULT NULL
ALTER TABLE base_device_health_index add `at_id` varchar(50) DEFAULT NULL COMMENT 'at';
--2022-04-12
ALTER TABLE wlyy_role add column `level` tinyint(2) DEFAULT NULL COMMENT '1省2市3区县4机构5团队6医生'
ALTER TABLE wlyy_role add column `level` tinyint(2) DEFAULT NULL COMMENT '1省2市3区县4机构5团队6医生'
-- 2022-04-24
CREATE TABLE `base_patient_monitor_data` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `patient` varchar(50) DEFAULT NULL COMMENT '居民code',
  `patient_name` varchar(50) DEFAULT NULL COMMENT '姓名',
  `category_code` varchar(50) DEFAULT NULL COMMENT '设备类型标识1血糖仪,2.血压计,4智能手表..',
  `device_sn` varchar(50) DEFAULT NULL COMMENT '设备SN码',
  `type` int(1) DEFAULT NULL COMMENT '检测类型',
  `device_info` varchar(2000) DEFAULT NULL COMMENT '设备数据内容',
  `relation_code` varchar(50) DEFAULT NULL COMMENT '关联id',
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_patient` (`patient`)
) ENGINE=InnoDB AUTO_INCREMENT=95 DEFAULT CHARSET=utf8mb4 COMMENT='设备监测日志记录表';

+ 99 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/device/BasePatientMonitorDataDO.java

@ -0,0 +1,99 @@
package com.yihu.jw.entity.care.device;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.IdEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import java.util.Date;
/**
 * Created by Bing on 2022/4/25.
 * 居民设备监测日志
 */
@Entity
@Table(name = "base_patient_monitor_data")
@SequenceGenerator(name="id_generated", sequenceName="seq_base_patient_monitor_data")
public class BasePatientMonitorDataDO extends IdEntity {
    private String patient;
    private String patientName;
    private String categoryCode;
    private String deviceSn;
    /**
     * 当前已用TYPE类型:
     *  1血糖测量 2血压测量,5心率,7呼吸,8步数,9定位上传,10温度(烟感),11床带状态更新(睡眠带),15烟雾浓度,15燃气浓度
     *  20紧急呼叫 22安防预警
     */
    private Integer type;
    private String deviceInfo;
    private String relationCode;
    private Date createTime;
    public String getPatient() {
        return patient;
    }
    public void setPatient(String patient) {
        this.patient = patient;
    }
    public String getPatientName() {
        return patientName;
    }
    public void setPatientName(String patientName) {
        this.patientName = patientName;
    }
    public String getCategoryCode() {
        return categoryCode;
    }
    public void setCategoryCode(String categoryCode) {
        this.categoryCode = categoryCode;
    }
    public String getDeviceSn() {
        return deviceSn;
    }
    public void setDeviceSn(String deviceSn) {
        this.deviceSn = deviceSn;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    public String getDeviceInfo() {
        return deviceInfo;
    }
    public void setDeviceInfo(String deviceInfo) {
        this.deviceInfo = deviceInfo;
    }
    public String getRelationCode() {
        return relationCode;
    }
    public void setRelationCode(String relationCode) {
        this.relationCode = relationCode;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    @Column(name = "create_time")
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}

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

@ -318,7 +318,7 @@ public class SecurityMonitoringOrderDO extends UuidIdentityEntityWithOperator {
    private String serviceStatus;//服务类型 1-预约项目 2-即时项目
    private String orderInfo;//工单详情 0-未推送 1-未确认 2-已确认
    private String doctorConfirmFinishImg;
    private Integer orderSource;//工单发起来源状态 1APP 2手环 3居家报警 4监控器发起 5睡眠带 6气感报警器 7 烟感报警器 8拐杖发起
    private Integer orderSource;//工单发起来源状态 1APP 2手环 3居家报警 4监控器发起 5睡眠带 6气感报警器 7 烟感报警器 8拐杖发起 9智慧水表
    private Integer emergencyCancel;// 紧急预警工单误报警原因 字典emergency_cancel
    private String topicItem;//安防工单所属专题 base_system_dict_entry表service_item
    private String sceneImg;//现场照片

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

@ -0,0 +1,12 @@
package com.yihu.jw.care.dao.device;
import com.yihu.jw.entity.care.device.BasePatientMonitorDataDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by Bing on 2022/4/25.
 */
public interface BasePatientMonitorDataDao extends PagingAndSortingRepository<BasePatientMonitorDataDO,Long>,
        JpaSpecificationExecutor<BasePatientMonitorDataDO> {
}

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

@ -0,0 +1,12 @@
package com.yihu.jw.care.dao.device;
import com.yihu.jw.entity.care.device.DeviceDataPushLog;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by Bing on 2021/9/2.
 */
public interface DeviceDataPushLogDao extends PagingAndSortingRepository<DeviceDataPushLog,Long>,
        JpaSpecificationExecutor<DeviceDataPushLog> {
}

+ 2 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/admin/CommonEndpoint.java

@ -195,11 +195,11 @@ public class CommonEndpoint extends EnvelopRestEndpoint {
    }
    @GetMapping(value = "open/WXtempleateSendTest")
    @GetMapping(value = "open/shuiBiaoInit")
    @ApiOperation(value = "微信模板消息推送")
    public Envelop setRedisEnable() {
        try {
            commomService.WXtempleateSendTest();
            commomService.shuiBiaoInit();
            return success("success");
        } catch (Exception e) {
            return failedException2(e);

+ 31 - 5
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/device/DoctorDeviceController.java

@ -13,6 +13,7 @@ import com.yihu.jw.care.useragent.UserAgent;
import com.yihu.jw.entity.care.device.DevicePatientDevice;
import com.yihu.jw.entity.patient.BaseDeviceRepairEntity;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.restmodel.web.PageEnvelop;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@ -236,7 +237,7 @@ public class DoctorDeviceController extends BaseController {
        try {
            JSONObject param = new JSONObject();
            param.put("doctorId",doctor);
            if(permissionService.noPermission(2,param)){
            if(permissionService.noPermission(1,param)){
                return write(-1,"该操作没有权限");
            }
            return write(200,"成功","data",deviceManageService.getRepairList(doctor,categoryCode,patientName,page,pageSize,status));
@ -253,7 +254,7 @@ public class DoctorDeviceController extends BaseController {
        try {
			JSONObject param = new JSONObject();
			param.put("doctorId",permissionService.getUID());
			if(permissionService.noPermission(2,param)){
			if(permissionService.noPermission(1,param)){
				return write(-1,"该操作没有权限");
			}
            return write(200,"成功","data",deviceManageService.getRepairInfo(orderId));
@ -270,8 +271,8 @@ public class DoctorDeviceController extends BaseController {
        try {
			String doctor = permissionService.getUID();
			JSONObject param = new JSONObject();
			param.put("doctorId",userAgent.getUID());
			if(permissionService.noPermission(2,param)){
			param.put("doctorId",doctor);
			if(permissionService.noPermission(1,param)){
				return write(-1,"该操作没有权限");
			}
			BaseDeviceRepairEntity baseDeviceRepairEntity = JSON.parseObject(repairJson, BaseDeviceRepairEntity.class);
@ -286,6 +287,31 @@ public class DoctorDeviceController extends BaseController {
			return errorResult(e);
        }
    }
	
	@RequestMapping(value = "/getPatientMonitorData",method = RequestMethod.GET)
	@ApiOperation(value="获取居民设备监护数据")
	public PageEnvelop getPatientMonitorData(@ApiParam(name = "patient",value = "patient")
							   				@RequestParam(value = "patient")String patient,
											 @ApiParam(name = "startTime",value = "开始时间yyyy-MM-dd HH:mm:ss")
											 @RequestParam(value = "startTime")String startTime,
											 @ApiParam(name = "endTime",value = "endTime")
											 @RequestParam(value = "endTime")String endTime,
											 @ApiParam(name = "page",value = "page")
											 @RequestParam(value = "page")Integer page,
											 @ApiParam(name = "size",value = "size")
											 @RequestParam(value = "size")Integer size){
		try {
			String doctor = permissionService.getUID();
			JSONObject param = new JSONObject();
			param.put("doctorId",doctor);
			if(permissionService.noPermission(1,param)){
				return PageEnvelop.getSuccess("该操作没有权限");
			}
			return deviceManageService.getPatientMonitorData(patient,startTime,endTime,page,size);
		} catch (Exception e) {
			e.printStackTrace();
			return PageEnvelop.getError("系统繁忙");
		}
	}
}

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

@ -5,7 +5,9 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.care.aop.ObserverRequired;
import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.care.endpoint.BaseController;
import com.yihu.jw.care.service.common.PermissionService;
import com.yihu.jw.care.service.device.DeviceDetailService;
import com.yihu.jw.care.service.device.DeviceManageService;
import com.yihu.jw.care.service.device.PatientDeviceService;
import com.yihu.jw.care.service.device.PatientHealthIndexService;
import com.yihu.jw.entity.base.patient.BasePatientDO;
@ -14,6 +16,7 @@ import com.yihu.jw.entity.care.device.DevicePatientDevice;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.util.entity.ServiceException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -55,6 +58,10 @@ public class PatientDeviceController extends BaseController {
    private DeviceDetailService deviceDetailService;
    @Autowired
    private BasePatientDao patientDao;
    @Autowired
    DeviceManageService deviceManageService;
    @Autowired
    PermissionService permissionService;
@ -489,6 +496,30 @@ public class PatientDeviceController extends BaseController {
        }
    }
    @RequestMapping(value = "/getPatientMonitorData",method = RequestMethod.GET)
    @ApiOperation(value="获取居民设备监护数据")
    public PageEnvelop getPatientMonitorData(@ApiParam(name = "patient",value = "patient")
                                             @RequestParam(value = "patient")String patient,
                                             @ApiParam(name = "startTime",value = "开始时间yyyy-MM-dd HH:mm:ss")
                                             @RequestParam(value = "startTime")String startTime,
                                             @ApiParam(name = "endTime",value = "endTime")
                                             @RequestParam(value = "endTime")String endTime,
                                             @ApiParam(name = "page",value = "page")
                                             @RequestParam(value = "page")Integer page,
                                             @ApiParam(name = "size",value = "size")
                                             @RequestParam(value = "size")Integer size){
        try {
			String perPatient = permissionService.getUID();
            com.alibaba.fastjson.JSONObject param = new com.alibaba.fastjson.JSONObject();
			param.put("patient",perPatient);
			if(permissionService.noPermission(1,param)){
				return PageEnvelop.getSuccess("该操作没有权限");
			}
            return deviceManageService.getPatientMonitorData(patient,startTime,endTime,page,size);
        } catch (Exception e) {
            e.printStackTrace();
            return PageEnvelop.getError("系统繁忙");
        }
    }
}

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

@ -8,6 +8,7 @@ import com.yihu.jw.care.service.org.BaseOrgService;
import com.yihu.jw.entity.care.lifeCare.LifeCareOrderDO;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
@ -233,4 +234,20 @@ public class DoctorLifeCareEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "findPatientItemDict")
    @ApiOperation(value = "查找居民已预约的服务项")
    public ListEnvelop findPatientItemDict(@ApiParam(value = "patient", name = "patient")
                                           @RequestParam(value = "patient", required = false) String patient) {
        try {
//            JSONObject jsonObject = new JSONObject();
//            jsonObject.put("doctorId",permissionService.getUID());
//            if (permissionService.noPermission(1, jsonObject)) {
//                return ListEnvelop.getError("该操作没有权限");
//            }
            return ListEnvelop.getSuccess("查询成功",lifeCareOrderService.findPatientItemDict(patient));
        }catch (Exception e){
            return failedListEnvelopException2(e);
        }
    }
}

+ 17 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/lifeCare/PatientLifeCareEndpoint.java

@ -136,7 +136,7 @@ public class PatientLifeCareEndpoint  extends EnvelopRestEndpoint {
    }
    @GetMapping(value = "findItemDict")
    @ApiOperation(value = "查找服务项字典")
    @ApiOperation(value = "查找所有服务项字典")
    public ListEnvelop findItemDict(@ApiParam(value = "orgCode", name = "orgCode")
                                   @RequestParam(value = "orgCode", required = false) String orgCode) {
        try {
@ -146,6 +146,22 @@ public class PatientLifeCareEndpoint  extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "findPatientItemDict")
    @ApiOperation(value = "查找居民已预约的服务项")
    public ListEnvelop findPatientItemDict(@ApiParam(value = "patient", name = "patient")
                                    @RequestParam(value = "patient", required = false) String patient) {
        try {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("patient",permissionService.getUID());
            if (permissionService.noPermission(1, jsonObject)) {
                return ListEnvelop.getError("该操作没有权限");
            }
            return ListEnvelop.getSuccess("查询成功",lifeCareOrderService.findPatientItemDict(patient));
        }catch (Exception e){
            return failedListEnvelopException2(e);
        }
    }
    @GetMapping("getByOrderId")
    @ApiOperation(value = "根据工单id获取相应的工单")
    public ObjEnvelop getByOrderId(

+ 2 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/message/DoctorMessageEndpoint.java

@ -113,9 +113,9 @@ public class DoctorMessageEndpoint extends EnvelopRestEndpoint {
                                               @ApiParam(name = "deviceName",value = "设备名字",required = false)
                                               @RequestParam(value = "deviceName",required = false)String deviceName,
                                               @ApiParam(name = "area")
                                                   @RequestParam(value = "area") String area,
                                               @RequestParam(value = "area",required = false) String area,
                                               @ApiParam(name = "level")
                                                   @RequestParam(value = "level") String level
                                               @RequestParam(value = "level",required = false) String level
                                               ){
        try {
            return ObjEnvelop.getSuccess("查询成功",doctorMessageService.getDeviceLostMessageList(doctor,deviceCode,deviceName,area,level));

+ 35 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/security/SecurityMonitoringOrderEndpoint.java

@ -2,6 +2,7 @@ package com.yihu.jw.care.endpoint.security;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.aop.ObserverRequired;
import com.yihu.jw.care.service.common.PermissionService;
import com.yihu.jw.care.service.security.SecurityMonitoringOrderService;
import com.yihu.jw.entity.care.securitymonitoring.EmergencyWarnConclusionDO;
import com.yihu.jw.restmodel.ResponseContant;
@ -28,6 +29,8 @@ public class SecurityMonitoringOrderEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private SecurityMonitoringOrderService securityMonitoringOrderService;
    @Autowired
    private PermissionService permissionService;
    @PostMapping(value = "createOrder")
    @ApiOperation(value = "创建安防服务工单")
@ -523,4 +526,36 @@ public class SecurityMonitoringOrderEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "patient/getPatientDeviceTopic")
    @ApiOperation(value = "居民获取智慧安防专题")
    public ListEnvelop getPatientDeviceTopicP(@ApiParam(name="patient",value = "patient")
                                            @RequestParam(value = "patient") String patient){
        try {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("patient",permissionService.getUID());
            if (permissionService.noPermission(1, jsonObject)) {
                return ListEnvelop.getError("该操作没有权限");
            }
            return ListEnvelop.getSuccess("获取成功",securityMonitoringOrderService.getPatientDeviceTopic(patient));
        }catch (Exception e){
            return failedListEnvelopException2(e);
        }
    }
    @GetMapping(value = "doctor/getPatientDeviceTopic")
    @ApiOperation(value = "医生获取居民智慧安防专题")
    public ListEnvelop getPatientDeviceTopicD(@ApiParam(name="patient",value = "patient")
                                           @RequestParam(value = "patient") String patient){
        try {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("doctorId",permissionService.getUID());
            if (permissionService.noPermission(1, jsonObject)) {
                return ListEnvelop.getError("该操作没有权限");
            }
            return ListEnvelop.getSuccess("获取成功",securityMonitoringOrderService.getPatientDeviceTopic(patient));
        }catch (Exception e){
            return failedListEnvelopException2(e);
        }
    }
}

+ 23 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/statistics/DetectionPlatformEndpoint.java

@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.endpoint.BaseController;
import com.yihu.jw.care.service.device.DeviceManageService;
import com.yihu.jw.care.service.device.NetworkCardService;
import com.yihu.jw.care.service.device.PatientDeviceService;
import com.yihu.jw.care.service.security.SecurityMonitoringOrderService;
@ -43,6 +44,8 @@ public class DetectionPlatformEndpoint extends EnvelopRestEndpoint {
    private SecurityMonitoringOrderService securityMonitoringOrderService;
    @Autowired
    private NetworkCardService networkCardService;
    @Autowired
    private DeviceManageService deviceManageService;
    @ApiOperation("环境信息")
@ -393,4 +396,24 @@ public class DetectionPlatformEndpoint extends EnvelopRestEndpoint {
            return failedObjEnvelopException2(e);
        }
    }
    @RequestMapping(value = "/getPatientMonitorData",method = RequestMethod.GET)
    @ApiOperation(value="获取居民设备监护数据")
    public PageEnvelop getPatientMonitorData(@ApiParam(name = "patient",value = "patient")
                                             @RequestParam(value = "patient")String patient,
                                             @ApiParam(name = "startTime",value = "开始时间")
                                             @RequestParam(value = "startTime")String startTime,
                                             @ApiParam(name = "endTime",value = "endTime")
                                             @RequestParam(value = "endTime")String endTime,
                                             @ApiParam(name = "page",value = "page")
                                             @RequestParam(value = "page")Integer page,
                                             @ApiParam(name = "size",value = "size")
                                             @RequestParam(value = "size")Integer size){
        try {
            return deviceManageService.getPatientMonitorData(patient,startTime,endTime,page,size);
        } catch (Exception e) {
            e.printStackTrace();
            return PageEnvelop.getError("系统繁忙");
        }
    }
}

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/statistics/OpenStatisticsEndpoint.java

@ -214,7 +214,7 @@ public class OpenStatisticsEndpoint extends EnvelopRestEndpoint {
    @GetMapping(value = "findUserByType")
    @ApiOperation(value = "人员实时动态搜索")
    public Envelop findUserByType(@ApiParam(name = "type", value = "类型:1幼儿,2老人,3社工,4医生,5老人家属。不传返回四个类型的数据")
    public Envelop findUserByType(@ApiParam(name = "type", value = "类型:1幼儿,2签约老人,3社工,4医生,5老人家属 6助老员,7社区老人(未签约).不传返回四个类型的数据")
                                  @RequestParam(value = "type", required = false) String type,
                                  @ApiParam(name = "name", value = "姓名")
                                  @RequestParam(value = "name", required = false) String name,

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

@ -23,10 +23,7 @@ import com.yihu.jw.care.service.family.PatientFamilyMemberService;
import com.yihu.jw.care.service.message.BaseServiceNewsService;
import com.yihu.jw.care.service.role.RoleService;
import com.yihu.jw.care.service.sign.ServicePackageService;
import com.yihu.jw.care.util.ConstantUtil;
import com.yihu.jw.care.util.CountDistance;
import com.yihu.jw.care.util.HttpClientUtilCare;
import com.yihu.jw.care.util.MessageUtil;
import com.yihu.jw.care.util.*;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
@ -142,6 +139,8 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
    private BaseServiceNewsService baseServiceNewsService;
    @Autowired
    private RoleService roleService;
    @Autowired
    private DeviceDataPushLogUtil deviceDataPushLogUtil;
    /**
     * 获取百度天气
@ -318,7 +317,9 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
            emergencyAssistanceDao.save(assistanceDO);
            result.put("resultFlag", ResponseContant.success);
            result.put("resultMsg",assistanceDO);
            if (StringUtils.isNotBlank(assistanceDO.getDeviceSn())){
                deviceDataPushLogUtil.savePatientMonitorData(assistanceDO.getDeviceSn(),20,"发起紧急呼叫",assistanceDO.getId());
            }
            baseServiceNewsService.addServiceNews(patientDO.getName(),patientDO.getId(),"5",null,assistanceDO.getId(),1);
            return result;
        }

+ 56 - 64
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/common/CommomService.java

@ -1,8 +1,14 @@
package com.yihu.jw.care.service.common;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.dao.device.DeviceDao;
import com.yihu.jw.care.dao.device.DeviceDetailDao;
import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.care.util.MessageUtil;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.care.device.Device;
import com.yihu.jw.entity.care.device.DeviceDetail;
import com.yihu.jw.entity.care.device.DevicePatientDevice;
import com.yihu.jw.entity.hospital.message.SystemMessageDO;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.util.date.DateUtil;
@ -12,6 +18,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -30,73 +37,58 @@ public class CommomService {
    private MessageUtil messageUtil;
    @Value("${wechat.id}")
    private String wxId;
    @Autowired
    private DeviceDao deviceDao;
    @Autowired
    private DeviceDetailDao deviceDetailDao;
    @Autowired
    private PatientDeviceDao patientDeviceDao;
    //模板消息测试
    public void WXtempleateSendTest(){
        String patient="808080eb78d3ce030178edeb4346002b";
        BasePatientDO patientDO = basePatientDao.findById(patient);
        //获取家属
        String  sql = " select  t2.id,t2.name,t2.openid,'family3' as 'user' from  base_patient_family_member t1,  base_patient t2 where  " +
                "t2.id in (select family_member from base_patient_family_member where patient = '"+patient+"' )  " +
                " and t1.patient = '"+patient+"'  and t1.family_member = t2.id  " +
                " and t2.archive_type=3 GROUP BY t2.id " ;
        List<Map<String,Object>> relatives = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> docTmp:relatives){
            if ("family3".equals(docTmp.get("user").toString())){//设备离线推送给家属
                if(null!=docTmp.get("openid")&& StringUtils.isNotBlank(docTmp.get("openid").toString())){
                    String first = patientDO.getName()+" 血糖仪设备疑似离线";
                    String keyword1 = "【"+ DateUtil.getStringDate()+"】";
                    String keyword2 = "【设备离线】";
                    String keyword3 = patientDO.getName()+" 血糖仪设备疑似离线,请及时跟进";
                    messageUtil.putTemplateWxMessage(wxId,"template_error_notice","sblxtz",
                            docTmp.get("openid").toString(),first,null,null,38,new JSONObject(),keyword1,keyword2,keyword3);
                    first=patientDO.getName()+"已离家";
                    keyword2="【离家提醒】";
                    keyword3 = patientDO.getName()+"已离家,请及时跟进";
                    boolean success = messageUtil.putTemplateWxMessage(wxId,"template_error_notice","lrjjztgxtz",docTmp.get("openid").toString(),first,null,null,3,new JSONObject(),DateUtil.getStringDate(),keyword2,keyword3);
                    first=patientDO.getName()+"已到家";
                    keyword2="【到家提醒】";
                    keyword3 = patientDO.getName()+"已到家,请知悉";
                    messageUtil.putTemplateWxMessage(wxId,"template_error_notice","lrjjztgxtz",docTmp.get("openid").toString(),first,null,null,3,new JSONObject(),DateUtil.getStringDate(),keyword2,keyword3);
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.put("patientId",patient);
                    first = patientDO.getName()+"血糖超7天未测量";
                    keyword2="【血糖测量】";
                    keyword3=patientDO.getName()+"血糖超7天未测量,请及时跟进";
                    jsonObject.put("type","1");
                    messageUtil.putTemplateWxMessage(wxId,"template_error_notice","xyxtwcltz",docTmp.get("openid").toString(),first,null,null,3,jsonObject,keyword1,keyword2,keyword3);
                    jsonObject = new JSONObject();
                    first = patientDO.getName()+"血压未测量";
                    keyword2="【血压测量】";
                    keyword3=patientDO.getName()+"昨日未测量血压,请及时跟进";
                    jsonObject.put("type","2");
                    messageUtil.putTemplateWxMessage(wxId,"template_error_notice","xyxtwcltz",docTmp.get("openid").toString(),first,null,null,3,jsonObject,keyword1,keyword2,keyword3);
                    first = patientDO.getName()+"最新测量血糖值反馈";
                    keyword1 = DateUtil.getStringDate();
                    keyword2 = "早餐前血糖";
                    keyword3 = "【5.5mmol/L】";
                    String keyword4 = "请注意日常饮食";
                    messageUtil.putTemplateWxMessage(wxId,"template_measure_result_notice","jktzcljgtz",patientDO.getOpenid(),first,null,null,3,new JSONObject(),keyword1,keyword2,keyword3,keyword4);
                    first= patientDO.getName()+" 最新测量血压值反馈";
                    keyword1 =  DateUtil.getStringDate();
                    keyword2 = "血压";
                    keyword3 = "【收缩压:106mmgh 舒张压:65mmgh】";
                    keyword4 = "请注意日常饮食";
                    messageUtil.putTemplateWxMessage(wxId,"template_measure_result_notice","jktzcljgtz",patientDO.getOpenid(),first,null,null,3,new JSONObject(),keyword1,keyword2,keyword3,keyword4);
                }
            }
    public void shuiBiaoInit(){
        String sql = " select id,user_id,idcard from base_patient where user_id is NOT null and user_id<>'' ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        List<DeviceDetail> deviceDetails = new ArrayList<>();
        List<DevicePatientDevice> patientDevices = new ArrayList<>();
        List<Device> dmDevices = deviceDao.findByCategoryCode("18");
        Device deviceDo = dmDevices.get(0);
        for (Map<String,Object> tmp:list){
            String patient = tmp.get("id").toString();
            String deviceSn = tmp.get("user_id").toString();
            String idcard = tmp.get("idcard").toString();
            DeviceDetail deviceDetail = new DeviceDetail();
            deviceDetail.setDeviceName(deviceDo.getName());
            deviceDetail.setDeviceCode(deviceSn);
            deviceDetail.setDeviceModel(deviceDo.getModel());
            deviceDetail.setCategoryCode(deviceDo.getCategoryCode());
            deviceDetail.setBindingCount("{\"1\":\"1\",\"2\":\"0\"}");
            deviceDetail.setContactStatus(1);
            deviceDetail.setDeviceType(1);
            deviceDetail.setIsGrant(1);
            deviceDetail.setGrantAdminTeam("0");
            deviceDetail.setManufacturer("泰安泰山金石机械有限责任公司");
            deviceDetail.setApplyDate(DateUtil.getStringDate());
            deviceDetails.add(deviceDetail);
            DevicePatientDevice patientDevice = new DevicePatientDevice();
            patientDevice.setDel(0);
            patientDevice.setUser(patient);
            patientDevice.setCategoryCode(deviceDo.getCategoryCode());
            patientDevice.setDeviceId(deviceDo.getId());
            patientDevice.setDeviceName(deviceDo.getName());
            patientDevice.setDeviceSn(deviceSn);
            patientDevice.setUserIdcard(idcard);
            patientDevice.setUserType("-1");
            patientDevice.setCzrq(new Date());
            patientDevice.setDeviceType(1);
            patientDevices.add(patientDevice);
        }
        if (patientDevices.size()>0){
            patientDeviceDao.save(patientDevices);
        }
        if (deviceDetails.size()>0){
            deviceDetailDao.save(deviceDetails);
        }
    }
}

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/contacts/ContactsService.java

@ -248,7 +248,7 @@ public class ContactsService {
                    }
                }
                String[] numTmp = num.split("_");
                String sql = " select pd.device_sn,wd.iccid from  wlyy_patient_device pd inner join wlyy_devices wd  " +
                String sql = " select pd.device_sn,wd.iccid sim from  wlyy_patient_device pd inner join wlyy_devices wd  " +
                        "on pd.device_sn = wd.device_code and pd.del=0 and wd.iccid is not null and pd.category_code in('7','4')  " +
                        "where pd.user='"+patient+"' ";
                List<Map<String,Object>> sims = jdbcTemplate.queryForList(sql);

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

@ -11,6 +11,7 @@ import com.yihu.jw.entity.patient.BaseDeviceRepairEntity;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.mysql.query.BaseJpaService;
import net.sf.json.JSONArray;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
@ -232,4 +233,27 @@ public class DeviceManageService extends BaseJpaService<BaseDeviceRepairEntity,B
        return "success";
    }
    /**
     * 获取居民设备监测日志
     * @param patient
     * @param startTime
     * @param endTime
     * @param page
     * @param size
     * @return
     */
    public PageEnvelop<List<Map<String,Object>>> getPatientMonitorData(String patient,String startTime,String endTime,Integer page,Integer size){
        page = page>0?page-1:0;
        String sql = " select dm.name,dm.photo,dm.category_code,modata.patient,modata.patient_name,modata.device_info,modata.relation_code, " +
                "modata.type,DATE_FORMAT(modata.create_time,'%Y-%m-%d %H:%i:%S') create_time  " ;
        String sqlFilter =  " from base_patient_monitor_data modata INNER JOIN wlyy_patient_device pd on modata.device_sn = pd.device_sn and pd.del=0 " +
                "INNER JOIN dm_device dm on pd.device_id = dm.id " +
                "where patient='"+patient+"' and create_time>='"+startTime+"' and create_time<='"+endTime+"' ";
        String sqlCount = " select count(modata.id) ";
        sql = sql+sqlFilter +" ORDER BY modata.id desc limit "+page*size+","+size;
        Long total = jdbcTemplate.queryForObject(sqlCount+sqlFilter,Long.class);
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        return PageEnvelop.getSuccessListWithPage("success",list,page,size,total);
    }
}

+ 4 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/device/PatientDeviceService.java

@ -609,6 +609,8 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
    }
    public List<Map<String,Object>> patientDeviceListByTopic(String patient,String serviceTopic){
        List<Map<String,Object>> result = new ArrayList<>();
        String sql = "select dd.photo,pd.device_sn,dd.brands,dd.category_code,dd.model,pd.device_name,date_format(pd.czrq,'%Y-%m-%d %H:%i:%S' ) deviceTime,dd.device_type as deviceType " +
                "from dm_device dd INNER JOIN wlyy_patient_device pd on dd.category_code = pd.category_code INNER JOIN wlyy_devices wd on dd.model = wd.device_model and pd.device_sn = wd.device_code \n" +
                "where 1=1 and  pd.del=0 ";
@ -619,7 +621,8 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
            sql+= " and dd.service_topic like '%"+serviceTopic+"%' ";
        }
        sql+=" order by pd.czrq asc ";
        return jdbcTemplate.queryForList(sql);
        result =  jdbcTemplate.queryForList(sql);
        return result;
    }
    public List<Map<String,Object>> patientEmeDeviceList(String patient){

+ 2 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/family/PatientFamilyMemberService.java

@ -513,6 +513,7 @@ public class PatientFamilyMemberService extends BaseJpaService<BasePatientFamily
            obj.put("photo", StringUtils.isEmpty(p.getPhoto()) ? "" : p.getPhoto());
            obj.put("mobile", StringUtils.isEmpty(p.getMobile()) ? "" : p.getMobile());
            obj.put("address", StringUtils.isEmpty(p.getAddress()) ? "" : p.getAddress());
            obj.put("age", StringUtils.isBlank(p.getIdcard())?null:IdCardUtil.getAgeForIdcard(p.getIdcard()));
            obj.put("familyRelation", "-1");
            obj.put("familyRelationName", "自己");
            obj.put("isAuthorize", 1);//0:未授权,1:已授权
@ -575,6 +576,7 @@ public class PatientFamilyMemberService extends BaseJpaService<BasePatientFamily
                obj.put("isAuthorize", isAuthorize);//0:未授权,1:已授权
                obj.put("birthday", map.get("birthday"));
                obj.put("idcard", StringUtils.isEmpty(String.valueOf(map.get("idcard"))) ? "" : map.get("idcard").toString());
                obj.put("age", null==map.get("idcard")?null:IdCardUtil.getAgeForIdcard(map.get("idcard").toString()));
                obj.put("photo", map.get("photo"));
                obj.put("mobile", map.get("mobile"));
                obj.put("address", StringUtils.isEmpty(String.valueOf(map.get("address"))) ? "" : map.get("address"));

+ 15 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/lifeCare/LifeCareOrderService.java

@ -481,6 +481,21 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
        return list;
    }
    /**
     * 获取居民已预约生活照料项目
     * @param patient
     * @return
     */
    public List<Map<String,Object>> findPatientItemDict(String patient){
        String sql = " select distinct dict.* from base_life_care_item_dict dict " +
                "INNER JOIN base_org org  on dict.org_code = org.`code` " +
                "INNER JOIN base_life_care_fee_detail fed on fed.`code` = dict.`code` " +
                "INNER join base_life_care_order ord on fed.order_id = ord.id " +
                " where ord.patient='"+patient+"' and ord.`status` >0 ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        return list;
    }
    /**
     * 居民端-查询生活照料工单列表
     *

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

@ -3,6 +3,7 @@ package com.yihu.jw.care.service.patient;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.care.aop.RedisLockAOP;
import com.yihu.jw.care.dao.family.PatientFamilyMemberDao;
@ -294,11 +295,13 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
        if (patientDO.getMarriage()!=null){
            patientDO.setMarriageName(dictService.fingByNameAndCode(ConstantUtil.DICT_MARRIAGE_STATUS,String.valueOf(patientDO.getMarriage())));
        }
        String deviceSql = "select COUNT(*) from wlyy_patient_device a where a.`user` = '"+patientId+"'";
        Integer deviceFlag = jdbcTemplate.queryForObject(deviceSql, Integer.class);
        patientDO.setDeviceFlag(deviceFlag);
        res.put("patient",patientDO);
        Map<String, Object> patientInfo = JSONObject.parseObject(JSON.toJSONString(patientDO,SerializerFeature.WriteMapNullValue), Map.class);
        patientInfo.put("birthday",DateUtil.dateToStrShort(patientDO.getBirthday()));
        res.put("patient",patientInfo);
        String sql = "select * from base_service_package_sign_record where patient = '"+patientId+"' and status = 1 ";
        List<ServicePackageSignRecordDO> signRecordDOs = jdbcTemplate.query(sql,new BeanPropertyRowMapper(ServicePackageSignRecordDO.class));
@ -593,7 +596,7 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
    /**
     *
     * @param type 类型:1幼儿,2老人,3社工,4医生。5家属 不传返回四个类型的数据
     * @param type 类型:1幼儿,2签约老人,3社工,4医生,5老人家属 6助老员,7社区老人(未签约) 不传返回四个类型的数据
     * @param name 姓名
     * @param area 查询区域 目前仅支持查询老人、社工、家属
     * @param level 区域等级 2市3区4机构5团队6医生
@ -665,6 +668,34 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
            re.put("oldFamily",list);
            re.put("oldFamilyCount",findOlderFamilyTotal(name,area,level,filter));
        }
        if("6".equals(type)||StringUtils.isBlank(type)){//助老员
            filter = "";
            String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_org' ";
            List<Map<String,Object>> listtmp =  jdbcTemplate.queryForList(sqltmp);
            if(listtmp.size()>0){
                String orgCodes = String.valueOf(listtmp.get(0).get("orgCodes"));
                orgCodes = orgCodes.replaceAll(",","','");
                filter = " and h.org_code not in ('"+orgCodes+"')";
            }
            List<Map<String,Object>> list = findHelper4(name,area,level,limit,filter);
            re.put("helper4",list);
            re.put("helper4Total",findHelper4Total(name,area,level,filter));
        }
        if("7".equals(type)||StringUtils.isBlank(type)){//社区老人
            filter = "";
            String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_older' ";
            List<Map<String,Object>> listtmp =  jdbcTemplate.queryForList(sqltmp);
            if(listtmp.size()>0){
                String orgCodes = String.valueOf(listtmp.get(0).get("orgCodes"));
                orgCodes = orgCodes.replaceAll(",","','");
                filter = " and a.id not in ('"+orgCodes+"')";
            }
            List<Map<String,Object>> list = findUnSignOld(name,residentialArea,area,level,limit,filter);
            re.put("unSignOld",list);
            re.put("unSignOldCount",findUnSignOldTotal(name,residentialArea,area,level,filter));
        }
        return re;
    }
@ -716,7 +747,7 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
    }
    /**
     * 查找老人
     * 查找签约老人
     * @param name
     * @param residentialArea
     * @param limit
@ -725,7 +756,7 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
    public List<Map<String,Object>> findOld(String name,String residentialArea,String area,Integer level,String limit,String filter1){
        String sql = "SELECT a.id,a.name,a.photo,a.idcard,CAST(IFNULL(a.birthday,'') AS char ) birthday,a.residential_area residentialArea,a.sex " +
                ",a.ykt_id yktId, case 1 WHEN openid is not null then 1 WHEN a.on_line = '1' then 1 ELSE 0 end as online,IFNULL(sign_status,0) signStatus from base_patient a " +
                " WHERE a.archive_type = 1 and a.del = '1' ";
                " WHERE a.archive_type = 1 and a.del = '1' and a.sign_status=1  ";
        //case 1 WHEN openid is not null then 1 WHEN a.on_line = '1' then 1 ELSE 0 end as online
        //if(openid is null,0,1) onlineWx,IFNULL(a.on_line,0) onlinePad
@ -788,7 +819,7 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
    }
    public Integer findOldTotal(String name,String residentialArea,String area,Integer level,String filter){
        String sql = "SELECT count(a.id) from base_patient a  WHERE a.archive_type = 1 and a.del = '1' ";
        String sql = "SELECT count(a.id) from base_patient a  WHERE a.archive_type = 1 and a.del = '1' and a.sign_status=1 ";
        if(!StringUtil.isBlank(name)){
            sql+= " and name like '%"+name+"%' ";
        }
@ -805,6 +836,88 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
        return jdbcTemplate.queryForObject(sql,Integer.class);
    }
    /**
     * 查找签约老人
     * @param name
     * @param residentialArea
     * @param limit
     * @return
     */
    public List<Map<String,Object>> findUnSignOld(String name,String residentialArea,String area,Integer level,String limit,String filter1){
        String sql = "SELECT a.id,a.name,a.photo,a.idcard,CAST(IFNULL(a.birthday,'') AS char ) birthday,a.residential_area residentialArea,a.sex " +
                ",a.ykt_id yktId, case 1 WHEN openid is not null then 1 WHEN a.on_line = '1' then 1 ELSE 0 end as online,IFNULL(sign_status,0) signStatus from base_patient a " +
                " WHERE a.archive_type = 1 and a.del = '1' and a.sign_status=0  ";
        if(!StringUtil.isBlank(name)){
            sql+= " and name like '%"+name+"%' ";
        }
        if(!StringUtil.isBlank(residentialArea)){
            sql+= " and residential_area = '"+residentialArea+"' ";
        }
        if (StringUtils.isNotBlank(area)&&5==level){
            return null;
        }
        sql += filter1;
        sql += " GROUP BY a.id,a.name,a.photo,a.idcard,a.birthday,a.residential_area,a.sex,a.ykt_id,online,signStatus ";
        sql += " ORDER BY online desc,a.ykt_id desc,signStatus desc";
        sql += limit;
        List<Map<String,Object>>  list = jdbcTemplate.queryForList(sql);
        String sqlLife= "SELECT COUNT(*) from base_life_care_order ";
        String sqlEmergency= "SELECT COUNT(*) from base_emergency_assistance_order ";
        String sqlSecurity= "SELECT COUNT(*) from base_security_monitoring_order  ";
        String sqlDevice = "SELECT pd.category_code deviceFlag, IFNULL(d.contact_status,0) status from wlyy_patient_device pd,wlyy_devices d";
        for (Map<String,Object> map:list){
            String paientId = map.get("id").toString();
            String filterDevice = " WHERE pd.device_sn = d.device_code and pd.user = '"+paientId+"' ORDER BY deviceFlag,status desc";
            String idcardNo = map.get("idcard") + "";
            Date birthday = DateUtil.strToDate(map.get("birthday").toString());
            Integer age = IdCardUtil.getAgeByIdcardOrBirthday(idcardNo,birthday);
            map.put("age",age);
            String filter = " where patient = '"+paientId+"'";
            Integer lifeCare = jdbcTemplate.queryForObject(sqlLife+filter,Integer.class);
            Integer emergency = jdbcTemplate.queryForObject(sqlEmergency+filter,Integer.class);
            Integer security = jdbcTemplate.queryForObject(sqlSecurity+filter,Integer.class);
            List<Map<String,Object>> deviceList = jdbcTemplate.queryForList(sqlDevice+filterDevice);
            Iterator it = deviceList.listIterator();
            Map<Object,Object> deviceMap = new HashedMap();
            while (it.hasNext()){
                Map<String,Object> tmp = (Map<String,Object>)it.next();
                if(deviceMap.containsKey(tmp.get("deviceFlag"))){
                    it.remove();
                }else{
                    deviceMap.put(tmp.get("deviceFlag"),tmp.get("deviceFlag"));
                }
            }
            map.put("lifeCare",lifeCare);
            map.put("emergency",emergency);
            map.put("security",security);
            map.put("devices",deviceList);
            sql = " select sum(total) from ( " +
                    "select count(id) total from  base_emergency_assistance_order o where o.patient ='"+paientId+"' and o.`status`=1 " +
                    "UNION All " +
                    "select count(id) total from  base_security_monitoring_order o where o.patient ='"+paientId+"' and o.`status`=1 " +
                    ")A  ";
            Integer warnTotal = jdbcTemplate.queryForObject(sql,Integer.class);
            map.put("warnFlag",warnTotal>0?true:false);
        }
        return list;
    }
    public Integer findUnSignOldTotal(String name,String residentialArea,String area,Integer level,String filter){
        String sql = "SELECT count(a.id) from base_patient a  WHERE a.archive_type = 1 and a.del = '1' and a.sign_status=0 ";
        if(!StringUtil.isBlank(name)){
            sql+= " and name like '%"+name+"%' ";
        }
        if(!StringUtil.isBlank(residentialArea)){
            sql+= " and residential_area = '"+residentialArea+"' ";
        }
        if (StringUtils.isNotBlank(area)&&5==level){
            return 0;
        }
        sql += filter;
        return jdbcTemplate.queryForObject(sql,Integer.class);
    }
    /**
     * 查找社工
     * @param name
@ -827,7 +940,7 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
        List<Map<String,Object>>  list = jdbcTemplate.queryForList(sql);
        String sqlLife= "SELECT COUNT(*) from base_life_care_order where `status` = 2";
        String sqlEmergency= "SELECT COUNT(*) from base_emergency_assistance_order where `status` = 0";
        String sqlSecurity= "SELECT COUNT(*) from base_security_monitoring_order where `status` = 7 ";
        String sqlSecurity= "SELECT COUNT(*) from base_security_monitoring_order where `status` = 0 ";
        for (Map<String,Object> map:list){
            String doctorId = map.get("id").toString();
            List<BaseDoctorHospitalDO> hospitalDOS = doctorHospitalDao.findByDoctorCode(doctorId);
@ -863,6 +976,74 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
        return jdbcTemplate.queryForObject(sql,Integer.class);
    }
    /**
     * 查找助老员
     * @param name
     * @param limit
     * @return
     */
    public List<Map<String,Object>> findHelper4(String name,String area,Integer level,String limit,String fileter){
        String sql = "SELECT a.id,a.name,a.photo,a.sex,IFNULL(a.on_line,0) online from base_doctor a,base_doctor_hospital h" +
                "  WHERE a.id=h.doctor_code and a.doctor_level = 4 and a.del = '1' and h.del = '1' ";
        if(!StringUtil.isBlank(name)){
            sql+= " and a.name like '%"+name+"%' ";
        }
        if (StringUtils.isNotBlank(area)&&5==level){
            sql += " and EXISTS ( select 1 from base_patient_helper ph,base_service_package_sign_record sr, " +
                    " base_service_package_record r, base_service_package_item i,base_service_package pack  " +
                    " where ph.del=1 and ph.doctor = a.id and sr.id = r.sign_id and sr.status=1 and r.service_package_id = i.service_package_id " +
                    " and r.service_package_id = pack.id and i.del = 1  and sr.`status`=1 and CONVERT(sr.patient USING utf8) = ph.patient " +
                    " and r.team_code='"+area+"') ";
        }
        sql += fileter;
        sql += " ORDER BY online desc";
        sql+=limit;
        List<Map<String,Object>>  list = jdbcTemplate.queryForList(sql);
        String sqlLife= " SELECT COUNT(distinct ord.id) from base_life_care_order ord,base_doctor_hospital h where ord.`status` = 2 " +
                " and ord.hospital = h.org_code and h.del='1' ";
        String sqlEmergency= " SELECT COUNT(distinct ord.id) from base_emergency_assistance_order ord,base_patient_helper h where ord.`status` = 0 " +
                " and ord.patient = h.patient and h.del=1 ";
        String sqlSecurity= " SELECT COUNT(distinct ord.id) from base_security_monitoring_order ord,base_patient_helper h where ord.`status` = 0 " +
                " and ord.patient = h.patient and h.del=1 ";
        for (Map<String,Object> map:list){
            String doctorId = map.get("id").toString();
            List<BaseDoctorHospitalDO> hospitalDOS = doctorHospitalDao.findByDoctorCode(doctorId);
            if (hospitalDOS.size()>0){
                map.put("residentialArea",hospitalDOS.get(0).getOrgName());
                map.put("org_code",hospitalDOS.get(0).getOrgCode());
            }else {
                map.put("residentialArea",null);
                map.put("org_code",null);
            }
            String filter = " and h.doctor_code = '"+doctorId+"'";
            Integer lifeCare = jdbcTemplate.queryForObject(sqlLife+filter,Integer.class);
            filter = " and h.doctor = '"+doctorId+"'";
            Integer emergency = jdbcTemplate.queryForObject(sqlEmergency+filter,Integer.class);
            Integer security = jdbcTemplate.queryForObject(sqlSecurity+filter,Integer.class);
            map.put("lifeCare",lifeCare);
            map.put("emergency",emergency);
            map.put("security",security);
        }
        return list;
    }
    public Integer findHelper4Total(String name,String area,Integer level,String filter){
        String sql = "SELECT count(a.id) from base_doctor a,base_doctor_hospital h WHERE  a.id=h.doctor_code and a.doctor_level = 4 and a.del = '1' and h.del = '1'  ";
        if(!StringUtil.isBlank(name)){
            sql+= " and name like '%"+name+"%' ";
        }
        if (StringUtils.isNotBlank(area)&&5==level){
            sql += " and EXISTS ( select 1 from base_patient_helper ph,base_service_package_sign_record sr, " +
                    " base_service_package_record r, base_service_package_item i,base_service_package pack  " +
                    " where ph.del=1 and ph.doctor = a.id and sr.id = r.sign_id and sr.status=1 and r.service_package_id = i.service_package_id " +
                    " and r.service_package_id = pack.id and i.del = 1  and sr.`status`=1 and CONVERT(sr.patient USING utf8) = ph.patient " +
                    " and r.team_code='"+area+"') ";
        }
        sql += filter;
        return jdbcTemplate.queryForObject(sql,Integer.class);
    }
    public List<Map<String,Object>> findOlderFamily(String name,String limit,String area,Integer level,String fileter){
        String sql = "select t2.id,t2.name,t2.sex,t2.mobile,t2.idcard,if(t2.openid is null,0,1) online,t2.photo,t1.family_relation,t1.patient older,t3.name olderName " +
                "from base_patient t2 left JOIN base_patient_family_member t1 on t1.family_member = t2.id " +

+ 138 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/security/SecurityMonitoringOrderService.java

@ -21,6 +21,7 @@ import com.yihu.jw.care.service.message.BaseServiceNewsService;
import com.yihu.jw.care.service.sign.ServicePackageService;
import com.yihu.jw.care.util.ConstantUtil;
import com.yihu.jw.care.util.CountDistance;
import com.yihu.jw.care.util.DeviceDataPushLogUtil;
import com.yihu.jw.care.util.MessageUtil;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
@ -150,6 +151,8 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
    private PermissionService permissionService;
    @Autowired
    private BaseServiceNewsService baseServiceNewsService;
    @Autowired
    private DeviceDataPushLogUtil deviceDataPushLogUtil;
    private Logger logger = LoggerFactory.getLogger(SecurityMonitoringOrderService.class);
@ -304,7 +307,6 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                if (StringUtils.isNotBlank(doctorDO.getMobile())) {
                    messageUtil.sendTXYSJson("1141719", doctorDO.getMobile(), orderDO.getPatientName(), orderDO.getServeDesc());
                }
            } catch (Exception e) {
            }
            String body = "您好," + orderDO.getPatientName() + "居民" + orderDO.getServeDesc() + ",请关注并及时处理。";
@ -316,7 +318,9 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        imUtil.sendPcManageMessageToPc("cloudCare_pcManage", message.toString());
        result.put("resultFlag", 1);
        result.put("resultMsg", orderDO);
        if (StringUtils.isNotBlank(orderDO.getDeviceSn())){
            deviceDataPushLogUtil.savePatientMonitorData(orderDO.getDeviceSn(),22,orderDO.getServeDesc(),orderDO.getId());
        }
        baseServiceNewsService.addServiceNews(patientDO.getName(),patientDO.getId(),"6",null,orderDO.getId(),1);
        return result;
@ -504,6 +508,11 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                e.printStackTrace();
            }
        }
        if (9 == orderDO.getOrderSource()){
            Map<String, Object> map = new HashMap<>();
            map.put("infoDetail", orderDO.getWarnInfo());
            emergencyOrderVO.setInformation(map);
        }
        //通知对象
        List<Map<String, Object>> noticePersons = new ArrayList<>();
@ -721,6 +730,9 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                case "preventOutOfBed":
                    categoryCode = "'13'";
                    break;
                case "dailyWater":
                    categoryCode = "'18'";
                    break;
            }
            if (StringUtils.isNotBlank(doctor)) {//日常监护医生必传
                BaseDoctorDO doctorDO = baseDoctorDao.findById(doctor);
@ -890,6 +902,9 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                case "preventOutOfBed":
                    categoryCode = "'13'";
                    break;
                case "dailyWater":
                    categoryCode = "'18'";
                    break;
            }
            if (StringUtils.isNotBlank(doctor)) {//日常监护医生必传
                BaseDoctorDO doctorDO = baseDoctorDao.findById(doctor);
@ -1659,6 +1674,24 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                        }
                    }
                    break;
                case "dailyWater":
                    if (patientDeviceService.patientDeviceListByTopic(patient,"preventOutOfBed").size()==0){
                        result.put("dailyWater", null);
                    }else {
                        Integer count = Integer.parseInt(tmp.get("total").toString());
                        if (count > 0) {
                            result.put("dailyWater", true);
                            sql = " select serve_desc from base_security_monitoring_order where topic_item='dailyWater' " +
                                    "and patient='" + patient + "' and `status`=1 order by create_time desc limit 1 ";
                            List<String> serveDesces = jdbcTemplate.queryForList(sql, String.class);
                            if (serveDesces.size() > 0) {
                                result.put("dailyWaterOrderInfo", serveDesces.get(0));
                            }
                        } else {
                            result.put("dailyWater", false);
                        }
                    }
                    break;
            }
        }
        sql = " select count(id) from base_emergency_assistance_order  where patient='" + patient + "' and status=" + EmergencyAssistanceDO.Status.apply.getType();
@ -1733,6 +1766,16 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                        tmp.put("devices", null);
                    }
                    break;
                case "dailyWater":
                    devices = patientDeviceService.patientDeviceListByTopic(patient,"preventLost");
                    if (devices.size()>0){
                        tmp.put("band", true);
                        tmp.put("devices", devices);
                    }else {
                        tmp.put("band", true);
                        tmp.put("devices", null);
                    }
                    break;
            }
        }
        sql = " select 'emeAssistance' as code,ord.id,ord.patient,'20' as OrderType,'紧急呼叫' as serveDesc " +
@ -1826,6 +1869,21 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                        result.put("sleep", false);
                    }
                    break;
                case "dailyWater":
                    count = Integer.parseInt(tmp.get("total").toString());
                    if (count > 0) {
                        result.put("dailyWater", true);
                        sql = " select serve_desc from base_security_monitoring_order where topic_item='dailyWater' " +
                                "and patient='" + patient + "' and `status`=1 order by create_time desc limit 1 ";
                        List<String> serveDesces = jdbcTemplate.queryForList(sql, String.class);
                        if (serveDesces.size() > 0) {
                            result.put("dailyWaterOrderInfo", serveDesces.get(0));
                        }
                    } else {
                        result.put("dailyWater", false);
                    }
                    break;
            }
        }
        sql = " select count(id) from base_emergency_assistance_order  where patient='" + patient + "' and status=" + EmergencyAssistanceDO.Status.apply.getType();
@ -1932,6 +1990,24 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                devicePatientDeviceDos = patientDeviceDao.findByUserAndCategoryCode(patient, "4");//手表
                devicePatientDeviceDos2 = patientDeviceDao.findByUserAndCategoryCode(patient, "16");//拐杖
            }
            if(devicePatientDeviceDos.size()==0&&devicePatientDeviceDos2.size()==0){
                BasePatientDO patientDO = basePatientDao.findById(patient);
                JSONObject tmp = new JSONObject();
                tmp.put("city",null);
                tmp.put("province", null);
                tmp.put("address", patientDO.getAddress());
                if (StringUtils.isNotBlank(patientDO.getLatLon())) {
                    String[] latLon = patientDO.getLatLon().split(",");
                    if (StringUtils.isNotBlank(patientDO.getHomeLatLon()) && latLon.length == 2) {
                        String homeLatLon = patientDO.getHomeLatLon();
                        String homeLat = homeLatLon.split(",")[0];
                        String homeLon = homeLatLon.split(",")[1];
                        tmp.put("lon", homeLon);
                        tmp.put("lat", homeLat+"");
                    }
                }
                result.put("location", tmp);
            }
            if (devicePatientDeviceDos.size() > 0 && (4 == categoryCode || 0 == categoryCode)) {//手表
                DevicePatientDevice device = devicePatientDeviceDos.get(0);
                result.put("deviceSn", device.getDeviceSn());
@ -2521,6 +2597,9 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            case "preventOutOfBed":
                categoryCode = "'13'";
                break;
            case "dailyWater":
                categoryCode = "'18'";
                break;
        }
        fliter = " and EXISTS (select 1 from wlyy_patient_device pd INNER JOIN dm_device dd on pd.device_id = dd.id  " +
@ -2653,6 +2732,9 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            case "preventOutOfBed":
                categoryCode = "'13'";
                break;
            case "dailyWater":
                categoryCode = "'18'";
                break;
            case "emergencyAssistance":
                categoryCode = "'7','4'";
                break;
@ -2840,5 +2922,59 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        }
        return result;
    }
    /**
     * 获取居民专题 已绑定
     * @param patient
     * @return
     */
    public List<Map<String,Object>> getPatientDeviceTopic(String patient){
        List<Map<String,Object>> result = new ArrayList<>();
        String sql = " select distinct pd.device_sn,pd.category_code from wlyy_patient_device pd where pd.del=0  " +
                " and pd.category_code in (4,7,12,13,14,15,18) and pd.`user`='"+patient+"' " +
                " group by pd.category_code ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> tmp:list){
            Map<String,Object> mapTmp = new HashMap<>();
            switch (tmp.get("category_code").toString()){
                case "4":
                    mapTmp.put("deviceSn",tmp.get("device_sn").toString());
                    mapTmp.put("topic","preventLost");
                    result.add(mapTmp);
                    break;
                case "7":
                    mapTmp.put("deviceSn",tmp.get("device_sn").toString());
                    mapTmp.put("topic","emergencyAssistance");
                    result.add(mapTmp);
                    break;
                case "12":
                    mapTmp.put("deviceSn",tmp.get("device_sn").toString());
                    mapTmp.put("topic","preventFall");
                    result.add(mapTmp);
                    break;
                case "13":
                    mapTmp.put("deviceSn",tmp.get("device_sn").toString());
                    mapTmp.put("topic","preventOutOfBed");
                    result.add(mapTmp);
                    break;
                case "14":
                    mapTmp.put("deviceSn",tmp.get("device_sn").toString());
                    mapTmp.put("topic","preventGasLeakage");
                    result.add(mapTmp);
                    break;
                case "15":
                    mapTmp.put("deviceSn",tmp.get("device_sn").toString());
                    mapTmp.put("topic","preventFire");
                    result.add(mapTmp);
                    break;
                case "18":
                    mapTmp.put("deviceSn",tmp.get("device_sn").toString());
                    mapTmp.put("topic","dailyWater");
                    result.add(mapTmp);
                    break;
            }
        }
        return  result;
    }
}

+ 3 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/ServicePackageService.java

@ -398,8 +398,9 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
     * @return
     */
    public int getSignTotal(String doctorId){
        String sql = "SELECT COUNT(DISTINCT sr.patient) from base_service_package_sign_record sr,base_service_package_record r,base_team_member m " +
                "WHERE sr.status=1 and m.team_code = r.team_code and sr.id=r.sign_id " +
        String sql = "SELECT COUNT(DISTINCT sr.patient) from base_service_package_sign_record sr,base_service_package_record r, " +
                " base_team_member m " +
                "WHERE sr.status=1 and m.team_code = r.team_code and sr.id=r.sign_id and p.id = sr.patient and p.del=1  " +
                "and m.doctor_code = '"+doctorId+"' and m.del = '1' ";
        return jdbcTemplate.queryForObject(sql,Integer.class);

+ 46 - 10
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/statistics/StatisticsService.java

@ -685,6 +685,14 @@ public class StatisticsService {
        Integer olderFamilyOn = 0;
        Integer olderFamilyOff = 0;
        Integer olderFamilyBinding = 0;//家属绑定老人数量
        Integer helper4On=0;
        Integer helper4Off=0;
        Integer helper4Total=0;
        Integer unSignOlderTotal=0;
        Integer unSignOlderOff=0;
        Integer unSignOlderOn=0;
        //儿童注册人数
        String childFilter = "";
        String sqlChildtmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_child' or dict_name = 'jkzl_older'  ";
@ -706,7 +714,6 @@ public class StatisticsService {
                childOff += num;
            }
        }
        //老人
        String oldFilter = "";
        String sqlOldtmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_older' ";
@ -723,7 +730,7 @@ public class StatisticsService {
                    " where sr.id = r.sign_id and sr.status=1 and r.service_package_id = i.service_package_id and r.service_package_id = pack.id " +
                    " and i.del = 1  and sr.`status`=1 and CONVERT(sr.patient USING utf8)  = a.id and r.team_code='"+area+"') ";
        }
        String sql1 = "SELECT COUNT(*) c,case 1 WHEN openid is not null then 1 WHEN a.on_line = '1' then 1 ELSE 0 end as online from base_patient a WHERE archive_type = 1 " +
        String sql1 = "SELECT COUNT(*) c,case 1 WHEN openid is not null then 1 WHEN a.on_line = '1' then 1 ELSE 0 end as online from base_patient a WHERE archive_type = 1 and sign_status=1 " +
                " and del='1' "+areaFilter+" " + oldFilter + " GROUP BY online";
        List<Map<String, Object>> list1 = jdbcTemplate.queryForList(sql1);
        for (Map<String, Object> map : list1) {
@ -738,6 +745,20 @@ public class StatisticsService {
        olderTotal = olderOff + olderOn;
        childTotal = childOff + childOn;
        sql1 = "SELECT COUNT(*) c,case 1 WHEN openid is not null then 1 WHEN a.on_line = '1' then 1 ELSE 0 end as online from base_patient a WHERE archive_type = 1 and (sign_status=0 or sign_status is null ) " +
                " and del='1' " + oldFilter + " GROUP BY online";
        list1 = jdbcTemplate.queryForList(sql1);
        for (Map<String, Object> map : list1) {
            Integer num = Integer.valueOf(map.get("c").toString());
            Integer online = Integer.valueOf(map.get("online").toString());
            if (online == 1) {
                unSignOlderOn += num;
            } else {
                unSignOlderOff += num;
            }
        }
        unSignOlderTotal = unSignOlderOff+unSignOlderOn;
        //社工和教师注册人数
        if (org.apache.commons.lang3.StringUtils.isNotBlank(area)&&5==level){
            areaFilter = " and EXISTS ( select 1 from base_team_member mem where mem.doctor_code = a.id " +
@ -768,9 +789,17 @@ public class StatisticsService {
                    teacherOff += num;
                }
            }
            if ("4".equals(archive_type)) {
                if (online == 1) {
                    helper4On += num;
                } else {
                    helper4Off += num;
                }
            }
        }
        helperTotal = helperOff + helperOn;
        teacherTotal = teacherOff + teacherOn;
        helper4Total = helper4On + helper4Off;
        //老人家属
        String olderRelativeFilter = "";
@ -821,20 +850,27 @@ public class StatisticsService {
        olderFamilyBinding = jdbcTemplate.queryForObject(sql2,Integer.class);
        //helper 社工,teacher 教师,child 幼儿,olderWx 老人公众号,olderPad 老人平板
        //helper 社工,teacher 教师,child 幼儿,olderWx 老人公众号,olderPad 老人平板 olderFamily老人家属
        //helper4助老员 unSignOlder社区老人
        result.put("olderTotal", olderTotal);
        result.put("olderOn", olderOn);
        result.put("olderOff", olderOff);
        result.put("childTotal", childTotal);
        result.put("helperTotal", helperTotal);
        result.put("teacherTotal", teacherTotal);
        result.put("helperOn", helperOn);
        result.put("teacherOn", teacherOn);
        result.put("childOn", childOn);
        result.put("olderOn", olderOn);
        result.put("childOff", childOff);
        result.put("unSignOlderTotal", unSignOlderTotal);
        result.put("unSignOlderOff", unSignOlderOff);
        result.put("unSignOlderOn", unSignOlderOn);
        result.put("helperTotal", helperTotal);
        result.put("helperOff", helperOff);
        result.put("helperOn", helperOn);
        result.put("teacherTotal", teacherTotal);
        result.put("teacherOff", teacherOff);
        result.put("olderOff", olderOff);
        result.put("teacherOn", teacherOn);
        result.put("helper4Total", helper4Total);
        result.put("helper4On", helper4On);
        result.put("helper4Off", helper4Off);
        //老人家属
        result.put("olderFamilyTotal", olderFamilyTotal);

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/third/PatientInfoPlatFormService.java

@ -703,7 +703,7 @@ public class PatientInfoPlatFormService {
            sql += " and pd.device_sn = '"+deviceSn+"' ";
        }
        sql+=" order by pd.czrq asc ";
        sql+=" order by device_type desc,pd.czrq asc ";
        list =  jdbcTemplate.queryForList(sql);
        for (Map<String,Object> tmp :list){
            String category_code = tmp.get("category_code").toString();

+ 137 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/DeviceDataPushLogUtil.java

@ -0,0 +1,137 @@
package com.yihu.jw.care.util;
import com.yihu.jw.care.dao.device.BasePatientMonitorDataDao;
import com.yihu.jw.care.dao.device.DeviceDataPushLogDao;
import com.yihu.jw.care.dao.device.DeviceDetailDao;
import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.care.device.BasePatientMonitorDataDO;
import com.yihu.jw.entity.care.device.DeviceDataPushLog;
import com.yihu.jw.entity.care.device.DeviceDetail;
import com.yihu.jw.entity.care.device.DevicePatientDevice;
import com.yihu.jw.hospital.message.dao.SystemMessageDao;
import com.yihu.jw.patient.dao.BasePatientDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * Created by Bing on 2021/9/2.
 * 设备数据推送日志保存
 */
@Component
public class DeviceDataPushLogUtil {
    @Autowired
    private DeviceDataPushLogDao deviceDataPushLogDao;
    @Autowired
    private PatientDeviceDao patientDeviceDao;
    @Autowired
    private BasePatientDao patientDao;
    @Autowired
    private DeviceLostMessageUtil deviceLostMessageUtil;
    @Autowired
    private DeviceDetailDao deviceDetailDao;
    @Autowired
    private SystemMessageDao systemMessageDao;
    @Autowired
    private BasePatientMonitorDataDao basePatientMonitorDataDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public void savePushLog(String sn,String data,String apiName){
        try {
            DeviceDataPushLog pushLog = new DeviceDataPushLog();
            pushLog.setDeviceSn(sn);
            pushLog.setData(data);
            pushLog.setApiName(apiName);
            pushLog.setCreateTime(new Date());
            List<DevicePatientDevice> devices= patientDeviceDao.findByDeviceSn(sn);
            if (devices.size()>0){
                DevicePatientDevice tmp = devices.get(0);
                BasePatientDO patientDO = patientDao.findById(tmp.getUser());
                if (null!=patientDO){
                    pushLog.setPatient(tmp.getUser());
                    pushLog.setPatientName(patientDO.getName());
                }
                pushLog.setDeviceName(tmp.getDeviceName());
                pushLog.setDeviceCategory(tmp.getCategoryCode());
            }
            deviceDataPushLogDao.save(pushLog);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
     * 更新在线状态 及次数
     * @param sn
     * @param status
     * @param flag 状态 true 异常 false 正常 null其他
     */
    @Transactional
    public void updContactStatus(String sn,Integer status,Boolean flag){
        DeviceDetail deviceDetail = deviceDetailDao.findBySn(sn);
        if(deviceDetail!=null){
            deviceDetail.setContactStatus(status);
            if(0==status){
                List<String> sns =  new ArrayList<String>();
                sns.add(sn);
                deviceLostMessageUtil.deviceLostMessage(sns);
            }
            else if(1==status){
                //设备在线清除原有的离线消息
                List<String> sns = new ArrayList<String>();
                sns.add(sn);
                systemMessageDao.delMessageByRelationCode(sns);
            }
            deviceDetail.setContactStatusTime(new Date());
            if(deviceDetail.getCollectNum()==null){
                deviceDetail.setCollectNum(0L);
            }
            if(deviceDetail.getAbnormalNum()==null){
                deviceDetail.setAbnormalNum(0L);
            }
            if(flag!=null){
                deviceDetail.setCollectNum(deviceDetail.getCollectNum()+1L);
                if(flag){
                    deviceDetail.setAbnormalNum(deviceDetail.getAbnormalNum()+1L);
                }
            }
            deviceDetailDao.save(deviceDetail);
        }
    }
    /**
     */
    @Async
    public void savePatientMonitorData(String deviceSn,Integer type,String deviceInfo,String relationCode){
        BasePatientMonitorDataDO basePatientMonitorDataDO = new BasePatientMonitorDataDO();
        String sql = " select `user`,category_code from wlyy_patient_device where device_sn='"+deviceSn+"' and del=0 ";
        List<Map<String,Object>> patients = jdbcTemplate.queryForList(sql);
        if (patients.size()>0){
            String patient = patients.get(0).get("user").toString();
            String categoryCode = patients.get(0).get("category_code").toString();
            BasePatientDO patientDO = patientDao.findById(patient);
            basePatientMonitorDataDO.setPatient(patientDO.getId());
            basePatientMonitorDataDO.setPatientName(patientDO.getName());
            basePatientMonitorDataDO.setCategoryCode(categoryCode);
            basePatientMonitorDataDO.setDeviceSn(deviceSn);
            basePatientMonitorDataDO.setType(type);
            basePatientMonitorDataDO.setDeviceInfo(deviceInfo);
            basePatientMonitorDataDO.setRelationCode(relationCode);
            basePatientMonitorDataDO.setCreateTime(new Date());
            basePatientMonitorDataDao.save(basePatientMonitorDataDO);
        }
    }
}

+ 116 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/DeviceLostMessageUtil.java

@ -0,0 +1,116 @@
package com.yihu.jw.care.util;
import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.care.device.DevicePatientDevice;
import com.yihu.jw.entity.hospital.message.SystemMessageDO;
import com.yihu.jw.hospital.message.dao.SystemMessageDao;
import com.yihu.jw.patient.dao.BasePatientDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * Created by Bing on 2021/9/13.
 */
@Component
public class DeviceLostMessageUtil {
    @Autowired
    private SystemMessageDao systemMessageDao;
    @Autowired
    private PatientDeviceDao patientDeviceDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private BasePatientDao patientDao;
    /**
     * 设备离线通知
     * @param devices
     */
    public void deviceLostMessage(List<String> devices){
        List<SystemMessageDO> messageDOS = new ArrayList<>();
        for (String id:devices){
            List<SystemMessageDO> sendMessageBefore = systemMessageDao.queryByRelationCodeAndTypeIn(id,new String[]{"43"});
            if (sendMessageBefore.size()>0){//删除之前的离线消息
                systemMessageDao.delete(sendMessageBefore);
            }
            List<DevicePatientDevice> pds =  patientDeviceDao.findByDeviceSn(id);
            if (pds.size()>0){
                DevicePatientDevice deviceDO = pds.get(0);
                String sql = "SELECT DISTINCT d.id,d.name from base_service_package_sign_record sr,base_service_package_record r,base_team_member m,base_doctor d  " +
                        "               WHERE sr.status=1 and m.team_code = r.team_code and sr.id=r.sign_id and m.doctor_code = d.id " +
                        "               and m.del = '1' and sr.patient = '"+deviceDO.getUser()+"' " ;
                List<Map<String,Object>> doctors = jdbcTemplate.queryForList(sql);
                // 家属
                sql = " select  t2.id,t2.name from  base_patient_family_member t1,  base_patient t2 where  " +
                        "t2.id in (select family_member from base_patient_family_member where patient = '"+deviceDO.getUser()+"' )  " +
                        " and t1.patient = '"+deviceDO.getUser()+"'  and t1.family_member = t2.id  " +
                        " and t2.archive_type=3 GROUP BY t2.id " ;
                List<Map<String,Object>> relatives = jdbcTemplate.queryForList(sql);
                doctors.addAll(relatives);
                String deviceName="";
                for (Map<String,Object> docTmp:doctors){
                    switch (deviceDO.getCategoryCode()){
                        case "1":
                            deviceName="血糖仪离线";
                            break;
                        case "2":
                            deviceName="血压计离线";
                            break;
                        case "4":
                            deviceName="智能手表离线";
                            break;
                        case "7":
                            deviceName="居家安全报警器离线";
                            break;
                        case "12":
                            deviceName="监控器离线";
                            break;
                        case "13":
                            deviceName="睡眠带离线";
                            break;
                        case "14":
                            deviceName="气感报警器离线";
                            break;
                        case "15":
                            deviceName="烟感报警器离线";
                            break;
                        case "16":
                            deviceName="智能拐杖离线";
                            break;
                        case "17":
                            deviceName="随身WiFi离线";
                            break;
                    }
                    BasePatientDO patientDO = patientDao.findById(deviceDO.getUser());
                    SystemMessageDO messageDO = new SystemMessageDO();
                    messageDO.setTitle("设备离线通知");
                    messageDO.setType("43");
                    messageDO.setIsRead("0");
                    messageDO.setSender(deviceDO.getUser());
                    messageDO.setSenderName(patientDO.getName());
                    messageDO.setRelationCode(id);
                    messageDO.setReceiver(docTmp.get("id").toString());
                    messageDO.setReceiverName(docTmp.get("name").toString());
                    messageDO.setOver("1");
                    messageDO.setData(deviceName);
                    messageDO.setDel("1");
                    messageDO.setCreateTime(new Date());
                    messageDO.setSenderPhoto(patientDO.getPhoto());
                    messageDOS.add(messageDO);
                }
            }
        }
        if (messageDOS.size()>0){
            systemMessageDao.save(messageDOS);
        }
    }
}

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

@ -0,0 +1,12 @@
package com.yihu.jw.care.dao.device;
import com.yihu.jw.entity.care.device.BasePatientMonitorDataDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by Bing on 2022/4/25.
 */
public interface BasePatientMonitorDataDao extends PagingAndSortingRepository<BasePatientMonitorDataDO,Long>,
        JpaSpecificationExecutor<BasePatientMonitorDataDO> {
}

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

@ -109,6 +109,7 @@ public class DeviceService {
    private String wxId;
    @Autowired
    private PatientFamilyService patientFamilyService;
    @Autowired
    /**
     * 获取爱牵挂管理员cookie
@ -382,6 +383,11 @@ public class DeviceService {
                    BasePatientDO patientDO = patientDao.findById(deviceDO.getUser());
                    JSONObject position = gpsUtil.gcj02_To_Bd09(lat,lon);
                    patientDO.setLatLon(position.getDouble("lat")+","+position.getDouble("lon"));
                    JSONObject logTmp = new JSONObject();
                    logTmp.put("lat",position.getDouble("lat")+"");
                    logTmp.put("lon",position.getDouble("lon")+"");
                    logTmp.put("address",address);
                    dataPushLogUtil.savePatientMonitorData(imei,9,logTmp.toJSONString(),null);
                    if (StringUtils.isNotBlank(patientDO.getHomeLatLon())){
                        String homeLatLon = patientDO.getHomeLatLon();
                        double homeLat = Double.parseDouble(homeLatLon.split(",")[0]);
@ -455,7 +461,6 @@ public class DeviceService {
                    patientHealthIndex.setStatus(0);
                    patientHealthIndex.setDel("1");
                    SystemMessageDO messageDO = new SystemMessageDO();
                    String typeName = "您有新的心率测量记录。心率:" + patientHealthIndex.getValue1() + "次/min";
                    messageDO.setTitle(typeName);
@ -498,7 +503,8 @@ public class DeviceService {
                        dataPushLogUtil.updContactStatus(imei,1,true);
                    }
                    dataPushLogUtil.updContactStatus(imei,1,false);
                    healthIndexDao.save(patientHealthIndex);
                    patientHealthIndex = healthIndexDao.save(patientHealthIndex);
                    dataPushLogUtil.savePatientMonitorData(imei,5,heartrate+"",patientHealthIndex.getId()+"");
                    //心率不做异常消息推送
//                    systemMessageDao.save(messageDO);
//                    imUtil.sendPatientSystemMessage(messageDO.getReceiver(),JSON.toJSONString(message,SerializerFeature.WriteMapNullValue));
@ -584,6 +590,7 @@ public class DeviceService {
                    }
                    dataPushLogUtil.updContactStatus(imei,1,false);
                    healthIndexDao.save(patientHealthIndex);
                    dataPushLogUtil.savePatientMonitorData(imei,2,JSON.toJSONString(patientHealthIndex, SerializerFeature.WriteMapNullValue),patientHealthIndex.getId()+"");
                    systemMessageDao.save(messageDO);
                    imUtil.sendPatientSystemMessage(messageDO.getReceiver(),JSON.toJSONString(message,SerializerFeature.WriteMapNullValue));
                }
@ -650,7 +657,6 @@ public class DeviceService {
                    sleepX1device.setTotal(total);
                    sleepX1device.setCreateTime(DateUtil.strToDate(time_begin));
                    sleepX1device.setEndTime(DateUtil.strToDate(time_end));
                    baseSleepX1deviceDao.save(sleepX1device);
                }
            }
@ -680,7 +686,8 @@ public class DeviceService {
                    Date createTime = DateUtil.strToDate(time_begin,DateUtil.yyyy_MM_dd_HH_mm_ss);
                    basePatientStepDo.setCreateTime(createTime);
                    basePatientStepDo.setDay(DateUtil.dateToStr(createTime,DateUtil.YYYY_MM_DD));
                    stepDao.save(basePatientStepDo);
                    basePatientStepDo =  stepDao.save(basePatientStepDo);
                    dataPushLogUtil.savePatientMonitorData(imei,8,value+"",basePatientStepDo.getId()+"");
                }
            }
        } catch (Exception e) {
@ -993,6 +1000,14 @@ public class DeviceService {
                return;
            }
        }
        if (outBed.getStatus()==null||(status!=outBed.getStatus())){
            if (1==status){
                dataPushLogUtil.savePatientMonitorData(device,11,"老人上床",null);
            }
            if (0==status){
                dataPushLogUtil.savePatientMonitorData(device,11,"老人离床",null);
            }
        }
        outBed.setPatient(patient);
        outBed.setDeviceSn(device);
        outBed.setStatus(status);

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

@ -414,6 +414,9 @@ public class DeviceUploadService {
            }
            obj = patientHealthIndexDao.save(obj);
            if ("1".equals(type)||"2".equals(type)){
                dataPushLogUtil.savePatientMonitorData(deviceSn,Integer.parseInt(type),JSON.toJSONString(obj, SerializerFeature.WriteMapNullValue),obj.getId()+"");
            }
            return obj;
        }
        return null;
@ -554,6 +557,11 @@ public class DeviceUploadService {
                            DevicePatientDevice patientDevice = null;
                            if (patientDeviceList.size()>0){
                                patientDevice = patientDeviceList.get(0);
                                com.alibaba.fastjson.JSONObject logTmp = new com.alibaba.fastjson.JSONObject();
                                logTmp.put("lat",position.getDouble("lat")+"");
                                logTmp.put("lon",position.getDouble("lon")+"");
                                logTmp.put("address",LatitudeUtils.getLocationAddress(dulat+"",dulon+""));
                                dataPushLogUtil.savePatientMonitorData(sn,9,logTmp.toJSONString(),null);
                            }
                            if (null!=patientDevice){//存在围栏地址 判断是否超出围栏,
                                List<PatientSafeAreaDO> safeAreaDOS = safeAreaDao.findByPatient(patientDevice.getUser());

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

@ -188,6 +188,14 @@ public class HvDeviceService {
        }
        if(list.size()>0){
            deviceHealthIndexDao.save(list);
            for (DeviceHealthIndex tmp :list){
                if ("1".equals(tmp.getDeviceType())){
                    dataPushLogUtil.savePatientMonitorData(tmp.getDeviceSn(),14,tmp.getValue()+tmp.getUnit(),null);
                }
                if ("2".equals(tmp.getDeviceType())){
                    dataPushLogUtil.savePatientMonitorData(tmp.getDeviceSn(),15,tmp.getValue()+tmp.getUnit(),null);
                }
            }
        }
    }

+ 14 - 1
svr/svr-cloud-device/src/main/java/com/yihu/jw/care/service/OnenetService.java

@ -255,6 +255,12 @@ public class OnenetService {
        index.setValue(monitorValue);
        index.setRecordTime(time);
        index.setDeviceType(deviceType);
        if ("1".equals(deviceType)){
            dataPushLogUtil.savePatientMonitorData(resourceSerial,14,monitorValue+unit,null);
        }
        if ("2".equals(deviceType)){
            dataPushLogUtil.savePatientMonitorData(resourceSerial,15,monitorValue+unit,null);
        }
        deviceHealthIndexDao.save(index);
    }
@ -408,6 +414,7 @@ public class OnenetService {
            index.setDeviceType("2");
            index.setValue(value);
            deviceHealthIndexDao.save(index);
            dataPushLogUtil.savePatientMonitorData(deviceSn,15,value+"%",null);
            if (smokeValue>=70){
                if (StringUtils.isNotBlank(index.getTemperaturValue())){
                    if (50<=Integer.valueOf(index.getTemperaturValue())){ //查询温度是否>=50
@ -428,6 +435,7 @@ public class OnenetService {
                }
            }
            index.setTemperaturValue(temperatureValue+"");
            dataPushLogUtil.savePatientMonitorData(deviceSn,10,temperatureValue+"",null);
            deviceHealthIndexDao.save(index);
        }
        if ("5501".equals(msgId)){//当前剩余电量
@ -502,10 +510,15 @@ public class OnenetService {
                index.setUnit("%");
                index.setDeviceType("2");
            }
            index.setValue(gas+"");
            index.setRecordTime(DateUtil.getStringDate());
            deviceHealthIndexDao.save(index);
            if ("1".equals(index.getDeviceType())){
                dataPushLogUtil.savePatientMonitorData(deviceSn,14,index.getValue()+index.getUnit(),null);
            }
            if ("2".equals(index.getDeviceType())){
                dataPushLogUtil.savePatientMonitorData(deviceSn,15,index.getValue()+index.getUnit(),null);
            }
        }
        return flag;

+ 33 - 0
svr/svr-cloud-device/src/main/java/com/yihu/jw/care/util/DeviceDataPushLogUtil.java

@ -1,21 +1,26 @@
package com.yihu.jw.care.util;
import com.yihu.jw.care.dao.device.BasePatientMonitorDataDao;
import com.yihu.jw.care.dao.device.DeviceDataPushLogDao;
import com.yihu.jw.care.dao.device.DeviceDetailDao;
import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.care.device.BasePatientMonitorDataDO;
import com.yihu.jw.entity.care.device.DeviceDataPushLog;
import com.yihu.jw.entity.care.device.DeviceDetail;
import com.yihu.jw.entity.care.device.DevicePatientDevice;
import com.yihu.jw.hospital.message.dao.SystemMessageDao;
import com.yihu.jw.patient.dao.BasePatientDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * Created by Bing on 2021/9/2.
@ -36,6 +41,10 @@ public class DeviceDataPushLogUtil {
    private DeviceDetailDao deviceDetailDao;
    @Autowired
    private SystemMessageDao systemMessageDao;
    @Autowired
    private BasePatientMonitorDataDao basePatientMonitorDataDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public void savePushLog(String sn,String data,String apiName){
@ -102,4 +111,28 @@ public class DeviceDataPushLogUtil {
            deviceDetailDao.save(deviceDetail);
        }
    }
    /**
     * 保存居民设备监测日志
     */
    @Async
    public void savePatientMonitorData(String deviceSn,Integer type,String deviceInfo,String relationCode){
        BasePatientMonitorDataDO basePatientMonitorDataDO = new BasePatientMonitorDataDO();
        String sql = " select `user`,category_code from wlyy_patient_device where device_sn='"+deviceSn+"' and del=0 ";
        List<Map<String,Object>> patients = jdbcTemplate.queryForList(sql);
        if (patients.size()>0){
            String patient = patients.get(0).get("user").toString();
            String categoryCode = patients.get(0).get("category_code").toString();
            BasePatientDO patientDO = patientDao.findById(patient);
            basePatientMonitorDataDO.setPatient(patientDO.getId());
            basePatientMonitorDataDO.setPatientName(patientDO.getName());
            basePatientMonitorDataDO.setCategoryCode(categoryCode);
            basePatientMonitorDataDO.setDeviceSn(deviceSn);
            basePatientMonitorDataDO.setType(type);
            basePatientMonitorDataDO.setDeviceInfo(deviceInfo);
            basePatientMonitorDataDO.setRelationCode(relationCode);
            basePatientMonitorDataDO.setCreateTime(new Date());
            basePatientMonitorDataDao.save(basePatientMonitorDataDO);
        }
    }
}

+ 1 - 0
svr/svr-cloud-device/src/main/java/com/yihu/jw/care/util/SecurityOrderUtil.java

@ -94,6 +94,7 @@ public class SecurityOrderUtil {
                }
                String serveDesc = "";
                /**字典控制某一预警类型是否触发**/
                String sqlDesc = "SELECT dict_value from wlyy_hospital_sys_dict WHERE dict_code = '"+dictCode+"' and dict_name = 'security_server_dict' and saas_id=1 ";
                List<Map<String,Object>> listTmp = jdbcTemplate.queryForList(sqlDesc);
                if (listTmp!=null&&listTmp.size()>0){

+ 11 - 0
svr/svr-cloud-job/src/main/java/com/yihu/jw/care/dao/device/DeviceSosLogDao.java

@ -0,0 +1,11 @@
package com.yihu.jw.care.dao.device;
import com.yihu.jw.entity.care.device.DeviceSosLogDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by Bing on 2021/5/8.
 */
public interface DeviceSosLogDao extends PagingAndSortingRepository<DeviceSosLogDO, Long>, JpaSpecificationExecutor<DeviceSosLogDO> {
}

+ 23 - 0
svr/svr-cloud-job/src/main/java/com/yihu/jw/care/dao/device/PatientSafeAreaDao.java

@ -0,0 +1,23 @@
package com.yihu.jw.care.dao.device;
import com.yihu.jw.entity.care.device.PatientSafeAreaDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * Created by Bing on 2021/8/31.
 */
public interface PatientSafeAreaDao extends PagingAndSortingRepository<PatientSafeAreaDO,Long>,
        JpaSpecificationExecutor<PatientSafeAreaDO> {
    @Query(value = " select p from PatientSafeAreaDO p where p.patient=?1 and p.del='1' and p.manageStatus=1 ")
    List<PatientSafeAreaDO> findByPatient(String patient);
    @Modifying
    void deleteByPatient(String patient);
}

+ 10 - 0
svr/svr-cloud-job/src/main/java/com/yihu/jw/care/event/ApplicationEvent.java

@ -11,6 +11,7 @@ import com.yihu.jw.care.job.device.PressureGlucoseNotJob;
import com.yihu.jw.care.job.message.DoctorSendUnreadJob;
import com.yihu.jw.care.job.message.PatientSendUnreadJob;
import com.yihu.jw.care.job.order.CancelPayOrderJob;
import com.yihu.jw.care.job.order.DailyWaterJob;
import com.yihu.jw.care.job.order.EmeWarnOrderDayJob;
import com.yihu.jw.care.job.order.EmeWarnOrderJob;
import com.yihu.jw.care.job.sim.GetSimsVoiceFlowDayJob;
@ -183,6 +184,15 @@ public class ApplicationEvent implements ApplicationListener<ContextRefreshedEve
                logger.info("BIRTHDAY_WISHES_NOT_PUSH_JOB success");
            }
            //#智慧水表工单触发
            if (!quartzHelper.isExistJob("DAILY_WATER_JOB")){
                String trigger = SystemConf.getInstance().getSystemProperties().getProperty("DAILY_WATER_JOB");
                quartzHelper.addJob(DailyWaterJob.class, trigger, "DAILY_WATER_JOB", new HashMap<String, Object>());
                logger.info("DAILY_WATER_JOB success");
            }else {
                logger.info("DAILY_WATER_JOB success");
            }
        } catch (Exception e) {
            logger.info(" job start failed");
        }

+ 82 - 0
svr/svr-cloud-job/src/main/java/com/yihu/jw/care/job/order/DailyWaterJob.java

@ -0,0 +1,82 @@
package com.yihu.jw.care.job.order;
import com.alibaba.fastjson.JSONObject;
import com.sun.org.apache.bcel.internal.generic.NEW;
import com.yihu.jw.care.util.DateUtil;
import com.yihu.jw.care.util.SecurityOrderUtil;
import com.yihu.jw.util.common.LatitudeUtils;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by Bing on 2022/4/25.
 */
@DisallowConcurrentExecution
public class DailyWaterJob implements Job {
    private static Logger logger = LoggerFactory.getLogger(DailyWaterJob.class);
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private SecurityOrderUtil securityOrderUtil;
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        logger.info("DAILY_WATER_JOB start");
        String nowTime = DateUtil.getStringDate();
        Map<String,String> typeInfo = new HashMap<>();
        typeInfo.put("3","4至16点持续不用水");
        typeInfo.put("4","2小时持续大流量");
        typeInfo.put("5","4小时持续用水");
        typeInfo.put("6","8小时持续小流量");
        typeInfo.put("7","16至次日8点持续不用水");
        try {
            String sql = " select dict_value from wlyy_hospital_sys_dict where dict_name='DAILY_WATER_LAST_TIME' and dict_code='DAILY_WATER_LAST_TIME' ";
            String lastTime = jdbcTemplate.queryForObject(sql,String.class);
            sql = " select distinct * from hz.m_water_alarm where alarm_time >='"+lastTime+"' ";
            List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
            for (Map<String,Object> tmp:list){
                try {
                    String deviceSN = tmp.get("card_no").toString();
                    sql = " select id from base_patient where user_id='"+deviceSN+"' ";
                    List<String> patients = jdbcTemplate.queryForList(sql,String.class);
                    if (patients.size()>0){
                        String alarm_type = tmp.get("alarm_type").toString();
                        String addressStr = tmp.get("alarm_address").toString();
                        String alarm_content = tmp.get("alarm_content").toString();
                        JSONObject addressInfo = new JSONObject();
                        Map<String, String> json = LatitudeUtils.getGeocoderLatitude("杭州市拱墅区"+addressStr);
                        if (json != null) {
                            String lat = json.get("lat").toString();
                            String lon = json.get("lng").toString();
                            addressInfo.put("lat",lat);
                            addressInfo.put("lon",lon);
                            addressInfo.put("address",addressStr);
                        }
                        securityOrderUtil.createSecurityOrderWithoutDevice(patients.get(0),deviceSN,null,new JSONObject(),addressInfo, 9, "12", "dailyWater", typeInfo.get(alarm_type));
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
            sql = " update set dict_value='"+nowTime+"' from wlyy_hospital_sys_dict where dict_name='DAILY_WATER_LAST_TIME' and dict_code='DAILY_WATER_LAST_TIME'  ";
            jdbcTemplate.execute(sql);
            logger.info("DAILY_WATER_JOB end");
        }catch (Exception e){
            String sql = " update set dict_value='"+nowTime+"' from wlyy_hospital_sys_dict where dict_name='DAILY_WATER_LAST_TIME' and dict_code='DAILY_WATER_LAST_TIME'  ";
            jdbcTemplate.execute(sql);
            logger.error("DAILY_WATER_JOB error....."+e.getMessage());
        }
    }
}

+ 292 - 0
svr/svr-cloud-job/src/main/java/com/yihu/jw/care/util/SecurityOrderUtil.java

@ -0,0 +1,292 @@
package com.yihu.jw.care.util;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.yihu.fastdfs.FastDFSUtil;
import com.yihu.jw.care.dao.device.DeviceSosLogDao;
import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.care.dao.device.PatientSafeAreaDao;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.care.device.DevicePatientDevice;
import com.yihu.jw.entity.care.device.DeviceSosLogDO;
import com.yihu.jw.entity.care.device.PatientSafeAreaDO;
import com.yihu.jw.exception.business.file_upload.*;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.restmodel.iot.common.UploadVO;
import com.yihu.jw.util.common.LatitudeUtils;
import com.yihu.jw.util.http.HttpClientUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.csource.common.MyException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * Created by Bing on 2021/8/28.
 */
@Component
public class SecurityOrderUtil {
    @Value("${cloudCare.url}")
    private String cloudCareUrl;
    @Autowired
    private PatientDeviceDao patientDeviceDao;
    @Autowired
    private BasePatientDao patientDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private HttpClientUtil httpClientUtil;
    @Autowired
    private FastDFSUtil fastDFSHelper;
    @Value("${fastDFS.fastdfs_file_url}")
    private String fastdfs_file_url;
    @Autowired
    private DeviceSosLogDao sosLogDao;
    @Autowired
    private PatientSafeAreaDao safeAreaDao;
    /***创建安防工单***/
    public JSONObject createSecurityOrder(String deviceSN, String sceneUrl, JSONObject result,JSONObject addressInfo, Integer orderSource, String dictCode, String topicItem, String warnInfo){
        try {
            String lat = "";
            String lon = "";
            String address=" ";
            List<DevicePatientDevice> devicePatientDeviceDos = patientDeviceDao.findByDeviceSn(deviceSN);
            if (devicePatientDeviceDos.size()>0){
                DevicePatientDevice deviceDO = devicePatientDeviceDos.get(0);
                if (null!=addressInfo){
                    lat = addressInfo.getString("lat");
                    lon = addressInfo.getString("lon");
                    address = addressInfo.getString("address");
                }else {
                    Map<String, String> json = null;
                    if (org.apache.commons.lang.StringUtils.isNotBlank(deviceDO.getSosAddress())) {
                        json = LatitudeUtils.getGeocoderLatitude(deviceDO.getSosAddress().replace("G.", "").replace("(糖友网)", "").replace("(高友网)", ""));
                    }
                    if (json != null) {
                        lat = json.get("lat").toString();
                        lon = json.get("lng").toString();
                        address = deviceDO.getSosAddress();
                    }
                }
                BasePatientDO patientDO = patientDao.findById(deviceDO.getUser());
                String  url = cloudCareUrl+"/cloudCare/noLogin/security/createOrder";
                String hospital = "";
                String sql ="select DISTINCT pack.org_code,pack.org_name " +
                        " from base_service_package_sign_record sr,base_service_package_record pr,base_service_package_item item ,base_service_package pack " +
                        "where pr.patient = '"+patientDO.getId()+"' and sr.id = pr.sign_id and pr.service_package_id = item.service_package_id and  item.`code`='"+topicItem+"'  and item.service_package_id = pack.id " +
                        "  and pack.del=1";
                List<Map<String,Object>> sqlResult = jdbcTemplate.queryForList(sql);
                if(sqlResult.size()>0){
                    hospital = sqlResult.get(0).get("org_code")+"";
                }
                String serveDesc = "";
                /**字典控制某一预警类型是否触发**/
                String sqlDesc = "SELECT dict_value from wlyy_hospital_sys_dict WHERE dict_code = '"+dictCode+"' and dict_name = 'security_server_dict' and saas_id=1 ";
                List<Map<String,Object>> listTmp = jdbcTemplate.queryForList(sqlDesc);
                if (listTmp!=null&&listTmp.size()>0){
                    serveDesc = listTmp.get(0).get("dict_value")+"";
                }else{
                    return new JSONObject();
                }
                if ("1".equals(dictCode)){//疑似离开安全区域 v1.5电子围栏为确认管理时触发
                    List<PatientSafeAreaDO> safeAreaDOS = safeAreaDao.findByPatient(patientDO.getId());
                    if (safeAreaDOS.size()==0){
                        return new JSONObject();
                    }
                }
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("patient",patientDO.getId());
                jsonObject.put("patientName",patientDO.getName());
                jsonObject.put("patientPhone",patientDO.getMobile());
                jsonObject.put("serveDesc",serveDesc);
                jsonObject.put("hospital",sqlResult.get(0).get("org_code"));
                jsonObject.put("serveAddress",address);
                jsonObject.put("serveLat",lat);
                jsonObject.put("serveLon",lon);
                jsonObject.put("topicItem",topicItem);
                jsonObject.put("deviceSn",deviceSN);
                jsonObject.put("warnInfo",warnInfo);
                if (StringUtils.isNotBlank(sceneUrl)){
                    jsonObject.put("sceneImg",sceneUrl);
                }
                JSONObject jsonObjectParam = new JSONObject();
                jsonObjectParam.put("order", jsonObject);
                List<NameValuePair> params = new ArrayList<>();
                params.add(new BasicNameValuePair("jsonData", jsonObjectParam.toJSONString()));
                params.add(new BasicNameValuePair("warnStr", serveDesc));
                params.add(new BasicNameValuePair("orderSource", orderSource+""));
                String response = httpClientUtil.post(url, params,"UTF-8");
                System.out.println(response);
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return result;
    }
    /***创建安防工单***/
    public JSONObject createSecurityOrderWithoutDevice(String patient,String deviceSN, String sceneUrl, JSONObject result,JSONObject addressInfo, Integer orderSource, String dictCode, String topicItem, String warnInfo){
        try {
            String lat = "";
            String lon = "";
            String address=" ";
            lat = addressInfo.getString("lat");
            lon = addressInfo.getString("lon");
            address = addressInfo.getString("address");
            BasePatientDO patientDO = patientDao.findById(patient);
            String  url = cloudCareUrl+"/cloudCare/noLogin/security/createOrder";
            String hospital = "";
            String sql ="select DISTINCT pack.org_code,pack.org_name " +
                    " from base_service_package_sign_record sr,base_service_package_record pr,base_service_package_item item ,base_service_package pack " +
                    "where pr.patient = '"+patientDO.getId()+"' and sr.id = pr.sign_id and pr.service_package_id = item.service_package_id and  item.`code`='"+topicItem+"'  and item.service_package_id = pack.id " +
                    "  and pack.del=1";
            List<Map<String,Object>> sqlResult = jdbcTemplate.queryForList(sql);
            if(sqlResult.size()>0){
                hospital = sqlResult.get(0).get("org_code")+"";
            }
            String serveDesc = "";
            /**字典控制某一预警类型是否触发**/
            String sqlDesc = "SELECT dict_value from wlyy_hospital_sys_dict WHERE dict_code = '"+dictCode+"' and dict_name = 'security_server_dict' and saas_id=1 ";
            List<Map<String,Object>> listTmp = jdbcTemplate.queryForList(sqlDesc);
            if (listTmp!=null&&listTmp.size()>0){
                serveDesc = listTmp.get(0).get("dict_value")+"";
            }else{
                return new JSONObject();
            }
            if ("1".equals(dictCode)){//疑似离开安全区域 v1.5电子围栏为确认管理时触发
                List<PatientSafeAreaDO> safeAreaDOS = safeAreaDao.findByPatient(patientDO.getId());
                if (safeAreaDOS.size()==0){
                    return new JSONObject();
                }
            }
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("patient",patientDO.getId());
            jsonObject.put("patientName",patientDO.getName());
            jsonObject.put("patientPhone",patientDO.getMobile());
            jsonObject.put("serveDesc",serveDesc);
            jsonObject.put("hospital",sqlResult.get(0).get("org_code"));
            jsonObject.put("serveAddress",address);
            jsonObject.put("serveLat",lat);
            jsonObject.put("serveLon",lon);
            jsonObject.put("topicItem",topicItem);
            jsonObject.put("deviceSn",deviceSN);
            jsonObject.put("warnInfo",warnInfo);
            if (StringUtils.isNotBlank(sceneUrl)){
                jsonObject.put("sceneImg",sceneUrl);
            }
            JSONObject jsonObjectParam = new JSONObject();
            jsonObjectParam.put("order", jsonObject);
            List<NameValuePair> params = new ArrayList<>();
            params.add(new BasicNameValuePair("jsonData", jsonObjectParam.toJSONString()));
            params.add(new BasicNameValuePair("warnStr", serveDesc));
            params.add(new BasicNameValuePair("orderSource", orderSource+""));
            String response = httpClientUtil.post(url, params,"UTF-8");
            System.out.println(response);
        }catch (Exception e){
            e.printStackTrace();
        }
        return result;
    }
    /***创建紧急工单****/
    public void createEmeOrder(DeviceSosLogDO logDO, String orderSource){
        String sql =" select Distinct pack.org_code,pack.org_name\n" +
                "from base_service_package_sign_record sr INNER JOIN base_service_package_record pr\n" +
                "on sr.id = pr.sign_id and sr.status=1 INNER JOIN base_service_package_item item on pr.service_package_id = item.service_package_id and item.del=1 \n" +
                "INNER JOIN base_service_package pack on pr.service_package_id = pack.id where item.code='emergencyAssistance' and sr.patient='"+logDO.getPatient()+"'";
        List<Map<String,Object>> sqlResult = jdbcTemplate.queryForList(sql);
        if (sqlResult.size()>0){
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("serveAddress",logDO.getSosAddress());
            jsonObject.put("serveLon",logDO.getSosLon());
            jsonObject.put("serveLat",logDO.getSosLat());
            jsonObject.put("orgCode",sqlResult.get(0).get("org_code").toString());
            jsonObject.put("orgName",sqlResult.get(0).get("org_name").toString());
            jsonObject.put("patient",logDO.getPatient());
            jsonObject.put("patientName",logDO.getPatientName());
            jsonObject.put("deviceSn",logDO.getDeviceSn());
            String url = cloudCareUrl+"cloudCare/noLogin/emergency_assistance/newOrder";
            List<NameValuePair> params = new ArrayList<>();
            params.add(new BasicNameValuePair("jsonData", jsonObject.toJSONString()));
            params.add(new BasicNameValuePair("patientId", logDO.getPatient()));
            params.add(new BasicNameValuePair("orderSource", orderSource));//工单来源工单发起来源状态 1APP 2手环 3居家报警 4拐杖
            String response = httpClientUtil.post(url, params,"UTF-8");
            JSONObject result = JSONObject.parseObject(response);
            logDO.setSosSendStatus(result.getInteger("status").toString());
            if (result.containsKey("message")){
                logDO.setSosSendMessage(result.getString("message"));
            }
            if (result.containsKey("msg")){
                logDO.setSosSendMessage(result.getString("msg"));
            }
            System.out.println(response);
        }
        sosLogDao.save(logDO);
    }
    public UploadVO uploadImg(MultipartFile file)throws Exception{
        String originalFilename = file.getOriginalFilename();
        InputStream inputStream = file.getInputStream();
        UploadVO uploadVO = uploadImg2(inputStream,originalFilename,file.getSize(),fastdfs_file_url);
        return uploadVO;
    }
    public UploadVO uploadImg2(InputStream inputStream, String originalFileName,long fileSize,String fastdfs_file_url) throws NoSuchAlgorithmException, IOException, MyException {
        // 得到文件的完整名称  xxx.txt
        if( null == inputStream){
            throw new FileInputStreamEmptyException("图片文件流不可为空!");
        }
        if(StringUtils.isBlank(originalFileName)){
            throw new FileNameEmptyException("图片文件名不可为空!");
        }
        if(StringUtils.isBlank(fastdfs_file_url)){
            throw new FastfdsFileURLEmptyException("fastdfs url不可为空!");
        }
        //得到文件类型
        String fileType = originalFileName.substring(originalFileName.lastIndexOf(".") + 1).toLowerCase();
        if(StringUtils.isBlank(fileType)||!"jpg,jpeg,png".contains(fileType)){
            throw new FileWrongFormatException("图片文件格式不正确,请上传jpg,jpeg,png等任一格式!");
        }
        long max = 5*1024*1024;
        if(fileSize > max){
            throw new FileTooLargeSizeException("图片文件过大,请不要超过5M!");
        }
        String fileName = originalFileName.substring(0, originalFileName.lastIndexOf("."));
        //上传到fastdfs
        ObjectNode objectNode = fastDFSHelper.upload(inputStream, fileType, "");
        //解析返回的objectNode
        UploadVO uploadVO = new UploadVO();
        uploadVO.setFileName(fileName);
        uploadVO.setFileType(fileType);
        uploadVO.setFullUri(objectNode.get("fileId").toString().replaceAll("\"", ""));
        uploadVO.setFullUrl(fastdfs_file_url + objectNode.get("fileId").toString().replaceAll("\"", ""));
        return uploadVO;
    }
}

+ 3 - 1
svr/svr-cloud-job/src/main/resources/system.properties

@ -29,4 +29,6 @@ GET_SIMS_VOICE_FLOW_MONTH_JOB= 0 15 6 * * ?
#\u6BCF\u5929\u65E9\u4E0A10\u70B9\u53D1\u9001\u8840\u538B(1\u5929)\u8840\u7CD6(7\u5929)\u672A\u6D4B\u91CF\u901A\u77E5
BLOOD_PRESSURE_GLUCOSE_NOT_MEASURED= 0 0 10 * * ?
#\u751F\u65E5\u795D\u798F\u672A\u53D1\u751F\u8BB0\u5F55
BIRTHDAY_WISHES_NOT_PUSH_JOB= 0 0 3 * * ?
BIRTHDAY_WISHES_NOT_PUSH_JOB= 0 0 3 * * ?
#\u667A\u6167\u6C34\u8868\u5DE5\u5355\u89E6\u53D1
DAILY_WATER_JOB= 0 15 * * * ?