摘要
隨著農業現代化的推進,農作物病蟲害的防治已成為農業生產中的重要環節。傳統的病蟲害防治方法往往依賴于農民的經驗和觀察,難以準確、及時地預測和防控病蟲害的發生。因此,開發一種基于現代信息技術的農作物病蟲害預警系統,對于提高農業生產的智能化、精準化水平,保障糧食安全和農業可持續發展具有重要意義。
本文旨在設計并實現一個基于Vue和SpringBoot的農作物病蟲害預警系統。該系統將利用先進的計算機技術,實現對農作物生長環境的實時監測、病蟲害數據的智能分析和預警信息的及時發布。通過引入前端框架Vue,提升系統的交互性和用戶體驗;利用后端框架SpringBoot,確保系統的穩定性和可擴展性。
通過本系統的應用,我們期望能夠為農民提供更加準確、及時的病蟲害預警信息,幫助他們科學制定防治措施,減少病蟲害對農作物的影響,提高農業生產的效益和質量。同時,該系統也為農業科研部門提供了豐富的病蟲害數據資源,有助于推動農業科技的創新和發展。
綜上所述,基于Vue+SpringBoot的農作物病蟲害預警系統的設計與實現,將有助于提高農業生產的智能化水平,促進農業可持續發展,具有重要的現實意義和應用價值。
關鍵詞:農作物病蟲害預警系統,Springboot框架,Vue;
Al crop pest and disease warning based on Vue+SpringBoot
Design and Implementation of the System
abstract
With the advancement of agricultural modernization, the prevention and control of crop diseases and pests has become an important link in agricultural production. Traditional pest control methods often rely on the experience and observation of farmers, making it difficult to accurately and timely predict and control the occurrence of pests and diseases. Therefore, developing a crop disease and pest warning system based on modern information technology is of great significance for improving the intelligence and precision level of agricultural production, ensuring food security and sustainable development of agriculture.
This article aims to design and implement a crop pest and disease early warning system based on Vue and SpringBoot. The system will utilize advanced computer technology to achieve real-time monitoring of crop growth environment, intelligent analysis of disease and pest data, and timely release of warning information. By introducing the front-end framework Vue, the interactivity and user experience of the system can be improved; Utilize the backend framework SpringBoot to ensure system stability and scalability.
Through the application of this system, we hope to provide farmers with more accurate and timely pest warning information, help them scientifically formulate prevention and control measures, reduce the impact of pests and diseases on crops, and improve the efficiency and quality of agricultural production. At the same time, the system also provides abundant pest and disease data resources for agricultural research departments, which helps to promote innovation and development of agricultural technology.
In summary, the design and implementation of a crop pest and disease early warning system based on Vue+SpringBoot will help improve the intelligence level of agricultural production, promote sustainable development of agriculture, and have important practical significance and application value.
Keywords:Crop pest and disease warning system, Springboot framework, Vue;
目錄
第1章 緒 ??論
1.1選題背景和意義
1.2研究內容
1.3研究方法
1.4 開發技術
1.4.1 JAVA技術
1.4.2 MVVM模式
1.4.3 B/S結構
1.4.4 Spring boot框架
1.4.5 Mysql數據庫
第2章 系統分析
2.1?可行性分析
2.1.1技術可行性
2.1.2經濟可行性
2.1.3社會可行性
2.2總體設計原則
2.3 系統需求分析
2.4?系統用例分析
2.5?業務流程分析
2.5.1登錄流程
2.5.2注冊流程
2.5.3添加信息流程
2.5.4刪除信息流程
第3章 系統設計
3.1 系統概要設計
3.2系統結構設計
3.3 數據庫設計
3.3.1概念結構設計
3.3.2數據庫表設計
第4章系統實現
4.1普通用戶功能模塊
4.1.1注冊界面
4.1.2登錄界面
4.1.3農作物資訊界面
4.1.4動物識別界面
4.1.5病蟲害預警界面
4.2管理員功能模塊
4.2.1登錄界面
4.2.2功能界面
4.2.3系統用戶界面
4.2.4農作物種類管理界面
4.2.5澆水信息管理界面
4.2.6溫度信息管理界面
4.2.7系統管理界面
4.2.8資源管理界面
第5章軟件測試
5.1軟件測試的重要性
5.2測試實例的研究與選擇
5.3測試環境與測試條件
5.4系統運行情況
5.5系統評價
5.5.1系統功能評價
5.5.2系統技術評價
5.5.3系統經濟評價
第6章 總結
參考文獻
致???謝
在現代農業中,農作物病蟲害問題已成為制約農業生產持續穩定發展的重要因素之一。隨著氣候變化和種植結構的調整,病蟲害的種類和發生規律也在不斷變化,這使得傳統的防治方法面臨著越來越大的挑戰。為了有效應對這一挑戰,利用現代信息技術構建智能化的農作物病蟲害預警系統顯得尤為迫切。
基于Vue+SpringBoot的Al農作物病蟲害預警系統的設計與實現,選題背景源于對農業生產中病蟲害防治需求的深入理解和現代信息技術快速發展的現狀。隨著大數據技術的不斷發展,將這些技術應用于農作物病蟲害預警成為可能,并有望提高預警的準確性和時效性。
該選題的意義在于,它將推動農業生產向智能化、精準化方向發展,提高病蟲害防治的效率和效果,從而保障農業生產的順利進行和糧食安全。同時,通過實時監測和分析農作物生長環境和病蟲害數據,該系統能夠為農民提供更加科學、合理的防治建議,減少農藥的使用量,降低農業生產的環境污染。最后,該系統的設計與實現將促進農業與科技的深度融合,為農業科技創新提供有力支撐,推動農業可持續發展。
綜上所述,基于Vue+SpringBoot的Al農作物病蟲害預警系統的設計與實現選題背景源于農業生產中病蟲害防治的現實需求和技術發展的推動,其意義在于推動農業生產智能化、精準化,提高病蟲害防治效果,降低環境污染,促進農業科技創新和可持續發展。
基于Vue+SpringBoot的 Al農作物病蟲害預警系統,所需要的工作內容:
(1)首先是確定選題,確定好所要做的系統,并對系統的背景及現在面臨的一些問題等進行系統的初步確認。
(2)系統確認完成后,結合系統開發的需求進行確認系統開發所使用的技術,基于Vue+SpringBoot的 Al農作物病蟲害預警系統使用Springboot框架,數據庫進行平臺的搭建開發,確認好使用的技術進行技術分析,所使用的技術是否可以完成系統的實現。
(3)確定好系統使用的技術,進行在線確認系統所劃分的用戶角色,并且根據用戶角色劃分確定所要設計的功能模塊,對基于Vue+SpringBoot的 Al農作物病蟲害預警系統的設計主要劃分別為管理員和用戶角色,并所使用的功能模塊也相應不同,但是系統的數據庫實現的內容是交互的,用戶可以隨時根據自己的需求查詢信息,對于系統工作人員可以根據自己的分管內容進行在線信息的處理及操作,管理員獲取到所有用戶的詳細數據信息,并根據需求進行第一時間處理解決。
(4)系統的功能模塊確認完成后進行程序及界面的設計,設計完成后,并且通過測試來判斷程序是否完善,對于系統測試,需要不同的用戶進行不同的內容編輯及提交,及使用不同的測試方式找出程序中存在的漏洞,并對程序出現的漏洞問題進行在線解決處理,如果測試系統沒有任何問題時,可以將系統上傳進行正式操作使用。
首先,通過引擎搜索或者查閱相關文獻資料,了解了本系統開發的背景以及設計系統的意義所在,收集用戶需求信息。其次,在開發工具上,最終確定是基于Mysql數據庫,在Java的Springboot框架設計的基礎上實現,設計出系統大致的功能模塊。主要從方便系統用戶和系統管理員的角度進行分析,明確該系統應該具有的功能。最終是測試系統,通過用例測試發現存在的問題并找到解決的方案。利用現有的開發平臺,結合自己所學的知識,在老師的指導幫助下來完成該設計,確保系統的可用性、實用性。
本系統前端部分基于MVVM模式進行開發,采用B/S模式,后端部分基于Java的Springboot框架進行開發。
前端部分:前端框架采用了比較流行的漸進式JavaScript框架Vue.js。使用Vue-Router和Vuex實現動態路由和全局狀態管理,Ajax實現前后端通信,Element UI組件庫使頁面快速成型,項目前端通過柵格布局實現響應式,可適應PC端、平板端、手機端等不同屏幕大小尺寸的完美布局展示。
后端部分:采用Springboot作為開發框架,同時集成MyBatis、Redis等相關技術。
1.4.1?JAVA技術
JAVA語言是目前軟件市場上應用最廣泛的語言開發程序。可以在多種平臺上運用的,兼容性比較強,適應市面上大多數操作系統,不會出現亂碼的現像,其擴展性和維護性都更好,具有分析問題和解決問題的能力,是面向過程的程序設計方便我們編寫的代碼更強壯。
JAVA相對其它語言來說,比較簡單,編譯起來更方便一些,安全可靠性高。不完全統計,現在全世界大約有2000多萬人在使用它,JAVA既可以鑲嵌使用又可以獨力的使用。JAVA大致可以分成兩個部分,一種部分是JAVA負責的編譯,另一種是JAVA負責的運行。JAVA和C++語言很相像,但JAVA在編程時是一種以對象為導向的方式來進行編譯的,使得編出來的軟件可以單機使用,也可以在互聯網上使用,檢查出錯更為方便。JAVA分布式、體系結構中立的特點也使得其存儲更快,編議更簡單。面向對象包括四個特點,一是封裝,就是說在定義類的時候可以實現一定的功能和屬性。二是抽象,屬于類的一種,可以把一個具有共同屬性的類封裝在一個抽象里,便于簡單編議。三是繼承,顧名思義就是帶有前者的特性。還有一個就是多態的特點,可以多種一起運用,表現了它可擴展性好。
1.4.2 MVVM模式
MVVM模式是常用的開發模式,主要是在代碼實現上將其分為M層、V層和C層。
視圖(View)代表用戶交互界面,一個 Web 應用就可能有很多的界面,在 MVVM?模式中,視圖僅僅處理的只有數據采集、處理,還有用戶的請求, 并不包括業務流程的處理,業務流程由模型(Model)來處理。
模型(Model)就是業務流程/狀態的處理及業務規則的制定。模型處理業務流程的過程其它層是無法看見了的,它就像黑箱子,在接受視圖請求的數據之后,然后返回最終的處理結果。MVVM?最主要的核心就是業務模型的設計,一個典型的應用例子就是目前流行的 EJB 模型,它從應用技術實現的角度對模型做了進一步的劃分,以便充分利用現有的組件,但是它不能作為應用設計模型的框架。
控制器(Controller)可以理解為接收用戶的請求,然后視圖和模型匹配在一起,一起再完成用戶請求。它有非常明顯的作用在劃分控制層上,可以很清晰地告訴你,它就是一個分發器,選擇什么樣的模型、視圖,可以完成用戶的什么樣的請求。控制層不做所有的數據處理,比如說:用戶點擊一個連接,控制層接受到請求之后,并不處理業務信息,它只是向模型傳遞用戶的信息,同時告訴模型做什么,然后選擇符合需求的視圖返回給用戶。
1.4.3 B/S結構
B/S(Browser/Server)比前身架構更為省事的架構。它借助Web server完成數據的傳遞交流。只需要下載瀏覽器作為客戶端,那么工作就達到“瘦身”效果, 不需要考慮不停裝軟件的問題。
1.4.4 Spring boot框架
Spring框架是Java平臺上的一種開源應用框架,提供具有控制反轉特性的容器。盡管Spring框架自身對編程模型沒有限制,但其在Java應用中的頻繁使用讓它備受青睞,以至于后來讓它作為EJB(EnterpriseJavaBeans)模型的補充,甚至是替補。Spring框架為開發提供了一系列的解決方案,比如利用控制反轉的核心特性,并通過依賴注入實現控制反轉來實現管理對象生命周期容器化,利用面向切面編程進行聲明式的事務管理,整合多種持久化技術管理數據訪問,提供大量優秀的Web框架方便開發等等。Spring框架具有控制反轉(IOC)特性,IOC旨在方便項目維護和測試,它提供了一種通過Java的反射機制對Java對象進行統一的配置和管理的方法。Spring框架利用容器管理對象的生命周期,容器可以通過掃描XML文件或類上特定Java注解來配置對象,開發者可以通過依賴查找或依賴注入來獲得對象。Spring框架具有面向切面編程(AOP)框架,SpringAOP框架基于代理模式,同時運行時可配置;AOP框架主要針對模塊之間的交叉關注點進行模塊化。Spring框架的AOP框架僅提供基本的AOP特性,雖無法與AspectJ框架相比,但通過與AspectJ的集成,也可以滿足基本需求。Spring框架下的事務管理、遠程訪問等功能均可以通過使用SpringAOP技術實現。Spring的事務管理框架為Java平臺帶來了一種抽象機制,使本地和全局事務以及嵌套事務能夠與保存點一起工作,并且幾乎可以在Java平臺的任何環境中工作。Spring集成多種事務模板,系統可以通過事務模板、XML或Java注解進行事務配置,并且事務框架集成了消息傳遞和緩存等功能。Spring的數據訪問框架解決了開發人員在應用程序中使用數據庫時遇到的常見困難。它不僅對Java:JDBC、iBATS/MyBATIs、Hibernate、Java數據對象(JDO)、ApacheOJB和ApacheCayne等所有流行的數據訪問框架中提供支持,同時還可以與Spring的事務管理一起使用,為數據訪問提供了靈活的抽象。Spring框架最初是沒有打算構建一個自己的WebMVC框架,其開發人員在開發過程中認為現有的StrutsWeb框架的呈現層和請求處理層之間以及請求處理層和模型之間的分離不夠,于是創建了SpringMVC。
1.4.5 Mysql數據庫
Mysql 經過多次的更新,功能層面已經非常的豐富和完善了,從Mysql4版本到5版本進行了比較大的更新,在商業的實際使用中取得了很好的實際應用效果。最新版本的Mysql支持對信息的壓縮,同時還能進行加密能更好的滿足對信息安全性的需求。同時經過系統的多次更新,數據庫自身的鏡像功能也得到了很大的增強,運行的流暢度和易用性方面有了不小的進步,驅動的使用和創建也更加的高效快捷。最大的變動還是進行了空間信息的顯示優化,能更加方便的在應用地圖上進行坐標的標注和運算。強大的備份功能也保證了用戶使用的過程會更加安心,同時支持的Office特性還支持用戶的自行安裝和使用。在信息的顯示形式上也進行了不小的更新,增加了兩個非常使用的顯示區,一個是信息區,對表格和文字進行了分類處理,界面的顯示更加清爽和具體。第二是儀表的信息控件,能在儀表信息區進行信息的顯示,同時還能進行多個信息的比對,為用戶的實際使用帶來了很大的便捷。
針對本文中設計的基于Vue+SpringBoot的 Al農作物病蟲害預警系統在實際的實現過程中,最終選擇Mysql數據庫的主要原因在于在系統應用及開發的過程中會存在大量的數據庫比較頻繁的操作,而且數據的安全性要求也是非常的高。綜合這些因素,最終選擇安全性系數比較高的Mysql來對基于Vue+SpringBoot的 Al農作物病蟲害預警系統后臺數據進行存儲操作。
可行性分析的目的是確定一個系統是否有必要開發、確定系統是否能以最小的代價實現。其工作主要有三個方面,分別是技術、經濟和社會三方面的可行性。會從這三個方面對基于Vue+SpringBoot的 Al農作物病蟲害預警系統進行詳細的分析。
結合Vue和SpringBoot來設計與實現Al農作物病蟲害預警系統是完全可行的。Vue作為前端框架,其組件化、響應式的設計理念使得系統界面交互友好且易于維護;而SpringBoot作為后端框架,提供了豐富的功能和強大的性能支持,確保了系統的穩定性和可擴展性。此外,利用AI技術進行病蟲害數據的分析和預警,能夠準確識別病蟲害的發生趨勢,為農業生產提供及時、有效的決策支持。因此,結合Vue和SpringBoot以及人工智能技術,構建農作物病蟲害預警系統在技術上是完全可行的,且能夠為農業生產帶來革命性的變革。
基于Vue+SpringBoot的農作物病蟲害預警系統的經濟可行性主要體現在以下幾個方面。首先,系統的實施可以降低農業生產中因病蟲害導致的損失,提高農作物的產量和質量,從而增加農民的經濟收入。同時,通過減少農藥的濫用,該系統有助于降低農業生產的環境污染,維護生態平衡,這對于農業可持續發展和綠色生態農業建設具有重要意義。再者,系統的推廣和應用可以帶動相關產業的發展,如信息技術服務、農業裝備制造等,創造更多的就業機會和經濟效益。最后,考慮到系統的長期效益,一次性的投資成本可以通過多年的使用和維護逐漸攤銷,使得系統的經濟效益更加顯著。綜上所述,基于Vue+SpringBoot的農作物病蟲害預警系統在經濟上具有高度的可行性,能夠為農業生產帶來顯著的經濟效益和長遠的可持續發展。
社會可行性主要包括法律和用戶兩個方面,下面將從這兩方面進行分析。
(1)法律因素
本系統是學習開發所制作的程序,并不用作商業用途,是在根據實際調研的結果結合現有的基于Vue+SpringBoot的 Al農作物病蟲害預警系統后得出的,而且系統制作的全部過程都是在個人的工作電腦中完成的,使用的都是開源和免費的開發環境、分析軟件和數據庫,不存在侵權問題。
(2)用戶可行性
操作人員或者客戶只需要具備一定的windows電腦操作常識,不需要精通計算機技能。此外系統管理人員,只需要在windows常識之上再熟悉下使用Tomcat服務器的操作流程,只要掌握一定的計算機知識即可,在正式上線運營之前,僅需要對操作人員進行簡單的熟悉流程培訓即可。所以從用戶可行性上也是可行的。
在設計基于Vue+SpringBoot的Al農作物病蟲害預警系統時,我們遵循了以下總體設計原則:
我們堅持用戶友好和易用性原則。系統界面設計簡潔明了,功能操作直觀易懂,確保農民和農業技術人員能夠輕松上手并高效使用。同時,我們注重系統的交互性和響應性,提供流暢的用戶體驗,以滿足用戶在實時監測和預警方面的需求。
我們強調系統的穩定性和可靠性。采用SpringBoot作為后端框架,確保了系統的健壯性和容錯能力。通過合理的系統架構設計和資源分配,我們保證了系統在高并發、大數據量的情況下依然能夠穩定運行,為用戶提供持續可靠的服務。
????我們注重系統的可擴展性和靈活性。通過模塊化設計和松耦合架構,我們使得系統易于擴展和升級。同時,我們提供了靈活的配置選項和可定制的功能,以適應不同地區、不同作物類型的病蟲害預警需求。
????我們重視系統的安全性和數據保護。通過實施嚴格的數據加密、訪問控制和日志審計措施,我們確保用戶數據和系統信息的安全可靠。同時,我們遵循相關的法律法規和標準規范,保護用戶隱私和數據安全。
最后,我們追求系統的經濟性和成本效益。在設計和實現過程中,我們充分考慮了系統的投資成本、運營成本和維護成本,力求實現性價比最優。通過優化系統架構、提高資源利用率和降低能耗等方式,我們實現了系統的經濟高效運行。
綜上所述,基于Vue+SpringBoot的Al農作物病蟲害預警系統的總體設計原則包括用戶友好和易用性、穩定性和可靠性、可擴展性和靈活性、安全性和數據保護以及經濟性和成本效益。這些原則共同構成了系統設計的核心指導思想,確保了系統的成功實施和可持續發展。
農作物病蟲害預警系統對于現代農業來說至關重要,它能夠提供及時的病蟲害信息,幫助農民做出科學決策,減少損失,提高產量。基于Vue+SpringBoot的Al農作物病蟲害預警系統的需求分析主要包括以下幾個方面:系統需要能夠實時監測農作物的生長環境和病蟲害發生情況,收集并處理大量的數據。系統需要利用人工智能技術,對收集到的數據進行分析和預測,生成準確的病蟲害預警信息。同時,系統需要提供友好的用戶界面,使得農民和農業技術人員能夠直觀地查看預警信息,并根據信息采取相應的防治措施。此外,系統還需要具備穩定性和可靠性,能夠應對高并發、大數據量的情況,保證服務的連續性。最后,系統需要注重數據的安全性和隱私保護,確保用戶數據的安全可靠。綜上所述,基于Vue+SpringBoot的Al農作物病蟲害預警系統的需求分析涉及數據監測與收集、人工智能分析預測、用戶界面設計、系統穩定性與可靠性以及數據安全性等多個方面,以滿足現代農業對病蟲害預警的實際需求。
系統的用例展示的是系統功能與用戶之間的關系,通過用例的方式能夠直觀的展示出來,本基于Vue+SpringBoot的 Al農作物病蟲害預警系統的完整UML用例圖分別是圖2-1、和圖2-2。
圖2-1 基于Vue+SpringBoot的 Al農作物病蟲害預警系統普通用戶角色用例圖
圖2-2?基于Vue+SpringBoot的 Al農作物病蟲害預警系統管理員角色用例圖
2.5.1登錄流程
登錄模塊主要滿足管理員以及用戶的權限登錄,用戶登錄流程圖如圖2-3所示。
圖2-3?登錄流程圖
2.5.2注冊流程
未有賬號的用戶可進入注冊界面進行注冊操作,用戶注冊流程圖如圖2-4所示。
圖2-4注冊流程圖
2.5.3添加信息流程
用戶在添加信息時,信息編號自動生成,系統會對添加的信息進行驗證,驗證通過則添加至數據庫,添加信息成功,反之添加失敗。添加信息流程如圖2-5所示。
圖2-5添加信息流程圖
2.5.4刪除信息流程
用戶可選擇要刪除的信息進行信息刪除操作,在刪除信息時系統提示是否確定刪除信息,是則刪除信息成功,系統數據庫將信息進行刪除。刪除信息流程圖如圖2-6所示。
圖2-6刪除信息流程圖
本基于Vue+SpringBoot的 Al農作物病蟲害預警系統選擇B/S結構(Browser/Server,瀏覽器/服務器結構)和基于Web服務兩種模式。適合在互聯網上進行操作,只要用戶能連網,任何時間、任何地點都可以進行系統的操作使用。系統工作原理圖如圖3-1所示:
圖3-1 系統工作原理圖
3.2系統結構設計
整個系統是由多個功能模塊組合而成的,要將所有的功能模塊都一一列舉出來,然后進行逐個的功能設計,使得每一個模塊都有相對應的功能設計,然后進行系統整體的設計。
本基于Vue+SpringBoot的 Al農作物病蟲害預警系統結構圖如圖3-2所示。
圖3-2?基于Vue+SpringBoot的 Al農作物病蟲害預警系統結構圖
數據庫可以說是所有軟件的根本,如果數據庫存在缺陷,那么會導致系統開發的不順利、維護困難、用戶使用不順暢等一系列問題,嚴重時將會直接損害企業的利益,同時在開發完成后,數據庫缺陷也更加難以解決。所以必須要對數據庫設計重點把握,做到認真細致。因此,數據庫設計是這個基于Vue+SpringBoot的 Al農作物病蟲害預警系統的重點要素。
基于Vue+SpringBoot的 Al農作物病蟲害預警系統總E-R圖如下圖3-3所示
圖3-3基于Vue+SpringBoot的 Al農作物病蟲害預警系統總E-R圖
將數據庫概念設計的E-R圖轉換為關系數據庫。在關系數據庫中,數據關系由數據表組成,但是表的結構表現在表的字段上。
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | token_id | int | 10 | 0 | N | Y | 臨時訪問牌ID | |
2 | token | varchar | 64 | 0 | Y | N | 臨時訪問牌 | |
3 | info | text | 65535 | 0 | Y | N | ||
4 | maxage | int | 10 | 0 | N | N | 2 | 最大壽命:默認2小時 |
5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間: |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間: |
7 | user_id | int | 10 | 0 | N | N | 0 | 用戶編號: |
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | article_id | mediumint | 8 | 0 | N | Y | 文章id:[0,8388607] | |
2 | title | varchar | 125 | 0 | N | Y | 標題:[0,125]用于文章和html的title標簽中 | |
3 | type | varchar | 64 | 0 | N | N | 0 | 文章分類:[0,1000]用來搜索指定類型的文章 |
4 | hits | int | 10 | 0 | N | N | 0 | 點擊數:[0,1000000000]訪問這篇文章的人次 |
5 | praise_len | int | 10 | 0 | N | N | 0 | 點贊數 |
6 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間: |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間: |
8 | source | varchar | 255 | 0 | Y | N | 來源:[0,255]文章的出處 | |
9 | url | varchar | 255 | 0 | Y | N | 來源地址:[0,255]用于跳轉到發布該文章的網站 | |
10 | tag | varchar | 255 | 0 | Y | N | 標簽:[0,255]用于標注文章所屬相關內容,多個標簽用空格隔開 | |
11 | content | longtext | 2147483647 | 0 | Y | N | 正文:文章的主體內容 | |
12 | img | varchar | 255 | 0 | Y | N | 封面圖 | |
13 | description | text | 65535 | 0 | Y | N | 文章描述 |
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | type_id | smallint | 5 | 0 | N | Y | 分類ID:[0,10000] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 顯示順序:[0,1000]決定分類顯示的先后順序 |
3 | name | varchar | 16 | 0 | N | N | 分類名稱:[2,16] | |
4 | father_id | smallint | 5 | 0 | N | N | 0 | 上級分類ID:[0,32767] |
5 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述該分類的作用 | |
6 | icon | text | 65535 | 0 | Y | N | 分類圖標: | |
7 | url | varchar | 255 | 0 | Y | N | 外鏈地址:[0,255]如果該分類是跳轉到其他網站的情況下,就在該URL上設置 | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間: |
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | auth_id | int | 10 | 0 | N | Y | 授權ID: | |
2 | user_group | varchar | 64 | 0 | Y | N | 用戶組: | |
3 | mod_name | varchar | 64 | 0 | Y | N | 模塊名: | |
4 | table_name | varchar | 64 | 0 | Y | N | 表名: | |
5 | page_title | varchar | 255 | 0 | Y | N | 頁面標題: | |
6 | path | varchar | 255 | 0 | Y | N | 路由路徑: | |
7 | position | varchar | 32 | 0 | Y | N | 位置: | |
8 | mode | varchar | 32 | 0 | N | N | _blank | 跳轉方式: |
9 | add | tinyint | 3 | 0 | N | N | 1 | 是否可增加: |
10 | del | tinyint | 3 | 0 | N | N | 1 | 是否可刪除: |
11 | set | tinyint | 3 | 0 | N | N | 1 | 是否可修改: |
12 | get | tinyint | 3 | 0 | N | N | 1 | 是否可查看: |
13 | field_add | text | 65535 | 0 | Y | N | 添加字段: | |
14 | field_set | text | 65535 | 0 | Y | N | 修改字段: | |
15 | field_get | text | 65535 | 0 | Y | N | 查詢字段: | |
16 | table_nav_name | varchar | 500 | 0 | Y | N | 跨表導航名稱: | |
17 | table_nav | varchar | 500 | 0 | Y | N | 跨表導航: | |
18 | option | text | 65535 | 0 | Y | N | 配置: | |
19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間: |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間: |
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | collect_id | int | 10 | 0 | N | Y | 收藏ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 收藏人ID: |
3 | source_table | varchar | 255 | 0 | Y | N | 來源表: | |
4 | source_field | varchar | 255 | 0 | Y | N | 來源字段: | |
5 | source_id | int | 10 | 0 | N | N | 0 | 來源ID: |
6 | title | varchar | 255 | 0 | Y | N | 標題: | |
7 | img | varchar | 255 | 0 | Y | N | 封面: | |
8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間: |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間: |
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | comment_id | int | 10 | 0 | N | Y | 評論ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 評論人ID: |
3 | reply_to_id | int | 10 | 0 | N | N | 0 | 回復評論ID:空為0 |
4 | content | longtext | 2147483647 | 0 | Y | N | 內容: | |
5 | nickname | varchar | 255 | 0 | Y | N | 昵稱: | |
6 | avatar | varchar | 255 | 0 | Y | N | 頭像地址:[0,255] | |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間: |
9 | source_table | varchar | 255 | 0 | Y | N | 來源表: | |
10 | source_field | varchar | 255 | 0 | Y | N | 來源字段: | |
11 | source_id | int | 10 | 0 | N | N | 0 | 來源ID: |
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | crop_information_id | int | 10 | 0 | N | Y | 農作物信息ID | |
2 | user_account | int | 10 | 0 | Y | N | 0 | 用戶賬號 |
3 | user_name | varchar | 64 | 0 | Y | N | 用戶姓名 | |
4 | record_time | date | 10 | 0 | Y | N | 記錄時間 | |
5 | crop_names | varchar | 64 | 0 | Y | N | 農作物名稱 | |
6 | crop_types | varchar | 64 | 0 | Y | N | 農作物種類 | |
7 | crop_status | varchar | 64 | 0 | Y | N | 農作物狀態 | |
8 | health_standard | varchar | 64 | 0 | Y | N | 健康標準 | |
9 | maturity_or_not | varchar | 64 | 0 | Y | N | 是否成熟 | |
10 | watering_information | varchar | 64 | 0 | Y | N | 澆水信息 | |
11 | handling_measures | text | 65535 | 0 | Y | N | 處理措施 | |
12 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間 |
13 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間 |
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | crop_types_id | int | 10 | 0 | N | Y | 農作物種類ID | |
2 | crop_types | varchar | 64 | 0 | Y | N | 農作物種類 | |
3 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間 |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間 |
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | data_analysis_id | int | 10 | 0 | N | Y | 數據分析ID | |
2 | user_account | int | 10 | 0 | Y | N | 0 | 用戶賬號 |
3 | user_name | varchar | 64 | 0 | Y | N | 用戶姓名 | |
4 | record_time | date | 10 | 0 | Y | N | 記錄時間 | |
5 | crop_names | varchar | 64 | 0 | Y | N | 農作物名稱 | |
6 | crop_types | varchar | 64 | 0 | Y | N | 農作物種類 | |
7 | crop_status | varchar | 64 | 0 | Y | N | 農作物狀態 | |
8 | health_standard | varchar | 64 | 0 | Y | N | 健康標準 | |
9 | maturity_or_not | varchar | 64 | 0 | Y | N | 是否成熟 | |
10 | watering_information | varchar | 64 | 0 | Y | N | 澆水信息 | |
11 | handling_measures | text | 65535 | 0 | Y | N | 處理措施 | |
12 | analysis_time | date | 10 | 0 | Y | N | 分析時間 | |
13 | analysis_results | text | 65535 | 0 | Y | N | 分析結果 | |
14 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間 |
15 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間 |
表disease_and_pest_warning (病蟲害預警)
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | disease_and_pest_warning_id | int | 10 | 0 | N | Y | 病蟲害預警ID | |
2 | disease_and_insect_names | varchar | 64 | 0 | Y | N | 病蟲名稱 | |
3 | disease_and_insect_images | varchar | 255 | 0 | Y | N | 病蟲圖片 | |
4 | release_time | date | 10 | 0 | Y | N | 發布時間 | |
5 | disease_and_insect_characteristics | varchar | 64 | 0 | Y | N | 病蟲特征 | |
6 | preventive_information | text | 65535 | 0 | Y | N | 預防信息 | |
7 | governance_measures | text | 65535 | 0 | Y | N | 治理措施 | |
8 | hits | int | 10 | 0 | N | N | 0 | 點擊數 |
9 | praise_len | int | 10 | 0 | N | N | 0 | 點贊數 |
10 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間 |
11 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間 |
表environmental_regulation (環境調控)
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | environmental_regulation_id | int | 10 | 0 | N | Y | 環境調控ID | |
2 | user_account | int | 10 | 0 | Y | N | 0 | 用戶賬號 |
3 | user_name | varchar | 64 | 0 | Y | N | 用戶姓名 | |
4 | crop_names | varchar | 64 | 0 | Y | N | 農作物名稱 | |
5 | crop_types | varchar | 64 | 0 | Y | N | 農作物種類 | |
6 | crop_details | text | 65535 | 0 | Y | N | 農作物詳情 | |
7 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間 |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間 |
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | hits_id | int | 10 | 0 | N | Y | 點贊ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 點贊人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間: |
5 | source_table | varchar | 255 | 0 | Y | N | 來源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 來源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 來源ID: |
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | praise_id | int | 10 | 0 | N | Y | 點贊ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 點贊人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間: |
5 | source_table | varchar | 255 | 0 | Y | N | 來源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 來源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 來源ID: |
8 | status | bit | 1 | 0 | N | N | 1 | 點贊狀態:1為點贊,0已取消 |
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | regular_users_id | int | 10 | 0 | N | Y | 普通用戶ID | |
2 | user_name | varchar | 64 | 0 | Y | N | 用戶姓名 | |
3 | user_address | varchar | 64 | 0 | Y | N | 用戶地址 | |
4 | examine_state | varchar | 16 | 0 | N | N | 已通過 | 審核狀態 |
5 | user_id | int | 10 | 0 | N | N | 0 | 用戶ID |
6 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間 |
7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間 |
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | slides_id | int | 10 | 0 | N | Y | 輪播圖ID: | |
2 | title | varchar | 64 | 0 | Y | N | 標題: | |
3 | content | varchar | 255 | 0 | Y | N | 內容: | |
4 | url | varchar | 255 | 0 | Y | N | 鏈接: | |
5 | img | varchar | 255 | 0 | Y | N | 輪播圖: | |
6 | hits | int | 10 | 0 | N | N | 0 | 點擊量: |
7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間: |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間: |
表temperature_information (溫度信息)
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | temperature_information_id | int | 10 | 0 | N | Y | 溫度信息ID | |
2 | user_account | int | 10 | 0 | Y | N | 0 | 用戶賬號 |
3 | user_name | varchar | 64 | 0 | Y | N | 用戶姓名 | |
4 | crop_names | varchar | 64 | 0 | Y | N | 農作物名稱 | |
5 | crop_types | varchar | 64 | 0 | Y | N | 農作物種類 | |
6 | temperature_adjustment_time | datetime | 19 | 0 | Y | N | 調溫時間 | |
7 | temperature_quantity | varchar | 64 | 0 | Y | N | 溫度數量 | |
8 | temperature_adjustment_details | text | 65535 | 0 | Y | N | 調溫詳情 | |
9 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間 |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間 |
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | upload_id | int | 10 | 0 | N | Y | 上傳ID | |
2 | name | varchar | 64 | 0 | Y | N | 文件名 | |
3 | path | varchar | 255 | 0 | Y | N | 訪問路徑 | |
4 | file | varchar | 255 | 0 | Y | N | 文件路徑 | |
5 | display | varchar | 255 | 0 | Y | N | 顯示順序 | |
6 | father_id | int | 10 | 0 | Y | N | 0 | 父級ID |
7 | dir | varchar | 255 | 0 | Y | N | 文件夾 | |
8 | type | varchar | 32 | 0 | Y | N | 文件類型 |
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | user_id | mediumint | 8 | 0 | N | Y | 用戶ID:[0,8388607]用戶獲取其他與用戶相關的數據 | |
2 | state | smallint | 5 | 0 | N | N | 1 | 賬戶狀態:[0,10](1可用|2異常|3已凍結|4已注銷) |
3 | user_group | varchar | 32 | 0 | Y | N | 所在用戶組:[0,32767]決定用戶身份和權限 | |
4 | login_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 上次登錄時間: |
5 | phone | varchar | 11 | 0 | Y | N | 手機號碼:[0,11]用戶的手機號碼,用于找回密碼時或登錄時 | |
6 | phone_state | smallint | 5 | 0 | N | N | 0 | 手機認證:[0,1](0未認證|1審核中|2已認證) |
7 | username | varchar | 16 | 0 | N | N | 用戶名:[0,16]用戶登錄時所用的賬戶名稱 | |
8 | nickname | varchar | 16 | 0 | Y | N | 昵稱:[0,16] | |
9 | password | varchar | 64 | 0 | N | N | 密碼:[0,32]用戶登錄所需的密碼,由6-16位數字或英文組成 | |
10 | | varchar | 64 | 0 | Y | N | 郵箱:[0,64]用戶的郵箱,用于找回密碼時或登錄時 | |
11 | email_state | smallint | 5 | 0 | N | N | 0 | 郵箱認證:[0,1](0未認證|1審核中|2已認證) |
12 | avatar | varchar | 255 | 0 | Y | N | 頭像地址:[0,255] | |
13 | open_id | varchar | 255 | 0 | Y | N | 針對獲取用戶信息字段 | |
14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間: |
15 | vip_level | varchar | 255 | 0 | Y | N | 會員等級 | |
16 | vip_discount | double | 11 | 2 | Y | N | 0.00 | 會員折扣 |
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | group_id | mediumint | 8 | 0 | N | Y | 用戶組ID:[0,8388607] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 顯示順序:[0,1000] |
3 | name | varchar | 16 | 0 | N | N | 名稱:[0,16] | |
4 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述該用戶組的特點或權限范圍 | |
5 | source_table | varchar | 255 | 0 | Y | N | 來源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 來源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 來源ID: |
8 | register | smallint | 5 | 0 | Y | N | 0 | 注冊位置: |
9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間: |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間: |
編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
1 | watering_information_id | int | 10 | 0 | N | Y | 澆水信息ID | |
2 | user_account | int | 10 | 0 | Y | N | 0 | 用戶賬號 |
3 | user_name | varchar | 64 | 0 | Y | N | 用戶姓名 | |
4 | crop_names | varchar | 64 | 0 | Y | N | 農作物名稱 | |
5 | crop_types | varchar | 64 | 0 | Y | N | 農作物種類 | |
6 | watering_time | datetime | 19 | 0 | Y | N | 澆水時間 | |
7 | watering_details | text | 65535 | 0 | Y | N | 澆水詳情 | |
8 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間 |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間 |
4.1普通用戶功能模塊
普通用戶需要通過注冊界面輸入個人信息,以創建賬戶并登錄系統,以便進行查詢各種信息操作。如下圖所示。
圖4-1注冊界面圖
注冊邏輯代碼如下:
/**
?????* 注冊
?????* @param user
?????* @return
?????*/
????@PostMapping("register")
????public Map<String, Object> signUp(@RequestBody User user) {
????????// 查詢用戶
????????Map<String, String> query = new HashMap<>();
????????query.put("username",user.getUsername());
????????List list = service.select(query, new HashMap<>()).getResultList();
????????if (list.size()>0){
????????????return error(30000, "用戶已存在");
????????}
????????user.setUserId(null);
????????user.setPassword(service.encryption(user.getPassword()));
????????service.save(user);
????????return success(1);
}
/**
?????* 用戶ID:[0,8388607]用戶獲取其他與用戶相關的數據
?????*/
????@Id
????@GeneratedValue(strategy = GenerationType.IDENTITY)
????@Column(name = "user_id")
????private Integer userId;
????/**
?????* 賬戶狀態:[0,10](1可用|2異常|3已凍結|4已注銷)
?????*/
????@Basic
????@Column(name = "state")
????private Integer state;
????/**
?????* 所在用戶組:[0,32767]決定用戶身份和權限
?????*/
????@Basic
????@Column(name = "user_group")
????private String userGroup;
????/**
?????* 上次登錄時間:
?????*/
????@Basic
????@Column(name = "login_time")
????private Timestamp loginTime;
????/**
?????* 手機號碼:[0,11]用戶的手機號碼,用于找回密碼時或登錄時
?????*/
????@Basic
????@Column(name = "phone")
????private String phone;
????/**
?????* 手機認證:[0,1](0未認證|1審核中|2已認證)
?????*/
????@Basic
????@Column(name = "phone_state")
????private Integer phoneState;
????/**
?????* 用戶名:[0,16]用戶登錄時所用的賬戶名稱
?????*/
????@Basic
????@Column(name = "username")
????private String username;
????/**
?????* 昵稱:[0,16]
?????*/
????@Basic
????@Column(name = "nickname")
????private String nickname;
????/**
?????* 密碼:[0,32]用戶登錄所需的密碼,由6-16位數字或英文組成
?????*/
????@Basic
????@Column(name = "password")
????private String password;
????/**
?????* 郵箱:[0,64]用戶的郵箱,用于找回密碼時或登錄時
?????*/
????@Basic
????@Column(name = "email")
????private String email;
????/**
?????* 郵箱認證:[0,1](0未認證|1審核中|2已認證)
?????*/
????@Basic
????@Column(name = "email_state")
????private Integer emailState;
????/**
?????* 頭像地址:[0,255]
?????*/
????@Basic
????@Column(name = "avatar")
????private String avatar;
????/**
?????* 創建時間:
?????*/
????@Basic
????@Column(name = "create_time")
????@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
????private Timestamp createTime;
????@Basic
????@Transient
????private String code;
}
???用戶通過注冊時的用戶名+密碼進行驗證登錄,如下圖所示。
圖4-2登錄界面圖
登錄代碼如下:
package com.project.demo.interceptor;
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
????private String tokenName = "x-auth-token";
????@Override
????public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
????????String token = request.getHeader(this.tokenName);
????????setHeader(request, response);
????????log.info("[請求接口] - {} , [請求類型] - {}",request.getRequestURL().toString(),request.getMethod());
????????if (request.getRequestURL().toString().contains("/api/user/login")){
????????????return true;
????????}
????????else if (request.getRequestURL().toString().contains("/api/user/state")){
????????????return true;
????????}
????????else if (request.getRequestURL().toString().contains("/api/user/register")){
????????????return true;
????????}
????}
????@Override
????public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
????????//更新token
????}
????@Override
????public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
????}
????private void failure(HttpServletRequest request, HttpServletResponse response) throws IOException {
????????response.setHeader("Content-type", "application/json;charset=UTF-8");
????????response.setStatus(401);
????????response.sendRedirect("https://www.baidu.com");
????}
????private void setHeader(HttpServletRequest request, HttpServletResponse response) {
????????//跨域的header設置
????????response.setHeader("Access-control-Allow-Origin", request.getHeader("Origin"));
????????response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
????????response.setHeader("Access-Control-Allow-Credentials", "true");
????????response.setHeader("Access-Control-Allow-Headers", request.getHeader("Access-Control-Request-Headers"));
????????response.setHeader("Access-Control-Max-Age", "1800");
????????//防止亂碼,適用于傳輸JSON數據
????????response.setHeader("Content-Type", "application/json;charset=UTF-8");
????????response.setStatus(HttpStatus.OK.value());
????}
}
普通用戶可以查看農作物種植技術、農業資訊等相關信息,方便用戶了解農作物的種植養護等知識。如下圖所示。
圖4-3農作物資訊界面圖
普通用戶可以使用系統的動物識別功能,通過拍照或上傳圖片來識別農作物病蟲害的具體類型。如下圖所示。
圖4-4動物識別界面圖
普通用戶可以查看系統提供農作物病蟲害的預警信息、防治措施等內容,了解當前農作物的健康狀況并提供相應的防治建議。如下圖所示。
圖4-5病蟲害預警界面圖
4.2管理員功能模塊
管理員通過填寫注冊時輸入的賬號、密碼和驗證碼進行登錄,如下圖所示。
圖4-6管理員登錄界面圖
管理員登錄的關鍵代碼如下。
???* 登錄
?????* @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;
}
管理員登錄進入基于Vue+SpringBoot的 Al農作物病蟲害預警系統,可以對后臺首頁、系統用戶、病蟲害預警管理、農作物種類管理、農作物信息管理、數據分析管理、環境調控管理、澆水信息管理、溫度信息管理、系統管理、資源管理等信息進行操作,如下圖所示。
圖4-7管理員功能界面圖
管理員功能界面邏輯代碼如下:
@RequestMapping("/get_list")
????public Map<String, Object> getList(HttpServletRequest request) {
????????Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
????????return success(map);
}
管理員可對前臺注冊的用戶以進行添加、重置或刪除等操作,如下圖所示。
圖4-8系統用戶管理界面圖
系統用戶管理界面邏輯代碼如下:
@RequestMapping("/get_obj")
????public Map<String, Object> obj(HttpServletRequest request) {
????????List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
????????if (resultList.size() > 0) {
????????????JSONObject jsonObject = new JSONObject();
????????????jsonObject.put("obj",resultList.get(0));
????????????return success(jsonObject);
????????} else {
????????????return success(null);
????????}
}
管理員可以管理農作物的種類信息,包括添加、編輯、刪除種類等操作。界面如下圖所示。
圖4-9農作物種類列表界面圖
圖4-10 農作物種類添加界面圖
管理員可以管理農作物生長環境的澆水信息,包括澆水計劃、記錄等。界面如下圖所示。
圖4-11 澆水信息管理界面圖
管理員可以管理農作物生長環境的溫度信息,包括溫度監測、記錄、分析等操作。界面如下圖所示。
圖4-12溫度信息管理界面圖
管理員可以管理系統首頁的輪播圖,包括添加、編輯和刪除輪播圖圖片,以提升用戶體驗和宣傳重要信息。如下圖所示。
圖4-13系統管理界面圖
資訊列表管理:管理員可以管理系統發布的資訊內容,包括添加、編輯、刪除資訊等操作。
資訊分類管理:管理員可以管理資訊的分類信息,包括添加、編輯、刪除分類等操作。如下圖所示。
圖4-14資訊列表界面圖
圖4-15資訊分類界面圖
測試存在于軟件開發進程中的最后一個階段,它可以保證一個軟件的開發質量是否符合設計者的初衷,也為程序的正式上線做了最后一道質量檢測的工序。軟件測試主要是控制各種條件、包括軟件輸出方式,使用模式和運行環境等,來評估一個系統或應用是否符合設計標準。在軟件測試過程中,我們一般刻意的去制造錯誤和極端條件,不能僅依照正常模式允許,而是多去嘗試那些意外的情況。
只有在運行和維護階段之前經歷大量的測試的軟件,才能說明它的質量是經得起檢驗的。最近計算機業界也都一致認為,測試應該存在于軟件設計的每個階段,因為越早發現錯誤,修復起來就越容易。
實際上,對于一個軟件應用,錯誤是必然存在的,無論使用何種技術或手段,都不可能絕對的排除軟件漏洞。測試是隨著軟件開發一同誕生的,兩者是共同發展進步的。實際上,測試可以大幅度的降低維護的成本,如果一個漏洞在開發的早期就被發現,那么修復它的成本遠比上線后再修復的成本要低得多。
測試有白盒測試和黑盒測試兩種方式。
其中,白盒測試是將軟件看成一個透明的白盒子,按照程序的內部控制結構和處理技術邏輯來選定測試用例、軟件系統測試的邏輯路徑及過程需要進行管理測試,又稱玻璃盒測試。因此白盒測試需要選擇足夠多的測試用例,覆蓋盡可能多的代碼來發現程序中的錯誤。
黑盒測試,也稱為功能測試。它將需軟件看作一個黑盒,像一個普通用戶一樣來模擬軟件的使用流程。黑盒測試通過大量的輸入邊界值或錯誤數據,來檢查是否可產生正確的輸出。
本系統測試 主要選擇黑盒測試,少量采用白盒測試。通過測試達到以下測試目的:
1.檢查各大功能模塊的運行,確保其能夠正確運行,并檢查各頁面的完整性,保證頁面完整。
2.檢查各個接口是否可以正確地輸入和輸出,保證數據流通穩定可行。
3.檢查數據結構,保證其和外部接口沒有訪問錯誤,訪問順利。
4.檢查原計劃的性能需求有沒有完成,運行流暢。
本系統的測試用例(部分):
登錄部分測試用例 | |||||
編號 | 對象 | 項目 | 操作 | 預期結果 | 結果 |
1 | 登錄 | 登錄提示 | 使用正確的賬號密碼登錄 | 成功登錄 | 預期結果 |
2 | 登錄提示 | 使用正確的賬號但錯誤的密碼登錄 | 提示密碼錯誤 | 預期結果 | |
3 | 登錄提示 | 使用錯誤的賬號登錄 | 提示不存在賬戶 | 預期結果 | |
4 | 登錄提示 | 不輸入賬號,點擊登錄 | 提示輸入賬號 | 預期結果 | |
5 | 登錄提示 | 輸入賬號但不輸入密碼點擊登錄 | 提示輸入密碼 | 預期結果 | |
6 | 登錄入口 | 已登錄賬號,查看登錄入口 | 不顯示登錄入口 | 預期結果 |
處理器:Inter Core I7-4710MQ四核處理器
內存:4GB
硬盤:1T
操作系統:Windows 10
數據庫:MySQL
全部測試用例都已通過(包括但不限于以上測試用例),且不存在漏洞,實現了論文開始時所作要求。本系統運行穩定,使用流暢,可以滿足客戶需求。
試運行后進行系統評估,可以認為該系統達到預定的目標要求,可以滿足用戶的需求,也滿足了系統開發前所作目標。
系統在經過大量重復測試后運行十分穩定,安全實用,功能模塊已經達到預定目標所需。
在規定的時間內實現系統的大部分功能,且滿足要求,節省開發成本,有助于提高科學管理水平,符合本人經濟情況。
隨著計算機互聯網技術的迅猛發展,各行各業都已經實現采用計算機相關技術對日益放大的數據進行管理。該課題是基于Vue+SpringBoot的 Al農作物病蟲害預警系統以交流為核心展開的。本研究針對基于Vue+SpringBoot的 Al農作物病蟲害預警系統需求建模,數據建模及過程建模分析設計并實現程序研究的過程。給出系統應用架構并分析優劣勢,通過功能分解圖,系統組件圖描述功能需求。設計建立了數據庫,給出系統關鍵數據結構的定義。通過類關系圖描述組件間的協作關系,給出各個類的定義方法。通過描述每一個類的字段,屬性及方法實現系統的前后端代碼。最終給出系統集成整合方法,完成基于Vue+SpringBoot的 Al農作物病蟲害預警系統的設計與實現。投入運行時,各功能均運行正常。系統的每個界面的操作符合常規邏輯,對使用者來說操作簡單,界面友好。整個系統的各個功能設計合理,體現了人性化。
但是由于自己在系統開發過程中對一些用到的相關知識和技術掌握不夠牢固,再加上自身開發經驗欠缺,因此系統在有些方面的功能還不夠完善,考慮的不夠全面,因此整個系統還有待日后逐步完善。
[2]王蘋,張海波,周晨,等.江蘇省農作物重大病蟲數字化監測預警系統建設現狀及對策[J].現代化農業,2024,(03):27-29.
[3]徐少軍,李宗哲,梅杰,等.基于Springboot+Vue框架的質量檢驗監督管理系統研發[J].紡織標準與質量,2024,(01):11-14+21.
[4]Retnaningsih T S ,R.B. S ,Hadiyanto H , et al.The carbon stock potential of the restored mangrove ecosystem of Pasarbanggi, Rembang, Central Java[J].Marine Environmental Research,2024,193106257-.
[5]Y. L H ,Arif P T ,Muhammad I A .Acute kidney injury in burn patients: A year findings from a topmost referral burn center in West Java, Indonesia[J].Burns Open,2024,8(1):35-38.
[6]Peldszus S ,Burger J ,Jurjens J .UMLsecRT: Reactive Security Monitoring of Java Applications With Round-Trip Engineering[J].IEEE Transactions on Software Engineering,2024,50(1):16-47.
[7]Haro D L G C ,Dallongeville S ,Musset T , et al.JDLL: a library to run deep learning models on Java bioimage informatics platforms.[J].Nature methods,2024,21(1):7-8.
[8]Antriyandarti E ,Suprihatin N D ,Pangesti W A , et al.The dual role of women in food security and agriculture in responding to climate change: Empirical evidence from Rural Java[J].Environmental Challenges,2024,14100852-.
[9]李珊輝.信息技術在農作物病蟲害防治中的應用[J].熱帶農業工程,2023,47(06):11-13.
[10]魏林海.利用視頻監測技術預防農作物病蟲害的方法研究[J].電子元器件與信息技術,2023,7(10):66-69.DOI:10.19772/j.cnki.2096-4455.2023.10.018.
[11]封洪強,姚青,胡程,等.我國農作物病蟲害智能監測預警技術新進展[J].植物保護,2023,49(05):229-242.DOI:10.16688/j.zwbh.2023404.
[12]黎賓.農作物重大病蟲害數字化監測預警系統研究[J].農業開發與裝備,2023,(08):69-71.
[13]尹祥杰,朱艷天,王麗英,等.山西省有機旱作農作物病蟲害監測預警系統的建設與應用[J].農業技術與裝備,2023,(08):49-50+53.
[14]顏廷國.農業大數據環境下的農作物病蟲害智能化監測預警[J].農業工程技術,2023,43(20):51-52.DOI:10.16815/j.cnki.11-5436/s.2023.20.024.
[15]張晨光,詹有松,許新新,等.數字化賦能農作物病蟲害監測預警體系的建設[J].浙江農業科學,2022,63(05):1082-1087.DOI:10.16178/j.issn.0528-9017.20220149.
[16]李楊.大數據時代農作物病蟲害識別預警的發展與應用[J].南方農業,2022,16(05):175-179.DOI:10.19415/j.cnki.1673-890x.2022.05.045.
[17]楊孟輯.基于遷移學習的農作物病蟲害預警系統研究[D].成都大學,2021.DOI:10.27917/d.cnki.gcxdy.2021.000015.
[18]謝春暉.物聯網技術在農作物病蟲害監測中的實踐與應用[J].青海農技推廣,2020,(04):35-36.
[19]楊威威.吉林省主要農作物病蟲害綠色防控技術研究[J].農家參謀,2020,(24):69.
[20]楊勇,樊剛強.以物聯網為基礎的農作物病蟲害自動測報系統探討[J].中國信息化,2019,(06):82-84.
大學生活在這個時候即將劃上一個句號,但是對于我的人生道路來說,這僅僅是一個逗號,我將面對的是又一次征程的開始。
回憶過去,許許多多的事情浮現在腦海:剛上大學時歡樂心情和興奮的場景還歷歷在目。一切都是那么新鮮,那么富有吸引力。有快樂也有艱辛,有收獲也有失落。衷心感謝學校所有支持幫助過我的老師,謝謝你們多年來的關心和愛護。同窗的友情同樣難忘,你們與我共同走過了人生中不平凡的道路,給我留下了值得珍藏的美好記憶。
最后,我要特別感謝指導基于Vue+SpringBoot的 Al農作物病蟲害預警系統設計的老師。本論文是在他的悉心指導和熱情幫助下完成的,老師認真負責的工作態度,嚴謹的治學精神和精深的理論水平都使我受益匪淺。老師無論在理論上還是在實踐中,都給予我很大的幫助,使我專業技能的應用水平得到很大提高,這對于我以后的工作和學習都有益處。值此論文完成之際,特別向老師表示衷心的感謝和崇高的敬意,謝謝他細心而又耐心地輔導,使得我得以順利的完成畢業設計開發工作,同時也要感謝其他幫助過我的老師和同學,他們在我成長過程中給予了我很大的幫助,在此一并表示感謝。
由于本人水平有限,加上時間緊促,本文一定有不少缺點和不足,懇請各位老師給予幫助和指正。
免費領取項目源碼,請關注?點贊收藏并私信博主,謝謝~