//同步方法
        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);
        }
Пример #3
0
        //调用委托
        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);
        }
Пример #7
0
        /// <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);
        }
Пример #8
0
        /// <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);
        }
Пример #9
0
 //抽象方法
 public abstract Task <RpcResult <QPaperFullRsp> > GetQPaperFullAsync(GetQPaperReq req);
Пример #10
0
        public override Task <RpcResult <QPaperFullRsp> > GetQPaperFullAsync(GetQPaperReq request)
        {
            var client = _proxy.GetClient <QPaperInnerServiceClient>();

            return(client.GetQPaperFullAsync(request));
        }