毕业设计-停车场管理系统
前言
本期項目是停車場管理系統,主要包括數據監控大盤、車輛管理、黑名單管理、停車管理、車位管理、預約管理、日志管理、用戶管理、角色管理。盡可能的把停車場功能做全,然后以企業級的開發標準來完成整個前后端代碼,無論是用來作為畢業設計還是拿來學習,相信對初學者都會有很大幫助。
(想要源碼和視頻教程的同學私信我~~~)
工程架構
應用分層
上面的分層架構摘自阿里巴巴java開發手冊,我對此做了一些調整,實際分層結構如下:
領域模型
-
DO(DataObject):與數據庫表結構一一對應,通過DAO層向上傳輸數據源對象
-
BO(BusinessObject):業務對象。由Service層輸出的封裝業務邏輯的對象
-
VO(View Object):顯示層對象,通常是Web向模板渲染引擎層傳輸的對象
BO和VO領域模型又分為BoRequest(輸入模型)、BoResponse(輸出模型)、VoRequest(輸入模型)、VoResponse(輸出模型)
技術棧
前端:vue + element
后端:jdk1.8 + springboot + redis + mysql
系統設計
接口設計
整個項目接口采用的目前互聯網比較流行的restful風格設計,每個接口、每個參數都有詳細的文檔說明。因為企業中開發必然是團隊協作,必然前后端分離的開發模式,你得先把接口定義出來,然后前端可以和后端同步開發。還有一種就是對外提供接口,比如你們隔壁團隊也想調用你這個服務的接口,但是你兩排期是同一周,這時候你得先把接口定義出來給人家,然后大家同步開發,開發完了之后再進行聯調。
運行效果
系統登錄
dashboard
首頁數據大盤,按最近7天餅圖占比、最近30天折線圖走勢、最近一年柱狀圖分析、最近7天各個時間段占比分析全方位可視化分析數據。
車輛管理
黑名單管理
對于一些漏繳費、不按規定停車、多次預約停車位卻毀約的車輛,我們可以添加黑名單,加黑后的車輛將不被允許進入停車場。
停車管理
車輛入庫后會生成一條停車記錄,此時狀態是'已入庫'和'未支付',等車輛出口后,系統會根據車位的每小時停車費*實際停車實際(按小時計算,超出一小時按一小時收費)。這里大家需要注意,真實的停車場收費都是攝像頭拍照的,比如車子出庫的時候,攝像頭會拍攝車牌,然后生成收費信息,當你繳費后就可以出庫了。這里我們是管理后臺,系統并沒有接入攝像頭設備,所以出庫需要人工點擊出庫按鈕。(也可以接入支付寶扣費接口和攝像頭接口,這樣我們的系統就跟真實的停車管理系統一樣了~)
Excel導出
所有模塊都支持數據導出Excel,方便進行數據分析
停車記錄導出
車位數據導出
車位管理
預約管理
車主可以提前預約,預約后將優先安排車輛入庫停車
日志管理
日志管理默認是開給管理員的,在系統中的所有操作都會被記錄,在系統出現異常時也便于管理員進行問題排查。
用戶管理
默認也是只有管理員擁有用戶管理菜單的權限,可以新建/編輯用戶、分配用戶角色、禁用/啟用等操作
編輯用戶信息
角色管理
極其靈活的權限管理,系統中的所有按鈕都可以單獨分配權限,你可以給A角色只分配了查詢和導出權限,也可以給B角色分配查詢、編輯、新建權限,還可以給C角色只分配查詢權限。可以滿足幾乎所有的業務需求,大家可以自由發揮定義權限組合。
頁面不存在時提示頁面
普通讀者登錄
系統默認會創建兩個角色,一個是超管角色,另一個則是普通用戶角色(當然角色大家可以按前面說的自定義)。普通用戶登錄,比如停車管理菜單,普通用戶就只有查詢的權限,其他的新增、編輯、刪除、導出和出庫權限都沒有。截圖如下:
個人信息修改
密碼修改
管理員創建完用戶之后的默認密碼是“123456”,用戶可以登錄系統自己修改密碼
權限設計
權限基于security和spring-session實現。權限可以分為認證和授權,認證其實就是登錄,用戶登錄時會進行賬號密碼的校驗,校驗成功后會,會把session存入redis中。授權指的是用戶是否擁有訪問后端資源的權限,每個新用戶在創建后都會分配角色,角色其實就是一個權限集合,這里的權限可以理解為訪問后端一個個接口(資源)的權限。
這里權限設計的非常靈活,細粒度到按鈕級別,比如新增、刪除、修改、查詢、借閱動作,普通用戶可能就只有查詢權限,管理員則擁有新增、刪除、修改的權限。普通用戶即使通過接口直接訪問后端的修改或者刪除接口,后端也會返回授權失敗錯誤,因為后端每個需要權限的接口都打了權限標識,只有擁有資源權限用戶才能訪問。
比如下面的車輛修改接口,只有擁有“CAR_UPDATE”這個權限標識的用戶才能訪問這個接口,否則返回“未授權”的錯誤。
@PutMapping("/{id}") @PreAuthorize("hasAuthority(T(com.senior.book.console.api.security.Authority).BOOK_UPDATE.name())")public Result<Boolean> update(@PathVariable("id") Long id, @Valid @RequestBody BookUpdateVoRequest request) {}日志方案
日志采用lombok注解+slf4j+log4j2的實現方案,基于profile實現了多環境的日志配置,因為不同環境的日志打印策略是不一樣,比如開發環境我可能需要打印到console控制臺,需要debug級別的日志以便于本地開發調試,測試環境可能就需要打印到日志文件里,線上環境可能需要打印到文件的同時將日志發送到kafka然后收集到es中,這樣當線上部署了多臺機器后我們查日志不用一臺一臺機器去查日志了,因為都收集到es了,我們只需要登錄kibana去搜索,這樣就非常方便。這里說到的kafka+es+kibana這樣一套日志解決方案也是目前互聯網公司比較常用的一套解決方案。如果你動手能力夠強,你可以本地搭一套kafka、es、kibana,然后只需要在配置文件中加入幾行配置就實現了這么一套企業級的日志解決方案(默認是輸出到日志文件)。
下面是部分關鍵配置,如果要配置kafka,只需要在<Appenders>標簽中配置<Kafka>配置即可
? ?<?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN" ?xmlns:xi="http://www.w3.org/2001/XInclude"><Properties><Property name="LOG_FILE">system.log</Property><Property name="LOG_PATH">./logs</Property><Property name="PID">????</Property><Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property><Property name="LOG_LEVEL_PATTERN">%5p</Property><Property name="LOG_DATE_FORMAT_PATTERN">yyyy-MM-dd HH:mm:ss.SSS</Property><Property name="CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATE_FORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property><Property name="FILE_LOG_PATTERN">%d{${LOG_DATE_FORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.}:%L : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property></Properties><Appenders><xi:include href="log4j2/file-appender.xml"/></Appenders><Loggers><logger name="com.senior.park" level="info"/><Root level="info"><AppenderRef ref="FileAppender"/></Root></Loggers> </Configuration>總結
以上是生活随笔為你收集整理的毕业设计-停车场管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android Title标题栏的修改(
- 下一篇: 立体成像系统行业分析-产能、产量、销量、