package com.moral.service.impl;
|
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.TemporalAdjusters;
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.Comparator;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.LinkedHashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.ObjectUtils;
|
|
import com.moral.common.util.ValidateUtil;
|
import com.moral.entity.Profession;
|
import com.moral.entity.Sensor;
|
import com.moral.mapper.DeviceMapper;
|
import com.moral.mapper.HistoryMapper;
|
import com.moral.mapper.ProfessionMapper;
|
import com.moral.mapper.SensorMapper;
|
import com.moral.service.AccountService;
|
import com.moral.service.HistoryService;
|
|
@Service
|
public class HistoryServiceImpl implements HistoryService {
|
|
@Resource
|
private AccountService accountService;
|
|
@Resource
|
private HistoryMapper historyMapper;
|
|
@Resource
|
private DeviceMapper deviceMapper;
|
|
@Resource
|
private SensorMapper sensorMapper;
|
|
@Resource
|
private ProfessionMapper professionMapper;
|
|
@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");
|
|
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);
|
}
|
|
@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");
|
|
String regionCode = parameters.get("regionCode").toString();
|
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_minutely";
|
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);
|
|
if ("profession".equals(parameters.get("dimension"))) {
|
List<Profession> professions = professionMapper.selectAll();
|
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"));
|
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;
|
}
|
}
|