jinpengyong
2020-10-27 d7ee12cb208473741f79b64505adccd0653e4654
src/main/java/com/moral/controller/ScreenController.java
@@ -4,6 +4,7 @@
import java.lang.reflect.Array;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -39,14 +40,13 @@
import com.rabbitmq.client.*;
import com.rabbitmq.client.Channel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import jdk.nashorn.internal.runtime.regexp.joni.Regex;
import net.sf.json.JSONString;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.net.ftp.FTPClient;
@@ -71,7 +71,6 @@
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import org.xml.sax.InputSource;
import static com.moral.common.util.ResourceUtil.getValue;
import static com.moral.common.util.WebUtils.getParametersStartingWith;
import static java.util.Calendar.*;
@@ -1061,7 +1060,34 @@
    public ResultBean<List<MonitorPoint>> getMonitorPointsAndDevicesByRegion(HttpServletRequest request)
            throws Exception {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        String regionCode = parameters.get("regionCode").toString();
        List<MonitorPoint> monitorPoints = monitorPointService.getMonitorPointsAndDevicesByRegion(parameters);
        //剔除沧州非本公司设备
        if (regionCode.startsWith("1309")) {
            List<Integer> orgIds = new ArrayList<>();
            Collections.addAll(orgIds, 60, 65, 159, 165, 166);
            Iterator<MonitorPoint> iter = monitorPoints.iterator();
            while (iter.hasNext()) {
                MonitorPoint next = iter.next();
                Integer mpId = next.getId();
                Integer orgId = next.getOrganizationId();
                if (!orgIds.contains(orgId)) {
                    iter.remove();
                } else {
                    if (orgId == 60) {
                        if (mpId != 56) {
                            iter.remove();
                        }
                    } else if (orgId == 65) {
                        if (mpId != 83 && mpId != 84) {
                            iter.remove();
                        }
                    }
                }
            }
        }
        //给每一个monitorPoint下的设备通过device.getName()进行排序
        for (MonitorPoint monitorPoint : monitorPoints) {
            List<Device> deviceList = monitorPoint.getDevices();
@@ -2261,9 +2287,250 @@
        return new ResultBean<List<Map<String, Object>>>(list);
    }
    /*
    * 根据大屏版本号获取版本更新信息
    */
    @PostMapping("/tellAlarm")
    @ResponseBody
    public List<List> tellAlarm(String states, String orgId, String accountId, String states1, String regionCode) {
        JSONArray stateList = JSONArray.parseArray(states);//最新的设备数据
        JSONArray stateList1 = JSONArray.parseArray(states1);//前10秒的设备数据
        List<List> lookList = new ArrayList<>();
        Map params = new HashMap();
        String lookString = "";
        //判断前十秒数据和现在数据是否相等,如果不相等进入方法
        //第一次进入接口前十秒数据为null
        if (stateList1 != null && !states.equals(states1)) {
            List<Map> listDevice = JSONObject.parseArray(stateList.toJSONString(), Map.class);
            List<Map> listDevice1 = JSONObject.parseArray(stateList1.toJSONString(), Map.class);
            //将所有设备放到同一个集合下
            List<Map> deviceList = new ArrayList<Map>();
            List<Map> deviceList1 = new ArrayList<Map>();
            //存放所有组织的id
            List orgList = new ArrayList();
            for (Map devices : listDevice) {
                int monitorId = Integer.parseInt((String) devices.get("id"));
                MonitorPoint monitorPoint = monitorPointService.byIdGetMonitorPoint(monitorId);
                int org_id = monitorPoint.getOrganizationId();
                orgList.add(org_id);
                List<Map> devicesList = (List<Map>) devices.get("devices");
                if (!devicesList.isEmpty()) {
                    if (devicesList.size() > 1) {
                        for (Map map : devicesList) {
                            deviceList.add(map);
                        }
                    } else {
                        deviceList.add((Map) ((List) devices.get("devices")).get(0));
                    }
                }
            }
            for (Map devices1 : listDevice1) {
                int monitorId = Integer.parseInt((String) devices1.get("id"));
                MonitorPoint monitorPoint = monitorPointService.byIdGetMonitorPoint(monitorId);
                int org_id = monitorPoint.getOrganizationId();
                List<Map> devicesList = (List<Map>) devices1.get("devices");
                if (!devicesList.isEmpty()) {
                    if (devicesList.size() > 1) {
                        for (Map map : devicesList) {
                            deviceList1.add(map);
                        }
                    } else {
                        deviceList1.add((Map) ((List) devices1.get("devices")).get(0));
                    }
                }
            }
            List<String> macList = new ArrayList<String>();
            //获得两个时间的设备状态改变的mac号
            for (Map map : deviceList) {
                String state = (String) map.get("state");
                String mac = (String) map.get("mac");
                for (Map map1 : deviceList1) {
                    String state1 = (String) map1.get("state");
                    String mac1 = (String) map1.get("mac");
                    if (mac.equals(mac1)) {
                        if (Integer.parseInt(state) > Integer.parseInt(state1) && Integer.parseInt(state) != 4 /*&& Integer.parseInt(state1) == 0*/) {
                            macList.add(mac + "-" + state + "-" + state1);
                        }
                    }
                }
            }
            //存放不重合的数组
            LinkedHashSet<Integer> orgS = new LinkedHashSet<Integer>(orgList);
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = new Date(System.currentTimeMillis());
            Date date1 = new Date(System.currentTimeMillis() - 1000);
            //系统当前时间
            String time = formatter.format(date);
            //系统当前时间的前一秒
            String time1 = formatter.format(date1);
            List<Map> alarmList = new ArrayList<Map>();
            for (Integer org : orgS) {
                int orgNum = alarmConfigService.containOrgId(org);
                Map<String, Object> eMap = new HashMap<String, Object>();
                if (orgNum == 1) {
                    String alarmConfig = alarmConfigService.getValueByOrganizationId(Integer.parseInt(String.valueOf(org)));
                    Map hashMap = JSON.parseObject(alarmConfig, HashMap.class);
                    Map alarmLevels = (Map) hashMap.get("alarmLevels");
                    //数据库因子表只有106个因子
                    for (int i = 1; i < 106; i++) {
                        if (alarmLevels.containsKey("e" + i)) {
                            Map map = (Map) alarmLevels.get("e" + i);
                            if (!map.isEmpty()) {
                                Integer enable = (Integer) map.get("enable");
                                List increment = (List) map.get("increment");
                                if (enable == 1) {
                                    if (!(increment.get(0).toString().equals("0") && increment.get(1).toString().equals("0"))) {
                                        eMap.put("e" + i, increment);
                                    } else {
                                        continue;
                                    }
                                } else {
                                    continue;
                                }
                            }
                        }
                    }
                } else {
                    String defultAlarm = dictionaryDataService.getDefultAlarm();
                    Map hashMap = JSON.parseObject(defultAlarm, HashMap.class);
                    Map alarmLevels = (Map) hashMap.get("alarmLevels");
                    //数据库因子表只有106个因子
                    for (int i = 1; i < 106; i++) {
                        if (alarmLevels.containsKey("e" + i)) {
                            Map map = (Map) alarmLevels.get("e" + i);
                            if (!map.isEmpty()) {
                                Integer enable = (Integer) map.get("enable");
                                List increment = (List) map.get("increment");
                                if (enable == 1) {
                                    if (!(increment.get(0).toString().equals("0") && increment.get(1).toString().equals("0"))) {
                                        eMap.put("e" + i, increment);
                                    } else {
                                        continue;
                                    }
                                } else {
                                    continue;
                                }
                            }
                        }
                    }
                }
                Map map = new HashMap();
                map.put("eMap", eMap);
                map.put("org", org);
                alarmList.add(map);
            }
            for (Map aEMap : alarmList) {
                List<Map> values = new ArrayList<Map>();
                if (macList.size() > 0) {
                    for (String sMac : macList) {
                        String[] aMac = sMac.split("-");
                        String mac = aMac[0];
                        //因为数据库数据是两秒钟插入一条,所以通过两个时间区间获取一条数据,防止一个时间获取数据为空的情况
                        String value = historyService.getValueByMacAndTime(mac, time, time1);
                        Map<String, String> map = new HashMap<String, String>();
                        if (value == null) {
                            Date date2 = new Date(System.currentTimeMillis() - 2000);
                            //系统当前时间的前两秒
                            String time2 = formatter.format(date1);
                            value = historyService.getValueByMacAndTime(mac, time, time2);
                            if (value == null) {
                                Date date3 = new Date(System.currentTimeMillis() - 3000);
                                //系统当前时间的前三秒
                                String time3 = formatter.format(date1);
                                value = historyService.getValueByMacAndTime(mac, time, time3);
                            }
                        }
                        if (value != null) {
                            map.put("mac", mac);
                            map.put("value", value);
                            map.put("state", aMac[1]);
                            map.put("state1", aMac[2]);
                            values.add(map);
                        } else {
                            continue;
                        }
                    }
                }
                if (values.size() > 0 && values.size() == macList.size()) {
                    for (Map dataMap : values) {
                        String oId = deviceService.byMacGetOrgId((String) dataMap.get("mac"));
                        if (!(aEMap.get("org").toString()).equals(oId)) {
                            continue;
                        }
                        List<String> list = new ArrayList<String>();
                        Map sensorMap = JSONObject.parseObject((String) dataMap.get("value"));
                        Iterator<String> iter = sensorMap.keySet().iterator();
                        while (iter.hasNext()) {
                            String key = iter.next();
                            list.add(key);
                        }
                        String state = (String) dataMap.get("state");
                        String state1 = (String) dataMap.get("state1");
                        List<Map> mapList = new ArrayList();
                        for (String key : list) {
                            if (((Map) aEMap.get("eMap")).containsKey(key)) {
                                Double val = Double.valueOf(sensorMap.get(key).toString());
                                List valueList = (List) ((Map) aEMap.get("eMap")).get(key);
                                Device device = deviceService.byMacGetDevice((String) dataMap.get("mac"));
                                Map<String, Object> sensors = sensorService.getSensorBySensorKey(key);
                                if (key.equals("e1") || key.equals("e2") || key.equals("e10") || key.equals("e11") || key.equals("e15") || key.equals("e16")) {
                                    //判断六参因子超标
                                    if ((state1.equals("0") || state1.equals("1")) && Integer.parseInt(state) > 1) {
                                        if (val > Double.valueOf(String.valueOf(valueList.get(1)))) {
                                            Map lookMap = new HashMap();
                                            lookMap.put("time", time);
                                            lookMap.put("name", device.getName());
                                            lookMap.put("sensor", sensors.get("description"));
                                            lookMap.put("value", val + "" + sensors.get("unit"));
                                            mapList.add(lookMap);
                                            //lookString = time+" "+device.getName()+sensors.get("description")+"="+val + sensors.get("unit")+"超标";
                                            //System.out.println(time + "====" + device.getName() + "=====" + sensors.get("description") + "======" + val + sensors.get("unit"));
                                        }
                                    }
                                } else {//判断非六参因子超标
                                    if (state1.equals("0")) {
                                        if (val > Double.valueOf(String.valueOf(valueList.get(0)))) {
                                            Map lookMap = new HashMap();
                                            lookMap.put("time", time);
                                            lookMap.put("name", device.getName());
                                            lookMap.put("sensor", sensors.get("description"));
                                            lookMap.put("value", val + "" + sensors.get("unit"));
                                            mapList.add(lookMap);
                                        }
                                    }
                                }
                            }
                        }
                        if (mapList.size() > 0) {
                            lookList.add(mapList);
                        } else {
                            continue;
                        }
                    }
                }
            }
        }
        return lookList;
    }
    /*  @GetMapping("/lianxian")
      @ApiOperation(value = "连线", notes = "连线" )
      @GetMapping("multiDeviceContrast")
      @ApiOperation(value = "多设备因子对比", notes = "多设备因子对比")
      @ApiImplicitParams(value = {
              @ApiImplicitParam(name = "macs", value = "设备mac,如有多个用逗号分隔", required = true, paramType = "query", dataType = "String"),
              @ApiImplicitParam(name = "sensorKey", value = "传感器key", required = true, paramType = "query", dataType = "String"),
              @ApiImplicitParam(name = "time", value = "时间,日期(格式:2018-03-12)", required = true, paramType = "query", dataType = "String"),})
      public ResultBean<List<Map<String, Object>>> multiDeviceSensor(HttpServletRequest request) throws Exception {
          Map<String, Object> parameters = getParametersStartingWith(request, null);
          ParameterUtils.getTimeType4Time(parameters);
          List<Map<String, Object>> list = historyMinutelyService.getMultiDeviceSensorData(parameters);
          return new ResultBean<List<Map<String, Object>>>(list);
      }
      /*
      * 根据大屏版本号获取版本更新信息
      */
    @GetMapping("screenVersion")
    public Map<String, Object> getScreenVersion(HttpServletRequest request) {
        Map<String, Object> parameters = getParametersStartingWith(request, null);
@@ -2271,30 +2538,16 @@
        return screenVersionService.getScreenVersion(version);
    }
    @GetMapping("devices-sensors-excel")
    @GetMapping("allDeviceExcel")
    @ApiOperation(value = "所有设备多因子数据报表", notes = "所有设备多因子数据报表")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "monitor_point_id", defaultValue = "5", value = "监控站点id", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "monitorPoint", value = "监控站点id", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "sensorKey", value = "传感器key,多个逗号隔开", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "time", value = "时间(格式:2020-04-09)", required = true, paramType = "query", dataType = "String")})
    public ResultBean<List<Map<String, Object>>> getDevicesToExcel(HttpServletRequest request) throws Exception {
            @ApiImplicitParam(name = "startTime", value = "起始时间(格式:2020-08-03)", required = true, paramType = "query", dataType = "String"),
            @ApiImplicitParam(name = "endTime", value = "结束时间(格式:2020-08-04)", required = false, paramType = "query", dataType = "String")})
    public ResultBean<List<Map<String, Object>>> getAllDeviceDataToExcel(HttpServletRequest request) throws Exception {
        Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
        ParameterUtils.getTimeType4Time(parameters);
        /*String[] sensorKeys = parameters.get("sensorKey").toString().split(",");
        parameters.put("sensorKeys", Arrays.asList(sensorKeys));
        List<String> macList = new ArrayList<>();
        List<MonitorPoint> monitorPoints = monitorPointService.getMonitorPointsAndDevicesByRegion(parameters);
        for (MonitorPoint m : monitorPoints) {
            for (Device d : m.getDevices()) {
                macList.add(d.getMac());
            }
        }
        parameters.put("macs", macList);
        List<Map<String, Object>> list = new ArrayList<>();
        if (!CollectionUtils.isEmpty(macList)) {
            list = historyMinutelyService.getDevicesAvgDataToExcel(parameters);
        }*/
        List<Map<String, Object>> list = historyMinutelyService.getDevicesSensorsToExcel(parameters);
        List<Map<String, Object>> list = historyMinutelyService.getAllDeviceDataToExcel(parameters);
        return new ResultBean<List<Map<String, Object>>>(list);
    }
}
}