Message.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <?php
  2. namespace app\admin\controller\send\summary;
  3. use app\admin\model\SendChannelMessage;
  4. use app\admin\model\SendMessage;
  5. use app\common\controller\Backend;
  6. use app\common\library\Redis;
  7. use app\main\constants\AdminConstants;
  8. use app\main\constants\ApiConstants;
  9. use app\main\constants\CacheConstants;
  10. use app\main\service\AdminService;
  11. use app\main\service\ApiService;
  12. use app\main\service\VisitLimitService;
  13. use think\Controller;
  14. use think\Request;
  15. /**
  16. * 群发消息-用户组管理
  17. *
  18. * @icon fa fa-circle-o
  19. */
  20. class Message extends Backend
  21. {
  22. /**
  23. * @var SendMessage
  24. */
  25. protected $model = null;
  26. /**
  27. * @var SendChannelMessage
  28. */
  29. protected $send_channel_message_model = null;
  30. public function _initialize()
  31. {
  32. parent::_initialize();
  33. if($this->auth->checkGroupId(AdminConstants::ADMIN_GROUP_ID_AGENT)){
  34. $is_distributor = AdminService::instance()->checkAdminIsDistributor($this->auth->id);
  35. // 如果登录用户仅仅是代理商,不是配号代理商
  36. if (!$is_distributor) {
  37. $this->error('您没有访问权限');
  38. }
  39. }
  40. $this->model = model('SendMessage');
  41. $this->send_channel_message_model = model('SendChannelMessage');
  42. }
  43. /**
  44. * 默认生成的控制器所继承的父类中有index/add/edit/del/multi五个方法
  45. * 因此在当前控制器中可不用编写增删改查的代码,如果需要自己控制这部分逻辑
  46. * 需要将application/admin/library/traits/Backend.php中对应的方法复制到当前控制器,然后进行修改
  47. */
  48. /**
  49. * 查看
  50. */
  51. public function index()
  52. {
  53. //设置过滤方法
  54. $this->request->filter(['strip_tags']);
  55. if ($this->request->isAjax())
  56. {
  57. //如果发送的来源是Selectpage,则转发到Selectpage
  58. if ($this->request->request('pkey_name'))
  59. {
  60. return $this->selectpage();
  61. }
  62. list($where, $sort, $order, $offset, $limit) = $this->buildparams();
  63. $sort = 'send_message.id';
  64. $map = ['send_message.admin_id' => $this->auth->id, 'send_message.send_status' => 5, 'send_message.message_status' => 1];
  65. //获取当前登录用户角色
  66. /*if ($this->auth->checkGroupId(AdminConstants::ADMIN_GROUP_ID_CHANNEL, $this->auth->id)) {
  67. $map = ['send_message.admin_id' => $this->auth->id];
  68. } elseif ($this->auth->checkGroupId(AdminConstants::ADMIN_GROUP_ID_VIP, $this->auth->id)) {
  69. $admin_id = AdminService::instance()->getVipAdminBindModel()->getChannelIds($this->auth->id);
  70. $admin_id_str = implode(",", $admin_id);
  71. $map = ['scm.channel_id' => ['in', $admin_id_str]];
  72. } else {
  73. $map = [];
  74. }*/
  75. $total = $this->model->where($where)->where($map)->order($sort, $order)->count();
  76. $list = $this->model->join('send_user_group', 'send_message.user_group_ids = send_user_group.id', 'left')
  77. ->field('send_message.*')
  78. ->field('send_user_group.group_type')
  79. ->where($where)
  80. ->where($map)
  81. ->order($sort, $order)
  82. ->limit($offset, $limit)
  83. ->select();
  84. if($list){
  85. $migrate = VisitLimitService::instance()->checkMigratedV2();
  86. $migrateData = [];
  87. if ($migrate) {
  88. $ids = [];
  89. foreach ($list as $k => $item) {
  90. $item_map = ['mass_id' => $item['id']];
  91. $ids = array_merge($ids, $this->send_channel_message_model->where($item_map)->column('id'));
  92. }
  93. $data = ApiService::instance()->getCollectFromApi(ApiConstants::API_ADVANCED_SEND, ['ids' => $ids])->data;
  94. foreach ($data as $item) {
  95. $migrateData[$item['sendChannelMessageId']] = [
  96. 'uv' => $item['uv'],
  97. 'today_uv' => $item['uvDay'],
  98. 'amount' => $item['money'],
  99. 'today_amount' => $item['moneyDay'],
  100. ];
  101. }
  102. }
  103. foreach ($list as $k => $item) {
  104. $item_map = ['mass_id' => $item['id']];
  105. $item_list = $this->send_channel_message_model->where($item_map)->select();
  106. $list[$k]['user_count'] = 0;
  107. $list[$k]['success_count'] = 0;
  108. $list[$k]['uv'] = 0;
  109. $list[$k]['today_uv'] = 0;
  110. $list[$k]['amount'] = 0;
  111. $list[$k]['today_amount'] = 0;
  112. if ($item_list) {
  113. foreach ($item_list as $sub_k => $sub_item) {
  114. $list[$k]['user_count'] += $sub_item['user_count'] ?? 0;
  115. $list[$k]['success_count'] += $sub_item['success_count'] ?? 0;
  116. if (!$migrate) {
  117. $redis_high_msg_uv = (int)Redis::instance()->get(CacheConstants::getHighMessageUvToDayKey($sub_item['id']));
  118. $redis_high_msg_amount = (float)Redis::instance()->get(CacheConstants::getHighMsgAmountToDayKey($sub_item['id']));
  119. $list[$k]['uv'] += $sub_item['uv'] ?? 0;
  120. $list[$k]['today_uv'] += $redis_high_msg_uv ?? 0;
  121. $list[$k]['amount'] = round($list[$k]['amount']+$sub_item['amount'] ?? 0, 2);
  122. $list[$k]['today_amount'] = round($list[$k]['today_amount'] + $redis_high_msg_amount ?? 0, 2);
  123. }else{
  124. if (array_key_exists($sub_item['id'], $migrateData)) {
  125. $list[$k]['uv'] += $migrateData[$sub_item['id']]['uv'];
  126. $list[$k]['today_uv'] += $migrateData[$sub_item['id']]['today_uv'];
  127. $list[$k]['amount'] = round($list[$k]['amount'] + $migrateData[$sub_item['id']]['amount'], 2);
  128. $list[$k]['today_amount'] = round($list[$k]['today_amount']+$migrateData[$sub_item['id']]['today_amount'], 2);
  129. }
  130. }
  131. }
  132. }
  133. }
  134. }
  135. $result = array("total" => $total, "rows" => $list);
  136. return json($result);
  137. }
  138. return $this->view->fetch();
  139. }
  140. }