package com.jwipc.order.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jwipc.order.entity.BasicPlan;
import com.jwipc.order.model.po.BasicForecastPlanReleasePO;
import com.jwipc.order.model.po.BasicPlanPO;
import com.jwipc.order.model.query.BasicPlanQuery;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Author: swq
 * @Date: 2024/3/12 16:41
 */
public interface BasicPlanMapper extends BaseMapper<BasicPlan> {
    /**
     * 查询列表数据 不分页
     * @param query
     * @return
     */
    List<BasicPlanPO> selectListByPage(@Param("query") BasicPlanQuery query);

    /**
     * 查询列表数据 分页
     * @param dbPage
     * @param query
     * @return
     */
    List<BasicPlanPO> selectListByPage(@Param("dbPage") Page<BasicPlan> dbPage, @Param("query") BasicPlanQuery query);

    /**
     * 查找最大的版本号
     */
    long findMaxVersion();

    /**
     * 根据当前版本查询上个版本
     *
     * @param version 当前版本
     * @return 上个版本
     */
    Long findPreviousVersion(Long version);

    /**
     * 获取待发布的计划数据
     *
     * @param query 查询条件
     * @return 结果
     */
    List<BasicForecastPlanReleasePO> findWaitReleaseData(@Param("query") BasicPlanQuery query);
    /**
     * 获取待发布的计划数据
     *
     * @param toPage 分页条件
     * @param query 查询条件
     * @return 结果
     */
    List<BasicForecastPlanReleasePO> findWaitReleaseData(Page<BasicForecastPlanReleasePO> toPage, @Param("query") BasicPlanQuery query);


    /**
     * 获取计划待发布总量，已发布总量和未发布总量
     *
     * @param query 查询条件
     * @return 结果
     */
    BasicForecastPlanReleasePO findPlanSituation(@Param("query") BasicPlanQuery query);

    /**
     * 获取最新的流水号
     *
     * @param tableName     表明
     * @param excludePlanId 排除的计划
     */
    String findNewSerialNumber(@Param("tableName") String tableName, @Param("excludePlanId") Long excludePlanId,@Param("jitFlag") Integer jitFlag);

    /**
     * 失效所有计划
     */
    void invalidAllPlanData();

    void updateQuota(@Param("productCode") String productCode,@Param("supplierCode") String supplierCode,@Param("factoryCode") String factoryCode,@Param("oriQuota") String oriQuota,@Param("adjustmentQuota") String adjustmentQuota);

}
