package com.bonus.material.ma.mapper;

import java.util.Date;
import java.util.List;

import com.bonus.common.biz.domain.lease.LeaseApplyInfo;
import com.bonus.common.biz.domain.lease.LeaseOutDetails;
import com.bonus.material.basic.domain.BmQrBoxInfo;
import com.bonus.material.basic.domain.dto.BoxBindWarehouseDto;
import com.bonus.material.ma.domain.Machine;
import com.bonus.material.ma.domain.MachineSynch;
import com.bonus.material.ma.domain.Type;
import com.bonus.material.ma.domain.vo.MachineVo;
import com.bonus.material.ma.domain.vo.SampleSync;
import org.apache.ibatis.annotations.Param;

/**
 * 机具设备管理Mapper接口
 *
 * @author xsheng
 * @date 2024-09-27
 */
public interface MachineMapper
{
    /**
     * 查询机具设备管理
     *
     * @param maId 机具设备管理主键
     * @return 机具设备管理
     */
    MachineVo selectMachineByMaId(Long maId);

    /**
     * 查询机具设备编码信息
     *
     * @param bmQrBoxInfo
     * @return 机具设备管理
     */
    MachineVo selectMachineByMaCode(BmQrBoxInfo bmQrBoxInfo);

    /**
     * 查询机具设备管理列表
     *
     * @param machine 机具设备管理
     * @return 机具设备管理集合
     */
    List<MachineVo> selectMachineList(Machine machine);

    /**
     * 新增机具设备管理
     *
     * @param machine 机具设备管理
     * @return 结果
     */
    int insertMachine(Machine machine);

    /**
     * 修改机具设备管理
     *
     * @param machine 机具设备管理
     * @return 结果
     */
    int updateMachine(Machine machine);

    /**
     * 删除机具设备管理
     *
     * @param maId 机具设备管理主键
     * @return 结果
     */
    int deleteMachineByMaId(Long maId);

    /**
     * 根据maCode,typeId 删除机具设备
     *
     * @return 结果
     */
    int deleteMachineByMaCodeAndTypeId(@Param("maCode") String maCode, @Param("typeId") Long typeId);

    /**
     * 批量删除机具设备管理
     *
     * @param maIds 需要删除的数据主键集合
     * @return 结果
     */
    int deleteMachineByMaIds(Long[] maIds);

    /**
     * 查询机具设备管理列表
     */
    List<Type> selectByTypeList(Type type);

    String getMachineStatus(LeaseOutDetails record);

    /**
     * 修改机具设备(ma_machine表)的状态为：在用
     */
    int updateMaMachineStatus(@Param("record") LeaseOutDetails leaseOutDetails, @Param("status") Integer status);

    /**
     * 修改机具设备(ma_machine表)的状态
     * @param maId 机具设备主键
     * @param status 机具设备状态
     * @return 影响条数
     */
    int updateStatus(@Param("maId") Long maId, @Param("status") Integer status);

    /**
     * 查询在库机具编号
     * @param type
     * @return
     */
    List<Machine> getMachineList(Type type);

    /**
     * 查询电子标签
     * @param machine
     * @return
     */
    List<Machine> getElectronicLabel(Machine machine);

    /**
     * 根据标签信息查询出库单
     * @param leaseApplyInfo
     * @return
     */
    Long selectMaId(LeaseApplyInfo leaseApplyInfo);

    /**
     * 查询机具信息
     * @param dto
     * @return
     */
    Machine selectHouse(Machine dto);

    /**
     * 电子标签编码查询
     * @param machine
     * @return
     */
    List<Machine> getByMaCode(Machine machine);


    /**
     * 同步检验报告
     */
    int updateSynchReport(SampleSync sampleSync);

    /**
     * 固定资产编号录入
     *
     * @param machine 固定资产编号录入
     * @return 结果
     */
    int editAssetsCode(Machine machine);


    Machine selectMachineByQrCode(Machine ma);

    Machine getInfoByQrcode(Machine machine);

    Machine getInTimeByQrcode(Machine machine);

    Machine getServiceNumByQrcode(Machine machine);

    Machine getCheckNumByQrcode(Machine machine);

    Machine getScrapTimeByQrcode(Machine machine);

    Machine getLeaseInfoByQrcode(Machine machine);

    List<Machine> getListByCode(Machine machine);

    /**
     * 根据二维码查询机具信息
     * @param machine
     * @return
     */
    List<Machine> getInfoByMaCode(Machine machine);

    /**
     * 先根据编码查询ws_ma_info
     * @param info
     * @return
     */
    MachineVo selectMaInfoByMaCode(BmQrBoxInfo info);

    /**
     * 根据typeId查询机具信息
     * @param machine
     * @return
     */
    List<Machine> getInfoByTypeId(Machine machine);

    /**
     * 根据编码查询机具信息
     * @param machine
     * @return
     */
    List<Machine> getHisByCodeNew(Machine machine);

    /**
     * 根据数据
     * @param machine
     * @return
     */
    List<Machine> getElectronicLabelByWsMaInfo(Machine machine);

    List<Machine> getHisByCodeNewByWsMaInfo(Machine machine);

    LeaseApplyInfo getLeaseParentId(Machine machine);

    LeaseApplyInfo getLeaseUnitAndProject(LeaseApplyInfo leaseInfo);

    LeaseApplyInfo getBackParentId(Machine machine);

    LeaseApplyInfo getBackUnitAndProject(LeaseApplyInfo leaseInfoBack);


    /**
     * 新增批量更新方法
     * @param samples
     * @return
     */
    int batchUpdateSynchReport(@Param("list") List<SampleSync> samples);

    int editMachineStatus(Machine machine);

    int updateMaStatus(BoxBindWarehouseDto boxMa);

    List<Machine> getNewByMaCode(Machine machine);

    List<Machine> findMaMsgById(Machine machine);

    /**
     * 根据编码查询机具信息
     * @param machine
     * @return
     */
    int getCountByMaCode(Machine machine);

    SampleSync getSampleList(SampleSync sampleSync);

    int batchInsertSynchDetails(@Param("list") List<SampleSync> samples);

    List<MachineSynch> selectSynchList(MachineSynch machine);

    List<SampleSync> getBigList(List<SampleSync> samples);

    void insertInfo(Machine machine);

    List<MachineSynch> selectSynchDetailList(MachineSynch machine);

    /**
     * 修改机具的检测时间
     * @param maIds
     * @param thisCheckTime
     * @param nextCheckTime
     * @return
     */
    int updateCheckTimeBatch(@Param("maIds") Long[] maIds,
                             @Param("thisCheckTime") Date thisCheckTime,
                             @Param("nextCheckTime") Date nextCheckTime);
}
