package com.ruoyi.asset.mapper;

import java.util.Date;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.asset.domain.AmsRfidTag;

/**
 * RFID标签Mapper接口
 * 
 * @author Yangk
 * @date 2026-06-05
 */
public interface AmsRfidTagMapper 
{
    /**
     * 查询RFID标签
     * 
     * @param tagId RFID标签主键
     * @return RFID标签
     */
    public AmsRfidTag selectAmsRfidTagByTagId(Long tagId);

    /**
     * 按标签ID锁定并查询RFID标签
     *
     * @param tagId RFID标签主键
     * @return RFID标签
     */
    public AmsRfidTag selectAmsRfidTagByTagIdForUpdate(Long tagId);

    /**
     * 按EPC锁定并查询RFID标签
     *
     * @param epcCode EPC编码
     * @return RFID标签
     */
    public AmsRfidTag selectAmsRfidTagByEpcForUpdate(String epcCode);

    /**
     * 查询RFID标签列表
     * 
     * @param amsRfidTag RFID标签
     * @return RFID标签集合
     */
    public List<AmsRfidTag> selectAmsRfidTagList(AmsRfidTag amsRfidTag);

    /**
     * 校验标签编码是否唯一
     *
     * @param tagCode 标签编码
     * @return RFID标签
     */
    public AmsRfidTag checkTagCodeUnique(String tagCode);

    /**
     * 校验EPC编码是否唯一
     *
     * @param epcCode EPC编码
     * @return RFID标签
     */
    public AmsRfidTag checkEpcCodeUnique(String epcCode);

    /**
     * 新增RFID标签
     * 
     * @param amsRfidTag RFID标签
     * @return 结果
     */
    public int insertAmsRfidTag(AmsRfidTag amsRfidTag);

    /**
     * 修改RFID标签
     * 
     * @param amsRfidTag RFID标签
     * @return 结果
     */
    public int updateAmsRfidTag(AmsRfidTag amsRfidTag);

    /**
     * 建立RFID标签当前绑定
     *
     * @param amsRfidTag RFID标签
     * @return 结果
     */
    public int bindAmsRfidTag(AmsRfidTag amsRfidTag);

    /**
     * 作废RFID标签
     *
     * @param tagId RFID标签主键
     * @param updateBy 更新人
     * @param updateTime 更新时间
     * @return 结果
     */
    public int voidAmsRfidTagByTagId(@Param("tagId") Long tagId,
                                     @Param("updateBy") String updateBy,
                                     @Param("updateTime") Date updateTime);

    /**
     * 清空RFID标签当前绑定资产
     *
     * @param tagId RFID标签主键
     * @param updateBy 更新人
     * @param updateTime 更新时间
     * @return 结果
     */
    public int unbindAmsRfidTagByTagId(@Param("tagId") Long tagId,
                                       @Param("assetId") Long assetId,
                                       @Param("updateBy") String updateBy,
                                       @Param("updateTime") Date updateTime);

    /**
     * 删除RFID标签
     * 
     * @param tagId RFID标签主键
     * @return 结果
     */
    public int deleteAmsRfidTagByTagId(Long tagId);

}
