实现一个投票系统
项目规划:2期
第一期:实现投票的功能
第二期:实现限制、统计等功能
需求池:
1.新增活动
2.新增候选人
3.查询活动
4.查询候选人列表
5.查询候选人详情(包含投票记录)
6.实现投票
5.2 需求分析
实现一个投票系统
ProcessOn思维导图、流程图-思维导图模板_思维导图软件免费下载_在线作图协作工具
5.3 设计
1.接口规范
1.协议
http/https
2.请求方式
get(查询)\post(新增、修改、删除)
3.参数
单参数:键值对
多参数:json
4.返回值
{
code:系统码,
msg:"",
data:
}
5.安全
1.https
2.核心接口实现验证签名
支付、敏感操作
3.数据脱敏
2.开发规范
《阿里巴巴Java开发规范》
3.数据库设计
六大范式
关系数据库中的关系满足一定要求的,满足不同程度要求的为不同的范式。满足最低要求的叫第一范式,简称1NF;在第一范式的基础上满足进一步要求的称为第二范式,简称2NF,其余范式以此类推。对于各种范式之间有如下关系:
功能单一原则
活动表(id,name,info,oid,stime,etime,ctime,flag)
候选表(id,title,info,oid,tickets,flag,ctime)
投票表(id,ip,cid,ctime)
oss存储表(id,bname,oname,preurl,ctime,etime,type)
SQL脚本:
4.技术选型
数据库:Mysql+Redis
后端:微服务(SpringBoot+SpringCloud(Nacos、Feign、Gateway、Sentinel、Sleuth+Zipkin))
前端:微信小程序
5.4编码-后端
核心依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<!-- 子项目-->
<modules>
<module>Ticket_Common</module>
<module>Ticket_VoteServer</module>
<module>Ticket_VoteApi</module>
</modules>
<!-- 父级项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.qfedu.ticket</groupId>
<artifactId>ticket</artifactId>
<version>1.0</version>
<name>Ticket</name>
<description>Demo project for Spring Boot</description>
<!-- 属性声明-->
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2020.0.2</spring-cloud.version>
</properties>
<!-- 依赖-公共 -->
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- 限定版本-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
子项目:Ticket_VoteServer 类型:jar 实现服务
核心依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ticket</artifactId>
<groupId>com.qfedu.ticket</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Ticket_VoteServer</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
<version>2.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.qfedu.ticket</groupId>
<artifactId>Ticket_Common</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
核心配置:
server:
port: 8081
spring:
application:
name: LxVoteServer #项目名,服务名
cloud:
nacos:
discovery: #注册中心
server-addr: 10.8.162.10:8848
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db_vote211?serverTimezone=Asia/Shanghai
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
jpa:
database: MySQL
show-sql: true
hibernate:
ddl-auto: update
子项目:Ticket_VoteApi 类型:jar 服务消费者实现对外接口
核心依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ticket</artifactId>
<groupId>com.qfedu.ticket</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Ticket_VoteApi</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
<version>2.2.0.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
<dependency>
<groupId>com.qfedu.ticket</groupId>
<artifactId>Ticket_Common</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
投票服务
1.实现活动的新增
2.实现候选新增
3.实现候选投票
4.实现活动查询
5.实现候选查询
6.实现候选投票详情查询