Agent.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535
  1. <?php
  2. /**
  3. * Agent.php UTF-8
  4. *
  5. *
  6. * @date : 2018/5/10 16:32
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : wuyonghong <wyh@huosdk.com>
  10. * @version : HUOSDK 8.0
  11. */
  12. namespace huo\controller\agent;
  13. use huo\controller\common\Base;
  14. use huo\controller\common\HuoSession;
  15. use huo\logic\agent\AgentGameLogic;
  16. use huo\logic\agent\AgentLogic;
  17. use huo\logic\finance\AgentOrderLogic;
  18. use huo\logic\order\OrderLogic;
  19. use huo\model\user\RoleModel;
  20. use huo\model\user\RoleUserModel;
  21. use huo\model\user\UserModel;
  22. use huolib\constant\AgentConst;
  23. use huolib\constant\CommonConst;
  24. use huolib\constant\MemConst;
  25. use huolib\status\MemberStatus;
  26. use huolib\utils\UserUtils;
  27. use think\Cache;
  28. use think\Log;
  29. class Agent extends Base {
  30. /**
  31. * 获取渠道基本信息
  32. *
  33. * @param $agent_id
  34. *
  35. * @return bool
  36. */
  37. public function getAgentBaseInfo($agent_id) {
  38. if (empty($agent_id)) {
  39. return false;
  40. }
  41. $_ac_class = AgentCache::ins();
  42. $_agent_data = $_ac_class->getInfoByAgentId($agent_id);
  43. if (empty($_agent_data)) {
  44. return false;
  45. }
  46. $_data['user_login'] = $_agent_data['user_login'];
  47. $_data['user_nicename'] = $_agent_data['user_nicename'];
  48. $_data['user_email'] = $_agent_data['user_email'];
  49. $_data['signature'] = $_agent_data['signature'];
  50. $_data['role_id'] = $_agent_data['role_id'];
  51. $_data['role_type'] = (new RoleModel())->getRoleTypeById($_data['role_id']);
  52. $_data['parent_id'] = $_agent_data['parent_id'];
  53. $_data['cp_id'] = $_agent_data['cp_id'];
  54. $_data['user_status'] = $_agent_data['user_status'];
  55. $_data['mobile'] = $_agent_data['mobile'];
  56. $_data['avatar'] = $_agent_data['avatar'];
  57. $_ae_info = $_ac_class->getAgentExtByAgentId($agent_id);
  58. $_data['ptb_remain'] = $_ae_info['ptb_remain'];
  59. $_data['share_remain'] = $_ae_info['share_remain'];
  60. $_data['frozen_amount'] = $_ae_info['frozen_amount'];
  61. HuoSession::setAgentId($_agent_data['id']);
  62. return $_data;
  63. }
  64. /**
  65. * 获取统计信息
  66. *
  67. * @param $agent_id
  68. *
  69. * @return array
  70. */
  71. public function getStatisticsTotalInfo($agent_id) {
  72. $_ae_data = AgentCache::ins()->getAgentExtByAgentId($agent_id);
  73. if (empty($_ae_data)) {
  74. $_code = MemberStatus::INVALID_PARAMS;
  75. return $this->huoError($_code, MemberStatus::getMsg($_code));
  76. }
  77. $_agent_ids = (new AgentLogic())->getAgentIds($agent_id, true);
  78. /* 玩家统计 */
  79. $_member = (new AgentLogic())->getStaticMem($_agent_ids);
  80. $_rdata['sum_user_cnt'] = $_member['sum_user_cnt'];
  81. $_rdata['today_user_cnt'] = $_member['today_user_cnt'];
  82. $_rdata['yesterday_user_cnt'] = $_member['yesterday_user_cnt'];
  83. /* 玩家流水统计 */
  84. $_member = (new OrderLogic())->getStaticMoney($_agent_ids);
  85. $_rdata['sum_money'] = $_member['sum_money'];
  86. $_rdata['today_money'] = $_member['today_money'];
  87. $_rdata['yesterday_money'] = $_member['yesterday_money'];
  88. /* 流水分成统计 */
  89. $_role_type = $this->getRoleType($agent_id);
  90. $_share_money = (new AgentOrderLogic())->getStaticShareMoney($agent_id, $_role_type);
  91. $_rdata['sum_share_total'] = $_share_money['sum_share_total'];
  92. $_rdata['today_share_total'] = $_share_money['today_share_total'];
  93. $_rdata['yesterday_share_total'] = $_share_money['yesterday_share_total'];
  94. /* 游戏统计 */
  95. $_game = (new AgentGameLogic())->getStaticGame($agent_id);
  96. $_rdata['sum_game_cnt'] = $_game['sum_game_cnt'];
  97. $_rdata['today_game_cnt'] = $_game['today_game_cnt'];
  98. $_rdata['yesterday_game_cnt'] = $_game['yesterday_game_cnt'];
  99. $_code = MemberStatus::NO_ERROR;
  100. return $this->huoError($_code, MemberStatus::getMsg($_code), $_rdata);
  101. }
  102. /**
  103. * 获取父渠道ID
  104. *
  105. * @param $agent_id
  106. *
  107. * @return int|false
  108. */
  109. public function getParentId($agent_id) {
  110. $_agent_data = AgentCache::ins()->getInfoByAgentId($agent_id);
  111. if (empty($_agent_data)) {
  112. return false;
  113. }
  114. return $_agent_data['parent_id'];
  115. }
  116. /**
  117. * 获取角色类型
  118. *
  119. * @param $agent_id
  120. *
  121. * @return int|false
  122. */
  123. public function getRoleType($agent_id) {
  124. $_agent_data = AgentCache::ins()->getInfoByAgentId($agent_id);
  125. if (empty($_agent_data)) {
  126. return false;
  127. }
  128. $_role_type = (new RoleModel())->getRoleTypeById($_agent_data['role_id']);
  129. return $_role_type;
  130. }
  131. /**
  132. * 通过用户名获取Id
  133. *
  134. * @param string $username
  135. *
  136. * @return array|bool
  137. */
  138. public function getIdByName($username = '') {
  139. $_agent_id = (new AgentLogic())->getIdByName($username);
  140. return $_agent_id;
  141. }
  142. /**
  143. * @param $username
  144. * @param $password
  145. *
  146. * @return array|mixed
  147. */
  148. public function login($username, $password) {
  149. $_login_chk = UserUtils::checkLogin($username, $password);
  150. if (MemberStatus::NO_ERROR != $_login_chk) {
  151. Log::write(
  152. "func=".__FUNCTION__."&class=".__CLASS__."&step=1&username=$username&pwd=$password", Log::NOTICE
  153. );
  154. return $this->retErrMsg($_login_chk);
  155. }
  156. $_agent_id = $this->getIdByName($username);
  157. $_agent_data = AgentCache::ins()->getInfoByAgentId($_agent_id);
  158. if ($_agent_data) {
  159. $_chk_pwd = cmf_compare_password($password, $_agent_data['user_pass']);
  160. if (false == $_chk_pwd) {
  161. $_rs = MemberStatus::USERNAME_OR_PASSWORD_ERR;
  162. } elseif (MemConst::STATUS_FORBID == $_agent_data['user_status']) {
  163. $_rs = MemberStatus::ACCOUNT_HALT;
  164. } else {
  165. $_rs = MemberStatus::NO_ERROR;
  166. }
  167. } else {
  168. $_rs = MemberStatus::USERNAME_OR_PASSWORD_ERR;
  169. Log::write(
  170. "func=".__FUNCTION__."&class=".__CLASS__."&step=2&username=$username&pwd=$password", Log::NOTICE
  171. );
  172. return $this->huoError($_rs, MemberStatus::getMsg($_rs));
  173. }
  174. if (!isset($_rs)) {
  175. $_rs = MemberStatus::USERNAME_OR_PASSWORD_ERR;
  176. }
  177. if (MemberStatus::NO_ERROR == $_rs) {
  178. return $this->huoSuccess($_rs, MemberStatus::getMsg($_rs), $this->getAgentBaseInfo($_agent_id));
  179. } else {
  180. Log::write("func=".__FUNCTION__."&class=".__CLASS__."&step=3&username=$username&pwd=$password", Log::ERROR);
  181. return $this->huoError($_rs, MemberStatus::getMsg($_rs));
  182. }
  183. }
  184. /**
  185. * 更新密码
  186. *
  187. * @param $agent_id
  188. * @param $old_pwd
  189. * @param $new_pwd
  190. *
  191. * @return array
  192. */
  193. public function updatePwd($agent_id, $old_pwd, $new_pwd) {
  194. $_ac_class = AgentCache::ins();
  195. $_agent_data = $_ac_class->getInfoByAgentId($agent_id);
  196. if (empty($_agent_data)) {
  197. $_code = MemberStatus::INVALID_PARAMS;
  198. return $this->huoError($_code, MemberStatus::getMsg($_code));
  199. }
  200. /* 校验旧密码 */
  201. if (false == cmf_compare_password($old_pwd, $_agent_data['user_pass'])) {
  202. $_code = MemberStatus::PASSWORD_ERROR;
  203. return $this->huoError($_code, MemberStatus::getMsg($_code));
  204. }
  205. return $this->setPwd($agent_id, $new_pwd);
  206. }
  207. /**
  208. * 更新支付密码
  209. *
  210. * @param $agent_id
  211. * @param $old_pwd
  212. * @param $new_pwd
  213. *
  214. * @return array
  215. */
  216. public function updatePayPwd($agent_id, $old_pwd, $new_pwd) {
  217. $_ac_class = AgentCache::ins();
  218. $_agent_data = $_ac_class->getInfoByAgentId($agent_id);
  219. if (empty($_agent_data)) {
  220. $_code = MemberStatus::INVALID_PARAMS;
  221. return $this->huoError($_code, MemberStatus::getMsg($_code));
  222. }
  223. /* 校验旧密码 */
  224. if (cmf_compare_password($old_pwd, $_agent_data['pay_pwd'])) {
  225. $_code = MemberStatus::PASSWORD_ERROR;
  226. return $this->huoError($_code, MemberStatus::getMsg($_code));
  227. }
  228. return $this->setPwd($agent_id, $new_pwd);
  229. }
  230. /**
  231. * 更新信息
  232. *
  233. * @param $agent_id
  234. * @param $param
  235. *
  236. * @return array
  237. */
  238. public function updateData($agent_id, $param) {
  239. $_ac_class = AgentCache::ins();
  240. $_agent_data = $_ac_class->getInfoByAgentId($agent_id);
  241. if (empty($_agent_data)) {
  242. $_code = MemberStatus::INVALID_PARAMS;
  243. return $this->huoError($_code, MemberStatus::getMsg($_code));
  244. }
  245. $_data = [];
  246. if (isset($param['user_nicename'])) {
  247. $_data['user_nicename'] = $param['user_nicename'];
  248. }
  249. if (isset($param['signature'])) {
  250. $_data['signature'] = $param['signature'];
  251. }
  252. if (isset($param['avatar'])) {
  253. $_data['avatar'] = $param['avatar'];
  254. }
  255. $_data = array_merge($_agent_data, $_data);
  256. $_rs = $_ac_class->updateAgent($agent_id, $_data);
  257. if (false === $_rs) {
  258. $_code = MemberStatus::INNER_ERROR;
  259. return $this->huoError($_code, MemberStatus::getMsg($_code));
  260. } else {
  261. $_code = MemberStatus::NO_ERROR;
  262. return $this->huoSuccess($_code, MemberStatus::getMsg($_code));
  263. }
  264. }
  265. /**
  266. * 更新密码
  267. *
  268. * @param $agent_id
  269. * @param $new_pwd
  270. *
  271. * @return array
  272. */
  273. public function setPwd($agent_id, $new_pwd) {
  274. $_ac_class = AgentCache::ins();
  275. $_rs = UserUtils::checkPassword($new_pwd);
  276. if (MemberStatus::NO_ERROR != $_rs) {
  277. $_code = $_rs;
  278. return $this->huoError($_code, MemberStatus::getMsg($_code));
  279. }
  280. $_agent_data['user_pass'] = $new_pwd;
  281. $_rs = $_ac_class->updateAgent($agent_id, $_agent_data);
  282. if (false === $_rs) {
  283. $_code = MemberStatus::INNER_ERROR;
  284. return $this->huoError($_code, MemberStatus::getMsg($_code));
  285. } else {
  286. $_code = MemberStatus::NO_ERROR;
  287. return $this->huoSuccess($_code, MemberStatus::getMsg($_code));
  288. }
  289. }
  290. /**
  291. * 更新密码
  292. *
  293. * @param $agent_id
  294. * @param $new_pwd
  295. *
  296. * @return array
  297. */
  298. public function setPayPwd($agent_id, $new_pwd) {
  299. $_ac_class = AgentCache::ins();
  300. $_rs = UserUtils::checkPassword($new_pwd);
  301. if (MemberStatus::NO_ERROR != $_rs) {
  302. $_code = $_rs;
  303. return $this->huoError($_code, MemberStatus::getMsg($_code));
  304. }
  305. $_agent_data['pay_pwd'] = $new_pwd;
  306. $_rs = $_ac_class->updateAgent($agent_id, $_agent_data);
  307. if (false === $_rs) {
  308. $_code = MemberStatus::INNER_ERROR;
  309. return $this->huoError($_code, MemberStatus::getMsg($_code));
  310. } else {
  311. $_code = MemberStatus::NO_ERROR;
  312. return $this->huoError($_code, MemberStatus::getMsg($_code));
  313. }
  314. }
  315. /**
  316. * 校验支付密码
  317. *
  318. * @param $agent_id
  319. * @param $pay_pwd
  320. *
  321. * @return array
  322. */
  323. public function checkPayPwd($agent_id, $pay_pwd) {
  324. $_ac_class = AgentCache::ins();
  325. $_agent_data = $_ac_class->getInfoByAgentId($agent_id);
  326. /* 校验旧密码 */
  327. if (false == cmf_compare_password($pay_pwd, $_agent_data['pay_pwd'])) {
  328. $_code = MemberStatus::PASSWORD_ERROR;
  329. return $this->huoError($_code, MemberStatus::getMsg($_code));
  330. } else {
  331. $_code = MemberStatus::NO_ERROR;
  332. return $this->huoSuccess($_code, MemberStatus::getMsg($_code));
  333. }
  334. }
  335. /**
  336. * 添加渠道游戏
  337. *
  338. * @param string $agent_name
  339. * @param string $user_nice
  340. * @param string $user_pass
  341. * @param int $prent_id
  342. * @param int $role_id
  343. * @param string $email
  344. * @param int $agent_charge_type
  345. * @param string $price
  346. * @param int $cp_id
  347. * @param int $wx_id
  348. *
  349. * @return array
  350. */
  351. public function addAgent(
  352. $agent_name, $user_nice, $user_pass, $prent_id, $role_id = AgentConst::AGENT_ROLE_CPS, $email = '',
  353. $agent_charge_type = 0, $price = '', $cp_id = 0, $wx_id = 0
  354. ) {
  355. $_agent_name = $agent_name;
  356. $_id = $this->getIdByName($_agent_name);
  357. if (!empty($_id)) {
  358. $_code = MemberStatus::USERNAME_EXISTS;
  359. return $this->huoError($_code, MemberStatus::getMsg($_code));
  360. }
  361. $_rs = UserUtils::checkRegister($_agent_name, $user_pass);
  362. if (MemberStatus::NO_ERROR != $_rs) {
  363. return $this->huoError($_rs, MemberStatus::getMsg($_rs));
  364. }
  365. $_parent_id = $prent_id;
  366. if (empty($prent_id)) {
  367. $_parent_id = 1;
  368. }
  369. $_role_id = $role_id;
  370. if (empty($role_id)) {
  371. $_role_id = AgentConst::AGENT_ROLE_CPS;
  372. }
  373. $_data['user_login'] = $agent_name;
  374. $_data['user_pass'] = $user_pass;
  375. $_data['pay_pwd'] = $user_pass;
  376. $_data['user_nicename'] = $user_nice;
  377. $_data['user_email'] = $email;
  378. $_data['role_id'] = $_role_id;
  379. $_data['parent_id'] = $_parent_id;
  380. /* Modified by chenbingling BEGIN 2020/12/15 ISSUES:#13831 新增mp买量新增字段 */
  381. $_data['agent_charge_type'] = $agent_charge_type;
  382. $_data['price'] = $price;
  383. $_data['cp_id'] = $cp_id;
  384. $_data['wx_id'] = $wx_id;
  385. /* END 2020/12/15 ISSUES:#13831 */
  386. $_rs = (new AgentLogic())->addAgent($_data);
  387. if (false === $_rs) {
  388. return $this->huoError();
  389. }
  390. /* 添加渠道角色表 */
  391. $_ru_data = [
  392. 'role_id' => $_role_id,
  393. 'user_id' => $_rs
  394. ];
  395. (new RoleUserModel())->insert($_ru_data);
  396. $_rdata['agent_id'] = $_rs;
  397. $_code = MemberStatus::NO_ERROR;
  398. Cache::clear('agent_id_name');
  399. return $this->huoSuccess($_code, MemberStatus::getMsg($_code), $_rdata);
  400. }
  401. /**
  402. * 根据域名获取agent_id
  403. *
  404. * @param $site
  405. *
  406. * @return int|mixed
  407. */
  408. public function getAgentIdBySite($site) {
  409. if (H5SITE == $site) {
  410. return 0;
  411. }
  412. return (new AgentLogic())->getAgentIdBySite($site);
  413. }
  414. /**
  415. * 获取专属推广信息
  416. *
  417. * @param int $agent_id
  418. *
  419. * @return array
  420. */
  421. public function getSite($agent_id) {
  422. if (empty($agent_id)) {
  423. $_code = MemberStatus::INVALID_PARAMS;
  424. return $this->huoError($_code, MemberStatus::getMsg($_code));
  425. }
  426. $_agent_data = AgentCache::ins()->getInfoByAgentId($agent_id);
  427. if (empty($_agent_data)) {
  428. $_code = MemberStatus::UID_INVALID;
  429. return $this->huoError($_code, MemberStatus::getMsg($_code));
  430. }
  431. $_site['agent_id'] = $_agent_data['id'];
  432. $_site['site'] = $_agent_data['user_login'].'.'.H5DOMAIN;
  433. $_site['user_url'] = $_agent_data['user_url'];
  434. $_site['site_name'] = $_agent_data['site_name'];
  435. $_site['logo'] = $_agent_data['logo'];
  436. $_site['wx_qr'] = $_agent_data['wx_qr'];
  437. $_site['float_icon'] = $_agent_data['float_icon'];
  438. $_code = MemberStatus::NO_ERROR;
  439. return $this->huoError($_code, MemberStatus::getMsg($_code), $_site);
  440. }
  441. /**
  442. * @param int $agent_id
  443. * @param array $data
  444. *
  445. * @return array
  446. */
  447. public function editSite($agent_id, $data) {
  448. $_ac_class = AgentCache::ins();
  449. $_agent_data = $_ac_class->getInfoByAgentId($agent_id);
  450. if (empty($_agent_data)) {
  451. $_code = MemberStatus::UID_INVALID;
  452. return $this->huoError($_code, MemberStatus::getMsg($_code));
  453. }
  454. $_agent_data = array_merge($_agent_data, $data);
  455. $_rs = $_ac_class->updateAgent($agent_id, $_agent_data);
  456. if (false === $_rs) {
  457. $_code = MemberStatus::INNER_ERROR;
  458. return $this->huoError($_code, MemberStatus::getMsg($_code));
  459. }
  460. $_code = MemberStatus::NO_ERROR;
  461. return $this->huoError($_code, MemberStatus::getMsg($_code));
  462. }
  463. /**
  464. * 查找所有不存在父ID的玩家渠道id_name
  465. *
  466. * @param int $role_id
  467. *
  468. * @return array
  469. */
  470. public function getCpsIdName($role_id = 0) {
  471. $_map = [];
  472. if (!empty($role_id)) {
  473. $_map['role_id'] = $role_id;
  474. }
  475. $_map['parent_id'] = 1;
  476. $_map['user_status'] = CommonConst::STATUS_YES;
  477. $_rs = (new UserModel())->where($_map)->column("CONCAT(user_login,'(',user_nicename,')')", 'id');
  478. return $_rs;
  479. }
  480. }