Пример #1
0
 /**
  * @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;
 }
Пример #2
0
    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;
    }