【云岚到家】-day07-4-实战项目-优惠券活动-项目准备
【云岚到家-即刻体检】-day07-4-实战项目-优惠券活动-活动管理
- 1 模块需求分析
- 1.1 业务流程
- 1.2 界面原型
- 1.3 业务模块
- 2 模块设计
- 2.1 数据流
- 2.2 表结构设计
- 2.2.1 优惠券活动表设计
- 2.2.2 优惠券表设计
- 2.2.3 优惠券核销表
- 2.2.4 优惠券退回表
- 2.3 创建数据库
- 2.4 创建工程
1 模块需求分析
1.1 业务流程
优惠券是最常用的一种营销活动,优惠券模块涉及到优惠券活动管理、抢券、优惠券核销三部分,涉及到的用户角色有运营人员和用户,下图是优惠券模块的整体业务流程。
优惠券活动管理:
运营人员在后台添加优惠券活动,包括:新增优惠券活动、修改优惠券活动、撤销优惠券活动等操作。
抢券:
优惠券到达发放时间用户领取优惠券,因为优惠券的数量有限,当到达发放时间后平台所有用户都可以抢券,先到先得。
优惠券核销:
用户抢到优惠券即可在下单时使用优惠券,享受优惠,如果取消订单将退回优惠券,优惠券退回后可用于其它订单。
1.2 界面原型
查询优惠券活动信息:
新增优惠券活动:
抢券:
到达优惠券发放时间用户开始抢券,在抢券界面列出了进行中的活动和即将开始的活动。
用券:
在下单时选择优惠券:
支付金额减去优惠金额:
1.3 业务模块
根据流程分析,优惠券模块可分为三个小模块,如下:
优惠券活动管理:
对优惠券活动进行管理,运营人员新增优惠券活动、修改优惠券活动、撤销优惠券活动及优惠券统计等。
抢券:
到了优惠券发放时间用户进行抢券,抢券过程对优惠券库存、对用户领取优惠券数量等进行校验,抢券成功记录用户领取优惠券的记录。
核销:
用户在下单时使用优惠券得到优惠金额,实付金额等于订单金额减去优惠金额,下单成功优惠券核销成功。
优惠券核销是指:顾客在购买商品使用优惠券,当此次消费符合优惠券的条件时提交订单后将优惠券的折扣应用到顾客的订单中,最后将优惠券标记为已使用或作废。
优惠券核销后还可以取消核销,如果用户取消订单会将优惠券取消核销即退回优惠券,退回优惠券后可以继续使用。
2 模块设计
2.1 数据流
根据需求分析优惠券模块的数据流如下:
优惠券活动表:
优惠券活动管理模块主要操作优惠券活动表。
优惠券活动记录优惠券活动信息,运营人员新增优惠券活动将写入此表,此表是优惠券管理主要维护的表。
关键字段:活动id、活动名称、优惠券类型、折扣、发放时间等。
优惠券表:
抢券模块主要操作优惠券表。
优惠券表记录用户领取的优惠券,用户抢券存在限制,每种优惠券一个用户只允许领取一张,优惠券的总数有限制。
关键字段:用户id、活动id、折扣、优惠券类型、有效期等。
举例:一个优惠券活动发放100张优惠券最多有100个用户去领取,每人领取一张,每个用户领取的一张优惠券会记录在优惠券表中,即该优惠券活动对应优惠券表最多100条记录。
优惠券核销表:
在使用优惠券模块当用户成功使用一张优惠券会在优惠券核销表记录一条记录,记录是哪个用户的哪个订单使用了哪个优惠券。
关键字段 :用户id、优惠券id、订单id,核销时间。
优惠券退回表:
如果用户取消订单,则会退回优惠券,具体操作是向优惠券退回表添加一条记录(记录用户退回优惠券的信息),并向优惠券核销表删除一条对应的记录,表示取消优惠券的核销。
关键字段:用户id、优惠券id、退回时间。
2.2 表结构设计
2.2.1 优惠券活动表设计
记录优惠券活动信息,运营人员新增优惠券活动将写入此表,此表是优惠券管理主要维护的表。
结构如下:
create table `jzo2o-market`.activity
(id bigint not null comment '活动id'constraint `PRIMARY`primary key,name varchar(100) default '0' not null comment '活动名称',type int not null comment '优惠券类型,1:满减,2:折扣',amount_condition decimal(10, 2) not null comment '使用条件,0:表示无门槛,其他值:最低消费金额',discount_rate int default 0 not null comment '折扣率,折扣类型的折扣率,8折就是存80',discount_amount decimal(10, 2) null comment '优惠金额,满减或无门槛的优惠金额',validity_days int default 0 not null comment '优惠券有效期天数,0:表示有效期是指定有效期的',distribute_start_time datetime not null comment '发放开始时间',distribute_end_time datetime not null comment '发放结束时间',status int not null comment '活动状态,1:待生效,2:进行中,3:已失效 4:作废',total_num int default 0 not null comment '发放数量,0:表示无限量,其他正数表示最大发放量',stock_num int default 0 not null comment '库存',create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',create_by bigint null comment '创建人',update_by bigint null comment '更新人',is_deleted tinyint default 0 not null comment '逻辑删除'
)charset = utf8mb4;
说明:
amount_condition:0表示无门槛,其它值表示最低消费金额。
discount_rate:当优惠券类型为2折扣时在此字段中存储折扣率。
discount_amount:当优惠券类型为1满减时在此字段中存储优惠券金额。
status:活动状态字段值包括:1:待生效,2:进行中,3:已失效 4:作废 几种,优惠券活动的初始状态是待生效,当到达优惠券发放时间时状态将改为进行中,当到达结束时间时状态改为已失效,当撤销活动后状态为作废。
2.2.2 优惠券表设计
记录用户领取的优惠券,结构如下:
create table `jzo2o-market`.coupon
(id bigint not null comment '优惠券id'constraint `PRIMARY`primary key,name varchar(255) not null comment '优惠券名称',user_id bigint not null comment '优惠券的拥有者',user_name varchar(50) null comment '用户姓名',user_phone varchar(20) null comment '用户手机号',activity_id bigint not null comment '活动id',type int not null comment '使用类型,1:满减,2:折扣',discount_rate int default 0 null comment '折扣',discount_amount decimal(10, 2) null comment '优惠金额',amount_condition decimal(10, 2) not null comment '满减金额',validity_time datetime null comment '有效期',use_time datetime null comment '使用时间',status tinyint not null comment '优惠券状态,1:未使用,2:已使用,3:已失效',orders_id varchar(50) null comment '订单id',create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',is_deleted tinyint default 0 not null comment '逻辑删除'
)charset = utf8mb4;create index user_my_query_indexon `jzo2o-market`.coupon (user_id, status)comment '用户查询我的优惠券快捷索引';
2.2.3 优惠券核销表
用户成功使用优惠券的记录,记录是哪个用户的哪个订单使用了哪个优惠券。
结构如下:
create table `jzo2o-market`.coupon_write_off
(id bigint not nullconstraint `PRIMARY`primary key,coupon_id bigint not null comment '优惠券id',user_id bigint not null comment '用户id',orders_id bigint not null comment '核销时使用的订单号',activity_id bigint not null comment '活动id',write_off_time datetime not null comment '核销时间',write_off_man_phone varchar(20) not null comment '核销人手机号',write_off_man_name varchar(50) not null comment '核销人姓名'
)comment '优惠券核销表' charset = utf8mb4;
2.2.4 优惠券退回表
用户取消订单后成功退回优惠券的记录,记录哪个用户退回了哪个优惠券。
结构如下:
create table `jzo2o-market`.coupon_use_back
(id bigint not null comment '回退记录id'constraint `PRIMARY`primary key,coupon_id bigint not null comment '优惠券id',user_id bigint not null comment '用户id',use_back_time datetime not null comment '回退时间',write_off_time datetime null comment '核销时间'
)comment '优惠券使用回退记录' charset = utf8mb4;
2.3 创建数据库
创建数据库:jzo2o-market
导入:jzo2o-market-init.sql
2.4 创建工程
在git 远程仓库创建 jzo2o-market工程,创建分支dev_01并切换到该分支。
从资料中获取源码:jzo2o-market-01-0.zip,解压源码到jzo2o-market目录。
下边在nacos创建配置jzo2o-market.yaml文件
进入nacos创建jzo2o-market.yaml
配置文件内容如下:
rabbit-mq:enable: true
xxl-job:executor:port: 11610
相关文章:

【云岚到家】-day07-4-实战项目-优惠券活动-项目准备
【云岚到家-即刻体检】-day07-4-实战项目-优惠券活动-活动管理 1 模块需求分析1.1 业务流程1.2 界面原型1.3 业务模块 2 模块设计2.1 数据流2.2 表结构设计2.2.1 优惠券活动表设计2.2.2 优惠券表设计2.2.3 优惠券核销表2.2.4 优惠券退回表 2.3 创建数据库2.4 创建工程 1 模块需…...
axios的使用
在 Vue 项目中,封装 Axios 并实现加密、重复请求优化、请求取消、页面切换时取消未完成的请求、以及区分上传和下载操作是非常常见的需求。下面将逐一讲解这些需求的实现方式。 1. Axios 的基本封装 首先,我们可以将 Axios 封装到一个服务层中…...
Ubuntu 使用命令克隆和恢复SD卡
因为平常我需要做很多张开发板的出货卡,测试卡,那么我需要将备份下来文件,方便后续管理,这里时候需要用到Ubuntu上面的命令来克隆镜像和恢复镜像到SD卡上 先查询自己的SD卡是在sdx,以我的为例子,为sdb 备…...

Java 小游戏《超级马里奥》
文章目录 一、效果展示二、代码编写1. 素材准备2. 创建窗口类3. 创建常量类4. 创建动作类5. 创建关卡类6. 创建障碍物类7. 创建马里奥类8. 编写程序入口 一、效果展示 二、代码编写 1. 素材准备 首先创建一个基本的 java 项目,并将本游戏需要用到的图片素材 image…...
go语言defer详解
什么是defer?为什么需要defer?怎样合理使用defer?defer进阶 defer的底层原理是什么?利用defer原理defer命令的拆解defer语句的参数闭包是什么?defer配合recover后记参考资料 什么是defer? defer是Go语言提供的一种用…...

【C语言】循环中断break
在循环使用过程中,可能遇到某些情况需要终止循环。比如按座位查找一位学生,循环查找,找到时可以直接停止。后续的循环将不再执行。 break;只跳出一层循环 例子中的素数判断,查找到根号n停止:一个合数等于两个数的乘积…...

centos ping能通但是wget超时-解决
问题截图: 域名解析地址为IPV6地址,建议您调整IPV4优先级之后,再尝试访问,请参考Linux系统IPv4/IPv6双栈接入优先使用IPv4设置:移动云帮助中心 实操截图:...

SDIO - DWC MSHC 电压切换和频率切换
背景 我们的sdio访问sd card过去一直跑在低频上,HS50M。前段时间给eMMc添加了HS200模式,eMMc的总线模式定义是这样的: 可以看到1.8V的IO 电压可以支持所有模式,我们过去的芯片,由硬件部门放到evb上,其IO …...

EI-CLIP 深度理解 PPT
系列文章目录 文章目录 系列文章目录 在电子商务产品的跨模态检索中,电子商务图像和电子商务语言都有许多独特的特点。如图所示,一个电子商务产品图片通常只包含一个简单的场景,有一个或两个前景物体和一个普通的背景。同时,电子商…...
leetcode力扣刷题系列——【最小元素和最大元素的最小平均值】
题目 你有一个初始为空的浮点数数组 averages。另给你一个包含 n 个整数的数组 nums,其中 n 为偶数。 你需要重复以下步骤 n / 2 次: 从 nums 中移除 最小 的元素 minElement 和 最大 的元素 maxElement。 将 (minElement maxElement) / 2 加入到 aver…...

【线性回归分析】:基于实验数据的模型构建与可视化
目录 线性回归分析:基于实验数据的模型构建与可视化 1. 数据准备 2. 构建线性回归模型 3. 可视化 数据分析的核心 构建预测模型 应用场景 预测模型中的挑战 结论 线性回归分析:基于实验数据的模型构建与可视化 在数据分析领域,线性…...

CountUp.js 实现数字增长动画 Vue
效果: 官网介绍 1. 安装 npm install --save countup.js2. 基本使用 // template <span ref"number1Ref"></span>// script const number1Ref ref<HTMLElement>() onMounted(() > {new CountUp(number1Ref.value!, 9999999).sta…...

设计模式大全
1. 策略模式 什么是策略模式? 策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互换。策略模式使得算法可以独立于使用它的客户端而变化。通过使用策略…...

redis IO多路复用机制
目录 一、五种 I/O 模型 1.阻塞IO(Blocking IO) 2.非阻塞IO(Nonblocking IO) 3.IO多路复用(IO Multiplexing) 通知的方式 select模式 poll模式 epoll模式 4.信号驱动IO(Signal Driven …...

Oracle漏洞修复 19.3 补丁包 升级为19.22
1.场景描述 上周末2024-10-12日,服务器扫出漏洞,希望及时修复。其中,oracle的漏洞清单如下,总结了下,基本都是 Oracle Database Server 的 19.3 版本到 19.20 版本和 21.3 版本到 21.11 版本存在安全漏洞,即版本问题。如: Oracle Database Server 安全漏洞(CVE-2023-22…...

Q2=10 and Q2=1--PLB(Fig.4)
(个人学习笔记,仅供参考) import numpy as np from scipy.special import kv, erfc from scipy.integrate import dblquad import matplotlib.pyplot as plt import scipy.integrate as spi# Constants w 0.6198 g0_sq 21.5989 rho 0.782…...

sd卡挂载返回FR_NOT_READY等错误
前言 本文章主要是例举文件系统挂载sd卡时出现的一下问题总结。本人用的芯片是GDF103系列,最近项目要使用sd进行读取文件,因此查阅了资料进行开发。一开始是使用了SPI方式连接,例程是原子哥的stm32进行改的,但多次调试都是卡死在发…...

推荐一款超级实用的浏览器扩展程序!实时翻译网页,支持多种语言(带私活源码)
今天给大家分享的一款浏览器插件。 一、背景 在如今的信息时代,互联网已经成为了人们获取信息、交流和娱乐的重要平台,而随着全球化的不断深入和交流的加强,越来越多的人开始关注各国的文化、政治和经济,因此需要浏览不同语言的…...

manjaro kde 24 应该如何设置才能上网(2024-10-13亲测)
要在 Manjaro KDE 24 上设置网络连接,可以按照以下步骤进行设置,确保你能够连接到互联网: 是的,你可以尝试使用一个简单的自动修复脚本来解决 Manjaro KDE 中的网络连接问题。这个脚本将检查网络服务、重新启动 NetworkManager、…...

2024软件测试面试大全(答案+文档)
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、软件测试基础面试题 1、阐述软件生命周期都有哪些阶段? 常见的软件生命周期模型有哪些? 软件生命周期是指一个计算机软件从功能确定设计,到…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...