技术标签: activity
一、步骤:
1.创建 BpmnModel
2.为BpmnModel设置Process
3.创建FlowElement
3.为Process添加FlowElement
4.校验BpmModel,部署
二、代码实现:
public void test(String activity){
Deployment deploy=null;
try {
BpmnModel bpmnModel=new BpmnModel();
//设置流程信息
//此信息都可以通过前期自定义数据,使用时再查询
Process process=new Process();
process.setId("test_model_3");
process.setName("测试流程图三");
//添加流程节点信息---start
String startId="startEvent_id_1";
String startName="开始_1";
String endId="endEvent_id_1";
String endName="结束_1";
//创建数组存储所有流程节点信息
List<FlowElement> elementList=new ArrayList<>();
//创建开始节点
FlowElement startFlowElement=createStartFlowElement(startId,startName);
FlowElement endFlowElement=createEndFlowElement(endId,endName);
elementList.add(startFlowElement);
elementList.add(endFlowElement);
//查询普通任务节点信息
elementList.addAll(findUserTaskElements());
//把节点放入process
elementList.stream().forEach(item -> process.addFlowElement(item));
//查询各个节点的关系信息,并添加进流程
List<FlowElementPojo> flowElementPojoList =createCirculationSequence();
for (FlowElementPojo flowElementPojo:flowElementPojoList){
SequenceFlow sequenceFlow=createSequeneFlow(flowElementPojo.getId(),"流转",flowElementPojo.getResourceFlowElementId(),
flowElementPojo.getTargetFlowElementId(),"${a==\"f\"}");
process.addFlowElement(sequenceFlow);
}
bpmnModel.addProcess(process);
//校验bpmModel
ProcessValidator processValidator=new ProcessValidatorFactory().createDefaultProcessValidator();
List<ValidationError> validationErrorList=processValidator.validate(bpmnModel);
if (validationErrorList.size()>0){
throw new RuntimeException("流程有误,请检查后重试");
}
String fileName="model_"+activity+"bpmn20.xml";
//生成自动布局
new BpmnAutoLayout(bpmnModel).execute();
deploy =repositoryService.createDeployment().addBpmnModel(fileName,bpmnModel)
.tenantId("intelligentAsset")
.deploy();
}catch (Exception e){
}finally {
}
}
创建开始节点:
/**
* 创建开始节点信息
* @return
*/
public FlowElement createStartFlowElement(String id,String name){
StartEvent startEvent=new StartEvent();
startEvent.setId(id);
startEvent.setName(name);
return startEvent;
}
创建结束节点:
/**
* 创建结束节点信息
* @param id
* @param name
* @return
*/
public FlowElement createEndFlowElement(String id,String name){
EndEvent endEvent=new EndEvent();
endEvent.setId(id);
endEvent.setName(name);
return endEvent;
}
创建普通任务节点:
/**
* 创建普通任务节点信息
* @param id
* @param name
* @param assignee
* @return
*/
public FlowElement createCommonUserTask(String id,String name,String assignee){
UserTask userTask=new UserTask();
userTask.setId(id);
userTask.setName(name);
userTask.setAssignee(assignee);
return userTask;
}
创建会签任务节点信息:
/**
* 创建会签节点信息
* @param id
* @param name
* @return
*/
public FlowElement createMultiUserTask(String id,String name){
UserTask userTask=new UserTask();
userTask.setId(id);
userTask.setName(name);
//分配用户
userTask.setAssignee("${assignee}");
MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics=new MultiInstanceLoopCharacteristics();
// multiInstanceLoopCharacteristics.setCollectionString("${collectionList}");
//完成条件,默认所有人都完成
multiInstanceLoopCharacteristics.setCompletionCondition("${completionCondition}");
//元素变量多实例,一般和设置的assignee变量是对应的
multiInstanceLoopCharacteristics.setElementVariable("assignee");
//集合多实例,用于接收集合数据的表达式
multiInstanceLoopCharacteristics.setInputDataItem("${itemList}");
userTask.setLoopCharacteristics(multiInstanceLoopCharacteristics);
return userTask;
}
创建/查询各个节点的流转关系信息:
/**
* 查询各节点关联流转信息,即流转线
*FlowElementPojo 是自定义类
*/
public List<FlowElementPojo> createCirculationSequence(){
List<FlowElementPojo> list=new ArrayList<>();
FlowElementPojo flowElementPojo_start=new FlowElementPojo();
flowElementPojo_start.setId("sequence_id_1");
flowElementPojo_start.setTargetFlowElementId("userTask_0");
flowElementPojo_start.setResourceFlowElementId("startEvent_id_1");
flowElementPojo_start.setFlowElementType("sequence");
FlowElementPojo flowElementPojo_user_0=new FlowElementPojo();
flowElementPojo_user_0.setId("sequence_id_2");
flowElementPojo_user_0.setTargetFlowElementId("userTask_1");
flowElementPojo_user_0.setResourceFlowElementId("userTask_0");
flowElementPojo_user_0.setFlowElementType("sequence");
FlowElementPojo flowElementPojo_user_1=new FlowElementPojo();
flowElementPojo_user_1.setId("sequence_id_3");
flowElementPojo_user_1.setTargetFlowElementId("userTask_2");
flowElementPojo_user_1.setResourceFlowElementId("userTask_1");
flowElementPojo_user_1.setFlowElementType("sequence");
FlowElementPojo flowElementPojo_user_2=new FlowElementPojo();
flowElementPojo_user_2.setId("sequence_id_4");
flowElementPojo_user_2.setTargetFlowElementId("endEvent_id_1");
flowElementPojo_user_2.setResourceFlowElementId("userTask_2");
flowElementPojo_user_2.setFlowElementType("sequence");
list.add(flowElementPojo_start);
list.add(flowElementPojo_user_0);
list.add(flowElementPojo_user_1);
list.add(flowElementPojo_user_2);
return list;
}
/**
* 绘制节点流转顺序
* @param id
* @param name
* @param targetId
* @param sourceId
* @param conditionExpression
* @return
*/
public SequenceFlow createSequeneFlow(String id,String name,String sourceId,String targetId,String conditionExpression){
SequenceFlow sequenceFlow=new SequenceFlow();
sequenceFlow.setId(id);
sequenceFlow.setName(name);
if (ObjectUtils.isNotEmpty(targetId)){
sequenceFlow.setTargetRef(targetId);
}
if (ObjectUtils.isNotEmpty(sourceId)){
sequenceFlow.setSourceRef(sourceId);
}
if (ObjectUtils.isNotEmpty(conditionExpression)){
sequenceFlow.setConditionExpression(conditionExpression);
}
return sequenceFlow;
}
文章浏览阅读332次。购物车_购物车案例请求数据地址
文章浏览阅读603次。DOTween 使用方法_tween number
文章浏览阅读1.2w次,点赞13次,收藏138次。F28335 ADC模块ADC转换模块A/D转换器(ADC)将模拟量转换为数字量通常要经过四个步骤:采样、保持、量化和编码。采样:将一个时间上连续变化的模拟量转化为时间上离散变化的模拟量。保持:将采样结果存储起来,直到下次采样,这个过程称作保持。一般,采样器和保持电路一起总称为采样保持电路。量化:将采样电平归化为与之接近的离散数字电平,这个过程称作量化。ADC关键指标分辨率:指数字量变化一个最小量时模拟信号的变化量,定义为满刻度与2^n的比值。分辨率又称为精度,通常以数字信号的位_dsp2833x_adc.c
文章浏览阅读1.8k次。 路径规划问题是机器人学研究的一个重要领域,它是指给定操作环境以及起始和目标的位置姿态,要求选择一条从起始点到目标点的路径,使运动物体(移动机器人或机械臂)能安全、无碰撞地通过所有的障碍物而达到目标位置。路径规划从研究对象上可分为关节式机械臂和移动机器人。一般来讲前者具有更多的自由度,而后者的作业范围要更大一些,这两类对象具有不同的特点,因此在研究方法上略有不同。在V-rep学习笔记:机器人路..._collision pairs
文章浏览阅读1.5k次。1.环境:U8与本地某程序。跨服务器、跨数据库。2.问题:U8的存货同步到本地时,报“数据库可能存在相同的编码”。3.原因:在确认了U8程序正常、本地程序正常、U8数据库正常、本地数据库正常、链接服务器正常、触发器本身正常后,回到了问题的本身:为何原来的同步执行正常,但是现在的存货保存却异常,怀疑是最新的存货有问题。所以先停了触发器,然后用U8做了一个存货,正常保存后。启用触发器,直接用刚_数据库可能已经存在相同的编码等
文章浏览阅读7.9k次。摘要:什么是EOS?EOS与ESD的区别是什么?EOS为ELectrical Over Stress的缩写,指所有的过度电性应力。当外界电流或电压超过器件的最大规范条件时,器件性能会减弱甚至损坏。一、什么是EOS?EOS为ELectrical Over Stress的缩写,指所有的过度电性应力。当外界电流或电压超过器件的最大规范条件时,器件性能会减弱甚至损坏。EOS通常产生于:1.电源(AC/DC) 干扰、电源杂讯和过电压。2.由于测试程序切换(热切换)导致的瞬变电流..._eos和esd的区别
文章浏览阅读944次。https://www.byhy.net/tut/webdev/django/01/_byhy.net
文章浏览阅读5.8k次,点赞13次,收藏57次。业务场景介绍:H5移动端支持微信支付 [ 微信支付分为微信内支付(JSAPI支付官方API)和微信外支付(H5支付官方API)] && 支付宝支付 [手机网站支付转 APP 支付 官方API ]订单生成逻辑:前端请求后端提交订单,后端去和微信或者支付宝对接生成订单(后续支付都是这个逻辑进行的对接)一、移动端微信支付,vue中如何玩?在移动端微信支付分为微信内支付和微信外支付。1.在订单组件中选择支付方式之后在支付页面先去判断是否是在微信内://判断是否微信 is__移动端支付宝微信支付vue项目怎么写
文章浏览阅读2k次,点赞5次,收藏9次。深度学习编译器主要为解决不同框架下训练的模型部署到指定的某些设备上时所遇到的一系列复杂的问题,即将各种深度学习训练框架的模型部署到各种硬件所面临的问题;_tvm编译器
文章浏览阅读2.8w次,点赞7次,收藏22次。要想检测移动硬盘的读写速度和是否有坏道,可使用HD Tune Pro硬盘工具软件。除了硬盘传输速率、健康状况、温度、随机存取、磁盘错误扫描、文件基准检测等常见功能外,该软件还能检测硬盘的固件版本、序列号、容量、缓存以及当前的Ultra DMA模式等。此外,目前市场上主流的2.5英寸320GB移动硬盘的数据读取速度大多在30MB/s左右;写入速度稍微慢一点,一般在25MB/s左右。..._怎么检测移动硬盘是不是新的
文章浏览阅读184次。Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other material stuff, he collects software bugs. When Ivan gets a new program, he classifies all possible bugs into n ..._poj collecting bugs
文章浏览阅读8.8k次,点赞11次,收藏88次。ESP32单片机是一款基于改进的Tensilica LX6微架构的32位双核处理器 SoC,配备2.4 GHz Wi-Fi和蓝牙功能。由于其低功耗、高速度和广泛的应用适用性而被广泛应用。本文将介绍ESP32单片机的基本概念,开发环境,开发语言和一些注意事项,并提供一些简单的代码例程,以点亮LED灯和控制继电器为例。_esp32