| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- <?php
- namespace addons\WangDianTong\common\service;
- use addons\WangDianTong\common\models\AddonsWangDianTongOrderSyncFail;
- use common\enums\RabbitMqEnum;
- use common\enums\StatusEnum;
- use yii\helpers\Json;
- class OrderSyncFailService
- {
- public function create(array $data)
- {
- if (!empty($data['id'])) {
- $model = AddonsWangDianTongOrderSyncFail::getOne([
- ['id' => $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());
- }
- }
- }
- }
|