package com.kxs.store.biz.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.kxs.common.core.util.R;
import com.kxs.store.api.dto.kxsapp.storeOrder.*;
import com.kxs.store.api.model.KxsMachineApply;
import com.kxs.store.api.vo.kxsapp.storeOrder.OrderMonthTotalDetailVO;
import com.kxs.store.api.vo.kxsapp.storeOrder.OrderMonthTotalVO;
import com.kxs.store.api.vo.kxsapp.storeOrder.StoreOrderDetailVO;
import com.kxs.store.api.vo.kxsapp.storeOrder.StoreOrderListVO;
import com.kxs.store.api.vo.kxsapp.userOrder.UserApplyMachineDetailVO;
import com.kxs.store.api.vo.kxsapp.userOrder.UserApplyMahineListVO;

/**
 * 客小爽机具申请表(KxsMachineApply)表服务接口
 *
 * @author 系统
 * @since 2024-01-08 09:46:02
 */
public interface KxsMachineApplyService extends IService<KxsMachineApply> {

    /**
     * 申请机具
     *
     * @param param 参数
     * @return {@link R}
     */
    R applyMachine(ApplyMachineDTO param);

    /**
     * 订单管理-划拨
     *
     * @param param 参数
     * @return {@link R}
     */
    R storeOrderTransferUser(StoreOrderTransferUserDTO param);

    /**
     * app 分页列表
     *
     * @param page  页
     * @param param 参数
     * @return {@link IPage}<{@link StoreOrderListVO}>
     */
    IPage<StoreOrderListVO> getByPage(Page<StoreOrderListVO> page, StoreOrderListDTO param);

    /**
     * 未发货订单详情
     *
     * @param id 编号
     * @return {@link StoreOrderDetailVO}
     */
    StoreOrderDetailVO storeOrderDetail(Integer id);

    /**
     * 驳回订单
     *
     * @param param 参数
     * @return {@link Boolean}
     */
    R orderCancel(KxsMachineApply param);

    /**
     * 发货统计
     *
     * @param page  页
     * @param param 参数
     * @return {@link IPage}<{@link OrderMonthTotalVO}>
     */
    IPage<OrderMonthTotalVO> orderMonthTotal(Page<OrderMonthTotalVO> page, OrderMonthTotalDTO param);

    /**
     * 发货统计明细
     *
     * @param page  页
     * @param param 参数
     * @return {@link IPage}<{@link OrderMonthTotalDetailVO}>
     */
    IPage<OrderMonthTotalDetailVO> orderMonthTotalDetail(Page<OrderMonthTotalDetailVO> page, OrderMonthTotalDetailDTO param);

    /**
     * app 用户申请记录
     *
     * @param page 页
     * @return {@link IPage}<{@link UserApplyMahineListVO}>
     */
    IPage<UserApplyMahineListVO> userApplyMachineList(Page<UserApplyMahineListVO> page);

    /**
     * app 用户申请记录详情
     *
     * @param id 编号
     * @return {@link UserApplyMachineDetailVO}
     */
    UserApplyMachineDetailVO userApplyMachineDetail(Long id);
}

