<?php /** * Created by PhpStorm. * User: rlgyzhcn * Date: 18-5-31 * Time: 上午9:56 */ namespace backend\controllers; use backend\models\coin\CoinForm; use common\business\CoinBusiness; use common\models\psources\Coin; use common\models\psources\CoinPlatform; use common\models\psources\CoinRecommend; use Yii; use yii\validators\ImageValidator; use yii\web\Response; use yii\web\UploadedFile; /** * 币种管理控制器 * Class CoinController * @package backend\controllers */ class CoinController extends BaseController { /** * @return array|string|\yii\db\ActiveRecord[] * 币种列表 */ public function actionIndex() { if (Yii::$app->request->isAjax) { $request = Yii::$app->request; $page = $request->get('page', 1); $limit = $request->get('limit', 10); $name = $request->get('name', null); $platform = $request->get('platform', ''); $chain = $request->get('chain', ''); $recommend = $request->get('recommend', ''); $condition = []; if ($name) { $condition[] = ['like', 'name', $name]; } if ($platform != '') { $condition[] = ['platform' => $platform]; } if ($chain != '') { $condition[] = ['chain' => $chain]; } if (Yii::$app->user->id != Yii::$app->params['admin']) { $platform_id = Yii::$app->user->identity->platform_id; $condition[] = ['>', "find_in_set($platform_id, platform_id)", 0]; } if (!empty($recommend)) { //使用连表查询推荐币种 $data = CoinBusiness::getRecommendList($page, $limit, $condition); } else { $data = CoinBusiness::getList($page, $limit, $condition); } $data['code'] = 0; //ajax return Yii::$app->response->format = 'json'; return $data; } $platforms = Coin::getPlatformList(); $chains = Coin::getChainList(); return $this->render('index', ['platforms' => $platforms, 'chains' => $chains]); } /** * @return string * 币种添加 */ public function actionAdd() { $model = new CoinForm(); $model->scenario = 'add'; if (Yii::$app->request->isPost) { $request = Yii::$app->request; if ($model->load($request->post()) && $model->validate()) { /** * @var $coin \common\models\psources\Coin */ $coin = Yii::createObject(Coin::className()); $data = array_merge($request->post(), ['platform_id' => Yii::$app->user->identity->platform_id]); unset($data['id']); if (isset($data['optional_name'])) { $data['optional_name'] = strtoupper($data['optional_name']); } $data['name'] = strtoupper(trim($data['name'])); $data['platform'] = $data['platform']; $data['chain'] = strtoupper($data['chain']); $nickname_arr = $data['nickname']; $introduce_arr = $data['introduce']; $nickname = []; $introduce = []; foreach (Yii::$app->params['lang'] as $key => $val) { $nickname[$val] = isset($nickname_arr[$val]) ? $nickname_arr[$val] : ''; } foreach (Yii::$app->params['lang'] as $key => $val) { $introduce[$val] = isset($introduce_arr[$val]) ? $introduce_arr[$val] : ''; } unset($data['nickname']); unset($data['introduce']); $data['nickname'] = $nickname; $data['introduce'] = $introduce; $result = $coin->addOne($data); if ($result === true) { $this->success('添加成功', '/admin/coin/index'); } } //表单验证失败 $errors = $model->errors; if ($errors) { foreach ($errors as $key => $item) { $errors = $item[0]; break; } } elseif (isset($result) && $result['code'] != 0) { $errors = $result['message']; } $this->error($errors, Yii::$app->request->getReferrer()); } return $this->render('add', ['model' => $model]); } /** * @return array|string * 币种编辑 */ public function actionEdit() { if (Yii::$app->request->isPost) { $model = new CoinForm(); $model->scenario = 'update'; $req = Yii::$app->request; $data = $req->post(); $data['name'] = strtoupper($data['name']); $data['platform'] = $data['platform']; $data['chain'] = strtoupper($data['chain']); if (isset($data['optional_name'])) { $data['optional_name'] = strtoupper($data['optional_name']); } Yii::$app->response->format = 'json'; if ($model->load($data) && $model->validate()) { $platform_id = Yii::$app->user->identity->platform_id; $can = false; if (Yii::$app->params['admin'] != Yii::$app->user->id) { $coin = Coin::find()->where(['id' => $req->post('id')])->andWhere(['>', "find_in_set($platform_id, platform_id)", 0])->createCommand()->getRawSql(); if ($coin) { $can = true; } } else { $can = true; } if ($can) { $nickname_arr = $data['nickname']; $introduce_arr = $data['introduce']; $nickname = []; $introduce = []; foreach (Yii::$app->params['lang'] as $key => $val) { $nickname[$val] = isset($nickname_arr[$val]) ? $nickname_arr[$val] : ''; } foreach (Yii::$app->params['lang'] as $key => $val) { $introduce[$val] = isset($introduce_arr[$val]) ? $introduce_arr[$val] : ''; } unset($data['nickname']); $data['nickname'] = $nickname; $data['introduce'] = $introduce; $coin = Yii::createObject(Coin::className()); $result = $coin->updateOne($data); if ($result === true) { return ['code' => 0, 'msg' => 'succeed']; } } else { return ['code' => -1, 'msg' => '没有权限修改']; } } $errors = $model->errors; if ($errors) { foreach ($errors as $key => $item) { $errors = $item[0]; break; } } elseif (isset($result) && $result['code'] != 0) { $errors = $result['message']; } return ['code' => 1, 'msg' => $errors]; } elseif (Yii::$app->request->isGet) { $id = Yii::$app->request->get('id', null); if ($id) { $coin = Coin::findOne(['id' => $id]); $this->layout = false; return $this->render('edit', ['model' => $coin]); } } } /** * 上传币种图标 */ public function actionUpload() { Yii::$app->response->format = 'json'; $uploaded_file = UploadedFile::getInstanceByName('file'); try { /** * @var $validator ImageValidator */ $validator = Yii::createObject(ImageValidator::className(), ['extensions' => 'png,jpg,gif']); if ($validator->validate($uploaded_file)) { $src = Yii::$app->uploader->upload($uploaded_file); if ($src === false) { return ['code' => 1, 'msg' => '上传失败']; } else { return ['code' => 0, 'data' => ['src' => $src]]; } } } catch (\Exception $exception) { return ['code' => $exception->getCode(), 'msg' => $exception->getMessage()]; } } /** * @return array * 币种删除 */ public function actionDelete() { Yii::$app->response->format = 'json'; $id = Yii::$app->request->get('id', 0); if ($id) { $coin_recommend = CoinRecommend::find()->where(['cid' => $id])->one(); if ($coin_recommend) { return ['code' => -1, 'msg' => '推荐币种里有改币种,无法删除']; } $model = Coin::findOne(['id' => $id]); if ($model) { $platform_id = Yii::$app->user->identity->platform_id; $can = false; if (Yii::$app->params['admin'] != Yii::$app->user->id) { $coin = Coin::find()->where(['id' => $id, 'platform_id' => $platform_id])->one(); if ($coin) { $can = true; } } else { $can = true; } if ($can) { try { $model->delete(); return ['code' => 0, 'msg' => 'succeed']; } catch (\Throwable $t) { return ['code' => $t->getCode(), 'msg' => $t->getMessage()]; } } else { return ['code' => -1, 'msg' => '没有权限修改']; } } } return ['code' => -1, 'msg' => '删除失败']; } /** * @return string * 获取币种行情 */ public function actionGetExchangeListById() { $id = Yii::$app->request->get('id', 0); $exchanges = []; if ($id) { $exchanges = CoinBusiness::getExchangeListById($id); } $this->layout = false; return $this->render('exchange', ['exchanges' => $exchanges]); } /** * @return array|string|\yii\db\ActiveRecord[] * 币种库配置列表 */ public function actionPackage() { $user_platform_id = Yii::$app->user->identity->platform_id; if (Yii::$app->request->isAjax) { $get = Yii::$app->request->get(); $page = $get['page'] ?? 1; $limit = $get['limit'] ?? 10; $name = $get['name'] ?? ''; $platform = $get['platform'] ?? ''; $chain = $get['chain'] ?? ''; $condition = []; if ($name) { $condition[] = ['like', 'name', $name]; } if ($platform) { $condition[] = ['platform' => $platform]; } if ($chain) { $condition[] = ['chain' => $chain]; } if (Yii::$app->user->id == Yii::$app->params['admin']) { $platform_id = $get['platform_id'] ?? ''; } else { $platform_id = $user_platform_id; } if ($platform_id) { $condition[] = ['>', "find_in_set($platform_id, platform_id)", 0]; } $data = Coin::getSelectList($page, $limit, ['id', 'name', 'nickname', 'platform', 'chain'], $condition); Yii::$app->response->format = Response::FORMAT_JSON; if (!empty($data)) { $data['code'] = 0; } return $data; } //获取币种平台 $coin_platforms = Coin::getPlatformList(); //获取主链 $chains = Coin::getChainList(); if (Yii::$app->user->id == Yii::$app->params['admin']) { $platforms = CoinPlatform::find()->asArray()->all(); } else { $platforms = CoinPlatform::find()->where(['id' => $user_platform_id])->asArray()->all(); } return $this->render('package', [ 'platforms' => $platforms, 'chains' => $chains, 'coin_platforms' => $coin_platforms, ]); } /** * @return array * 删除指定钱包币种 */ public function actionPackageDel() { if (Yii::$app->request->isAjax) { Yii::$app->response->format = Response::FORMAT_JSON; $id = Yii::$app->request->get('id', ''); $platform_id = Yii::$app->request->get('platform_id', ''); if (empty($platform_id)) { return ['code' => -1, 'msg' => '请选择钱包']; } $user_platform_id = Yii::$app->user->identity->platform_id; $coin = Coin::findOne($id); if ($coin) { $can = false; $platform_ids = explode(',', $coin->platform_id); if (Yii::$app->user->id == Yii::$app->params['admin']) { $can = true; } else { if (in_array($user_platform_id, $platform_ids) && $platform_id == $user_platform_id) { $can = true; } } if ($can) { //删除 $platform_ids = array_diff($platform_ids, [$platform_id]); $platform_ids = implode(',', $platform_ids); $coin->platform_id = $platform_ids; if ($coin->save()) { return ['code' => 0, 'msg' => '删除成功']; } return ['code' => -1, 'msg' => '删除失败']; } else { return ['code' => -1, 'msg' => '没有权限修改']; } } else { return ['code' => -1, 'msg' => '币种不存在']; } } } /** * @return array * 添加指定钱包币种 */ public function actionPackageAdd() { if (Yii::$app->request->isAjax) { Yii::$app->response->format = Response::FORMAT_JSON; $get = Yii::$app->request->get(); $platform_id = $get['platform_id'] ?? ''; $name = $get['name'] ?? ''; $chain = $get['chain'] ?? ''; foreach (['platform_id' => '平台', 'name' => '币种名称', 'chain' => '币种主链'] as $key => $value) { if (empty($$key)) { return ['code' => -1, 'msg' => $value . '不能为空']; } } $coin = Coin::find()->where(['name' => $name, 'chain' => $chain])->One(); if ($coin) { $can = false; $user_platform_id = Yii::$app->user->identity->platform_id; $platform_ids = explode(',', $coin->platform_id); if ($user_platform_id == Yii::$app->params['admin']) { $can = true; } else { if (in_array($user_platform_id, $platform_ids) && $platform_id == $user_platform_id) { $can = true; } } if ($can) { $platform_ids = implode(',', array_unique(array_merge($platform_ids, [$platform_id]))); $coin->platform_id = $platform_ids; if ($coin->save()) { return ['code' => 0, 'msg' => '添加成功']; } return ['code' => -1, 'msg' => '添加失败']; } return ['code' => -1, 'msg' => '没有权限修改']; } return ['coin' => -1, 'msg' => '币种不存在']; } } /** * @return array * 复制币种到指定钱包 */ public function actionPackageCopy() { if (Yii::$app->request->isAjax) { Yii::$app->response->format = Response::FORMAT_JSON; $get = Yii::$app->request->get(); $platform_id = $get['platform_id'] ?? ''; $coin_ids = $get['coin_ids'] ?? ''; foreach (['platform_id' => '钱包', 'coin_ids' => '币种'] as $key => $value) { if (empty($$key)) { return ['code' => -1, 'msg' => $value . '不能为空']; } } $user_platform_id = Yii::$app->user->identity->platform_id; if ($user_platform_id == Yii::$app->params['admin']) { $coin_id_items = explode(',', $coin_ids); foreach ($coin_id_items as $id) { $coin = Coin::getOneById($id); if ($coin) { $platform_ids = explode(',', $coin->platform_id); $platform_ids = implode(',', array_unique(array_merge($platform_ids, [$platform_id]))); $coin->platform_id = $platform_ids; $coin->save(); } } return ['code' => 0, 'msg' => '复制成功']; } return ['code' => -1, 'msg' => '没有权限复制']; } } /** * @return array * 批量删除指定钱包币种 */ public function actionPackageBatchDel() { if (Yii::$app->request->isAjax) { Yii::$app->response->format = Response::FORMAT_JSON; $get = Yii::$app->request->get(); $platform_id = $get['platform_id'] ?? ''; $coin_ids = $get['coin_ids'] ?? ''; foreach (['platform_id' => '钱包', 'coin_ids' => '币种'] as $key => $value) { if (empty($$key)) { return ['code' => -1, 'msg' => $value . '不能为空']; } } $user_platform_id = Yii::$app->user->identity->platform_id; if ($user_platform_id == Yii::$app->params['admin']) { $coin_id_items = explode(',', $coin_ids); foreach ($coin_id_items as $id) { $coin = Coin::getOneById($id); if ($coin) { $platform_ids = explode(',', $coin->platform_id); $platform_ids = implode(',', array_diff($platform_ids, [$platform_id])); $coin->platform_id = $platform_ids; $coin->save(); } } return ['code' => 0, 'msg' => '批量删除成功']; } return ['code' => -1, 'msg' => '没有权限删除']; } } /** * @return array|string * 平台币图标列表 */ public function actionPlatformCoin() { if (Yii::$app->request->isAjax) { Yii::$app->response->format = 'json'; $request = Yii::$app->request; $data = Coin::getPlatformList(); foreach ($data as $item) { if ($item) { $platformInfo['platform'] = $item; $icon = Yii::$app->redis->hget('platform_image_info', $item); $brower_url = Yii::$app->redis->hget('platform_brower_info', $item); $platformInfo['icon'] = $icon ?? ''; $platformInfo['brower_url'] = $brower_url ?? ''; $platformItems[] = $platformInfo; } } return ['data' => $platformItems, 'code' => 0]; } return $this->render('platform_coin'); } /** * @return array * 添加平台币图标 */ public function actionAddPlatformCoin() { if (Yii::$app->request->isPost) { Yii::$app->response->format = 'json'; $platform = Yii::$app->request->post('platform'); $image = Yii::$app->request->post('image'); if ($platform && $image) { Yii::$app->redis->hset('platform_image_info', $platform, $image); return ['code' => 0, 'msg' => '图片添加成功']; } return ['code' => 0, 'msg' => '图片添加失败']; } } /** * @return array * 设置区块链浏览器地址 */ public function actionSetBrower() { if (Yii::$app->request->isAjax) { Yii::$app->response->format = 'json'; $request = Yii::$app->request; $platform = $request->get('platform', ''); $brower_url = $request->get('brower_url', ''); if ($platform) { Yii::$app->redis->hset('platform_brower_info', $platform, $brower_url); return ['code' => 0, 'msg' => '区块链浏览器地址设置成功']; } else { return ['code' => 1, 'msg' => '区块链浏览器地址设置失败']; } } } }