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.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.moral.common.util.ValidateUtil;
|
import com.moral.entity.Device;
|
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);
|
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 = 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;
|
}
|
|
@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")));
|
for (Map<String, Object> sensor : sensors) {
|
if (!ObjectUtils.isEmpty(map)) {
|
sensor.put("value", map.remove(sensor.get("sensor_key")));
|
}
|
sensor.put("state", device.getState());
|
sensor.put("name", sensor.get("description"));
|
}
|
return sensors;
|
}
|
|
@Override
|
public List<Map<String, Object>> getSensorDataBySensorKey(Map<String, Object> parameters) {
|
ValidateUtil.notNull(parameters.get("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);
|
for (Map<String, Object> value : values) {
|
JSONObject json = JSON.parseObject(value.remove("value").toString());
|
value.put("value", json.get(parameters.get("sensorKey")));
|
}
|
return values;
|
}
|
|
}
|