order: 计算产品销量的脚本

通过脚本,根据时间取x月之内的订单(也可以是全部订单),将产品的销量个数累加,然后将 最终个数值添加到产品表的score字段,作为产品的销量的功能脚本

脚本介绍

很多时候,我们需要通过销量对产品进行排序,或者通过销量过滤产品,譬如取出来销量最好的10个产品, 因此我们需要通过订单(fecshop计算的默认是已经支付的订单)进行计算产品的销量个数,然后将最终计算值 同步到product的score字段,然后,您就可以通过这个字段对产品进行排序和过滤了

配置

设置订单的范围,也就是计算xx月之内的订单

您可以在 @common/config/fecshop_local_services/Order.php 在order config中添加下面的配置

/**
         * 计算销量的订单时间范围(将最近几个月内的订单中的产品销售个数累加,作为产品的销量值,譬如3代表计算最近3个月的订单产品)
         * 0:代表计算订单表中所有的订单。
         * 这个值用于console入口(脚本端),通过shell脚本执行,计算产品的销量,将订单中产品个数累加作为产品的销量,然后将这个值更新到产品表字段中,用于产品按照销量排序或者过滤
         */
        'orderProductSaleInMonths' => 3,

上面的设置代表取最近3个月的订单,进行计算,将订单的产品销量个数总值作为最终销量,更新到 product表的score字段

执行脚本

cd vendor/fancyecommerce/fecshop/shell/order
sh productSellerCount.sh

获取产品

1.获取销量前十的产品代码

$filter = [
    'orderBy'	=> ['score' => SORT_DESC],
    'numPerPage' 	=> 10,
    'pageNum'		=> 1,
];
$productData = Yii::$service->product->coll($filter);

if (is_array($productData['coll']) && !empty($productData['coll'])) {
    foreach ($productData['coll'] as $product) {
        echo $product->sku;
    }

}