package com.ktg.iscs.service;

import com.ktg.iscs.domain.dto.exUpdate.ExDTO;
import com.ktg.iscs.domain.dto.hardwareApi.*;
import com.ktg.iscs.domain.vo.hardwareApi.JobTicketVO;

import java.util.List;

/**
 * 硬件调用接口
 *
 * @author cgj
 * @date 2024-10-16
 */
public interface HardwareApiService {

    /**
     * 取出钥匙
     * @param dto
     * @return
     */
    Boolean updateTakeOutKey(TakeOutKeyDTO dto);

    /**
     * 归还钥匙
     * @param dto
     * @return
     */
    Boolean updateReturnKey(ReturnKeyDTO dto);

    /**
     * 取出挂锁时更新数据
     * @param list
     * @return
     */
    Boolean updateTicketLockTake(List<TakeTicketLockDTO> list);

    /**
     * 归还挂锁时更新数据
     * @param dto
     * @return
     */
    Boolean updateTicketLockReturn(ReturnTicketLockDTO dto);

    /**
     * 批量更新作业票下隔离点的上锁状况
     * @return
     */
    Boolean updateLockPointBatch(List<LockPointBatchDTO> list);





    /**
     * 取出辅件时更新数据
     * @param list
     * @return
     */
    Boolean updateLocksetTake(List<TakeLocksetDTO> list);

    /**
     * 辅件绑定隔离点
     * @param dto
     * @return
     */
    Boolean updateLocksetPoint(LocksetPointDTO dto);

    /**
     * 辅件归还物资柜
     * @param dto
     * @return
     */
    Boolean updateLocksetReturn(ReturnLocksetDTO dto);


    /**
     * 获取作业票和关联数据
     * @param ticketId
     * @return
     */
    JobTicketVO selectTicketDetailById(Long ticketId);

    /**
     * 共锁人上锁/解锁
     * @param dto
     * @return
     */
    Boolean updateColockerStatus(UpdateColockerStatusDTO dto);

    /**
     * 批量更新开关状态
     * @param dto
     * @return
     */
    Integer updateSwitchList(UpdateSwitchParam dto);

    /**
     * 上锁取钥匙前检查
     * @param ticketId
     * @return
     */
    Boolean checkBeforeToLock(Long ticketId);

    /**
     * 解锁取钥匙前检查
     * @param ticketId
     * @return
     */
    Boolean checkBeforeToUnlock(Long ticketId);

    /**
     * 重合点位数据解锁
     * @param dto
     * @return
     */
    Boolean updateCoincideToUnLock(CoincidePointToUnLockDTO dto);

    /**
     * 批量更新硬件状态
     * @param dto
     * @return
     */
    Boolean updateHardwareEsStatus(ExDTO dto);

    /**
     * 判断当前登陆人员是否有需要去上所或者去解锁的需求
     * @return false 不需要 true 需要
     */
    Boolean getMySelfState();

    /**
     * 通过nfc查询当前锁能不能锁
     * @param nfc
     * @return
     */
    Integer getLockStateByNfc(String nfc, Long ticketId);

}
