package com.ruoyi.warehouseBusiness.mapper;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.warehouseBusiness.domain.TWarehouseBills;
import com.ruoyi.warehouseBusiness.domain.TWarehousebillsitems;
import com.ruoyi.warehouseBusiness.domain.dto.WarehouseDTO;
import com.ruoyi.warehouseBusiness.domain.vo.CalculateStorageFeesInfoVO;
import com.ruoyi.warehouseBusiness.domain.vo.WarehouseTimeIntervalVO;
import org.apache.ibatis.annotations.Param;

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

/**
 * 仓库明细从表Mapper接口
 *
 * @author ruoyi
 * @date 2020-12-11
 */
public interface TWarehousebillsitemsMapper extends BaseMapper<TWarehousebillsitems> {
    /**
     * 查询仓库明细从表
     *
     * @param fId 仓库明细从表ID
     * @return 仓库明细从表
     */
    public TWarehousebillsitems selectTWarehousebillsitemsById(Long fId);

    /**
     * 查询仓库明细从表列表
     *
     * @param tWarehousebillsitems 仓库明细从表
     * @return 仓库明细从表集合
     */
    public List<TWarehousebillsitems> selectTWarehousebillsitemsList(TWarehousebillsitems tWarehousebillsitems);

    /**
     * 新增仓库明细从表
     *
     * @param tWarehousebillsitems 仓库明细从表
     * @return 结果
     */
    public int insertTWarehousebillsitems(TWarehousebillsitems tWarehousebillsitems);

    /**
     * 修改仓库明细从表
     *
     * @param tWarehousebillsitems 仓库明细从表
     * @return 结果
     */
    public int updateTWarehousebillsitems(TWarehousebillsitems tWarehousebillsitems);

    /**
     * 删除仓库明细从表
     *
     * @param fId 仓库明细从表ID
     * @return 结果
     */
    public int deleteTWarehousebillsitemsById(Long fId);

    /**
     * 批量删除仓库明细从表
     *
     * @param fIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteTWarehousebillsitemsByIds(Long[] fIds);

    int deleteByFPid(Long fId);

    List<Map<String, Object>> selectGoodsTransferitemsList(TWarehousebillsitems tWarehousebillsitems);

    /**
     * 新增库存费计算
     *
     * @param tWarehouseBills 查询条件
     * @return 结果
     */
    List<Map<String, Object>> selectStorageFeeItemList(@Param("warehouse") TWarehouseBills tWarehouseBills);

    /**
     * 新增库存费计算
     *
     * @param tWarehouseBills 查询条件
     * @return 结果
     */
    List<CalculateStorageFeesInfoVO> selectStorageFeeItemList1(@Param("warehouse") TWarehouseBills tWarehouseBills);

    /**
     * 根据库存主表id更新 库存明细表对应状态
     *
     * @param fettle 状态
     * @param fPid   主表id
     * @return 结果
     */
    int warehouseItemFollowUpdate(@Param("fPid") Long fPid, @Param("fettle") Long fettle);

    int warehousebillsitemsWarehouselocidSize(@Param("fWarehouselocid") Long fPid);

    /**
     * 计算仓储费撤回根据状态判断修改对应字段
     *
     * @param billsItem
     * @return
     */
    int agreementApprovalRejected(TWarehousebillsitems billsItem);

    /**
     * 入库待办数
     */
    int inStock();

    /**
     * 出库待办数
     */
    int outStock();

    /**
     * 当月入库待办数
     */
    int monthInStock(@Param("timeInterval") List<String> timeInterval);

    /**
     * 当月出库待办数
     */
    int monthOutStock(@Param("timeInterval") List<String> timeInterval);

    public List<Map<String, Object>> selectWarehouseBusinesInList(TWarehousebillsitems billsItem);

    public List<Map<String, Object>> selectWarehouseBusinesOutList(TWarehousebillsitems billsItem);

    /**
     * 根据id查询明细详情数据
     *
     * @param fId
     * @return
     */
    public Map<String, Object> selectWarehouseItemsByPId(Long fId);

    /**
     * 根据主表id查询明细是否存在已入库、出库、货转、调拨的明细
     *
     * @param fId 主表id
     * @return 结果
     */
    public int selectItemFStatusByFPid(Long fId);

    public TWarehousebillsitems selectItemQtyByFPid(Long fPid);

    /**
     * 根据主表id查询明细状态
     *
     * @param fId
     * @return
     */
    public List<TWarehousebillsitems> selectItemsStatusByPid(Long fId);

    /**
     * 根据主表id查询明细最小日期
     *
     * @param fId
     * @return
     */
    public Date selecMinBsDateByFPid(Long fId);

    /**
     * 获取最小仓储费计算日期
     *
     * @param fPid
     * @return
     */
    public Date getFchargedate(Long fPid);

    /**
     * 如果是按最小入库日期计算仓储费更新其他入库明细的仓储费计算日期
     *
     * @param fPid
     * @param fChargedate
     * @return
     */
    public int warehouseItemfChargedate(@Param("fPid") Long fPid,
                                        @Param("fChargedate") Date fChargedate);

    /**
     * 更新入库明细审核状态
     *
     * @param fPid
     * @param fItemstatus
     * @return
     */
    public int warehouseItemfItemstatus(@Param("fPid") Long fPid,
                                        @Param("fItemstatus") Long fItemstatus);

    /**
     * 将出库收费明细里删除的仓储费的来源入库明细的仓储费计算截止日期更新为空
     *
     * @param fPid
     * @param fId
     * @return
     */
    public int updatefStorageFeeDeadline(@Param("fPid") Long fPid,
                                         @Param("fId") List<Long> fId);

    /**
     * 将出库收费明细里删除的仓储费的来源入库明细的仓储费计算截止日期更新为空
     *
     * @param fPid
     * @return
     */
    public int updatefStorageFeeDeadlinefPid(@Param("fPid") Long fPid);

    /**
     * 查询明细表箱号
     *
     * @return
     */
    public List<Map<String, Object>> selectStorageFeeItemfTruckNo();

    /**
     * 根据id查询仓储费计费日期是否发生变化
     *
     * @param ids        id集合
     * @param chargedate 校验日期
     * @return
     */
    int queryChangedByFchargedate(@Param("ids") List<Long> ids, @Param("time") Date chargedate);

    /**
     * 根据id查询仓储费计费截止日期是否发生变化
     *
     * @param ids        id集合
     * @param chargedate 校验日期
     * @return
     */
    int queryChangedByFstorageFeeDeadline(@Param("ids") List<Long> ids, @Param("time") Date chargedate);

    /**
     * 根据仓库主表id更新仓储费计费截止日期
     *
     * @param pId  仓库主Id
     * @param time 仓储费计费截止日期
     * @return
     */
    int updateItemStorageFeeDeadlineByPId(@Param("pId") Long pId, @Param("time") Date time);

    /**
     * 根据id集合查询是否计算过仓储费
     *
     * @param ids  id集合
     * @param type 类型
     * @return
     */
    int selectIsCalculateStorageFeesByIdsOrType(@Param("ids") List<Long> ids, @Param("type") String type);

    /**
     * 根据id集合查询是否计算过仓储费
     *
     * @param ids id集合
     * @return
     */
    int selectIsCalculateStorageFeesByIds(@Param("ids") List<Long> ids);

    /**
     * 根据业务时间区间查询区间内出库、入库、货转、调拨明细
     *
     * @param starDate
     * @param endDate
     * @return
     */
    List<TWarehousebillsitems> selectByBsDateList(@Param("starDate") Date starDate, @Param("endDate") Date endDate);

    /**
     * 根据客户id、时间区间、状态查询仓储明细
     *
     * @param tWarehouseBills
     * @return
     */
    List<TWarehousebillsitems> selectListByCorpId(@Param("bills") TWarehouseBills tWarehouseBills);

    /**
     * 根据日期区间计算 仓库入库数量比较
     *
     * @param warehouseDto
     * @return
     */
    List<WarehouseTimeIntervalVO> selectInboundQtyByTime(@Param("dto") WarehouseDTO warehouseDto);
}
