123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- <?php
- /**
- * User: 乃火
- * Time: 2021/2/21 1:16 下午
- * QQ: 1123416584
- */
- namespace addons\notice\library;
- use addons\third\Third;
- use app\admin\model\Admin;
- use app\admin\model\AuthGroup;
- use app\admin\model\notice\AdminMptemplate;
- use app\common\model\User;
- use think\db\Query;
- use think\Hook;
- /**
- * 消息接收者处理
- * Class ToData
- *
- * @package addons\notice\library
- */
- class ToData
- {
- /**
- * 获取发送对象(可以自定义调整)
- */
- public static function get($event,$template, $params)
- {
- // 接收信息
- $toData = [
- 'to' => [],
- // 所有接收者id,根据这个创建消息记录
- 'to_id' => [],
- // 所有接收者email
- 'email' => [],
- // 触发消息者user
- 'user' => null,
- // 默认参数字段
- 'default_field' => [],
- // 接收模版消息(公众号)openid
- 'mptemplate_openid' => [],
- 'template' => $template,
- 'params' => $params
- ];
- $to = [];
- $mptemplateOpenid = [];
- // 找出user_id用户
- if (isset($params['user_id'])) {
- $user = User::get($params['user_id']);
- } else {
- $user = null;
- }
- // 前台通知
- if ($template['platform'] == 'user') {
- if ($user) {
- $to = [$user];
- }
- }
- // 后台通知
- if ($template['platform'] == 'admin') {
- $groupId = get_addon_config('notice')['only_admin_group_id'];
- if (!is_array($groupId)) {
- $groupId = explode(',', $groupId);
- $groupId = array_filter($groupId);
- }
- $receiver_admin_ids = $params['receiver_admin_ids'] ?? [];
- if (!is_array($receiver_admin_ids)) {
- $receiver_admin_ids = explode(',', $receiver_admin_ids);
- $receiver_admin_ids = array_filter($receiver_admin_ids);
- }
- $receiver_admin_group_ids = $params['receiver_admin_group_ids'] ?? [];
- if (!is_array($receiver_admin_group_ids)) {
- $receiver_admin_group_ids = explode(',', $receiver_admin_group_ids);
- $receiver_admin_group_ids = array_filter($receiver_admin_group_ids);
- }
- $groupId = array_merge($groupId, $receiver_admin_group_ids);
- if ($receiver_admin_ids) {
- $adminWhere = ['__TABLE__.id' => ['in', $receiver_admin_ids]];
- } else {
- $adminWhere = [];
- }
- if ($groupId) {
- $to = Admin::join('auth_group_access', 'auth_group_access.uid = id')
- ->where('group_id', 'in', $groupId)
- ->where($adminWhere)
- ->select();
- } else {
- $to = Admin::where($adminWhere)->select();
- }
- }
- // 判断是否为邮件发送
- if ($template['type'] == 'email') {
- $to = array_filter($to, function($row) {
- return $row['email'];
- });
- }
- // 判断是否为后台模版通知
- if ($template['type'] == 'mptemplate' && $template['platform'] == 'admin') {
- $adminMptemplateList = AdminMptemplate::where('admin_id', 'in', array_column($to, 'id'))->select();
- $adminMptemplateAdminIds = array_column($adminMptemplateList, 'admin_id');
- foreach ($to as $k=>$v) {
- if (!in_array($v['id'], $adminMptemplateAdminIds)) {
- unset($to[$k]);
- }
- }
- $to = array_values($to);
- $mptemplateOpenid = array_column($adminMptemplateList, 'openid');
- }
- // 判断是否为前台模版通知
- if ($template['type'] == 'mptemplate' && $template['platform'] == 'user') {
- // 有第三方登录表
- if (class_exists('\app\admin\model\Third')) {
- $userMptemplateList = \app\admin\model\Third::where('user_id', 'in', array_column($to, 'id'))
- ->where('platform', 'wechat')
- ->where(function(Query $query) {
- $query->where('apptype', 'mp')
- ->whereOr('apptype', '');
- })
- ->select();
- } else {
- $userMptemplateList = [];
- }
- $userMptemplateAdminIds = array_column($userMptemplateList, 'user_id');
- foreach ($to as $k=>$v) {
- if (!in_array($v['id'], $userMptemplateAdminIds)) {
- unset($to[$k]);
- }
- }
- $to = array_values($to);
- $mptemplateOpenid = array_column($userMptemplateList, 'openid');
- }
- if (count($to) == 0) {
- return_error('接收者不存在');
- }
- $toData['to'] = $to;
- $toData['mptemplate_openid'] = $mptemplateOpenid;
- $toData['email'] = array_column($to, 'email');
- $toData['to_id'] = array_column($to, 'id');
- $toData['user'] = $user;
- $toData['default_field'] = [
- 'user_id' => $user['id'] ?? '',
- 'user_nickname' => $user['nickname'] ?? '',
- 'user_email' => $user['email'] ?? '',
- 'user_mobile' => $user['mobile'] ?? '',
- 'createtime_text' => date('Y-m-d H:i:s'),
- 'createdate' => date('Y-m-d')
- ];
- Hook::listen('notice_to_data', $toData);
- return $toData;
- }
- }
|