Sharp.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <?php
  2. /**
  3. *
  4. * @copyright ©2020 点小铺
  5. * @author hanj
  6. * @link: https://dyuit.com
  7. * Created by VSCode
  8. */
  9. namespace app\common\service\goods\source;
  10. use app\api\model\sharp\Goods as SharpGoodsModel;
  11. use app\api\model\sharp\GoodsSku as GoodsSkuModel;
  12. use app\common\enum\goods\DeductStockType as DeductStockTypeEnum;
  13. /**
  14. * 商品来源-秒杀商品扩展类
  15. * Class Sharp
  16. * @package app\common\service\stock
  17. */
  18. class Sharp extends Basics
  19. {
  20. /**
  21. * 更新商品库存 (针对下单减库存的商品)
  22. * @param $goodsList
  23. * @return bool|mixed
  24. * @throws \Exception
  25. */
  26. public function updateGoodsStock($goodsList)
  27. {
  28. $goodsData = [];
  29. $goodsSkuData = [];
  30. foreach ($goodsList as $goods) {
  31. // 下单减库存
  32. if ($goods['deduct_stock_type'] == 10) {
  33. // 记录商品总库存
  34. $goodsData[] = [
  35. 'sharp_goods_id' => $goods['sharp_goods_id'],
  36. 'seckill_stock' => ['dec', $goods['total_num']]
  37. ];
  38. // 记录商品sku库存
  39. $goodsSkuData[] = [
  40. 'data' => ['seckill_stock' => ['dec', $goods['total_num']]],
  41. 'where' => [
  42. 'sharp_goods_id' => $goods['sharp_goods_id'],
  43. 'spec_sku_id' => $goods['spec_sku_id'],
  44. ],
  45. ];
  46. }
  47. }
  48. // 更新商品总销量
  49. !empty($goodsData) && $this->updateGoods($goodsData);
  50. return !empty($goodsSkuData) && $this->updateGoodsSku($goodsSkuData);
  51. }
  52. /**
  53. * 更新商品库存销量(订单付款后)
  54. * @param $goodsList
  55. * @return bool
  56. * @throws \Exception
  57. */
  58. public function updateStockSales($goodsList)
  59. {
  60. $goodsData = [];
  61. $goodsSkuData = [];
  62. foreach ($goodsList as $goods) {
  63. // 商品id
  64. $sharpGoodsId = $goods['goods_source_id'];
  65. // 记录商品总销量
  66. $goodsItem = [
  67. 'sharp_goods_id' => $sharpGoodsId,
  68. 'total_sales' => ['inc', $goods['total_num']]
  69. ];
  70. // 付款减库存
  71. if ($goods['deduct_stock_type'] == 20) {
  72. // 记录商品总库存
  73. $goodsItem['seckill_stock'] = ['dec', $goods['total_num']];
  74. // 记录商品sku库存
  75. $goodsSkuData[] = [
  76. 'data' => ['seckill_stock' => ['dec', $goods['total_num']]],
  77. 'where' => [
  78. 'sharp_goods_id' => $sharpGoodsId,
  79. 'spec_sku_id' => $goods['spec_sku_id'],
  80. ],
  81. ];
  82. }
  83. $goodsData[] = $goodsItem;
  84. }
  85. // 更新商品库存销量
  86. !empty($goodsData) && $this->updateGoods(array_values($goodsData));
  87. return !empty($goodsSkuData) && $this->updateGoodsSku($goodsSkuData);
  88. }
  89. /**
  90. * 回退商品库存
  91. * @param $goodsList
  92. * @param $isPayOrder
  93. * @return array|false
  94. * @throws \Exception
  95. */
  96. public function backGoodsStock($goodsList, $isPayOrder = false)
  97. {
  98. $goodsData = [];
  99. $goodsSkuData = [];
  100. foreach ($goodsList as $goods) {
  101. // 商品id
  102. $sharpGoodsId = $goods['goods_source_id'];
  103. $goodsItem = [
  104. 'sharp_goods_id' => $sharpGoodsId,
  105. 'seckill_stock' => ['inc', $goods['total_num']]
  106. ];
  107. $goodsSkuItem = [
  108. 'where' => [
  109. 'sharp_goods_id' => $sharpGoodsId,
  110. 'spec_sku_id' => $goods['spec_sku_id'],
  111. ],
  112. 'data' => ['seckill_stock' => ['inc', $goods['total_num']]],
  113. ];
  114. // 付款订单全部库存
  115. if ($isPayOrder == true) {
  116. $goodsData[] = $goodsItem;
  117. $goodsSkuData[] = $goodsSkuItem;
  118. }
  119. // 未付款订单,判断必须为下单减库存时才回退
  120. if ($isPayOrder == false
  121. && $goods['deduct_stock_type'] == DeductStockTypeEnum::CREATE) {
  122. $goodsData[] = $goodsItem;
  123. $goodsSkuData[] = $goodsSkuItem;
  124. }
  125. }
  126. // 更新商品总库存
  127. !empty($goodsData) && $this->updateGoods($goodsData);
  128. // 更新商品sku库存
  129. return !empty($goodsSkuData) && $this->updateGoodsSku($goodsSkuData);
  130. }
  131. /**
  132. * 更新商品信息
  133. * @param $data
  134. * @return array|false
  135. * @throws \Exception
  136. */
  137. private function updateGoods($data)
  138. {
  139. return (new SharpGoodsModel)->allowField(true)->isUpdate()->saveAll($data);
  140. }
  141. /**
  142. * 更新商品sku信息
  143. * @param $data
  144. * @return \think\Collection
  145. */
  146. private function updateGoodsSku($data)
  147. {
  148. return (new GoodsSkuModel)->updateAll($data);
  149. }
  150. }