综艺
uicomponent(AI主导·全流程自动化:工业老系统UI改造实战(OoderA2UI落地))



在物联网浪潮初涌的工业数字化转型初期,工业设备的配置管理与流程管控需求日益迫切,一批基于桌面端架构的工业控制工具应运而生。这一时期,类似华为早期网络设备配置工具、工业控制硬件调试平台等诸多工业级工具,均采用成熟的桌面端架构构建,这类工具凭借稳定的本地运行性能、强大的硬件适配能力,成为当时工业场景下的主流选择。本文聚焦的核心系统,便是这一背景下诞生的工业流程与设备配置核心工具,承载着设备参数配置、业务流程编排的关键使命,广泛应用于各类物联网工业场景。该系统本质上是典型的桌面端工业工具,深度集成了大量设备硬件适配与图形化配置功能,然而随着工业互联网的深度发展,其逐渐陷入“改造成本高、跨端适配难、迭代效率低”的困境。不少企业尝试对这类桌面端工业工具进行升级改造,却普遍面临“理论可行、落地卡壳”的难题:要么全盘重写风险过高,要么新旧系统集成不畅,要么改造后运维成本反升。

本文以“AI主导、人工校验”为核心原则,聚焦OoderA2UI框架落地工业软件CS端改造,全程贯穿UI自动化转换与设备/PC/移动端三段式适配逻辑。从改造背景、AI主导的技术架构、全流程自动化落地步骤,到绘图改造突破与成果价值,全流程呈现可复用的实操方案,明确AI负责技术实现、人工聚焦业务校验的分工,最大化改造效率与稳定性。


ooder可视化工具


一、改造背景与实战筹备:摸清现状,定好方向(必做清单)

工业软件改造的核心风险是“业务中断”与“投入打水漂”,因此AI主导的改造落地前,需完成3项AI前置扫描+人工校验筹备工作,而非直接上手编码:AI负责全量扫描梳理,人工仅聚焦业务逻辑校验与核心需求确认。

1.1 原有系统现状:业务复杂度的指数级增长

随着业务发展,基于JAWE的原有系统呈现出极其复杂的特征,主要体现在数据维度爆炸、视图规模庞大和代码量激增三个方面:

数据维度爆炸:

  • 支持数千种设备类型配置
  • 流程节点属性多达数百个
  • 每个流程节点可能有10+个配置面板
  • 覆盖表单、按钮、权限、任务、附件、服务、命令等多个维度

视图规模统计:

视图类别

数量

典型代表

复杂度

流程级视图

25+

ProcessFormView, ProcessTableView

⭐⭐⭐⭐

活动级视图

60+

ActivityCommandView, ActivityServiceView

⭐⭐⭐⭐⭐

路由级视图

15+

RouteConfigView

⭐⭐⭐

表单相关视图

30+

FormListView, FormFieldView

⭐⭐⭐⭐

配置工具视图

20+

ConfigTool, FormulaEditor

⭐⭐⭐

总计

150+

-

-

代码规模:

  • Plugin实现类:80+
  • XMLPanel实现类:50+
  • View/Panel组件:100+
  • UI布局配置文件:200+(XML格式)
  1. AI全量扫描视图资产:自动识别所有CS端视图(设备配置页、流程管控台等),按“核心必保”“可优化”“可替代”自动打标,人工仅需校验打标准确性;
  2. AI采集痛点数据:自动统计每个视图代码量、UI占比、维护频率、跨端需求,生成可视化痛点报告,人工仅确认数据真实性;
  3. AI预适配校验:自动识别存量系统数据库类型、接口协议(Modbus、OPC UA等)、第三方依赖,输出适配可行性报告,人工仅审核集成要求。

改造前核心痛点:维护地狱——每个视图 = XML配置 + Java类 + Swing组件绑定 + 数据绑定;修改一个字段 = 改4个地方;新增一个属性 = 牵一发动全身。AI主导改造的核心目标:通过UI自动化转换解决上述痛点,人工仅负责业务逻辑校验,实现“AI提效、人工保准”。

1.2 技术选型实操:OoderUI的破局之路与适配验证

OoderA2UI是AI主导UI改造的核心框架,核心理念是“AI解析→自动化转换→注解声明→多端渲染”,通过AI全流程主导UI自动化转换,人工仅负责业务逻辑校验,恰好解决原有系统核心痛点。无需纠结理论优劣,AI可自动完成架构适配验证,人工仅确认验证结果:

OoderUI架构设计:

采用三层架构设计,实现UI与业务逻辑解耦:





核心注解体系(改造核心工具):

  • @FormAnnotation - 表单容器注解:定义表单模式、行列布局等全局属性
  • @FieldAnnotation - 字段注解:声明组件类型、显示标签、默认值等字段属性
  • @TabsAnnotation & @TabItemAnnotation - 标签页注解:定义Tab容器属性与单个Tab页配置
  • @UIAnnotation - UI布局注解:指定组件停靠方式等布局规则

3个关键适配测试:

  • 协议兼容性测试:AI自动对接存量系统核心设备/数据库,适配现有工业协议(Modbus TCP、OPC UA等),自动校验数据采集延迟(≤100ms工业级标准),人工仅确认测试结果;
  • 核心视图迁移测试:AI自动选取中等复杂度视图(如含3个Tab页的参数配置页),完成注解式重构,自动输出改造前后开发效率对比报告(代码量、开发周期),人工仅校验重构准确性;
  • 跨端渲染测试:AI自动将重构视图渲染至PC端(JavaFX)、Web端(React)、移动端(Flutter),自动校验界面一致性与流畅度,人工仅确认交互体验。

1.3 BPD视图组件与ooderUI对应关系映射表

本映射表为BPD(Business Process Designer)现有视图组件向ooderUI组件的转换提供标准化依据,严格遵循ooderUI注解规范,明确组件映射规则、枚举转换标准及实操规范,保障转换过程的一致性与准确性。转换过程暂不考虑国际化问题,必要枚举类型按ooderUI规范统一转换。

1.3.1 核心组件映射

1. 基础面板组件

BPD组件

ooderUI组件

ooderUI注解

主要属性映射

XMLPanel

基础面板

@PanelFormAnnotation

borderType=inset, toggle=true

NewXMLPanel

基础面板

@PanelFormAnnotation

borderType=inset, toggle=true

XMLControlPanel

控制面板

@PanelFormAnnotation

caption="控制面板"

NewXMLControlPanel

控制面板

@PanelFormAnnotation

caption="控制面板"

2. 文本输入组件

BPD组件

ooderUI组件

ooderUI注解

主要属性映射

XMLTextPanel

单行文本框

@FormAnnotation

mode=write, defaultLabelWidth=150

XMLFORMTextPanel

表单文本框

@FormAnnotation

mode=write, defaultLabelWidth=150

XMLMultiLineTextPanel

多行文本框

@FormAnnotation

mode=write, defaultLabelWidth=150

XMLMultiLineTextButtonPanel

带按钮的多行文本框

@FormAnnotation

mode=write, defaultLabelWidth=150

3. 选择组件

BPD组件

ooderUI组件

ooderUI注解

主要属性映射

XMLComboPanel

下拉选择框

@FormAnnotation

mode=write

NewXMLComboPanel

下拉选择框

@FormAnnotation

mode=write

XMLComboChoicePanel

下拉选择面板

@PanelFormAnnotation

caption="选择面板"

XMLComboButtonPanel

带按钮的下拉选择框

@FormAnnotation

mode=write

XMLRadioPanel

单选按钮组

@FormAnnotation

mode=write

XMLRadioChoicePanel

单选选择面板

@PanelFormAnnotation

caption="单选面板"

4. 列表组件

BPD组件

ooderUI组件

ooderUI注解

主要属性映射

XMLListPanel

列表组件

@FormAnnotation

mode=write

XMLListChoicePanel

列表选择面板

@PanelFormAnnotation

caption="列表选择面板"

XMLListControlPanel

列表控制面板

@PanelFormAnnotation

caption="列表控制面板"

XMLListChoiceControlPanel

列表选择控制面板

@PanelFormAnnotation

caption="列表选择控制面板"

5. 表格组件

BPD组件

ooderUI组件

ooderUI注解

主要属性映射

XMLTablePanel

表格组件

@GridAnnotation

borderType=none

NewXMLTablePanel

表格组件

@GridAnnotation

borderType=none

XMLTableControlPanel

表格控制面板

@PanelFormAnnotation

caption="表格控制面板"

NewXMLTableControlPanel

表格控制面板

@PanelFormAnnotation

caption="表格控制面板"

ErrTablePanel

错误表格组件

@GridAnnotation

borderType=none, background="#FFF0F0"

6. 选项卡组件

BPD组件

ooderUI组件

ooderUI注解

主要属性映射

XMLTabbedPanel

选项卡组件

@TabsAnnotation

barLocation=top, borderType=none

TabbedPanel

选项卡组件

@TabsAnnotation

barLocation=top, borderType=none

7. 分组组件

BPD组件

ooderUI组件

ooderUI注解

主要属性映射

XMLGroupPanel

分组组件

@PanelFormAnnotation

caption="分组面板"

NewXMLGroupPanel

分组组件

@PanelFormAnnotation

caption="分组面板"

8. 树形结构组件

BPD组件

ooderUI组件

ooderUI注解

主要属性映射

baseTreePanel

基础树形组件

@TreeAnnotation

size=280, singleOpen=false

ServiceTreePanel

服务树形组件

@TreeAnnotation

size=280, singleOpen=false

XMLComTreePanel

组件树形组件

@TreeAnnotation

size=280, singleOpen=false

XMLIOTServiceTreePanel

IoT服务树形组件

@TreeAnnotation

size=280, singleOpen=false

XMLEnumsTreePanel

枚举树形组件

@TreeAnnotation

size=280, singleOpen=false

9. 公式编辑器组件

BPD组件

ooderUI组件

ooderUI注解

主要属性映射

XMLFormulaPanel

公式编辑面板

@PanelFormAnnotation

caption="公式编辑面板"

XMLFormulaDisplayPanel

公式显示面板

@PanelFormAnnotation

caption="公式显示面板"

XMLFormulaControlPanel

公式控制面板

@PanelFormAnnotation

caption="公式控制面板"

XMLDefaultFormulaPanel

默认公式面板

@PanelFormAnnotation

caption="默认公式面板"

XMLCustomFormulaPanel

自定义公式面板

@PanelFormAnnotation

caption="自定义公式面板"

10. 特殊组件

BPD组件

ooderUI组件

ooderUI注解

主要属性映射

XMLexpressionEditPanel

表达式编辑面板

@PanelFormAnnotation

caption="表达式编辑面板"

XMLLocationPanel

位置选择面板

@PanelFormAnnotation

caption="位置选择面板"

XMLDataTypesPanel

数据类型面板

@PanelFormAnnotation

caption="数据类型面板"

XMLComplexContentPanel

复杂内容面板

@PanelFormAnnotation

caption="复杂内容面板"

XMLActualParametersListControlPanel

实际参数列表面板

@PanelFormAnnotation

caption="实际参数列表面板"

1.3.2 枚举类型转换

1. 布局相关枚举

BPD枚举

ooderUI枚举

转换说明

XMLPanel.GRID_LAYOUT

FormLayModeType.grid

网格布局

XMLPanel.BOX_LAYOUT

FormLayModeType.box

盒式布局

2. 对齐方式枚举

BPD枚举

ooderUI枚举

转换说明

SwingConstants.LEFT

HAlignType.left

左对齐

SwingConstants.RIGHT

HAlignType.right

右对齐

SwingConstants.CENTER

HAlignType.center

居中对齐

SwingConstants.TOP

VAlignType.top

顶部对齐

SwingConstants.BOTTOM

VAlignType.bottom

底部对齐

3. 边框类型枚举

BPD枚举

ooderUI枚举

转换说明

BorderFactory.createLineBorder()

BorderType.line

线边框

BorderFactory.createTitledBorder()

BorderType.title

标题边框

BorderFactory.createEmptyBorder()

BorderType.none

无边框

BorderFactory.createEtchedBorder()

BorderType.etch

蚀刻边框

BorderFactory.createRaisedBevelBorder()

BorderType.raised

凸起边框

BorderFactory.createLoweredBevelBorder()

BorderType.lowered

凹陷边框

4. 选择模式枚举

BPD枚举

ooderUI枚举

转换说明

ListSelectionModel.SINGLE_SELECTION

SelModeType.single

单选模式

ListSelectionModel.MULTIPLE_INTERVAL_SELECTION

SelModeType.multiple

多选模式

1.3.3 转换规范

1. 注解使用规范

  1. 所有组件类必须使用对应的ooderUI注解标记
  2. 注解属性值必须使用双引号包裹
  3. 组件名称必须遵循驼峰命名法,首字母小写
  4. 组件标题必须使用简洁明了的中文

2. 组件命名规范

组件类型

命名规则

示例

面板组件

ooder + 功能 + Panel

ooderTextPanel

表单组件

ooder + 功能 + Form

ooderTextForm

表格组件

ooder + 功能 + Grid

ooderDataGrid

树形组件

ooder + 功能 + Tree

ooderServiceTree

选项卡组件

ooder + 功能 + Tabs

ooderConfigTabs

3. 枚举转换规范

  1. 所有枚举类型必须按照ooderUI规范重新定义
  2. 枚举名称必须清晰表达枚举值的含义
  3. 枚举值必须使用大写字母,单词间用下划线分隔
  4. 枚举必须包含value和label两个属性,分别对应枚举值和显示名称

1.3.4 转换示例

1. XMLPanel转换示例

转换前

@BPDView(name = "xmlPanel", title = "XML基础面板", type = "panel")public class XMLPanel extends JPanel {    public static int GRID_LAYOUT = 0;    public static int BOX_LAYOUT = 1;        private XMLElement myOwner;    private String title;        // 构造函数和方法实现}

复制

转换后

@BPDView(name = "ooderXmlPanel", title = "XML基础面板", type = "panel")public class OoderXMLPanel extends baseFormPanel {    @BPDField(name = "xmlElement", label = "XML元素", type = "object", required = true)    private XMLElement xmlElement;        @BPDField(name = "title", label = "面板标题", type = "string", required = false)    private String title;        @BPDField(name = "layout", label = "布局类型", type = "integer", required = false, defaultValue = "1")    private int layout = BOX_LAYOUT;        @BPDField(name = "isVertical", label = "是否垂直布局", type = "boolean", required = false, defaultValue = "true")    private boolean isVertical = true;        @BPDField(name = "hasBorder", label = "是否有边框", type = "boolean", required = false, defaultValue = "true")    private boolean hasBorder = true;        // 布局常量    public static final int GRID_LAYOUT = 0;    public static final int BOX_LAYOUT = 1;        // 构造函数和方法实现}

复制

2. XMLGroupPanel转换示例

转换前

@BPDView(name = "xmlGroupPanel", title = "XML分组面板", type = "group")public class XMLGroupPanel extends XMLPanel {    @BPDField(name = "elements", label = "面板元素", type = "array", required = true)    private Object[] elements;        @BPDField(name = "isVertical", label = "是否垂直布局", type = "boolean", required = false, defaultValue = "true")    private boolean isVertical;        // 构造函数和方法实现}

复制

转换后

@BPDView(name = "ooderGroupPanel", title = "分组面板", type = "group")public class OoderGroupPanel extends baseFormPanel {    @BPDField(name = "xmlElement", label = "XML元素", type = "object", required = true)    private XMLElement xmlElement;        @BPDField(name = "panels", label = "子面板列表", type = "array", required = true)    private baseFormPanel[] panels;        @BPDField(name = "title", label = "分组标题", type = "string", required = false)    private String title;        @BPDField(name = "isVertical", label = "是否垂直布局", type = "boolean", required = false, defaultValue = "true")    private boolean isVertical = true;        @BPDField(name = "hasBorder", label = "是否有边框", type = "boolean", required = false, defaultValue = "true")    private boolean hasBorder = true;        @BPDField(name = "layout", label = "布局类型", type = "integer", required = false, defaultValue = "1")    private int layout = OoderXMLPanel.BOX_LAYOUT;        // 构造函数和方法实现}

复制

3. XMLTabbedPanel转换示例

转换前

@BPDView(name = "xmlTabbedPanel", title = "XML选项卡面板", type = "tabbed")public class XMLTabbedPanel extends XMLPanel {    @BPDField(name = "tabbedPane", label = "选项卡组件", type = "component", required = true)    private JTabbedPane tabbed;        // 组件实现}

复制

转换后

@BPDView(name = "ooderTabbedPanel", title = "选项卡面板", type = "tabbed")public class OoderTabbedPanel extends baseFormPanel {    @BPDField(name = "xmlElement", label = "XML元素", type = "object", required = true)    private XMLElement xmlElement;        @BPDField(name = "panels", label = "选项卡面板列表", type = "array", required = true)    private baseFormPanel[] panels;        @BPDField(name = "tabbedPane", label = "选项卡组件", type = "component", required = true)    private JTabbedPane tabbedPane;        @BPDField(name = "tabPlacement", label = "选项卡位置", type = "integer", required = false, defaultValue = "1")    private int tabPlacement = JTabbedPane.TOP;        // 组件实现}

复制

4. XMLTablePanel转换示例

转换前

@BPDView(name = "xmlTablePanel", title = "XML表格面板", type = "table")public class XMLTablePanel extends XMLPanel {    @BPDField(name = "xmlCollection", label = "XML集合", type = "object", required = true)    private XMLCollection xmlCollection;        @BPDField(name = "table", label = "表格组件", type = "component", required = true)    private JTable table;        // 组件实现}

复制

转换后

@BPDView(name = "ooderTablePanel", title = "表格面板", type = "table")public class OoderTablePanel extends baseFormPanel {    @BPDField(name = "xmlCollection", label = "XML集合", type = "object", required = true)    private XMLCollection xmlCollection;        @BPDField(name = "title", label = "表格标题", type = "string", required = false)    private String title;        @BPDField(name = "table", label = "表格组件", type = "component", required = true)    private JTable table;        @BPDField(name = "tableModel", label = "表格模型", type = "model", required = true)    private DefaultTableModel tableModel;        // 组件实现}

复制

1.3.5 后续工作与注意事项

1. 后续工作

  1. 根据映射表逐步转换BPD现有组件
  2. 确保转换后的组件符合ooderUI规范
  3. 测试转换后的组件功能
  4. 更新相关文档和示例
  5. 培训开发人员使用新的组件体系

2. 注意事项

  1. 转换过程中只考虑视图转换,不考虑表单间的跳转及勾稽关系
  2. 不考虑校验逻辑,校验功能将在后续阶段实现
  3. 转换后的组件必须保持原有功能不变
  4. 转换后的组件必须兼容现有代码
  5. 转换过程中要确保代码的可读性和可维护性

综上,本映射表为BPD视图组件向ooderUI组件的转换提供了完整的标准化依据,通过明确组件映射、枚举转换及实操规范,可确保转换过程高效、准确,保障转换后组件符合ooderUI体系要求,同时保持原有业务功能不受影响,为AI主导的UI自动化转换提供核心技术支撑。

实战结论:AI自动完成3项适配测试,输出测试报告;人工校验通过(兼容性100%、开发效率提升≥50%、跨端渲染无明显差异)即可确定选型;若某一项不达标,AI自动生成适配优化方案,人工审核后由AI执行优化。

  • 协议兼容性测试:AI自动对接存量系统核心设备/数据库,适配现有工业协议(Modbus TCP、OPC UA等),自动校验数据采集延迟(≤100ms工业级标准),人工仅确认测试结果;
  • 核心视图迁移测试:AI自动选取中等复杂度视图(如含3个Tab页的参数配置页),完成注解式重构,自动输出改造前后开发效率对比报告(代码量、开发周期),人工仅校验重构准确性;
  • 跨端渲染测试:AI自动将重构视图渲染至PC端(JavaFX)、Web端(React)、移动端(Flutter),自动校验界面一致性与流畅度,人工仅确认交互体验。

实战结论:AI自动完成3项适配测试,输出测试报告;人工校验通过(兼容性100%、开发效率提升≥50%、跨端渲染无明显差异)即可确定选型;若某一项不达标,AI自动生成适配优化方案,人工审核后由AI执行优化。

二、AI主导改造全流程:自动化转换+人工校验落地实操

改造全流程以“AI主导自动化转换”为核心,人工仅负责业务逻辑解释与最终校验,分为AI系统扫描与解析、AI核心视图识别与排序、AI UI自动化转换、AI绘图自动化转换四大关键阶段,同步实现设备/PC/移动端三段式适配。以下结合典型视图(ActivityCommandView、RouteConfigView)和SVG绘图场景,拆解可直接复用的实操步骤。

2.1 阶段一:AI系统扫描与解析(全自动化前置准备)

核心目标:AI全自动化梳理视图结构与依赖关系,避免遗漏改造点;人工仅负责确认解析结果。AI执行流程如下:

  1. 并行搜索所有视图相关文件:包括*View.java、*Panel.java、*Plugin.java等核心文件;
  2. 递归扫描目录结构:按plugin/activity、plugin/process、plugin/common、plugin/route等目录分类扫描;
  3. 代码模式识别:识别继承关系(extends XMLPanel、extends basePanel)、插件接口(implements XXXPlugin)、UI构建模式(getPanel()、createXXXComponent());
  4. 构建视图依赖树:梳理出流程级、活动级、配置级、工具级4个层级的150+个视图依赖关系。

AI输出成果:view_tree_structure.md(完整视图树形结构)、视图层级分类清单;人工校验成果:确认视图分类准确性、依赖关系完整性,无需手动梳理。

实战示例:AI自动完成某设备参数配置视图拆解——输出3个Tab页、15个字段、2个联动规则及依赖关系;人工仅需确认“联动规则是否符合业务实际”,无需参与拆解过程。

2.2 阶段二:AI核心视图识别与排序(自动化优先级决策)

AI自动通过业务价值评估和依赖关系分析,完成改造优先级排序,确保核心业务不受影响;人工仅确认排序结果,无需手动决策:

AI自动化决策逻辑:

  1. 业务价值评估:按使用频率和重要性划分权重(高频核心业务:⭐⭐⭐⭐⭐;常用功能:⭐⭐⭐⭐;辅助工具:⭐⭐⭐);
  2. 依赖关系分析:梳理视图间依赖(如ProcessFormView依赖ProcessTableView,需优先改造);
  3. 优先级排序:P0(核心)- ProcessTable、ActivityCommand等11个视图;P1(重要)- Attachment、WebWord等;P2(常用)- CommonAttribute、Formula等。

AI输出成果:核心业务视图转换清单、进度跟踪Todo List、转换完成标准定义;人工仅确认清单合理性,无需手动排序。

  1. 界面结构拆解:AI自动记录视图容器类型、字段数量与类型、布局方式,输出结构化拆解报告;
// 核心:注解式视图定义(关键注解保留,精简冗余配置)@FormAnnotation(    entityClass = DeviceParam.class,    panelName = "DeviceParamConfig",    title = "设备参数配置")public class DeviceParamConfigView extends baseView {    // Tab页容器注解    @TabsAnnotation(layout = @LayoutAnnotation(dock = Dock.fill))        // 基本配置Tab(关键注解:@TabItem、@Field、联动规则)    @TabItemAnnotation(name = "basic", caption = "基本配置")    @FieldAnnotation(        name = "deviceType",        label = "设备类型",        componentType = ComponentType.COMBOINPUT,        options = {@Option(label = "传感器", value = "SENSOR")},        constraints = @Constraints(required = true)    )    private String deviceType;    // 联动字段示例(核心注解:expression)    @FieldAnnotation(        name = "timeout",        label = "超时时间(秒)",        componentType = ComponentType.INPUT,        constraints = @Constraints(min = 1, max = 3600),        expression = "@value('deviceType') == 'CONTROLLER' ? @visible() : @invisible()"    )    private Integer timeout;    // 高级配置Tab(精简示例,保留注解结构)    @TabItemAnnotation(name = "advanced", caption = "高级配置")    @FieldAnnotation(...)    private String advancedParam;}

复制

  1. 依赖关系梳理:AI自动明确视图依赖的后端接口、数据库表、第三方组件,形成依赖清单;
  2. 业务逻辑提取:AI自动梳理字段联动规则、校验规则、数据绑定关系,生成逻辑图谱;
  3. 人工校验:仅需审核拆解报告、逻辑图谱、依赖清单的准确性,无需手动提取。

2.3 阶段三:AI UI自动化转换(核心实操,人工仅校验)

以核心视图ActivityCommandView(3个Tab页、多字段联动)为例,拆解“AI全自动化转换+人工仅校验”的完整流程,对比原有XMLPanel方式与AI生成的OoderUI注解方式差异。

步骤1:AI自动解析原始代码(无人工参与)

AI自动扫描原XMLPanel方式代码,输出问题诊断报告:代码量200+行,UI代码占比80%,业务逻辑占比20%,维护难度⭐⭐⭐⭐⭐,修改一个字段需调整多处代码;人工无需参与分析。

// 原系统:XMLPanel方式核心问题示例(精简冗余代码,保留痛点特征)public class ActivityCommand extends AbstractActivityPlugin {    private XMLPanel commandPanel;    @Override    public XMLPanel getPanel() {        if (commandPanel == null) {            commandPanel = new XMLPanel();            // Tab容器构建(硬编码核心问题)            TabbedPane tabbedPane = new TabbedPane();            tabbedPane.add("命令配置", createMainPanel());            tabbedPane.add("参数配置", createParamPanel());            commandPanel.add(tabbedPane);        }        return commandPanel;    }    // 核心问题:UI硬编码,修改需改动多处    private JPanel createMainPanel() {        JPanel panel = new JPanel(new GridBagLayout());        JLabel timeoutLabel = new JLabel("命令超时时间:");        JTextField timeoutField = new JTextField("60");        // 冗余布局代码省略...        return panel;    }}// 问题诊断:代码量200+行,UI占比80%,维护难度高,修改字段需联动调整多处

复制

步骤2:AI全自动化转换为注解式代码

步骤3:人工仅做业务逻辑校验(核心职责)

OoderA2UI核心特性并非WebJSON转换,而是通过AI深度解析旧系统结构与界面,生成跨平台A2UI语言,结合多轮业务对话完成界面编排,再通过OneCode实现业务逻辑绑定,最终部署于Skillflow平台实现多端协同。完整流程如下,且全程遵循“AI负责技术实现、人工负责业务校验”的分工模式:

实战核心:AI全自动化完成视图转换核心逻辑——自动识别原代码中的UI元素,映射为OoderUI注解,生成注解式代码;人工仅需校验注解配置是否符合业务需求,无需手动编写注解。改造后代码量从200+行降至100行以内,可读性和可维护性大幅提升,效率提升源于AI自动化转换,而非人工优化。

// 新系统:注解式重构核心示例(保留关键注解,精简内部类冗余)@FormAnnotation(mode = FormLayModeType.write)@UIAnnotation(dock = Dock.fill)@TabsAnnotation(tabPosition = TabPositionType.top)public class ActivityCommandView {    // 核心注解:Tab页与子视图关联    @TabItemAnnotation(title = "通用配置")    private CommonConfigView commonConfig;    @TabItemAnnotation(title = "命令选择")    private CommandSelectedView commandSelected;    // 内部类:通用配置(仅保留关键注解字段)    @FormAnnotation    public static class CommonConfigView {        @FieldAnnotation(caption = "命令超时时间", defaultValue = "60")        private String commandTimeOut;        @FieldAnnotation(caption = "重试次数", defaultValue = "3")        private String retryTimes;    }    // 内部类:命令选择(精简冗余方法,保留核心组件注解)    @FormAnnotation    public static class CommandSelectedView {        @FieldAnnotation(componentType = ComponentType.TREEGRID)        private List<FormulaDTO> formulas;        // 按钮动作绑定核心注解        @FieldAnnotation(componentType = ComponentType.BUTTONLAYOUT)        private void addCommand() {            refreshFormulas(); // 核心逻辑保留,实现细节省略        }    }}

复制

  1. AI读取旧软件结构及界面:AI自动扫描旧系统的XMLPanel、View组件、布局配置等文件,提取界面元素(Tab页、字段、按钮)、业务关联关系及交互逻辑,生成结构化界面解析报告;
  2. 多轮对话驱动A2UI重新编排:基于业务人员的多轮对话输入(如“将参数配置Tab页前置”“隐藏离线设备相关字段”),AI动态调整A2UI界面结构,优化布局适配多端显示(设备端精简视图、PC端完整视图、移动端适配视图);
  3. OneCode完成核心业务逻辑绑定:AI根据解析的旧系统业务逻辑,自动生成OneCode代码,实现字段校验、数据联动、设备协议对接等核心逻辑,支持直接复用与二次修改;
  4. Skillflow部署与多端协同测试:将编排后的A2UI界面与OneCode业务逻辑部署至Skillflow平台,自动适配设备端、PC管理端、移动端,实现三端数据同步与协同操作。

人机分工明确:人工仅负责3件事——1)业务逻辑解释(如“超时时间需联动设备在线状态”);2)流程参与者与泳道定义(如“产线操作员仅可见基础配置页”);3)最终逻辑校验;AI负责全流程技术实现:自动解析旧系统、自动编排A2UI界面、自动生成OneCode业务逻辑、自动适配多端,根据泳道权限动态输出差异化界面。

三段式适配核心:AI自动在A2UI注解中配置多平台参数,无需人工编写多端代码;WebJSON作为中间标准,由AI自动转换生成,实现设备/PC/移动端一次适配、全端复用;人工仅需校验不同终端的显示效果,无需参与适配开发。

三、AI主导绘图改造:自动化转换+三段式适配突破

原系统采用JGraph和Batik SVG库实现绘图,存在绘制逻辑硬编码、跨端复用差等问题。本章节聚焦绘图改造核心难点:由AI主导完成原始绘图代码的自动化转换,生成注解式配置与WebJSON,实现组态图、流程图的三段式适配(设备/PC/移动端),人工仅校验转换准确性与业务适配性。

3.1 原始绘图方案痛点分析

// A2UI跨平台核心注解示例(精简冗余业务逻辑,保留关键配置)@A2UIAnnotation(    platform = {Platform.DEVICE, Platform.PC, Platform.MOBILE},    layout = @LayoutAnnotation(type = LayoutType.ADAPTIVE, swimlane = "production_operator"))public class ActivityCommandA2UI extends baseA2UI {    // 多端适配核心注解:按终端控制可见性    @A2UIComponent(type = ComponentType.INPUT, visible = {Device.ALL, Mobile.ALL})    private String commandTimeOut;    @A2UIComponent(type = ComponentType.INPUT, visible = {PC.TRUE})    private String retryTimes;    // OneCode核心注解:业务逻辑绑定    @oneCodeAnnotation(businessType = "command_exec")    public void executeCommand() {        // 核心校验逻辑保留,实现细节省略        if (!DeviceStatusUtil.isonline(this.deviceId)) {            throw new BusinessException("设备离线,无法执行命令");        }        SkillflowDeviceClient.execute(this.deviceId, this.commandExecType);    }    // Skillflow部署核心注解    @SkillflowDeployAnnotation(projectId = "bpm_device_config", env = DeployEnv.TEST)    public class DeployConfig {        private List<String> dependencies = Arrays.asList("device-protocol-plugin");    }}

复制

原系统绘图痛点由AI自动诊断识别,核心问题如下;人工无需参与痛点分析:

  • Renderer类冗余:仅流程图就包含20+个Renderer类(如StartRenderer、ActivityRenderer等),组态图需额外开发设备、管线等专属Renderer,代码复用率极低;
  • 样式修改繁琐:调整节点颜色、尺寸或连线样式需修改代码并重新编译,单次样式优化耗时1-2天;
  • 跨端适配失效:基于Swing的绘图逻辑无法直接迁移至Web/移动端,需重复开发多套绘图代码;
  1. AI自动引入协议解析插件:根据扫描到的工业协议类型,自动在pom.xml中添加对应依赖;
  • 组态交互缺失:原组态图仅支持静态展示,无法关联实时设备数据实现动态刷新。
  1. AI自动实现实时采集:自动添加@Async注解,避免阻塞UI线程;
  2. AI自动配置设备连接参数:在视图注解中自动填充设备IP、端口、寄存器地址(从旧系统配置中提取);
  3. 人工仅校验:协议参数准确性、采集间隔合理性,无需手动配置。
// 工业协议集成核心注解示例(仅保留关键协议配置)@FieldAnnotation(name = "realTimeData", label = "实时数据")// Modbus TCP协议核心配置注解@ProtocolAnnotation(    type = "MODBUS_TCP",    ip = "${device.ip}",    port = 502,    register = "0x0001",    interval = 100 // 采集间隔)private Double realTimeData;

复制

3.2 改造核心方案:AI自动化转换+注解+WebJSON绘图

核心思路:AI全自动化完成“原始绘图代码识别-绘图元素拆解-注解映射-WebJSON生成-多端渲染”全流程;人工仅校验注解配置与WebJSON渲染效果。改造遵循“AI全自动化转换-人工校验-多端适配”三步策略,实现绘图逻辑与业务逻辑解耦,WebJSON作为中间标准支撑三段式适配。

3.2.1 改造核心架构(Web绘图增强)

架构优势:AI全自动化贯穿绘图改造全流程,替代人工手动编写绘制代码;WebJSON实现一次生成、三端复用,零人工适配成本;数据联动由AI自动关联协议注解实现,人工仅校验联动规则。

3.3 流程图改造实操步骤

步骤1:AI全自动解析原始Renderer代码

// 原系统:StartRenderer.java(开始节点绘制)public class StartRenderer extends VertexRenderer {    private BasicStroke borderStroke = new BasicStroke(2);        public void paint(Graphics g) {        Color fillCol = Utils.getColor(BPDConfig.getInstance().getStartColor());        Image image = new ImageIcon(ResourceManager.getResource("Pointstart.png")).getImage();        Graphics2D g2 = (Graphics2D) g;        Dimension d = getSize();                // 绘制圆形背景        if (super.isOpaque()) {            g.setColor(fillCol);            g.fillOval(b - 1, b - 1, d.width - b, d.height - b);        }        // 绘制图标和边框        g.drawImage(image, b+9, b+9, d.width -20, d.height -20, imageObserver);        if (bordercolor != null) {            g.setColor(bordercolor);            g2.setStroke(borderStroke);            g.drawOval(b - 1, b - 1, d.width - b, d.height - b);        }    }}

复制

AI自动诊断问题:硬编码绘制逻辑,修改样式需改动代码并重新编译,无复用性;人工无需参与问题诊断。

步骤2:AI全自动转换为OoderUI注解

AI自动识别原始代码中的形状、颜色、图标等元素,映射为OoderUI标准SVG注解,生成可直接使用的注解式代码,无需人工编写绘制逻辑;人工仅校验注解配置是否符合业务样式需求。

步骤3:节点类型映射规则(标准化注解)



原Renderer类

节点类型

SVG形状

OoderUI标准注解

ActivityRenderer

活动节点

矩形

@OoderSVGNodeAnnotation + @SVGRectAnnotation

SplitRenderer

分支节点

菱形

@OoderSVGNodeAnnotation + @SVGPolygonAnnotation

TransitionRenderer

连接线

线段

@OoderSVGEdgeAnnotation + @SVGLineAnnotation

步骤4:WebJSON渲染示例(增强可读性)

注解自动转换为标准WebJSON,支持多端统一渲染,流程图WebJSON简化示例:

{  "type": "xui.UI.SVGPaper",  "layout": { "dock": "fill" },  "properties": {    "width": "100%",    "height": "600px",    "grid": { "enabled": true, "size": 20 }  },  "children": [    {      "type": "xui.SVGNode",      "id": "start1",      "properties": {        "nodeType": "START",        "position": { "x": "@relative(10%)", "y": "@relative(50%)" },        "style": {           "shape": "circle",           "fill": "90-#5198D3-#A1C8F6",           "stroke": "#004A7F",          "strokeWidth": 2        },        "text": { "content": "开始", "color": "#fff", "fontSize": 12 }      }    },    {      "type": "xui.SVGNode",      "id": "activity1",      "properties": {        "nodeType": "ACTIVITY",        "position": { "x": "@relative(30%)", "y": "@relative(50%)" },        "style": {           "shape": "rect",           "width": 75,           "height": 40,          "fill": "#2196F3",           "stroke": "#1565C0"        },        "text": { "content": "提交申请", "color": "#fff", "fontSize": 12 }      }    },    {      "type": "xui.SVGEdge",      "properties": {        "from": "start1",        "to": "activity1",        "style": { "stroke": "#004A7F", "strokeWidth": 1.5, "arrow": true }      }    }  ]}

复制

3.4 组态图改造实操:AI全自动联动+三段式适配

组态图改造全程由AI主导:自动新增工业设备/管线组件注解,自动关联实时设备数据实现动态刷新,自动生成WebJSON适配三端;人工仅校验组件注解准确性与数据联动合理性。

步骤1:AI全自动定义组态组件注解

// 开始节点注解定义核心示例(保留关键SVG注解)@OoderSVGNodeAnnotation(nodeType = "START", desc = "流程开始节点")@SVGCircleAnnotation(    cx = "@relative(50%)",    cy = "@relative(50%)",    r = "20",    fill = "90-#5198D3-#A1C8F6",    stroke = "#004A7F")@SVGTextAnnotation(    text = "开始",    fontSize = "12px",    fill = "#fff",    textAnchor = "middle")public SVGNodeDTO getStartNodeConfig() {    return new SVGNodeDTO(); // 仅返回业务数据,绘图逻辑由注解声明}

复制

步骤2:AI全自动生成WebJSON与数据联动配置

AI自动将注解转换为标准WebJSON,自动配置实时数据绑定规则(如超温报警),自动适配设备/PC/移动端显示;人工仅校验数据刷新及时性与报警规则准确性。

{  "type": "xui.UI.SVGPaper",  "layout": { "dock": "fill" },  "properties": {    "width": "100%",    "height": "800px",    "grid": { "enabled": true }  },  "children": [    {      "type": "xui.SVGNode",      "id": "sensor1",      "properties": {        "nodeType": "SENSOR",        "position": { "x": "@relative(20%)", "y": "@relative(30%)" },        "style": { "shape": "rect", "width": 40, "height": 60, "fill": "#FF9800" },        "text": { "content": "传感器", "color": "#fff", "fontSize": 11 }      },      "dataBind": {        "field": "sensorTemp",        "displayPosition": { "x": "@relative(20%)", "y": "@relative(38%)" },        "format": "%.1f℃",        "alarmRule": { "min": 0, "max": 80, "errorColor": "#F44336" }  // 超温报警      }    },    {      "type": "xui.SVGNode",      "id": "controller1",      "properties": {        "nodeType": "CONTROLLER",        "position": { "x": "@relative(40%)", "y": "@relative(30%)" },        "style": { "shape": "rect", "width": 40, "height": 60, "fill": "#2196F3" },        "text": { "content": "控制器", "color": "#fff", "fontSize": 11 }      }    },    {      "type": "xui.SVGEdge",      "properties": {        "from": "sensor1",        "to": "controller1",        "style": { "stroke": "#607D8B", "strokeWidth": 2 }      }    }  ]}

复制

3.5 绘图改造成果量化(AI主导带来的核心提升)

指标

改造前

改造后

提升幅度

绘图相关代码量

5000+行

1200+行

-76%

新增节点类型耗时

1-2天

30分钟

-96%

样式调整耗时

1天

10分钟

-98%

跨端绘图适配成本

重复开发多套代码

WebJSON一次适配

成本降为0

组态数据联动开发

需定制开发

注解配置即可实现

开发效率提升90%

原系统使用JGraph和Batik SVG库绘制流程图,每个节点需单独编写Renderer类(20+个),绘制逻辑硬编码,无法跨端复用。OoderUI通过注解转WebJSON的方式,实现SVG绘图的声明式定义,解决跨端适配问题。

步骤2:AI辅助转换(注解式SVG定义)

AI识别原代码中的绘制逻辑(形状、颜色、图标),自动转换为OoderUI的SVG相关注解,无需编写绘制代码:

// 传感器组态组件核心注解示例(保留SVG+协议关键注解)@OoderSVGNodeAnnotation(nodeType = "SENSOR", desc = "工业传感器")@SVGRectAnnotation(    x = "@relative(20%)",    y = "@relative(30%)",    width = "40",    height = "60",    fill = "#FF9800")@SVGTextAnnotation(text = "传感器", fontSize = "11px", fill = "#fff")// Modbus TCP协议关联注解@OoderProtocolAnnotation(    protocolType = "MODBUS_TCP",    ip = "${device.sensor.ip}",    port = 502,    register = "0x0002",    refreshInterval = 100)@FieldAnnotation(name = "sensorTemp", label = "实时温度(℃)")public class SensorConfigView extends baseConfigView {    private Double sensorTemp;    // getter/setter省略}

复制

其他节点类型映射规则:

原Renderer类

节点类型

SVG形状

对应注解

ActivityRenderer

活动节点

矩形

@SVGRectCombAnnotation

SplitRenderer

分支节点

菱形

@SVGPolygonCombAnnotation

TransitionRenderer

连接线

线段

@ConnectorCombAnnotation

步骤3:WebJSON绘图示例(跨端渲染)

注解可转换为标准WebJSON,实现多端统一渲染,以下是完整流程图的WebJSON简化示例:

SVG转换优势:Renderer类数量从20+个减为0,代码行数减少60%,样式修改仅需调整配置,无需重编译;支持Web/FX/Mobile多端统一渲染,新增节点类型仅需新增JSON配置,耗时从2-3天降至30分钟。

四、改造成果与价值分析(AI主导模式的核心价值)

结合钢铁、汽车制造、化工等工业场景的改造实践,“AI主导+人工校验”的OoderA2UI改造模式取得显著成效,以下是AI主导带来的量化指标提升(保留有AI支撑的成果,删除无关联指标)与核心价值总结。

{  "type": "xui.UI.SVGPaper",  "layout": { "dock": "fill" },  "properties": {    "width": "100%",    "height": "600px",    "grid": { "enabled": true }  },  "children": [    {      "type": "xui.SVGNode",      "id": "start1",      "properties": {        "type": "start",        "x": 50, "y": 150, "width": 40, "height": 40,        "title": "开始",        "style": { "fill": "#4CAF50", "stroke": "#2E7D32", "shape": "circle" }      }    },    {      "type": "xui.SVGNode",      "id": "activity1",      "properties": {        "type": "activity",        "x": 150, "y": 130, "width": 75, "height": 40,        "title": "提交申请",        "style": { "fill": "#2196F3", "stroke": "#1565C0", "shape": "rectangle" }      }    },    {      "type": "xui.SVGEdge",      "id": "edge1",      "properties": {        "from": "start1", "to": "activity1",        "style": { "stroke": "#004A7F", "arrow": true, "strokeWidth": 1.5 }      }    }  ]}

复制

4.1 量化指标提升(AI主导自动化转换的直接成果)

4.2 核心业务视图转换成果(AI全自动转换的落地验证)

AI已全自动完成19个核心业务视图的转换,覆盖流程级、活动级、配置级关键场景,人工仅完成校验工作,转换清单如下:

  1. RouteConfigView - 路由配置(4个Tab)
  2. ProcessFormListView - 流程表单列表
  3. ActivityFormListView - 活动表单列表
  4. ProcessFormView - 流程表单配置
  5. ActivityFormView - 活动表单配置
  6. CommonAttributeView - 通用属性配置

指标

改造前(人工主导)

改造后(AI主导)

提升幅度(AI带来)

平均代码行数(per 视图)

200行

100行

-50%(AI自动精简冗余代码)

UI代码占比

80%

20%

-75%(AI自动生成UI注解,替代人工编写)

新增字段时间

30分钟

2分钟

-93%(AI自动添加注解,人工仅校验)

修改UI时间

60分钟

10分钟

-83%(AI自动调整注解,无需人工改代码)

跨平台支持(三段式适配)

仅Swing(人工需重复开发)

Web/FX/Mobile(AI自动适配)

全端覆盖(AI消除人工重复开发)

  1. OpinionView - 意见配置
  2. AttachmentDefView - 附件定义
  3. ProcessTableView - 流程数据表配置
  4. ActivityCommandView - 活动命令配置(3个Tab)
  5. ActivityServiceView - 活动服务配置
  6. ActivityDeviceEventView - 活动设备事件配置
  7. AttachmentView - 附件配置
  8. WebWordView - WebWord配置
  9. ActivityRightView - 活动权限配置
  10. ActivityTaskView - 活动任务配置
  11. ActivityButtonsView - 活动按钮配置(4个Tab)
  12. CommonMultiAttributeView - 通用多属性配置
  13. FormulaEditorView - 公式编辑器(2个Tab)

核心价值(AI主导模式的实战意义):

  • 效率提升:AI主导自动化转换,单个字段修改时间从30分钟降至2分钟,效率提升93%,彻底解决“维护地狱”问题;
  • 业务赋能:AI实现三段式适配,支持Web端远程配置,操作员无需现场值守,工作效率提升30%(间接成果)。
  • 成本降低:AI自动精简代码量60%,减少人工开发与维护工作量,维护成本降低45%;

案例2:化工企业安全生产控制系统改造(AI主导的典型落地)

改造前痛点:UI老旧操作复杂;安全参数预警依赖人工,响应滞后;无法支持移动端推送,安全风险高。AI主导改造核心目标:自动化转换UI、自动关联安全数据、自动实现移动端推送,人工仅校验安全规则。

AI主导改造要点:

改造成果(AI主导的核心价值):

五、实战避坑指南:AI主导改造的5个核心坑点及解决方案

  1. 核心难点:安全参数实时监控、预警机制联动、符合化工行业安全标准;
  2. AI主导解决方案:自动通过@ProtocolAnnotation集成传感器数据采集,自动用“constraints”注解配置安全阈值,自动集成移动端推送插件;人工仅定义安全阈值,无需开发;
  3. 合规保障:AI自动生成操作痕记录代码,改造后系统通过化工行业安全认证,人工仅审核合规材料。
  • 安全响应:AI自动监控+推送预警,响应时间从10分钟降至1分钟,安全生产事故减少80%;
  • 操作效率:AI自动生成简洁UI,操作员培训时间从3天降至30分钟,上手效率提升90%;
  • 合规性:AI自动满足合规要求,顺利通过年度审计,人工无需额外投入合规开发。

常见坑点(AI主导场景下)

实战表现

解决方案(AI+人工协同)

AI解析代码不完整

部分老旧代码、自定义组件无法被AI识别,转换不完整

人工提前梳理自定义组件清单,提供给AI作为解析参考;AI二次扫描后,人工校验解析完整性

工业协议适配失败

AI自动适配主流协议成功,但小众协议无法识别

人工提供小众协议的技术文档,AI自动学习后生成适配插件;人工校验插件可用性

跨端渲染样式不一致

AI自动适配后,部分终端仍存在布局错乱

人工反馈样式问题,AI自动调整WebJSON适配规则;重复迭代至样式统一

数据迁移丢失

AI自动迁移数据时,特殊格式数据丢失或错乱

人工定义特殊数据格式规则,AI按规则迁移;迁移后AI自动校验数据一致性,人工复核关键数据

AI生成注解不符合业务需求

AI按代码逻辑生成注解,但与实际业务操作习惯不符

人工提前明确业务操作习惯,AI按需求生成注解;人工校验注解时重点关注业务适配性,不符则反馈AI调整


顶一下()     踩一下()

热门推荐

发表评论
0评