package com.bonus.material.basic.mapper;

import com.bonus.common.biz.domain.lease.LeaseOutDetails;
import com.bonus.material.basic.domain.BmQrBoxInfo;
import com.bonus.material.basic.domain.dto.BoxBindWarehouseDto;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author ma_sh
 * @create 2024/12/10 17:27
 */
public interface BmQrBoxMapper {

    /**
     * 查询二维码标准箱管理
     */
    List<BmQrBoxInfo> find(BmQrBoxInfo bmQrBoxInfo);

    /**
     * 根据box_code 或 box_id查询二维码标准箱信息
     */
    List<BmQrBoxInfo> findBoxInfoByKey(BmQrBoxInfo bmQrBoxInfo);

    /**
     * 新增二维码标准箱管理
     */
    int insertBmQrcodeInfo(BmQrBoxInfo bmQrBoxInfo);

    /**
     * 修改二维码标准箱信息 -- byID
     */
    int updateBmQrcodeInfoById(BmQrBoxInfo bmQrBoxInfo);

    /**
     * 修改二维码标准箱信息 -- 根据box_code
     * @param bmQrBoxInfo 标准箱信息
     */
    int updateBmQrcodeInfoByCode(BmQrBoxInfo bmQrBoxInfo);

    /**
     * 根据二维码QR编码查询绑定的物资信息
     */
    BmQrBoxInfo getMaInfoByQrCode(String qrCode);

    /**
     * 修改标准箱状态 -- 增加绑定编码时调用
     */
    int updateBmQrcodeStatus(BmQrBoxInfo bmQrBoxInfo);

    /**
     * 查询标准箱已绑定的物资机具类型
     */
    List<Long> getBoxMaTypeList(Long boxId);

    /**
     * 根据标准箱ID查询标准箱已绑定物资的任务ID
     * @param boxId 标准箱id
     * @return 标准箱物资的绑定批次 buyTask
     */
    String getBoxBindMaBuyTaskByBoxId(Long boxId);

    /**
     * 查询此机具是否已经被标准箱绑定过
     */
    int existsMaId(Long maId);

    /**
     * 解除二维码标准箱绑定关系
     */
    int unBindQrcodeBox(BmQrBoxInfo bmQrBoxInfo);

    /**
     * 增加二维码标准箱绑定关系
     */
    int addQrcodeBoxBind(BmQrBoxInfo bmQrBoxInfo);

    /**
     * 删除二维码标准箱
     */
    int deleteById(BmQrBoxInfo bmQrBoxInfo);

    /**
     * 根据二维码标准箱ID查询二维码数量
     * @param boxId 标准箱ID
     */
    int countBmQrcodeInfoByBoxId(Long boxId);

    /**
     * 查询二维码标准箱--绑定详情details
     */
    List<BmQrBoxInfo> getList(BmQrBoxInfo bmQrBoxInfo);

    /**
     * 根据二维码标准箱编码查询绑定详情
     */
    List<BmQrBoxInfo> getBoxBindList(Long boxId);

    /**
     * 根据二维码标准箱编码查询绑定详情
     */
    List<BmQrBoxInfo> getBoxBindLists(BmQrBoxInfo bean);

    /**
     * 根据二维码标准箱编码查询绑定详情
     * @param bmQrBoxInfo
     * @return
     */
    List<BmQrBoxInfo> getBoxBindListByCode(BmQrBoxInfo bmQrBoxInfo);

    /**
     * 删除二维码标准箱绑定关系
     * @param record
     * @return
     */
    int deleteBoxBind(LeaseOutDetails record);

    /**
     * 根据二维码标准箱编码查询绑定详情
     * @param bmQrBoxInfo
     * @return
     */
    List<BmQrBoxInfo> getBoxCodeList(BmQrBoxInfo bmQrBoxInfo);

    /**
     * 查询在库信息
     * @param bmQrBoxInfo
     * @return
     */
    List<BmQrBoxInfo> getBoxBindListById(BmQrBoxInfo bmQrBoxInfo);

    /**
     * 根据物资ID查询标准箱绑定详情
     * @param maId
     * @return
     */
    List<BmQrBoxInfo> selectByMaId(Long maId);

    List<BoxBindWarehouseDto> getBoxList(BoxBindWarehouseDto boxBindWarehouseDto);

    int updateNewInputNum(BoxBindWarehouseDto boxMa);


    BoxBindWarehouseDto getSingleInfo(BoxBindWarehouseDto boxMa);

    void updatePurchaseStatus(BoxBindWarehouseDto boxMa);

    BoxBindWarehouseDto getTaskInfo(BoxBindWarehouseDto boxMa);

    void updateTaskStatus(BoxBindWarehouseDto boxMa);

    int updateStorageNum(BoxBindWarehouseDto boxMa);

    int updateBoxStatus(BoxBindWarehouseDto boxMa);

    /**
     * 查询标准箱信息
     * @param info
     * @return
     */
    BoxBindWarehouseDto getBoxInfo(BoxBindWarehouseDto info);

    /**
     * 一个标准型只有1种类型
     * @param boxId
     * @return
     */
    List<Long> getBoxWsTypeList(Long boxId);

    /**
     * 查询标准箱已绑定的仓库信息
     * @param bean
     * @return
     */
    List<BmQrBoxInfo> getBoxBindWsList(BmQrBoxInfo bean);

    /**
     * 查询当月标准箱数
     * @param year
     * @param month
     * @return
     */
    int getMonthMaxOrderByDate(@Param("year") String year, @Param("month") String month);
}
