package com.moral.api.service.impl;
import com.alibaba.fastjson.JSON;
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.HistoryFiveMinutelyMapper;
import com.moral.api.mapper.HistoryHourlyMapper;
import com.moral.api.mapper.OrganizationUnitAlarmMapper;
import com.moral.api.mapper.UnitConversionMapper;
import com.moral.api.service.DeviceService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.api.service.SensorService;
import com.moral.api.service.UnitConversionService;
import com.moral.constant.Constants;
import com.moral.constant.RedisConstants;
import com.moral.constant.SeparateTableType;
import com.moral.util.DateUtils;
import com.moral.util.MybatisPLUSUtils;
import org.apache.kafka.streams.state.internals.metrics.Sensors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.util.*;
import java.util.stream.Collectors;
/**
 * 
 * 设备表 服务实现类
 * 
 *
 * @author moral
 * @since 2021-06-28
 */
@Service
public class DeviceServiceImpl extends ServiceImpl implements DeviceService {
    @Autowired
    private DeviceMapper deviceMapper;
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    OrganizationUnitAlarmMapper organizationUnitAlarmMapper;
    @Autowired
    SensorService sensorService;
    @Autowired
    UnitConversionService unitConversionService;
    @Autowired
    HistoryHourlyMapper historyHourlyMapper;
    @Autowired
    HistoryFiveMinutelyMapper historyFiveMinutelyMapper;
    @Override
    public List getDevicesByMonitorPointId(Integer monitorPointId) {
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.eq("monitor_point_id", monitorPointId);
        wrapper.eq("is_delete", Constants.NOT_DELETE);
        wrapper.orderByAsc("dev_num");
        return deviceMapper.selectList(wrapper);
    }
    @Override
    public List getDevicesByMonitorPointId(List monitorPointId) {
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.in("monitor_point_id", monitorPointId);
        wrapper.eq("is_delete", Constants.NOT_DELETE);
        wrapper.orderByAsc("dev_num");
        return deviceMapper.selectList(wrapper);
    }
    @Override
    public Map getSensorsByMac(Map params) {
        List sensorCodes = Arrays.asList(Constants.SENSOR_CODE_PM25
                , Constants.SENSOR_CODE_PM10
                , Constants.SENSOR_CODE_SO2
                , Constants.SENSOR_CODE_NO2
                , Constants.SENSOR_CODE_CO
                , Constants.SENSOR_CODE_O3
                , Constants.SENSOR_CODE_TEMP
                , "a01002"
                , Constants.SENSOR_CODE_WIND_SPEED
                , Constants.SENSOR_CODE_WIND_DIR
                , "a01006"
                , "a00e12"
        );
        //设备mac
        List macs = (List) params.remove("macs");
        List