package com.moral.api.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.moral.api.config.mybatis.MybatisPlusConfig;
import com.moral.api.entity.*;
import com.moral.api.mapper.DeviceMapper;
import com.moral.api.mapper.HistoryHourlyMapper;
import com.moral.api.service.HistoryHourlyService;
import com.moral.api.service.OrganizationService;
import com.moral.api.utils.GetCenterPointFromListOfCoordinates;
import com.moral.constant.Constants;
import com.moral.constant.SeparateTableType;
import com.moral.pojo.AQI;
import com.moral.util.AQIUtils;
import com.moral.util.DateUtils;
import com.moral.util.MybatisPLUSUtils;
import com.moral.util.PollutantUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
*
* 已校准小时表 服务实现类
*
*
* @author moral
* @since 2021-07-14
*/
@Service
public class HistoryHourlyServiceImpl implements HistoryHourlyService {
@Autowired
private HistoryHourlyMapper historyHourlyMapper;
@Autowired
private DeviceMapper deviceMapper;
@Autowired
private OrganizationService organizationService;
@Override
public Map getHourlyAqiByMac(String mac) {
Date now = new Date();
String time = DateUtils.dateToDateString(now, DateUtils.yyyy_MM_dd_HH_EN) + ":00:00";
//获取小时数据
Map params = new HashMap<>();
params.put("timeUnits", DateUtils.dateToDateString(now, DateUtils.yyyyMM_EN));
params.put("mac", mac);
params.put("time", time);
String value = historyHourlyMapper.selectHourlyData(params);
Map result = new HashMap<>();
if (ObjectUtils.isEmpty(value)) {
result.put("AQI", Constants.NULL_VALUE);
return result;
}
Map data = JSONObject.parseObject(value, Map.class);
AQI aqi = AQIUtils.hourlyAQI(data);
result.put("AQI", aqi.getAQIValue());
return result;
}
/**
*@Description: 通过组织id和因子编码获取上一个小时数据
*@Param: [map]
*@return: java.util.Map
*@Author: lizijie
*@Date: 2021/12/7 10:07
**/
@Override
public Map getLastHourDataByOrgIdAndSensorCode(Map parameters) {
Map resultMap = new HashMap<>();
int orgId = Integer.parseInt(parameters.get("organization_id").toString());
//定义一个集合,存放所有id
List allOrgId = new ArrayList<>();
allOrgId.add(orgId);
//循环集合
//所有子组织
List allChildrenOrganization = organizationService.getChildrenOrganizationsById(orgId);
if (!ObjectUtils.isEmpty(allChildrenOrganization) || allChildrenOrganization.size() < 1){
for (Organization organization:allChildrenOrganization) {
allOrgId.add(organization.getId());
}
}
//集合去重
List allOrgIdWithoutDuplicates = allOrgId.stream().distinct().collect(Collectors.toList());
//声明一个list,存放设备mac
List deviceMacList = new ArrayList<>();
//声明一个map,Mac作为key,device作为value
Map deviceMap = new HashMap<>();
for (Integer orgIdWithoutDuplicates:allOrgIdWithoutDuplicates) {
//根据id查询所属设备
QueryWrapper wrapper_device = new QueryWrapper<>();
wrapper_device.eq("is_delete",Constants.NOT_DELETE).eq("organization_id",orgIdWithoutDuplicates);
List devices = new ArrayList<>();
devices = deviceMapper.selectList(wrapper_device);
if (devices.size()>0){
for (Device device:devices) {
String mac = device.getMac();
deviceMacList.add(mac);
deviceMap.put(mac,device);
}
}else {
continue;
}
}
//获取时间
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY,calendar.get(Calendar.HOUR_OF_DAY)-1);
String time = df.format(calendar.getTime())+":00:00";
resultMap.put("time",time);
String timeUnits = DateUtils.dateToDateString(calendar.getTime(), DateUtils.yyyyMM_EN);
List