Master.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types = 1);
  12. namespace app\common\service\goods\source;
  13. use app\common\model\Goods as GoodsModel;
  14. use app\common\model\GoodsSku as GoodsSkuModel;
  15. use app\common\enum\goods\DeductStockType as DeductStockTypeEnum;
  16. /**
  17. * 商品来源-普通商品扩展类
  18. * Class Master
  19. * @package app\common\service\stock
  20. */
  21. class Master extends Basics
  22. {
  23. /**
  24. * 更新商品库存 (针对下单减库存的商品)
  25. * @param $goodsList
  26. * @return bool
  27. */
  28. public function updateGoodsStock($goodsList)
  29. {
  30. $goodsData = [];
  31. $goodsSkuData = [];
  32. foreach ($goodsList as $goods) {
  33. // 是否减库存 (下单减库存)
  34. $isUpdateStockNum = $goods['deduct_stock_type'] == 10;
  35. // 商品的数据
  36. $isUpdateStockNum && $goodsData[] = [
  37. 'where' => ['goods_id' => $goods['goods_id']],
  38. 'data' => [
  39. // 递减商品总库存
  40. 'stock_total' => ['dec', $goods['total_num']]
  41. ]
  42. ];
  43. // 商品SKU数据
  44. $isUpdateStockNum && $goodsSkuData[] = [
  45. 'data' => ['stock_num' => ['dec', $goods['total_num']]],
  46. 'where' => [
  47. 'goods_id' => $goods['goods_id'],
  48. 'goods_sku_id' => $goods['goods_sku_id'],
  49. ],
  50. ];
  51. }
  52. // 更新商品信息
  53. !empty($goodsData) && $this->updateGoods($goodsData);
  54. // 更新商品sku信息
  55. !empty($goodsSkuData) && $this->updateGoodsSku($goodsSkuData);
  56. return true;
  57. }
  58. /**
  59. * 更新商品库存销量(订单付款后)
  60. * @param $goodsList
  61. * @return bool
  62. */
  63. public function updateStockSales($goodsList)
  64. {
  65. $goodsData = [];
  66. $goodsSkuData = [];
  67. foreach ($goodsList as $goods) {
  68. // 是否减库存 (付款减库存)
  69. $isUpdateStockNum = $goods['deduct_stock_type'] == 20;
  70. // 商品的数据
  71. $goodsDataItm = [
  72. 'where' => ['goods_id' => $goods['goods_id']],
  73. 'data' => [
  74. // 累计商品实际销量
  75. 'sales_actual' => ['inc', $goods['total_num']]
  76. ]
  77. ];
  78. // 递减商品总库存
  79. $isUpdateStockNum && $goodsDataItm['data']['stock_total'] = ['dec', $goods['total_num']];
  80. $goodsData[] = $goodsDataItm;
  81. // 付款减库存
  82. $isUpdateStockNum && $goodsSkuData[] = [
  83. 'where' => [
  84. 'goods_id' => $goods['goods_id'],
  85. 'goods_sku_id' => $goods['goods_sku_id'],
  86. ],
  87. 'data' => ['stock_num' => ['dec', $goods['total_num']]],
  88. ];
  89. }
  90. // 更新商品信息
  91. !empty($goodsData) && $this->updateGoods($goodsData);
  92. // 更新商品sku信息
  93. !empty($goodsSkuData) && $this->updateGoodsSku($goodsSkuData);
  94. return true;
  95. }
  96. /**
  97. * 回退商品库存
  98. * @param $goodsList
  99. * @param $isPayOrder
  100. * @return array|false
  101. * @throws \Exception
  102. */
  103. public function backGoodsStock($goodsList, $isPayOrder = false)
  104. {
  105. $goodsSkuData = [];
  106. foreach ($goodsList as $goods) {
  107. $item = [
  108. 'where' => [
  109. 'goods_id' => $goods['goods_id'],
  110. 'goods_sku_id' => $goods['goods_sku_id'],
  111. ],
  112. 'data' => ['stock_num' => ['inc', $goods['total_num']]],
  113. ];
  114. if ($isPayOrder == true) {
  115. // 付款订单全部库存
  116. $goodsSkuData[] = $item;
  117. } else {
  118. // 未付款订单,判断必须为下单减库存时才回退
  119. $goods['deduct_stock_type'] == DeductStockTypeEnum::CREATE && $goodsSkuData[] = $item;
  120. }
  121. }
  122. // 更新商品sku库存
  123. return !empty($goodsSkuData) && $this->updateGoodsSku($goodsSkuData);
  124. }
  125. /**
  126. * 更新商品信息
  127. * @param array $data
  128. * @return array|false
  129. */
  130. private function updateGoods(array $data)
  131. {
  132. return (new GoodsModel)->updateAll($data);
  133. }
  134. /**
  135. * 更新商品sku信息
  136. * @param array $data
  137. * @return array|false
  138. */
  139. private function updateGoodsSku(array $data)
  140. {
  141. return (new GoodsSkuModel)->updateAll($data);
  142. }
  143. }