private static void 客户指示处理测试(Case @case, User user) { 立案(@case); 分案(@case.编号, user); 办案(@case.编号, user, TaskNames.客户指示办案).Should().BeTrue(); 流程部质检(@case.编号, false); 办案(@case.编号, user, TaskNames.客户指示办案).Should().BeTrue(); 流程部质检(@case.编号, false); 办案(@case.编号, user, TaskNames.客户指示办案).Should().BeTrue(); 流程部质检(@case.编号, true); 处理提交并确认(@case.编号); }
private static void 官方来函测试(Case @case, User user) { 立案(@case); 分案(@case.编号, user); 办案(@case.编号, user, TaskNames.官方来函办案); 代理部内审(@case.编号, false); 办案(@case.编号, user, TaskNames.官方来函办案); 代理部内审(@case.编号, true); 文员处理案件(@case.编号, TaskNames.制作官方格式函); 流程部质检(@case.编号, false); 办案(@case.编号, user, TaskNames.官方来函办案); 代理部内审(@case.编号, true); 文员处理案件(@case.编号, TaskNames.制作官方格式函); 流程部质检(@case.编号, true); 处理提交并确认(@case.编号); }
private static void 新申请测试(Case @case, User 主办员, User 翻译, User 一校, User 二校) { 立案(@case); 分案(@case.编号, 主办员, 翻译, 一校, 二校); Action 处理新申请案件 = () => Parallel.Invoke(() => 办案(@case.编号, 主办员, TaskNames.撰写五书) .Should().BeTrue(), () => { 办案(@case.编号, 一校, TaskNames.原始资料翻译一校) .Should().BeFalse(); 办案(@case.编号, 翻译, TaskNames.原始资料翻译) .Should().BeTrue(); 办案(@case.编号, 二校, TaskNames.原始资料翻译二校) .Should().BeFalse(); 办案(@case.编号, 一校, TaskNames.原始资料翻译一校) .Should().BeTrue(); 办案(@case.编号, 二校, TaskNames.原始资料翻译二校) .Should().BeTrue(); }); 处理新申请案件(); // 第一次内审不通过 代理部内审(@case.编号, false); 处理新申请案件(); // 第二次内审通过 代理部内审(@case.编号, true); 办案(@case.编号, 主办员, TaskNames.定稿五书).Should().BeTrue(); 文员处理案件(@case.编号, TaskNames.制作专利请求书); 流程部质检(@case.编号, true); 处理提交并确认(@case.编号); }
public void TestEntireWorkflow() { // 三个办案员 var 办案员A = new User {UserName = "******", Password = "******", Role = Role.办案员}; var 办案员B = new User {UserName = "******", Password = "******", Role = Role.办案员}; var 办案员C = new User {UserName = "******", Password = "******", Role = Role.办案员}; // 并行处理10个案件案件 Parallel.Invoke(() => 客户指示处理测试(new Case { 编号 = "111", 创建时间 = DateTime.Now, 绝限日 = DateTime.Now.AddDays(30), 案件类型 = CaseType.客户指示处理 }, 办案员B), () => 客户指示处理测试(new Case { 编号 = "222", 创建时间 = DateTime.Now, 绝限日 = DateTime.Now.AddDays(30), 案件类型 = CaseType.客户指示处理 }, 办案员B), () => 客户指示处理测试(new Case { 编号 = "333", 创建时间 = DateTime.Now, 绝限日 = DateTime.Now.AddDays(30), 案件类型 = CaseType.客户指示处理 }, 办案员A), () => 新申请测试(new Case { 编号 = "444", 创建时间 = DateTime.Now, 绝限日 = DateTime.Now.AddDays(30), 案件类型 = CaseType.新申请 }, 办案员A, 办案员B, 办案员A, 办案员C), () => 新申请测试(new Case { 编号 = "555", 创建时间 = DateTime.Now, 绝限日 = DateTime.Now.AddDays(30), 案件类型 = CaseType.新申请 }, 办案员A, 办案员B, 办案员A, 办案员C), () => 新申请测试(new Case { 编号 = "666", 创建时间 = DateTime.Now, 绝限日 = DateTime.Now.AddDays(30), 案件类型 = CaseType.新申请 }, 办案员A, 办案员A, 办案员B, 办案员C), () => 新申请测试(new Case { 编号 = "777", 创建时间 = DateTime.Now, 绝限日 = DateTime.Now.AddDays(30), 案件类型 = CaseType.新申请 }, 办案员A, 办案员C, 办案员B, 办案员A), () => 官方来函测试(new Case { 编号 = "888", 创建时间 = DateTime.Now, 绝限日 = DateTime.Now.AddDays(30), 案件类型 = CaseType.官方来函 }, 办案员C), () => 官方来函测试(new Case { 编号 = "999", 创建时间 = DateTime.Now, 绝限日 = DateTime.Now.AddDays(30), 案件类型 = CaseType.官方来函 }, 办案员B), () => 官方来函测试(new Case { 编号 = "000", 创建时间 = DateTime.Now, 绝限日 = DateTime.Now.AddDays(30), 案件类型 = CaseType.官方来函 }, 办案员B)); }
private static void 处理提交并确认(string caseId) { Debug.WriteLine("处理提交并确认:" + caseId); var caseWorkflowManager = ServiceLocator.Current.GetInstance<ICaseWorkflowManager>(); var user = new User {UserName = "******", Password = "******", Role = Role.质检员}; caseWorkflowManager.GetPendingCaseIds(TaskNames.处理提交并确认, user).Should().Contain(caseId); // 各种………… // 好了 caseWorkflowManager.ResumeCase(caseId, TaskNames.处理提交并确认); // 这时案件应该就已经从他的任务表中移除了 caseWorkflowManager.GetPendingCaseIds(TaskNames.处理提交并确认, user).Should().NotContain(caseId); // 案件状态也变成已完成 ServiceLocator.Current.GetInstance<ICaseInfoManager>() .GetCaseById(caseId).Value.状态.Should().Be(CaseState.Completed); }
private static void 流程部质检(string caseId, bool pass) { Debug.WriteLine("流程部质检:" + caseId); var caseWorkflowManager = ServiceLocator.Current.GetInstance<ICaseWorkflowManager>(); var user = new User {UserName = "******", Password = "******", Role = Role.质检员}; caseWorkflowManager.GetPendingCaseIds(TaskNames.流程部质检, user).Should().Contain(caseId); // 各种检验………… // 检验完了 caseWorkflowManager.ResumeCase(caseId, TaskNames.流程部质检, pass); // 这时案件应该就已经从他的任务表中移除了 caseWorkflowManager.GetPendingCaseIds(TaskNames.流程部质检, user).Should().NotContain(caseId); }
private static void 文员处理案件(string caseId, string taskName) { Debug.WriteLine(taskName + ":" + caseId); var caseWorkflowManager = ServiceLocator.Current.GetInstance<ICaseWorkflowManager>(); var user = new User {UserName = "******", Password = "******", Role = Role.代理部文员}; caseWorkflowManager.GetPendingCaseIds(taskName, user).Should().Contain(caseId); // 制作………… // 好了 caseWorkflowManager.ResumeCase(caseId, taskName); // 这时案件应该就已经从他的任务表中移除了 caseWorkflowManager.GetPendingCaseIds(taskName, user).Should().NotContain(caseId); }
private static bool 办案(string caseId, User user, string taskName) { Debug.WriteLine(taskName + ":" + caseId + " by " + user.UserName); var caseWorkflowManager = ServiceLocator.Current.GetInstance<ICaseWorkflowManager>(); // 待处理案件 IEnumerable<string> pendingCaseIds = caseWorkflowManager.GetPendingCaseIds(taskName, user); if (!pendingCaseIds.Contains(caseId)) return false; // 办案过程,发消息上传下载文档什么的…… // 办好了 caseWorkflowManager.ResumeCase(caseId, taskName); // 这时案件应该就已经从他的任务表中移除了 caseWorkflowManager.GetPendingCaseIds(taskName, user).Should().NotContain(caseId); return true; }
private static void 分案(string caseId, User 主办员, User 翻译 = null, User 一校 = null, User 二校 = null) { Debug.WriteLine("分案:" + caseId); var caseInfoManager = ServiceLocator.Current.GetInstance<ICaseInfoManager>(); var caseWorkflowManager = ServiceLocator.Current.GetInstance<ICaseWorkflowManager>(); // 已登录的代理部主管 var user = new User {UserName = "******", Password = "******", Role = Role.代理部主管}; // 查看待分案的案件 IEnumerable<string> pendingCaseIds = caseWorkflowManager.GetPendingCaseIds(TaskNames.分案, user); pendingCaseIds.Should().Contain(caseId); Case @case = caseInfoManager.GetCaseById(caseId).Value; // 指定办案员 @case.主办员用户名 = 主办员.UserName; // 除非是新申请案件,以下三项都为空 if (翻译 != null) @case.翻译用户名 = 翻译.UserName; if (一校 != null) @case.一校用户名 = 一校.UserName; if (二校 != null) @case.二校用户名 = 二校.UserName; // 更新案件信息 caseInfoManager.UpdateCase(@case); // 任务完成 caseWorkflowManager.ResumeCase(@case, TaskNames.分案); // 这时案件应该就已经从他的分案任务表中移除了 caseWorkflowManager.GetPendingCaseIds(TaskNames.分案, user).Should().NotContain(caseId); }