private async static void UploadTimeOutCheck(WorkApplicationData data, LitUdrContext context, IConfiguration _configuration) { //provera da li je pisac uplatio clanarinu HttpResponseMessage taskResponseCheck = await client.GetAsync($"{_configuration["url"]}/external-task?processDefinitionId={data.processDefinitionId}&&processInstanceId={data.processInstanceId}"); Task <string> jsonStringResultCheck = taskResponseCheck.Content.ReadAsStringAsync(); List <CamundaTask> tasksCheck = JsonConvert.DeserializeObject <List <CamundaTask> >(jsonStringResultCheck.Result); if (tasksCheck.Count > 0) { ControlFlow.ResumeOnError(() => { EmailService.SendEmail(new UserDto() { Email = data.WriterEmail }, context, "LateUpload"); }); //logujem ga FetchAndLock fetchAndLockFail = new FetchAndLock() { workerId = data.WriterEmail, maxTasks = 10, topics = new List <Topic>() { new Topic() { lockDuration = 10000, topicName = "NotificiranjeONePostovanjuRoka" } } }; var fetchAndLockContentFail = new StringContent(JsonConvert.SerializeObject(fetchAndLockFail), Encoding.UTF8, "application/json"); HttpResponseMessage lockExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/fetchAndLock", fetchAndLockContentFail); //daj mi moj lokovan da izvucem id HttpResponseMessage externalTaskInfoFail = await client.GetAsync($"{_configuration["url"]}/external-task?workerId={data.WriterEmail}"); Task <string> jsonStringResult_1Fail = externalTaskInfoFail.Content.ReadAsStringAsync(); List <CamundaExternalTask> externalTasksFail = JsonConvert.DeserializeObject <List <CamundaExternalTask> >(jsonStringResult_1Fail.Result); CamundaExternalTask currenTaskFail = externalTasksFail.First(); //prosledimm reziltat CompleteExternalTask completeExternalTaskFail = new CompleteExternalTask() { workerId = data.WriterEmail, variables = null }; var completeExternalTaskContentFail = new StringContent(JsonConvert.SerializeObject(completeExternalTaskFail), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/{currenTaskFail.id}/complete", completeExternalTaskContentFail); } }
public async Task <IActionResult> GetAllReviewTasks(string Token) { User currentUser = _context.Users.FirstOrDefault(u => u.Email.Equals(Token)); List <UserReview> reviewData = _context.UserReview.Where(u => u.UserId.Equals(currentUser.Id)).ToList(); List <WorkApplicationDataDto> data = new List <WorkApplicationDataDto>(); foreach (var review in reviewData) { WorkApplicationData result = _context.workApplicationData.FirstOrDefault(data => data.Id.Equals(review.WorkApplicationDataId)); if (result != null) { data.Add(new WorkApplicationDataDto() { processDefinitionId = result.processDefinitionId, processInstanceId = result.processInstanceId, Id = result.Id }); } } return(Ok(JsonConvert.SerializeObject(data))); }
public async Task <IActionResult> PostReviewData([FromBody] ReviewDto dto) { if (dto == null) { return(BadRequest()); } User boardMember = _context.Users.FirstOrDefault(u => u.Email.Equals(dto.Token)); WorkApplicationData data = _context.workApplicationData.FirstOrDefault(wad => wad.Id.Equals(dto.Id)); List <UserReview> allReviews = _context.UserReview.Where(ur => ur.WorkApplicationDataId.Equals(dto.Id)).ToList(); UserReview currentReview = allReviews.Find(u => u.WorkApplicationDataId.Equals(data.Id) && u.UserId.Equals(boardMember.Id)); data.Comments += $"\n {boardMember.Email}: {dto.Comment} \n"; switch (dto.Result) { case "approve": _context.UserReview.Remove(currentReview); data.BoardMembersApprove += 1; _context.workApplicationData.Update(data); _context.SaveChanges(); break; case "decline": _context.UserReview.Remove(currentReview); _context.SaveChanges(); break; case "needMoreData": _context.UserReview.Remove(currentReview); data.BoardMembeNeedsMoreData = true; _context.workApplicationData.Update(data); _context.SaveChanges(); break; } //TODO u workaplication data sacuvati komentare u novom polu i posle ih proslediti kroz mail List <UserReview> currentAllReviews = _context.UserReview.Where(ur => ur.WorkApplicationDataId.Equals(dto.Id)).ToList(); if (currentAllReviews.Count > 0) { HttpResponseMessage taskResponse = await client.GetAsync($"{_configuration["url"]}/task?processDefinitionId={data.processDefinitionId}&&processInstanceId={data.processInstanceId}"); Task <string> jsonStringResult = taskResponse.Content.ReadAsStringAsync(); List <CamundaTask> tasks = JsonConvert.DeserializeObject <List <CamundaTask> >(jsonStringResult.Result); if (tasks.Count == 0) { return(BadRequest()); } var content = new StringContent("{}", Encoding.UTF8, "application/json"); HttpResponseMessage commpleteTask = await client.PostAsync($"{_configuration["url"]}/task/{tasks[0].id}/complete", content); } else { HttpResponseMessage taskResponse = await client.GetAsync($"{_configuration["url"]}/task?processDefinitionId={data.processDefinitionId}&&processInstanceId={data.processInstanceId}"); Task <string> jsonStringResult = taskResponse.Content.ReadAsStringAsync(); List <CamundaTask> tasks = JsonConvert.DeserializeObject <List <CamundaTask> >(jsonStringResult.Result); if (tasks.Count == 0) { return(BadRequest()); } StringContent content; if (data.BoardMembeNeedsMoreData) { content = new StringContent(JsonConvert.SerializeObject(new CompleteUserTaskWithVariable() { variables = new WriterFailedAbstract() { WriterFailed = new object() } }), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteTask = await client.PostAsync($"{_configuration["url"]}/task/{tasks[0].id}/complete", content); try { string guid = Guid.NewGuid().ToString(); ControlFlow.ResumeOnError(() => { EmailService.SendEmail(new UserDto() { Email = data.WriterEmail, Password = guid, FirstName = data.Comments }, _context, "NeedMoreWork"); }); NewUserData newUserData = new NewUserData() { Hash = guid, NewUserEmmail = data.WriterEmail, processDefinitionId = data.processDefinitionId, processInstanceId = data.processInstanceId }; _context.NewUserData.Add(newUserData); _context.SaveChanges(); //TODO sacuvati u bazu i obrnuti krug //logujem ga FetchAndLock fetchAndLockFail = new FetchAndLock() { workerId = data.WriterEmail, maxTasks = 10, topics = new List <Topic>() { new Topic() { lockDuration = 10000, topicName = "NotificiranjeIDavanjeRoka" } } }; var fetchAndLockContentFail = new StringContent(JsonConvert.SerializeObject(fetchAndLockFail), Encoding.UTF8, "application/json"); HttpResponseMessage lockExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/fetchAndLock", fetchAndLockContentFail); //daj mi moj lokovan da izvucem id HttpResponseMessage externalTaskInfoFail = await client.GetAsync($"{_configuration["url"]}/external-task?workerId={data.WriterEmail}"); Task <string> jsonStringResult_1Fail = externalTaskInfoFail.Content.ReadAsStringAsync(); List <CamundaExternalTask> externalTasksFail = JsonConvert.DeserializeObject <List <CamundaExternalTask> >(jsonStringResult_1Fail.Result); CamundaExternalTask currenTaskFail = externalTasksFail.First(); //prosledimm reziltat CompleteExternalTask completeExternalTaskFail = new CompleteExternalTask() { workerId = data.WriterEmail, variables = null }; var completeExternalTaskContentFail = new StringContent(JsonConvert.SerializeObject(completeExternalTaskFail), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/{currenTaskFail.id}/complete", completeExternalTaskContentFail); const int scheduledPeriodMilliseconds = 70000; var allTasksWaitHandle = new AutoResetEvent(true); ThreadPool.RegisterWaitForSingleObject( allTasksWaitHandle, (s, b) => { UploadTimeOutCheck(data, _context, _configuration); }, null, scheduledPeriodMilliseconds, false); } catch (Exception e) { return(BadRequest()); } } else if (data.BoardMembersApprove == data.BoardMembersInitialCount) { content = new StringContent(JsonConvert.SerializeObject(new CompleteUserTaskWithVariable() { variables = new WriterFailedAbstract() { WriterFailed = new WriterFailed() { value = false } } }), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteTask = await client.PostAsync($"{_configuration["url"]}/task/{tasks[0].id}/complete", content); try { string guid = Guid.NewGuid().ToString(); ControlFlow.ResumeOnError(() => { EmailService.SendEmail(new UserDto() { Email = data.WriterEmail, Password = guid, FirstName = data.Comments }, _context, "Approved"); }); NewUserData newUserData = new NewUserData() { Hash = guid, processDefinitionId = data.processDefinitionId, processInstanceId = data.processInstanceId }; _context.NewUserData.Add(newUserData); _context.SaveChanges(); //logujem ga FetchAndLock fetchAndLockFail = new FetchAndLock() { workerId = data.WriterEmail, maxTasks = 10, topics = new List <Topic>() { new Topic() { lockDuration = 10000, topicName = "NotificiranjeOUspehu" } } }; var fetchAndLockContentFail = new StringContent(JsonConvert.SerializeObject(fetchAndLockFail), Encoding.UTF8, "application/json"); HttpResponseMessage lockExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/fetchAndLock", fetchAndLockContentFail); //daj mi moj lokovan da izvucem id HttpResponseMessage externalTaskInfoFail = await client.GetAsync($"{_configuration["url"]}/external-task?workerId={data.WriterEmail}"); Task <string> jsonStringResult_1Fail = externalTaskInfoFail.Content.ReadAsStringAsync(); List <CamundaExternalTask> externalTasksFail = JsonConvert.DeserializeObject <List <CamundaExternalTask> >(jsonStringResult_1Fail.Result); CamundaExternalTask currenTaskFail = externalTasksFail.First(); //prosledimm reziltat CompleteExternalTask completeExternalTaskFail = new CompleteExternalTask() { workerId = data.WriterEmail, variables = null }; var completeExternalTaskContentFail = new StringContent(JsonConvert.SerializeObject(completeExternalTaskFail), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/{currenTaskFail.id}/complete", completeExternalTaskContentFail); const int scheduledPeriodMilliseconds = 70000; var allTasksWaitHandle = new AutoResetEvent(true); ThreadPool.RegisterWaitForSingleObject( allTasksWaitHandle, (s, b) => { TimeOutCheck(data, _context, _configuration); }, null, scheduledPeriodMilliseconds, false); } catch (Exception e) { return(BadRequest()); } } else if (data.BoardMembersApprove < (data.BoardMembersInitialCount - data.BoardMembersApprove)) { content = new StringContent(JsonConvert.SerializeObject(new CompleteUserTaskWithVariable() { variables = new WriterFailedAbstract() { WriterFailed = new WriterFailed() { value = true } } }), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteTask = await client.PostAsync($"{_configuration["url"]}/task/{tasks[0].id}/complete", content); try { ControlFlow.ResumeOnError(() => { EmailService.SendEmail(new UserDto() { Email = data.WriterEmail, FirstName = data.Comments }, _context, "Declined"); }); //logujem ga FetchAndLock fetchAndLockFail = new FetchAndLock() { workerId = data.WriterEmail, maxTasks = 10, topics = new List <Topic>() { new Topic() { lockDuration = 10000, topicName = "NotificiranjeOOdbijanju" } } }; var fetchAndLockContentFail = new StringContent(JsonConvert.SerializeObject(fetchAndLockFail), Encoding.UTF8, "application/json"); HttpResponseMessage lockExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/fetchAndLock", fetchAndLockContentFail); //daj mi moj lokovan da izvucem id HttpResponseMessage externalTaskInfoFail = await client.GetAsync($"{_configuration["url"]}/external-task?workerId={data.WriterEmail}"); Task <string> jsonStringResult_1Fail = externalTaskInfoFail.Content.ReadAsStringAsync(); List <CamundaExternalTask> externalTasksFail = JsonConvert.DeserializeObject <List <CamundaExternalTask> >(jsonStringResult_1Fail.Result); CamundaExternalTask currenTaskFail = externalTasksFail.First(); //prosledimm reziltat CompleteExternalTask completeExternalTaskFail = new CompleteExternalTask() { workerId = data.WriterEmail, variables = null }; var completeExternalTaskContentFail = new StringContent(JsonConvert.SerializeObject(completeExternalTaskFail), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/{currenTaskFail.id}/complete", completeExternalTaskContentFail); const int scheduledPeriodMilliseconds = 70000; var allTasksWaitHandle = new AutoResetEvent(true); ThreadPool.RegisterWaitForSingleObject( allTasksWaitHandle, (s, b) => { UploadTimeOutCheck(data, _context, _configuration); }, null, scheduledPeriodMilliseconds, false); } catch (Exception e) { return(BadRequest()); } } else { content = new StringContent(JsonConvert.SerializeObject(new CompleteUserTaskWithVariable() { variables = new WriterFailedAbstract() { WriterFailed = new object() } }), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteTask = await client.PostAsync($"{_configuration["url"]}/task/{tasks[0].id}/complete", content); try { string guid = Guid.NewGuid().ToString(); ControlFlow.ResumeOnError(() => { EmailService.SendEmail(new UserDto() { Email = data.WriterEmail, Password = guid, FirstName = data.Comments }, _context, "NeedMoreWork"); }); NewUserData newUserData = new NewUserData() { Hash = guid, NewUserEmmail = data.WriterEmail, processDefinitionId = data.processDefinitionId, processInstanceId = data.processInstanceId }; _context.NewUserData.Add(newUserData); _context.SaveChanges(); //logujem ga FetchAndLock fetchAndLockFail = new FetchAndLock() { workerId = data.WriterEmail, maxTasks = 10, topics = new List <Topic>() { new Topic() { lockDuration = 10000, topicName = "NotificiranjeIDavanjeRoka" } } }; var fetchAndLockContentFail = new StringContent(JsonConvert.SerializeObject(fetchAndLockFail), Encoding.UTF8, "application/json"); HttpResponseMessage lockExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/fetchAndLock", fetchAndLockContentFail); //daj mi moj lokovan da izvucem id HttpResponseMessage externalTaskInfoFail = await client.GetAsync($"{_configuration["url"]}/external-task?workerId={data.WriterEmail}"); Task <string> jsonStringResult_1Fail = externalTaskInfoFail.Content.ReadAsStringAsync(); List <CamundaExternalTask> externalTasksFail = JsonConvert.DeserializeObject <List <CamundaExternalTask> >(jsonStringResult_1Fail.Result); CamundaExternalTask currenTaskFail = externalTasksFail.First(); //prosledimm reziltat CompleteExternalTask completeExternalTaskFail = new CompleteExternalTask() { workerId = data.WriterEmail, variables = null }; var completeExternalTaskContentFail = new StringContent(JsonConvert.SerializeObject(completeExternalTaskFail), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/{currenTaskFail.id}/complete", completeExternalTaskContentFail); } catch (Exception e) { return(BadRequest()); } } } return(Ok()); }
public async Task <IActionResult> CompleteFileUploadTask([FromBody] NewUserDataDto dto) { if (dto == null) { return(BadRequest()); } NewUserData newUserData = _context.NewUserData.FirstOrDefault(nud => nud.Hash.Equals(dto.Hash)); EntityFramework.Model.User user = _context.Users.FirstOrDefault(u => u.Email.Equals(newUserData.NewUserEmmail)); if (!user.UserVerified) { return(BadRequest()); } if (dto.SimulateFail == true) { user.UserRetryCount += 1; _context.Users.Update(user); _context.SaveChanges(); return(Ok()); } HttpResponseMessage taskResponse = await client.GetAsync($"{_configuration["url"]}/task?processDefinitionId={dto.ProcessDefinitionId}&&processInstanceId={dto.ProcessInstanceId}"); Task <string> jsonStringResult = taskResponse.Content.ReadAsStringAsync(); List <CamundaTask> tasks = JsonConvert.DeserializeObject <List <CamundaTask> >(jsonStringResult.Result); if (tasks.Count == 0) { return(BadRequest()); } //complete task var content = new StringContent("{}", Encoding.UTF8, "application/json"); HttpResponseMessage commpleteTask = await client.PostAsync($"{_configuration["url"]}/task/{tasks[0].id}/complete", content); user.UserRetryCount += 1; _context.Update(user); _context.SaveChanges(); try { WorkApplicationData data = new WorkApplicationData() { BoardMembeNeedsMoreData = false, BoardMembersApprove = 0, BoardMembers = new List <UserReview>(), processDefinitionId = dto.ProcessDefinitionId, processInstanceId = dto.ProcessInstanceId, WriterEmail = user.Email, Comments = "Board member had this to say for your work: \n" }; _context.workApplicationData.Add(data); _context.SaveChanges(); WorkApplicationData currentData = _context.workApplicationData.FirstOrDefault(d => d.Id.Equals(data.Id)); List <User> reviewers = _context.Users.Where(u => u.Email.Contains("clanodbora")).ToList(); currentData.BoardMembersInitialCount = reviewers.Count(); foreach (var reviewer in reviewers) { currentData.BoardMembers.Add(new UserReview() { UserId = reviewer.Id, WorkApplicationDataId = currentData.Id }); } _context.workApplicationData.Update(currentData); _context.SaveChanges(); //logujem ga FetchAndLock fetchAndLock = new FetchAndLock() { workerId = user.Email, maxTasks = 10, topics = new List <Topic>() { new Topic() { lockDuration = 10000, topicName = "ProveraKojiPutPisacPodnosiRadove" } } }; var fetchAndLockContent = new StringContent(JsonConvert.SerializeObject(fetchAndLock), Encoding.UTF8, "application/json"); HttpResponseMessage lockExternalTask = await client.PostAsync($"{_configuration["url"]}/external-task/fetchAndLock", fetchAndLockContent); //daj mi moj lokovan da izvucem id HttpResponseMessage externalTaskInfo = await client.GetAsync($"{_configuration["url"]}/external-task?workerId={user.Email}"); Task <string> jsonStringResult_1 = externalTaskInfo.Content.ReadAsStringAsync(); List <CamundaExternalTask> externalTasks = JsonConvert.DeserializeObject <List <CamundaExternalTask> >(jsonStringResult_1.Result); CamundaExternalTask currenTask = externalTasks.First(); //prosledimm rezultat ClanOdbora clan = new ClanOdbora() { value = user.Email }; ClanoviOdbora clanovi = new ClanoviOdbora() { value = reviewers.ConvertAll <string>(u => u.FirstName) }; NumberOfTrials brojPojusaja = new NumberOfTrials() { value = user.UserRetryCount }; Camunda.Model.ProcessModel.VariablesSecondTask test = new VariablesSecondTask() { ClanOdbora = clan, ClanoviOdbora = clanovi, NumberOfTrials = brojPojusaja }; CompleteExternalTask completeExternalTask = new CompleteExternalTask() { workerId = user.Email, variables = test }; var completeExternalTaskContent = new StringContent(JsonConvert.SerializeObject(completeExternalTask), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteExternalTask = await client.PostAsync($"{_configuration["url"]}/external-task/{currenTask.id}/complete", completeExternalTaskContent); } catch (Exception e) { return(BadRequest()); } if (user.UserRetryCount > 3) { try { EmailService.SendEmail(new UserDto() { Email = user.Email }, _context, "NumberOfUploads"); //logujem ga FetchAndLock fetchAndLockFail = new FetchAndLock() { workerId = user.Email, maxTasks = 10, topics = new List <Topic>() { new Topic() { lockDuration = 10000, topicName = "NotificiranjeONeuspehu" } } }; var fetchAndLockContentFail = new StringContent(JsonConvert.SerializeObject(fetchAndLockFail), Encoding.UTF8, "application/json"); HttpResponseMessage lockExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/fetchAndLock", fetchAndLockContentFail); //daj mi moj lokovan da izvucem id HttpResponseMessage externalTaskInfoFail = await client.GetAsync($"{_configuration["url"]}/external-task?workerId={user.Email}"); Task <string> jsonStringResult_1Fail = externalTaskInfoFail.Content.ReadAsStringAsync(); List <CamundaExternalTask> externalTasksFail = JsonConvert.DeserializeObject <List <CamundaExternalTask> >(jsonStringResult_1Fail.Result); CamundaExternalTask currenTaskFail = externalTasksFail.First(); //prosledimm reziltat CompleteExternalTask completeExternalTaskFail = new CompleteExternalTask() { workerId = user.Email, variables = null }; var completeExternalTaskContentFail = new StringContent(JsonConvert.SerializeObject(completeExternalTaskFail), Encoding.UTF8, "application/json"); HttpResponseMessage commpleteExternalTaskFail = await client.PostAsync($"{_configuration["url"]}/external-task/{currenTaskFail.id}/complete", completeExternalTaskContentFail); } catch (Exception e) { return(BadRequest()); } } return(Ok()); }