MemberController.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. <?php
  2. namespace backend\controllers;
  3. use backend\helpers\PaginationHelper;
  4. use backend\helpers\ValidatorHelper;
  5. use backend\models\Member;
  6. use backend\models\Mt4Users;
  7. use backend\models\Open;
  8. use backend\models\UserMember;
  9. use backend\helpers\LogHelper;
  10. use common\lib\Mt4ManagerApi;
  11. use Yii;
  12. class MemberController extends BaseController
  13. {
  14. /**
  15. * 用户信息
  16. * @return \yii\web\Response
  17. */
  18. public function actionInfo()
  19. {
  20. $id = Yii::$app->getRequest()->get('id');
  21. $fields = Yii::$app->getRequest()->get('fields');
  22. if ($fields == null || trim($fields) === '') {
  23. $fields = Member::getTableSchema()->getColumnNames();
  24. unset($fields['password']);
  25. } elseif (!is_array($fields)) {
  26. $fields = preg_split('/\s*,\s*/', $fields, -1, PREG_SPLIT_NO_EMPTY);
  27. }
  28. $model = Member::find()->select($fields)->where(['id' => $id])->limit(1)->one();
  29. $data = $model->getAttributes();
  30. $data['member_id'] = UserMember::find()->select('member_id')->where(['login' => $data['logins']])->limit(1)->one()->member_id;
  31. if ($model == null) {
  32. return $this->outJson(0, [], '用户不存在');
  33. }
  34. return $this->outJson(1, $data, 'OK');
  35. }
  36. /**
  37. * 切换MT4账户
  38. * @return \yii\web\Response
  39. */
  40. public function actionSwitch()
  41. {
  42. $id = Yii::$app->getRequest()->get('id');
  43. $login = Yii::$app->getRequest()->get('login');
  44. /** @var Member $model */
  45. $model = Member::find()->where(['id' => $id])->limit(1)->one();
  46. if ($model == null) {
  47. return $this->outJson(0, [], '用户不存在');
  48. }
  49. $loginArr = explode(',', $model['logins']);
  50. if (in_array($login, $loginArr)) {
  51. $model->main_login = $login;
  52. if ($model->save()) {
  53. return $this->outJson(1, [], 'OK');
  54. } else {
  55. return $this->outJson(0, [], $model->getErrors());
  56. }
  57. } else {
  58. return $this->outJson(0, [], 'login不属于当前用户');
  59. }
  60. }
  61. /**
  62. * 获取下级代理商
  63. */
  64. public function actionGetIbs()
  65. {
  66. $id = (int) Yii::$app->request->get('id');
  67. $model = new Member();
  68. $ibs = $model->findChildrenIncludeSelf($id);
  69. return $this->outJson(1, $ibs, '');
  70. }
  71. /**
  72. * @return \yii\web\Response
  73. */
  74. public function actionCheckemailexist()
  75. {
  76. $email = trim(Yii::$app->getRequest()->get('email'));
  77. if ($email == '') {
  78. return $this->outJson(0, [], '邮箱不能为空');
  79. }
  80. //if (Member::checkEmailExist($email) || Open::checkEmailExist($email)) {
  81. if (Member::checkEmailExist($email)) {
  82. return $this->outJson(0, [], '邮箱已被注册');
  83. }
  84. return $this->outJson(1, [], '邮箱未被注册');
  85. }
  86. /**
  87. * @return \yii\web\Response
  88. */
  89. public function actionCheckidnoexist()
  90. {
  91. $idNo = trim(Yii::$app->getRequest()->get('id_no'));
  92. if ($idNo == '') {
  93. return $this->outJson(0, [], '身份证不能为空');
  94. }
  95. // if (Member::checkIdNoExist($idNo) || Open::checkIdNoExist($idNo)) {
  96. if (Member::checkIdNoExist($idNo)) {
  97. return $this->outJson(0, [], '身份证已被注册');
  98. }
  99. return $this->outJson(1, [], '身份证未被注册');
  100. }
  101. /**
  102. * 名下代理详情页
  103. */
  104. public function actionGetView()
  105. {
  106. $model = new Member();
  107. $result = $model->getView(Yii::$app->request->post());
  108. if ($result['code']) {
  109. return $this->outJson(1, $result['data']);
  110. } else {
  111. return $this->outJson(0, [], $result['message']);
  112. }
  113. }
  114. /**
  115. * 用户列表
  116. * @return \yii\web\Response
  117. */
  118. public function actionList()
  119. {
  120. $data = Yii::$app->getRequest()->get();
  121. $data['type'] = isset($data['type']) ? trim($data['type']) : '';
  122. $data['search'] = isset($data['search']) ? trim($data['search']) : '';
  123. $data['page'] = isset($data['page']) ? max(intval($data['page']), 1) : 1;
  124. $data['pageSize'] = isset($data['pageSize']) ? intval($data['pageSize']) : 20;
  125. $data['orderBy'] = isset($data['orderBy']) ? trim($data['orderBy']) : 'id desc';
  126. $data = ValidatorHelper::validateData($data, [
  127. ['type', 'required'],
  128. ['search', 'string'],
  129. ['page', 'integer', 'min' => 1],
  130. ['pageSize', 'integer', 'min' => 1],
  131. ['orderBy', 'string'],
  132. ], $errors);
  133. if ($data == false) {
  134. return $this->outJson(0, '', $errors);
  135. }
  136. $query = Member::find()->orderBy($data['orderBy']);
  137. $query->andWhere(['type' => $data['type']]);
  138. $query->andFilterWhere(['or',
  139. ['like', 'username', $data['search']],
  140. ['like', 'name', $data['search']],
  141. ['like', 'ip', $data['search']],
  142. ['like', 'logins', $data['search']],
  143. ]);
  144. $result = PaginationHelper::queryPage($query, $data['page'], $data['pageSize']);
  145. return $this->outJson(1, $result);
  146. }
  147. /**
  148. * 修改用户信息
  149. * @return \yii\web\Response
  150. */
  151. public function actionUpdate()
  152. {
  153. $id = intval(Yii::$app->getRequest()->post('id'));
  154. if ($id <= 0) {
  155. return $this->outJson(0, [], '未指定数据对象');
  156. }
  157. /** @var Member $member */
  158. $member = Member::find()->where(['id' => $id])->one();
  159. if ($member == null) {
  160. return $this->outJson(0, [], '用户不存在');
  161. }
  162. $data = Yii::$app->getRequest()->post();
  163. if(isset($data['mtpassword']) && trim($data['mtpassword']) != '') {
  164. // 对密码进行校验
  165. if(preg_match('/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,16}$/',$data['mtpassword'])){
  166. // open表的mt4_login_pwd更新
  167. $openModel = Open::find()->where(['member_id' => $data['id']])->limit(1)->one();
  168. $openModel->mt4_login_pwd = $data['mtpassword'];
  169. $res1 = $openModel->save();
  170. // 调用mt4更新方法
  171. $Mt4ManagerApi = new Mt4ManagerApi();
  172. $res2 = $Mt4ManagerApi->changePassword($openModel->mt4_login,$data['mtpassword']);
  173. $res2 = json_decode($res2,true);
  174. // 成功
  175. if($res1&& !$res2['ret']){
  176. return $this->outJson(1, [], '操作成功');
  177. }
  178. }else{
  179. return $this->outJson(0, [], '操作失败');
  180. }
  181. }
  182. $username_num = Member::find()->select(['username'])->where(['username' => $data['username']])->andWhere(['!=', 'id', $data['id']])->limit(1)->asArray()->scalar();
  183. if ($username_num) {
  184. return $this->outJson(0, [], '电子邮箱已存在');
  185. }
  186. if(isset($data['password']) && trim($data['password']) != '') {
  187. $data['password'] = $member->hash($data['password']);
  188. } else {
  189. unset($data['password']);
  190. }
  191. $transaction = Member::getDb()->beginTransaction();
  192. try {
  193. //修改客户上级直属代理
  194. if(!empty($data['member_id'])){
  195. $userModel = UserMember::find()->where(['login' => $data['logins']])->limit(1)->one();
  196. $userModel->member_id = $data['member_id'];
  197. $userModel->save();
  198. }
  199. // 修改了ref_id的话,同时也修改ref_path,同时修改他下级代理的ref_path
  200. if (!empty($data['ref_id'])) {
  201. $ref = Member::find()->where(['id' => intval($data['ref_id'])])->limit(1)->asArray()->one();
  202. if ($ref) {
  203. $data['ref_path'] = rtrim($ref['ref_path'], ',') . ',' . $ref['id'] . ','; // 以逗号结尾
  204. $model = new Member();
  205. $ibs = $model->findChildrenIncludeSelf($id);
  206. foreach ($ibs as $k => $v) {
  207. // 把代理其下级代理商的原上级代理的父辈结构改成新代理的父辈结构加上上级代理本身
  208. // 例如,当前代理为260,ref_path为“70,75,1204,”,
  209. // 某个下级代理为491,ref_path为“70,75,1204,260,500,”
  210. // 260的上级代理改成1509,那么其ref_path改成“70,1196,67,1482,1509,”
  211. // 491的ref_path改成“70,1196,67,1482,1509,260,500,”
  212. $ibModel = Member::find()->where(['id' => $v['id']])->limit(1)->one();
  213. $ibModel->ref_path = ltrim(str_replace(','.$member->ref_path, ','.$data['ref_path'], ','.$ibModel->ref_path), ',');
  214. $ibModel->save();
  215. }
  216. } else {
  217. unset($data['ref_id']);
  218. }
  219. }
  220. $member->setAttributes($data);
  221. $res = $member->save();
  222. $transaction->commit();
  223. } catch (\Exception $e) {
  224. $res = false;
  225. $transaction->rollBack();
  226. }
  227. if ($res) {
  228. return $this->outJson(1, $member->getAttributes(null, ['password']), '操作成功');
  229. } else {
  230. return $this->outJson(0, [], '操作失败');
  231. }
  232. }
  233. /**
  234. * 后台代理商列表数据
  235. * @return array
  236. */
  237. public function actionAdminIbList()
  238. {
  239. $model = new Member();
  240. $result = $model->getAdminIbList(Yii::$app->request->post());
  241. if ($result['code']) {
  242. return $this->outJson(1, $result['data']);
  243. } else {
  244. return $this->outJson(0, [], $result['message']);
  245. }
  246. }
  247. /**
  248. * 后台添加代理商
  249. * @return array
  250. */
  251. public function actionAddAdminIb()
  252. {
  253. $model = new Member();
  254. $result = $model->addAdminIb(Yii::$app->request->post());
  255. if ($result['code']) {
  256. return $this->outJson(1, $result['data']);
  257. } else {
  258. return $this->outJson(0, $result['data'], $result['message']);
  259. }
  260. }
  261. /**
  262. * 后台添加用户
  263. * @return array
  264. */
  265. public function actionAddAdminMember()
  266. {
  267. $model = new Member();
  268. $result = $model->addAdminMember(Yii::$app->request->post());
  269. if ($result['code']) {
  270. return $this->outJson(1, $result['data']);
  271. } else {
  272. return $this->outJson(0, $result['data'], $result['message']);
  273. }
  274. }
  275. /**
  276. * 后台代理商名下客户列表数据
  277. * @return array
  278. */
  279. public function actionAdminIbUsersList()
  280. {
  281. $model = new Mt4Users();
  282. $post = Yii::$app->request->post();
  283. $post['member_id'] = $post['id'];
  284. unset($post['id']);
  285. $result = $model->getList($post, false);
  286. if ($result['code']) {
  287. return $this->outJson(1, $result['data']);
  288. } else {
  289. return $this->outJson(0, [], $result['message']);
  290. }
  291. }
  292. /**
  293. * 后台代理商详情页
  294. */
  295. public function actionGetAdminIbView()
  296. {
  297. $model = new Member();
  298. $result = $model->getAdminIbView(Yii::$app->request->post());
  299. if ($result['code']) {
  300. return $this->outJson(1, $result['data']);
  301. } else {
  302. return $this->outJson(0, [], $result['message']);
  303. }
  304. }
  305. /**
  306. * 后台管理员列表数据
  307. * @return array
  308. */
  309. public function actionAdminAdminList()
  310. {
  311. $model = new Member();
  312. $result = $model->getAdminAdminList(Yii::$app->request->post());
  313. if ($result['code']) {
  314. return $this->outJson(1, $result['data']);
  315. } else {
  316. return $this->outJson(0, [], $result['message']);
  317. }
  318. }
  319. /**
  320. * 后台添加管理员
  321. * @return array
  322. */
  323. public function actionAddAdminAdmin()
  324. {
  325. $model = new Member();
  326. $result = $model->addAdminAdmin(Yii::$app->request->post());
  327. if ($result['code']) {
  328. return $this->outJson(1, $result['data']);
  329. } else {
  330. return $this->outJson(0, [], $result['message']);
  331. }
  332. }
  333. /**
  334. * 后台编辑管理员
  335. * @return array
  336. */
  337. public function actionEditAdminAdmin()
  338. {
  339. $model = new Member();
  340. $result = $model->editAdminAdmin(Yii::$app->request->post());
  341. if ($result['code']) {
  342. return $this->outJson(1, $result['data']);
  343. } else {
  344. return $this->outJson(0, [], $result['message']);
  345. }
  346. }
  347. public function actionDelete()
  348. {
  349. $id = intval(Yii::$app->getRequest()->post('id'));
  350. if ($id <= 0) {
  351. return $this->outJson(0, [], '参数非法');
  352. }
  353. $admin_id = intval(Yii::$app->getRequest()->post('admin_id'));
  354. $member_info = Member::findById($id);
  355. $member_info = json_encode($member_info);
  356. LogHelper::writeLog($admin_id,$id,'Member/delete','删除用户',$member_info);
  357. $result = Member::deleteById($id);
  358. if ($result['code'] == 1) {
  359. return $this->outJson(1, [], $result['message']);
  360. } else {
  361. return $this->outJson(0,$result['data'], $result['message']);
  362. }
  363. }
  364. /**
  365. * 通过logins获取member_id
  366. */
  367. public function actionGetIdByLogin()
  368. {
  369. $login = Yii::$app->getRequest()->get('login');
  370. $rs = Member::findByLogin($login, 2);
  371. return $this->outJson(1, $rs['id']);
  372. }
  373. }