Springboot實(shí)例講解實(shí)現(xiàn)專業(yè)材料認(rèn)證管理系統(tǒng)流程
一,項(xiàng)目簡(jiǎn)介
這是一個(gè)基于java的畢業(yè)設(shè)計(jì)項(xiàng)目,畢設(shè)課題為springboot框架的知識(shí)產(chǎn)權(quán)服務(wù)平臺(tái)系統(tǒng), 是一個(gè)采用b/s結(jié)構(gòu)的javaweb項(xiàng)目, 開(kāi)發(fā)工具eclipsei/eclipse, 項(xiàng)目框架jsp+springboot+mybatis, 知識(shí)產(chǎn)權(quán)服務(wù)平臺(tái)系統(tǒng)采用mysql進(jìn)行數(shù)據(jù)存儲(chǔ), 并基于mybatis進(jìn)行了orm實(shí)體關(guān)系映射, 該知識(shí)產(chǎn)權(quán)服務(wù)平臺(tái)系統(tǒng)系統(tǒng)通過(guò)模塊化實(shí)現(xiàn),支持多角色權(quán)限管理系統(tǒng), 提升了管理效率, 知識(shí)產(chǎn)權(quán)服務(wù)平臺(tái)系統(tǒng)參考文獻(xiàn)可見(jiàn)附件中的畢業(yè)論文與畢設(shè)源碼
該知識(shí)產(chǎn)權(quán)服務(wù)平臺(tái)系統(tǒng)項(xiàng)目采用mvc設(shè)計(jì)模式, 其中知識(shí)產(chǎn)權(quán)服務(wù)平臺(tái)系統(tǒng)的視圖與知識(shí)產(chǎn)權(quán)服務(wù)平臺(tái)系統(tǒng)業(yè)務(wù)邏輯進(jìn)行了分層設(shè)計(jì), 特別方便后續(xù)知識(shí)產(chǎn)權(quán)服務(wù)平臺(tái)系統(tǒng)系統(tǒng)的開(kāi)發(fā)
設(shè)計(jì)這種mvc的架構(gòu)的好處是完全的可以將業(yè)務(wù)進(jìn)行分層, 進(jìn)行高內(nèi)聚低耦合, 分為service層, dao層, controller層, 架構(gòu)清晰
本項(xiàng)目主要基于Springboot 和ruoyi來(lái)開(kāi)發(fā)一套專業(yè)認(rèn)證材料管理系統(tǒng),對(duì)各專業(yè)相關(guān)的文檔材料進(jìn)行管理,主要包含的功能模塊有:
系統(tǒng)管理:用戶管理、角色管理、菜單管理、操作日志
業(yè)務(wù)模塊:專業(yè)管理、認(rèn)證材料管理、相關(guān)網(wǎng)站管理
二,環(huán)境介紹
語(yǔ)言環(huán)境:Java: jdk1.8
數(shù)據(jù)庫(kù):Mysql: mysql5.7
應(yīng)用服務(wù)器:Tomcat: tomcat8.5.31
開(kāi)發(fā)工具:IDEA或eclipse
開(kāi)發(fā)技術(shù):Springboot+ruoyi+bootstrap
三,系統(tǒng)展示
用戶登陸:
用戶注冊(cè):
用戶管理
角色管理
菜單管理
操作管理
專業(yè)管理
認(rèn)證材料管理
相關(guān)網(wǎng)站
個(gè)人中心
修改密碼
四,核心代碼展示
package com.code.project.common; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import com.code.common.constant.Constants; import com.code.common.utils.StringUtils; import com.code.common.utils.file.FileUploadUtils; import com.code.common.utils.file.FileUtils; import com.code.common.utils.security.ShiroUtils; import com.code.framework.config.RuoYiConfig; import com.code.framework.config.ServerConfig; import com.code.framework.web.domain.AjaxResult; /** * 通用請(qǐng)求處理 * * @author ruoyi */ @Controller public class CommonController { private static final Logger log = LoggerFactory.getLogger(CommonController.class); @Autowired private ServerConfig serverConfig; /** * 通用下載請(qǐng)求 * * @param fileName 文件名稱 * @param delete 是否刪除 */ @GetMapping("common/download") public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) { try { if (!FileUtils.isValidFilename(fileName)) { throw new Exception(StringUtils.format("文件名稱({})非法,不允許下載。 ", fileName)); } String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); String filePath = System.getProperty("user.dir").replace('\\','/')+RuoYiConfig.getDownloadPath() + fileName; System.out.println(filePath); response.setCharacterEncoding("utf-8"); response.setContentType("multipart/form-data"); response.setHeader("Content-Disposition", "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, realFileName)); FileUtils.writeBytes(filePath, response.getOutputStream()); if (delete) { FileUtils.deleteFile(filePath); } } catch (Exception e) { log.error("下載文件失敗", e); } } /** * 通用上傳請(qǐng)求 */ @PostMapping("/common/upload") @ResponseBody public AjaxResult uploadFile(MultipartFile file) throws Exception { try { // 上傳文件路徑 String filePath = System.getProperty("user.dir").replace('\\','/')+RuoYiConfig.getUploadPath(); System.out.println(filePath); // 上傳并返回新文件名稱 String fileName = FileUploadUtils.upload(filePath, file); String url = serverConfig.getUrl() + fileName; AjaxResult ajax = AjaxResult.success(); ajax.put("fileName", fileName); ajax.put("url", url); return ajax; } catch (Exception e) { return AjaxResult.error(e.getMessage()); } } /** * 本地資源通用下載 */ @GetMapping("/common/download/resource") public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response) throws Exception { // 本地資源路徑 String localPath = System.getProperty("user.dir").replace('\\','/')+RuoYiConfig.getProfile(); // 數(shù)據(jù)庫(kù)資源地址 String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX); // 下載名稱 String downloadName = StringUtils.substringAfterLast(downloadPath, "/"); response.setCharacterEncoding("utf-8"); response.setContentType("multipart/form-data"); response.setHeader("Content-Disposition", "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, downloadName)); FileUtils.writeBytes(downloadPath, response.getOutputStream()); } }
package com.code.project.monitor.online.controller; import java.util.List; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.code.common.utils.security.ShiroUtils; import com.code.framework.aspectj.lang.annotation.Log; import com.code.framework.aspectj.lang.enums.BusinessType; import com.code.framework.shiro.session.OnlineSessionDAO; import com.code.framework.web.controller.BaseController; import com.code.framework.web.domain.AjaxResult; import com.code.framework.web.page.TableDataInfo; import com.code.project.monitor.online.domain.OnlineSession; import com.code.project.monitor.online.domain.UserOnline; import com.code.project.monitor.online.domain.OnlineSession.OnlineStatus; import com.code.project.monitor.online.service.IUserOnlineService; /** * 在線用戶監(jiān)控 * * @author ruoyi */ @Controller @RequestMapping("/monitor/online") public class UserOnlineController extends BaseController { private String prefix = "monitor/online"; @Autowired private IUserOnlineService userOnlineService; @Autowired private OnlineSessionDAO onlineSessionDAO; @RequiresPermissions("monitor:online:view") @GetMapping() public String online() { return prefix + "/online"; } @RequiresPermissions("monitor:online:list") @PostMapping("/list") @ResponseBody public TableDataInfo list(UserOnline userOnline) { startPage(); List<UserOnline> list = userOnlineService.selectUserOnlineList(userOnline); return getDataTable(list); } @RequiresPermissions("monitor:online:batchForceLogout") @Log(title = "在線用戶", businessType = BusinessType.FORCE) @PostMapping("/batchForceLogout") @ResponseBody public AjaxResult batchForceLogout(@RequestParam("ids[]") String[] ids) { for (String sessionId : ids) { UserOnline online = userOnlineService.selectOnlineById(sessionId); if (online == null) { return error("用戶已下線"); } OnlineSession onlineSession = (OnlineSession) onlineSessionDAO.readSession(online.getSessionId()); if (onlineSession == null) { return error("用戶已下線"); } if (sessionId.equals(ShiroUtils.getSessionId())) { return error("當(dāng)前登陸用戶無(wú)法強(qiáng)退"); } onlineSession.setStatus(OnlineStatus.off_line); onlineSessionDAO.update(onlineSession); online.setStatus(OnlineStatus.off_line); userOnlineService.saveOnline(online); } return success(); } @RequiresPermissions("monitor:online:forceLogout") @Log(title = "在線用戶", businessType = BusinessType.FORCE) @PostMapping("/forceLogout") @ResponseBody public AjaxResult forceLogout(String sessionId) { UserOnline online = userOnlineService.selectOnlineById(sessionId); if (sessionId.equals(ShiroUtils.getSessionId())) { return error("當(dāng)前登陸用戶無(wú)法強(qiáng)退"); } if (online == null) { return error("用戶已下線"); } OnlineSession onlineSession = (OnlineSession) onlineSessionDAO.readSession(online.getSessionId()); if (onlineSession == null) { return error("用戶已下線"); } onlineSession.setStatus(OnlineStatus.off_line); onlineSessionDAO.update(onlineSession); online.setStatus(OnlineStatus.off_line); userOnlineService.saveOnline(online); return success(); } }
package com.code.project.monitor.server.controller; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import com.code.framework.web.controller.BaseController; import com.code.project.monitor.server.domain.Server; /** * 服務(wù)器監(jiān)控 * * @author ruoyi */ @Controller @RequestMapping("/monitor/server") public class ServerController extends BaseController { private String prefix = "monitor/server"; @RequiresPermissions("monitor:server:view") @GetMapping() public String server(ModelMap mmap) throws Exception { Server server = new Server(); server.copyTo(); mmap.put("server", server); return prefix + "/server"; } }
五,項(xiàng)目總結(jié)
本項(xiàng)目界面簡(jiǎn)潔大方,功能完整,適合做課程設(shè)計(jì)和畢業(yè)設(shè)計(jì)使用,另外可以在此項(xiàng)目框架的基礎(chǔ)上自行添加或修改相關(guān)的功能。
到此這篇關(guān)于Springboot實(shí)例講解實(shí)現(xiàn)專業(yè)材料認(rèn)證管理系統(tǒng)流程的文章就介紹到這了,更多相關(guān)Springboot材料認(rèn)證管理系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 基于Springboot實(shí)現(xiàn)送水公司信息管理系統(tǒng)
- java?Springboot實(shí)現(xiàn)教務(wù)管理系統(tǒng)
- 基于Java?SpringBoot的前后端分離信息管理系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)
- 基于java SSM springboot實(shí)現(xiàn)抗疫物質(zhì)信息管理系統(tǒng)
- 基于java SSM springboot實(shí)現(xiàn)景區(qū)行李寄存管理系統(tǒng)
- 基于java ssm springboot+mybatis酒莊內(nèi)部管理系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)
- 基于java Springboot實(shí)現(xiàn)教務(wù)管理系統(tǒng)詳解
- 使用springboot制作博客管理系統(tǒng)
- springboot+vue制作后臺(tái)管理系統(tǒng)項(xiàng)目
相關(guān)文章
MyBatis saveBatch 性能調(diào)優(yōu)的實(shí)現(xiàn)
本文主要介紹了MyBatis saveBatch 性能調(diào)優(yōu)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07SpringCloud融入Python的實(shí)現(xiàn)
這篇文章主要介紹了SpringCloud融入Python的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12帶有@Transactional和@Async的循環(huán)依賴問(wèn)題的解決
這篇文章主要介紹了帶有@Transactional和@Async的循環(huán)依賴問(wèn)題的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Java AbstractMethodError原因案例詳解
這篇文章主要介紹了Java AbstractMethodError原因案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08mybatis使用foreach查詢不出結(jié)果也不報(bào)錯(cuò)的問(wèn)題
這篇文章主要介紹了mybatis使用foreach查詢不出結(jié)果也不報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Springcloud服務(wù)注冊(cè)consul客戶端過(guò)程解析
這篇文章主要介紹了Springcloud服務(wù)注冊(cè)consul客戶端過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08