(ソースコード添付)スプリングブーツ農地水利施設管理システム開発 卒業制作 260931

目次

まとめ

1はじめに

1.1テーマ選定の目的と意義

1.2研究状況

1.3システム開発技術の特徴

1.4論文構成と章立て

2 農地かんがい設備管理システムのシステム分析 

2.1実現可能性の分析

2.2システムプロセス分析

2.2.1データ追加処理

2.3.2データ変更プロセス

2.3.3データ削除手順

2.3システム機能の分析

2.3.1機能分析

2.3.2非機能分析

2.4システムのユースケース分析

2.5この章の概要

3 農地かんがい設備管理システムの全体設計

3.1システムアーキテクチャ設計

3.2システム機能モジュールの設計

3.2.1全体的な機能モジュール設計

3.2.2デバイス管理モジュールの設計

3.2.3点検・保守管理モジュールの設計

3.3データベース設計

3.3.1データベースの概念構造設計

3.3.2データベースの論理構造設計

3.4この章の概要

4 農地灌漑設備管理システムの詳細設計と導入 

4.1 ログインモジュールの実装

4.2 管理者管理モジュール21

4.3 デバイス管理モジュール22

4.4 機器保管管理モジュール25

4.5 点検・保守管理モジュール27

4.6 プロファイルモジュール31

5システムテスト34

5.1システムテストの目的34

5.2システムテストケース34

5.3システムテストの結果35

結論37

参考資料38

謝辞  

                                                                       まとめ

農地灌漑設備管理システムの現状を考慮して、ソフトウェア技術を使用して農地灌漑設備管理システムが開発され、農地灌漑設備管理のデジタル化と標準化を実現し、設備管理の効率を効果的に向上させ、労働集約度を軽減しました。管理者たち。コンピュータ管理は、その迅速かつ効率的な特徴により、多くの分野で従来の手作業による管理方法に取って代わりましたが、特に複雑で単純な資材管理においては、コンピュータ管理方法の利点はさらに顕著になります。従来の管理方法と比較して、農地灌漑設備管理システムはより効果的に情報を管理できます。設備管理システムでは、データベースを利用して情報データをデータベース化し、更新・管理を容易にしています。

キーワード:スプリングブーツ技術、MYSQL、農地かんがい設備管理システム

抽象的な

農地灌漑設備管理システムの現状に応じて、農地灌漑設備管理システムはソフトウェア技術を使用して開発され、農地灌漑設備管理のデジタル化と標準化を実現し、設備管理の作業効率を効果的に向上させ、労働集約度を削減します。マネージャーの。従来の資材管理の分野では、特に複雑で効率的な資材管理の分野では、コンピューター管理が手作業での管理に取って代わられています。従来の管理方法と比較して、農地灌漑設備管理システムはより効果的に情報を管理できます。機器管理システムは、データベースを適用して情報データをデータベースの形式で表現し、更新と管理が容易になります。

キーワード:  Springboot テクノロジー; MYSQL;農地かんがい設備管理システム

1はじめに

1.1テーマ選定 の目的と意義

農地かんがい設備管理システムの業務において、設備の配置は非常に複雑で困難な作業です。手配の際、数が多いため間違いが起こりやすいです。コンピュータ支援による設備配置作業の利用は、配置作業の科学性を向上させるだけでなく、管理者の作業強度を大幅に軽減し、作業効率を向上させ、農地灌漑設備管理の近代化を新たなレベルに引き上げます。また、現在多くの農地灌漑設備が存在するものの、自動管理のレベルが相対的に低いため、多くの農地灌漑設備は設備購入後に設備の基本情報や関連情報を登録・アーカイブしています。アーカイブ後のファイルは基本的に記録・保持されず、将来の機器の変更や破損についても機器ファイルには記録されないため、機器のリアルタイムの状態を反映することができません。一部のユニットでは農地灌漑設備管理システムを導入しており、設備のリアルタイム情報を設備ファイルに反映できても、設備の不具合処理や設備の不具合などの機能が実装されておらず、設備の保守部品の状況なども把握できていない。農地灌漑設備管理全体の情報化は依然として低いレベルにあることが認識されている。管理タスクを小さな部分に分割して個人に実装し、いつでも装置の現在および過去の状態を照会できるようにします。これは、装置の信頼性分析に直接影響を及ぼし、管理者を手作業の計算や統計作業から解放します。 。

1.2 研究状況

農地かんがい設備管理システムは、農地かんがいシステムに不可欠な部分であり、その内容は農地かんがい設備と管理者にとって極めて重要であるため、農地かんがい設備管理システムは、農業に十分な情報を提供し、迅速に管理できる必要があります。 。また、このシステムは農地灌漑の効果的な設備管理にも役立ち、農地灌漑設備の設備保守や見積りに大きく役立ち、農業の持続可能な発展能力と市場競争力を向上させます。

現在、国内の農地灌漑設備管理システムの自動管理レベルはそれほど高くありません。農地かんがい設備管理システムの学習方法としては、設備購入後に設備の基本状況や関連情報を登録・アーカイブする方法がほとんどです。今後はファイルの管理は基本的に行わなくなり、設備の所在、メンテナンス状況、現在の稼働状況などの情報は設備台帳に一切反映されなくなり、設備の追跡情報が取得できなくなります。タイムリーに機器ファイルに反映されます。一部の農地灌漑設備管理システムでは、設備の追跡情報を設備ファイルに反映できるものの、設備の不具合処理や設備の不具合などの機能が実装されておらず、設備の保守部品の状況や保守コストの計算が実装されていない場合があります。 . 農地全体 灌漑設備管理の情報化はまだ低いレベルにある。この情報管理システムは、国際的に先進的な農地灌漑設備管理システムのアイデアを合理的に引き出し、国内の農地灌漑設備管理システムの現状を組み合わせており、国内の農地灌漑設備管理システムのニーズを十分に満たすことができます。柔軟性と汎用性を主な設計思想として、さまざまな業界での機器管理に関する長期的な研究と探求を通じて、農地の灌漑効率と機器の信頼性を向上させ、スタッフの労働集約度を軽減し、消耗品を削減し、農地を改善することができます。灌漑設備管理システム、現代の管理レベル。

1.3 システム開発技術の特徴

(1) 農地灌漑設備管理システムの Web バックグラウンド管理のバックエンドは、古い jsp+javabean+servlet テクノロジーを使用せず、現在主流の springboot フレームワークを使用することで、java 構成コードを削減し、プログラミング コードを簡素化します。このフレームワークも多くの企業に選ばれているフレームワークの一つです。

(2) 農地かんがい設備管理システムにおけるWebバックグラウンド管理のフロントエンドにはJavaScriptフレームワークを採用しており、ajax[8]やjquery[9]と連携してページデザインを美しくすることができます。

(3) 農地水利設備管理システムで使用しているデータベースは実行効率の高いmysql5.7です。

1.4 論文構成と章の配置

論文は階層的に構成されており、要約、謝辞、参考文献に加えて、本文では Web サイトの要件を分析し、一般的な設計と実装された機能を説明し、最後にいくつかのデバッグ記録をリストします。以下のとおりであります:

第1章;序章。第 1 章では、プロジェクト研究の背景、システム開発の現状、本稿の研究内容と主な業務を中心に紹介します。

第 2 章: システム要件の分析。第 2 章では、主にユーザーとシステムの機能の側面から需要分析を行います。

第 3 章: システム設計。第 3 章では主にシステムフレームワーク、システム機能モジュール、データベースの機能設計を行います。

第 4 章: システムの実装。第 4 章では主にシステムフレームワークの構築とシステムインターフェースの実装について紹介します。

第 5 章: システムのテスト。第 5 章では主にシステムのいくつかのインターフェイスをテストし、主要な機能をテストします。

第 6 章: 概要。

2 農地かんがい設備管理システムのシステム分析

システム分析はプロジェクト開発の前提条件であり、システム分析を通じてシステムの主要ユーザーの基本的なニーズを十分に理解することができ、これがプロジェクト開発の理由でもあります。次に、システム開発の実現可能性分析が行われます。これには、通常、技術的実現可能性、経済的実現可能性などが含まれます。実現可能性分析は、プロジェクト全体の観点からの分析でもあります。次に、プロジェクトの具体的な要件が分析されますが、その分析方法は通常、ユーザーのユースケース図を通じて実装されます。以下に詳しくご紹介します。

2.1実現可能性の分析

(1) 経済性:

プロジェクトで使用されるツールのほとんどは現在一般的なオープンソースで無料であるため、開発の初期段階ではプロジェクトに使用される資金が大幅に削減され、ソフトウェアの開発はプロジェクト中の資金に影響されません。初期段階にあるため、経済的にはまだ実現可能です。最小限の金額でユーザーのニーズに応えられるように努めます。人件費や設備費を節約できます。ペーパーレス化・高効率化の道をどんどん突き進んでいきます。

したがって、経済性については問題ない。

(2) 運用可能性:

このプロジェクトの設計は、このモードでの Web サイト開発のいくつかの事例を参照し、その操作インターフェイスを分析し、多くの事例を組み合わせて人間中心の簡素化された操作を強調しているため、基本的なコンピューターの知識がある人でもこのプロジェクトを操作できます。

したがって、運用可能性に問題はない。

(3) 技術的な実現可能性:

技術的実現可能性とは、フレームワークの構築の実現可能性だけでなく、より良い技術が登場した場合の技術改良へのシステムの適応性、開発期間とコストの比率を指します。

既存の Springboot テクノロジーは、あらゆる電子商取引システムの構築に対応できます。今回の農地かんがい設備管理システムの開発では、springboot+MYSQL を利用してプログラム全体を実行しました。

結論から言えば、技術的な実現可能性には問題はない。

(4) 法的実現可能性:

開発者の観点から見ると、springboot と MYSQL はオープンソースでオンラインで無料であり、知的財産権に関する法的紛争は発生しません。

ユーザーの観点から見ると、システム上で密輸品が販売されなくなっている限り、システムとの協定や協定が締結され、違法な支払いは排除されます。

結論から言えば、法的実現可能性には問題はない。

2.2 システムプロセス分析

ビジネス プロセスは、システムを使用する際のユーザーのプロセスを示すために、いくつかの特定の記号と線を使用します。システム分析を実行する際、ビジネス プロセスは、開発者がビジネスをより深く理解し、エラーを発見し、システムを改善するのに役立ちます。

2.2.1 データ追加処理

ユーザーがシステムに正常にログインした後、データを追加できます。追加されるデータの番号はシステムによって生成されます。ユーザーが任意に入力することはできません。番号以外はユーザーが入力します。ご自身で情報を追加しました 入力された情報はシステムによって検証され、正当なものです 合格した場合はデータの追加に成功したことが表示されます 合格した場合は正常に追加されません 図2-1データを追加するプロセスを示します。

 

図2-1 データ追加フローチャート

2.2.2 データ変更プロセス

図 2-2に示すように、データ変更のプロセスは、上で説明したデータ追加のプロセスと同様です

 

図 2-2 データ変更のフローチャート

2.2.3 データ削除プロセス

システム内に不要なデータがある場合は担当管理者がデータを削除することもできます (図2-3にデータ削除のフローチャートを示します)。

 

図 2-3 データ削除のフローチャート

2.3 システム機能の分析

2.3.1 機能分析

農地かんがい設備管理システムの役割に応じて、管理者管理モジュールに分割しました。

管理者管理モジュール:

(1) ユーザー管理:管理者は、管理者情報を管理・制御することができます。

(2) 設備管理:管理者は、バックグラウンドで農地水利設備管理システムに表示される設備情報の追加、削除、変更、確認が可能です。

(3) 設備保管管理:農地かんがい設備管理システムにおいて、管理者が設備の保管管理を行うことができます。

(4) 設備搬出管理:「設備搬出」メニューでは、管理者が操作する搬出設備を制御できます。

(5) 運転パラメータ管理:管理者は、農地かんがい設備管理システムに表示される運転パラメータ情報を追加、削除、変更、確認することができます。

(6) 保守管理:管理者は、農地水利設備管理システムに表示される保守情報の追加、削除、変更、確認が可能です。

2.3.2 非機能分析

 農地水利設備管理システムの非機能要件には、農地水利設備管理システムのセキュリティ、信頼性、性能、拡張性などが含まれる。詳細は次の 3-1 表で表すことができます。

3-1 農地かんがい設備管理システム非機能要件表

安全性

主に農地かんがい設備管理システムのデータベースの導入を指し、データベースの利用やパスワードの設定は規格に準拠する必要があります。

信頼性

信頼性とは、農地灌漑設備管理システムがユーザーの指示に従って設置・運用できることを意味し、テスト後の信頼性は90%以上です。

パフォーマンス

農地灌漑設備管理システムが市場を占有するには性能が必須条件であり、性能が良いことが望ましい。

スケーラビリティ

たとえば、データベースは、システムの非機能要件を確実に満たすために、インターフェイスの使用などの複数の属性を予約します。

使いやすさ

利用者は農地水利設備管理システムのページ表示内容に従うだけで操作が可能です。

保守性

 農地灌漑設備管理システムの開発は保守性が非常に重要ですが、テストを行った結果、保守性に問題はありません。

2.4システムのユースケース分析

管理者は Web バックグラウンド管理で農地灌漑設備管理システム全体のすべてのデータ情報を維持します。管理者の役割の例を図 2-3 に示します。

 

図 2-3農地かんがい設備管理システム管理者の役割ユースケース図

2.5 この章の概要

本章では、主に農地水利設備管理システムの実現可能性分析、プロセス分析、機能要件分析、システムユースケース分析を通じて、農地水利設備管理システム全体で実現すべき機能を決定します。また、農地灌漑設備管理システムのコード実装とテストに関する標準も提供します。

3 農地かんがい設備管理システムの全体設計

この章で説明する主な内容は、農地かんがい設備管理システムの機能モジュール設計とデータベースシステム設計です。

3.1システムアーキテクチャ設計

この農地灌漑設備管理システムは、アーキテクチャ的にプレゼンテーション層(UI)、ビジネスロジック層(BLL)、データ層(DL)の3層に分かれています。

図 3-1 農地かんがい設備管理システムのシステム構成設計図

 

プレゼンテーション層 (UI): UI 層とも呼ばれ、主に農地灌漑設備管理システムの UI インタラクション機能を完成させます。優れた UI は、農地灌漑設備管理システムを使用する際のユーザー エクスペリエンスを向上させ、ユーザーの快適さを向上させることができます。 。UI インターフェイスの設計は、良好な互換性を実現するために、農地灌漑設備管理システムのさまざまなバージョンやさまざまなサイズ解像度にも適応する必要があります。UI インタラクション機能の要件は合理的であり、ユーザーはインタラクティブな操作を実行する際に一貫したインタラクション結果を得る必要があり、そのためにはプレゼンテーション層がビジネス ロジック層と適切に接続されている必要があります。

ビジネスロジック層(BLL):主にこの農地灌漑設備管理システムのデータ処理機能を完成させます。ユーザーがプレゼンテーション層から送信したデータはビジネスロジック層で処理されてデータ層に渡され、システムがデータ層から読み込んだデータはビジネスロジック層で処理されてプレゼンテーション層に渡されます。

データ層(DL):この農地かんがい設備管理システムのデータはサーバー側のmysqlデータベースに置かれるため、サービス層に属する部分はビジネスロジック層に直接統合できるため、主に完成するデータ層のデータベース この農地水利設備管理システムのデータ蓄積・管理機能。

3.2システム機能モジュールの設計

3.2.1 全体的な機能モジュール設計

前章では主にシステムの機能要件と非機能要件を分析し、要件に基づいてこの農地かんがい設備管理システムのユースケースを分析しました。次に、この農地かんがい設備管理システムのアーキテクチャ、主要機能、データベースの設計を開始します。前章の需要分析に基づいて導出された農地灌漑設備管理システムの全体設計モジュール図を図 3-2 に示す。

図 3-2 農地かんがい設備管理システムの機能モジュール図

 

3.2.2デバイス管理モジュールの設計

バックエンドマネージャーは、バックエンドデバイス管理操作の追加、削除、変更、確認を行うことができます。デバイス管理モジュールの構造図は次のとおりです。

 

図 3-3 デバイス管理モジュールの構成図

3.2.3点検・保守管理モジュールの設計

バックエンド管理者は、バックエンド保守管理の追加、削除、変更、確認を行うことができ、保守管理モジュールの構成図は以下のとおりです。

 

図 3-4 点検・保守管理モジュールの構成図

3.3 データベース設計

データベースの設計は、一般に需要分析、概念モデル設計、データベーステーブル作成の3つの大きなプロセスから構成されますが、需要分析については前章で説明しましたが、概念モデル設計は概念モデルと論理構造設計の2つに分かれます。

3.3.1データベースの概念構造設計

以下は、農地灌漑設備管理システム全体における主要なデータベーステーブルの主要な ER エンティティ関係図です。

図 3-6 農地かんがい設備管理システムの全体 ER 関係図

 

農地かんがい設備管理システムデータベースのトータルER図によると、農地かんがい設備管理システムには多くのER図が必要であると結論付けることができ、主なデータベースERモデル図をいくつか紹介します。

 

図 3-7 動作パラメータ ER 関係図

 

図3-8 機器保管情報のER関係図

 

図 3-9 機器アウトバウンド管理 ER 関係図

 

図 3-10 デバイス管理 ER 関係図

3.3.2 データベースの論理構造設計

前節の農地水利設備管理システムにおける全体の ER 関係図から、合計で多くのデータテーブルを作成する必要があることがわかります。ここでは主に、いくつかの主要なデータベース テーブル構造設計をリストします。

オーバーホールとメンテナンス表:

名前

タイプ

長さ

nullではない

主キー

コメント

オーバーホールとメンテナンスID

整数

11

はい

はい

メンテナンスID

機器モデル

可変長文字

64

はい

いいえ

デバイスモデル

機器名

可変長文字

64

いいえ

いいえ

装置名

機器の種類

可変長文字

64

いいえ

いいえ

設備の種類

修理担当者

可変長文字

64

いいえ

いいえ

メンテナンススタッフ

メンテナンス時間

日付時刻

0

いいえ

いいえ

メンテナンス時間

メンテナンス状況

可変長文字

64

いいえ

いいえ

メンテナンス状況

保守数量

整数

11

いいえ

いいえ

修理数量

装備_写真

可変長文字

255

いいえ

いいえ

設備写真

メンテナンスの詳細

文章

0

いいえ

いいえ

修理内容

推薦する

整数

11

はい

いいえ

インテリジェントな推奨事項

作成時間

日付時刻

0

はい

いいえ

作成時間

更新時間

タイムスタンプ

0

はい

いいえ

更新時間

operating_parameters表:

名前

タイプ

長さ

nullではない

主キー

コメント

動作パラメータID

整数

11

はい

はい

実行パラメータID

機器モデル

可変長文字

64

はい

いいえ

デバイスモデル

機器名

可変長文字

64

いいえ

いいえ

装置名

機器の種類

可変長文字

64

いいえ

いいえ

設備の種類

オペレーター

可変長文字

64

いいえ

いいえ

オペレーター

実行状態_

可変長文字

64

いいえ

いいえ

稼働状況

実行数量

整数

11

いいえ

いいえ

実行数

実行時間

日付時刻

0

いいえ

いいえ

営業時間

装備_写真

可変長文字

255

いいえ

いいえ

設備写真

動作パラメータ

文章

0

いいえ

いいえ

動作パラメータ

操作内容

文章

0

いいえ

いいえ

実行の詳細

推薦する

整数

11

はい

いいえ

インテリジェントな推奨事項

作成時間

日付時刻

0

はい

いいえ

作成時間

更新時間

タイムスタンプ

0

はい

いいえ

更新時間

設備_倉庫表:

名前

タイプ

長さ

nullではない

主キー

コメント

機器倉庫ID

整数

11

はい

はい

機器保管ID

機器モデル

可変長文字

64

いいえ

いいえ

デバイスモデル

機器名

可変長文字

64

いいえ

いいえ

装置名

機器の種類

可変長文字

64

いいえ

いいえ

設備の種類

機器仕様

可変長文字

64

いいえ

いいえ

設備仕様

倉庫担当者

可変長文字

64

いいえ

いいえ

倉庫担当者

領収書の数量

整数

11

いいえ

いいえ

入荷数量

倉庫保管時間

日付時刻

0

いいえ

いいえ

保管時間

装備_写真

可変長文字

255

いいえ

いいえ

設備写真

機器パラメータ

文章

0

いいえ

いいえ

デバイスパラメータ

倉庫保管_備考

文章

0

いいえ

いいえ

倉庫保管上の注意

推薦する

整数

11

はい

いいえ

インテリジェントな推奨事項

作成時間

日付時刻

0

はい

いいえ

作成時間

更新時間

タイムスタンプ

0

はい

いいえ

更新時間

機器_ex_倉庫表:

名前

タイプ

長さ

nullではない

主キー

コメント

Equipment_ex_warehouse_id

整数

11

はい

はい

機器納品ID

機器モデル

可変長文字

64

いいえ

いいえ

デバイスモデル

機器名

可変長文字

64

いいえ

いいえ

装置名

機器の種類

可変長文字

64

いいえ

いいえ

設備の種類

機器仕様

可変長文字

64

いいえ

いいえ

設備仕様

元倉庫担当者

可変長文字

64

いいえ

いいえ

出発担当者

アウトバウンド数量

整数

11

いいえ

いいえ

出荷数量

納期

日付時刻

0

いいえ

いいえ

納期

装備_写真

可変長文字

255

いいえ

いいえ

設備写真

機器パラメータ

文章

0

いいえ

いいえ

デバイスパラメータ

ex_warehouse_remarks

文章

0

いいえ

いいえ

倉庫の備考

推薦する

整数

11

はい

いいえ

インテリジェントな推奨事項

作成時間

日付時刻

0

はい

いいえ

作成時間

更新時間

タイムスタンプ

0

はい

いいえ

更新時間

デバイス管理テーブル:

名前

タイプ

長さ

nullではない

主キー

コメント

デバイス管理ID

整数

11

はい

はい

设备管理ID

equipment_model

varchar

64

设备型号

equipment_name

varchar

64

设备名称

equipment_type

varchar

64

设备类型

number_of_equipment

int

11

设备数量

equipment_specification

varchar

64

设备规格

equipment_picture

varchar

255

设备图片

equipment_parameters

text

0

设备参数

device_details_

text

0

设备详情

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

Upload表:

名称

类型

长度

不是null

主键

注释

upload_id

int

11

上传ID

name

varchar

64

文件名

path

varchar

255

访问路径

file

varchar

255

文件路径

display

varchar

255

显示顺序

father_id

int

11

父级ID

dir

varchar

255

文件夹

type

varchar

32

文件类型

Group表:

名称

类型

长度

不是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

更新时间

3.4本章小结

整个农田灌溉设备管理系统的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。

4农田灌溉设备管理系统 详细设计与实现

 农田灌溉设备管理系统 的详细设计与实现主要是根据前面的 农田灌溉设备管理系统 的需求分析和 农田灌溉设备管理系统 的总体设计来设计页面并实现业务逻辑。主要从 农田灌溉设备管理系统 界面实现、业务逻辑实现这两部分进行介

4.1登录模块的实现

系统的登录窗口是用户的入口,用户只有在登录成功后才可以进入访问。通过在登录提交表单,后台处理判断是否为合法用户,进行页面跳转,进入系统中去。

登录合法性判断过程:用户输入账号和密码后,系统首先确定输入输入数据合法性,然后在login.jsp页面发送登录请求,调用src下的mainctrl类的dopost方法来验证。

用户登录模块的IPO如下所示:

输入:用户名和密码。

处理:

1)检测用户输入的账号、密码是否正确及在数据库已对应存在。

2)从数据库中提取记录,并储存在本地的session中(timeout默认=30min)。

3)根据用户名,将其显示在系统首页上。

输出:是否成功的信息。

登录流程图如下所示。

 

图5-1登录流程图

系统登录界面如下所示。

 

图5-2系统登录界面

登录关键代码如下所示。

/**

     * 登录

     * @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;

        Map<String, String> map = new HashMap<>();

        if(username != null && "".equals(username) == false){

            map.put("username", username);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(email != null && "".equals(email) == false){

            map.put("email", email);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }

        else if(phone != null && "".equals(phone) == false){

            map.put("phone", phone);

            resultList = service.select(map, new HashMap<>()).getResultList();

        }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.select(groupMap, new HashMap<>()).getResultList();

        if (groupList.size()<1){

            return error(30000,"用户组不存在");

        }

        UserGroup userGroup = (UserGroup) groupList.get(0);

        //查询用户审核状态

        if (!StringUtils.isEmpty(userGroup.getSourceTable())){

            String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();

            String res = String.valueOf(service.runCountSql(sql).getSingleResult());

            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, "账号或密码不正确");

        }

}

4.2管理员管理模块

管理员在yhzhgl查看管理员信息,先使用sql语句查询出所有管理员表的数据,然后调用PageManager.getPages(url,4,sql, request ),返回一个ArrayList的对象,在for循环里,使用Java得到每个ArrayList对象的数据,在jsp页面中解析ArrayList对象,得到其各个键值对的值。

管理员管理界面如下图所示。

 

图5-3管理员管理界面

管理员管理关键代码如下所示。

public String encryption(String plainText) {

        String re_md5 = new String();

        try {

            MessageDigest md = MessageDigest.getInstance("MD5");

            md.update(plainText.getBytes());

            byte b[] = md.digest();

            int i;

            StringBuffer buf = new StringBuffer("");

            for (int offset = 0; offset < b.length; offset++) {

                i = b[offset];

                if (i < 0)

                    i += 256;

                if (i < 16)

                    buf.append("0");

                buf.append(Integer.toHexString(i));

            }

            re_md5 = buf.toString();

        } catch (Exception e) {

            e.printStackTrace();

        }

        return re_md5;

    }

4.3设备管理模块

添加设备信息时,输入必填字段后,表现层的YifangController接受传过来的设备信息参数,再调用YifangController类的addYifang方法,经过YifangService业务层到YifangMapper持久层的处理,完成对整个添加设备信息的操作。addYifang方法也和用户管理中的addUser方法类似,同时做添加和修改工作。

修改设备信息时,选择需要修改的设备进行修改,调用YifangController控制器的editYifang方法,拿到该设备原本的信息并显示到页面,管理员再对需要修改的设备信息字段进行修改,完成后调用addYifang方法,调用业务层的updateByKey方法,更新数据库的设备信息表的数据。

设备管理流程图如下所示。

 

图5-4设备管理流程图

设备添加界面如下图所示。

 

图5-5设备添加界面

设备查询界面如下图所示。

 

图5-6设备查询界面

设备管理关键代码如下所示。

  @PostMapping("/add")

    @Transactional

    public Map<String, Object> add(HttpServletRequest request) throws IOException {

        service.insert(service.readBody(request.getReader()));

        return success(1);

    }

    @Transactional

    public Map<String, Object> addMap(Map<String,Object> map){

        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){

        StringBuffer sql = new StringBuffer("INSERT INTO ");

        sql.append("`").append(table).append("`").append(" (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            sql.append("`"+humpToLine(entry.getKey())+"`").append(",");

        }

        sql.deleteCharAt(sql.length()-1);

        sql.append(") VALUES (");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            Object value = entry.getValue();

            if (value instanceof String){

                sql.append("'").append(entry.getValue()).append("'").append(",");

            }else {

                sql.append(entry.getValue()).append(",");

            }

        }

        sql.deleteCharAt(sql.length() - 1);

        sql.append(")");

        log.info("[{}] - 插入操作:{}",table,sql);

        Query query = runCountSql(sql.toString());

        query.executeUpdate();

    }

4.4设备入库管理模块

删除设备入库时,选择需要删除的设备进行删除,把主键的uId传到HetongController控制器,再调用控制器的deleteHetong方法,数据经过HetongService业务层解析和处理,请求HetongMapper持久层调用deleteByPrimaryKey方法操作数据库将设备入库数据从数据库中删除。

查找设备入库时,输入需要查找的设备入库名,调用getData方法获取所有数据并且进行分页,把获取到的所有数据显示到视图上,这时候只需要用脚本方法便能快速查找,不涉及对数据库操作。

设备入库管理流程图如下所示。

 

图5-7设备入库管理流程图

设备入库添加界面如下图所示。

 

图5-8设备入库添加界面

设备入库管理关键代码如下所示。

@RequestMapping(value = "/del")

    @Transactional

    public Map<String, Object> del(HttpServletRequest request) {

        service.delete(service.readQuery(request), service.readConfig(request));

        return success(1);

}

    @Transactional

    public void delete(Map<String,String> query,Map<String,String> config){

        StringBuffer sql = new StringBuffer("DELETE FROM ").append("`").append(table).append("`").append(" ");

        sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.GROUP_BY))));

        log.info("[{}] - 删除操作:{}",table,sql);

        Query query1 = runCountSql(sql.toString());

        query1.executeUpdate();

    }

4.5检修维护管理模块

管理员选择添加检修维护,管理员在yifang_list查看检修维护,点击检修维护,跳转至zijinshoufu_add.Java,添加检修维护记录则将添加的检修维护记录数据封装在HashMap中,然后调用CommDAO的insert方法将检修维护记录内容插入检修维护记录表中。

检修维护管理流程图如下所示。

 

图5-9检修维护管理流程图

检修维护添加界面如下图所示。

 

图5-10检修维护添加界面

检修维护管理关键代码如下所示。

@PostMapping("/set")

@Transactional

    public Map<String, Object> set(HttpServletRequest request) throws IOException {

        service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));

        return success(1);

}

    public Map<String,String> readConfig(HttpServletRequest request){

        Map<String,String> map = new HashMap<>();

        map.put(FindConfig.PAGE,request.getParameter(FindConfig.PAGE));

        map.put(FindConfig.SIZE,request.getParameter(FindConfig.SIZE));

        map.put(FindConfig.LIKE,request.getParameter(FindConfig.LIKE));

        map.put(FindConfig.ORDER_BY,request.getParameter(FindConfig.ORDER_BY));

        map.put(FindConfig.FIELD,request.getParameter(FindConfig.FIELD));

        map.put(FindConfig.GROUP_BY,request.getParameter(FindConfig.GROUP_BY));

        map.put(FindConfig.MAX_,request.getParameter(FindConfig.MAX_));

        map.put(FindConfig.MIN_,request.getParameter(FindConfig.MIN_));

        return map;

}

    public Map<String,String> readQuery(HttpServletRequest request){

        String queryString = request.getQueryString();

        if (queryString != null && !"".equals(queryString)) {

            String[] querys = queryString.split("&");

            Map<String, String> map = new HashMap<>();

            for (String query : querys) {

                String[] q = query.split("=");

                map.put(q[0], q[1]);

            }

            map.remove(FindConfig.PAGE);

            map.remove(FindConfig.SIZE);

            map.remove(FindConfig.LIKE);

            map.remove(FindConfig.ORDER_BY);

            map.remove(FindConfig.FIELD);

            map.remove(FindConfig.GROUP_BY);

            map.remove(FindConfig.MAX_);

            map.remove(FindConfig.MIN_);

            return map;

        }else {

            return new HashMap<>();

        }

}

    @Transactional

    public void update(Map<String,String> query,Map<String,String> config,Map<String,Object> body){

        StringBuffer sql = new StringBuffer("UPDATE ").append("`").append(table).append("`").append(" SET ");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            Object value = entry.getValue();

            if (value instanceof String){

                sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append("'").append(value).append("'").append(",");

            }else {

                sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append(value).append(",");

            }

        }

        sql.deleteCharAt(sql.length()-1);

        sql.append(toWhereSql(query,"0".equals(config.get(FindConfig.LIKE))));

        log.info("[{}] - 更新操作:{}",table,sql);

        Query query1 = runCountSql(sql.toString());

        query1.executeUpdate();

}

    public String toWhereSql(Map<String,String> query, Boolean like) {

        if (query.size() > 0) {

            try {

                StringBuilder sql = new StringBuilder(" WHERE ");

                for (Map.Entry<String, String> entry : query.entrySet()) {

                    if (entry.getKey().contains(FindConfig.MIN_)) {

                        String min = humpToLine(entry.getKey()).replace("_min", "");

                        sql.append("`"+min+"`").append(" >= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");

                        continue;

                    }

                    if (entry.getKey().contains(FindConfig.MAX_)) {

                        String max = humpToLine(entry.getKey()).replace("_max", "");

                        sql.append("`"+max+"`").append(" <= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");

                        continue;

                    }

                    if (like == true) {

                        sql.append("`"+humpToLine(entry.getKey())+"`").append(" LIKE '%").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("%'").append(" and ");

                    } else {

                        sql.append("`"+humpToLine(entry.getKey())+"`").append(" = '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("'").append(" and ");

                    }

                }

                sql.delete(sql.length() - 4, sql.length());

                sql.append(" ");

                return sql.toString();

            } catch (UnsupportedEncodingException e) {

                log.info("拼接sql 失败:{}", e.getMessage());

            }

        }

        return "";

    }

4.6个人资料模块

用户点击登录填写账号信息登录后,会切换内容为“某某用户欢迎您”和历史订单,并给出注销链接。当用户登录成功后会将个人信息保存在session作用域中,点击自己的用户名时,会跳转到个人详细信息页面,由后台通过Freemarker取出session作用域中的用户信息进行动态渲染,例如,邮箱、电话号码、用户名等等。同时页面上会显示修改个人信息和修改密码的按钮,这时客户可以修改自己的登录密码以保障账号的安全性,防止被人窃取账号,通过UserController.java的updatePassword()实现,同时也可以根据自己的个人信息是否变动做出相应的修改,通过updateUserInfo()实现。

密码修改流程图如下所示。

 

图5-11密码修改流程图

个人信息界面如下图所示。

 

图5-12个人信息界面图

修改密码界面如下图所示。

 

图5-13修改密码界面图

修改密码逻辑代码如下所示。

/**

     * 修改密码

     * @param data

     * @param request

     * @return

     */

    @PostMapping("change_password")

    public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){

        // 根据Token获取UserId

        String token = request.getHeader("x-auth-token");

        Integer userId = tokenGetUserId(token);

        // 根据UserId和旧密码获取用户

        Map<String, String> query = new HashMap<>();

        String o_password = data.get("o_password");

        query.put("user_id" ,String.valueOf(userId));

        query.put("password" ,service.encryption(o_password));

        Query ret = service.count(query, service.readConfig(request));

        List list = ret.getResultList();

        Object s = list.get(0);

        int count = Integer.parseInt(list.get(0).toString());

        if(count > 0){

            // 修改密码

            Map<String,Object> form = new HashMap<>();

            form.put("password",service.encryption(data.get("password")));

            service.update(query,service.readConfig(request),form);

            return success(1);

        }

        return error(10000,"密码修改失败!");

    }

5系统测试

5.1系统测试的目的

系统开发到了最后一个阶段那就是系统测试,系统测试对软件的开发其实是非常有必要的。因为没什么系统一经开发出来就可能会尽善尽美,再厉害的系统开发工程师也会在系统开发的时候出现纰漏,系统测试能够较好的改正一些bug,为后期系统的维护性提供很好的支持。通过系统测试,开发人员也可以建立自己对系统的信心,为后期的系统版本的跟新提供支持。

5.2 系统测试用例

系统测试包括:设备展示功能测试、设备添加、设备搜索、密码修改功能测试,如表5-1、5-2、5-3、5-4所示:

设备查看功能测试:

表5-1 设备查看功能测试表

用例名称

设备查看

目的

测试设备查看功能

前提

用户登录

测试流程

点击设备列表

预期结果

可以查看到所有设备信息

实际结果

实际结果与预期结果一致

管理员添加设备界面测试:

表5-2管理员添加设备界面测试表

用例名称

设备发布测试用例

目的

测试设备发布功能

前提

用户正常登录情况下

测试流程

1)点击设备信息管理就,然后点击添加后并填写信息。

2)点击进行提交。

预期结果

提交以后,页面首页会显示新的设备信息 

实际结果

实际结果与预期结果一致

设备搜索功能测试:

表5-3设备搜索功能测试表

用例名称

设备搜索测试

目的

测试设备搜索功能

前提

测试流程

1)在搜索框填入搜索关键字。

2)点击搜索按钮。

预期结果

页面显示包含有搜索关键字的设备

实际结果

实际结果与预期结果一致

密码修改功能测试:

表5-4密码修改功能测试表

用例名称

密码修改测试用例

目的

测试管理员密码修改功能

前提

管理员用户正常登录情况下

测试流程

1)管理员密码修改并完成填写。

2)点击进行提交。

预期结果

使用新的密码可以登录

实际结果

实际结果与预期结果一致

5.3 系统测试结果

通过编写 农田灌溉设备管理系统的测试用例,已经检测完毕设备查看模块、设备添加模块、设备搜索模块、密码修改功能测试,通过这4大模块为农田灌溉设备管理系统的后期推广运营提供了强力的技术支撑。

结论

至此,农田灌溉设备管理系统已经结束,在开发前做了许多的准备,在本系统的设计和开发过程中阅览和学习了许多文献资料,从中我也收获了很多宝贵的方法和设计思路,对系统的开发也起到了很重要的作用,系统的开发技术选用的都是自己比较熟悉的,比如Web、springboot技术、MYSQL,这些技术都是在以前的学习中学到了,其中许多的设计思路和方法都是在以前不断地学习中摸索出来的经验,其实对于我们来说工作量还是比较大的,但是正是由于之前的积累与准备,才能顺利的完成这个项目,由此看来,积累经验跟做好准备是十分重要的事情。

当然在该系统的设计与实现的过程中也离不开老师以及同学们的帮助,正是因为他们的指导与帮助,我才能够成功的在预期内完成了这个系统。同时在这个过程当中我也收获了很多东西,此系统也有需要改进的地方,但是由于专业知识的浅薄,并不能做到十分完美,希望以后有机会可以让其真正的投入到使用之中。

参考文献

[1]吴昊鹏,班剑锋,李建华.一种基于MR的电解槽设备辅助管理系统的实现方法[J].机械与电子,2022,40(03):40-44.

[2]陆昕,苏立清,曹耀兵. 一种数据处理的方法、多云管理系统以及相关设备[P]. 广东省:CN112104697B,2022-03-04.

[3]张诚,张杰,吴智晖,张斌.浅谈天然气净化厂设备综合管理系统应用及发展趋势[J].中国设备工程,2022(04):82-83.

[4]孙存虎.基于物联网的机械设备安全管理系统研究[J].河南科技,2022,41(04):21-24.DOI:10.19968/j.cnki.hnkj.1003-5168.2022.04.004.

[5]李博.基于物联网的设备停机管理系统设计及实现[J].物联网技术,2022,12(02):86-88.DOI:10.16667/j.issn.2095-1302.2022.02.023.

[6]张楠,何敏,孙有恒,郭雪卿,胡振中.基于BIM的地铁施工设备物资精细化管理系统[J/OL].施工技术(中英文):1-7[2022-03-30].http://kns.cnki.net/kcms/detail/10.1768.TU.20220210.1624.002.html

[7]熊柏祥.基于Springboot和Vue框架的考试资源服务平台的设计与实现[J].信息与电脑(理论版),2022,34(01):97-99+103.

[8]毛烁. 镭立设备管理系统助力生产经营企业“降本增效”[N]. 中国信息化周报,2021-12-06(017).DOI:10.28189/n.cnki.ndnjy.2021.000570.

[9]郑文国,安剑奇,董文佳,尹枫,岑延卓. 基于B/S网络架构的设备加工型企业管理系统的研究与实现[C]//.2021中国自动化大会论文集.,2021:162-166.DOI:10.26914/c.cnkihy.2021.053498.

[10]喻佳,吴丹新.基于SpringBoot的Web快速开发框架[J].电脑编程技巧与维护,2021(09):31-33.DOI:10.16184/j.cnki.comprg.2021.09.013.

[11]巢晟盛.基于SpringBoot微服务架构下前后端分离的MVVM模型浅析[J].电脑知识与技术,2021,17(23):128-129+141.DOI:10.14004/j.cnki.ckt.2021.2412.

[12]赵志威,张生月,蒋应举,屠晓光.基于SpringBoot的高新技术企业创新能力评价平台设计与实现[J].现代信息科技,2021,5(15):40-42.DOI:10.19850/j.cnki.2096-4706.2021.15.011.

[13]向福川,方玉,刘浪,唐振云,练瑶.基于SpringBoot+Vue框架的协同育才系统设计与开发[J].现代信息科技,2021,5(14):5-7+12.DOI:10.19850/j.cnki.2096-4706.2021.14.002.

[14]崔灿. 预防性维护设备管理系统研究[D].湖北工业大学,2021.DOI:10.27131/d.cnki.ghugc.2021.000447.

[15]鲁文行. 基于组态软件的印刷包装设备监控管理系统研究[D].西安理工大学,2021.DOI:10.27398/d.cnki.gxalu.2021.001270.

[16]Fuyuan Cheng. Talent Recruitment Management System for Small and Micro Enterprises Based on Springboot Framework[J]. Advances in Educational Technology and Psychology,2021,5(2).

[17]方璐, 云智实验设备管理系统. 河南省,泛锐云智科技,2021-02-01.

[18]Jian Chen,Chen Jian,Pan Hailan. Design of Man Hour Management Information System on SpringBoot Framework[J]. Journal of Physics: Conference Series,2020,1646(1).

[19]GB/T 37693-2019, 信息技术 基于感知设备的工业设备点检管理系统总体架构[S].

[20]Zhao Xiaoxu. Application of spacecraft manufacturing equipment management system[P]. Beijing Institute of Spacecraft Environment Engineering (China);South China Univ. of Technology (China);Guangdong Academy of International Academic Exchange (China),2021.

                                                                      致  谢

逝者如斯夫,不舍昼夜。转眼间,大用户用户活便已经接近尾声,人面对着离别与结束,总是充满着不舍与茫然,我亦如此,仍记得那年秋天,我迫不及待的提前一天到了学校,面对学校巍峨的大门,我心里充满了期待:这里,就是我新生活的起点吗?那天,阳光明媚,学校的欢迎仪式很热烈,我面对着一个个对着我微笑的同学,仿佛一缕缕阳光透过胸口照进了我心里,同时,在那天我认识可爱的室友,我们携手共同度过了这难忘的两年。如今,我望着这篇论文的致谢,不禁又要问自己:现在,我们就要说再见了吗?

感慨莫名,不知所言。遥想当初刚来学校的时候,心里总是想着工科学校会过于板正,会缺乏一些柔情,当时心里甚至有一点点排斥,但是随着我对学校的慢慢认识与了解,我才认识到了她的美丽,她的柔情,并且慢慢的喜欢上了这个校园,但是时间太快了,快到我还没有好好体会她的美丽便要离开了,但是她带给我的回忆,永远不会离开我,也许真正离开那天我的眼里会满含泪水,我不是因为难过,我只是想将她的样子映在我的泪水里,刻在我的心里。最后,感谢我的老师们,是你们教授了我们知识与做人的道理;感谢我的室友们,是你们陪伴了我如此之久;感谢每位关心与支持我的人。

少年,追风赶月莫停留,平荒尽处是春山。

免费领取本源代码,请关注点赞+私信

おすすめ

転載: blog.csdn.net/ID3461074420/article/details/126420107