博主先容:专注于Java vue .net php phython 小步伐 等诸多技能范畴和毕业项目实战、企业信息化体系创建,从业十五余年开辟操持教学工作
☆☆☆ 出色专栏保举订阅☆☆☆☆☆否则下次找不到哟
我的博客空间发布了1000+毕设标题 方便各人学习利用
感爱好的可以先收藏起来,尚有各人在毕设选题,项目以及论文编写等干系题目都可以给我留言咨询,盼望资助更多的人
体系操纵流程
3.3.1用户登录流程
对于体系的安全性的第一关,就是用户想要进入体系,必须通过登录窗口,输入本身的登录信息才可以举行登录,用户输入的信息准确无误后才可以进入到操纵体系界面,举行功能模块的相对应操纵,假如用户输入的信息禁绝确,则窗口出现提示框,用户登录失败,返回到第一步举行重新输入,如图3-1所示。
图3-1登录操纵流程图
3.3.2信息添加流程
对于投稿和稿件处理处罚体系,必要随时添加所必要的数据信息,对于用户添加信息,必要根据添加界面,根据选框的内容举行填写所要添加的数据信息,信息输入完成后判断数据信息是否符合要求,符合要求则添加完成,用户所添加的信息不符合要求,则必要返回到第一步,重新输入数据信息,再举行判断操纵,如图3-2所示。
图3-2 信息添加流程图
3.3.3信息删除流程
不管是哪个用户脚色进入到不通的体系操纵界面,都可以举行差别的信息内容的操纵功能,对用体系数据信息的删除,用户一旦将信息删除,那么该删除的数据信息将无法规复,以是用户在对数据删除事,肯定判断删除的内容是否是确定要删除的,确定无误后选择确定删除操纵,如图3-3所示。
图3-3 信息删除流程图
4.1体系架构操持
投稿和稿件处理处罚体系的体系项目标概述计分别析,重要内容投稿和稿件处理处罚体系信息的详细分析,举行数据库的是操持,数据接纳mysql数据库,而且对于体系的操持接纳比力人性化的操纵操持,对于体系出现的错误信息可以及时做出处理处罚及反馈。
基于投稿和稿件处理处罚体系的操持基于现有的互联网,可以实现管理员:首页、用户管理、在线投稿、稿件分类、稿件管理、专家管理功能模块等。根据体系功能需求创建的模块关系图如下图:
图4-1管理员功能模块图
4.2开辟流程操持
投稿和稿件处理处罚体系的开辟对管理模块和体系利用的数据库举行分析,编写代开辟,规划和操纵是构建信息管理应用步伐的须要三步曲,它决定了体系是否可以大概真正实现预设功能以及是否可以在乐成操持后实行。在开辟过程中,每个阶段必须严格按照线性序次举行开辟,而且在相应阶段天生的每个工作都可以通过技能举行验证和查抄。确保一个阶段完成后是准确的,不会造成下一阶段拖拽征象,使体系完成操持功能后得到包管。
从 投稿和稿件处理处罚体系的乐成开辟履向来看,上述方法效果最为显着,最大程度地低落了体系开辟的复杂性。如图4-2所示。
图4-2开辟体系流程图
4.3数据库操持
数据库是信息体系的底子和核心。数据库操持的优劣直接影响到信息体系开辟的成败。创建数据库表起首确定实体的属性和实体之间的关系。根据关系创建一个数据表。4.3.1实体ER图
数据库是整个软件编程中最告急的一个步调,对于数据库题目重要是判断命据库的数量和布局公式的创建。展示体系利用的是Mysql举行对数据库举行管理,举行包管数据的安全性、稳固性等。
概念模子的操持是为了抽象真实天下的信息,并对信息天下举行建模。它是数据库操持的强大工具。数据库概念模子操持可以通过E-R图形貌现实天下的概念模子。体系的E-R图表现了体系中实体之间的链接。而且Mysql数据库是自我掩护本领比力强的数据库,下图重要是对数据库实体的E-R图:
(1) 专家书息实体图,如图4-3所示:
图4-3专家书息实体属性图
(2) 投稿中心实体图如图4-4所示:
图4-4投稿中心实体图
(3) 稿件管理实体图如图4-5所示:
图4-5稿件管理实体图
这些功能可以充实满足投稿和稿件处理处罚体系的需求。此体系功能较为全面如下图体系功能布局如图4-6所示。
图4-6体系功能布局图
4.3.2数据表
我们可以根据数据布局的详细分析要求,我们根据输入和输出数据量的要求举行分析,确定什么表表,布局之间的关系,我们可以验证,调解和美满,查询和欣赏过程,可以实现数据库,以利用户对数据和功能有更多要求。
基于体系利用的数据库管理体系的特点,对数据库的概念模子举行了转换和构建。但是,这个体系只必要充实思量 投稿和稿件处理处罚体系的功能,而且构造比力清楚。
| ordinary_users_id
| int
| 11
| 是
| 是
| 平常用户ID
| | full_name
| varchar
| 64
| 否
| 否
| 姓名
| | gender
| varchar
| 64
| 否
| 否
| 性别
| | examine_state
| varchar
| 16
| 是
| 否
| 稽核状态
| | recommend
| int
| 11
| 是
| 否
| 智能保举
| | user_id
| int
| 11
| 是
| 否
| 用户ID
| | create_time
| datetime
| 0
| 是
| 否
| 创建时间
| | update_time
| timestamp
| 0
| 是
| 否
| 更新时间
|
| slides_id
| int
| 10
| 是
| 是
| 轮播图ID:
| | title
| varchar
| 64
| 否
| 否
| 标题:
| | content
| varchar
| 255
| 否
| 否
| 内容:
| | url
| varchar
| 255
| 否
| 否
| 链接:
| | img
| varchar
| 255
| 否
| 否
| 轮播图:
| | hits
| int
| 10
| 是
| 否
| 点击量:
| | create_time
| timestamp
| 0
| 是
| 否
| 创建时间:
| | update_time
| timestamp
| 0
| 是
| 否
| 更新时间:
|
| manuscript_management_id
| int
| 11
| 是
| 是
| 稿件管理ID
| | manuscript_no
| varchar
| 64
| 否
| 否
| 稿件编号
| | manuscript_name
| varchar
| 64
| 否
| 否
| 稿件名称
| | manuscript_type
| varchar
| 64
| 否
| 否
| 稿件范例
| | contributor
| int
| 11
| 否
| 否
| 投稿人
| | upload_date
| date
| 0
| 否
| 否
| 上传日期
| | remarks
| varchar
| 64
| 否
| 否
| 备注
| | manuscript_attachment
| varchar
| 255
| 否
| 否
| 稿件附件
| | manuscript_review_status
| varchar
| 64
| 否
| 否
| 稿件稽核状态
| | expert_user
| int
| 11
| 否
| 否
| 专家用户
| | introduction_to_manuscript
| text
| 0
| 否
| 否
| 稿件简介
| | recommend
| int
| 11
| 是
| 否
| 智能保举
| | create_time
| datetime
| 0
| 是
| 否
| 创建时间
| | update_time
| timestamp
| 0
| 是
| 否
| 更新时间
|
| manuscript_classification_id
| int
| 11
| 是
| 是
| 稿件分类ID
| | manuscript_type
| varchar
| 64
| 否
| 否
| 稿件范例
| | recommend
| int
| 11
| 是
| 否
| 智能保举
| | create_time
| datetime
| 0
| 是
| 否
| 创建时间
| | update_time
| timestamp
| 0
| 是
| 否
| 更新时间
|
| journal_articles_id
| int
| 11
| 是
| 是
| 期刊文章ID
| | title
| varchar
| 64
| 否
| 否
| 标题
| | author
| varchar
| 64
| 否
| 否
| 作者
| | release_date
| date
| 0
| 否
| 否
|
| | article_attachment
| varchar
| 255
| 否
| 否
| 文章附件
| | article_cover
| varchar
| 255
| 否
| 否
| 文章封面
| | article_content
| text
| 0
| 否
| 否
| 文章内容
| | recommend
| int
| 11
| 是
| 否
| 智能保举
| | create_time
| datetime
| 0
| 是
| 否
| 创建时间
| | update_time
| timestamp
| 0
| 是
| 否
| 更新时间
|
| expert_user_id
| int
| 11
| 是
| 是
| 专家用户ID
| | name_of_expert
| varchar
| 64
| 否
| 否
| 专家姓名
| | gender
| varchar
| 64
| 否
| 否
| 性别
| | examine_state
| varchar
| 16
| 是
| 否
| 稽核状态
| | recommend
| int
| 11
| 是
| 否
| 智能保举
| | user_id
| int
| 11
| 是
| 否
| 用户ID
| | create_time
| datetime
| 0
| 是
| 否
| 创建时间
| | update_time
| timestamp
| 0
| 是
| 否
| 更新时间
|
| expert_information_id
| int
| 11
| 是
| 是
| 专家书息ID
| | name_of_expert
| varchar
| 64
| 否
| 否
| 专家姓名
| | expert_photos
| varchar
| 255
| 否
| 否
| 专家相片
| | expert_introduction
| text
| 0
| 否
| 否
| 专家先容
| | recommend
| int
| 11
| 是
| 否
| 智能保举
| | create_time
| datetime
| 0
| 是
| 否
| 创建时间
| | update_time
| timestamp
| 0
| 是
| 否
| 更新时间
|
| collect_id
| int
| 10
| 是
| 是
| 收藏ID:
| | user_id
| int
| 10
| 是
| 否
| 收藏人ID:
| | source_table
| varchar
| 255
| 否
| 否
| 泉源表:
| | source_field
| varchar
| 255
| 否
| 否
| 泉源字段:
| | source_id
| int
| 10
| 是
| 否
| 泉源ID:
| | title
| varchar
| 255
| 否
| 否
| 标题:
| | img
| varchar
| 255
| 否
| 否
| 封面:
| | create_time
| timestamp
| 0
| 是
| 否
| 创建时间:
| | update_time
| timestamp
| 0
| 是
| 否
| 更新时间:
|
该体系是通过jdbc和MySQL告竣毗连的,新建一个jdbc.properties文件来填写与数据库毗连所必要的驱动和参数。
jdbc.driverClass=com.MySQL.jdbc.Driver
jdbc.url=jdbc:MySQL://localhost:3306/tsi
jdbc.username=root
jdbc.password=123
第一个参数代表MySQL数据库的驱动,第二个参数代表要毗连的数据库,第三个和第四个参数代表数据库毗连名和暗码。
背景与数据库访问重要是通过HQL语句来举行查询的,查询语句中的表名是表格的实体类名,在这种查询语句中*是不允许利用的,除非恰当聚合函数一起利用才可以。
重要由两部分构成,登录前的登录界面以及登录后的用户功能界面。登录界面,要求用户输入用户名和暗码,当用户名和暗码此中一个输入为空时,给出提示“用户名,暗码不能为空”。获取用户名和暗码后到数据库中查找,假如用户名存在,以及对应的暗码准确,则登录乐成,否则登录失败。登录失败后给出提示,并把核心停在文本框中。登录乐成后将该次会话的全局变量username设置为用户名。登录乐成后进入会员的功能模块,重要有会员根本信息修改,已经发布考试信息管理,发布信息,和退出功能。退出功能是扫除全局变量username的值,并跳回到首页。
登录流程图如下图所示。
图5-1登录流程图
用户登录界面如下图所示。
图5-1登录界面
登录体系重要代码如下。
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[实行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, "账号或暗码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或暗码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户稽核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户稽核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或暗码禁绝确");
}
}
用户在填写数据的时间必须与注册页面上的验证相匹配否则会注册失败,注册页面的表单验证是通过验证的,用户名的长度必须在6到18之间,邮箱必须带有@符号,暗码和暗码确认必须雷同,你输入的暗码,体系会根据你输入暗码的强度给出指定的值,电话号码和身份证号码必须要求输入格式与生存符合合,当你前台验证通过的时间你点击注册,表单会将你输入的值通过name值通报给背景并生存到数据库中。
用户注册流程图如下图所示。
图5-1用户注册流程图
图5-1用户注册界面图
注册逻辑关键代码如下所示。
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, "用户已存在");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
* 用户ID:[0,8388607]用户获取其他与用户干系的数据
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Integer userId;
/**
* 账户状态:[0,10](1可用|2非常|3已冻结|4已注销)
*/
@Basic
@Column(name = "state")
private Integer state;
/**
* 地点用户组:[0,32767]决定用户身份和权限
*/
@Basic
@Column(name = "user_group")
private String userGroup;
/**
* 前次登录时间:
*/
@Basic
@Column(name = "login_time")
private Timestamp loginTime;
/**
* 手机号码:[0,11]用户的手机号码,用于找回暗码时或登录时
*/
@Basic
@Column(name = "phone")
private String phone;
/**
* 手机认证:[0,1](0未认证|1稽核中|2已认证)
*/
@Basic
@Column(name = "phone_state")
private Integer phoneState;
/**
* 用户名:[0,16]用户登录时所用的账户名称
*/
@Basic
@Column(name = "username")
private String username;
/**
* 昵称:[0,16]
*/
@Basic
@Column(name = "nickname")
private String nickname;
/**
* 暗码:[0,32]用户登录所需的暗码,由6-16位数字或英文构成
*/
@Basic
@Column(name = "password")
private String password;
/**
* 邮箱:[0,64]用户的邮箱,用于找回暗码时或登录时
*/
@Basic
@Column(name = "email")
private String email;
/**
* 邮箱认证:[0,1](0未认证|1稽核中|2已认证)
*/
@Basic
@Column(name = "email_state")
private Integer emailState;
/**
* 头像地点:[0,255]
*/
@Basic
@Column(name = "avatar")
private String avatar;
/**
* 创建时间:
*/
@Basic
@Column(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Timestamp createTime;
@Basic
@Transient
private String code;
}
用户登录/注册乐成之后可以修改本身的根本信息。修改页面的表单中每一个input的name值都要与实体类中的参数相匹配,在用户点击修改页面的时间,假如改后用户名与数据库内里重复了,页面会提示该用户名已经存在了,否则通过Id来查询用户,并将用户的信息修改为表单提交的数据。
假如投搞中心数据的信息必要修改,管理员可以通过查询投搞中心数据的根本信息来查询投搞中心数据,查询投搞中心数据是通过ajax技能来举行查询的,必要通报投搞中心数据的标题、编号等参数然后在返回到该页面中,可以选中要修改或删除的那条信息,假如选中了高出一条数据,页面会挑一个窗口提示只能选择一条数,假如没有选中数据会挑一个窗口题型必须选择一条数据。当选择确认修改的时间,背景会根据传过来的id到数据库查询,并将效果返回到修改页面中,可以在修改页面中修改刚刚选中的信息当点击确认的时间from表单会将修改的数据提交到背景并生存到数据库中,就是说假如提交的数据数据库中存在就修改,否则就生存。
投搞中心展示界面如下图所示。
图5-1投搞中心界面
根据需求,必要对专家举行添加、删除或修改详情信息。删除或修改专家时,体系根据专家的状态判断为可删除状态下,才会给出删除和修改链接,点击删除链接按钮时,哀求到达背景,还会先查询用户状态再次做出判断可否删除。点击修改链接按钮时,会跳转到修改信息的页面,重新填写好数据后,数据提交到背景会对数据库中相应的记载做出修改。
添加专家时,会给出数据填写的页面,该页面根据填写好的专家编号同样会事先发送Ajax哀求查询编号是否已存在,数据填写好之后提交到背景,会调用干系服务在数据库中插入记载。
专家管理流程图如下图所示。
图5-1专家管理流程图
专家管理页面操持效果如下图所示。
图5-1专家管理界面图
专家管理关键代码如下所示。
@RequestMapping(value = {"/count_group", "/count"})
public Map<String, Object> count(HttpServletRequest request) {
Query count = service.count(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
文档和源码下载地点
(springboot+mysql)投稿和稿件处理处罚体系.zip资源-CSDN文库
各人点赞、收藏、关注、批评啦 其他的定制服务 下方接洽卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 大概私信作者
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |