首页 > 其他分享 >开源工作流WorflowCore学习之工作流简单审核

开源工作流WorflowCore学习之工作流简单审核

时间:2023-05-26 15:11:06浏览次数:37  
标签:set Console get 开源 工作 WorflowCore OutPut using public

在开源趋势下,很多开源的组件在国内,乃至全网都少有案例。为了做这个工作流翻了许多帖子和github的帖子

在这里对github ZL.WorflowCoreDemo,和PizzaRestaurantWorkflow-main 表示感谢,同时也感谢给博客园的帖子。

本案例再利用ZL.WorflowCoreDemo 中的项目直接进行新加的。关于如何安装工作流请随便在园子里找一篇文章即可。

在案例中可能有许多做的不合理的地方,请广大园友指正。欢迎大家留言讨论

本案例为控制台应用程序

不多说直接上代码:

1. 定义请假基础类

namespace ZL.WorflowCoreDemo.AskForLeave
{
internal class ApproveMoldel
{
public int ServerId { get; set; }
public string Name { get; set; } = "张三的请假申请";

public bool DepApprove { get; set; }
public bool HrApprove { get; set; }
public int Status { get; set; } = 0;
public Approve Dep { get; set; }
public Approve Hr { get; set; }
}
internal class Approve
{
public bool approveStatus { get; set; }
public string Opinion { get; set; }
}
}

2,定义部门审批中间流程

using System;
using WorkflowCore.Interface;
using WorkflowCore.Models;

namespace ZL.WorflowCoreDemo.AskForLeave
{
internal class DepApprove : StepBody
{
/// <summary>
/// 数据库的id
/// </summary>
public int ServerId { get; set; }
public Approve Dep { get; set; }
public bool OutPut { get; set; }
public override ExecutionResult Run(IStepExecutionContext context)
{
OutPut = Dep.approveStatus;
//将意见存入数据库
Console.WriteLine("部门审批:" + OutPut);
if (OutPut)
{

Console.WriteLine("等待下一个人审批");
}
return ExecutionResult.Next();

}
}
}

3.定义Hr审批中间流程

using System;
using WorkflowCore.Interface;
using WorkflowCore.Models;

namespace ZL.WorflowCoreDemo.AskForLeave
{
internal class HrApprove : StepBody
{
/// <summary>
/// 数据库的id
/// </summary>
public int ServerId { get; set; }
public Approve hr { get; set; }
public bool OutPut { get; set; }
public override ExecutionResult Run(IStepExecutionContext context)
{
OutPut = hr.approveStatus;
//将意见存入数据库
Console.WriteLine("Hr审批:" + OutPut);
return ExecutionResult.Next();

}
}
}

4.定流程主服务

using System;
using WorkflowCore.Interface;
using WorkflowCore.Models;

namespace ZL.WorflowCoreDemo.AskForLeave
{
internal class AskForLeaveFlow : IWorkflow<ApproveMoldel>
{
public string Id => nameof(AskForLeaveFlow);

public int Version => 1;

public void Build(IWorkflowBuilder<ApproveMoldel> builder)
{
//分支1 同意审批也可以不要直接进入下一个审批
var branch1 = builder.CreateBranch()
.StartWith(x => Console.WriteLine("审批通过"));
//分支2 拒绝审批
var branch2 = builder.CreateBranch()
.StartWith(x => Console.WriteLine("审批不通过"))
.Then(x => Console.WriteLine("流程结束")).EndWorkflow();

//注册工作流流程顺序
builder.StartWith(c => ExecutionResult.Next())
.WaitFor("depFor", (data, context) => context.Workflow.Id, data => DateTime.Now)//定义部门审批事件
.Output(d => d.Dep, s => s.EventData)
.Then<DepApprove>()
.Input(i => i.ServerId, s => s.ServerId)
.Input(i => i.Dep, s => s.Dep)
.Output(d => d.DepApprove, s => s.OutPut)
.Decide(d => d.DepApprove)//条件分支
.Branch((d, o) => d.DepApprove, branch1)
.Branch((d, o) => !d.DepApprove, branch2)

.WaitFor("hrFor", (d, c) => c.Workflow.Id, d => DateTime.Now)//定义hr审批事件
.Output(d => d.Hr, s => s.EventData)
.Then<HrApprove>()
.Input(i => i.ServerId, s => s.ServerId)
.Input(i => i.hr, s => s.Hr)
.Output(d => d.HrApprove, s => s.OutPut)
.Decide(d => d.HrApprove)//条件分支
.Branch((d, o) => d.HrApprove, branch1)
.Branch((d, o) => !d.HrApprove, branch2)
.Then(x => Console.WriteLine("流程结束")).EndWorkflow();
}
}
}

5.定义启动程序

using Microsoft.Extensions.DependencyInjection;
using System;
using WorkflowCore.Interface;

namespace ZL.WorflowCoreDemo.AskForLeave
{
public class AskForLeaveFlowRun
{
public static async void Run()
{
IServiceProvider serviceProvider = ConfigureServices();
var host = serviceProvider.GetService<IWorkflowHost>();
//注册工作流
host.RegisterWorkflow<AskForLeaveFlow, ApproveMoldel>();
host.Start();//启动工作流主机
//员工请假申请发出
var model = new ApproveMoldel
{
ServerId = 1,
Dep = new(),
Hr = new(),
};
//定义一个工作流
string workflowId = await host.StartWorkflow("AskForLeaveFlow", 1, model);
//模拟部门经历审批
Console.WriteLine("输入意见");
var value = Console.ReadLine();
var dep = new Approve()
{
approveStatus = true,
Opinion = value
};
//点击发布订阅
await host.PublishEvent("depFor", workflowId, dep);
//模拟人事经理审批
Console.WriteLine("输入意见2");
var value2 = Console.ReadLine();
var hr = new Approve()
{
approveStatus = true,
Opinion = value2
};
//点击发布订阅
await host.PublishEvent("hrFor", workflowId, hr);

Console.ReadLine();
host.Stop();
}

private static IServiceProvider ConfigureServices()
{
//setup dependency injection
IServiceCollection services = new ServiceCollection();
services.AddLogging();
services.AddWorkflow();
var serviceProvider = services.BuildServiceProvider();
return serviceProvider;
}
}

}

 

6.调用

namespace ZL.WorflowCoreDemo
{
class Program
{
static void Main(string[] args)
{

AskForLeave.AskForLeaveFlowRun.Run();

 

}

}
}

自此完结!

 

标签:set,Console,get,开源,工作,WorflowCore,OutPut,using,public
From: https://www.cnblogs.com/xiaohhan/p/17434774.html

相关文章

  • 微软Playwright开源自动化框架初探-安装和调试(java版)
    最近在研究部门的UI自动化框架(java+selenium+testNG+openCV等),发现在调试脚本时,需要先下载谷歌浏览器。无头/有头模式还需要代码区分。还有一个体验问题,程序启动太慢,从运行到浏览器启动,差不多需要30s左右,等得有点着急。  在知乎/CSDN中找到多篇文章推荐自动化测试利器-Playwrigh......
  • OKR能否让工作更加清晰,减少推诿扯皮?
    OKR是一种目标管理工具,通过制定明确的目标和关键结果,可以帮助组织和个人更好地明确工作目标和计划,从而减少工作不清、推诿扯皮等问题。具体而言,OKR在以下几个方面可以促进工作清晰化,减少推诿扯皮: 点击免费领取绩效考核模版等资料目标明确:OKR强调目标明确,需要具体、可衡量、可......
  • 清华大学开源软件镜像站 常用下载地址
    https://mirrors.tuna.tsinghua.edu.cn/常用发行版isohttps://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.4/rhel/7/x86_64/zabbix域名选择https://mirrors.tuna.tsinghua.edu.cn自动选择https://mirrors6.tuna.tsinghua.edu.cn只解析IPv6https://mirrors4.tuna.tsinghu......
  • 什么是一致性哈希?一致性哈希是如何工作的?如何设计一致性哈希?
    如果你有n个缓存服务器,一个常见的负载均衡方式是使用以下的哈希方法:服务器索引=哈希(键)%N,其中N是服务器池的大小。让我们通过一个例子来说明这是如何工作的。如表5-1所示,我们有4台服务器和8个字符串键及其哈希值。为了获取存储某个键的服务器,我们执行模运算f(键)%......
  • 开源 RPC 框架有哪些
    一类是跟某种特定语言平台绑定的,另一类是与语言无关即跨语言平台的。跟语言平台绑定的开源RPC框架主要有下面几种。Dubbo:国内最早开源的RPC框架,由阿里巴巴公司开发并于2011年末对外开源,仅支持Java语言。Motan:微博内部使用的RPC框架,于2016年对外开源,仅支持Java语言。T......
  • VS Code的工作台显示
    设置显示/取消左上方的工作台 file--preferences--settings--搜索workbench--选择visible ......
  • 好用的工作记事软件 好用的工作记事本APP
    有不少职场人士都表示,现在自己的工作是越来越忙了,并且随着工作任务的增加,经常会忘记重要的工作事项,这太影响工作了。不过在工作中使用一款工作记事本APP就能够帮助我们随时随地记录工作中的各种事情了,可以起到很好的备忘和提醒作用。那么好用的工作记事软件有哪些呢?有没有一款好......
  • 政府工作报告词云
    学了嵩天老师的爬虫和python语言程序设计,就把语言程序设计里的一个实例结合了爬虫来写~importrequestsimportosimportwordcloudimportjiebadefDownlodaTxt(root,url):path=root+str(url.split('/')[-1])[-10:]try:ifnotos.path.exists(root):......
  • 网络灌包命令_iperf工作原理及使用方法
         网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理、网络存在安全漏洞等原因,都会导致网络带宽利用率不高。要找到网络带宽利用率不高的原因,就需要对网络传输进行监控,此时就需要用到一些网络性能评估工具,而Ipe......
  • 红外光学雨量传感器的工作原理
    红外光学雨量传感器的工作原理IFR02红外光学雨量传感器是一种非接触式的雨量监测装置,其工作原理基于红外光学测量技术。 传感器在工作时,通过发射红外光束对测量区域进行照射,当红外光线被雨滴所遮挡时,光束会被反射或散射,此时传感器可以通过接收反射或散射的光线来计算测量区域......