package com.rf.psychological.wxpay.service;

import com.rf.psychological.enums.OrderStatus;
import com.rf.psychological.enums.wxpay.WxTradeType;
import com.rf.psychological.wxpay.model.OrderInfo;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * @Description:订单信息接口
 * @Author: zsf
 * @Date: 2022/6/21
 */
public interface OrderInfoService {

    /**
     * 创建订单
     * @param productId 量表产品id
     * @param userId  用户id
     * @param resultId 结果id
     * @return
     */
    public OrderInfo createOrderByProductId(String productId, String userId, String resultId,Integer price ,WxTradeType type) throws Exception;

    /**
     * 保存二维码连接
     * @param info
     */
    void saveCodeUrl(OrderInfo info);

    /**
     * 查询订单列表
     * @param pageNum 页码
     * @param pageSize 数量
     * @param productId 产品id
     * @param userId 用户id
     * @param orderStatus 订单状态
     * @return
     */
    Page<OrderInfo> findOrderInfoList(int pageNum, int pageSize,String productId,String userId,String orderStatus);

    /**
     * 根据编号获取订单状态
     * @param orderNo 订单号
     * @return
     */
    OrderInfo  getOrderStatus(String orderNo);
    OrderInfo  getOrderDetail(String orderNo);

    /**
     * 查询订单是否支付成功
     * @param proId 量表id
     * @param userId 用户id
     * @param resultId 报告id
     * @return
     */
    OrderInfo queryOrderByResultIdAndUserIdAndProId(String proId,String userId,String resultId);

    /**
     * 关闭订单
     * @param orderNo 订单编号
     */
    void cancelOrder(String orderNo);


    /**
     * 更新订单状态
     * @param info 订单
     * @param success 状态值
     */
    void updateOrderStatus(OrderInfo info, OrderStatus success);

    /**
     * 更新订单状态
     * @param orderNo 订单
     * @param status 状态值
     */
    void updateOrderStatus(String orderNo, OrderStatus status);

    /**
     * 根据订单状态查询所有订单
     * @param status
     * @return
     */
    List<OrderInfo>  queryOrderInfoList(OrderStatus status);


    /**
     * 判断是否支付
     * @param resultId
     * @return
     */
    boolean checkPayOrder(String resultId);

    /**
     * 通过手机号查询订单列表
     * @param pageNum 页码
     * @param pageSize 数量
     * @param modelPhone 用户手机号
     * @param orderStatus 订单状态
     * @return
     */
    Page<OrderInfo> getOrderByUserId(int pageNum, int pageSize, String modelPhone, String orderStatus);

    OrderInfo getOrderByUserIdAndResultId(String userId, String resultId);

    int countNum(String flag, String format);
}
