/** * @param int $seed_id * @param int $upcoe * @param int $downcoe * @param int $duration 该系数的持续时间,后面会转换成到期时间,0表示永久 * @param string $reason * @return array * @throws \Exception */ public function actionSetCoef($seed_id, $upcoe, $downcoe, $duration, $reason, $replace) { $ret = []; $ret['result'] = 'failed'; if (!is_numeric($upcoe) || !is_numeric($downcoe) || !is_numeric($duration) || !is_numeric($seed_id)) { $ret['extra'] = 'permission denied'; return $ret; } /** @var User $user */ $user = User::findOne(Yii::$app->user->identity->getId()); if ($user->priv != 'Admin') { $ret['extra'] = 'permission denied'; return $ret; } /** @var Seed $seed */ $seed = Seed::findOne($seed_id); if (empty($seed) || !$seed->is_valid) { $ret['extra'] = 'not exists'; return $ret; } $ret['result'] = 'success'; $publisher = $seed->publisher; $record = new SeedOperationRecord(); $record->admin_id = $user->user_id; $record->publisher_id = $publisher->user_id; $record->seed_id = $seed->seed_id; $record->operation_type = "SETCOEF"; $record->detail_info = json_encode(['reason' => $reason, 'up_coe' => $upcoe, 'down_coe' => $downcoe, 'expire_time' => $duration]); $record->insert(); $coef = $seed->getCoefArray(); $coef_item = $coef[0]; //复制栈顶 $old_duration = $coef[0][2] - time(); if ($duration == 0) { $replace = true; } else { if ($old_duration < $duration) { $replace = true; } } if ($upcoe >= 0) { $coef_item[0] = $upcoe; } if ($downcoe >= 0) { $coef_item[1] = $downcoe; } $coef_item[2] = $duration + time(); //如果是永久有效,就直接替换栈顶的条目 if ($replace) { $coef[0] = $coef_item; } else { array_unshift($coef, $coef_item); } $seed->setCoefArray($coef); $seed->save(); $tmp = $seed->attributes; $tmp['discuz_pub_uid'] = $publisher->discuz_user_id; $ret['extra'] = $tmp; Yii::info($ret); return $ret; }
public function actionOperation() { SeedOperationRecord::deleteAll(); $offset = 0; $limit = 1000; QUERY: $sql = <<<SQL SELECT * FROM `ngpt_ngpt_seed_op_records` LIMIT {$limit} OFFSET {$offset}; SQL; $res = $this->fdb->createCommand($sql)->queryAll(); foreach ($res as $oop) { var_dump($oop); $op = new SeedOperationRecord(); /** @var User $admin */ $admin = User::findOne(['discuz_user_id' => $oop['uid']]); /** @var Seed $seed */ $seed = Seed::findOne(['info_hash' => strtoupper($oop['infohash'])]); if (empty($seed)) { continue; } $op->admin_id = $admin->user_id; $op->seed_id = $seed->seed_id; $op->operation_type = $oop['reason']; $op->detail_info = json_encode(['reason' => $oop['info']]); $op->publisher_id = $seed->publisher_user_id; $op->create_time = $this->date($oop['opdate']); var_dump($op->attributes); if (!$op->insert()) { var_dump($op->errors); return; } } if (count($res)) { $offset += $limit; goto QUERY; } return; }