Exemple #1
0
        private bool GetCompleteResult()
        {
            bool resultOK = false;

            var ml = new GetPaperInfoDetail()
            {
                exam_id = GlobalUser.SelectPaperNumber.Split('#')[0],
                token   = GlobalUser.USER.Token
            };

            var result1 = WebProxy(ml, ApiType.GetPaperInfoDetail, null, "get");

            if (result1?.retCode == 0)
            {
                //发送
                var exam_attend =
                    JsonHelper.FromJson <Exam_Attend>(result1.retData.exam_attend.ToString());

                if (exam_attend.exam_process == 1)
                {
                    ProgressValue    = 100;
                    TxtProgressValue = $"打分中{ProgressValue}%...";

                    resultOK = true;
                    return(resultOK);
                }
            }
            else
            {
                ErrMsgLog msgInfo = new ErrMsgLog();
                msgInfo.user    = GlobalUser.USER.Mobile;
                msgInfo.msginfo = "作答正常完成,未正常返回统计消息";
                msgInfo.error   = result1.retHtml;
                msgInfo.isErr   = true;

                Log4NetHelper.Error(msgInfo.ToJson());//$"[user:{GlobalUser.USER?.Mobile},msg:作答正常完成,未正常返回统计消息,data:{result1.retHtml}]");

                {
                    Log_Data log = new Log_Data();
                    log.log_desc   = Log_Type.PC_Logout.ToString();
                    log.log_text   = msgInfo.ToJson();//$"[user:{GlobalUser.USER?.Mobile},msg:作答正常完成,未正常返回统计消息,data:{result1.retHtml}]";
                    log.log_device = JsonHelper.ToJson(GlobalUser.MACHINEINFO.GetDevice());
                    WebApiProxy.GetHtmlRespInfo(log, ApiType.SysLog, null, "Post");
                }
            }

            return(resultOK);
        }
Exemple #2
0
        private void UpErr(Exception e)
        {
            ErrMsgLog msgInfo = new ErrMsgLog();

            msgInfo.user    = GlobalUser.USER.Mobile;
            msgInfo.msginfo = "系统错误";
            msgInfo.error   = e;
            msgInfo.isErr   = true;
            Log_Data log = new Log_Data();

            log.log_desc   = Log_Type.PC_Error.ToString();
            log.log_text   = msgInfo.ToJson();
            log.log_device = JsonHelper.ToJson(GlobalUser.MACHINEINFO.GetDevice());
            WebApiProxy.GetHtmlRespInfo(log, ApiType.SysLog, null, "Post");
        }
Exemple #3
0
        private void UpdateAnswer(string scoreJson)
        {
            Application.Current.Dispatcher.Invoke(new Action(() =>
            {
                string errStr     = "";
                ErrMsgLog msgInfo = new ErrMsgLog();
                msgInfo.user      = GlobalUser.USER.Mobile;

                if (GlobalUser.ErrScoreInfo == null)
                {
                    GlobalUser.ErrScoreInfo = new Dictionary <string, ExamScoreNavigateMessage>();
                }

                try
                {
                    if (!GlobalUser.DoAnswer)
                    {
                        //errStr = $"评分失败 -- result: 当前不是做题过程!";
                        msgInfo.msginfo      = "评分失败";
                        msgInfo.error        = "当前不是做题过程";
                        msgInfo.isErr        = true;
                        GlobalUser.DoneScore = ScoreType.NoScore;
                        Log4NetHelper.Error(msgInfo.ToJson());
                        return;
                    }

                    ScoreRoot score = JsonHelper.FromJson <ScoreRoot>(scoreJson.Replace("\"params\"", "\"param\""));

                    if (!string.IsNullOrEmpty(score.errId))
                    {
                        //20009   网络无效
                        //20013   评分超时
                        //20010   调用顺序出错
                        //42003   请求顺序出错
                        //可以重评
                        if (_errIds.Contains(score.errId))
                        {
                            ExamScore.SubmitNum++;
                        }
                        else
                        {
                            ExamScore.SubmitNum = 999;
                        }

                        if (!GlobalUser.ErrScoreInfo.ContainsKey(ExamScore.WaveFileName))
                        {
                            GlobalUser.ErrScoreInfo.Add(ExamScore.WaveFileName, ExamScore);
                        }
                        throw new Exception($"评分失败 errID:{score.errId}");
                    }

                    string scoreStr = "0";

                    if (ExamScore.EType == EngineType.CHOICE)
                    {
                        var answer =
                            ExamScore.AnswerModel.item_answer.Split(new string[] { "|" }, StringSplitOptions.None);

                        ExamScore.AnswerModel.item_answer = answer[answer.Length - 1];

                        if (score.result.confidence >= (ExamScore.AnswerModel.item_score * 0.45) &&
                            ExamScore.AnswerModel.item_answer.ToLower().Trim()
                            .Equals(score.result.recognition.ToLower().Trim()))
                        {
                            scoreStr = ExamScore.AnswerModel.item_score.ToString("f2");
                        }
                    }
                    else
                    {
                        scoreStr = score.result.overall
                                   .ToString(); //((score.result.overall / 100) * ExamScore.AnswerModel.item_score).ToString("f2");
                    }

                    ExamScore.AnswerModel.user_answer = scoreJson.TrimEnd('\0');

                    ExamScore.AnswerModel.exam_score = Convert.ToSingle(scoreStr); //Convert.ToSingle(scoreStr);

                    if (ExamScore.AnswerModel.item_score < 0)
                    {
                        ExamScore.AnswerModel.exam_score = Math.Abs(ExamScore.AnswerModel.item_score);
                    }

                    var result = WebApiProxy.GetHtmlRespInfo(ExamScore.AnswerModel, ApiType.SubmitRecord,
                                                             GlobalUser.USER.Token);

                    Log4NetHelper.Info($"完成评分 -- result:{result.retCode == 1} {result.retCode} {result.retMsg}");

                    //Log4NetHelper.Info($"完成评分 -- 音频文件: {ExamScore.WaveFileName}");

                    GlobalUser.DoneItemExam = true;
                    GlobalUser.DoneScore    = ScoreType.ScoreSuccess; //评分
                    if (result?.retCode != 0)
                    {
                        //errStr = $"errmsg:上传评分失败,result:{result.retCode} {result.retCode} {result.retMsg}";
                        msgInfo.msginfo = "上传评分失败";
                        msgInfo.error   = $"{result.retCode} {result.retCode} {result.retMsg}";
                        msgInfo.isErr   = true;

                        GlobalUser.DoneScore = ScoreType.ScoreFailure;
                        Log4NetHelper.Error(msgInfo.ToJson());

                        if (result.retCode == 4001 && result.retMsg.Contains("密码"))
                        {
                            //回到登录
                            GlobalUser.CleanUp();
                            Messenger.Default.Send(new ExamScoreNavigateMessage(), "LoginFailure");
                            //errStr += ",LoginFailure:已在其他设备登录!";
                            msgInfo.error += ",已在其他设备登录";
                            msgInfo.isErr  = true;
                        }
                    }
                    else
                    {
                        msgInfo.isErr = false;
                        if (GlobalUser.ErrScoreInfo != null && GlobalUser.ErrScoreInfo.Count > 0)
                        {
                            //移除异常记录
                            if (GlobalUser.ErrScoreInfo.ContainsKey(ExamScore.WaveFileName))
                            {
                                GlobalUser.ErrScoreInfo.Remove(ExamScore.WaveFileName);
                            }
                            else
                            {
                                foreach (var key in GlobalUser.ErrScoreInfo.Keys)
                                {
                                    if (GlobalUser.ErrScoreInfo.Values.ToList().Where(w =>
                                                                                      w.AnswerModel.exam_attend_id == GlobalUser.AttendPaperItemId &&
                                                                                      w.AnswerModel.item_id == ExamScore.AnswerModel.item_id).Any())
                                    {
                                        GlobalUser.ErrScoreInfo.Remove(key);
                                        break;
                                    }
                                }
                            }

                            GlobalUser.UpdateErrScore(GlobalUser.USER.Mobile,
                                                      GlobalUser.SelectPaperNumber,
                                                      GlobalUser.AttendPaperItemId);
                        }

                        if (File.Exists(Path.Combine(ExamScore.WaveFileName)))
                        {
                            File.Delete(ExamScore.WaveFileName);
                        }

                        if (GlobalUser.MenuType == MenuType.Sync)
                        {
                            //更新 当前 同步 评分
                            Messenger.Default.Send(
                                new SyncScoreCallbckMessage(ExamScore.ModelTarget, score, ExamScore.EType),
                                ExamScore.ModelTarget);
                            //更新 左侧列表 得分
                            Messenger.Default.Send(
                                new SyncUploadScoreCallbckMessage(ExamScore.ModelTarget, Convert.ToInt32(score.result.overall), ExamScore.AnswerModel.item_id),
                                "SyncUploadScoreNavi");
                        }
                    }
                }
                catch (Exception ex)
                {
                    //errStr = $"[user:{GlobalUser.USER?.Mobile},error:{ex},scoreJson: {scoreJson}]";
                    msgInfo.msginfo   = "上传评分失败";
                    msgInfo.error     = ex;
                    msgInfo.scoreJson = scoreJson;
                    msgInfo.isErr     = true;

                    Log4NetHelper.Error(msgInfo.ToJson());
                    //Log4NetHelper.Error($"scoreJson: {scoreJson}");
                    Log4NetHelper.Error($"record url: {ExamScore.WaveFileName}");
                }
                finally
                {
                    if (msgInfo.isErr)
                    {
                        GlobalUser.DoneScore = ScoreType.ScoreFailure;

                        if (!GlobalUser.ErrScoreInfo.ContainsKey(ExamScore.WaveFileName))
                        {
                            ExamScore.SubmitNum++;
                            GlobalUser.ErrScoreInfo.Add(ExamScore.WaveFileName, ExamScore);
                        }

                        GlobalUser.UpdateErrScore(GlobalUser.USER.Mobile,
                                                  GlobalUser.SelectPaperNumber,
                                                  GlobalUser.AttendPaperItemId);

                        Log_Data log   = new Log_Data();
                        log.log_desc   = Log_Type.PC_Score.ToString();
                        log.log_text   = msgInfo.ToJson();
                        log.log_device = JsonHelper.ToJson(GlobalUser.MACHINEINFO.GetDevice());
                        WebApiProxy.GetHtmlRespInfo(log, ApiType.SysLog, null, "Post");
                    }
                }
            }));
        }
Exemple #4
0
        private int ScoreCallBack(IntPtr usrdata, string record_id, int type, byte[] message, int size)
        {
            string resultStr = String.Empty;

            try
            {
                if (type == SKEGN_MESSAGE_TYPE_JSON)
                {
                    resultStr = Encoding.UTF8.GetString(message);

                    if (!string.IsNullOrEmpty(resultStr))
                    {
                        Log4NetHelper.Info("-----------------------------评分解析-----------------------------");
                        Log4NetHelper.Info(resultStr);
                        Log4NetHelper.Info("-----------------------------评分结束-----------------------------");
                        //6.保存答案
                        UpdateAnswer(resultStr);
                    }
                }
                return(1);
            }
            catch (Exception ex)
            {
                ErrMsgLog msgInfo = new ErrMsgLog();
                msgInfo.user      = GlobalUser.USER.Mobile;
                msgInfo.msginfo   = "评分Callback异常";
                msgInfo.error     = ex;
                msgInfo.scoreJson = resultStr;
                msgInfo.isErr     = true;

                //var errStr = $"[user:{GlobalUser.USER?.Mobile},error:{ex},scoreJson: {resultStr}]";
                Log4NetHelper.ErrorFormat(msgInfo.ToJson());
                Log4NetHelper.Error("再评一次");
                //todo
                if (_isAgain)
                {
                    AutoScore();
                    _isAgain = false;
                }
                else
                {
                    GlobalUser.DoneScore = ScoreType.ScoreFailure; //提交评分 失败了

                    if (!GlobalUser.ErrScoreInfo.ContainsKey(ExamScore.WaveFileName))
                    {
                        ExamScore.SubmitNum++;
                        GlobalUser.ErrScoreInfo.Add(ExamScore.WaveFileName, ExamScore);
                    }

                    Log_Data log = new Log_Data();
                    log.log_desc   = Log_Type.PC_Score.ToString();
                    log.log_text   = msgInfo.ToJson();
                    log.log_device = JsonHelper.ToJson(GlobalUser.MACHINEINFO.GetDevice());
                    WebApiProxy.GetHtmlRespInfo(log, ApiType.SysLog, null, "Post");
                }
            }
            finally
            {
                if (OnScoreFinished != null)
                {
                    OnScoreFinished.Invoke();
                }

                //DelEngine();
            }
            return(0);
        }
Exemple #5
0
        /// <summary>
        /// 提交完成
        /// 并进入结果显示
        /// </summary>
        private void GoToResultView()
        {
            CompleteExamModel model = new CompleteExamModel()
            {
                exam_attend_id =
                    (string.IsNullOrEmpty(GlobalUser.AttendPaperItemId) || GlobalUser.SelectExamAttend.exam_attend_id < 1)
                        ? GlobalUser.AttendPaperItemId
                        : GlobalUser.SelectExamAttend.exam_attend_id.ToString(),
            };

            ApiType api = ApiType.CompleteExam;

            if (GlobalUser.MenuType == MenuType.Task)
            {
                api = ApiType.CompleteUserTask;
            }

            //完成练习 作业 训练
            var result = WebApiProxy.GetHtmlRespInfo(model, api, GlobalUser.USER.Token);

            if (result.retCode == 0)
            {
                _dispatcherTimer.Stop();

                //移除 ErrScore结果数据
                GlobalUser.CheckErrorScoreSource(User.Mobile,
                                                 GlobalUser.SelectPaperNumber.Split(new[] { "#" }, StringSplitOptions.RemoveEmptyEntries)[0],
                                                 GlobalUser.AttendPaperItemId, true);

                this.Cleanup();
                GlobalUser.DoneItemExam = true;
                BindExamResultUC();
            }
            else
            {
                _dispatcherTimer.Stop();

                //操作失败
                //todo
                ResubmitAnswerDialog dialog = new ResubmitAnswerDialog();

                DialogHost.Show(dialog, "ExamMainDialog"); //ResubmitDialogClosingEventHandler

                ErrMsgLog msgInfo = new ErrMsgLog();
                msgInfo.user    = GlobalUser.USER.Mobile;
                msgInfo.msginfo = "作答正常完成,提交 Complete 失败";
                msgInfo.error   = result.retHtml;
                msgInfo.isErr   = true;
                Log4NetHelper.Error(msgInfo
                                    .ToJson()); //$"[user:{GlobalUser.USER?.Mobile},msg:作答正常完成,未正常返回统计消息,data:{result.retHtml}]");

                {
                    Log_Data log = new Log_Data();
                    log.log_desc = Log_Type.PC_Complete_Error.ToString();
                    log.log_text =
                        msgInfo.ToJson(); //$"[user:{GlobalUser.USER?.Mobile},msg:作答正常完成,未正常返回统计消息,data:{result.retHtml}]";// $"{GlobalUser.USER?.Mobile}-作答正常完成,未正常返回统计消息---{result.retMsg}";
                    log.log_device = JsonHelper.ToJson(GlobalUser.MACHINEINFO.GetDevice());
                    WebApiProxy.GetHtmlRespInfo(log, ApiType.SysLog, null, "Post");
                }
            }
        }
Exemple #6
0
        private void DispatcherTimer_Tick(object sender, EventArgs e)
        {
            if (GlobalUser.MainWin == null)
            {
                _dispatcherTimer.Stop();
                return;
            }

            _timeOut = _timeOut - _dispatcherTimer.Interval.Seconds;

            var allCount = GlobalUser.SelectPaperInfo.paper_detail.Sum(s =>
                                                                       s.info.Sum(s1 => s1.items.Where(w => w.answers.Count > 0).Count()));
            var overCount = GlobalUser.ErrScoreInfo?.Count > 0 ? GlobalUser.ErrScoreInfo.Count : 1;

            ProgressValue    = Convert.ToInt32(100 * (allCount - overCount) / allCount);
            TxtProgressValue = $"打分中{ProgressValue}%...";

            //检查是否有评分(上传结果)异常,每个异常评分 执行超过3(SubmitNum-1)次
            if (_timeOut > 0 && GlobalUser.ErrScoreInfo?.Keys.Count > 0 &&
                GlobalUser.DoneScore != ScoreType.Scoring)
            {
                foreach (var key in GlobalUser.ErrScoreInfo.Keys)
                {
                    //var key = GlobalUser.ErrScoreInfo?.Keys.FirstOrDefault();
                    if (GlobalUser.ErrScoreInfo[key].SubmitNum < 999)
                    {
                        Messenger.Default.Send(GlobalUser.ErrScoreInfo[key],
                                               "ExamScoreNavi");
                        return;
                    }
                }
            }

            //保存 更新 ErrScore结果数据
            GlobalUser.UpdateErrScore(User.Mobile,
                                      GlobalUser.SelectPaperNumber,
                                      GlobalUser.AttendPaperItemId);


            if (GlobalUser.ErrScoreInfo?.Count > 0 && GlobalUser.DoneScore != ScoreType.Scoring && _timeOut <= 0)
            {
                _dispatcherTimer.Stop();

                //重评失败 无法操作
                //判断有无 SubmitNum==999 无法重评 重新作答
                if (GlobalUser.ErrScoreInfo.Values.Any(w => w.SubmitNum == 999))
                {
                    //显示重新 作答窗口
                    var view1 = new ScoreServiceErrDialog();
                    //view1.DataContext = new ScoreServiceErrDialogVM();
                    //打开 对话框
                    //DialogHost.Show(view1, "ExamMainDialog", ExamClosingEventHandler);
                    ErrDialogContent = view1;
                    IsErrDialogOpen  = true;
                    return;
                }

                //显示 重新评分窗口
                var view2 = new ScoreNetErrDialog();
                //view2.DataContext = new ScoreNetErrDialogVM();
                //打开 对话框
                //DialogHost.Show(view2, "ExamMainDialog", ExamClosingEventHandler);
                ErrDialogContent = view2;
                IsErrDialogOpen  = true;

                return;
            }

            if (GlobalUser.DoneScore == ScoreType.ScoreSuccess)
            {
                //确认线上消息 返回完成进度100% --> true
                if (GetCompleteResult())
                {
                    //记录完整 展示 评分和答题窗口
                    _dispatcherTimer.Stop();

                    GoToResultView();
                    return;
                }
                else
                {
                    if (_reCheckResult < 0)
                    {
                        //记录完整 展示 评分和答题窗口
                        _dispatcherTimer.Stop();

                        //操作失败
                        //todo
                        ResubmitAnswerDialog dialog = new ResubmitAnswerDialog();

                        DialogHost.Show(dialog, "ExamMainDialog");//ResubmitDialogClosingEventHandler

                        ErrMsgLog msgInfo = new ErrMsgLog();
                        msgInfo.user    = GlobalUser.USER.Mobile;
                        msgInfo.msginfo = "等待超时,作答正常完成,未正常返回结果消息";
                        msgInfo.isErr   = true;
                        Log4NetHelper.Error(msgInfo.ToJson());//$"[user:{GlobalUser.USER?.Mobile},msg:作答正常完成,未正常返回结果消息]");

                        {
                            Log_Data log = new Log_Data();
                            log.log_desc   = Log_Type.PC_Complete_Error.ToString();
                            log.log_text   = msgInfo.ToJson();//$"[user:{GlobalUser.USER?.Mobile},msg:作答正常完成,未正常返回结果消息]";// $"评分异常,未正常返回结果消息";
                            log.log_device = JsonHelper.ToJson(GlobalUser.MACHINEINFO.GetDevice());
                            WebApiProxy.GetHtmlRespInfo(log, ApiType.SysLog, null, "Post");
                        }
                        return;
                    }

                    _reCheckResult--;
                }
            }

            if (GlobalUser.DoneScore == ScoreType.ScoreFailure &&
                (GlobalUser.ErrScoreInfo == null || !GlobalUser.ErrScoreInfo.Any()))
            {
                //记录完整 展示 评分和答题窗口
                _dispatcherTimer.Stop();

                if (GetCompleteResult())
                {
                    GoToResultView();

                    return;
                }
                else
                {
                    //操作失败
                    //todo
                    ResubmitAnswerDialog dialog = new ResubmitAnswerDialog();

                    DialogHost.Show(dialog, "ExamMainDialog"); //ResubmitDialogClosingEventHandler
                    return;
                }
            }

            if (_timeOut <= 0)
            {
                _dispatcherTimer.Stop();
                // 评分失败
                if (GlobalUser.DoneScore != ScoreType.ScoreSuccess)
                {
                    //超时后处理操作
                    //todo
                    ResubmitAnswerDialog dialog = new ResubmitAnswerDialog();

                    DialogHost.Show(dialog, "ExamMainDialog");//ResubmitDialogClosingEventHandler
                    return;
                }
            }
        }