Просмотр исходного кода

up - 通知 后台管理/ 通知埋点

liugc 1 год назад
Родитель
Сommit
d009e1b581

+ 11 - 0
app/adminapi/controller/master_worker/MasterWorkerInfoController.php

@@ -71,6 +71,17 @@ class MasterWorkerInfoController extends BaseAdminController
         $params = (new MasterWorkerInfoValidate())->post()->goCheck('edit');
         $result = MasterWorkerInfoLogic::edit($params);
         if (true === $result) {
+            //审批通过 - 后续事件处理
+            if($params['audit_state'] == 1){
+                // 工程师基本信息审核通知【给工程师的通知】
+                event('Notice',  [
+                    'scene_id' => 123,
+                    'params' => [
+                        'user_id' => 0,
+                        'mobile' => $params['mobile'],
+                    ]
+                ]);
+            }
             return $this->success('编辑成功', [], 1, 1);
         }
         return $this->fail(MasterWorkerInfoLogic::getError());

+ 18 - 0
app/adminapi/controller/master_worker_register/MasterWorkerRegisterController.php

@@ -73,7 +73,25 @@ class MasterWorkerRegisterController extends BaseAdminController
         if (true === $result) {
             //审批通过 - 后续事件处理
             if($params['status'] == 1){
+                // 工程师入驻结果通知:【给工程师的通知】
+                event('Notice',  [
+                    'scene_id' => 110,
+                    'params' => [
+                        'user_id' => 0,
+                        'mobile' => $params['mobile'],
+                    ]
+                ]);
+                // 通知发送 账号密码
                 MasterWorkerRegisterLogic::eventNotice($params);
+            }else{
+                // 工程师入驻失败通知:【给工程师的通知】
+                event('Notice',  [
+                    'scene_id' => 111,
+                    'params' => [
+                        'user_id' => 0,
+                        'mobile' => $params['mobile'],
+                    ]
+                ]);
             }
             return $this->success('编辑成功', [], 1, 1);
         }

+ 57 - 0
app/adminapi/controller/notice/NoticeController.php

@@ -18,6 +18,9 @@ use app\adminapi\controller\BaseAdminController;
 use app\adminapi\lists\notice\NoticeSettingLists;
 use app\adminapi\logic\notice\NoticeLogic;
 use app\adminapi\validate\notice\NoticeValidate;
+use app\common\enum\notice\NoticeEnum;
+use app\common\model\notice\NoticeSetting;
+use app\common\service\wechat\WeChatOaService;
 
 /**
  * 通知控制器
@@ -26,6 +29,7 @@ use app\adminapi\validate\notice\NoticeValidate;
  */
 class NoticeController extends BaseAdminController
 {
+    public array $notNeedLogin = ['testNotice'];
     /**
      * @notes 查看通知设置列表
      * @return \think\response\Json
@@ -80,4 +84,57 @@ class NoticeController extends BaseAdminController
         }
         return $this->fail(NoticeLogic::getError());
     }
+
+    /**
+     * @notes 后台测试通知
+     */
+    public function testNotice()
+    {
+        try {
+            $params = $this->request->get();
+
+            $noticeSetting = NoticeSetting::where('scene_id', $params['scene_id'])->findOrEmpty()->toArray();
+
+
+            if(isset($noticeSetting['sms_notice']['status']) && $noticeSetting['sms_notice']['status'] == 1){
+                $res = event('Notice',  [
+                    'scene_id' => $params['scene_id'],
+                    'params' => [
+                        'user_id' => $params['user_id'],
+                    ]
+                ]);
+            }
+
+
+            if(isset($noticeSetting['oa_notice']['status']) && $noticeSetting['oa_notice']['status'] == 1){
+
+                $res = event('Notice',  [
+                    'scene_id' => $params['scene_id'],
+                    'params' => [
+                        'user_id' => $params['user_id'],
+                        'thing9' => $params['user_id'],
+                        'time7' => $params['user_id'],
+                        'thing8' => $params['user_id'],
+                        'phone_number6' => $params['user_id'],
+                    ]
+                ]);
+
+
+                /*(new WeChatOaService())->sendTemplateMessage([
+                    'scene_id' => NoticeEnum::WORKER_EXAMINE,
+                    'params' => [
+                        'user_id' => 0,
+                        'openid' => $noticeSetting['oa_notice']['designated_user'],
+                    ]
+                ]);*/
+            }
+
+
+            dd($res);
+        } catch (\Exception  $e) {
+            dd($e->getMessage());
+        }
+    }
+
+
 }

+ 9 - 0
app/adminapi/controller/works/ReturnWorkController.php

@@ -18,6 +18,7 @@ namespace app\adminapi\controller\works;
 
 use app\adminapi\controller\BaseAdminController;
 use app\adminapi\lists\works\ReturnWorkLists;
+use app\adminapi\logic\works\IssueWorkLogic;
 use app\adminapi\logic\works\ReturnWorkLogic;
 use app\adminapi\validate\works\ReturnWorkValidate;
 
@@ -115,6 +116,14 @@ class ReturnWorkController extends BaseAdminController
         $params = (new ReturnWorkValidate())->post()->goCheck('issueWorkData');
         $result = ReturnWorkLogic::issueWorkData($params);
         if (true === $result) {
+            $issueWork = IssueWorkLogic::detail(['id'=>$params['issue_work_id']]);
+            // 订单返修通知【给用户】
+            $res = event('Notice',  [
+                'scene_id' => 121,
+                'params' => [
+                    'user_id' => $issueWork['user_id']
+                ]
+            ]);
             return $this->success('成功', [], 1, 1);
         }
         return $this->fail(ReturnWorkLogic::getError());

+ 34 - 0
app/adminapi/controller/works/ServiceWorkController.php

@@ -69,8 +69,30 @@ class ServiceWorkController extends BaseAdminController
     public function edit()
     {
         $params = (new ServiceWorkValidate())->post()->goCheck('edit');
+        $workDetail = ServiceWorkLogic::detail($params);
         $result = ServiceWorkLogic::edit($params);
         if (true === $result) {
+            if(strtotime($workDetail['appointment_time']) !== strtotime($params['appointment_time'])){
+                // 修改预约时间通知【给用户的通知】
+                $res = event('Notice',  [
+                    'scene_id' => 117,
+                    'params' => [
+                        'user_id' => $workDetail['user_id']
+                    ]
+                ]);
+                // 修改预约时间通知【给工程师的通知,仅限公众号】
+                $res = event('Notice',  [
+                    'scene_id' => 118,
+                    'params' => [
+                        'user_id' => $workDetail['master_worker_id'],
+                        'thing4' => $workDetail['title'],
+                        'time5' => $workDetail['appointment_time'],
+                        'time6' => $params['appointment_time'],
+                        'thing11' => $workDetail['address'],
+                        'phone_number8' => $workDetail['mobile'],
+                    ]
+                ]);
+            }
             return $this->success('编辑成功', [], 1, 1);
         }
         return $this->fail(ServiceWorkLogic::getError());
@@ -113,6 +135,18 @@ class ServiceWorkController extends BaseAdminController
         $params = (new ServiceWorkValidate())->post()->goCheck('allocateWorker');
         $result = ServiceWorkLogic::allocateWorker($params,$this->adminInfo);
         if (true === $result) {
+            // 工程师派单通知【给工程师的通知】【公众号通知,不发短信】
+            $workDetail = ServiceWorkLogic::detail($params);
+            $res = event('Notice',  [
+                'scene_id' => 113,
+                'params' => [
+                    'user_id' => $params['master_worker_id'],
+                    'thing9' => $workDetail['title'],
+                    'time7' => $workDetail['appointment_time'],
+                    'thing8' => $workDetail['address'],
+                    'phone_number6' => $workDetail['mobile'],
+                ]
+            ]);
             return $this->success('分配工程师成功', [], 1, 1);
         }
         return $this->fail(ServiceWorkLogic::getError());

+ 3 - 3
app/adminapi/lists/notice/NoticeSettingLists.php

@@ -34,7 +34,7 @@ class NoticeSettingLists extends BaseAdminDataLists implements ListsSearchInterf
     public function setSearch(): array
     {
         return [
-            '=' => ['recipient', 'type']
+            '=' => ['type']
         ];
     }
 
@@ -49,8 +49,8 @@ class NoticeSettingLists extends BaseAdminDataLists implements ListsSearchInterf
      */
     public function lists(): array
     {
-        $lists = (new NoticeSetting())->field('id,scene_name,sms_notice,type')
-            ->append(['sms_status_desc','type_desc'])
+        $lists = (new NoticeSetting())->field('*')
+            ->append(['sms_status_desc','oa_status_desc','type_desc'])
             ->where($this->searchWhere)
             ->select()
             ->toArray();

+ 19 - 3
app/adminapi/logic/notice/NoticeLogic.php

@@ -37,8 +37,8 @@ class NoticeLogic extends BaseLogic
      */
     public static function detail($params)
     {
-        $field = 'id,type,scene_id,scene_name,scene_desc,system_notice,sms_notice,oa_notice,mnp_notice,support';
-        $noticeSetting = NoticeSetting::field($field)->findOrEmpty($params['id'])->toArray();
+
+        $noticeSetting = NoticeSetting::field('*')->findOrEmpty($params['id'])->toArray();
         if (empty($noticeSetting)) {
             return [];
         }
@@ -85,7 +85,9 @@ class NoticeLogic extends BaseLogic
         $noticeSetting['oa_notice']['is_show'] = in_array(NoticeEnum::OA, explode(',', $noticeSetting['support']));
         $noticeSetting['mnp_notice']['is_show'] = in_array(NoticeEnum::MNP, explode(',', $noticeSetting['support']));
         $noticeSetting['default'] = '';
-        $noticeSetting['type'] = NoticeEnum::getTypeDesc($noticeSetting['type']);
+        //$noticeSetting['type'] = NoticeEnum::getTypeDesc($noticeSetting['type']);
+        $noticeSetting['type'] = $noticeSetting['type'].'';
+        $noticeSetting['recipient'] = $noticeSetting['recipient'].'';
         return $noticeSetting;
     }
 
@@ -102,11 +104,25 @@ class NoticeLogic extends BaseLogic
         try {
             // 校验参数
             //self::checkSet($params);
+
             // 拼装更新数据
             $updateData = [];
+            $updateData['scene_id'] = $params['scene_id'];
+            $updateData['scene_name'] = $params['scene_name'];
+            $updateData['scene_desc'] = $params['scene_desc'];
+            $updateData['recipient'] = $params['recipient'];
+            $updateData['designated_user'] = $params['designated_user'];
+            $updateData['type'] = $params['type'];
+            $updateData['support'] = $params['support']??2;
             foreach ($params['template'] as $item) {
                 if($item['type']??0) $updateData[$item['type'] . '_notice'] = json_encode($item, JSON_UNESCAPED_UNICODE);
             }
+        
+            $noticeSetting = NoticeSetting::findOrEmpty($params['id'] ?? 0);
+            if ($noticeSetting->isEmpty()) {
+                $noticeSetting->save($updateData);
+                return true;
+            }
             // 更新通知设置
             NoticeSetting::where('id', $params['id'])->update($updateData);
             return true;

+ 15 - 0
app/api/controller/ServiceOrderController.php

@@ -1,6 +1,7 @@
 <?php
 namespace app\api\controller;
 
+use app\adminapi\logic\works\ServiceWorkLogic;
 use app\api\lists\recharge\ServiceOrderLists;
 use app\api\logic\ServiceOrderLogic;
 use app\api\validate\ServiceOrderValidate;
@@ -98,6 +99,13 @@ class ServiceOrderController extends BaseApiController
         if (false === $result) {
             return $this->fail(ServiceOrderLogic::getError());
         }
+        // 订单取消通知【给用户】
+        $res = event('Notice',  [
+            'scene_id' => 122,
+            'params' => [
+                'user_id' => $params['user_id']
+            ]
+        ]);
         return $this->success('取消成功', [], 1, 1);
     }
 
@@ -132,6 +140,13 @@ class ServiceOrderController extends BaseApiController
         if (false === $result) {
             return $this->fail(ServiceOrderLogic::getError());
         }
+        // 订单完成通知【给用户】
+        $res = event('Notice',  [
+            'scene_id' => 120,
+            'params' => [
+                'user_id' => $params['user_id']
+            ]
+        ]);
         return $this->success('已确认服务完成', [], 1, 1);
     }
 

+ 9 - 4
app/common/enum/notice/NoticeEnum.php

@@ -38,9 +38,16 @@ class NoticeEnum
     const FIND_LOGIN_PASSWORD_CAPTCHA = 104;
     const OTHER_CAPTCHA = 105;
     const GCSSJHM_CAPTCHA =106;
+    /**
+     * 其他非验证码业务场景
+     */
     const ACCOUNT_PASSWORD =107;
     const WORKER_EXAMINE =108;
-
+    /**
+     * 指定用户的类型 1:工程师,2:用户
+     */
+    const DESIGNATED_TYPE_WORKER  = 1;
+    const DESIGNATED_TYPE_USER = 2;
     /**
      * 验证码场景
      */
@@ -50,9 +57,7 @@ class NoticeEnum
         self::CHANGE_MOBILE_CAPTCHA,
         self::FIND_LOGIN_PASSWORD_CAPTCHA,
         self::OTHER_CAPTCHA,
-        self::GCSSJHM_CAPTCHA,
-        self::ACCOUNT_PASSWORD,
-        self::WORKER_EXAMINE,
+        self::GCSSJHM_CAPTCHA
     ];
 
 

+ 1 - 1
app/common/listener/NoticeListener.php

@@ -29,7 +29,7 @@ class NoticeListener
             if (empty($params['scene_id'])) {
                 throw new \Exception('场景ID不能为空');
             }
-            // 根据不同的场景发送通知
+            // 根据不同的场景发送通知 scene_id ['params']['mobile'] ['params']['openid']  ['params']['user_id']  ['params']['xxxxx']
             $result = NoticeLogic::noticeByScene($params);
             if (false === $result) {
                 throw new \Exception(NoticeLogic::getError());

+ 46 - 11
app/common/logic/NoticeLogic.php

@@ -19,9 +19,12 @@ use app\common\enum\YesNoEnum;
 use app\common\model\notice\NoticeRecord;
 use app\common\model\notice\NoticeSetting;
 use app\common\model\user\User;
+use app\common\model\user\UserAuth;
+use app\common\model\master_worker\MasterWorker;
+use app\common\model\master_worker\MasterWorkerAuth;
 use app\common\service\sms\SmsMessageService;
 use app\common\service\wechat\WeChatOaService;
-
+use think\facade\Log;
 
 /**
  * 通知逻辑层
@@ -45,18 +48,24 @@ class NoticeLogic extends BaseLogic
             if (empty($noticeSetting)) {
                 throw new \Exception('找不到对应场景的配置');
             }
+            $noticeSetting['designated_user'] && $params['params']['user_id'] = $noticeSetting['designated_user'];
+            /*if(empty($params['params']['user_id']) && (!isset($params['params']['mobile']) && !isset($params['params']['openid']))){
+                throw new \Exception('发送对象不能为空');
+            }*/
             // 合并额外参数
-            $params = self::mergeParams($params);
+            $params = self::mergeParams($params,$noticeSetting['recipient']);
             $res = false;
             self::setError('发送通知失败');
-
+            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
@@ -64,10 +73,12 @@ class NoticeLogic extends BaseLogic
                 && 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;
         }
@@ -81,15 +92,39 @@ class NoticeLogic extends BaseLogic
      * @author 段誉
      * @date 2022/9/15 15:28
      */
-    public static function mergeParams($params)
+    public static function mergeParams($params,$recipient)
     {
-        // 用户相关
-        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'] = $params['params']['mobile'] ?? $user['mobile'];
+        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('worker_id',$params['params']['user_id'])->findOrEmpty()->toArray();
+                //$wx_user['openid'] $wx_user['unionid']
+                $params['params']['openid'] = $wx_user['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();
+                //$wx_user['openid'] $wx_user['unionid']
+                $params['params']['openid'] = $wx_user['openid']??'';
+                $params['params']['unionid'] = $wx_user['unionid']??'';
+            }
+        }else{
+            // 后台账号
+            if (!empty($params['params']['user_id'])) {
+
+            }
         }
 
         // 跳转路径

+ 17 - 1
app/common/model/notice/NoticeSetting.php

@@ -39,7 +39,23 @@ class NoticeSetting extends BaseModel
             return '停用';
         }
     }
-
+    /**
+     * @notes 微信通知状态
+     * @param $value
+     * @param $data
+     * @return string|string[]
+     * @author ljj
+     * @date 2022/2/16 3:22 下午
+     */
+    public function getOaStatusDescAttr($value,$data)
+    {
+        if ($data['sms_notice']) {
+            $sms_text = json_decode($data['sms_notice'],true);
+            return DefaultEnum::getEnableDesc($sms_text['status']);
+        }else {
+            return '停用';
+        }
+    }
     /**
      * @notes 通知类型
      * @param $value

+ 3 - 1
app/common/service/sms/SmsMessageService.php

@@ -19,6 +19,7 @@ use app\common\logic\NoticeLogic;
 use app\common\model\notice\NoticeSetting;
 use app\common\model\notice\SmsLog;
 use app\common\service\ConfigService;
+use think\facade\Log;
 
 /**
  * 短信服务
@@ -78,7 +79,7 @@ class SmsMessageService
             if(!is_null($smsDriver->getError())) {
                 throw new \Exception($smsDriver->getError());
             }
-
+            Log::info('SmsMessageService-sendBusiness:'.json_encode([$noticeSetting,$params,$this->setSmsParams($noticeSetting, $params)]));
             $result =  $smsDriver->send($params['params']['mobile'], [
                 'template_id' => $noticeSetting['sms_notice']['template_id'],
                 'params' => $this->setSmsParams($noticeSetting, $params)
@@ -88,6 +89,7 @@ class SmsMessageService
             }
             return true;
         } catch (\Exception $e) {
+            Log::info('SmsMessageService-sendBusiness:'.$e->getMessage());
             throw new \Exception($e->getMessage());
         }
     }

+ 1 - 0
app/common/service/wechat/WeChatOaService.php

@@ -200,6 +200,7 @@ class WeChatOaService
         try {
             // 通知设置
             $noticeSetting = NoticeSetting::where('scene_id', $params['scene_id'])->findOrEmpty()->toArray();
+            Log::info('WeChatOa-sendTemplateMessage:'.json_encode([$noticeSetting,$params,$this->getTemplateMessageParams($noticeSetting, $params)]));
             // 发送
             $result = $this->app->getClient()->postJson('cgi-bin/message/template/send', [
                 'touser' => $params['params']['openid'],

+ 14 - 10
app/workerapi/controller/LoginController.php

@@ -52,16 +52,20 @@ class LoginController extends BaseApiController
         $result = LoginLogic::register($params);
         if (true === $result) {
             // 发送通知给平台配置的审核人
-            $noticeSetting = NoticeSetting::where('scene_id', NoticeEnum::WORKER_EXAMINE)->findOrEmpty()->toArray();
-            if($noticeSetting['oa_notice']['designated_user']??0 && $noticeSetting['oa_notice']['designated_user']){
-                event('Notice',  [
-                    'scene_id' => NoticeEnum::WORKER_EXAMINE,
-                    'params' => [
-                        'user_id' => 0,
-                        'openid' => $noticeSetting['oa_notice']['designated_user'],
-                    ]
-                ]);
-            }
+            event('Notice',  [
+                'scene_id' => NoticeEnum::WORKER_EXAMINE,
+                'params' => [
+                    'user_id' => 0,
+                ]
+            ]);
+            // 工程师提交入驻申请后-发送短信通知
+            event('Notice',  [
+                'scene_id' => 109,
+                'params' => [
+                    'user_id' => 0,
+                    'mobile' => $params['mobile'],
+                ]
+            ]);
             return $this->success('注册成功', [], 1, 1);
         }
         return $this->fail(LoginLogic::getError());

+ 26 - 0
app/workerapi/controller/WorksController.php

@@ -77,6 +77,14 @@ class WorksController extends BaseApiController
         if (false === $result) {
             return $this->fail(ServiceWorkLogic::getError());
         }
+        // 用户订单被领单通知【给用户的通知】
+        $workDetail = ServiceWorkLogic::detail($params);
+        event('Notice',  [
+            'scene_id' => 114,
+            'params' => [
+                'user_id' => $workDetail['user_id'],
+            ]
+        ]);
         return $this->success('领取成功', [], 1, 1);
     }
 
@@ -130,6 +138,24 @@ class WorksController extends BaseApiController
         if (false === $result) {
             return $this->fail(ServiceWorkLogic::getError());
         }
+        // 工程师预约上门通知【给用户的通知】
+        $workDetail = ServiceWorkLogic::detail($params);
+        event('Notice',  [
+            'scene_id' => 115,
+            'params' => [
+                'user_id' => $workDetail['user_id'],
+            ]
+        ]);
+        // 工程师预约上门通知【给工程师的通知,仅限公众号】
+        event('Notice',  [
+            'scene_id' => 116,
+            'params' => [
+                'user_id' => $workDetail['master_worker_id'],
+                'thing5' => $workDetail['title'],
+                'time10' => $workDetail['appointment_time'],
+                'thing3' => $workDetail['address'],
+            ]
+        ]);
         return $this->success('预约成功,等待上门', [], 1, 1);
     }
 

+ 1 - 1
config/log.php

@@ -7,7 +7,7 @@ return [
     // 默认日志记录通道
     'default'      => env('log.channel', 'file'),
     // 日志记录级别
-    'level'        => [],
+    'level'        => ['info','notice','debug','error'],
     // 日志类型记录的通道 ['error'=>'email',...]
     'type_channel' => [],
     // 关闭全局日志写入