From d32fa50fca18a3fff89b9ec22deaa3d964ddd19b Mon Sep 17 00:00:00 2001 From: fengxiang <110431245@qq.com> Date: Wed, 27 Jun 2018 12:34:27 +0800 Subject: [PATCH] 大屏布局监控点 返回配置数据 --- src/main/java/com/moral/controller/ScreenController.java | 443 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 397 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java index 6a1e617..16dc30f 100644 --- a/src/main/java/com/moral/controller/ScreenController.java +++ b/src/main/java/com/moral/controller/ScreenController.java @@ -1,46 +1,79 @@ 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 java.util.*; +import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import com.moral.common.xml.Version; +import com.alibaba.fastjson.JSONReader; +import com.alibaba.fastjson.TypeReference; +import com.moral.entity.*; +import com.moral.entity.alarm.AlarmConfig; +import com.moral.entity.alarm.AlarmConfigValue; +import com.moral.entity.charts.DataSortCondition; +import com.moral.entity.layout.RealTimeDeviceLayout; +import com.moral.service.*; +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.web.bind.annotation.*; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONReader; -import com.alibaba.fastjson.TypeReference; +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.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; +import com.moral.common.xml.Version; +import com.moral.entity.alarm.AlarmSensorLevel; + +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) +@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; + @Resource + DeviceVersionService deviceVersionService; /** The screen service. */ @Resource @@ -55,14 +88,14 @@ private DeviceService deviceService; @Resource - private DataService dataService; + private HistoryMinutelyService historyMinutelyService; @Resource private MachineActivateService machineActivateService; /** The resource. */ - @Value(value = "classpath:system/alarmLevels.json") - private org.springframework.core.io.Resource resource; +// @Value(value = "classpath:system/alarmLevels.json") +// private org.springframework.core.io.Resource resource; /** The redis template. */ @Resource @@ -71,6 +104,12 @@ /** The level key. */ private String levelKey = "alarm_"; + @Resource + private AlarmDailyService alarmDailyService; + @Resource + private OrganizationLayoutService orgLayoutService; + @Resource + private DeviceVersionService dviceVersionService; /** * Screen login. ������������ * @@ -99,7 +138,8 @@ * the request * @return the equipment states */ - @GetMapping("equipment-state") + @GetMapping("/equipment-state") + @PreAuthorize("hasAnyRole('USER', 'ADMIN')") public Map<String, Object> getDeviceStatesByAccount(HttpServletRequest request) { Map<String, Object> parameters = getParametersStartingWith(request, null); return deviceService.getDeviceStatesByAccount(parameters); @@ -112,31 +152,68 @@ * the request * @return the alarm levels */ - @SuppressWarnings("resource") @GetMapping("alarm-levels") - public Map<String, Object> getAlarmLevels(HttpServletRequest request,String orgId) { - Map<String, Object> result = new LinkedHashMap<String, Object>(); - String key = levelKey + orgId; - try { - if (hasKey(redisTemplate, key)) { - String levelConfigStr = get(redisTemplate, key); - result = JSON.parseObject(levelConfigStr, new TypeReference<Map<String, Object>>() {}); - } else { - InputStreamReader reader = new InputStreamReader(resource.getInputStream()); - result = new JSONReader(reader).readObject(new TypeReference<LinkedHashMap<String, Object>>() {}); - } - - } catch (IOException e) { + public Object getAlarmLevels(HttpServletRequest request, Optional<Integer> orgId, Optional<Integer> mpId,Optional<String> mac) { + List<Map<String,Object>> 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<String, AlarmSensorLevel> alarmLevelMap = alarmConfig.getValue().getAlarmLevels(); + // ������������������������������������������������������ + Map<String,AlarmSensorLevel> defaultSensorLevelMap = null; + if(alarmConfig.getId()!=null){ + AlarmConfigValue defaultAlarmValue = alarmConfigService.getDefaultAlarmConfigValue(); + defaultSensorLevelMap = defaultAlarmValue.getAlarmLevels(); + } + Map<String, AlarmSensorLevel> 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<Float> tempList = Arrays.asList(0.0f,200.0f,500.0f); + alarmSensorLevel.setIncrement(tempList); + } + } + } + }); + //map to list + Map<String, AlarmSensorLevel> finalAlarmLevelMap = alarmLevelMap; + sensorAlarmList = alarmLevelMap.keySet().stream().map(key -> { + AlarmSensorLevel alarmSensorLevel = finalAlarmLevelMap.get(key); + Map<String,Object> 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(); - result.put("msg", "���������������������������������������������������" + e.getMessage()); + Map<String, Object> err = new LinkedHashMap<String, Object>(); + err.put("msg", "���������������������������������������������������" + e.getMessage()); + return err; } - return result; + return sensorAlarmList; } /** * Gets the standard by sensor.��������������������������� * - * @param request + * @param macKey * the request * @return the standard by sensor */ @@ -149,6 +226,29 @@ } /** + * + * @param dataSortCondition ������������������������ + * @return + */ + public ResultBean<Map<String,Object>> 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 @@ -158,7 +258,7 @@ @GetMapping("day-aqi") public Map<String, Object> getDayAQIByDevice(HttpServletRequest request) { Map<String, Object> parameters = getParametersStartingWith(request, null); - return dataService.getDayAQIByDevice(parameters); + return historyMinutelyService.getDayAQIByDevice(parameters); } /** @@ -167,9 +267,10 @@ * @param request * the request * @return the average by all + * @throws Exception */ @GetMapping("all-average") - public Map<String, Object> getAllSensorAverageByDevice(HttpServletRequest request) { + public Map<String, Object> getAllSensorAverageByDevice(HttpServletRequest request) throws Exception { Map<String, Object> parameters = getParametersStartingWith(request, null); return historyService.getAllSensorAverageByDevice(parameters); } @@ -197,7 +298,7 @@ @GetMapping("month-sensor-average") public Map<String, Object> getMonthAverageBySensor(HttpServletRequest request) { Map<String, Object> parameters = getParametersStartingWith(request, null); - return historyService.getMonthAverageBySensor(parameters); + return historyMinutelyService.getMonthAverageBySensor(parameters); } @GetMapping("check-activate") @@ -217,7 +318,7 @@ * ������������������������������������ *********************************************/ private String fileName = "Version.xml"; - private String ip = "121.40.92.176"; + private String ip = "47.96.19.115"; private String userName = "ftp_user"; private String userPwd = "qwer1234"; private int port = 21; @@ -231,8 +332,9 @@ ftpClient.connect(ip, port); ftpClient.login(userName, userPwd); ftpClient.changeWorkingDirectory(path); - //ftpClient.enterRemotePassiveMode(); ftpClient.enterLocalPassiveMode(); + //ftpClient.enterLocalActiveMode(); + InputStream ins = ftpClient.retrieveFileStream(fileName); BufferedReader reader = new BufferedReader(new InputStreamReader(ins,"utf-8")); String line; @@ -250,6 +352,19 @@ 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(); @@ -261,4 +376,240 @@ } 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<List<MonitorPoint>> resultBean = new ResultBean(); + Map<String,Object> paramMap = new HashMap<String, Object>(); + paramMap.put("orgId", orgId); + paramMap.put("mapBounds",mapBounds); + List<MonitorPoint> 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<List<Device>> resultBean = new ResultBean(); + Map<String,Object> paramMap = new HashMap<String, Object>(); + paramMap.put("orgId", orgId); + paramMap.put("mapBounds",mapBounds); + List<Device> 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<String,Object> returnMap = new HashMap<String, Object>(); + returnMap.put("layer", paramMap.getString("layer")); + //��������������������������� + if(!CollectionUtils.isEmpty(paramMap.getJSONArray("markerKeys"))) { + JSONArray markerKeys = paramMap.getJSONArray("markerKeys"); + List<Map<String, String>> 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<Map<String, String>> 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<List<MonitorPoint>> getMonitorPointsByOrganizationId(Integer orgId) { + //Map<String, Object> parameters = getParametersStartingWith(request, null); + List<MonitorPoint> monitorPoints = monitorPointService.getMonitorPointsByOrganizationId(orgId); + return new ResultBean<List<MonitorPoint>>(monitorPoints); + } + + @GetMapping("report_avg_datas") + public ResultBean<List<Map<String, Object>>> getMonitorPointOrDeviceAvgData(HttpServletRequest request) throws Exception { + Map<String, Object> parameters = getParametersStartingWith(request, null); + parameters.put("type", "month"); + parameters.put("monitorPointId", parameters.remove("monitorPoint")); + String sensorKey = parameters.remove("sensorKey").toString(); + List<String> sensorKeys = new ArrayList<String>(); + sensorKeys.add(sensorKey); + parameters.put("sensors", sensorKeys); + List<Map<String, Object>> list = historyMinutelyService.getMonitorPointOrDeviceAvgData(parameters); + + for (Map<String, Object> 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<Map<String, Object>>>(list); + } + + @GetMapping("report_alarm_datas") + public ResultBean<List<Map<String, Object>>> getAlarmData(HttpServletRequest request) throws Exception { + Map<String, Object> 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<String> sensorKeys = new ArrayList<String>(); + 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<Map<String, Object>> list = (List<Map<String, Object>>) pieData.get(sensorKey); + return new ResultBean<List<Map<String, Object>>>(list); + } + + /** + * ���������������id������������������version��������� + * @param mptid + * @return + */ + @GetMapping("getvers") + public ResultBean<List<Integer>> 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<List<Map<String, Object>>> getRegionRankingData(HttpServletRequest request){ + Map<String, Object> parameters = getParametersStartingWith(request, null); + List<Map<String, Object>> list = historyService.getRegionRankingData(parameters); + return new ResultBean<List<Map<String, Object>>>(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 { + return ResultBean.fail(); + } + + } else { + MonitorPoint monitorPoint = monitorPointService.queryMonitorPointById(Integer.parseInt(primaryKey)); + List<DeviceVersion> versionList = deviceVersionService.queryByOrgId(monitorPoint.getOrganizationId()); + if(versionList.size() > 0) { + List<Integer> versionNolist = versionList.stream().map(item -> { + return item.getVersion(); + }).collect(Collectors.toList()); + rtdLayout = orgLayoutService.queryRtdLayoutWithUnit(monitorPoint.getOrganizationId(),versionNolist); + if(rtdLayout == null) { + return ResultBean.fail(); + } + } + } + return new ResultBean(rtdLayout); + } + } -- Gitblit v1.8.0