做过的项目(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

相关文章

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

tomcat多实例部署的项目实践

《tomcat多实例部署的项目实践》Tomcat多实例是指在一台设备上运行多个Tomcat服务,这些Tomcat相互独立,本文主要介绍了tomcat多实例部署的项目实践,具有一定的参考价值,感兴趣的可... 目录1.创建项目目录,测试文China编程件2js.创建实例的安装目录3.准备实例的配置文件4.编辑实例的

springboot集成Deepseek4j的项目实践

《springboot集成Deepseek4j的项目实践》本文主要介绍了springboot集成Deepseek4j的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录Deepseek4j快速开始Maven 依js赖基础配置基础使用示例1. 流式返回示例2. 进阶

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法

《SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法》本文主要介绍了SpringBoot项目启动错误:找不到或无法加载主类的几种解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录方法1:更改IDE配置方法2:在Eclipse中清理项目方法3:使用Maven命令行在开发Sprin

Nginx实现高并发的项目实践

《Nginx实现高并发的项目实践》本文主要介绍了Nginx实现高并发的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用最新稳定版本的Nginx合理配置工作进程(workers)配置工作进程连接数(worker_co

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排