TimestampBehavior::class, 'attributes' => [ ActiveRecord::EVENT_BEFORE_INSERT => ['created_at'], ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'] ] ] ]; } /** * @inheritdoc */ public function rules() { return [ [['id', 'goods_id', 'virtual_sales', 'store_id', 'is_delete', 'activity_id', 'use_attr', 'sale_num'], 'integer'], [['attr'], 'string'], [['price'], 'number'], [['created_at', 'updated_at'], 'safe'] ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'id' => 'ID', 'activity_id' => '活动ID', 'goods_id' => '商品ID', 'attr' => '商品规格', 'virtual_sales' => '虚拟销量', 'price' => '活动价格', 'store_id' => 'Store Id', 'is_delete' => 'Is Delete', 'created_at' => '创建时间', 'updated_at' => '修改时间', 'use_attr' => '是否使用规格', ]; } public static function saveList($list = [], $activity_id = 0, &$is_platform_audit = false) { $new_goods_id = array_column($list, 'goods_id'); //如果相同时间段存在相同产品,则禁止 try { foreach ($new_goods_id as $goods_item) { $activity = ActivityNewUser::findOne($activity_id); $is_exist_goods = self::find()->alias('sag')->where(['sag.goods_id' => $goods_item]) ->leftJoin(['sg' => ActivityNewUser::tableName()], 'sag.activity_id = sg.id') ->andWhere(['<>', 'sg.id', $activity_id]) ->andWhere(['OR', ['AND', ['<=' , 'sg.start_time', strtotime($activity->start_time)], ['>=' , 'sg.end_time',strtotime($activity->end_time)] ], ['AND', ['<=' , 'sg.start_time', strtotime($activity->start_time)], ['<=' , 'sg.end_time',strtotime($activity->end_time)], ['>=' , 'sg.end_time',strtotime($activity->start_time)] ], ['AND', ['>=' , 'sg.start_time', strtotime($activity->start_time)], ['<=' , 'sg.end_time',strtotime($activity->end_time)] ], ['AND', ['>=' , 'sg.start_time', strtotime($activity->start_time)], ['>=' , 'sg.end_time',strtotime($activity->end_time)], ['<=' , 'sg.start_time',strtotime($activity->end_time)] ], ])->andWhere(['sg.is_delete' => 0, 'sag.is_delete' => 0])->select('sag.id, sag.activity_id')->one(); if ($is_exist_goods) { throw new \Exception("部分商品已经在其他未开始/进行中的活动中"); } } } catch (\Exception $e) { return [ 'code' => 1, 'msg' => $e->getMessage() ]; } $old_goods_id = []; if($activity_id){ //删除 $oldList = self::find()->where(['activity_id' => $activity_id, 'is_delete' => 0])->all(); foreach($oldList as $item){ array_push($old_goods_id, $item->goods_id); $continue = 0; foreach($list as $i){ if($item->id == $i['id']){ $continue = 1; break; } } if($continue){ continue; } $item->is_delete = 1; $item->save(); } } sort($new_goods_id); sort($old_goods_id); if (array_diff($new_goods_id, $old_goods_id)) { $is_platform_audit = true; } //修改、新增 foreach($list as $item){ $id = $item['id']; if ($id) { $model = self::findOne($id); $old_item = $model->attributes; unset( $old_item['created_at'], $old_item['is_delete'], $old_item['updated_at'], $old_item['sale_num'], $old_item['virtual_sales'], $item['cover_pic'], $item['name'], $item['oldPrice'], $item['goods_num'], ); $item['price'] = sprintf("%.2f", $item['price']); ksort($old_item); ksort($item); if (array_diff($old_item, $item)) { $is_platform_audit = true; } } else { $model = new self(); } $model->attributes = $item; $save = $model->save(); if(!$save){ return [ 'code' => 1, 'msg' => '商品信息保存失败:' . json_encode($model->getFirstErrors()), ]; } } return [ 'code' => 0, 'msg' => 'ok', ]; } }