# sdg_panel_android_java
**Repository Path**: dai-beifeng/sdg_panel_android_java
## Basic Information
- **Project Name**: sdg_panel_android_java
- **Description**: sdg智慧粮仓
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2025-07-08
- **Last Updated**: 2025-07-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 智慧粮仓监控系统
## 项目简介
智慧粮仓监控系统是一个基于Android平台的粮食仓储智能化解决方案,提供安全、高效的粮食仓储管理功能。
## 主要功能
- 智能通风控制
- 空调控温管理
- 能耗检测监控
- 环流控温系统
- 气体检测分析
- 系统配置管理
- 设备管理
- 粮情检测
## 主题系统
### 概述
系统支持多种主题颜色,用户可以根据个人喜好或使用场景选择不同的主题。
### 主题配置文件
所有主题配置都在 `app/src/main/assets/css/theme.css` 文件中定义,包含以下主题:
- **默认蓝色主题**: #0A3A8F → #0E1D47 渐变
- **绿色主题**: #0A8F3A → #0E4727 渐变
- **紫色主题**: #5A0A8F → #2E0E47 渐变
- **橙色主题**: #FF7E00 → #A13800 渐变
- **暗色主题**: #2A2A2A → #121212 渐变
### 使用方法
#### 1. 引入主题文件
在HTML页面中引入主题CSS文件:
```html
```
#### 2. 使用主题变量
在CSS中使用预定义的主题变量:
```css
body {
background: linear-gradient(130deg, var(--theme-gradient-start) 0%, var(--theme-gradient-end) 100%);
color: var(--theme-text-color);
}
.card {
background-color: var(--theme-card-bg);
border: 1px solid var(--theme-card-border);
box-shadow: 0 4px 24px var(--theme-card-shadow);
}
```
#### 3. 实现主题切换
添加主题切换按钮和JavaScript代码:
```html
```
#### 4. 主题变量说明
- `--theme-gradient-start`: 背景渐变起始颜色
- `--theme-gradient-end`: 背景渐变结束颜色
- `--theme-text-color`: 主要文字颜色
- `--theme-card-bg`: 卡片背景颜色
- `--theme-card-border`: 卡片边框颜色
- `--theme-card-shadow`: 卡片阴影颜色
### 新页面开发规范
1. 所有新生成的页面都应该引入 `theme.css` 文件
2. 使用主题变量替代硬编码的颜色值
3. 实现一键换主题功能
4. 支持主题记忆功能(使用localStorage保存用户选择)
### 扩展主题
如需添加新主题,在 `theme.css` 中添加新的主题类:
```css
.theme-custom {
--theme-gradient-start: #your-color;
--theme-gradient-end: #your-color;
--theme-text-color: #your-color;
--theme-card-bg: rgba(255, 255, 255, 0.08);
--theme-card-border: rgba(255, 255, 255, 0.1);
--theme-card-shadow: rgba(0, 0, 0, 0.1);
}
```
## 技术栈
- Android Java
- WebView
- HTML5/CSS3/JavaScript
- Layui UI框架
- ECharts图表库
- j2mod Modbus通信库
## 开发环境
- Android Studio
- JDK 8+
- Gradle 6.0+
## 项目结构
该项目使用标准的Android架构组织,遵循模块化和关注点分离原则。主要包括以下目录:
### 数据层 (Data Layer)
- **database**: 数据库相关类
- `SdgDatabase.java` - SQLite数据库管理类
- **model**: 数据实体类
- `PlcDataEntity.java` - PLC数据实体类
- `PlcDeviceEntity.java` - PLC设备实体类
- **dao**: 数据访问对象
- `PlcDataDao.java` - PLC数据DAO接口
- `PlcDataDao_Impl.java` - PLC数据DAO实现
- `PlcDeviceDao.java` - PLC设备DAO接口
- `PlcDeviceDao_Impl.java` - PLC设备DAO实现
- **repository**: 数据仓库
- `PlcDataRepository.java` - PLC数据仓库,提供数据访问的高级接口
- `PlcDeviceRepository.java` - PLC设备仓库,提供设备管理的高级接口
### 业务层 (Domain Layer)
- **service**: 服务类
- `PlcDataService.java` - PLC数据采集服务,负责后台数据采集任务
- **util**: 工具类
- `ModbusHelper.java` - Modbus协议通信帮助类
- `ModbusTcpClient.java` - Modbus TCP客户端
- `J2modFix.java` - J2mod库的修复类
- `WebViewWrapper.java` - WebView包装器,提供JavaScript交互功能
- `PlcUnitMapper.java` - PLC单位映射工具
- `SqliteLoader.java` - SQLite加载器
- `ReflectionHelper.java` - 反射工具类
- **callback**: 回调接口
- `DataCallback.java` - 通用数据回调接口
- `DataListener.java` - PLC数据监听器接口
- `PlcDataListener.java` - PLC数据变化监听器接口
- `ConnectionListener.java` - Modbus连接监听器接口
- `WebViewJsCallback.java` - WebView JavaScript回调接口
### 表示层 (Presentation Layer)
- **ui/activity**: Activity类
- `MainActivity.java` - 主Activity
- `ModbusDemoActivity.java` - Modbus通信演示Activity
- `ModbusDemoActivity2.java` - Modbus通信演示Activity2(主界面)
- `WebViewDemoActivity.java` - WebView演示Activity
- `PlcDataViewActivity.java` - PLC数据浏览Activity
- **adapter**: 适配器类
- `ModbusFileAdapter.java` - Modbus配置文件适配器
- `PlcDataAdapter.java` - PLC数据列表适配器
## 架构说明
该项目采用了类似于MVVM架构,但不完全相同:
1. **数据层** 负责从各种数据源(SQLite数据库、网络API等)获取和管理数据。
2. **业务层** 包含业务逻辑,如服务类和工具类,处理数据转换和业务规则。
3. **表示层** 负责UI展示,包括Activity和适配器。
数据流向:UI -> Repository -> DAO -> Database -> Entity -> DAO -> Repository -> UI
## 设计原则
1. **单一职责原则**:每个类只负责一项功能
2. **关注点分离**:将业务逻辑、数据访问和UI展示分离
3. **依赖倒置原则**:高层模块不应依赖低层模块,都应该依赖抽象(如DAO接口)
4. **接口隔离原则**:将大接口拆分为小接口,使用不同的回调接口处理不同的场景