package com.moral.controller; import static com.moral.common.util.RedisUtil.get; import static com.moral.common.util.RedisUtil.hasKey; import static com.moral.common.util.ResourceUtil.getValue; import static com.moral.common.util.WebUtils.getParametersStartingWith; import java.io.*; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import com.moral.common.xml.Version; import org.apache.commons.net.ftp.FTPClient; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONReader; import com.alibaba.fastjson.TypeReference; import com.moral.common.bean.ResultBean; import com.moral.common.util.ValidateUtil; import com.moral.service.AccountService; import com.moral.service.DataService; import com.moral.service.DeviceService; import com.moral.service.HistoryService; import com.moral.service.MachineActivateService; import org.xml.sax.InputSource; /** * The Class ScreenController.大屏接口 */ @RestController @RequestMapping("screen") @CrossOrigin(origins = "*", maxAge = 3600) public class ScreenController { /** The screen service. */ @Resource private HistoryService historyService; /** The account service. */ @Resource private AccountService accountService; /** The device service. */ @Resource private DeviceService deviceService; @Resource private DataService dataService; @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_"; /** * 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") 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 */ @SuppressWarnings("resource") @GetMapping("alarm-levels") public Map getAlarmLevels(HttpServletRequest request,String orgId) { Map result = new LinkedHashMap(); String key = levelKey + orgId; try { if (hasKey(redisTemplate, key)) { String levelConfigStr = get(redisTemplate, key); result = JSON.parseObject(levelConfigStr, new TypeReference>() {}); } else { InputStreamReader reader = new InputStreamReader(resource.getInputStream()); result = new JSONReader(reader).readObject(new TypeReference>() {}); } } catch (IOException e) { e.printStackTrace(); result.put("msg", "系统错误,请联系管理员!原因如下:" + e.getMessage()); } return result; } /** * Gets the standard by sensor.获取某传感器标准值 * * @param request * 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 dataService.getDayAQIByDevice(parameters); } /** * Gets the average by all. 获取某账号某区域10分钟前到5分钟前所有传感器平均数值排名 * * @param request * the request * @return the average by all */ @GetMapping("all-average") public Map getAllSensorAverageByDevice(HttpServletRequest request) { 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 historyService.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 = "121.40.92.176"; 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.enterRemotePassiveMode(); ftpClient.enterLocalPassiveMode(); 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(); } 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; } }