package quant.rich.emoney.entity.sqlite;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.JsonNode;

import lombok.Data;
import lombok.experimental.Accessors;
import quant.rich.emoney.enums.PlanType;
import quant.rich.emoney.mybatis.typehandler.JsonStringTypeHandler;

/**
 * 目前能想到的计划任务有三种
 * <ul>
 * <li>指标的抓取
 * <li>个股策略(/strategy, id=9400)的抓取
 * <li>选股策略的抓取
 * </ul>
 * 选股策略的抓取的筛选器自带股票过滤。其他抓取应该可以选股策略抓取的结果、tushare 的直接结果作为抓取的范围。
 * 未来可能存在更多的计划任务, 所以需要考虑如何设计才能更好地兼容后续添加的任务类型
 */
@Data
@Accessors(chain = true)
@TableName(value = "plan", autoResultMap = true)
public class Plan {

    /**
     * 键 ID
     */
    @TableId(type = IdType.AUTO)
    private Integer planId;

    /**
     * 计划任务表达式
     */
    private String cronExpr;

    /**
     * 计划名称
     */
    private String planName;
    
    /**
     * 计划类型
     */
    private PlanType planType;

    /**
     * 参数
     */
    @TableField(typeHandler = JsonStringTypeHandler.class)
    private JsonNode detail;
    
    /**
     * 是否启用
     */
    private Boolean enabled;
    
    /**
     * 交易日检查，若为 true，则任务执行时判断当日是否为交易日，若是则不执行任务，
     * 反之无论是否为交易日都执行
     */
    private Boolean openDayCheck;

}
