package com.ruoyi.dxp.service.impl;

import java.util.List;
import java.util.stream.Collectors;

import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.dxp.mapper.DataItemMapper;
import com.ruoyi.dxp.domain.DataItem;
import com.ruoyi.dxp.service.IDataItemService;

/**
 * 数据字段Service业务层处理
 *
 * @author jy
 * @date 2022-11-12
 */
@Service
public class DataItemServiceImpl implements IDataItemService {
    @Autowired
    private DataItemMapper dataItemMapper;

    /**
     * 查询数据字段
     *
     * @param id 数据字段主键
     * @return 数据字段
     */
    @Override
    public DataItem selectDataItemById(Long id) {
        return dataItemMapper.selectDataItemById(id);
    }

    /**
     * 查询数据字段列表
     *
     * @param dataItem 数据字段
     * @return 数据字段
     */
    @Override
    public List<DataItem> selectDataItemList(DataItem dataItem) {
        return dataItemMapper.selectDataItemList(dataItem);
    }

    /**
     * 新增数据字段
     *
     * @param dataItem 数据字段
     * @return 结果
     */
    @Override
    public int insertDataItem(DataItem dataItem) {
        LoginUser loginUser = SecurityUtils.getLoginUser();
        dataItem.setCreateBy(loginUser.getUsername());
        dataItem.setCreateTime(DateUtils.getNowDate());
        return dataItemMapper.insertDataItem(dataItem);
    }

    /**
     * 修改数据字段
     *
     * @param dataItem 数据字段
     * @return 结果
     */
    @Override
    public int updateDataItem(DataItem dataItem) {
        LoginUser loginUser = SecurityUtils.getLoginUser();
        dataItem.setUpdateBy(loginUser.getUsername());
        dataItem.setUpdateTime(DateUtils.getNowDate());
        return dataItemMapper.updateDataItem(dataItem);
    }

    /**
     * 批量删除数据字段
     *
     * @param ids 需要删除的数据字段主键
     * @return 结果
     */
    @Override
    public int deleteDataItemByIds(Long[] ids) {
        return dataItemMapper.deleteDataItemByIds(ids);
    }

    /**
     * 删除数据字段信息
     *
     * @param id 数据字段主键
     * @return 结果
     */
    @Override
    public int deleteDataItemById(Long id) {
        return dataItemMapper.deleteDataItemById(id);
    }

    /**
     * 通过数据类型和数据id删除数据项
     *
     * @param dataType 数据类型
     * @param dataId   数据id
     */
    @Override
    public void deleteDataItemByTypeAndDataId(String dataType, Long dataId) {
        DataItem req = new DataItem();
        req.setDataId(dataId);
        req.setDataType(dataType);
        List<DataItem> dataItems = this.dataItemMapper.selectDataItemList(req);
        if (dataItems != null && dataItems.size() > 0) {
            List<Long> ids = this.dataItemMapper.selectDataItemList(req).stream().map(dataItem -> {
                return dataItem.getId();
            }).collect(Collectors.toList());

            this.dataItemMapper.deleteDataItemByIds(ids.toArray(new Long[0]));
        }
    }
}
