当前位置: 首页 > article >正文

群控系统服务端开发模式-应用开发-邮箱短信通道功能开发

        邮箱短信通道主要是将邮箱及短信做归属的。具体见下图:

一、创建表

        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' => '邮箱通道必须是数组'
    ];
}

http://www.kler.cn/a/420397.html

相关文章:

  • 65页PDF | 企业IT信息化战略规划(限免下载)
  • idea中git的将A分支某次提交记录合并到B分支
  • 大模型缩放法则放缓,OpenAI、谷歌、Anthropic推进AI模型创新 | LeetTalk Daily
  • 大数据新视界 -- 大数据大厂之 Hive 数据压缩算法对比与选择(下)(20 / 30)
  • SpringMVC:入门案例
  • 机器学习任务功略
  • 切换python版本;vscode切换版本与cmd版本不一致
  • SpringBoot 助力下的在线家具商城设计与实现之旅
  • SpringBoot 架构下的在线家具商城:规划与实践之路
  • 【webApp之h5端实战】项目基础结构搭建及欢迎页面的实现
  • 科技为翼 助残向新 高德地图无障碍导航规划突破1.5亿次
  • 数据结构基础之《(9)—归并排序》
  • WPF DataGrid 列隐藏
  • 普通单向有头链表,用于内存资源受限,不带mmu的单片机
  • redis升级
  • 人工智能机器学习算法分类全解析
  • 带Burst AOT Settings移植问题
  • CSS:Web美学的革新之旅
  • 【Java基础入门篇】三、面向对象和JVM底层分析(3)
  • 【设计模式系列】工厂方法模式(二十一)