From 14753bc669a106315717f0f4a70bf2bf5c3e8995 Mon Sep 17 00:00:00 2001
From: ZhuDongming <773644075@qq.com>
Date: Mon, 13 Apr 2020 15:52:11 +0800
Subject: [PATCH] add大屏报表接口和走航车轨迹接口
---
src/main/resources/mapper/mybatis-config.xml | 3
src/main/java/com/moral/service/HistoryMinutelyService.java | 1
src/main/resources/mapper/DeviceMapper.xml | 14
src/main/webapp/js/moralmap.js | 1
src/main/java/com/moral/mapper/HistoryMapper.java | 1
src/main/webapp/img/car.png | 0
src/main/java/com/moral/service/impl/DeviceServiceImpl.java | 5
src/main/java/com/moral/service/DeviceService.java | 2
src/main/java/com/moral/mapper/HistoryMinutelyMapper.java | 1
src/main/java/com/moral/service/HistoryService.java | 1
src/main/resources/mapper/HistoryMinutelyMapper.xml | 26 +
src/main/java/com/moral/service/impl/HistoryServiceImpl.java | 863 +++++++++++++++++++----------------
src/main/webapp/view/cartrajectory.jsp | 409 +++++++++++++++++
src/main/java/com/moral/mapper/DeviceMapper.java | 2
src/main/resources/mapper/HistoryMapper.xml | 20
src/main/java/com/moral/controller/ScreenController.java | 63 ++
src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java | 26 +
17 files changed, 1,037 insertions(+), 401 deletions(-)
diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java
index 474f0ef..5137bf5 100644
--- a/src/main/java/com/moral/controller/ScreenController.java
+++ b/src/main/java/com/moral/controller/ScreenController.java
@@ -18,6 +18,7 @@
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import java.util.stream.Collectors;
import org.apache.commons.collections.CollectionUtils;
@@ -1339,4 +1340,66 @@
return new ResultBean<List<Map<String, Object>>>(returnList);
}
+ @GetMapping("/carTrajectory")
+ @ApiOperation(value = "���������������������", notes = "���������������������")
+ @ApiImplicitParams(value = {
+ @ApiImplicitParam(name = "mac", value = "������mac������������p5dnd7a0392082���", required = true, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "startTime", value = "������������(���������2020-03-19-14)", required = true, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "endTime", value = "������������(���������2020-03-19-17)", required = true, paramType = "query", dataType = "String")
+ })
+ public ModelAndView carTrajectory(ModelAndView model, HttpServletRequest request) throws Exception {
+ Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
+ String st = parameters.get("startTime").toString();
+ String startYearAndDay = st.substring(0, st.lastIndexOf("-"));
+ String startHour = st.substring(st.lastIndexOf("-") + 1);
+ String startTime = startYearAndDay + " " + startHour + ":00:00";
+ String et = parameters.get("endTime").toString();
+ String endYearAndDay = et.substring(0, et.lastIndexOf("-"));
+ String endHour = et.substring(et.lastIndexOf("-") + 1);
+ String endTime = endYearAndDay + " " + endHour + ":00:00";
+ parameters.put("startTime", startTime);
+ parameters.put("endTime", endTime);
+ String mac = parameters.get("mac").toString();
+ if (mac != null && mac.length() != 0) {
+ List<List<Map<String, Object>>> sensorData = historyService.getCarSensorData(parameters);
+ Map<String, String> sensorsMap = sensorService.getSensorsMap(parameters);
+ List<Map<String, Object>> sensorList = new ArrayList<>();
+ if (sensorData.size() == 3) {
+ sensorList = sensorData.get(0);
+ }
+ JSONObject params = new JSONObject();
+ params.put("sensorInfo", sensorList);
+ params.put("sensorsMap", sensorsMap);
+ String paramsJson = params.toJSONString();
+ model.addObject("carTrajectoryParams", paramsJson);
+ model.setViewName("cartrajectory");
+ return model;
+ } else {
+ StringBuilder msg = new StringBuilder();
+ msg.append(" param[0] mac:");
+ msg.append(mac);
+ log.warn(msg);
+ model.setViewName("403");
+ return model;
+ }
+ }
+
+ @GetMapping("device-excel")
+ @ApiOperation(value = "������������������������", notes = "������������������������")
+ @ApiImplicitParams(value = {
+ @ApiImplicitParam(name = "sensorKey", value = "���������key", required = true, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "organizationId", value = "���������������������id(���99)", required = true, paramType = "query", dataType = "String"),
+ @ApiImplicitParam(name = "time", value = "������(���������2020-04-09���2019-04)", required = true, paramType = "query", dataType = "String")})
+ public ResultBean<List<Map<String, Object>>> getDevicesDataToExcel(HttpServletRequest request) throws Exception {
+ Map<String, Object> parameters = WebUtils.getParametersStartingWith(request, null);
+ ParameterUtils.getTimeType4Time(parameters);
+ parameters.put("sensorKeys", Arrays.asList(parameters.get("sensorKey")));
+ Object organizationId = parameters.get("organizationId");
+ Set<Integer> organizationIds = organizationService.getChildOrganizationIds(Integer.valueOf(organizationId.toString()));
+ List<String> macList = deviceService.getMacsByOrganizationId(new ArrayList<>(organizationIds));
+ parameters.put("macs", macList);
+ List<Map<String, Object>> list = historyMinutelyService.getDevicesAvgDataToExcel(parameters);
+ return new ResultBean<List<Map<String, Object>>>(list);
+ }
+
}
diff --git a/src/main/java/com/moral/mapper/DeviceMapper.java b/src/main/java/com/moral/mapper/DeviceMapper.java
index 2d4ae0f..fdd805e 100644
--- a/src/main/java/com/moral/mapper/DeviceMapper.java
+++ b/src/main/java/com/moral/mapper/DeviceMapper.java
@@ -42,4 +42,6 @@
List<Device> getDeviceList(Example example);
String getLimitDataByDevice(Map<String, Object> parameters);
+
+ List<String> getMacsByOrganizationId(@Param("organizationIdList") List<Object> organizationIdList);
}
\ No newline at end of file
diff --git a/src/main/java/com/moral/mapper/HistoryMapper.java b/src/main/java/com/moral/mapper/HistoryMapper.java
index 99ecf83..d51634e 100644
--- a/src/main/java/com/moral/mapper/HistoryMapper.java
+++ b/src/main/java/com/moral/mapper/HistoryMapper.java
@@ -28,4 +28,5 @@
Map<String, Object> getMonitorPointAVGValueByMonitorPointIdAndTimeslot(@Param("monitor_point_id")String monitor_point_id, @Param("starttime")String starttime, @Param("endtime")String endtime);
+ List<Map<String, Object>> getCarSensorData(Map<String, Object> parameters);
}
\ No newline at end of file
diff --git a/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java b/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java
index 2cb3660..64fcda7 100644
--- a/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java
+++ b/src/main/java/com/moral/mapper/HistoryMinutelyMapper.java
@@ -26,4 +26,5 @@
List<Map<String, Object>> getSensorData2020(Map<String, Object> parameters);
+ List<Map<String, Object>> getDevicesAvgDataToExcel(Map<String, Object> parameters);
}
\ No newline at end of file
diff --git a/src/main/java/com/moral/service/DeviceService.java b/src/main/java/com/moral/service/DeviceService.java
index 8123b72..917c31e 100644
--- a/src/main/java/com/moral/service/DeviceService.java
+++ b/src/main/java/com/moral/service/DeviceService.java
@@ -59,4 +59,6 @@
String getLimitDataByDevice(Map<String, Object> parameters);
Device getDeviceByLongitudeAsc(String mac);
+
+ List<String> getMacsByOrganizationId(List<Object> organizationIdList);
}
diff --git a/src/main/java/com/moral/service/HistoryMinutelyService.java b/src/main/java/com/moral/service/HistoryMinutelyService.java
index 04eb222..7f461f3 100644
--- a/src/main/java/com/moral/service/HistoryMinutelyService.java
+++ b/src/main/java/com/moral/service/HistoryMinutelyService.java
@@ -26,4 +26,5 @@
List<List<Map<String, Object>>> getSensorData(Map<String, Object> parameters) throws Exception;
+ List<Map<String, Object>> getDevicesAvgDataToExcel(Map<String, Object> parameters) throws Exception;
}
diff --git a/src/main/java/com/moral/service/HistoryService.java b/src/main/java/com/moral/service/HistoryService.java
index b2e2035..aad4b39 100644
--- a/src/main/java/com/moral/service/HistoryService.java
+++ b/src/main/java/com/moral/service/HistoryService.java
@@ -29,4 +29,5 @@
Map<String, Object> gitHourlyAQIByMonitorPointIdAndTimeslot(Map<String, Object> parameters);
+ List<List<Map<String, Object>>> getCarSensorData(Map<String, Object> parameters) throws Exception;
}
diff --git a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
index 773ce10..e2ffbe1 100644
--- a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
@@ -631,4 +631,9 @@
}
return null;
}
+
+ @Override
+ public List<String> getMacsByOrganizationId(List<Object> organizationIdList) {
+ return deviceMapper.getMacsByOrganizationId(organizationIdList);
+ }
}
diff --git a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
index 07a9aaa..e9edf52 100644
--- a/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryMinutelyServiceImpl.java
@@ -555,7 +555,6 @@
String startTime = parameters.get("startTime").toString();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime startTimeLocalDateTime = LocalDateTime.parse(startTime, dateTimeFormatter);
- LocalDate time = LocalDate.now();
int year = startTimeLocalDateTime.getYear();
int month = startTimeLocalDateTime.getMonthValue();
String monthStr = month < 10 ? ("0" + month) : month + "";
@@ -596,7 +595,7 @@
}
}
}
- if(mapAvg.get("e76").equals("0��")||mapMin.get("e76").equals("0")||mapMax.get("e76").equals("0")||mapAvg.get("e77").equals("0��")||mapMin.get("e77").equals("0")||mapMax.get("e77").equals("0")){
+ if("0��".equals(mapAvg.get("e76")) || "0".equals(mapMin.get("e76")) || "0".equals(mapMax.get("e76")) || "0��".equals(mapAvg.get("e77")) || "0".equals(mapMin.get("e77")) || "0".equals(mapMax.get("e77"))){
continue;
}
listMapAvg.add(mapAvg);
@@ -610,4 +609,27 @@
return listMaps;
}
+ @Override
+ public List<Map<String, Object>> getDevicesAvgDataToExcel(Map<String, Object> parameters) throws Exception {
+ if ("month".equals(parameters.get("type"))) {
+ parameters.put("timeUnits", "daily");
+ parameters.put("typeFormat", "%Y-%m-%d");
+ String time = parameters.get("time")+"-01T00:00:00";
+ LocalDateTime value = LocalDateTime.parse(time);
+ LocalDateTime start = value.with(TemporalAdjusters.firstDayOfMonth());
+ LocalDateTime end = value.with(TemporalAdjusters.lastDayOfMonth());
+ parameters.put("start", start);
+ parameters.put("end", end);
+ }else if("day".equals(parameters.get("type"))){
+ String time = parameters.get("time")+"T00:00:00";
+ LocalDateTime value = LocalDateTime.parse(time);
+ LocalDateTime end=value.plusHours(23);
+ parameters.put("timeUnits", "hourly");
+ parameters.put("typeFormat", "%Y-%m-%d %H");
+ parameters.put("start", time);
+ parameters.put("end", end);
+ }
+ return historyMinutelyMapper.getDevicesAvgDataToExcel(parameters);
+ }
+
}
diff --git a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
index 6a32a37..a9f03ea 100644
--- a/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/HistoryServiceImpl.java
@@ -1,11 +1,13 @@
package com.moral.service.impl;
+import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
@@ -21,6 +23,7 @@
import javax.annotation.Resource;
+import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
@@ -34,6 +37,7 @@
import com.moral.entity.Sensor;
import com.moral.mapper.DeviceMapper;
import com.moral.mapper.HistoryMapper;
+import com.moral.mapper.HistoryMinutelyMapper;
import com.moral.mapper.MonitorPointMapper;
import com.moral.mapper.OrganizationRelationMapper;
import com.moral.mapper.SensorMapper;
@@ -46,430 +50,497 @@
@Service
public class HistoryServiceImpl implements HistoryService {
- @Resource
- private AccountService accountService;
+ @Resource
+ private AccountService accountService;
- @Resource
- private HistoryMapper historyMapper;
+ @Resource
+ private HistoryMapper historyMapper;
- @Resource
- private DeviceMapper deviceMapper;
+ @Resource
+ private HistoryMinutelyMapper historyMinutelyMapper;
- @Resource
- private SensorMapper sensorMapper;
+ @Resource
+ private DeviceMapper deviceMapper;
+
+ @Resource
+ private SensorMapper sensorMapper;
@Resource
private ProfessionService professionService;
-
+
@Resource
private OrganizationRelationMapper organizationRelationMapper;
-
+
@Resource
private MonitorPointMapper monitorPointMapper;
- @Override
- public Map<String, Object> getAllSensorAverageByDevice(Map<String, Object> parameters) throws Exception {
- ValidateUtil.notNull(parameters.get("areaCode"), "param.is.null");
- ValidateUtil.notNull(parameters.get("accountId"), "param.is.null");
- Map<String,Object> resultMap = new LinkedHashMap<String, Object>();
- accountService.setOrgIdsByAccount(parameters);
- LocalDateTime time = LocalDateTime.now();
- // ������������ -10������
- parameters.put("start", time.minusMinutes(10));
- // ������������ -5������
- parameters.put("end", time.minusMinutes(5));
- List<Sensor> Sensors = sensorMapper.getSensorsByCriteria(parameters);
- List<String> sensorKeys = new ArrayList<String>();
- for (Sensor sensor : Sensors) {
- sensorKeys.add(sensor.getSensorKey());
- }
- parameters.put("sensorKeys", sensorKeys);
- List<Map<String, Object>> list = historyMapper.getAreaAllDataByAccount(parameters);
- resultMap.putAll(list.get(0));
- return resultMap;
- }
+ @Override
+ public Map<String, Object> getAllSensorAverageByDevice(Map<String, Object> parameters) throws Exception {
+ ValidateUtil.notNull(parameters.get("areaCode"), "param.is.null");
+ ValidateUtil.notNull(parameters.get("accountId"), "param.is.null");
+ Map<String, Object> resultMap = new LinkedHashMap<String, Object>();
+ accountService.setOrgIdsByAccount(parameters);
+ LocalDateTime time = LocalDateTime.now();
+ // ������������ -10������
+ parameters.put("start", time.minusMinutes(10));
+ // ������������ -5������
+ parameters.put("end", time.minusMinutes(5));
+ List<Sensor> Sensors = sensorMapper.getSensorsByCriteria(parameters);
+ List<String> sensorKeys = new ArrayList<String>();
+ for (Sensor sensor : Sensors) {
+ sensorKeys.add(sensor.getSensorKey());
+ }
+ parameters.put("sensorKeys", sensorKeys);
+ List<Map<String, Object>> list = historyMapper.getAreaAllDataByAccount(parameters);
+ resultMap.putAll(list.get(0));
+ return resultMap;
+ }
- @Override
- public Map<String, Object> getDeviceRankingBySensorAverage(Map<String, Object> parameters) {
- ValidateUtil.notNull(parameters.get("areaCode"), "param.is.null");
- ValidateUtil.notNull(parameters.get("accountId"), "param.is.null");
- Object macKey = parameters.get("macKey");
- ValidateUtil.notNull(macKey, "param.is.null");
+ @Override
+ public Map<String, Object> getDeviceRankingBySensorAverage(Map<String, Object> parameters) {
+ ValidateUtil.notNull(parameters.get("areaCode"), "param.is.null");
+ ValidateUtil.notNull(parameters.get("accountId"), "param.is.null");
+ Object macKey = parameters.get("macKey");
+ ValidateUtil.notNull(macKey, "param.is.null");
- Map<String, Object> result = new LinkedHashMap<String, Object>();
- accountService.setOrgIdsByAccount(parameters);
- LocalDateTime time = LocalDateTime.now();
- // ������������ -1������
- parameters.put("start", time.minusHours(1));
- parameters.put("end", time);
- List<String> sensorKeys = new ArrayList<String>();
- sensorKeys.add(macKey.toString());
- parameters.put("sensorKeys", sensorKeys);
- List<Map<String, Object>> list = historyMapper.getAreaAllDataByAccount(parameters);
+ Map<String, Object> result = new LinkedHashMap<String, Object>();
+ accountService.setOrgIdsByAccount(parameters);
+ LocalDateTime time = LocalDateTime.now();
+ // ������������ -1������
+ parameters.put("start", time.minusHours(1));
+ parameters.put("end", time);
+ List<String> sensorKeys = new ArrayList<String>();
+ sensorKeys.add(macKey.toString());
+ parameters.put("sensorKeys", sensorKeys);
+ List<Map<String, Object>> list = historyMapper.getAreaAllDataByAccount(parameters);
- for (Map<String, Object> map : list) {
- result.put((String) map.get("name"), map.get(macKey.toString()));
- }
- return result;
- }
- @Override
- public String queryValueByMacAndTime(String mac, Date time){
- return historyMapper.selectValueByMacAndTime(mac, time);
- }
+ for (Map<String, Object> map : list) {
+ result.put((String) map.get("name"), map.get(macKey.toString()));
+ }
+ return result;
+ }
- @Override
- public List<Map<String, Object>> getRegionRankingData(Map<String, Object> parameters) {
- ValidateUtil.notNull(parameters.get("regionCode"), "param.is.null");
- ValidateUtil.notNull(parameters.get("dimension"), "param.is.null");
- ValidateUtil.notNull(parameters.get("sensorKey"), "param.is.null");
- ValidateUtil.notNull(parameters.get("accountId"), "param.is.null");
+ @Override
+ public String queryValueByMacAndTime(String mac, Date time) {
+ return historyMapper.selectValueByMacAndTime(mac, time);
+ }
- String regionCode = parameters.get("regionCode").toString();
- parameters.put("provinceCode", regionCode.substring(0,2).concat("0000"));
- String regionType = "village";
- String nextLevel = "";
- if (regionCode.length() == 6) {
- if (regionCode.endsWith("0000")) {
- regionType = "province";
- nextLevel = "city";
- } else if (regionCode.endsWith("00")) {
- regionType = "city";
- nextLevel = "area";
- } else {
- regionType = "area";
- nextLevel = "town";
- }
- } else {
- if (regionCode.endsWith("000")) {
- regionType = "town";
- nextLevel = "village";
- }
- }
- parameters.put("regionType", regionType);
- parameters.put("nextLevel", nextLevel);
+ @Override
+ public List<Map<String, Object>> getRegionRankingData(Map<String, Object> parameters) {
+ ValidateUtil.notNull(parameters.get("regionCode"), "param.is.null");
+ ValidateUtil.notNull(parameters.get("dimension"), "param.is.null");
+ ValidateUtil.notNull(parameters.get("sensorKey"), "param.is.null");
+ ValidateUtil.notNull(parameters.get("accountId"), "param.is.null");
- LocalDate localDate = LocalDate.now();
- Object timeType = parameters.get("timeType");
- String table = "history";
- String column = "value";
- if ("month".equals(timeType)) {
- if (1 != localDate.getDayOfMonth()) {
- table = "history_daily";
- column = "json";
- }
- parameters.put("start", localDate.with(TemporalAdjusters.firstDayOfMonth()));
- } else if ("day".equals(timeType)) {
- parameters.put("start", localDate);
- } else if ("hour".equals(timeType)) {
- parameters.put("start", LocalDateTime.now().truncatedTo(ChronoUnit.HOURS));
- } else {
- parameters.put("start", LocalDateTime.now().minusMinutes(5));
- }
- parameters.put("table", table);
- parameters.put("column", column);
-
- String dimension = "";
- if ("discharge".equals(parameters.get("dimension"))) {
- dimension = "discharge";
- parameters.put("dimension","monitorPoint");
- }
-
- accountService.setOrgIdsByAccount(parameters);
-
- List<Map<String, Object>> result = historyMapper.getRegionRankingData(parameters);
- for (Map<String, Object> map : result) {
- if (ObjectUtils.isEmpty(map.get("avg"))) {
- map.put("avg", 0);
- }
- }
- if ("profession".equals(parameters.get("dimension"))) {
- List<Profession> professions = professionService.getProfessiontList(parameters);
- for (Map<String, Object> map : result) {
- for (Profession profession : professions) {
- if (map.get("name").equals(profession.getName())) {
- professions.remove(profession);
+ String regionCode = parameters.get("regionCode").toString();
+ parameters.put("provinceCode", regionCode.substring(0, 2).concat("0000"));
+ String regionType = "village";
+ String nextLevel = "";
+ if (regionCode.length() == 6) {
+ if (regionCode.endsWith("0000")) {
+ regionType = "province";
+ nextLevel = "city";
+ } else if (regionCode.endsWith("00")) {
+ regionType = "city";
+ nextLevel = "area";
+ } else {
+ regionType = "area";
+ nextLevel = "town";
+ }
+ } else {
+ if (regionCode.endsWith("000")) {
+ regionType = "town";
+ nextLevel = "village";
+ }
+ }
+ parameters.put("regionType", regionType);
+ parameters.put("nextLevel", nextLevel);
+
+ LocalDate localDate = LocalDate.now();
+ Object timeType = parameters.get("timeType");
+ String table = "history";
+ String column = "value";
+ if ("month".equals(timeType)) {
+ if (1 != localDate.getDayOfMonth()) {
+ table = "history_daily";
+ column = "json";
+ }
+ parameters.put("start", localDate.with(TemporalAdjusters.firstDayOfMonth()));
+ } else if ("day".equals(timeType)) {
+ parameters.put("start", localDate);
+ } else if ("hour".equals(timeType)) {
+ parameters.put("start", LocalDateTime.now().truncatedTo(ChronoUnit.HOURS));
+ } else {
+ parameters.put("start", LocalDateTime.now().minusMinutes(5));
+ }
+ parameters.put("table", table);
+ parameters.put("column", column);
+
+ String dimension = "";
+ if ("discharge".equals(parameters.get("dimension"))) {
+ dimension = "discharge";
+ parameters.put("dimension", "monitorPoint");
+ }
+
+ accountService.setOrgIdsByAccount(parameters);
+
+ List<Map<String, Object>> result = historyMapper.getRegionRankingData(parameters);
+ for (Map<String, Object> map : result) {
+ if (ObjectUtils.isEmpty(map.get("avg"))) {
+ map.put("avg", 0);
+ }
+ }
+ if ("profession".equals(parameters.get("dimension"))) {
+ List<Profession> professions = professionService.getProfessiontList(parameters);
+ for (Map<String, Object> map : result) {
+ for (Profession profession : professions) {
+ if (map.get("name").equals(profession.getName())) {
+ professions.remove(profession);
// if (ObjectUtils.isEmpty(map.get("avg"))) {
// map.put("avg", 0);
// }
- break;
- }
- }
- }
- for (Profession profession : professions) {
- Map<String, Object> map = new HashMap<String, Object>();
- map.put("name", profession.getName());
- map.put("avg", 0);
- result.add(map);
- }
- } else if ("region".equals(parameters.get("dimension"))) {
- List<String> regions = historyMapper.selectNextLevelRegion(parameters);
- for (Map<String, Object> map : result) {
- if (regions.contains(map.get("name"))) {
- regions.remove(map.get("name"));
+ break;
+ }
+ }
+ }
+ for (Profession profession : professions) {
+ Map<String, Object> map = new HashMap<String, Object>();
+ map.put("name", profession.getName());
+ map.put("avg", 0);
+ result.add(map);
+ }
+ } else if ("region".equals(parameters.get("dimension"))) {
+ List<String> regions = historyMapper.selectNextLevelRegion(parameters);
+ for (Map<String, Object> map : result) {
+ if (regions.contains(map.get("name"))) {
+ regions.remove(map.get("name"));
// if (ObjectUtils.isEmpty(map.get("avg"))) {
// map.put("avg", 0);
// }
- }
-
- }
- for (String region : regions) {
- Map<String, Object> map = new HashMap<String, Object>();
- map.put("name", region);
- map.put("avg", 0);
- result.add(map);
- }
- }
- if ("discharge".equals(dimension)) {
- parameters.put("year", LocalDate.now().getYear());
- List<Map<String, Object>> discharges = historyMapper.getDischargeByRegion(parameters);
- for (Map<String, Object> map : result) {
- for (Map<String, Object> discharge : discharges) {
- if (map.get("name").equals(discharge.get("name"))) {
- map.put("value", discharge.get("value"));
- discharges.remove(discharge);
- break;
- }
- }
- }
- Collections.sort(result, new Comparator<Map<String, Object>>() {
- @Override
- public int compare(Map<String, Object> o1, Map<String, Object> o2) {
- return Double.compare(((Double) o2.get("avg"))- Double.valueOf((String) o2.get("value")),
- ((Double) o1.get("avg")) - Double.valueOf((String) o1.get("value")));
- }
- });
- }
- return result;
- }
-
+ }
+
+ }
+ for (String region : regions) {
+ Map<String, Object> map = new HashMap<String, Object>();
+ map.put("name", region);
+ map.put("avg", 0);
+ result.add(map);
+ }
+ }
+ if ("discharge".equals(dimension)) {
+ parameters.put("year", LocalDate.now().getYear());
+ List<Map<String, Object>> discharges = historyMapper.getDischargeByRegion(parameters);
+ for (Map<String, Object> map : result) {
+ for (Map<String, Object> discharge : discharges) {
+ if (map.get("name").equals(discharge.get("name"))) {
+ map.put("value", discharge.get("value"));
+ discharges.remove(discharge);
+ break;
+ }
+ }
+ }
+ Collections.sort(result, new Comparator<Map<String, Object>>() {
+ @Override
+ public int compare(Map<String, Object> o1, Map<String, Object> o2) {
+ return Double.compare(((Double) o2.get("avg")) - Double.valueOf((String) o2.get("value")),
+ ((Double) o1.get("avg")) - Double.valueOf((String) o1.get("value")));
+ }
+ });
+ }
+ return result;
+ }
+
@Override
- public List<Map<String, Object>> getSensorsDataByDevice(Map<String, Object> parameters) {
- ValidateUtil.notNull(parameters.get("deviceVersionId"), "param.is.null");
- ValidateUtil.notNull(parameters.get("mac"), "param.is.null");
- ValidateUtil.notNull(parameters.get("deviceId"), "param.is.null");
- List<Map<String, Object>> sensors = sensorMapper.getSensorsByDeviceVersionId(parameters);
- parameters.put("size", 1);
- List<Map<String, Object>> values = historyMapper.getValueByMacAndSize(parameters);
- JSONObject map = null;
- if (!ObjectUtils.isEmpty(values)) {
- map = JSON.parseObject(values.get(0).get("value").toString());
- }
- Device device = deviceMapper.selectByPrimaryKey(Integer.valueOf((String) parameters.get("deviceId")));
- Map<String, Object> sensorUnits = getSensorUnitByDeviceMac(parameters);
- for (Map<String, Object> sensor : sensors) {
- Object sensorKey = sensor.get("sensor_key");
- sensor.put("name", sensor.get("description"));
- sensor.put("state", device.getState());
- if (!ObjectUtils.isEmpty(map)) {
- sensor.put("value", map.remove(sensor.get("sensor_key")));
- }
- if (sensorUnits.containsKey(sensorKey)) {
- Map<String, Object> sensorUnit = (Map<String, Object>) sensorUnits.get(sensorKey);
- sensor.put("unit", sensorUnit.get("name"));
- if (sensor.containsKey("value")) {
- Object value = sensor.get("value");
- String rules = sensorUnit.get("rules").toString();
- rules = rules.replace("d", "").replace("{0}", "value");
- Expression expression = AviatorEvaluator.compile(rules);
- Map<String, Object> env = new HashMap<String, Object>();
- env.put("value", Double.valueOf(value.toString()));
- value = expression.execute(env);
- sensor.put("value",String.format("%.2f", value));
- }
- }
- }
- return sensors;
- }
+ public List<Map<String, Object>> getSensorsDataByDevice(Map<String, Object> parameters) {
+ ValidateUtil.notNull(parameters.get("deviceVersionId"), "param.is.null");
+ ValidateUtil.notNull(parameters.get("mac"), "param.is.null");
+ ValidateUtil.notNull(parameters.get("deviceId"), "param.is.null");
+ List<Map<String, Object>> sensors = sensorMapper.getSensorsByDeviceVersionId(parameters);
+ parameters.put("size", 1);
+ List<Map<String, Object>> values = historyMapper.getValueByMacAndSize(parameters);
+ JSONObject map = null;
+ if (!ObjectUtils.isEmpty(values)) {
+ map = JSON.parseObject(values.get(0).get("value").toString());
+ }
+ Device device = deviceMapper.selectByPrimaryKey(Integer.valueOf((String) parameters.get("deviceId")));
+ Map<String, Object> sensorUnits = getSensorUnitByDeviceMac(parameters);
+ for (Map<String, Object> sensor : sensors) {
+ Object sensorKey = sensor.get("sensor_key");
+ sensor.put("name", sensor.get("description"));
+ sensor.put("state", device.getState());
+ if (!ObjectUtils.isEmpty(map)) {
+ sensor.put("value", map.remove(sensor.get("sensor_key")));
+ }
+ if (sensorUnits.containsKey(sensorKey)) {
+ Map<String, Object> sensorUnit = (Map<String, Object>) sensorUnits.get(sensorKey);
+ sensor.put("unit", sensorUnit.get("name"));
+ if (sensor.containsKey("value")) {
+ Object value = sensor.get("value");
+ String rules = sensorUnit.get("rules").toString();
+ rules = rules.replace("d", "").replace("{0}", "value");
+ Expression expression = AviatorEvaluator.compile(rules);
+ Map<String, Object> env = new HashMap<String, Object>();
+ env.put("value", Double.valueOf(value.toString()));
+ value = expression.execute(env);
+ sensor.put("value", String.format("%.2f", value));
+ }
+ }
+ }
+ return sensors;
+ }
- @Override
- public List<Map<String, Object>> getSensorDataBySensorKey(Map<String, Object> parameters) {
- Object sensorKey = parameters.get("sensorKey");
- ValidateUtil.notNull(sensorKey, "param.is.null");
- ValidateUtil.notNull(parameters.get("mac"), "param.is.null");
- ValidateUtil.notNull(parameters.get("size"), "param.is.null");
- parameters.put("size", Integer.valueOf(parameters.remove("size").toString()));
- List<Map<String, Object>> values = historyMapper.getValueByMacAndSize(parameters);
- Map<String, Object> sensorUnits = getSensorUnitByDeviceMac(parameters);
- for (Map<String, Object> value : values) {
- JSONObject json = JSON.parseObject(value.remove("value").toString());
- Object sensorKeyValue = json.get(sensorKey);
- if (sensorUnits.containsKey(sensorKey)) {
- Map<String, Object> sensorUnit = (Map<String, Object>) sensorUnits.get(sensorKey);
- String rules = sensorUnit.get("rules").toString();
- rules = rules.replace("d", "").replace("{0}", "value");
- Expression expression = AviatorEvaluator.compile(rules);
- Map<String, Object> env = new HashMap<String, Object>();
- env.put("value", Double.valueOf(sensorKeyValue.toString()));
- sensorKeyValue = expression.execute(env);
- sensorKeyValue = String.format("%.2f", sensorKeyValue);
- }
- value.put("value", sensorKeyValue);
- }
- return values;
- }
+ @Override
+ public List<Map<String, Object>> getSensorDataBySensorKey(Map<String, Object> parameters) {
+ Object sensorKey = parameters.get("sensorKey");
+ ValidateUtil.notNull(sensorKey, "param.is.null");
+ ValidateUtil.notNull(parameters.get("mac"), "param.is.null");
+ ValidateUtil.notNull(parameters.get("size"), "param.is.null");
+ parameters.put("size", Integer.valueOf(parameters.remove("size").toString()));
+ List<Map<String, Object>> values = historyMapper.getValueByMacAndSize(parameters);
+ Map<String, Object> sensorUnits = getSensorUnitByDeviceMac(parameters);
+ for (Map<String, Object> value : values) {
+ JSONObject json = JSON.parseObject(value.remove("value").toString());
+ Object sensorKeyValue = json.get(sensorKey);
+ if (sensorUnits.containsKey(sensorKey)) {
+ Map<String, Object> sensorUnit = (Map<String, Object>) sensorUnits.get(sensorKey);
+ String rules = sensorUnit.get("rules").toString();
+ rules = rules.replace("d", "").replace("{0}", "value");
+ Expression expression = AviatorEvaluator.compile(rules);
+ Map<String, Object> env = new HashMap<String, Object>();
+ env.put("value", Double.valueOf(sensorKeyValue.toString()));
+ sensorKeyValue = expression.execute(env);
+ sensorKeyValue = String.format("%.2f", sensorKeyValue);
+ }
+ value.put("value", sensorKeyValue);
+ }
+ return values;
+ }
- @Override
- public Map<String, Object> getActualDataByRegion(Map<String, Object> parameters) {
- Object sensorKey = parameters.get("sensorKey");
- ValidateUtil.notNull(sensorKey, "param.is.null");
- ValidateUtil.notNull(parameters.get("accountId"), "param.is.null");
- ValidateUtil.notNull(parameters.get("interval"), "param.is.null");
- Integer interval = Integer.valueOf(parameters.get("interval").toString());
- LocalDateTime start, end;
- if (!parameters.containsKey("time")) {
- end = LocalDateTime.now();
- int second = end.getSecond() / interval * interval;
- end = end.truncatedTo(ChronoUnit.MINUTES).plusSeconds(second);
- start = end.minusSeconds(interval);
- } else {
- //start = LocalDateTime.ofEpochSecond(Long.valueOf(parameters.get("time").toString()) / 1000, 0, ZoneOffset.ofHours(8));
- start = LocalDateTime.ofInstant(Instant.ofEpochMilli(Long.valueOf(parameters.get("time").toString())),ZoneId.of("+8"));
- end = start.plusSeconds(interval);
- }
- parameters.put("start", start);
- parameters.put("end", end);
- parameters.put("sensorKeys", Arrays.asList(((String) sensorKey).split(",")));
- accountService.setOrgIdsByAccount(parameters);
- Map<String, Object> result = historyMapper.getActualDataByRegion(parameters);
- if (ObjectUtils.isEmpty(result)) {
- result = new HashMap<String, Object>();
- }
- result.put("time", end.toInstant(ZoneOffset.of("+8")).toEpochMilli());
- return result;
- }
+ @Override
+ public Map<String, Object> getActualDataByRegion(Map<String, Object> parameters) {
+ Object sensorKey = parameters.get("sensorKey");
+ ValidateUtil.notNull(sensorKey, "param.is.null");
+ ValidateUtil.notNull(parameters.get("accountId"), "param.is.null");
+ ValidateUtil.notNull(parameters.get("interval"), "param.is.null");
+ Integer interval = Integer.valueOf(parameters.get("interval").toString());
+ LocalDateTime start, end;
+ if (!parameters.containsKey("time")) {
+ end = LocalDateTime.now();
+ int second = end.getSecond() / interval * interval;
+ end = end.truncatedTo(ChronoUnit.MINUTES).plusSeconds(second);
+ start = end.minusSeconds(interval);
+ } else {
+ //start = LocalDateTime.ofEpochSecond(Long.valueOf(parameters.get("time").toString()) / 1000, 0, ZoneOffset.ofHours(8));
+ start = LocalDateTime.ofInstant(Instant.ofEpochMilli(Long.valueOf(parameters.get("time").toString())), ZoneId.of("+8"));
+ end = start.plusSeconds(interval);
+ }
+ parameters.put("start", start);
+ parameters.put("end", end);
+ parameters.put("sensorKeys", Arrays.asList(((String) sensorKey).split(",")));
+ accountService.setOrgIdsByAccount(parameters);
+ Map<String, Object> result = historyMapper.getActualDataByRegion(parameters);
+ if (ObjectUtils.isEmpty(result)) {
+ result = new HashMap<String, Object>();
+ }
+ result.put("time", end.toInstant(ZoneOffset.of("+8")).toEpochMilli());
+ return result;
+ }
- @Resource
- private SensorUnitMapper sensorUnitMapper;
- @Override
- public Map<String, Object> getSensorUnitByDeviceMac(Map<String, Object> parameters){
- Map<String, Object> resultMap = new HashMap<String, Object>();
- List<Map<String, Object>> list = sensorUnitMapper.getSensorUnitByDeviceMac(parameters);
- for (Map<String, Object> map : list) {
- resultMap.put(map.remove("sensor_key").toString(), map);
- }
- return resultMap;
-
- }
+ @Resource
+ private SensorUnitMapper sensorUnitMapper;
- @Override
- public Map<String, Object> gitHourlyAQIByMacAndTimeslot(Map<String, Object> parameters) {
- String mac = parameters.get("mac").toString();
- //������������
- LocalDate localDate = LocalDate.now();
- Calendar c = Calendar.getInstance();//������������������������������������
- int endHour = c.get(Calendar.HOUR_OF_DAY);
- String endTime = localDate+" "+endHour+":00:00";
-
- String startTime;
- if(endHour == 0) {
- LocalDate startDate = localDate.minusDays(1);
- startTime = startDate+" "+"23:00:00";
- }else {
- int startHour = endHour-1;
- startTime = localDate+" "+startHour+":00:00";
- }
- Map<String, Object> map = historyMapper.getAVGValueByMacAndTimeslot(mac, startTime, endTime);
- System.out.println(map);
- Map<String, Object> returnMap = new HashMap<>();
- if (map.isEmpty()) {
- returnMap.put("AQI", "N/V");
- } else {
- Map<String, Double> AQIMap = new HashMap<>();
- for (Map.Entry<String, Object> entry : map.entrySet()) {
- String key = entry.getKey();
- Double value = Double.parseDouble(entry.getValue().toString());
- AQIMap.put(key, value);
- }
- returnMap = AQICalculation.hourlyAQI(AQIMap);
- }
-
- return returnMap;
- }
+ @Override
+ public Map<String, Object> getSensorUnitByDeviceMac(Map<String, Object> parameters) {
+ Map<String, Object> resultMap = new HashMap<String, Object>();
+ List<Map<String, Object>> list = sensorUnitMapper.getSensorUnitByDeviceMac(parameters);
+ for (Map<String, Object> map : list) {
+ resultMap.put(map.remove("sensor_key").toString(), map);
+ }
+ return resultMap;
- @Override
- public List<Map<String, Object>> getMointorPointRankByOrganizationId(Map<String, Object> parameters) {
- //������������id
- String organizationId = parameters.get("organization_id").toString();
- //������������������������������������������������������id
- List<Object> organizationIdList = new ArrayList<>();
- organizationIdList.add(organizationId);
- //���������������������������������id
- List<Object> parentIdList = new ArrayList<>();
- parentIdList.add(organizationId);
-
- //������������
- for(int i=0;i<10;i++) {
- if(!parentIdList.isEmpty()) {
- //������������������������������
- List<Map<String, Object>> childIdList = organizationRelationMapper.getChildIdByParentId(parentIdList);
- //���������������id������
- parentIdList.clear();
- //������������id������������������
- for (Map<String, Object> map : childIdList) {
- organizationIdList.add(map.get("child_id"));
- parentIdList.add(map.get("child_id"));
- }
- }else {
- break;
- }
- }
-
- //������������id������������id
- List<Map<String, Object>> monitorPointIdListMap = monitorPointMapper.getIdByOrganizationId(organizationIdList);
- //���List<Map<String, Object>>���������List<Object>
- List<Object> monitorPointIdList = new ArrayList<>();
- for (Map<String, Object> map : monitorPointIdListMap) {
- monitorPointIdList.add(map.get("id"));
- }
-
- //������������id���������������������������
- //������������������������
- Calendar rightNow = Calendar.getInstance();
- //���������������������������
- Calendar beforeTime = Calendar.getInstance();
- beforeTime.add(Calendar.MINUTE, -5);// 5���������������������
- Date beforeD = beforeTime.getTime();
- Date end = rightNow.getTime();
- String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(end);
- String before5Time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(beforeD); // ������������������
-
- String sensor = parameters.get("sensor").toString();
- List<Map<String, Object>> result = historyMapper.getAVGSensorRankByMonitorPointIdList(sensor, monitorPointIdList, before5Time, endTime);
- return result;
- }
+ }
- @Override
- public Map<String, Object> gitHourlyAQIByMonitorPointIdAndTimeslot(Map<String, Object> parameters) {
- String monitor_point_id = parameters.get("monitor_point_id").toString();
- //������������
- LocalDate localDate = LocalDate.now();
- Calendar c = Calendar.getInstance();//������������������������������������
- int endHour = c.get(Calendar.HOUR_OF_DAY);
- String endTime = localDate+" "+endHour+":00:00";
-
- String startTime;
- if(endHour == 0) {
- LocalDate startDate = localDate.minusDays(1);
- startTime = startDate+" "+"23:00:00";
- }else {
- int startHour = endHour-1;
- startTime = localDate+" "+startHour+":00:00";
- }
- Map<String, Object> map = historyMapper.getMonitorPointAVGValueByMonitorPointIdAndTimeslot(monitor_point_id, startTime, endTime);
- System.out.println(map);
- Map<String, Object> returnMap = new HashMap<>();
- if (map.isEmpty()) {
- returnMap.put("AQI", "N/V");
- } else {
- Map<String, Double> AQIMap = new HashMap<>();
- for (Map.Entry<String, Object> entry : map.entrySet()) {
- String key = entry.getKey();
- Double value = Double.parseDouble(entry.getValue().toString());
- AQIMap.put(key, value);
- }
- returnMap = AQICalculation.hourlyAQI(AQIMap);
- }
-
- return returnMap;
- }
+ @Override
+ public Map<String, Object> gitHourlyAQIByMacAndTimeslot(Map<String, Object> parameters) {
+ String mac = parameters.get("mac").toString();
+ //������������
+ LocalDate localDate = LocalDate.now();
+ Calendar c = Calendar.getInstance();//������������������������������������
+ int endHour = c.get(Calendar.HOUR_OF_DAY);
+ String endTime = localDate + " " + endHour + ":00:00";
+
+ String startTime;
+ if (endHour == 0) {
+ LocalDate startDate = localDate.minusDays(1);
+ startTime = startDate + " " + "23:00:00";
+ } else {
+ int startHour = endHour - 1;
+ startTime = localDate + " " + startHour + ":00:00";
+ }
+ Map<String, Object> map = historyMapper.getAVGValueByMacAndTimeslot(mac, startTime, endTime);
+ System.out.println(map);
+ Map<String, Object> returnMap = new HashMap<>();
+ if (map.isEmpty()) {
+ returnMap.put("AQI", "N/V");
+ } else {
+ Map<String, Double> AQIMap = new HashMap<>();
+ for (Map.Entry<String, Object> entry : map.entrySet()) {
+ String key = entry.getKey();
+ Double value = Double.parseDouble(entry.getValue().toString());
+ AQIMap.put(key, value);
+ }
+ returnMap = AQICalculation.hourlyAQI(AQIMap);
+ }
+
+ return returnMap;
+ }
+
+ @Override
+ public List<Map<String, Object>> getMointorPointRankByOrganizationId(Map<String, Object> parameters) {
+ //������������id
+ String organizationId = parameters.get("organization_id").toString();
+ //������������������������������������������������������id
+ List<Object> organizationIdList = new ArrayList<>();
+ organizationIdList.add(organizationId);
+ //���������������������������������id
+ List<Object> parentIdList = new ArrayList<>();
+ parentIdList.add(organizationId);
+
+ //������������
+ for (int i = 0; i < 10; i++) {
+ if (!parentIdList.isEmpty()) {
+ //������������������������������
+ List<Map<String, Object>> childIdList = organizationRelationMapper.getChildIdByParentId(parentIdList);
+ //���������������id������
+ parentIdList.clear();
+ //������������id������������������
+ for (Map<String, Object> map : childIdList) {
+ organizationIdList.add(map.get("child_id"));
+ parentIdList.add(map.get("child_id"));
+ }
+ } else {
+ break;
+ }
+ }
+
+ //������������id������������id
+ List<Map<String, Object>> monitorPointIdListMap = monitorPointMapper.getIdByOrganizationId(organizationIdList);
+ //���List<Map<String, Object>>���������List<Object>
+ List<Object> monitorPointIdList = new ArrayList<>();
+ for (Map<String, Object> map : monitorPointIdListMap) {
+ monitorPointIdList.add(map.get("id"));
+ }
+
+ //������������id���������������������������
+ //������������������������
+ Calendar rightNow = Calendar.getInstance();
+ //���������������������������
+ Calendar beforeTime = Calendar.getInstance();
+ beforeTime.add(Calendar.MINUTE, -5);// 5���������������������
+ Date beforeD = beforeTime.getTime();
+ Date end = rightNow.getTime();
+ String endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(end);
+ String before5Time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(beforeD); // ������������������
+
+ String sensor = parameters.get("sensor").toString();
+ List<Map<String, Object>> result = historyMapper.getAVGSensorRankByMonitorPointIdList(sensor, monitorPointIdList, before5Time, endTime);
+ return result;
+ }
+
+ @Override
+ public Map<String, Object> gitHourlyAQIByMonitorPointIdAndTimeslot(Map<String, Object> parameters) {
+ String monitor_point_id = parameters.get("monitor_point_id").toString();
+ //������������
+ LocalDate localDate = LocalDate.now();
+ Calendar c = Calendar.getInstance();//������������������������������������
+ int endHour = c.get(Calendar.HOUR_OF_DAY);
+ String endTime = localDate + " " + endHour + ":00:00";
+
+ String startTime;
+ if (endHour == 0) {
+ LocalDate startDate = localDate.minusDays(1);
+ startTime = startDate + " " + "23:00:00";
+ } else {
+ int startHour = endHour - 1;
+ startTime = localDate + " " + startHour + ":00:00";
+ }
+ Map<String, Object> map = historyMapper.getMonitorPointAVGValueByMonitorPointIdAndTimeslot(monitor_point_id, startTime, endTime);
+ System.out.println(map);
+ Map<String, Object> returnMap = new HashMap<>();
+ if (map.isEmpty()) {
+ returnMap.put("AQI", "N/V");
+ } else {
+ Map<String, Double> AQIMap = new HashMap<>();
+ for (Map.Entry<String, Object> entry : map.entrySet()) {
+ String key = entry.getKey();
+ Double value = Double.parseDouble(entry.getValue().toString());
+ AQIMap.put(key, value);
+ }
+ returnMap = AQICalculation.hourlyAQI(AQIMap);
+ }
+
+ return returnMap;
+ }
+
+ @Override
+ public List<List<Map<String, Object>>> getCarSensorData(Map<String, Object> parameters) throws Exception {
+ String startTime = parameters.get("startTime").toString();
+ DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+ LocalDateTime startTimeLocalDateTime = LocalDateTime.parse(startTime, dateTimeFormatter);
+ int year = startTimeLocalDateTime.getYear();
+ int month = startTimeLocalDateTime.getMonthValue();
+ String monthStr = month < 10 ? ("0" + month) : month + "";
+ String yearAndMonth = year + monthStr;
+ List<Sensor> sensors = sensorMapper.getSensorsByMac(parameters);
+ List<String> sensorKeys = new ArrayList<>();
+ for (Sensor sensor : sensors) {
+ sensorKeys.add(sensor.getSensorKey());
+ }
+ parameters.put("sensorKeys", sensorKeys);
+ List<Map<String, Object>> listMap = null;
+ listMap = historyMapper.getCarSensorData(parameters);
+ if (CollectionUtils.isEmpty(listMap)) {
+ if (year <= 2019) {
+ listMap = historyMinutelyMapper.getSensorData(parameters);
+ } else {
+ parameters.put("yearAndMonth", yearAndMonth);
+ listMap = historyMinutelyMapper.getSensorData2020(parameters);
+ }
+ }
+ List<List<Map<String, Object>>> listMaps = new ArrayList<>();
+ List<Map<String, Object>> listMapAvg = new ArrayList<>();
+ List<Map<String, Object>> listMapMin = new ArrayList<>();
+ List<Map<String, Object>> listMapMax = new ArrayList<>();
+ if (CollectionUtils.isNotEmpty(listMap)) {
+ for (Map<String, Object> map : listMap) {
+ Map<String, Object> mapAvg = new LinkedHashMap<>();
+ Map<String, Object> mapMin = new LinkedHashMap<>();
+ Map<String, Object> mapMax = new LinkedHashMap<>();
+ mapAvg.put("time", map.get("time"));
+ mapMin.put("time", map.get("time"));
+ mapMax.put("time", map.get("time"));
+ for (Map.Entry<String, Object> entry : map.entrySet()) {
+ for (Sensor sensor : sensors) {
+ if (sensor.getSensorKey().equals(entry.getKey())) {
+ mapAvg.put(entry.getKey(), new BigDecimal(entry.getValue().toString().replace("\"", "")).stripTrailingZeros().toPlainString() + sensor.getUnit());
+ } else if (("min" + sensor.getSensorKey()).equals(entry.getKey())) {
+ mapMin.put(entry.getKey().substring(3), new BigDecimal(entry.getValue().toString().replace("\"", "")).stripTrailingZeros().toPlainString());
+ } else if (("max" + sensor.getSensorKey()).equals(entry.getKey())) {
+ mapMax.put(entry.getKey().substring(3), new BigDecimal(entry.getValue().toString().replace("\"", "")).stripTrailingZeros().toPlainString());
+ }
+ }
+ }
+ if ("0��".equals(mapAvg.get("e76")) || "0".equals(mapMin.get("e76")) || "0".equals(mapMax.get("e76")) || "0��".equals(mapAvg.get("e77")) || "0".equals(mapMin.get("e77")) || "0".equals(mapMax.get("e77"))) {
+ continue;
+ }
+ listMapAvg.add(mapAvg);
+ listMapMin.add(mapMin);
+ listMapMax.add(mapMax);
+ }
+ listMaps.add(listMapAvg);
+ listMaps.add(listMapMin);
+ listMaps.add(listMapMax);
+ }
+ return listMaps;
+ }
}
diff --git a/src/main/resources/mapper/DeviceMapper.xml b/src/main/resources/mapper/DeviceMapper.xml
index 68910e8..c2c17b5 100644
--- a/src/main/resources/mapper/DeviceMapper.xml
+++ b/src/main/resources/mapper/DeviceMapper.xml
@@ -216,7 +216,7 @@
</where>
</select>
<select id="selectByOrgIdAndMpId" resultMap="BaseResultMap">
- SELECT dev.*,dve.version as device_version_value from device dev
+ SELECT dev.*,dve.version as device_version_value,mpt.* from device dev
left join monitor_point mpt on dev.monitor_point_id = mpt.id
left join device_version dve on dev.device_version_id = dve.id
<where>
@@ -418,4 +418,16 @@
<select id="getLimitDataByDevice" resultType="String">
SELECT limit_val FROM view_device_density WHERE mac = #{mac}
</select>
+
+ <select id="getMacsByOrganizationId" resultType="string">
+ SELECT d.mac
+ FROM monitor_point mp, device d
+ WHERE mp.id = d.monitor_point_id
+ AND mp.organization_id IN
+ <foreach collection="organizationIdList" index="index" item="organizationId" open="(" separator="," close=")">
+ #{organizationId}
+ </foreach>
+ AND d.is_delete = '0'
+ </select>
+
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/HistoryMapper.xml b/src/main/resources/mapper/HistoryMapper.xml
index 7835d14..b45afab 100644
--- a/src/main/resources/mapper/HistoryMapper.xml
+++ b/src/main/resources/mapper/HistoryMapper.xml
@@ -216,4 +216,24 @@
AND h.time BETWEEN #{starttime} AND #{endtime}
</select>
+ <!-- ���������sensor������ -->
+ <select id="getCarSensorData" resultType="java.util.LinkedHashMap">
+ SELECT
+ DATE_FORMAT(h.time,'%Y-%m-%d %H:%i:%s') time,
+ <foreach collection="sensorKeys" item="sensorKey" separator=",">
+ h.value->'$.${sensorKey}' as '${sensorKey}'
+ </foreach>
+ FROM
+ history as h
+ <where>
+ <if test="mac!=null">
+ and h.mac=#{mac}
+ </if>
+ and h.time >= #{startTime}
+ and h.time <![CDATA[<]]> #{endTime}
+ </where>
+ ORDER BY
+ h.time
+ </select>
+
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/HistoryMinutelyMapper.xml b/src/main/resources/mapper/HistoryMinutelyMapper.xml
index 3c4b0f8..fe8287c 100644
--- a/src/main/resources/mapper/HistoryMinutelyMapper.xml
+++ b/src/main/resources/mapper/HistoryMinutelyMapper.xml
@@ -152,7 +152,7 @@
and hm.mac=#{mac}
</if>
and hm.time >= #{startTime}
- and hm.time <![CDATA[<=]]> #{endTime}
+ and hm.time <![CDATA[<]]> #{endTime}
</where>
ORDER BY
hm.time
@@ -173,10 +173,32 @@
and hm.mac=#{mac}
</if>
and hm.time >= #{startTime}
- and hm.time <![CDATA[<=]]> #{endTime}
+ and hm.time <![CDATA[<]]> #{endTime}
</where>
ORDER BY
hm.time
</select>
+ <select id="getDevicesAvgDataToExcel" resultType="java.util.Map">
+ SELECT
+ h.mac,DATE_FORMAT(time, #{typeFormat}) time,
+ <foreach collection="sensorKeys" separator="," item="sensorKey">
+ AVG(json->'$.${sensorKey}[0]') AS '${sensorKey}'
+ </foreach>
+ FROM
+ history_${timeUnits} h
+ WHERE
+ h.time >= #{start}
+ AND h.time <![CDATA[<=]]> #{end}
+ AND h.mac in
+ <foreach collection="macs" open="(" separator="," close=")"
+ item="mac">
+ #{mac}
+ </foreach>
+ GROUP BY
+ h.mac,DATE_FORMAT(time, #{typeFormat})
+ ORDER BY
+ h.mac
+ </select>
+
</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/mybatis-config.xml b/src/main/resources/mapper/mybatis-config.xml
index 6c9d9fc..f6f3497 100644
--- a/src/main/resources/mapper/mybatis-config.xml
+++ b/src/main/resources/mapper/mybatis-config.xml
@@ -4,6 +4,9 @@
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
+ <settings>
+ <setting name="callSettersOnNulls" value="true"/>
+ </settings>
<typeAliases>
<typeAlias type="com.moral.mapper.type.AlarmConfigValueHandle" alias="AlarmConfigValueHandle"/>
<typeAlias type="com.moral.mapper.type.AdjustValueTypeHandle" alias="AdjustValueTypeHandle"/>
diff --git a/src/main/webapp/img/car.png b/src/main/webapp/img/car.png
new file mode 100644
index 0000000..c99cf9e
--- /dev/null
+++ b/src/main/webapp/img/car.png
Binary files differ
diff --git a/src/main/webapp/js/moralmap.js b/src/main/webapp/js/moralmap.js
index 0ad00e8..93fb122 100644
--- a/src/main/webapp/js/moralmap.js
+++ b/src/main/webapp/js/moralmap.js
@@ -1063,6 +1063,7 @@
}
}
}
+ listView.refreshState(deviceStates);
for (var i in states) {
var state = states[i];
var mpoint = moralMap.getMpoint(state.id);
diff --git a/src/main/webapp/view/cartrajectory.jsp b/src/main/webapp/view/cartrajectory.jsp
new file mode 100644
index 0000000..9c5a4d5
--- /dev/null
+++ b/src/main/webapp/view/cartrajectory.jsp
@@ -0,0 +1,409 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<!DOCTYPE html>
+<head>
+ <meta charset="utf-8"/>
+ <title></title>
+ <script type="text/javascript"
+ src="http://api.map.baidu.com/api?v=2.0&ak=rER1sgBIcQxkfNSlm2wmBGZGgEERrooM"></script>
+ <script type="text/javascript" src="/js/jquery.min.js"></script>
+</head>
+<style type="text/css">
+ body,
+ html,
+ #mapCanvas {
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+ margin: 0;
+ z-index: 0;
+ font-size: 14px;
+ font-family: "������������";
+ }
+
+ .main_body {
+ border: 0;
+ margin: 0;
+ width: 100%;
+ height: 100%;
+ position: relative;
+ }
+
+ * {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ }
+
+ #cpm {
+ width: 300px;
+ height: 100px;
+ position: absolute;
+ background-color: #ffffff;
+ display: none;
+ left: 50%;
+ top: 50%;
+ margin-left: -150px;
+ margin-top: -50px;
+ z-index: 11;
+ color: #000000;
+ border: 2px solid #FF7F50;
+ font-size: 28px;
+ line-height: 100px;
+ text-align: center;
+ }
+
+ .BMap_top {
+ display: none;
+ }
+
+ .BMap_center {
+ display: none;
+ }
+
+ .BMap_bubble_title {
+ color: white;
+ padding: 0 5px 0 5px;
+ background-color: #2DA0EB;
+ }
+
+ .BMap_bubble_content {
+ background-color: white;
+ padding: 5px;
+ }
+
+ .BMap_pop > img {
+ top: 42px !important;
+ margin-left: -10px;
+ }
+
+ .BMap_pop div:nth-child(1) div {
+ display: none;
+ }
+
+ .BMap_pop div:nth-child(3) {
+ display: none;
+ }
+
+ .BMap_pop div:nth-child(5) {
+ display: none;
+ }
+
+ .BMap_pop div:nth-child(7) {
+ display: none;
+ }
+
+ .BMap_pop div:nth-child(9) {
+ top: 35px !important;
+ border-radius: 5px;
+ }
+
+</style>
+
+<body>
+<div class="main_body">
+ <div id="cpm">���������������������</div>
+ <div id="mapCanvas"></div> <!-- ������������ -->
+ <!-- ���sensorInfo,regionCode,regionName,monitorPoint,device-->
+ <div id="carTrajectoryParams" style="display: none;">
+ ${requestScope.carTrajectoryParams}
+ </div>
+</div>
+</body>
+</html>
+
+<script type="text/javascript">
+ var moralMap = {};
+ var GPS = {
+ PI: 3.14159265358979324,
+ x_pi: 3.14159265358979324 * 3000.0 / 180.0,
+ delta: function (lat, lon) {
+ var a = 6378245.0; // a: ������������������������������������������������������������������
+ var ee = 0.00669342162296594323; // ee: ���������������������
+ var dLat = this.transformLat(lon - 105.0, lat - 35.0);
+ var dLon = this.transformLon(lon - 105.0, lat - 35.0);
+ var radLat = lat / 180.0 * this.PI;
+ var magic = Math.sin(radLat);
+ magic = 1 - ee * magic * magic;
+ var sqrtMagic = Math.sqrt(magic);
+ dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * this.PI);
+ dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * this.PI);
+ return {'lat': dLat, 'lon': dLon};
+ },
+
+ //WGS-84 to GCJ-02
+ gcj_encrypt: function (wgsLat, wgsLon) {
+ if (this.outOfChina(wgsLat, wgsLon))
+ return {'lat': wgsLat, 'lon': wgsLon};
+
+ var d = this.delta(wgsLat, wgsLon);
+ return {'lat': wgsLat + d.lat, 'lon': wgsLon + d.lon};
+ },
+ //GCJ-02 to WGS-84
+ gcj_decrypt: function (gcjLat, gcjLon) {
+ if (this.outOfChina(gcjLat, gcjLon))
+ return {'lat': gcjLat, 'lon': gcjLon};
+
+ var d = this.delta(gcjLat, gcjLon);
+ return {'lat': gcjLat - d.lat, 'lon': gcjLon - d.lon};
+ },
+ //GCJ-02 to WGS-84 exactly
+ gcj_decrypt_exact: function (gcjLat, gcjLon) {
+ var initDelta = 0.01;
+ var threshold = 0.000000001;
+ var dLat = initDelta, dLon = initDelta;
+ var mLat = gcjLat - dLat, mLon = gcjLon - dLon;
+ var pLat = gcjLat + dLat, pLon = gcjLon + dLon;
+ var wgsLat, wgsLon, i = 0;
+ while (1) {
+ wgsLat = (mLat + pLat) / 2;
+ wgsLon = (mLon + pLon) / 2;
+ var tmp = this.gcj_encrypt(wgsLat, wgsLon)
+ dLat = tmp.lat - gcjLat;
+ dLon = tmp.lon - gcjLon;
+ if ((Math.abs(dLat) < threshold) && (Math.abs(dLon) < threshold))
+ break;
+
+ if (dLat > 0) pLat = wgsLat; else mLat = wgsLat;
+ if (dLon > 0) pLon = wgsLon; else mLon = wgsLon;
+
+ if (++i > 10000) break;
+ }
+ //console.log(i);
+ return {'lat': wgsLat, 'lon': wgsLon};
+ },
+ //GCJ-02 to BD-09
+ bd_encrypt: function (gcjLat, gcjLon) {
+ var x = gcjLon, y = gcjLat;
+ var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * this.x_pi);
+ var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * this.x_pi);
+ bdLon = z * Math.cos(theta) + 0.0065;
+ bdLat = z * Math.sin(theta) + 0.006;
+ return {'lat': bdLat, 'lon': bdLon};
+ },
+ //BD-09 to GCJ-02
+ bd_decrypt: function (bdLat, bdLon) {
+ var x = bdLon - 0.0065, y = bdLat - 0.006;
+ var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * this.x_pi);
+ var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * this.x_pi);
+ var gcjLon = z * Math.cos(theta);
+ var gcjLat = z * Math.sin(theta);
+ return {'lat': gcjLat, 'lon': gcjLon};
+ },
+ //WGS-84 to Web mercator
+ //mercatorLat -> y mercatorLon -> x
+ mercator_encrypt: function (wgsLat, wgsLon) {
+ var x = wgsLon * 20037508.34 / 180.;
+ var y = Math.log(Math.tan((90. + wgsLat) * this.PI / 360.)) / (this.PI / 180.);
+ y = y * 20037508.34 / 180.;
+ return {'lat': y, 'lon': x};
+ },
+ // Web mercator to WGS-84
+ // mercatorLat -> y mercatorLon -> x
+ mercator_decrypt: function (mercatorLat, mercatorLon) {
+ var x = mercatorLon / 20037508.34 * 180.;
+ var y = mercatorLat / 20037508.34 * 180.;
+ y = 180 / this.PI * (2 * Math.atan(Math.exp(y * this.PI / 180.)) - this.PI / 2);
+ return {'lat': y, 'lon': x};
+ },
+ // two point's distance
+ distance: function (latA, lonA, latB, lonB) {
+ var earthR = 6371000.;
+ var x = Math.cos(latA * this.PI / 180.) * Math.cos(latB * this.PI / 180.) * Math.cos((lonA - lonB) * this.PI / 180);
+ var y = Math.sin(latA * this.PI / 180.) * Math.sin(latB * this.PI / 180.);
+ var s = x + y;
+ if (s > 1) s = 1;
+ if (s < -1) s = -1;
+ var alpha = Math.acos(s);
+ var distance = alpha * earthR;
+ return distance;
+ },
+ outOfChina: function (lat, lon) {
+ if (lon < 72.004 || lon > 137.8347)
+ return true;
+ if (lat < 0.8293 || lat > 55.8271)
+ return true;
+ return false;
+ },
+ transformLat: function (x, y) {
+ var ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
+ ret += (20.0 * Math.sin(6.0 * x * this.PI) + 20.0 * Math.sin(2.0 * x * this.PI)) * 2.0 / 3.0;
+ ret += (20.0 * Math.sin(y * this.PI) + 40.0 * Math.sin(y / 3.0 * this.PI)) * 2.0 / 3.0;
+ ret += (160.0 * Math.sin(y / 12.0 * this.PI) + 320 * Math.sin(y * this.PI / 30.0)) * 2.0 / 3.0;
+ return ret;
+ },
+ transformLon: function (x, y) {
+ var ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
+ ret += (20.0 * Math.sin(6.0 * x * this.PI) + 20.0 * Math.sin(2.0 * x * this.PI)) * 2.0 / 3.0;
+ ret += (20.0 * Math.sin(x * this.PI) + 40.0 * Math.sin(x / 3.0 * this.PI)) * 2.0 / 3.0;
+ ret += (150.0 * Math.sin(x / 12.0 * this.PI) + 300.0 * Math.sin(x / 30.0 * this.PI)) * 2.0 / 3.0;
+ return ret;
+ }
+ };
+
+ var mapStyle = {
+ features: ["road", "building", "water", "land"], // ������������������poi
+ style: "normal" // ������������������������������
+ };
+ var params = $.parseJSON($("#carTrajectoryParams").html());
+ var sensorInfo = params["sensorInfo"];
+ var sensorsMap = params['sensorsMap'];
+ //var map = new BMap.Map("mapCanvas", defaultParam);
+ var map = new BMap.Map("mapCanvas", {enableMapClick: false});
+ map.setMapStyle(mapStyle);
+ map.enableScrollWheelZoom(true); // ������������������������
+ var navigation = new BMap.NavigationControl({
+ anchor: BMAP_ANCHOR_BOTTOM_RIGHT,
+ type: BMAP_NAVIGATION_CONTROL_LARGE
+ });
+ map.addControl(navigation);
+ map.addControl(new BMap.ScaleControl());
+ if (sensorInfo.length == 0) {
+ showNoFlightTrajectory();
+ }
+ var trackPoints = []; //���������������������������������������������������������������
+ if (sensorInfo.length > 0) {
+ $.each(sensorInfo, function (item, value) {
+ if (typeof (value.e76) == "undefined") {
+ showNoFlightTrajectory();
+ } else {
+ var lon = parseFloat(value.e76.substr(0, value.e76.length - 1));
+ var lat = parseFloat(value.e77.substr(0, value.e77.length - 1));
+ var lon1 = GPS.gcj_encrypt(lat, lon).lon;
+ var lat1 = GPS.gcj_encrypt(lat, lon).lat;
+ var lon2 = GPS.bd_encrypt(lat1, lon1).lon;
+ var lat2 = GPS.bd_encrypt(lat1, lon1).lat;
+ trackPoints.push(new BMap.Point(lon2, lat2));
+ }
+ })
+ map.centerAndZoom(trackPoints, 13);// ������������������������������������
+ map.setViewport(trackPoints);// ������������������������������������������������������
+ addStartMarker(new BMap.Point(trackPoints[0].lng, trackPoints[0].lat), '������', map);
+ var carMk;
+ //������������������
+ var drivingPoint = new BMap.Icon('/img/car.png', new BMap.Size(52, 26));
+ //������������
+ var terminalPoint = new BMap.Icon('/img/end.png', new BMap.Size(48, 48));
+ var i = 0;
+ var interval = setInterval(function () {
+ if (i >= trackPoints.length) {
+ clearInterval(interval);
+ return;
+ }
+ var pm2_5 = sensorInfo[i].e1.substr(0, sensorInfo[i].e1.length - 5);
+ var traceColor;
+ if (pm2_5 <= 35) {
+ traceColor = "#00EB5E";
+ } else if (pm2_5 > 35 && pm2_5 <= 115) {
+ traceColor = "#FFF000";
+ } else if (pm2_5 > 115 && pm2_5 <= 150) {
+ traceColor = "#FF8400";
+ } else if (pm2_5 > 150) {
+ traceColor = "#FF0000";
+ }
+ drowLine(map, trackPoints[i], trackPoints[i + 1], traceColor);//������������
+ i = i + 1;
+ }, 250);
+ }
+
+ //������������������
+ function addStartMarker(point, name, mapInit) {
+ if (name == "������") {
+ var myIcon = new BMap.Icon("/img/start.png", new BMap.Size(48, 48));
+ window.marker = new BMap.Marker(point, {icon: myIcon, offset: new BMap.Size(0, -20)});
+ mapInit.addOverlay(marker);
+ }
+ }
+
+ // ������
+ function drowLine(map, PointArr, PointArrNext, traceColor) {
+ if (PointArrNext != undefined) {
+ var polyline = new BMap.Polyline(
+ [
+ new BMap.Point(PointArr.lng, PointArr.lat),
+ new BMap.Point(PointArrNext.lng, PointArrNext.lat)
+ ],
+ {
+ strokeColor: traceColor,
+ strokeWeight: 4,
+ strokeOpacity: 1
+ }); //������������
+ map.addOverlay(polyline);
+ addMarkerEnd(new BMap.Point(PointArrNext.lng, PointArrNext.lat), '������������', map, PointArrNext, new BMap.Point(PointArr.lng, PointArr.lat));//������������
+ } else {
+ addMarkerEnd(new BMap.Point(PointArr.lng, PointArr.lat), '������', map);//������������������
+ }
+ }
+
+ //���������������������������
+ function addMarkerEnd(point, name, mapInit, trackUnit, prePoint) {
+ if (name == "������������") {
+ if (carMk) {//������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
+ mapInit.removeOverlay(carMk);
+ }
+ carMk = new BMap.Marker(point, {icon: drivingPoint}); // ������������
+ carMk.setRotation(trackUnit.route);//trackUnit.route
+ //getAngle(point,prePoint);// js���������������������������
+ carMk.setRotation(getAngle(point, prePoint) - 90);// ���������������
+ mapInit.addOverlay(carMk); // ���������������������������
+ //carMk.setAnimation(BMAP_ANIMATION_BOUNCE); //���������������
+ } else {
+ mapInit.removeOverlay(carMk);
+ carMk = new BMap.Marker(point, {icon: terminalPoint, offset: new BMap.Size(0, -20)}); // ������������
+ mapInit.addOverlay(carMk);
+ }
+ }
+
+ //���������������������
+ function getAngle(n, next) {
+ var ret
+ var w1 = n.lat / 180 * Math.PI
+ var j1 = n.lng / 180 * Math.PI
+
+ var w2 = next.lat / 180 * Math.PI
+ var j2 = next.lng / 180 * Math.PI
+
+ ret = 4 * Math.pow(Math.sin((w1 - w2) / 2), 2) - Math.pow(Math.sin((j1 - j2) / 2) * (Math.cos(w1) - Math.cos(w2)), 2);
+ ret = Math.sqrt(ret);
+
+ // var temp = Math.sin(Math.abs(j1 - j2) / 2) * (Math.cos(w1) + Math.cos(w2));
+ var temp = Math.sin((j1 - j2) / 2) * (Math.cos(w1) + Math.cos(w2));
+ ret = ret / temp;
+
+ ret = Math.atan(ret) / Math.PI * 180;
+ ret += 90;
+
+ // ������������������������if..else���������������������������������������������,������������ret������
+ if (j1 - j2 < 0) {
+ // console.log('j1<j2')
+ if (w1 - w2 < 0) {
+ // console.log('w1<w2')
+ ret;
+ } else {
+ // console.log('w1>w2')
+ ret = -ret + 180;
+ }
+ } else {
+ // console.log('j1>j2')
+ if (w1 - w2 < 0) {
+ // console.log('w1<w2')
+ ret = 180 + ret;
+ } else {
+ // console.log('w1>w2')
+ ret = -ret;
+ }
+ }
+ return ret;
+ }
+
+ function showNoFlightTrajectory() {
+ var longitude = 120.987287;
+ var latitude = 31.391562;
+ var point = new BMap.Point(longitude, latitude);
+ map.centerAndZoom(point, 17);
+ setTimeout(function () {
+ document.getElementById("cpm").style.display = 'block';
+ }, 250);
+ };
+
+</script>
--
Gitblit v1.8.0