From dbb8355061b6f60976d410fe475157c6e82f5593 Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Thu, 15 Jun 2023 16:12:21 +0800 Subject: [PATCH] 添加多站多参接口 --- screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java | 51 +++++++----- screen-api/src/main/java/com/moral/api/controller/HistoryHourlyController.java | 6 + screen-api/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java | 2 screen-api/src/main/java/com/moral/api/controller/MonitorPointController.java | 3 screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java | 165 ++++++++++++++++++++++++++++++++-------- screen-api/src/main/resources/mapper/HistoryHourlyMapper.xml | 9 ++ 6 files changed, 174 insertions(+), 62 deletions(-) diff --git a/screen-api/src/main/java/com/moral/api/controller/HistoryHourlyController.java b/screen-api/src/main/java/com/moral/api/controller/HistoryHourlyController.java index bf34467..ed5ad5b 100644 --- a/screen-api/src/main/java/com/moral/api/controller/HistoryHourlyController.java +++ b/screen-api/src/main/java/com/moral/api/controller/HistoryHourlyController.java @@ -83,8 +83,10 @@ Map<String, Object> parameters = WebUtils.getParametersStartingWith(request,null); Object mac = parameters.get("mac"); Object sensorCode = parameters.get("sensor_code"); - Object date = parameters.get("date"); - if (ObjectUtils.isEmpty(mac) || ObjectUtils.isEmpty(sensorCode) || ObjectUtils.isEmpty(date)){ +// Object date = parameters.get("date"); + Object startTime = parameters.get("startTime"); + Object endTime = parameters.get("endTime"); + if (ObjectUtils.isEmpty(mac) || ObjectUtils.isEmpty(sensorCode) || ObjectUtils.isEmpty(startTime)){ return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } QueryWrapper<Device> deviceQueryWrapper = new QueryWrapper<>(); diff --git a/screen-api/src/main/java/com/moral/api/controller/MonitorPointController.java b/screen-api/src/main/java/com/moral/api/controller/MonitorPointController.java index 37bd30c..02a53c6 100644 --- a/screen-api/src/main/java/com/moral/api/controller/MonitorPointController.java +++ b/screen-api/src/main/java/com/moral/api/controller/MonitorPointController.java @@ -130,12 +130,11 @@ */ @PostMapping("getHourlyDataExcel") public ResultMessage getHourlyDataExcel(@RequestBody Map<String, Object> params) { - if (!params.containsKey("macs") || !params.containsKey("sensors") || !params.containsKey("startTime") || !params.containsKey("endTime")) { + if (!params.containsKey("macs") || !params.containsKey("sensors") || !params.containsKey("times") || !params.containsKey("type")) { return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } List<Map<String, Object>> resList = monitorPointService.getHourlyDataDataV3(params); return ResultMessage.ok(resList); } - } diff --git a/screen-api/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java b/screen-api/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java index 6b5bfa3..24e4dbd 100644 --- a/screen-api/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java +++ b/screen-api/src/main/java/com/moral/api/mapper/HistoryHourlyMapper.java @@ -21,6 +21,8 @@ String selectHourlyData(Map<String,Object> params); + List<Map<String,Object>> selectHourlyListData(Map<String,Object> params); + List<Map<String,Object>> selectDataByMacsAndTime(@Param("timeUnits") String timeUnits, @Param("list")List list, @Param("time")String time); diff --git a/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java index deeb591..ebd124d 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/HistoryHourlyServiceImpl.java @@ -68,7 +68,8 @@ @Override public Map<String, Object> getHourlyAqiByMac(String mac) { Date now = new Date(); - String time = DateUtils.dateToDateString(now, DateUtils.yyyy_MM_dd_HH_EN) + ":00:00"; +// String time = DateUtils.dateToDateString(now, DateUtils.yyyy_MM_dd_HH_EN) + ":00:00"; + String time = DateUtils.dateToDateString(DateUtils.addHours(now, -1), DateUtils.yyyy_MM_dd_HH_EN) + ":00:00"; //������������������ Map<String, Object> params = new HashMap<>(); params.put("timeUnits", DateUtils.dateToDateString(now, DateUtils.yyyyMM_EN)); @@ -712,38 +713,26 @@ public List<Map<String, Object>> getHourCompleteDataByMacSensorCodeDate(Map<String, Object> map) { String mac = map.get("mac").toString(); String sensorCode = map.get("sensor_code").toString(); - String date = map.get("date").toString(); - String dateTime = date.replace("-", ""); + String startTime = map.get("startTime").toString(); + String endTime = map.get("endTime").toString(); + String dateTime = startTime.replace("-", ""); String timeUnits = dateTime.substring(0, 6) + "_complete"; Map<String, Object> params = new HashMap<>(); params.put("timeUnits", timeUnits); params.put("mac", mac); + params.put("startTime",startTime); + params.put("endTime",endTime); List resultList = new ArrayList(); - for (int i = 0; i < 24; i++) { + List<Map<String, Object>> maps = historyHourlyMapper.selectHourlyListData(params); + for (Map<String, Object> stringObjectMap : maps) { Map<String, Object> oneHourDateMap = new HashMap<>(); - String j; - if (i < 10) { - j = " 0" + i + ":00:00"; - } else { - j = " " + i + ":00:00"; - } - String time = date + j; - params.put("time", time); - String resultTime = time.substring(0, 13); - if (ObjectUtils.isEmpty(historyHourlyMapper.selectHourlyData(params))) { - oneHourDateMap.put("time", resultTime); - oneHourDateMap.put("values", new ArrayList<>()); - resultList.add(oneHourDateMap); - continue; - } - String oneHourlyData = null; - oneHourlyData = historyHourlyMapper.selectHourlyData(params); - JSONObject js = JSONObject.parseObject(oneHourlyData); + Object value = stringObjectMap.get("value"); + JSONObject js = JSONObject.parseObject(value.toString()); String sensorDate = js.get(sensorCode).toString(); sensorDate = sensorDate.replace("[", ""); sensorDate = sensorDate.replace("]", ""); String[] split = sensorDate.split(","); - oneHourDateMap.put("time", resultTime); + oneHourDateMap.put("time",stringObjectMap.get("time").toString().substring(0,13)); oneHourDateMap.put("values", split); resultList.add(oneHourDateMap); } @@ -863,4 +852,20 @@ return result; } +// @Override +// public String getTVOCByMac(String mac, String time, String sensor,String yearAndMonth) { +// return historyHourlyMapper.getTVOCByMac(mac,time,sensor,yearAndMonth); +// +// } +// +// @Override +// public String getPressureByMac(String mac, String time,String yearAndMonth) { +// return historyHourlyMapper.getPressureByMac(mac,time,yearAndMonth); +// } +// +// @Override +// public Map<String, Object> getDataByMac(String mac, String time,String yearAndMonth) { +// return historyHourlyMapper.getDataByMac(mac,time,yearAndMonth); +// } + } diff --git a/screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java index 57fff86..b29fe46 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/MonitorPointServiceImpl.java @@ -1,30 +1,40 @@ package com.moral.api.service.impl; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.*; import com.moral.api.mapper.DeviceMapper; +import com.moral.api.mapper.HistoryMonthlyMapper; import com.moral.api.mapper.MonitorPointMapper; import com.moral.api.mapper.SensorMapper; import com.moral.api.pojo.form.device.MonitorPointQueryForm; import com.moral.api.service.DeviceService; +import com.moral.api.service.HistoryDailyService; import com.moral.api.service.HistoryHourlyService; +import com.moral.api.service.HistoryMonthlyService; import com.moral.api.service.MonitorPointService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.moral.api.service.OrganizationService; +import com.moral.api.utils.MyLatLng; +import com.moral.api.utils.mapUtils; import com.moral.constant.Constants; import com.moral.util.DateUtils; import com.moral.util.RegionCodeUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import org.springframework.util.unit.DataUnit; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.math.BigDecimal; import java.util.*; +import java.util.stream.Collectors; /** * <p> @@ -53,15 +63,26 @@ @Autowired HistoryHourlyService historyHourlyService; + @Autowired + HistoryDailyService historyDailyService; + + @Autowired + HistoryMonthlyService historyMonthlyService; + @Autowired + HistoryMonthlyMapper historyMonthlyMapper; + @Override public List<MonitorPoint> queryByOrgIdAndRegionCode(MonitorPointQueryForm form) { //������ Integer organizationId = form.getOrganizationId(); Integer regionCode = form.getRegionCode(); String region = null; - if (regionCode != null) { + if (regionCode != null && organizationId!=24) { region = RegionCodeUtils.regionCodeConvertToName(regionCode); } +// if (regionCode != null) { +// region = RegionCodeUtils.regionCodeConvertToName(regionCode); +// } //��������������� List<Organization> childrenOrganization = organizationService.getChildrenOrganizationsById(organizationId); @@ -170,6 +191,11 @@ @Override public List<Map<String, Object>> getHourlyDataDataV3(Map<String, Object> params) { List<String> macs = (List<String>) params.remove("macs"); + List<String> times = (List<String>) params.remove("times"); + String type = params.get("type").toString(); + String startTime = times.get(0); + String endTime = times.get(1); + // String[] macs = params.remove("macs").toString().split(","); // List<String> macsList = Arrays.asList(macs); QueryWrapper<Device> queryWrapper = new QueryWrapper<>(); @@ -181,44 +207,113 @@ } String[] sensors = params.remove("sensors").toString().split(","); List<String> sensorsList = Arrays.asList(sensors); -// List<String> sensorsList = (List<String>) params.remove("sensors"); - String startTime = params.get("startTime").toString(); - String endTime = params.get("endTime").toString(); - Date startDate = DateUtils.getDate(startTime,DateUtils.yyyy_MM_dd_HH_EN); - Date endDate = DateUtils.getDate(endTime,DateUtils.yyyy_MM_dd_HH_EN); List<Map<String,Object>> resultList = new ArrayList<>(); - for (Device device:devices) { - List<HistoryHourly> hourlies = historyHourlyService.getValueByMacAndTime(device.getMac(), DateUtils.getDate(params.get("startTime").toString(), DateUtils.yyyy_MM_dd_HH_EN), DateUtils.getDate(params.get("endTime").toString(), DateUtils.yyyy_MM_dd_HH_EN)); - for (String sensor:sensorsList) { - Map<String, Object> timeValueMap = new LinkedHashMap<>();//key���time���value������������json - QueryWrapper<MonitorPoint> monitorPointQueryWrapper = new QueryWrapper<>(); - monitorPointQueryWrapper.eq("is_delete",Constants.NOT_DELETE); - monitorPointQueryWrapper.eq("id",device.getMonitorPointId()); - MonitorPoint monitorPoint = monitorPointMapper.selectOne(monitorPointQueryWrapper); - timeValueMap.put("������������",monitorPoint.getName()); - timeValueMap.put("name",device.getName()); - QueryWrapper<Sensor> sensorQueryWrapper = new QueryWrapper<>(); - sensorQueryWrapper.eq("is_delete",Constants.NOT_DELETE); - sensorQueryWrapper.eq("code",sensor); - Sensor sensorEntity = sensorMapper.selectOne(sensorQueryWrapper); - timeValueMap.put("sensor",sensorEntity.getName()); - for (HistoryHourly historyHourly : hourlies) { - Date time = historyHourly.getTime(); - String dateStr = DateUtils.dateToDateString(time, "yyyy-MM-dd HH"); - String value = historyHourly.getValue(); - JSONObject jsonObject = JSONObject.parseObject(value); - if (jsonObject.containsKey(sensor)){ - timeValueMap.put(dateStr, jsonObject.get(sensor).toString()); + +// List<String> sensorsList = (List<String>) params.remove("sensors"); +// String startTime = params.get("startTime").toString(); +// String endTime = params.get("endTime").toString(); + if (type.equals("hours")){ + Date startDate = DateUtils.getDate(startTime,DateUtils.yyyy_MM_dd_HH_EN); + Date endDate = DateUtils.getDate(endTime,DateUtils.yyyy_MM_dd_HH_EN); + for (Device device:devices) { + List<HistoryHourly> hourlies = historyHourlyService.getValueByMacAndTime(device.getMac(), DateUtils.getDate(startTime, DateUtils.yyyy_MM_dd_HH_EN), DateUtils.getDate(endTime, DateUtils.yyyy_MM_dd_HH_EN)); + for (String sensor:sensorsList) { + Map<String, Object> timeValueMap = new LinkedHashMap<>();//key���time���value������������json + QueryWrapper<MonitorPoint> monitorPointQueryWrapper = new QueryWrapper<>(); + monitorPointQueryWrapper.eq("is_delete",Constants.NOT_DELETE); + monitorPointQueryWrapper.eq("id",device.getMonitorPointId()); + MonitorPoint monitorPoint = monitorPointMapper.selectOne(monitorPointQueryWrapper); + timeValueMap.put("������������",monitorPoint.getName()); + timeValueMap.put("name",device.getName()); + QueryWrapper<Sensor> sensorQueryWrapper = new QueryWrapper<>(); + sensorQueryWrapper.eq("is_delete",Constants.NOT_DELETE); + sensorQueryWrapper.eq("code",sensor); + Sensor sensorEntity = sensorMapper.selectOne(sensorQueryWrapper); + timeValueMap.put("sensor",sensorEntity.getName()); + for (HistoryHourly historyHourly : hourlies) { + Date time = historyHourly.getTime(); + String dateStr = DateUtils.dateToDateString(time, "yyyy-MM-dd HH"); + String value = historyHourly.getValue(); + JSONObject jsonObject = JSONObject.parseObject(value); + if (jsonObject.containsKey(sensor)){ + timeValueMap.put(dateStr, jsonObject.get(sensor).toString()); + } } + //��������������������� + Date middleDate = startDate; + while (DateUtils.compareDateStr(DateUtils.dateToDateString(endDate,DateUtils.yyyy_MM_dd_HH_EN),DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_dd_HH_EN),DateUtils.yyyy_MM_dd_HH_EN)<=0){ + if (timeValueMap.get(DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_dd_HH_EN)) == null) + timeValueMap.put(DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_dd_HH_EN), null); + middleDate = DateUtils.addHours(middleDate,1); + } + resultList.add(timeValueMap); } - //��������������������� - Date middleDate = startDate; - while (DateUtils.compareDateStr(DateUtils.dateToDateString(endDate,DateUtils.yyyy_MM_dd_HH_EN),DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_dd_HH_EN),DateUtils.yyyy_MM_dd_HH_EN)<=0){ - if (timeValueMap.get(DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_dd_HH_EN)) == null) - timeValueMap.put(DateUtils.dateToDateString(middleDate,DateUtils.yyyy_MM_dd_HH_EN), null); - middleDate = DateUtils.addHours(middleDate,1); + } + } else if("day".equals(type)){ + Date startDate = DateUtils.getDate(startTime,DateUtils.yyyy_MM_dd_HH_EN); + Date endDate = DateUtils.getDate(endTime,DateUtils.yyyy_MM_dd_HH_EN); + for (Device device:devices) { + List<HistoryDaily> historyDailyByMacAndTimeSlot = historyDailyService.getHistoryDailyByMacAndTimeSlot(device.getMac(), startDate, endDate); + for (String sensor:sensorsList) { + Map<String, Object> timeValueMap = new LinkedHashMap<>();//key���time���value������������json + QueryWrapper<MonitorPoint> monitorPointQueryWrapper = new QueryWrapper<>(); + monitorPointQueryWrapper.eq("is_delete",Constants.NOT_DELETE); + monitorPointQueryWrapper.eq("id",device.getMonitorPointId()); + MonitorPoint monitorPoint = monitorPointMapper.selectOne(monitorPointQueryWrapper); + timeValueMap.put("������������",monitorPoint.getName()); + timeValueMap.put("name",device.getName()); + QueryWrapper<Sensor> sensorQueryWrapper = new QueryWrapper<>(); + sensorQueryWrapper.eq("is_delete",Constants.NOT_DELETE); + sensorQueryWrapper.eq("code",sensor); + Sensor sensorEntity = sensorMapper.selectOne(sensorQueryWrapper); + timeValueMap.put("sensor",sensorEntity.getName()); + ArrayList<Double> doubleArrayList = new ArrayList<>(); + for (HistoryDaily historyDaily : historyDailyByMacAndTimeSlot) { + Date time = historyDaily.getTime(); + String dateStr = DateUtils.dateToDateString(time, "yyyy-MM-dd"); + String value = historyDaily.getValue(); + JSONObject jsonObject = JSONObject.parseObject(value); + doubleArrayList.add(Double.parseDouble(jsonObject.get(sensor).toString())); + if (jsonObject.containsKey(sensor)){ + timeValueMap.put(dateStr, jsonObject.get(sensor).toString()); + } + } + Double ListAvg = doubleArrayList.stream().collect(Collectors.averagingDouble(Double::doubleValue)); + double rsAvg = new BigDecimal(ListAvg).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue(); + timeValueMap.put("���������",rsAvg); + resultList.add(timeValueMap); } - resultList.add(timeValueMap); + } + }else { + for (Device device:devices) { + QueryWrapper<HistoryMonthly> HistoryMonthlyWrapper = new QueryWrapper<>(); + HistoryMonthlyWrapper.eq("mac",device.getMac()); + HistoryMonthlyWrapper.between("time",startTime,endTime); + List<HistoryMonthly> historyMonthlyList = historyMonthlyMapper.selectList(HistoryMonthlyWrapper); + for (String sensor:sensorsList) { + Map<String, Object> timeValueMap = new LinkedHashMap<>();//key���time���value������������json + QueryWrapper<MonitorPoint> monitorPointQueryWrapper = new QueryWrapper<>(); + monitorPointQueryWrapper.eq("is_delete",Constants.NOT_DELETE); + monitorPointQueryWrapper.eq("id",device.getMonitorPointId()); + MonitorPoint monitorPoint = monitorPointMapper.selectOne(monitorPointQueryWrapper); + timeValueMap.put("������������",monitorPoint.getName()); + timeValueMap.put("name",device.getName()); + QueryWrapper<Sensor> sensorQueryWrapper = new QueryWrapper<>(); + sensorQueryWrapper.eq("is_delete",Constants.NOT_DELETE); + sensorQueryWrapper.eq("code",sensor); + Sensor sensorEntity = sensorMapper.selectOne(sensorQueryWrapper); + timeValueMap.put("sensor",sensorEntity.getName()); + for (HistoryMonthly historyMonthly : historyMonthlyList) { + Date time = historyMonthly.getTime(); + String dateStr = DateUtils.dateToDateString(time, "yyyy-MM"); + String value = historyMonthly.getValue(); + JSONObject jsonObject = JSONObject.parseObject(value); + if (jsonObject.containsKey(sensor)){ + timeValueMap.put(dateStr, jsonObject.get(sensor).toString()); + } + } + resultList.add(timeValueMap); + } } } return resultList; diff --git a/screen-api/src/main/resources/mapper/HistoryHourlyMapper.xml b/screen-api/src/main/resources/mapper/HistoryHourlyMapper.xml index b2cc720..ab17e79 100644 --- a/screen-api/src/main/resources/mapper/HistoryHourlyMapper.xml +++ b/screen-api/src/main/resources/mapper/HistoryHourlyMapper.xml @@ -9,6 +9,15 @@ AND `time` = #{time} </select> + + <select id="selectHourlyListData" parameterType="java.util.List" resultType="java.util.Map"> + SELECT `value`,`time` + FROM history_hourly_${timeUnits} + WHERE mac = #{mac} + AND `time` BETWEEN #{startTime} and #{endTime} + </select> + + <select id="selectDataByMacsAndTime" parameterType="java.util.List" resultType="java.util.Map"> select mac, `time`, `value` from history_hourly_${timeUnits} where mac in -- Gitblit v1.8.0