Explorar el Código

Merge branch 'dev' of http://192.168.1.220:10080/Amoy2/wlyy2.0 into dev

wangzhinan hace 2 años
padre
commit
4156e44516
Se han modificado 16 ficheros con 519 adiciones y 61 borrados
  1. 20 1
      common/common-entity/src/main/java/com/yihu/jw/entity/care/securitymonitoring/BaseEmergencyWarnLogDO.java
  2. 10 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/emergency/EmergencyOrderVO.java
  3. 9 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/security/BaseEmergencyWarnLogDao.java
  4. 48 4
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/assistance/EmergencyAssistanceEndpoint.java
  5. 1 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/consult/PatientConsultEndpoint.java
  6. 5 4
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/device/DoctorDeviceController.java
  7. 1 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/device/PatientDeviceController.java
  8. 6 3
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/statistics/DetectionPlatformEndpoint.java
  9. 6 2
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/statistics/OpenStatisticsEndpoint.java
  10. 43 2
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/third/assistance/EmeAsEndpoint.java
  11. 0 2
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/third/platForm/PatientInfoPlatFormEndpoint.java
  12. 281 21
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/assistance/EmergencyAssistanceService.java
  13. 2 2
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/device/DeviceManageService.java
  14. 33 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/device/PatientDeviceService.java
  15. 7 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/security/SecurityMonitoringOrderService.java
  16. 47 16
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/statistics/StatisticsService.java

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

@ -21,9 +21,11 @@ public class BaseEmergencyWarnLogDO extends IdEntity {
    public String userCode;
    public String userName;
    public Integer userType; //用户类型 1居民 2社工
    public String userTypeName; //用户类型 1居民 2社工
    public String content;
    public Date createTime;
    public Integer type; //保存类型(1已知悉,2前往,3 110,4 120,5小结,6 复核,7 预警核实)
    public Integer type; //保存类型(1已知悉,2前往,3 110,4 120,5 小结,6 已取消,7 复核,8 发起im会话 9发起音视频通话 10调阅设备详情页)
    public String ext1;//备用字段 type=9时 存音视频唯一标识
    public String timeInfo;
@ -92,4 +94,21 @@ public class BaseEmergencyWarnLogDO extends IdEntity {
    public void setType(Integer type) {
        this.type = type;
    }
    public String getExt1() {
        return ext1;
    }
    public void setExt1(String ext1) {
        this.ext1 = ext1;
    }
    @Transient
    public String getUserTypeName() {
        return userTypeName;
    }
    public void setUserTypeName(String userTypeName) {
        this.userTypeName = userTypeName;
    }
}

+ 10 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/emergency/EmergencyOrderVO.java

@ -47,6 +47,8 @@ public class EmergencyOrderVO {
    //小结
    private EmergencyWarnConclusionDO emergencyWarnConclusionDO;//工单小结
    //复核
    private BaseEmergencyWarnLogDO reviewWarnLogDO;//工单小结
    //通知对象
    private List<Map<String,Object>> noticePersons;//通知对象
@ -325,4 +327,12 @@ public class EmergencyOrderVO {
    public void setKnow(Integer know) {
        this.know = know;
    }
    public BaseEmergencyWarnLogDO getReviewWarnLogDO() {
        return reviewWarnLogDO;
    }
    public void setReviewWarnLogDO(BaseEmergencyWarnLogDO reviewWarnLogDO) {
        this.reviewWarnLogDO = reviewWarnLogDO;
    }
}

+ 9 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/security/BaseEmergencyWarnLogDao.java

@ -16,6 +16,15 @@ public interface BaseEmergencyWarnLogDao extends PagingAndSortingRepository<Base
    @Query("select w from BaseEmergencyWarnLogDO w where w.orderId = ?1 and w.type is null ")
    List<BaseEmergencyWarnLogDO> findByOrderIdOrderByCreateTimeDesc(String oderId);//工单操作日志,有type的为工单流程关键步骤
    @Query("select w from BaseEmergencyWarnLogDO w where w.orderId = ?1 and w.type is not null ")
    List<BaseEmergencyWarnLogDO> findByOrderId(String oderId);
    @Query("select w from BaseEmergencyWarnLogDO w where w.orderId = ?1 and w.type = 1")
    List<BaseEmergencyWarnLogDO> findByOrderIdByType(String orderId);
    @Query("select w from BaseEmergencyWarnLogDO w where w.orderId = ?1 and w.type = ?2")
    List<BaseEmergencyWarnLogDO> findByOrderIdAndType(String orderId,Integer type);
    @Query("select w from BaseEmergencyWarnLogDO w where w.orderId = ?1 and w.ext1 = ?2")
    List<BaseEmergencyWarnLogDO> findByOrderIdAndExt1(String orderId,String ext1);
}

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

@ -7,6 +7,7 @@ import com.yihu.jw.care.service.assistance.EmergencyAssistanceService;
import com.yihu.jw.care.service.common.PermissionService;
import com.yihu.jw.care.service.security.SecurityMonitoringOrderService;
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.endpoint.EnvelopRestEndpoint;
@ -63,10 +64,10 @@ public class EmergencyAssistanceEndpoint extends EnvelopRestEndpoint {
    ){
        try {
            JSONObject param = new JSONObject();
            param.put("doctorId",doctor);
            if(permissionService.noPermission(1,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
//            param.put("doctorId",doctor);
//            if(permissionService.noPermission(1,param)){
//                return ObjEnvelop.getError("该操作没有权限");
//            }
            JSONObject result = assistanceService.doctorGetOrderDetail(orderId,doctor);
            if (result.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                return ObjEnvelop.getError(result.getString(ResponseContant.resultMsg));
@ -344,6 +345,49 @@ public class EmergencyAssistanceEndpoint extends EnvelopRestEndpoint {
        }
    }
    @PostMapping("preWarningReview")
    @ApiOperation(value = "预警复核")
    @ObserverRequired
    public ObjEnvelop preWarningReview(
            @ApiParam(value = "工单id", name = "orderId")
            @RequestParam(value = "orderId", required = true) String orderId,
            @ApiParam(value = "复核内容", name = "content")
            @RequestParam(value = "content", required = true) String content) {
        try {
            String doctor = permissionService.getUID();
            JSONObject result = assistanceService.preWarningReview(orderId, doctor,content);
            if (result.getIntValue("resultFlag") == 0) {
                return ObjEnvelop.getError(result.getString("resultMsg"));
            }
            return ObjEnvelop.getSuccess("操作成功",result.getString("resultMsg"));
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @PostMapping("addWarnLog")
    @ApiOperation(value = "记录预警核实日志")
    @ObserverRequired
    public Envelop addWarnLog(
            @ApiParam(value = "会话id", name = "sessionId")
            @RequestParam(value = "sessionId", required = true) String sessionId,
            @ApiParam(value = "社工id", name = "doctor")
            @RequestParam(value = "doctor", required = true) String doctor,
            @ApiParam(value = "类型 8发起im会话,9发起音视频通话", name = "type")
            @RequestParam(value = "type", required = true) Integer type,
            @ApiParam(value = "内容", required = false, name = "content")
            @RequestParam(value = "content", required = false) String content,
            @ApiParam(value = "音视频唯一标识", required = false, name = "ext1")
            @RequestParam(value = "ext1", required = false) String ext1) {
        try {
            assistanceService.addWarnLog(sessionId, doctor,type,content,ext1);
            return Envelop.getSuccess("操作成功");
        } catch (Exception e) {
            return failedException2(e);
        }
    }
    @PostMapping("errorWarning")
    @ApiOperation(value = "误报警")
    @ObserverRequired

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/consult/PatientConsultEndpoint.java

@ -191,7 +191,7 @@ public class PatientConsultEndpoint extends EnvelopRestEndpoint {
			}
			String url = "/chatroom/index?type="+type+"&peerId="+senderId+"&action=callVideo&peerName="+peerName+"&sessionId="+sessionId+"&content="+content;
			logger.info("url="+url);
			messageUtil.sendDoctorGetuiMessage(targetId,"4",url,"im消息",body);
			messageUtil.sendDoctorGetuiMessage(targetId,"4",url,"新消息",body);
			if(StringUtils.isNotBlank(zzdMessage)){
				messageUtil.sendDoctorDingdingMessage(null,targetId,"text","4",zzdMessage,null,null);
			}

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

@ -178,17 +178,18 @@ public class DoctorDeviceController extends BaseController {
	@ApiOperation(value = "设备详细信息")
	public String getDeviceInfo(@ApiParam(name = "patient",value = "居民code")
								@RequestParam(value = "patient")String patient,
								@ApiParam(name = "orderId", required = false,value = "对应工单的id")
								@RequestParam(value = "orderId", required = false) String orderId,
								@ApiParam(name = "deviceSn",value = "设备SN码")
								@RequestParam(value = "deviceSn")String deviceSn){
		try {
			JSONObject param = new JSONObject();
			param.put("doctorId",permissionService.getUID());
			String doctorId = permissionService.getUID();
			param.put("doctorId",doctorId);
			if(permissionService.noPermission(2,param)){
				return write(-1,"该操作没有权限");
			}
			org.json.JSONObject result = deviceManageService.getDeviceInfo(patient, deviceSn);
			org.json.JSONObject result = deviceManageService.getDeviceInfo(patient, deviceSn,doctorId,orderId);
			if (result.getInt(ResponseContant.resultFlag)==ResponseContant.success){
				return write(200,"获取成功","data", JSON.parseObject(result.getString(ResponseContant.resultMsg)));
			}else {

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

@ -442,7 +442,7 @@ public class PatientDeviceController extends BaseController {
                                         @RequestParam(value = "day",required = false)String day){
        try {
            JSONObject result = patientDeviceService.getPatientDeviceDetail(patient,deviceSn,day);
            JSONObject result = patientDeviceService.getPatientDeviceDetail(patient,deviceSn,day,null,null);
            if (result.getInt(ResponseContant.resultFlag)==ResponseContant.success){
                return write(200,"获取成功","data", JSON.parseObject(result.getString(ResponseContant.resultMsg)));
            }else {

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

@ -3,6 +3,7 @@ package com.yihu.jw.care.endpoint.statistics;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.service.common.PermissionService;
import com.yihu.jw.care.service.device.DeviceManageService;
import com.yihu.jw.care.service.device.NetworkCardService;
import com.yihu.jw.care.service.device.PatientDeviceService;
@ -43,7 +44,8 @@ public class DetectionPlatformEndpoint extends EnvelopRestEndpoint {
    private NetworkCardService networkCardService;
    @Autowired
    private DeviceManageService deviceManageService;
    @Autowired
    private PermissionService permissionService;
    @ApiOperation("环境信息")
@ -152,11 +154,12 @@ public class DetectionPlatformEndpoint extends EnvelopRestEndpoint {
                                          @RequestParam(value = "patient") String patient,
                                          @ApiParam(name = "deviceSN")
                                          @RequestParam(value = "deviceSN") String deviceSn,
                                          @ApiParam(name = "orderId", required = false,value = "对应工单的id")
                                          @RequestParam(value = "orderId", required = false) String orderId,
                                          @ApiParam(name = "day", value = "yyyy-mm-dd")
                                          @RequestParam(value = "day", required = false) String day) {
        try {
            org.json.JSONObject result = patientDeviceService.getPatientDeviceDetail(patient, deviceSn, day);
            org.json.JSONObject result = patientDeviceService.getPatientDeviceDetail(patient, deviceSn, day,permissionService.getUID(),orderId);
            if (result.getInt(ResponseContant.resultFlag) == ResponseContant.success) {
                return success(JSON.parseObject(result.getString(ResponseContant.resultMsg)));
            } else {

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

@ -613,6 +613,8 @@ public class OpenStatisticsEndpoint extends EnvelopRestEndpoint {
                                                 @RequestParam(value = "name", required = false) String name,
                                                 @ApiParam(name = "deviceSn", value = "设备Sn码", required = false)
                                                 @RequestParam(value = "deviceSn", required = false) String deviceSn,
                                                 @ApiParam(name = "teamId", value = "社区id、团队id", required = false)
                                                 @RequestParam(value = "teamId", required = false) String teamId,
                                                 @ApiParam(name = "categoryCode", value = "设备类型Code", required = false)
                                                 @RequestParam(value = "categoryCode", required = false) String categoryCode,
                                                 @ApiParam(name = "contactStatus",value = "在线状态 1在线,0不在线",required = false)
@ -621,7 +623,7 @@ public class OpenStatisticsEndpoint extends EnvelopRestEndpoint {
                                                 @RequestParam(value = "type",required = false)String type){
        try {
            return statisticsService.healthySecurityDeviceList(name,deviceSn,categoryCode,contactStatus,type,page,size);
            return statisticsService.healthySecurityDeviceList(name,deviceSn,teamId,categoryCode,contactStatus,type,page,size);
        } catch (Exception e) {
            e.printStackTrace();
            return failedPageEnvelopException2(e);
@ -634,10 +636,12 @@ public class OpenStatisticsEndpoint extends EnvelopRestEndpoint {
    @ApiOperation(value = "获取设备数量")
    public ObjEnvelop deviceinfoStatisticsNum(@ApiParam(name = "type",value = "设备类型0健康 1安防",required = true)
                                              @RequestParam(value = "type",required = true)String type,
                                              @ApiParam(name = "teamId", value = "社区id、团队id", required = false)
                                              @RequestParam(value = "teamId", required = false) String teamId,
                                              @ApiParam(name = "deviceCategory",value = "设备code",required = false)
                                              @RequestParam(value = "deviceCategory",required = false)String deviceCategory){
        try {
            JSONObject jsonObject = statisticsService.deviceinfoStatisticsNum(type,deviceCategory);
            JSONObject jsonObject = statisticsService.deviceinfoStatisticsNum(type,deviceCategory,teamId);
            return success(jsonObject);
        } catch (Exception e) {
            e.printStackTrace();

+ 43 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/third/assistance/EmeAsEndpoint.java

@ -5,6 +5,7 @@ import com.yihu.jw.care.aop.ObserverRequired;
import com.yihu.jw.care.aop.ServicesAuth;
import com.yihu.jw.care.service.assistance.EmergencyAssistanceService;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
@ -26,8 +27,6 @@ public class EmeAsEndpoint extends EnvelopRestEndpoint {
    @PostMapping(value = "newOrder")
    @ApiOperation(value = "居民发起新的紧急救助")
    @ServicesAuth(item = "emergencyAssistance")
    @ObserverRequired
    public ObjEnvelop newOrder(@ApiParam(name="patientId",value = "居民id")
                               @RequestParam(value = "patientId") String patientId,
                               @ApiParam(name="jsonData",value = "创建工单json")
@ -45,5 +44,47 @@ public class EmeAsEndpoint extends EnvelopRestEndpoint {
            return failedObjEnvelopException2(e);
        }
    }
    @PostMapping("preWarningReview")
    @ApiOperation(value = "预警复核")
    public ObjEnvelop preWarningReview(
            @ApiParam(value = "工单id", name = "orderId")
            @RequestParam(value = "orderId", required = true) String orderId,
            @ApiParam(value = "社工id", name = "doctor")
            @RequestParam(value = "doctor", required = true) String doctor,
            @ApiParam(value = "复核内容", name = "content")
            @RequestParam(value = "content", required = true) String content) {
        try {
            JSONObject result = assistanceService.preWarningReview(orderId, doctor,content);
            if (result.getIntValue("resultFlag") == 0) {
                return ObjEnvelop.getError(result.getString("resultMsg"));
            }
            return ObjEnvelop.getSuccess("操作成功",result.getString("resultMsg"));
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @PostMapping("addWarnLog")
    @ApiOperation(value = "记录预警核实日志")
    public Envelop addWarnLog(
            @ApiParam(value = "会话id", name = "sessionId")
            @RequestParam(value = "sessionId", required = true) String sessionId,
            @ApiParam(value = "社工id", name = "doctor")
            @RequestParam(value = "doctor", required = true) String doctor,
            @ApiParam(value = "类型 8发起im会话,9发起音视频通话", name = "type")
            @RequestParam(value = "type", required = true) Integer type,
            @ApiParam(value = "内容", required = false, name = "content")
            @RequestParam(value = "content", required = false) String content,
            @ApiParam(value = "音视频唯一标识", required = false, name = "ext1")
            @RequestParam(value = "ext1", required = false) String ext1) {
        try {
            assistanceService.addWarnLog(sessionId, doctor,type,content,ext1);
            return Envelop.getSuccess("操作成功");
        } catch (Exception e) {
            return failedException2(e);
        }
    }
}

+ 0 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/third/platForm/PatientInfoPlatFormEndpoint.java

@ -463,8 +463,6 @@ public class PatientInfoPlatFormEndpoint extends EnvelopRestEndpoint {
                                 @ApiParam(name = "orderType",value = "20紧急呼叫22安防工单")
                                 @RequestParam(value = "orderType") String orderType) {
        try {
            JSONObject emergencyAssistanceProcess = assistanceService.getEmergencyAssistanceProcess(orderid, orderType);
            if (null == emergencyAssistanceProcess) {
                return ObjEnvelop.getError("工单不存在",400 );

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

@ -65,6 +65,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -299,7 +300,7 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
                message.put("orgType",orgDO.getType());
            }
            String url = "/sos/info?id="+assistanceDO.getId()+"&OrderType=20&patient="+assistanceDO.getPatient()+"&patientName="+assistanceDO.getPatientName();
            for (BaseDoctorDO doctorDO:doctorDOS){
                try {
                    if (StringUtils.isNotBlank(doctorDO.getMobile())){
@ -308,7 +309,8 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
                }catch (Exception e){}
                String body = "您好,"+assistanceDO.getPatientName()+"居民发起紧急呼叫,请关注并及时处理。";
                String dingDingBody = "您好,"+assistanceDO.getPatientName()+"居民发起紧急呼叫,请及时处理。";
                messageUtil.sendDoctorGetuiMessage(doctorDO.getId(),"2","/sos/index?tabActive=1","紧急呼叫",body);
                messageUtil.sendDoctorGetuiMessage(doctorDO.getId(),"2",url,"紧急呼叫",body);
                messageUtil.sendDoctorDingdingMessage(doctorDO,null,"text","2",dingDingBody,null,null);
                imUtill.sendMDTSocketMessageToDoctor(doctorDO.getId(),message.toString());
            }
@ -447,6 +449,13 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
                emergencyOrderVO.setEmergencyWarnConclusionDO(conclusionDO);
            }
        }
        //复核
        List<BaseEmergencyWarnLogDO> review = logDao.findByOrderIdAndType(assistanceDO.getId(),7);
        if(review.size()>0){
            emergencyOrderVO.setReviewWarnLogDO(review.get(0));
        }
        //附加信息 紧急救助无
        //通知对象
        List<Map<String,Object>> noticePersons = new ArrayList<>();
@ -1121,6 +1130,101 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
        return result;
    }
    /**
     * 记录预警核实日志
     */
    public void addWarnLog(String sessionId,String doctor,Integer type,String content,String ext1){
        BaseDoctorDO doctorDO = doctorDao.findById(doctor);
        if(doctorDO==null){
            return;
        }
        String sql = "SELECT e.id from base_emergency_assistance_order e " +
                "WHERE e.session_id = ? and e.`status` = 1 " +
                "UNION " +
                "SELECT s.id from im_internet_hospital.topics t,wlyy_consult c,base_security_monitoring_order s " +
                "WHERE t.session_id = ? and t.id = c.id " +
                "and c.relation_code = s.id and s.`status` = 1 ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql,new Object[]{sessionId,sessionId});
        for (Map<String,Object> map:list){
            String orderId = map.get("id")+"";
            if(type==8){
                List<BaseEmergencyWarnLogDO> logDOS = logDao.findByOrderIdAndType(orderId,type);
                if(logDOS.size()==0){
                    //新增 type =8 9
                    BaseEmergencyWarnLogDO logDO = new BaseEmergencyWarnLogDO();
                    logDO.setUserCode(doctor);
                    logDO.setUserName(doctorDO.getName());
                    logDO.setOrderId(orderId);
                    logDO.setUserType(2);
                    logDO.setCreateTime(new Date());
                    logDO.setContent("发起im会话");
                    logDO.setType(type);
                    logDao.save(logDO);
                }
            }else {
                List<BaseEmergencyWarnLogDO> logDOS = logDao.findByOrderIdAndExt1(orderId,ext1);
                if(logDOS.size()==0){
                    BaseEmergencyWarnLogDO logDO = new BaseEmergencyWarnLogDO();
                    logDO.setUserCode(doctor);
                    logDO.setUserName(doctorDO.getName());
                    logDO.setOrderId(orderId);
                    logDO.setUserType(2);
                    logDO.setCreateTime(new Date());
                    logDO.setContent(content);
                    logDO.setType(type);
                    logDO.setExt1(ext1);
                    logDao.save(logDO);
                }else if(type==9){
                    //更新9
                    BaseEmergencyWarnLogDO logDO = logDOS.get(0);
                    logDO.setContent(content);
                    logDao.save(logDO);
                }
            }
        }
    }
    /**
     * 预警复核
     * @return
     */
    public JSONObject preWarningReview(String orderId,String doctor,String content){
        JSONObject result = new JSONObject();
        EmergencyAssistanceDO one = emergencyAssistanceDao.findOne(orderId);
        if (one==null){
            String failMsg = "工单不存在" ;
            result.put("resultFlag", 0);
            result.put("resultMsg", failMsg);
            return result;
        }
        String orgCode = permissionService.getDoctorOrg(doctor);
        if(!orgCode.equals(one.getOrgCode())){
            String failMsg = "该操作没权限" ;
            result.put("resultFlag", 0);
            result.put("resultMsg", failMsg);
            return result;
        }
        BaseDoctorDO doctorDO = doctorDao.findById(doctor);
        if (null!=doctorDO){
            BaseEmergencyWarnLogDO logDO = new BaseEmergencyWarnLogDO();
            logDO.setUserCode(doctor);
            logDO.setUserName(doctorDO.getName());
            logDO.setOrderId(orderId);
            logDO.setUserType(2);
            logDO.setCreateTime(new Date());
            logDO.setContent(content);
            logDO.setType(7);
            logDao.save(logDO);
        }
        result.put("resultFlag", 1);
        result.put("resultMsg", "success");
        return result;
    }
    public JSONObject responseOrder(String orderId,String doctor){
        JSONObject result = new JSONObject();
        EmergencyAssistanceDO one = emergencyAssistanceDao.findOne(orderId);
@ -1504,43 +1608,199 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
    }
    public JSONObject getEmergencyAssistanceProcess(String orderId,String orderType){
        JSONObject jsonObject = new JSONObject();
        String eaSql = " ";
        List<Map<String, Object>> maps = new ArrayList<>();
        if ("20".equals(orderType)){
            eaSql   = "SELECT `status`,DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') AS createTime,complete_time AS completeTime " +
                    "from base_emergency_assistance_order WHERE id = '"+orderId+"'";
            eaSql   = "SELECT o.`status`,DATE_FORMAT(o.create_time,'%Y-%m-%d %H:%i:%S') AS createTime,o.patient,o.team_code,'紧急呼叫' AS serveDesc,dd.photo " +
                    "from base_emergency_assistance_order o " +
                    "LEFT JOIN wlyy_devices wd on wd.device_code=o.device_sn " +
                    "LEFT JOIN dm_device dd on dd.category_code = wd.category_code " +
                    " WHERE o.id = ?";
        }
        if ("22".equals(orderType)){
            eaSql   = "SELECT `status`,DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') AS createTime,complete_time AS completeTime " +
                "from base_security_monitoring_order WHERE id = '"+orderId+"'";
            eaSql   = "SELECT o.`status`,DATE_FORMAT(o.create_time,'%Y-%m-%d %H:%i:%S') AS createTime,o.patient,o.team_code,o.serve_desc serveDesc,dd.photo " +
                    "from base_security_monitoring_order o  " +
                    "LEFT JOIN wlyy_devices wd on wd.device_code=o.device_sn " +
                    "LEFT JOIN dm_device dd on dd.category_code = wd.category_code " +
                "  WHERE o.id = ?";
        }
        maps = jdbcTemplate.queryForList(eaSql);
        maps = jdbcTemplate.queryForList(eaSql,new Object[]{orderId});
        if (maps.size()==0) {
            return null;
        }
        for (Map<String, Object> map : maps) {
            jsonObject.put("status",map.get("status"));
            jsonObject.put("createTime",map.get("createTime"));
        //发起预警
        JSONObject start = new JSONObject();
        Map<String, Object> startMap = maps.get(0);
        String createTime = startMap.get("createTime")+"";
        start.put("createTime",createTime);
        start.put("photo",startMap.get("photo"));
        start.put("serveDesc",startMap.get("serveDesc"));
        jsonObject.put("start",start);
        String patient = startMap.get("patient")+"";
        String teamCode = startMap.get("team_code")+"";
        //预警推送
        JSONObject pushLog = new JSONObject();
        pushLog.put("family",patientFamilyPushLog(patient,orderId,createTime));
        pushLog.put("docotr",doctorPushLog(orderId,teamCode,createTime));
        jsonObject.put("pushLog",pushLog);
        //其他日志
        List<BaseEmergencyWarnLogDO> warnLogDOList = logDao.findByOrderId(orderId);
        Map<Integer,List<BaseEmergencyWarnLogDO>> resultMap = warnLogDOList.stream().collect(Collectors.groupingBy(e -> e.getType()));
        //预警核实
        List<BaseEmergencyWarnLogDO> check = new ArrayList<>();
        if(resultMap.containsKey(8)){
            check.addAll(resultMap.get(8));
        }
        if(resultMap.containsKey(9)){
            check.addAll(resultMap.get(9));
        }
        if(resultMap.containsKey(10)){
            check.addAll(resultMap.get(10));
        }
        if(check.size()>0){
            check.forEach(logDO->{
                if(logDO.getUserType()==1){
                    logDO.setUserTypeName("居民");
                }else{
                    logDO.setUserTypeName("社工");
                }
            });
            check = check.stream().sorted(Comparator.comparing(BaseEmergencyWarnLogDO::getCreateTime)).collect(Collectors.toList());
            jsonObject.put("check",check);
        }
        String sql = "select user_name AS userName,create_time AS createTime,content,type from base_emergency_warn_log where (user_type = 2 and order_id = '"+orderId+"' and type IS NOT NULL) " +
                " OR (user_type = 1 AND order_id = '"+orderId+"' and type IS NOT NULL) order by create_time,type ASC ";
        List<Map<String, Object>> result = jdbcTemplate.queryForList(sql);
        jsonObject.put("type5_status",0);
        jsonObject.put("result",result);
        for (Map<String, Object> map : result) {
            if (map.get("type").equals(5)) {
                jsonObject.put("type5_status",1);
        //预警处置
        List<BaseEmergencyWarnLogDO> dealWith = new ArrayList<>();
        if(resultMap.containsKey(2)){
            dealWith.addAll(resultMap.get(2));
        }
        if(resultMap.containsKey(3)){
            dealWith.addAll(resultMap.get(3));
        }
        if(resultMap.containsKey(4)){
            dealWith.addAll(resultMap.get(4));
        }
        if(dealWith.size()>0){
            dealWith.forEach(logDO->{
                if(logDO.getUserType()==1){
                    logDO.setUserTypeName("居民");
                }else{
                    logDO.setUserTypeName("社工");
                }
            });
            dealWith = dealWith.stream().sorted(Comparator.comparing(BaseEmergencyWarnLogDO::getCreateTime)).collect(Collectors.toList());
            jsonObject.put("dealWith",dealWith);
        }
        //处置结论
        List<BaseEmergencyWarnLogDO> conclusion = resultMap.get(5);
        if(conclusion!=null){
            BaseEmergencyWarnLogDO logDO = conclusion.get(0);
            if(logDO.getUserType()==1){
                logDO.setUserTypeName("居民");
            }else{
                logDO.setUserTypeName("社工");
            }
            jsonObject.put("conclusion",logDO);
        }
        //预警复核
        List<BaseEmergencyWarnLogDO> review = resultMap.get(7);
        if(review!=null){
            BaseEmergencyWarnLogDO logDO = review.get(0);
            if(logDO.getUserType()==1){
                logDO.setUserTypeName("居民");
            }else{
                logDO.setUserTypeName("社工");
            }
            jsonObject.put("review",logDO);
        }
        //取消
        List<BaseEmergencyWarnLogDO> cancel = resultMap.get(6);
        if(cancel!=null){
            BaseEmergencyWarnLogDO logDO = cancel.get(0);
            if(logDO.getUserType()==1){
                logDO.setUserTypeName("居民");
            }else{
                logDO.setUserTypeName("社工");
            }
            jsonObject.put("cancel",logDO);
        }
        jsonObject = JSONObject.parseObject(JSON.toJSONStringWithDateFormat(jsonObject,"yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteMapNullValue));
        return jsonObject;
    }
    /**
     * 家属推送日志
     * @param patient
     * @param orderId
     * @return
     */
    public List<Map<String, Object>> patientFamilyPushLog(String patient,String orderId,String createTime){
        List<Map<String, Object>> noticePersons = new ArrayList<>();
        JSONArray familyArr = familyMemberService.getPatientMembers(patient, null, null, null, "3");
        for (int i = 0; i < familyArr.size(); i++) {
            String patientId = familyArr.getJSONObject(i).getString("id");
            BasePatientDO patientDO1 = patientDao.findById(patientId);
            Map<String, Object> noticeObj = new HashMap<>();
            noticeObj.put("type", "0");
            noticeObj.put("typeName", "家属");
            noticeObj.put("id", patientDO1.getId());
            noticeObj.put("name", patientDO1.getName());
            noticeObj.put("photo", patientDO1.getPhoto());
            noticeObj.put("mobile", patientDO1.getMobile());
            noticeObj.put("status", 0);
            noticeObj.put("statusName", "未读");
            noticeObj.put("createTime",createTime);
            SystemMessageDO messageDO = systemMessageDao.findByRelationCodeAndReceiver(orderId, patientId);
            if (messageDO != null) {
                noticeObj.put("createTime",DateUtil.dateToStrLong(messageDO.getCreateTime()));
                if (StringUtils.isNotBlank(messageDO.getIsRead())) {
                    noticeObj.put("status", Integer.parseInt(messageDO.getIsRead()));
                    if (Integer.parseInt(messageDO.getIsRead()) == 1) {
                        noticeObj.put("statusName", "已读");
                    }
                }
            }
            noticePersons.add(noticeObj);
        }
        return noticePersons;
    }
    /**
     * 医生推送日志
     * @return
     */
    public List<Map<String, Object>> doctorPushLog(String orderId,String teamCode,String createTime){
        List<Map<String, Object>> noticePersons = new ArrayList<>();
        List<BaseDoctorDO> doctorDOS = baseTeamMemberDao.findAllMembersByLevel(teamCode,2);
        for (BaseDoctorDO doctorDO:doctorDOS) {
            Map<String,Object> noticeObj = new HashMap<>();
            noticeObj.put("type","1");
            noticeObj.put("typeName","社工");
            noticeObj.put("id",doctorDO.getId());
            noticeObj.put("name",doctorDO.getName());
            noticeObj.put("photo",doctorDO.getPhoto());
            noticeObj.put("mobile",doctorDO.getMobile());
            noticeObj.put("status",0);
            noticeObj.put("statusName","未响应");
            noticeObj.put("createTime",createTime);
            EmergencyWarnDoctorResponseDO logDO = emergencyWarnDoctorResponseDao.findByDoctorAndOrderId(doctorDO.getId(),orderId);
            if (logDO!=null){
                noticeObj.put("status",1);
                noticeObj.put("statusName","已响应");
                noticeObj.put("createTime",DateUtil.dateToStrLong(logDO.getResponseTime()));
            }
            noticePersons.add(noticeObj);
        }
        return noticePersons;
    }
    public int phoneLogSave(BaseEmergencyWarnLogDO baseEmergencyWarnLogDO,Integer type){
        switch (type) {
            case 1:

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

@ -67,8 +67,8 @@ public class DeviceManageService extends BaseJpaService<BaseDeviceRepairEntity,B
    }
    /*设备详细信息*/
    public org.json.JSONObject getDeviceInfo(String patient, String deviceSn) throws Exception {
        return patientDeviceService.getPatientDeviceDetail(patient, deviceSn, null);
    public org.json.JSONObject getDeviceInfo(String patient, String deviceSn,String doctorId,String orderId) throws Exception {
        return patientDeviceService.getPatientDeviceDetail(patient, deviceSn, null,doctorId,orderId);
    }
    /*监护信息*/

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

@ -927,7 +927,7 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
     * @param deviceSn 设备sn码
     * @return
     */
    public JSONObject getPatientDeviceDetail(String patient,String deviceSn,String day) throws Exception {
    public JSONObject getPatientDeviceDetail(String patient,String deviceSn,String day,String doctor,String orderId) throws Exception {
        JSONObject result = new JSONObject();
        BasePatientDO patientDO = patientDao.findById(patient);
        if (null==patientDO){
@ -1017,6 +1017,7 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
            if ("4".equals(device.getCategoryCode()) || "7".equals(device.getCategoryCode())|| "16".equals(device.getCategoryCode())) {
                devInfo.put("sosContactsDOS", contactsService.getPatientSosContacts(patient));
            }
            String content = "调阅智能手表详情页";
            com.alibaba.fastjson.JSONObject devInfoObj = JSON.parseObject(JSON.toJSONString(devInfo, SerializerFeature.WriteMapNullValue));
            switch (device.getCategoryCode()) {
                case "1"://血压设备
@ -1028,6 +1029,7 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
                    String bloodPressureSql = ssql + " AND type = 1 ORDER BY sort_date DESC LIMIT 10";
                    dataList = jdbcTemplate.queryForList(bloodPressureSql);
                    devInfoObj.put("bloodPressure",dataList); //血压
                    content +="血压监测";
                    break;
                case "2"://血糖设备
                    dataSql = "SELECT record_date recordDate,value1,value2,value3,value4,value5,value6,value7,type FROM wlyy_patient_health_index WHERE device_sn = '" + deviceSn + "' AND del = 1 ";
@ -1038,6 +1040,7 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
                    recordSql = "SELECT record_date recordDate,value1,value2,value3,value4,value5,value6,value7,type FROM wlyy_patient_health_index WHERE device_sn = '" + deviceSn + "' AND del = 1  AND status = 1 ORDER BY sort_date DESC LIMIT 10";
                    dataList = jdbcTemplate.queryForList(recordSql);
                    devInfoObj.put("bloodSugar", dataList);          //血糖异常数据
                    content +="血糖监测";
                    break;
                case "4"://手表 围栏与轨迹
                    if (StringUtils.isBlank(day)) {
@ -1047,6 +1050,7 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
                    //轨迹动态
                    JSONArray locations = getX1Locations(deviceSn, day.replace("-", ""));
                    devInfoObj.put("routes", locations);
                    content +="防走失监测";
                    break;
                case "7"://报警器 紧急工单
                    com.alibaba.fastjson.JSONObject response = getAqgDeviceInfo2(deviceSn);
@ -1060,6 +1064,7 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
                    } else {
                        devInfoObj.put("contactStatus",1);
                    }
                    content +="SOS紧急呼叫器";
                    break;
                case "12"://监控 视频地址
                    com.alibaba.fastjson.JSONObject tmp = ysDeviceService.getDeviceLiveAddress(patient, deviceSn, 1, null);
@ -1069,9 +1074,11 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
                    } else {
                        devInfoObj.put("monitorInfo", tmp.getJSONObject(ResponseContant.resultMsg));
                    }
                    content +="防跌倒视频监测";
                    break;
                case "13"://睡眠带 获取当天睡眠详情
                    securityMonitoringOrderService.preventOutOfBed(devInfoObj, patient, false, day);
                    content +="睡眠监测";
                    break;
                case "14"://气感报警器 当天监测记录以及最新浓度
                    if (StringUtils.isBlank(day)) {
@ -1081,10 +1088,12 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
                    devInfoObj.put("monitorInfo", listTmp);
                    devInfoObj.put("day", day);
                    securityMonitoringOrderService.preventGasLeakage(devInfoObj, patient, false);
                    content +="燃气泄漏监测";
                    break;
                case "15"://烟感报警器 获取最新浓度
                    securityMonitoringOrderService.preventFire(devInfoObj, patient, deviceSn, false);
                    devInfoObj.put("day", DateUtil.getStringDateShort());
                    content +="火灾监测";
                    break;
                case "16":
                    if (StringUtils.isBlank(day)) {
@ -1143,18 +1152,41 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
                            devInfoObj.put("isNotAlarm","未报警");
                        }
                    }
                    content +="防走失监测";
                    break;
                case "18"://日常用水监测
                    content +="日常用水监测";
                    break;
                case "19": //门禁 todo 出入记录
                    patientFaceService.findFaceRecord(patient,day,devInfoObj);
                    content +="人脸识别检测";
                    break;
                case "20": //电表 todo 日常用电情况
                    content +="日常用电监测";
                    break;
                case "21": //天然气 todo 天然气情况
                    naturalGasRecord(patientDO.getIdcard(),devInfoObj);
                    content +="天然气使用监测";
                    break;
            }
            //记录日志
            if(StringUtils.isNotBlank(doctor)&&StringUtils.isNotBlank(orderId)){
                BaseDoctorDO doctorDO = doctorDao.findById(doctor);
                if(doctorDO!=null){
                    content+="详情页";
                    BaseEmergencyWarnLogDO logDO = new BaseEmergencyWarnLogDO();
                    logDO.setUserCode(doctor);
                    logDO.setUserName(doctorDO.getName());
                    logDO.setOrderId(orderId);
                    logDO.setUserType(2);
                    logDO.setCreateTime(new Date());
                    logDO.setContent(content);
                    logDO.setType(10);
                    logDao.save(logDO);
                }
            }
//        }
                result.put(ResponseContant.resultFlag,ResponseContant.success);
                result.put(ResponseContant.resultMsg,JSON.toJSONString(devInfoObj,SerializerFeature.WriteMapNullValue));

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

@ -302,6 +302,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            message.put("orgType", orgDO.getType());
        }
        String url = "/sos/info?id="+orderDO.getId()+"&OrderType=22";
        for (BaseDoctorDO doctorDO : doctorDOS) {
            try {
                if (StringUtils.isNotBlank(doctorDO.getMobile())) {
@ -311,7 +312,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            }
            String body = "您好," + orderDO.getPatientName() + "居民" + orderDO.getServeDesc() + ",请关注并及时处理。";
            String dingDingBody = orderDO.getPatientName()+"居民存在异常情况,请及时处理,异常内容:"+orderDO.getServeDesc()+"。";
            messageUtil.sendDoctorGetuiMessage(doctorDO.getId(), "1", "/securityMonitoring/index", "安防紧急预警", body);
            messageUtil.sendDoctorGetuiMessage(doctorDO.getId(), "1", url, "安防紧急预警", body);
            messageUtil.sendDoctorDingdingMessage(doctorDO,null,"text","1",dingDingBody,null,null);
            imUtil.sendMDTSocketMessageToDoctor(doctorDO.getId(), message.toString());
        }
@ -442,6 +443,11 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                emergencyOrderVO.setEmergencyWarnConclusionDO(conclusionDO);
            }
        }
        //复核
        List<BaseEmergencyWarnLogDO> review = logDao.findByOrderIdAndType(orderDO.getId(),7);
        if(review.size()>0){
            emergencyOrderVO.setReviewWarnLogDO(review.get(0));
        }
        //附加信息 电子围栏状态
        if (2 == orderDO.getOrderSource() || 8 == orderDO.getOrderSource()) {//手表/拐杖
            Map<String, Object> map = new HashMap<>();

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

@ -3723,17 +3723,22 @@ public class StatisticsService {
    }
    //健康设备-安防设备 列表
    public PageEnvelop healthySecurityDeviceList(String name, String deviceSn, String categoryCode, String contactStatus, String type, Integer page, Integer size) {
    public PageEnvelop healthySecurityDeviceList(String name, String deviceSn,String teamId, String categoryCode, String contactStatus, String type, Integer page, Integer size) {
        String nameSql = "";
        String deviceSnSql = "";
        String categoryCodeSql = "";
        String contactStatusSql = "";
        String totalSql = "";
        String teamCodeSql = "";
        if (StringUtils.isNotBlank(contactStatus))
            contactStatusSql = " AND wd.contact_status = '" + contactStatus + "'";
        if (StringUtils.isNotBlank(name)) nameSql = " AND p.name LIKE '%" + name + "%'";
        if (StringUtils.isNotBlank(deviceSn)) deviceSnSql = " AND pd.device_sn = '" + deviceSn + "'";
        if(StringUtils.isNotBlank(teamId)){
            teamCodeSql += " INNER JOIN base_service_package_sign_record sr ON CONVERT( sr.patient USING utf8 ) = p.id AND sr.STATUS = 1 AND sr.`status` = 1 "+
                    " INNER JOIN base_service_package_record r ON sr.id = r.sign_id  and r.team_code = '"+teamId+"'";
        }
        String filter="AND pd.USER NOT IN ( SELECT DISTINCT dict_code FROM wlyy_hospital_sys_dict WHERE ( dict_name = 'jkzl_user' OR dict_name = 'jkzl_older' ) AND dict_code IS NOT NULL ) ";
        /*String sqltmp = " SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE (dict_name = 'jkzl_child' or dict_name = 'jkzl_older' OR dict_name ='jkzl_helper' OR dict_name= 'jkzl_olderRelative' OR dict_name ='jkzl_user') ";
@ -3754,18 +3759,18 @@ public class StatisticsService {
            if (StringUtils.isNotBlank(categoryCode))
                categoryCodeSql = " AND pd.category_code = '" + categoryCode + "'";
            deviceSql = "SELECT p.id AS patient,pd.id AS id,pd.device_name AS deviceName,pd.device_sn AS deviceSn,dd.photo,'健康设备' AS deviceType,p.`name`,p.mobile,p.phone,wd.contact_status * 1 AS contactStatus,pd.category_code as categoryCode " +
            deviceSql = "SELECT distinct p.id AS patient,pd.id AS id,pd.device_name AS deviceName,pd.device_sn AS deviceSn,dd.photo,'健康设备' AS deviceType,p.`name`,p.mobile,p.phone,wd.contact_status * 1 AS contactStatus,pd.category_code as categoryCode " +
                    " FROM " +
                    " wlyy_patient_device pd " +
                    " INNER JOIN wlyy_devices wd ON pd.device_sn = wd.device_code " +
                    " INNER JOIN base_patient p ON pd.USER = p.id AND pd.del = 0 AND p.del = 1    " +
                    " INNER JOIN base_patient p ON pd.USER = p.id AND pd.del = 0 AND p.del = 1    " + teamCodeSql +
                    " LEFT JOIN dm_device dd ON pd.category_code = dd.category_code " +
                    "WHERE " +
                    " 1=1 "+filter + nameSql + deviceSnSql + categoryCodeSql + contactStatusSql;
            totalSql = "SELECT count(pd.id) FROM " +
            totalSql = "SELECT count(distinct pd.id) FROM " +
                    " wlyy_patient_device pd " +
                    " INNER JOIN wlyy_devices wd ON pd.device_sn = wd.device_code " +
                    " INNER JOIN base_patient p ON pd.USER = p.id  AND pd.del = 0  AND p.del = 1  " +
                    " INNER JOIN base_patient p ON pd.USER = p.id  AND pd.del = 0  AND p.del = 1  " + teamCodeSql +
                    " LEFT JOIN dm_device dd ON pd.category_code = dd.category_code " +
                    " WHERE " +
                    " 1=1 "+filter + nameSql + deviceSnSql + categoryCodeSql + contactStatusSql;
@ -3777,18 +3782,18 @@ public class StatisticsService {
            if (StringUtils.isNotBlank(categoryCode))
                categoryCodeSql = " AND pd.category_code = '" + categoryCode + "'";
            deviceSql = "SELECT p.id AS patient,pd.id AS id,pd.device_name AS deviceName,pd.device_sn AS deviceSn,dd.photo,'安防设备' AS deviceType,p.`name`,p.mobile,p.phone,wd.contact_status * 1 AS contactStatus,pd.category_code as categoryCode " +
            deviceSql = "SELECT distinct p.id AS patient,pd.id AS id,pd.device_name AS deviceName,pd.device_sn AS deviceSn,dd.photo,'安防设备' AS deviceType,p.`name`,p.mobile,p.phone,wd.contact_status * 1 AS contactStatus,pd.category_code as categoryCode " +
                    " FROM " +
                    " wlyy_patient_device pd " +
                    " INNER JOIN wlyy_devices wd ON pd.device_sn = wd.device_code " +
                    " INNER JOIN base_patient p ON pd.USER = p.id AND pd.del = 0 AND p.del = 1    " +
                    " INNER JOIN base_patient p ON pd.USER = p.id AND pd.del = 0 AND p.del = 1    "+ teamCodeSql +
                    " LEFT JOIN dm_device dd ON pd.category_code = dd.category_code " +
                    "WHERE " +
                    " 1=1 "+filter + nameSql + deviceSnSql + categoryCodeSql + contactStatusSql;
            totalSql = "SELECT count(pd.id) FROM " +
            totalSql = "SELECT count(distinct pd.id) FROM " +
                    " wlyy_patient_device pd " +
                    " INNER JOIN wlyy_devices wd ON pd.device_sn = wd.device_code " +
                    " INNER JOIN base_patient p ON pd.USER = p.id  AND pd.del = 0  AND p.del = 1  " +
                    " INNER JOIN base_patient p ON pd.USER = p.id  AND pd.del = 0  AND p.del = 1  " + teamCodeSql +
                    " LEFT JOIN dm_device dd ON pd.category_code = dd.category_code " +
                    " WHERE " +
                    " 1=1 "+filter + nameSql + deviceSnSql + categoryCodeSql + contactStatusSql;
@ -3842,41 +3847,67 @@ public class StatisticsService {
    //获取设备
    public JSONObject deviceinfoStatisticsNum(String type,String deviceCategory){
    public JSONObject deviceinfoStatisticsNum(String type,String deviceCategory,String teamId){
        JSONObject jsonObject = new JSONObject();
        String teamCodeSql = "";
        if(StringUtils.isNotBlank(teamId)){
            teamCodeSql += " INNER JOIN base_service_package_sign_record sr ON CONVERT( sr.patient USING utf8 ) = p.id AND sr.STATUS = 1 AND sr.`status` = 1 "+
                    " INNER JOIN base_service_package_record r ON sr.id = r.sign_id  and r.team_code = '"+teamId+"'";
        }
        //测试用户
        String testUsqlSql = "SELECT DISTINCT dict_code FROM wlyy_hospital_sys_dict WHERE (dict_name = 'jkzl_user' OR dict_name = 'jkzl_older' ) AND dict_code IS NOT NULL";
        String testUsqlSql = "SELECT DISTINCT dict_code FROM wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_older' AND dict_code IS NOT NULL";
        //类型数量
        String typeTotalSql = "SELECT count(DISTINCT category_code) AS total FROM dm_device WHERE 1=1 AND device_type = "+type+" AND del = 1 GROUP BY device_type";
        if(StringUtils.isNotBlank(teamId)){
            typeTotalSql = "select count(distinct pd.category_code) total from wlyy_patient_device pd INNER JOIN wlyy_devices dev on pd.device_sn = dev.device_code " +
                    "                INNER JOIN base_patient p on pd.user = p.id and pd.del=0 and p.del=1 " + teamCodeSql +
                    "                where  pd.device_type = "+type+"  AND pd.user NOT IN ("+testUsqlSql+") ";
        }
        //离线设备数量
        String offLineDeviceSql="select count(distinct pd.device_sn) total from wlyy_patient_device pd INNER JOIN wlyy_devices dev on pd.device_sn = dev.device_code " +
                "                 INNER JOIN base_patient p on pd.user = p.id and pd.del=0 and p.del=1 " +
                "                 INNER JOIN base_patient p on pd.user = p.id and pd.del=0 and p.del=1 " + teamCodeSql +
                "                where dev.contact_status=0  and pd.device_type = "+type+"  AND pd.user NOT IN ("+testUsqlSql+") group by pd.device_type";
        //设备总数
        String deviceTotalSql = "SELECT count(DISTINCT device_code) FROM wlyy_devices WHERE (device_code IS NOT NULL OR device_code <> '') AND device_type = "+type+"";
        if(StringUtils.isNotBlank(teamId)){
            deviceTotalSql = "select count(distinct pd.device_sn) total from wlyy_patient_device pd INNER JOIN wlyy_devices dev on pd.device_sn = dev.device_code " +
                    "                INNER JOIN base_patient p on pd.user = p.id and pd.del=0 and p.del=1 " + teamCodeSql +
                    "                where  pd.device_type = "+type+"  AND pd.user NOT IN ("+testUsqlSql+") ";
        }
        //设备在线量
        String lineDeviceSql ="select count(distinct pd.device_sn) total from wlyy_patient_device pd INNER JOIN wlyy_devices dev on pd.device_sn = dev.device_code " +
                "                INNER JOIN base_patient p on pd.user = p.id and pd.del=0 and p.del=1 " +
                "                INNER JOIN base_patient p on pd.user = p.id and pd.del=0 and p.del=1 " + teamCodeSql +
                "                where dev.contact_status=1 and pd.device_type = 0  AND pd.user NOT IN ("+testUsqlSql+") group by pd.device_type";
        String deviceCategorySql = "";
        String categoryCodeSql = "";
        String categoryCodeTotalSql = "";
        if (StringUtils.isNotBlank(deviceCategory)){
            deviceCategorySql = " AND device_category= '"+deviceCategory+"' ";
            categoryCodeSql = " AND category_code= '"+deviceCategory+"' ";
            categoryCodeTotalSql = " AND  pd.category_code = '"+deviceCategory+"' ";
        }
        //七天使用      AND device_category= 4  手表
        String sevenDayUseSql ="select count(distinct pd.device_sn) total from wlyy_patient_device pd INNER JOIN wlyy_devices dev on pd.device_sn = dev.device_code " +
                "                INNER JOIN base_patient p on pd.user = p.id and pd.del=0 and p.del=1 " +
                "                INNER JOIN base_patient p on pd.user = p.id and pd.del=0 and p.del=1 " + teamCodeSql +
                "                where pd.device_type = "+type+"  AND EXISTS(SELECT 1 FROM device_data_push_log pl WHERE pl.device_sn = pd.device_sn "+deviceCategorySql+" AND DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= pl.create_time ) AND pd.user NOT IN ("+testUsqlSql+") group by pd.device_type";
        //设备类型总数
        String deviceCodeTotalSql ="SELECT count(DISTINCT device_code) FROM wlyy_devices WHERE (device_code IS NOT NULL OR device_code <> '') AND category_code = '"+deviceCategory+"'";
        String deviceCodeTotalSql ="SELECT count(DISTINCT device_code) FROM wlyy_devices WHERE (device_code IS NOT NULL OR device_code <> '') " + categoryCodeSql;
        if(StringUtils.isNotBlank(teamId)){
            deviceCodeTotalSql = "select count(distinct pd.device_sn) total from wlyy_patient_device pd INNER JOIN wlyy_devices dev on pd.device_sn = dev.device_code " +
                    "                INNER JOIN base_patient p on pd.user = p.id and pd.del=0 and p.del=1 " + teamCodeSql +
                    "                where pd.user NOT IN ("+testUsqlSql+") "+categoryCodeTotalSql;
        }
        //long start=System.currentTimeMillis();
        List<Integer> total = jdbcTemplate.queryForList(typeTotalSql, Integer.class);
@ -3890,9 +3921,9 @@ public class StatisticsService {
        total = jdbcTemplate.queryForList(lineDeviceSql,Integer.class);
        jsonObject.put("lineDevice",total.get(0));
        total = jdbcTemplate.queryForList(sevenDayUseSql,Integer.class);
        Integer deviceCodeTotal = jdbcTemplate.queryForObject(deviceCodeTotalSql,Integer.class);
        Float num = 0F;
        if (total.size()>0) {
            Integer deviceCodeTotal = jdbcTemplate.queryForObject(deviceCodeTotalSql,Integer.class);
            num= (float)total.get(0)/(float)deviceCodeTotal;
        }
        jsonObject.put("sevenDayUse",num*100);