IbController.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
  1. <?php
  2. namespace backend\modules\admin\controllers;
  3. use backend\models\searches\CommissionSearch;
  4. use common\helpers\ExcelHelper;
  5. use common\helpers\UserAgentHelper;
  6. use Yii;
  7. use backend\models\MemberApi;
  8. use backend\models\forms\MemberForm;
  9. use backend\models\MemberIdentity;
  10. use common\helpers\Utils;
  11. use yii\web\NotFoundHttpException;
  12. use backend\models\forms\CommissionForm;
  13. use backend\models\CommissionApi;
  14. use yii\helpers\Url;
  15. use backend\models\MemberBankInfoApi;
  16. /**
  17. * 代理商管理
  18. */
  19. class IbController extends BaseController
  20. {
  21. /**
  22. * 列表页
  23. * @return string
  24. */
  25. public function actionIndex()
  26. {
  27. return $this->render('index');
  28. }
  29. /**
  30. * AJAX获取数据
  31. */
  32. public function actionAjax()
  33. {
  34. $get = Yii::$app->request->get();
  35. $orderInt = isset($get['order'][0]['column']) ? (int) $get['order'][0]['column'] : 1;
  36. $order = isset($get['columns'][$orderInt]['data']) ? $get['columns'][$orderInt]['data'] : '';
  37. $orderBy = isset($get['order'][0]['dir']) ? $get['order'][0]['dir'] : 'desc';
  38. $search = isset($get['search']['value']) ? trim($get['search']['value']) : '';
  39. $start = isset($get['start']) ? (int) $get['start'] : 0;
  40. $length = isset($get['length']) ? (int) $get['length'] : 20;
  41. $draw = isset($get['draw']) ? $get['draw'] : 1;
  42. $params = [
  43. 'order' => $order,
  44. 'orderBy' => $orderBy,
  45. 'search' => $search,
  46. 'start' => $start,
  47. 'length' => $length,
  48. 'draw' => $draw,
  49. ];
  50. if ($params['length'] > 5000) {
  51. if (Yii::$app->getRequest()->getIsAjax()) {
  52. Yii::$app->getResponse()->redirect(Url::current(), UserAgentHelper::isIE() ? 200 : 302);
  53. } else {
  54. $this->exportXls($params);
  55. }
  56. Yii::$app->end();
  57. }
  58. $api = new MemberApi();
  59. $result = $api->getAdminIbList($params);
  60. echo json_encode($result['data']);
  61. }
  62. /**
  63. * 添加代理商页面
  64. */
  65. public function actionAdd()
  66. {
  67. $id = Yii::$app->request->get('id', '');
  68. return $this->renderPartial('add', [
  69. 'id' => $id,
  70. ]);
  71. }
  72. /**
  73. * 添加代理商数据处理
  74. */
  75. public function actionSave()
  76. {
  77. $response = ['code' => 0, 'message' => '添加失败', 'data' => []];
  78. $model = new MemberForm(0, [], true);
  79. $model->setScenario('add_admin_ib');
  80. $model->load(Yii::$app->request->post());
  81. if ($model->validate()) {
  82. $api = new MemberApi();
  83. $params = $model->attributes;
  84. //$isSendSms = Yii::$app->request->post('isSendSms');
  85. //$params['isSendSms'] = $isSendSms;
  86. $result = $api->addAdminIb($params);
  87. if ($result['code'] == 1) {
  88. $response['code'] = 1;
  89. $response['message'] = '添加成功';
  90. } else {
  91. $response['message'] = $result['message'];
  92. $response['data'] = $result['data'];
  93. }
  94. } else {
  95. $errors = $model->getFirstErrors();
  96. $error = reset($errors);
  97. $response['message'] = !empty($error) ? $error : '数据输入错误';
  98. }
  99. return json_encode($response);
  100. }
  101. /**
  102. * 名下代理
  103. */
  104. public function actionTree()
  105. {
  106. $id = (int) Yii::$app->request->get('id');
  107. $api = new MemberApi();
  108. $ibs = $api->getIbs($id)['data'];
  109. $member = [];
  110. $list = [];
  111. if ($ibs) {
  112. $ibs2 = [];
  113. foreach ($ibs as $k => $v) {
  114. if ($v['id'] == $id) {
  115. $member = $v;
  116. }
  117. $ibs2[$v['id']] = $v;
  118. }
  119. $ibs = $ibs2;
  120. foreach ($ibs as $k => $v) {
  121. $ibs[$v['ref_id']]['sub'][$k] = &$ibs[$k];
  122. }
  123. $list = isset($ibs[$member['id']]['sub']) ? $ibs[$member['id']]['sub'] : [];
  124. }
  125. return $this->renderPartial('tree', [
  126. 'member' => $member,
  127. 'list' => $list,
  128. ]);
  129. }
  130. /**
  131. * 名下客户
  132. */
  133. public function actionUsers()
  134. {
  135. $id = (int) Yii::$app->request->get('id');
  136. return $this->render('users', [
  137. 'id' => $id,
  138. ]);
  139. }
  140. /**
  141. * 名下客户
  142. */
  143. public function actionUsersAjax()
  144. {
  145. $get = Yii::$app->request->get();
  146. $id = isset($get['id']) ? $get['id'] : 0;
  147. $orderInt = isset($get['order'][0]['column']) ? (int) $get['order'][0]['column'] : 1;
  148. $order = isset($get['columns'][$orderInt]['data']) ? $get['columns'][$orderInt]['data'] : '';
  149. $orderBy = isset($get['order'][0]['dir']) ? $get['order'][0]['dir'] : 'desc';
  150. $search = isset($get['search']['value']) ? trim($get['search']['value']) : '';
  151. $start = isset($get['start']) ? (int) $get['start'] : 0;
  152. $length = isset($get['length']) ? (int) $get['length'] : 20;
  153. $draw = isset($get['draw']) ? $get['draw'] : 1;
  154. $params = [
  155. 'id' => $id,
  156. 'order' => $order,
  157. 'orderBy' => $orderBy,
  158. 'search' => $search,
  159. 'start' => $start,
  160. 'length' => $length,
  161. 'draw' => $draw,
  162. ];
  163. $api = new MemberApi();
  164. $result = $api->getAdminIbUsersList($params);
  165. echo json_encode($result['data']);
  166. }
  167. /**
  168. * 名下代理详细
  169. */
  170. public function actionView()
  171. {
  172. $id = (int) Yii::$app->request->get('id');
  173. $params = [
  174. 'id' => $id,
  175. ];
  176. $api = new MemberApi();
  177. $result = $api->getAdminIbView($params);
  178. if ($result['code'] == 0) {
  179. throw new NotFoundHttpException($result['message']);
  180. }
  181. $data = $result['data'];
  182. return $this->render('view', [
  183. 'member' => $data['member'],
  184. 'signins' => $data['signins'],
  185. 'bank_info' => $data['bank_info'],
  186. ]);
  187. }
  188. /**
  189. * 启用或锁定账户
  190. */
  191. public function actionAction()
  192. {
  193. $id = (int) Yii::$app->request->get('id');
  194. $isEnable = (int) Yii::$app->request->get('enable');
  195. if ($isEnable && $isEnable != 1) {
  196. $isEnable = 1;
  197. }
  198. $api = new MemberApi();
  199. $result = $api->updateMemberEnable($id, $isEnable);
  200. return $this->redirect('/admin/ib/view?id=' . $id);
  201. }
  202. /**
  203. * 删除用户
  204. * @return \yii\web\Response
  205. */
  206. public function actionDelete()
  207. {
  208. $id = (int) Yii::$app->request->post('id');
  209. $admin_id = (int) Yii::$app->request->post('admin_id');
  210. $api = new MemberApi();
  211. $result = $api->deleteMember($id,$admin_id);
  212. if ($result['code'] == 1) {
  213. return $this->asJson(['isSuccess' => true, 'msg' => $result['message']]);
  214. }
  215. return $this->asJson(['isSuccess' => false, 'msg' => $result['message']]);
  216. }
  217. /**
  218. * 跳转登录到ib模块
  219. */
  220. public function actionLogin()
  221. {
  222. $id = (int) Yii::$app->request->get('id');
  223. if ($id <= 0) {
  224. throw new NotFoundHttpException('用户不存在');
  225. }
  226. $api = new MemberApi();
  227. $result = $api->getMemberInfo($id, ['id', 'password']);
  228. if ($result['code'] == 0) {
  229. throw new NotFoundHttpException('用户不存在.');
  230. }
  231. $member = $result['data'];
  232. if ($member) {
  233. setcookie(MemberIdentity::IB_LOGIN_ID_COOKIE, $member['id'], time() + 86400, '/', Utils::getTopDomain());
  234. setcookie(MemberIdentity::IB_LOGIN_TOKEN_COOKIE, $member['password'], time() + 86400, '/', Utils::getTopDomain());
  235. setcookie(MemberIdentity::ADMIN_LOGIN_ID_COOKIE, Yii::$app->user->id, time() + 86400, '/', Utils::getTopDomain());
  236. }
  237. $host = Utils::getCrmHostByEnv();
  238. return $this->redirect($host . '/ib/dashboard');
  239. }
  240. /**
  241. * 修改logins
  242. */
  243. public function actionModifyLogins()
  244. {
  245. $id = (int) Yii::$app->request->post('id');
  246. $logins = Yii::$app->request->post('logins');
  247. $api = new MemberApi();
  248. $result = $api->updateMemberLogins($id, $logins);
  249. $result['message'] = $result['code'] == 1 ? '修改成功' : '修改失败';
  250. return json_encode($result);
  251. }
  252. /**
  253. * 修改密码
  254. */
  255. public function actionModifyPwd()
  256. {
  257. $id = (int) Yii::$app->request->post('id');
  258. $pwd = Yii::$app->request->post('pwd');
  259. $api = new MemberApi();
  260. $result = $api->updateMemberPassword($id, $pwd);
  261. $result['message'] = $result['code'] == 1 ? '修改成功' : '修改失败';
  262. return json_encode($result);
  263. }
  264. /**
  265. * 修改资料
  266. */
  267. public function actionModifyInfo()
  268. {
  269. $post = Yii::$app->request->post();
  270. $id = isset($post['id']) ? intval($post['id']) : 0;
  271. $data = [
  272. 'ref_id' => isset($post['ref_id']) ? intval($post['ref_id']) : 0,
  273. 'username' => isset($post['username']) ? trim($post['username']) : '',
  274. 'name' => isset($post['name']) ? trim($post['name']) : '',
  275. 'id_no' => isset($post['id_no']) ? trim($post['id_no']) : '',
  276. 'address' => isset($post['address']) ? trim($post['address']) : '',
  277. 'mobile' => isset($post['mobile']) ? trim($post['mobile']) : '',
  278. 'gender' => isset($post['gender']) ? intval($post['gender']) : '',
  279. 'birthday' => isset($post['birthday']) ? trim($post['birthday']) : '',
  280. ];
  281. $api = new MemberApi();
  282. $result = $api->updateMember($id, $data);
  283. $result['message'] = $result['code'] == 1 ? '修改成功' : $result['message'];
  284. return json_encode($result);
  285. }
  286. /**
  287. * 批量设置返佣规则
  288. */
  289. public function actionCommissionVolumeSet()
  290. {
  291. $memberId = (int) Yii::$app->request->get('memberId');
  292. $api = new MemberApi();
  293. $member = $api->getMemberInfo($memberId)['data'];
  294. return $this->renderPartial('commissionVolumeSet', [
  295. 'member' => $member,
  296. ]);
  297. }
  298. /**
  299. * 批量设置返佣规则
  300. */
  301. public function actionCommissionVolumeSetAjax()
  302. {
  303. $response = ['code' => 0, 'message' => '设置失败', 'data' => []];
  304. $ibMemberId = (int) Yii::$app->request->post('ibMemberId');
  305. $setType = Yii::$app->request->post('setType');
  306. $subordinateIbLogins = (int) Yii::$app->request->post('subordinateIbLogins');
  307. if (!$ibMemberId) {
  308. $response['message'] = '参数错误';
  309. return json_encode($response);
  310. }
  311. if (!in_array($setType, ['direct', 'indirect'])) {
  312. $response['message'] = '请先选择设置类型';
  313. return json_encode($response);
  314. }
  315. if ($setType == 'indirect' && !$subordinateIbLogins) {
  316. $response['message'] = '请输入需要设置差佣的下级代理';
  317. return json_encode($response);
  318. }
  319. $model = new CommissionForm();
  320. $model->setScenario('admin_batch_set');
  321. $model->load(Yii::$app->request->post());
  322. if ($model->validate()) {
  323. $api = new CommissionApi();
  324. $params = $model->attributes;
  325. $params['userId'] = Yii::$app->user->identity->getId();
  326. $params['ibMemberId'] = $ibMemberId;
  327. $params['setType'] = $setType;
  328. $params['subordinateIbLogins'] = $subordinateIbLogins;
  329. $result = $api->batchSet($params);
  330. if ($result['code'] == 1) {
  331. $response['code'] = 1;
  332. $response['message'] = '操作成功';
  333. } else {
  334. $response['message'] = $result['message'];
  335. }
  336. } else {
  337. $errors = $model->getFirstErrors();
  338. $error = reset($errors);
  339. $response['message'] = !empty($error) ? $error : '数据输入错误';
  340. }
  341. return json_encode($response);
  342. }
  343. /**
  344. * 查看返佣规则记录
  345. */
  346. public function actionCommissionLog()
  347. {
  348. $id = Yii::$app->request->get('id', '');
  349. $member = new MemberApi();
  350. $info = $member->getMemberInfo($id);
  351. return $this->render('commission-log', [
  352. 'id' => $id,
  353. 'name' => $info['data']['name'],
  354. ]);
  355. }
  356. public function actionCommissionLogAjax()
  357. {
  358. $data = Yii::$app->request->get();
  359. $data['memberId'] = isset($data['id']) ? intval($data['id']) : '';
  360. $api = new CommissionSearch();
  361. $result = $api->search($data);
  362. return $this->asJson($api->outResult($result));
  363. }
  364. /**
  365. * 获取代理商列表,在设置上级代理商时给用户查询
  366. * @return string
  367. * @see \backend\modules\admin\controllers\UserController::actionIbs() 参考该方法
  368. */
  369. public function actionIbs()
  370. {
  371. return $this->renderPartial('ibs');
  372. }
  373. /**
  374. * @param array $params
  375. */
  376. protected function exportXls($params)
  377. {
  378. ExcelHelper::init();
  379. $attachmentName = "代理商管理_" . date('Y-m-d') . '.xlsx';
  380. $header = ['ID', '上级代理商', '用户名', '账户', '邮箱', '姓名', '手机', '状态', '注册时间'];
  381. $source = [];
  382. $api = new MemberApi();
  383. $isEnableMap = [
  384. 0 => '禁用',
  385. 1 => '启用',
  386. ];
  387. $params['length'] = 5000;
  388. while (true) {
  389. $result = $api->getAdminIbList($params);
  390. if ($result['code'] == 1 && !empty($result['data']['data'])) {
  391. foreach ((array)$result['data']['data'] as $key => $row) {
  392. $isEnable = isset($isEnableMap[$row['is_enable']]) ? $isEnableMap[$row['is_enable']] : '';
  393. $inTime = date('Y-m-d H:i:s', intval($row['in_time'] / 1000));
  394. $arr = [];
  395. $arr[] = $row['id'];
  396. $arr[] = $row['IBNAME'];
  397. $arr[] = $row['ib_old_login_name'];
  398. $arr[] = $row['logins'];
  399. $arr[] = $row['username'];
  400. $arr[] = $row['name'];
  401. $arr[] = $row['mobile'];
  402. $arr[] = $isEnable;
  403. $arr[] = $inTime;
  404. $source[] = $arr;
  405. }
  406. } else {
  407. break;
  408. }
  409. $params['start'] += $params['length'];
  410. if ($params['start'] >= $result['data']['recordsTotal']) {
  411. break;
  412. }
  413. }
  414. ExcelHelper::output($source, $header, $attachmentName);
  415. }
  416. /**
  417. * 修改银行资料
  418. */
  419. public function actionModifyBankInfo()
  420. {
  421. $post = Yii::$app->request->post();
  422. $api = new MemberBankInfoApi();
  423. $params = array_merge($post, ['member_type' => MemberIdentity::MEMBER_TYPE_IB]);
  424. $result = $api->update($params);
  425. return json_encode($result);
  426. }
  427. }