spring boot动力电池数据管理系统毕业设计源码301559
?基于SSM的動力電池數據管理系統
摘 要
動力電池數據管理系統主要功能模塊包括:電池數據管理、電池報警管理等,采取面對對象的開發模式進行軟件的開發和硬體的架設,能很好的滿足實際使用的需求,完善了對應的軟體架設以及程序編碼的工作,采取MySQL作為后臺數據的主要存儲單元,采用ssm框架、Java技術、Ajax技術進行業務系統的編碼及其開發,實現了本系統的全部功能。本次報告,首先分析了研究的背景、作用、意義,為研究工作的合理性打下了基礎。針對動力電池數據管理系統的各項需求以及技術問題進行分析,證明了系統的必要性和技術可行性,然后對設計系統需要使用的技術軟件以及設計思想做了基本的介紹,最后來實現動力電池數據管理系統和部署運行使用它。
關鍵詞:電池數據管理;ssm框架;數據庫
Power battery data management system based on SSM
Abstract
The main functional modules of the power battery data management system include: battery data management, battery alarm management, etc. the object-oriented development mode is adopted for software development and hardware erection, which can well meet the needs of actual use, improve the corresponding software erection and program coding, take MySQL as the main storage unit of background data, and adopt SSM framework, Java technology Ajax technology encodes and develops the business system, and realizes all the functions of the system. This report first analyzes the background, function and significance of the research, which lays a foundation for the rationality of the research work. This paper analyzes the various requirements and technical problems of the power battery data management system, proves the necessity and technical feasibility of the system, and then makes a basic introduction to the technical software and design idea required by the design system. Finally, it realizes the power battery data management system and deploys it.
Key words:?Battery data management; SSM framework; database
目 ?錄
第1章 緒論 1
1.1?研究背景 1
1.2?研究內容 1
1.3?論文組成結構 2
第2章 開發工具及相關技術介紹 3
2.1?HTTP協議 3
2.2?Java語言與JDK開發環境 4
2.3 SSM框架 4
2.4 Mysql數據庫 5
2.5 MVVM模式介紹 5
第3章 系統分析 6
3.1?可行性分析 6
3.1.1?經濟可行性 6
3.1.2?技術可行性 6
3.1.3?操作可行性 6
3.2?性能分析 ? 6
3.3?系統操作流程 9
3.3.1用戶登錄流程 9
3.3.2信息添加流程 10
3.3.3信息刪除流程 10
第4章 系統設計 11
4.1系統架構設計 11
4.2開發流程設計 11
4.3數據庫設計 12
4.3.1實體ER圖 13
4.3.2數據表 13
第5章 系統實現 17
5.1數據庫訪問層的實現 17
5.2注冊模塊的實現 20
5.3登錄模塊的實現 23
5.4 個人資料修改模塊的實現 24
5.5電池數據模塊的實現 28
5.6電池報警模塊的實現 31
第6章 系統測試 35
6.1??測試目的 35
6.2?測試方案設計 35
6.2.1 測試策略 35
6.2.2 測試分析 35
6.3 測試結果 36
第7章 總結與展望 37
參考文獻 38
致謝 40
隨著電動汽車的發展,作為電動汽車三大關鍵技術之一的動力電池數據管理系統也日益受到各個電池廠商和電動汽車廠家的關注與重視。電動汽車通過動力電池數據管理系統實時檢測電池參數,確保電池電量的合理高效使用,防止電池使用過程中過充過放,確保電池的使用安全和延長電池使用壽命等基本功能逐漸明確。由此可見,動力電池數據管理系統的研發對電動汽車行業發展和減輕環境污染具有重要意義。
根據動力電池數據管理系統的功能要求,對各個功能進行深入研究,再從硬件平臺和系統軟件兩個方面對動力電池數據管理系統進行結構化和模塊化設計,提高單體電池電壓檢測、溫度檢測、總電壓檢測以及電流檢測精度。通過對方案的優化,解決絕緣檢測性能不佳等問題,為動力電池數據管理系統應用于整車系統打下基礎。本課題的研究目的是實現與優化動力電池數據管理系統關鍵技術,降低電池應用成本、保證電池的安全使用、延長電池壽命以及動力電池數據管理的產品化。
動力電池數據管理系統的開發及實現,所需要的工作內容:
(1)首先是確定選題,確定好所要做的系統,并對系統的背景及現在面臨的一些問題等進行系統的初步確認。
(2)系統確認完成后,結合系統開發的需求進行確認系統開發所使用的技術,動力電池數據管理系統的開發使用SSM框架,數據庫進行平臺的搭建開發,確認好使用的技術進行技術分析,所使用的技術是否可以完成系統的實現。
(3)確定好系統使用的技術,進行在線確認系統所劃分的用戶角色,并且根據用戶角色劃分確定所要設計的功能模塊,對動力電池數據管理系統的設計主要對于系統工作人員可以根據自己的分管內容進行在線信息的處理及操作,并根據需求進行第一時間處理解決。
(4)系統的功能模塊確認完成后進行程序及界面的設計,設計完成后,并且通過測試來判斷程序是否完善,對于系統測試,需要不同的用戶進行不同的內容編輯及提交,及使用不同的測試方式找出程序中存在的漏洞,并對程序出現的漏洞問題進行在線解決處理,如果測試系統沒有任何問題時,可以將系統上傳進行正式操作使用。
根據市場調研得到的信息數據,結合研究現狀,利用相關系統開發和設計方法,最終設計出動力電池數據管理系統?。
本文共有七章,如下所示。
第一章概述了動力電池數據管理系統的研究目的和意義;精煉地總結了國內外在內的領域研究情況和未來的研究趨勢,最后給出了論文的組成結構。
第二章簡要概述了本文所用的開發技術和工具。
第三章簡要對系統各業務流程進行需求分析、可行性分析。
第四章對動力電池數據管理系統進行設計。
第五章對動力電池數據管理系統進行實現,并貼出相關頁面截圖,語言描述出具體功能實現的操作方法。
第六章對動力電池數據管理系統采用測試用例的方式來對一些主要功能模塊測試,最后得出測試結果。
第七章總結全文并對未來的研究做出展望。
超文本傳輸協議(HTTP)作為協作式與分布式的通信協議,其以萬維網交換信息作為前提條件。HTTP為IEIF的國際化標準指標,在制定相關標準與實現內,W3C積極參與其中,同時發揮著不可替代的作用。其能夠借助超文本標記語言,將文檔在服務器與瀏覽器之間相互傳輸。HTML作為構架文檔的標記語言,這些文檔內將包括有關信息的鏈接,用戶僅需要點擊其中一個鏈接就能夠訪問多媒體對象與圖像,同時獲得該鏈接項所具有的附加信息。
Java是美國sun公司所推出的一款程序設計語言,其能夠在多個平臺內應用,具有良好兼容性,進而其憑借自身優勢在數據中心、個人PC與科技超級計算機等平臺內廣泛應用,具有目前最為龐大的開發者專業社群。
JDK為美國sun公司為java開發員所推出的一款全新產品,要是沒有JDK的情況下,所安裝的java程序也就無法運行。
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis兩個開源框架整合而成(SpringMVC是Spring中的部分內容)。常作為數據源較簡單的web項目的框架。
1.1 Spring
Spring就像是整個項目中裝配bean的大工廠,在配置文件中可以指定使用特定的參數去調用實體類的構造方法來實例化對象。也可以稱之為項目中的粘合劑。
Spring的核心思想是IoC(控制反轉),即不再需要程序員去顯式地`new`一個對象,而是讓Spring框架幫你來完成這一切。
1.2 SpringMVC
SpringMVC在項目中攔截用戶請求,它的核心Servlet即DispatcherServlet承擔中介或是前臺這樣的職責,將用戶請求通過HandlerMapping去匹配Controller,Controller就是具體對應請求所執行的操作。SpringMVC相當于SSH框架中struts。
1.3 mybatis
mybatis是對jdbc的封裝,它讓數據庫底層操作變的透明。mybatis的操作都是圍繞一個sqlSessionFactory實例展開的。mybatis通過配置文件關聯到各實體類的Mapper文件,Mapper文件中配置了每個類對數據庫所需進行的sql語句映射。在每次與數據庫交互時,通過sqlSessionFactory拿到一個sqlSession,再執行sql命令。
頁面發送請求給控制器,控制器調用業務層處理邏輯,邏輯層向持久層發送請求,持久層與數據庫交互,后將結果返回給業務層,業務層將處理邏輯發送給控制器,控制器再調用視圖展現數據。
數據庫是系統開發過程中不可或缺的一部分。 在WEB應用方面,MySQL AB開發了一個具有很大優勢的MySQL關系數據庫管理系統。 MySQL可以將數據存儲在不同的表中,這非常靈活,并且還可以提高系統在實際應用中的速度。 數據庫訪問最常用于標準SQL語言,MySQL用于SQL語言,因此它具有高度兼容性。數據庫的操作是必不可少的,包括對數據庫表的增加、刪除、修改、查詢等功能。現如今,數據庫可以分為關系型數據庫和非關系型數據庫,Mysql屬于關系性數據庫,Mysql數據庫是一款小型的關系型數據庫,它以其自身特點:體積小、速度快、成本低等,Mysql數據庫是目前最受歡迎的開源數據庫。
在WEB應用技術中, Mysql數據庫支持不同的操作系統平臺,雖然在不同平臺下的安裝和配置都不相同,但是差別也不是很大,Mysql在Windows平臺下兩種安裝方式,二進制版和免安裝版。安裝完Mysql數據庫之后,需要啟動服務進程,相應的客戶端就可以連接數據庫,客戶端可通過命令行或者圖形界面工具登錄數據庫。
MVVM是Model-View-ViewModel的簡寫。它本質上就是MVC 的改進版。MVVM 就是將其中的View 的狀態和行為抽象化,讓我們將視圖 UI 和業務邏輯分開。當然這些事 ViewModel 已經幫我們做了,它可以取出 Model 的數據同時幫忙處理 View 中由于需要展示內容而涉及的業務邏輯。微軟的WPF帶來了新的技術體驗,如Silverlight、音頻、視頻、3D、動畫……,這導致了軟件UI層更加細節化、可定制化。同時,在技術層面,WPF也帶來了 諸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由來便是MVP(Model-View-Presenter)模式與WPF結合的應用方式時發展演變過來的一種新型架構框架。它立足于原有MVP框架并且把WPF的新特性糅合進去,以應對客戶日益復雜的需求變化。
本系統將在經濟、技術、操作這三個角度上進行可行性分析。
整個系統從設計到開發以及測試過程嚴謹步驟齊全,所有工作任務全部由本人完成,并未獲取外部技術支持,節約了一切服務成本開銷以及人工成本,在硬件方面,為節約成本使用一臺二手移動工作站作為項目部署服務器以及數據庫服務器,成本在一萬元一下,真個網絡部署也是由本人獨立完成不涉及到其他人工費用,整個開發過程本著低成本,低消耗的原則。
技術可行性分析的目的是確認該系統能否利用現有技術實現,并評估開發效率和完成情況。技術的可行性是指在當前的技術條件下,計算機軟件和硬件的開發是否能夠滿足發展的要求。因為該系統的開發基于SSM語言,所以開發該系統所需的軟件和硬件條件可以在普通計算機上滿足。因為它占用的內存相對較少,所以用Mysql數據庫開發和設計軟件理論上沒有問題,因為它占用的內存太少。上述技術可以有效地保證系統的成功和高效開發。
動力電池數據管理系統的使用界面簡單易于操作,采用常見的界面窗口來登錄界面,通過電腦進行訪問操作,用戶只要平時使用過電腦都能進行訪問操作。此系統的開發采用SSM技術開發,人性化和完善化是B/S結構開發比較顯要的特點使得用戶操作相比較其他更加簡潔方便。易操作、易管理、交互性好在本系統操作上體現得淋漓盡致。
3.2性能分析
對于性能分析,與傳統的管理方式相比,傳統的管理方式是使用人工通過用紙和筆進行數據信息的統計和管理,并且這種方式對于存儲和查找某一數據信息都比較麻煩,隨著計算機網絡的到來,這種傳統的方法很難適應當下社會的發展,不僅降低人們的辦事效率,而且還需要很多的人力和物力,對于使用的時間和所要花費的費用都是比較高的,為了降低成本費用,提高用戶的工作效率,進行開發一套基于計算機和網絡技術的動力電池數據管理系統。
動力電池數據管理系統的開發設計時一個獨立的系統,以流行數據庫進行數據的存儲開發,主要是為了實現動力電池數據管理系統的用戶角色及相對應的功能模塊,讓動力電池數據管理系統的管理不會存在管理差異、低效率,而是跟傳統的管理信息恰好相反,動力電池數據管理系統的實現可以節約資源,并且對于業務的處理速度也提高,速度快、效率高,功能性強大。
3.3系統操作流程
3.3.1用戶登錄流程
對于系統的安全性的第一關,就是用戶想要進入系統,必須通過登錄窗口,輸入自己的登錄信息才可以進行登錄,用戶輸入的信息準確無誤后才可以進入到操作系統界面,進行功能模塊的相對應操作,如果用戶輸入的信息不正確,則窗口出現提示框,用戶登錄失敗,返回到第一步進行重新輸入,如圖3-1所示。
???????????????????????????????圖3-1登錄操作流程圖
?
3.3.2信息添加流程
對于動力電池數據管理系統,需要隨時添加所需要的數據信息,對于用戶添加信息,需要根據添加界面,根據選框的內容進行填寫所要添加的數據信息,信息輸入完成后判斷數據信息是否符合要求,符合要求則添加完成,用戶所添加的信息不符合要求,則需要返回到第一步,重新輸入數據信息,再進行判斷操作,如圖3-2所示。
?
圖3-2 信息添加流程圖
3.3.3信息刪除流程
不管是哪個用戶角色進入到不通的系統操作界面,都可以進行不同的信息內容的操作功能,對用系統數據信息的刪除,用戶一旦將信息刪除,那么該刪除的數據信息將無法恢復,所以用戶在對數據刪除事,一定判斷刪除的內容是否是確定要刪除的,確定無誤后選擇確定刪除操作,如圖3-3所示。
?
圖3-3?信息刪除流程圖
4.1系統架構設計
動力電池數據管理系統項目的概述設計分析,主要內容進行動力電池數據管理系統信息的具體分析,進行數據庫的是設計,數據采用mysql數據庫,并且對于系統的設計采用比較人性化的操作設計,對于系統出現的錯誤信息可以及時做出處理及反饋。
動力電池數據管理系統的設計基于現有的網絡,可以實現管理員:電池數據管理、電池報警管理等詳細的了解及統計分析。電池數據功能以及電池報警管理詳細分析如下圖:
????????????????????
?
?
?????????????????圖4-1功能模塊詳細分析圖
4.2開發流程設計
動力電池數據管理系統的開發對管理模塊和系統使用的數據庫進行分析,編寫代開發,規劃和操作是構建信息管理應用程序的必要三步曲,它決定了系統是否能夠真正實現預設功能以及是否可以在成功設計后實施。在開發過程中,每個階段必須嚴格按照線性順序進行開發,并且在相應階段生成的每個工作都可以通過技術進行驗證和檢查。確保一個階段完成后是正確的,不會造成下一階段拖拽現象,使系統完成設計功能后得到保證。
從動力電池數據管理系統的成功開發經驗來看,上述方法效果最為明顯,最大程度地降低了系統開發的復雜性。如圖4-2所示。
?
圖4-2開發系統流程圖
4.3數據庫設計
數據庫是信息系統的基礎和核心。數據庫設計的好壞直接影響到信息系統開發的成敗。創建數據庫表首先確定實體的屬性和實體之間的關系。根據關系創建一個數據表。4.3.1實體ER圖
數據庫是整個軟件編程中最重要的一個步驟,對于數據庫問題主要是判定數據庫的數量和結構公式的創建。展示系統使用的是Mysql進行對數據庫進行管理,進行保證數據的安全性、穩定性等。
概念模型的設計是為了抽象真實世界的信息,并對信息世界進行建模。它是數據庫設計的強大工具。數據庫概念模型設計可以通過E-R圖描述現實世界的概念模型。系統的E-R圖顯示了系統中實體之間的鏈接。而且Mysql數據庫是自我保護能力比較強的數據庫,下圖主要是對數據庫實體的E-R圖:
(1) 電池報警實體圖,如圖4-3所示:
?
??圖4-3電池報警實體圖
?(2)電池數據實體圖如圖4-4所示:
?
圖4-4電池數據實體圖
這些功能可以充分滿足動力電池數據管理系統的需求。此系統功能較為全面如下圖系統功能結構如圖4-5所示。
?????????????????????????????????
?
????????????????????????????圖4-5系統功能結構圖
4.3.2數據表
我們可以根據數據結構的詳細分析要求,我們根據輸入和輸出數據量的要求進行分析,確定什么表表,結構之間的關系,我們可以驗證,調整和完善,查詢和瀏覽過程,可以實現數據庫,以使用戶對數據和功能有更多要求。
基于系統使用的數據庫管理系統的特點,對數據庫的概念模型進行了轉換和構建。但是,這個系統只需要充分考慮動力電池數據管理系統的功能,而且組織比較清晰。
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| group_id | mediumint | 8 | 是 | 是 | 用戶組ID |
| display | smallint | 4 | 是 | 否 | 顯示順序 |
| name | varchar | 16 | 是 | 否 | 名稱 |
| description | varchar | 255 | 否 | 否 | 描述 |
| source_table | varchar | 255 | 否 | 否 | 來源表: |
| source_field | varchar | 255 | 否 | 否 | 來源字段: |
| source_id | int | 10 | 是 | 否 | 來源ID: |
| register | smallint | 1 | 否 | 否 | 注冊位置: |
| create_time | timestamp | 0 | 是 | 否 | 創建時間: |
| update_time | timestamp | 0 | 是 | 否 | 更新時間: |
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| battery_data_id | int | 11 | 是 | 是 | 電池數據ID |
| product_number | varchar | 64 | 否 | 否 | 產品編號 |
| model_and_specification | varchar | 64 | 否 | 否 | 型號規格 |
| battery_size | varchar | 64 | 否 | 否 | 電池尺寸 |
| standard_voltage | varchar | 64 | 否 | 否 | 標準電壓 |
| label_capacity | varchar | 64 | 否 | 否 | 標注容量 |
| charging_temperature | varchar | 64 | 否 | 否 | 充電溫度 |
| discharge_temperature | varchar | 64 | 否 | 否 | 放電溫度 |
| battery_temperature | varchar | 64 | 否 | 否 | 電池溫度 |
| charging_voltage | varchar | 64 | 否 | 否 | 充電電壓 |
| discharge_voltage_ | varchar | 64 | 否 | 否 | 放電電壓 |
| battery_status | varchar | 64 | 否 | 否 | 電池狀態 |
| battery_current | varchar | 64 | 否 | 否 | 電池電流 |
| maximum_continuous_discharge_current | varchar | 64 | 否 | 否 | 最大持續放電電流 |
| maximum_continuous_charging_current | varchar | 64 | 否 | 否 | 最大持續充電電流 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| auth_id | int | 11 | 是 | 是 | 授權ID: |
| user_group | varchar | 64 | 否 | 否 | 用戶組: |
| mod_name | varchar | 64 | 否 | 否 | 模塊名: |
| table_name | varchar | 64 | 否 | 否 | 表名: |
| page_title | varchar | 255 | 否 | 否 | 頁面標題: |
| path | varchar | 255 | 否 | 否 | 路由路徑: |
| position | varchar | 32 | 否 | 否 | 位置: |
| mode | varchar | 32 | 是 | 否 | 跳轉方式: |
| add | tinyint | 1 | 是 | 否 | 是否可增加: |
| del | tinyint | 1 | 是 | 否 | 是否可刪除: |
| set | tinyint | 1 | 是 | 否 | 是否可修改: |
| get | tinyint | 1 | 是 | 否 | 是否可查看: |
| field_add | varchar | 500 | 否 | 否 | 添加字段: |
| field_set | varchar | 500 | 否 | 否 | 修改字段: |
| field_get | varchar | 500 | 否 | 否 | 查詢字段: |
| table_nav_name | varchar | 255 | 否 | 否 | 跨表導航名稱: |
| table_nav | varchar | 255 | 否 | 否 | 跨表導航: |
| option | text | 0 | 否 | 否 | 配置: |
| create_time | timestamp | 0 | 是 | 否 | 創建時間: |
| update_time | timestamp | 0 | 是 | 否 | 更新時間: |
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| battery_alarm_id | int | 11 | 是 | 是 | 電池報警ID |
| product_number | varchar | 64 | 是 | 否 | 產品編號 |
| model_and_specification | varchar | 64 | 否 | 否 | 型號規格 |
| battery_current | varchar | 64 | 否 | 否 | 電池電流 |
| battery_voltage | int | 11 | 否 | 否 | 電池電壓 |
| battery_temperature | varchar | 64 | 否 | 否 | 電池溫度 |
| battery_capacity | int | 11 | 否 | 否 | 電池容量 |
| battery_status | varchar | 64 | 否 | 否 | 電池狀態 |
| alarm_code | varchar | 64 | 否 | 否 | 報警編碼 |
| alarm_time | datetime | 0 | 否 | 否 | 報警時間 |
| alarm_remarks | text | 0 | 否 | 否 | 報警備注 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
該系統是通過jdbc和MySQL達成連接的,新建一個jdbc.properties文件來填寫與數據庫連接所需要的驅動和參數。
jdbc.driverClass=com.MySQL.jdbc.Driver
jdbc.url=jdbc:MySQL://localhost:3306/tsi
jdbc.username=root
jdbc.password=123
第一個參數代表MySQL數據庫的驅動,第二個參數代表要連接的數據庫,第三個和第四個參數代表數據庫連接名和密碼。
后臺與數據庫訪問主要是通過HQL語句來進行查詢的,查詢語句中的表名是表格的實體類名,在這種查詢語句中*是不允許使用的,除非適合聚合函數一起使用才可以。
用戶在填寫數據的時候必須與注冊頁面上的驗證相匹配否則會注冊失敗,注冊頁面的表單驗證是通過JavaScript進行驗證的,用戶名的長度必須在6到18之間,郵箱必須帶有@符號,密碼和密碼確認必須相同,你輸入的密碼,系統會根據你輸入密碼的強度給出指定的值,電話號碼和身份證號碼必須要求輸入格式與生活相符合,當你前臺驗證通過的時候你點擊注冊,表單會將你輸入的值通過name值傳遞給后臺并保存到數據庫中。
用戶注冊流程圖如下圖所示。
?
圖5-1用戶注冊流程圖
用戶注冊代碼如下:
????/**
?????* 注冊
?????* @return
?????*/
????@PostMapping("register")
????public Map<String, Object> signUp(HttpServletRequest request) throws IOException {
????????// 查詢用戶
????????Map<String, String> query = new HashMap<>();
????????Map<String,Object> map = service.readBody(request.getReader());
????????query.put("username",String.valueOf(map.get("username")));
????????List list = service.selectBaseList(service.select(query, new HashMap<>()));
????????if (list.size()>0){
????????????return error(30000, "用戶已存在");
????????}
????????map.put("password",service.encryption(String.valueOf(map.get("password"))));
????????service.insert(map);
????????return success(1);
}
????public Map<String,Object> readBody(BufferedReader reader){
????????BufferedReader br = null;
????????StringBuilder sb = new StringBuilder("");
????????try{
????????????br = reader;
????????????String str;
????????????while ((str = br.readLine()) != null){
????????????????sb.append(str);
????????????}
????????????br.close();
????????????String json = sb.toString();
????????????return JSONObject.parseObject(json, Map.class);
????????}catch (IOException e){
????????????e.printStackTrace();
????????}finally{
????????????if (null != br){
????????????????try{
????????????????????br.close();
????????????????}catch (IOException e){
????????????????????e.printStackTrace();
????????????????}
????????????}
????????}
????????return null;
????}
????public void insert(Map<String,Object> body){
????????E entity = JSON.parseObject(JSON.toJSONString(body),eClass);
????????baseMapper.insert(entity);
????????log.info("[{}] - 插入操作:{}",entity);
}
主要由兩部分組成,登錄前的登錄界面以及登錄后的用戶功能界面。登錄界面,要求用戶輸入用戶名和密碼,當用戶名和密碼其中一個輸入為空時,給出提示“用戶名,密碼不能為空”。獲取用戶名和密碼后到數據庫中查找,如果用戶名存在,以及對應的密碼正確,則登錄成功,否則登錄失敗。登錄失敗后給出提示,并把焦點停在文本框中。登錄成功后將該次會話的全局變量username設置為用戶名。登錄成功后進入會員的功能模塊,主要有會員基本信息修改,已經發布族譜申報信息管理,發布信息,和退出功能。退出功能是清除全局變量username的值,并跳回到首頁。
登錄流程圖如下圖所示。
?
圖5-1登錄流程圖
登錄界面如下圖所示。
?
圖5-1登錄流程圖
登錄代碼如下:
????/**
?????* 登錄
?????* @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;
????????QueryWrapper wrapper = new QueryWrapper<User>();
????????Map<String, String> map = new HashMap<>();
????????if(username != null && "".equals(username) == false){
????????????map.put("username", username);
????????????resultList = service.selectBaseList(service.select(map, new HashMap<>()));
????????}
????????else if(email != null && "".equals(email) == false){
????????????map.put("email", email);
????????????resultList = service.selectBaseList(service.select(map, new HashMap<>()));
????????}
????????else if(phone != null && "".equals(phone) == false){
????????????map.put("phone", phone);
????????????resultList = service.selectBaseList(service.select(map, new HashMap<>()));
????????}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.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
????????if (groupList.size()<1){
????????????return error(30000,"用戶組不存在");
????????}
????????UserGroup userGroup = (UserGroup) groupList.get(0);
????????//查詢用戶審核狀態
????????if (!StringUtils.isEmpty(userGroup.getSourceTable())){
????????????String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
????????????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, "賬號或密碼不正確");
????????}
}
????public String select(Map<String,String> query,Map<String,String> config){
????????StringBuffer sql = new StringBuffer("select ");
????????sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
????????sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
????????if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
????????????sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
????????}
????????if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
????????????sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
????????}
????????if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
????????????int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
????????????int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
????????????sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
????????}
????????log.info("[{}] - 查詢操作,sql: {}",table,sql);
????????return sql.toString();
}
????public List selectBaseList(String select) {
????????List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
????????List<E> list = new ArrayList<>();
????????for (Map<String,Object> map:mapList) {
????????????list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
????????}
????????return list;
}
登錄/注冊成功之后可以修改個人的基本信息。修改頁面的表單中每一個input的name值都要與實體類中的參數相匹配,在點擊修改頁面的時候,如果改后名與數據庫里面重復了,頁面會提示該名已經存在了,否則通過Id來查詢,并將的信息修改為表單提交的數據。
如果電池數據需要修改,管理員可以通過查詢數據庫中的電池數據數據,查詢電池數據數據是通過ajax技術來進行查詢的,需要傳產品編號、型號規格等參數然后在返回到該頁面中,可以選中要修改或刪除的那條信息,如果選中了超過一條數據,頁面會挑一個窗口提醒只能選擇一條數,如果沒有選中數據會挑一個窗口題型必須選擇一條數據。當選擇確認修改的時候,后臺會根據傳過來的id到數據庫查詢,并將結果返回到修改頁面中,可以在修改頁面中修改剛剛選中的信息當點擊確認的時候from表單會將修改的數據提交到后臺并保存到數據庫中,就是說如果提交的數據數據庫中存在就修改,否則就保存。
電池數據界面如下圖所示。
?
圖5-1電池數據界面
根據需求,需要對電池報警進行添加、刪除或修改詳情信息。刪除或修改電池報警時,系統根據電池報警的狀態判定為可刪除狀態下,才會給出刪除和修改鏈接,點擊刪除鏈接按鈕時,請求到達后臺,還會先查詢電池報警狀態再次做出判定能否刪除。點擊修改鏈接按鈕時,會跳轉到修改信息的頁面,重新填寫好數據后,數據提交到后臺會對數據庫中相應的記錄做出修改。
添加電池報警時,會給出數據填寫的頁面,該頁面根據填寫好的電池編號同樣會事先發送Ajax請求查詢編號是否已存在,數據填寫好之后提交到后臺,會調用相關服務在數據庫中插入記錄。
電池報警流程圖如下圖所示。
?
圖5-1電池報警流程圖
電池報警頁面設計效果如下圖所示。
?
圖5-1電池報警界面
電池報警關鍵代碼如下所示。
@RequestMapping(value = "/del")
????@Transactional
????public Map<String, Object> del(HttpServletRequest request) {
????????service.delete(service.readQuery(request), service.readConfig(request));
????????return success(1);
}
程序設計不能保證沒有錯誤,這是一個開發過程,在錯誤或錯誤的過程中難以避免,這是不可避免的,但我們不能使這些錯誤始終存在于系統中,錯誤可能會造成無法估量的后果 如系統崩潰,安全信息,系統無法正常啟動,導致安裝用戶手機屏幕等,為了避免這些問題,我們需要測試程序,并發現這些問題,并糾正它們 ,并使系統更長時間穩定成熟,本章的作用是發現這些問題,并對其進行修改,雖然耗時費力,但長期非常重要和必要系統的開發。
軟件測試與開發過程是一樣的,都必須按照軟件工程的正規原理進行,遵守管理學理論。不過,目前國內的軟件測試已經積累了大量經驗和方法,步驟相對成熟,軟件測試的效率也越來越高。
動力電池數據管理系統的實現,對于系統中功能模塊的實現及操作都必須通過測試進行來評判系統是否可以準確的實現。在動力電池數據管理系統正式上傳使用之前必須做的一步就是系統測試,對于測試發現的錯誤及時修改處理,保證系統準確無誤的供給用戶使用。
6.2.1 測試策略
1、功能測試
從用戶的角度來看,測試時不了解新開發軟件的內部結構,因此可以將系統與黑匣子進行比較,盲目輸入后可以查看系統給出的反饋。這種測試屬于黑盒測試,在測試中如果輸入錯誤信息系統會報錯。
2、性能測試
測試軟件程序的整體狀況(稱為性能測試)通常使用自動化測試工具來檢測系統的整體功能,在負載測試和壓力測試之間進行分配,在某些情況下,將這兩種情況結合起來。雖然壓力測試可以檢測到系統可以提供的最高級別的服務,但負載測試可以測試系統如何響應增加的負載。
6.2.2 測試分析
測試評估系統質量的方法不局限于系統編碼和過程,應該與軟件設計工作和歷史需求分析密切相關。
軟件測試應遵循以下原則:
(1)軟件測試應盡快進行,整個測試部分應在軟件開發和設計的整個過程中進行。如發現錯誤,立即處理,將大大減少軟件開發的時間,并提高軟件的質量。
(2)在軟件的各種測試中,測試過程中使用的計劃、報告等應妥善處理和存儲。其主要目的是為了便于以后系統的維護。
(3)軟件測試整個過程中的聚類現象應優先考慮。
(4)對于軟件測試,我們應該盡量不去和自己設計的系統進行參考,而是要測試對方的程序,以確保軟件測試結果的客觀性和公平性。
(5)整個測試計劃嚴格按照軟件測試的具體實施細則進行。
(6)對整個測試結果進行綜合檢查,盡量避免重復錯誤。
本動力電池數據管理系統滿足用戶的要求和需求,本動力電池數據管理系統的使用能夠有效的提高用戶的使用率。
測試后得到的性能和用例,系統具有足夠的正確性、可靠性、穩定性,并且可以對輸入數據進行準確的點擊操作處理和響應測試用戶的體驗也得到了很好的反饋和響應時間。合理的范圍,可以兼容所有主流瀏覽器,設計所需的效果。
通過動力電池數據管理系統的開發,本人鞏固了之前學過的知識,如今將平時所學到的知識融合在設計中,在設計過程中,做了很多的準備,首先,在數據庫系統的設計過程中,尤其是在數據庫的工作原理、工作特點,對其深刻的討論,與此同時,對于小型站點來說,最好服務器的選擇,其次,利用所學的知識點分析所做的系統,并在此基礎上設計。
目前本系統已經上線,正在試運行階段,用戶反饋良好,基本完成用戶所需,試運行過程中沒有出現阻斷性問題,有一些不足和小問題也及時予以修正,系統上線后,為了保證數據的安全性,對系統進行了備份操作,系統備份是每兩個月備份一次,數據庫備份為每周備份一次,系統部署在租賃的云平臺服務器中。
本次系統上線成功后,得到了用戶的高度認可,但是在功能上和性能上還需做進一步的研究處理,使其有更高的性能和更好的用戶體驗。
系統在以后的升級過程中,需要解決一系列用戶所提出的問題,例如打印過程中如何避免瀏覽器的兼容性問題,大量用戶訪問時,如何保持較高的響應速度,在系統今后的升級過程中將著重解決這些安全性問題。
參考文獻
[1]王思淼,張英杰,王芳,鄧斯文.基于大數據的動力電池健康度估算方法研究[J].傳動技術,2021,35(04):8-12+23.
[2]鄭雪芹.10月我國動力電池裝車量15.4GWh[J].汽車縱橫,2021(12):109-110.
[3]胡依林. 基于人工智能的電動汽車充放電故障相關性分析[D].南京郵電大學,2021.DOI:10.27251/d.cnki.gnjdc.2021.000910.
[4]本刊綜合.基于大數據分析的電動汽車動力電池包關鍵技術研究及應用[J].今日科技,2021(11):33.
[5]楊林. 純電動汽車動力電池熱管理系統設計及仿真優化[D].浙江大學,2021.DOI:10.27461/d.cnki.gzjdx.2021.002459.
[6]陽如坤.動力電池數字化車間藍圖[J].汽車工藝師,2021(08):55-64.DOI:10.16173/j.cnki.ame.2021.08.016.
[7]馮競祥,馬健軍.車聯網環境中電動車動力電池安全監控系統的設計[J].現代制造技術與裝備,2021,57(07):30-32.DOI:10.16107/j.cnki.mmte.2021.0531.
[8]王震坡,李曉宇,袁昌貴,黎小慧.大數據下電動汽車動力電池故障診斷技術挑戰與發展趨勢[J].機械工程學報,2021,57(14):52-63.
[9]崔美悅. 新能源動力電池企業資金鏈風險管控研究[D].華東交通大學,2021.
[10]羅維橋. 基于剩余收益拓展模型的新能源動力電池企業價值評估[D].四川大學,2021.
[11]蘭道彬. 小波-Arma-SVM模型在新能源動力電池企業價值評估中的應用研究[D].重慶理工大學,2021.
[12]周新,陳忠愷.新能源汽車動力電池健康狀態監測的研究[J].內燃機與配件,2021(12):164-165.DOI:10.19475/j.cnki.issn1674-957x.2021.12.076.
[13]李世界. 基于無跡卡爾曼濾波器的動力電池SOC估算研究[D].山東理工大學,2021.DOI:10.27276/d.cnki.gsdgc.2021.000472.
[14]楊睿. 鋰離子動力電池的分段分數階建模與SOH估算研究[D].桂林電子科技大學,2021.DOI:10.27049/d.cnki.ggldc.2021.000455.
[15]梁思凡. 梯次利用場景下動力電池不同回收模式網絡構建研究[D].北京交通大學,2021.DOI:10.26944/d.cnki.gbfju.2021.002639.
[16]趙樂樂. 基于同步采樣的電池參數測量系統研究[D].北京交通大學,2021.DOI:10.26944/d.cnki.gbfju.2021.003498.
[17]廖鈺. 鋰離子動力電池荷電狀態和健康狀態的聯合預測[D].華東交通大學,2021.DOI:10.27147/d.cnki.ghdju.2021.000530.
[18]秦嘉偉. 基于機器視覺的動力電池模組尺寸測量系統研發[D].福建工程學院,2021.DOI:10.27865/d.cnki.gfgxy.2021.000038.
[19]李一帆. 基于數據挖掘的動力電池一致性與健康狀態研究[D].福建工程學院,2021.DOI:10.27865/d.cnki.gfgxy.2021.000084.
[20]劉書如. 鋰離子動力電池及純電動汽車生命周期評價對比研究[D].長安大學,2021.DOI:10.26976/d.cnki.gchau.2021.000331.
致謝
經過幾個月時間的努力終于完成了這篇文章,在文章的寫作與研究的過程中遇到了很多困難,都在同學和老師的幫助下解決了。尤其非常感謝我最敬愛的老師,他對我進行了無私的指導和幫助,不厭其煩的幫助進行文章的修改。老師嚴謹的治學態度、淵博的學術知識、誨人不倦的敬業精神以及寬容的待人風范使我獲益頗豐。此外,在校圖書館查找資料的時候,圖書館的老師也給我提供了很多方面的支持與幫助。在此,向幫助和指導過我的老師表示最衷心的感謝!感謝這篇文章所涉及到的各位學者。本文引用了數位學者的文獻,如果沒有各位學者的研究成果的幫助和啟發,我將很難完成本篇文章的寫作。感謝我的同學、朋友以及所在單位的同事,在我寫文章的過程中給與了我很多素材和幫助,還在文章的撰寫和排版過程中提供熱情的幫助。同時,感謝我的室友對我的熱心指導和幫助,經常有不懂之處都是大家在幫助我,才使得我比較順利的完成了這篇文章。由于我水平有限,所寫文章難免有不足之處,懇請各位老師和學友批評和指正!
免費領取本源代碼,請關注點贊+私信
總結
以上是生活随笔為你收集整理的spring boot动力电池数据管理系统毕业设计源码301559的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DELL RAID卡管理工具 MegaR
- 下一篇: 基于单片机的智能插座控制系统设计