public override void OnScoreCallback(SyncScoreCallbckMessage msg) { var ml = new HistoryItemModel() { exam_attend_id = GlobalUser.AttendPaperItemId, item_id = PaperInfoItem.items[0].item_id, token = GlobalUser.USER.Token }; var result1 = WebApiProxy.GetHtmlRespInfo(ml, ApiType.GetSyncHistory, null, "get"); SyncScoreHistoryItem historyItem = new SyncScoreHistoryItem(); try { if (result1?.retCode == 0) { HistoryItem = JsonHelper.FromJson <SyncScoreHistoryItem>(result1.retData.ToString()); } } catch (Exception e) { Log4NetHelper.Error($"抓取历史 单题答题记录 异常", e); } BindUserScoreBox(msg); }
public UserPayQRCodeDialog(int payType) : this() { if (payType == 1) { PayTypeName.Text = "使用支付宝支付"; ImgPayIcon.Source = ConvertHelper.ChangeBitmapToImageSource(Properties.Resources.alipay); } if (payType == 2) { PayTypeName.Text = "使用微信支付"; ImgPayIcon.Source = ConvertHelper.ChangeBitmapToImageSource(Properties.Resources.wechatpay); } PayMoneyShow.Text = GlobalUser.STUDYCARD.card_price + "元"; var result0 = WebApiProxy.GetHtmlRespInfo(ApiType.GetCardOrder, GlobalUser.USER.Token); UserOrderModel model = new UserOrderModel() { token = GlobalUser.USER.Token, order_id = result0.retData.order_id.ToString() }; var result1 = WebApiProxy.GetImage(model, ApiType.GetQrCode, null, "get"); ImgQrCode.Source = ConvertHelper.ChangeBitmapToImageSource(result1 as Bitmap); }
/// <summary> /// Web 代理(提供 Api 请求操作)。 /// </summary> /// <typeparam name="T">Api 请求的参数对象类型。</typeparam> /// <param name="model">Api 请求的参数对象。</param> /// <param name="apiType">Api 请求的类型。</param> /// <param name="accessToken">访问令牌。</param> /// <returns>Api 响应对象。</returns> public RespCode WebProxy <T>(T model, ApiType apiType, string accessToken = null, string _Method = "Post") { var result = WebApiProxy.GetHtmlRespInfo(model, apiType, accessToken, _Method); // 验证错误码 if (result?.retCode == 4001) { LoginFailure(); } return(result); }
private async void ExecuteRunExtendedDialog(object o) { if (_selected_class_id == "-1") { ErrMsgOut = "还未选中班级,无法绑定!"; } else { UserBindClassModel model = new UserBindClassModel() { class_id = _selected_class_id, }; //开始绑定 var result = WebApiProxy.GetHtmlRespInfo(model, ApiType.UserBindClass, GlobalUser.USER.Token); if (result.retCode == 0) { ErrMsgOut = $"您已绑定班级 {_selected_class_name}!"; GlobalUser.CLASSINFO = new ClassInfo() { Class_id = _selected_class_id, Class_name = _selected_class_name, Token = GlobalUser.USER.Token, }; //_uc.CurrentCloseBtn.CommandParameter = true; await Task.Factory.StartNew(() => Thread.Sleep(333)) .ContinueWith(t => { RememberUser(); _uc.CurrentCloseBtn.CommandParameter = true; ButtonAutomationPeer peer = new ButtonAutomationPeer(_uc.CurrentCloseBtn); IInvokeProvider invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider; invokeProv.Invoke(); }, TaskScheduler.FromCurrentSynchronizationContext()); } else { //绑定失败 ErrMsgOut = result.retMsg; } } }
public void UpdateSubChoiceAnswer(string qsId, string qsType) { float myScore = 0f; string myAnswer = ""; //评分 for (int i = 0; i < _paperSubItemDetail.answers.Count; i++) { if ((i + 1) == Int32.Parse(_AnswerOrder)) { if (_paperSubItemDetail.answers[i].answer_is_right == 1) { myScore = _paperSubItemDetail.item_score; } myAnswer = _paperSubItemDetail.answers[i].source_content; break; } } // 异步请求,防止界面假死 Application.Current.Dispatcher.Invoke(new Action(() => { SubmitRecordModel model = new SubmitRecordModel { exam_attend_id = GlobalUser.AttendPaperItemId, item_id = _paperSubItemDetail.item_id, item_score = _paperSubItemDetail.item_score, exam_score = myScore, user_answer = GetChoiceName(myAnswer), item_answer = _paperSubItemDetail.answers.Where(w => w.answer_is_right == 1).ToList()[0].source_content, item_answer_type = 1, qs_id = qsId, qs_type = qsType, item_no = _paperSubItemDetail.item_no }; var result = WebApiProxy.GetHtmlRespInfo(model, ApiType.SubmitRecord, GlobalUser.USER.Token); GlobalUser.DoneItemExam = true; GlobalUser.DoneScore = ScoreType.ScoreSuccess; //评分 if (result?.retCode != 0) { GlobalUser.DoneScore = ScoreType.ScoreFailure; //提交评分 失败了 Log4NetHelper.Error("UpdateSubChoiceAnswer: Error"); Log4NetHelper.Error("上传评分失败 -- result: 提交评分失败"); } })); }
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"); }
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); }
/// <summary> /// 记住用户。 /// </summary> /// <param name="userName">用户名称。</param> /// <param name="phone">手机号码。</param> /// <param name="accessToken">访问令牌。</param> //private new void RememberUser() //{ // var userFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, GlobalUser.DATAFOLDER); // var userDataFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, GlobalUser.DATAFOLDER, "user.dat"); // var userDataModel = new UserDataModel // { // UserName = GlobalUser.USER.UserName, // Phone = GlobalUser.USER.Mobile, // Avatar = GlobalUser.USER.Avatar, // AccessToken = GlobalUser.USER.Token, // Password = GlobalUser.USER.Password, // Data = GlobalUser.USER, // ClassData = GlobalUser.CLASSINFO, // StudyCard = GlobalUser.STUDYCARD, // UnFirstOpen = GlobalUser.USER.UnFirstOpen // }; // var userEncoded = // Base64Provider.AESEncrypt(userDataModel.ToJsonItem(), Base64Provider.KEY, Base64Provider.IV); // try // { // if (!Directory.Exists(userFolder)) Directory.CreateDirectory(userFolder); // if (!File.Exists(userDataFile)) // { // var file = File.Create(userDataFile); // file.Close(); // file.Dispose(); // } // using (var sw = new StreamWriter(userDataFile, false)) // { // sw.Write(userEncoded); // } // } // catch (Exception e) // { // Log4NetHelper.Error("写入用户信息异常:", e); // } //} /// <summary> /// 登录成功。 /// </summary> /// <param name="loginWin">登录窗口。</param> private void LoggedIn(Window loginWin) { if (!GlobalUser.AutoLoggedIn) { RememberUser(); } ErrIsShow = Visibility.Hidden; //ErrMsg = "请输入有效的手机号!"; //MessageBox.Show("验证成功"); //GetUserCard(); if (GlobalUser.USER.RetCode == 40400) { loginWin.Show(); //loginWin.Focus(); return; } loginWin.Hide(); { var log = new Log_Data(); log.log_desc = Log_Type.APP_RUN.ToString(); log.log_text = GlobalUser.USER.ToJsonItem(); //$"登录:{GlobalUser.USER?.Mobile}"; log.log_device = JsonHelper.ToJson(GlobalUser.MACHINEINFO.GetDevice()); WebApiProxy.GetHtmlRespInfo(log, ApiType.SysLog, null, "Post"); } //未绑卡 if (GlobalUser.STUDYCARD == null || GlobalUser.STUDYCARD.expire_status == -1 || GlobalUser.STUDYCARD.expire_time == null) { var card = new MainBindCard(); card.Show(); card.Focus(); return; } //if (GlobalUser.MainWin == null) if (!GlobalUser.LoginExpired) { GlobalUser.MainWin = new MainWindow(); } GlobalUser.MainWin.Show(); GlobalUser.MainWin.Focus(); }
/// <summary> /// Web 代理(提供 Api 请求操作)。 /// </summary> /// <typeparam name="T">Api 请求的参数对象类型。</typeparam> /// <param name="model">Api 请求的参数对象。</param> /// <param name="apiType">Api 请求的类型。</param> /// <param name="accessToken">访问令牌。</param> /// <returns>Api 响应对象。</returns> public RespCode WebProxy <T>(T model, ApiType apiType, string accessToken = null, string _Method = "Post") { var result = WebApiProxy.GetHtmlRespInfo(model, apiType, accessToken, _Method); // 验证错误码 if (result?.retCode == 4001) { var windows = Application.Current.Windows; var loginWondow = new Window(); var mainWondow = new Window(); foreach (Window window in windows) { if (window.Name == "ml") { loginWondow = window; } if (window.Name == "MetroWindowMain") { mainWondow = window; } } GlobalUser.LoginWin = loginWondow; loginWondow.Show(); loginWondow.Focus(); DialogHost.CloseAllShow(); mainWondow.Hide(); //mainWondow.Close(); GlobalUser.MainWin?.Hide(); //GlobalUser.MainWin?.Close(); GlobalUser.MainWin = null; GlobalUser.LoginExpired = true; GlobalUser.AutoLoggedIn = false; GlobalUser.USER = null; LoginExpired(loginWondow); //return; } return(result); }
/// <summary> /// Web 代理(提供 Api 请求操作)。 /// </summary> /// <param name="apiType">Api 请求的类型。</param> /// <param name="accessToken">访问令牌。</param> /// <returns>Api 响应对象。</returns> public RespCode WebProxy(ApiType apiType, string accessToken = null, string _Method = "Post") { var result = WebApiProxy.GetHtmlRespInfo(apiType, accessToken, _Method); // Token失效 4001 if (result?.retCode == 4001) { LoginFailure(); //var windows = Application.Current.Windows; //var loginWondow = new Window(); //var mainWondow = new Window(); //foreach (Window window in windows) //{ // if (window.Name == "ml") // { // loginWondow = window; // } // if (window.Name == "MetroWindowMain") // { // mainWondow = window; // } //} //GlobalUser.LoginWin = loginWondow; //GlobalUser.LoginWin.Show(); //GlobalUser.LoginWin.Focus(); ////DialogHost.CloseAllShow(); ////mainWondow.Hide(); ////mainWondow.Close(); ////GlobalUser.MainWin?.Hide(); ////GlobalUser.MainWin?.Close(); ////GlobalUser.MainWin = null; //GlobalUser.LoginExpired = true; //GlobalUser.AutoLoggedIn = false; //GlobalUser.USER = null; //LoginExpired(loginWondow); } return(result); }
private void AddClassList(string phoneNum) { GetTeacherClassListModel model = new GetTeacherClassListModel() { phone = phoneNum, token = GlobalUser.USER.Token }; //开始绑定 var result = WebApiProxy.GetHtmlRespInfo(model, ApiType.GetTeacherClassList, null, "get"); if (result.retCode == 0) { List <ClassInfo> classInfos = JsonHelper.FromJson <List <ClassInfo> >(result.retData.ToString()); RadioButton rbtn = null; for (int i = 0; i < classInfos.Count; i++) { rbtn = new RadioButton(); rbtn.Style = _uc.Resources["ClassBoxRadioButton"] as Style; rbtn.Margin = new Thickness(8); rbtn.Content = classInfos[i].Class_name; rbtn.CommandParameter = classInfos[i].Class_id; rbtn.Checked += Rbtn_Checked; _classPanel.Children.Add(rbtn); } if (classInfos.Count < 1) { ErrMsgOut = "没有班级可供添加!"; } } else { //绑定失败 ErrMsgOut = result.retMsg; } }
private void UpdateAnswer(string scoreJson) { Application.Current.Dispatcher.Invoke(new Action(() => { try { if (GlobalUser.DoAnswer) { ScoreRoot score = JsonHelper.FromJson <ScoreRoot>(scoreJson.Replace("\"params\"", "\"param\"")); 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 >= 45 || ExamScore.AnswerModel.item_answer == score.result.recognition) { scoreStr = ExamScore.AnswerModel.item_score.ToString("000.00"); } } else { scoreStr = ((score.result.overall / 100) * ExamScore.AnswerModel.item_score).ToString("000.00"); } ExamScore.AnswerModel.user_answer = scoreJson.TrimEnd('\0'); ExamScore.AnswerModel.exam_score = score.result.overall; //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) { GlobalUser.DoneScore = ScoreType.ScoreFailure; Log4NetHelper.Error( $"上传评分失败 -- result:{result.retCode == 1} {result.retCode} {result.retMsg}"); } } else { GlobalUser.DoneScore = ScoreType.NoScore; Log4NetHelper.Error($"评分失败 -- result: 当前不是做题过程!"); } } catch (Exception ex) { GlobalUser.DoneScore = ScoreType.NoScore; Log4NetHelper.Error($"评分失败 -- result: 当前不是做题过程!", ex); Log4NetHelper.Error($"scoreJson: {scoreJson}"); Log4NetHelper.Error($"record url: {ExamScore.WaveFileName}"); } })); }
/// <summary> /// 注销 /// </summary> protected void Loginout() { Application.Current.Dispatcher.Invoke(new Action(() => { //var logoutResult = WebProxy(ApiType.UserLogout, GlobalUser.USER.AccessToken);//暂时 不用调用接口 移除token记录 string userFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, GlobalUser.DATAFOLDER); string userDataFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, GlobalUser.DATAFOLDER, $"user.dat"); GlobalUser.USER.Token = ""; UserDataModel userDataModel = new UserDataModel { AccessToken = "", UserName = GlobalUser.USER.UserName, Phone = GlobalUser.USER.Mobile, Avatar = GlobalUser.USER.Avatar, Password = GlobalUser.USER.Password, Data = GlobalUser.USER, ClassData = GlobalUser.CLASSINFO, UserZy = GlobalUser.USER.UserZy, StudyCard = GlobalUser.STUDYCARD, UnFirstOpen = GlobalUser.USER.UnFirstOpen, }; GlobalUser.USER = null; string userEncoded = Base64Provider.AESEncrypt(userDataModel.ToJsonItem(), Base64Provider.KEY, Base64Provider.IV); try { if (!Directory.Exists(userFolder)) { Directory.CreateDirectory(userFolder); } if (!File.Exists(userDataFile)) { var file = File.Create(userDataFile); file.Close(); file.Dispose(); } using (StreamWriter sw = new StreamWriter(userDataFile, false)) { sw.Write(userEncoded); } } catch (Exception e) { Log4NetHelper.Error("写入用户信息异常:", e); } DialogHost.CloseAllShow(); { Log_Data log = new Log_Data(); log.log_desc = Log_Type.PC_Logout.ToString(); log.log_text = $"注销:{GlobalUser.USER?.Mobile}"; log.log_device = JsonHelper.ToJson(GlobalUser.MACHINEINFO.GetDevice()); WebApiProxy.GetHtmlRespInfo(log, ApiType.SysLog, null, "Post"); } GlobalUser.MainWin?.Hide(); GlobalUser.MainWin = null; //GlobalUser.MainWin?.Close(); ClearMemory(); GlobalUser.AutoLoggedIn = false; GlobalUser.MainWin = new MainLogin(); GlobalUser.MainWin.DataContext = new MainLoginVM(false); GlobalUser.MainWin.Show(); GlobalUser.MainWin.Focus(); //_metroWindow.Hide(); //_metroWindow.Close(); //_metroWindow = null; })); }
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; } } }
private void UpdateTextAnswer() { // 异步请求,防止界面假死 Application.Current.Dispatcher.Invoke(new Action(() => { List <float> myScores = new List <float>(); List <string> userAnswers = new List <string>(); userAnswers.Add(TxtAnswer1); userAnswers.Add(TxtAnswer2); userAnswers.Add(TxtAnswer3); userAnswers.Add(TxtAnswer4); userAnswers.Add(TxtAnswer5); if (PaperItems[0].items[0].answers[0].answer_content.Trim().Split('|').Contains(TxtAnswer1?.Trim())) { myScores.Add(PaperItems[0].items[0].item_score); } else { myScores.Add(0); } if (PaperItems[0].items[1].answers[0].answer_content.Trim().Split('|').Contains(TxtAnswer2?.Trim())) { myScores.Add(PaperItems[0].items[1].item_score); } else { myScores.Add(0); } if (PaperItems[0].items[2].answers[0].answer_content.Trim().Split('|').Contains(TxtAnswer3?.Trim())) { myScores.Add(PaperItems[0].items[2].item_score); } else { myScores.Add(0); } if (PaperItems[0].items[3].answers[0].answer_content.Trim().Split('|').Contains(TxtAnswer4?.Trim())) { myScores.Add(PaperItems[0].items[3].item_score); } else { myScores.Add(0); } if (PaperItems[0].items[4].answers[0].answer_content.Trim().Split('|').Contains(TxtAnswer5?.Trim())) { myScores.Add(PaperItems[0].items[4].item_score); } else { myScores.Add(0); } //评分 for (int i = 0; i < PaperItems[0].items.Count; i++) { SubmitRecordModel model = new SubmitRecordModel { exam_attend_id = GlobalUser.AttendPaperItemId, item_id = PaperItems[0].items[i].item_id, item_score = PaperItems[0].items[i].item_score, exam_score = myScores[i], user_answer = userAnswers[i], item_answer = PaperItems[0].items[i].answers[0].answer_content, item_answer_type = 1, qs_id = PaperDetailItem.qs_id, qs_type = PaperDetailItem.qs_type, item_no = PaperItems[0].items[i].item_no }; var result = WebApiProxy.GetHtmlRespInfo(model, ApiType.SubmitRecord, GlobalUser.USER.Token); GlobalUser.DoneItemExam = true; GlobalUser.DoneScore = ScoreType.ScoreSuccess; //评分 if (result?.retCode != 0) { GlobalUser.DoneScore = ScoreType.ScoreFailure; //提交评分 失败了 Log4NetHelper.Error("UpdateSubChoiceAnswer: Error"); Log4NetHelper.Error("上传评分失败 -- result: 提交评分失败"); } } })); }
/// <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"); } } }
private void DispatcherTimer_Tick(object sender, EventArgs e) { if (GlobalUser.DoneScore == ScoreType.ScoreSuccess) { if (GetCompleteResult()) { //记录完整 展示 评分和答题窗口 _dispatcherTimer.Stop(); CompleteExamModel model = new CompleteExamModel() { exam_attend_id = (GlobalUser.SelectExamAttend == null || GlobalUser.SelectExamAttend.exam_attend_id < 1) ? GlobalUser.AttendPaperItemId : GlobalUser.SelectExamAttend.exam_attend_id.ToString(), }; //完成练习 var result = WebApiProxy.GetHtmlRespInfo(model, ApiType.CompleteExam, GlobalUser.USER.Token); if (result.retCode == 0) { _dispatcherTimer.Stop(); BindExamResultUC(); } else { _dispatcherTimer.Stop(); //操作失败 //todo ResubmitAnswerDialog dialog = new ResubmitAnswerDialog(); DialogHost.Show(dialog, "ExamMainDialog");//ResubmitDialogClosingEventHandler Log4NetHelper.Error("评分正常完成,未正常返回统计消息---" + result.retMsg); } } else { if (_reCheckResult < 1) { //记录完整 展示 评分和答题窗口 _dispatcherTimer.Stop(); //操作失败 //todo ResubmitAnswerDialog dialog = new ResubmitAnswerDialog(); DialogHost.Show(dialog, "ExamMainDialog");//ResubmitDialogClosingEventHandler Log4NetHelper.Error("评分异常,未正常返回结果消息"); } _reCheckResult--; } } if (_timeOut <= 0) { _dispatcherTimer.Stop(); // 评分失败 if (GlobalUser.DoneScore != ScoreType.ScoreSuccess) { //超时后处理操作 //todo ResubmitAnswerDialog dialog = new ResubmitAnswerDialog(); DialogHost.Show(dialog, "ExamMainDialog");//ResubmitDialogClosingEventHandler } } _timeOut = _timeOut - _dispatcherTimer.Interval.Seconds; }
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"); } } })); }
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); }