findOrEmpty()->toArray(); if (empty($noticeSetting)) { throw new \Exception('找不到对应场景的配置'); } //$noticeSetting['designated_user'] && $params['params']['user_id'] = $noticeSetting['designated_user']; if($noticeSetting['designated_user']){ $designated_users = explode(',', $noticeSetting['designated_user']); foreach ($designated_users as $user_id) { $params['params']['user_id'] = $user_id; self::noticeBySceneOne($params,$noticeSetting); } }else{ self::noticeBySceneOne($params,$noticeSetting); } return true; } catch (\Exception $e) { Log::info('NoticeLogic-noticeByScene:'.$e->getMessage()); self::setError($e->getMessage()); return false; } } public static function noticeBySceneOne($params,$noticeSetting) { try { // 合并额外参数 $params = self::mergeParams($params,$noticeSetting['recipient']); $res = false; Log::info('NoticeLogic-noticeByScene:'.json_encode($params)); // 短信验证码通知(具有时效性) if (isset($noticeSetting['sms_notice']['status']) && $noticeSetting['sms_notice']['status'] == YesNoEnum::YES && $noticeSetting['type'] == NoticeEnum::VERIFICATION_CODE) { $res = (new SmsMessageService())->send($params); Log::info('NoticeLogic-noticeByScene-send:'.json_encode([$res])); } // 短信业务通知 if (isset($noticeSetting['sms_notice']['status']) && $noticeSetting['sms_notice']['status'] == YesNoEnum::YES && $noticeSetting['type'] == NoticeEnum::BUSINESS_NOTIFICATION) { $res = (new SmsMessageService())->sendBusiness($params); Log::info('NoticeLogic-noticeByScene-sendBusiness:'.json_encode([$res])); } // 微信公众号消息模板业务通知 if (isset($noticeSetting['oa_notice']['status']) && $noticeSetting['oa_notice']['status'] == YesNoEnum::YES && $noticeSetting['type'] == NoticeEnum::BUSINESS_NOTIFICATION && isset($params['params']['openid']) && !empty($params['params']['openid']) ) { $res = (new WeChatOaService())->sendTemplateMessage($params); Log::info('NoticeLogic-noticeByScene-sendTemplateMessage:'.json_encode([$res])); } return $res; } catch (\Exception $e) { Log::info('NoticeLogic-noticeByScene:'.$e->getMessage()); self::setError($e->getMessage()); return false; } } /** * @notes 整理参数 * @param $params * @return array * @author 段誉 * @date 2022/9/15 15:28 */ public static function mergeParams($params,$recipient) { if($recipient == 1) { // 用户相关 if (!empty($params['params']['user_id'])) { $user = User::findOrEmpty($params['params']['user_id'])->toArray(); $params['params']['nickname'] = $user['nickname']; $params['params']['user_name'] = $user['nickname']; $params['params']['user_sn'] = $user['sn']; $params['params']['mobile'] = $user['mobile']; $wx_user = UserAuth::where('user_id',$params['params']['user_id'])->findOrEmpty()->toArray(); $params['params']['openid'] = ''; $params['params']['unionid'] = ''; if(isset($wx_user['unionid']) && !empty($wx_user['unionid'])) { $openid = OfficialAuth::where('unionid',$wx_user['unionid'])->where('subscribe',1)->value('openid'); $params['params']['openid'] = $openid?:''; $params['params']['unionid'] = $wx_user['unionid']?:''; } } }elseif($recipient == 3) { // 工程师相关 if (!empty($params['params']['user_id'])) { $user = MasterWorker::findOrEmpty($params['params']['user_id'])->toArray(); $params['params']['nickname'] = $user['nickname']; $params['params']['user_name'] = $user['nickname']; $params['params']['user_sn'] = $user['sn']; $params['params']['mobile'] = $user['mobile']; $wx_user = MasterWorkerAuth::where('worker_id',$params['params']['user_id'])->findOrEmpty()->toArray(); $params['params']['openid'] = ''; $params['params']['unionid'] = ''; if(isset($wx_user['unionid']) && !empty($wx_user['unionid'])) { $openid = OfficialAuth::where('unionid',$wx_user['unionid'])->where('subscribe',1)->value('openid'); $params['params']['openid'] = $openid?:''; $params['params']['unionid'] = $wx_user['unionid']?:''; } } }else{ // 后台账号 if (!empty($params['params']['user_id'])) { } } if (isset($params['params']['order_id']) && !empty($params['params']['order_id'])) { // 跳转路径 $jumpPath = self::getPathByScene($params['scene_id'], $params['params']['order_id'] ?? 0); $params['url'] = $jumpPath['url']; $params['page'] = $jumpPath['page']; } return $params; } /** * @notes 根据场景获取跳转链接 * @param $sceneId * @param $extraId * @return string[] * @author 段誉 * @date 2022/9/15 15:29 */ public static function getPathByScene($sceneId, $extraId) { // 小程序主页路径 $page = ''; switch (intval($sceneId)) { case 113: case 118: //case 100: $page = "/subPages/detail/detail?id={$extraId}"; break; case 116: $page = '/pages/tabView/workbench'; break; /*case 118: $page = '/pages/tabView/user'; break;*/ case 124: //返修工程师预约上门通知 $page = "/subPages/return_work_detail/return_work_detail?id={$extraId}"; break; } // 公众号主页路径 $url = ''; return [ 'url' => $url, 'page' => $page, ]; } /** * @notes 替换消息内容中的变量占位符 * @param $content * @param $params * @return array|mixed|string|string[] * @author 段誉 * @date 2022/9/15 15:29 */ public static function contentFormat($content, $params) { foreach ($params['params'] as $k => $v) { $search = '{' . $k . '}'; $content = str_replace($search, $v, $content); } return $content; } /** * @notes 添加通知记录 * @param $params * @param $noticeSetting * @param $sendType * @param $content * @param string $extra * @return NoticeRecord|\think\Model * @author 段誉 * @date 2022/9/15 15:29 */ public static function addNotice($params, $noticeSetting, $sendType, $content, $extra = '') { return NoticeRecord::create([ 'user_id' => $params['params']['user_id'] ?? 0, 'title' => self::getTitleByScene($sendType, $noticeSetting), 'content' => $content, 'scene_id' => $noticeSetting['scene_id'], 'read' => YesNoEnum::NO, 'recipient' => $noticeSetting['recipient'], 'send_type' => $sendType, 'notice_type' => $noticeSetting['type'], 'extra' => $extra, ]); } /** * @notes 通知记录标题 * @param $sendType * @param $noticeSetting * @return string * @author 段誉 * @date 2022/9/15 15:30 */ public static function getTitleByScene($sendType, $noticeSetting) { switch ($sendType) { case NoticeEnum::SMS: $title = ''; break; case NoticeEnum::OA: $title = $noticeSetting['oa_notice']['name'] ?? ''; break; case NoticeEnum::MNP: $title = $noticeSetting['mnp_notice']['name'] ?? ''; break; default: $title = ''; } return $title; } }