## 0 前言说明

### 0.1 编译说明

1. 编译后可执行文件在和源码文件夹同级目录的bin文件夹下，配置文件bigscreen.ini（软件运行后自动生成）文件在可执行文件目录下，数据库文件在可执行文件所在目录下的db文件夹下。

2. 编译后记得将源码下的file目录下（切记是file目录下而不是file目录）的所有文件复制到可执行文件同一目录。

3. 大屏中用到了视频监控模块，所以还需要拷贝ffmpeg的动态库文件到可执行文件同一目录，编译成功后记得将dll_ffmpeg4（64位的构建套件对应的是dll_ffmpeg4_64）对应目录下的库复制到可执行文件同一目录。

4. dll+lib 链接: https://pan.baidu.com/s/13LDRu6mXC6gaADtrGprNVA 提取码: ujm7。

5. 如果程序异常结束并提示 miniblink.dll 文件不存在请先拷贝，你还需要在dll+lib下载地址的地方找到 dll_miniblink.zip 下载并解压出来拷贝文件到可执行文件目录。一般这个是因为你用的mingw编译器，win+qt5.6以上+mingw编译器，没有浏览器控件，采用的miniblink第三方浏览器控件。

6. 本系统支持ffmpeg2/3/4/5/6/7所有版本，默认是ffmpeg4，如果要支持XP需要用ffmpeg2/3。如果是在linux/mac系统上编译记得查看core_videoffmpeg/下面的 linux系统和mac系统上库的用法.txt/编译阶段linux系统ffmpeg库放置位置.jpg/运行阶段linux系统ffmpeg库放置位置.jpg。

7. 当然你也可以选择不启用视频监控模块，只需要将pro中的ffmpeg改成ffmpeg1即可。

8. 目录下的bigscreen.sql为数据库脚本，可以在系统设置中单击初始化数据来执行。bigscreen_mysql.sql脚本为Navicat工具对应的导入脚本。

9. 如果发现地图打不开，请先确认file目录下的所有文件有没有拷贝过去，还有就是将MapBaiDu::Instance()->setSaveFile(false); 改成true。

10. 代码行数大概3W行，注释详细，非常便于阅读和使用。

11. 如果是用vs+qt可能报错 error LNK2026: 模块对于 SAFESEH 映像是不安全的。

- 第一步：打开该项目的“属性页”对话框。

- 第二步：单击“链接器”文件夹。

- 第三步：单击“命令行”属性页。

- 第四步：将 /SAFESEH:NO 键入“附加选项”框中，然后点击应用。

### 0.2 版本说明

V20240801

1. 将echart模块独立成core_echarts组件，并单独目录存放相关文件，之前全部堆在config目录下，不准确。

V20220718

1. 中间地图模块增加隐藏地图功能，只保留最顶部的标题栏。

2. 增加表格看板模块，通用的表格窗体模块，指定表名、列名、列宽即可，自动刷新对应表数据。可以作为ERP库存电子看板使用。

3. 增加自动应用新的视频地址。

4. 修复监控模块布局切换后多次触发显示和隐藏的BUG，可能导致视频画面重叠以及暂停继续播放失效。

V20220417

1. 设备状态监测增加进度条控件，每个设备都有一个进度条对应完成进度。

2. 设备状态数据库增加字段progress存储进度，flicker控制是否闪烁，1表示闪烁。

3. 增加大量的代码注释。

V20211015

1. 修正停靠窗体鼠标右键弹出菜单复选框样式、右键菜单子菜单三角形图标样式。

2. 修正全局复选框样式，比如用户管理中勾选用户权限。

3. 顶部banner改成透明度20%，这样自适应多种背景颜色风格。

4. 图片文件夹将image改成了image_bigscreen，以便和其他系统区分。

5. 布局文件夹将layout改成了layout_bigscreen，以便和其他系统区分。

6. 默认布局文件夹是1920x1080分辨率。用户可以自己在不同分辨率下调整好布局生成布局文件，然后拷贝布局文件夹进行备份。

7. 将其他几种分辨率布局文件夹删除，去掉了这种机制，后期采用不同用户对应不同布局文件夹的形式。

8. 将相关文档和布局文件移动到源码下的doc目录。

9. 系统设置新增全屏模式参数，默认全屏，不全屏则采用最大化显示，有些系统为了不遮挡任务栏需要最大化显示，也方便截图。

10. 增加悬浮窗体分隔条样式，限定宽度和颜色等。

V20210323

1. 编写开发和使用说明书。

2. 系统设置增加视频拉伸、视频循环播放等配置参数。

3. 增加多屏幕支持，自动识别多个屏幕。

4. 新增2K分辨率布局文件夹。

5. 增加示例自定义添加多个窗体。

6. 重新设计配置参数界面，重新拆分配置参数分组，使得更清晰明了。

7. 新增停靠窗体默认尺寸占比，这样在没有布局文件以及新建布局文件的时候自动按照这个尺寸设置停靠窗体的位置，之前没有布局文件默认是挤在一块的。

8. 配置文件密码改成密文存储。

### 0.3 相关站点

1. 国内站点：https://gitee.com/feiyangqingyun

2. 国际站点：https://github.com/feiyangqingyun

3. 个人主页：https://blog.csdn.net/feiyangqingyun

4. 知乎主页：https://www.zhihu.com/people/feiyangqingyun

5. 产品主页：https://blog.csdn.net/feiyangqingyun/article/details/97565652

6. 体验地址：https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取码：01jf 文件名：bin_bigscreen.zip。

7. 文章导航：https://qtchina.blog.csdn.net/article/details/121327452

### 0.4 功能特点

1. 采用分层设计，整体总共分三级界面，一级界面是整体布局，二级界面是单个功能模块，三级界面是单个控件。

2. 子控件包括饼图、圆环图、曲线图、柱状图、柱状分组图、横向柱状图、横向柱状分组图、合格率控件、百分比控件、进度控件、设备状态面板、表格数据、地图控件、视频控件等。

3. 二级界面可以自由拖动悬浮，支持最小化隐藏、最大化关闭、响应双击自定义标题栏。

4. 数据源支持模拟数据（默认）、数据库采集、串口通信（需定制）、网络通信（需定制）、网络请求等，可自由设定每个子界面的采集间隔即数据刷新频率。

5. 采用纯QWidget编写，亲测Qt4.6到Qt6.2任意版本，理论上支持后续其他Qt版本。

6. 超强跨平台，亲测windows、linux、mac、国产uos、国产银河麒麟kylin等系统，效果完美，同时还支持嵌入式linux比如树莓派、香橙派、全志、imx6等。

7. 同时集成了自定义控件、qchart饼图、echart地图等功能。

8. 内置多套配色风格样式（紫色、蓝色、深蓝、黑色），默认紫色，自适应任意分辨率。

9. 可设置系统标题、目标分辨率、布局方案，启动立即应用。

10. 可设置主背景颜色、面板颜色、十字线游标颜色等各种颜色。

11. 可设置多条曲线不同颜色，没有设置颜色的情况下内置多套精美颜色随机应用。

12. 可设置标题栏背景颜色、文字颜色。

13. 可设置曲线图表背景颜色、文字颜色、网格颜色。

14. 可设置正常颜色、警戒颜色、报警颜色、禁用颜色、百分比进度颜色。

15. 可分别设置各种字体大小，比如全局字体、软件名称、标题栏、子标题栏、加粗标签等。

16. 可设置标题栏高度、表头高度、行高度。

17. 曲线支持游标、定位线、悬停高亮数据点、悬停显示值。

18. 柱状图支持顶部（可设置顶端、上部、中间、底部）显示数据，全部自适应计算位置。

19. 支持平滑曲线，内置多种平滑曲线算法，还支持面积图平滑。

20. 面积图填充颜色可选多种规则比如单色透明度填充、透明度渐变填充等。

21. 数据库支持sqlite、mysql、postgresql、oracle、国产人大金仓等数据库。

22. 主界面直接鼠标右键切换布局、配色方案、关闭开启某个二级窗体。

23. 自动记忆所有子窗口的大小和位置，下次启动立即应用。

24. 动态加载布局方案菜单，可以动态新建布局、恢复布局、保存布局、另存布局等，用户可以制造任意布局。

25. 二级窗体，双击从主窗体分离出来浮动，可以自由调整大小。再次双击标题栏最大化，再次双击还原。

26. 子模块也可以全屏显示作为一个大屏，这样就可以一个大屏拓展出多个子大屏，放大查看子模块的数据详情，适用多屏展示。

27. 每个模块都可以自定义采集速度，如果是数据库采集会自动排队处理，后期还可以拓展每个子模块都独立的数据库采集。

28. 提供系统设置模块进行整体的配置参数设置，效果立即应用。

29. 提供精美炫酷的大屏地图模块，包括静态图片、闪烁效果、迁徙效果、世界地图、区域地图等，可指定点的经纬度坐标，识别单击响应，可以做地图跳转等，每个点都可以不同的颜色和提示信息。

30. 除了提供大屏系统外，还将每个模块都做了独立的模块示例界面，每个模块都可以独立学习使用，里面用到的控件也单独做了控件示例界面，方便学习每个控件如何使用。

31. 非常详细的开发和使用手册，其中包括数据库说明、模块对照图、控件对照图、项目结构、代码说明（精确到每个类）、演示demo、使用方法等。

## 1 操作说明

### 1.1 使用方法

系统支持多种数据源，比如数据库采集、http请求、串口通信、网络通信、模拟数据等，为了简化测试过程，默认内置采用的是模拟数据。

#### 1.1.1 启动窗体

系统内置了多种启动窗体，默认大屏系统，可以通过鼠标右键菜单进入系统设置，启动窗体下拉框选择进行切换，切换后会自动重启应用，还可选择控件演示、模块演示，在控件演示和模块演示窗体中，左侧是对应子窗体导航，会自动记住最后选中的子界面索引。

##### 1.1.1.1 大屏系统

##### 1.1.1.2 模块演示

##### 1.1.1.3 控件演示

#### 1.1.2 系统菜单

在大屏的顶部中间标题栏或者子模块以外的标题栏，鼠标右键弹出的是系统的菜单，包括布局切换和样式切换等。

#### 1.1.3 模块菜单

在模块的标题栏，鼠标右键弹出的是模块可视化的菜单，这个是Qt内置生成的，加载了多少个子模块就会生成多少个菜单项，可以对每个模块进行显示隐藏切换。

#### 1.1.4 布局切换

在弹出的系统菜单选择布局方案，在弹出的二级菜单选择默认已经设置好的布局方案，直接切换即可。

#### 1.1.5 新建布局

在弹出的系统菜单选择新建布局，在弹出的框中输入布局名称，确认后，自由拖动调整模块位置，打开模块、隐藏模块，之后单击保存布局即可。

#### 1.1.6 全局换肤

在弹出的系统菜单选择配色方案，在弹出的二级菜单选择对应的配色方案，默认有四种：紫色风格、蓝色风格、深蓝风格、黑色风格。

#### 1.1.7 模块拖动

鼠标移动到子模块的标题栏，鼠标按下可以拖动这个模块到任意位置，模块也可以拖动独立位置展示，也可以嵌入到对应布局中，拖动好位置以后自动保存到布局方案，下次启动自动应用。双击模块标题栏可以剥离窗体使之悬浮。

#### 1.1.8 调整间距

鼠标移动到模块与模块的边缘，鼠标变成调整间距样式，可以左右或者上下拉动，调整好间距以后自动保存到布局方案，下次启动自动应用。

### 1.2 系统设置

系统设置中的参数，可能会不定期做调整和修改及增加，下面的图示和参数描述未必全部一致，以最新的为准。

#### 1.2.1 基本设置

参数说明

1. 开机启动：默认关闭，开启后软件会随系统启动而启动。

2. 模块拖动：默认开启，开启后模块可以自由拖动到合适的位置松开，一般在布局固定后在关闭，防止使用者在现场又托乱了。

3. 切左下角：开启裁掉左下角以后，左侧底部和整体底部合并为一体，作为全局底部的一部分，就可以拖动模块到左侧底部，否则左侧底部作为左侧的一部分。

4. 切右下角：开启裁掉右下角以后，右侧底部和整体底部合并为一体，作为全局底部的一部分，就可以拖动模块到右侧底部，否则右侧底部作为右侧的一部分。

5. 定位线条：系统中曲线图表内置了定位线条，比如1月份，方便查看，可以开启。

6. 百分符号：系统中曲线图表Y轴，有时候需要按照 100% 后面带百分比符号显示。

7. 隐藏鼠标：鼠标未操作多久自动隐藏鼠标指针，默认5秒钟。

8. 启动窗体：选择程序运行的启动窗体，默认大屏系统，还可选择控件演示、模块演示。

9. 工作模式：默认工作模式是模拟数据，还可以选择数据库采集、串口采集（未实现）、网络采集（未实现）、网络请求。

10. 地图样式：可选择静态图片、闪烁效果、迁徙效果、世界地图、区域地图多种样式，如果没有开启浏览器模块则自动采用静态图片的方式，区域地图默认是江西省吉安市，可以在代码中修改。

11. 布局方案：和系统右键菜单中的布局方案功能一样。

12. 软件标题：软件的标题文字，显示在软件中间顶部。

13. 请求地址：工作模式选择网络请求的时候发送的网络请求地址。

#### 1.2.2 视频设置

参数说明

1. 视频循环：开启后设定的视频打开后会循环播放。

2. 视频拉伸：开启后视频会填充整个窗体拉伸图像，否则按照比例自动拉伸。

3. 视频回调：开启后采用CPU绘制图像，部分设备没有GPU需要开启。

4. 视频循环：开启后会不断循环播放视频文件。

5. 视频地址：视频窗体对应的视频地址，可以下拉选择内置的一些地址，也可以手动填写，如果多个视频窗口则自己增加对应的配置参数，支持本地视频文件、USB摄像头、网络摄像头、视频流地址等各种。

    1QStringList listVideoUrl;2//本地视频文件3listVideoUrl << "f:/mp5/1.mp4";4//USB摄像头-默认5listVideoUrl << "video=USB2.0 PC CAMERA";6//USB摄像头-指定分辨率和帧率7listVideoUrl << "video=USB Video Device|1280x720|30";8//网络摄像机地址-大华9listVideoUrl << "rtsp://admin:12345@192.168.1.15:554/media/video1";10//网络摄像机地址-海康11listVideoUrl << "rtsp://admin:Admin123456@192.168.1.64:554/Streaming/Channels/101?transportmode=unicast&profile=Profile_2";12//网络视频流地址-美国13listVideoUrl << "http://vfx.mtime.cn/Video/2019/02/04/mp4/190204084208765161.mp4";14//网络视频流地址-中国15listVideoUrl << "http://vfx.mtime.cn/Video/2019/03/18/mp4/190318231014076505.mp4";16//网络视频流地址-海康萤石17listVideoUrl << "https://hls01open.ys7.com/openlive/6e0b2be040a943489ef0b9bb344b96b8.hd.m3u8";

#### 1.2.3 采集间隔设置

采集间隔设置不用做说明，一看就懂，单位毫秒，可定制每个模块都对应自己的采集方式、数据库、间隔等。

#### 1.2.4 数据库设置

理论上支持Qt支持的所有数据库，和具体程序无关，只要有对应的数据库的动态库和插件库就行，或者支持odbc数据源也可以，程序打通了odbc数据源的通信方式，所以支持各种数据库，可以先自己用对应的数据库工具连接数据库试试，通了数据库正常后在来测试程序。

亲测 Sqlite（Qt内置无需额外动态库）、MySql（高版本Qt需要自行编译插件）、PostgreSQL（开源免费的数据库，很好用）、SqlServer（需要设置ODBC数据源）、kingbase（国产人大金仓数据库，该数据库其实是基于PostgreSQL改的，通过odbc数据源方式测试无误）。

连接测试用来测试当前选择的数据库类型以及数据库信息，是否能连接数据库正常，可以避免数据库不通的情况下用来检测是否信息填写正确。

初始化数据库按钮用来执行sql脚本来生成对应的数据库，部分数据库支持数据库文件不存在的情况下通过sql语句来创建数据库，比如mysql、postgres等就支持直接sql语句新建数据库，有部分数据库可能不支持，需要手动先在数据库管理工具中新建好数据库，然后再来这里执行初始化数据库用来新建表和初始数据。

### 1.3 工作模式

本系统支持多种工作模式，以便适应各种需求，默认采用随机模拟数据，大屏基础版本也采用此工作模式。

    ​x1void frmModule1::loadPlot1()2{3    //对应表名(返回的时候充当唯一标识符flag)和字段名4    QString tableName = "t_1_1_mold_prod_total";5    QString columnName = "name,prod_1,prod_2";6
    7    //模拟数据采用随机数据 其他采用调用函数接口查询和请求数据8    if (AppConfig::WorkMode == "timer") {9        double min = 1, max = 50;10        vdouble value1, value2;11        for (int i = 0; i < rowNames1.count(); ++i) {12            value1 << QUIHelper::getRandValue(min, max);13            value2 << QUIHelper::getRandValue(min, max);14        }15        loadPlot1(lvdouble() << value1 << value2);16    } else if (AppConfig::WorkMode == "db") {17        DbData::DbLocal->select(tableName, columnName, true);18    } else if (AppConfig::WorkMode == "http") {19        DbData::DbHttp->select(tableName, columnName, true);20    }21}

#### 1.3.1 模拟数据

如果工作模式选择的是模拟数据，则采用随机数模拟生成数据并设置。

#### 1.3.2 数据库采集

具体数据库表字段说明参见后面的数据库说明。

如果工作模式选择的是数据库采集，则会自动连接设置的数据库，可以用对应的数据库管理工具连接数据库，打开对应的表，然后更改其中的数据，保存，可看到对应的数据反应到界面上。

系统支持一个系统下的软件远程访问另一个系统下的数据库，比如linux系统或者mac系统远程访问win系统上的mysql数据库，数据库也可以放在云端比如阿里云（亲测无误），只要对应IP和端口可达就行，验证是否可达可以用对应的数据库管理工具连接即可。

理论上odbc的方式支持多种数据库，比如sql server，oracle，postgresql等，所以如果没有插件支持的数据库可以考虑用odbc的方式，odbc也是跨平台的。

如果需要远程访问mysql数据库，mysql数据库需要设置用户 root@% sql server数据库的配置规则，下面的链接只是参考，基本上正常电脑安装好以后都不需要下面的配置。 https://blog.csdn.net/mozhi111/article/details/80281388 https://blog.csdn.net/happymagic/article/details/8673476

远程访问sql server数据库，需要在运行软件的电脑上也需要配置数据源，不然很可能无法访问。

sql server数据库配置步骤

1. 第一步：安装好sql server数据库，比如sql server 2014，设置混合验证模式并设置密码。

2. 第二步：打开sql server management studio，左侧，新建数据库bigscreen。

3. 第三步：新建odbc数据源，cmd执行命令odbcad32打开数据源配置，命名为bigscreen，关联到数据库bigscreen。 切记：Qt中连接sqlserver数据库采用的odbc方式，数据库名填写的是数据源中的名称，而不是数据库中的数据库名称，比如数据源名字是aaa，关联到数据库bbb，连接的数据库名称是填写aaa而不是bbb。

安装PostgreSQL数据库之后，默认只能本地访问连接。如果想在其他主机上访问PostgreSQL数据库服务器，就需要进行相应的配置。 https://blog.csdn.net/weixin_36816337/article/details/81739819 人大金仓数据库kingbase，其实就是postgresql数据库改的，如果是WIN10系统建议安装在系统盘以外，不然没有权限，导致奇奇怪怪的问题。

特别提示

- 数据库有位数区分，如果是32位的qt，对应打包目录要放32位的数据库的dll，比如放32位的libmysql.dll，不然会提示找不到驱动。

- 无论32位还是64位的qt程序，都能连接64位的数据库。

- 意思是在开发阶段，必须放正确位数的dll，而数据库只需要安装64位的即可。

- sqlserver数据库采用odbc数据源的方式进行连接，而且是微软亲生的，估计在系统层做了无微不至的关怀，qt程序发布的时候啥也不用带。

#### 1.3.3 串口采集

需要定制协议，比如RS232、RS485、Modbus、Mqtt等

#### 1.3.4 网络采集

需要定制协议，比如tcp client、tcp server、udp client、udp server、websocket等。

#### 1.3.5 网络请求

找到bigscreen可执行文件所在目录下的httpserver文件，双击运行，切换到网络请求服务器页面，回复数据选择文件内容，单击启动服务器，左侧消息栏可以看到实时打印的数据，从json文件读取的数据，实际中可以是从数据库中采集的数据等。网络请求客户端/服务器工具httpserver，也是纯Qt编写的工具。

功能特点

1. 支持多个客户端连接并发同时处理，100个毫无压力。

2. 可设置http请求是长连接还是短连接，默认长连接。

3. 支持多种回复数据格式，其中包括网页内容、json数据等。

4. 服务端示例中同时包含读取文件回复、读取数据库回复。

5. 支持8种配色方案（暗黑、灰黑、深绿、浅黄、深蓝、深黑、暗蓝、默认）。

6. 客户端可指定请求地址，服务端可指定网卡和端口进行监听。

7. 所有请求和连接都有计数，所有在线请求的IP和端口都显示在表格中。

8. 可以提供一个简易的网页配置服务，包括交互，作为设备的web配置。

9. 可自由拓展增加权限校验等，作为一个http请求服务器。

10. 纯Qt实现，代码框架整洁，注释完整，支持任意Qt版本、任意编译器、任意操作系统。

#### 1.3.6 请求格式

请求地址：http://127.0.0.1:6000 可以自行在系统设置中更改。

##### 1.3.6.1 请求数据

其他表请求格式完全一致。 tag=t_1_1_mold_prod_total&tableName=t_1_1_mold_prod_total&columnName=name,prod_1,prod_2

名称 | 说明
--- | ---
tag | 标识符，用于服务端接收到请求后按照这个标识符返回数据，这里内容填的是具体的表名，方便收到数据直接解析并发送信号到对应模块窗体显示数据。
tableName | 要查询的表名。
columnName | 对应表的字段名称集合，用英文逗号隔开。

##### 1.3.6.2 返回数据

    xxxxxxxxxx191{2    "tag": "t_1_1_mold_prod_total",3    "result": [{4        "internal_id": 1,5        "name": "设变",6        "prod_1": 16,7        "prod_2": 128    }, {9        "internal_id": 2,10        "name": "修模",11        "prod_1": 20,12        "prod_2": 2513    }, {14        "internal_id": 3,15        "name": "新模",16        "prod_1": 40,17        "prod_2": 2518    }]19}

名称 | 说明
--- | ---
tag | 唯一标识符，用于标识当前接收到哪个请求的回复数据，对方请求的时候会发过来。
result | 结果数组，内容按照表格行一行行包装的数据。

##### 1.3.6.3 整体流程

客户端发送请求，指定了唯一标识符+表名+要查询的字段名称集合，服务器收到请求后，解析表名+字段名称集合，从数据库中查询对应的内容组成json字符串返回，带上唯一标识符。

具体解析数据在datahttp类中，如果是自定义的表和字段，则需要在datahttp类中的initTable方法自行添加表名和字段名即可，非常方便，一个表只需要增加一行代码。

#### 1.3.7 拓展构想

现在数据采集无论是数据库采集还是网络请求采集，对应的表名和字段名都是写死在代码中，尽管目前已经封装好了可以自行添加表和字段，但是还不够通用，后期打算通过从配置文件读取。

### 1.4 其他说明

1. 可执行文件同级文件夹有layout+layout_1440+layout_1920，程序默认自动识别分辨率并加载对应的布局文件夹，比如1920分辨率则从layout_1920文件夹加载布局，并作为整体布局文件夹。

2. 如果发现布局拖动乱了，可以直接鼠标右键选择恢复布局即可，在保存布局以前。

3. 在中间地图模块鼠标右键可以弹出菜单，切换布局和配色方案等。

4. 在模块的标题栏上右键可以弹出默认的dock菜单，用来显示和隐藏各模块。

5. 软件关闭过程中会自动保存布局，下次启动以后自动应用。

6. 如果使用的默认的配色方案比如紫色风格，则配置文件中的颜色全部无效，会自动应用代码中的颜色，如果需要启用自定义的颜色，则需要先将配置文件的皮肤参数修改成 Theme=\x81ea\x5b9a\x4e49\x98ce\x683c 即可。此时打开软件会应用配置文件中的颜色。

7. 右键菜单可以截图保存，默认命名为 配色方案名称_布局方案名称.png 保存在snap目录下。

8. 在二级窗体的标题栏上右键弹出模块菜单，可以对单个模块打开关闭，其他地方右键全局菜单。

## 2 数据库说明

数据库表的设计按照模块的顺序，比如frmmodule1主模块中包括4个子模块，每个子模块都对应一个表，所有表名的前缀是 t_ 以便区分，第一个数字表示主模块编号，第二个数字表示子模块编号。

表名格式如下：

- t_1_1_mold_prod_total

- t_1_2_mold_prod_monthly

- t_1_3_wp_prod_total

- t_1_4_wp_prod_monthly

源码目录下的bigscreen.sql为数据库脚本，可以在系统设置中单击初始化数据来执行。 如果是需要对接自己的系统，可能涉及到部分数据不一致的情况，你可以： 第一：尽量用现有的表，现有的表各种各样都有，你找到你类似的往里面填数据就行。 第二：如果没有合适的表，则需要调整对应的模块代码。

### 2.1 产量汇总模块

子模块表名对应表：

子模块标题 | 子模块表名
--- | ---
模具产量 | t_1_1_mold_prod_total
每月模具产量趋势图 | t_1_2_mold_prod_monthly
零件产量 | t_1_3_wp_prod_total
每月零件产量趋势图 | t_1_4_wp_prod_monthly

#### 2.1.1 模具产量

表名：t_1_1_mold_prod_total

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
name | 名称 | VARCHAR | 255 | 不为空
prod_1 | 系列1 | INTEGER | 11 |
prod_2 | 系列2 | INTEGER | 11 |

默认数据：

internal_id | name | prod_1 | prod_2
--- | --- | --- | ---
1 | 设变 | 14 | 12
2 | 修模 | 20 | 25
3 | 新模 | 40 | 25

#### 2.1.2 每月模具产量趋势图

表名：t_1_2_mold_prod_monthly

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
year | 年份 | INTEGER | 4 | 不为空
month | 月份 | INTEGER | 4 | 不为空
prod_1 | 系列1 | INTEGER | 11 |
prod_2 | 系列2 | INTEGER | 11 |
prod_3 | 系列3 | INTEGER | 11 |

默认数据：

internal_id | year | month | prod_1 | prod_2 | prod_3
--- | --- | --- | --- | --- | ---
1 | 2018 | 5月 | 32 | 54 | 80
2 | 2018 | 6月 | 42 | 34 | 33
3 | 2018 | 7月 | 45 | 62 | 44
4 | 2018 | 8月 | 23 | 38 | 65
5 | 2018 | 9月 | 12 | 12 | 77
6 | 2018 | 10月 | 22 | 33 | 34
7 | 2018 | 11月 | 23 | 45 | 22
8 | 2018 | 12月 | 32 | 65 | 43
9 | 2019 | 1月 | 12 | 23 | 65
10 | 2019 | 2月 | 21 | 77 | 55
11 | 2019 | 3月 | 22 | 87 | 33
12 | 2019 | 4月 | 23 | 45 | 34

#### 2.1.3 零件产量

表名：t_1_3_wp_prod_total

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
name | 名称 | VARCHAR | 255 | 不为空
prod_1 | 系列1 | INTEGER | 11 |
prod_2 | 系列2 | INTEGER | 11 |

默认数据：

internal_id | name | prod_1 | prod_2
--- | --- | --- | ---
1 | 其他 | 8544 | 10000
2 | 钢件 | 1000 | 5002
3 | 电极 | 2000 | 3000

#### 2.1.4 每月零件产量趋势图

表名：t_1_4_wp_prod_monthly

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
year | 年份 | INTEGER | 4 | 不为空
month | 月份 | INTEGER | 4 | 不为空
prod_1 | 系列1 | INTEGER | 11 |
prod_2 | 系列2 | INTEGER | 11 |
prod_3 | 系列3 | INTEGER | 11 |

默认数据：

internal_id | year | month | prod_1 | prod_2 | prod_3
--- | --- | --- | --- | --- | ---
1 | 2018 | 5月 | 32 | 54 | 23
2 | 2018 | 6月 | 42 | 34 | 30
3 | 2018 | 7月 | 45 | 62 | 44
4 | 2018 | 8月 | 23 | 38 | 65
5 | 2018 | 9月 | 12 | 12 | 77
6 | 2018 | 10月 | 22 | 33 | 34
7 | 2018 | 11月 | 23 | 45 | 22
8 | 2018 | 12月 | 32 | 65 | 43
9 | 2019 | 1月 | 12 | 23 | 65
10 | 2019 | 2月 | 21 | 77 | 55
11 | 2019 | 3月 | 22 | 87 | 33
12 | 2019 | 4月 | 23 | 45 | 34

### 2.2 当月计划模块

子模块表名对应表：

子模块标题 | 子模块表名
--- | ---
模具达成率 | t_2_1_mold_achie_rate
零件达成率 | t_2_2_wp_achie_rate
零件数 | t_2_3_wp_achie_number
每日工序达成数 | t_2_4_process_achie_number

#### 2.2.1 模具达成率

表名：t_2_1_mold_achie_rate

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
plan | 计划数 | INTEGER | 11 |
achieved | 达成数 | INTEGER | 11 |

默认数据：1 200 110

#### 2.2.2 零件达成率

表名：t_2_2_wp_achie_rate

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
name | 名称 | VARCHAR | 255 | 不为空
plan | 计划数 | INTEGER | 11 |
achieved | 达成数 | INTEGER | 11 |

默认数据：

internal_id | name | plan | achieved
--- | --- | --- | ---
1 | 模仁 | 100 | 200
2 | 镶件 | 122 | 100
3 | 辅件 | 300 | 500
4 | 电极 | 155 | 200

#### 2.2.3 零件数

表名：t_2_3_wp_achie_number

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
wp_achie_number | 零件数 | INTEGER | 11 |

默认数据：1 1234

#### 2.2.4 每日工序达成数

表名：t_2_4_process_achie_number

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
day | 日期 | VARCHAR | 2 |
green | 绿色数量 | INTEGER | 11 |
blue | 蓝色数量 | INTEGER | 11 |
red | 红色数量 | INTEGER | 11 |

默认数据：

internal_id | day | green | blue | red
--- | --- | --- | --- | ---
1 | 1 | 20 | 3 | 0
2 | 2 | 20 | 2 | 0
3 | 3 | 23 | 3 | 0
4 | 4 | 32 | 4 | 0
5 | 5 | 43 | 5 | 0
6 | 6 | 23 | 3 | 0
7 | 7 | 44 | 0 | 5
8 | 8 | 12 | 0 | 5
9 | 9 | 54 | 0 | 4
10 | 10 | 42 | 0 | 3
11 | 11 | 47 | 6 | 0
12 | 12 | 34 | 4 | 0
13 | 13 | 25 | 3 | 0
14 | 14 | 38 | 6 | 0
15 | 15 | 43 | 0 | 4
16 | 16 | 56 | 0 | 3
17 | 17 | 65 | 4 | 0
18 | 18 | 43 | 5 | 0
19 | 19 | 34 | 0 | 5
20 | 20 | 55 | 3 | 0
21 | 21 | 47 | 6 | 0
22 | 22 | 34 | 4 | 0
23 | 23 | 25 | 3 | 0
24 | 24 | 38 | 6 | 0
25 | 25 | 43 | 0 | 4
26 | 26 | 56 | 0 | 3
27 | 27 | 65 | 4 | 0
28 | 28 | 43 | 5 | 0
29 | 29 | 34 | 0 | 5
30 | 30 | 55 | 3 | 0
31 | 31 | 42 | 0 | 3

### 2.3 设备监控模块

子模块表名对应表：

子模块标题 | 子模块表名
--- | ---
设备运行状态 | t_3_1_device_runtime
稼动率 | t_3_2_oee

#### 2.3.1 设备运行状态

表名：t_3_1_device_runtime

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
group_name | 分组名称 | VARCHAR | 4 | 不为空
no_id | 分组编号 | INTEGER | 11 | 不为空
name | 名称 | VARCHAR | 255 | 不为空
text_1 | 文字1 | VARCHAR | 255 |
text_2 | 文字2 | VARCHAR | 255 |
status | 状态 1-开机 2-待机 3-维护 4-空 | INTEGER | 1 | 不为空
progress | 进度 | INTEGER | 3 |
flicker | 是否闪烁 | INTEGER | 1 |

默认数据：

internal_id | group_name | no_id | name | text_1 | text_2 | status | progress | flicker
--- | --- | --- | --- | --- | --- | --- | --- | ---
1 | CNC | 1 | CNC1 | 190411 | PID11 | 1 | 0 | 0
2 | CNC | 2 | CNC2 | 190412 | PID12 | 1 | 0 | 0
3 | CNC | 3 | CNC3 | 190413 | PID13 | 1 | 0 | 0
4 | CNC | 4 | CNC4 | 190414 | PID14 | 2 | 0 | 0
5 | CNC | 5 | CNC5 | 190415 | PID15 | 1 | 0 | 0
6 | CNC | 6 | CNC6 | 190416 | PID16 | 2 | 0 | 0
7 | CNC | 7 | CNC7 | 190417 | PID17 | 1 | 0 | 0
8 | CNC | 8 |  |  |  | 4 | 0 | 0
9 | EDM | 1 | EDM1 | 190421 | PID21 | 1 | 0 | 0
10 | EDM | 2 | EDM2 | 190422 | PID23 | 2 | 0 | 0
11 | EDM | 3 | EDM3 | 190423 | PID23 | 1 | 0 | 0
12 | EDM | 4 | EDM4 | 190424 | PID24 | 3 | 0 | 0
13 | EDM | 5 | EDM5 | 190425 | PID25 | 1 | 0 | 0
14 | EDM | 6 | EDM6 | 190426 | PID26 | 1 | 0 | 0
15 | EDM | 7 | EDM7 | 190427 | PID27 | 1 | 0 | 0
16 | EDM | 8 | EDM8 | 190428 | PID28 | 2 | 0 | 0
17 | WEDM | 1 | WEDM1 | 190431 | PID28 | 1 | 0 | 0
18 | WEDM | 2 | WEDM2 | 190432 | PID28 | 3 | 0 | 0
19 | WEDM | 3 | WEDM3 | 190434 | PID29 | 2 | 0 | 0
20 | WEDM | 4 | WEDM4 | 190435 | PID30 | 1 | 0 | 0
21 | WEDM | 5 | WEDM5 | 190436 | PID36 | 1 | 0 | 0
22 | WEDM | 6 | WEDM6 | 190437 | PID37 | 3 | 0 | 0
23 | WEDM | 7 |  |  |  | 4 | 0 | 0
24 | WEDM | 8 |  |  |  | 4 | 0 | 0

#### 2.3.2 稼动率

表名：t_3_2_oee

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
cnc | 类别-cnc | INTEGER | 3 | 不为空
edm | 类别-edm | INTEGER | 3 | 不为空
wedm | 类别-wedm | INTEGER | 3 | 不为空

默认数据：1 110 90 90

### 2.4 模具进度模块

子模块表名对应表：

子模块标题 | 子模块表名
--- | ---
模具进度 | t_4_1_mold_progress
模具状态统计 | t_4_2_mold_status_parcent
加工中模具数量 | t_4_3_mold_processing_num

#### 2.4.1 模具进度

表名：t_3_2_oee

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
mold_no | 模具编号 | VARCHAR | 11 |
tn_no | 版本号 | VARCHAR | 11 |
type | 类型 | VARCHAR | 255 |
status | 状态 | VARCHAR | 255 |
product_name | 产品名称 | VARCHAR | 255 |
plan_date | 计划交期 | VARCHAR | 255 |
green | 当前进度绿色 | INTEGER | 11 |
yellow | 当前进度黄色 | INTEGER | 11 |
red | 当前进度红色 | INTEGER | 11 |

默认数据：

internal_id | mold_no | tn_no | type | status | product_name | plan_date | green | yellow | red
--- | --- | --- | --- | --- | --- | --- | --- | --- | ---
1 | IK19001 | T0 | 新模 | 加工中 | 后盖 | 2019/3/29 | 60 | 20 | 20
2 | IK19002 | T1 | 修模 | 加工中 | 前盖 | 2019/4/3 | 50 | 50 | 0
3 | IK29003 | T2 | 修模 | 加工中 | 外壳 | 2019/4/8 | 30 | 70 | 0
4 | IK19004 | T0 | 新模 | 加工中 | 侧边 | 2019/4/18 | 90 | 5 | 5
5 | IK19005 | T3 | 修模 | 加工中 | 边框 | 2019/4/3 | 60 | 40 | 0
6 | IK19006 | T0 | 新模 | 加工中 | 后盖 | 2019/4/26 | 70 | 25 | 5
7 | IK19007 | T0 | 新模 | 加工中 | 面板 | 2019/4/7 | 25 | 25 | 50
8 | IK19008 | T0 | 新模 | 加工中 | 插件 | 2019/3/31 | 20 | 40 | 40
9 | IK19009 | T1 | 修模 | 加工中 | 面板 | 2019/3/12 | 10 | 60 | 30
10 | IK19010 | T2 | 修模 | 加工中 | 后盖 | 2019/2/12 | 0 | 100 | 0

#### 2.4.2 模具状态统计

表名：t_4_2_mold_status_parcent

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
finished | 正常交付百分比 | INTEGER | 11 | 不为空
processing | 加工中百分比 | INTEGER | 11 | 不为空
delay | 延期百分比 | INTEGER | 11 | 不为空

默认数据： 1 60 25 15

#### 2.4.3 加工中模具数量

表名：t_4_3_mold_processing_num

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
mold_processing_number | 加工中数量 | INTEGER | 11 | 不为空

默认数据：87

### 2.5 负荷分布模块

子模块表名对应表：

子模块标题 | 子模块表名
--- | ---
工序计划负荷 | t_5_1_work_load
当日负荷 | t_5_2_work_load_today
负荷百分比 | t_5_3_work_load_percent

#### 2.5.1 工序计划负荷

表名：t_5_1_work_load

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
process_name | 工序名称 | VARCHAR | 255 |
work_load_1 | 第1天负荷 | VARCHAR | 255 |
work_load_x | 第x天负荷 | VARCHAR | 255 |
work_load_7 | 第7天负荷 | VARCHAR | 255 |

默认数据：

internal_id | process_name | work_load_1 | work_load_2 | work_load_3 | work_load_4 | work_load_5 | work_load_6 | work_load_7
--- | --- | --- | --- | --- | --- | --- | --- | ---
1 | CNC粗 | 101H | 81H | 90H | 120H | 30H | 60H | 120H
2 | CNC精 | 102H | 102H | 120H | 81H | 45H | 102H | 81H
3 | EDM | 77H | 102H | 90H | 102H | 45H | 90H | 120H
4 | WEDM | 87H | 102H | 120H | 45H | 102H | 102H | 90H
5 | 抛光 | 45H | 102H | 102H | 90H | 81H | 81H | 81H
6 | 钳工 | 89H | 90H | 45H | 120H | 120H | 120H | 102H
7 | 组装 | 77H | 90H | 81H | 102H | 45H | 102H | 81H

表名：t_5_1_work_load_table_head 这个设计很巧妙，相当于动态的日期和数据，日期作为标题。

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
date_1 | 第1天日期 | VARCHAR | 255 |
date_2 | 第2天日期 | VARCHAR | 255 |
date_3 | 第3天日期 | VARCHAR | 255 |
date_4 | 第4天日期 | VARCHAR | 255 |
date_5 | 第5天日期 | VARCHAR | 255 |
date_6 | 第6天日期 | VARCHAR | 255 |
date_7 | 第7天日期 | VARCHAR | 255 |

默认数据：

internal_id | date_1 | date_2 | date_3 | date_4 | date_5 | date_6 | date_7
--- | --- | --- | --- | --- | --- | --- | ---
1 | 2019-04-30 | 2019-05-01 | 2019-05-02 | 2019-05-03 | 2019-05-04 | 2019-05-05 | 2019-05-06

#### 2.5.2 当日负荷

表名：t_5_2_work_load_today

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
group_name | 分组名称 | REAL | 11 | 小数位精度1
green | 绿色值 | REAL | 11 | 小数位精度1
red | 红色值 | REAL | 11 | 小数位精度1

默认数据：

internal_id | group_name | green | red
--- | --- | --- | ---
1 | CNC粗 | 20 | 20
2 | CNC精 | 40 | 20
3 | EDM | 60 | 0
4 | WEDM | 30.2 | 2
5 | 铣床 | 40 | 0
6 | 磨床 | 30 | 50

#### 2.5.3 负荷百分比

表名：t_5_3_work_load_percent

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
group_name | 分组名称 | VARCHAR | 255 |
day_1 | 第1天 | INTEGER | 3 |
day_x | 第x天 | INTEGER | 3 |
day_7 | 第7天 | INTEGER | 3 |

默认数据：

internal_id | group_name | day_1 | day_2 | day_3 | day_4 | day_5 | day_6 | day_7
--- | --- | --- | --- | --- | --- | --- | --- | ---
1 | CNC粗 | 70 | 80 | 90 | 70 | 50 | 99 | 80
2 | CNC精 | 120 | 100 | 130 | 140 | 90 | 100 | 85
3 | EDM | 120 | 100 | 120 | 80 | 90 | 40 | 50
4 | WEDM | 100 | 120 | 120 | 100 | 100 | 80 | 70
5 | 铣床 | 90 | 80 | 75 | 40 | 12 | 30 | 10
6 | 磨床 | 80 | 70 | 50 | 60 | 40 | 50 | 30

### 2.6 送检合格模块

子模块表名对应表：

子模块标题 | 子模块表名
--- | ---
钢件合格率 | t_6_1_wp_qual_rate
电极合格率 | t_6_2_ele_qual_rate
当天合格率 | t_6_3_qual_rate_today
模具零件合格率 | t_6_4_mold_qual_rate

#### 2.6.1 钢件合格率

表名：t_6_1_wp_qual_rate

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
date_1 | 第1天合格率 | INTEGER | 3 |
date_x | 第x天合格率 | INTEGER | 3 |
date_15 | 第15天合格率 | INTEGER | 3 |

默认数据： 1, 100, 99, 89, 95, 95, 92, 98, 100, 96, 97, 98, 99, 90, 85, 84

#### 2.6.2 电极合格率

表名：t_6_2_ele_qual_rate

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
date_1 | 第1天合格率 | INTEGER | 3 |
date_x | 第x天合格率 | INTEGER | 3 |
date_15 | 第15天合格率 | INTEGER | 3 |

默认数据： 1, 100, 99, 89, 95, 95, 92, 98, 100, 96, 97, 98, 99, 90, 85, 84

#### 2.6.3 当天合格率

表名：t_6_3_qual_rate_today

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
qual_rate | 合格率 | INTEGER | 3 |

默认数据：90

#### 2.6.4 模具零件合格率

表名：t_6_4_mold_qual_rate

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
mold_name | 模块名称 | VARCHAR | 255 |
qual_rate | 合格率 | INTEGER | 3 |

默认数据：

internal_id | mold_name | qual_rate
--- | --- | ---
1 | IK19001 | 95
2 | IK19002 | 88
3 | IK19003 | 94
4 | IK19004 | 75
5 | IK19005 | 94
6 | IK19006 | 89

### 2.7 品质统计模块

子模块表名对应表：

子模块标题 | 子模块表名
--- | ---
品质占比 | t_7_1_qual_percent
班组合格率 | t_7_2_group_qual_rate
每日合格率统计 | t_7_3_qual_rate_daily

#### 2.7.1 品质占比

表名：t_7_1_qual_percent

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
green | 绿色百分比 | INTEGER | 3 |
blue | 蓝色百分比 | INTEGER | 3 |
yellow | 黄色百分比 | INTEGER | 3 |
red | 红色百分比 | INTEGER | 3 |

默认数据： 1 45 30 15 10

#### 2.7.2 班组合格率

表名：t_7_2_group_qual_rate

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
group_name | 分组名称 | VARCHAR | 255 |
qual_rate | 合格率 | INTEGER | 3 |

默认数据：

internal_id | group_name | qual_rate
--- | --- | ---
1 | CNC | 90
2 | EDM | 85
3 | WEDM | 92
4 | 磨床 | 94
5 | 铣床 | 93
6 | 外协 | 92

#### 2.7.3 每日合格率统计

表名：t_7_3_qual_rate_daily

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
group_name | 分组名称 | VARCHAR | 255 |
day_1 | 第1天 | INTEGER | 3 |
day_x | 第x天 | INTEGER | 3 |
day_31 | 第31天 | INTEGER | 3 |

默认数据： 1, 'all', 90, 90, 97, 91, 92, 88, 89, 90, 78, 87, 86, 90, 80, 97, 87, 87, 88, 89, 90, 90, 89, 86, 90, 80, 97, 87, 87, 89, 89, 89, 90

### 2.8 物料管理模块

子模块表名对应表：

子模块标题 | 子模块表名
--- | ---
库存占比 | t_8_1_key_invt
主要零件库存 | t_8_2_invt_table

#### 2.8.1 库存占比

表名：t_8_1_key_invt

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
name | 名称 | VARCHAR | 255 |
upper_bound | 上限 | INTEGER | 11 |
current | 库存 | INTEGER | 11 |

默认数据：

internal_id | name | upper_bound | current
--- | --- | --- | ---
1 | 刀具A1 | 200 | 110
2 | 顶针B | 100 | 70
3 | 线割丝C | 100 | 300
4 | 树脂D | 100 | 10

#### 2.8.2 主要零件库存

表名：t_8_2_invt_table

字段名 | 中文名 | 类型 | 长度 | 说明
--- | --- | --- | --- | ---
internal_id | 序号 | INTEGER | 11 | 主键自增
invt_no | 编号 | VARCHAR | 255 |
name | 品名 | VARCHAR | 255 |
spec | 规格 | VARCHAR | 255 |
mat | 材料 | VARCHAR | 255 |
size | 尺寸 | VARCHAR | 255 |
target | 目标库存 | INTEGER | 11 |
current | 当前库存 | INTEGER | 11 |

默认数据：

internal_id | invt_no | name | spec | mat | size | target | current
--- | --- | --- | --- | --- | --- | --- | ---
1 | SSDDS1 | 品名1 | 规格1 | 材料1 | 34 54 20 | 200 | 90
2 | SSDDS2 | 品名2 | 规格2 | 材料2 | 34 54 20 | 100 | 120
3 | SSDDS3 | 品名3 | 规格3 | 材料3 | 34 54 20 | 100 | 67
4 | SSDDS4 | 品名4 | 规格4 | 材料4 | 34 54 20 | 100 | 88
5 | SSDDS5 | 品名5 | 规格5 | 材料5 | 34 54 20 | 100 | 45
6 | SSDDS6 | 品名6 | 规格6 | 材料6 | 34 54 20 | 100 | 87
7 | SSDDS7 | 品名7 | 规格7 | 材料7 | 34 54 20 | 100 | 9
8 | SSDDS8 | 品名8 | 规格8 | 材料8 | 34 54 20 | 100 | 44
9 | SSDDS9 | 品名9 | 规格9 | 材料9 | 34 54 20 | 100 | 100

## 3 配置参数

### 3.1 基本配置1

字段 | 描述 | 默认值
--- | --- | ---
IndexStart | 启动窗体索引 0-大屏系统 1-控件演示 2-模块演示 | 0-大屏系统
IndexControl | 控件演示窗体选中子窗体索引 | 0
IndexModule | 模块演示窗体选中子窗体索引 | 0
WorkMode | 工作模式 | timer
MapStyle | 中间地图样式 | point
Title | 软件标题，默认值：数字化工厂信息中心 |
Ratio | 分辨率，目前无意义，备用参数 | 1920*1080
Layout | 布局方案，每次切换布局方案以后都会保存 | 完整布局
Theme | 配色方案，每次切换配色方案以后都会保存 | 紫色风格
HttpUrl | 网络请求地址，默认 http://127.0.0.1:6000 |

工作模式

- timer-模拟数据

- db-数据库采集

- com-串口采集

- tcp-网络采集

- http-post请求

地图样式

- image-静态图片

- point-闪烁效果

- move-迁徙效果

- world-世界地图

- area-区域地图

### 3.2 基本设置2

字段 | 描述 | 默认值
--- | --- | ---
AutoRun | 是否开机启动 | false
MoveEnable | 模块是否可以拖动，启用以后模块可以任意拖动 | true
CutLeftBottom | 底部布局左侧是否切掉 | true
CutRightBottom | 底部布局右侧是否切掉 | true
StaticLine | 是否绘制静态定位线，为假则绘制游标十字线 | false
ShowPercent | Y轴是否显示百分比 | false
StepY | Y轴大尺度步长 | 6
CursorHideTime | 用户不操作鼠标自动隐藏鼠标的时间间隔，单位秒 | 5

### 3.3 视频设置

字段 | 描述 | 默认值
--- | --- | ---
VideoFillImage | 视频缩放，拉伸填充整个窗体 | false
VideoCallback | 视频回调，开启后采用painter走GPU绘制视频 | false
VideoPlayAudio | 播放音频，开启后视频同步播放音频 | true
VideoPlayRepeat | 视频循环播放，开启后视频会循环播放 | false
VideoUrl | 视频流地址，视频模块播放的视频地址 | 变动的

### 3.4 颜色配置1

字段 | 描述 | 默认值
--- | --- | ---
ColorMainBg | 主背景颜色 | QColor(4, 7, 38)
ColorPanelBg | 面板背景颜色 | QColor(26, 29, 60)
ColorLine | 十字线定位线颜色 | QColor(255, 0, 0)
ColorLine1 | 线条1颜色 | QColor(0, 176, 180)
ColorLine2 | 线条2颜色 | QColor(32, 159, 223)
ColorLine3 | 线条3颜色 | QColor(255, 192, 0)

### 3.5 颜色配置2

字段 | 描述 | 默认值
--- | --- | ---
ColorTitleBg | 标题栏背景颜色 | QColor(48, 48, 85)
ColorTitleText | 标题栏文字颜色 | QColor(255, 255, 255)
ColorChartBg | 曲线图表背景颜色 | QColor(38, 41, 74)
ColorChartText | 曲线图表文字颜色 | QColor(250, 250, 250)
ColorChartGrid | 曲线图表网格颜色 | QColor(180, 180, 180)

### 3.6 颜色配置3

字段 | 描述 | 默认值
--- | --- | ---
ColorOk | 正常颜色 | QColor(0, 176, 180)
ColorLow | 警戒颜色 | QColor(255, 192, 0)
ColorAlarm | 报警颜色 | QColor(214, 77, 84)
ColorDisable | 禁用背景颜色 | QColor(210, 210, 210)
ColorPercent | 环形百分比背景颜色 | QColor(0, 254, 254)

### 3.7 字体配置

字段 | 描述 | 默认值
--- | --- | ---
MainFont | 全局字号 | 微软雅黑，12
NameFont | 软件名称字号 | 19
LabFont | 加粗标签字号 | 12
DeviceFont | 设备面板字号 | 12
SubTitleFont | 模块子标题栏字号 | 13
TitleFont | 模块标题栏字号 | 15

### 3.8 尺寸配置

字段 | 描述 | 默认值
--- | --- | ---
TitleHeight | 模块标题栏高度 | 23
HeadHeight | 表格表头高度 | 28
RowHeight | 表格行高度 | 25
LayoutSpacing | 布局空隙间隔 | 6
SwitchBtnWidth | 开关按钮宽度 | 65
SwitchBtnHeight | 开关按钮高度 | 26
ScrollWidth | 滚动条宽度 | 15

### 3.9 采集速度

字段 | 描述 | 默认值
--- | --- | ---
IntervalModule1 | 模块1采集间隔，单位毫秒 | 5000
IntervalModule2 | 模块2采集间隔，单位毫秒 | 5100
IntervalModule3 | 模块3采集间隔，单位毫秒 | 5200
IntervalModule4 | 模块4采集间隔，单位毫秒 | 5300
IntervalModule5 | 模块5采集间隔，单位毫秒 | 5400
IntervalModule6 | 模块6采集间隔，单位毫秒 | 5500
IntervalModule7 | 模块7采集间隔，单位毫秒 | 5600
IntervalModule8 | 模块8采集间隔，单位毫秒 | 5700

### 3.10 数据库配置

字段 | 描述 | 默认值
--- | --- | ---
LocalDBType | 本地数据库类型，Sqlite、Mysql等 | Sqlite
LocalDBIP | 本地数据库主机地址 | 127.0.0.1
LocalDBPort | 本地数据库端口 | 3306
LocalDBName | 本地数据库名称 | bigscreen
LocalUserName | 本地数据库用户名 | root
LocalUserPwd | 本地数据库密码，以密文存储 | root

## 4 程序框架

### 4.1 整体结构

整个大屏系统就是由一个个子模块组成，每个子模块都用到了一些自定义控件，再打通数据库采集和网络请求采集等，将采集到的数据设置到对应的模块界面上。

### 4.2 模块说明

主模块 | 说明
--- | ---
3rd | 一些第三方开源的类库，比如图表qcustomplot。
class | 存放系统初始化、样式控制、自定义控件等。
core | 本人一直持续更新完善的通用的类库，比如ffmpeg视频监控。
ui | 所有的界面都分门别类放在这里。

子模块表格

主模块 | 子模块 | 说明
--- | --- | ---
3rd | 3rd_qcustomplot | 大名鼎鼎的第三方开源的图表组件。
class | api | 存放数据库表映射成对应的全局队列数据、通用的辅助函数类。
class | app | 全局配置参数管理类、秘钥管理类、通用函数。
class | usercontrol | 当前系统的自定义控件全部放在这里，其中包括自定义饼图控件、进度仪表盘、百分比仪表盘、环形进度条、三态进度条等控件。
core | core_common | 通用函数，包括通用秘钥、通用导航、通用样式、声音播放、日志记录、运行时间记录等。
core | core_control | 通用自定义控件，很多系统经常用到的控件全部放在这里。
core | core_customplot | 继承自qcustomplot类的自定义图表组件，专为大屏系统定制的各种图表组件。
core | core_db | 数据库集成应用组件，比如数据库管理线程类、数据库清理线程类、数据库采集类、网络请求采集类等。
core | core_form | 通用的用户登录、用户退出、用户管理、数据库配置界面类等。
core | core_echarts | 地图内核，包括了百度echart封装类，区域轮廓数据转换js函数封装类，百度地图封装类等。
core | core_qthelper | 通用的辅助类，包括自定义对话框，全局辅助函数，图形字体等。
core | core_audio | 音频播放和录制，包括音频输入输出设备管理、音频播放、音频录制、音频振幅控件等。
core | core_video | 视频播放核心类，包括了监控画面切换控件、视频回放控件、视频播放组件结构体、视频播放辅助函数、视频解码线程类、视频显示控件类等。
core | core_videobase | 视频相关基类，包括音视频文件保存基类、视频解码基类、视频控件基类、视频悬浮工具栏、视频控件结构体等。
core | core_videoffmpeg | 视频监控内核ffmpeg版本，本系统默认采用的内核。
core | core_videoopengl | opengl封装类，支持打开yuv/nv12文件，绘制yuv/nv12帧数据，一般搭配ffmpeg视频内核显示视频，直接走GPU绘制。
core | core_videohelper | 各种视频控件相关辅助类。
core | core_webview | 通用浏览器控件类，同时支持webkit、wenengine、miniblink三种内核，打通了所有的Qt版本。
ui | frmconfig | 系统设置界面，包括常规设置、数据库设置、采集间隔设置、视频参数设置等。
ui | frmcontrol | 大屏控件演示示例，每个功能演示都是个独立的窗体，方便查看代码学习如何使用。
ui | frmmain | 主界面模块，包括了系统配置界面、大屏主界面、大屏指定分辨率用于截图的主界面、设备面板窗体。
ui | frmmodule | 大屏子模块，包括了产量汇总、当月计划、设备监控、模具进度、负荷分布、送检合格率、品质管理、物料管理、视频监控、大屏地图等。

### 4.4 辅助处理

#### 4.4.1 数据库表映射

将对应的用户表映射到变量队列存储，以便用户登录和整体判断权限等。

#### 4.4.2 通用辅助函数类

这个类就像万能胶一样，在本人写的所有的项目中都有，本类就是将平时常用的一些通用函数都丢在这里，不断完善和持续改进，包括了16进制数据转换、图形字体设置、自定义消息框、错误框、提示框等，集成设置窗体居中显示、设置翻译文件、设置编码、设置延时、设置系统时间等静态方法。

    xxxxxxxxxx2711#ifndef QTHELPER_H2#define QTHELPER_H3
    4#include "globalhead.h"5#include "globalconfig.h"6#include "qtabout.h"7
    8class QtHelper9{10public:11    //获取当前鼠标所在屏幕索引+尺寸12    static int getScreenIndex();13    static QRect getScreenRect(bool available = true);14
    15    //获取桌面宽度高度16    static int deskWidth();17    static int deskHeight();18    static QSize deskSize();19
    20    //居中显示窗体21    //定义标志位指定是以桌面为参照还是主程序界面为参照22    static QWidget *centerBaseForm;23    static void setFormInCenter(QWidget *form);24    static void showForm(QWidget *form);25
    26    //程序文件名称及所在路径27    static QString appName();28    static QString appPath();29
    30    //获取编译器字符串31    static QString getCompilerString();32    //获取uuid33    static QString getUuid();34
    35    //新建目录36    static void newDir(const QString &dirName);37    //通用延时函数 支持Qt4 Qt5 Qt638    static void sleep(int msec);39
    40    //设置编码41    static void setCode(bool utf8 = true);42    //设置字体43    static QFont addFont(const QString &fontFile, const QString &fontName);44    static void setFont(const QString &fontFile = ":/font/DroidSansFallback.ttf",45                        const QString &fontName = QUIConfig::FontName,46                        int fontSize = QUIConfig::FontSize);47    //设置翻译文件48    static void setTranslator();49    static void setTranslator(const QString &qmFile);50
    51    //一次性设置所有包括编码字体翻译等52    static void initAll(bool utf8 = true);53    //初始化main函数最前面执行的一段代码54    static void initMain(bool on = true);55
    56    //16进制字符串转10进制57    static int strHexToDecimal(const QString &strHex);58    //10进制字符串转10进制59    static int strDecimalToDecimal(const QString &strDecimal);60    //2进制字符串转10进制61    static int strBinToDecimal(const QString &strBin);62
    63    //16进制字符串转2进制字符串64    static QString strHexToStrBin(const QString &strHex);65    //10进制转2进制字符串一个字节66    static QString decimalToStrBin1(int decimal);67    //10进制转2进制字符串两个字节68    static QString decimalToStrBin2(int decimal);69    //10进制转16进制字符串,补零.70    static QString decimalToStrHex(int decimal);71
    72    //int转字节数组73    static QByteArray intToByte(int data);74    static QByteArray intToByteRec(int data);75
    76    //字节数组转int77    static int byteToInt(const QByteArray &data);78    static int byteToIntRec(const QByteArray &data);79    static quint32 byteToUInt(const QByteArray &data);80    static quint32 byteToUIntRec(const QByteArray &data);81
    82    //ushort转字节数组83    static QByteArray ushortToByte(ushort data);84    static QByteArray ushortToByteRec(ushort data);85
    86    //字节数组转ushort87    static int byteToUShort(const QByteArray &data);88    static int byteToUShortRec(const QByteArray &data);89
    90    //字符串补全91    static QString getValue(quint8 value);92    //字符串去空格 -1=移除左侧空格 0=移除所有空格 1=移除右侧空格 2=移除首尾空格 3=首尾清除中间留一个空格93    static QString trimmed(const QString &text, int type);94
    95    //异或加密-只支持字符,如果是中文需要将其转换base64编码96    static QString getXorEncryptDecrypt(const QString &value, char key);97    //异或校验98    static uchar getOrCode(const QByteArray &data);99    //计算校验码100    static uchar getCheckCode(const QByteArray &data);101
    102    //CRC校验103    static QByteArray getCrcCode(const QByteArray &data);104
    105    //字节数组与Ascii字符串互转106    static QString byteArrayToAsciiStr(const QByteArray &data);107    static QByteArray asciiStrToByteArray(const QString &data);108
    109    //16进制字符串与字节数组互转110    static QByteArray hexStrToByteArray(const QString &data);111    static QString byteArrayToHexStr(const QByteArray &data);112
    113    //选择文件对话框114    static QString getOpenFileName(const QString &filter = QString(),115                                   const QString &dirName = QString(),116                                   const QString &fileName = QString(),117                                   bool native = false, int width = 900, int height = 600);118    //保存文件对话框119    static QString getSaveFileName(const QString &filter = QString(),120                                   const QString &dirName = QString(),121                                   const QString &fileName = QString(),122                                   bool native = false, int width = 900, int height = 600);123    //选择目录对话框124    static QString getExistingDirectory(const QString &dirName = QString(),125                                        bool native = false, int width = 900, int height = 600);126
    127    //获取文件名,含拓展名128    static QString getFileNameWithExtension(const QString &fileName);129    //获取选择文件夹中的文件130    static QStringList getFolderFileNames(const QStringList &filter);131
    132    //复制文件133    static bool copyFile(const QString &sourceFile, const QString &targetFile);134    //删除文件夹下所有文件135    static void deleteDirectory(const QString &path);136
    137    //从字符串获取IP地址138    static QString getIP(const QString &url);139    //判断是否是IP地址140    static bool isIP(const QString &ip);141    //判断是否是MAC地址142    static bool isMac(const QString &mac);143    //判断是否是合法的电话号码144    static bool isTel(const QString &tel);145    //判断是否是合法的邮箱地址146    static bool isEmail(const QString &email);147
    148    //IP地址字符串与整型转换149    static QString ipv4IntToString(quint32 ip);150    static quint32 ipv4StringToInt(const QString &ip);151
    152    //判断IP地址及端口是否在线153    static bool ipLive(const QString &ip, int port, int timeout = 1000);154    //下载网络文件155    static bool download(const QString &url, const QString &fileName, int timeout = 1000);156    //获取网页所有源代码157    static QByteArray getHtml(const QString &url, int timeout = 1000);158
    159    //获取本机公网IP地址160    static QString getNetIP(const QString &html);161    //获取本机IP162    static QString getLocalIP();163    //获取本机IP地址集合164    static QStringList getLocalIPs();165    //Url地址转为IP地址166    static QString urlToIP(const QString &url);167
    168    //设置边框阴影169    static void setFormShadow(QWidget *widget, QLayout *layout, const QString &color, int margin, int radius);170    //立即更新所有阴影边框颜色比如换肤的时候需要用到171    static void setFormShadow(const QString &color);172
    173    //设置无边框窗体174    static void setFramelessForm(QWidget *widgetMain,175                                 bool tool = false, bool top = false,176                                 bool menu = true, bool x11 = false);177    static void setFramelessForm(QWidget *widgetMain, QWidget *widgetTitle,178                                 QLabel *labIco, QPushButton *btnClose,179                                 bool tool = true, bool top = true,180                                 bool menu = false, bool x11 = true);181
    182    //通用弹出框183    static int showMessageBox(const QString &info, int type = 0, int timeout = 0, bool exec = false);184    //弹出消息框185    static void showMessageBoxInfo(const QString &info, int timeout = 0, bool exec = false);186    //弹出错误框187    static void showMessageBoxError(const QString &info, int timeout = 0, bool exec = false);188    //弹出询问框189    static int showMessageBoxQuestion(const QString &info);190
    191    //弹出右下角信息框192    static void showTipBox(const QString &title, const QString &tip, bool fullScreen = false,193                           bool center = true, int timeout = 0);194    //隐藏右下角信息框195    static void hideTipBox();196
    197    //弹出输入框198    static QString showInputBox(const QString &title, int type = 0, int timeout = 0,199                                const QString &placeholderText = QString(), bool pwd = false,200                                const QString &defaultValue = QString());201    //弹出日期选择框202    static int showDateSelect(QString &dateStart, QString &dateEnd, const QString &format = "yyyy-MM-dd");203
    204    //弹出关于对话框205    static void showAboutInfo(const AboutInfo &info, int timeout = 0, bool exec = false);206    //弹出中间提示框207    static void showSplashInfo(const QString &info, int fontSizeMain, int fontSizeSub, int timeout = 0, bool exec = false);208    //隐藏中间提示框209    static void hideSplashInfo();210
    211    //获取等比例缩放过的图片212    static QPixmap getPixmap(QWidget *widget, const QPixmap &pixmap, bool scale = false);213    static void setPixmap(QLabel *label, const QString &file, bool scale = false);214    //设置logo图片支持 资源文件+本地图片+图形字体+svg自动变色 等多种形式215    static void setLogo(QLabel *label, const QString &file,216                        int width, int height, int offset = 20,217                        const QString &oldColor = QString(), const QString &newColor = QString());218
    219    //初始化数据库220    static void initDb(const QString &dbName);221    //初始化文件,不存在则拷贝222    static void initFile(const QString &sourceName, const QString &targetName);223    //检查ini配置文件224    static bool checkIniFile(const QString &iniFile);225
    226    //设置图标到按钮227    static void setIconBtn(QAbstractButton *btn, const QString &png, int icon);228
    229    //写入消息到额外的的消息日志文件230    static void writeInfo(const QString &info, bool needWrite = false, const QString &filePath = "log");231    static void writeError(const QString &info, bool needWrite = false, const QString &filePath = "log");232
    233    //设置系统时间234    static void setSystemDateTime(const QString &year, const QString &month, const QString &day,235                                  const QString &hour, const QString &min, const QString &sec);236    //设置开机自启动237    static void runWithSystem(const QString &name, const QString &path, bool autoRun = true);238
    239    //获取内置颜色集合240    static QList<QColor> getColorList();241    static QStringList getColorNames();242    //随机获取颜色集合中的颜色243    static QColor getRandColor();244
    245    //初始化随机数种子246    static void initRand();247    //获取随机小数248    static float getRandFloat(float min, float max);249    //获取随机数,指定最小值和最大值250    static double getRandValue(int min, int max, bool contansMin = false, bool contansMax = false);251    //获取范围值随机经纬度集合252    static QStringList getRandPoint(int count, float mainLng, float mainLat, float dotLng, float dotLat);253
    254    //初始化表格255    static void initTableView(QTableView *tableView, int rowHeight = 25,256                              bool headVisible = false, bool edit = false,257                              bool stretchLast = true);258    //打开文件带提示框259    static void openFile(const QString &fileName, const QString &msg);260    //导出和打印数据提示框261    static bool checkRowCount(int rowCount, int maxCount, int warnCount);262
    263    //插入消息264    static QString appendMsg(QTextEdit *textEdit, int type, const QString &data,265                             int maxCount, int &currentCount,266                             bool clear = false, bool pause = false);267    //首尾截断字符串显示268    static QString cutString(const QString &text, int len, int left, int right, const QString &mid = "...");269};270
    271#endif // QTHELPER_H

#### 4.4.3 初始化及辅助

名称 | 说明
--- | ---
appconfig | 配置参数类，整个系统的配置参数存放在ini文件中，跨平台，所有参数都对应一个变量，读取配置参数的时候将值赋值给变量，写入的时候将变量值写入到配置文件。
appfun | 辅助函数类，比如重启，获取随机数、从多个数组中取出最大值等。
appinit | 程序初始化类，在main函数中，会先执行这个初始化的类，比如初始化皮肤、字体、数据库、样式等操作，这些都是要优先在窗体加载前执行的，执行完毕以后再打开窗体主界面。

#### 4.4.4 自定义控件

名称 | 说明
--- | ---
customchart | 自定义图表控件
custompie | 自定义饼状图，纯painter绘制，弥补qchart组件不支持qt4等版本。
customtitlebar | 自定义模块标题栏
gaugepercent | 百分比仪表盘
gaugespeed | 速度仪表盘
progressring | 环形进度条
progressthree | 三态进度条
switchbutton | 开关按钮

### 4.5 内核模块

#### 4.5.1 通用自定义控件

名称 | 说明
--- | ---
bottomwidget | 通用底部状态栏控件，可以设置软件名称、版本号、运行时间等。
colorcombobox | 颜色下拉框控件，在系统设置中有。
cpumemorylabel | CPU和内存使用情况标签控件，主界面右上角显示。
customtitlebar | 停靠窗体自定义标题栏控件。
devicebutton | 设备按钮控件，比如图片地图模块中用到，可设置不同的图标样式和状态等，双击发出信号进行相应处理比如弹出对应视频预览等。
framelesswidget | 无边框窗体管理类，无边框拖动+拉伸，主界面就用到了这个类。
lcddatetime | 软件右上角显示时间的控件。
panelwidget | 面板容器控件，主界面子模块表格消息，就用到此控件，用于将一堆widget放到此容器进行管理，自动形成滚动条等。
switchbutton | 开关按钮控件，在系统设置中存在大量该控件。
xslider | 滑动条控件，在原有滑动条基础上增加了鼠标按下立即定位等。

#### 4.5.2 图表组件内核

名称 | 说明
--- | ---
customplot | 自定义图表组件类。
customplotbarh | 自定义形状-横向柱状图。
customplotbarv | 自定义形状-垂直柱状图。
customplothead | 当前组件通用头文件。
customplothelper | 当前组件通用辅助函数文件。
customplotline | 自定义形状-平滑曲线图。
customplottracer | 自定义图层绘制十字线，也叫游标，定位线。
smoothcurve | 平滑曲线算法类，内置多种平滑算法，可以自行增加其他算法。

#### 4.5.3 数据库应用内核

本系统只用到了该类库中的dbconnthread、dbhttpthread。 dbconnthread：封装的一个通用的数据库通信类，支持sqlite、mysql、PostgreSQL等数据库，功能包括了数据库的打开和关闭，线程执行sql语句队列信号发出执行结果等，支持重连。 dbhttpthread：本系统除了支持数据库采集模式以外，还支持发送http网络请求的方式来采集数据，请求中带对应要查询的表，字段等信息，这个类就是专门的请求类，请求结果自动过滤运算并信号发出去，返回数据的信号和数据库采集的信号完全一致，使得主界面关联到同一个槽函数就能正常工作。

名称 | 说明
--- | ---
dbcleanthread | 自动清理数据线程类。
dbconnthread | 数据库通信管理线程类。
dbdelegate | 自定义委托全家桶，包括复选框、下拉框、密码框、按钮等。
dbhead | 当前组件通用头文件。
dbhelper | 各种数据库应用函数封装，比如初始化数据库、执行sql语句等。
dbhttpthread | 网络请求数据采集类。
dbpage | 数据库通用翻页类。
dbpagemodel | 数据库翻页类数据模型。
navpage | 分页导航控件。

#### 4.5.4 大屏地图内核

名称 | 说明
--- | ---
echartjs | echart模块中用到的json文件转js文件，获取js文件中的名字和经纬度等处理。
echarts | echart封装类，可加载仪表盘、闪烁点图、迁徙图、世界地图、区域地图等，每个点可自定义颜色和提示信息等。

#### 4.5.5 视频监控内核

视频组件继承和依赖关系说明：

1. videobase是基类组件，video是视频播放组件，依赖基类组件，videoffmpeg是具体的内核实现组件，依赖视频播放组件。

2. video组件中的videothread解码线程类继承自videobase基类组件中的abstractvideothread。

3. video组件中的videowidgetx视频显示类继承自videobase基类组件中的abstractvideowidget。

4. videoffmpeg组件中的ffmpegthread继承自video组件中的videothread。

5. videoffmpeg组件中的ffmpegsave继承自videobase组件中的abstractsavethread。

6. 按照此规则还有其他内核比如vlc组件中的vlcthread也是继承自videothread，mpv组件中的mpvthread也是继承自videothread。这样新增一种内核只要具体实现部分处理函数即可应用整个视频框架。

7. 通过多层基类继承关系，使得动态挂载任意解码内核极为方便。

8. 为何在video视频组件的基础上还要提炼一个videobase基类组件？因为该基类组件还可以提供给camera本地摄像头采集组件使用，基类中的变量、函数、处理逻辑几乎一致，但是又有特殊性，所以需要分开再提炼出videobase基类。

##### 4.5.5.1 视频播放组件

名称 | 说明
--- | ---
videobox | 监控画面切换控件，将所有通道切换处理全部集中到一个类，通用异形布局切换函数，可以参考进行自定义异形布局，通道布局切换发出信号通知，支持自定义子菜单布局内容。
videohelper | 视频相关辅助函数，比如根据url地址取出ip地址、校验网络地址是否可达、检查地址是否正常、根据地址获取本地摄像头参数、获取本地桌面采集参数、创建视频采集类、对采集线程设置参数等。
videoutil | 视频相关辅助函数，加载视频内核、视频地址、视频模式、解码策略、编码策略、硬件加速、通信协议、缓存时间、读取超时等。
videomanage | 视频线程管理类，全局单例，将所有视频控件发给此类管理，负责挨个打开视频、应用录像计划等。
videoplayback | 视频回放控件，支持多个通道，显示每个通道对应的视频段。
videostruct | 视频播放组件结构体定义类，包括解析内核枚举值、视频类型枚举值、解码策略枚举值、视频采集参数结构体。
videotask | 视频任务线程类，全局单例，可以随时插入一些视频相关的任务进行处理，比如vlc录制视频后需要重命名文件，mpv内核关闭视频后鼠标指针打圈圈需要复位。
videothread | 视频解码线程类，内置了共享解码线程处理逻辑，可以打开视频、关闭视频、设置视频宽高比例、获取文件总时长、获取媒体信息、获取和设置播放位置、获取和设置播放速度、获取和设置音量大小、获取和设置静音状态等。
videourl | 视频地址相关静态函数，可以读取和写入地址到文本文件，用作历史记录，内置了各种类型（rtsp、http、音频文件、视频文件、网络文件、本地摄像头）的测试音视频地址集合。
videowidgetx | 视频播放控件，一个控件对应一个解码线程，提供播放成功、播放结束、收到截图、工具栏按钮单击等处理，提供开始播放、停止播放、暂停播放、继续播放、抓拍截图、开始录制、暂停录制、停止录制等接口。

##### 4.5.5.2 视频基类组件

名称 | 说明
--- | ---
abstractsavethread | 音视频存储基类，可以设置需要保存的音视频文件类型，比如音频文件类型有pcm、wav、aac，视频文件类型有yuv、h264、mp4，提供开始保存、暂停保存、停止保存等接口。
abstractvideosurface | 视频回调基类，用于Qt中的QCamera和QMedia类播放后拿到回调视频数据，这样可以取到一张张图片。
abstractvideothread | 视频解码线程基类，摄像头采集线程和视频采集线程都继承自此类，将各种公用的变量、函数、接口、信号槽全部放在基类，包括了停止线程标志位、打开是否成功标志位、暂停采集标志位、开始截图标志位、正在录制标志位，提供了虚函数开始播放、停止播放、暂停播放、继续播放、抓拍截图、截图完成、开始录制、暂停录制、停止录制等，提供写入视频数据到文件、写入音频数据到文件槽函数。
abstractvideowidget | 视频显示控件基类，
audioplayer | 音频播放类，空的，纯粹为了在没有Qt音频播放类QAudioOutput的时候使用，有些Qt版本或者嵌入式板子环境未必有这个类，但是又不能影响整个组件的运行，于是定义了空的类，函数正常调用但是不做任何处理。
bannerwidget | 悬浮工具栏控件，可以设置各种颜色、按钮图标集合、按钮名称集合、按钮提示信息集合等，悬浮条位置支持上下左右四个方位。
filterhelper | 滤镜相关辅助类，传入旋转角度获取旋转滤镜字符串、根据标签信息获取对应滤镜字符串、根据图形信息获取对应滤镜字符串、转换滤镜字符串到ffmpeg格式、传入标签队列和图形队列获取滤镜字符串。此类主要给ffmpeg内核、qtav内核、mdk内核使用。
urlhelper | 通用地址辅助类，设备厂家类型结构体、地址参数结构体，各个厂家的实时及回放视频流字符串函数，根据url播放地址获取地址对应的各种信息比如IP地址和端口等。
imagelabel | 图片标签控件，多线程绘制传入的图片，性能比setpixmap更优。
widgethelper | 窗体相关辅助函数，包括传入图片尺寸和窗体区域及边框大小返回居中区域(scaleMode: 0-自动调整 1-等比缩放 2-拉伸填充)、绘制矩形区域比如人脸框、绘制点集合多边形路径比如三角形、绘制路径集合、显示截图预览等。

##### 4.5.5.3 视频解码组件

名称 | 说明
--- | ---
ffmpegfilter | 滤镜相关静态函数，传入滤镜结构体数据获取滤镜字符串，初始化滤镜、释放滤镜数据。在ffmpegthread中调用。
ffmpeghelper | 相关辅助函数，包括打印输出各种信息、打印设备列表和参数、格式枚举值转字符串、视频帧旋转、通用硬解码、通用软解码、通用软编码、释放数据帧数据包、超时回调(包括打开超时和读取超时)等。
ffmpegsave | 视频存储类，用于保存h264和mp4文件，同时也可用于推流。
ffmpegsync | 音视频同步线程类，解码后的音视频数据发给本类进行时间同步处理，采用的外部时钟同步策略。音视频播放的进度也在本类中。
ffmpegthread | 视频解码线程核心，从打开地址、分配解码器、初始化参数、取出音视频数据解码、关闭并释放资源等都在本类实现。
ffmpegutil | 辅助函数，比如打印输出编码解码信息、打印编码器的相关参数、打印设备列表和参数、获取输入输出设备名称集合、视频帧旋转等。

##### 4.5.5.4 视频绘制组件

名称 | 说明
--- | ---
openglinclude | 当前组件头文件。
nv12glwidget | 空类，用于没有opengl的Qt版本中保证程序能够继续运行。
nv12openglwidget | 继承自QOpenGLWidget的NV12格式OPENGL绘制窗体。
yuvglwidget | 空类，用于没有opengl的Qt版本中保证程序能够继续运行。
yuvopenglwidget | 继承自QOpenGLWidget的YUV格式OPENGL绘制窗体。

#### 4.5.6 通用浏览器内核

名称 | 说明
--- | ---
webcore.pri | 通用的根据不同的Qt版本、不同的编译器环境、不同的操作系统，加载对应的浏览器内核模块和定义不同的变量。
miniblink | miniblink封装处理类。
webhelper | 经纬度转换、获取小数点经纬度值等常用处理函数。
webjsdata | 通用的浏览器控件和Qt程序交互数据中转类。
webview | 通用浏览器控件，支持webkit、webengine、miniblink。

### 4.6 窗体界面

#### 4.6.1 大屏控件演示

名称 | 说明
--- | ---
frmcontrol | 大屏控件演示主界面，负责加载所有控件演示子窗体。
frmplotarea | 曲线面积图。
frmplotbarh | 横向柱状图。
frmplotbarhs | 横向分组图。
frmplotbars | 柱状堆积图。
frmplotbarv | 标准柱状图。
frmplotbarvs | 柱状分组图。
frmplotdata | 数据转曲线。
frmplotnormal | 标准曲线图。
frmplotsin | 模拟曲线图。
frmplotsmooth | 平滑曲线图。

#### 4.6.2 大屏模块演示

名称 | 说明
--- | ---
frmmodule | 大屏子模块演示主界面，负责加载所有子模块界面。
frmmodule1 | 年度产量汇总。
frmmodule2 | 当月计划达成率。
frmmodule3 | 设备监控。
frmmodule4 | 模具进度。
frmmodule5 | 负荷分布。
frmmodule6 | 送检一次合格率。
frmmodule7 | 品质管理。
frmmodule8 | 物料管理。
frmmodule9 | 备用模块。
frmmodulecenter | 中心窗体。
frmmodulemap | 大屏地图。
frmmodulevideo | 视频监控。

#### 4.6.3 主界面模块

名称 | 说明
--- | ---
frmdevice | 设备面板界面。
frmmain | 大屏主界面。
frmmain2 | 以特定分辨率设置的大屏主界面用于截图。

## 5 效果图

### 5.1 布局方案

#### 5.1.1 自定义布局1

#### 5.1.2 自定义布局2

#### 5.1.3 自定义布局3

#### 5.1.4 自定义布局4

#### 5.1.5 自定义布局5

#### 5.1.6 自定义布局6

#### 5.1.7 自定义布局7

#### 5.1.8 自定义布局8

### 5.2 配色方案

#### 5.2.1 紫色风格

#### 5.2.2 蓝色风格

#### 5.2.3 深蓝风格

#### 5.2.4 黑色风格

### 5.3 模块效果图

#### 5.3.1 产量汇总

#### 5.3.2 当月计划

#### 5.3.3 设备监控

#### 5.3.4 模具进度

#### 5.3.5 负荷分布

#### 5.3.6 送检合格

#### 5.3.7 品质管理

#### 5.3.8 物料管理

#### 5.3.9 视频监控

#### 5.3.10 大屏地图

##### 5.3.10.1闪烁效果

##### 5.3.10.2 迁徙效果

##### 5.3.10.3 世界地图

##### 5.3.10.4 区域地图

#### 5.3.11 系统设置

### 5.4 控件效果图

#### 5.4.1 标准曲线

#### 5.4.2 曲线面积

#### 5.4.3 模拟曲线

#### 5.4.4 标准柱状

#### 5.4.5 柱状堆积

#### 5.4.6 柱状分组

#### 5.4.7 横向柱状

#### 5.4.8 横向分组

#### 5.4.9 数据曲线

#### 5.4.10 平滑曲线

#### 5.4.11 多坐标轴

#### 5.4.12 多曲线图

### 5.5 数据库效果图

#### 5.5.1 数据库-sqlite

#### 5.5.2 数据库-mysql

#### 5.5.3 数据库-sqlserver

#### 5.5.4 数据库-postgresql

#### 5.5.5 数据库-oracle

#### 5.5.6 数据库-kingbase

人大金仓数据库-kingbase，其实就是postgresql数据库改的，配置文件都一样，所以可以用连接postgresql数据库的方式进行处理。

#### 5.5.7 数据库-远程访问

#### 5.5.8 数据库-odbc

ODBC连接字符串格式如上图所示。

### 5.6 各系统运行图

#### 5.6.1 windows-mingw

#### 5.6.2 windows-msvc

#### 5.6.3 linux-ubuntu

#### 5.6.4 linux-uos

#### 5.6.5 linux-kylin

#### 5.6.6 linux-neokylin

#### 5.6.7 linux-fedoar

#### 5.6.8 unix-mac