课题 名称 | 基于Hive的新能源汽车数据仓库管理系统的设计与实现 | ||||||
课题 来源 | 学校课题及自选课题 | 课题 类型 | 工程实践 | 指导 教师 | 付接递 | 职称/学位 | 硕士 |
学生 姓名 | 徐东升 | 学号 | 2020105410243 | 专业 | 信息与计算机科学(智能信息处理方向) | 班级 | 2班 |
一、调研资料准备 对企业进行实地调研,做好需求分析;走访相关企业了解企业的需求以及应用场景,与相关负责人沟通存在的问题,针对于问题做好合理的规划与设计;通过查阅相关资料信息如万方数据等学术网站相关论文内容,分析与研究新能源汽车数据仓库管理系统的功能,并且查阅相关系统开发知识,与指导教师沟通系统设计思路与功能。 二、设计的目的、要求、思路与预期成果 (1)设计目的 本次设计一个基于Hive的新能源汽车数据仓管理系统。企业管理员登录系统后可以在汽车保养时,根据这些汽车内置传感器传回的数据分析其故障原因,以便维修人员更加及时准确处理相关的故障问题。或者对这些数据分析之后向车主进行预警提示车主注意保养汽车,以提高汽车行驶的安全系数。 (2)设计要求 利用Flume进行分布式的日志数据采集,Kafka实现高吞吐量的数据传输,DateX进行数据清洗、转换和整合,MySQL存储结构化数据,HDFS存储大规模原始日志数据,Hive进行数据仓库查询和分析,Spark进行分布式数据计算,Dolphinscheduler进行全流程调度管理,帆软BI工具实现可视化大屏展示。实现数据采集、传输、清洗、存储、查询、计算、调度和展示全流程功能。提供监控、数据质量管理、多维度数据分析等功能。 (3)设计思路 新能源汽车数据仓库管理系统,主要服务于新能源汽车车主,企业负责本系统的登录维护,在进行工作流调度时设置Admin用户进行环境管理或环境创建,设置普通用户权限进行项目工作流的创建和任务节点的配置,在FineBI中设置管理员账号进行环境的搭建以及对数据进行处理展示,使管理人员能够更加直观的获取想要的数据,企业根据系统中的数据为车主提供相关服务。其设计思路着重于多方位的数据处理,涵盖了全面数据采集、数据清洗和质量保障、大规模数据存储、高效数据管理、数据分析与挖掘、可扩展性与灵活性、用户友好的数据查询与报告、高性能与低延迟等多个方面。整体设计思路旨在打造一套高效、安全、可靠的大数据处理平台,为新能源汽车行业提供全面的数据支持,助力业务决策并确保系统在未来的发展中具备良好的可扩展性和适应性。 (4)预期成果 毕业设计1套(包含项目软件和数据库等)和毕业论文1份(符合学校查重要求的毕业论文)。 三、任务完成的阶段内容及时间安排 2023年11月06日前查看相关资料、技术,准备技术文档,做好需求分析,下发任务书; 2023年12月31日前制定软件开发计划,设计软件部分功能,完成开题报告; 2024年01月06日前进行开题答辩; 2024年03月15日前完成系统开发与测试,进行中期检查; 2024年04月22日前撰写论文初稿、完成后和指导老师沟通修改论文、定稿、进行查重检测; 2024年05月19日前完成所有毕设材料、参加答辩。
(1)硬件方面:Windows10操作系统电脑一台 (2)软件方面:Linux虚拟机、MySQL数据库、帆软BI。 指导教师签名: 日期:
|
核心算法代码分享如下:
package com.university.demo.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.university.demo.entity.system.ServerResponse;
import com.university.demo.entity.Admin;
import com.university.demo.entity.request.PasswordVO;
import com.university.demo.entity.request.UserLoginRequest;
import com.university.demo.service.AdminService;
import com.university.demo.service.impl.TokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
/**
* @author lequal
* @since 2020-03-06
*/
@RestController
@RequestMapping("/admin")
public class AdminController {
@Autowired
private AdminService adminService;
@Autowired
private TokenService tokenService;
/**
* 管理员登录
* @param adminLoginRequest
* @return
*/
//@SysLog("测试")
@PostMapping("/login")
public ServerResponse login(@RequestBody UserLoginRequest adminLoginRequest) throws Exception{
Map<String, Object> map = new HashMap();
Admin admin = adminService.adminLogin(adminLoginRequest.getUsername(), adminLoginRequest.getPassword());
if (admin != null){
String token = tokenService.getToken(admin);
admin.setToken(token);
adminService.saveOrUpdate(admin);
map.put("admin", admin);
map.put("token", token);
return ServerResponse.ofSuccess(map);
}
return ServerResponse.ofError("用户名或密码错误!");
}
@PostMapping("/logout")
public ServerResponse logout(@RequestBody UserLoginRequest request) {
Map<String, Object> map = new HashMap();
Integer ret = adminService.adminLogout(request.getToken());
System.out.println("ret==>" + ret);
return ServerResponse.ofSuccess("注销成功");
}
@GetMapping("/info")
public ServerResponse info(@RequestParam String token) {
Map<String, Object> map = new HashMap();
Admin admin = adminService.info(token);
if (admin != null){
map.put("userinfo", admin);
return ServerResponse.ofSuccess(map);
}
return ServerResponse.ofError("token无效!");
}
/**
* 管理员更新个人资料
* @return
*/
//@UserLoginToken
@PostMapping("/modify")
public ServerResponse modify(@RequestBody Admin admin) {
return adminService.updateById(admin) ? ServerResponse.ofSuccess("更新成功!") : ServerResponse.ofError("更新失败!");
}
/**
* 根据ID查询管理员信息
* @param id
* @return
*/
@GetMapping("/{id}")
public ServerResponse queryAdmin(@PathVariable("id") Integer id) {
return ServerResponse.ofSuccess(adminService.getById(id));
}
/**
* 管理员修改密码
* @param passwordVO
* @return
*/
@PostMapping("/password")
public ServerResponse updatePass(@RequestBody PasswordVO passwordVO) {
System.out.println(passwordVO + "======");
QueryWrapper<Admin> wrapper = new QueryWrapper();
wrapper.eq("id", passwordVO.getId());
wrapper.eq("password", passwordVO.getOldPass());
Admin admin = adminService.getOne(wrapper);
if (admin == null) {
return ServerResponse.ofError("旧密码错误");
}
// 否则进入修改密码流程
admin.setPassword(passwordVO.getNewPass());
boolean b = adminService.updateById(admin);
if (b) {
return ServerResponse.ofSuccess("密码修改成功");
}
return ServerResponse.ofError("密码更新失败");
}
}