package com.moral.api.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.OptionalDouble;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.DoubleStream;
import java.util.stream.Stream;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.api.entity.Device;
import com.moral.api.entity.GeoCoordinate;
import com.moral.api.entity.HistoryDaily;
import com.moral.api.entity.Organization;
import com.moral.api.mapper.DeviceMapper;
import com.moral.api.mapper.HistoryDailyMapper;
import com.moral.api.service.HistoryDailyService;
import com.moral.api.service.OrganizationService;
import com.moral.api.utils.GetCenterPointFromListOfCoordinates;
import com.moral.constant.Constants;
import com.moral.util.DateUtils;
import com.moral.util.PollutantUtils;
/**
*
* 日数据 服务实现类
*
*
* @author moral
* @since 2021-07-14
*/
@Service
public class HistoryDailyServiceImpl extends ServiceImpl implements HistoryDailyService {
@Autowired
private HistoryDailyMapper historyDailyMapper;
@Autowired
private DeviceMapper deviceMapper;
@Autowired
private OrganizationService organizationService;
@Override
public Map getMonthAvg(Map params) {
params.put("start", DateUtils.getFirstDayOfCurrMonth());
params.put("end", DateUtils.getLastDayOfCurrMonth());
Map data = historyDailyMapper.getAvgByMac(params);
Map result = new HashMap<>();
if (ObjectUtils.isEmpty(data)) {
result.put("avg", Constants.NULL_VALUE);
return result;
}
result.put("avg", data.get(params.get("sensorCode")));
return result;
}
@Override
public HistoryDaily getHistoryDailyByMacAndDate(String mac, Date date) {
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.eq("mac", mac);
wrapper.eq("time", date);
List historyDailies = historyDailyMapper.selectList(wrapper);
if (ObjectUtils.isEmpty(historyDailies))
return null;
return historyDailies.get(0);
}
@Override
public Map getHistoryDailyByMacsAndDate(List mac, Date date) {
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.in("mac", mac);
wrapper.eq("time", date);
List historyDailies = historyDailyMapper.selectList(wrapper);
Map map = new HashMap<>();
for (HistoryDaily historyDaily : historyDailies) {
map.put(historyDaily.getMac(), historyDaily);
}
return map;
}
@Override
public List getHistoryDailyByMacAndTimeSlot(String mac, Date startDate, Date endDate) {
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.in("mac", mac);
wrapper.between("time", startDate, endDate);
List historyDailies = historyDailyMapper.selectList(wrapper);
return historyDailies;
}
@Override
public Map getThermodynamicDiagramDataByOrgIdSensorCodeTime(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<>();
List longitudeList = new ArrayList<>();
List latitudeList = new ArrayList<>();
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);
double longitude = device.getLongitude();
double latitude = device.getLatitude();
longitudeList.add(longitude);
latitudeList.add(latitude);
}
} else {
continue;
}
}
//获取时间
String time = parameters.get("time").toString().substring(0, 10) + " 00:00:00";
resultMap.put("time", time);
QueryWrapper historyDailyQueryWrapper = new QueryWrapper<>();
historyDailyQueryWrapper.eq("time", time);
historyDailyQueryWrapper.in("mac", deviceMacList);
List historyDailies = historyDailyMapper.selectList(historyDailyQueryWrapper);
List