package com.gxwebsoft.shop.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.shop.entity.ShopGoods;
import com.gxwebsoft.shop.param.ShopGoodsParam;

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

/**
 * 商品Service
 *
 * @author 科技小王子
 * @since 2025-04-24 20:52:13
 */
public interface ShopGoodsService extends IService<ShopGoods> {

    /**
     * 分页关联查询
     *
     * @param param 查询参数
     * @return PageResult<ShopGoods>
     */
    PageResult<ShopGoods> pageRel(ShopGoodsParam param);

    /**
     * 关联查询全部
     *
     * @param param 查询参数
     * @return List<ShopGoods>
     */
    List<ShopGoods> listRel(ShopGoodsParam param);

    /**
     * 根据id查询
     *
     * @param goodsId 自增ID
     * @return ShopGoods
     */
    ShopGoods getByIdRel(Integer goodsId);

    /**
     * 累加商品销售数量
     * 忽略租户隔离，确保能更新成功
     *
     * @param goodsId 商品ID
     * @param saleCount 累加的销售数量
     * @return 是否更新成功
     */
    boolean addSaleCount(Integer goodsId, Integer saleCount);

    /**
     * 商品数量统计（出售中/待上架/已售罄），一条 SQL 聚合替代 3 次 count
     *
     * @param param 查询参数
     * @return 包含 totalNum/totalNum2/totalNum3 的统计 Map
     */
    Map<String, Integer> getCountSummary(ShopGoodsParam param);

    /**
     * 下架已售罄（库存为0）的商品，供定时任务调用
     *
     * @return 影响的行数
     */
    int downSoldOutGoods();

}
