浏览代码

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

liubing 3 年之前
父节点
当前提交
48909550db

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

@ -45,7 +45,7 @@ public class DetectionPlatformEndpoint extends EnvelopRestEndpoint {
    @ApiOperation("环境信息")
    @RequestMapping(value = "envMessage", method = RequestMethod.GET)
    public ObjEnvelop envMessage(@ApiParam(name = "patientId", value = "居民id", defaultValue = "1")
                             @RequestParam(value = "patientId", required = true) String patientId){
                                 @RequestParam(value = "patientId", required = true) String patientId) {
        try {
            return success(patientDeviceService.envMessage(patientId));
        } catch (Exception ex) {
@ -57,11 +57,11 @@ public class DetectionPlatformEndpoint extends EnvelopRestEndpoint {
    @GetMapping(value = "getHealthMonitoringListNew")
    @ApiOperation(value = "体征监测/安防监护")
    public PageEnvelop getHealthMonitoringListNew(
            @ApiParam(name="page",value = "page") @RequestParam(required = true) int page,
            @ApiParam(name="size",value = "size") @RequestParam(required = true) int size,
            @ApiParam(name="type",value = "type=1(健康监测)   type=2(安防检测)   type=3(设备异常)") @RequestParam(required = true) int type) {
            @ApiParam(name = "page", value = "page") @RequestParam(required = true) int page,
            @ApiParam(name = "size", value = "size") @RequestParam(required = true) int size,
            @ApiParam(name = "type", value = "type=1(健康监测)   type=2(安防检测)   type=3(设备异常)") @RequestParam(required = true) int type) {
        try {
            return platformService.getHealthMonitoringListNew(page,size,type);
            return platformService.getHealthMonitoringListNew(page, size, type);
        } catch (Exception e) {
            return failedPageEnvelopException2(e);
        }
@ -69,174 +69,174 @@ public class DetectionPlatformEndpoint extends EnvelopRestEndpoint {
    @GetMapping(value = "getDeviceCompany")
    @ApiOperation(value = "设备入驻")
    public ObjEnvelop getDeviceCompany(){
    public ObjEnvelop getDeviceCompany() {
        try {
            JSONObject o = platformService.getDeviceComapny();
            return success(o);
        }catch (Exception e){
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @GetMapping(value = "getRealTimeData")
    @ApiOperation(value = "实时数据")
    public ObjEnvelop getRealTimeData(){
    public ObjEnvelop getRealTimeData() {
        try {
            JSONObject o = platformService.getRealTimeData();
            return success(o);
        }catch (Exception e){
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @GetMapping(value = "getDeviceType")
    @ApiOperation(value = "设备类型")
    public ListEnvelop getDeviceType(){
    public ListEnvelop getDeviceType() {
        try {
            return success("查询成功",200,platformService.getDeviceType());
        }catch (Exception e){
            return success("查询成功", 200, platformService.getDeviceType());
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
    @GetMapping(value = "getDeviceByCondition")
    @ApiOperation(value = "地图展示,根据不同的条件展示不同的数据")
    public ListEnvelop<Object> getDeviceByCondition(@ApiParam(name="categoryCode",value = "categoryCode") @RequestParam(required = false) String categoryCode,
                                                    @ApiParam(name="patient",value = "patient") @RequestParam(required = false) String patient){
    public ListEnvelop<Object> getDeviceByCondition(@ApiParam(name = "categoryCode", value = "categoryCode") @RequestParam(required = false) String categoryCode,
                                                    @ApiParam(name = "patient", value = "patient") @RequestParam(required = false) String patient) {
        try {
            JSONArray object = platformService.getDeviceByCondition(categoryCode,patient);
            return success("查询成功",200,object);
        }catch (Exception e){
            JSONArray object = platformService.getDeviceByCondition(categoryCode, patient);
            return success("查询成功", 200, object);
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
    @GetMapping("getOrderListWarning")
    @ApiOperation(value = "物联网大屏预警工单列表坐标获取")
    public ListEnvelop getOrderListWarning(){
    public ListEnvelop getOrderListWarning() {
        try {
            return ListEnvelop.getSuccess("success",platformService.getOrderListWarning());
        }catch (Exception e){
            return ListEnvelop.getSuccess("success", platformService.getOrderListWarning());
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
    @GetMapping(value = "getDeviceInfo")
    @ApiOperation(value = "地图展示,根据设备sn码查询详情")
    public ObjEnvelop getDeviceInfo(            @ApiParam(name="deviceSn",value = "deviceSn") @RequestParam(required = true) String deviceSn){
    public ObjEnvelop getDeviceInfo(@ApiParam(name = "deviceSn", value = "deviceSn") @RequestParam(required = true) String deviceSn) {
        try {
            JSONObject object = platformService.getDeviceInfo(deviceSn);
            return success("查询成功",200,object);
        }catch (Exception e){
            return success("查询成功", 200, object);
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @GetMapping(value = "nightRecordList")
    @ApiOperation(value = "根据设备sn码查询起夜记录")
    public ListEnvelop nightRecordList(            @ApiParam(name="deviceSn",value = "deviceSn") @RequestParam(required = true) String deviceSn){
    public ListEnvelop nightRecordList(@ApiParam(name = "deviceSn", value = "deviceSn") @RequestParam(required = true) String deviceSn) {
        try {
            return success("查询成功",200, platformService.nightRecordList(deviceSn));
        }catch (Exception e){
            return success("查询成功", 200, platformService.nightRecordList(deviceSn));
        } catch (Exception e) {
            return failedListEnvelopException(e);
        }
    }
    @ApiOperation("获取设备详情信息")
    @RequestMapping(value = "getPatientDeviceDetail",method = RequestMethod.GET)
    public Envelop getPatientDeviceDetail(@ApiParam(name="patient")
                                         @RequestParam(value = "patient")String patient,
                                          @ApiParam(name="deviceSN")
                                         @RequestParam(value = "deviceSN")String deviceSn,
                                          @ApiParam(name="day",value = "yyyy-mm-dd")
                                         @RequestParam(value = "day",required = false)String day){
    @RequestMapping(value = "getPatientDeviceDetail", method = RequestMethod.GET)
    public Envelop getPatientDeviceDetail(@ApiParam(name = "patient")
                                          @RequestParam(value = "patient") String patient,
                                          @ApiParam(name = "deviceSN")
                                          @RequestParam(value = "deviceSN") String deviceSn,
                                          @ApiParam(name = "day", value = "yyyy-mm-dd")
                                          @RequestParam(value = "day", required = false) String day) {
        try {
            org.json.JSONObject result = patientDeviceService.getPatientDeviceDetail(patient,deviceSn,day);
            if (result.getInt(ResponseContant.resultFlag)==ResponseContant.success){
            org.json.JSONObject result = patientDeviceService.getPatientDeviceDetail(patient, deviceSn, day);
            if (result.getInt(ResponseContant.resultFlag) == ResponseContant.success) {
                return success(JSON.parseObject(result.getString(ResponseContant.resultMsg)));
            }else {
            } else {
                return success(result.getString(ResponseContant.resultMsg), -1);
            }
        }catch (Exception e){
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @ApiOperation("获取设备详情数据 --设备可多人绑定查询数据时与patient无关")
    @GetMapping(value = "getPatientDeviceData")
    public Envelop getPatientDeviceData(@ApiParam(name="patient")
                                       @RequestParam(value = "patient")String patient,
                                       @ApiParam(name="deviceSN")
                                       @RequestParam(value = "deviceSN")String deviceSn,
                                       @ApiParam(name="type",value = "0全部 1日常监护 2预警记录(工单列表)")
                                       @RequestParam(value = "type",required = false)String type,
                                       @ApiParam(name="page")
                                       @RequestParam(value = "page")Integer page,
                                       @ApiParam(name="pageSize")
                                       @RequestParam(value = "pageSize")Integer pageSize){
    public Envelop getPatientDeviceData(@ApiParam(name = "patient")
                                        @RequestParam(value = "patient") String patient,
                                        @ApiParam(name = "deviceSN")
                                        @RequestParam(value = "deviceSN") String deviceSn,
                                        @ApiParam(name = "type", value = "0全部 1日常监护 2预警记录(工单列表)")
                                        @RequestParam(value = "type", required = false) String type,
                                        @ApiParam(name = "page")
                                        @RequestParam(value = "page") Integer page,
                                        @ApiParam(name = "pageSize")
                                        @RequestParam(value = "pageSize") Integer pageSize) {
        try {
            org.json.JSONObject result = patientDeviceService.getPatientDeviceData(patient,type,deviceSn,page,pageSize);
            if (result.getInt(ResponseContant.resultFlag)==ResponseContant.success){
            org.json.JSONObject result = patientDeviceService.getPatientDeviceData(patient, type, deviceSn, page, pageSize);
            if (result.getInt(ResponseContant.resultFlag) == ResponseContant.success) {
                return success(JSON.parseObject(result.getString(ResponseContant.resultMsg)));
            }else {
            } else {
                return success(result.getString(ResponseContant.resultMsg), -1);
            }
        }catch (Exception e){
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @ApiOperation("获取睡眠带睡眠报告")
    @RequestMapping(value ="getSleepReport",method = RequestMethod.GET)
    public ObjEnvelop getSleepReport(@ApiParam(name="patient")@RequestParam(value = "patient",required = false)String patient,
                                     @ApiParam(name="deviceSn")@RequestParam(value = "deviceSn",required = false)String deviceSn,
                                     @ApiParam(name="day")@RequestParam(value = "day",required = false)String day){
    @RequestMapping(value = "getSleepReport", method = RequestMethod.GET)
    public ObjEnvelop getSleepReport(@ApiParam(name = "patient") @RequestParam(value = "patient", required = false) String patient,
                                     @ApiParam(name = "deviceSn") @RequestParam(value = "deviceSn", required = false) String deviceSn,
                                     @ApiParam(name = "day") @RequestParam(value = "day", required = false) String day) {
        try {
            if (StringUtils.isBlank(patient)&&StringUtils.isBlank(deviceSn)){
            if (StringUtils.isBlank(patient) && StringUtils.isBlank(deviceSn)) {
                return ObjEnvelop.getError("请求参数");
            }
            org.json.JSONObject result = patientDeviceService.getSleepReport(patient,deviceSn,day);
            if (ResponseContant.success==result.getInt(ResponseContant.resultFlag)){
                return ObjEnvelop.getSuccess("获取成功",result.get(ResponseContant.resultMsg));
            }else {
            org.json.JSONObject result = patientDeviceService.getSleepReport(patient, deviceSn, day);
            if (ResponseContant.success == result.getInt(ResponseContant.resultFlag)) {
                return ObjEnvelop.getSuccess("获取成功", result.get(ResponseContant.resultMsg));
            } else {
                return ObjEnvelop.getError(result.getString(ResponseContant.resultMsg));
            }
        }catch (Exception e){
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @ApiOperation("获取患者步数数据")
    @RequestMapping(value ="getPatientStep",method = RequestMethod.GET)
    public ObjEnvelop getPatientStep(@ApiParam(name="patient")@RequestParam(value = "patient",required = false)String patient,
                                     @ApiParam(name="deviceSn")@RequestParam(value = "deviceSn",required = false)String deviceSn,
                                     @ApiParam(name="day")@RequestParam(value = "day",required = false)String day){
    @RequestMapping(value = "getPatientStep", method = RequestMethod.GET)
    public ObjEnvelop getPatientStep(@ApiParam(name = "patient") @RequestParam(value = "patient", required = false) String patient,
                                     @ApiParam(name = "deviceSn") @RequestParam(value = "deviceSn", required = false) String deviceSn,
                                     @ApiParam(name = "day") @RequestParam(value = "day", required = false) String day) {
        try {
            if (StringUtils.isBlank(patient)&&StringUtils.isBlank(deviceSn)){
            if (StringUtils.isBlank(patient) && StringUtils.isBlank(deviceSn)) {
                return ObjEnvelop.getError("请求参数");
            }
            org.json.JSONObject result = patientDeviceService.getPatientStep(patient,deviceSn,day);
            if (ResponseContant.success==result.getInt(ResponseContant.resultFlag)){
                return ObjEnvelop.getSuccess("获取成功",result.get(ResponseContant.resultMsg));
            }else {
            org.json.JSONObject result = patientDeviceService.getPatientStep(patient, deviceSn, day);
            if (ResponseContant.success == result.getInt(ResponseContant.resultFlag)) {
                return ObjEnvelop.getSuccess("获取成功", result.get(ResponseContant.resultMsg));
            } else {
                return ObjEnvelop.getError(result.getString(ResponseContant.resultMsg));
            }
        }catch (Exception e){
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @ApiOperation("获取烟雾/燃气浓度列表")
    @RequestMapping(value ="getSmokeOrGasList",method = RequestMethod.GET)
    public ListEnvelop getSmokeOrGasList(@ApiParam(name="deviceSn")@RequestParam(value = "deviceSn",required = true)String deviceSn,
                                         @ApiParam(name="day",value = "yyyy-MM-dd")@RequestParam(value = "day",required = false)String day){
    @RequestMapping(value = "getSmokeOrGasList", method = RequestMethod.GET)
    public ListEnvelop getSmokeOrGasList(@ApiParam(name = "deviceSn") @RequestParam(value = "deviceSn", required = true) String deviceSn,
                                         @ApiParam(name = "day", value = "yyyy-MM-dd") @RequestParam(value = "day", required = false) String day) {
        try {
            return ListEnvelop.getSuccess("获取成功",patientDeviceService.getSmokeOrGasList(deviceSn,day));
        }catch (Exception e){
            return ListEnvelop.getSuccess("获取成功", patientDeviceService.getSmokeOrGasList(deviceSn, day));
        } catch (Exception e) {
            return failedListEnvelopException2(e);
        }
    }
@ -244,30 +244,30 @@ public class DetectionPlatformEndpoint extends EnvelopRestEndpoint {
    /********************v1.1.0**************************/
    @GetMapping(value = "getGiveEarlyWarning")
    @ApiOperation(value = "物联网检测大屏,预警部分")
    public ObjEnvelop getGiveEarlyWarning(){
    public ObjEnvelop getGiveEarlyWarning() {
        try {
            return success("查询成功",200, platformService.getDistributionOfWarningTypes());
        }catch (Exception e){
            return success("查询成功", 200, platformService.getDistributionOfWarningTypes());
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @GetMapping(value = "getServiceSituation")
    @ApiOperation(value = "物联网检测大屏,服务情况")
    public ObjEnvelop getServiceSituation(){
    public ObjEnvelop getServiceSituation() {
        try {
            return success("查询成功",200, platformService.getServiceSituation());
        }catch (Exception e){
            return success("查询成功", 200, platformService.getServiceSituation());
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @GetMapping(value = "deviceAndService")
        @ApiOperation(value = "物联网检测大屏,设备种类    安防服务")
    public ObjEnvelop deviceAndService(){
    @ApiOperation(value = "物联网检测大屏,设备种类    安防服务")
    public ObjEnvelop deviceAndService() {
        try {
            return success("查询成功",200, platformService.deviceAndService());
        }catch (Exception e){
            return success("查询成功", 200, platformService.deviceAndService());
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
@ -275,19 +275,19 @@ public class DetectionPlatformEndpoint extends EnvelopRestEndpoint {
    @ApiOperation("助老员端获取日常监护居民")
    @GetMapping(value = "findMonitorPatientsByDoctor")
    @ResponseBody
    public ObjEnvelop findMonitorPatientsByDoctor(@ApiParam(name = "doctor",  required = true)@RequestParam(value = "doctor")String doctor,
                                                  @ApiParam(name = "topicItem", value = "专题code,关联security_topic_dict字典,actionTrack行动轨迹", required = true)
                                                  @RequestParam(value = "topicItem",required = true,defaultValue = "preventLost") String topicItem,
                                                  @ApiParam(name = "day", value = "day", required = false)
                                                  @RequestParam(value = "day",required = false) String day,
                                                  @ApiParam(name = "page")
                                                  @RequestParam(value = "page",required = false) Integer page,
                                                  @ApiParam(name = "pageSize")
                                                  @RequestParam(value = "pageSize",required = false) Integer pageSize,
                                                  @ApiParam(name = "detail", value = "是否返回专题详情0否 1是")
                                                  @RequestParam(value = "detail",required = false,defaultValue = "0") Integer detail) {
    public ObjEnvelop findMonitorPatientsByDoctor(
            @ApiParam(name = "topicItem", value = "专题code,关联security_topic_dict字典,actionTrack行动轨迹,sos紧急预警", required = true)
            @RequestParam(value = "topicItem", required = true, defaultValue = "preventLost") String topicItem,
            @ApiParam(name = "day", value = "day", required = false)
            @RequestParam(value = "day", required = false) String day,
            @ApiParam(name = "page")
            @RequestParam(value = "page", required = false) Integer page,
            @ApiParam(name = "pageSize")
            @RequestParam(value = "pageSize", required = false) Integer pageSize,
            @ApiParam(name = "detail", value = "是否返回专题详情0否 1是")
            @RequestParam(value = "detail", required = false, defaultValue = "0") Integer detail) {
        try {
            return ObjEnvelop.getSuccess( "查询成功", securityMonitoringOrderService.findMonitorPatientsByDoctor(doctor,topicItem,day,page,pageSize,detail));
            return ObjEnvelop.getSuccess("查询成功", securityMonitoringOrderService.findMonitorPatientsByDoctors(topicItem, day, page, pageSize, detail));
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
@ -296,9 +296,9 @@ public class DetectionPlatformEndpoint extends EnvelopRestEndpoint {
    @ApiOperation("助老员端获取日常监护居民")
    @GetMapping(value = "findSignOlder")
    @ResponseBody
    public ObjEnvelop findSignOlder(@ApiParam(name = "doctor",  required = true)@RequestParam(value = "doctor")String doctor) {
    public ObjEnvelop findSignOlder() {
        try {
            return ObjEnvelop.getSuccess( "查询成功", platformService.findSignOlder(doctor));
            return ObjEnvelop.getSuccess("查询成功", platformService.findSignOlder());
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }

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

@ -141,7 +141,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
    private Logger logger = LoggerFactory.getLogger(SecurityMonitoringOrderService.class);
    public JSONObject createOrder(String jsonData,Integer orderSource,String warnStr) throws Exception {
    public JSONObject createOrder(String jsonData, Integer orderSource, String warnStr) throws Exception {
        logger.info("创建安防工单jsonData参数:" + jsonData);
        JSONObject result = new JSONObject();
@ -168,9 +168,9 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        //V1.4 同一类型的安防工单 距离上次发起小于6小时不可重复发起
        String sql = " select count(id) from base_security_monitoring_order where `status`=1  " +
                "  and TIMESTAMPDIFF(HOUR,create_time,NOW())<=6 " +
                " and patient='"+orderDO.getPatient()+"' and serve_desc ='"+orderDO.getServeDesc()+"' ";
        Integer count = jdbcTemplate.queryForObject(sql,Integer.class);
        if (count>0){
                " and patient='" + orderDO.getPatient() + "' and serve_desc ='" + orderDO.getServeDesc() + "' ";
        Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
        if (count > 0) {
            result.put("resultFlag", 0);
            String failMsg = "居民六小时内已存在该预警类型工单,无法重复发起";
            result.put("resultMsg", failMsg);
@ -186,7 +186,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        orderDO.setOrderInfo("0");
        orderDO.setOrderSource(orderSource);
        if(StringUtils.isEmpty(orderDO.getPatient())){
        if (StringUtils.isEmpty(orderDO.getPatient())) {
            result.put("resultFlag", 0);
            String failMsg = "当前服务对象code为空,请联系管理员检查参数!patient = " + orderDO.getPatient();
            result.put("resultMsg", failMsg);
@ -195,7 +195,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        }
        BasePatientDO patientDO = basePatientDao.findById(orderDO.getPatient());
        if (patientDO==null){
        if (patientDO == null) {
            result.put("resultFlag", 0);
            String failMsg = "当前服务对象未建档";
            result.put("resultMsg", failMsg);
@ -204,11 +204,11 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        }
        //签约防走失服务包
        sql ="SELECT i.code,r.team_code,pack.org_code,pack.org_name from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i,base_service_package pack    \n" +
        sql = "SELECT i.code,r.team_code,pack.org_code,pack.org_name from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i,base_service_package pack    \n" +
                "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 \n" +
                "and  sr.patient  = '"+orderDO.getPatient()+"' and i.code='preventLost' ";
        List<Map<String,Object>> items = jdbcTemplate.queryForList(sql);
        if (items.size()==0) {
                "and  sr.patient  = '" + orderDO.getPatient() + "' and i.code='preventLost' ";
        List<Map<String, Object>> items = jdbcTemplate.queryForList(sql);
        if (items.size() == 0) {
            result.put("resultFlag", 0);
            String failMsg = "当前服务对象未签约防走失服务,请签约后再发起预警!";
            result.put("resultMsg", failMsg);
@ -228,12 +228,12 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
//            logger.error(failMsg);
//            return result;
//        }
        Map<String,Object> mapTmp = items.get(0);
        List<BaseDoctorDO> doctorDOS = baseTeamMemberDao.findAllMembersByLevel(mapTmp.get("team_code").toString(),2);
        if (doctorDOS.size()==0){
        Map<String, Object> mapTmp = items.get(0);
        List<BaseDoctorDO> doctorDOS = baseTeamMemberDao.findAllMembersByLevel(mapTmp.get("team_code").toString(), 2);
        if (doctorDOS.size() == 0) {
            String failMsg = "安防警报服务项服务医生为空,不可发起救助";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
            result.put(ResponseContant.resultMsg, failMsg);
            return result;
        }
@ -243,97 +243,98 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        orderDO.setServiceStatus("2");
        this.save(orderDO);
        //创建im会话  安防警报咨询的sessionid  为居民code+(wlyy_consult_team表consult)+20
        JSONObject IMObj = consultTeamService.addSecurityMoConsult(orderDO.getId(),orderDO.getPatient(),null,null,orderDO.getServeDesc());
        String sessionId=orderDO.getPatient()+"_"+ IMObj.getJSONObject("resultMsg").getString("consult") + "_22";
        JSONObject IMObj = consultTeamService.addSecurityMoConsult(orderDO.getId(), orderDO.getPatient(), null, null, orderDO.getServeDesc());
        String sessionId = orderDO.getPatient() + "_" + IMObj.getJSONObject("resultMsg").getString("consult") + "_22";
        orderDO.setSessionId(sessionId);
        if (StringUtils.isNotBlank(orderDO.getServeDesc())){
        if (StringUtils.isNotBlank(orderDO.getServeDesc())) {
            ConsultTeamDo consultTeam = consultTeamDao.queryByRelationCode(orderDO.getId());
            if (consultTeam!=null){
                imUtil.sendTopicIM(orderDO.getPatient(),patientDO.getName(),consultTeam.getConsult(),"1",orderDO.getServeDesc(),null);
            if (consultTeam != null) {
                imUtil.sendTopicIM(orderDO.getPatient(), patientDO.getName(), consultTeam.getConsult(), "1", orderDO.getServeDesc(), null);
            }
        }
        //推送socket给医生  推送紧急预警
        JSONObject message = new JSONObject();
        String latLon = orderDO.getServeLat()+","+orderDO.getServeLon();
        message.put("latLon",latLon);
        message.put("session_id",sessionId);
        message.put("sender_name",orderDO.getPatientName());
        message.put("content_notice",orderDO.getPatientName()+" "+warnStr+"!");
        message.put("sender_code",orderDO.getPatient());
        message.put("OrderType",22);
        message.put("OrderStatus","new");
        message.put("order_id",orderDO.getId());
        message.put("content_type",40);
        message.put("serverDesc",orderDO.getServeDesc());
        message.put("categoryCode","");
        message.put("orgType","");
        message.put("contactStatus","");
        message.put("residentialArea",patientDO.getResidentialArea());
        if (null!=orderDO.getDeviceSn()){
        String latLon = orderDO.getServeLat() + "," + orderDO.getServeLon();
        message.put("latLon", latLon);
        message.put("session_id", sessionId);
        message.put("sender_name", orderDO.getPatientName());
        message.put("content_notice", orderDO.getPatientName() + " " + warnStr + "!");
        message.put("sender_code", orderDO.getPatient());
        message.put("OrderType", 22);
        message.put("OrderStatus", "new");
        message.put("order_id", orderDO.getId());
        message.put("content_type", 40);
        message.put("serverDesc", orderDO.getServeDesc());
        message.put("categoryCode", "");
        message.put("orgType", "");
        message.put("contactStatus", "");
        message.put("residentialArea", patientDO.getResidentialArea());
        if (null != orderDO.getDeviceSn()) {
            String device_sn = orderDO.getDeviceSn();
            if (org.apache.commons.lang.StringUtils.isNotBlank(device_sn)){
            if (org.apache.commons.lang.StringUtils.isNotBlank(device_sn)) {
                DeviceDetail deviceDetail = deviceDetailDao.findBySn(device_sn);
                if (null!=deviceDetail){
                    message.put("contactStatus",deviceDetail.getContactStatus());
                    message.put("categoryCode",deviceDetail.getCategoryCode());
                if (null != deviceDetail) {
                    message.put("contactStatus", deviceDetail.getContactStatus());
                    message.put("categoryCode", deviceDetail.getCategoryCode());
                }
            }
        }
        String orgCode = orderDO.getHospital();
        BaseOrgDO orgDO = orgDao.findByCode(orgCode);
        if (null!=orgDO){
            message.put("orgType",orgDO.getType());
        if (null != orgDO) {
            message.put("orgType", orgDO.getType());
        }
        for (BaseDoctorDO doctorDO:doctorDOS){
        for (BaseDoctorDO doctorDO : doctorDOS) {
            try {
                if (StringUtils.isNotBlank(doctorDO.getMobile())){
                    messageUtil.sendTXYSJson("1141719",doctorDO.getMobile(),orderDO.getPatientName(),orderDO.getServeDesc());
                if (StringUtils.isNotBlank(doctorDO.getMobile())) {
                    messageUtil.sendTXYSJson("1141719", doctorDO.getMobile(), orderDO.getPatientName(), orderDO.getServeDesc());
                }
            }catch (Exception e){}
            String body = "您好,"+orderDO.getPatientName()+"居民"+orderDO.getServeDesc()+",请关注并及时处理。";
            messageUtil.sendDoctorGetuiMessage(doctorDO.getId(),"1","/securityMonitoring/index","安防紧急预警",body);
            imUtil.sendMDTSocketMessageToDoctor(doctorDO.getId(),message.toString());
            } catch (Exception e) {
            }
            String body = "您好," + orderDO.getPatientName() + "居民" + orderDO.getServeDesc() + ",请关注并及时处理。";
            messageUtil.sendDoctorGetuiMessage(doctorDO.getId(), "1", "/securityMonitoring/index", "安防紧急预警", body);
            imUtil.sendMDTSocketMessageToDoctor(doctorDO.getId(), message.toString());
        }
        //pc管理端端推送消息
        imUtil.sendPcManageMessageToPc("cloudCare_pcManage",message.toString());
        imUtil.sendPcManageMessageToPc("cloudCare_pcManage", message.toString());
        result.put("resultFlag", 1);
        result.put("resultMsg",orderDO);
        result.put("resultMsg", orderDO);
        return result;
    }
    public List<Map<String , Object>> getElectronicFence(String patient){
        String sql = " select safe_area_gz safeAreaGz from wlyy_patient_safe_area where patient = '"+patient+"' ";
    public List<Map<String, Object>> getElectronicFence(String patient) {
        String sql = " select safe_area_gz safeAreaGz from wlyy_patient_safe_area where patient = '" + patient + "' ";
        return jdbcTemplate.queryForList(sql);
    }
    public List<Map<String , Object>> getActionTrack(String deviceSn,String day){
        String sql = "SELECT * FROM base_yxdevice_index WHERE sn = '"+deviceSn+"' AND lon != 0 AND lat != 0  and create_time like '"+day+"%' ORDER BY create_time DESC LIMIT 0,20";
    public List<Map<String, Object>> getActionTrack(String deviceSn, String day) {
        String sql = "SELECT * FROM base_yxdevice_index WHERE sn = '" + deviceSn + "' AND lon != 0 AND lat != 0  and create_time like '" + day + "%' ORDER BY create_time DESC LIMIT 0,20";
        return jdbcTemplate.queryForList(sql);
    }
    public List<Map<String,Object>>getNewList(String deviceSn,String day){
        if (StringUtils.isBlank(day)){
    public List<Map<String, Object>> getNewList(String deviceSn, String day) {
        if (StringUtils.isBlank(day)) {
            day = DateUtil.getStringDateShort();
        }
        String sql = "SELECT * FROM base_yxdevice_index WHERE sn = '"+deviceSn+"' AND create_time LIKE '"+day+"%' AND lon != 0 AND lat != 0 ORDER BY create_time DESC limit 1";
        String sql = "SELECT * FROM base_yxdevice_index WHERE sn = '" + deviceSn + "' AND create_time LIKE '" + day + "%' AND lon != 0 AND lat != 0 ORDER BY create_time DESC limit 1";
        return jdbcTemplate.queryForList(sql);
    }
    public List<Map<String , Object>> getPatientLatLon(String deviceSn){
        String sql = "SELECT p.lat_lon FROM base_patient p,wlyy_patient_device pd WHERE pd.del = 0 AND pd.device_sn = '"+deviceSn+"' AND pd.`user` = p.id AND p.del = 1 limit 1";
    public List<Map<String, Object>> getPatientLatLon(String deviceSn) {
        String sql = "SELECT p.lat_lon FROM base_patient p,wlyy_patient_device pd WHERE pd.del = 0 AND pd.device_sn = '" + deviceSn + "' AND pd.`user` = p.id AND p.del = 1 limit 1";
        return jdbcTemplate.queryForList(sql);
    }
    public JSONObject getSecurityOrderDetail(String orderID,String doctor){
    public JSONObject getSecurityOrderDetail(String orderID, String doctor) {
        JSONObject result = new JSONObject();
        EmergencyOrderVO emergencyOrderVO = new EmergencyOrderVO();
        SecurityMonitoringOrderDO orderDO = securityMonitoringOrderDao.findOne(orderID);
        if (orderDO==null){
        if (orderDO == null) {
            String failMsg = "工单不存在!";
            result.put("resultFlag", 0);
            result.put("resultMsg", failMsg);
@ -342,13 +343,21 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        }
        emergencyOrderVO.setId(orderDO.getId());
        BasePatientDO patientDO = basePatientDao.findById(orderDO.getPatient());
        Integer statustemp = Integer.valueOf(orderDO.getStatus()+"");
        Integer statustemp = Integer.valueOf(orderDO.getStatus() + "");
        String statusName = "";
        switch (statustemp){
            case -2:statusName="误警报";break;
            case -1:statusName="已取消";break;
            case 0:statusName="已完成";break;
            case 1:statusName="预警中";break;
        switch (statustemp) {
            case -2:
                statusName = "误警报";
                break;
            case -1:
                statusName = "已取消";
                break;
            case 0:
                statusName = "已完成";
                break;
            case 1:
                statusName = "预警中";
                break;
        }
        emergencyOrderVO.setStatusName(statusName);
        emergencyOrderVO.setOrderId(orderID);
@ -362,247 +371,244 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        emergencyOrderVO.setSex(patientDO.getSex());
        emergencyOrderVO.setTopicItem(orderDO.getTopicItem());
        emergencyOrderVO.setOrderType(22);
        if (StringUtils.isNotBlank(orderDO.getSceneImg())){
        if (StringUtils.isNotBlank(orderDO.getSceneImg())) {
            emergencyOrderVO.setSceneImg(orderDO.getSceneImg());
        }
        List<BaseEmergencyWarnLogDO> logDOS = logDao.findByOrderIdOrderByCreateTimeDesc(orderDO.getId());
        for (BaseEmergencyWarnLogDO tmp:logDOS){
            tmp.setTimeInfo(DateUtil.getDifferentTimeInfo(new Date(),tmp.getCreateTime(),0));
        for (BaseEmergencyWarnLogDO tmp : logDOS) {
            tmp.setTimeInfo(DateUtil.getDifferentTimeInfo(new Date(), tmp.getCreateTime(), 0));
        }
        if (logDOS.size()==0&&1==emergencyOrderVO.getStatus()){//未响应
            emergencyOrderVO.setOverTimeNotResponse(DateUtil.getDifferentTimeInfo1(new Date(),orderDO.getCreateTime()));
        if (logDOS.size() == 0 && 1 == emergencyOrderVO.getStatus()) {//未响应
            emergencyOrderVO.setOverTimeNotResponse(DateUtil.getDifferentTimeInfo1(new Date(), orderDO.getCreateTime()));
        }
        emergencyOrderVO.setOrderLogInfo(logDOS);
        List<PatientSosContactsDO> contactsDOS = contactsService.getPatientSosContacts(orderDO.getPatient());
        emergencyOrderVO.setSosContacts(contactsDOS);
        List<Map<String,Object>> securityDevices = patientDeviceService.patientEmeDeviceList(orderDO.getPatient());
        List<Map<String, Object>> securityDevices = patientDeviceService.patientEmeDeviceList(orderDO.getPatient());
        emergencyOrderVO.setSecurityDevices(securityDevices);
        if(StringUtils.isNotBlank(patientDO.getIdcard())){
            emergencyOrderVO.setAge((IdCardUtil.getAgeForIdcard(patientDO.getIdcard()))+"");
        if (StringUtils.isNotBlank(patientDO.getIdcard())) {
            emergencyOrderVO.setAge((IdCardUtil.getAgeForIdcard(patientDO.getIdcard())) + "");
        }
        emergencyOrderVO.setLiveAddress(patientDO.getAddress());
        emergencyOrderVO.setOrderSource(orderDO.getOrderSource());
        if(orderDO.getStatus()==-2){//误报警
        if (orderDO.getStatus() == -2) {//误报警
            emergencyOrderVO.setUpdateUserName(orderDO.getUpdateUserName());
            emergencyOrderVO.setUpdateUser(orderDO.getUpdateUser());
            emergencyOrderVO.setUpdateTime(orderDO.getUpdateTime());
            emergencyOrderVO.setEmergencyCancel(orderDO.getEmergencyCancel());
        }
        emergencyOrderVO.setUpdateTime(orderDO.getUpdateTime());
        if (orderDO.getStatus()==-1){//已取消
            if (orderDO.getCancelTime()!=null){
        if (orderDO.getStatus() == -1) {//已取消
            if (orderDO.getCancelTime() != null) {
                emergencyOrderVO.setUpdateTime(orderDO.getCancelTime());
            }
            else {
            } else {
                emergencyOrderVO.setUpdateTime(orderDO.getUpdateTime());
            }
        }
        //小结
        Integer conclusionStatus = Integer.valueOf(orderDO.getConclusionStatus()==null?"0":(orderDO.getConclusionStatus()+""));
        if (conclusionStatus==2){
        Integer conclusionStatus = Integer.valueOf(orderDO.getConclusionStatus() == null ? "0" : (orderDO.getConclusionStatus() + ""));
        if (conclusionStatus == 2) {
            EmergencyWarnConclusionDO conclusionDO = emergencyWarnConclusionDao.findByOrderId(orderDO.getId());
            if (conclusionDO!=null){
                conclusionDO.setReasonName(dictService.fingByNameAndCode(ConstantUtil.DICT_EMERGENCY_REASON,String.valueOf(conclusionDO.getEmergencyReason())));
                conclusionDO.setTreatmentStatusName(dictService.fingByNameAndCode(ConstantUtil.DICT_EMERGENCY_TREATMENT_STATUS,String.valueOf(conclusionDO.getEmergencyTreatmentStatus())));
            if (conclusionDO != null) {
                conclusionDO.setReasonName(dictService.fingByNameAndCode(ConstantUtil.DICT_EMERGENCY_REASON, String.valueOf(conclusionDO.getEmergencyReason())));
                conclusionDO.setTreatmentStatusName(dictService.fingByNameAndCode(ConstantUtil.DICT_EMERGENCY_TREATMENT_STATUS, String.valueOf(conclusionDO.getEmergencyTreatmentStatus())));
                emergencyOrderVO.setEmergencyWarnConclusionDO(conclusionDO);
            }
        }
        //附加信息 电子围栏状态
        if (2==orderDO.getOrderSource()||8==orderDO.getOrderSource()){//手表/拐杖
            Map<String,Object> map = new HashMap<>();
            map.put("inFenceStatus",false);
            map.put("inFenceName","疑似超出安全区域");
        if (2 == orderDO.getOrderSource() || 8 == orderDO.getOrderSource()) {//手表/拐杖
            Map<String, Object> map = new HashMap<>();
            map.put("inFenceStatus", false);
            map.put("inFenceName", "疑似超出安全区域");
            emergencyOrderVO.setInformation(map);
        }
        if(4==orderDO.getOrderSource()){//监控器
            List<DevicePatientDevice> devicePatientDeviceDos = patientDeviceDao.findByUserAndCategoryCode(orderDO.getPatient(),"12");
            if (devicePatientDeviceDos.size()==0){
            }else {
        if (4 == orderDO.getOrderSource()) {//监控器
            List<DevicePatientDevice> devicePatientDeviceDos = patientDeviceDao.findByUserAndCategoryCode(orderDO.getPatient(), "12");
            if (devicePatientDeviceDos.size() == 0) {
            } else {
                try {
                    JSONObject monitorUrl = ysDeviceServicel.getDeviceLiveAddress(orderDO.getPatient(),devicePatientDeviceDos.get(0).getDeviceSn(),1,null);
                    Map<String,Object> map = new HashMap<>();
                    map.put("monitorInfoStatus",monitorUrl.getIntValue(ResponseContant.resultFlag));
                    map.put("patientAddress",devicePatientDeviceDos.get(0).getSosAddress());
                    if (monitorUrl.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail){
                        map.put("monitorInfo",monitorUrl.getString(ResponseContant.resultMsg));
                    }
                    else {
                        map.put("monitorInfo",monitorUrl.getJSONObject(ResponseContant.resultMsg));
                    JSONObject monitorUrl = ysDeviceServicel.getDeviceLiveAddress(orderDO.getPatient(), devicePatientDeviceDos.get(0).getDeviceSn(), 1, null);
                    Map<String, Object> map = new HashMap<>();
                    map.put("monitorInfoStatus", monitorUrl.getIntValue(ResponseContant.resultFlag));
                    map.put("patientAddress", devicePatientDeviceDos.get(0).getSosAddress());
                    if (monitorUrl.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                        map.put("monitorInfo", monitorUrl.getString(ResponseContant.resultMsg));
                    } else {
                        map.put("monitorInfo", monitorUrl.getJSONObject(ResponseContant.resultMsg));
                    }
                    emergencyOrderVO.setInformation(map);
                }catch (Exception e){
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        if (5==orderDO.getOrderSource()){//睡眠带工单
        if (5 == orderDO.getOrderSource()) {//睡眠带工单
            try {
                JSONObject monitorInfo = JSONObject.parseObject(orderDO.getWarnInfo());
                List<BaseSleepPlan> sleepPlans = sleepPlanDao.findByPatient(patientDO.getId());
                if(null==monitorInfo){
                if (null == monitorInfo) {
                    monitorInfo = new JSONObject();
                }
                if (sleepPlans.size()>0){
                if (sleepPlans.size() > 0) {
                    BaseSleepPlan sleepPlan = sleepPlans.get(0);
                    String endTime = DateUtil.getNextMin(sleepPlan.getGetUpTime(),-1);
                    monitorInfo.put("sleepPlan",true);
                    monitorInfo.put("getUpTime",sleepPlan.getGetUpTime());
                    monitorInfo.put("siestaTime",sleepPlan.getNapTime());
                    monitorInfo.put("nightRestTime",sleepPlan.getNightRestTime());
                    monitorInfo.put("nightRecordTime",sleepPlan.getNightRestTime()+"-隔日"+endTime);
                }else {
                    monitorInfo.put("sleepPlan",false);
                    String endTime = DateUtil.getNextMin(sleepPlan.getGetUpTime(), -1);
                    monitorInfo.put("sleepPlan", true);
                    monitorInfo.put("getUpTime", sleepPlan.getGetUpTime());
                    monitorInfo.put("siestaTime", sleepPlan.getNapTime());
                    monitorInfo.put("nightRestTime", sleepPlan.getNightRestTime());
                    monitorInfo.put("nightRecordTime", sleepPlan.getNightRestTime() + "-隔日" + endTime);
                } else {
                    monitorInfo.put("sleepPlan", false);
                }
                monitorInfo = patientSignTopicInfo(monitorInfo,orderDO.getPatient(),"preventFall",null,true);
                monitorInfo = patientSignTopicInfo(monitorInfo, orderDO.getPatient(), "preventFall", null, true);
                emergencyOrderVO.setInformation(monitorInfo);
            }catch (Exception e){
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        if (6==orderDO.getOrderSource()){//气感工单
        if (6 == orderDO.getOrderSource()) {//气感工单
            try {
                JSONObject monitorInfo = JSONObject.parseObject(orderDO.getWarnInfo());
                monitorInfo = patientSignTopicInfo(monitorInfo,orderDO.getPatient(),"preventFall",null,true);
                monitorInfo = patientSignTopicInfo(monitorInfo, orderDO.getPatient(), "preventFall", null, true);
                emergencyOrderVO.setInformation(monitorInfo);
            }catch (Exception e){
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        if (7==orderDO.getOrderSource()){//烟感工单
        if (7 == orderDO.getOrderSource()) {//烟感工单
            try {
                JSONObject monitorInfo = JSONObject.parseObject(orderDO.getWarnInfo());
                monitorInfo = patientSignTopicInfo(monitorInfo,orderDO.getPatient(),"preventFall",null,true);
                monitorInfo = patientSignTopicInfo(monitorInfo, orderDO.getPatient(), "preventFall", null, true);
                emergencyOrderVO.setInformation(monitorInfo);
            }catch (Exception e){
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        //通知对象
        List<Map<String,Object>> noticePersons = new ArrayList<>();
        JSONArray familyArr =  familyMemberService.getPatientMembers(orderDO.getPatient(),null,null,null,"3");
        for (int i=0;i<familyArr.size();i++){
        List<Map<String, Object>> noticePersons = new ArrayList<>();
        JSONArray familyArr = familyMemberService.getPatientMembers(orderDO.getPatient(), null, null, null, "3");
        for (int i = 0; i < familyArr.size(); i++) {
            String patientId = familyArr.getJSONObject(i).getString("id");
            BasePatientDO patientDO1 = basePatientDao.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());
            List<Map<String,Object>> arr = new ArrayList<>();
            Map<String,Object> tmp = new HashMap<>();
            tmp.put("name","系统预警");
            tmp.put("status",0);
            tmp.put("statusName","未读");
            SystemMessageDO messageDO = systemMessageDao.findByRelationCodeAndReceiver(orderDO.getId(),patientId);
            if (messageDO != null){
                if (StringUtils.isNotBlank(messageDO.getIsRead())){
                    tmp.put("status",Integer.parseInt(messageDO.getIsRead()));
                    if (Integer.parseInt(messageDO.getIsRead())==1){
                        tmp.put("statusName","已读");
            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());
            List<Map<String, Object>> arr = new ArrayList<>();
            Map<String, Object> tmp = new HashMap<>();
            tmp.put("name", "系统预警");
            tmp.put("status", 0);
            tmp.put("statusName", "未读");
            SystemMessageDO messageDO = systemMessageDao.findByRelationCodeAndReceiver(orderDO.getId(), patientId);
            if (messageDO != null) {
                if (StringUtils.isNotBlank(messageDO.getIsRead())) {
                    tmp.put("status", Integer.parseInt(messageDO.getIsRead()));
                    if (Integer.parseInt(messageDO.getIsRead()) == 1) {
                        tmp.put("statusName", "已读");
                    }
                }
            }
            arr.add(tmp);
            noticeObj.put("response",arr);
            noticeObj.put("response", arr);
            noticePersons.add(noticeObj);
        }
        //医生信息
        String sql ="SELECT i.code,r.team_code,pack.org_code,pack.org_name from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i,base_service_package pack  \n" +
        String sql = "SELECT i.code,r.team_code,pack.org_code,pack.org_name from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i,base_service_package pack  \n" +
                "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 \n" +
                "and  sr.patient  = '"+orderDO.getPatient()+"' and i.code='preventLost' ";
        List<Map<String,Object>> items = jdbcTemplate.queryForList(sql);
        if (items.size()>0){
            Map<String,Object> mapTmp = items.get(0);
            List<BaseDoctorDO> doctorDOS = baseTeamMemberDao.findAllMembersByLevel(mapTmp.get("team_code").toString(),2);
                "and  sr.patient  = '" + orderDO.getPatient() + "' and i.code='preventLost' ";
        List<Map<String, Object>> items = jdbcTemplate.queryForList(sql);
        if (items.size() > 0) {
            Map<String, Object> mapTmp = items.get(0);
            List<BaseDoctorDO> doctorDOS = baseTeamMemberDao.findAllMembersByLevel(mapTmp.get("team_code").toString(), 2);
            JSONArray otherDoctorDistance = new JSONArray();
            JSONObject otherDoctorDistanceObj = new JSONObject();
            for(BaseDoctorDO doc:doctorDOS){
                Map<String,Object> noticeObj = new HashMap<>();
                noticeObj.put("type","1");
                noticeObj.put("typeName","社工");
                noticeObj.put("id",doc.getId());
                noticeObj.put("name",doc.getName());
                noticeObj.put("photo",doc.getPhoto());
                noticeObj.put("mobile",doc.getMobile());
                List<Map<String,Object>> arr = new ArrayList<>();
                Map<String,Object> tmp = new HashMap<>();
                tmp.put("name","系统预警");
                tmp.put("status",0);
                tmp.put("statusName","未响应");
                if (emergencyWarnDoctorResponseDao.findByDoctorAndOrderId(doc.getId(),orderDO.getId())!=null){
                    tmp.put("status",1);
                    tmp.put("statusName","已响应");
            for (BaseDoctorDO doc : doctorDOS) {
                Map<String, Object> noticeObj = new HashMap<>();
                noticeObj.put("type", "1");
                noticeObj.put("typeName", "社工");
                noticeObj.put("id", doc.getId());
                noticeObj.put("name", doc.getName());
                noticeObj.put("photo", doc.getPhoto());
                noticeObj.put("mobile", doc.getMobile());
                List<Map<String, Object>> arr = new ArrayList<>();
                Map<String, Object> tmp = new HashMap<>();
                tmp.put("name", "系统预警");
                tmp.put("status", 0);
                tmp.put("statusName", "未响应");
                if (emergencyWarnDoctorResponseDao.findByDoctorAndOrderId(doc.getId(), orderDO.getId()) != null) {
                    tmp.put("status", 1);
                    tmp.put("statusName", "已响应");
                }
                arr.add(tmp);
                noticeObj.put("response",arr);
                noticeObj.put("response", arr);
                noticePersons.add(noticeObj);
                if (StringUtils.isBlank(doc.getDoctorLat()) || StringUtils.isBlank(doc.getDoctorLon())) {
                    List<BaseDoctorHospitalDO> doctorHospitalDOS = baseDoctorHospitalDao.findByDoctorCode(doc.getId());
                    if (doctorHospitalDOS.size()>0){
                    if (doctorHospitalDOS.size() > 0) {
                        BaseDoctorHospitalDO hospitalDO = doctorHospitalDOS.get(0);
                        BaseOrgDO orgDO = orgDao.findByCode(hospitalDO.getOrgCode());
                        doc.setDoctorLocateAddress(orgDO.getAddress());
                        doc.setDoctorLat(orgDO.getLatitude());
                        doc.setDoctorLon(orgDO.getLongitude());
                    }else {
                    } else {
                        continue;
                    }
                }
                //double distanceTmp = countDistance.getDistance(Double.parseDouble(orderDO.getServeLat()),Double.parseDouble(orderDO.getServeLon()),Double.parseDouble(doc.getDoctorLat()),Double.parseDouble(doc.getDoctorLon()));
                otherDoctorDistanceObj = new JSONObject();
                otherDoctorDistanceObj.put("doctor",doc.getId());
                otherDoctorDistanceObj.put("doctorName",doc.getName());
                otherDoctorDistanceObj.put("doctorAddress",doc.getDoctorLocateAddress());
                otherDoctorDistanceObj.put("doctorLon",doc.getDoctorLon());
                otherDoctorDistanceObj.put("doctorLat",doc.getDoctorLat());
                otherDoctorDistanceObj.put("distance",null);//两点距离
                otherDoctorDistanceObj.put("doctor", doc.getId());
                otherDoctorDistanceObj.put("doctorName", doc.getName());
                otherDoctorDistanceObj.put("doctorAddress", doc.getDoctorLocateAddress());
                otherDoctorDistanceObj.put("doctorLon", doc.getDoctorLon());
                otherDoctorDistanceObj.put("doctorLat", doc.getDoctorLat());
                otherDoctorDistanceObj.put("distance", null);//两点距离
                otherDoctorDistance.add(otherDoctorDistanceObj);
            }
            emergencyOrderVO.setOtherDoctorDistance(otherDoctorDistance.toJSONString());
        }
        emergencyOrderVO.setNoticePersons(noticePersons);
        JSONObject jsonObject = JSON.parseObject(JSON.toJSONStringWithDateFormat(emergencyOrderVO,"yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteMapNullValue));
        JSONObject jsonObject = JSON.parseObject(JSON.toJSONStringWithDateFormat(emergencyOrderVO, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteMapNullValue));
        //获取咨询
        ConsultDo consult = consultDao.queryByRelationCode(orderID);
        if (null != consult) {
            String sessionId = orderDO.getPatient() + "_" + consult.getId() + "_" + consult.getType();
            jsonObject.put("sessionId",sessionId);
            if (1==orderDO.getStatus()&&StringUtils.isNotBlank(doctor)){//查询未读数量
            jsonObject.put("sessionId", sessionId);
            if (1 == orderDO.getStatus() && StringUtils.isNotBlank(doctor)) {//查询未读数量
                try {
                    Integer count = imUtil.UserSessionsUnreadMessageCount(sessionId,doctor);
                    jsonObject.put("UnRead",count);
                }catch (Exception e){
                    jsonObject.put("sessionId",sessionId);
                    jsonObject.put("UnRead",0);
                    Integer count = imUtil.UserSessionsUnreadMessageCount(sessionId, doctor);
                    jsonObject.put("UnRead", count);
                } catch (Exception e) {
                    jsonObject.put("sessionId", sessionId);
                    jsonObject.put("UnRead", 0);
                }
            }
        }
        else {
            jsonObject.put("sessionId",null);
            jsonObject.put("UnRead",0);
        } else {
            jsonObject.put("sessionId", null);
            jsonObject.put("UnRead", 0);
        }
        result.put("resultFlag", 1);
        result.put("resultMsg",jsonObject);
        result.put("resultMsg", jsonObject);
        return result;
    }
    public JSONObject errorWarning(String orderId,Integer emergencyCancel,String doctor){
    public JSONObject errorWarning(String orderId, Integer emergencyCancel, String doctor) {
        JSONObject result = new JSONObject();
        SecurityMonitoringOrderDO orderDO = securityMonitoringOrderDao.findOne(orderId);
        if (orderDO==null){
        if (orderDO == null) {
            String failMsg = "工单不存在!";
            result.put("resultFlag", 0);
            result.put("resultMsg", failMsg);
@ -616,60 +622,60 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        orderDO.setUpdateUserName(doctorDO.getName());
        orderDO.setUpdateUser(doctorDO.getId());
        orderDO.setEmergencyCancel(emergencyCancel);
        if (!consultTeamService.finishConsult(orderDO.getId(),orderDO.getPatient(),doctor,2)){
        if (!consultTeamService.finishConsult(orderDO.getId(), orderDO.getPatient(), doctor, 2)) {
            String failMsg = "修改失败:咨询未能结束";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
            result.put(ResponseContant.resultMsg, failMsg);
            return result;
        }
        securityMonitoringOrderDao.save(orderDO);
        //完成工单向pc管理端发送消息
        JSONObject message = new JSONObject();
        String latLon = orderDO.getServeLat()+","+orderDO.getServeLon();
        message.put("latLon",latLon);
        message.put("session_id",orderDO.getSessionId());
        message.put("sender_name",orderDO.getPatientName());
        message.put("content_notice","完成安防服务工单");
        message.put("sender_code",orderDO.getPatient());
        message.put("OrderType",22);
        message.put("OrderStatus","finish");
        message.put("order_id",orderDO.getId());
        message.put("content_type",40);
        message.put("serverDesc",orderDO.getServeDesc());
        message.put("categoryCode","");
        message.put("orgType","");
        message.put("contactStatus","");
        message.put("residentialArea","");//结束时该字段无意义
        if (null!=orderDO.getDeviceSn()){
        String latLon = orderDO.getServeLat() + "," + orderDO.getServeLon();
        message.put("latLon", latLon);
        message.put("session_id", orderDO.getSessionId());
        message.put("sender_name", orderDO.getPatientName());
        message.put("content_notice", "完成安防服务工单");
        message.put("sender_code", orderDO.getPatient());
        message.put("OrderType", 22);
        message.put("OrderStatus", "finish");
        message.put("order_id", orderDO.getId());
        message.put("content_type", 40);
        message.put("serverDesc", orderDO.getServeDesc());
        message.put("categoryCode", "");
        message.put("orgType", "");
        message.put("contactStatus", "");
        message.put("residentialArea", "");//结束时该字段无意义
        if (null != orderDO.getDeviceSn()) {
            String device_sn = orderDO.getDeviceSn();
            if (org.apache.commons.lang.StringUtils.isNotBlank(device_sn)){
            if (org.apache.commons.lang.StringUtils.isNotBlank(device_sn)) {
                DeviceDetail deviceDetail = deviceDetailDao.findBySn(device_sn);
                if (null!=deviceDetail){
                    message.put("contactStatus",deviceDetail.getContactStatus());
                    message.put("categoryCode",deviceDetail.getCategoryCode());
                if (null != deviceDetail) {
                    message.put("contactStatus", deviceDetail.getContactStatus());
                    message.put("categoryCode", deviceDetail.getCategoryCode());
                }
            }
        }
        String orgCode = orderDO.getHospital();
        BaseOrgDO orgDO = orgDao.findByCode(orgCode);
        if (null!=orgDO){
            message.put("orgType",orgDO.getType());
        if (null != orgDO) {
            message.put("orgType", orgDO.getType());
        }
        imUtil.sendPcManageMessageToPc("cloudCare_pcManage",message.toString());
        result = getSecurityOrderDetail(orderId,null);
        imUtil.sendPcManageMessageToPc("cloudCare_pcManage", message.toString());
        result = getSecurityOrderDetail(orderId, null);
        return result;
    }
    public PageEnvelop getSecurityOrderList(String doctor, String serverDoctor, String patientName, String patient, String status,
                                            String svrDesc,String topicItem, Integer page, Integer pageSize,Integer dailyMonitor){
                                            String svrDesc, String topicItem, Integer page, Integer pageSize, Integer dailyMonitor) {
        JSONArray result = new JSONArray();
        //服务权限
        if(doctorServicePermissionsService.isPermission(doctor,10)==0){
            return PageEnvelop.getSuccessListWithPage("success",result,page,pageSize,0L);
        if (doctorServicePermissionsService.isPermission(doctor, 10) == 0) {
            return PageEnvelop.getSuccessListWithPage("success", result, page, pageSize, 0L);
        }
        String sqlCount = "select count(ord.id) from base_security_monitoring_order ord INNER JOIN base_patient p on p.id = ord.patient " +
@ -679,167 +685,178 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                "ord.doctor_name,ord.update_user,ord.update_user_name,ord.patient_phone,ord.conclusion_status from base_security_monitoring_order ord INNER JOIN base_patient p on p.id = ord.patient " +
                "where 1=1 ";
        if (1==dailyMonitor){//医生日常监护居民安防工单列表查询
            if (StringUtils.isBlank(topicItem)||StringUtils.isBlank(doctor)){
        if (1 == dailyMonitor) {//医生日常监护居民安防工单列表查询
            if (StringUtils.isBlank(topicItem) || StringUtils.isBlank(doctor)) {
                return new PageEnvelop();
            }
            String categoryCode ="";
            switch (topicItem){
            String categoryCode = "";
            switch (topicItem) {
                case "preventLost":
                    categoryCode="'4'";
                    categoryCode = "'4'";
                    break;
                case "preventFall":
                    categoryCode="'12'";
                    categoryCode = "'12'";
                    break;
                case "preventFire":
                    categoryCode="'15'";
                    categoryCode = "'15'";
                    break;
                case "preventGasLeakage":
                    categoryCode="'14'";
                    categoryCode = "'14'";
                    break;
                case "preventOutOfBed":
                    categoryCode="'13'";
                    categoryCode = "'13'";
                    break;
            }
            if (StringUtils.isNotBlank(doctor)){//日常监护医生必传
            if (StringUtils.isNotBlank(doctor)) {//日常监护医生必传
                fliter += " and EXISTS( SELECT DISTINCT p.id,p.name,p.residential_area residentialArea,p.photo,p.idcard,p.mobile, " +
                        " p.openid,p.sex,p.pad_imei padImei " +
                        " from base_patient p , base_service_package_sign_record sr,base_service_package_record r,base_team_member m  " +
                        " WHERE p.id = sr.patient and sr.status=1 and m.team_code = r.team_code and sr.id=r.sign_id  " +
                        " and m.doctor_code = '"+doctor+"' and m.del = '1' ) ";
                        " and m.doctor_code = '" + doctor + "' and m.del = '1' ) ";
                fliter +=" and EXISTS (select 1 from wlyy_patient_device pd INNER JOIN dm_device dd on pd.device_id = dd.id  " +
                        " where  pd.user = p.id and pd.del=0 and pd.category_code in ("+categoryCode+") and FIND_IN_SET('"+topicItem+"',dd.service_topic)) ";
                fliter += " and EXISTS (select 1 from wlyy_patient_device pd INNER JOIN dm_device dd on pd.device_id = dd.id  " +
                        " where  pd.user = p.id and pd.del=0 and pd.category_code in (" + categoryCode + ") and FIND_IN_SET('" + topicItem + "',dd.service_topic)) ";
                if ("preventLost".equals(topicItem)){//有绑定围栏的居民
                if ("preventLost".equals(topicItem)) {//有绑定围栏的居民
                    fliter += " and EXISTS (select 1 from wlyy_patient_safe_area sf where sf.patient = p.id and sf.del=1 and sf.manage_status=1) ";
                }
            }
        }else {
            if (StringUtils.isNotBlank(doctor)){
                fliter+=" and  EXISTS ( SELECT 1 from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i ," +
        } else {
            if (StringUtils.isNotBlank(doctor)) {
                fliter += " and  EXISTS ( SELECT 1 from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i ," +
                        "base_team_member m " +
                        "where ord.patient = CONVERT(sr.patient USING utf8) and  sr.id = r.sign_id and sr.status=1 and " +
                        " r.service_package_id = i.service_package_id and  m.team_code = r.team_code  and i.del = 1 and sr.`status`=1  and m.doctor_code = '"+doctor+"' and m.del = '1') ";
                        " r.service_package_id = i.service_package_id and  m.team_code = r.team_code  and i.del = 1 and sr.`status`=1  and m.doctor_code = '" + doctor + "' and m.del = '1') ";
            }
        }
        if (StringUtils.isNotBlank(serverDoctor)){
            fliter +=" and ord.doctor = '"+serverDoctor+"' ";
        if (StringUtils.isNotBlank(serverDoctor)) {
            fliter += " and ord.doctor = '" + serverDoctor + "' ";
        }
        if (StringUtils.isNotBlank(patientName)){
            fliter+=" and (ord.patient_name like '%"+patientName+"%' or p.idcard='"+patientName+"')  ";
        if (StringUtils.isNotBlank(patientName)) {
            fliter += " and (ord.patient_name like '%" + patientName + "%' or p.idcard='" + patientName + "')  ";
        }
        if (StringUtils.isNotBlank(patient)){
            fliter+=" and ord.patient='"+patient+"' ";
        if (StringUtils.isNotBlank(patient)) {
            fliter += " and ord.patient='" + patient + "' ";
        }
        if (StringUtils.isNotBlank(status)){
            fliter+=" and ord.status='"+Integer.parseInt(status)+"' ";
        if (StringUtils.isNotBlank(status)) {
            fliter += " and ord.status='" + Integer.parseInt(status) + "' ";
        }
        if (StringUtils.isNotBlank(svrDesc)){
            fliter+=" and ord.serve_desc='"+svrDesc+"' ";
        if (StringUtils.isNotBlank(svrDesc)) {
            fliter += " and ord.serve_desc='" + svrDesc + "' ";
        }
        if (StringUtils.isNotBlank(topicItem)){
            fliter+=" and ord.topic_item='"+topicItem+"' ";
        if (StringUtils.isNotBlank(topicItem)) {
            fliter += " and ord.topic_item='" + topicItem + "' ";
        }
        Long count = jdbcTemplate.queryForObject(sqlCount+fliter,Long.class);
        fliter+=" order by ord.create_time desc limit " + (page*pageSize) + "," + pageSize;
        List<Map<String,Object>> sqlResult = jdbcTemplate.queryForList(sql+fliter);
        Long count = jdbcTemplate.queryForObject(sqlCount + fliter, Long.class);
        fliter += " order by ord.create_time desc limit " + (page * pageSize) + "," + pageSize;
        List<Map<String, Object>> sqlResult = jdbcTemplate.queryForList(sql + fliter);
        for (Map<String,Object>one:sqlResult){
        for (Map<String, Object> one : sqlResult) {
            JSONObject tmp = new JSONObject();
            tmp.put("patientCode",one.get("patientCode"));
            tmp.put("patientName",one.get("name"));
            tmp.put("sex",one.get("sex"));
            tmp.put("photo",one.get("photo"));
            tmp.put("idcard",one.get("idcard"));
            tmp.put("number",one.get("number"));
            tmp.put("id",one.get("orderId"));
            tmp.put("serveDesc",one.get("serve_desc"));
            Date date = (Date)one.get("create_time");
            tmp.put("patientCode", one.get("patientCode"));
            tmp.put("patientName", one.get("name"));
            tmp.put("sex", one.get("sex"));
            tmp.put("photo", one.get("photo"));
            tmp.put("idcard", one.get("idcard"));
            tmp.put("number", one.get("number"));
            tmp.put("id", one.get("orderId"));
            tmp.put("serveDesc", one.get("serve_desc"));
            Date date = (Date) one.get("create_time");
            tmp.put("createTime", DateUtil.dateToStrLong(date));
            tmp.put("status",one.get("status"));
            tmp.put("doctor",one.get("doctor"));
            tmp.put("doctorName",one.get("doctor_name"));
            tmp.put("patientPhone",one.get("patient_phone"));
            tmp.put("conclusionStatus",one.get("conclusion_status"));
            Integer conclusionStatus = Integer.valueOf(one.get("conclusion_status")==null?"0":(one.get("conclusion_status")+""));
            tmp.put("status", one.get("status"));
            tmp.put("doctor", one.get("doctor"));
            tmp.put("doctorName", one.get("doctor_name"));
            tmp.put("patientPhone", one.get("patient_phone"));
            tmp.put("conclusionStatus", one.get("conclusion_status"));
            Integer conclusionStatus = Integer.valueOf(one.get("conclusion_status") == null ? "0" : (one.get("conclusion_status") + ""));
            String conclusionStatusName = "";
            switch (conclusionStatus){
                case 1:conclusionStatusName="待补录";break;
                case 2:conclusionStatusName="已登记";break;
            switch (conclusionStatus) {
                case 1:
                    conclusionStatusName = "待补录";
                    break;
                case 2:
                    conclusionStatusName = "已登记";
                    break;
            }
            tmp.put("conclusionStatusName",conclusionStatusName);
            Integer statustemp = Integer.valueOf(one.get("status")+"");
            if (-2==statustemp||-1==statustemp){
                tmp.put("doctor",one.get("update_user"));
                tmp.put("doctorName",one.get("update_user_name"));
            tmp.put("conclusionStatusName", conclusionStatusName);
            Integer statustemp = Integer.valueOf(one.get("status") + "");
            if (-2 == statustemp || -1 == statustemp) {
                tmp.put("doctor", one.get("update_user"));
                tmp.put("doctorName", one.get("update_user_name"));
            }
            String statusName = "";
            switch (statustemp){
                case -2:statusName="误警报";break;
                case -1:statusName="已取消";break;
                case 0:statusName="已完成";break;
                case 1:statusName="预警中";break;
            switch (statustemp) {
                case -2:
                    statusName = "误警报";
                    break;
                case -1:
                    statusName = "已取消";
                    break;
                case 0:
                    statusName = "已完成";
                    break;
                case 1:
                    statusName = "预警中";
                    break;
            }
            tmp.put("statusName",statusName);
            Integer age  = IdCardUtil.getAgeForIdcard(tmp.getString("idcard"));
            tmp.put("age",age);
            tmp.put("statusName", statusName);
            Integer age = IdCardUtil.getAgeForIdcard(tmp.getString("idcard"));
            tmp.put("age", age);
            //患者设备
            List<DevicePatientDevice> devices = patientDeviceDao.findAllByUser(tmp.get("patientCode").toString());
            if (devices.size()>0){
                tmp.put("deviceFlag","1");
            }
            else {
                tmp.put("deviceFlag","0");
            if (devices.size() > 0) {
                tmp.put("deviceFlag", "1");
            } else {
                tmp.put("deviceFlag", "0");
            }
            result.add(tmp);
        }
        return PageEnvelop.getSuccessListWithPage("success",result,page,pageSize,count);
        return PageEnvelop.getSuccessListWithPage("success", result, page, pageSize, count);
    }
    public JSONObject getSecurityTab(String patient,String doctor,String status,String svrDesc,String topicItem,Integer dailyMonitor){
    public JSONObject getSecurityTab(String patient, String doctor, String status, String svrDesc, String topicItem, Integer dailyMonitor) {
        JSONObject result = new JSONObject();
        result.put("status_-2",0);//误报警
        result.put("status_-1",0);//已取消
        result.put("status_0",0);//已完成
        result.put("status_1",0);//预警中
        result.put("status_all",0);//
        result.put("svr_all",0);//
        result.put("status_-2", 0);//误报警
        result.put("status_-1", 0);//已取消
        result.put("status_0", 0);//已完成
        result.put("status_1", 0);//预警中
        result.put("status_all", 0);//
        result.put("svr_all", 0);//
        Map<String,String> serverTmp = new HashMap<>();
        Map<String, String> serverTmp = new HashMap<>();
        String sql = " select py_code,dict_value from wlyy_hospital_sys_dict where dict_name='security_server_dict' ";
        List<Map<String,Object>> servers = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> server:servers){
            result.put("svr_"+server.get("py_code").toString(),0);
            serverTmp.put(server.get("dict_value").toString(),server.get("py_code").toString());
        List<Map<String, Object>> servers = jdbcTemplate.queryForList(sql);
        for (Map<String, Object> server : servers) {
            result.put("svr_" + server.get("py_code").toString(), 0);
            serverTmp.put(server.get("dict_value").toString(), server.get("py_code").toString());
        }
        sql = "select ord.status,ord.serve_desc,count(ord.id) count from base_security_monitoring_order ord INNER JOIN base_patient p on p.id = ord.patient " +
                "where 1=1 ";
        String fliter = "  ";
        if (1==dailyMonitor){//医生日常监护居民安防工单列表查询
            if (StringUtils.isBlank(topicItem)||StringUtils.isBlank(doctor)){
        if (1 == dailyMonitor) {//医生日常监护居民安防工单列表查询
            if (StringUtils.isBlank(topicItem) || StringUtils.isBlank(doctor)) {
                return result;
            }
            String categoryCode ="";
            switch (topicItem){
            String categoryCode = "";
            switch (topicItem) {
                case "preventLost":
                    categoryCode="'4'";
                    categoryCode = "'4'";
                    break;
                case "preventFall":
                    categoryCode="'12'";
                    categoryCode = "'12'";
                    break;
                case "preventFire":
                    categoryCode="'15'";
                    categoryCode = "'15'";
                    break;
                case "preventGasLeakage":
                    categoryCode="'14'";
                    categoryCode = "'14'";
                    break;
                case "preventOutOfBed":
                    categoryCode="'13'";
                    categoryCode = "'13'";
                    break;
            }
            if (StringUtils.isNotBlank(doctor)) {//日常监护医生必传
@ -856,59 +873,58 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                    fliter += " and EXISTS (select 1 from wlyy_patient_safe_area sf where sf.patient = p.id and sf.del=1 and sf.manage_status=1) ";
                }
            }
        }else {
            if (StringUtils.isNotBlank(doctor)){
                fliter+=" and  EXISTS ( SELECT 1 from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i ," +
        } else {
            if (StringUtils.isNotBlank(doctor)) {
                fliter += " and  EXISTS ( SELECT 1 from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i ," +
                        "base_team_member m " +
                        "where ord.patient = CONVERT(sr.patient USING utf8) and  sr.id = r.sign_id and sr.status=1 and " +
                        " r.service_package_id = i.service_package_id and  m.team_code = r.team_code  and i.del = 1 and sr.`status`=1  and m.doctor_code = '"+doctor+"' and m.del = '1') ";
                        " r.service_package_id = i.service_package_id and  m.team_code = r.team_code  and i.del = 1 and sr.`status`=1  and m.doctor_code = '" + doctor + "' and m.del = '1') ";
            }
        }
        if (StringUtils.isNotBlank(patient)){
            fliter+=" and ord.patient='"+patient+"' ";
        if (StringUtils.isNotBlank(patient)) {
            fliter += " and ord.patient='" + patient + "' ";
        }
        if (StringUtils.isNotBlank(status)){
            fliter+=" and ord.status='"+Integer.parseInt(status)+"' ";
        if (StringUtils.isNotBlank(status)) {
            fliter += " and ord.status='" + Integer.parseInt(status) + "' ";
        }
        if (StringUtils.isNotBlank(svrDesc)){
            fliter+=" and ord.serve_desc='"+svrDesc+"' ";
        if (StringUtils.isNotBlank(svrDesc)) {
            fliter += " and ord.serve_desc='" + svrDesc + "' ";
        }
        if (StringUtils.isNotBlank(topicItem)){
            fliter+=" and ord.topic_item='"+topicItem+"' ";
        if (StringUtils.isNotBlank(topicItem)) {
            fliter += " and ord.topic_item='" + topicItem + "' ";
        }
        fliter+=" group by ord.status,ord.serve_desc ";
        List<Map<String,Object>> sqlResult = jdbcTemplate.queryForList(sql+fliter);
        fliter += " group by ord.status,ord.serve_desc ";
        List<Map<String, Object>> sqlResult = jdbcTemplate.queryForList(sql + fliter);
        String pyCode = "";
        for (Map<String,Object> map:sqlResult){
            result.put("status_"+map.get("status"),result.getInteger("status_"+map.get("status"))+Integer.parseInt(map.get("count").toString()));
            pyCode =  serverTmp.get(map.get("serve_desc"))==null?null:serverTmp.get(map.get("serve_desc")).toString();
            if (StringUtils.isNotBlank(pyCode)){
                result.put("svr_"+pyCode,result.getInteger("svr_"+pyCode)+Integer.parseInt(map.get("count").toString()));
                result.put("status_all",result.getInteger("status_all")+Integer.parseInt(map.get("count").toString()));
                result.put("svr_all",result.getInteger("svr_all")+Integer.parseInt(map.get("count").toString()));
        for (Map<String, Object> map : sqlResult) {
            result.put("status_" + map.get("status"), result.getInteger("status_" + map.get("status")) + Integer.parseInt(map.get("count").toString()));
            pyCode = serverTmp.get(map.get("serve_desc")) == null ? null : serverTmp.get(map.get("serve_desc")).toString();
            if (StringUtils.isNotBlank(pyCode)) {
                result.put("svr_" + pyCode, result.getInteger("svr_" + pyCode) + Integer.parseInt(map.get("count").toString()));
                result.put("status_all", result.getInteger("status_all") + Integer.parseInt(map.get("count").toString()));
                result.put("svr_all", result.getInteger("svr_all") + Integer.parseInt(map.get("count").toString()));
            }
        }
        return result;
    }
    public List<Map<String,Object>> getSecurityOrderUnCompleteList(String doctor){
        List<Map<String,Object>> result = new ArrayList<>();
    public List<Map<String, Object>> getSecurityOrderUnCompleteList(String doctor) {
        List<Map<String, Object>> result = new ArrayList<>();
        String sql = " select p.id patientCode,p.name,p.sex,p.idcard,p.photo,ord.id orderId,ord.number,ord.serve_desc,DATE_FORMAT(ord.create_time,'%Y-%m-%d %H:%i:%S') create_time,ord.`status`,ord.doctor," +
                "ord.doctor_name,ord.patient_phone,ord.conclusion_status from base_security_monitoring_order ord INNER JOIN base_patient p on p.id = ord.patient " +
                "where ord.status <>-1 and ord.status<>0  ";
        sql+= "and  EXISTS ( SELECT 1 from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i ," +
        sql += "and  EXISTS ( SELECT 1 from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i ," +
                "base_team_member m " +
                "where ord.patient = CONVERT(sr.patient USING utf8) and  sr.id = r.sign_id and sr.status=1 and " +
                " r.service_package_id = i.service_package_id and  m.team_code = r.team_code  and i.del = 1 and sr.`status`=1  and i.code='preventLost' and m.doctor_code = '"+doctor+"' and m.del = '1') ";
        sql +=" order by ord.create_time asc ";
        result= jdbcTemplate.queryForList(sql);
        for (Map<String,Object> map:result){
            if (map.get("idcard")==null){
                map.put("age",null);
            }
            else{
                Integer age  = IdCardUtil.getAgeForIdcard(map.get("idcard").toString());
                map.put("age",age);
                " r.service_package_id = i.service_package_id and  m.team_code = r.team_code  and i.del = 1 and sr.`status`=1  and i.code='preventLost' and m.doctor_code = '" + doctor + "' and m.del = '1') ";
        sql += " order by ord.create_time asc ";
        result = jdbcTemplate.queryForList(sql);
        for (Map<String, Object> map : result) {
            if (map.get("idcard") == null) {
                map.put("age", null);
            } else {
                Integer age = IdCardUtil.getAgeForIdcard(map.get("idcard").toString());
                map.put("age", age);
            }
        }
@ -916,9 +932,9 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
    }
    /**
     * 系统更新医生工单状态
     *
     * @param doctor
     * @param dispatchOrderStatus
     */
@ -940,7 +956,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        doctorStatusDao.save(doctorSwitch);
    }
    public SecurityMonitoringOrderDO acceptOrder1(String orderId,String doctor) throws Exception{
    public SecurityMonitoringOrderDO acceptOrder1(String orderId, String doctor) throws Exception {
        SecurityMonitoringOrderDO doorServiceOrder = securityMonitoringOrderDao.findOne(orderId);
        if (null == doorServiceOrder) {
            throw new Exception("该工单不存在");
@ -951,9 +967,9 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        securityMonitoringOrderDao.save(doorServiceOrder);
        systemMessageDao.orderMessageDelByType(doorServiceOrder.getDoctor(),orderId,"607");
        systemMessageDao.orderMessageDelByType(doorServiceOrder.getDoctor(), orderId, "607");
        if(doorServiceOrder.getType() == null|| doorServiceOrder.getType() != 3) {
        if (doorServiceOrder.getType() == null || doorServiceOrder.getType() != 3) {
//            //获取咨询
//            ConsultTeam consultTeam = consultTeamDao.queryByRelationCode(orderId);
@ -979,10 +995,11 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
    /**
     * 接单
     *
     * @param orderId
     */
    @Transactional(rollbackFor = Exception.class)
    public JSONObject acceptOrder(String orderId,String doctor) throws Exception {
    public JSONObject acceptOrder(String orderId, String doctor) throws Exception {
//        JSONObject result = new JSONObject();
//        SecurityMonitoringOrderDO doorServiceOrderDO = securityMonitoringOrderDao.findOne(orderId);
//        if(null == doorServiceOrderDO){
@ -1065,21 +1082,22 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        //  待接单消息设为已操作, 434 医生接单-- 王五接受了服务工单12345678
//        messageUtil.createMessage("医生接单","634",doorServiceOrder.getPatient(),doorServiceOrder.getPatientName(),
//                doorServiceOrder.getId(), doorServiceOrder.getDoctor(),doorServiceOrder.getDoctorName() ,null, doorServiceOrder.getDoctorName() + "接受了服务工单"+ doorServiceOrder.getNumber());
        return getSecurityOrderDetail(orderId,null);
        return getSecurityOrderDetail(orderId, null);
    }
    /**
     * 取消工单
     *
     * @param orderId
     * @param reason
     * @return
     */
    public JSONObject cancelOrder(String orderId,int type,String reason,String doctor){
    public JSONObject cancelOrder(String orderId, int type, String reason, String doctor) {
        JSONObject result = new JSONObject();
        SecurityMonitoringOrderDO orderDO = securityMonitoringOrderDao.findOne(orderId);
        if(null == orderDO){
            String failMsg = "【取消工单】该工单不存在" ;
        if (null == orderDO) {
            String failMsg = "【取消工单】该工单不存在";
            result.put("resultFlag", 0);
            result.put("resultMsg", failMsg);
            logger.error(failMsg);
@ -1087,24 +1105,24 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        }
        //接单前可取消工单
        BaseDoctorDO doctorDO = baseDoctorDao.findById(doctor);
        if (doctorDO==null){
        if (doctorDO == null) {
            String failMsg = "【取消工单】操作医生不存在";
            result.put("resultFlag", 0);
            result.put("resultMsg", failMsg);
            logger.error(failMsg);
            return result;
        }
        if(orderDO.getStatus() == SecurityMonitoringOrderDO.Status.complete.getType()){
        if (orderDO.getStatus() == SecurityMonitoringOrderDO.Status.complete.getType()) {
            String failMsg = "当前工单已结束";
            result.put("resultFlag", 0);
            result.put("resultMsg", failMsg);
            logger.error(failMsg);
            return result;
        }
        if (!consultTeamService.finishConsult(orderDO.getId(),orderDO.getPatient(),orderDO.getPatient(),1)){
        if (!consultTeamService.finishConsult(orderDO.getId(), orderDO.getPatient(), orderDO.getPatient(), 1)) {
            String failMsg = "咨询结束失败 无法取消工单";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
            result.put(ResponseContant.resultMsg, failMsg);
            return result;
        }
@ -1116,8 +1134,8 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        orderDO.setStatus(SecurityMonitoringOrderDO.Status.cancel.getType());
        this.save(orderDO);
       if(type == SecurityMonitoringOrderDO.CancelType.patient.getType()){                   //居民取消,消息列表也应该不显示
           messageUtil.updateSecurityMonitoringOrderMessage(orderDO,new String[]{"602","603"},"patientCancel");
        if (type == SecurityMonitoringOrderDO.CancelType.patient.getType()) {                   //居民取消,消息列表也应该不显示
            messageUtil.updateSecurityMonitoringOrderMessage(orderDO, new String[]{"602", "603"}, "patientCancel");
        }
        //保存取消记录
@ -1131,40 +1149,40 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        //完成工单向pc管理端发送消息
        JSONObject message = new JSONObject();
        String latLon = orderDO.getServeLat()+","+orderDO.getServeLon();
        message.put("latLon",latLon);
        message.put("session_id",orderDO.getSessionId());
        message.put("sender_name",orderDO.getPatientName());
        message.put("content_notice","完成安防服务工单");
        message.put("sender_code",orderDO.getPatient());
        message.put("OrderType",22);
        message.put("OrderStatus","finish");
        message.put("order_id",orderDO.getId());
        message.put("content_type",40);
        message.put("serverDesc",orderDO.getServeDesc());
        message.put("categoryCode","");
        message.put("orgType","");
        message.put("contactStatus","");
        message.put("residentialArea","");
        if (null!=orderDO.getDeviceSn()){
        String latLon = orderDO.getServeLat() + "," + orderDO.getServeLon();
        message.put("latLon", latLon);
        message.put("session_id", orderDO.getSessionId());
        message.put("sender_name", orderDO.getPatientName());
        message.put("content_notice", "完成安防服务工单");
        message.put("sender_code", orderDO.getPatient());
        message.put("OrderType", 22);
        message.put("OrderStatus", "finish");
        message.put("order_id", orderDO.getId());
        message.put("content_type", 40);
        message.put("serverDesc", orderDO.getServeDesc());
        message.put("categoryCode", "");
        message.put("orgType", "");
        message.put("contactStatus", "");
        message.put("residentialArea", "");
        if (null != orderDO.getDeviceSn()) {
            String device_sn = orderDO.getDeviceSn();
            if (org.apache.commons.lang.StringUtils.isNotBlank(device_sn)){
            if (org.apache.commons.lang.StringUtils.isNotBlank(device_sn)) {
                DeviceDetail deviceDetail = deviceDetailDao.findBySn(device_sn);
                if (null!=deviceDetail){
                    message.put("contactStatus",deviceDetail.getContactStatus());
                    message.put("categoryCode",deviceDetail.getCategoryCode());
                if (null != deviceDetail) {
                    message.put("contactStatus", deviceDetail.getContactStatus());
                    message.put("categoryCode", deviceDetail.getCategoryCode());
                }
            }
        }
        String orgCode = orderDO.getHospital();
        BaseOrgDO orgDO = orgDao.findByCode(orgCode);
        if (null!=orgDO){
            message.put("orgType",orgDO.getType());
        if (null != orgDO) {
            message.put("orgType", orgDO.getType());
        }
        imUtil.sendPcManageMessageToPc("cloudCare_pcManage",message.toString());
        imUtil.sendPcManageMessageToPc("cloudCare_pcManage", message.toString());
//        Consult consult = consultDao.queryByRelationCode(orderId);
//        // 发送微信模板消息,通知居民工单已取消(smyyyqx-上门预约已取消)
//
@ -1184,12 +1202,13 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
//        }
//        pushMsgTask.putWxMsg(tokenUtils.getAccessToken(), 30, patient.getOpenid(), patient.getName(), json);
        result = getSecurityOrderDetail(orderId,null);
        result = getSecurityOrderDetail(orderId, null);
        return result;
    }
    /**
     * 签到保存
     *
     * @param orderId
     * @param signTime
     * @param signWay
@ -1198,7 +1217,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
     * @return
     */
    public JSONObject signIn(String orderId, String signTime, Integer signWay, String signLocation,
                                         String signImg, String twoDimensionalCode,String doctorId) throws Exception {
                             String signImg, String twoDimensionalCode, String doctorId) throws Exception {
       /* SecurityMonitoringOrderDO doorServiceOrder = securityMonitoringOrderDao.findOne(orderId);
        doorServiceOrder.setDoctorSignTime(DateUtil.strToDate(signTime));
        doorServiceOrder.setDoctorSignWay(signWay);
@ -1226,11 +1245,12 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            return getSecurityOrderDetail(orderId);
        }*/
        return getSecurityOrderDetail(orderId,null);
        return getSecurityOrderDetail(orderId, null);
    }
    /**
     * 根据接单医生code获取最近一次服务orderId
     *
     * @param doctor
     * @return
     */
@ -1242,31 +1262,32 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
    /**
     * 编辑保存服务工单小结
     *
     * @return
     * @throws Exception
     */
    public JSONObject updateDoorConclusion(Integer emergency_reason,Integer treatment_status,String orderId,String conclusion,String conclusion_img,String doctor) throws Exception {
    public JSONObject updateDoorConclusion(Integer emergency_reason, Integer treatment_status, String orderId, String conclusion, String conclusion_img, String doctor) throws Exception {
        JSONObject result = new JSONObject();
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
        SecurityMonitoringOrderDO one = securityMonitoringOrderDao.findOne(orderId);
        if (StringUtils.isNotBlank(doctor)){
        if (StringUtils.isNotBlank(doctor)) {
            BaseDoctorDO doctorDO = baseDoctorDao.findById(doctor);
            if (doctorDO!=null){
            if (doctorDO != null) {
                one.setDoctor(doctor);
                one.setDoctorName(doctorDO.getName());
                one.setUpdateUser(doctor);
                one.setUpdateUserName(doctorDO.getName());
            }
        }
        if (one==null){
            String failMsg = "工单不存在" ;
        if (one == null) {
            String failMsg = "工单不存在";
            result.put("resultFlag", 0);
            result.put("resultMsg", failMsg);
            return result;
        }
        EmergencyWarnConclusionDO doorConclusion =  emergencyWarnConclusionDao.findByOrderId(orderId);
        if (doorConclusion==null){
        EmergencyWarnConclusionDO doorConclusion = emergencyWarnConclusionDao.findByOrderId(orderId);
        if (doorConclusion == null) {
            doorConclusion = new EmergencyWarnConclusionDO();
            doorConclusion.setOrderId(orderId);
            doorConclusion.setPatient(one.getPatient());
@ -1289,7 +1310,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            doorConclusion.setCreateUser(one.getDoctor());
            doorConclusion.setCreateUserName(null != doctorVO ? doctorVO.getName() : null);
        }
        if (!consultTeamService.finishConsult(one.getId(),one.getPatient(),one.getPatient(),1)){
        if (!consultTeamService.finishConsult(one.getId(), one.getPatient(), one.getPatient(), 1)) {
            String failMsg = "咨询结束失败 无法结束工单";
            throw new Exception(failMsg);
        }
@ -1300,66 +1321,67 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        //完成工单向pc管理端发送消息
        JSONObject message = new JSONObject();
        String latLon = one.getServeLat()+","+one.getServeLon();
        message.put("latLon",latLon);
        message.put("session_id",one.getSessionId());
        message.put("sender_name",one.getPatientName());
        message.put("content_notice","完成安防服务工单");
        message.put("sender_code",one.getPatient());
        message.put("OrderType",22);
        message.put("OrderStatus","finish");
        message.put("order_id",one.getId());
        message.put("content_type",40);
        message.put("serverDesc",one.getServeDesc());
        message.put("categoryCode","");
        message.put("orgType","");
        message.put("contactStatus","");
        message.put("residentialArea","");
        if (null!=one.getDeviceSn()){
        String latLon = one.getServeLat() + "," + one.getServeLon();
        message.put("latLon", latLon);
        message.put("session_id", one.getSessionId());
        message.put("sender_name", one.getPatientName());
        message.put("content_notice", "完成安防服务工单");
        message.put("sender_code", one.getPatient());
        message.put("OrderType", 22);
        message.put("OrderStatus", "finish");
        message.put("order_id", one.getId());
        message.put("content_type", 40);
        message.put("serverDesc", one.getServeDesc());
        message.put("categoryCode", "");
        message.put("orgType", "");
        message.put("contactStatus", "");
        message.put("residentialArea", "");
        if (null != one.getDeviceSn()) {
            String device_sn = one.getDeviceSn();
            if (org.apache.commons.lang.StringUtils.isNotBlank(device_sn)){
            if (org.apache.commons.lang.StringUtils.isNotBlank(device_sn)) {
                DeviceDetail deviceDetail = deviceDetailDao.findBySn(device_sn);
                if (null!=deviceDetail){
                    message.put("contactStatus",deviceDetail.getContactStatus());
                    message.put("categoryCode",deviceDetail.getCategoryCode());
                if (null != deviceDetail) {
                    message.put("contactStatus", deviceDetail.getContactStatus());
                    message.put("categoryCode", deviceDetail.getCategoryCode());
                }
            }
        }
        String orgCode = one.getHospital();
        BaseOrgDO orgDO = orgDao.findByCode(orgCode);
        if (null!=orgDO){
            message.put("orgType",orgDO.getType());
        if (null != orgDO) {
            message.put("orgType", orgDO.getType());
        }
        imUtil.sendPcManageMessageToPc("cloudCare_pcManage",message.toString());
        return getSecurityOrderDetail(orderId,null);
        imUtil.sendPcManageMessageToPc("cloudCare_pcManage", message.toString());
        return getSecurityOrderDetail(orderId, null);
    }
    /**
     * 跳过登记服务小结
     *
     * @param orderId
     */
    public JSONObject cancelConclusion(String orderId,String doctor) throws Exception {
    public JSONObject cancelConclusion(String orderId, String doctor) throws Exception {
        JSONObject result = new JSONObject();
        SecurityMonitoringOrderDO one = securityMonitoringOrderDao.findOne(orderId);
        if (StringUtils.isNotBlank(doctor)){
        if (StringUtils.isNotBlank(doctor)) {
            BaseDoctorDO doctorDO = baseDoctorDao.findById(doctor);
            if (doctorDO!=null){
            if (doctorDO != null) {
                one.setDoctor(doctor);
                one.setDoctorName(doctorDO.getName());
                one.setUpdateUser(doctor);
                one.setUpdateUserName(doctorDO.getName());
            }
        }
        if (one==null){
            String failMsg = "工单不存在" ;
        if (one == null) {
            String failMsg = "工单不存在";
            result.put("resultFlag", 0);
            result.put("resultMsg", failMsg);
            return result;
        }
        if (!consultTeamService.finishConsult(one.getId(),one.getPatient(),one.getPatient(),1)){
        if (!consultTeamService.finishConsult(one.getId(), one.getPatient(), one.getPatient(), 1)) {
            String failMsg = "咨询结束失败 无法结束工单";
            throw new Exception(failMsg);
        }
@ -1367,44 +1389,46 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        one.setUpdateTime(new Date());
        securityMonitoringOrderDao.save(one);
        return getSecurityOrderDetail(orderId,null);
        return getSecurityOrderDetail(orderId, null);
    }
    /**
     * 统计居民已经服务的次数
     *
     * @param patient
     * @return
     */
    public Integer countPatientDoorTimes(String patient){
    public Integer countPatientDoorTimes(String patient) {
        Integer count = 0;
        String sql = "SELECT count(o.id) as count FROM base_security_monitoring_order o  where  o.patient = '" + patient + "' and status>3 ";
        count = jdbcTemplate.queryForObject(sql,Integer.class);
        count = jdbcTemplate.queryForObject(sql, Integer.class);
        return count;
    }
    /**
     * 根据orderId获取工单服务小结
     *
     * @param orderId
     * @return
     */
    public EmergencyWarnConclusionDO getDoorConclusion(String orderId){
    public EmergencyWarnConclusionDO getDoorConclusion(String orderId) {
        EmergencyWarnConclusionDO doorConclusion = emergencyWarnConclusionDao.findByOrderId(orderId);
        SecurityMonitoringOrderDO one = securityMonitoringOrderDao.findOne(orderId);
        if (doorConclusion==null&&one!=null) {
        if (doorConclusion == null && one != null) {
            doorConclusion = new EmergencyWarnConclusionDO();
            doorConclusion.setOrderId(one.getId());
            doorConclusion.setPatient(one.getPatient());
            doorConclusion.setPatientName(one.getPatientName());
            doorConclusion.setDoctor(one.getDoctor());
            doorConclusion.setDoctorName(one.getDoctorName());
        }else {
            doorConclusion.setReasonName(dictService.fingByNameAndCode(ConstantUtil.DICT_EMERGENCY_REASON,String.valueOf(doorConclusion.getEmergencyReason())));
            doorConclusion.setTreatmentStatusName(dictService.fingByNameAndCode(ConstantUtil.DICT_EMERGENCY_TREATMENT_STATUS,String.valueOf(doorConclusion.getEmergencyTreatmentStatus())));
        } else {
            doorConclusion.setReasonName(dictService.fingByNameAndCode(ConstantUtil.DICT_EMERGENCY_REASON, String.valueOf(doorConclusion.getEmergencyReason())));
            doorConclusion.setTreatmentStatusName(dictService.fingByNameAndCode(ConstantUtil.DICT_EMERGENCY_TREATMENT_STATUS, String.valueOf(doorConclusion.getEmergencyTreatmentStatus())));
        }
        return doorConclusion;
    }
    public JSONObject saveOrderFinishBydoctor(String orderId ,String finishImg) throws Exception {
    public JSONObject saveOrderFinishBydoctor(String orderId, String finishImg) throws Exception {
//        SecurityMonitoringOrderDO one = securityMonitoringOrderDao.findOne(orderId);
//        one.setDoctorConfirmFinishImg(finishImg);
//        one.setStatus(SecurityMonitoringOrderDO.Status.complete.getType());
@ -1422,11 +1446,12 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
//        // 发送微信通知  待付款
//        BasePatientDO patient = basePatientDao.findById(one.getPatient());
        return getSecurityOrderDetail(orderId,null);
        return getSecurityOrderDetail(orderId, null);
    }
    /**
     * 根据id获取服务工单信息
     *
     * @param id
     * @return
     */
@ -1438,7 +1463,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        BasePatientDO patient = basePatientDao.findById(doorServiceOrder.getPatient());
        if (patient != null) {
            String sex = IdCardUtil.getSexForIdcard_new(patient.getIdcard());
            int age = IdCardUtil.getAgeByIdcardOrBirthday(patient.getIdcard(),patient.getBirthday());
            int age = IdCardUtil.getAgeByIdcardOrBirthday(patient.getIdcard(), patient.getBirthday());
            doorServiceOrder.setSex("1".equals(sex) ? "男" : "2".equals(sex) ? "女" : "未知");
            doorServiceOrder.setAge(age);
            doorServiceOrder.setPhoto(patient.getPhoto());
@ -1458,261 +1483,261 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        return doorServiceOrder;
    }
    public List<Map<String,Object>> getSecurityServerDoctor(String patient,String topicItem){
    public List<Map<String, Object>> getSecurityServerDoctor(String patient, String topicItem) {
        //获取患者签约防走失服务的团队
        String sql="SELECT DISTINCT r.team_code from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i  \n" +
        String sql = "SELECT DISTINCT r.team_code from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i  \n" +
                "where  sr.id = r.sign_id and sr.status=1 and r.service_package_id = i.service_package_id   and i.del = 1 and sr.`status`=1 \n" +
                "and  sr.patient  = '"+patient+"' and i.code='"+topicItem+"'";
        List<String> teams = jdbcTemplate.queryForList(sql,String.class);
        List<Map<String,Object>> result = new ArrayList<>();
        if (teams.size()==0){
                "and  sr.patient  = '" + patient + "' and i.code='" + topicItem + "'";
        List<String> teams = jdbcTemplate.queryForList(sql, String.class);
        List<Map<String, Object>> result = new ArrayList<>();
        if (teams.size() == 0) {
            return new ArrayList<>();
        }else {
            for (String team:teams){
        } else {
            for (String team : teams) {
                sql = "select DISTINCT doc.id doctor,doc.name as doctorName,CONCAT(doc.`name`,\n" +
                        "CASE WHEN doc.doctor_level=1 THEN '(社区医生)' ELSE '(社工)' END) as name,doc.photo,doc.mobile from base_team_member mem " +
                        "INNER JOIN base_doctor doc on mem.doctor_code = doc.id and mem.del=1 and mem.team_code='"+team+"'";
                List<Map<String,Object>>tmp = jdbcTemplate.queryForList(sql);
                        "INNER JOIN base_doctor doc on mem.doctor_code = doc.id and mem.del=1 and mem.team_code='" + team + "'";
                List<Map<String, Object>> tmp = jdbcTemplate.queryForList(sql);
                result.addAll(tmp);
            }
        }
        return result;
    }
    public JSONObject patientMonitoringInfo(String patient,String topicItem,boolean video){
    public JSONObject patientMonitoringInfo(String patient, String topicItem, boolean video) {
        JSONObject result = new JSONObject();
        result.put("location",null);
        result.put("fences",null);
        result.put("gasLeakage",null);
        result.put("fire",null);
        result.put("fall",null);
        result.put("sleep",null);
        result.put("sleepOrderInfo",null);//最近工单
        result.put("deviceSn",null);
        result.put("emeAssistance",false);
        result.put("monitorInfo",null);
        result.put("location", null);
        result.put("fences", null);
        result.put("gasLeakage", null);
        result.put("fire", null);
        result.put("fall", null);
        result.put("sleep", null);
        result.put("sleepOrderInfo", null);//最近工单
        result.put("deviceSn", null);
        result.put("emeAssistance", false);
        result.put("monitorInfo", null);
        String sql = " select dict.code,count(ord.id) total from base_system_dict_entry dict LEFT JOIN base_security_monitoring_order ord " +
                " on dict.code = ord.topic_item COLLATE utf8_unicode_ci and ord.status="+SecurityMonitoringOrderDO.Status.apply.getType()+" where dict.dict_code='service_item' " +
                "and dict.remark='security' and ord.patient='"+patient+"' GROUP BY dict.code ";
        List<Map<String,Object>> sqlResult = jdbcTemplate.queryForList(sql);
        for (Map<String,Object>tmp:sqlResult){
            switch (tmp.get("code").toString()){
                " on dict.code = ord.topic_item COLLATE utf8_unicode_ci and ord.status=" + SecurityMonitoringOrderDO.Status.apply.getType() + " where dict.dict_code='service_item' " +
                "and dict.remark='security' and ord.patient='" + patient + "' GROUP BY dict.code ";
        List<Map<String, Object>> sqlResult = jdbcTemplate.queryForList(sql);
        for (Map<String, Object> tmp : sqlResult) {
            switch (tmp.get("code").toString()) {
                case "preventGasLeakage":
                   Integer count = Integer.parseInt(tmp.get("total").toString());
                    if (count>0){
                        result.put("gasLeakage",true);
                    }else {
                        result.put("gasLeakage",false);
                    Integer count = Integer.parseInt(tmp.get("total").toString());
                    if (count > 0) {
                        result.put("gasLeakage", true);
                    } else {
                        result.put("gasLeakage", false);
                    }
                    break;
                case "preventFire":
                    count = Integer.parseInt(tmp.get("total").toString());
                    if (count>0){
                        result.put("fire",true);
                    }else {
                        result.put("fire",false);
                    if (count > 0) {
                        result.put("fire", true);
                    } else {
                        result.put("fire", false);
                    }
                    break;
                case "preventFall":
                    count = Integer.parseInt(tmp.get("total").toString());
                    if (count>0){
                        result.put("fall",true);
                    }else {
                        result.put("fall",false);
                    if (count > 0) {
                        result.put("fall", true);
                    } else {
                        result.put("fall", false);
                    }
                    break;
                case "preventOutOfBed":
                    count = Integer.parseInt(tmp.get("total").toString());
                    if (count>0){
                        result.put("sleep",true);
                    if (count > 0) {
                        result.put("sleep", true);
                        sql = " select serve_desc from base_security_monitoring_order where topic_item='preventOutOfBed' " +
                                "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("sleepOrderInfo",serveDesces.get(0));
                                "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("sleepOrderInfo", serveDesces.get(0));
                        }
                    }else {
                        result.put("sleep",false);
                    } else {
                        result.put("sleep", false);
                    }
                    break;
            }
        }
        sql = " select count(id) from base_emergency_assistance_order  where patient='"+patient+"' and status="+ EmergencyAssistanceDO.Status.apply.getType();
        Integer counnt = jdbcTemplate.queryForObject(sql,Integer.class);
        if (counnt>0){
            result.put("emeAssistance",true);
        sql = " select count(id) from base_emergency_assistance_order  where patient='" + patient + "' and status=" + EmergencyAssistanceDO.Status.apply.getType();
        Integer counnt = jdbcTemplate.queryForObject(sql, Integer.class);
        if (counnt > 0) {
            result.put("emeAssistance", true);
        }
        result = patientSignTopicInfo(result,patient,topicItem,null,true);
        result = patientSignTopicInfo(result, patient, topicItem, null, true);
        return result;
    }
    /**
     *老人家属首页实时监护信息
     * 老人家属首页实时监护信息
     * 居家状态取手表 无手表缺省
     * 监控
     */
    public JSONObject patientMonitoringInfo2(String patient){
    public JSONObject patientMonitoringInfo2(String patient) {
        JSONObject result = new JSONObject();
        result.put("atHome",null);// 居家状态
        result.put("location",null);
        result.put("fences",null);
        result.put("gasLeakage",null);
        result.put("fire",null);
        result.put("fall",null);
        result.put("sleep",null);
        result.put("sleepOrderInfo",null);//最近工单
        result.put("deviceSn",null);
        result.put("emeAssistance",false);
        result.put("monitorInfo",null);
        result.put("atHome", null);// 居家状态
        result.put("location", null);
        result.put("fences", null);
        result.put("gasLeakage", null);
        result.put("fire", null);
        result.put("fall", null);
        result.put("sleep", null);
        result.put("sleepOrderInfo", null);//最近工单
        result.put("deviceSn", null);
        result.put("emeAssistance", false);
        result.put("monitorInfo", null);
        String sql = " select dict.code,count(ord.id) total from base_system_dict_entry dict LEFT JOIN base_security_monitoring_order ord " +
                " on dict.code = ord.topic_item COLLATE utf8_unicode_ci and ord.status="+SecurityMonitoringOrderDO.Status.apply.getType()+" where dict.dict_code='service_item' " +
                "and dict.remark='security' and ord.patient='"+patient+"' GROUP BY dict.code ";
        List<Map<String,Object>> sqlResult = jdbcTemplate.queryForList(sql);
        for (Map<String,Object>tmp:sqlResult){
            switch (tmp.get("code").toString()){
                " on dict.code = ord.topic_item COLLATE utf8_unicode_ci and ord.status=" + SecurityMonitoringOrderDO.Status.apply.getType() + " where dict.dict_code='service_item' " +
                "and dict.remark='security' and ord.patient='" + patient + "' GROUP BY dict.code ";
        List<Map<String, Object>> sqlResult = jdbcTemplate.queryForList(sql);
        for (Map<String, Object> tmp : sqlResult) {
            switch (tmp.get("code").toString()) {
                case "preventGasLeakage":
                    Integer count = Integer.parseInt(tmp.get("total").toString());
                    if (count>0){
                        result.put("gasLeakage",true);
                    }else {
                        result.put("gasLeakage",false);
                    if (count > 0) {
                        result.put("gasLeakage", true);
                    } else {
                        result.put("gasLeakage", false);
                    }
                    break;
                case "preventFire":
                    count = Integer.parseInt(tmp.get("total").toString());
                    if (count>0){
                        result.put("fire",true);
                    }else {
                        result.put("fire",false);
                    if (count > 0) {
                        result.put("fire", true);
                    } else {
                        result.put("fire", false);
                    }
                    break;
                case "preventFall":
                    count = Integer.parseInt(tmp.get("total").toString());
                    if (count>0){
                        result.put("fall",true);
                    }else {
                        result.put("fall",false);
                    if (count > 0) {
                        result.put("fall", true);
                    } else {
                        result.put("fall", false);
                    }
                    break;
                case "preventOutOfBed":
                    count = Integer.parseInt(tmp.get("total").toString());
                    if (count>0){
                        result.put("sleep",true);
                    if (count > 0) {
                        result.put("sleep", true);
                        sql = " select serve_desc from base_security_monitoring_order where topic_item='preventOutOfBed' " +
                                "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("sleepOrderInfo",serveDesces.get(0));
                                "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("sleepOrderInfo", serveDesces.get(0));
                        }
                    }else {
                        result.put("sleep",false);
                    } else {
                        result.put("sleep", false);
                    }
                    break;
            }
        }
        sql = " select count(id) from base_emergency_assistance_order  where patient='"+patient+"' and status="+ EmergencyAssistanceDO.Status.apply.getType();
        Integer counnt = jdbcTemplate.queryForObject(sql,Integer.class);
        if (counnt>0){
            result.put("emeAssistance",true);
        sql = " select count(id) from base_emergency_assistance_order  where patient='" + patient + "' and status=" + EmergencyAssistanceDO.Status.apply.getType();
        Integer counnt = jdbcTemplate.queryForObject(sql, Integer.class);
        if (counnt > 0) {
            result.put("emeAssistance", true);
        }
        List<DevicePatientDevice> devices4 = patientDeviceDao.findByUserAndCategoryCode(patient,"4");//手表
        if (devices4.size()>0){
            result =  patientSignTopicInfo(result,patient,"preventLost",devices4.get(0).getDeviceSn(),true);
        List<DevicePatientDevice> devices4 = patientDeviceDao.findByUserAndCategoryCode(patient, "4");//手表
        if (devices4.size() > 0) {
            result = patientSignTopicInfo(result, patient, "preventLost", devices4.get(0).getDeviceSn(), true);
        }
        patientSignTopicInfo(result,patient,"preventFall",null,true);
        patientSignTopicInfo(result, patient, "preventFall", null, true);
        return result;
    }
    public void preventLost(JSONObject result,String patient,String deviceSn){
    public void preventLost(JSONObject result, String patient, String deviceSn) {
        //手表与拐杖同时绑定时优先手表,围栏状态其中一个超出围栏即为超出围栏
        try {
            Integer categoryCode=0;//未指定设备
            Integer categoryCode = 0;//未指定设备
            List<DevicePatientDevice> devicePatientDeviceDos = new ArrayList<>();
            List<DevicePatientDevice> devicePatientDeviceDos2 = new ArrayList<>();
            if (StringUtils.isNotBlank(deviceSn)){//查看指定设备详情
            if (StringUtils.isNotBlank(deviceSn)) {//查看指定设备详情
                List<DevicePatientDevice> devices = patientDeviceDao.findByDeviceSn(deviceSn);
                if (devices.size()>0){
                   String categoryCodeTmp = devices.get(0).getCategoryCode();
                    categoryCode = StringUtils.isBlank(categoryCodeTmp)?-1:Integer.parseInt(categoryCodeTmp);
                    if (4==categoryCode){
                if (devices.size() > 0) {
                    String categoryCodeTmp = devices.get(0).getCategoryCode();
                    categoryCode = StringUtils.isBlank(categoryCodeTmp) ? -1 : Integer.parseInt(categoryCodeTmp);
                    if (4 == categoryCode) {
                        devicePatientDeviceDos = devices;
                    }
                    if (16==categoryCode){
                    if (16 == categoryCode) {
                        devicePatientDeviceDos2 = devices;
                    }
                }
            }else {//未指定设备
                devicePatientDeviceDos = patientDeviceDao.findByUserAndCategoryCode(patient,"4");//手表
                devicePatientDeviceDos2 = patientDeviceDao.findByUserAndCategoryCode(patient,"16");//拐杖
            } else {//未指定设备
                devicePatientDeviceDos = patientDeviceDao.findByUserAndCategoryCode(patient, "4");//手表
                devicePatientDeviceDos2 = patientDeviceDao.findByUserAndCategoryCode(patient, "16");//拐杖
            }
            if (devicePatientDeviceDos.size()>0&&(4==categoryCode||0==categoryCode)){//手表
            if (devicePatientDeviceDos.size() > 0 && (4 == categoryCode || 0 == categoryCode)) {//手表
                DevicePatientDevice device = devicePatientDeviceDos.get(0);
                result.put("deviceSn",device.getDeviceSn());
                JSONObject response= patientDeviceService.getAqgDeviceInfo2(device.getDeviceSn());
                if (response!=null){
                result.put("deviceSn", device.getDeviceSn());
                JSONObject response = patientDeviceService.getAqgDeviceInfo2(device.getDeviceSn());
                if (response != null) {
                    //定位信息
                    if (response.containsKey("last_location")&&response.get("last_location")!=null){
                    if (response.containsKey("last_location") && response.get("last_location") != null) {
                        JSONObject locationTmp = response.getJSONObject("last_location");
                        Double lon = locationTmp.getJSONArray("coordinates").getDouble(0);
                        Double lat = locationTmp.getJSONArray("coordinates").getDouble(1);
                        if (!response.getBoolean("online")){//设备离线 取居民表定位
                            result.put("X1online",false);
                        }else {
                            result.put("X1online",true);
                        if (!response.getBoolean("online")) {//设备离线 取居民表定位
                            result.put("X1online", false);
                        } else {
                            result.put("X1online", true);
                        }
                        JSONObject tmp = gpsUtil.gcj02_To_Bd09(lat,lon);
                        tmp.put("city",response.getString("last_city"));
                        tmp.put("province",response.getString("last_province"));
                        tmp.put("address",response.getString("last_address"));
                        result.put("location",tmp);
                        JSONObject tmp = gpsUtil.gcj02_To_Bd09(lat, lon);
                        tmp.put("city", response.getString("last_city"));
                        tmp.put("province", response.getString("last_province"));
                        tmp.put("address", response.getString("last_address"));
                        result.put("location", tmp);
                        BasePatientDO patientDO = basePatientDao.findById(patient);
                        if (null != patientDO){
                            if (StringUtils.isNotBlank(patientDO.getHomeLatLon())){
                        if (null != patientDO) {
                            if (StringUtils.isNotBlank(patientDO.getHomeLatLon())) {
                                String homeLatLon = patientDO.getHomeLatLon();
                                double homeLat = Double.parseDouble( homeLatLon.split(",")[0]);
                                double homeLon = Double.parseDouble( homeLatLon.split(",")[1]);
                                double homeDistance =  countDistance.getDistance(result.getJSONObject("location").getDouble("lat"),result.getJSONObject("location").getDouble("lon"),
                                       homeLat,homeLon);
                                if (homeDistance>50*1000){
                                    result.put("atHome",false);
                                }else {
                                    result.put("atHome",true);
                                double homeLat = Double.parseDouble(homeLatLon.split(",")[0]);
                                double homeLon = Double.parseDouble(homeLatLon.split(",")[1]);
                                double homeDistance = countDistance.getDistance(result.getJSONObject("location").getDouble("lat"), result.getJSONObject("location").getDouble("lon"),
                                        homeLat, homeLon);
                                if (homeDistance > 50 * 1000) {
                                    result.put("atHome", false);
                                } else {
                                    result.put("atHome", true);
                                }
                            }
                        }
                    }
                    //围栏信息
                    if (response.containsKey("fences")&&response.get("fences")!=null){
                    if (response.containsKey("fences") && response.get("fences") != null) {
                        JSONArray fencesArr = response.getJSONArray("fences");
                        JSONArray fencesEnables = new JSONArray();
                        for (int i=0;i<fencesArr.size();i++){
                        for (int i = 0; i < fencesArr.size(); i++) {
                            JSONObject tmp = fencesArr.getJSONObject(i);
                            if (tmp.getBooleanValue("enable")){//围栏生效
                            if (tmp.getBooleanValue("enable")) {//围栏生效
                                JSONObject fenceTmp = new JSONObject();
                                fenceTmp.put("fenceNO",tmp.getInteger("seqid").toString());
                                fenceTmp.put("name",tmp.getString("name"));
                                fenceTmp.put("fenceNO", tmp.getInteger("seqid").toString());
                                fenceTmp.put("name", tmp.getString("name"));
                                JSONArray fenceLocationTmp = tmp.getJSONObject("safe_area").getJSONArray("coordinates").getJSONArray(0);
                                JSONArray fenceLocation = new JSONArray();
                                for (int j=0;j<fenceLocationTmp.size();j++){
                                for (int j = 0; j < fenceLocationTmp.size(); j++) {
                                    Double lon = fenceLocationTmp.getJSONArray(j).getDouble(0);
                                    Double lat = fenceLocationTmp.getJSONArray(j).getDouble(1);
                                    JSONObject positionTmp = gpsUtil.gcj02_To_Bd09(lat,lon);
                                    JSONObject positionTmp = gpsUtil.gcj02_To_Bd09(lat, lon);
                                    fenceLocation.add(positionTmp);
                                }
                                fenceTmp.put("location",fenceLocation);
                                fenceTmp.put("inFenceStatus",countDistance.isInPolygon(result.getJSONObject("location").getDouble("lon"),result.getJSONObject("location").getDouble("lat"),fenceLocation));
                                fenceTmp.put("location", fenceLocation);
                                fenceTmp.put("inFenceStatus", countDistance.isInPolygon(result.getJSONObject("location").getDouble("lon"), result.getJSONObject("location").getDouble("lat"), fenceLocation));
                                fencesEnables.add(fenceTmp);
                            }
                        }
                        if (fencesEnables.size()>0){
                            result.put("fences",fencesEnables);
                        if (fencesEnables.size() > 0) {
                            result.put("fences", fencesEnables);
                        }
                    }
                }
            }
            if (devicePatientDeviceDos2.size()>0&&(16==categoryCode||0==categoryCode)) {//拐杖
            if (devicePatientDeviceDos2.size() > 0 && (16 == categoryCode || 0 == categoryCode)) {//拐杖
                DevicePatientDevice deviceDO = devicePatientDeviceDos2.get(0);
                double dulat = 0l;
                double dulon = 0l;
@ -1741,8 +1766,8 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                }
                if (!(dulat == 0.0 && dulon == 0.0)) {
                    List<PatientSafeAreaDO> safeAreaDOS = safeAreaDao.findByPatient(deviceDO.getUser());
                    String safeArea=null;
                    if (safeAreaDOS.size()>0){
                    String safeArea = null;
                    if (safeAreaDOS.size() > 0) {
                        safeArea = safeAreaDOS.get(0).getSafeAreaGz();
                    }
                    JSONArray fenceLocation = new JSONArray();
@ -1758,7 +1783,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                            positionTmp.put("lon", areaLon);
                            fenceLocation.add(positionTmp);
                        }
                        if (devicePatientDeviceDos2.size() > 0 && 0 == categoryCode && devicePatientDeviceDos2.size()>0) {
                        if (devicePatientDeviceDos2.size() > 0 && 0 == categoryCode && devicePatientDeviceDos2.size() > 0) {
                            JSONObject obj = result.getJSONArray("fences").getJSONObject(0);
                            if (obj.getBooleanValue("inFenceStatus")) {
                                if (!countDistance.isInPolygon(dulon, dulat, fenceLocation)) {
@ -1769,87 +1794,86 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                                    obj.put("lat", dulat);
                                }
                            }
                        }
                        else if(devicePatientDeviceDos2.size() > 0) {//指定拐杖设备
                        } else if (devicePatientDeviceDos2.size() > 0) {//指定拐杖设备
                            if (StringUtils.isNotBlank(safeArea)) {
                                result.put("deviceSn", deviceDO.getDeviceSn());
                                JSONObject location = new JSONObject();
                                location.put("address",address);
                                location.put("province","");
                                location.put("city","");
                                location.put("lon",dulon);
                                location.put("lat",dulat);
                                result.put("location",location);
                                location.put("address", address);
                                location.put("province", "");
                                location.put("city", "");
                                location.put("lon", dulon);
                                location.put("lat", dulat);
                                result.put("location", location);
                                JSONArray fences = new JSONArray();
                                JSONObject fence = new JSONObject();
                                fence.put("fenceNO","1");
                                fence.put("name","安全区域1");
                                fence.put("fenceNO", "1");
                                fence.put("name", "安全区域1");
                                fence.put("inFenceStatus", countDistance.isInPolygon(dulon, dulat, fenceLocation));
                                fence.put("location", fenceLocation);
                                fences.add(fence);
                                result.put("fences",fences);
                                result.put("fences", fences);
                            }
                        }
                    }
                }
            }
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            result.put("location",null);
            result.put("location", null);
        }
    }
    public void preventOutOfBed(JSONObject result,String patient,boolean video,String dayTime){
        List<DevicePatientDevice> devicePatientDeviceDos = patientDeviceDao.findByUserAndCategoryCode(patient,"13");
        if (devicePatientDeviceDos.size()==0){}
        else {
    public void preventOutOfBed(JSONObject result, String patient, boolean video, String dayTime) {
        List<DevicePatientDevice> devicePatientDeviceDos = patientDeviceDao.findByUserAndCategoryCode(patient, "13");
        if (devicePatientDeviceDos.size() == 0) {
        } else {
            DevicePatientDevice deviceDo = devicePatientDeviceDos.get(0);
            JSONObject deviceInfo =  patientDeviceService.getSleepDeviceInfo(deviceDo.getDeviceSn());
            if(deviceInfo.getBooleanValue("success")){
                result.put("patientAddress",deviceDo.getSosAddress());
            JSONObject deviceInfo = patientDeviceService.getSleepDeviceInfo(deviceDo.getDeviceSn());
            if (deviceInfo.getBooleanValue("success")) {
                result.put("patientAddress", deviceDo.getSosAddress());
                JSONArray objInfo = deviceInfo.getJSONArray("objs");
                if (objInfo.size()>0){
                    result.put("sleepStatus",true);
                if (objInfo.size() > 0) {
                    result.put("sleepStatus", true);
                    JSONObject tmp = objInfo.getJSONObject(0);
                    JSONObject sleepInfo = new JSONObject();
                    if (StringUtils.isBlank(dayTime)){
                        dayTime = getSleepMonitoringDay(new Date(),patient);
                    if (StringUtils.isBlank(dayTime)) {
                        dayTime = getSleepMonitoringDay(new Date(), patient);
                    }
                    List<BaseSleepPlanDetail> planDetails = sleepPlanDetailDao.findByPatientAndDay(patient,dayTime);
                    List<BaseSleepPlanDetail> planDetails = sleepPlanDetailDao.findByPatientAndDay(patient, dayTime);
                    BaseSleepPlanDetail planDetail = new BaseSleepPlanDetail();
                    if (planDetails.size()>0){
                        planDetail =  planDetails.get(0);
                        List<BaseSleepNightRecord> sleepNightRecordList = nightRecordDao.findByPatientAndDayOrderByCreateTimeDesc(patient,dayTime);
                    if (planDetails.size() > 0) {
                        planDetail = planDetails.get(0);
                        List<BaseSleepNightRecord> sleepNightRecordList = nightRecordDao.findByPatientAndDayOrderByCreateTimeDesc(patient, dayTime);
                        planDetail.setSleepNightRecordList(sleepNightRecordList);
                    }
                    String jsonStr = JSON.toJSONStringWithDateFormat(planDetail, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteMapNullValue);
                    sleepInfo = JSONObject.parseObject(jsonStr);
                    sleepInfo.put("day",dayTime);
                    sleepInfo.put("day", dayTime);
                    List<BaseSleepPlan> sleepPlans = sleepPlanDao.findByPatient(patient);
                    if (sleepPlans.size()>0){
                    if (sleepPlans.size() > 0) {
                        BaseSleepPlan sleepPlan = sleepPlans.get(0);
                        String endTime = DateUtil.getNextMin(sleepPlan.getGetUpTime(),-1);
                        sleepInfo.put("sleepPlan",true);
                        sleepInfo.put("getUpTime",sleepPlan.getGetUpTime());
                        sleepInfo.put("siestaTime",sleepPlan.getNapTime());
                        sleepInfo.put("nightRestTime",sleepPlan.getNightRestTime());
                        sleepInfo.put("nightRecordTime",sleepPlan.getNightRestTime()+"-隔日"+endTime);
                    }else {
                        sleepInfo.put("sleepPlan",false);
                        String endTime = DateUtil.getNextMin(sleepPlan.getGetUpTime(), -1);
                        sleepInfo.put("sleepPlan", true);
                        sleepInfo.put("getUpTime", sleepPlan.getGetUpTime());
                        sleepInfo.put("siestaTime", sleepPlan.getNapTime());
                        sleepInfo.put("nightRestTime", sleepPlan.getNightRestTime());
                        sleepInfo.put("nightRecordTime", sleepPlan.getNightRestTime() + "-隔日" + endTime);
                    } else {
                        sleepInfo.put("sleepPlan", false);
                    }
                    sleepInfo.put("online",tmp.getBooleanValue("online"));
                    if(tmp.getBooleanValue("onbed")){
                        sleepInfo.put("bedStatus",1);
                        sleepInfo.put("heartRate",tmp.getString("heartrate"));
                        sleepInfo.put("breath",tmp.getString("breathrate"));
                    }else {
                        sleepInfo.put("bedStatus",0);
                        sleepInfo.put("heartRate",null);
                        sleepInfo.put("breath",null);
                    sleepInfo.put("online", tmp.getBooleanValue("online"));
                    if (tmp.getBooleanValue("onbed")) {
                        sleepInfo.put("bedStatus", 1);
                        sleepInfo.put("heartRate", tmp.getString("heartrate"));
                        sleepInfo.put("breath", tmp.getString("breathrate"));
                    } else {
                        sleepInfo.put("bedStatus", 0);
                        sleepInfo.put("heartRate", null);
                        sleepInfo.put("breath", null);
                    }
                    BasePatientOutBed outBed = outBedDao.findByPatientAndDeviceSnAndStatus(patient,deviceDo.getDeviceSn(),0);
                    if (null!=outBed){
                    BasePatientOutBed outBed = outBedDao.findByPatientAndDeviceSnAndStatus(patient, deviceDo.getDeviceSn(), 0);
                    if (null != outBed) {
                        String outBedTime = "";
                        Date date = new Date();
                        long millisecondsDiff = date.getTime() - outBed.getCreateTime().getTime();
@ -1859,131 +1883,129 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                        if (hoursDiff > 0L) {
                            outBedTime += String.format("%d小时", hoursDiff);
                        }
                        if (minuteFieldDiff>0){
                            outBedTime +=String.format("%d分钟", minuteFieldDiff);
                        if (minuteFieldDiff > 0) {
                            outBedTime += String.format("%d分钟", minuteFieldDiff);
                        }
                        sleepInfo.put("outBedTimeCrzq",outBed.getCreateTime());
                        sleepInfo.put("outBedTime",outBedTime);
                    }else {
                        sleepInfo.put("outBedTime","无");
                        sleepInfo.put("outBedTimeCrzq", outBed.getCreateTime());
                        sleepInfo.put("outBedTime", outBedTime);
                    } else {
                        sleepInfo.put("outBedTime", "无");
                    }
                    result.put("sleepInfo",sleepInfo);
                    result.put("sleepInfo", sleepInfo);
                }
            }else {
                result.put("sleepStatus",false);
                result.put("sleepInfo","获取睡眠带数据失败");
            } else {
                result.put("sleepStatus", false);
                result.put("sleepInfo", "获取睡眠带数据失败");
            }
        }
        if (video){
        if (video) {
            monitorInfo(result, patient);
        }
    }
    public void preventFire(JSONObject result,String patient,String deviceSn,boolean video){
    public void preventFire(JSONObject result, String patient, String deviceSn, boolean video) {
        String sql = "SELECT r.value from wlyy_patient_device pd,base_device_health_index r " +
                "WHERE pd.device_sn = r.device_sn  ";
        if (StringUtils.isNotBlank(patient)){
            sql+=" and pd.`user` = '"+patient+"' ";
        if (StringUtils.isNotBlank(patient)) {
            sql += " and pd.`user` = '" + patient + "' ";
        }
        if (StringUtils.isNotBlank(deviceSn)){
            sql+=" and  r.device_sn = '"+deviceSn+"' ";
        if (StringUtils.isNotBlank(deviceSn)) {
            sql += " and  r.device_sn = '" + deviceSn + "' ";
        }
        sql += " and pd.category_code='15' ORDER BY r.create_time desc LIMIT 1";
        List<Map<String,Object>> list1 = jdbcTemplate.queryForList(sql);
        if(list1.size()==0){
            result.put("smoke","-1");
        }else{
            result.put("smoke",list1.get(0).get("value"));
        List<Map<String, Object>> list1 = jdbcTemplate.queryForList(sql);
        if (list1.size() == 0) {
            result.put("smoke", "-1");
        } else {
            result.put("smoke", list1.get(0).get("value"));
        }
        result.put("smokeOrderNum",getOrder(patient,"preventFire"));
        if (video){
        result.put("smokeOrderNum", getOrder(patient, "preventFire"));
        if (video) {
            monitorInfo(result, patient);
        }
    }
    public Integer getOrder(String patient,String topicItem){
    public Integer getOrder(String patient, String topicItem) {
        String sql = "select count(1) from base_security_monitoring_order " +
                "WHERE patient = '"+patient+"' and `status` = 1 and topic_item = '"+topicItem+"'";
        Integer num = jdbcTemplate.queryForObject(sql,Integer.class);
                "WHERE patient = '" + patient + "' and `status` = 1 and topic_item = '" + topicItem + "'";
        Integer num = jdbcTemplate.queryForObject(sql, Integer.class);
        return num;
    }
    public void preventGasLeakage(JSONObject result,String patient,boolean video){
    public void preventGasLeakage(JSONObject result, String patient, boolean video) {
        String sql = "SELECT r.value from wlyy_patient_device pd,base_device_health_index r " +
                "WHERE pd.device_sn = r.device_sn and pd.`user` = '"+patient+"' ";
                "WHERE pd.device_sn = r.device_sn and pd.`user` = '" + patient + "' ";
        sql += " and pd.category_code='14' ORDER BY r.create_time desc LIMIT 1";
        List<Map<String,Object>> list1 = jdbcTemplate.queryForList(sql);
        if(list1.size()==0){
            result.put("methane","-1");
        }else{
            result.put("methane",list1.get(0).get("value"));
        List<Map<String, Object>> list1 = jdbcTemplate.queryForList(sql);
        if (list1.size() == 0) {
            result.put("methane", "-1");
        } else {
            result.put("methane", list1.get(0).get("value"));
        }
        result.put("methaneOrderNum",getOrder(patient,"preventGasLeakage"));
        if (video){
        result.put("methaneOrderNum", getOrder(patient, "preventGasLeakage"));
        if (video) {
            monitorInfo(result, patient);
        }
    }
    public void monitorInfo(JSONObject result,String patient){
    public void monitorInfo(JSONObject result, String patient) {
        //监控
        List<DevicePatientDevice> devicePatientDeviceDos = patientDeviceDao.findByUserAndCategoryCode(patient,"12");
        if (devicePatientDeviceDos.size()==0){
        List<DevicePatientDevice> devicePatientDeviceDos = patientDeviceDao.findByUserAndCategoryCode(patient, "12");
        if (devicePatientDeviceDos.size() == 0) {
            return;
        }
        try {
            DevicePatientDevice deviceDo = devicePatientDeviceDos.get(0);
            JSONObject monitorUrl = ysDeviceServicel.getDeviceLiveAddress(patient,deviceDo.getDeviceSn(),1,null);
            result.put("monitorInfoStatus",monitorUrl.getIntValue(ResponseContant.resultFlag));
            result.put("patientAddress",deviceDo.getSosAddress());
            if (monitorUrl.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail){
                result.put("monitorInfo",monitorUrl.getString(ResponseContant.resultMsg));
            JSONObject monitorUrl = ysDeviceServicel.getDeviceLiveAddress(patient, deviceDo.getDeviceSn(), 1, null);
            result.put("monitorInfoStatus", monitorUrl.getIntValue(ResponseContant.resultFlag));
            result.put("patientAddress", deviceDo.getSosAddress());
            if (monitorUrl.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                result.put("monitorInfo", monitorUrl.getString(ResponseContant.resultMsg));
            } else {
                result.put("monitorInfo", monitorUrl.getJSONObject(ResponseContant.resultMsg));
            }
            else {
                result.put("monitorInfo",monitorUrl.getJSONObject(ResponseContant.resultMsg));
            }
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public JSONObject patientSignTopicInfo(JSONObject result,String patient,String topicItem,String deviceSn,boolean video){
        if (null==result){
    public JSONObject patientSignTopicInfo(JSONObject result, String patient, String topicItem, String deviceSn, boolean video) {
        if (null == result) {
            result = new JSONObject();
        }
        if ("preventLost".equals(topicItem)||StringUtils.isBlank(topicItem)){
            preventLost(result, patient,deviceSn);
        if ("preventLost".equals(topicItem) || StringUtils.isBlank(topicItem)) {
            preventLost(result, patient, deviceSn);
        }
        if ("preventFall".equals(topicItem)||StringUtils.isBlank(topicItem)){
        if ("preventFall".equals(topicItem) || StringUtils.isBlank(topicItem)) {
            monitorInfo(result, patient);
        }
        if ("preventOutOfBed".equals(topicItem)||StringUtils.isBlank(topicItem)){
            preventOutOfBed(result, patient,true,null);
        if ("preventOutOfBed".equals(topicItem) || StringUtils.isBlank(topicItem)) {
            preventOutOfBed(result, patient, true, null);
        }
        if ("preventFire".equals(topicItem)||StringUtils.isBlank(topicItem)){
            preventFire(result, patient,null,video);
        if ("preventFire".equals(topicItem) || StringUtils.isBlank(topicItem)) {
            preventFire(result, patient, null, video);
        }
        if ("preventGasLeakage".equals(topicItem)||StringUtils.isBlank(topicItem)){
            preventGasLeakage(result, patient,video);
        if ("preventGasLeakage".equals(topicItem) || StringUtils.isBlank(topicItem)) {
            preventGasLeakage(result, patient, video);
        }
        return result;
    }
    public JSONObject updateDoctorLocation(String doctor,String orderId,String doctorAddress,String doctorLat,String doctorLon){
    public JSONObject updateDoctorLocation(String doctor, String orderId, String doctorAddress, String doctorLat, String doctorLon) {
        JSONObject result = new JSONObject();
        BaseDoctorDO doctorDO = baseDoctorDao.findById(doctor);
        if (doctorDO==null){
        if (doctorDO == null) {
            String failMsg = "当前医生不存在";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
            result.put(ResponseContant.resultMsg, failMsg);
            return result;
        }
        else {
        } else {
            doctorDO.setDoctorLocateAddress(doctorAddress);
            doctorDO.setDoctorLat(doctorLat);
            doctorDO.setDoctorLon(doctorLon);
@ -1993,44 +2015,43 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        return result;
    }
    public JSONObject updatePatientLocation(String patient,String patientAddress,String patientLat,String patientLon){
    public JSONObject updatePatientLocation(String patient, String patientAddress, String patientLat, String patientLon) {
        JSONObject result = new JSONObject();
        BasePatientDO patientDO = basePatientDao.findById(patient);
        if (patientDO==null){
        if (patientDO == null) {
            String failMsg = "患者不存在";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
            result.put(ResponseContant.resultMsg, failMsg);
            return result;
        }
        patientDO.setLatLon(patientLat+","+patientLon);
        patientDO.setLatLon(patientLat + "," + patientLon);
        basePatientDao.save(patientDO);
        List<SecurityMonitoringOrderDO> monitoringOrderDO = securityMonitoringOrderDao.findByPatientAndStatus(patient,1);
        if (monitoringOrderDO.size()>0){
            for (SecurityMonitoringOrderDO tmp:monitoringOrderDO){
        List<SecurityMonitoringOrderDO> monitoringOrderDO = securityMonitoringOrderDao.findByPatientAndStatus(patient, 1);
        if (monitoringOrderDO.size() > 0) {
            for (SecurityMonitoringOrderDO tmp : monitoringOrderDO) {
                tmp.setServeAddress(patientAddress);
                tmp.setServeLat(patientLat);
                tmp.setServeLon(patientLon);
                securityMonitoringOrderDao.save(monitoringOrderDO);
            }
            result.put(ResponseContant.resultFlag, ResponseContant.success);
        }
        else {
        } else {
            result.put(ResponseContant.resultFlag, ResponseContant.success);
            result.put(ResponseContant.resultMsg,null);
            result.put(ResponseContant.resultMsg, null);
        }
        return result;
    }
    public JSONObject responseOrder(String orderId,String doctor){
    public JSONObject responseOrder(String orderId, String doctor) {
        JSONObject result = new JSONObject();
        SecurityMonitoringOrderDO one = securityMonitoringOrderDao.findOne(orderId);
        if (one==null){
            String failMsg = "工单不存在" ;
        if (one == null) {
            String failMsg = "工单不存在";
            result.put("resultFlag", 0);
            result.put("resultMsg", failMsg);
            return result;
        }
        if (emergencyWarnDoctorResponseDao.findByDoctorAndOrderId(doctor,orderId)==null){
        if (emergencyWarnDoctorResponseDao.findByDoctorAndOrderId(doctor, orderId) == null) {
            EmergencyWarnDoctorResponseDO responseDO = new EmergencyWarnDoctorResponseDO();
            responseDO.setOrderId(orderId);
            responseDO.setDoctor(doctor);
@ -2038,14 +2059,14 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            emergencyWarnDoctorResponseDao.save(responseDO);
            BaseDoctorDO doctorDO = baseDoctorDao.findById(doctor);
            if (null!=doctorDO){
            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("社工"+doctorDO.getName()+"前往定位");
                logDO.setContent("社工" + doctorDO.getName() + "前往定位");
                logDao.save(logDO);
            }
        }
@ -2056,70 +2077,70 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
    }
    /**
     *获取居民睡眠计划
     * 获取居民睡眠计划
     */
    public BaseSleepPlan getPatientSleepPlan(String patient){
    public BaseSleepPlan getPatientSleepPlan(String patient) {
        List<BaseSleepPlan> list = sleepPlanDao.findByPatient(patient);
        if (list.size()>0){
        if (list.size() > 0) {
            return list.get(0);
        }else {
        } else {
            return null;
        }
    }
    /**
     *获取居民睡眠监护列表
     * 获取居民睡眠监护列表
     */
    public JSONObject getPatientSleepDetainList(String patient,String begin,String end,Integer page,Integer pageSize){
        page=page>0?page-1:0;
    public JSONObject getPatientSleepDetainList(String patient, String begin, String end, Integer page, Integer pageSize) {
        page = page > 0 ? page - 1 : 0;
        PageRequest pageRequest = new PageRequest(page, pageSize);
        if (StringUtils.isBlank(end)){
        if (StringUtils.isBlank(end)) {
            end = begin;
        }
        JSONArray array = new JSONArray();
        Page<BaseSleepPlanDetail> list = sleepPlanDetailDao.findByListByPage(patient,begin,end,pageRequest);
        Page<BaseSleepPlanDetail> list = sleepPlanDetailDao.findByListByPage(patient, begin, end, pageRequest);
        List<BaseSleepPlan> sleepPlans = sleepPlanDao.findByPatient(patient);
        BaseSleepPlan sleepPlan=null;
        if (sleepPlans.size()>0){
        BaseSleepPlan sleepPlan = null;
        if (sleepPlans.size() > 0) {
            sleepPlan = sleepPlans.get(0);
        }
        for (BaseSleepPlanDetail tmp:list){
            List<BaseSleepNightRecord> records = nightRecordDao.findByPatientAndDayOrderByCreateTimeDesc(patient,tmp.getDay());
        for (BaseSleepPlanDetail tmp : list) {
            List<BaseSleepNightRecord> records = nightRecordDao.findByPatientAndDayOrderByCreateTimeDesc(patient, tmp.getDay());
            tmp.setSleepNightRecordList(records);
            String str = JSON.toJSONStringWithDateFormat(tmp, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteMapNullValue);
            JSONObject jsonObject = JSONObject.parseObject(str);
            if (null==sleepPlan){
                jsonObject.put("sleepPlan",false);
            }else {
                jsonObject.put("sleepPlan",true);
                String endTime = DateUtil.getNextMin(sleepPlan.getGetUpTime(),-1);
                jsonObject.put("getUpTime",sleepPlan.getGetUpTime());
                jsonObject.put("siestaTime",sleepPlan.getNapTime());
                jsonObject.put("nightRestTime",sleepPlan.getNightRestTime());
                jsonObject.put("nightRecordTime",sleepPlan.getNightRestTime()+"-隔日"+endTime);
            if (null == sleepPlan) {
                jsonObject.put("sleepPlan", false);
            } else {
                jsonObject.put("sleepPlan", true);
                String endTime = DateUtil.getNextMin(sleepPlan.getGetUpTime(), -1);
                jsonObject.put("getUpTime", sleepPlan.getGetUpTime());
                jsonObject.put("siestaTime", sleepPlan.getNapTime());
                jsonObject.put("nightRestTime", sleepPlan.getNightRestTime());
                jsonObject.put("nightRecordTime", sleepPlan.getNightRestTime() + "-隔日" + endTime);
                array.add(jsonObject);
            }
        }
        JSONObject result = (JSONObject) JSONObject.toJSON(list);
        result.put("content",array);
        result.put("content", array);
        return result;
    }
    /**
     *获取居民起夜记录
     * 获取居民起夜记录
     */
    public List<BaseSleepNightRecord> getPatientSleepNightRecord(String patient, String day){
    public List<BaseSleepNightRecord> getPatientSleepNightRecord(String patient, String day) {
        List<BaseSleepNightRecord> records = nightRecordDao.findByPatientAndDayOrderByCreateTimeDesc(patient,day);
        List<BaseSleepNightRecord> records = nightRecordDao.findByPatientAndDayOrderByCreateTimeDesc(patient, day);
        return records;
    }
    private String getRandomIntStr(){
    private String getRandomIntStr() {
        Random rand = new Random();
        int i = rand.nextInt(); //int范围类的随机数
        i = rand.nextInt(100); //生成0-100以内的随机数
        i = (int)(Math.random() * 100000000); //0-100以内的随机数,用Matn.random()方式
        i = (int) (Math.random() * 100000000); //0-100以内的随机数,用Matn.random()方式
        return String.valueOf(i);
    }
@ -2129,98 +2150,98 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        one.setUpdateUserName(one.getDoctorName());
    }
    private String getSleepMonitoringDay(Date date,String patient){
    private String getSleepMonitoringDay(Date date, String patient) {
        List<BaseSleepPlan> sleepPlans = sleepPlanDao.findByPatient(patient);
        if (sleepPlans.size()>0){
        if (sleepPlans.size() > 0) {
            BaseSleepPlan sleepPlan = sleepPlans.get(0);
            String bedUpStr = sleepPlans.get(0).getGetUpTime();
            Date bedUp = DateUtil.strToDate(DateUtil.getStringDateShort()+" "+bedUpStr+":00");// 起床时间 起床前一小时内算为起床
            if (date.before(bedUp)&&bedUp.getTime()-date.getTime()>1000*1*3600){
                bedUp = DateUtil.getNextDay1(bedUp,-1);
            Date bedUp = DateUtil.strToDate(DateUtil.getStringDateShort() + " " + bedUpStr + ":00");// 起床时间 起床前一小时内算为起床
            if (date.before(bedUp) && bedUp.getTime() - date.getTime() > 1000 * 1 * 3600) {
                bedUp = DateUtil.getNextDay1(bedUp, -1);
            }
            String dayTime = DateUtil.dateToStr(bedUp,DateUtil.YYYY_MM_DD);//监测日期
            String dayTime = DateUtil.dateToStr(bedUp, DateUtil.YYYY_MM_DD);//监测日期
            return dayTime;
        }else {
        } else {
            return null;
        }
    }
    public JSONObject findMonitorPatientsByDoctor(String doctor,String topicItem,String day,Integer page,Integer pageSize,Integer detail){
    public JSONObject findMonitorPatientsByDoctor(String doctor, String topicItem, String day, Integer page, Integer pageSize, Integer detail) {
        JSONObject result = new JSONObject();
        String sql = " SELECT DISTINCT p.id,p.name,p.residential_area residentialArea,p.photo,p.idcard,p.mobile, " +
                " p.openid,p.sex,p.pad_imei padImei " +
                " from base_patient p , base_service_package_sign_record sr,base_service_package_record r,base_team_member m  " +
                " WHERE p.id = sr.patient and sr.status=1 and m.team_code = r.team_code and sr.id=r.sign_id  " +
                " and m.doctor_code = '"+doctor+"' and m.del = '1' ";
                " and m.doctor_code = '" + doctor + "' and m.del = '1' ";
        String fliter = "";
        String categoryCode ="";
        String categoryCode = "";
        String topicItemTmp = topicItem;
        switch (topicItem){
        switch (topicItem) {
            case "actionTrack":
                categoryCode="'4'";
                topicItemTmp="preventLost";
                categoryCode = "'4'";
                topicItemTmp = "preventLost";
                break;
            case "preventLost":
                categoryCode="'4'";
                categoryCode = "'4'";
                break;
            case "preventFall":
                categoryCode="'12'";
                categoryCode = "'12'";
                break;
            case "preventFire":
                categoryCode="'15'";
                categoryCode = "'15'";
                break;
            case "preventGasLeakage":
                categoryCode="'14'";
                categoryCode = "'14'";
                break;
            case "preventOutOfBed":
                categoryCode="'13'";
                categoryCode = "'13'";
                break;
        }
        fliter =" and EXISTS (select 1 from wlyy_patient_device pd INNER JOIN dm_device dd on pd.device_id = dd.id  " +
                    " where  pd.user = sr.patient and pd.del=0 and pd.category_code in ("+categoryCode+") and FIND_IN_SET('"+topicItemTmp+"',dd.service_topic)) ";
        fliter = " and EXISTS (select 1 from wlyy_patient_device pd INNER JOIN dm_device dd on pd.device_id = dd.id  " +
                " where  pd.user = sr.patient and pd.del=0 and pd.category_code in (" + categoryCode + ") and FIND_IN_SET('" + topicItemTmp + "',dd.service_topic)) ";
        if ("preventLost".equals(topicItem)){//有绑定围栏的居民
        if ("preventLost".equals(topicItem)) {//有绑定围栏的居民
            fliter += " and EXISTS (select 1 from wlyy_patient_safe_area sf where sf.patient = p.id and sf.del=1 and sf.manage_status=1) ";
        }
        List<Map<String,Object>> list =  jdbcTemplate.queryForList(sql+fliter);
        result.put("total",list.size());
        if (1 == detail){//获取详情
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql + fliter);
        result.put("total", list.size());
        if (1 == detail) {//获取详情
            JSONArray monitorInfos = new JSONArray();
            page = page>0?page-1:0;
            page = page > 0 ? page - 1 : 0;
            Integer totalPage = 0;
            if(list.size()%pageSize==0){
                totalPage =list.size()/pageSize;
            }else{
                totalPage = list.size()/pageSize+1;
            if (list.size() % pageSize == 0) {
                totalPage = list.size() / pageSize;
            } else {
                totalPage = list.size() / pageSize + 1;
            }
            Integer currentIndexFrom = page*pageSize;
            Integer currentIndexEnd = page*pageSize+pageSize;
            result.put("totalPage",totalPage);
            result.put("currentPage",page+1);
            for (int i=currentIndexFrom;i<list.size()&&i<currentIndexEnd;i++){
                Map<String,Object> patientTmp = list.get(i);
            Integer currentIndexFrom = page * pageSize;
            Integer currentIndexEnd = page * pageSize + pageSize;
            result.put("totalPage", totalPage);
            result.put("currentPage", page + 1);
            for (int i = currentIndexFrom; i < list.size() && i < currentIndexEnd; i++) {
                Map<String, Object> patientTmp = list.get(i);
                com.alibaba.fastjson.JSONObject object = new com.alibaba.fastjson.JSONObject();
                String deviceSn ="";
                String deviceSn = "";
                List<String> deviceSns = jdbcTemplate.queryForList("select pd.device_sn from wlyy_patient_device pd INNER JOIN dm_device dd " +
                        " on pd.device_id = dd.id where  pd.user = '"+patientTmp.get("id").toString()+"' and pd.del=0  and pd.category_code in ("+categoryCode+") and FIND_IN_SET('"+topicItemTmp+"',dd.service_topic)",String.class);
                if (deviceSns.size()>0){
                        " on pd.device_id = dd.id where  pd.user = '" + patientTmp.get("id").toString() + "' and pd.del=0  and pd.category_code in (" + categoryCode + ") and FIND_IN_SET('" + topicItemTmp + "',dd.service_topic)", String.class);
                if (deviceSns.size() > 0) {
                    deviceSn = deviceSns.get(0);
                }
                if (deviceSns.size()>0){
                if (deviceSns.size() > 0) {
                    deviceSn = deviceSns.get(0);
                }
                object.put("deviceCode",deviceSn);
                object.put("deviceCode", deviceSn);
                switch (topicItem){
                switch (topicItem) {
                    case "actionTrack":
                        JSONArray locations = JSON.parseArray(JSON.toJSONString(patientDeviceService.getX1Locations(deviceSn, day), SerializerFeature.WriteMapNullValue));
                        object.put("routes", locations);
                        //获取手表定位
                        JSONObject response= patientDeviceService.getAqgDeviceInfo2(deviceSn);
                        if (response!=null) {
                        JSONObject response = patientDeviceService.getAqgDeviceInfo2(deviceSn);
                        if (response != null) {
                            //定位信息
                            if (response.containsKey("last_location") && response.get("last_location") != null) {
                                JSONObject locationTmp = response.getJSONObject("last_location");
@ -2240,31 +2261,192 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                        }
                        break;
                    default:
                        object = patientMonitoringInfo(patientTmp.get("id").toString(),topicItem,false);
                        object = patientMonitoringInfo(patientTmp.get("id").toString(), topicItem, false);
                        break;
                }
                object.put("patientInfo",patientTmp);
                object.put("patientInfo", patientTmp);
                monitorInfos.add(object);
            }
            result.put("topicInfo",monitorInfos);
        }else {
            result.put("topicInfo", monitorInfos);
        } else {
            JSONArray monitorInfos = new JSONArray();
            for (int i=0;i<list.size();i++){
                Map<String,Object> patientTmp = list.get(i);
                String deviceSn ="";
            for (int i = 0; i < list.size(); i++) {
                Map<String, Object> patientTmp = list.get(i);
                String deviceSn = "";
                List<String> deviceSns = jdbcTemplate.queryForList("select pd.device_sn from wlyy_patient_device pd INNER JOIN dm_device dd " +
                        " on pd.device_id = dd.id where  pd.user = '"+patientTmp.get("id").toString()+"' and pd.del=0  and pd.category_code in ("+categoryCode+") and FIND_IN_SET('"+topicItem+"',dd.service_topic)",String.class);
                if (deviceSns.size()>0){
                        " on pd.device_id = dd.id where  pd.user = '" + patientTmp.get("id").toString() + "' and pd.del=0  and pd.category_code in (" + categoryCode + ") and FIND_IN_SET('" + topicItem + "',dd.service_topic)", String.class);
                if (deviceSns.size() > 0) {
                    deviceSn = deviceSns.get(0);
                }
                JSONObject object  = patientMonitoringInfo(patientTmp.get("id").toString(),"null",false);
                object.put("deviceSn",deviceSn);
                object.put("patientInfo",patientTmp);
                JSONObject object = patientMonitoringInfo(patientTmp.get("id").toString(), "null", false);
                object.put("deviceSn", deviceSn);
                object.put("patientInfo", patientTmp);
                monitorInfos.add(object);
            }
            result.put("topicInfo",monitorInfos);
            result.put("topicInfo", monitorInfos);
        }
        return result;
    }
    public JSONObject findMonitorPatientsByDoctors(String topicItem, String day, Integer page, Integer pageSize, Integer detail) {
        JSONObject result = new JSONObject();
        String sql = " SELECT DISTINCT p.id,p.name,p.residential_area residentialArea,p.photo,p.idcard,p.mobile, " +
                " p.openid,p.sex,p.pad_imei padImei,p.home_lat_lon homeLatLon,p.lat_lon latLon " +
                " from base_patient p , base_service_package_sign_record sr,base_service_package_record r,base_team_member m  " +
                " WHERE p.id = sr.patient and sr.status=1 and m.team_code = r.team_code and sr.id=r.sign_id  " +
                " and m.del = '1' ";
        String fliter = "";
        String categoryCode = "";
        String topicItemTmp = topicItem;
        switch (topicItem) {
            case "actionTrack":
                categoryCode = "'4'";
                topicItemTmp = "preventLost";
                break;
            case "preventLost":
                categoryCode = "'4'";
                break;
            case "preventFall":
                categoryCode = "'12'";
                break;
            case "preventFire":
                categoryCode = "'15'";
                break;
            case "preventGasLeakage":
                categoryCode = "'14'";
                break;
            case "preventOutOfBed":
                categoryCode = "'13'";
                break;
            case "emergencyAssistance":
                categoryCode = "'7'";
                break;
        }
        if ("emergencyAssistance".equals(topicItem)) {
            fliter = " and EXISTS (select 1 from wlyy_patient_device pd INNER JOIN dm_device dd on pd.device_id = dd.id  " +
                    " where  pd.user = sr.patient and pd.del=0 and pd.category_code in ('7','4')) ";
        } else {
            fliter = " and EXISTS (select 1 from wlyy_patient_device pd INNER JOIN dm_device dd on pd.device_id = dd.id  " +
                    " where  pd.user = sr.patient and pd.del=0 and pd.category_code in (" + categoryCode + ") and FIND_IN_SET('" + topicItemTmp + "',dd.service_topic)) ";
        }
        if ("preventLost".equals(topicItem)) {//有绑定围栏的居民
            fliter += " and EXISTS (select 1 from wlyy_patient_safe_area sf where sf.patient = p.id and sf.del=1 and sf.manage_status=1) ";
        }
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql + fliter);
        result.put("total", list.size());
        if (1 == detail) {//获取详情
            JSONArray monitorInfos = new JSONArray();
            page = page > 0 ? page - 1 : 0;
            Integer totalPage = 0;
            if (list.size() % pageSize == 0) {
                totalPage = list.size() / pageSize;
            } else {
                totalPage = list.size() / pageSize + 1;
            }
            Integer currentIndexFrom = page * pageSize;
            Integer currentIndexEnd = page * pageSize + pageSize;
            result.put("totalPage", totalPage);
            result.put("currentPage", page + 1);
            for (int i = currentIndexFrom; i < list.size() && i < currentIndexEnd; i++) {
                Map<String, Object> patientTmp = list.get(i);
                com.alibaba.fastjson.JSONObject object = new com.alibaba.fastjson.JSONObject();
                String deviceSn = "";
                List<String> deviceSns = jdbcTemplate.queryForList("select pd.device_sn from wlyy_patient_device pd INNER JOIN dm_device dd " +
                        " on pd.device_id = dd.id where  pd.user = '" + patientTmp.get("id").toString() + "' and pd.del=0  and pd.category_code in (" + categoryCode + ") and FIND_IN_SET('" + topicItemTmp + "',dd.service_topic)", String.class);
                if (deviceSns.size() > 0) {
                    deviceSn = deviceSns.get(0);
                }
                if (deviceSns.size() > 0) {
                    deviceSn = deviceSns.get(0);
                }
                object.put("deviceCode", deviceSn);
                switch (topicItem) {
                    case "actionTrack":
                        JSONArray locations = JSON.parseArray(JSON.toJSONString(patientDeviceService.getX1Locations(deviceSn, day), SerializerFeature.WriteMapNullValue));
                        object.put("routes", locations);
                        //获取手表定位
                        JSONObject response = patientDeviceService.getAqgDeviceInfo2(deviceSn);
                        if (response != null) {
                            //定位信息
                            if (response.containsKey("last_location") && response.get("last_location") != null) {
                                JSONObject locationTmp = response.getJSONObject("last_location");
                                Double lon = locationTmp.getJSONArray("coordinates").getDouble(0);
                                Double lat = locationTmp.getJSONArray("coordinates").getDouble(1);
                                if (!response.getBoolean("online")) {//设备离线 取居民表定位
                                    object.put("X1online", false);
                                } else {
                                    object.put("X1online", true);
                                }
                                JSONObject tmp = gpsUtil.gcj02_To_Bd09(lat, lon);
                                tmp.put("city", response.getString("last_city"));
                                tmp.put("province", response.getString("last_province"));
                                tmp.put("address", response.getString("last_address"));
                                object.put("location", tmp);
                            }
                        }
                        break;
                    case "emergencyAssistance":
                        String id = (String) list.get(i).get("id");
                        String residentialArea = (String) list.get(i).get("residentialArea");
                        String SoSDeviceSql = "SELECT count(*)  FROM base_emergency_assistance_order WHERE `status` = '1' AND patient = '" + id + "'";
                        Integer integer = jdbcTemplate.queryForObject(SoSDeviceSql, int.class);
                        JSONObject tmp = new JSONObject();
                        if (integer > 0) {
                            tmp.put("eCall", 1);
                        } else {
                            tmp.put("eCall", 0);
                        }
                        BasePatientDO patientDO = basePatientDao.findById(id);
                        if (null != patientDO) {
                            if (StringUtils.isNotBlank(patientDO.getHomeLatLon())) {
                                String homeLatLon = patientDO.getHomeLatLon();
                                double homeLat = Double.parseDouble(homeLatLon.split(",")[0]);
                                double homeLon = Double.parseDouble(homeLatLon.split(",")[1]);
                                if (StringUtils.isNotBlank(patientDO.getLatLon())) {
                                    String[] latLon = patientDO.getLatLon().toString().split(",");
                                    double homeDistance = countDistance.getDistance(Double.parseDouble(latLon[0]), Double.parseDouble(latLon[1]),
                                            homeLat, homeLon);
                                    if (homeDistance > 50 * 1000) {
                                        tmp.put("atHome", false);
                                    } else {
                                        tmp.put("atHome", true);
                                    }
                                }
                            }
                        }
                        object.put("info", tmp);
                        break;
                    default:
                        object = patientMonitoringInfo(patientTmp.get("id").toString(), topicItem, false);
                        break;
                }
                object.put("patientInfo", patientTmp);
                monitorInfos.add(object);
            }
            result.put("topicInfo", monitorInfos);
        } else {
            JSONArray monitorInfos = new JSONArray();
            for (int i = 0; i < list.size(); i++) {
                Map<String, Object> patientTmp = list.get(i);
                String deviceSn = "";
                List<String> deviceSns = jdbcTemplate.queryForList("select pd.device_sn from wlyy_patient_device pd INNER JOIN dm_device dd " +
                        " on pd.device_id = dd.id where  pd.user = '" + patientTmp.get("id").toString() + "' and pd.del=0  and pd.category_code in (" + categoryCode + ") and FIND_IN_SET('" + topicItem + "',dd.service_topic)", String.class);
                if (deviceSns.size() > 0) {
                    deviceSn = deviceSns.get(0);
                }
                JSONObject object = patientMonitoringInfo(patientTmp.get("id").toString(), "null", false);
                object.put("deviceSn", deviceSn);
                object.put("patientInfo", patientTmp);
                monitorInfos.add(object);
            }
            result.put("topicInfo", monitorInfos);
        }
        return result;
    }
}

+ 11 - 3
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/statistics/DetectionPlatformService.java

@ -533,15 +533,24 @@ public class DetectionPlatformService  {
        return object;
    }
    public List<Map<String,Object >> findSignOlder(String doctorId){
    public List<Map<String,Object >> findSignOlder(){
        String sql=  "SELECT p.id,p.name,p.photo,p.idcard,CAST(IFNULL(p.birthday,'') AS char ) birthday,p.residential_area residentialArea,p.sex, " +
                " p.ykt_id yktId, case 1 WHEN p.openid is not null then 1 WHEN p.on_line = '1' then 1 ELSE 0 end as online,IFNULL(p.sign_status,0) signStatus "+
                " from base_service_package_sign_record sr,base_patient p,base_service_package_record r,base_team_member m " +
                "WHERE sr.status=1 and sr.patient = p.id and m.team_code = r.team_code and sr.id=r.sign_id " +
                "and m.doctor_code = '"+doctorId+"' and m.del = '1' and  p.del = '1' " +
                " and m.del = '1' and  p.del = '1' " +
                " GROUP BY p.id,p.name,p.photo,p.idcard,p.birthday,p.residential_area,p.sex,p.ykt_id,online,signStatus" +
                " ORDER BY online desc,p.ykt_id desc,signStatus desc ";
        /*String sql=  "SELECT p.id,p.name,p.photo,p.idcard,CAST(IFNULL(p.birthday,'') AS char ) birthday,p.residential_area residentialArea,p.sex, " +
                " p.ykt_id yktId, case 1 WHEN p.openid is not null then 1 WHEN p.on_line = '1' then 1 ELSE 0 end as online,IFNULL(p.sign_status,0) signStatus "+
                " from base_service_package_sign_record sr,base_patient p,base_service_package_record r,base_team_member m " +
                "WHERE sr.status=1 and sr.patient = p.id and m.team_code = r.team_code and sr.id=r.sign_id " +
                "and m.doctor_code = '"+doctorId+"' and m.del = '1' and  p.del = '1' " +
                " GROUP BY p.id,p.name,p.photo,p.idcard,p.birthday,p.residential_area,p.sex,p.ykt_id,online,signStatus" +
                " ORDER BY online desc,p.ykt_id desc,signStatus desc ";*/
//        String sql = "SELECT DISTINCT p.id,p.name,p.photo,p.idcard,p.mobile,p.openid,p.sex,p.pad_imei padImei,p.residential_area residentialArea  " +
//                " from base_service_package_sign_record sr,base_patient p,base_service_package_record r,base_team_member m " +
//                "WHERE sr.status=1 and sr.patient = p.id and m.team_code = r.team_code and sr.id=r.sign_id " +
@ -581,7 +590,6 @@ public class DetectionPlatformService  {
            map.put("security",security);
            map.put("devices",deviceList);
        }
        return list;
    }
}