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

import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.manage.api.dto.licence.LicenceOrderPageDTO;
import com.gic.haoban.manage.api.dto.qdto.licence.LicenceOrderPageQDTO;
import com.gic.haoban.manage.api.dto.qdto.licence.LicenceOrderQDTO;
import com.gic.haoban.manage.service.entity.licence.TabHaobanLicenceOrder;
import org.apache.ibatis.annotations.Param;

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

/**
 * <p>
 * 企业微信许可账号购买
 * </p>
 *
 * @author jx
 * @since 2023-03-09
 */
public interface LicenceOrderService {
    /**
     * 查询企业微信订单详情
     *
     * @param orderId 订单id
     * @return
     */
    TabHaobanLicenceOrder getLicenceOrderDetail(Long orderId);

    /**
     * 删除订单
     *
     * @param orderId 订单id
     * @return
     */
    Integer deleteLicenceOrder(Long orderId);

    /**
     * 新增或者修改订单
     *
     * @param licenceOrderQDTO
     * @return orderId
     */
    String saveOrUpdateLicenceOrder(LicenceOrderQDTO licenceOrderQDTO);

    /**
     * 更新订单状态
     *
     * @param orderId 订单id
     * @param type    订单状态
     * @param wxFlag  1微信订单状态  0 企业微信订单状态
     * @return
     */
    Boolean updateLicenceOrderType(Long orderId, Integer type, String enterpriseId, String wxEnterpriseId, String creatorName, Integer wxFlag);

    /**
     * 上次订单支付凭证
     *
     * @param orderId 订单id
     * @param voucher 凭证url
     * @return
     */
    Boolean uploadLicenceOrderVoucher(Long orderId, String voucher, String enterpriseId, String wxEnterpriseId, String creatorName);

    /**
     * 查询企业是否存在订单未支付接口
     *
     * @param wxEnterpriseId 企业微信id
     * @return
     */
    String isPayLicenceOrder(String wxEnterpriseId);

    /**
     * 分页查询订单列表
     *
     * @param licenceOrderPageQDTO
     * @return
     */
    Page<LicenceOrderPageDTO> getLicenceOrderPage(LicenceOrderPageQDTO licenceOrderPageQDTO);

    /**
     * 保存微信交易信息
     *
     * @param orderId         订单id
     * @param transactionCode 订单编号
     * @param prepayId        微信预支付id
     * @param wxOrderId       微信支付id
     * @return
     */
    Integer saveTransactionCode(Long orderId, String transactionCode, String prepayId, String wxOrderId, Date payTime,String wxUrl);

    /**
     * 查询微信订单详情
     *
     * @param transactionId 订单编号
     * @return
     */
    TabHaobanLicenceOrder selectByTransactionId(String transactionId);

    /**
     *  查询订单详情
     * @param qywxOrderId 企业微信订单id
     * @return
     */
    TabHaobanLicenceOrder selectByQywxOrderId(String qywxOrderId);

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

    /**
     * 查询订单编号id
     * @param param 查询参数
     * @param type 0 订单编号 1 企业微信订单编号 2微信订单编号 3付费应用企业微信订单编号
     * @param wxEnterpriseId
     * @return
     */
    List<String> getOrderIdList(String param, Integer type, String wxEnterpriseId);

    /**
     * 审核订单
     * @param orderId 订单id
     * @param flag 是否通过 0 否 1是
     * @param reason 不通过原因
     * @return
     */
    Boolean checkLicenceOrder(Long orderId,Integer flag,String reason,String creatorName);

    /**
     * 记录回调时间
     * @param orderId 订单id
     * @param type  0 微信支付时间 1 微信退款时间 2 企业微信支付时间 3企业微信退款时间
     * @param time
     * @return
     */
    Boolean saveCallBackTime(Long orderId,Integer type,Date time);
    /**
     * 根据wxEnterpriseId查询企业订单已支付数量
     *
     * @param wxEnterpriseId
     */
    Integer selectCountByWxEnterpriseId(String wxEnterpriseId);


}
