做过的项目(5)——社区拉票

2024-08-23 05:52
文章标签 项目 社区 拉票 做过

本文主要是介绍做过的项目(5)——社区拉票,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

需求主要描述:
一个大型的游戏社区,需要进行进行海选活动。比如最美的玩家,最有人情味工会,最有爱心玩家,诸如此类的社区之"最"排名。玩家从其他玩家分享的链接登录,或者自己主动登录,对自己喜欢的不同赛道进行投票,登录后,要有排行榜功能,要能拉票功能。最核心的是需要统计出每日每个玩家的投票数量,活跃数量,然后需要接入到飞书机器人,完成每日数据统计的播报。

主要涉及技术栈:
thinkphp6+layUI (后台)前端(vue)+ 飞书机器人的开发通知 。
前端用户使用的是游戏组件登录,需要打通这个登录。

系统设计主要考虑点:
1.热榜 投票有不同赛道,为了避免考虑因为排名产生的强者效应,需要让每个登录进来的用户打乱排名,但是又不能在用户投完票之后,立刻随机,让用户找不到了自己刚才投票的那个人。也就是A用户登录后,看到的顺序是固定的,但是B/C/D看到的页面是要随机的

2.用户分享到群里点击链接的时候,会产生并发情况,需要做个取舍,因为如果A邀请B用户,收邀请的人数会+1,但是并发时候会导致计数不准确,B/C/D同时点击登录,而因为事物关系,会同时去修改邀请人数数据,但是又不能因为数据更改失败,让用户无法登录,用户受邀请登录是无感的。所以CAS做法在这里行不通,这里会牺牲掉数据的精确性保证用户的体验。

3.飞书机器人需要自己去申请,然后根据飞书文档的教程说明,完成卡片样式的制作与开发。飞书的机器人很灵活,功能也很强大,但是我们这里需要的是每天凌晨5-10分钟的时候,汇报昨日的数据统计。

4.数据统计部分 对数据精确性要求高的,直接使用专门的表进行插入,然后根据条件再直接使用createtime的时间范围进行查询

5.需要调用灰产鉴定(避免刷票)同时领取的奖品进行角色数据绑定(为了避免领取奖品出现领奖的漏洞,这样每个账号每次活动都只能领取一次奖品码,而且就算多次获取领奖码,也是无法兑换的)

6.对富文本要求比较高,指定使用ckEditor,之前的富文本达不到使用要求。需要将该插件集成到后台的前端代码里面。集成插件需要考虑登录态/变化的编辑。

其他说明:
整体上,该项目涉及到的技术复杂度并不高,用户数量比较大点,然后前端调整有点繁琐。然后使用到了机器人通知,然后需要集成ckEditor替换掉layUI本来的集成的富文本。同时项目开发周期比较少,因为上线比较急,属于临时活动,所以开发工期也比较紧张。

技术说明:
从系统的需求上看,排除基础的权限管理数据表,就是设计用户的投票还有拉票,邀请人数,然后需要编辑每个赛道和每个赛道相关信息。在前端读取到后端的API赛道信息,如果登录了,需要将收到的随机表储存一份到本地,防止用户投票之后,找不到自己投票的人。需要用到storage相关信息。

飞书机器人的开发:这里需要了解webhook概念。可以理解为,每个机器人其实就是一个随机链接,每次访问随机链接的时候,或者给随机链接post相关数据的时候,服务器已经拿到信息,对信息进行相关检查之后,然后推送到设置的这个webhook对应的机器人群上。利用这个功能,可以完成很多类似的 比如订单下单报警推送,资源耗尽消息推送,数据统计报表每日定时推送,也可以接入。https://open.feishu.cn/community/articles/7271149634339422210 阅读文档接入即可。

CKeditor的接入,这里需要对ck进行介绍:

CKEditor 是一个功能强大且广泛使用的开源富文本编辑器。
它允许用户在网页上以直观和用户友好的方式创建、编辑格式化的文本内容。用户可以进行常见的操作,如设置字体样式、大小、颜色,插入图片、链接、表格,调整段落格式等。CKEditor 具有高度的可定制性,可以根据具体的需求进行配置和扩展。它支持多种编程语言和框架,并且在许多网站和内容管理系统中被用于提供丰富的文本编辑体验。例如,在博客平台、论坛、在线文档编辑工具等应用场景中,CKEditor 能够帮助用户轻松创建和编辑吸引人的文本内容,而无需具备深入的 HTML 和 CSS 知识

比传统其他的富文本编辑器,功能上完备性确实高一些。
主要集成流程:(是这个项目里面最复杂的一环)
下载插件到本地静态目录后 先引入项目里面

   <script src="../../../../ckeditor/ckeditor.js"></script><script src="../../../../ckeditor/config.js"></script>CKEDITOR.config.allowedContent = true; //允许写内容let storyEditor = CKEDITOR.replace('story');  //替换掉我们需要进行富文本的内容storyEditor.on('fileUploadRequest', function (evt) {//接入文本简单,但是还需要加入文本里面文件的上传var fileLoader = evt.data.fileLoader,formData = new FormData(),xhr = fileLoader.xhr;//需要使用到XHR相关协议xhr.open('POST', fileLoader.uploadUrl, true);//需要设置请求授权头,否则是无法上传相关信息的xhr.setRequestHeader("Authorization", 'bearer' + localStorage.getItem('admin_token'));//XHR上传文件方法formData.append('file', fileLoader.file, fileLoader.fileName);fileLoader.xhr.send(formData);evt.stop();});//编辑器上传文件完成后的操作 将图片插入到编辑器里面,否则编辑后不会立刻出现在我们编辑的文本里面storyEditor.on('fileUploadResponse', function (evt) {// Prevent the default response handler.evt.stop();var data = evt.data,xhr = data.fileLoader.xhr;response = JSON.parse(xhr.responseText);source_url = response.data.src;CKEDITOR.tools.callFunction(1, source_url);});//最后将我们需要进行富文本化的内容写入里面storyEditor.setData(storyStr);//额外的需要注意 下面上传的文件查看路径(根据项目需要,是否需要调用系统内部已经上传的图片)
config.filebrowserBrowseUrl='';config.filebrowserUploadUrl='/';config.filebrowserImageBrowseUrl='

小结:
该项目是业务逻辑相对简单的项目,赛道,候选人,登录用户,投票,拉人,统计。需要掌握飞书机器人webhook的创建和接入,然后需要理解CK插件集成到前端里面的方式,前端框架集成的概念。

这篇关于做过的项目(5)——社区拉票的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1098531

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

MyCat分库分表的项目实践

《MyCat分库分表的项目实践》分库分表解决大数据量和高并发性能瓶颈,MyCat作为中间件支持分片、读写分离与事务处理,本文就来介绍一下MyCat分库分表的实践,感兴趣的可以了解一下... 目录一、为什么要分库分表?二、分库分表的常见方案三、MyCat简介四、MyCat分库分表深度解析1. 架构原理2. 分

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

在.NET项目中嵌入Python代码的实践指南

《在.NET项目中嵌入Python代码的实践指南》在现代开发中,.NET与Python的协作需求日益增长,从机器学习模型集成到科学计算,从脚本自动化到数据分析,然而,传统的解决方案(如HTTPAPI或... 目录一、CSnakes vs python.NET:为何选择 CSnakes?二、环境准备:从 Py

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca