package pwc.taxtech.atms.vat.dao;

import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.session.RowBounds;
import pwc.taxtech.atms.MyVatMapper;
import pwc.taxtech.atms.vat.entity.PeriodJob;
import pwc.taxtech.atms.vat.entity.PeriodJobExample;

@Mapper
public interface PeriodJobMapper extends MyVatMapper {
    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table TAX_ADMIN.PERIOD_JOB
     *
     * @mbg.generated
     */
    long countByExample(PeriodJobExample example);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table TAX_ADMIN.PERIOD_JOB
     *
     * @mbg.generated
     */
    int deleteByExample(PeriodJobExample example);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table TAX_ADMIN.PERIOD_JOB
     *
     * @mbg.generated
     */
    int deleteByPrimaryKey(String id);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table TAX_ADMIN.PERIOD_JOB
     *
     * @mbg.generated
     */
    int insert(PeriodJob record);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table TAX_ADMIN.PERIOD_JOB
     *
     * @mbg.generated
     */
    int insertSelective(PeriodJob record);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table TAX_ADMIN.PERIOD_JOB
     *
     * @mbg.generated
     */
    List<PeriodJob> selectByExampleWithRowbounds(PeriodJobExample example, RowBounds rowBounds);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table TAX_ADMIN.PERIOD_JOB
     *
     * @mbg.generated
     */
    List<PeriodJob> selectByExample(PeriodJobExample example);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table TAX_ADMIN.PERIOD_JOB
     *
     * @mbg.generated
     */
    PeriodJob selectByPrimaryKey(String id);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table TAX_ADMIN.PERIOD_JOB
     *
     * @mbg.generated
     */
    int updateByExampleSelective(@Param("record") PeriodJob record, @Param("example") PeriodJobExample example);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table TAX_ADMIN.PERIOD_JOB
     *
     * @mbg.generated
     */
    int updateByExample(@Param("record") PeriodJob record, @Param("example") PeriodJobExample example);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table TAX_ADMIN.PERIOD_JOB
     *
     * @mbg.generated
     */
    int updateByPrimaryKeySelective(PeriodJob record);

    /**
     * This method was generated by MyBatis Generator.
     * This method corresponds to the database table TAX_ADMIN.PERIOD_JOB
     *
     * @mbg.generated
     */
    int updateByPrimaryKey(PeriodJob record);

    @Select("SELECT " +
            " id AS id, " +
            " name AS name, " +
            " current_step AS currentStep, " +
            " project_id AS projectId, " +
            " period AS period, " +
            " steps_code AS stepsCode, " +
            " create_time AS createTime, " +
            " status AS status, " +
            " error_msg AS errorMsg  " +
            "FROM " +
            " period_job  " +
            "WHERE " +
            " status LIKE \"%Begin%\"  " +
            " AND project_id = #{projectId}  " +
            " AND period =#{period}")
    PeriodJob getRunningJob(@Param("projectId") String projectId, @Param("period") Integer period);

    @Select("SELECT " +
            " id AS id, " +
            " name AS name, " +
            " current_step AS currentStep, " +
            " project_id AS projectId, " +
            " period AS period, " +
            " steps_code AS stepsCode, " +
            " create_time AS createTime, " +
            " status AS status, " +
            " error_msg AS errorMsg  " +
            "FROM " +
            " period_job  " +
            "WHERE " +
            " project_id = #{projectId}  " +
            " AND period =#{period}" +
            " order by create_time desc LIMIT 1 "
    )
    PeriodJob getPeriodJob(@Param("projectId") String projectId, @Param("period") Integer period);

    @Select("SELECT " +
            " id AS id, " +
            " name AS name, " +
            " current_step AS currentStep, " +
            " project_id AS projectId, " +
            " period AS period, " +
            " steps_code AS stepsCode, " +
            " create_time AS createTime, " +
            " status AS status, " +
            " error_msg AS errorMsg  " +
            "FROM " +
            " period_job  " +
            "WHERE " +
            " project_id = #{projectId}  " +
            " AND period =#{period} " +
            " AND id = #{id}")
    PeriodJob getJobStatus(@Param("projectId") String projectId, @Param("period") Integer period,@Param("id") String id);
}