Master.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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\common\model\Goods as GoodsModel;
  11. use app\common\model\GoodsSku as GoodsSkuModel;
  12. use app\common\enum\goods\DeductStockType as DeductStockTypeEnum;
  13. /**
  14. * 商品来源-普通商品扩展类
  15. * Class Master
  16. * @package app\common\service\stock
  17. */
  18. class Master extends Basics
  19. {
  20. /**
  21. * 更新商品库存 (针对下单减库存的商品)
  22. * @param $goodsList
  23. * @return bool
  24. */
  25. public function updateGoodsStock($goodsList)
  26. {
  27. $data = [];
  28. foreach ($goodsList as $goods) {
  29. // 下单减库存
  30. if ($goods['deduct_stock_type'] == 10) {
  31. $data[] = [
  32. 'data' => ['stock_num' => ['dec', $goods['total_num']]],
  33. 'where' => [
  34. 'goods_id' => $goods['goods_id'],
  35. 'spec_sku_id' => $goods['spec_sku_id'],
  36. ],
  37. ];
  38. }
  39. }
  40. return !empty($data) && $this->updateGoodsSku($data);
  41. }
  42. /**
  43. * 更新商品库存销量(订单付款后)
  44. * @param $goodsList
  45. * @return bool
  46. * @throws \Exception
  47. */
  48. public function updateStockSales($goodsList)
  49. {
  50. $goodsData = [];
  51. $goodsSkuData = [];
  52. foreach ($goodsList as $goods) {
  53. // 记录商品的销量
  54. $goodsData[] = [
  55. 'goods_id' => $goods['goods_id'],
  56. 'sales_actual' => ['inc', $goods['total_num']]
  57. ];
  58. // 付款减库存
  59. if ($goods['deduct_stock_type'] == 20) {
  60. $goodsSkuData[] = [
  61. 'data' => ['stock_num' => ['dec', $goods['total_num']]],
  62. 'where' => [
  63. 'goods_id' => $goods['goods_id'],
  64. 'spec_sku_id' => $goods['spec_sku_id'],
  65. ],
  66. ];
  67. }
  68. }
  69. // 更新商品销量
  70. !empty($goodsData) && $this->updateGoods($goodsData);
  71. // 更新商品sku库存
  72. !empty($goodsSkuData) && $this->updateGoodsSku($goodsSkuData);
  73. return true;
  74. }
  75. /**
  76. * 回退商品库存
  77. * @param $goodsList
  78. * @param $isPayOrder
  79. * @return array|false
  80. * @throws \Exception
  81. */
  82. public function backGoodsStock($goodsList, $isPayOrder = false)
  83. {
  84. $goodsSkuData = [];
  85. foreach ($goodsList as $goods) {
  86. $item = [
  87. 'where' => [
  88. 'goods_id' => $goods['goods_id'],
  89. 'spec_sku_id' => $goods['spec_sku_id'],
  90. ],
  91. 'data' => ['stock_num' => ['inc', $goods['total_num']]],
  92. ];
  93. if ($isPayOrder == true) {
  94. // 付款订单全部库存
  95. $goodsSkuData[] = $item;
  96. } else {
  97. // 未付款订单,判断必须为下单减库存时才回退
  98. $goods['deduct_stock_type'] == DeductStockTypeEnum::CREATE && $goodsSkuData[] = $item;
  99. }
  100. }
  101. // 更新商品sku库存
  102. return !empty($goodsSkuData) && $this->updateGoodsSku($goodsSkuData);
  103. }
  104. /**
  105. * 更新商品信息
  106. * @param $data
  107. * @return array|false
  108. * @throws \Exception
  109. */
  110. private function updateGoods($data)
  111. {
  112. return (new GoodsModel)->allowField(true)->isUpdate()->saveAll($data);
  113. }
  114. /**
  115. * 更新商品sku信息
  116. * @param $data
  117. * @return \think\Collection
  118. */
  119. private function updateGoodsSku($data)
  120. {
  121. return (new GoodsSkuModel)->updateAll($data);
  122. }
  123. }