/// <summary> /// 检查工序是否被占用 /// </summary> /// <param name="procedureStepId"></param> /// <exception cref="UserFriendlyException"></exception> public void CheckProcedureStepOccupation(Guid procedureStepId) { var procedureStep = _repositoryProcedureStep.Get(procedureStepId); // 如果有一个正在台座上的构件(v.Pedestal != null),与当前所在工序与所操作的工序相同(SubProjectManager.GetCurrentStepPriority(v) == procedureStep.Priority),则会报错 if (_repositorySubProject.GetAll().Include(v => v.Pedestal) .Any(v => SubProjectManager.GetCurrentStepPriority(v) == procedureStep.Priority && v.ProcedureId == procedureStep.ProcedureId && v.Pedestal != null)) { throw new UserFriendlyException("无法操作正在被使用的工序"); } }
/// <summary> /// 获取当前构件中的所有的工作项 /// </summary> /// <param name="subProjectId"></param> /// <returns></returns> public async Task <IQueryable <ProcedureStepTaskItem> > GetTaskItemsBySubProjectId(Guid subProjectId) { var subProject = await _repositorySubProject.GetAsync(subProjectId); // 获取当前优先级的工序id var procedureStepIds = _repositoryProcedureStep.GetAll().Where(v => v.ProcedureId == subProject.ProcedureId && v.Priority == SubProjectManager.GetCurrentStepPriority(subProject)).Select(v => v.Id); return(_repositoryPt.GetAll().Where(v => procedureStepIds.Contains(v.ProcedureStepId)) .Include(v => v.ProcedureStep) .Include(v => v.TaskItem)); }
/// <summary> /// 通过subProjectId获得工作项,并筛选未被分派的工作项 /// </summary> /// <param name="subProjectId"></param> /// <returns></returns> public async Task <IQueryable <ProcedureStepTaskItem> > GetTaskItemsUnAssigned(Guid subProjectId) { var subProject = await _repositorySubProject.GetAsync(subProjectId); // 获取同优先级工序 var procedureStepIds = _repositoryProcedureStep.GetAll().Where(v => v.ProcedureId == subProject.ProcedureId && v.Priority == SubProjectManager.GetCurrentStepPriority(subProject)).Select(v => v.Id); // 获取被分派的工作项 var taskItemIdAssigned = _repositoryTaskItemAssignment.GetAll() .Where(v => v.SubProjectId == subProjectId).Select(v => v.ProcedureStepTaskItemId); // 筛选未被分派的工作项 var query = _repositoryPt.GetAll().Where(v => !taskItemIdAssigned.Contains(v.Id)) // 筛选同优先级的工作项 .Where(v => procedureStepIds.Contains(v.ProcedureStepId)) .Include(v => v.ProcedureStep) .Include(v => v.TaskItem); return(query); }