package com.moral.controller; import static com.moral.common.util.ResourceUtil.getValue; import static com.moral.common.util.WebUtils.getParametersStartingWith; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.util.*; import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import com.moral.entity.alarm.AlarmConfig; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.net.ftp.FTPClient; import org.apache.log4j.Logger; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.springframework.beans.factory.annotation.Value; import org.springframework.cglib.beans.BeanMap; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; import org.xml.sax.InputSource; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.moral.common.bean.Constants; import com.moral.common.bean.JsonData; import com.moral.common.bean.PageResult; import com.moral.common.bean.ResultBean; import com.moral.common.util.ValidateUtil; import com.moral.common.xml.Version; import com.moral.entity.Account; import com.moral.entity.Device; import com.moral.entity.MapBounds; import com.moral.entity.MonitorPoint; import com.moral.entity.alarm.AlarmConfigValue; import com.moral.entity.alarm.AlarmSensorLevel; import com.moral.service.AccountService; import com.moral.service.AlarmConfigService; import com.moral.service.AlarmDailyService; import com.moral.service.AreaService; import com.moral.service.DeviceService; import com.moral.service.HistoryMinutelyService; import com.moral.service.HistoryService; import com.moral.service.MachineActivateService; import com.moral.service.MonitorPointService; import com.moral.service.SensorService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; /** * The Class ScreenController.大屏接口 */ @RestController @RequestMapping("/screen") //@CrossOrigin(origins = "*", maxAge = 3600) @SuppressWarnings({ "rawtypes", "unchecked", "unused" }) @Api(tags = "Screen", description = "大屏相关") public class ScreenController { public static Logger log = Logger.getLogger(ScreenController.class); @Resource AlarmConfigService alarmConfigService; @Resource AreaService areaService; @Resource SensorService sensorService; @Resource MonitorPointService monitorPointService; /** The screen service. */ @Resource private HistoryService historyService; /** The account service. */ @Resource private AccountService accountService; /** The device service. */ @Resource private DeviceService deviceService; @Resource private HistoryMinutelyService historyMinutelyService; @Resource private MachineActivateService machineActivateService; /** The resource. */ @Value(value = "classpath:system/alarmLevels.json") private org.springframework.core.io.Resource resource; /** The redis template. */ @Resource private RedisTemplate redisTemplate; /** The level key. */ private String levelKey = "alarm_"; @Resource private AlarmDailyService alarmDailyService; /** * Screen login. 大屏登录 * * @param request * the request * @return the map */ @GetMapping("login") public Map screenLogin(HttpServletRequest request) { Map resultMap = new HashMap(); Map parameters = getParametersStartingWith(request, null); if (!(parameters.containsKey("account") && parameters.containsKey("password"))) { resultMap.put("msg", "用户名及密码不允许为空!"); resultMap.put("accountId", -1); } else { resultMap = accountService.screenLogin(parameters); } return resultMap; } /** * Gets the equipment states. 获取该账号下所有设备的状态 * * @param request * the request * @return the equipment states */ @GetMapping("/equipment-state") @PreAuthorize("hasAnyRole('USER', 'ADMIN')") public Map getDeviceStatesByAccount(HttpServletRequest request) { Map parameters = getParametersStartingWith(request, null); return deviceService.getDeviceStatesByAccount(parameters); } /** * Gets the alarm levels. 获取报警配置 * * @param request * the request * @return the alarm levels */ @GetMapping("alarm-levels") public Object getAlarmLevels(HttpServletRequest request, Optional orgId, Optional mpId) { List> sensorAlarmList = null; try { AlarmConfig alarmConfig = null; if(orgId.isPresent()){ alarmConfig = alarmConfigService.queryValueByOrganizationId(orgId.get()).get(); }else if(mpId.isPresent()){ alarmConfig = alarmConfigService.queryByMonitorPointId(mpId.get()).get(); } //返回值处理 if(alarmConfig.getValue()!=null&&alarmConfig.getValue().getAlarmLevels()!=null){ Map alarmLevelMap = alarmConfig.getValue().getAlarmLevels(); // 当前非取默认值,未设值将用默认值覆盖 Map defaultSensorLevelMap = null; if(alarmConfig.getId()!=null){ AlarmConfigValue defaultAlarmValue = alarmConfigService.getDefaultAlarmConfigValue(); defaultSensorLevelMap = defaultAlarmValue.getAlarmLevels(); } Map finalDefaultSensorLevelMap = defaultSensorLevelMap; alarmLevelMap.entrySet().stream().forEach(entry -> { //当 increment都为0时,替换为默认值 AlarmSensorLevel alarmSensorLevel = entry.getValue(); if(alarmSensorLevel.getIncrement()!=null){ boolean isAllZero = alarmSensorLevel.getIncrement().stream().allMatch(item -> item == 0); if(isAllZero){ AlarmSensorLevel defaultAlarmSensorLevel = finalDefaultSensorLevelMap==null?null:finalDefaultSensorLevelMap.get(entry.getKey()); if(defaultAlarmSensorLevel!=null){ alarmSensorLevel.setIncrement(defaultAlarmSensorLevel.getIncrement()); }else{ List tempList = Arrays.asList(0.0f,200.0f,500.0f); alarmSensorLevel.setIncrement(tempList); } } } }); //map to list Map finalAlarmLevelMap = alarmLevelMap; sensorAlarmList = alarmLevelMap.keySet().stream().map(key -> { AlarmSensorLevel alarmSensorLevel = finalAlarmLevelMap.get(key); Map alarmSensorLevelMap = new HashMap<>(BeanMap.create(alarmSensorLevel)); alarmSensorLevelMap.put("key",key); return alarmSensorLevelMap; }).collect(Collectors.toList()); }else{ return new ResultBean<>("提供参数有误,未查询到任何数据",ResultBean.FAIL); } } catch (Exception e) { e.printStackTrace(); Map err = new LinkedHashMap(); err.put("msg", "系统错误,请联系管理员!原因如下:" + e.getMessage()); return err; } return sensorAlarmList; } /** * Gets the standard by sensor.获取某传感器标准值 * * @param macKey * the request * @return the standard by sensor */ @GetMapping("sensor-standard") public Map getStandardBySensor(@RequestParam("macKey") String macKey) { ValidateUtil.notEmpty(macKey, "param.is.null"); Map result = new HashMap(); result.put("standard", getValue(macKey + "-standard")); return result; } /** * Gets the day AQI by sensor.设备昨日的AQI指标 * * @param request * the request * @return the day AQI by sensor */ @GetMapping("day-aqi") public Map getDayAQIByDevice(HttpServletRequest request) { Map parameters = getParametersStartingWith(request, null); return historyMinutelyService.getDayAQIByDevice(parameters); } /** * Gets the average by all. 获取某账号某区域10分钟前到5分钟前所有传感器平均数值排名 * * @param request * the request * @return the average by all * @throws Exception */ @GetMapping("all-average") public Map getAllSensorAverageByDevice(HttpServletRequest request) throws Exception { Map parameters = getParametersStartingWith(request, null); return historyService.getAllSensorAverageByDevice(parameters); } /** * Gets the average by sensor.某个传感器一小时内所有设备排名 * * @param request * the request * @return the average by sensor */ @GetMapping("sensor-average") public Map getDeviceRankingBySensorAverage(HttpServletRequest request) { Map parameters = getParametersStartingWith(request, null); return historyService.getDeviceRankingBySensorAverage(parameters); } /** * Gets the month average by sensor.设备传感器本月平均值 * * @param request * the request * @return the month average by sensor */ @GetMapping("month-sensor-average") public Map getMonthAverageBySensor(HttpServletRequest request) { Map parameters = getParametersStartingWith(request, null); return historyMinutelyService.getMonthAverageBySensor(parameters); } @GetMapping("check-activate") public ResultBean checkActivate(String macCpuCode) { Integer result = machineActivateService.checkActivate(macCpuCode); return new ResultBean(result); } @PostMapping("activate-machine") public ResultBean activateMachine(HttpServletRequest request) { Map parameters = getParametersStartingWith(request, null); Integer result = machineActivateService.activateMachine(parameters); return new ResultBean(result); } /********************************************* * 大屏程序在线升级配置读取 *********************************************/ private String fileName = "Version.xml"; private String ip = "47.96.19.115"; private String userName = "ftp_user"; private String userPwd = "qwer1234"; private int port = 21; private String path = "/"; @RequestMapping(value = "/upgrade", method = RequestMethod.GET) public Version index() { Version version = new Version(); FTPClient ftpClient = new FTPClient(); try { ftpClient.connect(ip, port); ftpClient.login(userName, userPwd); ftpClient.changeWorkingDirectory(path); ftpClient.enterLocalPassiveMode(); //ftpClient.enterLocalActiveMode(); InputStream ins = ftpClient.retrieveFileStream(fileName); BufferedReader reader = new BufferedReader(new InputStreamReader(ins,"utf-8")); String line; StringBuilder builder = new StringBuilder(); while ((line = reader.readLine()) != null) { builder.append(line); } reader.close(); if (ins != null) { ins.close(); } ftpClient.getReply(); String content = builder.toString(); if(ftpClient.isConnected()) { ftpClient.logout(); ftpClient.disconnect(); } // String urlStr = "http://www.7drlb.com/apps/Version.xml"; // URL realUrl = new URL(urlStr); // URLConnection connection = realUrl.openConnection(); // connection.connect(); // StringBuffer result = new StringBuffer(); // BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8")); // String line; // while ((line = in.readLine()) != null) { // result.append(line); // } // String content = result.toString(); SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new InputSource(new ByteArrayInputStream(content.getBytes("utf-8")))); Element root = document.getRootElement(); version.setVer(root.element("Ver").getText()); version.setFileName(root.element("FileName").getText()); version.setFileMD5Hash(root.element("FileMD5Hash").getText()); } catch (Exception e) { e.printStackTrace(); } return version; } public static void main(String[] args) { ScreenController sc = new ScreenController(); Version a = sc.index(); System.out.println(a.getVer()); } /** * 地图接口 * 开始 */ /** * 地图主页 * @param model * @param code * @param accountId * @return */ @RequestMapping(value = "/map-page", method = RequestMethod.GET) public ModelAndView map(ModelAndView model, @RequestParam("areaCode")int code, @RequestParam("accountId")int accountId){ Account account = accountService.getAccountById(accountId); String regionName = areaService.queryFullNameByCode(code); if(account!=null&®ionName!=null){ Object sensors = sensorService.queryAll(); JSONObject params = new JSONObject(); params.put("regionCode",code); params.put("regionName",regionName); params.put("accountId", accountId); params.put("orgId", account.getOrganizationId()); params.put("sensors", sensors); String paramsJson = params.toJSONString(); model.addObject("mapParams",paramsJson); model.setViewName("map"); return model; } else { StringBuilder msg = new StringBuilder(); msg.append(" param[0] areaCode:"); msg.append(code); msg.append(" param[0] accountId:"); msg.append(accountId); log.warn(msg); model.setViewName("403"); return model; } } @RequestMapping(value="/get-monitorpoints",method = RequestMethod.GET) @ResponseBody public ResultBean getMonitorpointList(@RequestParam("orgId")String orgId,MapBounds mapBounds){ ResultBean> resultBean = new ResultBean(); Map paramMap = new HashMap(); paramMap.put("orgId", orgId); paramMap.put("mapBounds",mapBounds); List list = monitorPointService.queryWithStateByMap(paramMap); resultBean.setData(list); resultBean.setCode(ResultBean.SUCCESS); return resultBean; } @RequestMapping(value="/get-devices",method = RequestMethod.GET) @ResponseBody public ResultBean getDevices(@RequestParam("orgId")Integer orgId,MapBounds mapBounds){ ResultBean> resultBean = new ResultBean(); Map paramMap = new HashMap(); paramMap.put("orgId", orgId); paramMap.put("mapBounds",mapBounds); List list = deviceService.query(paramMap); resultBean.setData(list); resultBean.setCode(ResultBean.SUCCESS); return resultBean; } @RequestMapping(value = "get-devices-for-popup",method = RequestMethod.GET) @ResponseBody public PageResult getDevicesForPopup( @RequestParam("orgId")Integer orgId, String name, Integer pageSize, Integer pageNo ){ return deviceService.query(orgId,name,pageSize,pageNo); } @RequestMapping(value = "get-devices-by-mid-oid",method = RequestMethod.GET) @ResponseBody public PageResult getDevicesByMidOid( @RequestParam("orgId")Integer orgId, @RequestParam("mpId")Integer mpId, Integer pageSize, Integer pageNo ){ return deviceService.query(orgId,mpId,pageSize,pageNo); } @RequestMapping(value="/get-real-state-data",method = RequestMethod.POST) @ResponseBody public JsonData getRealStateAndData(@RequestBody JSONObject paramMap){ JsonData jsonData = new JsonData(); Map returnMap = new HashMap(); returnMap.put("layer", paramMap.getString("layer")); //覆盖控件的数据刷新 if(!CollectionUtils.isEmpty(paramMap.getJSONArray("markerKeys"))) { JSONArray markerKeys = paramMap.getJSONArray("markerKeys"); List> markers = null; if("equipments".equals(paramMap.getString("layer"))) { markers = deviceService.queryDevicesState(markerKeys.toJavaList(String.class),true); }else {//返回监控点id和state String orgId= paramMap.getString("orgId"); String areaCode= paramMap.getString("areaCode"); for(Object mPointId:markerKeys) { markers = monitorPointService.queryMonitroPointsState(markerKeys.toJavaList(Integer.class)); } } returnMap.put("markers", markers); } if(paramMap.getJSONArray("popupEquMacs")!=null&¶mMap.getJSONArray("popupEquMacs").size()>0) { JSONArray popupEquMacs = paramMap.getJSONArray("popupEquMacs"); List> popupEquWithStates = null; for(Object mac:popupEquMacs) { popupEquWithStates = deviceService.queryDevicesState(popupEquMacs.toJavaList(String.class),false); } //返回搜索结果的状态 returnMap.put("popupEquStates", popupEquWithStates); } jsonData.setExtData(returnMap); return jsonData; } @GetMapping("monitor_points") public ResultBean> getMonitorPointsByOrganizationId(Integer orgId) { //Map parameters = getParametersStartingWith(request, null); List monitorPoints = monitorPointService.getMonitorPointsByOrganizationId(orgId); return new ResultBean>(monitorPoints); } @GetMapping("report_avg_datas") public ResultBean>> getMonitorPointOrDeviceAvgData(HttpServletRequest request) throws Exception { Map parameters = getParametersStartingWith(request, null); parameters.put("type", "month"); parameters.put("monitorPointId", parameters.remove("monitorPoint")); String sensorKey = parameters.remove("sensorKey").toString(); List sensorKeys = new ArrayList(); sensorKeys.add(sensorKey); parameters.put("sensors", sensorKeys); List> list = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters); for (Map map : list) { String time = map.get("time").toString(); time = time.substring(time.length() - 2); map.put("time", Integer.valueOf(time)); map.put("value", map.remove(sensorKey)); } return new ResultBean>>(list); } @GetMapping("report_alarm_datas") public ResultBean>> getAlarmData(HttpServletRequest request) throws Exception { Map parameters = getParametersStartingWith(request, null); parameters.put("type", "month"); String sensorKey = "list"; if (ObjectUtils.isEmpty(parameters.get("sensorKey"))) { parameters.put("description", "description"); } else { sensorKey = parameters.remove("sensorKey").toString(); List sensorKeys = new ArrayList(); sensorKeys.add(sensorKey); parameters.put("sensors", sensorKeys); } if (!ObjectUtils.isEmpty(parameters.get("organizationId"))) { if (!Constants.isNotSpecialOrgId(Integer.valueOf(parameters.get("organizationId").toString()))) { parameters.remove("organizationId"); } } Map pieData = alarmDailyService.getPieData(parameters); List> list = (List>) pieData.get(sensorKey); return new ResultBean>>(list); } /** * 根据监控点id获取所属设备version数据集 * @param mptid * @return */ @GetMapping("getvers") public ResultBean> getVersions(Integer mptid){ return new ResultBean<>(monitorPointService.queryVersionsById(mptid)); } @GetMapping("region_ranking_data") @ApiOperation(value = "获取排名数据", notes = "获取排名数据") @ApiImplicitParams(value = { @ApiImplicitParam(name = "regionCode", value = "区域码", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "dimension", value = "维度(profession、region、monitorPoint选一)", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "sensorKey", value = "传感器key", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "accountId", value = "账户id", required = true, paramType = "query", dataType = "int"), }) public ResultBean>> getRegionRankingData(HttpServletRequest request){ Map parameters = getParametersStartingWith(request, null); List> list = historyService.getRegionRankingData(parameters); return new ResultBean>>(list); } }