package com.moral.api.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.moral.api.entity.Device;
import com.moral.api.entity.GovMonitorPoint;
import com.moral.api.entity.Organization;
import com.moral.api.entity.SysArea;
import com.moral.api.exception.BusinessException;
import com.moral.api.mapper.DeviceMapper;
import com.moral.api.mapper.GovMonitorPointMapper;
import com.moral.api.mapper.SysAreaMapper;
import com.moral.api.service.DeviceService;
import com.moral.api.service.GovMonitorPointService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moral.api.service.OrganizationService;
import com.moral.api.util.LogUtils;
import com.moral.constant.Constants;
import com.moral.constant.RedisConstants;
import com.moral.constant.ResponseCodeEnum;
import com.moral.constant.ResultMessage;
import com.moral.util.RegionCodeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
/**
 * 
 * 服务实现类
 * 
 *
 * @author moral
 * @since 2021-09-09
 */
@Service
public class GovMonitorPointServiceImpl extends ServiceImpl implements GovMonitorPointService {
    @Autowired(required = false)
    private GovMonitorPointMapper govMonitorPointMapper;
    @Autowired(required = false)
    private SysAreaMapper sysAreaMapper;
    @Autowired(required = false)
    private RedisTemplate redisTemplate;
    @Resource
    private OrganizationService organizationService;
    @Resource
    private DeviceService deviceService;
    @Autowired(required = false)
    private DeviceMapper deviceMapper;
    /*
     * 从redis获取设备信息
     * */
    private Map getGovMonitorPointInfoFromRedis(String id) {
        return (Map) redisTemplate.opsForHash().get(RedisConstants.GOV_MONITOR_POINT, id);
    }
    /*
     * 设备信息存入redis
     */
    private void setGovMonitorPointInfoToRedis(String id, GovMonitorPoint govMonitorPointInfo) {
        redisTemplate.opsForHash().put(RedisConstants.GOV_MONITOR_POINT, id, govMonitorPointInfo);
    }
    /*
     * 从redis删除设备信息
     */
    private void delGovMonitorPointInfoFromRedis(String id) {
        redisTemplate.opsForHash().delete(RedisConstants.GOV_MONITOR_POINT, id);
    }
    @Override
    public Map getDataByCondition(Map map) {
        Map resultMap = new HashMap<>();
        if (!map.containsKey("current") || !map.containsKey("size")) {
            resultMap.put("code", ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode());
            resultMap.put("msg", ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg());
            return resultMap;
        }
        int current = Integer.parseInt(map.get("current").toString());
        int size = Integer.parseInt(map.get("size").toString());
        Page page = new Page<>(current, size);
        QueryWrapper wrapper_Condition = new QueryWrapper<>();
        wrapper_Condition.eq("is_delete", Constants.NOT_DELETE);
        if (!ObjectUtils.isEmpty(map.get("name"))) {
            wrapper_Condition.like("name", map.get("name").toString());
        }
        if (!ObjectUtils.isEmpty(map.get("stationLevel"))) {
            wrapper_Condition.like("station_level", map.get("stationLevel").toString());
        }
        wrapper_Condition.orderByDesc("create_time");
        Page resultPage = govMonitorPointMapper.selectPage(page, wrapper_Condition);
        int totalNumber = govMonitorPointMapper.selectCount(wrapper_Condition);
        List govMonitorPoints = resultPage.getRecords();
        SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        List