package cn.cslg.pas.mapper;

import cn.cslg.pas.common.model.dto.ProductMarketDataQueryPageDTO;
import cn.cslg.pas.common.model.vo.ProductMarketDataTrendVO;
import cn.cslg.pas.common.model.vo.ProductMarketDataVO;
import cn.cslg.pas.domain.ProductMarketData;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

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

/**
 * 产品营销数据表的Mapper层接口
 *
 * @Author chenyu
 * @Date 2023/3/9
 */
@Repository
public interface ProductMarketDataMapper extends BaseMapper<ProductMarketData> {
    /**
     * 插入数据
     *
     * @param productMarketData 产品营销数据数据对象
     * @return 返回受影响的行数
     */
    int insert(ProductMarketData productMarketData);

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

    /**
     * 根据id修改数据
     *
     * @param productMarketData 产品营销数据数据对象
     * @return 返回受影响的行数
     */
    int update(ProductMarketData productMarketData);

    /**
     * 根据所属产品id、营销地区、营销时间统计数量
     *
     * @param productId 所属产品id
     * @param saleArea  营销地区
     * @param saleTime  营销时间
     * @return 返回统计到的数量
     */
    int countByProductIdSaleAreaSaleTime(Integer productId, String saleArea, String saleTime);

    /**
     * 根据id统计数量
     *
     * @param id 产品营销数据id
     * @return 返回统计到的数量
     */
    int countById(Integer id);

    /**
     * 分页查询数据
     *
     * @param productMarketDataQueryPageDTO 分页信息
     * @return 返回查询到的数据
     */
    List<ProductMarketDataVO> query(ProductMarketDataQueryPageDTO productMarketDataQueryPageDTO);

    /**
     * 传入的营销地区saleArea不为空（按地区划分），且timeUnit为2，按照年份返回数据
     *
     * @param saleArea 营销地区
     * @param productId 产品id（必需）
     * @return 返回查询到的数据
     */
    List<ProductMarketDataTrendVO> queryByYear(Integer productId, String saleArea);

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

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


}
