StoreGoodsReserveTime.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <?php
  2. namespace addons\Store\common\models;
  3. use Exception;
  4. use Yii;
  5. use yii\helpers\ArrayHelper;
  6. /**
  7. * This is the model class for table "qimall_addons_store_goods_reserve_time".
  8. *
  9. * @property int $id
  10. * @property int $mall_id 商城id
  11. * @property int $store_id 商家id
  12. * @property float $price 售价
  13. * @property float $original_price 原价(划线价仅展示)
  14. * @property float $cost_price 成本价
  15. * @property int $reserve_max_buy 每天最大预约数量
  16. * @property string|null $reserve_time 预约日期标题
  17. * @property string|null $reserve_range_time 时分秒时间范围
  18. * @property int $reserve_sku_id 预约商品SKU
  19. * @property int $stock 库存
  20. * @property int|null $sales 销量
  21. * @property int|null $time_span 时间间隔
  22. * @property int $created_at 创建时间
  23. * @property int $updated_at 修改时间
  24. */
  25. class StoreGoodsReserveTime extends \common\models\base\BaseActiveRecord
  26. {
  27. /**
  28. * {@inheritdoc}
  29. */
  30. public static function tableName()
  31. {
  32. return 'qimall_addons_store_goods_reserve_time';
  33. }
  34. /**
  35. * {@inheritdoc}
  36. */
  37. public function rules()
  38. {
  39. return [
  40. [['mall_id', 'store_id', 'reserve_max_buy', 'reserve_sku_id', 'stock', 'sales', 'time_span', 'created_at', 'updated_at'], 'integer'],
  41. [['price', 'original_price', 'cost_price'], 'number'],
  42. [['reserve_range_time'], 'string'],
  43. [['reserve_time'], 'string', 'max' => 32],
  44. ];
  45. }
  46. /**
  47. * {@inheritdoc}
  48. */
  49. public function attributeLabels()
  50. {
  51. return [
  52. 'id' => 'ID',
  53. 'mall_id' => 'Mall ID',
  54. 'store_id' => 'Store ID',
  55. 'price' => 'Price',
  56. 'original_price' => 'Original Price',
  57. 'cost_price' => 'Cost Price',
  58. 'reserve_max_buy' => 'Reserve Max Buy',
  59. 'reserve_time' => 'Reserve Time',
  60. 'reserve_range_time' => 'Reserve Range Time',
  61. 'reserve_sku_id' => 'Reserve Sku ID',
  62. 'stock' => 'Stock',
  63. 'sales' => 'Sales',
  64. 'time_span' => 'Time Span',
  65. 'created_at' => 'Created At',
  66. 'updated_at' => 'Updated At',
  67. ];
  68. }
  69. public function getTimeSpec()
  70. {
  71. return $this->hasMany(StoreGoodsReserveTimeSpec::class, ['reserve_time_id' => 'id']);
  72. }
  73. // 设置sku的可预约时间
  74. public static function setSkuTime($reserveGoodsSku)
  75. {
  76. try {
  77. $skuId = $reserveGoodsSku['id'];
  78. if($reserveGoodsSku['reserve_time_slot_price']){
  79. $reserveTimeSlotPrice = json_decode($reserveGoodsSku['reserve_time_slot_price'], true);
  80. }else{
  81. $reserveTimeSlotPrice = [];
  82. }
  83. //$reserveTimeSlotPrice = json_decode($reserveGoodsSku['reserve_time_slot_price'], true);
  84. //$reserveTimeSlotPrice = $reserveGoodsSku['reserve_time_slot_price'] ?? [];
  85. $totalStock = 0;
  86. // dd($reserveTimeSlotPrice);
  87. // 清除规格下的所有时间设置
  88. self::deleteAll(['reserve_sku_id' => $skuId]);
  89. StoreGoodsReserveTimeSpec::deleteAll(['reserve_sku_id'=>$skuId]);
  90. array_map(function ($val) use (&$totalStock, &$reserveGoodsSku) {
  91. $model = new self();
  92. $model->loadDefaultValues();
  93. $attributes = [
  94. 'mall_id' => $reserveGoodsSku['mall_id'] ?? 0,
  95. 'store_id' => $reserveGoodsSku['store_id'] ?? 0,
  96. 'price' => $val['price'] ?? 0,
  97. 'original_price' => $val['original_price'] ?? 0,
  98. 'cost_price' => $val['cost_price'] ?? 0,
  99. 'reserve_max_buy' => $val['reserve_max_buy'] ?? 0,
  100. 'reserve_time' => $val['reserve_time'] ?? 0,
  101. 'reserve_sku_id' => $reserveGoodsSku['id'] ?? 0,
  102. 'stock' => $val['reserve_max_buy'] ?? 0,
  103. 'reserve_range_time' => $val['reserve_range_time'] ?? '',
  104. 'time_span' => $val['time_span'] ?? 0
  105. ];
  106. if (!$model->load($attributes, '') || !$model->save()) {
  107. throw new Exception($model->getErrorMessage());
  108. }
  109. // 有时间段设置
  110. if (!empty($val['time_spec'])) {
  111. $timeMdl = ArrayHelper::toArray($model);
  112. $res = StoreGoodsReserveTimeSpec::setTimeSpec($timeMdl, $val['time_spec'], $totalStock);
  113. if($res === false) throw new Exception('处理预约商品预约时间规格异常,msg:'.StoreGoodsReserveTimeSpec::getStaticError());
  114. } else {
  115. $totalStock += $val['reserve_max_buy'];
  116. }
  117. }, $reserveTimeSlotPrice);
  118. if ($totalStock > 0) {
  119. $goods = StoreGoods::findOne($reserveGoodsSku['goods_id']);
  120. $goods->stock = +$totalStock;
  121. if (!$goods->save()) throw new Exception($goods->getErrorMessage());
  122. }
  123. } catch (Exception $e) {
  124. if (isset($trans)) $trans->rollback();
  125. self::$static_error = $e->getMessage();
  126. return false;
  127. }
  128. }
  129. }