package com.skyline.electricity.controller; import org.springframework.stereotype.*; import com.skyline.electricity.service.*; import org.springframework.beans.factory.annotation.*; import com.skyline.electricity.timer.*; import org.springframework.web.client.*; import java.nio.charset.*; import org.springframework.http.converter.*; import com.vividsolutions.jts.geom.*; import java.text.*; import com.alibaba.fastjson.*; import org.springframework.util.*; import com.vividsolutions.jts.io.*; import org.springframework.http.*; import org.springframework.web.bind.annotation.*; import java.util.*; import java.net.*; import java.io.*; import io.swagger.annotations.*; import com.skyline.electricity.pojo.*; import com.skyline.electricity.entity.*; import org.slf4j.*; @RequestMapping({ "/electricity" }) @Controller @Api("基于Swagger的电力区域报警系统") @CrossOrigin public class DetectController { private static Logger log; @Autowired private DetectService detectService; @Autowired private SchedulerTask schedulerTask; @Autowired private ConfigInfo configInfo; GeometryFactory geometryFactory; WKTReader reader; public DetectController() { this.geometryFactory = new GeometryFactory(); this.reader = new WKTReader(this.geometryFactory); } @RequestMapping(value = { "/getAlarmInfo" }, method = { RequestMethod.POST }) @ApiOperation("实时判断电子围栏和人员定位的位置关系并存储预警信息") public void getAlarmInfo() { this.schedulerTask.getInfo(); } @RequestMapping(value = { "/saveFixedFence" }, method = { RequestMethod.POST }) @ApiOperation("保存固定电子围栏信息以及返回围栏重叠信息") @ResponseBody public String saveFixedFence(@RequestBody final FencePosition fence) { final RestTemplate restTemplate = new RestTemplate(); final String url = this.configInfo.getSafeSystem_ip()+ "/a/in/api/woWt/saveInElectronicFence"; restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); final HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); final GeometryFactory geometryFactory = new GeometryFactory(); final WKTReader reader = new WKTReader(geometryFactory); try { final Polygon polygon = (Polygon)reader.read("POLYGON(("+ fence.getFenceposition() + "))"); final Map map = new HashMap(); map.put("polygon", polygon.toString()); final FencePosition fencePosition = new FencePosition(); fencePosition.setFenceposition(polygon.toString()); fencePosition.setCreatetime(new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date())); fencePosition.setWorkId(fence.getWorkId()); fencePosition.setFname(fence.getFname()); fencePosition.setStartaltitude(fence.getStartaltitude()); fencePosition.setEndaltitude(fence.getEndaltitude()); fencePosition.setStatus("enabled"); fencePosition.setType("fixed"); final FenceDto fenceDto = new FenceDto(); fenceDto.setWorkId(fence.getWorkId()); fenceDto.setFname(fence.getFname()); final String json = JSON.toJSONString((Object)fenceDto); final HttpEntity> request = (HttpEntity>)new HttpEntity((Object)json, (MultiValueMap)headers); final ResponseEntity responseEntity = (ResponseEntity)restTemplate.postForEntity(url, (Object)request, (Class)String.class, new Object[0]); final FencePosition existPosition = this.detectService.selectPolygon(fencePosition); final List list = (List)this.detectService.getFenceInfo(fence.getWorkId()); if (existPosition == null) { this.detectService.insertPolygon(fencePosition); } else { this.detectService.updateFenceById(fencePosition); } final List info = new ArrayList(); for (int i = 0; i < list.size(); ++i) { final Polygon py = (Polygon)reader.read("POLYGON((" + list.get(i).getFenceposition() +"))"); map.put("py", py.toString()); final String flag = this.detectService.intersects((Map)map); final boolean remark = fence.getEndaltitude() < list.get(i).getStartaltitude() | fence.getStartaltitude() > list.get(i).getEndaltitude(); if (flag.equals("t") && !remark) { info.add("当前围栏与围栏"+ list.get(i).getWorkId() + "发生重叠"); } } return info.toString(); } catch (Exception e) { e.printStackTrace(); return null; } } @RequestMapping(value = { "/saveTempFence" }, method = { RequestMethod.POST }) @ApiOperation("保存临时电子围栏信息以及返回围栏重叠信息") @ResponseBody public String saveTempFence(@RequestBody final FencePosition fence) { final RestTemplate restTemplate = new RestTemplate(); final String url = this.configInfo.getSafeSystem_ip()+ "/a/in/api/woWt/saveInElectronicFence"; restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); final HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); final GeometryFactory geometryFactory = new GeometryFactory(); final WKTReader reader = new WKTReader(geometryFactory); try { final Polygon polygon = (Polygon)reader.read("POLYGON(("+ fence.getFenceposition() + "))"); final Map map = new HashMap(); map.put("polygon", polygon.toString()); final FencePosition fencePosition = new FencePosition(); fencePosition.setFenceposition(polygon.toString()); fencePosition.setCreatetime(new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date())); fencePosition.setWorkId(fence.getWorkId()); fencePosition.setFname(fence.getFname()); fencePosition.setStartaltitude(fence.getStartaltitude()); fencePosition.setEndaltitude(fence.getEndaltitude()); fencePosition.setStatus("disabled"); fencePosition.setType("temp"); final FenceDto fenceDto = new FenceDto(); fenceDto.setWorkId(fence.getWorkId()); fenceDto.setFname(fence.getFname()); final String json = JSON.toJSONString((Object)fenceDto); final HttpEntity> request = (HttpEntity>)new HttpEntity((Object)json, (MultiValueMap)headers); final ResponseEntity responseEntity = (ResponseEntity)restTemplate.postForEntity(url, (Object)request, (Class)String.class, new Object[0]); final FencePosition existPosition = this.detectService.selectPolygon(fencePosition); final List list = (List)this.detectService.getFenceInfo(fence.getWorkId()); final List info = new ArrayList(); if (fence.getUserId() != null) { FenceTemp ft = this.detectService.queryFenceTemp(fence.getWorkId(), fence.getUserId()); if (ft != null) { info.add("当前围栏"+ fence.getWorkId() + "发生重叠人员" + fence.getUserId()); } else { ft = new FenceTemp(); ft.setType("temp"); ft.setUserId(fence.getUserId()); ft.setWorkId(fence.getWorkId()); this.detectService.insetFenceTemp(ft); } } if (existPosition == null) { this.detectService.insertPolygon(fencePosition); } else { this.detectService.updateFenceById(fencePosition); } for (int i = 0; i < list.size(); ++i) { final Polygon py = (Polygon)reader.read("POLYGON((" + list.get(i).getFenceposition() + "))"); map.put("py", py.toString()); final String flag = this.detectService.intersects((Map)map); final boolean remark = fence.getEndaltitude() < list.get(i).getStartaltitude() | fence.getStartaltitude() > list.get(i).getEndaltitude(); if (flag.equals("t") && !remark) { info.add("当前围栏与围栏" + list.get(i).getWorkId() + "发生重叠"); } } return info.toString(); } catch (Exception e) { e.printStackTrace(); return null; } } @RequestMapping(value = { "/getRoute" }, method = { RequestMethod.POST }) @ApiImplicitParam(paramType = "query", name = "username", value = "人员姓名", required = true, dataType = "String") @ApiOperation("获取人员活动轨迹") @ResponseBody public String getRoute(final String username) { final List route = (List)this.detectService.getRoute(username); return route.toString(); } @RequestMapping(value = { "/getWifiInfo" }, method = { RequestMethod.POST }) @ApiOperation("获取Wifi设备坐标") @ResponseBody public Object getWifiInfo() { final List list = (List)this.detectService.getWifiInfo(); final List dtoList = new ArrayList(); for (final Wifi wifi : list) { final WifiDto dto = new WifiDto(); final String[] gemo = wifi.getGemo().split(" "); final String compoint = gemo[0]+ " " + gemo[1]; final String[] newgemo = this.detectService.transLocation(compoint).split(" "); dto.setGid(wifi.getGid()); dto.setAltitude(gemo[2]); dto.setLongitude(newgemo[0]); dto.setLatitude(newgemo[1]); dto.setDesc(wifi.getTe_desc()); dtoList.add(dto); } final Map map = new HashMap(); map.put("data", dtoList); return map; } @RequestMapping(value = { "/getMonitorInfo" }, method = { RequestMethod.POST }) @ApiOperation("获取摄像头设备坐标") @ResponseBody public Object getMonitorInfo() { final List list = (List)this.detectService.getMonitorInfo(); final List dtoList = new ArrayList(); for (final Monitor monitor : list) { final MonitorDto dto = new MonitorDto(); final String[] gemo = monitor.getGemo().split(" "); final String compoint = gemo[0]+ " " + gemo[1]; final String[] newgemo = this.detectService.transLocation(compoint).split(" "); dto.setGid(monitor.getGid()); dto.setAltitude(gemo[2]); dto.setLongitude(newgemo[0]); dto.setLatitude(newgemo[1]); dto.setDesc(monitor.getTe_desc()); dto.setRegionPath(monitor.getRegionPath()); dto.setCameraName(monitor.getCameraName()); dto.setCameraIndex(monitor.getCameraIndex()); dto.setTransPtz(monitor.getTransPtz()); dto.setStatus(monitor.getStatus()); dtoList.add(dto); } final Map map = new HashMap(); map.put("data", dtoList); return map; } @RequestMapping(value = { "/getMonitorDeviceInfo" }, method = { RequestMethod.POST }) @ApiOperation("获取摄像头设备信息") @ResponseBody public Object getMonitorDeviceInfo() { final List list = (List)this.detectService.getMonitorDeviceInfo(); for (final MonitorInfo monitorInfo : list) { if (monitorInfo.getAisle_no() != null) { monitorInfo.setAisle_no(monitorInfo.getAisle_no().trim()); } if (monitorInfo.getAisle_type() != null) { monitorInfo.setAisle_type(monitorInfo.getAisle_type().trim()); } if (monitorInfo.getBelong_device() != null) { monitorInfo.setBelong_device(monitorInfo.getBelong_device().trim()); } if (monitorInfo.getMonitor_name() != null) { monitorInfo.setMonitor_name(monitorInfo.getMonitor_name().trim()); } if (monitorInfo.getMonitor_type() != null) { monitorInfo.setMonitor_type(monitorInfo.getMonitor_type().trim()); } } final Map map = new HashMap(); map.put("data", list); return map; } @RequestMapping(value = { "/getMonitorDeviceInfoById" }, method = { RequestMethod.POST }) @ApiOperation("通过ID获取摄像头设备信息") @ResponseBody public Object getMonitorDeviceInfoById(final String cameraIndex) { final List list = (List)this.detectService.getMonitorDeviceInfoById(cameraIndex); for (final MonitorInfo monitorInfo : list) { if (monitorInfo.getAisle_no() != null) { monitorInfo.setAisle_no(monitorInfo.getAisle_no().trim()); } if (monitorInfo.getAisle_type() != null) { monitorInfo.setAisle_type(monitorInfo.getAisle_type().trim()); } if (monitorInfo.getBelong_device() != null) { monitorInfo.setBelong_device(monitorInfo.getBelong_device().trim()); } if (monitorInfo.getMonitor_name() != null) { monitorInfo.setMonitor_name(monitorInfo.getMonitor_name().trim()); } if (monitorInfo.getMonitor_type() != null) { monitorInfo.setMonitor_type(monitorInfo.getMonitor_type().trim()); } } final Map map = new HashMap(); map.put("data", list); return map; } @RequestMapping(value = { "/getDoorAccessInfo" }, method = { RequestMethod.POST }) @ApiOperation("获取门禁设备坐标") @ResponseBody public Object getDoorAccessInfo() { final List list = (List)this.detectService.getDoorAccessInfo(); final Map map = new HashMap(); map.put("data", list); return map; } @RequestMapping(value = { "/getEnabledFenceInfo" }, method = { RequestMethod.POST }) @ApiOperation("获取有效的电子围栏信息") @ResponseBody public Object getEnabledFenceInfo() { final List list = (List)this.detectService.getFenceInfoByStatus(); final Map map = new HashMap(); map.put("data", list); return map; } @RequestMapping(value = { "/getFixedFenceInfo" }, method = { RequestMethod.POST }) @ApiOperation("获取固定的电子围栏信息") @ResponseBody public Object getFixedFenceInfo() { final List list = (List)this.detectService.getFixedFenceInfo(); final Map map = new HashMap(); map.put("data", list); return map; } @RequestMapping(value = { "/getFenceInfoById" }, method = { RequestMethod.POST }) @ApiImplicitParam(paramType = "query", name = "workId", value = "工作票ID", required = true, dataType = "String") @ApiOperation("根据工作票ID获取电子围栏信息") @ResponseBody public Object getFenceInfoById(final String workId) { final List list = (List)this.detectService.getFenceInfoById(workId); final Map map = new HashMap(); map.put("data", list); return map; } @RequestMapping(value = { "/updateFenceInfo" }, method = { RequestMethod.POST }) @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", name = "fname", value = "电子围栏名称", required = false, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "workId", value = "工作票ID", required = true, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "workLeader", value = "工作票负责人", required = false, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "starttime", value = "电子围栏生效时间", required = false, dataType = "String"), @ApiImplicitParam(paramType = "query", name = "disabledtime", value = "电子围栏失效时间", required = false, dataType = "String") }) @ApiOperation("更新电子围栏信息") @ResponseBody public Object updateFenceInfo(final FencePosition fencePosition) { final Result result = new Result(); DetectController.log.warn("更新围栏操作"+ fencePosition.toString()); if (fencePosition.getWorkLeader() != null && fencePosition.getWorkLeader() != "") { this.detectService.updateFenceTemp(fencePosition.getWorkId(), fencePosition.getWorkLeader()); } final List list = (List)this.detectService.getFenceInfoById(fencePosition.getWorkId()); if (list.size() < 1) { result.setStatus("warning"); result.setMessage("输入的工作票ID不存在 请输入已存在的围栏工作票ID"); return result; } if (fencePosition.getFname() != null) { try { URLDecoder.decode(fencePosition.getFname(), "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } final int flag = this.detectService.updateFenceInfo(fencePosition); if (fencePosition.getStarttime() != null && fencePosition.getDisabledtime() == null) { if (new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()).compareTo(fencePosition.getStarttime()) >= 0) { this.detectService.setEnabled(fencePosition.getWorkId()); } } else if (fencePosition.getStarttime() != null && fencePosition.getDisabledtime() != null && new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()).compareTo(fencePosition.getDisabledtime()) <= 0 && new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date()).compareTo(fencePosition.getStarttime()) >= 0) { this.detectService.changeFenceStatus(fencePosition.getWorkId()); } if (flag == 1) { result.setStatus("success"); result.setMessage("更新成功"); return result; } result.setStatus("failure"); result.setMessage("输入的围栏相关信息有误 更新失败"); return result; } @RequestMapping(value = { "/deleteFenceById" }, method = { RequestMethod.POST }) @ApiImplicitParam(paramType = "query", name = "workId", value = "工作票ID", required = true, dataType = "String") @ApiOperation("根据工作票ID删除电子围栏信息") @ResponseBody public Object deleteFenceById(final String workId) { final Result result = new Result(); this.detectService.deleteFenceTemp(workId); final List list = (List)this.detectService.getFenceInfoById(workId); if (list.size() < 1) { result.setStatus("warning"); result.setMessage("输入的工作票ID不存在 请输入已存在的围栏工作票ID"); return result; } final int flag = this.detectService.deleteFenceById(workId); if (flag == 1) { result.setStatus("success"); result.setMessage("删除成功"); return result; } result.setStatus("failure"); result.setMessage("删除失败"); return result; } @RequestMapping(value = { "/deleteFence" }, method = { RequestMethod.POST }) @ApiOperation("删除所有电子围栏信息") @ResponseBody public Object deleteFence() { final Result result = new Result(); final int flag = this.detectService.deleteFence(); if (flag != 0) { result.setStatus("success"); result.setMessage("删除成功"); return result; } result.setStatus("failure"); result.setMessage("删除失败"); return result; } @RequestMapping(value = { "/getDeviceInfo" }, method = { RequestMethod.POST }) @ApiOperation("获取设备的相关信息") @ResponseBody public Object getDeviceInfo() { final List list = (List)this.detectService.getDeviceInfo(); for (final DeviceInfo deviceInfo : list) { final String[] gemo = deviceInfo.getGemo().split(" "); final String compoint = gemo[0]+ " " + gemo[1]; final String[] point = this.detectService.transLocation(compoint).split(" "); deviceInfo.setGemo(point[0]+ " " + point[1]); } final Map map = new HashMap(); map.put("list", list); return map; } @RequestMapping(value = { "/getDeviceInfoById" }, method = { RequestMethod.GET }) @ApiOperation("根据KKS编码获取设备的相关信息") @ResponseBody public Object getDeviceInfoById(final String device_id) { final DeviceInfo deviceInfo = this.detectService.getDeviceInfoById(device_id); if (deviceInfo != null) { final String[] gemo = deviceInfo.getGemo().split(" "); final String compoint = gemo[0]+ " " + gemo[1]; final String[] point = this.detectService.transLocation(compoint).split(" "); deviceInfo.setGemo(point[0]+ " " + point[1]); final Map map = new HashMap(); map.put("list", deviceInfo); return map; } final Result result = new Result(); result.setStatus("failure"); result.setMessage("输入的设备ID不存在 无法查询相应的数据"); return result; } @RequestMapping(value = { "/selectFencePersonRelByworkid" }, method = { RequestMethod.GET }) @ApiOperation("根据workid获取围栏内的人员信息") @ResponseBody public Object selectFencePersonRelByworkid(final String workid) { final List> list = (List>)this.detectService.selectFencePersonRelByworkid(workid); Result result; if (list.size() != 0) { result = new Result(); result.setCode(Integer.valueOf(0)); result.setCount(Integer.valueOf(list.size())); result.setStatus("success"); result.setMessage("查询成功"); result.setData((Object)list); } else { result = new Result(); result.setCode(Integer.valueOf(-1)); result.setCount(Integer.valueOf(0)); result.setStatus("failure"); result.setMessage("无围栏内人员信息"); result.setData((Object)null); } return result; } @RequestMapping(value = { "/selectFenceAndfixedArea" }, method = { RequestMethod.GET }) @ApiOperation("获取围栏和固定区域列表") @ResponseBody public Object selectAllfixedareaPerson(final String type) { final List templist = new ArrayList(); final List fixedlist = new ArrayList(); final List fixedArealist = new ArrayList(); FencePositionList fencePositionList; try { final List list = (List)this.detectService.selectFenceAndfixedArea(); for (final FencePosition fencePosition : list) { if (fencePosition.getPersoncount() == null) { fencePosition.setPersoncount(Integer.valueOf(0)); } if ("temp".equals(fencePosition.getType())) { fencePosition.setType("临时围栏"); templist.add(fencePosition); } if ("fixed".equals(fencePosition.getType())) { fencePosition.setType("电子围栏"); fixedlist.add(fencePosition); } } final String glpoly = this.configInfo.getGl(); final String qjpoly = this.configInfo.getQj(); double startaltitude = 0.0; double endaltitude = 6.3; for (int i = 1; i < 4; ++i) { final FencePosition fencePosition2 = new FencePosition(); fencePosition2.setStartaltitude(startaltitude); fencePosition2.setEndaltitude(endaltitude); fencePosition2.setFenceposition(glpoly); fencePosition2.setFname("汽机"+ i + "层"); fencePosition2.setWorkId("qj" + i); final List> personlist = (List>)this.detectService.selectFencePersonRelByworkid(fencePosition2.getWorkId()); fencePosition2.setPersoncount(Integer.valueOf(personlist.size())); fencePosition2.setType("固定区域"); startaltitude = 6.3; endaltitude = 6.3; fixedArealist.add(fencePosition2); list.add(fencePosition2); } startaltitude = 0.0; endaltitude = 6.3; for (int i = 1; i < 3; ++i) { final FencePosition fencePosition2 = new FencePosition(); fencePosition2.setStartaltitude(startaltitude); fencePosition2.setEndaltitude(endaltitude); fencePosition2.setFenceposition(glpoly); fencePosition2.setType("固定区域"); if (i == 2) { fencePosition2.setFname("锅炉3层"); fencePosition2.setWorkId("gl3"); } else { fencePosition2.setWorkId("gl"+ i); fencePosition2.setFname("锅炉" + i + "层"); } final List> personlist = (List>)this.detectService.selectFencePersonRelByworkid(fencePosition2.getWorkId()); fencePosition2.setPersoncount(Integer.valueOf(personlist.size())); startaltitude = 12.6; endaltitude = 12.6; fixedArealist.add(fencePosition2); list.add(fencePosition2); } fencePositionList = new FencePositionList(); fencePositionList.setCode(0); fencePositionList.setCount(list.size()); switch (type) { case "temp": { fencePositionList.setData(templist); break; } case "fixed": { fencePositionList.setData(fixedlist); break; } case "fixedArea": { fencePositionList.setData(fixedArealist); break; } } fencePositionList.setMsg("查询成功"); } catch (Exception e) { fencePositionList = new FencePositionList(); fencePositionList.setCode(-1); fencePositionList.setCount(0); fencePositionList.setData(null); fencePositionList.setMsg("查询成功"); } return fencePositionList; } @RequestMapping(value = { "/saveFence_yq" }, method = { RequestMethod.POST }) @ApiOperation("保存区域信息") @ResponseBody public String saveFence_yq(@RequestBody final FencePosition fence) { final RestTemplate restTemplate = new RestTemplate(); restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); final HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); final GeometryFactory geometryFactory = new GeometryFactory(); final WKTReader reader = new WKTReader(geometryFactory); try { final Polygon polygon = (Polygon)reader.read("POLYGON(("+ fence.getFenceposition() + "))"); final Map map = new HashMap(); map.put("polygon", polygon.toString()); final FencePosition fencePosition = new FencePosition(); fencePosition.setFenceposition(polygon.toString()); fencePosition.setFname(fence.getFname()); fencePosition.setType(fence.getType()); fencePosition.setHeight(fence.getHeight()); this.detectService.insertPolygon_yq(fencePosition); return ""; } catch (Exception e) { e.printStackTrace(); return null; } } @RequestMapping(value = { "/saveFix" }, method = { RequestMethod.POST }) @ApiOperation("保存区域信息") @ResponseBody public String saveFix(final String fence, final String name, final double start, final double end, final String workid) { final GeometryFactory geometryFactory = new GeometryFactory(); final WKTReader reader = new WKTReader(geometryFactory); Polygon polygon = null; try { polygon = (Polygon)reader.read("POLYGON(("+ fence + "))"); } catch (Exception e) { e.printStackTrace(); } System.out.println(polygon.toString()); final FencePosition fencePosition = new FencePosition(); fencePosition.setFenceposition(polygon.toString()); fencePosition.setCreatetime(new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date())); fencePosition.setWorkId(workid); fencePosition.setFname(name); fencePosition.setStartaltitude(start); fencePosition.setEndaltitude(end); fencePosition.setStatus("enabled"); fencePosition.setType("fixed"); this.detectService.insertPolygon(fencePosition); return "ok"; } static { DetectController.log = LoggerFactory.getLogger((Class)DetectController.class); } }