| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- <?php
- namespace addons\Store\common\models;
- use Exception;
- use Yii;
- use yii\helpers\ArrayHelper;
- /**
- * This is the model class for table "qimall_addons_store_goods_reserve_time".
- *
- * @property int $id
- * @property int $mall_id 商城id
- * @property int $store_id 商家id
- * @property float $price 售价
- * @property float $original_price 原价(划线价仅展示)
- * @property float $cost_price 成本价
- * @property int $reserve_max_buy 每天最大预约数量
- * @property string|null $reserve_time 预约日期标题
- * @property string|null $reserve_range_time 时分秒时间范围
- * @property int $reserve_sku_id 预约商品SKU
- * @property int $stock 库存
- * @property int|null $sales 销量
- * @property int|null $time_span 时间间隔
- * @property int $created_at 创建时间
- * @property int $updated_at 修改时间
- */
- class StoreGoodsReserveTime extends \common\models\base\BaseActiveRecord
- {
- /**
- * {@inheritdoc}
- */
- public static function tableName()
- {
- return 'qimall_addons_store_goods_reserve_time';
- }
- /**
- * {@inheritdoc}
- */
- public function rules()
- {
- return [
- [['mall_id', 'store_id', 'reserve_max_buy', 'reserve_sku_id', 'stock', 'sales', 'time_span', 'created_at', 'updated_at'], 'integer'],
- [['price', 'original_price', 'cost_price'], 'number'],
- [['reserve_range_time'], 'string'],
- [['reserve_time'], 'string', 'max' => 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;
- }
- }
- }
|