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.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; 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.CrossOrigin; 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.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.googlecode.aviator.AviatorEvaluator; import com.googlecode.aviator.Expression; 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.BeanUtils; import com.moral.common.util.ParameterUtils; import com.moral.common.util.ValidateUtil; import com.moral.common.util.WebUtils; import com.moral.common.xml.Version; import com.moral.entity.Account; import com.moral.entity.AreaNames; import com.moral.entity.Device; import com.moral.entity.DeviceVersion; import com.moral.entity.MapBounds; import com.moral.entity.MonitorPoint; import com.moral.entity.Organization; import com.moral.entity.Region; import com.moral.entity.alarm.AlarmConfig; import com.moral.entity.alarm.AlarmConfigValue; import com.moral.entity.alarm.AlarmSensorLevel; import com.moral.entity.charts.DataSortCondition; import com.moral.entity.layout.RealTimeDeviceLayout; 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.DeviceVersionService; import com.moral.service.DictionaryDataService; import com.moral.service.HangzhouAqiService; import com.moral.service.HistoryDailyService; import com.moral.service.HistoryMinutelyService; import com.moral.service.HistoryService; import com.moral.service.MachineActivateService; import com.moral.service.MonitorPointService; import com.moral.service.OrganizationLayoutService; import com.moral.service.OrganizationService; import com.moral.service.QualityDailyService; import com.moral.service.SensorService; import com.moral.service.SensorUnitService; import com.moral.service.WeatherService; import com.moral.util.TempAllocationUtils; 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 SensorUnitService sensorUnitService; @Resource MonitorPointService monitorPointService; @Resource DeviceVersionService deviceVersionService; /** * 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; @Resource private OrganizationLayoutService orgLayoutService; @Resource private DeviceVersionService dviceVersionService; @Resource private OrganizationService organizationService; @Resource private DictionaryDataService dictionaryDataService; @Resource private WeatherService weatherService; @Resource private QualityDailyService qualityDailyService; /** * 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); // 添加返回行政区信息字符串操作 Object orgId = resultMap.get("orgId"); if (resultMap.get("orgId") != null && resultMap.get("orgId") instanceof Integer) { StringBuilder areaNamesBuilder = new StringBuilder("中国"); if (!((Integer) orgId).equals(dictionaryDataService.querySupperOrgId())) { Organization organization = organizationService.getOrganizationById((Integer) orgId); if (organization.getAreaNames() != null) { Map areaNameMap = BeanUtils.beanToMap(organization.getAreaNames()); List names = areaNameMap.entrySet().stream().filter(item -> { return item.getValue() != null; }).map(item -> { return item.getValue(); }).collect(Collectors.toList()); AreaNames areaNames = organization.getAreaNames(); areaNamesBuilder.append("/"); areaNamesBuilder.append(String.join("/", names)); } // 企业用户 if (organization.getRank() != null && organization.getRank() == 0) { resultMap.put("type", "enterprise"); } else { resultMap.put("type", "government"); } Number mapAreaCode = null; if (organization.getVillageCode() != null) { mapAreaCode = organization.getVillageCode(); } else if (organization.getTownCode() != null) { mapAreaCode = organization.getTownCode(); } else if (organization.getAreaCode() != null) { mapAreaCode = organization.getAreaCode(); } else if (organization.getCityCode() != null) { mapAreaCode = organization.getCityCode(); } else if (organization.getProvinceCode() != null) { mapAreaCode = organization.getProvinceCode(); } resultMap.put("mapAreaCode", mapAreaCode.toString()); } resultMap.put("mapPath", areaNamesBuilder.toString()); } } 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, Optional mac) { 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(); } else if (mac.isPresent()) { alarmConfig = alarmConfigService.queryByDeviceMac(mac.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; } /** * @param dataSortCondition 数据排名查询条件 * @return */ public ResultBean> getOrderData(DataSortCondition dataSortCondition) { ResultBean resultBean = new ResultBean(); if (dataSortCondition.getCode() == null) { resultBean.setCode(ResultBean.FAIL); resultBean.setMessage("code can't be null"); } else if (dataSortCondition.getStyle() == null) { resultBean.setCode(ResultBean.FAIL); resultBean.setMessage("style can't be null"); } String code = dataSortCondition.getCode().toString(); Region region = Region.create(code); if (region == null) { resultBean.setCode(ResultBean.FAIL); resultBean.setMessage("code is not in the correct format"); } // todo return null; } /** * 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); } @GetMapping("hour-aqi") @ApiOperation(value = "获取一小时AQI", notes = "获取一小时AQI") @ApiImplicitParams(value = { @ApiImplicitParam(name = "mac", value = "设备mac地址", required = true, paramType = "query", dataType = "String") }) public Map getHourAQIByDevice(HttpServletRequest request) { Map parameters = getParametersStartingWith(request, null); return historyService.gitHourlyAQIByMacAndTimeslot(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") long code, @RequestParam("accountId") int accountId) { Account account = accountService.getAccountById(accountId); String regionName = areaService.queryFullNameByCode(code); if (account != null && regionName != 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, @RequestParam("regionCode") String regionCode) { ResultBean> resultBean = new ResultBean(); Map paramMap = new HashMap(); paramMap.put("orgId", orgId); paramMap.put("mapBounds", mapBounds); paramMap.put("regionCode", regionCode); ParameterUtils.getRegionType4RegionCode(paramMap); 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, @RequestParam("regionCode") String regionCode) { ResultBean> resultBean = new ResultBean(); Map paramMap = new HashMap(); paramMap.put("orgId", orgId); paramMap.put("mapBounds", mapBounds); paramMap.put("regionCode", regionCode); ParameterUtils.getRegionType4RegionCode(paramMap); 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 && paramMap.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); ParameterUtils.getTimeType4Time(parameters); parameters.put("monitorPointId", parameters.remove("monitorPoint")); Object sensorKey = parameters.remove("sensorKey"); parameters.put("sensors", Arrays.asList(sensorKey)); // monitorPointService.isCompensateCalculation(parameters); 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); ParameterUtils.getTimeType4Time(parameters); // 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"), @ApiImplicitParam(name = "timeType", value = "时间类型(month、day、hour选一)", 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); } // todo @Value(value = "classpath:system/realTimeMonitorLayout.json") private org.springframework.core.io.Resource resource; @ApiOperation(value = "获取实时监控页面布局", notes = "") @ApiImplicitParams(value = { @ApiImplicitParam(name = "primaryKey", defaultValue = "898607b0101730391967", value = "值为:设备mac或监控站id", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "type", defaultValue = "device", value = "值为:'monitorPoint'或'device'", required = true, paramType = "query", dataType = "String"),}) @GetMapping("rtm-layout") public ResultBean realTimeMonitorLayout(String primaryKey, String type) { RealTimeDeviceLayout rtdLayout = null; if (type != null && type.equals("device")) { Device device = deviceService.getDeviceByMac(primaryKey, false); if (device != null && device.getOrganizationIds() != null && device.getOrganizationIds().size() > 0 && device.getDeviceVersionId() != null) { Integer orgId = device.getOrganizationIds().get(0); DeviceVersion deviceVersion = deviceVersionService.queryVersionById(device.getDeviceVersionId()); rtdLayout = orgLayoutService.queryRtdLayoutWithUnit(orgId, deviceVersion.getVersion()); } else { String errMsg = "device 数据异常:" + JSON.toJSONString(device); log.warn(errMsg); return ResultBean.fail(errMsg); } } else { MonitorPoint monitorPoint = monitorPointService.queryMonitorPointById(Integer.parseInt(primaryKey)); List versionList = deviceVersionService.queryByMpointId(monitorPoint.getId()); if (versionList.size() > 0) { List versionNolist = versionList.stream().map(item -> { return item.getVersion(); }).collect(Collectors.toList()); rtdLayout = orgLayoutService.queryRtdLayoutWithUnit(monitorPoint.getOrganizationId(), versionNolist); if (rtdLayout == null) { return ResultBean.fail(); } } } if (rtdLayout != null && rtdLayout.getDefaultMonitorItems().size() == 0) { rtdLayout.getDefaultMonitorItems().addAll(rtdLayout.getCoreMonitorItems()); } return new ResultBean(rtdLayout == null ? new RealTimeDeviceLayout() : rtdLayout); } @GetMapping("report_avg_data") @ApiOperation(value = "获取监测因子月平均值", notes = "获取监测因子月平均值") @ApiImplicitParams(value = { @ApiImplicitParam(name = "monitorPoint", value = "监控站id", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "mac", value = "设备mac", required = false, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "sensorKey", value = "传感器key,如有多个用逗号分隔", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "time", value = "时间,月份(格式:2018-03)", required = true, paramType = "query", dataType = "String"),}) public ResultBean>> getMonitorPointOrDeviceAvgDataBySensorKey(HttpServletRequest request) throws Exception { Map parameters = getParametersStartingWith(request, null); ParameterUtils.getTimeType4Time(parameters); parameters.put("monitorPointId", parameters.remove("monitorPoint")); String[] sensorKeys = parameters.remove("sensorKey").toString().split(","); parameters.put("sensors", Arrays.asList(sensorKeys)); // monitorPointService.isCompensateCalculation(parameters); 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)); List values = new ArrayList(); for (String string : sensorKeys) { values.add((Number) map.remove(string)); } map.put("values", values); } return new ResultBean>>(list); } @GetMapping("getmpoint-byid") @ApiOperation(value = "获取监测站数据", notes = "获取监测站数据,包含名称、地址、坐标等详细信息") @ApiImplicitParams(value = { @ApiImplicitParam(name = "monitorPointId", defaultValue = "1", value = "监控站id", required = true, paramType = "query", dataType = "Integer"),}) public ResultBean getMonitorPointById(Integer monitorPointId) { MonitorPoint monitorPoint = monitorPointService.queryMonitorPointById(monitorPointId); return new ResultBean<>(monitorPoint); } @Resource HangzhouAqiService hangzhouAqiService; @GetMapping("aqi24hours") @ApiOperation(value = "最近24小时aqi数值", notes = "最近24小时国控aqi数值") @ApiImplicitParams(value = { @ApiImplicitParam(name = "orgid", defaultValue = "5", value = "组织id", required = true, paramType = "query", dataType = "Integer"),}) public ResultBean>> getAqi24HoursNC(@RequestParam("orgid") Integer organizationId) { return new ResultBean<>(hangzhouAqiService.queryAqi24Hours(organizationId)); } @GetMapping("mpt-dev-summary") @ApiOperation(value = "监控总数和设备状态信息", notes = "监控总数和设备状态信息") @ApiImplicitParams(value = { @ApiImplicitParam(name = "orgid", defaultValue = "5", value = "组织id", required = true, paramType = "query", dataType = "Integer"),}) public ResultBean getMptAndDevSummary(@RequestParam("orgid") Integer organizationId) { Map result = new HashMap<>(2); Integer mptCount = monitorPointService.countOfSubOrgs(organizationId); Map monitorPointSummary = new HashMap(); monitorPointSummary.put("all", mptCount); Map deviceSummary = deviceService.queryDeviceStateSummary(organizationId); result.put("monitorPoint", monitorPointSummary); result.put("device", deviceSummary); return new ResultBean<>(result); } @GetMapping("weather") @ApiOperation(value = "获取区域天气情况", notes = "获取区域天气情况") @ApiImplicitParams(value = { @ApiImplicitParam(name = "organizationId", defaultValue = "5", value = "登录账号的组织id", required = true, paramType = "query", dataType = "String")}) public ResultBean> getWeatherDataByRegion(HttpServletRequest request) throws Exception { Map parameters = getParametersStartingWith(request, null); Map map = weatherService.getWeatherDataByRegion(parameters); return new ResultBean>(map); } @GetMapping("actual") @ApiOperation(value = "获取监测因子实时最大值", notes = "获取监测因子实时最大值") @ApiImplicitParams(value = { @ApiImplicitParam(name = "accountId", defaultValue = "1", value = "登录账号的id", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "sensorKey", defaultValue = "e1,e2,e3", value = "传感器key,如有多个用逗号分隔", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "time", defaultValue = "", value = "时间(long类型时间)", required = false, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "interval", defaultValue = "30", value = "时间间隔(秒)", required = true, paramType = "query", dataType = "Integer"),}) public ResultBean> getActualDataByRegion(HttpServletRequest request) throws Exception { Map parameters = getParametersStartingWith(request, null); Map map = historyService.getActualDataByRegion(parameters); return new ResultBean>(map); } @GetMapping("quality") @ApiOperation(value = "获取优良天数", notes = "获取优良天数") @ApiImplicitParams(value = { @ApiImplicitParam(name = "organizationId", defaultValue = "5", value = "登录账号的组织id", required = true, paramType = "query", dataType = "String")}) public ResultBean> getQualityCountDayByRegion(HttpServletRequest request) throws Exception { Map parameters = getParametersStartingWith(request, null); Map map = qualityDailyService.getQualityCountDayByRegion(parameters); return new ResultBean>(map); } @GetMapping("monitorpoints-devices") @ApiOperation(value = "获取监控点以及设备", notes = "获取监控点以及设备") @ApiImplicitParams(value = { @ApiImplicitParam(name = "organizationId", defaultValue = "8", value = "登录账号的组织id", required = true, paramType = "query", dataType = "Integer"), @ApiImplicitParam(name = "regionCode", defaultValue = "320583", value = "区域码", required = true, paramType = "query", dataType = "String")}) public ResultBean> getMonitorPointsAndDevicesByRegion(HttpServletRequest request) throws Exception { Map parameters = WebUtils.getParametersStartingWith(request, null); List monitorPoints = monitorPointService.getMonitorPointsAndDevicesByRegion(parameters); return new ResultBean>(monitorPoints); } @GetMapping("devices-state") @ApiOperation(value = "刷新设备状态", notes = "刷新设备状态") @ApiImplicitParams(value = { @ApiImplicitParam(name = "organizationId", defaultValue = "8", value = "登录账号的组织id", required = true, paramType = "query", dataType = "Integer"), @ApiImplicitParam(name = "regionCode", defaultValue = "320583", value = "区域码", required = true, paramType = "query", dataType = "String")}) public ResultBean> getDevicesStateByRegion(HttpServletRequest request) throws Exception { Map parameters = WebUtils.getParametersStartingWith(request, null); Collection monitorPoints = monitorPointService.getDevicesStateByRegion(parameters); return new ResultBean>(monitorPoints); } @Resource private HistoryDailyService historyDailyService; @GetMapping("emissions") @ApiOperation(value = "排放量", notes = "排放量") @ApiImplicitParams(value = { @ApiImplicitParam(name = "organizationId", defaultValue = "5", value = "登录账号的组织id", required = true, paramType = "query", dataType = "Integer"), @ApiImplicitParam(name = "time", defaultValue = "2019", value = "查询的时间", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "sensorKey", defaultValue = "e27", value = "查询的监测因子的key", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "regionCode", defaultValue = "130000", value = "区域码", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "monitorPointId", value = "监测点id", required = false, paramType = "query", dataType = "int"), @ApiImplicitParam(name = "mac", value = "设备mac", required = false, paramType = "query", dataType = "String")}) public ResultBean>> getemissionsData(HttpServletRequest request) throws Exception { Map parameters = WebUtils.getParametersStartingWith(request, null); List> result = historyDailyService.getEmissionsData(parameters); return new ResultBean>>(result); } @GetMapping("overproof") @ApiOperation(value = "浓度超标", notes = "浓度超标") @ApiImplicitParams(value = { @ApiImplicitParam(name = "organizationId", defaultValue = "5", value = "登录账号的组织id", required = true, paramType = "query", dataType = "Integer"), @ApiImplicitParam(name = "time", defaultValue = "2019", value = "查询的时间", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "sensorKey", defaultValue = "e27", value = "查询的监测因子的key", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "overproofRatio", defaultValue = "0", value = "超标比例(0,1,2,3)(超标,超标100%,超标200%,超标300%)", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "regionCode", defaultValue = "130000", value = "区域码", required = true, paramType = "query", dataType = "String")}) public ResultBean getOverproofData(HttpServletRequest request) throws Exception { Map parameters = WebUtils.getParametersStartingWith(request, null); Map result = historyDailyService.getOverproofData(parameters); return new ResultBean(result); } @GetMapping("limit-device") @ApiOperation(value = "获取设备的警报限值", notes = "获取设备的警报限值") @ApiImplicitParams(value = { @ApiImplicitParam(name = "mac", defaultValue = "p5dnd7a0391956", value = "设备mac码", required = true, paramType = "query", dataType = "String")}) public ResultBean>> getLimitDataByDevice(HttpServletRequest request) throws Exception { Map parameters = WebUtils.getParametersStartingWith(request, null); String density = deviceService.getLimitDataByDevice(parameters); JSONObject parseObject = JSONObject.parseObject(density); List> resuList = new ArrayList>(); for (Map.Entry entry : parseObject.entrySet()) { resuList.add(new HashMap() { { put("key", entry.getKey()); put("limit", entry.getValue()); } }); } return new ResultBean>>(resuList); } /** * @param model * @param request * @return * @throws Exception * @description 根据设备mac,监测因子,时间查询返回界面 * @author ZhuDongming * @date 2019-06-05 10:02:10 */ @GetMapping("/map-traceability") @ApiOperation(value = "获取污染溯源", notes = "获取污染溯源") @ApiImplicitParams(value = { @ApiImplicitParam(name = "monitorPointId", value = "监测点id", required = true, paramType = "query", dataType = "int"), @ApiImplicitParam(name = "mac", value = "设备mac地址", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "sensorKey", value = "查询的监测因子的key", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "time", value = "查询时间", required = true, paramType = "query", dataType = "String")}) public ModelAndView traceability(ModelAndView model, HttpServletRequest request) throws Exception { Map parameters = WebUtils.getParametersStartingWith(request, null); Integer monitorPointId = Integer.parseInt(parameters.get("monitorPointId").toString()); MonitorPoint monitorPoint = monitorPointService.queryWithRelationById(monitorPointId); String mac = parameters.get("mac").toString(); String sensorKey = parameters.get("sensorKey").toString(); String time = parameters.get("time").toString(); if (monitorPoint != null && mac != null && sensorKey != null && time != null) { Map resultMap = historyDailyService.getTraceabilityData(parameters); JSONObject params = new JSONObject(); Long code = monitorPoint.getAreaCode().longValue(); String regionName = areaService.queryFullNameByCode(code); Device device = deviceService.getDeviceByMac(mac, false); Device deviceSecond = deviceService.getDeviceByLongitudeAsc(mac); params.put("sensorInfo", resultMap); params.put("regionCode", code); params.put("regionName", regionName); params.put("monitorPoint", monitorPoint); params.put("device", device); params.put("deviceSecond", deviceSecond); String paramsJson = params.toJSONString(); model.addObject("traceabilityParams", paramsJson); model.setViewName("traceability"); return model; } else { StringBuilder msg = new StringBuilder(); msg.append(" param[0] monitorPointId:"); msg.append(monitorPointId); msg.append(" param[0] mac:"); msg.append(mac); msg.append(" param[0] sensorKey:"); msg.append(sensorKey); msg.append(" param[0] time:"); msg.append(time); log.warn(msg); model.setViewName("403"); return model; } } /*@GetMapping("getSensor") @ApiOperation(value = "返回单位", notes = "返回单位") @ApiImplicitParams(value = { @ApiImplicitParam(name = "mac", value = "设备MN号", required = true, paramType = "query", dataType = "String") }) public ResultBean> getSensor(HttpServletRequest request) throws Exception { Map parameters = WebUtils.getParametersStartingWith(request, null); String mac = (String) parameters.get("mac"); //System.out.println("ScreenController-----getSensor-----mac:"+mac); Map map = sensorUnitService.getSensorByMac(mac); System.out.println("ScreenController-----getSensor-----map:"+map); return new ResultBean>(map); }*/ @GetMapping("getSensorByMonitorPointId") @ApiOperation(value = "返回单位", notes = "返回单位") @ApiImplicitParams(value = { @ApiImplicitParam(name = "monitor_point_id", value = "监测站点id", required = true, paramType = "query", dataType = "String") }) public ResultBean>> getSensorByMonitorPointId(HttpServletRequest request) throws Exception { Map parameters = WebUtils.getParametersStartingWith(request, null); String monitor_point_id = (String) parameters.get("monitor_point_id"); List> map = sensorUnitService.getSensorsByMonitPointId2(monitor_point_id); return new ResultBean>>(map); } @GetMapping("getSensorByDeviceId") @ApiOperation(value = "通过设备获取因子", notes = "通过设备获取因子") @ApiImplicitParams(value = { @ApiImplicitParam(name = "id", value = "设备id", required = true, paramType = "query", dataType = "String") }) public ResultBean>> getSensorByDeviceId(HttpServletRequest request) throws Exception { Map parameters = WebUtils.getParametersStartingWith(request, null); String id = (String) parameters.get("id"); List> list = sensorService.getSensorByDeviceId(id); Map map = list.get(0); String monitor_point_id = map.get("monitor_point_id").toString(); List> sensorUnitList = sensorUnitService.getSensorsByMonitPointId2(monitor_point_id); System.out.println(sensorUnitList); for (Map sensorMap : list) { for (Map sensorUnitMap : sensorUnitList) { if (sensorUnitMap.get("sensor_key").equals(sensorMap.get("sensor_key"))) { sensorMap.put("unit", sensorUnitMap.get("name")); } } } return new ResultBean>>(list); } @GetMapping("getSensorWithUnitByMonitorPointId") @ApiOperation(value = "通过站点获取因子", notes = "通过站点获取因子") @ApiImplicitParams(value = { @ApiImplicitParam(name = "monitor_point_id", value = "站点id", required = true, paramType = "query", dataType = "String") }) public ResultBean>> getSensorWithUnitByMonitorPointId(HttpServletRequest request) throws Exception { Map parameters = WebUtils.getParametersStartingWith(request, null); String monitor_point_id = (String) parameters.get("monitor_point_id"); List> list = sensorService.getSensorByMonitorPointId(monitor_point_id); List> sensorUnitList = sensorUnitService.getSensorsByMonitPointId2(monitor_point_id); System.out.println(sensorUnitList); for (Map sensorMap : list) { for (Map sensorUnitMap : sensorUnitList) { if (sensorUnitMap.get("sensor_key").equals(sensorMap.get("sensor_key"))) { sensorMap.put("unit", sensorUnitMap.get("name")); } } } return new ResultBean>>(list); } @GetMapping("AIForecast") @ApiOperation(value = "AI预测", notes = "AI预测") @ApiImplicitParams(value = { @ApiImplicitParam(name = "monitorPoint", value = "监控站id", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "mac", value = "设备mac", required = false, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "sensorKey", value = "传感器key,如有多个用逗号分隔", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "time", value = "时间,天(格式:2018-03-06)", required = true, paramType = "query", dataType = "String"), }) public ResultBean>> AIForecast(HttpServletRequest request) throws Exception { Map parameters = getParametersStartingWith(request, null); //System.out.println(parameters); String monitorPoint = (String) parameters.get("monitorPoint"); String intoTime = parameters.get("time").toString(); String[] timeArray = intoTime.split("-"); //System.out.println(timeArray); Integer year = Integer.parseInt(timeArray[0]); Integer mon = Integer.parseInt(timeArray[1]); if (mon > 1) { mon = mon - 1; } else { mon = 12; year = year - 1; } String alterTime = year.toString() + "-" + mon.toString() + "-" + timeArray[2]; //System.out.println(alterTime); parameters.put("time", alterTime); ParameterUtils.getTimeType4Time(parameters); String monitor_point_id = (String) parameters.get("monitorPoint"); parameters.put("monitorPointId", parameters.remove("monitorPoint")); String[] sensorKeys = parameters.remove("sensorKey").toString().split(","); parameters.put("sensors", Arrays.asList(sensorKeys)); // monitorPointService.isCompensateCalculation(parameters); List> list = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters); Map mpMap = new HashMap<>(); mpMap = monitorPointService.selectAllById(monitorPoint); //生命一个map,用来存放查询天气信息是需要的参数 Map weatherParameters = new HashMap<>(); weatherParameters.put("organizationId", mpMap.get("organization_id")); weatherParameters.put("time", intoTime); //获取天气信息 Map weatherMap = weatherService.get15DayWeatherDataByRegion(weatherParameters); Map tempMap = TempAllocationUtils.tempAllocation(weatherMap); //获取单位信息 Map> sensorUnitMap = sensorUnitService.getSensorsByMonitPointId(monitor_point_id); for (Map map : list) { String time = map.get("time").toString(); time = time.substring(time.length() - 2); map.put("time", Integer.valueOf(time)); map.put("temp", tempMap.get(map.get("time").toString())); List values = new ArrayList(); List units = new ArrayList(); for (String string : sensorKeys) { if (sensorUnitMap != null && !sensorUnitMap.isEmpty()) { if (sensorUnitMap.get(string) != null) { units.add(sensorUnitMap.get(string).get("name").toString()); String rules = sensorUnitMap.get(string).get("rules").toString(); rules = rules.replace("{0}", "a"); rules = rules.replace("d", ""); Expression expression = AviatorEvaluator.compile(rules); Double value; Map ev = new HashMap<>(); ev.put("a", map.get(string)); value = (Double) expression.execute(ev); //保留两位小数 DecimalFormat df = new DecimalFormat("#.00"); value = Double.parseDouble(df.format(value)); values.add(value); } else { Map sensorMap = sensorService.getSensorBySensorKey(string); units.add(sensorMap.get("unit").toString()); values.add((Number) map.remove(string)); } } else { Map sensorMap = sensorService.getSensorBySensorKey(string); units.add(sensorMap.get("unit").toString()); values.add((Number) map.remove(string)); } //values.add((Number) map.remove(string)); } map.put("values", values); map.put("units", units); } return new ResultBean>>(list); } @GetMapping("getWeather") @ApiOperation(value = "获取天气信息", notes = "获取天气信息") @ApiImplicitParams(value = { @ApiImplicitParam(name = "organizationId", defaultValue = "5", value = "登录账号的组织id", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "time", value = "时间,天(格式:2018-03-06)", required = true, paramType = "query", dataType = "String"), }) public ResultBean> getWeather(HttpServletRequest request) throws Exception { Map parameters = getParametersStartingWith(request, null); Map map = weatherService.get15DayWeatherDataByRegion(parameters); /*Map tempMap = new HashMap<>(); Double tempDay = Double.parseDouble(map.get("tempDay").toString()); Double tempNight = Double.parseDouble(map.get("tempNight").toString()); Double time5 = tempNight; Double time13 = tempDay; Double difference = tempDay-tempNight; Double dif_8 = difference/8; Double dif_16 = difference/16; tempMap.put("5", time5); tempMap.put("13", time13); String time = null; Double t = time5; for(int i=4;i>=0;i--) { time = ""+i; t = t+dif_16; String tempLast = ""+Math.round(t); tempMap.put(time, tempLast); } Double y = time5; for(int i=6;i<13;i++) { time = ""+i; y = y+dif_8; String tempLast = ""+Math.round(y); tempMap.put(time, tempLast); } Double z = time13; for(int i=14;i<=23;i++) { time = ""+i; z = z-dif_16; String tempLast = ""+Math.round(z); tempMap.put(time, tempLast); }*/ Map tempMap = TempAllocationUtils.tempAllocation(map); return new ResultBean>(tempMap); } @GetMapping("/uavTrajectory") @ApiOperation(value = "显示无人机飞行轨迹", notes = "显示无人机飞行轨迹") @ApiImplicitParams(value = { @ApiImplicitParam(name = "mac", value = "设备mac(格式:p5dnd7a0392068)", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "startTime", value = "开始时间(格式:2019-07-17 17:07:00)", required = false, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "endTime", value = "结束时间(格式:2019-07-17 17:07:00)", required = false, paramType = "query", dataType = "String") }) public ModelAndView uavTrajectory(ModelAndView model, HttpServletRequest request) throws Exception { Map parameters = WebUtils.getParametersStartingWith(request, null); String mac = parameters.get("mac").toString(); if (mac != null && mac.length() != 0) { List> sensorList = historyMinutelyService.getSensorData(parameters); JSONObject params = new JSONObject(); params.put("sensorInfo", sensorList); String paramsJson = params.toJSONString(); model.addObject("uavTrajectoryParams", paramsJson); model.setViewName("uavTrajectory"); return model; }else { StringBuilder msg = new StringBuilder(); msg.append(" param[0] mac:"); msg.append(mac); log.warn(msg); model.setViewName("403"); return model; } } }