package com.ruoyi.system.service;

import com.ruoyi.system.domain.PosOrderPayment;

import java.util.Date;

/**
 * 蓝新支付交易流水 Service。
 *
 * <p>承载发起（createPayment）、幂等查询、回调成功/失败写入。US1 发起 + US2 回调共用。
 *
 * @author ruoyi
 * @date 2026-06-22
 */
public interface IPosOrderPaymentService {

    /** 发起支付流水：同 merchantOrderNo 已存在则更新（重新发起），否则新增（pay_status=0）。 */
    int createPayment(String ddId, String merchantOrderNo, Long storeId, String merchantId, Integer amount);

    /** 按蓝新交易序号查（回调幂等键）。 */
    PosOrderPayment getByTradeNo(String tradeNo);

    /** 按商店订单号查。 */
    PosOrderPayment getByMerchantOrderNo(String merchantOrderNo);

    /** 按系统订单号查最近一笔。 */
    PosOrderPayment getLatestByDdId(String ddId);

    /**
     * 标记支付成功（回调/查询补单用）。
     * 幂等：若该 tradeNo 已 pay_status=1 则返回 0 不重复处理。
     */
    int markSuccess(String ddId, String merchantOrderNo, Long storeId, String merchantId, Integer amount,
                    String tradeNo, String payType, String authCode, Date payTime, String callbackRaw);

    /** 标记支付失败（回调 Status≠SUCCESS）。 */
    int markFail(String merchantOrderNo, String tradeNo, String payType, String callbackRaw);
}
