群控系统服务端开发模式-应用开发-邮箱短信通道功能开发
邮箱短信通道主要是将邮箱及短信做归属的。具体见下图:

一、创建表
1、语句
CREATE TABLE `cluster_control`.`nc_param_emailsms` (`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '编号',`email_id` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '邮箱编号组',`sms_id` int(11) UNSIGNED NOT NULL COMMENT '短信编号组',`update_time` datetime NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '短信邮箱开关配置';
2、表结构

二、邮箱短信通道路由管理
在根目录下route文件夹中app.php文件中,添加邮箱短信通道功能路由,代码如下:
//邮箱短信配置Route::post('emailsms/get_info','param.Emailsms/getInfo');// 获取邮箱短信参数数据Route::post('emailsms/save_info','param.Emailsms/saveInfo');// 保存邮箱短信参数数据
三、邮箱短信通道控制管理
在根目录下的app文件夹下的controller文件夹中,创建文件夹并命名param,在param文件夹中接着创建邮箱短信通道控制器并命名为Emailsms。具体代码如下:
<?php
/*** 邮箱短信配置控制管理* User: 龙哥·三年风水* Date: 2024/11/29* Time: 16:21*/
namespace app\controller\param;
use app\controller\Base;
use app\model\param\Emailsms as ESModel;
class Emailsms extends Base
{// 获取上传参数public function getInfo(){if($this->request->param('id') != 1)return err('请求参数错误');//验证请求参数$resEmailsms = ESModel::dataFind(['id' => 1],'email_id,sms_id');return succ('操作成功',$resEmailsms);}// 保存上传参数public function saveInfo(){$this->checkRoleMenu('ParamEmailsmsIndexSave');//验证权限$param = $this->request->param();$validate = new \app\validate\param\Emailsms;if(!$validate->check($param)) return err($validate->getError());$email_id = implode(',', $param['email_id']);ESModel::save(['email_id' => $email_id,'sms_id' => (int)$param['sms_id']],[['id','=',1]]);return succ('操作成功', []);}
}
四、邮箱短信通道数据管理
在根目录下app文件夹下model文件夹中创建文件夹并命名为param,在param文件夹中创建邮箱短信通道数据文件并命名为Emailsms。具体代码如下:
<?php
/*** 邮箱短信配置数据管理* User: 龙哥·三年风水* Date: 2024/11/29* Time: 16:21*/
namespace app\model\param;
use app\model\Tools;
use Redis\Redis;
class Emailsms extends Tools
{protected static $name = 'param_emailsms';protected static $connection = 'mysql';protected $pk = 'id';protected static $unsetField = ['update_time'];//获取单条数据public static function dataFind($where = [], $field='*', $unsetField=[]){$fieldL = 0; //预防字段少于数据库字段等情况下,加入等级进行区分。保障Redis存储最高性if($field == '*'){$res = Redis::select(config('cache.stores.redis.other_db'))->hgetall('param_emailsms1');}else{$res = Redis::select(config('cache.stores.redis.other_db'))->hmget('param_emailsms1',explode(',',$field));}foreach($res as $v){if(empty($v)){$fieldL = 1;break;}}if($fieldL === 1){$fields = $field;if($fieldL === 1)$fields = '*';$res = self::dataFinds(self::$name, $where, $fields, true,self::$connection);if(count($unsetField) > 0){//如果单独添加过滤数据,则优先并入数据foreach($unsetField as $v){array_push(self::$unsetField,$v);}}if(!empty(self::$unsetField)){//主动过滤修改时间等状态foreach(self::$unsetField as $v){if(isset($res[$v]))unset($res[$v]);}}//过滤好了之后存入RedisRedis::select(config('cache.stores.redis.other_db'))->hmset('param_emailsms1',$res);}if($field != '*'){//根据需要,将需要的字段过滤返回$data = [];$list = explode(',',$field);foreach($list as $k=>$v){if($fieldL === 1){$data[$v] = $res[$v];}else{$data[$v] = $res[$k];}}$res = $data;}return $res;}//保存数据public static function save($data, $where = [], $unsetField=[]){self::dataSaves(self::$name, $data, $where, self::$connection);if(count($unsetField) > 0){//如果单独添加过滤数据,则优先并入数据foreach($unsetField as $v){array_push(self::$unsetField,$v);}}if(count(self::$unsetField) > 0){//主动过滤修改时间等状态foreach(self::$unsetField as $v){if(isset($data[$v]))unset($data[$v]);}}//过滤好了之后存入RedisRedis::select(config('cache.stores.redis.other_db'))->hmset('param_emailsms1',$data);}
}
五、邮箱短信通道验证管理
在根目录下app文件夹下validate文件夹中创建文件夹并命名为param,在param文件夹中创建邮箱短信通道验证文件并命名为Emailsms。具体代码如下:
<?php
/*** 邮箱短信配置验证管理* User: 龙哥·三年风水* Date: 2024/11/29* Time: 16:27*/
namespace app\validate\param;
use app\validate\Tools;
class Emailsms extends Tools
{protected $rule = ['id' => 'require|number','sms_id' => 'require|number','email_id' => 'require|array'];protected $message = ['id.require' => '编号必须填写','id.number' => '编号必须是数字类型','sms_id.require' => '短信通道必须选择','sms_id.number' => '短信通道必须是数字类型','email_id.require' => '邮箱通道必须选择','email_id.array' => '邮箱通道必须是数组'];
}相关文章:
群控系统服务端开发模式-应用开发-邮箱短信通道功能开发
邮箱短信通道主要是将邮箱及短信做归属的。具体见下图: 一、创建表 1、语句 CREATE TABLE cluster_control.nc_param_emailsms (id int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 编号,email_id varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NO…...
[docker中首次配置git环境]
11月没写东西,12月初赶紧水一篇。 刚开始搭建docker服务器时,网上找一堆指令配置好git后,再次新建容器后忘记怎么配了,,这次记录下。 一、git ssh指令法,该方法不用每次提交时输入密码 前期准备࿰…...
书生浦语·第四期作业合集
目录 1. Linux基础知识 1.1-Linux基础知识 1.在终端通过ssh 端口映射连接开发机 2. 创建helloworld.py 3.安装相关包并运行 4.端口映射并访问相关网页...
5G学习笔记之PRACH
即使是阴天,也要记得出门晒太阳哦 目录 1. 概述 2. PRACH Preamble 3. PRACH Preamble 类型 3.1 长前导码 3.2 短前导码 3.3 前导码格式与小区覆盖 4. PRACH时频资源 4.1 小区所有可用PRACH资源 4.2 SSB和RACH的关系 4.3 PRACH时频资源配置 1. 概述 随机接入…...
Ubuntu24.04配置DINO-Tracker
一、引言 记录 Ubuntu 配置的第一个代码过程 二、更改conda虚拟环境的默认安装路径 鉴于不久前由于磁盘空间不足引发的重装系统的惨痛经历,在新系统装好后当然要先更改虚拟环境的默认安装路径。 输入指令: conda info可能因为我原本就没有把 Anacod…...
抓包之查看websocket内容
写在前面 本文看下websocket抓包相关内容。 1:正文 websocket基础环境搭建参考这篇文章。 启动后,先看chrome的network抓包,这里我们直接使用is:running来过滤出websocket的请求: 可以清晰的看到发送的内容以及响应的内容。在…...
【Leetcode Top 100】21. 合并两个有序链表
问题背景 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 数据约束 两个链表的节点数目范围是 [ 0 , 50 ] [0, 50] [0,50] − 100 ≤ N o d e . v a l ≤ 100 -100 \le Node.val \le 100 −100≤Node.val≤100 l 1 l_1 …...
账本模型
05-账本模型 1 账本模型 1.1 传统线性增长模型 传统的 MySQL 等系统采用线性增长的日志模型,通过一个 Leader 和多个 Follower 进行状态同步。这种方式有单点的带宽瓶颈问题。 1.2 区块链共享账本模型 共享账本:树形增长。在去中心化网络中,…...
openwrt利用nftables在校园网环境下开启nat6 (ipv6 nat)
年初写过一篇openwrt在校园网环境下开启ipv6 nat的文章,利用ip6tables控制ipv6的流量。然而从OpenWrt22版本开始,系统内置的防火墙变为nftables,因此配置方法有所改变。本文主要参考了OpenWRT使用nftables实现IPv6 NAT 这篇文章。 友情提示 …...
24.12.02 Element
import { createApp } from vue // 引入elementPlus js库 css库 import ElementPlus from element-plus import element-plus/dist/index.css //中文语言包 import zhCn from element-plus/es/locale/lang/zh-cn //图标库 import * as ElementPlusIconsVue from element-plus/i…...
记录QT5迁移到QT6.8上的一些问题
经常看到有的同学说网上的教程都是假的,巴拉巴拉,看看人家发布时间,Qt官方的API都会有所变动,多搜索,多总结,再修改记录。 下次遇到问题多这样搜索 QT 4/5/6 xxx document,对比一下就知道…...
清理Linux/CentOS7根目录的思路
在使用Linux服务器过程中,经常会遇到磁盘空间不足的问题,好多应用默认安装在根目录下,记录一下如何找到问题所在,清理根目录(/) 1. 检查空间使用情况 1.1 查看分区占用: df -h输出࿱…...
【LInux】kvm添加u盘启动引导
前提:要有一个u盘的启动盘 1、查看u盘设备信息 # lsusb ....忽略其他设备信息,查看到u盘设备 Bus 005 Device 005: ID 0951:1666 Kingston Technology DataTraveler 100 G3/G4/SE9 G2## 主要记住ID 0951:1666确认id为ID 0951:1666 2、修改配置文件 如…...
.net XSSFWorkbook 读取/写入 指定单元格的内容
方法如下: using NPOI.SS.Formula.Functions;using NPOI.SS.UserModel;using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;using OfficeOpenXml.FormulaParsing.Excel.Functions.Numeric;/// <summary>/// 读取Excel指定单元格内容/// </summa…...
GaussDB(类似PostgreSQL)常用命令和注意事项
文章目录 前言GaussDB(类似PostgreSQL)常用命令和注意事项1. 连接到GaussDB数据库2. 查看当前数据库中的所有Schema3. 进入指定的Schema4. 查看Schema下的表、序列、视图5. 查看Schema下所有的表6. 查看表结构7. 开始事务8. 查询表字段注释9. 注意事项&a…...
【HM-React】02. React基础-下
React表单控制 受控绑定 概念:使用React组件的状态(useState)控制表单的状态 function App(){const [value, setValue] useState()return (<input type"text" value{value} onChange{e > setValue(e.target.value)}/>) …...
【力扣热题100】—— Day3.反转链表
你不会永远顺遂,更不会一直年轻,你太安静了,是时候出发了 —— 24.12.2 206. 反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出&…...
【k8s深入学习之 event 记录】初步了解 k8s event 记录机制
event 事件记录初始化 一般在控制器都会有如下的初始化函数,初始化 event 记录器等参数 1. 创建 EventBroadcaster record.NewBroadcaster(): 创建事件广播器,用于记录和分发事件。StartLogging(klog.Infof): 将事件以日志的形式输出。StartRecording…...
redhat 7.9配置阿里云yum源
1、mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ 2、添加dns vim/etc/resolv.conf nameserver 8.8.8.8 nameserver 8.8.4.4 nameserver 114.114.114.114 #配置完先检查下通不通 3、vi /etc/yum/pluginconf.d/subscription-manager.conf # 将 “enabled1” 改为 “ena…...
深入探索Flax:一个用于构建神经网络的灵活和高效库
深入探索Flax:一个用于构建神经网络的灵活和高效库 在深度学习领域,TensorFlow 和 PyTorch 作为主流的框架,已被广泛使用。不过,Flax 作为一个较新的库,近年来得到了越来越多的关注。Flax 是一个由Google Research团队…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
