package com.zg.project.wisdom.mapper;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import com.zg.project.wisdom.domain.GysJh;
import org.apache.ibatis.annotations.Param;

/**
 * 供应计划Mapper接口
 * 
 * @author zg
 * @date 2025-05-28
 */
public interface GysJhMapper 
{
    /**
     * 查询供应计划
     * 
     * @param id 供应计划主键
     * @return 供应计划
     */
    public GysJh selectGysJhById(Long id);

    /**
     * 查询供应计划列表
     * 
     * @param gysJh 供应计划
     * @return 供应计划集合
     */
    public List<GysJh> selectGysJhList(GysJh gysJh);

    /**
     * 新增供应计划
     * 
     * @param gysJh 供应计划
     * @return 结果
     */
    public int insertGysJh(GysJh gysJh);

    /**
     * 修改供应计划
     * 
     * @param gysJh 供应计划
     * @return 结果
     */
    public int updateGysJh(GysJh gysJh);

    /**
     * 删除供应计划
     * 
     * @param id 供应计划主键
     * @return 结果
     */
    public int deleteGysJhById(Long id);

    /**
     * 批量删除供应计划
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteGysJhByIds(Long[] ids);

    /**
     * 根据sapNo查询
     * @param sapNo
     * @return
     */
    List<GysJh> getBySapNo(String sapNo);

    /**
     * 修改状态
     * @param gysJhId 主键ID
     * @param status 状态值（1=全部入库，2=部分入库）
     */
    void updateStatusById(@Param("id") Long gysJhId, @Param("status") String status);

    /**
     * 重置状态
     * @param sapNos
     */
    void resetGysJhStatusBySapNos(List<String> sapNos);

    /**
     * 根据sapNo和xmNo和wlNo查询
     * @param sapNo
     * @param xmNo
     * @param wlNo
     * @return
     */
    boolean existsByUniqueKeys(@Param("sapNo") String sapNo,
                               @Param("xmNo") String xmNo,
                               @Param("wlNo") String wlNo);

    /**
     * 批量修改状态
     * @param
     */
    void batchUpdateStatusByIds(@Param("ids") Set<Long> ids);

    /**
     * 根据id批量查询
     * @param
     * @return
     */
    List<GysJh> selectByIds(@Param("ids") List<Long> ids);

    /**
     * 根据id修改
     * @param
     * @param realQty
     */
    void decreaseJhQtyById(@Param("id") Long id, @Param("realQty") BigDecimal realQty);
}
