package com.fastbee.iot.service.impl;

import java.time.LocalDate;
import java.util.List;

import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.fastbee.common.exception.ServiceException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.fastbee.iot.mapper.DeviceReportInfoMapper;
import com.fastbee.iot.domain.DeviceReportInfo;
import com.fastbee.iot.service.IDeviceReportInfoService;

/**
 * 设备上电审核前上报的基础信息Service业务层处理
 * 
 * @author kerwincui
 * @date 2024-12-05
 */
@Service
public class DeviceReportInfoServiceImpl implements IDeviceReportInfoService 
{
    @Autowired
    private DeviceReportInfoMapper deviceReportInfoMapper;


    /**
     * 查询设备上电审核前上报的基础信息
     * 
     * @param id 设备上电审核前上报的基础信息主键
     * @return 设备上电审核前上报的基础信息
     */
    @Override
    public DeviceReportInfo selectDeviceReportInfoById(Long id)
    {
        return deviceReportInfoMapper.selectDeviceReportInfoById(id);
    }

    /**
     * 查询设备上电审核前上报的基础信息列表
     * 
     * @param deviceReportInfo 设备上电审核前上报的基础信息
     * @return 设备上电审核前上报的基础信息
     */
    @Override
    public List<DeviceReportInfo> selectDeviceReportInfoList(DeviceReportInfo deviceReportInfo)
    {
        List<DeviceReportInfo> deviceReportInfos = deviceReportInfoMapper.selectDeviceReportInfoList(deviceReportInfo);
        //按照时间由近到远进行排序
        deviceReportInfos.sort((o1, o2) -> o2.getPowersTime().compareTo(o1.getPowersTime()));

        return  deviceReportInfos;
    }

    /**
     * 新增设备上电审核前上报的基础信息
     * 
     * @param deviceReportInfo 设备上电审核前上报的基础信息
     * @return 结果
     */
    @Override
    public int insertDeviceReportInfo(DeviceReportInfo deviceReportInfo)
    {
        //设备编码查重
        List<DeviceReportInfo> list = new LambdaQueryChainWrapper<>(deviceReportInfoMapper)
                .select(DeviceReportInfo::getSerialNumber,DeviceReportInfo::getImei)
//                .eq(DeviceReportInfo::getSerialNumber, deviceReportInfo.getSerialNumber())
//                .or()
                .eq(DeviceReportInfo::getImei, deviceReportInfo.getImei())
                .list();
//        System.err.println("查重："+list);
        if (!list.isEmpty()) {
            if (list.get(0).getImei().equals(deviceReportInfo.getImei())) {
                throw new ServiceException("IMEI号重复!");
            }
//            else if (list.get(0).getSerialNumber().equals(deviceReportInfo.getSerialNumber())) {
//                throw new ServiceException("设备编号重复!");
//            }
        }
        //处理自动审核
        if(deviceReportInfo.getAutoReview()!=null&&deviceReportInfo.getAutoReview()){
            deviceReportInfo.setStatus(2);//修改状态为已审核
        }
        return deviceReportInfoMapper.insertDeviceReportInfo(deviceReportInfo);
    }

    /**
     * 修改设备上电审核前上报的基础信息
     * 
     * @param deviceReportInfo 设备上电审核前上报的基础信息
     * @return 结果
     */
    @Override
    public int updateDeviceReportInfo(DeviceReportInfo deviceReportInfo)
    {
        return deviceReportInfoMapper.updateDeviceReportInfo(deviceReportInfo);
    }

    /**
     * 批量删除设备上电审核前上报的基础信息
     * 
     * @param ids 需要删除的设备上电审核前上报的基础信息主键
     * @return 结果
     */
    @Override
    public int deleteDeviceReportInfoByIds(Long[] ids)
    {
        return deviceReportInfoMapper.deleteDeviceReportInfoByIds(ids);
    }

    /**
     * 删除设备上电审核前上报的基础信息信息
     * 
     * @param id 设备上电审核前上报的基础信息主键
     * @return 结果
     */
    @Override
    public int deleteDeviceReportInfoById(Long id)
    {
        return deviceReportInfoMapper.deleteDeviceReportInfoById(id);
    }

    @Override
    public boolean updateDeviceReportStatus(List<DeviceReportInfo> deviceReportInfo) {
        return false;
    }


}
