package cn.iocoder.yudao.module.order.service;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.order.entity.RepairOrderInfo;
import cn.iocoder.yudao.module.order.vo.RepairOrderCensusVO;
import cn.iocoder.yudao.module.order.vo.RepairOrderInfoPageReqVO;
import cn.iocoder.yudao.module.order.vo.RepairOrderInfoRespVO;
import cn.iocoder.yudao.module.order.vo.RepairOrderInfoSaveReqVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SignatureException;
import java.util.Map;

/**
 * 维修模块 订单 Service 接口
 *
 * @author pqz
 */
public interface RepairOrderInfoService extends IService<RepairOrderInfo> {


    /**
     * 保存订单信息
     *
     * @param saveReqVO TODO
     * @author PQZ
     * @date 14:57 2024/9/23
     **/
    void saveOrderInfo(RepairOrderInfoSaveReqVO saveReqVO);


    /**
     * 充值完成回调接口
     * @author PQZ
     * @date 22:19 2024/9/23
     * @param orderNo 订单编号
    **/
    void rechargeCallback(String orderNo);

    /**
     * 删除维修模块 订单
     *
     * @param id 编号
     */
    void deleteOrderInfo(String id);

    /**
     * 获得维修模块 订单
     *
     * @param id 编号
     * @return 维修模块 订单
     */
    RepairOrderInfo getOrderInfo(String id);

    /**
     * 根据订单编号查询订单数据
     * @author PQZ
     * @date 22:12 2024/9/23
     * @param orderNo 订单编号
     * @return cn.iocoder.yudao.module.order.entity.RepairOrderInfo
    **/
    RepairOrderInfo getOrderByOrderNo(String orderNo);



    /**
     * 分页查询订单信息
     *
     * @param pageReqVO RepairOrderInfoPageReqVO实体
     * @param page      分页参数
     * @return com.baomidou.mybatisplus.core.metadata.IPage<cn.iocoder.yudao.module.project.vo.RepairOrderInfoRespVO>
     * @author PQZ
     * @date 14:36 2024/9/23
     **/
    IPage<RepairOrderInfoRespVO> queryListPage(RepairOrderInfoPageReqVO pageReqVO, Page<RepairOrderInfoRespVO> page);

    /**
     * 订单分页查询
     *
     * @author 小李
     * @date 17:35 2024/9/23
     * @param respVO 查询对象
     **/
    IPage<RepairOrderInfoRespVO> getOrderPageByStatus(RepairOrderInfoRespVO respVO, Page<RepairOrderInfo> page);

    /**
     *
     * @author PQZ
     * @date 22:28 2024/9/25
     * @param respVO TODO
 * @param page TODO
     * @return com.baomidou.mybatisplus.core.metadata.IPage<cn.iocoder.yudao.module.order.vo.RepairOrderInfoRespVO>
    **/
    IPage<RepairOrderInfoRespVO> pageCreator(RepairOrderInfoRespVO respVO, Page<RepairOrderInfo> page);

    /**
     * 查询订单详情(包括工单)
     *
     * @author 小李
     * @date 17:43 2024/9/23
     * @param id 订单ID
     **/
    RepairOrderInfoRespVO getOrderById(String id);

    /**
     * 评价订单
     *
     * @author 小李
     * @date 17:50 2024/9/23
     * @param respVO 请求对象
     **/
    void appraiseOrder(RepairOrderInfoRespVO respVO);
    /**
     * 支付吊起接口
     * @param orderId 订单主键
     * @return
     */
    Map<String,Object> payTransactions(String orderId) throws IOException, NoSuchAlgorithmException, SignatureException, InvalidKeyException;
    Map<String,Object> payTransactionsCode(String orderId) throws IOException, NoSuchAlgorithmException, SignatureException, InvalidKeyException;

    /**
     * 获得已经评价的订单
     *
     * @author 小李
     * @date 15:50 2024/9/24
     **/
    IPage<RepairOrderInfo> getAppraisePage(Page<RepairOrderInfo> page);


    /**
     * 统计未入账和已入账(最简版)
     *
     * @author 小李
     * @date 18:52 2024/9/25
     **/
    RepairOrderCensusVO census();
}
