# Adminsystem **Repository Path**: oscoinisi/adminsystem ## Basic Information - **Project Name**: Adminsystem - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-07-25 - **Last Updated**: 2024-07-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 系统分析与设计课程设计综合实验报告 ——海上风电系统 **小组成员**: ### 1 项目背景与目标 - 大环境背景 - 双碳目标下,能源系统绿色转型问题进一步加剧。 我国风能分布广泛、资源储备丰富,是能源系统绿色低碳转型的重要方向 - 海上发电具有非常大的优势,其中海洋面积大且风速强,为发电提供了良好的基础。 同时海洋广阔对人类的影响比陆上风电影响更加小 - 问题背景 - 海上运行环境复杂恶劣,风机故障率高,需要对实时掌握风机的状态以及维护状态 离岸远、备件转移困难,需要对备件库存把控,以减小不必要的损失。 海上风电运维成本较陆上风电高10%,对运维的要求更高。 - 项目目标 - 通过对海上风电系统的分析设计来达到对设备的在线监测以及资源配置优化和维修路径优化 ### 2 系统分析 - 需求分析 - 用户需求 用户需要对设备进行实时管理以达到减少生产过程中不必要的损失 - 业务需求 系统需要完成设备维护业务,设备信息管理业务以及人员信息管理业务 - 功能需求 系统需要实现设备的增删改查功能以及状态更改功能,管理人员管理功能 - 需求建模 Adminsystem ``` ├─AdminSystem │ │ asgi.py │ │ settings.py │ │ urls.py │ │ views.py │ │ wsgi.py │ ├─devices │ │ admin.py │ │ apps.py │ │ forms.py │ │ models.py │ │ tests.py │ │ urls.py │ │ views.py │ ├─employees │ │ admin.py │ │ apps.py │ │ forms.py │ │ models.py │ │ tests.py │ │ urls.py │ │ views.py │ ├─fanpileposition │ │ admin.py │ │ apps.py │ │ forms.py │ │ models.py │ │ tests.py │ │ urls.py │ │ views.py │ │ __init__.py │ │ │ ├─partparameter │ │ admin.py │ │ apps.py │ │ forms.py │ │ models.py │ │ tests.py │ │ urls.py │ │ views.py │ │ __init__.py │ │ │ ├─static │ ├─templates │ │ base.html │ │ login.html │ │ │ ├─devices │ │ device_confirm_delete.html │ │ device_create.html │ │ device_detail.html │ │ device_form.html │ │ device_list.html │ │ │ ├─employees │ │ employee_confirm_delete.html │ │ employee_create.html │ │ employee_detail.html │ │ employee_form.html │ │ employee_list.html │ │ │ ├─fanpileposition │ │ fanpileposition_confirm_delete.html │ │ fanpileposition_detail.html │ │ fanpileposition_form.html │ │ fanpileposition_list.html │ │ │ ├─partparameter │ │ partparameter_confirm_delete.html │ │ partparameter_detail.html │ │ partparameter_form.html │ │ partparameter_list.html │ │ │ └─windpower │ windpower_create.html │ windpower_delete.html │ windpower_detail.html │ windpower_form.html │ windpower_list.html │ └─windpower │ admin.py │ apps.py │ forms.py │ models.py │ tests.py │ urls.py │ views.py ``` #### devices ##### 1.设备信息表 | 字段名 | 数据类型 | 可为空 | 选择项 | 描述 | | ---------------- | ---------------- | ------ | ------------------ | -------- | | device_id | Integer | 否 | - | 设备编号 | | device_type | VARCHAR(50) | 是 | - | 设备类型 | | manufacturer | VARCHAR(50) | 是 | - | 生产厂家 | | rated_power | VARCHAR(50) | 是 | - | 额定功率 | | install_date | DATETIME2 (7) | 是 | - | 安装时间 | | install_location | [sys].[geometry] | 是 | - | 安装位置 | | device_status | VARCHAR(50) | 是 | 正常, 故障, 维修中 | 设备状态 | | health_index | VARCHAR(50) | 是 | 优, 良, 差 | 健康指数 | | 主键 | - | - | device_id | - | | 外键 | - | - | - | - | | 索引 | - | - | - | - | | 唯一性 | - | - | - | - | | 其他选项 | - | - | - | - | ##### 2.devices功能流程图 ```mermaid flowchart LR A[开始] --> B{设备信息管理} B --> C[显示设备列表] C --> D{是否选择操作} D -- 是 --> E[选择操作类型] E -- 查看详情 --> F[显示设备详细信息] E -- 编辑设备 --> G[打开编辑表单] E -- 新增设备 --> H[打开新增表单] E -- 删除设备 --> I[确认删除操作] D -- 否 --> J[结束] G --> K[提交编辑表单] H --> L[提交新增表单] K --> C L --> C I --> C F --> C ``` ##### 3.devices状态图 ```mermaid stateDiagram-v2 [*] --> 新建设备: 创建新设备 新建设备 --> 待审核: 提交表单 待审核 --> 正常: 审核通过 正常 --> 故障: 出现故障 故障 --> 维修中: 开始维修 维修中 --> 正常: 维修完成 正常 --> 删除: 删除设备 故障 --> 删除: 删除设备 维修中 --> 删除: 删除设备 ``` ##### 4.devices序列图 ```mermaid sequenceDiagram participant User as U participant Browser as B participant Server as S participant Database as DB U->>B: 访问设备列表页面 B->>S: 请求设备列表 S->>DB: 查询设备数据 DB-->>S: 返回设备数据 S-->>B: 渲染设备列表页面 B->>U: 显示设备列表 U->>B: 点击新增设备 B->>S: 请求新增设备表单 S-->>B: 渲染新增设备表单 U->>B: 提交新增设备表单 B->>S: POST 请求新增设备数据 S->>DB: 插入新设备记录 DB-->>S: 确认插入 S-->>B: 重定向到设备列表 B->>U: 显示更新后的设备列表 ``` ##### 5.devices用例表 | Use Case ID | Use Case Name | Actors | Brief Description | Main Success Scenario | Trigger | Precondition | Postcondition | | ----------- | ------------- | ------------ | ---------------------- | -------------------------------------------- | ------------------ | ---------------------- | ------------------------ | | UC01 | 查看设备列表 | 用户,管理员 | 显示所有设备信息 | 用户选择查看设备列表,系统显示设备列表 | 用户登录系统 | 用户已登录 | 设备信息显示在用户界面 | | UC02 | 新增设备 | 管理员 | 提供表单并保存新设备 | 管理员填写设备信息并提交,系统保存新设备信息 | 管理员选择新增设备 | 管理员已登录 | 新设备信息被添加到系统中 | | UC03 | 编辑设备 | 管理员 | 提供表单并更新设备信息 | 管理员选择设备并编辑信息,系统更新设备信息 | 管理员选择编辑设备 | 设备存在且管理员有权限 | 设备信息被更新 | | UC04 | 删除设备 | 管理员 | 确认并删除设备记录 | 管理员选择设备并确认删除,系统删除设备记录 | 管理员选择删除设备 | 设备存在且管理员有权限 | 设备记录从系统中删除 | #### 员工信息 ##### 1.类图 ```mermaid classDiagram class Employee { CharField employee_id CharField password CharField name CharField gender DateTimeField birth_date DateTimeField hire_date CharField department CharField level URLField photo CharField permission CharField status __str__() } ``` ##### 2.url配置图 ```mermaid graph TD A[URL 配置] --> B[employee_list] A --> C[employee_detail] A --> D[employee_create] A --> E[employee_update] A --> F[employee_delete] ``` ##### 3.状态图 ```mermaid stateDiagram [*] --> Browsing Browsing --> Adding : 点击添加员工 Browsing --> Viewing : 点击查看员工详情 Viewing --> Editing : 点击编辑员工 Viewing --> Deleting : 点击删除员工 Adding --> Browsing : 提交表单 Editing --> Browsing : 提交修改 Deleting --> Browsing : 确认删除 Browsing --> [*] ``` #### 风电场桩位 ##### 1.流程图 ```mermaid flowchart TD 开始 --> 输入信息 输入信息 --> 检查信息 检查信息 -- 是 --> 保存信息 检查信息 -- 否 --> 输入信息 保存信息 --> 选择操作 选择操作 --> 查询 选择操作 --> 更新 选择操作 --> 删除 查询 --> 结束 更新 --> 结束 删除 --> 结束 ``` ##### 2.序列图 ```mermaid sequenceDiagram participant 用户 as 用户 participant 系统 as 系统 用户->>+系统: 输入桩位信息 系统-->>-用户: 检查信息完整性 用户->>+系统: 确认提交 系统-->>-用户: 保存到数据库 Note right of 系统: 数据操作包括
查询、更新、删除 ``` ##### 3.关系图 ```mermaid classDiagram class 风电场桩位表{ -桩位编号 : string -状态 : string -经纬度 : string -位置文本 : string +添加桩位信息() +查询桩位信息() +更新桩位信息() +删除桩位信息() } ``` ##### 4.用例图 ```mermaid %%{init: {'theme': 'base'}}%% classDiagram class 风电场管理人员 { <> 查看桩位状态 检查桩位信息 } class 技术人员 { <> 上报桩位问题 更新桩位信息 完成桩位维护 } class 系统管理员 { <> 管理用户权限 维护系统数据 更新系统设置 } class 桩位信息系统 { 查看桩位 更新桩位 记录桩位维护 生成桩位报告 } 风电场管理人员 --> 桩位信息系统 : 使用 技术人员 --> 桩位信息系统 : 使用 系统管理员 --> 桩位信息系统 : 管理 ``` ##### 5.功能流程图 ```mermaid %%{init: {'theme': 'base'}}%% graph TD A[开始] --> B[桩位问题上报] B --> C{问题是否紧急} C -->|是| D[立即派遣技术人员] C -->|否| E[计划日常维护] D --> F[技术人员处理问题] E --> F F --> G[更新桩位信息] G --> H[记录维护活动] H --> I[生成维护报告] I --> J[风电场管理人员审核] J -->|通过| K[更新系统数据] J -->|不通过| F[重新处理问题] K --> L[流程结束] ``` ##### 6.用例表 | 角色 | 用例 | 用例描述 | | ---------- | ------------ | ------------------------------------------------------------ | | 管理人员 | 查看桩位状态 | 管理人员可以查看各桩位的当前状态,包括运行状况、维护记录等。 | | | 检查桩位信息 | 检索具体桩位的详细信息,如安装时间、型号等。 | | 技术人员 | 上报桩位问题 | 当发现桩位有故障或异常时,技术人员需要上报问题。 | | | 更新桩位信息 | 完成维护或更换部件后,更新桩位的相关信息。 | | | 完成桩位维护 | 执行实地维护工作,包括替换损坏的部件、软件更新等。 | | 系统管理员 | 管理用户权限 | 设置或更改用户的系统访问权限。 | | | 维护系统数据 | 定期检查和更新系统数据,确保数据准确性和安全性。 | | | 更新系统设置 | 对系统的配置或设置进行修改,以优化系统性能或添加新功能。 | ### 部件参数模块 #### 1、数据库图表 ##### (1)类图 ```mermaid classDiagram class 设备 { int 设备编号 string 叶片参数 string 齿轮箱参数 string 发电机参数 string 变桨轴承参数 DateTime 叶片更换时间 DateTime 齿轮箱更换时间 DateTime 发电机更换时间 DateTime 变桨轴承更换时间 void 获取设备信息() void 设置设备信息(参数) } ``` ### 3 系统设计 - 面向对象程序设计 - 方法开发与伪码 `devices` 应用是一个用于管理设备信息的Django应用。它提供了设备信息的增删改查(CRUD)功能,并通过表单进行数据的输入和验证。 模型(Models) 在 `models.py` 文件中定义了 `Device` 模型,该模型反映了数据库中 `设备信息表` 的结构。 主要字段: - `device_id`: 设备编号,作为主键。 - `device_type`: 设备类型。 - `manufacturer`: 生产厂家。 - `rated_power`: 额定功率。 - `install_date`: 安装时间。 - `install_location`: 安装位置,以JSON格式存储。 - `device_status`: 设备状态,选项包括“正常”、“故障”、“维修中”。 - `health_index`: 健康指数,选项包括“优”、“良”、“差”。 视图(Views) 在 `views.py` 文件中定义了以下视图函数: - `device_list`: 显示所有设备的列表。 - `device_detail`: 显示单个设备的详细信息。 - `device_create`: 提供设备创建表单,并处理表单提交。 - `device_update`: 提供设备更新表单,并处理表单提交。 - `device_delete`: 提供设备删除确认页面,并处理删除操作。 表单(Forms) 在 `forms.py` 文件中定义了 `DeviceForm`,这是一个基于 `Device` 模型的表单,用于创建和更新设备信息。 表单字段: - 与 `Device` 模型字段相对应,包括日期输入和下拉选择框。 URL 路由(URLs) 在 `urls.py` 文件中定义了应用的所有路由: - 设备列表页面。 - 设备详细信息页面。 - 新建设备表单页面。 - 编辑设备表单页面。 - 删除设备确认页面。 管理界面(Admin) 在 `admin.py` 文件中注册了 `Device` 模型,使其可以在Django管理后台进行管理。 模板(Templates) 应用使用以下模板文件: - `device_list.html`: 用于显示设备列表。 - `device_detail.html`: 用于显示单个设备的详细信息。 - `device_form.html`: 用于创建和更新设备信息的表单。 - `device_confirm_delete.html`: 用于确认删除设备的操作。 - 数据库设计 - 系统全局E-R图 - 数据库表设计 - 设备信息表设计 | 字段名 | 数据类型 | 可为空 | 选择项 | 描述 | | ---------------- | ---------------- | ------ | ------------------ | -------- | | device_id | Integer | 否 | - | 设备编号 | | device_type | VARCHAR(50) | 是 | - | 设备类型 | | manufacturer | VARCHAR(50) | 是 | - | 生产厂家 | | rated_power | VARCHAR(50) | 是 | - | 额定功率 | | install_date | DATETIME2 (7) | 是 | - | 安装时间 | | install_location | [sys].[geometry] | 是 | - | 安装位置 | | device_status | VARCHAR(50) | 是 | 正常, 故障, 维修中 | 设备状态 | | health_index | VARCHAR(50) | 是 | 优, 良, 差 | 健康指数 | | 主键 | - | - | device_id | - | | 外键 | - | - | - | - | | 索引 | - | - | - | - | | 唯一性 | - | - | - | - | | 其他选项 | - | - | - | - | #### 1、数据库图表 --- ```sql CREATE TABLE [dbo].[部件参数表] ( [设备编号] VARCHAR(50) NOT NULL, [叶片参数] VARCHAR (50) NULL, [齿轮箱参数] VARCHAR (50) NULL, [发电机参数] VARCHAR (50) NULL, [变桨轴承参数] VARCHAR (50) NULL, [叶片更换时间] DATETIME2 (7) NULL, [齿轮箱更换时间] DATETIME2 (7) NULL, [发电机更换时间] DATETIME2 (7) NULL, [变桨轴承更换时间] DATETIME2 (7) NULL, CONSTRAINT [PK_部件参数表] PRIMARY KEY CLUSTERED ([设备编号] ASC) ); ``` ##### (1)字段说明 | 字段名 | 类型 | 约束 | 描述 | | ------------------ | ------------- | -------- | ----------------------------------------------- | | [设备编号] | VARCHAR(50) | NOT NULL | 用于唯一标识设备的编号,是主键(Primary Key)。 | | [叶片参数] | VARCHAR (50) | NULL | 存储叶片参数信息。 | | [齿轮箱参数] | VARCHAR (50) | NULL | 存储齿轮箱参数信息。 | | [发电机参数] | VARCHAR (50) | NULL | 存储发电机参数信息。 | | [变桨轴承参数] | VARCHAR (50) | NULL | 存储变桨轴承参数信息。 | | [叶片更换时间] | DATETIME2 (7) | NULL | 记录叶片更换的时间。 | | [齿轮箱更换时间] | DATETIME2 (7) | NULL | 记录齿轮箱更换的时间。 | | [发电机更换时间] | DATETIME2 (7) | NULL | 记录发电机更换的时间。 | | [变桨轴承更换时间] | DATETIME2 (7) | NULL | 记录变桨轴承更换的时间。 | ##### (2)数据流图 ```mermaid graph TD A[用户] --> B[数据输入/查询界面] B --> C[处理逻辑/控制器] C --> D[数据库: 部件参数表] ``` ##### (3)url配置图 ```mermaid graph TD A[/设备参数/] --> B[/查询/] A --> C[/添加/] A --> D[/更新/] A --> E[/删除/] B --> F[/设备编号/] D --> G[/设备编号/] E --> H[/设备编号/] ``` ##### (4)状态图 ```mermaid stateDiagram [*] --> 初始状态 初始状态 --> 设备创建 设备创建 --> 设备参数更新 设备参数更新 --> 设备参数查询 设备参数查询 --> 设备删除 设备删除 --> [*] ``` - 风力发电桩设计 根据题目要求,风力桩位有编号,状态,经纬度,位置文本四个字段,首先在forms.py里写入这四个字段,并根据实际情况,对字段加以定义![image-20240729201740141](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240729201740141.png) 在models.py里对字段进行详细的约束并选择输入的方法,为进行选择的字段提供选项![image-20240729202041890](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240729202041890.png) 在views.py中写出数据库增删改查的四个方法,在四个方法创建完成后,在urls.py中将四个办法连接上path![image-20240729202448334](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240729202448334.png) 在templates的文件夹下创建fanpileposition目录,在目录下创建四个html分别代表四个页面。![image-20240729202738507](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240729202738507.png) 根据自己的需求用代码对页面进行修改,将所需的数据与之前建立的数据库相接,将增删改查的方法展现在页面之上。 - 员工信息表 (Employee) 的增删改查实现 1. 字段说明 | 字段名 | 数据类型 | 约束条件 | 说明 | | ------------- | --------------- | ---------------------------------------------------------- | ---------------------------------------------- | | `employee_id` | `CharField` | `max_length=50`, `primary_key=True` | 员工的唯一工号 | | `password` | `CharField` | `max_length=50`, `null=True` | 登录系统使用的密码 | | `name` | `CharField` | `max_length=50`, `null=True` | 员工姓名 | | `gender` | `CharField` | `max_length=50`, `null=True`, `choices=GENDER_CHOICES` | 员工性别,可选值为:`男`,`女` | | `birth_date` | `DateTimeField` | `null=True` | 员工出生日期 | | `hire_date` | `DateTimeField` | `null=True` | 员工入职时间 | | `department` | `CharField` | `max_length=50`, `null=True`, `choices=DEPARTMENT_CHOICES` | 员工所属部门,可选值为:`管理`,`技术`,`财务` | | `level` | `CharField` | `max_length=50`, `null=True`, `choices=LEVEL_CHOICES` | 员工级别,可选值为:`初级`,`中级`,`高级` | | `photo` | `URLField` | `null=True` | 员工照片的URL链接 | | `permission` | `CharField` | `max_length=50`, `null=True`, `choices=PERMISSION_CHOICES` | 员工系统权限,可选值为:`管理员`,`用户` | | `status` | `CharField` | `max_length=50`, `null=True`, `choices=STATUS_CHOICES` | 员工在职状态,可选值为:`在岗`,`离职` | 2. 选择项 - **性别 (`GENDER_CHOICES`)**: - `男`:男 - `女`:女 - **部门 (`DEPARTMENT_CHOICES`)**: - `管理`:管理部门 - `技术`:技术部门 - `财务`:财务部门 - **级别 (`LEVEL_CHOICES`)**: - `初级`:初级员工 - `中级`:中级员工 - `高级`:高级员工 - **权限 (`PERMISSION_CHOICES`)**: - `管理员`:管理员权限 - `用户`:普通用户权限 - **状态 (`STATUS_CHOICES`)**: - `在岗`:员工在职 - `离职`:员工离职 - 数据库表信息 - **表名**:`employee_info` - **描述**:存储公司员工的详细信息 - 方法 - **`__str__()`**:返回员工姓名。 - 员工信息表 (Employee)数据流 1. **整体数据流** ```mermaid graph TD A[用户] -->|访问员工列表| B[员工列表页] B -->|点击添加员工| C[添加员工页] C -->|提交表单| D[保存到数据库] B -->|点击员工姓名| E[员工详情页] E -->|点击编辑| F[编辑员工页] F -->|提交修改| D[更新数据库] E -->|点击删除| G[从数据库删除记录] ``` 2. **新增员工数据流** ```mermaid graph TD A[用户] -->|访问员工列表| B[员工列表页] B -->|点击添加员工| C[添加员工页] C -->|填写表单| D[提交表单] D -->|表单数据验证| E[保存到数据库] E -->|返回员工列表| B ``` 3. **查询员工数据流** ```mermaid graph TD A[用户] -->|访问员工列表| B[员工列表页] B -->|查看员工详情| C[员工详情页] C -->|显示员工信息| C ``` 4. **修改员工数据流** ```mermaid graph TD A[用户] -->|访问员工列表| B[员工列表页] B -->|查看员工详情| C[员工详情页] C -->|点击编辑按钮| D[编辑员工页] D -->|填写表单| E[提交表单] E -->|表单数据验证| F[更新数据库] F -->|返回员工列表| B ``` 5. **删除员工数据流** ```mermaid graph TD A[用户] -->|访问员工列表| B[员工列表页] B -->|查看员工详情| C[员工详情页] C -->|点击删除按钮| D[删除确认] D -->|确认删除| E[从数据库删除记录] E -->|返回员工列表| B ``` ### 4 系统实施 - 功能模块测试 - 数据库功能测试 - 风力发电桩功能测试 列表页面 ![image-20240730145442495](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730145442495.png) 详细查看页面 ![image-20240730145524191](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730145524191.png) 桩位修改页面 ![image-20240730145557539](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730145557539.png) 添加新风电桩 ![image-20240730150558776](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730150558776.png) 删除页面 ![image-20240730145640350](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730145640350.png) 在数据库处点击添加 ![image-20240729191602848](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesarticlesimage-20240729191602848.png) 回到网页即可查看到添加的数据 ![](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesarticlesarticlesarticlesimage-20240729191718159.png)点击查看详情即可跳转详细资料的页面 ![](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesarticlesimage-20240729191814014.png)点击编辑,即跳转至编辑界面,在此可以对数据进行各项的修改 ![image-20240729191905687](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesarticlesimage-20240729191905687.png)下图为修改结果 ![image-20240729191948344](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesarticlesimage-20240729191948344.png)点击删除按钮,相对的数据就被删除了。 ![image-20240729192032350](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesarticlesimage-20240729192032350.png) - 员工信息表功能测试 ![image-20240730035337185](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730035337185.png) ![image-20240730035453020](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730035453020.png) ![image-20240730035548932](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730035548932.png) ![image-20240730035622834](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730035622834.png) - 设备表功能测试 ![image-20240730150454614](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730150454614.png) ![image-20240730150512181](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730150512181.png) ![image-20240730150525198](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730150525198.png) ![image-20240730150538649](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730150538649.png) ![image-20240730150555594](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730150555594.png) - 部件参数功能测试 ##### (1)主界面 ![image-20240730135600213](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730135600213.png) ##### (2)添加 ![image-20240730135703604](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730135703604.png) 添加成功 ![image-20240730135734715](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730135734715.png) ##### (3)查看数据详情 ![image-20240730135749757](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730135749757.png) ##### (4)编辑数据 ![image-20240730135805018](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730135805018.png) 进行修改 ![image-20240730135914436](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730135914436.png) 修改成功 ![image-20240730135932482](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730135932482.png) ##### (5)删除数据 ![image-20240730135952857](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesimage-20240730135952857.png) 删除成功 ![](https://rainhappyblog.oss-cn-beijing.aliyuncs.com/aurora/articlesarticlesimage-20240730140005621.png) - 主要代码 - 员工信息代码 1. **员工列表视图** ```python from django.shortcuts import render from .models import Employee def employee_list(request): employees = Employee.objects.all() return render(request, 'employee_list.html', {'employees': employees}) ``` 2. **员工详情视图** ```python from django.shortcuts import render, get_object_or_404 from .models import Employee def employee_detail(request, employee_id): employee = get_object_or_404(Employee, employee_id=employee_id) return render(request, 'employee_detail.html', {'employee': employee}) ``` 3. **新增员工视图** ```python from django.shortcuts import render, redirect from .forms import EmployeeForm def employee_create(request): if request.method == 'POST': form = EmployeeForm(request.POST) if form.is_valid(): form.save() return redirect('employee_list') else: form = EmployeeForm() return render(request, 'employee_form.html', {'form': form}) ``` 4. **编辑员工视图** ```python from django.shortcuts import render, get_object_or_404, redirect from .models import Employee from .forms import EmployeeForm def employee_update(request, employee_id): employee = get_object_or_404(Employee, employee_id=employee_id) if request.method == 'POST': form = EmployeeForm(request.POST, instance=employee) if form.is_valid(): form.save() return redirect('employee_list') else: form = EmployeeForm(instance=employee) return render(request, 'employee_form.html', {'form': form}) ``` 5. **删除员工视图** ```python from django.shortcuts import get_object_or_404, redirect from .models import Employee def employee_delete(request, employee_id): employee = get_object_or_404(Employee, employee_id=employee_id) employee.delete() return redirect('employee_list') ``` 6. **表单 (Forms) 定义** ```python from django import forms from .models import Employee class EmployeeForm(forms.ModelForm): class Meta: model = Employee fields = '__all__' ``` 7. **URL 配置** ```python from django.urls import path from . import views urlpatterns = [ path('', views.employee_list, name='employee_list'), path('employee//', views.employee_detail, name='employee_detail'), path('employee/add/', views.employee_create, name='employee_create'), path('employee/edit//', views.employee_update, name='employee_update'), path('employee/delete//', views.employee_delete, name='employee_delete'), ] ``` - 风力发电桩代码 1.新建风电场桩位表 ```sql CREATE TABLE `风电场桩位表` ( `桩位编号` VARCHAR (50) NOT NULL, `状态` VARCHAR (50) NULL, `经纬度` VARCHAR(50) NULL, `位置文本` VARCHAR (50) NULL ); ``` 2.修改模型,定义models文件 ```python from django.db import models class WindPower(models.Model): pile_number = models.CharField(max_length=50, primary_key=True, verbose_name='桩位编号') status = models.CharField(max_length=50, null=True, blank=True, verbose_name='状态') location = models.CharField(max_length=50, null=True, blank=True, verbose_name='经纬度') location_text = models.CharField(max_length=50, null=True, blank=True, verbose_name='位置文本') class Meta: db_table = 'windpower' def __str__(self): return self.name ``` 3.运行django语句进行迁移 ```python python manage.py makemigrations windpower python manage.py migrate ``` ##### 进行url.py文件的设计 ```python from django.urls import path from .views import (WindPowerListView, WindPowerDetailView, WindPowerCreateView, WindPowerUpdateView, WindPowerDeleteView) urlpatterns = [ path('', WindPowerListView.as_view(), name='windpower_list'), path('windpower//', WindPowerDetailView.as_view(), name='windpower_detail'), path('windpower/add/', WindPowerCreateView.as_view(), name='windpower_create'), path('windpower//edit/', WindPowerUpdateView.as_view(), name='windpower_edit'), path('windpower//delete/', WindPowerDeleteView.as_view(), name='windpower_delete'), ] ``` 4.进行forms.py文件的设计 ```python from django import forms from .models import WindPower class WindPowerForm(forms.ModelForm): class Meta: model = WindPower fields = ['pile_number', 'status', 'location', 'location_text'] labels = { 'pile_number': '桩位编号', 'status': '状态', 'location': '经纬度', 'location_text': '位置文本', } widgets = { 'pile_number': forms.TextInput(attrs={'class': 'form-control'}), 'status': forms.TextInput(attrs={'class': 'form-control'}), 'location': forms.TextInput(attrs={'class': 'form-control'}), 'location_text': forms.TextInput(attrs={'class': 'form-control'}), } ``` 5.进行views.py文件的设计 ```python from django.shortcuts import render, get_object_or_404, redirect from django.http import HttpResponse from .models import WindPower from .forms import WindPowerForm # 列表视图 def windpower_list(request): windpowers = WindPower.objects.all() return render(request, 'windpower/windpower_list.html', {'windpowers': windpowers}) # 详情视图 def windpower_detail(request, pile_number): windpower = get_object_or_404(WindPower, pile_number=pile_number) return render(request, 'windpower/windpower_detail.html', {'windpower': windpower}) # 创建视图 def windpower_create(request): if request.method == "POST": form = WindPowerForm(request.POST) if form.is_valid(): form.save() return redirect('windpower_list') else: form = WindPowerForm() return render(request, 'windpower/windpower_form.html', {'form': form}) # 更新视图 def windpower_update(request, pile_number): windpower = get_object_or_404(WindPower, pile_number=pile_number) if request.method == "POST": form = WindPowerForm(request.POST, instance=windpower) if form.is_valid(): form.save() return redirect('windpower_list') else: form = WindPowerForm(instance=windpower) return render(request, 'windpower/windpower_form.html', {'form': form}) # 删除视图 def windpower_delete(request, pile_number): windpower = get_object_or_404(WindPower, pile_number=pile_number) if request.method == "POST": windpower.delete() return redirect('windpower_list') return render(request, 'windpower/windpower_confirm_delete.html', {'windpower': windpower}) ``` 6.进行五个页面文件的编写 windpower_create.html ```html 新增风电桩

新增风电桩

{% csrf_token %} {% for field in form %}
{{ field }} {% if field.help_text %} {{ field.help_text }} {% endif %} {% for error in field.errors %}
{{ error }}
{% endfor %}
{% endfor %}
取消
``` windpower_delete.html ```html Confirm Delete

确认删除 {{ windpower.pile_number }} 吗?

{% csrf_token %} 取消
``` windpower_detail.html ```html WindPower Detail

{{ windpower.pile_number }}的详细信息

桩位编号
{{ windpower.pile_number }}
状态
{{ windpower.status }}
位置
{{ windpower.location_text }}
经纬度
{{ windpower.location }}
``` windpower_form.html ```html 编辑风电桩

编辑风电桩

{% csrf_token %} {% for field in form %}
{{ field }} {% if field.help_text %} {{ field.help_text }} {% endif %} {% for error in field.errors %}
{{ error }}
{% endfor %}
{% endfor %}
取消
``` windpower_list.html ```html 风电桩列表

风电桩列表

{% for windpower in windpowers %} {% endfor %}
编号 状态 经纬度(纬度在前,经度在后) 位置文本
{{ windpower.pile_number }} {{ windpower.status }} {{ windpower.location }} {{ windpower.location_text }} 查看详情 编辑 删除
添加新风电桩
``` - 部件参数代码 ##### (1)数据库数据增删改查的实现 ```python from django.shortcuts import render # Create your views here. from django.shortcuts import render, get_object_or_404, redirect from django.http import HttpResponse from .models import Partparameter from .forms import PartparameterForm # 列表视图 def partparameter_list(request): partparameter = Partparameter.objects.all() return render(request, 'partparameter/partparameter_list.html', {'partparameter': partparameter}) # 详情视图 def partparameter_detail(request, device_id): partparameter = get_object_or_404(Partparameter, device_id=device_id) return render(request, 'partparameter/partparameter_detail.html', {'partparameter': partparameter}) # 删除视图 def partparameter_delete(request, device_id): # 获取要删除的部件参数对象,如果找不到则返回 404 错误 partparameter = get_object_or_404(Partparameter, device_id=device_id) # 如果请求方法是 POST,表示用户确认了删除操作 if request.method == "POST": # 删除部件参数对象 partparameter.delete() # 删除成功后重定向到部件参数列表页面 return redirect('partparameter_list') # 如果请求方法不是 POST,显示确认删除的页面 return render(request, 'partparameter/partparameter_confirm_delete.html', {'partparameter': partparameter}) # 更新视图 def partparameter_update(request, device_id): partparameter = get_object_or_404(Partparameter, device_id=device_id) if request.method == "POST": form = PartparameterForm(request.POST, instance=partparameter) if form.is_valid(): form.save() return redirect('partparameter_list') else: form = PartparameterForm(instance=partparameter) return render(request, 'partparameter/partparameter_form.html', {'form': form}) # 添加视图 def partparameter_create(request): # 如果请求方法是 POST,表示表单已经提交 if request.method == "POST": # 创建一个表单实例,并将请求中的数据传递给它 form = PartparameterForm(request.POST) # 检查表单数据是否有效 if form.is_valid(): # 保存表单数据到数据库中 form.save() # 成功保存后重定向到部件参数列表页面 return redirect('partparameter_list') else: # 如果请求方法不是 POST,创建一个空的表单实例 form = PartparameterForm() # 渲染部件参数创建页面,并传递表单实例 return render(request, 'partparameter/partparameter_form.html', {'form': form}) ``` ##### (2)主页面HTML --- ```python 部件参数列表

部件参数列表

{% for partparameter in partparameter %} {% endfor %}
设备编号 叶片参数 齿轮箱参数 发电机参数 变桨轴承参数 叶片更换时间 齿轮箱更换时间 发电机更换时间 变桨轴承更换时间 操作
{{ partparameter.device_id }} {{ partparameter.blade_parameter }} {{ partparameter.gearbox_parameter }} {{ partparameter.generator_parameter }} {{ partparameter.pitch_bearing_parameter }} {{ partparameter.blade_replacement_time|date:"Y-m-d" }} {{ partparameter.gearbox_replacement_time|date:"Y-m-d" }} {{ partparameter.generator_replacement_time|date:"Y-m-d" }} {{ partparameter.pitch_bearing_replacement_time|date:"Y-m-d" }} 查看详情 编辑
{% csrf_token %}
``` ##### (3)添加页面HTML --- ```python Employee Form

{{ form.instance.pk|yesno:"编辑,新增" }}

{% csrf_token %} {% for field in form %}
{{ field }} {% if field.help_text %} {{ field.help_text }} {% endif %} {% for error in field.errors %}
{{ error }}
{% endfor %}
{% endfor %}
取消
``` ##### (4)删除页面HTML --- ```py Confirm Delete

确认删除 {{ employee.name }} 吗?

{% csrf_token %} 取消
``` ##### (5)Urls的编写 --- ```python from django.urls import path from . import views urlpatterns = [ path('', views.partparameter_list, name='partparameter_list'), path('new/', views.partparameter_create, name='partparameter_create'), path('/', views.partparameter_detail, name='partparameter_detail'), path('/edit/', views.partparameter_update, name='partparameter_update'), path('/delete/', views.partparameter_delete, name='partparameter_delete'), ] ``` ### 5 研究结论 海上风力发电在有完善的管理系统时可以减少人员管理以及设备管理上的时间成本,从而达到运维成本的减少,通过系统性的管理既可以减轻管理人员的工作量也可以对设备的状态进行精准的掌握,减少设备管理中可能存在的信息差