| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- <?php
- // +----------------------------------------------------------------------
- // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
- // +----------------------------------------------------------------------
- // | Author: 萤火科技 <admin@yiovo.com>
- // +----------------------------------------------------------------------
- declare (strict_types = 1);
- namespace app\common\service\goods\source;
- use app\common\model\Goods as GoodsModel;
- use app\common\model\GoodsSku as GoodsSkuModel;
- use app\common\enum\goods\DeductStockType as DeductStockTypeEnum;
- /**
- * 商品来源-普通商品扩展类
- * Class Master
- * @package app\common\service\stock
- */
- class Master extends Basics
- {
- /**
- * 更新商品库存 (针对下单减库存的商品)
- * @param $goodsList
- * @return bool
- */
- public function updateGoodsStock($goodsList)
- {
- $goodsData = [];
- $goodsSkuData = [];
- foreach ($goodsList as $goods) {
- // 是否减库存 (下单减库存)
- $isUpdateStockNum = $goods['deduct_stock_type'] == 10;
- // 商品的数据
- $isUpdateStockNum && $goodsData[] = [
- 'where' => ['goods_id' => $goods['goods_id']],
- 'data' => [
- // 递减商品总库存
- 'stock_total' => ['dec', $goods['total_num']]
- ]
- ];
- // 商品SKU数据
- $isUpdateStockNum && $goodsSkuData[] = [
- 'data' => ['stock_num' => ['dec', $goods['total_num']]],
- 'where' => [
- 'goods_id' => $goods['goods_id'],
- 'goods_sku_id' => $goods['goods_sku_id'],
- ],
- ];
- }
- // 更新商品信息
- !empty($goodsData) && $this->updateGoods($goodsData);
- // 更新商品sku信息
- !empty($goodsSkuData) && $this->updateGoodsSku($goodsSkuData);
- return true;
- }
- /**
- * 更新商品库存销量(订单付款后)
- * @param $goodsList
- * @return bool
- */
- public function updateStockSales($goodsList)
- {
- $goodsData = [];
- $goodsSkuData = [];
- foreach ($goodsList as $goods) {
- // 是否减库存 (付款减库存)
- $isUpdateStockNum = $goods['deduct_stock_type'] == 20;
- // 商品的数据
- $goodsDataItm = [
- 'where' => ['goods_id' => $goods['goods_id']],
- 'data' => [
- // 累计商品实际销量
- 'sales_actual' => ['inc', $goods['total_num']]
- ]
- ];
- // 递减商品总库存
- $isUpdateStockNum && $goodsDataItm['data']['stock_total'] = ['dec', $goods['total_num']];
- $goodsData[] = $goodsDataItm;
- // 付款减库存
- $isUpdateStockNum && $goodsSkuData[] = [
- 'where' => [
- 'goods_id' => $goods['goods_id'],
- 'goods_sku_id' => $goods['goods_sku_id'],
- ],
- 'data' => ['stock_num' => ['dec', $goods['total_num']]],
- ];
- }
- // 更新商品信息
- !empty($goodsData) && $this->updateGoods($goodsData);
- // 更新商品sku信息
- !empty($goodsSkuData) && $this->updateGoodsSku($goodsSkuData);
- return true;
- }
- /**
- * 回退商品库存
- * @param $goodsList
- * @param $isPayOrder
- * @return array|false
- * @throws \Exception
- */
- public function backGoodsStock($goodsList, $isPayOrder = false)
- {
- $goodsSkuData = [];
- foreach ($goodsList as $goods) {
- $item = [
- 'where' => [
- 'goods_id' => $goods['goods_id'],
- 'goods_sku_id' => $goods['goods_sku_id'],
- ],
- 'data' => ['stock_num' => ['inc', $goods['total_num']]],
- ];
- if ($isPayOrder == true) {
- // 付款订单全部库存
- $goodsSkuData[] = $item;
- } else {
- // 未付款订单,判断必须为下单减库存时才回退
- $goods['deduct_stock_type'] == DeductStockTypeEnum::CREATE && $goodsSkuData[] = $item;
- }
- }
- // 更新商品sku库存
- return !empty($goodsSkuData) && $this->updateGoodsSku($goodsSkuData);
- }
- /**
- * 更新商品信息
- * @param array $data
- * @return array|false
- */
- private function updateGoods(array $data)
- {
- return (new GoodsModel)->updateAll($data);
- }
- /**
- * 更新商品sku信息
- * @param array $data
- * @return array|false
- */
- private function updateGoodsSku(array $data)
- {
- return (new GoodsSkuModel)->updateAll($data);
- }
- }
|