package com.qmth.sop.business.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qmth.sop.business.bean.dto.DataPermissionDto;
import com.qmth.sop.business.bean.result.DeviceInOutResult;
import com.qmth.sop.business.entity.TBDeviceInOut;
import com.qmth.sop.common.enums.DeviceStatusEnum;
import com.qmth.sop.common.enums.DeviceUsageTypeEnum;
import com.qmth.sop.common.enums.InOutTypeEnum;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 设备出入库登记 Mapper 接口
 * </p>
 *
 * @author wangliang
 * @since 2023-08-01
 */
public interface TBDeviceInOutMapper extends BaseMapper<TBDeviceInOut> {
    /**
     * sop管理 - 设备出入库登记查询
     *
     * @param iPage          分页参数
     * @param serviceUnitId  服务单元id
     * @param usageType      用途类型
     * @param userId         登记人
     * @param deviceStatus   运行状态
     * @param inOutTimeStart 出入库时间 - 开始
     * @param inOutTimeEnd   出入库时间 - 结束
     * @param deviceNo       设备编号
     * @param deviceSerialNo 设备序列号
     * @param customName     客户名称
     * @param location       当前地
     * @param address        发往地
     * @param serialNo       登记流水号
     * @param dpr            数据权限
     * @return 分页结果
     */
    IPage<DeviceInOutResult> findDeviceInOutPageBySop(@Param("iPage") Page<DeviceInOutResult> iPage,
                                                      @Param("serviceUnitId") Long serviceUnitId,
                                                      @Param("usageType") DeviceUsageTypeEnum usageType,
                                                      @Param("userId") Long userId,
                                                      @Param("deviceStatus") DeviceStatusEnum deviceStatus,
                                                      @Param("inOutTimeStart") Long inOutTimeStart,
                                                      @Param("inOutTimeEnd") Long inOutTimeEnd,
                                                      @Param("deviceNo") String deviceNo,
                                                      @Param("deviceSerialNo") String deviceSerialNo,
                                                      @Param("customName") String customName,
                                                      @Param("location") String location,
                                                      @Param("address") String address,
                                                      @Param("serialNo") String serialNo,
                                                      @Param("dpr") DataPermissionDto dpr);

    /**
     * 资源保障-设备保障-出入库登记查询
     *
     * @param iPage          分页参数
     * @param serviceUnitId  服务单元id
     * @param usageType      用途类型
     * @param userId         登记人
     * @param deviceStatus   运行状态
     * @param inOutTimeStart 出入库时间 - 开始
     * @param inOutTimeEnd   出入库时间 - 结束
     * @param deviceNo       设备编号
     * @param deviceSerialNo 设备序列号
     * @param customName     客户名称
     * @param location       当前地
     * @param address        发往地
     * @param serialNo       登记流水号
     * @param dpr            数据权限
     * @return 分页结果
     */
    IPage<DeviceInOutResult> findDeviceInOutPageBySource(@Param("iPage") Page<DeviceInOutResult> iPage,
                                                         @Param("serviceUnitId") Long serviceUnitId,
                                                         @Param("usageType") DeviceUsageTypeEnum usageType,
                                                         @Param("userId") Long userId,
                                                         @Param("deviceStatus") DeviceStatusEnum deviceStatus,
                                                         @Param("inOutTimeStart") Long inOutTimeStart,
                                                         @Param("inOutTimeEnd") Long inOutTimeEnd,
                                                         @Param("deviceNo") String deviceNo,
                                                         @Param("deviceSerialNo") String deviceSerialNo,
                                                         @Param("customName") String customName,
                                                         @Param("location") String location,
                                                         @Param("address") String address,
                                                         @Param("serialNo") String serialNo,
                                                         @Param("dpr") DataPermissionDto dpr);

    /**
     * 查询可出库设备信息
     *
     * @param supplierId 供应商id
     * @param status     设备状态 -- 正常
     * @param inOutType  设备最后一次出入库记录状态 -- 入库
     * @return 可出库设备信息
     */
    List<DeviceInOutResult> findDeviceCanOutInfo(@Param("supplierId") Long supplierId,
                                                 @Param("status") DeviceStatusEnum status,
                                                 @Param("inOutType") InOutTypeEnum inOutType);


    /**
     * 查询可入库设备信息（sop项目入库需要有派单号）
     *
     * @param supplierId 供应商id
     * @param inOutType  设备最后一次出入库记录状态 -- 出库
     * @param sopNo      sopNo
     * @return 可入库设备信息
     */
    List<DeviceInOutResult> findDeviceCanInInfo(@Param("supplierId") Long supplierId,
                                                @Param("inOutType") InOutTypeEnum inOutType,
                                                @Param("sopNo") String sopNo);
}