package com.jjt.biz.service.impl;

import com.jjt.biz.domain.TwinDevice;
import com.jjt.biz.mapper.TwinDeviceMapper;
import com.jjt.biz.service.ITwinDeviceService;
import com.jjt.common.constant.CacheConstants;
import com.jjt.common.core.redis.RedisCache;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 设备管理Service业务层处理
 *
 * @author wukai
 * @date 2025-01-15
 */
@Service
public class TwinDeviceServiceImpl implements ITwinDeviceService {
    @Resource
    private TwinDeviceMapper twinDeviceMapper;
    @Resource
    private RedisCache redisCache;

    /**
     * 查询设备管理
     *
     * @param deviceId 设备管理主键
     * @return 设备管理
     */
    @Override
    public TwinDevice selectTwinDeviceByDeviceId(Long deviceId) {
        return twinDeviceMapper.selectTwinDeviceByDeviceId(deviceId);
    }

    /**
     * 查询设备管理列表
     *
     * @param twinDevice 设备管理
     * @return 设备管理
     */
    @Override
    public List<TwinDevice> selectTwinDeviceList(TwinDevice twinDevice) {
        return twinDeviceMapper.selectTwinDeviceList(twinDevice);
    }

    /**
     * 新增设备管理
     *
     * @param twinDevice 设备管理
     * @return 结果
     */
    @Override
    public int insertTwinDevice(TwinDevice twinDevice) {
        return twinDeviceMapper.insertTwinDevice(twinDevice);
    }

    /**
     * 修改设备管理
     *
     * @param twinDevice 设备管理
     * @return 结果
     */
    @Override
    public int updateTwinDevice(TwinDevice twinDevice) {
        return twinDeviceMapper.updateTwinDevice(twinDevice);
    }

    /**
     * 批量删除设备管理
     *
     * @param deviceIds 需要删除的设备管理主键
     * @return 结果
     */
    @Override
    public int deleteTwinDeviceByDeviceIds(Long[] deviceIds) {
        return twinDeviceMapper.deleteTwinDeviceByDeviceIds(deviceIds);
    }

    /**
     * 删除设备管理信息
     *
     * @param deviceId 设备管理主键
     * @return 结果
     */
    @Override
    public int deleteTwinDeviceByDeviceId(Long deviceId) {
        return twinDeviceMapper.deleteTwinDeviceByDeviceId(deviceId);
    }

    /**
     * 通过设备编号查询设备
     *
     * @param code 设备编号
     * @return 设备信息
     */
    @Override
    public TwinDevice selectTwinDeviceByCode(String code) {
        return twinDeviceMapper.selectTwinDeviceByCode(code);
    }

    /**
     * 获取deviceMap
     *
     * @return map
     */
    @Override
    public Map<Long, TwinDevice> deviceMap() {
        List<TwinDevice> list = redisCache.getCacheObject(CacheConstants.DEVICE_ALL);
        if (list == null) {
            list = selectTwinDeviceList(new TwinDevice());
            redisCache.setCacheObject(CacheConstants.DEVICE_ALL, list);
        }
        return list.stream().collect(Collectors.toMap(TwinDevice::getDeviceId, o -> o));
    }

}
