camunda实现抄送模式

在工作流系统中,抄送功能类似于电子邮件的抄送功能,其主要目的是让抄送人知晓流程的情况,而不需要他们进行办理或审批。

工作流中的抄送功能通常支持两种模式:固定抄送和临时抄送

固定抄送是在流程模板设计阶段预先设置好的,当流程流转到抄送任务时自动触发。而临时抄送则是在流程任务办理中,由办理人员根据需要临时选择一个或多个人员发起抄送任务。

抄送模式的应用情况:

  1. 审批流程:
  • 当一个申请或报告需要经过多个部门的审批时,可以通过抄送功能让相关部门知晓流程进度,即使他们不直接参与审批。
  1. 信息共享:
  • 在团队或部门间需要共享重要信息或文件时,通过抄送功能可以让相关人员及时了解信息,保证信息传递的透明度。
  1. 项目管理:
  • 项目经理可以通过抄送功能将项目进度、变更信息同步给项目组成员,即使他们不是流程中的直接处理者。
  1. 客户服务:
  • 在客户服务流程中,客服人员可以将客户的反馈或处理结果抄送给相关部门,以便团队协作解决问题。
  1. 财务管理:
  • 财务报销、付款申请等流程中,抄送功能可以让申请人、审批人以及财务部门相关人员都能同步信息,确保流程的透明和效率。
  1. 人力资源:
  • 在员工入职、离职、升职等流程中,抄送功能可以确保人力资源部门、员工直接上级、财务部门等相关方都能获得必要的信息。
  1. 合规监督:
  • 对于需要符合特定法规或内部控制要求的流程,抄送功能可以帮助监督部门不直接干预流程的同时,保持对流程的监控。
  1. 任务协调:
  • 在跨部门协作的任务中,通过抄送功能可以让所有涉及的部门或个人了解任务状态,促进协调工作。
  1. 决策记录:
  • 在需要记录决策过程的场合,抄送可以作为决策通知的一部分,让所有利益相关人都有决策的记录。
  1. 审计追踪:

    • 审计时,抄送的历史记录可以作为流程执行的证据,帮助审计人员追踪和验证流程的执行情况。

流程建模

在这里插入图片描述

在初审和终审,审批人员可以添加抄送人员信息,在审批结束后将生成抄送记录。

xml内容


<?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_1g84ud8" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.10.0" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.19.0">
  <bpmn:process id="Process_0c2xy42" name="请假流程" isExecutable="true">
    <bpmn:startEvent id="StartEvent_1" camunda:initiator="start">
      <bpmn:outgoing>Flow_0fq95hn</bpmn:outgoing>
    </bpmn:startEvent>
    <bpmn:sequenceFlow id="Flow_0fq95hn" sourceRef="StartEvent_1" targetRef="Activity_0rbn70i" />
    <bpmn:userTask id="Activity_0rbn70i" name="申请" camunda:assignee="${general}">
      <bpmn:extensionElements>
        <camunda:formData>
          <camunda:formField id="days" label="请假天数" type="long" defaultValue="1" />
          <camunda:formField id="reason" label=" 请假理由" type="string" defaultValue="回家" />
          <camunda:formField id="type" label="请假类型" type="string" defaultValue="事假" />
          <camunda:formField id="d" label="test" type="string" defaultValue="理由">
            <camunda:properties />
            <camunda:validation />
          </camunda:formField>
        </camunda:formData>
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_0fq95hn</bpmn:incoming>
      <bpmn:outgoing>Flow_01kvxy5</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:sequenceFlow id="Flow_01kvxy5" sourceRef="Activity_0rbn70i" targetRef="Activity_1rht9n2" />
    <bpmn:userTask id="Activity_1rht9n2" name="初审" camunda:assignee="${guide}">
      <bpmn:extensionElements>
        <camunda:formData>
          <camunda:formField id="comment" label="评论" type="string" defaultValue="good" />
          <camunda:formField id="imageUrl" label="图片" type="string" />
        </camunda:formData>
        <camunda:taskListener class="org.jeecg.modules.camunda.usertask.listener.CopyListener" event="complete" />
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_01kvxy5</bpmn:incoming>
      <bpmn:outgoing>Flow_1whul4k</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:sequenceFlow id="Flow_1whul4k" sourceRef="Activity_1rht9n2" targetRef="Activity_0n2qyol" />
    <bpmn:userTask id="Activity_0n2qyol" name="终审" camunda:assignee="${leader}">
      <bpmn:extensionElements>
        <camunda:formData>
          <camunda:formField id="comment" label="评论" type="string" defaultValue="ok" />
          <camunda:formField id="pass" label="通过" type="boolean" defaultValue="true" />
          <camunda:formField id="imageUrl" label="图片" type="string" />
        </camunda:formData>
        <camunda:taskListener class="org.jeecg.modules.camunda.usertask.listener.CopyListener" event="complete" />
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_1whul4k</bpmn:incoming>
      <bpmn:outgoing>Flow_0f4i22k</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:endEvent id="Event_1i65d7z">
      <bpmn:incoming>Flow_0f4i22k</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="Flow_0f4i22k" sourceRef="Activity_0n2qyol" targetRef="Event_1i65d7z" />
    <bpmn:textAnnotation id="TextAnnotation_1vu0v5p">
      <bpmn:text>军师</bpmn:text>
    </bpmn:textAnnotation>
    <bpmn:association id="Association_07asc3h" sourceRef="Activity_1rht9n2" targetRef="TextAnnotation_1vu0v5p" />
  </bpmn:process>
 
</bpmn:definitions>

上述建模中,在userTask设置了taskListener用于处理抄送逻辑

 <camunda:taskListener class="org.jeecg.modules.camunda.usertask.listener.CopyListener" event="complete" />

CopyListener代码


@Slf4j
public class CopyListener implements TaskListener {
    @Override
    public void notify(DelegateTask delegateTask) {
        log.info("copy listener");
        // 设置抄送人
        Object obj = delegateTask.getVariable("copyUser");
        if (obj != null) {
            List<String> copyUsers = Arrays.asList(obj.toString().split(","));
            for (String user : copyUsers) {
                //删除存在的抄送,避免重复抄送
                delegateTask.deleteGroupIdentityLink(user, "cc");
                delegateTask.addUserIdentityLink(user, "cc");
            }
        }
    }
}

查询抄送给我的查询逻辑

 public Page<MyCopyRes> pageQueryMyCopy(LoginUser loginUser, Integer pageNo, Integer pageSize) {
        int start = (pageNo - 1) * pageSize;
        int offset = pageSize;
        long count = historyService.createHistoricIdentityLinkLogQuery().userId(loginUser.getUsername()).type("cc").count();
        if (count == 0) {
            return new Page<>();
        }

        List<HistoricIdentityLinkLog> historicIdentityLinkLogs = historyService.createHistoricIdentityLinkLogQuery()
                .userId(loginUser.getUsername()).type("cc")
                .orderByTime().desc().listPage(start, offset);
     // 以上就是查询抄送给我的核心代码逻辑
 }   

抄送演示

在这里插入图片描述

在待我审批的菜单中,找到抄送的操作,将关羽加入抄送人员。然后完成审批动作。

在这里插入图片描述

审批通过之后,在我的已办菜单中将看到抄送的信息。

在这里插入图片描述

使用关羽的账号登陆系统,点击抄送给我的菜单,便可以看到抄送记录。

至此,完成整个抄送流程演示, 如果疑问请留言。如需要体验,请访问JeecgFlow

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值