public bool Add(MaterTrack materTrack) { using (TransactionScope tranScope = new TransactionScope()) { materTrack.Id = Guid.NewGuid(); materTrack.CreateTime = DateTime.Now; MaterTrack.Add(materTrack); var project = ProjectInfo.Get(materTrack.WorkflowId, materTrack.WorkflowType); var store = StoreBasicInfo.FirstOrDefault(s => s.StoreCode == project.USCode); var Codes = materTrack.NodeType.Split('_'); var url = string.Format("/{0}/Main#/{1}/Process/View?projectId={2}", Codes[0], Codes[1], materTrack.WorkflowId); //if (Codes[0] == "Closure") //临时改动 只针对Closure,因为Closure 用的还是老的URL //{ // url = string.Format("/{0}/Main#/{0}/{1}/Process/View?projectId={2}", Codes[0], Codes[1], materTrack.WorkflowId); //} var title = TaskWork.BuildTitle(materTrack.WorkflowId, store.NameZHCN, store.NameENUS); switch (materTrack.TrackType) { case MaterTrackType.Rep: { var actor = ProjectUsers.FirstOrDefault(pu => pu.ProjectId == materTrack.WorkflowId && pu.RoleCode == ProjectUserRoleCode.AssetActor); TaskWork.SendTask(materTrack.WorkflowId, title, project.USCode, url, actor, materTrack.WorkflowType, materTrack.NodeType, "Start_MaterTrack_Rep"); } break; case MaterTrackType.Feedback: { var legal = ProjectUsers.FirstOrDefault(pu => pu.ProjectId == materTrack.WorkflowId && pu.RoleCode == ProjectUserRoleCode.Legal); TaskWork.Finish(t => t.RefID == materTrack.WorkflowId && t.SourceCode == materTrack.WorkflowType && t.TypeCode == materTrack.NodeType && t.ActivityName == "Start_MaterTrack_Rep" && t.Status == TaskWorkStatus.UnFinish); if (TaskWork.Count(t => t.RefID == materTrack.WorkflowId && t.SourceCode == materTrack.WorkflowType && t.TypeCode == materTrack.NodeType && t.ActivityName == "Start_MaterTrack_Feedback" && t.Status == TaskWorkStatus.UnFinish) == 0) { TaskWork.SendTask(materTrack.WorkflowId, title, project.USCode, url, legal, materTrack.WorkflowType, materTrack.NodeType, "Start_MaterTrack_Feedback"); } } break; case MaterTrackType.Reply: { var actor = ProjectUsers.FirstOrDefault(pu => pu.ProjectId == materTrack.WorkflowId && pu.RoleCode == ProjectUserRoleCode.AssetActor); TaskWork.Finish(t => t.RefID == materTrack.WorkflowId && t.SourceCode == materTrack.WorkflowType && t.TypeCode == materTrack.NodeType && t.ActivityName == "Start_MaterTrack_Feedback" && t.Status == TaskWorkStatus.UnFinish); if (TaskWork.Count(t => t.RefID == materTrack.WorkflowId && t.SourceCode == materTrack.WorkflowType && t.TypeCode == materTrack.NodeType && t.ActivityName == "Start_MaterTrack_Rep" && t.Status == TaskWorkStatus.UnFinish) == 0) { TaskWork.SendTask(materTrack.WorkflowId, title, project.USCode, url, actor, materTrack.WorkflowType, materTrack.NodeType, "Start_MaterTrack_Rep"); } } break; } tranScope.Complete(); return(true); } }
public IHttpActionResult GetMaterTrackReps(string workflowId, Guid nodeId) { var tracks = MaterTrack.Search(m => m.WorkflowId == workflowId && m.NodeId == nodeId).ToList(); var reps = tracks.Where(t => t.TrackType == MaterTrackType.Rep).OrderBy(t => t.CreateTime).Select(t => { var rep = new MaterTrackRep(); rep.Id = t.Id; rep.Content = t.Content; rep.CreateTime = t.CreateTime; rep.Creator = t.Creator; rep.CreatorZHCN = t.CreatorZHCN; rep.CreatorENUS = t.CreatorENUS; rep.TrackType = (MaterTrackType)t.TrackType; if (tracks.Count(t2 => t2.TrackType == MaterTrackType.Rep && t2.CreateTime > t.CreateTime) > 0) { rep.IsFinish = true; } else { if (TaskWork.Count(t2 => t2.RefID == workflowId && t2.Status == TaskWorkStatus.UnFinish && t2.ActivityName.Contains("Start_MaterTrack")) > 0) { rep.IsFinish = false; } else { rep.IsFinish = true; } } rep.Replies = tracks.Where(f => f.ParentId == t.Id).OrderBy(f => f.CreateTime).Select(f => { var reply = new MaterTrackReply(); reply.Id = f.Id; reply.Content = f.Content; reply.CreateTime = f.CreateTime; reply.Creator = f.Creator; reply.CreatorZHCN = f.CreatorZHCN; reply.CreatorENUS = f.CreatorENUS; reply.TrackType = (MaterTrackType)f.TrackType; return(reply); }).ToList(); return(rep); }).ToList(); return(Ok(new { Reps = reps, IsLegal = ProjectUsers.IsRole(workflowId, ClientCookie.UserCode, ProjectUserRoleCode.Legal), IsAssetActor = ProjectUsers.IsRole(workflowId, ClientCookie.UserCode, ProjectUserRoleCode.AssetActor) })); }