Camunda排他网关与并行网关

💖专栏简介

✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。

✔️文章中只包含演示核心代码及测试数据,完整代码可查看作者的开源项目snail-camunda

✔️请给snail-camunda 点颗星吧😘

💖排他网关

流程定义中需要用到排他网关时需要注意两点:

1是必须要有一条默认路线,当其他条件均不满足时走该路线。

2是条件表达式要设置正确

表单定义如下

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_0lyy3jm" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.19.0" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.15.0">
  <bpmn:process id="Process_1celx74" isExecutable="true">
    <bpmn:startEvent id="StartEvent_1">
      <bpmn:outgoing>Flow_0a6p958</bpmn:outgoing>
    </bpmn:startEvent>
    <bpmn:sequenceFlow id="Flow_0a6p958" sourceRef="StartEvent_1" targetRef="root" />
    <bpmn:userTask id="root" name="提交人" camunda:assignee="${initiator}">
      <bpmn:incoming>Flow_0a6p958</bpmn:incoming>
      <bpmn:outgoing>Flow_0i294hl</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:exclusiveGateway id="Gateway_1e17vip" default="Flow_19gtn2c">
      <bpmn:incoming>Flow_0i294hl</bpmn:incoming>
      <bpmn:outgoing>Flow_07vd7cq</bpmn:outgoing>
      <bpmn:outgoing>Flow_19gtn2c</bpmn:outgoing>
    </bpmn:exclusiveGateway>
    <bpmn:sequenceFlow id="Flow_0i294hl" sourceRef="root" targetRef="Gateway_1e17vip" />
    <bpmn:sequenceFlow id="Flow_07vd7cq" name="大于3天" sourceRef="Gateway_1e17vip" targetRef="Activity_1fw9lpo">
      <bpmn:extensionElements />
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${day &gt; 3}</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="Flow_19gtn2c" sourceRef="Gateway_1e17vip" targetRef="Activity_17k9da9">
      <bpmn:extensionElements />
    </bpmn:sequenceFlow>
    <bpmn:endEvent id="Event_1673c3w">
      <bpmn:incoming>Flow_1cxwd4c</bpmn:incoming>
      <bpmn:incoming>Flow_0gnj3ll</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="Flow_1cxwd4c" sourceRef="Activity_1fw9lpo" targetRef="Event_1673c3w" />
    <bpmn:sequenceFlow id="Flow_0gnj3ll" sourceRef="Activity_17k9da9" targetRef="Event_1673c3w" />
    <bpmn:userTask id="Activity_1fw9lpo" name="部长" camunda:assignee="${head}">
      <bpmn:incoming>Flow_07vd7cq</bpmn:incoming>
      <bpmn:outgoing>Flow_1cxwd4c</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:userTask id="Activity_17k9da9" name="经理" camunda:assignee="${manager}">
      <bpmn:incoming>Flow_19gtn2c</bpmn:incoming>
      <bpmn:outgoing>Flow_0gnj3ll</bpmn:outgoing>
    </bpmn:userTask>
  </bpmn:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1celx74">
      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
        <dc:Bounds x="179" y="209" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_07adzvd_di" bpmnElement="root">
        <dc:Bounds x="270" y="187" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Gateway_1e17vip_di" bpmnElement="Gateway_1e17vip" isMarkerVisible="true">
        <dc:Bounds x="425" y="202" width="50" height="50" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Event_1673c3w_di" bpmnElement="Event_1673c3w">
        <dc:Bounds x="752" y="209" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_1rofeex_di" bpmnElement="Activity_1fw9lpo">
        <dc:Bounds x="520" y="80" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_01iu09y_di" bpmnElement="Activity_17k9da9">
        <dc:Bounds x="520" y="290" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="Flow_0a6p958_di" bpmnElement="Flow_0a6p958">
        <di:waypoint x="215" y="227" />
        <di:waypoint x="270" y="227" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_0i294hl_di" bpmnElement="Flow_0i294hl">
        <di:waypoint x="370" y="227" />
        <di:waypoint x="425" y="227" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_07vd7cq_di" bpmnElement="Flow_07vd7cq">
        <di:waypoint x="450" y="202" />
        <di:waypoint x="450" y="120" />
        <di:waypoint x="520" y="120" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="445" y="158" width="40" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_19gtn2c_di" bpmnElement="Flow_19gtn2c">
        <di:waypoint x="450" y="252" />
        <di:waypoint x="450" y="330" />
        <di:waypoint x="520" y="330" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_1cxwd4c_di" bpmnElement="Flow_1cxwd4c">
        <di:waypoint x="620" y="120" />
        <di:waypoint x="700" y="120" />
        <di:waypoint x="700" y="227" />
        <di:waypoint x="752" y="227" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_0gnj3ll_di" bpmnElement="Flow_0gnj3ll">
        <di:waypoint x="620" y="330" />
        <di:waypoint x="700" y="330" />
        <di:waypoint x="700" y="227" />
        <di:waypoint x="752" y="227" />
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn:definitions>

发起实例的接口,参数类和之前文章中提到的都一样,不重复贴了

    /**
     * 根据流程定义key发起流程实例
     *
     * @param requestParam 请求参数
     * @return 流程实例id
     */
    @PostMapping("/startProcessInstanceByKey")
    public String startProcessInstanceByKey(@RequestBody StartProcessRequest requestParam) {
        Map<String, Object> paramMap = new HashMap<>(8);
        paramMap.put("initiator", requestParam.getInitiator());
        paramMap.put("day", 4);
        paramMap.put("manager","10087");
        paramMap.put("head", "10088");
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(requestParam.getProcessDefinitionKey(), requestParam.getBusinessKey(), paramMap);
        return processInstance.getProcessInstanceId();
    }

发起后,满足预期来到【部长】节点

💖统一表达式语言

Camunda支持统一表达式语言,使用开源的JUEL来实现的。需要掌握更多可访问如下链接

Unified Expression Language

💖并行网关

在之前的《认识BPMN2.0》中我们知道并行网关的功能是基于传入和传出序列流:

  • Fork:所有传出序列流并行执行,为每个序列流创建一个并发执行。
  • Join:到达并行网关的所有并发执行在网关等待,直到每个传入序列流的执行到达为止。

流程定义设计如下:

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_0x5ifr3" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.19.0" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.15.0">
  <bpmn:process id="Process_17ri3bi" isExecutable="true">
    <bpmn:startEvent id="StartEvent_1">
      <bpmn:outgoing>Flow_0woj0jt</bpmn:outgoing>
    </bpmn:startEvent>
    <bpmn:sequenceFlow id="Flow_0woj0jt" sourceRef="StartEvent_1" targetRef="root" />
    <bpmn:userTask id="root" name="发起人" camunda:assignee="${initiator}">
      <bpmn:incoming>Flow_0woj0jt</bpmn:incoming>
      <bpmn:outgoing>Flow_0istezk</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:sequenceFlow id="Flow_0istezk" sourceRef="root" targetRef="Gateway_0j97tkc" />
    <bpmn:parallelGateway id="Gateway_0j97tkc">
      <bpmn:incoming>Flow_0istezk</bpmn:incoming>
      <bpmn:outgoing>Flow_1ucnqdb</bpmn:outgoing>
      <bpmn:outgoing>Flow_0nvwxww</bpmn:outgoing>
      <bpmn:outgoing>Flow_06j90pb</bpmn:outgoing>
    </bpmn:parallelGateway>
    <bpmn:sequenceFlow id="Flow_1ucnqdb" sourceRef="Gateway_0j97tkc" targetRef="Activity_16bwr8x" />
    <bpmn:sequenceFlow id="Flow_0nvwxww" sourceRef="Gateway_0j97tkc" targetRef="Activity_0qtaspo" />
    <bpmn:userTask id="Activity_16bwr8x" name="审批人1号" camunda:assignee="${userOne}">
      <bpmn:incoming>Flow_1ucnqdb</bpmn:incoming>
      <bpmn:outgoing>Flow_11upvwe</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:userTask id="Activity_0qtaspo" name="审批人3号" camunda:assignee="${userThree}">
      <bpmn:incoming>Flow_0nvwxww</bpmn:incoming>
      <bpmn:outgoing>Flow_1qfv4jz</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:endEvent id="Event_01ck26r">
      <bpmn:incoming>Flow_0rzniwk</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="Flow_06j90pb" sourceRef="Gateway_0j97tkc" targetRef="Activity_0bczswl" />
    <bpmn:userTask id="Activity_0bczswl" name="审批人2号" camunda:assignee="${userTwo}">
      <bpmn:incoming>Flow_06j90pb</bpmn:incoming>
      <bpmn:outgoing>Flow_1mymqa7</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:parallelGateway id="Gateway_1gholo6">
      <bpmn:incoming>Flow_1mymqa7</bpmn:incoming>
      <bpmn:incoming>Flow_11upvwe</bpmn:incoming>
      <bpmn:outgoing>Flow_0luwvad</bpmn:outgoing>
    </bpmn:parallelGateway>
    <bpmn:sequenceFlow id="Flow_1mymqa7" sourceRef="Activity_0bczswl" targetRef="Gateway_1gholo6" />
    <bpmn:sequenceFlow id="Flow_0luwvad" sourceRef="Gateway_1gholo6" targetRef="Activity_10re8z2" />
    <bpmn:userTask id="Activity_10re8z2" name="审批人4号" camunda:assignee="${userFour}">
      <bpmn:incoming>Flow_0luwvad</bpmn:incoming>
      <bpmn:outgoing>Flow_05npw3q</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:sequenceFlow id="Flow_05npw3q" sourceRef="Activity_10re8z2" targetRef="Gateway_1u3oe8c" />
    <bpmn:parallelGateway id="Gateway_1u3oe8c">
      <bpmn:incoming>Flow_05npw3q</bpmn:incoming>
      <bpmn:incoming>Flow_1qfv4jz</bpmn:incoming>
      <bpmn:outgoing>Flow_0rzniwk</bpmn:outgoing>
    </bpmn:parallelGateway>
    <bpmn:sequenceFlow id="Flow_0rzniwk" sourceRef="Gateway_1u3oe8c" targetRef="Event_01ck26r" />
    <bpmn:sequenceFlow id="Flow_1qfv4jz" sourceRef="Activity_0qtaspo" targetRef="Gateway_1u3oe8c" />
    <bpmn:sequenceFlow id="Flow_11upvwe" sourceRef="Activity_16bwr8x" targetRef="Gateway_1gholo6" />
  </bpmn:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_17ri3bi">
      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
        <dc:Bounds x="179" y="159" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_04cwdxu_di" bpmnElement="root">
        <dc:Bounds x="270" y="137" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Gateway_0wqcqy3_di" bpmnElement="Gateway_0j97tkc">
        <dc:Bounds x="425" y="152" width="50" height="50" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_1978o8o_di" bpmnElement="Activity_16bwr8x">
        <dc:Bounds x="520" y="60" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_1jr9acr_di" bpmnElement="Activity_0bczswl">
        <dc:Bounds x="520" y="200" width="100" height="80" />
        <bpmndi:BPMNLabel />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_1opqr0v_di" bpmnElement="Activity_0qtaspo">
        <dc:Bounds x="510" y="360" width="100" height="80" />
        <bpmndi:BPMNLabel />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Gateway_1iutlje_di" bpmnElement="Gateway_1gholo6">
        <dc:Bounds x="675" y="115" width="50" height="50" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_1ne89o0_di" bpmnElement="Activity_10re8z2">
        <dc:Bounds x="770" y="100" width="100" height="80" />
        <bpmndi:BPMNLabel />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Gateway_0an4f7j_di" bpmnElement="Gateway_1u3oe8c">
        <dc:Bounds x="915" y="215" width="50" height="50" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Event_01ck26r_di" bpmnElement="Event_01ck26r">
        <dc:Bounds x="1042" y="222" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="Flow_0woj0jt_di" bpmnElement="Flow_0woj0jt">
        <di:waypoint x="215" y="177" />
        <di:waypoint x="270" y="177" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_0istezk_di" bpmnElement="Flow_0istezk">
        <di:waypoint x="370" y="177" />
        <di:waypoint x="425" y="177" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_1ucnqdb_di" bpmnElement="Flow_1ucnqdb">
        <di:waypoint x="450" y="152" />
        <di:waypoint x="450" y="100" />
        <di:waypoint x="520" y="100" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_0nvwxww_di" bpmnElement="Flow_0nvwxww">
        <di:waypoint x="450" y="202" />
        <di:waypoint x="450" y="400" />
        <di:waypoint x="510" y="400" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_06j90pb_di" bpmnElement="Flow_06j90pb">
        <di:waypoint x="450" y="202" />
        <di:waypoint x="450" y="240" />
        <di:waypoint x="520" y="240" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_1mymqa7_di" bpmnElement="Flow_1mymqa7">
        <di:waypoint x="620" y="240" />
        <di:waypoint x="700" y="240" />
        <di:waypoint x="700" y="165" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_0luwvad_di" bpmnElement="Flow_0luwvad">
        <di:waypoint x="725" y="140" />
        <di:waypoint x="770" y="140" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_05npw3q_di" bpmnElement="Flow_05npw3q">
        <di:waypoint x="870" y="140" />
        <di:waypoint x="940" y="140" />
        <di:waypoint x="940" y="215" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_0rzniwk_di" bpmnElement="Flow_0rzniwk">
        <di:waypoint x="965" y="240" />
        <di:waypoint x="1042" y="240" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_1qfv4jz_di" bpmnElement="Flow_1qfv4jz">
        <di:waypoint x="610" y="400" />
        <di:waypoint x="940" y="400" />
        <di:waypoint x="940" y="265" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_11upvwe_di" bpmnElement="Flow_11upvwe">
        <di:waypoint x="620" y="100" />
        <di:waypoint x="648" y="100" />
        <di:waypoint x="648" y="140" />
        <di:waypoint x="675" y="140" />
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn:definitions>

发起实例接口:

    /**
     * 根据流程定义key发起流程实例
     *
     * @param requestParam 请求参数
     * @return 流程实例id
     */
    @PostMapping("/startProcessInstanceByKey")
    public String startProcessInstanceByKey(@RequestBody StartProcessRequest requestParam) {
        Map<String, Object> paramMap = new HashMap<>(8);
        paramMap.put("initiator", requestParam.getInitiator());
        paramMap.put("userOne","10087");
        paramMap.put("userTwo","10088");
        paramMap.put("userThree","10089");
        paramMap.put("userFour","10090");
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(requestParam.getProcessDefinitionKey(), requestParam.getBusinessKey(), paramMap);
        return processInstance.getProcessInstanceId();
    }

从下图可见,经过第一个并行网关后三个节点的审批人会同时收到待办任务。

所以3号完成后执行会在最后的并行网关等待

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/375915.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JAVA WEB】Web标签

目录 注释标签 标题标签 h1-h6 段落标签 换行标签 格式化标签 加粗&#xff1a;strong 标签和 b 标签 倾斜&#xff1a;em 标签和 i 标签 删除线&#xff1a; del 标签 和 s 标签 下划线&#xff1a;ins 标签 和 u 标签 图片标签&#xff1a;img 单标签 src属性&#…

在angular12中proxy.conf.json中配置详解

一、proxy.conf.json文件的目录 二、proxy.conf.json文件中的配置 "/xxx/api": {"target": "地址/api","secure": false,"logLevel": "debug","changeOrigin": true,"pathRewrite": {"…

蓝桥杯嵌入式学习记录——点亮第一个LED(含软件的使用)

目录 一、蓝桥杯概述 二、软件的使用 三、点亮LED 一、蓝桥杯概述 蓝桥杯是一个编程大赛、商赛&#xff0c;获奖率高达60%&#xff08;省赛中一等奖10%、二等奖20%、三等奖30%&#xff09;&#xff0c;但这并不影响它的含金量&#xff0c;多所高校将它列为A类赛事并实行保研…

[机器学习]K-means——聚类算法

一.K-means算法概念 二.代码实现 # 0. 引入依赖 import numpy as np import matplotlib.pyplot as plt # 画图依赖 from sklearn.datasets import make_blobs # 从sklearn中直接生成聚类数据# 1. 数据加载 # 生成&#xff08;n_samples&#xff1a;样本点&#xff0c;centers&…

QT安装与helloworld

文章目录 QT安装与helloworld1.概念&#xff1a;2.安装QT3.配置环境变量4.创建项目5.运行效果 QT安装与helloworld 1.概念&#xff1a; Qt Creator是一个用于Qt开发的轻量级跨平台集成开发环境。Qt Creator可带来两大关键益处&#xff1a;提供首个专为支持跨平台开发而设计的…

跟着小德学C++之启动监听

嗨&#xff0c;大家好&#xff0c;我是出生在达纳苏斯的一名德鲁伊&#xff0c;我是要立志成为海贼王&#xff0c;啊不&#xff0c;是立志成为科学家的德鲁伊。最近&#xff0c;我发现我们所处的世界是一个虚拟的世界&#xff0c;并由此开始&#xff0c;我展开了对我们这个世界…

Rust开发WASM,浏览器运行WASM

首先需要安装wasm-pack cargo install wasm-pack 使用cargo创建工程 cargo new --lib mywasm 编辑Cargo.toml文件&#xff0c;修改lib的类型为cdylib&#xff0c;并且添加依赖wasm-bindgen [package] name "mywasm" version "0.1.0" edition "…

顺序图(Sequence Diagram)

也叫时序图、序列图 一、定义 顺序图是用来描述对象自身及对象间信息传递顺序的视图。 二、要素 活动者,对象,生命线,控制焦点,消息(同步消息,异步消息,返回消息,自关联消息) 1、 活动者 活动者发出情况或者接收系统的服务。 2、 对象 对象是特定行为与属性的集合。 表…

uniapp 使用renderjs引入echarts

效果图&#xff1a; 1.1renderjs引入echarts 组件zmui-echarts.vue&#xff1a; <template><view class"zmui-echarts" :prop"option" :change:prop"echarts.delay"></view> </template><script>export defaul…

互联网加竞赛 基于深度学习的行人重识别(person reid)

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的行人重识别 该项目较为新颖&#xff0c;适合…

数据结构——C/栈和队列

&#x1f308;个人主页&#xff1a;慢了半拍 &#x1f525; 创作专栏&#xff1a;《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》 &#x1f3c6;我的格言&#xff1a;一切只是时间问题。 ​ 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特…

qt学习:mplayer播放器(视频)+arm如何播放视频实战+c启动播放器

目录 作用 linux下载 arm下载 使用方法 键盘 命令 命令词有很多&#xff0c;举例几个 在arm上qt实战 配置ui界面 添加头文件&#xff0c;成员&#xff0c;函数 添加视频按钮点击事件 列表选项双击事件 播放按钮点击事件 暂停继续按钮点击事件 停止按钮点击事件 …

挑战杯 python+深度学习+opencv实现植物识别算法系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的植物识别算法研究与实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;4分 &#x1f9ff; 更多…

【Linux】缓冲区与缓冲区的刷新策略

目录 1.缓冲区基础 1.1缓冲区的刷新策略 1.1.1三种刷新策略 1.1.2.两种强制刷新策略 2.用户级语言层缓冲区 2.1.默认在显示器输出 2.2.重定向到文件输出 2.3.write调用没有显示两份的原因 3.模拟实现文件缓冲区 3.1 myFileBuffer.h 3.2 myFileBuffer.c 4.系统内核缓…

Linux系统调试课:Linux错误码介绍

文章目录 一、错误码二、错误码返回案例三、使用 goto 语句沉淀、分享、成长,让自己和他人都能有所收获!😄 📢错误代码由内核或用户空间应用程序(通过errno变量)解释。错误处理在软件开发中非常重要,而不仅仅是在内核开发中。幸运的是,内核提供的几种错误,几乎涵盖了可…

一步步建立一个C#项目(连续读取S7-1500PLC数据)

首先创建一个新项目 1、窗体应用 2、配置存储位置 3、选择框架 拖拽一个Button,可以选择视图菜单---工具箱 4、工具箱 拖拽Lable控件和TextBook控件 5、拖拽控件 接下来右键解决方案&#xff0c;点击管理NuGet程序包 6、NuGet程序包 7、安装S7net 8、点击安装 9、安装完成 …

杨幂《哈尔滨1944》现场无剧本,大胆突破令人惊艳。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 杨幂在《哈尔滨1944》的拍摄现场&#xff0c;竟然不带剧本&am…

空想--让MYSQL安装双引擎SQL优化器

坑人的innodb_thread_concurrencyMYSQL的优化器是硬解析, 应用每次发往MYSQL的SQL是文本格式,需要编译,虽然时间不多,也就几百毫秒的事情,可架不住SQL的请求并发量啊! 为此数据库走了两条路线, 一条是ORACLE的缓存路线, 另外一条就是MYSQL的快速路线. ORACLE是尽可能的深度…

【电路】500W 12V至220V的逆变器

本电路采用LT1073芯片DC&#xff0d;DC转换器&#xff0c;将1.5V电压升压到5V或12V。该IC有三个不同的版本&#xff0c;这取决于输出电压。两个具有5V和12V的固定输出电压&#xff0c;而最有趣的是&#xff0c;可以进行调整。该调整是通过两个电阻器的分压器&#xff0c;连接到…

有没有那种不烂大街的跨年文案?

​迎接新年的曙光&#xff1a;那些不落俗套的跨年文案 当钟声敲响&#xff0c;旧的一年逝去&#xff0c;新的一年悄然来临&#xff0c;我们总希望用一些特别的话语来表达对过去的怀念和对未来的期待。在这个信息爆炸的时代&#xff0c;许多跨年文案都已经被人们看过无数次&…