/// <summary> /// 记录项目状态变更流转 /// </summary> /// <param name="projectId"></param> /// <param name="actionName"></param> /// <param name="targetStatus"></param> /// <param name="remarks"></param> /// <returns></returns> public virtual async Task TraceLog(int projectId, string actionName, ProjectStatus targetStatus, string remarks = "") { var projectTraceLog = new ProjectTraceLog() { ProjectId = projectId, TargetStatus = targetStatus, Remarks = remarks, ActionName = actionName }; await ProjectTraceLogRepository.InsertAsync(projectTraceLog); }
public virtual async Task BringOutFinalReview(int[] projectIds) { if (await ProjectRepository.CountAsync(o => projectIds.Contains(o.Id) && !o.IsInFinalReview) > 0) { throw new UserFriendlyException("项目已经被移出终评"); } //所有终评中的项目 var reviews = await ReviewRepository.GetAll().Where(o => o.ReviewType == ReviewType.Finish) .ToListAsync(); var finalReviewProjects = reviews.SelectMany(o => o.ReviewProjects).Select(o => o.Id).Distinct(); if (projectIds.Count(o => finalReviewProjects.Contains(o)) > 0) { throw new UserFriendlyException("无法将终评中的项目移出终评"); } //已经是终评中的项目无法取消终评 //if(await ProjectRepository.CountAsync(o=>projectIds.Contains(o.Id) && o.ProjectStatus == ProjectStatus.FinalReviewing) > 0) //{ // throw new UserFriendlyException("无法将终评中的项目移出终评"); //} var projects = await ProjectRepository.GetAll().Where(o => projectIds.Contains(o.Id)).ToListAsync(); foreach (var project in projects) { project.IsInFinalReview = false; //获取项目之前的项目状态 var traceLogs = await ProjectTraceLogRepository.GetAll().Where(o => o.ProjectId == project.Id).ToListAsync(); if (traceLogs.Count > 2) { //最后一项记录保存的是项目的当前状态,故再往上取一个记录 var lastTraceLog = traceLogs[traceLogs.Count - 2]; project.ProjectStatus = lastTraceLog.TargetStatus; //更改项目状态 await ProjectManager.TraceLog(project.Id, "移出终评", project.ProjectStatus); } await CacheManager.GetCache <int, object>("ProjectResultCache").RemoveAsync(project.Id); } }