package com.fs.hisStore.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.fs.hisStore.domain.FsStoreVerifyCodeScrm;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 核销码Mapper接口
 * 
 * @author fs
 * @date 2025-11-27
 */
public interface FsStoreVerifyCodeScrmMapper extends BaseMapper<FsStoreVerifyCodeScrm> {
    /**
     * 查询核销码
     * 
     * @param id 核销码主键
     * @return 核销码
     */
    FsStoreVerifyCodeScrm selectFsStoreVerifyCodeScrmById(String id);

    /**
     * 查询核销码列表
     * 
     * @param fsStoreVerifyCodeScrm 核销码
     * @return 核销码集合
     */
    List<FsStoreVerifyCodeScrm> selectFsStoreVerifyCodeScrmList(FsStoreVerifyCodeScrm fsStoreVerifyCodeScrm);

    /**
     * 新增核销码
     * 
     * @param fsStoreVerifyCodeScrm 核销码
     * @return 结果
     */
    int insertFsStoreVerifyCodeScrm(FsStoreVerifyCodeScrm fsStoreVerifyCodeScrm);

    /**
     * 修改核销码
     * 
     * @param fsStoreVerifyCodeScrm 核销码
     * @return 结果
     */
    int updateFsStoreVerifyCodeScrm(FsStoreVerifyCodeScrm fsStoreVerifyCodeScrm);

    /**
     * 删除核销码
     * 
     * @param id 核销码主键
     * @return 结果
     */
    int deleteFsStoreVerifyCodeScrmById(String id);

    /**
     * 批量删除核销码
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteFsStoreVerifyCodeScrmByIds(String[] ids);

    /**
     * 批量插入核销码
     * @param list 数据集合
     * **/
    void batchInsertVerifyCode(@Param("list") List<FsStoreVerifyCodeScrm> list);

    /**
     * 查询锁定未出库溯源码行锁
     * @param productId 商品ID
     * @param count 需要数量
     * @return 锁定的溯源码列表
     */
    @Select("SELECT * FROM fs_store_verify_code_scrm " +
            "WHERE product_id = #{productId} " +
            "AND outbound_status = 0 " +
            "AND is_del = 0 " +
            "ORDER BY create_time ASC " +
            "LIMIT #{count} FOR UPDATE SKIP LOCKED")
    List<FsStoreVerifyCodeScrm> selectUnOutboundVerifyCodesWithLock(
            @Param("productId") Long productId,
            @Param("count") Integer count);
}
