package com.gic.haoban.manage.service.dao.mapper.licence;

import com.gic.haoban.manage.api.dto.qdto.licence.LicenceOrderPageQDTO;
import com.gic.haoban.manage.service.entity.licence.TabHaobanLicenceOrder;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * <p>
 * Mapper 接口
 * </p>
 *
 * @author jx
 * @since 2023-03-09
 */
public interface TabHaobanLicenceOrderMapper {

    /**
     * 获取订单详情
     *
     * @param orderId
     * @return
     */
    TabHaobanLicenceOrder selectById(@Param("orderId") Long orderId);

    /**
     * 新增订单
     *
     * @param tabHaobanLicenceOrder
     * @return
     */
    Integer insert(TabHaobanLicenceOrder tabHaobanLicenceOrder);

    /**
     * 删除订单
     *
     * @param orderId
     * @return
     */
    Integer deleteById(@Param("orderId") Long orderId);

    /**
     * 跟新订单状态
     *
     * @param orderId
     * @param type
     * @return
     */
    Integer updateLicenceOrderType(@Param("orderId") Long orderId, @Param("type") Integer type);

    /**
     * 跟新企业微信订单状态
     *
     * @param orderId
     * @param type
     * @return
     */
    Integer updateQywxOrderType(@Param("orderId") Long orderId, @Param("type") Integer type);

    /**
     * 上传订单支付凭证
     *
     * @param orderId
     * @param voucher
     * @return
     */
    Integer uploadLicenceOrderVoucher(@Param("orderId") Long orderId, @Param("voucher") String voucher);

    /**
     * 根据wxEnterpriseId查询企业是否存在未支付订单
     *
     * @param wxEnterpriseId
     * @return order_id
     */
    String selectByWxEnterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId);

    /**
     * 分页查询订单列表
     *
     * @param licenceOrderPageQDTO
     * @return
     */

    List<TabHaobanLicenceOrder> getLicenceOrderPage(LicenceOrderPageQDTO licenceOrderPageQDTO);

    Integer saveTransactionCode(@Param("orderId") Long orderId, @Param("orderNumber") String orderNumber, @Param("prepayId") String prepayId,
                                @Param("wxOrderId") String wxOrderId, @Param("payTime") Date payTime, @Param("wxUrl") String wxUrl);

    /**
     * 获取订单详情
     *
     * @param orderNumber 订单编号
     * @return
     */
    TabHaobanLicenceOrder selectByTransactionId(@Param("orderNumber") String orderNumber);

    /**
     * @param qywxOrderId 企业微信订单id
     * @return
     */
    TabHaobanLicenceOrder selectByQywxOrderId(@Param("qywxOrderId") String qywxOrderId);

    /**
     * 保存企业微信订单id
     *
     * @param orderId
     * @param qywxOrderId
     * @return
     */
    Integer saveQywxOrderId(@Param("orderId") Long orderId, @Param("qywxOrderId") String qywxOrderId,@Param("qywxExpireTime") Date qywxExpireTime);

    List<String> getTransactionIdList(@Param("orderNumber") String orderNumber, @Param("wxEnterpriseId") String wxEnterpriseId);

    List<String> getQywxOrderId(@Param("qywxOrderId") String qywxOrderId, @Param("wxEnterpriseId") String wxEnterpriseId);

    List<String> getWxOrderId(@Param("wxOrderId") String wxOrderId, @Param("wxEnterpriseId") String wxEnterpriseId);

    Integer saveOrderCheckReason(@Param("orderId") Long orderId, @Param("reason") String reason, @Param("type") Integer type);

    /**
     * 记录回调时间
     *
     * @param orderId 订单id
     * @param type    0 微信支付时间 1 微信退款时间 2 企业微信支付时间 3企业微信退款时间
     * @param time
     * @return
     */
    Integer saveCallBackTime(@Param("orderId") Long orderId, @Param("type") Integer type, @Param("time") Date time);

    /**
     * 根据wxEnterpriseId查询企业订单已支付数量
     *
     * @param wxEnterpriseId
     */
    Integer selectCountByWxEnterpriseId(@Param("wxEnterpriseId") String wxEnterpriseId);

}
