package jnpf.limsMapper; import jnpf.base.mapper.SuperMapper; import jnpf.limsEntity.LimsMessageDeliveryEntity; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import java.util.Date; import java.util.List; @Mapper public interface LimsMessageDeliveryMapper extends SuperMapper { @Update("UPDATE lims_message_delivery SET status = 'SENDING', last_modify_time = CURRENT_TIMESTAMP " + "WHERE id = #{id} AND status IN ('PENDING', 'FAILED')") int claim(@Param("id") String id); @Select("SELECT * FROM lims_message_delivery " + "WHERE ((status = 'FAILED' AND (next_retry_time IS NULL OR next_retry_time <= CURRENT_TIMESTAMP)) " + "OR (status IN ('PENDING', 'SENDING') AND last_modify_time < #{staleBefore})) " + "AND retry_count < #{maxAttempts} ORDER BY last_modify_time, id LIMIT #{limit}") List selectRetryable(@Param("staleBefore") Date staleBefore, @Param("limit") int limit, @Param("maxAttempts") int maxAttempts); @Update("UPDATE lims_message_delivery SET status = 'SENDING', last_modify_time = CURRENT_TIMESTAMP " + "WHERE id = #{id} AND ((status = 'FAILED' AND (next_retry_time IS NULL OR next_retry_time <= CURRENT_TIMESTAMP)) " + "OR (status IN ('PENDING', 'SENDING') AND last_modify_time < #{staleBefore}))") int claimRetry(@Param("id") String id, @Param("staleBefore") Date staleBefore); }