✨作者主页:IT毕设梦工厂✨
个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。
☑文末获取源码☑
精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目
一、前言
随着高校科研工作的不断发展,科研人员、学校管理人员以及管理人员等不同角色对科研信息的管理需求也在不断增加。为了满足这些需求,建立一个便捷、易用的科研信息管理系统变得越来越重要。本课题基于这样的背景而产生,旨在开发一个功能完善、操作简便的科研信息管理系统,以解决当前高校科研信息管理中存在的问题,提高管理效率和管理质量。
当前,虽然有些高校已经开发了一些科研信息管理系统,但是这些系统仍存在一些问题。首先,功能不完善,不能完全满足不同角色的管理需求;其次,操作复杂,用户界面不够友好,使用起来不够方便;第三,数据共享性不高,不同系统之间的数据无法实现共享;第四,安全性能不够强,存在一定的安全隐患。这些问题都制约了高校科研信息管理的发展,因此,开发一个功能完善、操作简便、数据共享性强、安全性能高的科研信息管理系统势在必行。
本课题旨在开发一个功能完善、操作简便、数据共享性强、安全性能高的科研信息管理系统。具体来说,本课题将实现以下功能:反馈管理、公告、科研项目管理、科研成果管理、学术活动管理、通知信息、学院部门信息等。这些功能将满足科研人员、学校管理人员以及管理人员等不同角色的管理需求,提高管理效率和管理质量。
本课题的研究目的是开发一个功能完善、操作简便的科研信息管理系统,以解决当前高校科研信息管理中存在的问题。通过本课题的研究,我们将实现以下目标:提高管理效率和管理质量;实现数据共享,提高数据利用效率;增强系统的安全性能,保障数据安全;为用户提供更加便捷、友好的操作体验。
二、开发环境
- 开发语言:Java
- 数据库:MySQL
- 系统架构:B/S
- 后端:SpringBoot
- 前端:Vue
三、系统功能模块
- 角色:科研人员、学校管理员、管理员
- 功能:
科研人员:
反馈管理、公告、科研项目管理、科研成果管理、学术活动管理、通知信息、学院部门信息;
学校管理员:
反馈信息、公告管理、科研项目管理、科研成果管理、学术活动管理、通知管理、用户管理;
管理员:
基础数据管理、反馈管理、公告管理、科研项目管理、科研成果管理、学术活动管理、通知管理、用户管理、学院部门管理。
四、系统界面展示
- 高校科研信息管理系统界面展示:
五、部分代码设计
- Java项目实战-代码参考:
/**
*@description TODO 公告管理
* @param: null
*@return
*/
@Api(tags = "公告通知管理")
@RestController
@RequestMapping("api/system/notice")
public class NoticeController extends BaseController {
@Autowired
private NoticeService noticeService;
/**
* 获取通知公告列表
*/
@ApiOperation(value = "条件获取通知公告列表", notes = "条件获取通知公告列表详情")
@GetMapping("/list/{page}/{size}")
public PageResult<List<Notice>> list(@PathVariable("page") int page, @PathVariable("size") int size, Notice notice) {
System.err.println("Notice查询条件->" + notice);
IPage<Notice> iPage = noticeService.findPage(new Page<Notice>(page, size), notice);
return ResultUtils.success(iPage.getCurrent(), iPage.getSize(), iPage.getTotal(), iPage.getRecords());
}
/**
* 根据通知公告编号获取详细信息
*/
@ApiOperation(value = "根据通知公告编号获取详细信息", notes = "根据通知公告编号获取详细信息详情")
@GetMapping("/{id}")
public Result<Notice> getInfo(@PathVariable("id") Integer noticeId) {
return ResultUtils.success(noticeService.findNoticeById(noticeId));
}
/**
* 新增通知公告
*/
@ApiOperation(value = "新增通知公告", notes = "新增通知公告详情")
@PostMapping
public Result<String> add(@Validated @RequestBody Notice notice) {
notice.setCreateBy(SecurityUtils.getUsername());
notice.setCreateTime(new Date());
return toResult(noticeService.insertNotice(notice));
}
/**
* 修改通知公告
*/
@ApiOperation(value = "修改通知公告", notes = "修改通知公告详情")
@PutMapping
public Result<String> edit(@Validated @RequestBody Notice notice) {
notice.setUpdateBy(SecurityUtils.getUsername());
notice.setUpdateTime(new Date());
return toResult(noticeService.updateNotice(notice));
}
/**
* 删除通知公告
*/
@ApiOperation(value = "删除通知公告", notes = "删除通知公告详情")
@DeleteMapping("/{noticeIds}")
public Result<String> remove(@PathVariable("noticeIds") List<Integer> noticeIds) {
return toResult(noticeService.deleteNoticeByIds(noticeIds));
}
/**
* 获取最新公告信息(10)
*/
@ApiOperation(value = "获取最新指南信息", notes = "获取最新指南信息详情")
@GetMapping("/rencentNotice")
public Result<List<Notice>> rencentNotice() {
return ResultUtils.success(noticeService.list(new LambdaQueryWrapper<Notice>()
.orderByDesc(Notice::getCreateTime)
.last("LIMIT 0,6")
));
}
}
@Api(tags = "用户管理接口")
@RestController
@RequestMapping("/api/system/user")
public class UserController extends BaseController {
@Autowired
private TokenService tokenService;
@Autowired
private UserService userService;
@Autowired
private RoleService roleService;
@ApiOperation(value = "条件分页获取用户列表",notes = "条件分页获取用户列表详情")
@PreAuthorize("hasAuthority('system:user:list')")
@GetMapping("/list/{page}/{size}")
public PageResult<List<User>> list(@PathVariable("page") int page, @PathVariable("size") int size, User user) {
IPage<User> iPage = userService.findPage(new Page<User>(page, size), user);
return ResultUtils.success(iPage.getCurrent(), iPage.getSize(), iPage.getTotal(), iPage.getRecords());
}
/**
* 根据用户编号获取详细信息
*/
/**
* 根据用户编号获取详细信息
*/
@ApiOperation(value = "根据用户编号获取详细信息",notes = "根据用户编号获取详细信息详情")
@GetMapping(value = {"/", "/{userId}"})
public Result<HashMap<String, Object>> getInfo(@PathVariable(value = "userId", required = false) Long userId) {
System.err.println("需要修改的用户id->" + userId);
List<Role> roles = roleService.findRoleAll();
if (StringUtils.isNotNull(userId)) {
return ResultUtils.success(new HashMap<String, Object>() {
{
put("userInfo", userService.findByUserId(userId));
put("roles", User.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
put("roleIds", roleService.findRoleListByUserId(userId));
}
});
} else {
return ResultUtils.success(new HashMap<String, Object>() {
{
put("roles", roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
}
});
}
}
/**
* 新增用户
*/
@ApiOperation(value = "新增用户",notes = "新增用户详情")
@PostMapping
public Result<String> add(@Validated @RequestBody User user) {
System.err.println("用户对象->" + user);
if (UserConstants.NOT_UNIQUE.equals(userService.checkUsernameUnique(user.getUsername()))) {
return ResultUtils.error("新增用户'" + user.getUsername() + "'失败,登录账号已存在");
} else if (UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
return ResultUtils.error("新增用户'" + user.getUsername() + "'失败,手机号码已存在");
} else if (UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
return ResultUtils.error("新增用户'" + user.getUsername() + "'失败,邮箱账号已存在");
}
user.setCreateTime(new Date());
user.setCreateBy(tokenService.getUser(ServletUtils.getRequest()).getUsername());
// user.setCreateBy(SecurityUtils.getUsername());
user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
return toResult(userService.insertUser(user));
}
/**
* 修改用户
*/
@ApiOperation(value = "修改用户",notes = "修改用户详情")
@PutMapping
public Result<String> edit(@Validated @RequestBody User user) {
System.err.println("用户对象->" + user);
// 校验用户是否允许操作 不允许操作超级管理员用户
userService.checkUserAllowed(user);
if (UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) {
return ResultUtils.error("修改用户'" + user.getUsername() + "'失败,手机号码已存在");
} else if (UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
return ResultUtils.error("修改用户'" + user.getUsername() + "'失败,邮箱账号已存在");
}
// user.setUpdateBy(SecurityUtils.getUsername());
return toResult(userService.updateUser(user));
}
/**
* 删除用户
*/
@ApiOperation(value = "删除用户",notes = "删除用户详情")
@DeleteMapping("/{ids}")
public Result<String> remove(@PathVariable("ids") List<Long> userIds) {
return toResult(userService.deleteUserByIds(userIds));
}
/**
* 重置密码
*/
@ApiOperation(value = "重置密码",notes = "重置密码详情")
@PutMapping("/reset/pwd")
public Result<String> resetPwd(@RequestBody User user) {
System.err.println("用户对象->" + user);
// 校验用户是否允许操作 不允许操作超级管理员用户
userService.checkUserAllowed(user);
user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
// user.setUpdateBy(SecurityUtils.getUsername());
return toResult(userService.resetPwd(user));
}
/**
* 状态修改
*/
@ApiOperation(value = "状态修改",notes = "状态修改详情")
@PutMapping("/change/status")
public Result<String> changeStatus(@RequestBody User user) {
System.err.println("用户对象->" + user);
// 校验用户是否允许操作 不允许操作超级管理员用户
userService.checkUserAllowed(user);
// user.setUpdateBy(SecurityUtils.getUsername());
return toResult(userService.updateUserStatus(user));
}
}
@Api(tags = "个人信息管理")
@RestController
@RequestMapping("/api/system/user/profile")
public class UserProfileController {
@Autowired
private UserService userService;
@Autowired
private TokenService tokenService;
/**
* 获取个人用户信息
*/
@ApiOperation(value = "获取个人用户信息", notes = "获取个人用户信息详情")
@GetMapping
public Result<HashMap<String, Object>> profile() {
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
User user = loginUser.getUser();
return ResultUtils.success(new HashMap<String, Object>() {
{
put("roleGroup", userService.findUserRoleGroup(user.getUsername()));
put("userInfo", userService.findByUserId(user.getUserId()));
}
});
}
/**
* 修改用户
*/
@ApiOperation(value = "修改用户", notes = "修改用户详情")
@PutMapping
public Result<String> updateProfile(@RequestBody User user) {
if (userService.updateUserProfile(user)) {
return ResultUtils.success();
}
return ResultUtils.error("修改个人信息异常,请联系管理员");
}
/**
* 重置密码
*/
@ApiOperation(value = "重置密码", notes = "重置密码详情")
@PutMapping("/update/pwd")
public Result<String> updatePwd(String oldPassword, String newPassword) {
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
String username = loginUser.getUsername();
String password = loginUser.getPassword();
if (!SecurityUtils.matchesPassword(oldPassword, password)) {
return ResultUtils.error("修改密码失败,旧密码错误");
}
if (SecurityUtils.matchesPassword(newPassword, password)) {
return ResultUtils.error("新密码不能与旧密码相同");
}
if (userService.resetUserPwd(username, SecurityUtils.encryptPassword(newPassword))) {
// 更新缓存用户密码
loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword));
tokenService.setLoginUser(loginUser);
return ResultUtils.success();
}
return ResultUtils.error("修改密码异常,请联系管理员");
}
/**
* 头像上传
*/
@ApiOperation(value = "头像上传", notes = "头像上传详情")
@PostMapping("/avatar")
public Result<HashMap<String, Object>> avatar(@RequestParam("avatarfile") MultipartFile file) throws IOException {
if (!file.isEmpty()) {
LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
String avatar = FileUploadUtils.upload(SysConfig.getAvatarPath(), file);
if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) {
// 更新缓存用户头像
loginUser.getUser().setAvatar(avatar);
tokenService.setLoginUser(loginUser);
return ResultUtils.success(new HashMap<String, Object>() {{
put("imgUrl", avatar);
}});
}
}
return ResultUtils.error("上传图片异常,请联系管理员");
}
}
六、论文参考
- 计算机毕业设计选题推荐_高校科研信息管理系统系统-论文参考:
七、系统视频
高校科研信息管理系统-项目视频:
SpringBoot项目实战:高校科研信息管理系统
结语
计算机毕业设计选题推荐-高校科研信息管理系统-Java项目实战
大家可以帮忙点赞、收藏、关注、评论啦~
源码获取:私信我