liujie
2026-09-11 4f6f15b818704079ff2e4e4719b798f48d68a335
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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);
 
}