Agent.php 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  1. <?php
  2. namespace app\admin\controller\auth;
  3. use app\common\controller\Backend;
  4. use app\common\library\Rabbitmq;
  5. use app\common\library\Redis;
  6. use app\common\utility\WeChatMenu;
  7. use app\main\helper\StringHelper;
  8. use app\main\service\AdminService;
  9. use app\main\service\GoodsService;
  10. use app\main\service\OfficialAccountsService;
  11. use fast\Random;
  12. use think\Log;
  13. use think\session;
  14. use app\main\constants\AdminConstants;
  15. /**
  16. * 管理员管理
  17. *
  18. * @icon fa fa-users
  19. * @remark 一个管理员可以有多个角色组,左侧的菜单根据管理员所拥有的权限进行生成
  20. */
  21. class Agent extends Backend
  22. {
  23. const SYNC_MQ_QUEUE_NAME = 'Q_SYNC_USER';
  24. const SYNC_MQ_EXCHANGE_NAME = 'E_SYNC_USER';
  25. /**
  26. * @var \app\common\model\Admin
  27. */
  28. protected $modelAdmin = null;
  29. protected $dataLimit = false;
  30. protected $childrenGroupIds = [];
  31. protected $searchFields = 'id,username,nickname';
  32. protected $relationSearch = true;
  33. protected $benefit;
  34. protected $authId;
  35. /**
  36. * 无需登录的方法,同时也就不需要鉴权了
  37. * @var array
  38. */
  39. protected $noNeedLogin = ['checkplatformauth'];
  40. public function _initialize()
  41. {
  42. parent::_initialize();
  43. $this->modelAdmin = model('Admin');
  44. $this->childrenGroupIds = $this->auth->getChildrenGroupIds($this->auth->isSuperAdmin() ? true : false);
  45. $this->view->assign("payMethodList", model('AdminExtend')->getPayMethodList());
  46. if(isset($_GET['ids']) && $_GET['ids']>0){
  47. $this->authId = $_GET['ids'];
  48. $this->assignconfig('ids',$this->authId);
  49. }else{
  50. $this->authId = $this->auth->id;
  51. $this->assignconfig('ids',0);
  52. }
  53. if (in_array($this->group,
  54. [
  55. AdminConstants::ADMIN_GROUP_ID_CHANNEL,
  56. AdminConstants::ADMIN_GROUP_ID_AGENT,
  57. AdminConstants::ADMIN_GROUP_ID_CUSTOMER_SERVICE,
  58. AdminConstants::ADMIN_GROUP_ID_OPERATOR,
  59. AdminConstants::ADMIN_GROUP_ID_VIP,
  60. AdminConstants::ADMIN_GROUP_ID_VIP_OPERATOR,
  61. ])) {
  62. $this->assignconfig("admin", ['id' => $this->authId]);
  63. $extends = model('Admin_extend')->where('admin_id', $this->authId)->find();
  64. $this->benefit = $extends->benefit;
  65. $this->assign('benefit', $this->benefit);
  66. $this->assignconfig('benefit', $this->benefit);
  67. }else{
  68. $this->assign('benefit', 1);
  69. $this->assignconfig('benefit', 1);
  70. }
  71. $this->assign('group',$this->group);
  72. $this->assignconfig('group',$this->group);
  73. }
  74. /**
  75. * 查看
  76. */
  77. public function index()
  78. {
  79. //今天
  80. $today = date('Ymd', time());
  81. //昨天
  82. $yesterday = date('Ymd', strtotime('-1 days'));
  83. $platformlist = model("platform")->getPlatformList();
  84. $ophosts = OfficialAccountsService::instance()->getOphostModel()
  85. ->where('status', 1)
  86. ->column('id, concat(id,"|",host,"\|",p_desc)');
  87. $wxpays = OfficialAccountsService::instance()->getWxpayModel()
  88. ->where('status', 1)
  89. ->column('id, concat(id," | ",pay_host," \| ",name,if(is_closure=\'1\',"(被封)",""))');
  90. $this->assignconfig('platforms',$platformlist);
  91. $this->assignconfig('ophosts',$ophosts);
  92. $this->assignconfig('wxpays',$wxpays);
  93. if ($this->request->isAjax()) {
  94. $channels = $this->modelAdmin->join('auth_group_access a', 'a.uid= admin.id')->where('a.group_id', 'neq', 4)->select();
  95. $cNames = [];
  96. foreach ($channels as $channel) {
  97. $cNames[$channel->id] = $channel->nickname;
  98. }
  99. // list($where, $sort, $order, $offset, $limit) = $this->buildparams();
  100. $filter = $this->request->get("filter", '');
  101. $sort = $this->request->get("sort", "id");
  102. $order = $this->request->get("order", "DESC");
  103. $offset = $this->request->get("offset", 0);
  104. $limit = $this->request->get("limit", 0);
  105. $filter = json_decode($filter, TRUE);
  106. $where = [];
  107. $idMap = [
  108. 'ophost'=>'ophost_id',
  109. 'wxpay'=>'wxpay_id',
  110. 'menuophost'=>'menuophost_id',
  111. 'menuwxpay_host'=>'menuwxpay_id',
  112. ];
  113. if($filter){
  114. foreach ($filter as $k => $v){
  115. if(array_key_exists($k, $idMap)){
  116. $where["ac.{$idMap[$k]}"] = $v;
  117. } elseif ($k == "admin.id" || $k == "admin_extend.reward_state" || $k == "ac.platform_id") {
  118. $where[$k] = $v;
  119. } elseif ($k == "status") {
  120. $where['admin.' . $k] = $v;
  121. } elseif ($k == "nickname" || $k == "username") {
  122. $where['admin.' . $k] = ['like', "%{$v}%"];
  123. } else {
  124. $where[$k] = ['like',"%{$v}%"];
  125. }
  126. }
  127. }
  128. $adminWhere = [];
  129. if (in_array($this->group, [
  130. AdminConstants::ADMIN_GROUP_ID_SUPER_ADMIN,
  131. AdminConstants::ADMIN_GROUP_ID_TECHNICAL_SUPPORT,
  132. AdminConstants::ADMIN_GROUP_ID_CONFIG_MANAGER
  133. ])) { //如果当前是超管
  134. $adminWhere['adminExtend.distribute'] = '1';
  135. }else{
  136. $adminWhere['adminExtend.create_by'] = $this->authId;
  137. }
  138. //dump($where);die;
  139. $total = $this->modelAdmin
  140. ->with("adminExtend")
  141. ->join("admin_config ac","admin.id = ac.admin_id","left")
  142. ->join('auth_group_access a', 'a.uid= admin.id')
  143. ->join('admin a2','a2.id=admin_extend.create_by', "LEFT")
  144. ->where($adminWhere)
  145. ->where($where)
  146. ->where('a.group_id', AdminConstants::ADMIN_GROUP_ID_AGENT)
  147. ->count();
  148. $list = $this->modelAdmin
  149. ->with("adminExtend")
  150. ->join("admin_config ac","admin.id = ac.admin_id","left")
  151. ->join('auth_group_access a', 'a.uid= admin.id')
  152. ->join('orders_collect o','o.admin_id = admin.id and o.type=3 and o.flag =1 and business_line="0"','left')
  153. ->join('admin_money m','m.admin_id = admin.id','left')
  154. ->join('admin a2','a2.id=admin_extend.create_by', "LEFT")
  155. ->where($where)
  156. ->where($adminWhere)
  157. ->where('a.group_id', AdminConstants::ADMIN_GROUP_ID_AGENT)
  158. ->field('o.id as oid,o.recharge_money as recharge_money,m.cash_money,m.count_cash_money,m.split_money,ac.is_fouce,ac.entryhost_id,ac.guide_domain,ac.platform_list,ac.appid,ac.qrcode_image,a2.id as create_id, a2.username as create_username, a2.nickname as create_nickname')
  159. ->order($sort, $order)
  160. ->limit($offset, $limit)
  161. ->select();
  162. $todayRes = $this->modelAdmin
  163. ->with("adminExtend")
  164. ->join("admin_config ac","admin.id = ac.admin_id","left")
  165. ->join('auth_group_access a','a.uid= admin.id')
  166. ->join('orders_collect o','o.admin_id = admin.id and o.type=1 and o.flag =1 and business_line="0" and o.createdate='.$today,'left')
  167. ->join('admin a2','a2.id=admin_extend.create_by', "LEFT")
  168. ->where($where)
  169. ->where($adminWhere)
  170. ->where('a.group_id',AdminConstants::ADMIN_GROUP_ID_AGENT)
  171. ->field('o.id as oid,o.recharge_money as recharge_money')
  172. ->order($sort, $order)
  173. ->limit($offset, $limit)
  174. ->select();
  175. $yesterdayRes = $this->modelAdmin
  176. ->with("adminExtend")
  177. ->join("admin_config ac","admin.id = ac.admin_id","left")
  178. ->join('auth_group_access a','a.uid= admin.id')
  179. ->join('orders_collect o','o.admin_id = admin.id and o.type=1 and o.flag =1 and business_line="0" and o.createdate='.$yesterday,'left')
  180. ->join('admin a2','a2.id=admin_extend.create_by', "LEFT")
  181. ->where($where)
  182. ->where($adminWhere)
  183. ->where('a.group_id',AdminConstants::ADMIN_GROUP_ID_AGENT)
  184. ->field('o.id as oid,o.recharge_money as recharge_money')
  185. ->order($sort, $order)
  186. ->limit($offset, $limit)
  187. ->select();
  188. foreach ($list as $k => &$v) {
  189. $v['no_cash_money'] = $v['benefit_money'] = 0;
  190. //未提现金额,结算单金额
  191. $money_collect = model('orders_collect')->sumCollect($v['id'],1,1, '20180101', date("Ymd"));
  192. if ($money_collect) {
  193. $v['benefit_money'] = $money_collect['recharge_money_benefit'];
  194. $v['no_cash_money'] = StringHelper::moneyFormat(($money_collect['recharge_money_benefit']*100-$v['cash_money']*100-$v['count_cash_money']*100 - $v['split_money']*100)/100);
  195. }
  196. $v['entryhost'] = "";
  197. $entryinfo = model("entryhost")->getinfo($v['entryhost_id']);
  198. if($entryinfo){
  199. $v['entryhost'] = $entryinfo['host'];
  200. }
  201. $adminconfiginfo = model("AdminConfig")->getAdminInfoAll($v['id']);
  202. $v['ophost'] = "";
  203. $v['wxpay'] = "";
  204. $v['menuophost'] = "";
  205. $v['menuwxpay_host'] = "";
  206. if($adminconfiginfo){
  207. $v['ophost'] = $adminconfiginfo['ophost_host'];
  208. $v['wxpay'] = $adminconfiginfo['wxpay_name']."-{$adminconfiginfo['wxpay_pay_host']}";
  209. if(isset($adminconfiginfo['menuophost']))
  210. $v['menuophost'] = $adminconfiginfo['menuophost'];
  211. if(isset($adminconfiginfo['menuwxpay_host']))
  212. $v['menuwxpay_host'] = $adminconfiginfo['menuwxpay_host'];
  213. }
  214. $v['platforms'] = "";
  215. if(!empty($v['platform_list'])){
  216. $platarr = explode(",",trim($v['platform_list'],","));
  217. foreach ($platformlist as $pk=>$pv){
  218. if(in_array($pv['id'],$platarr)){
  219. $token = model("ptoken")->getToken($pv['id'],$v['id']);
  220. if($token){
  221. $v['platforms'] .= $pv['name']."-已授权<br>";
  222. }else{
  223. $v['platforms'] .= $pv['name']."-未授权<br>";
  224. }
  225. }
  226. }
  227. }
  228. if(empty($v['platforms']))
  229. $v['platforms'] = "无";
  230. $v['admin_extend']['create_by'] = $cNames[$v['admin_extend']['create_by']];
  231. $v['today_recharge_money'] = $todayRes[$k]['recharge_money'];
  232. $v['yesterday_recharge_money'] = $yesterdayRes[$k]['recharge_money'];
  233. //短链接关联条数
  234. $v['short_relation_count'] = model('ShortRelation')->where(['admin_id'=>$v['id']])->count();
  235. //导粉链接关联条数
  236. $v['guide_relation_count'] = model('GuideRelation')->where(['admin_id'=>$v['id']])->count();
  237. }
  238. unset($v);
  239. $result = array("total" => $total, "rows" => $list);
  240. return json($result);
  241. }
  242. return $this->view->fetch();
  243. }
  244. /**
  245. * 代理商订单明细
  246. */
  247. /*public function orders($ids)
  248. {
  249. $ids = intval($ids);
  250. $userInfo = model('Admin')->get($ids);
  251. //$list = model('Orders')->join('User u', 'u.id=orders.user_id')->join('Book b', 'orders.book_id=b.id', 'LEFT')->where('orders.admin_id', $ids)->paginate(10);
  252. $list = model('Orders')
  253. ->join('User u', 'u.id=orders.user_id')
  254. ->join('Book b', 'orders.book_id=b.id', 'LEFT')
  255. ->where('orders.admin_id', $ids)
  256. ->field('u.id,orders.user_id,u.avatar,u.nickname,orders.payid,orders.money,orders.state,orders.kandian,orders.free_kandian,b.name,b.author,orders.createtime')
  257. ->order('orders.createtime','desc')
  258. ->paginate(10);
  259. // echo model('Orders')->getLastSql();
  260. if($list){
  261. foreach($list as $key=>$val){
  262. $list[$key]['createtime'] = date('Y-m-d H:i:s',$val['createtime']);
  263. }
  264. }
  265. $this->assign('list', $list);
  266. $this->assign('userInfo', $userInfo);
  267. //dump($list);
  268. return $this->view->fetch();
  269. }*/
  270. /**
  271. * 读者管理
  272. * @param $ids
  273. */
  274. public function users($ids)
  275. {
  276. header('location:/admin/auth/user/index?agent=' . $ids);
  277. }
  278. /**
  279. * 代理商数据统计
  280. */
  281. public function collect($ids)
  282. {
  283. $ids = intval($ids);
  284. $userInfo = model('Admin')->get($ids);
  285. $users = model('UserCollect')->where(['admin_id' => $ids, 'type' => 3])->find(); //用户统计
  286. $collect = model('OrdersCollect')->where(['admin_id' => $ids, 'type' => 3])->find(); //订单统计
  287. $this->assign('userInfo', $userInfo);
  288. $this->assign('users', $users);
  289. $this->assign('collect', $collect);
  290. return $this->view->fetch();
  291. }
  292. /**
  293. * 更多
  294. */
  295. public function more($ids)
  296. {
  297. $this->assign('ids', $ids);
  298. $this->assign('user', '/admin/auth/agent/users/ids/' . $ids);
  299. $this->assign('order', '/admin/auth/agent/orders/ids/' . $ids);
  300. return $this->view->fetch();
  301. }
  302. /**
  303. * 添加
  304. */
  305. public function add()
  306. {
  307. if ($this->request->isPost()) {
  308. $params = $this->request->post("row/a");
  309. $extends = $this->request->post("extend/a");
  310. if(!empty($extends['idcard_no'])){
  311. $flag = validateIDCard($extends['idcard_no']);
  312. if(!$flag){
  313. $this->error('身份证号不合法,请重新填写');
  314. }
  315. }
  316. if ($params) {
  317. $params['salt'] = Random::alnum();
  318. if (! AdminService::instance()->checkPassword($params['password'])){
  319. $this->error(AdminService::instance()->getPasswordRule());
  320. }
  321. $params['password'] = md5(md5($params['password']) . $params['salt']);
  322. $params['avatar'] = asset('/img/avatar.png'); //设置新管理员默认头像。
  323. $result = $this->modelAdmin->validate('Admin.add')->save($params);
  324. if ($result === false) {
  325. $this->error($this->modelAdmin->getError());
  326. }
  327. $group = $this->request->post("group/a");
  328. //过滤不允许的组别,避免越权
  329. $group = array_intersect($this->childrenGroupIds, $group);
  330. $dataset = [];
  331. foreach ($group as $value) {
  332. $dataset[] = ['uid' => $this->modelAdmin->id, 'group_id' => $value];
  333. }
  334. model('AuthGroupAccess')->insertAll($dataset);
  335. if ($extends) {
  336. $extends['admin_id'] = $this->modelAdmin->id;
  337. $extends['create_by'] = Session::get('admin')['id'];
  338. $res = model('Admin_extend')->save($extends);
  339. $redis = Redis::instance();
  340. $key = 'AE:'.$this->modelAdmin->id;
  341. $redis->del($key);
  342. if ($res === false) {
  343. $this->error(model('Admin_extend')->getError());
  344. }
  345. if(isset($extends['distribute']) && $extends['distribute']=='1'){
  346. $parentAdminConfig = model('AdminConfig')->where(['admin_id'=>Session::get('admin')['id']])->find();
  347. $adminData = [];
  348. $adminData['admin_id'] = $this->modelAdmin->id;
  349. $adminData['platform_list'] = $parentAdminConfig->platform_list;
  350. $adminData['platform_id'] = $parentAdminConfig->platform_id;
  351. $adminData['ophost_id'] = $parentAdminConfig->ophost_id;
  352. $adminData['wxpay_id'] = $parentAdminConfig->wxpay_id;
  353. $adminData['menuophost_id'] = $parentAdminConfig->menuophost_id;
  354. $adminData['menuwxpay_id'] = $parentAdminConfig->menuwxpay_id;
  355. $adminData['menu_platform_id'] = $parentAdminConfig->menu_platform_id;
  356. $adminData['fakeophost_id'] = $parentAdminConfig->fakeophost_id;
  357. $adminData['fakemenuophost_id'] = $parentAdminConfig->fakemenuophost_id;
  358. $adminData['unpay_tip'] = '1';
  359. $adminData['read_tip'] = '1';
  360. $adminData['ref_out_push'] = $parentAdminConfig->ref_out_push;
  361. $adminData['book_guide_chapter_idx'] = config('site.book_guide_chapter_idx');
  362. $adminData['createtime'] = time();
  363. $adminData['updatetime'] = time();
  364. $resultSql = model('AdminConfig')->insert($adminData);
  365. if ($resultSql === false)
  366. {
  367. $this->error(model('AdminConfig')->getError());
  368. }
  369. }
  370. }
  371. $this->success();
  372. }
  373. $this->error();
  374. }
  375. //判断是否显示配号
  376. $distr = '';
  377. if($this->group == 3){
  378. $ae = model('AdminExtend')->where('admin_id',$this->auth->id)->find();
  379. if(!empty($ae) && $ae->can_distribute == '1'){
  380. $distr = 1;
  381. }
  382. }
  383. $this->assign('distr',$distr);
  384. return $this->view->fetch();
  385. }
  386. /**
  387. * 检查平台信息
  388. * @param $config
  389. * @param $admin_data
  390. */
  391. private function checkedPlatform(&$config,&$admin_data){
  392. $admin_data = array_merge($config,$admin_data);
  393. if(!$ophost_id = $config['ophost_id'] ?? null){
  394. $this->error('业务域名不能为空');
  395. }
  396. if(!$wxpay_id = $config['wxpay_id'] ?? null){
  397. $this->error('支付域名不能为空');
  398. }
  399. $ophost = model('Ophost')->where('id',$ophost_id)->column('platform_id,host');
  400. if(!$menuophost_id = $config['menuophost_id'] ?? null){
  401. $this->error('菜单域名不能为空');
  402. }
  403. if(!$menuwxpay_id = $config['menuwxpay_id'] ?? null){
  404. $this->error('菜单支付域名不能为空');
  405. }
  406. $menu_ophost = model('Ophost')->where('id',$menuophost_id)->column('platform_id,host');
  407. //添加参数
  408. $admin_data['platform_id'] = key($ophost);
  409. $admin_data['menu_platform_id'] = key($menu_ophost);
  410. $admin_data['ophost_id'] = $ophost_id;
  411. $admin_data['wxpay_id'] = $wxpay_id;
  412. $admin_data['menuophost_id'] = $menuophost_id;
  413. $admin_data['menuwxpay_id'] = $menuwxpay_id;
  414. if($config['platform_list']){
  415. if(!in_array($admin_data['platform_id'],$config['platform_list'])){
  416. array_push($config['platform_list'],$admin_data['platform_id']);
  417. }
  418. }else{
  419. array_push($config['platform_list'],$admin_data['platform_id']);
  420. }
  421. $admin_data['platform_list'] = trim(implode(',',$config['platform_list']),',');
  422. //下单未充值时间间隔验证
  423. if(isset($admin_data['order_unrecharge_post_time'])){
  424. if($admin_data['order_unrecharge_post_time']<=0){
  425. $admin_data['order_unrecharge_post_time'] = 1;
  426. }
  427. if($admin_data['order_unrecharge_post_time']>31){
  428. $admin_data['order_unrecharge_post_time'] = 30;
  429. }
  430. }
  431. }
  432. /**
  433. * 编辑
  434. */
  435. public function edit($ids = null)
  436. {
  437. $row = $this->modelAdmin->get(['id' => $ids]);
  438. if (!$row) {
  439. $this->error(__('No Results were found'));
  440. }
  441. if ($this->request->isPost()) {
  442. //编辑处理
  443. $message = null;
  444. $params = $this->request->post("row/a");
  445. $extends = $this->request->post("extend/a");
  446. $config = $this->request->post("config/a");
  447. //身份证验证
  448. if(!empty($extends['idcard_no'])){
  449. $flag = validateIDCard($extends['idcard_no']);
  450. if(!$flag){
  451. $this->error('身份证号不合法,请重新填写');
  452. }
  453. }
  454. //修改Admin
  455. if($params){
  456. if ($params['password']) {
  457. if (! AdminService::instance()->checkPassword($params['password'])){
  458. $this->error(AdminService::instance()->getPasswordRule());
  459. }
  460. $params['salt'] = Random::alnum();
  461. $params['password'] = md5(md5($params['password']) . $params['salt']);
  462. AdminService::instance()->updateAdminSessionStatus($ids);
  463. } else {
  464. unset($params['password'], $params['salt']);
  465. }
  466. //自定义商品是否开启为否,则删除渠道商自定义商品信息,数据库+redis
  467. if ($config['custom_goods'] == 0) {
  468. GoodsService::instance()->delChannelGoodsList($row->id);
  469. }
  470. //这里需要针对username和email做唯一验证
  471. $adminValidate = \think\Loader::validate('Admin');
  472. $adminValidate->rule([
  473. 'username' => 'require|max:50|unique:admin,username,' . $row->id,
  474. 'email' => 'email|unique:admin,email,' . $row->id,
  475. ]);
  476. $result = $row->validate('Admin.edit')->save($params);
  477. if ($result === false) {
  478. $this->error($row->getError());
  479. }
  480. }
  481. //修改AdminExtend
  482. if ($extends) {
  483. $res = model('AdminExtend')->save($extends, ['admin_id' => $row->id]);
  484. $redis = Redis::instance();
  485. $key = 'AE:'.$row->id;
  486. $redis->del($key);
  487. if ($res === false) {
  488. $this->error(model('AdminExtend')->getError());
  489. }
  490. }
  491. //检查平台相关信息
  492. if($config){
  493. //推送开关 add at 2018-08-31 19:46:08
  494. $adminConfig['subscribe_tip'] = $config['subscribe_tip'] ?? '0';
  495. $adminConfig['sign_tip'] = $config['sign_tip'] ?? '0';
  496. $adminConfig['continueread_tip'] = $config['continueread_tip'] ?? '0';
  497. $adminConfig['unpay_tip'] = $config['unpay_tip'] ?? '0';
  498. $adminConfig['read_tip'] = $config['read_tip'] ?? '0';
  499. $adminConfig['update_tip'] = $config['update_tip'] ?? '0';
  500. $adminConfig['search_tip'] = $config['search_tip'] ?? '0';
  501. $adminConfig['timing_tip'] = $config['timing_tip'] ?? '0';
  502. $adminConfig['first_recharge_imgtext_post'] = $config['first_recharge_imgtext_post'] ?? '0';
  503. $adminConfig['order_unrecharge_post_time'] = (int)$config['order_unrecharge_post_time'] ?? 0;
  504. $adminConfig['wx_ad_state'] = $config['wx_ad_state'];
  505. //倒粉域名&短链域名 开关 -- 检测是否有关联的倒粉域名或者短链域名
  506. if(isset($config['guide_domain']) && $config['guide_domain']){
  507. if(!model('ShortRelation')->checkChannelRelation($row['id']) || !model('GuideRelation')->checkChannelRelation($row['id'])){
  508. $this->error('请先为代理商指派导粉域名和短链域名');
  509. }
  510. }
  511. //检查平台信息&设置要更新的参数
  512. $configCache = model('AdminConfig')->getAdminInfoAll($row['id']);
  513. $this->checkedPlatform($config,$adminConfig);
  514. //检查是否要刷新菜单
  515. if($adminConfig['platform_id'] != $configCache['platform_id'] || //平台不一致
  516. $adminConfig['ophost_id'] != $configCache['ophost_id'] || //业务域名不一致
  517. $adminConfig['menuophost_id'] != $configCache['menuophost_id'] //菜单域名不一致
  518. ){
  519. //推送微信菜单
  520. list($status,$message) = WeChatMenu::replaceChannelMenuById($row['id'],$adminConfig['menuophost_id'], $configCache['is_qrcode_menu']);
  521. if($status){
  522. $adminConfig['wx_menu'] = $message;
  523. $message = null;
  524. }
  525. }
  526. $res = model('AdminConfig')->save($adminConfig, ['admin_id' => $row->id]);
  527. if ($res === false) {
  528. $this->error(model('AdminConfig')->getError());
  529. }
  530. //清除redis缓存
  531. model('AdminConfig')->delAdminInfoAllCache($row['id']);
  532. }
  533. if($message){
  534. $this->success($message);
  535. }
  536. $this->success();
  537. }
  538. //展示处理
  539. $adminConfig = model('AdminConfig')->where('admin_id',$row['id'])->find();
  540. //AdminExtend
  541. $extends = model('Admin_extend')->where('admin_id', $row['id'])->find();
  542. //授权信息-重置 管理员&超管可见
  543. if($extends->distribute && (in_array($this->group,
  544. [
  545. AdminConstants::ADMIN_GROUP_ID_SUPER_ADMIN,
  546. AdminConstants::ADMIN_CONFIG_SUBSCRIBE_METHOD_GUID,
  547. AdminConstants::ADMIN_GROUP_ID_TECHNICAL_SUPPORT,
  548. AdminConstants::ADMIN_GROUP_ID_CONFIG_MANAGER
  549. ]))){
  550. $auth_platform_list = model("platform")->whereIn('id',$adminConfig['platform_list'])->select();
  551. foreach($auth_platform_list as $key => $val){
  552. $auth_platform_list[$key]['is_auth'] = false;
  553. if(model('Ptoken')->getToken($val['id'],$row['id'])){
  554. $auth_platform_list[$key]['is_auth'] = true;
  555. }
  556. }
  557. $this->assign('auth_json',$adminConfig['json']);
  558. $this->assign('auth_platform_list',$auth_platform_list);
  559. $sync = model('SyncUser')->where(['admin_id'=>$row['id'],'appid'=>$adminConfig['appid']])->find();
  560. $this->assign('sync',$sync);
  561. }
  562. $canEditDomain = in_array($this->group, [
  563. AdminConstants::ADMIN_GROUP_ID_SUPER_ADMIN,
  564. AdminConstants::ADMIN_GROUP_ID_TECHNICAL_SUPPORT,
  565. AdminConstants::ADMIN_GROUP_ID_CONFIG_MANAGER
  566. ]);
  567. $this->assign('can_edit_domain', $canEditDomain);
  568. //平台配置信息 超管可见
  569. if($extends->distribute && (in_array($this->group,
  570. [
  571. AdminConstants::ADMIN_GROUP_ID_SUPER_ADMIN,
  572. AdminConstants::ADMIN_GROUP_ID_TECHNICAL_SUPPORT,
  573. AdminConstants::ADMIN_GROUP_ID_CONFIG_MANAGER
  574. ]))){
  575. //检查渠道平台列表
  576. if(!$adminConfig['platform_list']){
  577. $this->error('没有平台信息');
  578. }
  579. //获取全部平台列表
  580. $platform_lists = model('Platform')->getPlatformList();
  581. //检查渠道是否授权全部平台
  582. $channel_is_auth = model('Ptoken')->checkChannelIsAuth($adminConfig['platform_list'],$row['id']);
  583. //获取业务域名列表与支付域名列表
  584. if($channel_is_auth){
  585. $channelAuthPlatformId = model('Platform')->getChannelHaveAuthorizedPlatformId($adminConfig['admin_id'],$adminConfig['platform_list']);
  586. }else{
  587. $channelAuthPlatformId = $adminConfig['platform_list'];
  588. }
  589. $ophost_list = model("ophost")->getListFormatByPlatformId($channelAuthPlatformId);
  590. $wxpay_list = model("wxpay")->getListFormatByPlatformId();
  591. $menu_wxpay_list = model("wxpay")->getListFormatByPlatformId();
  592. //关联短链域名数量
  593. $row['short_relation_count'] = model('ShortRelation')->getRelationCount($row['id']);
  594. //关联导粉域名数量
  595. $row['guide_relation_count'] = model('GuideRelation')->getRelationCount($row['id']);
  596. //虚假域名
  597. $fake_ophost_list = $fake_menuophost_list =model("VirtualDomain")->getFakeophostList();
  598. //
  599. $this->assign("row", $row);
  600. $this->assign('platforms',$platform_lists);
  601. $this->assign('plist',explode(',',$adminConfig['platform_list']));
  602. $this->assign('adminConfigs',$adminConfig);
  603. $this->assign('platform_id',$adminConfig['platform_id']);
  604. $this->assign('ophost_list',$ophost_list);
  605. $this->assign('wxpay_list',$wxpay_list);
  606. $this->assign('menu_wxpay_list',$menu_wxpay_list);
  607. $this->assign('fake_menuophost_list',$fake_menuophost_list);
  608. $this->assign('fake_ophost_list',$fake_ophost_list);
  609. $this->assign('extends',$extends);
  610. $this->assignconfig('admin_id',$adminConfig['admin_id']);
  611. $this->assignconfig('channel_is_auth',$channel_is_auth);
  612. }
  613. $this->assign('extends', $extends);
  614. $this->assign("row", $row);
  615. return $this->view->fetch();
  616. }
  617. /**
  618. * 重置服务号
  619. */
  620. public function re(){
  621. $admin_id = $this->request->param('admin_id');
  622. /**
  623. * 清除旧配置
  624. */
  625. if(!$adminConfig = model('AdminConfig')->get(['admin_id' => $admin_id])){
  626. $this->error('获取信息失败');
  627. }
  628. $adminInfo = collection($adminConfig)->toArray();
  629. $token = collection(model('Ptoken')->where(['admin_id'=>$admin_id])->select())->toArray();
  630. Log::info('Reset WeChat Config Data:'.var_export(['admin_config'=>$adminInfo,'ptoken'=>$token],true));
  631. $data = [
  632. 'secret' => null,
  633. 'appid' => null,
  634. 'json' => null,
  635. 'txt' => null,
  636. 'refresh_token' => null,
  637. 'wx_menu' => null,
  638. 'is_auth' => 0,
  639. 'wx_ad_source_id' => 0,
  640. 'wx_ad_state' => 0,
  641. 'qrcode_image' => null
  642. ];
  643. if(false === model('Ptoken')->where(['admin_id'=>$admin_id])->delete()){
  644. $this->error('删除Token数据失败');
  645. }
  646. if(false === $adminConfig->save($data)){
  647. $this->error('清除授权配置信息失败');
  648. }
  649. $redis = Redis::instance();
  650. model('AdminConfig')->delAdminInfoAllCache($admin_id);
  651. $redis->del('AA:' . $adminConfig['appid']);
  652. $this->success('重置成功');
  653. }
  654. /**
  655. * 同步微信用户
  656. */
  657. public function sync(){
  658. $admin_id = $this->request->param('admin_id');
  659. if(!$admin_id){
  660. $this->error('获取用户ID错误');
  661. }
  662. if(!$adminConfig = model('AdminConfig')->getAdminInfoAll($admin_id)){
  663. $this->error('获取渠道信息错误');
  664. }
  665. $mq = new Rabbitmq();
  666. $mq->send(['channel_id'=>$admin_id,'appid'=>$adminConfig['appid']],self::SYNC_MQ_QUEUE_NAME,self::SYNC_MQ_EXCHANGE_NAME);
  667. Log::info('syncUser->Queue: Channel_id:'.$admin_id.' AppID:'.$adminConfig['appid'].' 添加微信用户同步任务');
  668. $this->success('微信用户同步任务添加成功');
  669. }
  670. /**
  671. * 删除
  672. */
  673. public function del($ids = "")
  674. {
  675. if ($ids) {
  676. // 避免越权删除管理员
  677. $childrenGroupIds = $this->childrenGroupIds;
  678. $adminList = $this->modelAdmin->where('id', 'in', $ids)->where('id', 'in', function ($query) use ($childrenGroupIds) {
  679. $query->name('auth_group_access')->where('group_id', 'in', $childrenGroupIds)->field('uid');
  680. })->select();
  681. if ($adminList) {
  682. $deleteIds = [];
  683. foreach ($adminList as $k => $v) {
  684. $deleteIds[] = $v->id;
  685. }
  686. $deleteIds = array_diff($deleteIds, [$this->authId]);
  687. if ($deleteIds) {
  688. $this->modelAdmin->where('id', 'in', $deleteIds)->update(['status' => 'hidden']);
  689. //$this->modelAdmin->destroy($deleteIds);
  690. //model('AuthGroupAccess')->where('uid', 'in', $deleteIds)->delete();
  691. $this->success();
  692. }
  693. }
  694. }
  695. $this->error();
  696. }
  697. /**
  698. * 选择(多选)
  699. * @return string|\think\response\Json
  700. */
  701. public function select()
  702. {
  703. if ($this->request->isAjax()) {
  704. return $this->index();
  705. }
  706. return $this->view->fetch();
  707. }
  708. /**
  709. * 批量更新
  710. * @internal
  711. */
  712. public function multi($ids = "")
  713. {
  714. // 管理员禁止批量操作
  715. $this->error();
  716. }
  717. }