//同步方法 public RpcResult <QPaperRsp> GetQPaper(GetQPaperReq req) { AmpMessage message = AmpMessage.CreateRequestMessage(20001, 3); message.FriendlyServiceName = "QPaperInnerService.GetQPaper"; message.Data = req.ToByteArray(); var response = base.CallInvoker.BlockingCall(message); if (response == null) { throw new RpcException("error,response is null !"); } var result = new RpcResult <QPaperRsp>(); if (response.Code != 0) { result.Code = response.Code; } else if (response.Data == null) { result.Code = ErrorCodes.CODE_INTERNAL_ERROR; } else { result.Data = QPaperRsp.Parser.ParseFrom(response.Data); } return(result); }
public async Task <RpcResult <QPaperFullRsp> > GetQPaperFullAsync(GetQPaperReq req, int timeOut = 3000) { AmpMessage message = AmpMessage.CreateRequestMessage(20001, 4); message.FriendlyServiceName = "QPaperInnerService.GetQPaperFull"; message.Data = req.ToByteArray(); var response = await base.CallInvoker.AsyncCall(message, timeOut); if (response == null) { throw new RpcException("error,response is null !"); } var result = new RpcResult <QPaperFullRsp>(); if (response.Code != 0) { result.Code = response.Code; } else if (response.Data == null) { result.Code = ErrorCodes.CODE_INTERNAL_ERROR; } else { result.Data = QPaperFullRsp.Parser.ParseFrom(response.Data); } return(result); }
//调用委托 private async Task <AmpMessage> ProcessGetQPaperFullAsync(AmpMessage req) { GetQPaperReq request = null; if (req.Data == null) { request = new GetQPaperReq(); } else { request = GetQPaperReq.Parser.ParseFrom(req.Data); } req.FriendlyServiceName = "SurveyGateService.GetQPaperFull"; var result = await GetQPaperFullAsync(request); var response = AmpMessage.CreateResponseMessage(req.ServiceId, req.MessageId); response.FriendlyServiceName = "SurveyGateService.GetQPaperFull"; response.Code = result.Code; if (result.Data != null) { response.Data = result.Data.ToByteArray(); } return(response); }
public async override Task <RpcResult <QPaperStaRsp> > GetAPaperStaAsync(GetQPaperStaReq request) { var res = new RpcResult <QPaperStaRsp>(); res.Data = new QPaperStaRsp(); if (string.IsNullOrEmpty(request.Identity)) { res.Code = Survey.Core.ErrorCodes.AUTHORIZATION_REQUIRED; res.Data.ReturnMessage = "请先登录"; return(res); } var ap_client = _proxy.GetClient <APaperServiceClient>(); var qp_client = _proxy.GetClient <QPaperServiceClient>(); var req1 = new GetAPaperStaDetailReq(); req1.ClientIp = request.ClientIp; req1.Identity = request.Identity; req1.XRequestId = request.XRequestId; req1.QpaperId = request.QpaperId; var t1 = ap_client.GetAPaperStaAsync(req1); var req2 = new GetQPaperReq(); req2.ClientIp = request.ClientIp; req2.Identity = request.Identity; req2.XRequestId = request.XRequestId; req2.QpaperId = request.QpaperId; var t2 = qp_client.GetQPaperFullAsync(req2); await Task.WhenAll(t1, t2); if (t1.Result.Code != 0) { res.Code = t1.Result.Code; res.Data.ReturnMessage = t1.Result.Data.ReturnMessage; return(res); } if (t2.Result.Code != 0) { res.Code = t2.Result.Code; res.Data.ReturnMessage = t2.Result.Data.ReturnMessage; return(res); } res.Data.Qpaper = t2.Result.Data.Qpaper; res.Data.StaDetail.AddRange(t1.Result.Data.StaDetail); return(res); }
/// <summary> /// 获取问卷信息,包含问题 /// </summary> /// <param name="req"></param> /// <returns></returns> public override async Task <RpcResult <QPaperFullRsp> > GetQPaperFullAsync(GetQPaperReq req) { var res = new RpcResult <QPaperFullRsp>(); res.Data = new QPaperFullRsp(); var qpaper = await this._qpaperRepo.GetQPaper(req.QpaperId); if (qpaper != null) { //判断是否有权限 if (req.CheckRole && qpaper.CreateUserId != req.Identity) //非同一个用户 { res.Code = ErrorCodes.DATA_NOT_FOUND; return(res); } res.Data.Qpaper = new DTOQPaperWithQuestion(); res.Data.Qpaper.QpaperId = qpaper.QpaperId; res.Data.Qpaper.Subject = qpaper.Subject; if (qpaper.StartTime.HasValue) { res.Data.Qpaper.StartTime = qpaper.StartTime.Value.ToString("yyyy-MM-dd HH:mm:ss"); } if (qpaper.EndTime.HasValue) { res.Data.Qpaper.EndTime = qpaper.EndTime.Value.ToString("yyyy-MM-dd HH:mm:ss"); } res.Data.Qpaper.Description = qpaper.Description; res.Data.Qpaper.ApaperCount = qpaper.ApaperCount; //查询列表数据 var qlist = await this._qpaperRepo.GetQuestionsByPaperID(qpaper.QpaperId); if (qlist != null && qlist.Count > 0) { addToDTO(res.Data.Qpaper.Questions, qlist); } } else { res.Code = ErrorCodes.DATA_NOT_FOUND; } return(res); }
/// <summary> /// 获取问卷本身信息,不包括问题 /// </summary> /// <param name="req"></param> /// <returns></returns> public override async Task <RpcResult <QPaperRsp> > GetQPaperAsync(GetQPaperReq req) { var res = new RpcResult <QPaperRsp>(); res.Data = new QPaperRsp(); var qpaper = await this._qpaperRepo.GetQPaper(req.QpaperId); if (qpaper != null) { //判断是否有权限 if (req.CheckRole && qpaper.CreateUserId != req.Identity) //非同一个用户 { res.Code = ErrorCodes.DATA_NOT_FOUND; return(res); } res.Data.QpaperId = qpaper.QpaperId; res.Data.Subject = qpaper.Subject; if (qpaper.StartTime.HasValue) { res.Data.StartTime = qpaper.StartTime.Value.ToString("yyyy-MM-dd HH:mm:ss"); } if (qpaper.EndTime.HasValue) { res.Data.EndTime = qpaper.EndTime.Value.ToString("yyyy-MM-dd HH:mm:ss"); } res.Data.Description = qpaper.Description; res.Data.CreateUserId = qpaper.CreateUserId; } else { res.Code = ErrorCodes.DATA_NOT_FOUND; } return(res); }
/// <summary> /// 获取答卷详情 /// </summary> /// <param name="request"></param> /// <returns></returns> public override async Task <RpcResult <APaperRsp> > GetAPaperAsync(GetAPaperReq request) { var res = new RpcResult <APaperRsp>(); res.Data = new APaperRsp(); var apaper = await this._apaperRepo.GetAPaper(request.PaperId); if (apaper == null) // 问卷不存在 { res.Code = ErrorCodes.DATA_NOT_FOUND; res.Data.ReturnMessage = "答卷不存在"; return(res); } var answers = await this._apaperRepo.GetAnswersByPaperId(request.PaperId); var qpaperService = _proxy.GetClient <QPaperInnerServiceClient>(); GetQPaperReq getQPRep = new GetQPaperReq(); getQPRep.XRequestId = request.XRequestId; getQPRep.Identity = request.Identity; getQPRep.ClientIp = request.ClientIp; getQPRep.CheckRole = request.CheckRole; getQPRep.QpaperId = apaper.QpaperId; var getQPRes = await qpaperService.GetQPaperFullAsync(getQPRep); if (getQPRes.Code != 0) { res.Code = getQPRes.Code; if (getQPRes.Data != null) { res.Data.ReturnMessage = getQPRes.Data.ReturnMessage; } return(res); } //答卷信息 res.Data.Apaper = new DTOAPaperWithAnswers(); res.Data.Apaper.ApaperId = apaper.PaperId; res.Data.Apaper.CreateTime = apaper.CreateTime.ToString("yyyy-MM-dd HH:mm:ss"); res.Data.Apaper.QpaperId = apaper.QpaperId; res.Data.Apaper.UserId = apaper.UserId; res.Data.Apaper.Remark = apaper.Remark ?? ""; //rsp.Apaper.Answers if (answers != null && answers.Count > 0) { foreach (var a in answers) { res.Data.Apaper.Answers.Add(new DTOAnswer() { AnswerId = a.AnswerId, ApaperId = a.ApaperId, ObjectiveAnswer = a.ObjectiveAnswer, SubjectiveAnswer = a.SubjectiveAnswer, QuestionId = a.QuestionId }); } } //rsp.Apaper.Answers; //问卷数据 res.Data.Qpaper = getQPRes.Data.Qpaper; return(res); }
/// <summary> /// 保存答卷信息 /// </summary> /// <param name="request"></param> /// <returns></returns> public override async Task <RpcResult <SaveAPaperRsp> > SaveAPaperAsync(SaveAPaperReq req) { var res = new RpcResult <SaveAPaperRsp>(); res.Data = new SaveAPaperRsp(); if (req.Answers.Count == 0) { res.Code = ErrorCodes.PARAMS_VALIDATION_FAIL; res.Data.ReturnMessage = "答案不能为空"; return(res); } var qpaperService = _proxy.GetClient <QPaperInnerServiceClient>(); GetQPaperReq getQPRep = new GetQPaperReq(); getQPRep.XRequestId = req.XRequestId; getQPRep.Identity = req.Identity; getQPRep.ClientIp = req.ClientIp; getQPRep.CheckRole = false; getQPRep.QpaperId = req.QpaperId; var getQPRes = await qpaperService.GetQPaperAsync(getQPRep); if (getQPRes.Code != 0) { res.Code = getQPRes.Code; if (getQPRes.Data != null) { res.Data.ReturnMessage = getQPRes.Data.ReturnMessage; } return(res); } if (getQPRes.Data == null) { res.Code = ErrorCodes.DATA_NOT_FOUND; res.Data.ReturnMessage = "问卷不存在"; return(res); } using (TransScope scope = this._apaperRepo.BeginTransScope()) { var apaper = new APaper(); apaper.CreateTime = DateTime.Now; apaper.QpaperId = req.QpaperId; apaper.QpaperSubject = getQPRes.Data.Subject; apaper.QpaperUserId = getQPRes.Data.CreateUserId; apaper.Remark = req.Remark; apaper.UserId = string.IsNullOrEmpty(req.UserId) ? req.Identity : req.UserId; bool hasA = await this._apaperRepo.CheckAPaperAsync(apaper.QpaperId, apaper.UserId); if (hasA) { res.Code = ErrorCodes.BIZ_RULE_FAIL; res.Data.ReturnMessage = "该用户已经回答过该问卷了"; return(res); } var newId = await this._apaperRepo.InsertAsync(apaper); if (newId < 0) { res.Code = ErrorCodes.INTERNAL_ERROR; res.Data.ReturnMessage = "新增问卷失败,请稍后重试"; return(res); } var apaperId = (int)newId; var alist = new List <Answer>(); foreach (var a in req.Answers) { var answer = new Answer(); answer.AnswerId = Guid.NewGuid().ToString("N"); answer.ApaperId = apaperId; answer.ObjectiveAnswer = a.ObjectiveAnswer; answer.SubjectiveAnswer = a.SubjectiveAnswer; answer.QuestionId = a.QuestionId; alist.Add(answer); } await this._apaperRepo.AddAnswers(alist); res.Data.ApaperId = apaperId; scope.Complete();// 提交事务 } // 异步执行不管是否成功 var addReq = new AddAPaperReq(); addReq.ClientIp = req.ClientIp; addReq.Identity = req.Identity; addReq.XRequestId = req.XRequestId; addReq.QpaperId = req.QpaperId; addReq.Count = 1; #pragma warning disable CS4014 // 由于此调用不会等待,因此在调用完成前将继续执行当前方法 qpaperService.AddAPaperCountAsync(addReq); #pragma warning restore CS4014 // 由于此调用不会等待,因此在调用完成前将继续执行当前方法 return(res); }
//抽象方法 public abstract Task <RpcResult <QPaperFullRsp> > GetQPaperFullAsync(GetQPaperReq req);
public override Task <RpcResult <QPaperFullRsp> > GetQPaperFullAsync(GetQPaperReq request) { var client = _proxy.GetClient <QPaperInnerServiceClient>(); return(client.GetQPaperFullAsync(request)); }