前几篇文章对GAF的各个模块功能进行详细介绍,接下来就通过一个管网示例,实践扩展开发流程。该管网示例,涉及了GAF的数据管理、服务发布、场景搭建、工作流配置、二次扩展开发、构建和部署相关的功能,以此综合使用GAF。
搭建一个简单的供水管网管理系统。具体如下:
使用iDesktopX处理数据,制作地图和专题图,得到管网、DMA、消防栓和管径等级地图。如下图所示。
使iDesktopX GAF 插件
,注册工作空间和数据源到GAF后台。如下图所示。
在GAF后台管理界面查看注册的工作空间和空间数据源。
在服务发布
页面发布工作空间,发布后的服务自动注册到服务管理。
发布后的地图服务管网
关联对应的数据服务管网
。
根据模板创建前端工程pipeline和后端工程pipeline。 可参考 GAF快速开始-功能模块组件扩展开发流程 文章的后端工程创建与说明
和前端工程创建与说明
小节。
mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate \
-DgroupId="com.supermap.pipeline" \
-DartifactId="pipeline" \
-Dversion="1.0.0-SNAPSHOT" \
-DpackageName="com.supermap.pipeline" \
-DgafVersion="3.0.0.pro-alpha-SNAPSHOT" \
-DservicePrefix="pipeline" \
-DarchetypeGroupId="com.supermap.gaf.archetype" \
-DarchetypeArtifactId="gaf-spring-rest-archetype" \
-DarchetypeVersion="3.0.0" -DinteractiveMode=false \
-DarchetypeCatalog=https://nexus.gaf.net.cn/repository/maven-public/
npm config set registry https://nexus.gaf.net.cn/repository/npm-group
yarn global add @gaf/create-gaf-project
create-gaf-project pipeline
子应用
pipeline
pipeline
10200
GAF MAP UI 框架
是
pipeline
对数据源表event
生成前后端的单表代码。 直接参考 GAF快速开始-功能模块组件扩展开发流程 的 代码生成
小节。
注意:参考时将需要填写的extend1
都修改为pipeline
。
根据发布并注册的地图服务管网、消防栓、DMA和管径等级,搭建场景管网示例
。可参考GAF“场景搭建“能力介绍 的场景配置
小节。
搭建过程中,底图采用天地图。
资源目录配置管径等级、消防栓、DMA和管网底图服务。
业务工具条配置,选择属性查询(根据缓冲区选择)、综合查询、面积量算、距离量算。基础工具条全选。
在相机配置后,下载代码。将配置的场景代码,集成到前端工程pipeline
。可参考GAF“场景搭建“能力介绍 的集成到前端模板工程
小节
集成并配置前端路由,如下图所示。
添加管线修改上报单
设计表单(导入已设计的表单json)。可查看附录-管线修改上报单.json
添加管线修改申请流程,并导入设计好的流程。可查看附录-管线修改上报流程.bpmn20.xml
注意: 查看候选用户,根据实际情况选择。
由于在管理员审批
节点加入了监听器,工作流引擎将会在管理员审批完成后,调用pipelineModifyService.modify(task)
,则需要扩展开发通过管线的数据服务修改管线数据的代码。监听器配置如下图。
对管线修改申请流程模型进行发布,在流程定义里面进行授权。
进行扩展开发。
# 下载工作流扩展开发模板
git clone http://code.gaf.net.cn/share/gaf-gbpm-extend.git
使用IDE打开,根据模板提示,创建PipelineModifyService
类和modify
方法,并编写管线修改的逻辑代码。然后使用maven命令mvn clean package
打成jar包,然后将其上传到文件存储中,得到jar包的url。
https://file.gaf.net.cn/resource/system/public/extend-jars/gaf-gbpm-extend-1.0-SNAPSHOT-jar-with-dependencies.jar
在后端工作流微服务gaf-gbpm,加入如下配置,yaml格式。
# 注意:jars值的格式为 "jar:${jar包的url}!/"
supermap:
dynamic:
allowedDynamic: true
jars: "jar:https://file.gaf.net.cn/resource/system/public/extend-jars/gaf-gbpm-extend-1.0-SNAPSHOT-jar-with-dependencies.jar!/"
将yaml格式转换为properties格式,在微服务配置中心增加配置。
若使用单机linux部署,则使用脚本命令./deploy.sh restart gaf-gbpm
重启工作流微服务gaf-gbpm。
若基于iManger K8S部署,则在管理界面重新部署gaf-gbpm。
修改前端工程中集成的场景搭建的代码,点选管线,查询其属性信息,并能修改,提交上一步的管线修改上报单
发起管线修改上报流程。
具体查看资料
前后端构建部署参考参考 GAF快速开始-功能模块组件扩展开发流程 的 构建部署
小节,只需要注意把 每一个extend1
替换pipeline
,并且把端口31333替换为31332。
部署完成后,在GAF后台组件扩展菜单下,后端微服务路由配置添加路由,如下图所示。
前端微应用界面添加路由配置,如下图。注意,微应用入口的ip地址。
在GAF后台界面,系统设置的菜单管理下,新增菜单扩展示例及其子菜单维修事件管理。
资料参考,https://file.gaf.net.cn/resource/system/public/gxslzl/%E7%AE%A1%E7%BA%BF%E7%A4%BA%E4%BE%8B%E8%B5%84%E6%96%99.zip
视频参考,https://file.gaf.net.cn/resource/system/public/gxslzl/%E7%AE%A1%E7%BA%BF%E7%A4%BA%E4%BE%8B%E8%A7%86%E9%A2%91.zip
{
"list": [
{
"type": "tabs",
"label": "标签页布局",
"options": {
"tabBarGutter": null,
"type": "line",
"tabPosition": "top",
"size": "default",
"animated": true
},
"columns": [
{
"value": "1",
"label": "管线修改上报单",
"list": [
{
"type": "input",
"label": "管线数据集地址",
"options": {
"type": "text",
"width": "100%",
"defaultValue": "",
"placeholder": "请输入",
"clearable": false,
"maxLength": null,
"hidden": true,
"disabled": false
},
"model": "datasetUrl",
"key": "input_1652395264976",
"help": "",
"prefix": "",
"suffix": "",
"rules": [
{
"required": false,
"message": "必填项"
}
]
},
{
"type": "input",
"label": "管段要素id",
"options": {
"type": "text",
"width": "100%",
"defaultValue": "",
"placeholder": "请输入",
"clearable": false,
"maxLength": null,
"hidden": false,
"disabled": false
},
"model": "featureId",
"key": "input_1652395639152",
"help": "",
"prefix": "",
"suffix": "",
"rules": [
{
"required": false,
"message": "必填项"
}
]
},
{
"type": "input",
"label": "管段名称",
"options": {
"type": "text",
"width": "100%",
"defaultValue": "",
"placeholder": "请输入",
"clearable": false,
"maxLength": null,
"hidden": false,
"disabled": false
},
"model": "name",
"key": "input_1652426998299",
"help": "",
"prefix": "",
"suffix": "",
"rules": [
{
"required": false,
"message": "必填项"
}
]
},
{
"type": "input",
"label": "管段编码",
"options": {
"type": "text",
"width": "100%",
"defaultValue": "",
"placeholder": "请输入",
"clearable": false,
"maxLength": null,
"hidden": false,
"disabled": false
},
"model": "code",
"key": "input_1652427034932",
"help": "",
"prefix": "",
"suffix": "",
"rules": [
{
"required": false,
"message": "必填项"
}
]
},
{
"type": "number",
"label": "管径",
"options": {
"width": "100%",
"defaultValue": 0,
"min": null,
"max": null,
"precision": null,
"step": 1,
"hidden": false,
"disabled": false,
"placeholder": "请输入"
},
"model": "caliber",
"key": "number_1652411719618",
"help": "",
"prefix": "",
"suffix": "",
"rules": [
{
"required": false,
"message": "必填项"
}
]
},
{
"type": "input",
"label": "材质",
"options": {
"type": "text",
"width": "100%",
"defaultValue": "",
"placeholder": "请输入",
"clearable": false,
"maxLength": null,
"hidden": false,
"disabled": false
},
"model": "material",
"key": "input_1652396339036",
"help": "",
"prefix": "",
"suffix": "",
"rules": [
{
"required": false,
"message": "必填项"
}
]
},
{
"type": "input",
"label": "上报人",
"options": {
"type": "text",
"width": "100%",
"defaultValue": "",
"placeholder": "请输入",
"clearable": false,
"maxLength": null,
"hidden": false,
"disabled": false
},
"model": "reportBy",
"key": "input_1652396907164",
"help": "",
"prefix": "",
"suffix": "",
"rules": [
{
"required": false,
"message": "必填项"
}
]
},
{
"type": "date",
"label": "上报日期",
"options": {
"width": "100%",
"defaultValue": "",
"rangeDefaultValue": [],
"range": false,
"showTime": false,
"disabled": false,
"hidden": false,
"clearable": false,
"placeholder": "请选择",
"rangePlaceholder": [
"开始时间",
"结束时间"
],
"format": "YYYY-MM-DD"
},
"model": "reportDate",
"key": "date_1652397051497",
"help": "",
"rules": [
{
"required": false,
"message": "必填项"
}
]
},
{
"type": "textarea",
"label": "备注 ",
"options": {
"width": "100%",
"minRows": 4,
"maxRows": 6,
"maxLength": null,
"defaultValue": "",
"clearable": false,
"hidden": false,
"disabled": false,
"placeholder": "请输入"
},
"model": "description",
"key": "textarea_1652396860992",
"help": "",
"rules": [
{
"required": false,
"message": "必填项"
}
]
}
]
}
],
"key": "tabs_1652613006615",
"model": "tabs_1652613006615"
}
],
"config": {
"layout": "horizontal",
"labelCol": {
"xs": 4,
"sm": 4,
"md": 4,
"lg": 4,
"xl": 4,
"xxl": 4
},
"wrapperCol": {
"xs": 18,
"sm": 18,
"md": 18,
"lg": 18,
"xl": 18,
"xxl": 18
},
"hideRequiredMark": false,
"customStyle": ""
}
}
<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="demo">
<bpmn2:process id="gxxgsblc" name="管线修改上报流程" isExecutable="true">
<bpmn2:startEvent id="StartEvent_1" name="上报单提交" flowable:formKey="gxxgsbd" />
<bpmn2:sequenceFlow id="Flow_0k6gxnw" sourceRef="StartEvent_1" targetRef="Activity_14zm30c" />
<bpmn2:userTask id="Activity_14zm30c" name="管理员审批" flowable:category="todo" flowable:candidateUsers="63e63b95-6ede-4824-84c3-2417ba7ae902" >
<bpmn2:extensionElements>
<flowable:taskListener expression="${pipelineModifyService.modify(task)}" event="complete" />
bpmn2:extensionElements>
bpmn2:userTask>
<bpmn2:endEvent id="Event_00mh30y" name="结束" />
<bpmn2:sequenceFlow id="Flow_0l4z0ut" sourceRef="Activity_14zm30c" targetRef="Event_00mh30y" />
bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_gxxgsblc">
<bpmndi:BPMNPlane id="BPMNPlane_gxxgsblc" bpmnElement="gxxgsblc">
<bpmndi:BPMNEdge id="BPMNEdge_Flow_0l4z0ut" bpmnElement="Flow_0l4z0ut">
<di:waypoint x="430" y="178" />
<di:waypoint x="592" y="178" />
bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_Flow_0k6gxnw" bpmnElement="Flow_0k6gxnw">
<di:waypoint x="196" y="178" />
<di:waypoint x="330" y="178" />
bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="BPMNShape_StartEvent_1" bpmnElement="StartEvent_1">
<dc:Bounds x="160" y="160" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="151" y="196" width="56" height="14" />
bpmndi:BPMNLabel>
bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_Activity_14zm30c" bpmnElement="Activity_14zm30c">
<dc:Bounds x="330" y="138" width="100" height="80" />
bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_Event_00mh30y" bpmnElement="Event_00mh30y">
<dc:Bounds x="592" y="160" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="599" y="196" width="22" height="14" />
bpmndi:BPMNLabel>
bpmndi:BPMNShape>
bpmndi:BPMNPlane>
bpmndi:BPMNDiagram>
bpmn2:definitions>