32], ]; } /** * {@inheritdoc} */ public function attributeLabels() { return [ 'id' => 'ID', 'mall_id' => 'Mall ID', 'store_id' => 'Store ID', 'price' => 'Price', 'original_price' => 'Original Price', 'cost_price' => 'Cost Price', 'reserve_max_buy' => 'Reserve Max Buy', 'reserve_time' => 'Reserve Time', 'reserve_range_time' => 'Reserve Range Time', 'reserve_sku_id' => 'Reserve Sku ID', 'stock' => 'Stock', 'sales' => 'Sales', 'time_span' => 'Time Span', 'created_at' => 'Created At', 'updated_at' => 'Updated At', ]; } public function getTimeSpec() { return $this->hasMany(StoreGoodsReserveTimeSpec::class, ['reserve_time_id' => 'id']); } // 设置sku的可预约时间 public static function setSkuTime($reserveGoodsSku) { try { $skuId = $reserveGoodsSku['id']; if($reserveGoodsSku['reserve_time_slot_price']){ $reserveTimeSlotPrice = json_decode($reserveGoodsSku['reserve_time_slot_price'], true); }else{ $reserveTimeSlotPrice = []; } //$reserveTimeSlotPrice = json_decode($reserveGoodsSku['reserve_time_slot_price'], true); //$reserveTimeSlotPrice = $reserveGoodsSku['reserve_time_slot_price'] ?? []; $totalStock = 0; // dd($reserveTimeSlotPrice); // 清除规格下的所有时间设置 self::deleteAll(['reserve_sku_id' => $skuId]); StoreGoodsReserveTimeSpec::deleteAll(['reserve_sku_id'=>$skuId]); array_map(function ($val) use (&$totalStock, &$reserveGoodsSku) { $model = new self(); $model->loadDefaultValues(); $attributes = [ 'mall_id' => $reserveGoodsSku['mall_id'] ?? 0, 'store_id' => $reserveGoodsSku['store_id'] ?? 0, 'price' => $val['price'] ?? 0, 'original_price' => $val['original_price'] ?? 0, 'cost_price' => $val['cost_price'] ?? 0, 'reserve_max_buy' => $val['reserve_max_buy'] ?? 0, 'reserve_time' => $val['reserve_time'] ?? 0, 'reserve_sku_id' => $reserveGoodsSku['id'] ?? 0, 'stock' => $val['reserve_max_buy'] ?? 0, 'reserve_range_time' => $val['reserve_range_time'] ?? '', 'time_span' => $val['time_span'] ?? 0 ]; if (!$model->load($attributes, '') || !$model->save()) { throw new Exception($model->getErrorMessage()); } // 有时间段设置 if (!empty($val['time_spec'])) { $timeMdl = ArrayHelper::toArray($model); $res = StoreGoodsReserveTimeSpec::setTimeSpec($timeMdl, $val['time_spec'], $totalStock); if($res === false) throw new Exception('处理预约商品预约时间规格异常,msg:'.StoreGoodsReserveTimeSpec::getStaticError()); } else { $totalStock += $val['reserve_max_buy']; } }, $reserveTimeSlotPrice); if ($totalStock > 0) { $goods = StoreGoods::findOne($reserveGoodsSku['goods_id']); $goods->stock = +$totalStock; if (!$goods->save()) throw new Exception($goods->getErrorMessage()); } } catch (Exception $e) { if (isset($trans)) $trans->rollback(); self::$static_error = $e->getMessage(); return false; } } }