package com.ruoyi.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.system.domain.PosOrderOmgPayment; import org.apache.ibatis.annotations.Param; import java.util.Date; import java.util.List; /** * OMG 支付交易流水 Mapper。insert / updateById 用 BaseMapper。 * * @author ruoyi * @date 2026-07-29 */ public interface PosOrderOmgPaymentMapper extends BaseMapper { /** 按 OMG 交易号查(回调幂等键 TradeNo)。 */ PosOrderOmgPayment selectByTradeNo(@Param("tradeNo") String tradeNo); /** 按商店交易编号查(MerchantTradeNo)。 */ PosOrderOmgPayment selectByMerchantTradeNo(@Param("merchantTradeNo") String merchantTradeNo); /** 按订单号查最新一笔流水(取最近发起/支付记录)。 */ PosOrderOmgPayment selectLatestByDdId(@Param("ddId") String ddId); PosOrderOmgPayment selectLatestPaidByDdId(@Param("ddId") String ddId); /** 全量未付流水(pay_status=0,含已轮换历史行),reconcile 遍历补单用。 */ List listUnpaidByDdId(@Param("ddId") String ddId); /** 最新可退款行(pay_status IN(1,3,4):已付/退款中/已退),退款/读侧用。 */ PosOrderOmgPayment selectLatestRefundableByDdId(@Param("ddId") String ddId); /** 是否存在已付/退款中/已退行(pay_status IN(1,3,4))。 */ int existsPaidByDdId(@Param("ddId") String ddId); /** * 扫描补单窗口内未核销的漏单 ddId(定时补单方案B 用)。 * 每订单取最新一笔 pay_status=0 的流水(older 发起视为放弃),关联 pos_order 排除已取消(state=4)。 */ List selectLeakOrderDdIds(@Param("windowStart") Date windowStart, @Param("graceCutoff") Date graceCutoff, @Param("batchSize") int batchSize); int markSuccessIfUnpaid(@Param("id") Long id, @Param("tradeNo") String tradeNo, @Param("payType") String payType, @Param("rtnCode") Integer rtnCode, @Param("rtnMsg") String rtnMsg, @Param("authCode") String authCode, @Param("payTime") java.util.Date payTime, @Param("tradeDate") java.util.Date tradeDate, @Param("callbackRaw") String callbackRaw, @Param("updateTime") java.util.Date updateTime); int markFailIfUnpaid(@Param("id") Long id, @Param("rtnCode") Integer rtnCode, @Param("rtnMsg") String rtnMsg, @Param("callbackRaw") String callbackRaw, @Param("updateTime") java.util.Date updateTime); int markPaymentInfoIfOpen(@Param("id") Long id, @Param("tradeNo") String tradeNo, @Param("callbackRaw") String callbackRaw, @Param("updateTime") java.util.Date updateTime); int markRefundingIfPaid(@Param("id") Long id, @Param("updateTime") java.util.Date updateTime); int markRefundedIfRefunding(@Param("id") Long id, @Param("updateTime") java.util.Date updateTime); int restorePaidIfRefunding(@Param("id") Long id, @Param("updateTime") java.util.Date updateTime); }