package com.cf.imes.module.plan.dal.mysql.orderImport;

import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.module.plan.controller.admin.orderImport.vo.OrderImportTempDataReqVO;
import com.cf.imes.module.plan.dal.dataobject.orderImport.OrderImportTempDataDO;
import com.cf.imes.module.plan.dal.dataobject.orderImport.OrderImportTempDataGoodsGroupDO;
import com.cf.imes.module.plan.dal.dataobject.orderImport.OrderImportTempDataGoodsIdGroupDO;
import com.cf.imes.module.plan.dal.dataobject.orderImport.OrderImportTempDataPartItemCodeGroupDO;
import com.cf.imes.module.plan.dal.dataobject.orderImport.OrderImportTempDataPartRoomBodyGroupGroupDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 生产单导入临时表 Mapper
 *
 * @author Gqr
 * @since 2025/1/9 11:42
 */
@Mapper
public interface OrderImportTempDataMapper extends BaseMapperX<OrderImportTempDataDO> {
    /**
     * 基于物料编码分组的总数查询
     *
     * @param reqVO
     * @return
     */
    int selectCountGoodsIdGroup(@Param("reqVO") OrderImportTempDataReqVO reqVO);

    /**
     * 基于物料编码的分组查询（可分页）
     *
     * @param reqVO
     * @return
     */
    List<OrderImportTempDataGoodsIdGroupDO> selectGoodsIdGroup(@Param("reqVO") OrderImportTempDataReqVO reqVO);

    /**
     * 基于商品名称、材料、颜色、商品厚、品牌分组的商品总数查询
     *
     * @param reqVO
     * @return
     */
    int selectCountPlateGoodsGroup(@Param("reqVO") OrderImportTempDataReqVO reqVO);

    /**
     * 基于商品名称、材料、纹理、颜色、规格、商品高、商品宽、商品厚、品牌的商品分组查询（可分页）
     *
     * @param reqVO
     * @return
     */
    List<OrderImportTempDataGoodsGroupDO> selectPlateGoodsGroup(@Param("reqVO") OrderImportTempDataReqVO reqVO);

    /**
     * 基于商品名称、材料、复合部件、配件类型、配件子类、厂家、型号、规格、、商品高、商品宽、商品厚、单位、品牌分组的配件总数查询
     *
     * @param reqVO
     * @return
     */
    int selectCountPartGoodsGroup(@Param("reqVO") OrderImportTempDataReqVO reqVO);

    /**
     * 基于商品名称、材料、复合部件、配件类型、配件子类、厂家、型号、规格、、商品高、商品宽、商品厚、单位、品牌的配件分组查询
     *
     * @param reqVO
     * @return
     */
    List<OrderImportTempDataGoodsGroupDO> selectPartGoodsGroup(@Param("reqVO") OrderImportTempDataReqVO reqVO);

    /**
     * 基于房间名的分组总数查询
     *
     * @param taskId
     * @return
     */
    int selectCountRoomGroup(@Param("taskId") Long taskId);

    /**
     * 基于房间名的分组查询
     *
     * @param reqVO
     * @return
     */
    List<OrderImportTempDataGoodsGroupDO> selectRoomGroup(@Param("reqVO") OrderImportTempDataReqVO reqVO);

    /**
     * 基于房间名下柜体名的分组总数查询
     *
     * @param reqVO
     * @return
     */
    int selectCountBodyGroup(@Param("reqVO") OrderImportTempDataReqVO reqVO);

    /**
     * 基于房间名下柜体名的分组查询
     *
     * @param reqVO
     * @return
     */
    List<OrderImportTempDataGoodsGroupDO> selectBodyGroup(@Param("reqVO") OrderImportTempDataReqVO reqVO);

    /**
     * 基于房间名、柜体名下的加工组类型名称分组总数查询
     *
     * @param reqVO
     * @return
     */
    int selectCountGroupTypeNameGroup(@Param("reqVO") OrderImportTempDataReqVO reqVO);

    /**
     * 基于房间名、柜体名下的加工组类型名称分组查询
     *
     * @param reqVO
     * @return
     */
    List<OrderImportTempDataGoodsGroupDO> selectGroupTypeNameGroup(@Param("reqVO") OrderImportTempDataReqVO reqVO);

    /**
     * 基于房间名、柜体名、加工组类型名称下的加工组名称分组总数查询
     *
     * @param reqVO
     * @return
     */
    int selectCountGroupNameGroup(@Param("reqVO") OrderImportTempDataReqVO reqVO);

    /**
     * 基于房间名、柜体名、加工组类型名称下的加工组名称分组查询
     *
     * @param reqVO
     * @return
     */
    List<OrderImportTempDataGoodsGroupDO> selectGroupNameGroup(@Param("reqVO") OrderImportTempDataReqVO reqVO);

    /**
     * 查询房间名、柜体名、加工组类型名称、加工组名称下的总数
     *
     * @param reqVO
     * @return
     */
    int selectCountGroupName(@Param("reqVO") OrderImportTempDataReqVO reqVO);

    /**
     * 查询房间名、柜体名、加工组类型名称、加工组名称下的临时数据列表
     *
     * @param reqVO
     * @return
     */
    List<OrderImportTempDataDO> selectGroupNameList(@Param("reqVO") OrderImportTempDataReqVO reqVO);

    /**
     * 查询配件商品id下的临时数据列表
     *
     * @param reqVO
     * @return
     */
    List<OrderImportTempDataDO> selectPartList(@Param("reqVO") OrderImportTempDataReqVO reqVO);

    /**
     * 查询配件itemcode分组
     *
     * @param reqVO
     * @return
     */
    List<OrderImportTempDataPartItemCodeGroupDO> selectPartItemCodeGroup(@Param("reqVO") OrderImportTempDataReqVO reqVO);

    /**
     * 查询配件itemcode下的房间+柜体+加工组分组
     *
     * @param reqVO
     * @return
     */
    List<OrderImportTempDataPartRoomBodyGroupGroupDO> selectPartRoomBodyGroupGroup(@Param("reqVO") OrderImportTempDataReqVO reqVO);
}
