java后端项目:视积分抽奖平台

一、项目背景:

本次抽奖系统实现是在视频中内置一个线上活动抽奖系统,奖品是在一个时间段区间内均匀发布,用户可以在这个时间段内参与抽奖。

二、项目架构

活动抽奖平台采用微服务架构来完成,在功能上实现拆分为用户、网关、以及抽奖微服务,其中用户、网关是后台项目通用,活动抽奖的业务逻辑主要在抽奖服务完成。

网关:处理前端请求,聚合后台各个微服务的处理结构,JWT鉴权、router路由

用户服务:管理用户信息,比如登录、注册

抽奖服务:处理抽奖逻辑、条件校验、中奖、发奖等

三、设计环节

1.需求整理与分析:

1.1业务需求

需要两个方面的功能:奖品信息的后台管理、抽奖逻辑的是实现

1.1.1奖品后台管理

实现奖品的增删改查、满足奖品上传、开放时间、数量以及中奖概率是指

1.1.2抽奖逻辑

抽奖逻辑有三个核心:准入校验、中奖匹配、奖品发放

对于可以参加抽奖的用户有一个严格的校验,满足一定的条件才可以进行抽奖,其中主要校验逻辑需要有用户黑名单,ip黑名单校验,其次对于用户每日参与抽奖次数以及ip每日参与抽奖次数也要有一个限制,不能用一个用户或者同一个ip每天能无限次参与抽奖。对于中奖匹配(其过程就是随机数的区间匹配),通过一定概率来匹配奖品,对于每种不同的奖品的中奖率要不一样,而对于每个人的中奖率是要相同的。最后对奖品的发放,满足能够成功的发放,既能够扣减库存成功,这里就要求库存足够。对于成功获奖的用户需要记录一条获奖记录,方便后面获奖统计。对于中大奖的用户,还需要考虑将其加入到黑名单一段时间,为了中奖的公平性,防止同一个用户频繁中奖。

1.2非功能需求

1.2.1性能:

要求系统能够对抗高并发请求,面对大量用户的抽奖请求能够即时处理

1.2.2幂等性:

对于同一个用户由于网络原因在同一时间内的多次抽奖请求要能够有幂等性保证,保证同一时间同一用户只能发起一次抽奖

1.2.3安全性

对于奖品的发放,要保证库存正确扣减,不能出现“超发”

2.系统架构设计

2.1整体架构:

2.2整体业务:

业务逻辑简单来看就是完成一个奖品的匹配和发放,整体业务分为:网关微服务、用户微服务、抽奖系统微服务

抽奖流程:

2.2.1网关微服务

网关主要是提供后台系统对外的流量统一入口,所有的外部请求先打到网关,由网关做请求转发,同时也提供鉴权,限流等

2.2.2用户微服务

用户微服务是一个相对独立的功能,首先并不是所有的用户都有资格参与抽奖,只有系统内部人员才有资格,所以需要对内部系统人员进行管理和维护(包括登录的账户密码、年龄邮箱等信息)。

2.2.3抽奖微服务

抽奖微服务是整个抽奖系统的核心,主要负责抽奖核心逻辑的实现,包括准入校验,奖品匹配和发放。除此之外,还包括奖品后台的管理系统

3.数据库设计

3.1用户表

字段

类型

idint(10)
user_namevarchar(255)
pwdvarchar(255)
sexint(10)
ageint(10)
emailvarchar(255)
contactvarchar(255)
mobilevarchar(255)
id_cardvarchar(255)
create_timedatetime
modify_timedatetime

3.2奖品表

字段类型
idint(10)
titlevarchar(255)
prize_numint(11)
prize_codevarchar(255)
left_numint(11)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2978736.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

智能家居—ESP32开发环境搭建

相关文章 毕业设计——基于ESP32的智能家居系统(语音识别、APP控制) 智能家居—ESP32开发环境搭建 一、下载安装二、验证三、资料获取 一、下载安装 下载安装 vscode 安装插件 创建工程 二、验证 写一个简单的函数来验证一下功能 void setup() {// put your setup c…

常见UI组件(二)

一、文本输入 1.1 概述 TextInput为文本输入组件,用于接收用户输入的文本内容 1.2 参数 Entry Component struct Index {build() {Column({space : 50}) {TextInput({placeholder:请输入用户名}).width(70%)TextInput({text:当前内容}).width(70%)}.width(100%).…

光学雨量计:高精度测量降水量的理想解决方案

光学雨量计:高精度测量降水量的理想解决方案 河北稳控科技光学雨量计是一种高精度测量降水量的理想解决方案。它利用光学原理,通过光束的衰减来测量降雨强度和累积降水量。相比传统的雨量计,光学雨量计具有更高的精度和可靠性,成…

科研基础与工具(论文写作)

免责申明: 本文内容只是学习笔记,不代表个人观点,希望各位看官自行甄别 参考文献 科研基础与工具(YouTube) 学术写作句型 Academic Phrase bank 曼彻斯特大学维护的一个网站 写论文的时候,不不知道怎么…

IDEA开启自动导包,自动删包

找到file----------->Settings选项 找到Editor-------->General------------>Auto Import选项 勾选两个选项,在点击Apply,在点击ok 最后就ok了

入门指南:从零开始学习ReactJS

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

2024三掌柜赠书活动第二十四期:containerd原理剖析与实战

目录 前言 Containerd的架构 Containerd的工作流程 Containerd的实战演示 关于《containerd原理剖析与实战》 编辑推荐 内容简介 作者简介 图书目录 书中前言/序言 《containerd原理剖析与实战》全书速览 结束语 前言 作为开发者,对于编程语言并不陌生&…

Win10下VS2015无法添加任何文件,提示未能加载文件或程序集“Microsoft.VisualStudio.JSLS...

错误:未能加载文件或程序集“Microsoft.VisualStudio.JSLS, Version14.0.0.0, Cultureneutral, PublicKeyTokenb03f5f7f11d50a3a”或它的某一个依赖项。系统找不到指定的文件。 解决: 1. 管理员身份打开cmd 2. cd C:\Program Files (x86)\Microsoft Vis…

CommunityToolkit.Mvvm笔记---RelayCommand

RelayCommand 和 RelayCommand<T> 是 ICommand 实现&#xff0c;这些实现可向视图公开方法或委托。 这些类型充当在 viewmodel 和 UI 元素之间绑定命令的方法。 平台API&#xff1a;RelayCommand、RelayCommand<T>、IRelayCommand、IRelayCommand<T> 工作原理…

input的type=‘radio‘设置只读属性颜色为灰色,如何修改

目录 1.设置input和label的样式为不可点击。 2.设置input的readonly属性。 3.若想变回可修改&#xff0c;用js实现 4.如何自定义radio的颜色。 5.完整代码 input的单选框有时候需要实现只读&#xff0c;两个办法&#xff0c;一个disabled&#xff0c;一个是readonly. 但d…

【InternLM】Lagent智能体应用搭建

1. Lagent和AgentLego 1.1 Lagent Lagent 是一个开源的 LLM 智能体框架&#xff0c;允许使用者快速将一个大语言模型转换成智能体&#xff0c;并提供一些典型工具来激发大语言模型的潜能。Lagent 框架图如下&#xff1a; Lagent 包含三个主要模块&#xff1a;agents&#xf…

ubuntu18.04安装F4PGA教程

环境搭建教程&#xff1a; f4pga-arch-defs/xilinx/xc7 at main f4pga/f4pga-arch-defs GitHub git clone https://github.com/SymbiFlow/f4pga-arch-defs.git cd f4pga-arch-defs make env cd build 主要是make env&#xff0c;会下载很多东西&#xff0c;然后生成很多描…

38. 【Android教程】Handler 消息传递机制

跑在主线程&#xff08;即UI线程&#xff09;当中的&#xff0c;而且所有的 UI 刷新以及输入处理必须在主线程中执行。这样一旦任务多了就会阻塞 UI 线程导致画面卡顿&#xff0c;从而严重影响性能&#xff0c;所以正确的做法是将耗时的操作单独放在子线程中与 UI 线程隔离&…

本地代码配置多个远程仓库进行推送

Git配置多个远程仓库 问题解决办法新增远程地址推送 问题 目前一个项目正在一个仓库中存储&#xff0c;需要新增一个仓库&#xff0c;实现能同时推送到两个仓库中&#xff0c;比如一个项目同时维护在github和gitee上。 解决办法 新增远程地址 直接在本地项目根目录下输入: …

玩原神玩的!30本提升你视野、眼界和格局的好书不如你挑的一本适合自己的书!——早读(逆天打工人爬取热门微信文章解读)

许久不见&#xff0c;雨天坐公车&#xff0c;别是一番滋味在心头 引言Python 代码第一篇 洞见 人民日报推荐&#xff1a;30本提升你视野、眼界和格局的好书第二篇 人民日报 来了&#xff01;新闻早班车要闻社会政策 结尾 不要着急 最好的总会在最不经意的时候出现 意外的六分钟…

Linux系统中Nginx的使用

Nginx是一款开源的高性能、高可靠性的Web服务器和反向代理服务器。它在Linux系统中得到了广泛的应用&#xff0c;被用于构建高性能的Web应用和提供反向代理服务。下面将介绍Nginx在Linux系统中的使用以及一些常见的应用案例。 一、Nginx的安装和配置 安装Nginx 在Linux系统中…

Excel如何计算时间差

HOUR(B1-A1)&"小时 "&MINUTE(B1-A1)&"分钟 "&SECOND(B1-A1)&"秒"

【C++】一篇文章带你深入了解list

目录 一、list的介绍二、 标准库中的list类2.1 list的常见接口说明2.1.1 list对象的常见构造2.1.1.1 [无参构造函数](https://legacy.cplusplus.com/reference/list/list/list/)2.1.1.2 [有参构造函数(构造并初始化n个val)](https://legacy.cplusplus.com/reference/list/list/…

TR5 - Transformer的位置编码

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 前言什么是位置编码1. 定义2. 三角函数3. 位置编码公式4. 位置编码示例 可视化理解位置编码1. 代码实现2. 观察不同位置对应的曲线3. 整句话的位置编码可…