群控系统服务端开发模式-应用开发-邮箱短信通道功能开发
邮箱短信通道主要是将邮箱及短信做归属的。具体见下图:
一、创建表
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]);
}
}
//过滤好了之后存入Redis
Redis::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]);
}
}
//过滤好了之后存入Redis
Redis::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' => '邮箱通道必须是数组'
];
}