package com.jjt.rz.service.impl;

import com.jjt.common.utils.StringUtils;
import com.jjt.rz.domain.TwinDeviceType;
import com.jjt.rz.domain.TwinDeviceTypeData;
import com.jjt.rz.mapper.TwinDeviceTypeMapper;
import com.jjt.rz.service.ITwinDeviceTypeService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * 设备类型管理Service业务层处理
 *
 * @author wukai
 * @date 2025-05-21
 */
@Service
public class TwinDeviceTypeServiceImpl implements ITwinDeviceTypeService {
    @Resource
    private TwinDeviceTypeMapper twinDeviceTypeMapper;

    /**
     * 查询设备类型管理
     *
     * @param typeId 设备类型管理主键
     * @return 设备类型管理
     */
    @Override
    public TwinDeviceType selectTwinDeviceTypeByTypeId(Long typeId) {
        return twinDeviceTypeMapper.selectTwinDeviceTypeByTypeId(typeId);
    }

    /**
     * 查询设备类型管理列表
     *
     * @param twinDeviceType 设备类型管理
     * @return 设备类型管理
     */
    @Override
    public List<TwinDeviceType> selectTwinDeviceTypeList(TwinDeviceType twinDeviceType) {
        return twinDeviceTypeMapper.selectTwinDeviceTypeList(twinDeviceType);
    }

    /**
     * 查询所有设备类型
     *
     * @return 设备类型管理集合
     */
    @Override
    public List<TwinDeviceType> selectTwinDeviceTypeAll() {
        List<TwinDeviceType> typeList = selectTwinDeviceTypeList(new TwinDeviceType());
        return typeList;
    }

    /**
     * 查询所有设备数据列表
     *
     * @return 设备数据集合
     */
    @Override
    public List<TwinDeviceTypeData> selectTwinDeviceTypeDataAll() {
        List<TwinDeviceType> typeList = selectTwinDeviceTypeList(new TwinDeviceType());
        List<TwinDeviceTypeData> list = new ArrayList<>();
        typeList.forEach(item -> list.addAll(item.getTwinDeviceTypeDataList()));
        return list;
    }

    /**
     * 新增设备类型管理
     *
     * @param twinDeviceType 设备类型管理
     * @return 结果
     */
    @Transactional
    @Override
    public int insertTwinDeviceType(TwinDeviceType twinDeviceType) {
        int rows = twinDeviceTypeMapper.insertTwinDeviceType(twinDeviceType);
        insertTwinDeviceTypeData(twinDeviceType);
        return rows;
    }

    /**
     * 修改设备类型管理
     *
     * @param twinDeviceType 设备类型管理
     * @return 结果
     */
    @Transactional
    @Override
    public int updateTwinDeviceType(TwinDeviceType twinDeviceType) {
        twinDeviceTypeMapper.deleteTwinDeviceTypeDataByTypeId(twinDeviceType.getTypeId());
        insertTwinDeviceTypeData(twinDeviceType);
        return twinDeviceTypeMapper.updateTwinDeviceType(twinDeviceType);
    }

    /**
     * 批量删除设备类型管理
     *
     * @param typeIds 需要删除的设备类型管理主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteTwinDeviceTypeByTypeIds(Long[] typeIds) {
        twinDeviceTypeMapper.deleteTwinDeviceTypeDataByTypeIds(typeIds);
        return twinDeviceTypeMapper.deleteTwinDeviceTypeByTypeIds(typeIds);
    }

    /**
     * 删除设备类型管理信息
     *
     * @param typeId 设备类型管理主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteTwinDeviceTypeByTypeId(Long typeId) {
        twinDeviceTypeMapper.deleteTwinDeviceTypeDataByTypeId(typeId);
        return twinDeviceTypeMapper.deleteTwinDeviceTypeByTypeId(typeId);
    }

    /**
     * 新增设备类型数据管理信息
     *
     * @param twinDeviceType 设备类型管理对象
     */
    public void insertTwinDeviceTypeData(TwinDeviceType twinDeviceType) {
        List<TwinDeviceTypeData> twinDeviceTypeDataList = twinDeviceType.getTwinDeviceTypeDataList();
        Long typeId = twinDeviceType.getTypeId();
        if (StringUtils.isNotNull(twinDeviceTypeDataList)) {
            List<TwinDeviceTypeData> list = new ArrayList<TwinDeviceTypeData>();
            for (TwinDeviceTypeData twinDeviceTypeData : twinDeviceTypeDataList) {
                twinDeviceTypeData.setTypeId(typeId);
                list.add(twinDeviceTypeData);
            }
            if (list.size() > 0) {
                twinDeviceTypeMapper.batchTwinDeviceTypeData(list);
            }
        }
    }
}
