$data['id']] ]); } else { $data['data_hash'] = md5("{$data['mall_id']}:{$data['data']}:{$data['consumer_class']}:{$data['consumer_method']}"); $model = AddonsWangDianTongOrderSyncFail::getOne([ ['data_hash' => $data['data_hash']] ]); } if (!empty($model)) { $model->consumer_num += 1; $model->last_consumer_at = time(); $model->error_message = $data['error_message']; $model->save(); } else { $model = new AddonsWangDianTongOrderSyncFail(); if ($model->load($data, '')) { $model->save(); } } } /** * 补偿成功 * @param int $id * @return void */ public function finish(int $id) { if ($id > 0) { $model = AddonsWangDianTongOrderSyncFail::getOne([ ['id' => $id] ]); if (!empty($model)) { $model->status = StatusEnum::DELETE; $model->consumer_num += 1; $model->last_consumer_at = time(); $model->save(); } } } /** * 失败补偿 * @return void * @throws \Exception */ public function compensate() { foreach (AddonsWangDianTongOrderSyncFail::find()->where(['status' => StatusEnum::ENABLED])->andWhere(['<', 'consumer_num', 11])->each() as $each) { $data = Json::decode($each->data); $data['compensate_id'] = $each->id; try { \Yii::$app->services->rabbitMq->push(RabbitMqEnum::EXCHANGE_TASK, RabbitMqEnum::TASK_QUEUE, $data, $each->consumer_class, $each->consumer_method); } catch (\Exception $e) { var_dump($e->getMessage(), $e->getFile(), $e->getLine()); } } } }