| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484 |
- <?php
- // +----------------------------------------------------------------------
- // | Description: 站内信
- // +----------------------------------------------------------------------
- // | Author: ymob
- // +----------------------------------------------------------------------
- namespace app\admin\model;
-
- use app\admin\model\ImportRecord as ImportRecordModel;
- use app\admin\model\User as UserModel;
- use app\crm\model\Contract as ContractModel;
- use app\crm\model\Invoice;
- use app\crm\model\Receivables as ReceivablesModel;
- use app\oa\model\Announcement as AnnouncementModel;
- use app\oa\model\Event as EventModel;
- use app\oa\model\Examine as ExamineModel;
- use app\oa\model\ExamineCategory;
- use app\oa\model\Log as LogModel;
- use app\work\model\Task as TaskModel;
-
- class Message extends Common
- {
- protected $name = 'admin_message';
-
- protected $autoWriteTimestamp = true;
- protected $createTime = 'send_time';
- protected $updateTime = false;
-
- /**
- * 错误信息
- */
- public $error = '';
-
- /**
- * 将要发送的消息内容
- */
- protected $content = '';
-
- /**
- * 消息类型
- */
- protected $type = 0;
-
- /**
- * 任务分配
- */
- const TASK_ALLOCATION = 1;
- /**
- * 任务邀请
- */
- const TASK_INVITE = 2;
- /**
- * 任务结束
- */
- const TASK_OVER = 3;
- /**
- * 回复日志
- */
- const LOG_REPLAY = 4;
- /**
- * 发送日志
- */
- const LOG_SEND = 5;
- /**
- * 审批待处理
- */
- const EXAMINE_TO_DO = 6;
- /**
- * 审批驳回
- */
- const EXAMINE_REJECT = 7;
- /**
- * 审批通过
- */
- const EXAMINE_PASS = 8;
- /**
- * 公告
- */
- const NOTICE_MESSAGE = 9;
- /**
- * 日程
- */
- const EVENT_MESSAGE = 10;
- /**
- * 合同待审批
- */
- const CONTRACT_TO_DO = 11;
- /**
- * 合同审批驳回
- */
- const CONTRACT_REJECT = 12;
- /**
- * 合同审批通过
- */
- const CONTRACT_PASS = 13;
- /**
- * 回款待审批
- */
- const RECEIVABLES_TO_DO = 14;
- /**
- * 回款审批驳回
- */
- const RECEIVABLES_REJECT = 15;
- /**
- * 回款审批通过
- */
- const RECEIVABLES_PASS = 16;
- /**
- * 客户导入
- */
- const IMPORT_CUSTOMER = 17;
- /**
- * 联系人
- */
- const IMPORT_CONTACTS = 18;
- /**
- * 线索
- */
- const IMPORT_LEADS = 19;
- /**
- * 产品
- */
- const IMPORT_PRODUCT = 20;
- /**
- * 团队成员-客户
- */
- const TEAM_CUSTOMER = 21;
- /**
- * 团队成员-商机
- */
- const TEAM_BUSINESS = 22;
- /**
- * 团队成员-合同
- */
- const TEAM_CONTRACT = 23;
- /**
- * 发票待审批
- */
- const INVOICE_TO_DO = 24;
- /**
- * 发票审批驳回
- */
- const INVOICE_REJECT = 25;
- /**
- * 发票审批通过
- */
- const INVOICE_PASS = 26;
- /**
- * 项目任务导入
- */
- const IMPORT_TASK = 27;
- /**
- * 退出商机团队
- */
- const BUSINESS_PASS = 28;
- /**
- * 退出客户团队
- */
- const CUSTOMER_PASS = 29;
- /**
- * 退出合同团队
- */
- const CONTRACT_END = 30;
- /**
- * 移除团队成员
- */
- const TEAM_END = 31;
- /**
- * 移除队成员
- */
- const TEAM_LEADS = 32;
- /**
- * 消息类型
- *
- * @var array
- * @author Ymob
- * @datetime 2019-10-17 15:27:43
- */
- protected $typeList = [
- 1 => [
- 'template' => '{from_user} 将 {title} 任务分配给您,请及时查看。',
- ],
- 2 => [
- 'template' => '{from_user} 邀请您参与 {title} 任务,请及时查看。',
- ],
- 3 => [
- 'template' => '{from_user} 将 {title} 任务标记结束。',
- ],
- 4 => [
- 'template' => '{from_user} 回复了您的 {title} 日志:“今天工作状态不错,继续加油!”,请及时查看',
- ],
- 5 => [
- 'template' => '{from_user} 将日志 {title} 发送给您,请及时查看。',
- ],
- 6 => [
- 'template' => '{from_user} 提交 {title} 审批,请及时处理。',
- ],
- 7 => [
- 'template' => '{from_user} 拒绝您的 {title} 审批,拒绝理由:“日期填写错误”,请及时处理。',
- ],
- 8 => [
- 'template' => '{from_user} 已经审核通过您的 {title} ,请及时查看。',
- ],
- 9 => [
- 'template' => '您有一个新公告 {title} ,请及时查看。',
- ],
- 10 => [
- 'template' => '{from_user} 邀请您参与 {title} 日程,将于**分钟后开始,请及时查看。',
- ],
- 11 => [
- 'template' => '{from_user} 提交 {title} 合同审批待您处理,请及时查看。',
- ],
- 12 => [
- 'template' => '{from_user} 拒绝您的 {title} 合同审批,拒绝理由:“日期填写错误”,请及时处理。',
- ],
- 13 => [
- 'template' => '{from_user} 已经审核通过您的 {title} 合同,请及时查看',
- ],
- 14 => [
- 'template' => '{from_user} 提交 {title} 回款审批待您处理,请及时查看。',
- ],
- 15 => [
- 'template' => '{from_user} 拒绝您的 {title} 回款审批,拒绝理由:“日期填写错误”,请及时处理。',
- ],
- 16 => [
- 'template' => '{from_user} 已经审核通过您的 {title} 回款,请及时查看。',
- ],
- 17 => [
- // 'template' => '{from_user} 导入客户数据,共 {total} 条,已导入 {done} 条 , 成功 {success} 条, 覆盖 {cover} 条, 失败 {error} 条。',
- 'template' => '{total},{cover},{success},{error}',
- ],
- 18 => [
- // 'template' => '{from_user} 导入联系人数据,共 {total} 条,已导入 {done} 条 , 成功 {success} 条, 覆盖 {cover} 条, 失败 {error} 条。',
- 'template' => '{total},{cover},{success},{error}',
- ],
- 19 => [
- // 'template' => '{from_user} 导入线索数据,共 {total} 条,已导入 {done} 条 , 成功 {success} 条, 覆盖 {cover} 条, 失败 {error} 条。',
- 'template' => '{total},{cover},{success},{error}',
- ],
- 20 => [
- // 'template' => '{from_user} 导入产品数据,共 {total} 条,已导入 {done} 条 , 成功 {success} 条, 覆盖 {cover} 条, 失败 {error} 条。',
- 'template' => '{total},{cover},{success},{error}',
- ],
- 21 => [
- 'template' => '{from_user} 将您添加为客户 {title} 的成员。',
- ],
- 22 => [
- 'template' => '{from_user} 将您添加为商机 {title} 的成员。',
- ],
- 23 => [
- 'template' => '{from_user} 将您添加为合同 {title} 的成员。',
- ],
- 24 => [
- 'template' => '{from_user} 提交 {title} 发票审批待您处理,请及时查看。',
- ],
- 25 => [
- 'template' => '{from_user} 拒绝您的 {title} 发票审批,请及时处理。',
- ],
- 26 => [
- 'template' => '您的 {title} 发票已经审批通过,请及时查看。',
- ],
- 27 => [
- // 'template' => '{date},{from_user} 导入任务,共 {total} 条,已导入 {done} 条 , 成功 {success} 条, 覆盖 {cover} 条, 失败 {error} 条。{title}',
- 'template' => '{total},{cover},{success},{error}',
- ],
- 28 => [
- 'template' => '{from_user} 退出了您商机 {title} 的团队。',
- ],
- 29 => [
- 'template' => '{from_user} 退出了您客户 {title} 的团队。',
- ],
-
- 30 => [
- 'template' => '{from_user} 退出了您合同 {title} 的团队。',
- ],
- 31 => [
- 'template' => '将{from_user} 移除了您 {title} 的团队。',
- ],
- 32 => [
- 'template' => '{from_user} 将您添加为线索 {title} 的成员。',
- ],
- ];
-
- /**
- * 消息类型分组
- */
- public static $typeGroup = [
- 'announcement' => [
- self::NOTICE_MESSAGE,
- ],
- 'examine' => [
- self::EXAMINE_TO_DO,
- self::EXAMINE_REJECT,
- self::EXAMINE_PASS,
- ],
- 'task' => [
- self::TASK_ALLOCATION,
- self::TASK_INVITE,
- self::TASK_OVER,
- self::IMPORT_TASK,
- ],
- 'log' => [
- self::LOG_REPLAY,
- self::LOG_SEND,
- ],
- 'event' => [
- self::EVENT_MESSAGE,
- ],
- 'crm' => [
- self::CONTRACT_TO_DO,
- self::CONTRACT_REJECT,
- self::CONTRACT_PASS,
- self::RECEIVABLES_TO_DO,
- self::RECEIVABLES_REJECT,
- self::RECEIVABLES_PASS,
- self::IMPORT_CUSTOMER,
- self::IMPORT_CONTACTS,
- self::IMPORT_LEADS,
- self::IMPORT_PRODUCT,
- self::TEAM_CUSTOMER,
- self::TEAM_BUSINESS,
- self::TEAM_CONTRACT,
- self::INVOICE_TO_DO,
- self::INVOICE_REJECT,
- self::INVOICE_PASS,
- self::BUSINESS_PASS,
- self::CUSTOMER_PASS,
- self::CONTRACT_END,
- ]
- ];
-
- /**
- * 发送系统通知
- *
- * @param int $type 消息类型
- * @param array $data 关联信息
- * @param array|int $user_id 接收消息员工ID
- * @param boolean $system 是否系统消息
- * @return bool
- * @author Ymob
- * @datetime 2019-10-17 17:23:05
- */
- public function send($type, $data, $user_id_list, $system = false)
- {
- if (!isset($this->typeList[$type])) {
- $this->error = '消息类型错误';
- return false;
- }
- $user_id_list = (array)$user_id_list;
- $user_id_list = array_unique(array_filter($user_id_list));
- if (empty($user_id_list)) {
- $this->error = '接收人不能为空';
- return false;
- }
-
- $action_id = $data['action_id'];
- $title = $data['title'];
- $content = $this->typeList[$type]['template'];
- foreach ($data as $key => $val) {
- $content = str_replace('{' . $key . '}', $val, $content);
- }
- $advance_time= $data['advance_time'];
- $content = str_replace('{from_user}', User::userInfo('realname'), $content);
- $content = str_replace('{date}', date('Y-m-d'), $content);
- $data = [];
- $data['type'] = $type;
- $data['content'] = $content;
- $data['action_id'] = $action_id;
- $data['read_time'] = 0;
- $data['from_user_id'] = $system ? 0 : User::userInfo('id');
- $data['title'] = $title;
- $data['advance_time'] = $advance_time ?: 0;
- $request = request();
- $data['controller_name'] = strtolower($request->controller());
- $data['module_name'] = strtolower($request->module());
- $data['action_name'] = strtolower($request->action());
-
- $from_user_id = $data['from_user_id'];
- if (!in_array($type,[9,17,18,19,20,27])) {
- $user_id_list = array_filter($user_id_list, function ($val) use ($from_user_id) {
- return $val !== $from_user_id;
- });
- }
-
- $all_data = [];
- foreach ($user_id_list as $user_id) {
- $temp = $data;
- $temp['to_user_id'] = $user_id;
- $all_data[] = $temp;
- }
- if (!empty($from_user_id) && class_exists('DingTalk')) {
- (new Dingtalk())->message($user_id_list, $content);
- }
- $this->saveAll($all_data);
- }
-
- /**
- * 获取关联模块数据
- *
- * @author Ymob
- * @datetime 2019-10-22 15:34:35
- */
- public function getRelationTitleAttr($val, $data)
- {
- switch ($data['type']) {
- // 任务
- case self::TASK_ALLOCATION:
- case self::TASK_INVITE:
- case self::TASK_OVER:
- return TaskModel::where(['task_id' => $data['action_id']])->value('name') ?: '';
-
- // 日志
- case self::LOG_REPLAY:
- case self::LOG_SEND:
- return LogModel::where(['log_id' => $data['action_id']])->value('title') ?: '';
-
- // 审批
- case self::EXAMINE_TO_DO:
- case self::EXAMINE_REJECT:
- case self::EXAMINE_PASS:
- $category_id = ExamineModel::where(['examine_id' => $data['action_id']])->value('category_id') ?: 0;
- $categoryInfo = (new ExamineCategory())->getDataById($category_id);
- return $categoryInfo['title'];
-
- // 公告
- case self::NOTICE_MESSAGE:
- return AnnouncementModel::where(['announcement_id' => $data['action_id']])->value('title') ?: '';
-
- // 日程
- case self::EVENT_MESSAGE:
- return EventModel::where(['event_id' => $data['action_id']])->value('title') ?: '';
-
- // 合同
- case self::CONTRACT_TO_DO:
- case self::CONTRACT_REJECT:
- case self::CONTRACT_PASS:
- case self::TEAM_CONTRACT:
- return ContractModel::where(['contract_id' => $data['action_id']])->value('name') ?: '';
-
- // 回款
- case self::RECEIVABLES_TO_DO:
- case self::RECEIVABLES_REJECT:
- case self::RECEIVABLES_PASS:
- return ReceivablesModel::where(['receivables_id' => $data['action_id']])->value('number') ?: '';
-
- // 发票
- case self::INVOICE_TO_DO:
- case self::INVOICE_REJECT:
- case self::INVOICE_PASS:
- return Invoice::where(['invoice_id' => $data['action_id']])->value('invoice_apple_number') ?: '';
-
- // 导入数据
- case self::IMPORT_CUSTOMER:
- case self::IMPORT_CONTACTS:
- case self::IMPORT_LEADS:
- case self::IMPORT_PRODUCT:
- case self::IMPORT_TASK:
- $error = ImportRecordModel::where(['id' => $data['action_id']])->value('error');
- return $error ? '点击下载错误数据' : '';
-
- // 客户
- case self::TEAM_CUSTOMER:
- case self::CUSTOMER_PASS:
- return CustomerModel::where(['customer_id' => $data['action_id']])->value('name') ?: '';
-
- // 商机
- case self::TEAM_BUSINESS:
- case self::BUSINESS_PASS:
- return BusinessModel::where(['business_id' => $data['action_id']])->value('name') ?: '';
-
- }
-
- return '';
- }
-
- /**
- * 发送人
- */
- public function getFromUserIdInfoAttr($val, $data)
- {
- return $data['from_user_id'] ? UserModel::getUserById($data['from_user_id']) : [];
- }
- }
|