博主介绍:专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作
☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟
我的博客空间发布了1000+毕设题目 方便大家学习使用
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
开篇系统运行截图 开始
本小区疫苗接种管理采用Java技术,Mysql数据库开发,充分保证了系统稳定性、完整性。
小区疫苗接种管理的设计与实现的设计思想如下:
操作简单方便、系统界面安全良好:简单明了的页面布局,方便查询小区疫苗接种管理管理的相关信息。
2、即时可见:对小区疫苗接种管理信息的处理将立马在对应地点可以查询到,从而实现“即时发布、即时见效”的系统功能。
3、功能的完善性:可以管理首页、个人中心、用户管理、接种预约、公告栏、接种信息、疫苗信息、系统维护、用户留言、报表统计管理、系统管理模块的修改和维护操作。
3.5系统流程和逻辑
系统业务流程图,如图所示:
图3-1登录流程图
图3-2添加信息流程图
图3-3注册信息流程图
4系统概要设计
4.1 概述
小区疫苗接种管理基于Web服务模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在不受时间、地点的限制来使用这个系统。小区疫苗接种管理工作原理图,如图4-1所示:
图4-1 系统工作原理图
4.2 系统结构
本系统架构网站系统,本系统的具体功能如下:
图4-2系统功能结构图
整个系统是由多个功能模块组合而成的,要将所有的功能模块都一一列举出来,然后进行逐个的功能设计,使得每一个模块都有相对应的功能设计,然后进行系统整体的设计。
系统功能结构图,如图4-3所示:
图4-3 管理员功能结构图
4.3. 数据库设计
4.3.1 数据库实体
管理员信息结构图,如图4-5所示:
图4-5 管理员信息实体结构图
用户信息实体属性图,如图4-6所示:
图4-6用户信息实体属性图
疫苗管理实体属性图如图4-7所示。
图4-7疫苗管理实体属性图
接种地点管理实体属性图如图4-8所示。
图4-8接种地点管理实体属性图
4.3.2 数据库设计表
4.4 数据表
将数据库概念设计的E-R图转换为关系数据库。在关系数据库中,数据关系由数据表组成,但是表的结构表现在表的字段上。
report_statistics | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
report_statistics_id | int | 11 | 否 | 主键 | 报表统计ID |
vaccinated_population | varchar | 64 | 是 | 接种人群 | |
inoculation_quantity | varchar | 64 | 是 | 接种数量 | |
date | date | 0 | 是 | 日期 | |
statistician | varchar | 64 | 是 | 统计人 | |
remarks | varchar | 64 | 是 | 备注 | |
recommend | int | 11 | 否 | 智能推荐 | |
create_time | datetime | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
system_maintenance | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
system_maintenance_id | int | 11 | 否 | 主键 | 系统维护ID |
maintenance_time | date | 0 | 是 | 维护时间 | |
maintenance_reason | varchar | 64 | 是 | 维护原因 | |
operator | varchar | 64 | 是 | 操作人 | |
remarks | varchar | 64 | 是 | 备注 | |
maintenance_log | text | 0 | 是 | 维护日志 | |
recommend | int | 11 | 否 | 智能推荐 | |
create_time | datetime | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
vaccination_appointment | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
vaccination_appointment_id | int | 11 | 否 | 主键 | 接种预约ID |
vaccine_name | varchar | 64 | 是 | 疫苗名称 | |
manufacturer | varchar | 64 | 是 | 生产厂家 | |
adaptive_population | varchar | 64 | 是 | 适应人群 | |
taboo | varchar | 64 | 是 | 禁忌 | |
time_of_appointment | datetime | 0 | 是 | 预约时间 | |
number_of_people_who_can_make_an_appointment | varchar | 64 | 是 | 可预约人数 | |
vaccine_effect | text | 0 | 是 | 疫苗作用 | |
recommend | int | 11 | 否 | 智能推荐 | |
create_time | datetime | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
vaccination_information | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
vaccination_information_id | int | 11 | 否 | 主键 | 接种信息ID |
user_name | int | 11 | 是 | 用户名 | |
full_name | varchar | 64 | 是 | 姓名 | |
contact_information | varchar | 64 | 是 | 联系方式 | |
vaccine_name | varchar | 64 | 是 | 疫苗名称 | |
time_of_appointment | datetime | 0 | 是 | 预约时间 | |
examine_state | varchar | 16 | 否 | 审核状态 | |
examine_reply | varchar | 255 | 是 | 审核回复 | |
recommend | int | 11 | 否 | 智能推荐 | |
create_time | datetime | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
vaccine_information | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
vaccine_information_id | int | 11 | 否 | 主键 | 疫苗信息ID |
vaccine_number | varchar | 64 | 是 | 疫苗编号 | |
vaccine_name | varchar | 64 | 是 | 疫苗名称 | |
vaccine_effect | varchar | 64 | 是 | 疫苗作用 | |
adaptive_population | varchar | 64 | 是 | 适应人群 | |
taboo | varchar | 64 | 是 | 禁忌 | |
manufacturer | varchar | 64 | 是 | 生产厂家 | |
date_of_manufacture | date | 0 | 是 | 生产日期 | |
expiration_date_ | date | 0 | 是 | 过期日期 | |
inventory_quantity | varchar | 64 | 是 | 库存数量 | |
recommend | int | 11 | 否 | 智能推荐 | |
create_time | datetime | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
bulletin_board | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
bulletin_board_id | int | 11 | 否 | 主键 | 公告栏ID |
announcement_title | varchar | 64 | 是 | 公告标题 | |
date | date | 0 | 是 | 日期 | |
publisher | varchar | 64 | 是 | 发布人 | |
remarks | varchar | 64 | 是 | 备注 | |
announcement_content | text | 0 | 是 | 公告内容 | |
recommend | int | 11 | 否 | 智能推荐 | |
create_time | datetime | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 |
5 系统详细设计
5.1管理员功能模块
管理员登录,管理员通过输入用户,密码,角色等信息进行系统登录,如图5-1所示。
图5-1管理员登录界面图
管理员登录进入小区疫苗接种管理可以查看管理员:首页、用户管理、接种预约、公告栏、接种信息、疫苗信息、系统维护、用户留言、报表统计等内容,如图5-2所示。
图5-2管理员功能界面图
用户管理,在用户管理页面可以查看等索引、用户账号、密码、用户姓名、性别、年龄、联系电话、电子邮箱、身份证号、家庭住址、个人照片等信息,并可根据需要进行修改或删除等操作,如图5-3所示。
图5-3用户管理界面图
疫苗信息,在疫苗信息页面可以查看索引、疫苗编号、疫苗名称、疫苗作用、生产厂家等信息,并可根据需要进行修改或删除等操作,如图5-4所示。
图5-4疫苗信息界面图
5.2用户后台功能模块
用户注册,在用户注册页面通过填写用户账号、密码、用户姓名、年龄、联系电话、电子邮箱、身份证号、家庭地址等信息完成用户注册,如图5-8所示。
图5-8用户注册界面图
主要代码:
* 服务对象
*/
@Autowired
public UserController(UserService service) {
setService(service);
}
/**
* Token服务
*/
@Autowired
private AccessTokenService tokenService;
@Autowired
private UserGroupService userGroupService;
/**
* 注册
* @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);
}
/**
* 找回密码
* @param form
* @return
*/
@PostMapping("forget_password")
public Map<String, Object> forgetPassword(@RequestBody User form,HttpServletRequest request) {
JSONObject ret = new JSONObject();
String username = form.getUsername();
String code = form.getCode();
String password = form.getPassword();
// 判断条件
if(code == null || code.length() == 0){
return error(30000, "验证码不能为空");
}
if(username == null || username.length() == 0){
return error(30000, "用户名不能为空");
}
if(password == null || password.length() == 0){
return error(30000, "密码不能为空");
}
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",username);
Query select = service.select(query, service.readConfig(request));
List list = select.getResultList();
if (list.size() > 0) {
User o = (User) list.get(0);
JSONObject query2 = new JSONObject();
JSONObject form2 = new JSONObject();
// 修改用户密码
query2.put("user_id",o.getUserId());
form2.put("password",service.encryption(password));
service.update(query, service.readConfig(request), form2);
return success(1);
}
return error(70000,"用户不存在");
}
/**
* 登录
* @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, "账号或密码不正确");
}
}
/**
* 修改密码
* @param data
* @param request
* @return
*/
@PostMapping("change_password")
public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){
// 根据Token获取UserId
String token = request.getHeader("x-auth-token");
Integer userId = tokenGetUserId(token);
// 根据UserId和旧密码获取用户
Map<String, String> query = new HashMap<>();
String o_password = data.get("o_password");
query.put("user_id" ,String.valueOf(userId));
query.put("password" ,service.encryption(o_password));
Query ret = service.count(query, service.readConfig(request));
List list = ret.getResultList();
Object s = list.get(0);
int count = Integer.parseInt(list.get(0).toString());
if(count > 0){
// 修改密码
Map<String,Object> form = new HashMap<>();
form.put("password",service.encryption(data.get("password")));
service.update(query,service.readConfig(request),form);
return success(1);
}
return error(10000,"密码修改失败!");
}
/**
* 登录态
* @param request
* @return
*/
@GetMapping("state")
public Map<String, Object> state(HttpServletRequest request) {
JSONObject ret = new JSONObject();
// 获取状态
String token = request.getHeader("x-auth-token");
// 根据登录态获取用户ID
Integer userId = tokenGetUserId(token);
log.info("[返回userId] {}",userId);
if(userId == null || userId == 0){
return error(10000,"用户未登录!");
}
// 根据用户ID获取用户
Map<String,String> query = new HashMap<>();
query.put("user_id" ,String.valueOf(userId));
// 根据用户ID获取
Query select = service.select(query,service.readConfig(request));
List resultList = select.getResultList();
if (resultList.size() > 0) {
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(resultList.get(0)));
user.put("token",token);
ret.put("obj",user);
return success(ret);
} else {
return error(10000,"用户未登录!");
}
}
/**
* 登录态
* @param request
* @return
*/
@GetMapping("quit")
public Map<String, Object> quit(HttpServletRequest request) {
String token = request.getHeader("x-auth-token");
JSONObject ret = new JSONObject();
Map<String, String> query = new HashMap<>(16);
query.put("token", token);
try{
tokenService.delete(query,service.readConfig(request));
}catch (Exception e){
e.printStackTrace();
}
return success("退出登录成功!");
}
/**
* 获取登录用户ID
* @param token
* @return
*/
public Integer tokenGetUserId(String token) {
log.info("[获取的token] {}",token);
// 根据登录态获取用户ID
if(token == null || "".equals(token)){
return 0;
}
Map<String, String> query = new HashMap<>(16);
query.put("token", token);
AccessToken byToken = tokenService.findOne(query);
if(byToken == null){
return 0;
}
return byToken.getUser_id();
}
/**
* 重写add
* @return
*/
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> map = service.readBody(request.getReader());
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(1);
}
用户登录进入后台可以查看首页、接种登记、接种记录等内容,如图5-9所示。
图5-9用户功能界面图
文档源码下载获取地址
大家点赞、收藏、关注、评论啦 其他的定制服务 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者