public bool CreateOrUpdate(ITPurchaseViewModel viewModel, WFInstanceViewModel wFInstanceView, Guid userId, string userName) { if (viewModel.Id == new Guid()) { viewModel = mapper.Map(exampleContext.ITPurchase.Add(mapper.Map <ITPurchase>(viewModel)).Entity, viewModel); } else { viewModel = mapper.Map(exampleContext.ITPurchase.Update(mapper.Map <ITPurchase>(viewModel)).Entity, viewModel); } if (viewModel.AssetItem != null) { for (int i = 0; i < viewModel.AssetItem.Count; i++) { viewModel.AssetItem[i].BillId = viewModel.Id; if (viewModel.AssetItem[i].Id == new Guid()) { viewModel.AssetItem[i] = mapper.Map(exampleContext.AssetPuchase.Add(mapper.Map <AssetPuchase>(viewModel.AssetItem[i])).Entity, viewModel.AssetItem[i]); } else { viewModel.AssetItem[i] = mapper.Map(exampleContext.AssetPuchase.Update(mapper.Map <AssetPuchase>(viewModel.AssetItem[i])).Entity, viewModel.AssetItem[i]); } } } exampleContext.SaveChanges(); wFContext.SaveChanges(); wFInstanceView.Desc = $"{viewModel.ApplicantName}发起采购申请,总金额{viewModel.EstimatedAmount}"; wFInstanceView.BId = viewModel.Id; wFInstanceView.BType = typeof(ITPurchase).Name; var wf = iWFInstanceServer.CreateWFInstance(wFInstanceView, userId, userName); if (wf == null) { //没有创建成功 return(false); } return(true); }
/// <summary> /// 根据模板创建空白的流程实例 /// </summary> /// <param name="templateId"></param> /// <returns></returns> public WFInstanceViewModel GetWFWhiteByTemplate(Guid templateId) { var wfTemplate = templateServer.GetTemplateById(templateId); var instance = new WFInstanceViewModel(); instance.BId = new Guid(); instance.BType = ""; instance.Id = new Guid(); instance.WFId = templateId; instance.Lines = wfTemplate.Lines; instance.Nodes = new List <WFNodeInstanceViewModel>(); if (wfTemplate.Nodes != null) { foreach (var item in wfTemplate.Nodes) { var nodeInstance = new WFNodeInstanceViewModel(); nodeInstance.Id = new Guid(); nodeInstance.ActionLogs = ""; nodeInstance.BType = ""; nodeInstance.BId = new Guid(); nodeInstance.WFId = templateId; nodeInstance.InLines = item.InLines; nodeInstance.OutLines = item.OutLines; nodeInstance.State = WFState.Undefine; nodeInstance.WFInstanceId = instance.Id; nodeInstance.WFNodeId = item.NodeDefine.Id; nodeInstance.NodeDefine = item.NodeDefine; nodeInstance.NodeLogs = new List <NodeActionLog>(); nodeInstance.UserId = string.IsNullOrEmpty(nodeInstance.NodeDefine.UserId)? new Guid():new Guid(nodeInstance.NodeDefine.UserId); nodeInstance.UserName = string.IsNullOrEmpty(nodeInstance.NodeDefine.UserId) ?"": nodeInstance.NodeDefine.UserName; instance.Nodes.Add(nodeInstance); } } return(instance); }
public WFInstanceViewModel CreateWFInstance([FromBody] WFInstanceViewModel viewModel, Guid userId, String userName) { //解析token,获取用户id,用户名称 return(iWFInstanceServer.CreateWFInstance(viewModel, userId, userName)); }
/// <summary> /// 新增工作流实例 /// 将实例存入运行实例池 /// 将实例信息入库 /// </summary> /// <returns></returns> public WFInstanceViewModel CreateWFInstance(WFInstanceViewModel wFInstanceViewModel, Guid userId, string userName) { wFInstanceViewModel.Id = new Guid(); if (wFInstanceViewModel.BId == new Guid()) { throw new Exception("关联单据必填"); } if (string.IsNullOrWhiteSpace(wFInstanceViewModel.BType)) { throw new Exception("单据类型必填"); } if (wFInstanceViewModel.WFId == new Guid()) { throw new Exception("流程模板必填"); } var wfTemplate = GetWFWhiteByTemplate(wFInstanceViewModel.WFId); if (wfTemplate == null) { return(null); } //判断该单据是否已经参与流程管理,如果参与了,则不允许再创建新的流程。 var wfInstance = mapper.Map <WFInstance>(wFInstanceViewModel); wfInstance.Id = Guid.NewGuid(); wFContext.WFInstance.BulkInsert(new List <WFInstance> { wfInstance }); wFInstanceViewModel = mapper.Map(wfInstance, wFInstanceViewModel); Guid nextNodeId = new Guid(); var startNode = wFInstanceViewModel.Nodes.FirstOrDefault(p => NodeType.Start == p.NodeDefine.NodeType); if (startNode != null) { startNode.NodeLogs.Add(new NodeActionLog() { Action = WFOperation.Create, OperateTime = TimeHelper.GetTimeStamp(), Opinions = "", UserName = userName }); startNode.State = WFState.Created; startNode.UserId = userId; startNode.BId = wFInstanceViewModel.BId; startNode.BType = wFInstanceViewModel.BType; startNode.WFInstanceId = wfInstance.Id; startNode.WFId = wFInstanceViewModel.WFId; nextNodeId = startNode.OutLines[0].ENodeId; var nodeInstance = mapper.Map <WFNodeInstance>(startNode); nodeInstance.Id = Guid.NewGuid(); wFContext.WFNodeInstance.BulkInsert(new List <WFNodeInstance> { nodeInstance }); startNode = mapper.Map(nodeInstance, startNode); } else { throw new Exception("开始节点未定义,请联系管理员~"); } for (int i = 0; i < wFInstanceViewModel.Nodes.Count; i++) { if (wFInstanceViewModel.Nodes[i].NodeDefine.NodeType != NodeType.Start) { wFInstanceViewModel.Nodes[i].Id = new Guid(); wFInstanceViewModel.Nodes[i].NodeLogs = new List <NodeActionLog>(); if (wFInstanceViewModel.Nodes[i].WFNodeId == nextNodeId) { if (wFInstanceViewModel.Nodes[i].UserId == new Guid() && string.IsNullOrEmpty(wFInstanceViewModel.Nodes[i].NodeDefine.UserId)) { wFInstanceViewModel.Nodes[i].UserId = userId; wFInstanceViewModel.Nodes[i].UserName = userName; } wFInstanceViewModel.Nodes[i].State = WFState.WaitSend; wFInstanceViewModel.Nodes[i].WFInstanceId = wfInstance.Id; wFInstanceViewModel.Nodes[i].BId = wFInstanceViewModel.BId; wFInstanceViewModel.Nodes[i].BType = wFInstanceViewModel.BType; } else { if (string.IsNullOrEmpty(wFInstanceViewModel.Nodes[i].NodeDefine.UserId)) { wFInstanceViewModel.Nodes[i].UserId = new Guid(); wFInstanceViewModel.Nodes[i].UserName = ""; } else { wFInstanceViewModel.Nodes[i].UserId = new Guid(wFInstanceViewModel.Nodes[i].NodeDefine.UserId); wFInstanceViewModel.Nodes[i].UserName = wFInstanceViewModel.Nodes[i].NodeDefine.UserName; } wFInstanceViewModel.Nodes[i].State = WFState.Undefine; wFInstanceViewModel.Nodes[i].WFInstanceId = wfInstance.Id; wFInstanceViewModel.Nodes[i].BId = wFInstanceViewModel.BId; wFInstanceViewModel.Nodes[i].BType = wFInstanceViewModel.BType; } wFInstanceViewModel.Nodes[i].Desc = wfInstance.Desc; var nodeInstance = mapper.Map <WFNodeInstance>(wFInstanceViewModel.Nodes[i]); nodeInstance.Id = Guid.NewGuid(); wFContext.WFNodeInstance.BulkInsert(new List <WFNodeInstance> { nodeInstance }); wFInstanceViewModel.Nodes[i] = mapper.Map(nodeInstance, wFInstanceViewModel.Nodes[i]); } } if (!iWFPool.WFs.TryAdd(wFInstanceViewModel.Id, wFInstanceViewModel)) { return(null); } return(wFInstanceViewModel); }