package com.tourguide.modules.finance.mapper;
|
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.tourguide.modules.finance.entity.GuideWithdrawal;
|
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Select;
|
import org.apache.ibatis.annotations.Update;
|
|
import java.time.LocalDateTime;
|
import java.util.List;
|
|
public interface GuideWithdrawalMapper extends BaseMapper<GuideWithdrawal> {
|
@Select("SELECT COUNT(*) FROM guide_withdrawal WHERE guide_id = #{guideId} AND deleted = 0 " +
|
"AND status NOT IN ('APPROVED', 'REJECTED')")
|
long countActiveByGuideId(@Param("guideId") Long guideId);
|
|
@Select("SELECT * FROM guide_withdrawal WHERE id = #{id} AND deleted = 0 FOR UPDATE")
|
GuideWithdrawal selectForUpdate(@Param("id") Long id);
|
|
@Select("SELECT * FROM guide_withdrawal WHERE deleted = 0 " +
|
"AND (cash_req_seq_id = #{requestSequence} OR withdrawal_no = #{requestSequence}) " +
|
"LIMIT 1 FOR UPDATE")
|
GuideWithdrawal selectByPayoutSequenceForUpdate(@Param("requestSequence") String requestSequence);
|
|
@Select("SELECT id FROM guide_withdrawal WHERE deleted = 0 " +
|
"AND status IN ('TRANSFERRING', 'TRANSFERRED', 'PROCESSING') " +
|
"AND updated_at <= #{beforeTime} ORDER BY updated_at, id LIMIT #{limit}")
|
List<Long> selectPendingPayoutIds(@Param("beforeTime") LocalDateTime beforeTime,
|
@Param("limit") int limit);
|
|
@Update("UPDATE guide_withdrawal SET status = 'TRANSFERRED', " +
|
"cash_req_seq_id = NULL, cash_req_date = NULL, cash_hf_seq_id = NULL, " +
|
"payout_message = #{message}, processed_at = #{processedAt}, updated_at = #{updatedAt} " +
|
"WHERE id = #{id} AND deleted = 0 AND status IN ('PROCESSING', 'TRANSFERRED')")
|
int resetCashForRetry(@Param("id") Long id,
|
@Param("message") String message,
|
@Param("processedAt") LocalDateTime processedAt,
|
@Param("updatedAt") LocalDateTime updatedAt);
|
|
}
|