package com.yice.webadmin.app.model;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yice.common.core.annotation.RelationDict;
import com.yice.common.core.base.mapper.BaseModelMapper;
import com.yice.common.core.base.model.BaseModel;
import com.yice.webadmin.app.vo.DatasetCleanVo;
import com.yice.webadmin.upms.model.SysUser;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * DatasetClean实体对象。
 *
 * @author linking
 * @date 2023-04-13
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName(value = "lmp_dataset_clean")
public class DatasetClean extends BaseModel {

    /**
     * 清洗任务ID。
     */
    @TableId(value = "clean_id")
    private Long cleanId;

    /**
     * 清洗数据集ID。
     */
    private Long datasetId;

    /**
     * 清洗任务名称。
     */
    private String taskName;

    /**
     * 清洗数据集名称。
     */
    private String datasetName;

    /**
     * 开始时间。
     */
    private Date startTime;

    /**
     * 清洗类型。
     */
    private Integer cleanType;

    /**
     * 清洗状态。
     */
    private Integer cleanStatus;

    /**
     * 完成时间。
     */
    private Date finishTime;

    /**
     * 创建人。
     */
    private Long createUserId;

    /**
     * 创建时间。
     */
    private Date createTime;

    /**
     * 清洗方式。
     */
    @TableField(exist = false)
    private List<String> cleanMethod;

    /**
     * 清洗配置标识。
     */
    @TableField(exist = false)
    private Long cleanConfigId;

    /**
     * 清洗配置对象。
     */
    @TableField(exist = false)
    private DatasetCleanConfig config;

    /**
     * 创建人名称字典。
     */
    @RelationDict(
            masterIdField = "createUserId",
            slaveModelClass = SysUser.class,
            slaveIdField = "userId",
            slaveNameField = "showName")
    @TableField(exist = false)
    private Map<String, Object> createUserIdDictMap;

    /**
     * 更新人。
     */
    private Long updateUserId;

    /**
     * 更新时间。
     */
    private Date updateTime;

    @Mapper
    public interface DatasetCleanModelMapper extends BaseModelMapper<DatasetCleanVo, DatasetClean> {
        /**
         * 转换Vo对象到实体对象。
         *
         * @param datasetCleanVo 域对象。
         * @return 实体对象。
         */
        @Override
        DatasetClean toModel(DatasetCleanVo datasetCleanVo);

        /**
         * 转换实体对象到VO对象。
         *
         * @param datasetClean 实体对象。
         * @return 域对象。
         */
        @Override
        DatasetCleanVo fromModel(DatasetClean datasetClean);
    }

    public static final DatasetClean.DatasetCleanModelMapper INSTANCE = Mappers.getMapper(DatasetClean.DatasetCleanModelMapper.class);
}
