OrderGoods.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?php
  2. /**
  3. *
  4. * @copyright ©2020 点小铺
  5. * @author hanj
  6. * @link: https://dyuit.com
  7. * Created by VSCode
  8. */
  9. namespace app\common\model\sharing;
  10. use app\common\model\BaseModel;
  11. use app\common\model\sharing\GoodsSku as GoodsSkuModel;
  12. use app\common\enum\goods\DeductStockType as DeductStockTypeEnum;
  13. /**
  14. * 拼团订单商品模型
  15. * Class OrderGoods
  16. * @package app\common\model\sharing
  17. */
  18. class OrderGoods extends BaseModel
  19. {
  20. protected $name = 'sharing_order_goods';
  21. protected $updateTime = false;
  22. /**
  23. * 关联拼团商品表
  24. * @return \think\model\relation\BelongsTo
  25. */
  26. public function goods()
  27. {
  28. return $this->belongsTo('Goods');
  29. }
  30. /**
  31. * 订单拼团商品图
  32. * @return \think\model\relation\BelongsTo
  33. */
  34. public function image()
  35. {
  36. $module = self::getCalledModule() ?: 'common';
  37. return $this->belongsTo("app\\{$module}\\model\\UploadFile", 'image_id', 'file_id');
  38. }
  39. /**
  40. * 关联拼团商品sku表
  41. * @return \think\model\relation\BelongsTo
  42. */
  43. public function sku()
  44. {
  45. return $this->belongsTo('GoodsSku', 'spec_sku_id', 'spec_sku_id');
  46. }
  47. /**
  48. * 关联拼团订单主表
  49. * @return \think\model\relation\BelongsTo
  50. */
  51. public function orderM()
  52. {
  53. return $this->belongsTo('Order');
  54. }
  55. /**
  56. * 关联拼团售后单记录表
  57. * @return \think\model\relation\HasOne
  58. */
  59. public function refund()
  60. {
  61. return $this->hasOne('OrderRefund', 'order_goods_id');
  62. }
  63. /**
  64. * 拼团订单商品详情
  65. * @param $where
  66. * @return OrderGoods|null
  67. * @throws \think\exception\DbException
  68. */
  69. public static function detail($where)
  70. {
  71. return static::get($where, ['image', 'refund']);
  72. }
  73. /**
  74. * 回退商品库存
  75. * @param $goodsList
  76. * @param $isPayOrder
  77. * @return array|false
  78. * @throws \Exception
  79. */
  80. public function backGoodsStock($goodsList, $isPayOrder = false)
  81. {
  82. $goodsSkuData = [];
  83. foreach ($goodsList as $goods) {
  84. $item = [
  85. 'where' => [
  86. 'goods_id' => $goods['goods_id'],
  87. 'spec_sku_id' => $goods['spec_sku_id'],
  88. ],
  89. 'data' => ['stock_num' => ['inc', $goods['total_num']]],
  90. ];
  91. if ($isPayOrder == true) {
  92. // 付款订单全部库存
  93. $goodsSkuData[] = $item;
  94. } else {
  95. // 未付款订单,判断必须为下单减库存时才回退
  96. $goods['deduct_stock_type'] == DeductStockTypeEnum::CREATE && $goodsSkuData[] = $item;
  97. }
  98. }
  99. // 更新商品sku库存
  100. return !empty($goodsSkuData) && (new GoodsSkuModel)->updateAll($goodsSkuData);
  101. }
  102. }