Pārlūkot izejas kodu

麦垛山会议通知

qr 7 mēneši atpakaļ
vecāks
revīzija
8eee18f50b

+ 243 - 0
Modules/Admin/Http/Controllers/Api/SmsController.php

@@ -0,0 +1,243 @@
+<?php
+
+namespace Modules\Admin\Http\Controllers\Api;
+
+use App\Http\Controllers\Controller;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Http;
+
+use AlibabaCloud\SDK\Dysmsapi\V20170525\Dysmsapi;
+use \Exception;
+use AlibabaCloud\Tea\Exception\TeaError;
+use AlibabaCloud\Tea\Utils\Utils;
+
+use Darabonba\OpenApi\Models\Config;
+use AlibabaCloud\SDK\Dysmsapi\V20170525\Models\SendBatchSmsRequest;
+use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
+use Modules\Admin\Services\SmsServices;
+
+class SmsController extends Controller
+{
+
+    // 会议短信
+    public function sendMeetingSms(Request $request) {
+
+        $sms_type = $request->get("sms_type");
+
+        if ($sms_type == 'mds_meeting') {
+            return $this->getMdsMeetingInfo($request);
+        }
+
+        return [
+            "code"=>-1,
+            "msg"=>"缺少参数",
+            "data"=>[]
+        ];
+    }
+
+    // 麦垛山会议
+    private function getMdsMeetingInfo(Request $request) {
+
+        // 会议id
+        $meeting_id = $request->get("meeting_id");
+        // 通知类型
+        $notice_type = $request->get("notice_type");
+
+        if (empty($meeting_id) || empty($notice_type)) {
+            return [
+                "code"=>-1,
+                "msg"=>"缺少参数",
+                "data"=>[]
+            ];
+        }
+
+        // 获取会议信息
+
+        try {
+            $meeting_info = DB::connection('mysql_fwe10')->table('uf_mdshyyy')->where('id', '=', $meeting_id)->first();
+        }
+        catch (Exception $error) {
+            return [
+                "code"=>-1,
+                "msg"=>"会议室信息数据连接失败",
+                "data"=>[]
+            ];
+        }
+
+        if (empty($meeting_info)) {
+            return [
+                "code"=>-1,
+                "msg"=>"找不到会议信息",
+                "data"=>[]
+            ];
+        }
+
+        $smsServices = new SmsServices();
+
+        $meeting_date = date('Y年m月d日 H:i:s', strtotime($meeting_info->ksrq)); // 开始时间
+
+        $meeting_title = $meeting_info->hyzt; // 会议主题
+        $meeting_room_id = $meeting_info->hys; // 会议室id
+        $meeting_room_info = DB::connection('mysql_fwe10')->table('uf_mdshysgl')->where('id', '=', $meeting_room_id)->first();
+        $meeting_room_name = $meeting_room_info->hysmc; // 会议室名称
+
+        if ($notice_type == 1) {
+            // 部门领导审批
+
+            // 申请人信息
+            $apply_user_id = $meeting_info->sqr;
+            $apply_user_info = DB::connection('mysql_fwe10')->table('eteams.employee')->where('id', '=', $apply_user_id)->first();
+            $apply_user_name = $apply_user_info->USERNAME;
+
+            // 申请人部门领导
+            $leader_id = $meeting_info->bmld;
+            $leader_info = DB::connection('mysql_fwe10')->table('eteams.employee')->where('id', '=', $leader_id)->first();
+            $leader_mobile[] = $leader_info->MOBILE;
+
+            $template_info[] = [
+                "username"=>$apply_user_name,
+                "begindate"=>$meeting_date,
+                "meetingname"=>$meeting_title
+            ];
+
+            $smsServices->sendBatchSms($leader_mobile, $template_info, 1);
+
+            return [
+                "code"=>200,
+                "msg"=>"已发送",
+                "data"=>[
+                    "leader" =>$template_info
+                ]
+            ];
+
+        } else if ($notice_type == 2) {
+            // 会议室管理员审批
+
+            // 通知类型
+            $manage_id = $request->get("manage_id");
+
+            if (empty($manage_id)) {
+                return [
+                    "code"=>-1,
+                    "msg"=>"缺少管理员信息参数",
+                    "data"=>[]
+                ];
+            }
+
+            // 申请人信息
+            $apply_user_id = $meeting_info->sqr;
+            $apply_user_info = DB::connection('mysql_fwe10')->table('eteams.employee')->where('id', '=', $apply_user_id)->first();
+            $apply_user_name = $apply_user_info->USERNAME;
+
+            // 管理员信息
+            $leader_info = DB::connection('mysql_fwe10')->table('eteams.employee')->where('id', '=', $manage_id)->first();
+            $leader_mobile[] = $leader_info->MOBILE;
+
+            $template_info[] = [
+                "username"=>$apply_user_name,
+                "begindate"=>$meeting_date,
+                "meetingname"=>$meeting_title
+            ];
+
+            $smsServices->sendBatchSms($leader_mobile, $template_info, 1);
+
+            return [
+                "code"=>200,
+                "msg"=>"已发送",
+                "data"=>[
+                    "manage" =>$template_info
+                ]
+            ];
+        } else if ($notice_type == 3) {
+            // 通知参会人员
+
+            $attendee = $meeting_info->chry; // 参会人员
+            $attend_dept = $meeting_info->chbm; // 参会部门
+
+            // 参会人信息
+            $attendee_arr = explode(',', $attendee);
+            $attendee_info = DB::connection('mysql_fwe10')->table('eteams.employee')->where('id', $attendee_arr)->get();
+
+            $attendee_mobile = [];
+            $template_info = [];
+
+            // ${uname},您好,${meetdate} 在“${meetroom}”会议室有主题为“${meetname}”的会议需要您的参加,详情登录安宁查看。
+            for($i = 0; $i < count($attendee_info); $i++) {
+                $info = $attendee_info[$i];
+                $attendee_mobile[] = $info->MOBILE;
+                $template_info[] = [
+                    "uname"=>$info->USERNAME,
+                    "meetdate"=>$meeting_date,
+                    "meetroom"=>$meeting_room_name,
+                    "meetname"=>$meeting_title
+                ];
+            }
+
+            // 给参会人 发送短信
+            if (count($template_info) > 0) {
+                $smsServices->sendBatchSms($attendee_mobile, $template_info, 2);
+            }
+
+            // 参会部门信息
+            $dept_arr = explode(',', $attend_dept);
+            $dept_info = DB::connection('mysql_fwe10')->table('eteams.department')->where('id', $dept_arr)->get();
+
+            $dept_leader = DB::connection('mysql_fwe10')
+                ->table('eteams.employee')
+                ->where("sec_level","=","65")
+                ->where('DEPARTMENT', $attend_dept)
+                ->get();
+
+            // 组装部门信息map
+            $dept_info_map = [];
+            for($i = 0; $i < count($dept_info); $i ++) {
+                $info = $dept_info[$i];
+                $dept_info_map[$info->ID] = $info->NAME;
+            }
+
+            $attendee_dept_mobile = [];
+            $template_dept_info = [];
+            for($i = 0; $i < count($dept_leader); $i++) {
+                $info = $dept_leader[$i];
+                $mobile = $info->MOBILE;
+                $attendee_dept_mobile[] = $mobile;
+                // 如果已经给个人发了,就跳过
+                if (in_array($mobile, $attendee_mobile)) {
+                    continue;
+                }
+
+                // 您好,${meetdate} 在“${meetroom}”会议室有主题为“${meetname}”的会议需要您的部门参加,详情登录安宁查看。
+                $template_dept_info[] = [
+                    "meetdate"=>$meeting_date,
+                    "meetroom"=>$meeting_room_name,
+                    "meetname"=>$meeting_title
+                ];
+            }
+
+            // 给部门领导发送短信
+            if (count($template_dept_info) > 0) {
+                $smsServices->sendBatchSms($attendee_dept_mobile, $template_dept_info, 3);
+            }
+
+            return [
+                "code"=>200,
+                "msg"=>"已发送",
+                "data"=>[
+                    "attendee" =>$template_info,
+                    "dept" => $template_info
+                    ]
+            ];
+
+        }
+
+        return [
+            "code"=>200,
+            "msg"=>"已发送",
+            "data"=>[]
+        ];
+
+
+    }
+
+}

+ 121 - 0
Modules/Admin/Services/SmsServices.php

@@ -0,0 +1,121 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: qiuzijian
+ * Date: 6/22/24
+ * Time: 12:34 PM
+ */
+
+namespace Modules\Admin\Services;
+
+
+use AlibabaCloud\SDK\Dysmsapi\V20170525\Dysmsapi;
+use \Exception;
+use AlibabaCloud\Tea\Exception\TeaError;
+use AlibabaCloud\Tea\Utils\Utils;
+
+use Darabonba\OpenApi\Models\Config;
+use AlibabaCloud\SDK\Dysmsapi\V20170525\Models\SendBatchSmsRequest;
+use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
+use Illuminate\Support\Facades\DB;
+
+class SmsServices{
+
+    // 短信模板code
+    private $templateCode = [
+        "",
+        "SMS_475295115", // 会议审批提醒-提醒领导审批 1
+        "SMS_475345129", // 会议通知-个人 2
+        "SMS_475205106", // 会议通知-部门 3
+        "", // 通知申请人 4
+    ];
+
+    public function __construct()
+    {
+
+    }
+
+
+    /**
+     * 使用AK&SK初始化账号Client
+     * @return Dysmsapi Client
+     */
+    public static function createClient(){
+        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
+        // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/311677.html。
+        $access_key_id = getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
+        $access_key_secret = getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
+
+        if (empty($access_key_id) || empty($access_key_secret)) {
+            error_log("短信配置错误", 0);
+            return null;
+        }
+
+        $config = new Config([
+            // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
+            "accessKeyId" => $access_key_id,
+            // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
+            "accessKeySecret" => $access_key_secret
+        ]);
+        // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
+        $config->endpoint = "dysmsapi.aliyuncs.com";
+        return new Dysmsapi($config);
+    }
+
+    /**
+     * 会议通知:${uname},您好!您有一个会议需要参加,会议时间为${meetdate},地点为${meetroom},会议主题为${meetname},详情登录安宁查看。
+    */
+    public function sendBatchSms($phoneArr, $infoArr, $tplCode){
+        if (empty($phoneArr)||empty($infoArr) || empty($tplCode)) {
+            error_log("短信参数错误", 0);
+            return;
+        }
+
+        $client = $this->createClient();
+        if (empty($client)) {
+            error_log("短信客户端创建失败", 0);
+            return null;
+        }
+
+        // 签名
+        for ($i = 0; $i < count($phoneArr); $i++) {
+            $signArr[] = $this->sign;
+        }
+
+        $client = self::createClient();
+//        $sendBatchSmsRequest = new SendBatchSmsRequest([
+//            "phoneNumberJson" => "[\"15309501557\"]",
+//            "templateCode" => "SMS_474845249",
+//            "signNameJson" => "[\"智慧矿山\"]",
+//            "templateParamJson" => "[{\"uname\":\"秦先生\", \"meetdate\":\"2024-11-11 11:11:00\", \"meetroom\":\"道德讲堂\",\"meetname\":\"论短信通知的重要性\"}]"
+//        ]);
+
+        $dSmsInfo = [
+            "phoneNumberJson" => json_encode($phoneArr),
+            "templateCode" => $this->templateCode[$tplCode],
+            "signNameJson" => json_encode($signArr),
+            "templateParamJson" => json_encode($infoArr)
+        ];
+
+        $sendBatchSmsRequest = new SendBatchSmsRequest($dSmsInfo);
+        $runtime = new RuntimeOptions([]);
+        try {
+            // 复制代码运行请自行打印 API 的返回值
+            $client->sendBatchSmsWithOptions($sendBatchSmsRequest, $runtime);
+        }
+        catch (Exception $error) {
+            if (!($error instanceof TeaError)) {
+                $error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
+            }
+            // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
+            // 错误 message
+            var_dump($error->message);
+            // 诊断地址
+            var_dump($error->data["Recommend"]);
+            Utils::assertAsString($error->message);
+        }
+    }
+
+
+
+}

+ 7 - 1
composer.json

@@ -9,6 +9,11 @@
     "license": "MIT",
     "require": {
         "php": "^7.1.3",
+        "alibabacloud/sdk": "^1.8",
+        "alibabacloud/dysmsapi-20170525": "^2.0.24",
+        "alibabacloud/darabonba-openapi": "^0.2.10",
+        "alibabacloud/tea-console": "^0.1.0",
+        "alibabacloud/tea-utils": "^0.2.19",
         "box/spout": "^3.2",
         "doctrine/dbal": "^2.13",
         "fideloper/proxy": "^4.0",
@@ -44,7 +49,8 @@
     "autoload": {
         "psr-4": {
             "App\\": "app/",
-            "Modules\\": "Modules/"
+            "Modules\\": "Modules/",
+            "AlibabaCloud\\SDK\\Sample\\": "src"
         },
         "files": [
             "app/Helpers.php"