package cn.cslg.pas.mapper;

import cn.cslg.pas.common.model.dto.GetAreaListDTO;
import cn.cslg.pas.common.model.dto.ProductCategoryQueryPageDTO;
import cn.cslg.pas.common.model.vo.ProductCategoryVO;
import cn.cslg.pas.common.model.vo.ProductIdAndNameVO;
import cn.cslg.pas.common.model.vo.ProductMarketDataTrendVO;
import cn.cslg.pas.domain.ProductCategory;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 产品表的Mapper层接口
 *
 * @Author chenyu
 * @Date 2023/3/7
 */
@Repository
public interface ProductCategoryMapper {
    /**
     * 插入数据
     *
     * @param productCategory 产品类别数据对象
     * @return 返回受影响的行数
     */
    int insert(ProductCategory productCategory);

    /**
     * 根据id删除数据
     *
     * @param id 产品类别id
     * @return 返回受影响的行数
     */
    int deleteById(Integer id);

    /**
     * 根据id修改数据
     *
     * @param productCategory 产品类别数据对象
     * @return 返回受影响的行数
     */
    int updateById(ProductCategory productCategory);

    /**
     * 根据产品类别名称统计数量
     *
     * @param productCategoryName 产品类别名称
     * @return 返回受影响的行数
     */
    int countByProductCategoryName(String productCategoryName, Integer tenantId);

    /**
     * 根据id和名称统计数量
     *
     * @param id                  id
     * @param productCategoryName 名称
     * @param tenantId            租户id
     * @return 返回统计到的数量
     */
    int countByIdAndName(Integer id, String productCategoryName, Integer tenantId);

    /**
     * 根据id统计数量
     *
     * @param id 产品类别id
     * @return 返回受影响的行数
     */
    int countById(Integer id);

    /**
     * 分页查询产品类别和图片
     *
     * @param productCategoryQueryPageDTO 分页信息
     * @return 返回查询到的数据
     */
    List<ProductCategoryVO> query(ProductCategoryQueryPageDTO productCategoryQueryPageDTO);

    /**
     * 根据架构id、营销地区、时间单位和公司名称查询营销数据
     *
     * @param categoryId   架构id(必需)
     * @param categoryArea 营销地区
     * @param companyName  公司名称
     * @return 返回查询到的营销数据
     */
    List<ProductMarketDataTrendVO> categoryQueryByYear(Integer categoryId, String categoryArea, String companyName);

    List<ProductMarketDataTrendVO> categoryQueryBySeason(Integer categoryId, String categoryArea, String companyName);

    List<ProductMarketDataTrendVO> categoryQueryByMonth(Integer categoryId, String categoryArea, String companyName);

    /**
     * 根据产品id查询营销数据
     *
     * @param productId    产品id
     * @param categoryArea 营销地区
     * @return 返回查询到的营销数据
     */
    List<ProductMarketDataTrendVO> queryByYear(Integer productId, String categoryArea);

    List<ProductMarketDataTrendVO> queryBySeason(Integer productId, String categoryArea);

    List<ProductMarketDataTrendVO> queryByMonth(Integer productId, String categoryArea);


    /**
     * 根据架构id查询产品id和名称
     *
     * @param categoryId  架构id（必需）
     * @param companyName 公司名
     * @return productId 产品id
     * @return productName 产品名称
     */
    List<ProductIdAndNameVO> queryProductIdAndNameByCategoryId(Integer categoryId, String companyName);

    /**
     * 查询地区列表
     *
     * @return 返回查询到的地区集合
     */
    List<String> getAreaList(GetAreaListDTO dto);

}
