public async Task <IActionResult> Answer([FromBody] RequestAnswerModel model) { if (model == null) { return(ReturnError(ErrorCodes.IncomingPayloadIsMissing)); } try { var brokerId = User.TryGetBrokerId(); var apiUserId = User.UserId(); var order = await _apiOrderService.GetOrderAsync(model.OrderNumber, brokerId.Value); if (order.OrderGroupId != null) { return(ReturnError(ErrorCodes.RequestIsPartOfAGroup)); } var user = await _apiUserService.GetBrokerUser(model.CallingUser, brokerId.Value); var request = await _dbContext.Requests.GetActiveRequestForApiWithBrokerAndOrderNumber(model.OrderNumber, User.TryGetBrokerId().Value); if (request == null) { return(ReturnError(ErrorCodes.RequestNotFound)); } if (!request.IsToBeProcessedByBroker) { return(ReturnError(ErrorCodes.RequestNotInCorrectState)); } InterpreterBroker interpreter; try { interpreter = _apiUserService.GetInterpreter(new InterpreterDetailsModel(model.Interpreter), brokerId.Value); } catch (InvalidOperationException) { return(ReturnError(ErrorCodes.InterpreterOfficialIdAlreadySaved)); } //Does not handle Kammarkollegiets tolknummer if (interpreter == null) { //Possibly the interpreter should be added, if not found?? return(ReturnError(ErrorCodes.InterpreterNotFound)); } if (model.Location == null) { return(ReturnError(ErrorCodes.RequestNotCorrectlyAnswered, "Location was missing")); } if (model.CompetenceLevel == null) { return(ReturnError(ErrorCodes.RequestNotCorrectlyAnswered, "CompetenceLevel was missing")); } var now = _timeService.SwedenNow; if (request.Status == RequestStatus.Created) { _requestService.Acknowledge(request, now, user?.Id ?? apiUserId, user != null ? (int?)apiUserId : null); } try { await _requestService.Accept( request, now, user?.Id ?? apiUserId, user != null?(int?)apiUserId : null, interpreter, EnumHelper.GetEnumByCustomName <InterpreterLocation>(model.Location).Value, EnumHelper.GetEnumByCustomName <CompetenceAndSpecialistLevel>(model.CompetenceLevel).Value, model.RequirementAnswers == null?new List <OrderRequirementRequestAnswer>() : model.RequirementAnswers.Select(ra => new OrderRequirementRequestAnswer { Answer = ra.Answer, CanSatisfyRequirement = ra.CanMeetRequirement, OrderRequirementId = ra.RequirementId, }).ToList(), //Does not handle attachments yet. new List <RequestAttachment>(), model.ExpectedTravelCosts, model.ExpectedTravelCostInfo, model.LatestAnswerTimeForCustomer, model.BrokerReferenceNumber ); await _dbContext.SaveChangesAsync(); return(Ok(new AnswerResponse { InterpreterId = interpreter.InterpreterBrokerId })); } catch (InvalidOperationException ex) { return(ReturnError(ErrorCodes.RequestNotCorrectlyAnswered, ex.Message)); } catch (ArgumentNullException ex) { return(ReturnError(ErrorCodes.RequestNotCorrectlyAnswered, ex.Message)); } } catch (InvalidApiCallException ex) { return(ReturnError(ex.ErrorCode)); } }
public void ProcessRequest(HttpContext context) { //forceDelete等于1时,进行强制删除,会清除原有答题进行删除 string forceDelete = context.Request["force_delete"]; RequestModel requestModel = new RequestModel(); try { requestModel = JsonConvert.DeserializeObject <RequestModel>(context.Request["data"]); } catch (Exception ex) { resp.errcode = (int)APIErrCode.OperateFail; resp.errmsg = ex.Message; bllQuestion.ContextResponse(context, resp); return; } if (requestModel.id == 0) { resp.errcode = (int)APIErrCode.PrimaryKeyIncomplete; resp.errmsg = "请输入Id"; bllQuestion.ContextResponse(context, resp); return; } Questionnaire questionnaireModel = bllQuestion.GetByKey <Questionnaire>("QuestionnaireID", requestModel.id.ToString()); if (questionnaireModel == null) { resp.errcode = (int)APIErrCode.OperateFail; resp.errmsg = "问卷没有找到"; bllQuestion.ContextResponse(context, resp); return; } if (forceDelete != "1") { if (bllQuestion.GetCountByKey <QuestionnaireRecord>("QuestionnaireID", requestModel.id.ToString()) > 0) { resp.errcode = (int)APIErrCode.LotteryHaveRecord; resp.errmsg = string.Format("已经有人答题,不能进行修改"); bllQuestion.ContextResponse(context, resp); return; } } if (string.IsNullOrWhiteSpace(requestModel.questionnaire_name)) { resp.errcode = (int)APIErrCode.PrimaryKeyIncomplete; resp.errmsg = "请输入问卷名称"; bllQuestion.ContextResponse(context, resp); return; } if (requestModel.question_list == null || requestModel.question_list.Count <= 0) { resp.errcode = (int)APIErrCode.PrimaryKeyIncomplete; resp.errmsg = "请至少添加一个问题"; bllQuestion.ContextResponse(context, resp); return; } foreach (var item in requestModel.question_list) { if (item.question_type != 2 && (item.answer_list == null || item.answer_list.Count <= 0)) { resp.errcode = (int)APIErrCode.PrimaryKeyIncomplete; resp.errmsg = "选择题至少需要一个选项"; bllQuestion.ContextResponse(context, resp); return; } } List <RequestQuestionModel> addRequestQuestionList = requestModel.question_list.Where(p => p.id == 0).ToList(); List <RequestQuestionModel> updateRequestQuestionList = requestModel.question_list.Where(p => p.id > 0).ToList(); List <ZentCloud.BLLJIMP.Model.Question> deleteQuestionList = new List <ZentCloud.BLLJIMP.Model.Question>(); List <ZentCloud.BLLJIMP.Model.Question> AddQuestionList = new List <ZentCloud.BLLJIMP.Model.Question>(); List <ZentCloud.BLLJIMP.Model.Question> UpdateQuestionList = new List <ZentCloud.BLLJIMP.Model.Question>(); #region 参数对应 检查问题 questionnaireModel.QuestionnaireName = requestModel.questionnaire_name; questionnaireModel.QuestionnaireContent = requestModel.questionnaire_content; questionnaireModel.QuestionnaireStopDate = requestModel.questionnaire_stopdate; questionnaireModel.QuestionnaireVisible = requestModel.questionnaire_visible; questionnaireModel.QuestionnaireImage = requestModel.questionnaire_image; questionnaireModel.QuestionnaireSummary = requestModel.questionnaire_summary; questionnaireModel.AddScore = requestModel.add_score; List <ZentCloud.BLLJIMP.Model.Question> OldQuestionList = bllQuestion.GetListByKey <ZentCloud.BLLJIMP.Model.Question>("QuestionnaireID", requestModel.id.ToString());//旧问题 foreach (var item in OldQuestionList) { RequestQuestionModel nQuestion = updateRequestQuestionList.FirstOrDefault(p => p.id == item.QuestionID); if (nQuestion == null)//该问题被删除了 { deleteQuestionList.Add(item); } else { item.QuestionName = nQuestion.question_name; item.QuestionType = nQuestion.question_type; item.IsRequired = nQuestion.is_required; List <RequestAnswerModel> AddRequestAnswerList = nQuestion.answer_list.Where(p => p.id == 0).ToList(); List <RequestAnswerModel> UpdateRequestAnswerList = nQuestion.answer_list.Where(p => p.id > 0).ToList(); List <Answer> OldAnswerList = bllQuestion.GetListByKey <Answer>("QuestionID", item.QuestionID.ToString());//旧选项 if (item.QuestionType == 2 && OldAnswerList.Count > 0) { for (int i = 0; i < OldAnswerList.Count; i++) { OldAnswerList[i].PostType = -1; } item.Answers = OldAnswerList; } else { List <Answer> AnswerList = new List <Answer>(); foreach (var AnswerItem in OldAnswerList) { RequestAnswerModel nAnswer = UpdateRequestAnswerList.FirstOrDefault(p => p.id == AnswerItem.AnswerID); if (nAnswer == null)//该问题被删除了 { AnswerItem.PostType = -1; AnswerList.Add(AnswerItem); } else { AnswerItem.AnswerName = nAnswer.answer_name; AnswerItem.IsCorrect = nAnswer.is_correct; AnswerItem.PostType = 2; AnswerList.Add(AnswerItem); } } foreach (var AnswerItem in AddRequestAnswerList) { Answer answer = new Answer(); answer.QuestionID = item.QuestionID; answer.QuestionnaireID = questionnaireModel.QuestionnaireID; answer.AnswerName = AnswerItem.answer_name; answer.IsCorrect = AnswerItem.is_correct; answer.PostType = 1; AnswerList.Add(answer); } item.Answers = AnswerList; } UpdateQuestionList.Add(item); } } foreach (var item in addRequestQuestionList) { ZentCloud.BLLJIMP.Model.Question question = new ZentCloud.BLLJIMP.Model.Question(); question.QuestionName = item.question_name; question.QuestionType = item.question_type; question.IsRequired = item.is_required; question.QuestionnaireID = questionnaireModel.QuestionnaireID; List <Answer> AnswerList = new List <Answer>(); foreach (var AnswerItem in item.answer_list) { Answer answer = new Answer(); answer.AnswerName = AnswerItem.answer_name; answer.IsCorrect = AnswerItem.is_correct; answer.QuestionnaireID = questionnaireModel.QuestionnaireID; answer.PostType = 1; AnswerList.Add(answer); } question.Answers = AnswerList; AddQuestionList.Add(question); } #endregion BLLTransaction tran = new BLLTransaction();//事务 try { if (!bllQuestion.Update(questionnaireModel, tran))//修改问卷表 { tran.Rollback(); resp.errcode = (int)APIErrCode.OperateFail; resp.errmsg = "修改问卷失败"; bllQuestion.ContextResponse(context, resp); return; } if (bllQuestion.DeleteByKey <QuestionnaireRecord>("QuestionnaireID", questionnaireModel.QuestionnaireID.ToString(), tran) < 0) { tran.Rollback(); resp.errcode = (int)APIErrCode.OperateFail; resp.errmsg = "清除旧答题记录失败"; bllQuestion.ContextResponse(context, resp); return; } if (bllQuestion.DeleteByKey <QuestionnaireRecordDetail>("QuestionnaireID", questionnaireModel.QuestionnaireID.ToString(), tran) < 0) { tran.Rollback(); resp.errcode = (int)APIErrCode.OperateFail; resp.errmsg = "清除旧答题记录详情失败"; bllQuestion.ContextResponse(context, resp); return; } if (deleteQuestionList.Count > 0) { foreach (var item in deleteQuestionList) { if (bllQuestion.Delete(item, tran) <= 0) { tran.Rollback(); resp.errcode = (int)APIErrCode.OperateFail; resp.errmsg = "删除旧问题失败"; bllQuestion.ContextResponse(context, resp); return; } if (bllQuestion.DeleteByKey <Answer>("QuestionID", item.QuestionID.ToString(), tran) < 0) { tran.Rollback(); resp.errcode = (int)APIErrCode.OperateFail; resp.errmsg = "清除旧选项失败"; bllQuestion.ContextResponse(context, resp); return; } } } if (UpdateQuestionList.Count > 0) { foreach (var item in UpdateQuestionList) { if (!bllQuestion.Update(item, tran)) { tran.Rollback(); resp.errcode = (int)APIErrCode.OperateFail; resp.errmsg = "更新问题失败"; bllQuestion.ContextResponse(context, resp); return; } foreach (var AnswerItem in item.Answers) { if (AnswerItem.PostType == -1) { if (bllQuestion.Delete(AnswerItem, tran) <= 0) { tran.Rollback(); resp.errcode = (int)APIErrCode.OperateFail; resp.errmsg = "删除选项失败"; bllQuestion.ContextResponse(context, resp); return; } } else if (AnswerItem.PostType == 1) { AnswerItem.AnswerID = Convert.ToInt32(bllQuestion.GetGUID(TransacType.AddAnswer)); AnswerItem.QuestionID = item.QuestionID; if (!bllQuestion.Add(AnswerItem, tran)) { tran.Rollback(); resp.errcode = (int)APIErrCode.OperateFail; resp.errmsg = "新增选项失败"; bllQuestion.ContextResponse(context, resp); return; } } else if (AnswerItem.PostType == 2) { if (!bllQuestion.Update(AnswerItem, tran)) { tran.Rollback(); resp.errcode = (int)APIErrCode.OperateFail; resp.errmsg = "更新选项失败"; bllQuestion.ContextResponse(context, resp); return; } } } } } if (AddQuestionList.Count > 0) { foreach (var item in AddQuestionList)//添加问题表 { item.QuestionID = int.Parse(bllQuestion.GetGUID(TransacType.AddQuestion)); if (!bllQuestion.Add(item, tran)) { tran.Rollback(); resp.errcode = (int)APIErrCode.OperateFail; resp.errmsg = "添加问题失败"; bllQuestion.ContextResponse(context, resp); return; } foreach (var AnswerItem in item.Answers) { AnswerItem.AnswerID = Convert.ToInt32(bllQuestion.GetGUID(TransacType.AddAnswer)); AnswerItem.QuestionID = item.QuestionID; if (!bllQuestion.Add(AnswerItem, tran)) { tran.Rollback(); resp.errcode = (int)APIErrCode.OperateFail; resp.errmsg = "新增选项失败"; bllQuestion.ContextResponse(context, resp); return; } } } } tran.Commit(); resp.isSuccess = true; resp.errcode = (int)APIErrCode.IsSuccess; } catch (Exception ex) { tran.Rollback(); resp.errcode = (int)APIErrCode.OperateFail; resp.errmsg = ex.Message; } bllQuestion.ContextResponse(context, resp); }