站内信功能

前言:

公司项目需要一个站内信功能,但我没做过,所以做个记录,根据需求,需要后台发送站内信,前台用户接受,默认状态保持为未读,当用户点击查看时,更改状态为已读状态,并且站内信可回复。

后台使用的是tp5.0结合layui做的系统界面。layui简单来说,真香,直接搜索匹配要输入的用户

需求:一对多功能

  1. 管理员向用户发送一个站内信,用户接受到,可以回复。
  2. 站内信的本质,其实就是数据库的增删改查,设计好数据表之后,只需要我们来创建发送,即可。

数据表设计

表设计:

  1. 现在技术不够,采用简单的mysql处理,暂不考虑实时性。
  2. 数据表的设计,因为要考虑的是,管理员发送,客户需要接受到,所以采用innodb存储引擎。
  3. 数据字段:站内信id、发件人、收件人、内容、主题、考虑上传文件(三个字段)、是否读取、发送时间、更新时间、状态(表示回复、还是发送)
create table ms_letter(l_id int(11) not null comment "站内信id",u_id int(11) not null comment "用户id",u_name char(50) not null comment '收件人姓名',s_id int(11) not null comment "发件人id",desc text not null comment "发送内容",theme varchar(100) not null comment "发送主题",status tinyint(4) not null comment "发送状态 1为读取,0为 未读",words varchar(200) default comment '文件上传1',words1 varchar(200) default comment '文件上传2',words2 varchar(200) default comment '文件上传3',create_time int(11) default comment '创建时间',update_time int(11) default comment '更新时间'primary key(l_id)
)engine = innodb default charset = utf8m64;

tp5.0编写方法

  1. 创建后端控制器:php think make:controller admin/Letter;

    <?phpnamespace app\admin\controller;use think\Controller;
    use think\Request;# 站内信功能
    class Letter extends Controller
    {# 查看所有的站内信public function index(){return $this->fetch();}# layui获取数据,因为layui的分页不太会用,所以需要磨练一下,如何使用layui的分页,不能成为短板public function letterAll(){$data = \app\admin\model\Letter::letterAll();return json(['code' => 0,'data' => $data,'msg' =>'']);}# 发送站内信方法public function create(Request $request){if($request->isPost()){# 获取传递过来的所有的数据$data = $request->param();$rule = ['u_id|收件人' => 'require|number','theme|主题' => 'require','desc|发送内容' => 'require'];$validate = new \think\Validate($rule);if(!$validate->check($data)){$error = $validate->getError();return json(['code' => 100,'msg' => $error]);}# 编写主要内容$data['s_id'] = session('uid');$data['status'] = 0;$data['zt'] = 1;$res = \app\admin\model\Letter::create($data,true);if($res){return json(['code' => 200,'msg' => '发送成功']);}else{return json(['code' => 101,'msg' => '发送成功']);}}# 获取所有的用户姓名$data = \app\admin\model\UpserDetailed::field('upuser_id,name')->select();$this->assign('data',$data);return $this->fetch();}# 修改站内信数据public function edit(Request $request){$data = $request->param();# 查询对应的letter数据$letter = \app\admin\model\Letter::editLetter($data['l_id']);$this->assign('letter',$letter);return $this->fetch();}# 删除站内信public function delLet(Request $request){$data = $request->param('l_id');$res = \app\admin\model\Letter::where("l_id",$data)->delete();if($res){return json(['code' => 200,'msg' => '删除成功']);}else{return json(['code' => 100,'msg' => '删除失败']);}}
    }
  2. 创建后端模型文件:php think make:model admin/Letter;

    <?phpnamespace app\admin\model;use think\Model;class Letter extends Model
    {# 获取所有的信息public static function letterAll(){return self::table('think_letter')->alias('l')->join('think_upser_detailed d','d.upuser_id = l.u_id','left')->field('l.l_id,d.name,l.create_time,l.theme')->order('l.create_time desc')->select();}# 查询要修改的信息public static function editLetter($l_id){return self::table('think_letter')->alias('l')->join('think_upser_detailed d','d.upuser_id = l.u_id','left')->where('l.l_id',$l_id)->order('l.create_time desc')->field('l.l_id,d.upuser_id,d.name,l.words1,l.desc,l.theme')->find();}
    }
  3. 编写视图模板,前端写的 和数据差不多就可以了,使用的是layui前端框架,挺好用的这个框架

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FlTxy9HD-1588745093942)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20200422180351754.png)]

结尾

基本做站内信的效果是就是增删改查,现在是最主要的是回复功能,有点问题,略微留点小bug,过后处理,

站内信模块,主要的要点是根据:要发送的人,谁发送的,主题内容,主要内容等,然后判断一个状态,默认状态为0,如果为0则是未读取,当前台用户接受到之后,当他第点击的时候,更新数据库状态值为1,标识为已读。

现在是基本功能实现,但是需要考虑的是回复功能。
第一次做,回复就是在做一张表,用来关联上站内信的表,现在是时效信不太好,暂且这么处理,第一次做成站内信,还是蛮开心的,写代码是我快乐。

tp框架实现一对多单发站内信功能。相关推荐

  1. ASP.NET 实现站内信功能(点对点发送,管理员群发)

    正好这段时间在研究这个功能,还是得感谢这位大神,没有他的引路,我就不可能把站内信做出来. http://www.cnblogs.com/grenet/archive/2010/03/08/168065 ...

  2. 基于workerman实现的web消息推送站内信功能

    流程说明 使用 web-msg-sender 作为 服务器监听程序. 客户端(浏览器)通过websocket连接 服务器监听程序. 服务器应用程序(后端) 通过curl访问 服务器监听程序,将需要推送 ...

  3. 总后台顶部实现站内信功能

    近期的量化项目,接到一个需求,需要在总后台的顶部做一个站内信的功能,要求可以滚动显示,有信息的时候在站内信图标处显示红点,点击图标出现站内信列表,关掉之后再点击图标的时候,会有最新的信息进来 效果如下 ...

  4. 百万级用户量的站内信设计

    1. 方案描述 该方案用于系统站内信功能模块在百万级用户量情况下的效率问题,只是后台管理员给前台用户发送站内信,用户与用户之间的发送不在讨论内. 2. 方案详情 假设系统的用户量达到了200W,活跃用 ...

  5. 基于百万级别的站内信设计

    基本上现在的网站都会有站内信功能,主要分为少量(10-999用户),中量(1000-99999用户),大量(100W用户)不同的站内信架构,消耗存储空间,和效率也是不同的.这次要设计的是基于百万级别的 ...

  6. 单系统站内信数据库设计思路

    第一版设计 需求 :单用户之间通信(融合了用户反馈需求) 数据库设计:Message内容和收发者存在一张表中 message表: 这里一条Message存两次,类似邮件服务. status:已读.未读 ...

  7. 单系统站内信设计概述(满足百万级信息)

    基本功能 点到点的消息传送: 用户给用户 管理员给用户 点到面的消息传送 管理员给用户群 少量用户(10-999) 对于用户非常少的情况,没有必要深入的考虑数据库的优化,采用简单的表设计: 如表mes ...

  8. PHP站内搜索功能(laravel自带Scout驱动+elasticsearch)

    站内搜索 由于最近做的网站需要用到网站的站内搜索,我也是偷偷摸摸学了一手,希望有需要的朋友也可以看看 搜索引擎 Elasticsearch 官方网站 https://www.elastic.co/cn ...

  9. 两年后,再议“站内信”的实现

    两年前,万仓一黍在博客园发了两篇关于站内信的设计实现博文,<群发"站内信"的实现>.<群发"站内信"的实现(续)>,其中阐述了他关于站内 ...

最新文章

  1. NVIDIA GPU的神经网络自动调度
  2. SpringBoot 包含处理
  3. LeetCode之Fizz Buzz
  4. RestTemplate.getForObject返回List的时候处理方式
  5. MongoDB的下载、安装与部署
  6. 【车道线检测与寻迹】4月17 【多方内容总结】大模块:车辆检测,车道线检测,车辆压线判别
  7. android接支付宝授权和支付功能
  8. 《让人无法说 NO的攻心说话术》摘要
  9. 学个痛快,清华大学网上课程免费开放!知网免费下载!CSDN送课程!
  10. 轻松盘,资产盘点不再难 RFID办公资产盘点管理
  11. ARM学习之看门狗定时器
  12. (转)汇编bne的问题
  13. Android攻城狮AsyncTask
  14. 简单几步搞定Mac电脑快速返回桌面的操作!
  15. 计算机无法启动bios,电脑开启uefi后无法进入BIOS怎么办?
  16. IBM大中华区云计算总经理张永健:私有云产品受欢迎
  17. php 404 not found,404 not found nginx是什么意思
  18. phpstudy2018修改网站根目录以及本地域名访问配置方法
  19. 站内信(我的消息)业务在我司的实践
  20. 三极管计数系统的设计与实现matlab,运动控制系统课程设计-双闭环直流电动机调速系统设计及MATLAB仿真汇.docx...

热门文章

  1. async awit 的用法思考
  2. MLCC多层陶瓷电容的直流偏压(静电容量)特性
  3. UE4的门模型添加碰撞
  4. 金蝶支持linux系统,金蝶软件对电脑系统有要求吗?
  5. 什么是 PaaS? PaaS 类型介绍
  6. @RequestBody的使用
  7. GIS软件开发工具包TatukGIS Developer Kernel更新至v11.7
  8. EBS R12.2.6 克隆超详细操作手册
  9. 【ROS2原理9】 QoS - 截止日期、活跃度和寿命
  10. proteus——与门扩展中断