Guidechannel.php 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. <?php
  2. namespace app\admin\controller;
  3. use app\common\controller\Backend;
  4. use app\common\library\Redis;
  5. use think\Controller;
  6. use think\Request;
  7. /**
  8. * 倒粉域名与渠道关联管理
  9. *
  10. * @icon fa fa-circle-o
  11. */
  12. class Guidechannel extends Backend
  13. {
  14. /**
  15. * GuideRelation模型对象
  16. */
  17. protected $model = null;
  18. /**
  19. * 是否开启Validate验证
  20. */
  21. protected $modelValidate = true;
  22. /**
  23. * 初始化
  24. */
  25. public function _initialize()
  26. {
  27. parent::_initialize();
  28. $this->model = model('GuideRelation');
  29. $this->assign('guide_hosts',$this->model->getHostName());
  30. }
  31. /**
  32. * 查看
  33. *
  34. * @author liues@dianzhong.com
  35. * @date 2018-08-16 11:44:18
  36. * @return html|json
  37. */
  38. public function index()
  39. {
  40. //设置过滤方法
  41. $this->request->filter(['strip_tags']);
  42. if ($this->request->isAjax())
  43. {
  44. //如果发送的来源是Selectpage,则转发到Selectpage
  45. if ($this->request->request('pkey_name'))
  46. {
  47. return $this->selectpage();
  48. }
  49. list($where, $sort, $order, $offset, $limit) = $this->buildparams(null, true);
  50. $total = $this->model->alias('gr')
  51. ->field('gr.*,a.username as username,gd.host as host')
  52. ->join('admin a','a.id=gr.admin_id', 'LEFT')
  53. ->join('admin_extend ae','ae.admin_id=a.id', "LEFT")
  54. ->join('auth_group_access ag','ag.uid= a.id', "LEFT")
  55. ->join('admin a2','a2.id=ae.create_by', "LEFT")
  56. ->join('guide_domain gd','gd.id=gr.domain_id', 'LEFT')
  57. ->where(['ag.group_id' => 3])
  58. ->where($where)
  59. ->order($sort, $order)
  60. ->group('gr.admin_id')
  61. ->count();
  62. $fields = implode(',', [
  63. 'gr.*',
  64. 'GROUP_CONCAT(gr.id) AS id',
  65. 'a.username as username',
  66. 'a.nickname as nickname',
  67. 'ae.create_by',
  68. 'a2.username as create_username',
  69. 'a2.nickname as create_nickname',
  70. 'GROUP_CONCAT(gd.id) AS hostid_concat',
  71. 'GROUP_CONCAT(gd.host) AS host_concat',
  72. 'GROUP_CONCAT(FROM_UNIXTIME(gr.createtime)) AS createtime_concat',
  73. 'GROUP_CONCAT(FROM_UNIXTIME(gr.updatetime)) AS updatetime_concat'
  74. ]);
  75. $list = $this->model->alias('gr')
  76. ->field($fields)
  77. ->join('admin a','a.id=gr.admin_id', 'LEFT')
  78. ->join('admin_extend ae','ae.admin_id=a.id', "LEFT")
  79. ->join('auth_group_access ag','ag.uid= a.id', "LEFT")
  80. ->join('admin a2','a2.id=ae.create_by', "LEFT")
  81. ->join('guide_domain gd','gd.id=gr.domain_id', 'LEFT')
  82. ->where(['ag.group_id' => 3])
  83. ->where($where)
  84. ->order($sort, $order)
  85. ->group('gr.admin_id')
  86. ->limit($offset, $limit)
  87. ->select();
  88. //渠道商开户人列表
  89. $create_list = $offset<=0 ? model('Admin')->getListByGroup(2, [], 'admin.id,admin.username,admin.nickname') : [];
  90. $result = array("total" => $total, "rows" => $list, "create_list" => $create_list);
  91. return json($result);
  92. }
  93. return $this->view->fetch();
  94. }
  95. /**
  96. * 添加/批量添加
  97. *
  98. * @author liues@dianzhong.com
  99. * @date 2018-08-16 13:30:34
  100. * @return html|json
  101. */
  102. public function add()
  103. {
  104. if ($this->request->isPost())
  105. {
  106. $hostIds = array_filter($this->request->post('host_ids/a'));
  107. $channelIds = array_filter($this->request->post('channel_ids/a'));
  108. if(!empty($hostIds) && !empty($channelIds))
  109. {
  110. $params = array();
  111. foreach ($hostIds as $hostId)
  112. {
  113. foreach($channelIds as $channelId)
  114. {
  115. $exists = model('GuideRelation')->where(['admin_id'=>$channelId,'domain_id'=>$hostId])->find();
  116. if(empty($exists))
  117. {
  118. $params[] = ['admin_id' => $channelId, 'domain_id' => $hostId];
  119. }
  120. }
  121. }
  122. try
  123. {
  124. //是否采用模型验证
  125. if ($this->modelValidate)
  126. {
  127. $name = basename(str_replace('\\', '/', get_class($this->model)));
  128. $validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : true) : $this->modelValidate;
  129. $this->model->validate($validate);
  130. }
  131. $result = $this->model->allowField(true)->saveAll($params);
  132. if ($result !== false)
  133. {
  134. $this->success();
  135. }
  136. else
  137. {
  138. $this->error($this->model->getError());
  139. }
  140. }
  141. catch (\think\exception\PDOException $e)
  142. {
  143. $this->error($e->getMessage());
  144. }
  145. }
  146. $this->error('请选择相应的关联关系');
  147. }
  148. else
  149. {
  150. $rows = $this->request->get('rows/a');
  151. //域名列表
  152. $where = ['status'=>'1'];
  153. if($rows['host']){
  154. $where['host'] = ['LIKE', sprintf('%%%s%%', $rows['host'])];
  155. }
  156. $hosts = model('GuideDomain')
  157. ->field('id,host,status')
  158. ->where($where)
  159. ->order('id', 'desc')
  160. ->select();
  161. $this->assign('hosts', $hosts);
  162. //渠道商列表
  163. $where = ['admin.status'=>'normal','ag.group_id' => 3];
  164. if(isset($rows['channel_id']) && !empty($rows['channel_id'])){
  165. $where['admin.id'] = ['=', $rows['channel_id']];
  166. }
  167. if(isset($rows['channel_username']) && !empty($rows['channel_username'])){
  168. $where['admin.username'] = ['LIKE', sprintf('%%%s%%', $rows['channel_username'])];
  169. }
  170. if(isset($rows['channel_nickname']) && !empty($rows['channel_nickname'])){
  171. $where['admin.nickname'] = ['LIKE', sprintf('%%%s%%', $rows['channel_nickname'])];
  172. }
  173. if(isset($rows['create_id']) && !empty($rows['create_id'])){
  174. $where['ae.create_by'] = ['=', $rows['create_id']];
  175. }
  176. $channels = model('Admin')
  177. ->field('admin.id,admin.username,admin.nickname,admin.status,ae.create_by,a2.username as create_username,a2.nickname as create_nickname')
  178. ->join('admin_extend ae','ae.admin_id=admin.id', "LEFT")
  179. ->join('admin a2','a2.id=ae.create_by', "LEFT")
  180. ->join('auth_group_access ag','ag.uid= admin.id', "LEFT")
  181. ->where($where) //3渠道商
  182. ->order('admin.id', 'desc')
  183. ->select();
  184. $this->assign('channels', $channels);
  185. //渠道商开户人列表
  186. $create_list = model('Admin')->getListByGroup(2, [], 'admin.id,admin.username,admin.nickname');
  187. $this->assign('create_list', $create_list);
  188. $this->assign('rows', $rows);
  189. return $this->view->fetch();
  190. }
  191. }
  192. /**
  193. * 编辑
  194. *
  195. * @author liues@dianzhong.com
  196. * @date 2018-08-16 13:30:53
  197. * @return html|json
  198. */
  199. public function edit($ids = NULL)
  200. {
  201. $this->error('请删除对应项,重新绑定');
  202. }
  203. /**
  204. * 删除
  205. */
  206. public function del($ids = "")
  207. {
  208. if ($ids)
  209. {
  210. $pk = $this->model->getPk();
  211. // $adminIds = $this->getDataLimitAdminIds();
  212. // if (is_array($adminIds))
  213. // {
  214. // $count = $this->model->where($this->dataLimitField, 'in', $adminIds);
  215. // }
  216. $list = $this->model->where($pk, 'in', $ids)->select();
  217. $count = 0;
  218. // 组合一个admin_id为key的二维数组,value为domain_id一维数组
  219. $guideRelationAdmin = [];
  220. foreach ($list as $k => $v) {
  221. $guideRelationAdmin[$v['admin_id']][] = $v['domain_id'];
  222. }
  223. foreach ($guideRelationAdmin as $k => $v) {
  224. if (!model('GuideRelation')->where(['admin_id' => $k])->where('domain_id', 'not in', $v)->find()) { //除此短链外,没有任何其他短链了
  225. model('AdminConfig')->where(['admin_id' => $k])->update(['guide_domain' => '0']);
  226. model('AdminConfig')->delAdminInfoAllCache($k);
  227. }
  228. }
  229. foreach ($list as $k => $v)
  230. {
  231. $count += $v->delete();
  232. }
  233. if ($count)
  234. {
  235. $this->success();
  236. }
  237. else
  238. {
  239. $this->error(__('No rows were deleted'));
  240. }
  241. }
  242. $this->error(__('Parameter %s can not be empty', 'ids'));
  243. }
  244. }