using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using GeneralLib; using Microsoft.Office.Interop.PowerPoint; using System.Collections.Specialized; using System.Windows.Forms; namespace SunVoteARSPPT { /// /// 反馈人员类信息 /// class ResponseVoter { /// /// 人员名单关联的ID /// public int RosterID; /// /// 反馈者ID /// public int VoterID; /// /// 键盘编号 /// public int KeypadID; /// /// 用于签到码 /// public string Code; } class ResponseDB { /// /// 保存题目信息,可在启动反馈时调用 /// public bool SaveResponseInfo() { bool res = false; return true;//杨斌 2016-09-29 Slide SlideNow = null; if (Globals.SunVoteARSAddIn.PPTShow.IsShowSlide) SlideNow = Globals.SunVoteARSAddIn.PPTShow.SlideShow; else//杨斌 2017-08-31 SlideNow = Globals.SunVoteARSAddIn.PPTEdit.SlideEdit; if (SlideNow == null) return false; try { //取得题目ID string topicID = SlideNow.SlideID.ToString(); //获取题目标题 string title = PPTOper.GetSlideTitle(SlideNow); //题目序号=幻灯片序号 int slideIndex = SlideNow.SlideIndex; //杨斌 2016-09-29 //string sSql = "select * from ST_Topic"; //DataSet ds = null; //ds = GlobalInfo.DBOperation.OpenDataSet(sSql); //List slideIDList = new List(); //foreach (Slide s in Globals.SunVoteARSAddIn.PPTEdit.PPT.ActivePresentation.Slides) //{ // slideIDList.Add(s.SlideID.ToString()); //} //for (int i = 0; i < ds.Tables[0].Rows.Count; i++) //{ // if (!slideIDList.Contains(ds.Tables[0].Columns["T_ID"].ToString())) // { // UpdateTopicID(ds.Tables[0].Columns["T_ID"].ToString()); // } //} //res = true; } catch (Exception ex) { SystemLog.WriterLog(ex); //GlobalInfo.DBOperation.RollbackTrans(); } return res; } /// /// 替换旧数据在当前幻灯片存在的ID /// /// public void ChangeOldSlideSameID() { try { Presentation pres = Globals.SunVoteARSAddIn.Application.ActivePresentation; if (pres == null) return; if (pres.Slides.Count < 1) return; TDictionary dicPres = new TDictionary(); for (int i = 1; i <= pres.Slides.Count; i++) { dicPres.Add(pres.Slides[i].SlideID.ToString(), pres.Slides[i].SlideIndex); } string sql = "Select * From ST_Topic"; GlobalInfo.DBOperation.OpenDataSet(sql); System.Data.DataTable tb = GlobalInfo.DBOperation.DataSet.Tables[0]; for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; string tid = row["T_ID"].ToString(); if (dicPres.Contains(tid)) { row["T_Index"] = dicPres[tid]; } } GlobalInfo.DBOperation.UpdateDataSet(); GlobalInfo.DBOperation.CloseDataSet(); } catch (Exception ex) { SystemLog.WriterLog(ex); } } /// /// 保存选举结果,按票数排序 /// 该函数必须先保存SaveResponseData后再调用,已放在SaveResponseData里面的后面 /// /// private bool SavePollInfo(string topicID) { bool res = false; if (Globals.SunVoteARSAddIn.PPTShow.SlideShow == null) return false; try { string pollResult = ""; //反馈信息添加:选举结果 if (Globals.SunVoteARSAddIn.PPTShow.ResponseType == ResponseType.Poll) { pollResult = GetPollResult(topicID); } else { return true; } string sql = "Select * From ST_Topic Where T_ID='" + topicID + "'"; GlobalInfo.DBOperation.OpenDataSet(sql); if (GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Count > 0) { DataRow row = GlobalInfo.DBOperation.DataSet.Tables[0].Rows[0]; row["T_Note"] = row["T_Title"].ToString() + "\r\n\r\n" + pollResult;//题目信息 } GlobalInfo.DBOperation.UpdateDataSet(); GlobalInfo.DBOperation.CloseDataSet(); } catch (Exception ex) { SystemLog.WriterLog(ex); } return res; } /// /// 删除题目结果表 2012-10-12 /// /// public bool DeleteTopicResult() { string sSql = "delete from ST_TopicPar"; GlobalInfo.DBOperation.ExecuteNonQuery(sSql); return true; } /// /// 签到码签到后,更新名单的键盘绑定 /// 创建:杨斌 2013-01-30 /// private void SaveCodeSignIn() { try { FrmVoteDetail frmDetail = Globals.SunVoteARSAddIn.frmVoteBar.frmVoteDetail; int colIDCode = frmDetail.Roster.Columns[frmDetail.SignInCodeIndex].ColumnID; int colIDKeypad = frmDetail.Roster.Columns[0].ColumnID; Dictionary dicRosterKeypad = new Dictionary(); GlobalInfo.DBOperation.BeginTrans(); string sql = "Select * From ST_RosterValue"; GlobalInfo.DBOperation.OpenDataSet(sql); if (frmDetail.SignInMode == 1) { //先找到人员ID对应的签到码,然后根据坐席图查签到码对应的键盘编号,最后记录人员ID对应的键盘编号 for (int i = 0; i < GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Count; i++) { DataRow row = GlobalInfo.DBOperation.DataSet.Tables[0].Rows[i]; if (row["RC_ID"].ToString() == colIDCode.ToString()) { string rosterID = row["RR_ID"].ToString(); string sCode = row["RV_Text"].ToString(); if (frmDetail.Map.Contains(sCode)) { string sKeypad = frmDetail.Map[sCode].Data; if (sKeypad.IndexOf(',') < 0) { //int keyapdID = ConvertOper.Convert(sKeypad).ToInt; //if ((keyapdID > 0) && (!dicRosterKeypad.ContainsKey(rosterID))) // dicRosterKeypad.Add(rosterID, keyapdID); //杨斌 2015-01-14 if (!dicRosterKeypad.ContainsKey(rosterID)) dicRosterKeypad.Add(rosterID, sKeypad); } } } } } else if (frmDetail.SignInMode == 2)//杨斌 2017-03-30 { Dictionary dicRUID = RosterList.GetDicRUID(); int lastCol = RosterList.RosterLoad.Columns.Count - 1; for (int i = 0; i < RosterList.RosterLoad.Rows.Count; i++) { string rosterID = RosterList.RosterLoad.Rows[i].RowID + ""; string sCode = RosterList.RosterLoad.Rows[i].Cells[lastCol]; if (frmDetail.Map.Contains(sCode)) { string sKeypad = frmDetail.Map[sCode].Data; if (sKeypad.IndexOf(',') < 0) { if (!dicRosterKeypad.ContainsKey(rosterID)) dicRosterKeypad.Add(rosterID, sKeypad); } } } } //保存人员ID对应的键盘编号 for (int i = 0; i < GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Count; i++) { DataRow row = GlobalInfo.DBOperation.DataSet.Tables[0].Rows[i]; if (row["RC_ID"].ToString() == colIDKeypad.ToString()) { string rosterID = row["RR_ID"].ToString(); if (dicRosterKeypad.ContainsKey(rosterID)) row["RV_Text"] = dicRosterKeypad[rosterID].ToString(); else row["RV_Text"] = ""; } } GlobalInfo.DBOperation.UpdateDataSet(); GlobalInfo.DBOperation.CloseDataSet(); GlobalInfo.DBOperation.CommitTrans(); } catch (Exception ex) { SystemLog.WriterLog(ex); } } public static Dictionary GetOtionScore(string otionScore) { Dictionary res = new Dictionary(); try { string[] ary = otionScore.Split(PublicFunction.SplitItemScore);//杨斌 2019-07-19 if (ary.Length > 0) { foreach (var v in ary) { string[] aa = v.Split('='); if (aa.Length >= 2) { string key = aa[0]; if (!res.ContainsKey(key)) res.Add(key, ConvertOper.Convert(aa[1]).ToDouble); } } } } catch (Exception ex) { SystemLog.WriterLog(ex); } return res; } /// /// 计算评议题的等级分数。杨斌 2019-02-28 /// public string GetGradeScore(string[] aryGradeScoreSet) { string res = ""; double score = 0; try { Dictionary dicScoreSet = new Dictionary(); if ((aryGradeScoreSet != null) && (aryGradeScoreSet.Length > 0)) { foreach (var v in aryGradeScoreSet) { var ary = v.Split('='); if ((ary.Length >= 2) && !dicScoreSet.ContainsKey(ary[0])) dicScoreSet.Add(ary[0], ConvertOper.Convert(ary[1]).ToDouble); } if (GlobalInfo.response.ResponseDataList.Count > 0) { for (int i = 0; i < GlobalInfo.response.ResponseDataList.Count; i++) { string value = GlobalInfo.response.ResponseDataList[i].KeyValue; var ary = value.Split(','); if (dicScoreSet.ContainsKey(ary[0])) score += dicScoreSet[ary[0]]; } res = (score / GlobalInfo.response.ResponseDataList.Count).ToString("F2"); } } } catch (Exception ex) { SystemLog.WriterLog(ex); } return res; } /// /// 保存题目统计结果相关信息,可在停止反馈时调用 /// 修改:杨斌 2012-03-28 /// public bool SaveResponseResult() { bool res = false; //杨斌 2017-08-07 Microsoft.Office.Interop.PowerPoint.Slide SlideNow = null; ResponseType ResponseTypeNow = ResponseType.None; TagSet TagSetNow = null; if (Globals.SunVoteARSAddIn.PPTShow.IsShowSlide) { SlideNow = Globals.SunVoteARSAddIn.PPTShow.SlideShow; ResponseTypeNow = Globals.SunVoteARSAddIn.PPTShow.ResponseType; TagSetNow = Globals.SunVoteARSAddIn.PPTShow.TagSetSlide; }//杨斌 2017-08-31 else { SlideNow = Globals.SunVoteARSAddIn.PPTEdit.SlideEdit; ResponseTypeNow = Globals.SunVoteARSAddIn.PPTEdit.ResponseTypeSlideEdit; TagSetNow = Globals.SunVoteARSAddIn.PPTEdit.TagSet; } if (SlideNow == null) return false; try { //取得题目ID string topicID = SlideNow.SlideID.ToString(); //获取题目标题 string title = PPTOper.GetSlideTitle(SlideNow); //题目序号=幻灯片序号 int slideIndex = SlideNow.SlideIndex; //参与人数 double voterCount = 0; //2014-03-17 增加权重 //if (GlobalInfo.response.IsAllPerson) //{ // voterCount = GlobalInfo.hardwareManage.PersonNum; //} //else //{ // voterCount = GlobalInfo.response.AuthorKeypadList.Count; //} voterCount = GlobalInfo.response.GetParticipantNum(ResponseTypeNow, SlideNow); //参与人数未加权。杨斌 2014-05-15 double voterCountMan = 0; if (GlobalInfo.response.IsAllPerson) { voterCountMan = GlobalInfo.hardwareManage.PersonNum; } else { voterCountMan = GlobalInfo.response.AuthorKeypadList.Count; } //反馈提交人数 //int submitCount = GlobalInfo.response.ResponseDataList.Count; double submitCount = GlobalInfo.response.GetResponseNum(); int submitCountMan = GlobalInfo.response.ResponseDataList.Count;//反馈人数未加权。杨斌 2014-05-15 //杨斌 2013-01-30 if (Globals.SunVoteARSAddIn.frmVoteBar != null) { FrmVoteDetail frmDetail = Globals.SunVoteARSAddIn.frmVoteBar.frmVoteDetail; if (frmDetail != null) { if (frmDetail.IsCodeSignIn()) { voterCount = frmDetail.VoterCount; submitCount = frmDetail.SignInOkCount; SaveCodeSignIn(); frmDetail.Roster.LoadRoster();//重新绑定键盘编号后,重新加载名单。杨斌 2013-05-21 } } } //记名模式 int nameMode = 1; switch (ResponseTypeNow) { case ResponseType.SignIn: case ResponseType.Group: nameMode = 1;//签到分组,默认记名 break; default: try { nameMode = TagSetNow.LoadValue(TagKey.ResponsePara_NameMode, 1).ToInt; } catch (Exception ex) { SystemLog.WriterLog(ex, false); } break; } //if (nameMode == 0) //{ // string s = SlideNow.SlideIndex.ToString(); // MessageBox.Show(s); //} //正确答案 杨斌 2012-03-15 string correctAsw = Globals.SunVoteARSAddIn.PPTEdit.GetSlideCorrectAnswer( SlideNow, ResponseTypeNow); //杨斌 2015-05-07 string scoreWrong = Globals.SunVoteARSAddIn.PPTEdit.GetSlideWrongScore( SlideNow, ResponseTypeNow); //杨斌 2015-09-06 string scoreRight = Globals.SunVoteARSAddIn.PPTEdit.GetSlideRightScore( SlideNow, ResponseTypeNow); //switch (ResponseTypeNow) //{ // case ResponseType.Choice: // correctAsw = TagSetNow.GetValue(TagKey.Choice_CorrectAnswer).Value; // break; // case ResponseType.Judge: // correctAsw = TagSetNow.GetValue(TagKey.Judge_CorrectAnswer).Value; // break; // case ResponseType.Order: // correctAsw = TagSetNow.GetValue(TagKey.Order_CorrectAnswer).Value; // break; // case ResponseType.Number: // correctAsw = TagSetNow.GetValue(TagKey.Number_CorrectAnswer).Value; // break; //} //题目类型、选项个数、选项内容 string optionCountS = ""; string[] aryOption = null;//选项内容 int optionCount = 0;//选项个数 //杨斌 2014-06-06 string info = PPTOper.GetSlideInfo(SlideNow) + "\r\n\r\n";//title + "\r\n\r\n";//题目信息,自动生成的含标题+选项内容,报表用到 int scoreMode = 0;//杨斌 2012-10-22 string topicName = "";//杨斌 2014-10-21 switch (ResponseTypeNow) { case ResponseType.SignIn: optionCountS = "2"; break; case ResponseType.Group: optionCountS = TagSetNow.GetValue(TagKey.Group_OptionCount).Value; topicName = TagSetNow.GetValue(TagKey.Slide_GroupName).Value; break; case ResponseType.Choice: optionCountS = TagSetNow.GetValue(TagKey.Choice_OptionCount).Value; int optionLimit = TagSetNow.GetValue(TagKey.Choice_OptionLimit).ToInt; scoreMode = TagSetNow.GetValue(TagKey.Choice_ScoreMode).ToInt;//杨斌 2012-10-22 break; case ResponseType.Judge: optionCountS = "2"; scoreMode = TagSetNow.GetValue(TagKey.Judge_ScoreMode).ToInt;//杨斌 2012-10-22 break; case ResponseType.Vote: optionCountS = TagSetNow.GetValue(TagKey.Vote_OptionCount).Value; break; case ResponseType.Grade: optionCountS = TagSetNow.GetValue(TagKey.Grade_OptionCount).Value; break; case ResponseType.Order: optionCountS = TagSetNow.GetValue(TagKey.Order_OptionCount).Value; //杨斌 2014-04-18 scoreMode = TagSetNow.GetValue(TagKey.Order_ScoreMode).ToInt; break; case ResponseType.Score: break; case ResponseType.Poll: optionCountS = TagSetNow.GetValue(TagKey.Poll_CandidatesCount).Value; break; } optionCount = ConvertOper.Convert(optionCountS).ToInt; aryOption = PPTOper.GetOptionTextBySlide(SlideNow, optionCount); //杨斌 2015-01-16 bool bABCD = false; switch (ResponseTypeNow) { case ResponseType.Choice: case ResponseType.Grade: case ResponseType.Group: case ResponseType.Judge: case ResponseType.Vote: bABCD = (TagSetNow.GetValue(TagKey.KeypadPara_OptionMode).ToInt == 1); break; } //记录选项投票个数和比率,比率=选项投票个数/反馈提交人数 switch (ResponseTypeNow) { case ResponseType.SignIn: case ResponseType.Group: case ResponseType.Choice: case ResponseType.Judge: case ResponseType.Vote: case ResponseType.Grade: case ResponseType.Order: if (optionCount > 0) { string[] aryOptionSubmit = new string[optionCount]; if (ResponseTypeNow == ResponseType.SignIn) { aryOption[0] = GlobalInfo.SysLanguage.LPT.ReadString("FrmVoteDetail", "lblVoted_Arrive", "已到:"); aryOption[1] = GlobalInfo.SysLanguage.LPT.ReadString("FrmVoteDetail", "lblVoted_UnArrive", "未到:"); aryOptionSubmit[0] = " " + submitCount.ToString(); aryOptionSubmit[0] += "(" + ConvertOper.GetPercent((double)submitCount, voterCount, 2) + ")"; double notSignIn = voterCount - submitCount; aryOptionSubmit[1] = " " + notSignIn.ToString(); aryOptionSubmit[1] += "(" + ConvertOper.GetPercent((double)notSignIn, voterCount, 2) + ")"; } else if (ResponseTypeNow == ResponseType.Order) { for (int i = 0; i < optionCount; i++) { aryOptionSubmit[i] = ""; } } else { for (int i = 0; i < optionCount; i++) { string sOpt = i.ToString(); double countSubmit = 0; if (GlobalInfo.response.ResponseOptionList.ContainsKey(sOpt)) //杨斌 2017-08-24 countSubmit = GlobalInfo.response.ResponseOptionList[sOpt]; aryOptionSubmit[i] = " " + countSubmit.ToString(); aryOptionSubmit[i] += "(" + ConvertOper.GetPercent((double)countSubmit, submitCount, 2) + ")"; } } //反馈信息添加:题目选项内容 + 选项票数(百分比) if ((ResponseTypeNow == ResponseType.Order) && (scoreMode == 1)) { correctAsw = "";//没有答案 for (int i = 0; i < GlobalInfo.response.ListOrderScore.Count; i++) { OrderItem odItem = GlobalInfo.response.ListOrderScore[i]; string sNo = ""; sNo = (bABCD ? PPTOper.FormatNumABC(odItem.No, false) : odItem.No.ToString()) + ". "; info += sNo + aryOption[odItem.No - 1] + " " + odItem.Score + "\r\n"; } } else { //杨斌 2012-06-28 for (int i = 0; i < optionCount; i++) { string sNo = ""; if (ResponseTypeNow != ResponseType.SignIn) sNo = (bABCD ? PPTOper.FormatNumABC(i + 1, false) : (i + 1).ToString()) + ". "; info += sNo + aryOption[i] + aryOptionSubmit[i] + "\r\n"; } } } break; } //反馈信息添加:正确答案 //修改 杨斌 2012-06-04 if (correctAsw.Length > 0) { //百分比分母,如图表、正确率 //string percentMode = TagSetNow.GetValue(TagKey.ChartPara_DataPercentBase).Value; double percentCount = voterCount;//默认"crParticipant" //switch (percentMode) //{ // case "crResponse": // percentCount = submitCount; // break; // case "crParticipant": // break; //} int correctCount = 0; for (int i = 0; i < GlobalInfo.response.ResponseDataList.Count; i++) { if (GlobalInfo.response.ResponseDataList[i].Correct > 0) correctCount++; } //杨斌 2012-07-02 string correctAswShow = correctAsw; if (bABCD)//杨斌 2012-10-22 { if (scoreMode == 1) correctAswShow = PPTOper.FormatNumABCEx(correctAswShow); else correctAswShow = PPTOper.FormatNumABC(correctAswShow); } info += GlobalInfo.SysLanguage.LPT.ReadString("PanelNumber", "lblCorrectAnswer", "正确答案") + " = " + correctAswShow + "\r\n"; info += GlobalInfo.SysLanguage.LPT.ReadString("rbSunVoteARS", "menuRigntCount", "答对人数") + ": " + correctCount + "(" + ConvertOper.GetPercent((double)correctCount, percentCount, 2) + ")\r\n"; } //反馈信息添加:评分结果 double totalScore = 0; double avgScore = 0; if (ResponseTypeNow == ResponseType.Score) { GlobalInfo.response.CaculateScore(SlideNow, out totalScore, out avgScore); info += GlobalInfo.SysLanguage.LPT.ReadString("FrmRankScore", "clbRankItem_0", "平均分") + ": " + avgScore + "\r\n"; info += GlobalInfo.SysLanguage.LPT.ReadString("FrmRankScore", "clbRankItem_1", "总分") + ": " + totalScore + "\r\n"; } ////反馈信息添加:选举结果 //if (ResponseTypeNow == ResponseType.Poll) //{ // string pollResult = GetPollResult(topicID); // info += pollResult; //} GlobalInfo.DBOperation.BeginTrans(); string sql = "Select * From ST_Topic Where T_ID='" + topicID + "'"; GlobalInfo.DBOperation.OpenDataSet(sql); bool isAdd = false; DataRow row = null; if (GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Count > 0) { row = GlobalInfo.DBOperation.DataSet.Tables[0].Rows[0]; } else { row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); isAdd = true; } row["M_ID"] = "0"; row["TT_ID"] = ResponseTypeNow.ToString(); if (isAdd) row["T_ID"] = topicID; row["T_Index"] = slideIndex; row["T_Name"] = topicName;//题目名称 杨斌 2014-10-21 row["T_Title"] = title; row["T_Note"] = info;//题目信息 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); GlobalInfo.DBOperation.UpdateDataSet(); GlobalInfo.DBOperation.CloseDataSet(); //先清空反馈参数表 杨斌 2012-02-07 sql = "Delete * From ST_TopicPar Where T_ID='" + topicID + "'"; GlobalInfo.DBOperation.ExecuteNonQuery(sql); //打开反馈参数表 isAdd = true; sql = "Select * From ST_TopicPar Where T_ID='" + topicID + "'"; GlobalInfo.DBOperation.OpenDataSet(sql); //保存加权字段。杨斌 2015-01-04 string rateCol = TagSetNow.GetValue(TagKey.ResponsePara_VoteRateField).Value; row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "VoteRateCol";//参数名:加权字段 row["TP_Value"] = rateCol;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); //保存参与者人数 row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "VoterCount";//参数名:参与者人数,即授权人数 //杨斌 2014-05-15 //row["TP_Value"] = voterCount.ToString();//参数值 row["TP_Value"] = voterCountMan.ToString();//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); //保存反馈提交人数 row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "SubmitCount";//参数名:参与者人数,即授权人数 //杨斌 2014-05-15 //row["TP_Value"] = submitCount.ToString();//参数值 row["TP_Value"] = submitCountMan.ToString();//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); //保存未反馈键盘。杨斌 2015-04-03 row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "NoSubmitKeypads";//参数名:未按键盘 row["TP_Value"] = GetNoSubmitKeypad();//未按键盘 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); //杨斌 2019-01-25 var lstIDSin = ReportEx.GetSignedIDs(SlideNow); List lstIDRes = new List(); if (Globals.SunVoteARSAddIn.PPTShow.SlideShow == null) { lstIDRes = ReportEx.GetResponseIDs(SlideNow); } else { for (int i = 0; i < GlobalInfo.response.ResponseDataList.Count; i++) { if (!lstIDRes.Contains(GlobalInfo.response.ResponseDataList[i].KeyID)) lstIDRes.Add(GlobalInfo.response.ResponseDataList[i].KeyID); } } //上一个签到但当前未按的。杨斌 2019-01-25 int notVotedSigned = 0; foreach (var v in lstIDSin) { if (!lstIDRes.Contains(v)) notVotedSigned++; } if (lstIDSin.Count > 0) { //保存上一个签到键盘。杨斌 2019-01-25 row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "PrevSignInCount";//参数名 row["TP_Value"] = lstIDSin.Count;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); //保存反馈键盘。杨斌 2019-01-25 row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "SignedButNotVotedCount";//参数名 row["TP_Value"] = notVotedSigned;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); } //评议平均分。杨斌 2019-02-27 if (ResponseTypeNow == ResponseType.Grade) { string gradeScoreOption = TagSetNow.GetValue(TagKey.Grade_ScoreOption).Value; if (!string.IsNullOrEmpty(gradeScoreOption)) { var aryGradeScoreSet = gradeScoreOption.Split(PublicFunction.SplitItemScore);//杨斌 2019-07-19 if (aryGradeScoreSet.Length > 0) { row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "OptionScore";//参数名:评议平均分 row["TP_Value"] = gradeScoreOption;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "GradeScoreAVG";//参数名:评议平均分 row["TP_Value"] = GetGradeScore(aryGradeScoreSet);//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); } } } //百分比率方式 杨斌 2012-06-04 row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "DataPercentBase";//参数名:百分比分母,"crResponse"反馈人数,"crParticipant"参与人数 row["TP_Value"] = TagSetNow.GetValue(TagKey.ChartPara_DataPercentBase).Value;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); //保存记名模式 row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "NameMode";//参数名:选项个数 row["TP_Value"] = nameMode;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); //保存选项个数 row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "OptionCount";//参数名:选项个数,选举则为候选人数 row["TP_Value"] = optionCountS;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); //保存选项格式 杨斌 2014-10-31 row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "OptionFormat";//参数名:选项格式:0-1234,1-ABCD row["TP_Value"] = bABCD ? 1 : 0;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); //保存计分模式 杨斌 2014-11-10 row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "ScoreMode";//参数名:计分模式:0-按正确答案,1-按选项 row["TP_Value"] = scoreMode;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); //保存选项分数。杨斌 2016-05-24 if (scoreMode == 1) { switch (ResponseTypeNow) { case ResponseType.Choice: string scoreOptC = TagSetNow.GetValue(TagKey.Choice_ScoreOption).Value; Dictionary dicC = GetOtionScore(scoreOptC); foreach (var v in dicC) { row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "ScoreOption_" + v.Key;//参数名:选项分数 row["TP_Value"] = v.Value;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); } break; case ResponseType.Judge: string scoreOptJ = TagSetNow.GetValue(TagKey.Judge_ScoreOption).Value; Dictionary dicJ = GetOtionScore(scoreOptJ); foreach (var v in dicJ) { row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "ScoreOption_" + v.Key;//参数名:选项分数 row["TP_Value"] = v.Value;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); } break; case ResponseType.Order: string scoreOptO = TagSetNow.GetValue(TagKey.Order_ScoreOption).Value; Dictionary dicO = GetOtionScore(scoreOptO); foreach (var v in dicO) { row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "ScoreOption_" + v.Key;//参数名:选项分数 row["TP_Value"] = v.Value;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); } for (int i = 1; i <= GlobalInfo.response.ListOrderScore.Count; i++) { OrderItem odItem = GlobalInfo.response.ListOrderScore[i - 1]; row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "OptionScore_" + odItem.No;//参数名:选项分数 row["TP_Value"] = odItem.Score;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); } break; } } //保存选项文本 if (ResponseTypeNow == ResponseType.Poll)//杨斌 2012-06-05 { //加载选举人员 TagSet TagSet = TagSetNow; int PollCount = TagSet.LoadValue(TagKey.Poll_CandidatesCount, 0).ToInt; TDictionary dicPollList = new TDictionary(); for (int i = 0; i < PollCount; i++) { string id = TagSet.LoadValue(TagKey.Poll_CandidatesID_, i, "").Value.ToString(); string name = TagSet.LoadValue(TagKey.Poll_CandidatesName_, i, "").Value.ToString(); if (!dicPollList.Contains(id)) dicPollList.Add(id, name); } string[] pollKeys = null; if (dicPollList.Count > 0) { pollKeys = new string[dicPollList.Count]; dicPollList.Keys.CopyTo(pollKeys, 0); } //选举的翻译词**号 string pollNumberStr = GlobalInfo.SysLanguage.LPT.ReadString("Other", "PollNumberStr", "号"); for (int i = 0; i < optionCount; i++) { row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; //row["TP_Name"] = "OptionText_" + (i + 1).ToString();//参数名:选举者的编号 if (i < dicPollList.Count) { row["TP_Name"] = "PollNumber_" + pollKeys[i];//参数名:选举者的编号 row["TP_Value"] = pollKeys[i] + " " + pollNumberStr + ", " + dicPollList[i];//参数值 } else { row["TP_Name"] = "OptionText_" + (i + 1).ToString();//参数名:选举者的编号 row["TP_Value"] = aryOption[i];//参数值 } if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); } //杨斌 2018-09-30 //保存选举最少可选项 int MinSelects = TagSetNow.GetValue(TagKey.Poll_MinSelects).ToInt; row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "Poll_MinSelects";//参数名:选项个数 row["TP_Value"] = MinSelects;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); //保存选举可否重复 int CanRepeat = TagSetNow.GetValue(TagKey.Poll_CanRepeat).ToInt; row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "Poll_CanRepeat";//参数名:选项个数 row["TP_Value"] = CanRepeat;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); } else { for (int i = 0; i < optionCount; i++) { row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "OptionText_" + (i + 1).ToString();//参数名:选项编号 row["TP_Value"] = aryOption[i];//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); } } //保存正确答案 row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "CorrectAnswer";//参数名:选项个数 row["TP_Value"] = correctAsw;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); //保存错误答案扣分。杨斌 2015-05-07 row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "ScoreWrong";//参数名:选项个数 row["TP_Value"] = scoreWrong;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); //保存正确答案得分。杨斌 2015-09-06 row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "ScoreRight";//参数名:选项个数 row["TP_Value"] = scoreRight;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); //保存评分结果 if (ResponseTypeNow == ResponseType.Score) { //总分 row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "ScoreResultSum";//参数名:评分结果总分 row["TP_Value"] = totalScore;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); //平均分 row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "ScoreResultAvg";//参数名:评分结果平均分 row["TP_Value"] = avgScore;//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); } //保存反馈时间。杨斌 2017-05-09 row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "ResponseTime";//参数名:反馈时间 row["TP_Value"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); //保存表决通过结果。杨斌 2018-10-16 row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); if (isAdd) row["T_ID"] = topicID; row["TP_Name"] = "VotePassResult";//参数名:反馈时间 row["TP_Value"] = PPTEdit.IsVotePass(SlideNow) ? "1" : "0";//参数值 if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); //更新记录 GlobalInfo.DBOperation.UpdateDataSet(); GlobalInfo.DBOperation.CloseDataSet(); GlobalInfo.DBOperation.CommitTrans(); res = true; } catch (Exception ex) { SystemLog.WriterLog(ex); GlobalInfo.DBOperation.RollbackTrans(); } return res; } /// /// 保存题目统计结果相关信息,可在停止反馈时调用 /// 修改:杨斌 2012-03-28 /// //public bool SaveResponseResult(Slide slide) //{ // bool res = false; // TagSet tagSet = new TagSet(); // if (slide == null) return false; // try // { // tagSet.Tags = slide.Tags; // //取得题目ID // string topicID = slide.SlideID.ToString(); // ResponseType responseType = EnumName.GetEnum(tagSet.GetValue(TagKey.ResponseType).Value); // //获取题目标题 // string title = PPTOper.GetSlideTitle(slide); // //题目序号=幻灯片序号 // int slideIndex = slide.SlideIndex; // //参与人数 // double voterCount = 0; // //2014-3-17 增加权重 // //if (!GlobalInfo.response.EnableList) // //{ // // voterCount = GlobalInfo.hardwareManage.PersonNum; // //} // //else // //{ // // voterCount = GlobalInfo.response.AuthorKeypadList.Count; // //} // voterCount = GlobalInfo.response.GetParticipantNum(responseType, slide); // //反馈提交人数 // //int submitCount = GlobalInfo.response.ResponseDataList.Count; // double submitCount = GlobalInfo.response.GetResponseNum(); // //记名模式 // int nameMode = 1; // switch (responseType) // { // case ResponseType.SignIn: // case ResponseType.Group: // nameMode = 1;//签到分组,默认记名 // break; // default: // try // { // nameMode = tagSet.LoadValue(TagKey.ResponsePara_NameMode, 1).ToInt; // } // catch (Exception ex) // { // SystemLog.WriterLog(ex, false); // } // break; // } // //if (nameMode == 0) // //{ // // string s = Globals.SunVoteARSAddIn.PPTShow.SlideShow.SlideIndex.ToString(); // // MessageBox.Show(s); // //} // //正确答案 杨斌 2012-03-15 // string correctAsw = Globals.SunVoteARSAddIn.PPTEdit.GetSlideCorrectAnswer( // slide, responseType); // string scoreWrong = Globals.SunVoteARSAddIn.PPTEdit.GetSlideWrongScore( // slide, responseType); // //switch (Globals.SunVoteARSAddIn.PPTShow.ResponseType) // //{ // // case ResponseType.Choice: // // correctAsw = Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.GetValue(TagKey.Choice_CorrectAnswer).Value; // // break; // // case ResponseType.Judge: // // correctAsw = Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.GetValue(TagKey.Judge_CorrectAnswer).Value; // // break; // // case ResponseType.Order: // // correctAsw = Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.GetValue(TagKey.Order_CorrectAnswer).Value; // // break; // // case ResponseType.Number: // // correctAsw = Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.GetValue(TagKey.Number_CorrectAnswer).Value; // // break; // //} // //题目类型、选项个数、选项内容 // string optionCountS = ""; // string[] aryOption = null;//选项内容 // int optionCount = 0;//选项个数 // string info = title + "\r\n\r\n";//题目信息,自动生成的含标题+选项内容,报表用到 // switch (responseType) // { // case ResponseType.SignIn: // optionCountS = "2"; // break; // case ResponseType.Group: // optionCountS = tagSet.GetValue(TagKey.Group_OptionCount).Value; // break; // case ResponseType.Choice: // optionCountS = tagSet.GetValue(TagKey.Choice_OptionCount).Value; // int optionLimit = tagSet.GetValue(TagKey.Choice_OptionLimit).ToInt; // break; // case ResponseType.Judge: // optionCountS = "2"; // break; // case ResponseType.Vote: // optionCountS = tagSet.GetValue(TagKey.Vote_OptionCount).Value; // break; // case ResponseType.Grade: // optionCountS = tagSet.GetValue(TagKey.Grade_OptionCount).Value; // break; // case ResponseType.Order: // optionCountS = tagSet.GetValue(TagKey.Order_OptionCount).Value; // break; // case ResponseType.Score: // break; // case ResponseType.Poll: // optionCountS = tagSet.GetValue(TagKey.Poll_CandidatesCount).Value; // break; // } // optionCount = ConvertOper.Convert(optionCountS).ToInt; // aryOption = PPTOper.GetOptionTextBySlide(slide, optionCount); // //杨斌 2012-06-28 // bool bABCD = (tagSet.GetValue(TagKey.KeypadPara_OptionMode).ToInt == 1); // //记录选项投票个数和比率,比率=选项投票个数/反馈提交人数 // switch (responseType) // { // case ResponseType.SignIn: // case ResponseType.Group: // case ResponseType.Choice: // case ResponseType.Judge: // case ResponseType.Vote: // case ResponseType.Grade: // case ResponseType.Order: // if (optionCount > 0) // { // string[] aryOptionSubmit = new string[optionCount]; // if (responseType == ResponseType.SignIn) // { // aryOption[0] = GlobalInfo.SysLanguage.LPT.ReadString("FrmVoteDetail", "lblVoted_Arrive", "已到:"); // aryOption[1] = GlobalInfo.SysLanguage.LPT.ReadString("FrmVoteDetail", "lblVoted_UnArrive", "未到:"); // aryOptionSubmit[0] = " " + submitCount.ToString(); // aryOptionSubmit[0] += "(" + ConvertOper.GetPercent((double)submitCount, voterCount, 2) + ")"; // double notSignIn = voterCount - submitCount; // aryOptionSubmit[1] = " " + notSignIn.ToString(); // aryOptionSubmit[1] += "(" + ConvertOper.GetPercent((double)notSignIn, voterCount, 2) + ")"; // } // else if (responseType == ResponseType.Order) // { // for (int i = 0; i < optionCount; i++) // { // aryOptionSubmit[i] = ""; // } // } // else // { // for (int i = 0; i < optionCount; i++) // { // double countSubmit = 0; // try // { // countSubmit = GlobalInfo.response.ResponseOptionList[i.ToString()]; // } // catch { } // aryOptionSubmit[i] = " " + countSubmit.ToString(); // aryOptionSubmit[i] += "(" + ConvertOper.GetPercent((double)countSubmit, submitCount, 2) + ")"; // } // } // //反馈信息添加:题目选项内容 + 选项票数(百分比) // //杨斌 2012-06-28 // for (int i = 0; i < optionCount; i++) // { // string sNo = ""; // if (responseType != ResponseType.SignIn) // sNo = (bABCD ? PPTOper.FormatNumABC(i + 1, false) : (i + 1).ToString()) + ". "; // info += sNo + aryOption[i] + aryOptionSubmit[i] + "\r\n"; // } // } // break; // } // //反馈信息添加:正确答案 // //修改 杨斌 2012-06-04 // if (correctAsw.Length > 0) // { // //百分比分母,如图表、正确率 // //string percentMode = Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.GetValue(TagKey.ChartPara_DataPercentBase).Value; // double percentCount = voterCount;//默认"crParticipant" // //switch (percentMode) // //{ // // case "crResponse": // // percentCount = submitCount; // // break; // // case "crParticipant": // // break; // //} // int correctCount = 0; // for (int i = 0; i < GlobalInfo.response.ResponseDataList.Count; i++) // { // if (GlobalInfo.response.ResponseDataList[i].Correct > 0) // correctCount++; // } // //杨斌 2012-07-02 // string correctAswShow = correctAsw; // if (bABCD) // correctAswShow = PPTOper.FormatNumABC(correctAswShow); // info += GlobalInfo.SysLanguage.LPT.ReadString("PanelNumber", "lblCorrectAnswer", "正确答案") + " = " + correctAswShow + "\r\n"; // info += GlobalInfo.SysLanguage.LPT.ReadString("rbSunVoteARS", "menuRigntCount", "答对人数") + ": " + correctCount + // "(" + ConvertOper.GetPercent((double)correctCount, percentCount, 2) + ")\r\n"; // } // //反馈信息添加:评分结果 // double totalScore = 0; // double avgScore = 0; // if (responseType == ResponseType.Score) // { // GlobalInfo.response.CaculateScore(slide, out totalScore, out avgScore); // info += GlobalInfo.SysLanguage.LPT.ReadString("FrmRankScore", "clbRankItem_0", "平均分") + ": " + avgScore + "\r\n"; // info += GlobalInfo.SysLanguage.LPT.ReadString("FrmRankScore", "clbRankItem_1", "总分") + ": " + totalScore + "\r\n"; // } // ////反馈信息添加:选举结果 // //if (Globals.SunVoteARSAddIn.PPTShow.ResponseType == ResponseType.Poll) // //{ // // string pollResult = GetPollResult(topicID); // // info += pollResult; // //} // GlobalInfo.DBOperation.BeginTrans(); // string sql = "Select * From ST_Topic Where T_ID='" + topicID + "'"; // GlobalInfo.DBOperation.OpenDataSet(sql); // bool isAdd = false; // DataRow row = null; // if (GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Count > 0) // { // row = GlobalInfo.DBOperation.DataSet.Tables[0].Rows[0]; // } // else // { // row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); // isAdd = true; // } // row["M_ID"] = "0"; // row["TT_ID"] = responseType.ToString(); // if (isAdd) row["T_ID"] = topicID; // row["T_Index"] = slideIndex; // row["T_Name"] = "";//题目名称 // row["T_Title"] = title; // row["T_Note"] = info;//题目信息 // if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); // GlobalInfo.DBOperation.UpdateDataSet(); // GlobalInfo.DBOperation.CloseDataSet(); // //先清空反馈参数表 杨斌 2012-02-07 // sql = "Delete * From ST_TopicPar Where T_ID='" + topicID + "'"; // GlobalInfo.DBOperation.ExecuteNonQuery(sql); // //打开反馈参数表 // isAdd = true; // sql = "Select * From ST_TopicPar Where T_ID='" + topicID + "'"; // GlobalInfo.DBOperation.OpenDataSet(sql); // //保存加权字段。杨斌 2015-01-04 // string rateCol = tagSet.GetValue(TagKey.ResponsePara_VoteRateField).Value; // row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); // if (isAdd) row["T_ID"] = topicID; // row["TP_Name"] = "VoteRateCol";//参数名:加权字段 // row["TP_Value"] = rateCol;//参数值 // if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); // //保存参与者人数 // row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); // if (isAdd) row["T_ID"] = topicID; // row["TP_Name"] = "VoterCount";//参数名:参与者人数,即授权人数 // row["TP_Value"] = voterCount.ToString();//参数值 // if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); // //保存反馈提交人数 // row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); // if (isAdd) row["T_ID"] = topicID; // row["TP_Name"] = "SubmitCount";//参数名:参与者人数,即授权人数 // row["TP_Value"] = submitCount.ToString();//参数值 // if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); // //保存未反馈键盘。杨斌 2015-04-03 // row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); // if (isAdd) row["T_ID"] = topicID; // row["TP_Name"] = "NoSubmitKeypads";//参数名:未按键盘 // row["TP_Value"] = GetNoSubmitKeypad();//未按键盘 // if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); // //百分比率方式 杨斌 2012-06-04 // row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); // if (isAdd) row["T_ID"] = topicID; // row["TP_Name"] = "DataPercentBase";//参数名:百分比分母,"crResponse"反馈人数,"crParticipant"参与人数 // row["TP_Value"] = tagSet.GetValue(TagKey.ChartPara_DataPercentBase).Value;//参数值 // if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); // //保存记名模式 // row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); // if (isAdd) row["T_ID"] = topicID; // row["TP_Name"] = "NameMode";//参数名:选项个数 // row["TP_Value"] = nameMode;//参数值 // if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); // //保存选项个数 // row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); // if (isAdd) row["T_ID"] = topicID; // row["TP_Name"] = "OptionCount";//参数名:选项个数,选举则为候选人数 // row["TP_Value"] = optionCountS;//参数值 // if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); // //保存选项文本 // if (responseType == ResponseType.Poll)//杨斌 2012-06-05 // { // int PollCount = tagSet.LoadValue(TagKey.Poll_CandidatesCount, 0).ToInt; // TDictionary dicPollList = new TDictionary(); // for (int i = 0; i < PollCount; i++) // { // string id = tagSet.LoadValue(TagKey.Poll_CandidatesID_, i, "").Value.ToString(); // string name = tagSet.LoadValue(TagKey.Poll_CandidatesName_, i, "").Value.ToString(); // if (!dicPollList.Contains(id)) // dicPollList.Add(id, name); // } // string[] pollKeys = null; // if (dicPollList.Count > 0) // { // pollKeys = new string[dicPollList.Count]; // dicPollList.Keys.CopyTo(pollKeys, 0); // } // //选举的翻译词**号 // string pollNumberStr = GlobalInfo.SysLanguage.LPT.ReadString("Other", "PollNumberStr", "号"); // for (int i = 0; i < optionCount; i++) // { // row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); // if (isAdd) row["T_ID"] = topicID; // //row["TP_Name"] = "OptionText_" + (i + 1).ToString();//参数名:选举者的编号 // if (i < dicPollList.Count) // { // row["TP_Name"] = "PollNumber_" + pollKeys[i];//参数名:选举者的编号 // row["TP_Value"] = pollKeys[i] + " " + pollNumberStr + ", " + dicPollList[i];//参数值 // } // else // { // row["TP_Name"] = "OptionText_" + (i + 1).ToString();//参数名:选举者的编号 // row["TP_Value"] = aryOption[i];//参数值 // } // if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); // } // } // else // { // for (int i = 0; i < optionCount; i++) // { // row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); // if (isAdd) row["T_ID"] = topicID; // row["TP_Name"] = "OptionText_" + (i + 1).ToString();//参数名:选项编号 // row["TP_Value"] = aryOption[i];//参数值 // if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); // } // } // //保存正确答案 // row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); // if (isAdd) row["T_ID"] = topicID; // row["TP_Name"] = "CorrectAnswer";//参数名:选项个数 // row["TP_Value"] = correctAsw;//参数值 // if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); // //保存错误答案扣分。杨斌 2015-05-07 // row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); // if (isAdd) row["T_ID"] = topicID; // row["TP_Name"] = "ScoreWrong";//参数名:选项个数 // row["TP_Value"] = scoreWrong;//参数值 // if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); // //保存评分结果 // if (responseType == ResponseType.Score) // { // //总分 // row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); // if (isAdd) row["T_ID"] = topicID; // row["TP_Name"] = "ScoreResultSum";//参数名:评分结果总分 // row["TP_Value"] = totalScore;//参数值 // if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); // //平均分 // row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); // if (isAdd) row["T_ID"] = topicID; // row["TP_Name"] = "ScoreResultAvg";//参数名:评分结果平均分 // row["TP_Value"] = avgScore;//参数值 // if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); // } // //保存反馈时间。杨斌 2017-05-09 // row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); // if (isAdd) row["T_ID"] = topicID; // row["TP_Name"] = "ResponseTime";//参数名:反馈时间 // row["TP_Value"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");//参数值 // if (isAdd) GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); // //更新记录 // GlobalInfo.DBOperation.UpdateDataSet(); // GlobalInfo.DBOperation.CloseDataSet(); // GlobalInfo.DBOperation.CommitTrans(); // res = true; // } // catch (Exception ex) // { // SystemLog.WriterLog(ex); // GlobalInfo.DBOperation.RollbackTrans(); // } // return res; //} public string GetNoSubmitKeypad() { string res = ""; try { //杨斌 2017-08-07 Microsoft.Office.Interop.PowerPoint.Slide SlideNow = null; ResponseType ResponseTypeNow = ResponseType.None; TagSet TagSetNow = null; if (Globals.SunVoteARSAddIn.PPTShow.IsShowSlide) { SlideNow = Globals.SunVoteARSAddIn.PPTShow.SlideShow; ResponseTypeNow = Globals.SunVoteARSAddIn.PPTShow.ResponseType; TagSetNow = Globals.SunVoteARSAddIn.PPTShow.TagSetSlide; } else//杨斌 2017-08-31。屏蔽 { SlideNow = Globals.SunVoteARSAddIn.PPTEdit.SlideEdit; ResponseTypeNow = Globals.SunVoteARSAddIn.PPTEdit.ResponseTypeSlideEdit; TagSetNow = Globals.SunVoteARSAddIn.PPTEdit.TagSet; } TagSet tagSet = TagSetNow; int sinMode = tagSet.GetValue(TagKey.SignIn_Mode).ToInt; if ((ResponseTypeNow == ResponseType.SignIn) && (sinMode > 0)) return ""; //杨斌 2019-01-28。未答题数统计不出,因Globals.SunVoteARSAddIn.frmVoteDetail==null if (Globals.SunVoteARSAddIn.frmVoteBar != null) { FrmVoteDetail frm = Globals.SunVoteARSAddIn.frmVoteBar.frmVoteDetail; //FrmVoteDetail frm = Globals.SunVoteARSAddIn.frmVoteDetail; if (frm != null) { List lstKey = new List(); for (int i = 0; i < frm.Map.Count; i++) { Unit u = frm.Map[i]; if (!string.IsNullOrEmpty(u.ID) && (string.IsNullOrEmpty(u.Data))) { if (!lstKey.Contains(u.ID)) lstKey.Add(u.ID); } } if (lstKey.Count > 0) res = string.Join(",", lstKey.ToArray()); } } } catch (Exception ex) { SystemLog.WriterLog(ex); } return res; } /// /// 获取选举票数统计。杨斌 2016-04-27 /// /// /// public static Dictionary GetPollResultData(string topicID) { Dictionary res = new Dictionary(); try { //杨斌 2018-01-30 Dictionary> dicTopicPar = ReportEx.GetTopicPar("'Poll'"); bool rosterEnabled = RosterList.RosterLoad.RosterEnabled; int indexRateCol = -1; int CanRepeat = 0;//可选项是否可重复。杨斌 2018-09-30 int MinSelects = 0;//最小选择数。杨斌 2018-09-30 if (rosterEnabled) { if (dicTopicPar.ContainsKey(topicID)) { if (dicTopicPar[topicID].ContainsKey("VoteRateCol")) { string sCol = dicTopicPar[topicID]["VoteRateCol"]; for (int i = 0; i < RosterList.RosterLoad.Columns.Count; i++) { if (RosterList.RosterLoad.Columns[i].ColumnName == sCol) { indexRateCol = i; break; } } } //最少必选。杨斌 2018-09-29 if (dicTopicPar[topicID].ContainsKey("Poll_MinSelects")) { MinSelects = ConvertOper.Convert(dicTopicPar[topicID]["Poll_MinSelects"]).ToInt; if (MinSelects < 1) MinSelects = 1; } //是否支持重复选项。杨斌 2018-09-29 if (dicTopicPar[topicID].ContainsKey("Poll_CanRepeat")) { CanRepeat = ConvertOper.Convert(dicTopicPar[topicID]["Poll_CanRepeat"]).ToInt; } } } string sql = "SELECT ST_Response.R_KeypadID, ST_Response.V_ID, ST_Response.R_Result" + " FROM ST_Topic INNER JOIN ST_Response ON ST_Topic.T_ID = ST_Response.T_ID" + " WHERE (((ST_Response.T_ID)='" + topicID + "') AND ((ST_Topic.TT_ID)='Poll'))"; GlobalInfo.DBOperation.OpenDataSet(sql); System.Data.DataTable tb = GlobalInfo.DBOperation.DataSet.Tables[0]; if (GlobalInfo.DBOperation.DataSet.Tables.Count > 0) { for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; string result = row["R_Result"].ToString(); string vid = row["V_ID"].ToString(); string keyId = row["R_KeypadID"].ToString(); string[] ary = result.Split(','); List ls = new List(); bool isOK = true; double rate = 1; if (indexRateCol > 0) { //var rr = RosterList.RosterLoad.GetRowByVoterID(vid); var rr = RosterList.RosterLoad.GetRowByKeyId(keyId); if (rr != null) { rate = ConvertOper.Convert(rr.Cells[indexRateCol]).ToDouble; //杨斌 2018-05-22 if (rate < 0) rate = 0; //if (rate == 0) // rate = 1; } } //选举统计规则:0=重复的选择为废票;1=重复的只算1票;2=重复的计算多票。杨斌 2020-07-27 int rule = 1; if (CanRepeat == 0)//杨斌 2019-03-20。允许重复,则计算多票 rule = 2; if (rule == 0)//重复为废票。以前的算法 { foreach (var v in ary) { if (v.Length > 0) { if (ls.Contains(v)) { isOK = false; break; } else ls.Add(v); } } } else if (rule == 2)//重复算多票 { List lsAry = new List(); foreach (var v in ary) { if (!string.IsNullOrEmpty(v))//值不能为空 lsAry.Add(v); } ary = lsAry.ToArray(); if (lsAry.Count < MinSelects)//少于最少可选项为废票。杨斌 2019-03-20 isOK = false; } else//重复只算1票,因此去掉重复的 { List lsAry = new List(); foreach (var v in ary) { if (!lsAry.Contains(v) && !string.IsNullOrEmpty(v))//值不能为空 lsAry.Add(v); } ary = lsAry.ToArray(); if (lsAry.Count < MinSelects)//少于最少可选项为废票。杨斌 2018-09-30 isOK = false; } if (isOK) { foreach (var v in ary) { if (v.Length > 0) { if (res.ContainsKey(v)) res[v] += rate;//杨斌 2018-01-30。res[v]++; else res.Add(v, rate); } } } } } GlobalInfo.DBOperation.CloseDataSet(); if (res.Count > 0) res = res.OrderByDescending(o => o.Value).ThenBy(o => o.Key).ToDictionary(o => o.Key, p => p.Value); } catch (Exception ex) { SystemLog.WriterLog(ex); } return res; } /// /// 获取选举结果 /// /// public string GetPollResult(string topicID) { string res = ""; //加载选举人员 TagSet TagSet = Globals.SunVoteARSAddIn.PPTShow.TagSetSlide; int PollCount = TagSet.LoadValue(TagKey.Poll_CandidatesCount, 0).ToInt; TDictionary dicPollList = new TDictionary(); for (int i = 0; i < PollCount; i++) { string id = TagSet.LoadValue(TagKey.Poll_CandidatesID_, i, "").Value.ToString(); string name = TagSet.LoadValue(TagKey.Poll_CandidatesName_, i, "").Value.ToString(); if (!dicPollList.Contains(id)) dicPollList.Add(id, name); } //GlobalInfo.response.ResponseDataList[i] //查询选举结果。杨斌 2016-04-27 //string sql = "SELECT ST_Response.R_Result, Count(ST_Response.R_Result) AS R_ResultCount" + // " FROM ST_Topic INNER JOIN ST_Response ON ST_Topic.T_ID = ST_Response.T_ID" + // " WHERE (((ST_Response.T_ID)='" + topicID + "') AND ((ST_Topic.TT_ID)='Poll'))" + // " GROUP BY ST_Response.R_Result" + // " ORDER BY Count(ST_Response.R_Result) DESC, ST_Response.R_Result ASC"; //GlobalInfo.DBOperation.OpenDataSet(sql); //System.Data.DataTable tb = GlobalInfo.DBOperation.DataSet.Tables[0]; //string pollNumber = GlobalInfo.SysLanguage.LPT.ReadString("Other", "PollNumber", "编号"); //string pollName = GlobalInfo.SysLanguage.LPT.ReadString("Other", "PollName", "名称"); //string pollCount = GlobalInfo.SysLanguage.LPT.ReadString("Other", "PollCount", "票数"); //string pollNumberStr = GlobalInfo.SysLanguage.LPT.ReadString("Other", "PollNumberStr", "号"); //string pollCountStr = GlobalInfo.SysLanguage.LPT.ReadString("Other", "PollCountStr", "票"); //res = pollNumber + "," + pollName + "," + pollCount + "\r\n"; //for (int iRow = 0; iRow < tb.Rows.Count; iRow++) //{ // DataRow row = tb.Rows[iRow]; // string result = row["R_Result"].ToString(); // string count = row["R_ResultCount"].ToString(); // if (PollCount > 0) // { // if (dicPollList.Contains(result)) // { // res += result + " " + pollNumberStr + ", " + dicPollList[result] + ", " + count + " " + pollCountStr + "\r\n"; // } // } // else//没有选举名单的也可以任意投。杨斌 2014-10-24 // { // if (!dicPollList.Contains(result)) // dicPollList.Add(result, ""); // res += result + " " + pollNumberStr + ", " + dicPollList[result] + ", " + count + " " + pollCountStr + "\r\n"; // } //} //GlobalInfo.DBOperation.CloseDataSet(); //查询选举结果。杨斌 2016-04-27 string pollNumber = GlobalInfo.SysLanguage.LPT.ReadString("Other", "PollNumber", "编号"); string pollName = GlobalInfo.SysLanguage.LPT.ReadString("Other", "PollName", "名称"); string pollCount = GlobalInfo.SysLanguage.LPT.ReadString("Other", "PollCount", "票数"); string pollNumberStr = GlobalInfo.SysLanguage.LPT.ReadString("Other", "PollNumberStr", "号"); string pollCountStr = GlobalInfo.SysLanguage.LPT.ReadString("Other", "PollCountStr", "票"); res = pollNumber + "," + pollName + "," + pollCount + "\r\n"; Dictionary dic = GetPollResultData(topicID); if (dic.Count > 0) { foreach (var v in dic) { string result = v.Key; string count = v.Value.ToString(); if (PollCount > 0) { if (dicPollList.Contains(result)) { res += result + " " + pollNumberStr + ", " + dicPollList[result] + ", " + count + " " + pollCountStr + "\r\n"; } } else//没有选举名单的也可以任意投。杨斌 2014-10-24 { if (!dicPollList.Contains(result)) dicPollList.Add(result, ""); res += result + " " + pollNumberStr + ", " + dicPollList[result] + ", " + count + " " + pollCountStr + "\r\n"; } } } return res; } /// /// 更新数据库里面的幻灯片序号, /// 因幻灯片可能会被用户拖动改变次序,所以每次数据分析或报表启动时需调用 /// public static void UpdateSlideIndexToDB() { try { Presentation pres = Globals.SunVoteARSAddIn.Application.ActivePresentation; if (pres == null) return; TDictionary dicPres = new TDictionary(); for (int i = 1; i <= pres.Slides.Count; i++) { dicPres.Add(pres.Slides[i].SlideID.ToString(), pres.Slides[i].SlideIndex); } string sql = "Select * From ST_Topic where len(T_ID)<12"; GlobalInfo.DBOperation.OpenDataSet(sql); System.Data.DataTable tb = GlobalInfo.DBOperation.DataSet.Tables[0]; for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; string tid = row["T_ID"].ToString(); if (dicPres.Contains(tid)) { row["T_Index"] = dicPres[tid]; } else { string sID = System.DateTime.Now.ToString("yyyyMMddHHmmss"); row["T_ID"] = row["T_ID"] + sID; } } GlobalInfo.DBOperation.UpdateDataSet(); GlobalInfo.DBOperation.CloseDataSet(); } catch (Exception ex) { SystemLog.WriterLog(ex); } } /// /// 保存反馈人员的ID与关联的数据 /// private TDictionary Voters = new TDictionary(); /// /// 加载反馈人员 /// public void LoadResponseVoter() { if (Globals.SunVoteARSAddIn.PPTShow.IsShowSlide) { switch (Globals.SunVoteARSAddIn.PPTShow.ResponseType) { case ResponseType.None: case ResponseType.Slide: Voters.Clear(); return; break; default: break; } } else { switch (Globals.SunVoteARSAddIn.PPTEdit.ResponseTypeSlideEdit) { case ResponseType.None: case ResponseType.Slide: Voters.Clear(); return; break; default: break; } } string sql = "Select * From ST_Voter"; GlobalInfo.DBOperation.OpenDataSet(sql); Voters.Clear(); for (int i = 0; i < GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Count; i++) { string keyIds = GlobalInfo.DBOperation.DataSet.Tables[0].Rows[i]["V_KeypadID"].ToString(); if (!string.IsNullOrEmpty(keyIds)) { ResponseVoter vot = new ResponseVoter(); vot.KeypadID = ConvertOper.Convert(keyIds).ToInt; vot.VoterID = ConvertOper.Convert(GlobalInfo.DBOperation.DataSet.Tables[0].Rows[i]["V_ID"].ToString()).ToInt; vot.RosterID = ConvertOper.Convert(GlobalInfo.DBOperation.DataSet.Tables[0].Rows[i]["RR_ID"].ToString()).ToInt; if (!Voters.Contains(keyIds))//不判断,替换键盘后会报错(如第一次1-4都有,然后清空,投2,3,然后将3替换成4) Voters.Add(keyIds, vot); } } GlobalInfo.DBOperation.CloseDataSet(); } /// /// 保存反馈人员 /// public bool SaveResponseVoter() { bool res = false; try { //加载名单,取键盘编号对应的名单ID string sql = "SELECT ST_RosterValue.RR_ID, ST_RosterColumn.RC_Index, ST_RosterValue.RV_Text" + " FROM ST_RosterColumn INNER JOIN ST_RosterValue ON ST_RosterColumn.RC_ID = ST_RosterValue.RC_ID" + " WHERE (((ST_RosterColumn.RC_Index)=1));"; TDictionary KeyToRowID = new TDictionary(); GlobalInfo.DBOperation.OpenDataSet(sql); for (int i = 0; i < GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Count; i++) { DataRow row = GlobalInfo.DBOperation.DataSet.Tables[0].Rows[i]; string keyIds = row["RV_Text"].ToString(); int rowId = ConvertOper.Convert(row["RR_ID"].ToString()).ToInt; //if (ConvertOper.Convert(keyIds).ToInt > 0)//杨斌 2015-01-14。加入SN,屏蔽 //{ if (!KeyToRowID.Contains(keyIds)) KeyToRowID.Add(keyIds, rowId); //} } GlobalInfo.DBOperation.CloseDataSet(); bool isUpdate = false; //先加载反馈人员 LoadResponseVoter(); //反馈数据里键盘在反馈人员里没有的则添加 sql = "Select * From ST_Voter"; GlobalInfo.DBOperation.OpenDataSet(sql); for (int i = 0; i < GlobalInfo.response.ResponseDataList.Count; i++) { string keyIds = GlobalInfo.response.ResponseDataList[i].KeyID.ToString(); if (!Voters.Contains(keyIds)) { //int keyId = ConvertOper.Convert(keyIds).ToInt; string keyId = keyIds; DataRow row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); row["V_KeypadID"] = keyId; GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); isUpdate = true; } } //更新关联名单的ID for (int i = 0; i < GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Count; i++) { DataRow row = GlobalInfo.DBOperation.DataSet.Tables[0].Rows[i]; string keyIds = row["V_KeypadID"].ToString(); if (KeyToRowID.Contains(keyIds)) { row["RR_ID"] = KeyToRowID[keyIds]; isUpdate = true; } } if (isUpdate) GlobalInfo.DBOperation.UpdateDataSet(); GlobalInfo.DBOperation.CloseDataSet(); //重新加载反馈人员 if (isUpdate) LoadResponseVoter(); res = true; } catch (Exception ex) { SystemLog.WriterLog(ex); } return res; } /// /// 保存反馈数据 /// 在停止反馈时调用 /// public bool SaveResponseData() { bool res = false; SaveResponseResult(); if (!SaveResponseVoter()) return false; try { //取得题目ID。杨斌 2017-08-07 Slide sld = null; string topicID = ""; if (Globals.SunVoteARSAddIn.PPTShow.IsShowSlide) { sld = Globals.SunVoteARSAddIn.PPTShow.SlideShow; topicID = Globals.SunVoteARSAddIn.PPTShow.SlideShow.SlideID.ToString(); } else//杨斌 2017-08-31 { sld = Globals.SunVoteARSAddIn.PPTEdit.SlideEdit; topicID = Globals.SunVoteARSAddIn.PPTEdit.SlideEdit.SlideID.ToString(); } //开始事务 GlobalInfo.DBOperation.BeginTrans(); //删除数据 DeleteResponseInfo(topicID); //添加反馈记录 string sql = "Select * From ST_Response"; GlobalInfo.DBOperation.OpenDataSet(sql); ////杨斌 2015-06-26 //for (int i = 0; i < GlobalInfo.response.LstResponseData.Count; i++) //{ //string keyIds = GlobalInfo.response.LstResponseData[i].KeyID.ToString(); // DataRow row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); // row["T_ID"] = topicID; // row["V_ID"] = Voters[keyIds].VoterID;//获取人员ID // row["R_KeypadID"] = GlobalInfo.response.LstResponseData[i].KeyID.ToString(); // row["R_Result"] = GlobalInfo.response.LstResponseData[i].KeyValue; // row["R_Speed"] = GlobalInfo.response.LstResponseData[i].Speed; // row["R_Time"] = GlobalInfo.response.LstResponseData[i].Time.ToString("yyyy-MM-dd HH:mm:ss");//日期时间 // row["R_Correct"] = GlobalInfo.response.LstResponseData[i].Correct;//对错 // row["R_Score"] = GlobalInfo.response.LstResponseData[i].Score;//得分 // GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); //} for (int i = 0; i < GlobalInfo.response.ResponseDataList.Count; i++) { string keyIds = GlobalInfo.response.ResponseDataList[i].KeyID.ToString(); DataRow row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); row["T_ID"] = topicID; row["V_ID"] = Voters[keyIds].VoterID;//获取人员ID row["R_KeypadID"] = GlobalInfo.response.ResponseDataList[i].KeyID.ToString(); ////ABC转换1,2,3,以下代码应放到接收按键值事件中 //string result = GlobalInfo.response.ResponseDataList[i].KeyValue; //switch (Globals.SunVoteARSAddIn.PPTShow.ResponseType) //{ // case ResponseType.Choice: // case ResponseType.Group: // case ResponseType.Grade: // case ResponseType.Judge: // case ResponseType.Order: // result = FormatABCTo123(result); // break; // default: // break; //} //row["R_Result"] = result;//若选择题则必须从"AB"格式化为"1,2" row["R_Result"] = GlobalInfo.response.ResponseDataList[i].KeyValue; row["R_Speed"] = GlobalInfo.response.ResponseDataList[i].Speed; row["R_Time"] = GlobalInfo.response.ResponseDataList[i].Time.ToString("yyyy-MM-dd HH:mm:ss");//日期时间 row["R_Correct"] = GlobalInfo.response.ResponseDataList[i].Correct;//对错 row["R_Score"] = GlobalInfo.response.ResponseDataList[i].Score;//得分 GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); } GlobalInfo.DBOperation.UpdateDataSet(); GlobalInfo.DBOperation.CloseDataSet(); //杨斌 2015-07-14 sql = "Select * From ST_Response2"; GlobalInfo.DBOperation.OpenDataSet(sql); for (int i = 0; i < GlobalInfo.response.LstResponseData.Count; i++) { string keyIds = GlobalInfo.response.LstResponseData[i].KeyID.ToString(); DataRow row = GlobalInfo.DBOperation.DataSet.Tables[0].NewRow(); row["T_ID"] = topicID; row["V_ID"] = Voters[keyIds].VoterID;//获取人员ID row["R_KeypadID"] = GlobalInfo.response.LstResponseData[i].KeyID.ToString(); row["R_Result"] = GlobalInfo.response.LstResponseData[i].KeyValue; row["R_Speed"] = GlobalInfo.response.LstResponseData[i].Speed; row["R_Time"] = GlobalInfo.response.LstResponseData[i].Time.ToString("yyyy-MM-dd HH:mm:ss");//日期时间 row["R_Score"] = GlobalInfo.response.LstResponseData[i].Score;//得分 杨斌 2016-01-08 GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Add(row); } GlobalInfo.DBOperation.UpdateDataSet(); GlobalInfo.DBOperation.CloseDataSet(); SavePollInfo(topicID);//保存选举结果 //提交事务 GlobalInfo.DBOperation.CommitTrans(); //保存反馈的ID到Slide。杨斌 2019-01-14 List lstKeyID = new List(); for (int i = 0; i < GlobalInfo.response.ResponseDataList.Count; i++) { if (!lstKeyID.Contains(GlobalInfo.response.ResponseDataList[i].KeyID)) lstKeyID.Add(GlobalInfo.response.ResponseDataList[i].KeyID); } string keyIDList = string.Join(",", lstKeyID); sld.Tags.Add("ResponseKeyIDList", keyIDList); res = true; } catch (Exception ex) { SystemLog.WriterLog(ex); GlobalInfo.DBOperation.RollbackTrans(); } return res; } public static void DeleteResponseInfo(string topicID) { //删除相关反馈记录 string sql = "Delete * From ST_Response Where T_ID='" + topicID + "'"; GlobalInfo.DBOperation.ExecuteNonQuery(sql); //杨斌 2016-01-08 sql = "Delete * From ST_Response2 Where T_ID='" + topicID + "'"; GlobalInfo.DBOperation.ExecuteNonQuery(sql); } /// /// 删除反馈题目 /// 杨斌 2012-02-22 /// /// public static void DeleteResponseTopic(string topicID) { string sql = "Delete * From ST_Topic Where T_ID='" + topicID + "'"; GlobalInfo.DBOperation.ExecuteNonQuery(sql); } /// /// 若选择题则必须从"AB"格式化为"1,2" /// /// /// public string FormatABCTo123(string result) { string res = ""; try { for (int i = 0; i < result.Length; i++) { char chr = result[i]; try { int n = Convert.ToInt32(chr) - 64; if (n > 0) { if (res.Length > 0) res = res + ","; res = res + n.ToString(); } } catch (Exception ex) { } } } catch (Exception ex) { res = result; } return res; } /// /// 计算反馈结果是否正确,并按答案或选项计分 /// /// /// /// public void CalcAnswer(string result, out int correct, out double score) { correct = 0; score = 0; } /// /// 加载反馈数据 /// 2012-10-12 屏蔽名单 /// 杨斌 2015-06-26 /// /// public TDictionary GetResponseData(string topicID, ResponseType responseType, List lstPar) { TDictionary res = new TDictionary(); if (lstPar == null) lstPar = new List(); lstPar.Clear(); try { switch (responseType) { case ResponseType.None: case ResponseType.Slide: return res; break; default: break; } //添加反馈记录 string sql = "Select * From ST_Response Where T_ID='" + topicID + "' Order by R_Time Desc, R_KeypadID Asc";//杨斌 2015-06-24 GlobalInfo.DBOperation.OpenDataSet(sql); int rowCount = GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Count; for (int i = 0; i < rowCount; i++) { DataRow row = GlobalInfo.DBOperation.DataSet.Tables[0].Rows[i]; string keyids = row["R_KeypadID"].ToString(); //2012-10-12 屏蔽名单 ResponsePar ObjResponsePar = new ResponsePar(); ObjResponsePar.KeyID = keyids; ObjResponsePar.KeyValue = row["R_Result"].ToString(); ObjResponsePar.Speed = ConvertOper.Convert(row["R_Speed"].ToString()).ToDouble; ObjResponsePar.Time = ConvertOper.Convert(row["R_Time"].ToString()).ToDateTime; ObjResponsePar.Time = (DateTime)(row["R_Time"]);//杨斌 2017-09-22 ObjResponsePar.Correct = ConvertOper.Convert(row["R_Correct"].ToString()).ToInt; ObjResponsePar.Score = ConvertOper.Convert(row["R_Score"].ToString()).ToDouble; if (res.Contains(keyids)) { if (ObjResponsePar.Time > res[keyids].Time) { res.Remove(keyids); res.Add(keyids, ObjResponsePar); } } else { res.Add(keyids, ObjResponsePar); } ////lstPar.Add(ObjResponsePar); } GlobalInfo.DBOperation.CloseDataSet(); //杨斌 2015-07-14 sql = "Select * From ST_Response2 Where T_ID='" + topicID + "' Order by R_Time Desc, R_KeypadID Asc"; GlobalInfo.DBOperation.OpenDataSet(sql); rowCount = GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Count; for (int i = 0; i < rowCount; i++) { DataRow row = GlobalInfo.DBOperation.DataSet.Tables[0].Rows[i]; string keyids = row["R_KeypadID"].ToString(); //2012-10-12 屏蔽名单 ResponsePar ObjResponsePar = new ResponsePar(); ObjResponsePar.KeyID = keyids; ObjResponsePar.KeyValue = row["R_Result"].ToString(); ObjResponsePar.Speed = ConvertOper.Convert(row["R_Speed"].ToString()).ToDouble; ObjResponsePar.Time = ConvertOper.Convert(row["R_Time"].ToString()).ToDateTime; ObjResponsePar.Time = (DateTime)(row["R_Time"]);//杨斌 2017-09-22 //杨斌 2016-01-13 //ObjResponsePar.Correct = ConvertOper.Convert(row["R_Correct"].ToString()).ToInt; ObjResponsePar.Score = ConvertOper.Convert(row["R_Score"].ToString()).ToDouble; lstPar.Add(ObjResponsePar); } GlobalInfo.DBOperation.CloseDataSet(); //杨斌 2015-07-14 if (lstPar.Count < 1) { for (int i = 0; i < res.Count; i++) { lstPar.Add(res[i]); } } } catch (Exception ex) { SystemLog.WriterLog(ex); } return res; } /// /// 加载反馈数据 /// public bool LoadResponseData() { bool res = false; try { GlobalInfo.response.ResponseDataList.Clear(); //取得题目ID 杨斌 2017-08-07 //string topicID = Globals.SunVoteARSAddIn.PPTShow.SlideShow.SlideID.ToString(); string topicID = ""; if (Globals.SunVoteARSAddIn.PPTShow.IsShowSlide) { topicID = Globals.SunVoteARSAddIn.PPTShow.SlideShow.SlideID.ToString(); ////2012-10-12 //List keylist = GlobalInfo.response.AuthorKeypadList.Keys.ToList(); GlobalInfo.response.ResponseDataList = GetResponseData(topicID, Globals.SunVoteARSAddIn.PPTShow.ResponseType, GlobalInfo.response.LstResponseData); } else { topicID = Globals.SunVoteARSAddIn.PPTEdit.SlideEdit.SlideID.ToString(); ////2012-10-12 //List keylist = GlobalInfo.response.AuthorKeypadList.Keys.ToList(); GlobalInfo.response.ResponseDataList = GetResponseData(topicID, Globals.SunVoteARSAddIn.PPTEdit.ResponseTypeSlideEdit, GlobalInfo.response.LstResponseData); } res = true; } catch (Exception ex) { SystemLog.WriterLog(ex); } return res; } /// /// 加载人员名单 /// public static Dictionary LoadPersonList() { Dictionary personList = new Dictionary(); try { //获取所有名单的键盘ID string sSql = "select a.* from ST_RosterValue a,ST_RosterColumn b where a.RC_ID=b.RC_ID and b.RC_Index=1"; DataSet ds = null; ds = GlobalInfo.DBOperation.OpenDataSet(sSql); if (ds.Tables[0].Rows.Count == 0) { return personList; } for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { string keypadID = ds.Tables[0].Rows[i]["RV_Text"].ToString(); if (keypadID.Length > 0)//杨斌 2013-01-28 { if (!personList.Keys.Contains(keypadID)) personList.Add(keypadID, keypadID); } } return personList; } catch (Exception ex) { return personList; } } /// /// 加载授权信息 :人员名单 /// 创建 赵丽 /// public void LoadAuthorKeypadPerson(string curSlideID, TagSet tagSet) { try { string sSql = ""; DataSet ds = null; string authorValue = "0"; string keypadID = ""; string groupID = tagSet.GetValue(TagKey.ResponsePara_CanVoteGroup).Value; if (groupID == "") return;//2013-2-25 判断权限出错 //sSql = "select a.*,b.V_KeypadID from ST_RosterValue a,ST_Voter b where a.RR_ID=b.RR_ID and a.RC_ID=" + groupID; sSql = "select * from ST_RosterValue where RC_ID=" + groupID; ds = GlobalInfo.DBOperation.OpenDataSet(sSql); if (ds.Tables[0].Rows.Count == 0) { return; } for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { authorValue = tagSet.LoadValue(TagKey.ResponsePara_CanVoteList_, curSlideID + "_" + ds.Tables[0].Rows[i]["RV_Text"].ToString(), 0).Value; string RR_ID = ds.Tables[0].Rows[i]["RR_ID"].ToString(); sSql = "select a.RV_Text from ST_RosterValue a,ST_RosterColumn b where a.RC_ID=b.RC_ID and b.RC_Index=1 and a.RR_ID=" + RR_ID; DataSet dsKey = GlobalInfo.DBOperation.OpenDataSet(sSql); if (dsKey.Tables[0].Rows.Count == 0) { continue; } //keypadID = ds.Tables[0].Rows[i]["V_KeypadID"].ToString(); keypadID = dsKey.Tables[0].Rows[0]["RV_Text"].ToString(); if (keypadID == "") { return; } if (authorValue == "1") AddAuthorKeypad(keypadID); } } catch (Exception ex) { } } /// /// 加载授权信息 : 题目授权 /// 创建 赵丽 /// 修改:杨斌 2012-03-23 /// public void LoadAuthorKeypadTopic(TagSet tagSet, int curSlideIndex) { try { string sSql = ""; DataSet ds = null; string authorValue = "0"; string keypadID = ""; string SlideID = tagSet.GetValue(TagKey.ResponsePara_CanVoteSlideID).Value; if (SlideID == "") return;//2013-2-25 判断权限出错 sSql = "select * from ST_Topic where T_ID='" + SlideID + "'"; ds = GlobalInfo.DBOperation.OpenDataSet(sSql); if (ds.Tables[0].Rows.Count == 0) { return; } //题目选项 string TopicType = ds.Tables[0].Rows[0]["TT_ID"].ToString(); ResponseType rType = ResponseTypeName.GetEnum(TopicType); sSql = "select * from ST_Response where T_ID='" + SlideID + "'"; ds = GlobalInfo.DBOperation.OpenDataSet(sSql); if (ds.Tables[0].Rows.Count == 0) { return; } string answerValue = ""; int IsCorrect = 0; switch (rType) { case ResponseType.SignIn: case ResponseType.Group: case ResponseType.Vote: case ResponseType.Grade: case ResponseType.Choice: case ResponseType.Judge: //杨斌 2012-03-23 int mode = tagSet.GetValue(TagKey.ResponsePara_AuthorSlideOptionMode).ToInt; if (mode == 1)//等于选项,但顺序不比较 { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { keypadID = ds.Tables[0].Rows[i]["R_KeypadID"].ToString(); //2012-06-18 赵丽 添加签到码签到功能 if (rType != ResponseType.SignIn) { answerValue = ds.Tables[0].Rows[i]["R_Result"].ToString(); //去掉多余的"," if (answerValue.Substring(answerValue.Length - 1, 1) == ",") answerValue = answerValue.Substring(0, answerValue.Length - 1); authorValue = tagSet.GetValue(TagKey.ResponsePara_AuthorValue).Value; string[] answer = answerValue.Split(','); string[] author = authorValue.Split(','); if (PublicFunction.AryIsEqual(answer, author)) AddAuthorKeypad(keypadID); } else { AddAuthorKeypad(keypadID); }//2012-06-18 添加签到码签到 } } else//包含选项 { for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { keypadID = ds.Tables[0].Rows[i]["R_KeypadID"].ToString(); //2012-06-18 赵丽 添加签到码签到功能 if (rType != ResponseType.SignIn) { answerValue = ds.Tables[0].Rows[i]["R_Result"].ToString(); //去掉多余的"," if (answerValue.Substring(answerValue.Length - 1, 1) == ",") answerValue = answerValue.Substring(0, answerValue.Length - 1); authorValue = tagSet.GetValue(TagKey.ResponsePara_AuthorValue).Value; string[] answer = answerValue.Split(','); string[] author = authorValue.Split(','); foreach (string item in answer) { if (author.Contains(item)) { AddAuthorKeypad(keypadID); } } } else { AddAuthorKeypad(keypadID); }//2012-06-18 添加签到码签到 } } break; case ResponseType.Order: case ResponseType.Number: for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { keypadID = ds.Tables[0].Rows[i]["R_KeypadID"].ToString();//漏了赋值!杨斌 2012-03-01 IsCorrect = ConvertOper.Convert(ds.Tables[0].Rows[i]["R_Correct"].ToString()).ToInt; authorValue = tagSet.GetValue(TagKey.ResponsePara_AuthorValue).Value; if ((authorValue == "1") && (IsCorrect == 1)) AddAuthorKeypad(keypadID); } break; } } catch (Exception ex) { } } /// /// 添加授权键盘 /// 创建 赵丽 /// /// private void AddAuthorKeypad(string keypadID) { if (keypadID == "") { return; } if (!GlobalInfo.response.AuthorKeypadList.Keys.Contains(keypadID)) GlobalInfo.response.AuthorKeypadList.Add(keypadID, keypadID); } /// /// 更新历史题目ID /// /// public static string UpdateTopicID(string topicID) { if (topicID == "") { return ""; } try { string sID = System.DateTime.Now.ToString("yyyyMMddHHmmss"); //string sSql = "update ST_Topic set T_ID=T_ID&" + sID + ",T_Index=T_Index+" + " where T_ID='" + topicID + "'"; string sSql = "update ST_Topic set T_ID='" + topicID + sID + "' where T_ID='" + topicID + "'";//杨斌 2012-03-22 GlobalInfo.DBOperation.ExecuteNonQuery(sSql); return sID; } catch { return ""; } //sSql = "update ST_Topic set T_ID=T_ID+" + sID + " where T_ID='" + topicID + "'"; //GlobalInfo.DBOperation.ExecuteNonQuery(sSql); //sSql = "update ST_TopicPar set T_ID=T_ID+" + sID + " where T_ID='" + topicID + "'"; //GlobalInfo.DBOperation.ExecuteNonQuery(sSql); } /// /// 获取有正确答案的题目ID列表,用于过滤正确率分母计算 /// 创建:杨斌 2012-03-23 /// /// public static List GetHaveCorrectTopicID() { List res = new List(); try { string sql = "SELECT ST_Topic.T_ID" + " FROM ST_Topic INNER JOIN ST_TopicPar ON ST_Topic.T_ID = ST_TopicPar.T_ID" + " WHERE (((ST_TopicPar.TP_Name)='CorrectAnswer') AND ((ST_TopicPar.TP_Value)<>''))"; GlobalInfo.DBOperation.OpenDataSet(sql); System.Data.DataTable tb = GlobalInfo.DBOperation.DataSet.Tables[0]; for (int iRow = 0; iRow < tb.Rows.Count; iRow++) { DataRow row = tb.Rows[iRow]; string tid = "'" + row["T_ID"].ToString() + "'"; if (!res.Contains(tid)) res.Add(tid); } GlobalInfo.DBOperation.CloseDataSet(); } catch (Exception ex) { SystemLog.WriterLog(ex); } return res; } /// /// 获取选择的题目列表中带正确答案的个数 /// 创建:杨斌 2012-03-23 /// /// /// public static int GetSelItemAndHaveCorrect(ListView lvwSlide) { int res = 0; try { List lstID = GetHaveCorrectTopicID(); foreach (ListViewItem item in lvwSlide.CheckedItems) { string tid = ""; if (item.Tag != null) { tid = item.Tag.ToString(); if (lstID.Contains(tid)) res++; } } } catch (Exception ex) { SystemLog.WriterLog(ex); } return res; } /// /// 显示数值排行 /// 杨斌 2014-10-24 /// public static void ShowTableNumberRank(Slide sld, bool beShowCorrect)//杨斌 2015-04-28 { try { Shape sha = null; int rowCount = 0; try { sha = sld.Shapes["ARS_TableNumberRank"]; rowCount = sha.Table.Rows.Count; } catch { } if (rowCount < 2) return; for (int i = 2; i <= rowCount; i++) { sha.Table.Cell(i, 2).Shape.TextFrame.TextRange.Text = ""; sha.Table.Cell(i, 3).Shape.TextFrame.TextRange.Text = ""; } //杨斌 2015-05-26 TagSet tagSet = new TagSet(sld.Tags); bool isVoted = (tagSet.GetValue(TagKey.Slide_IsResponsed).ToInt == 1); if (!isVoted) return; string sID = sld.SlideID.ToString(); string correctAsw = Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.GetValue(TagKey.Number_CorrectAnswer).Value; string sql = "SELECT ST_TopicPar.T_ID, ST_TopicPar.TP_Name, ST_TopicPar.TP_Value" + " FROM ST_TopicPar" + " WHERE (((ST_TopicPar.T_ID)='" + sID + "') AND ((ST_TopicPar.TP_Name)='CorrectAnswer'));"; GlobalInfo.DBOperation.OpenDataSet(sql); if (GlobalInfo.DBOperation.DataSet.Tables.Count > 0) { if (GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Count > 0) { DataRow row = GlobalInfo.DBOperation.DataSet.Tables[0].Rows[0]; correctAsw = row["TP_Value"].ToString(); } } GlobalInfo.DBOperation.CloseDataSet(); //判断是否有正确答案。杨斌 2015-01-16 bool hasCorrectAsw = (correctAsw.Length > 0); if (hasCorrectAsw) { //杨斌 2015-04-28 sha.Table.Cell(2, 2).Shape.TextFrame.TextRange.Text = beShowCorrect ? correctAsw : ""; if (correctAsw.Length > 0) sha.Table.Cell(2, 3).Shape.TextFrame.TextRange.Text = "0"; } sql = "SELECT ST_Response.T_ID, ST_Response.R_Result," + " Sum(ST_Response.R_Correct) AS R_Correct_Sum, Count(ST_Response.R_Result) AS R_Result_Count" + " FROM ST_Response" + " GROUP BY ST_Response.T_ID, ST_Response.R_Result" + " HAVING (((ST_Response.T_ID)='" + sID + "'))" + " ORDER BY Sum(ST_Response.R_Correct) DESC , Count(ST_Response.R_Result) DESC, ST_Response.R_Result ASC;"; GlobalInfo.DBOperation.OpenDataSet(sql); if (GlobalInfo.DBOperation.DataSet.Tables.Count > 0) { int recordCount = GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Count; if (recordCount > 0) { DataRow row = GlobalInfo.DBOperation.DataSet.Tables[0].Rows[0]; int correctCount = ConvertOper.Convert(row["R_Correct_Sum"].ToString()).ToInt; int startRow = 2; //没有正确答案则没有这一行。杨斌 2015-01-16 if (hasCorrectAsw) { if (correctCount < 1) startRow = 3; } int otherCount = 0; for (int i = 0; i < recordCount; i++) { row = GlobalInfo.DBOperation.DataSet.Tables[0].Rows[i]; int nowRow = i + startRow; if (nowRow < rowCount) { sha.Table.Cell(nowRow, 2).Shape.TextFrame.TextRange.Text = row["R_Result"].ToString(); sha.Table.Cell(nowRow, 3).Shape.TextFrame.TextRange.Text = row["R_Result_Count"].ToString(); } else { otherCount += ConvertOper.Convert(row["R_Result_Count"].ToString()).ToInt; } } if (rowCount > 2) sha.Table.Cell(rowCount, 3).Shape.TextFrame.TextRange.Text = otherCount.ToString(); } } GlobalInfo.DBOperation.CloseDataSet(); } catch (Exception ex) { SystemLog.WriterLog(ex); } } /// /// 显示选举名单表格 /// 杨斌 2014-11-11 /// public static void ShowTablePollList(Slide sld) { try { Shape sha = null; int rowCount = 0; try { sha = sld.Shapes["ARS_TablePollRank"]; rowCount = sha.Table.Rows.Count; } catch { } if (rowCount < 2) return; for (int i = 2; i <= rowCount; i++) { sha.Table.Cell(i, 2).Shape.TextFrame.TextRange.Text = ""; sha.Table.Cell(i, 3).Shape.TextFrame.TextRange.Text = ""; sha.Table.Cell(i, 4).Shape.TextFrame.TextRange.Text = ""; } for (int i = 2; i < rowCount; i++)//清空排名 2015-03-31 { sha.Table.Cell(i, 1).Shape.TextFrame.TextRange.Text = ""; } TagSet tagSet = new TagSet(sld.Tags); int PollCount = tagSet.GetValue(TagKey.Poll_CandidatesCount).ToInt; if (PollCount > rowCount - 2) PollCount = rowCount - 2; for (int i = 0; i < PollCount; i++) { int row = i + 2; string CandidateID = tagSet.LoadValue(TagKey.Poll_CandidatesID_, i, "").Value.ToString(); string CandidateName = tagSet.LoadValue(TagKey.Poll_CandidatesName_, i, "").Value.ToString(); sha.Table.Cell(row, 2).Shape.TextFrame.TextRange.Text = CandidateID; sha.Table.Cell(row, 3).Shape.TextFrame.TextRange.Text = CandidateName; } } catch (Exception ex) { SystemLog.WriterLog(ex); } } /// /// 显示选举排行 /// 杨斌 2014-10-24 /// public static void ShowTablePollRank() { try { Slide sld = Globals.SunVoteARSAddIn.PPTShow.SlideShow; Shape sha = null; int rowCount = 0; try { sha = sld.Shapes["ARS_TablePollRank"]; rowCount = sha.Table.Rows.Count; } catch { } if (rowCount < 2) return; for (int i = 2; i <= rowCount; i++) { sha.Table.Cell(i, 2).Shape.TextFrame.TextRange.Text = ""; sha.Table.Cell(i, 3).Shape.TextFrame.TextRange.Text = ""; sha.Table.Cell(i, 4).Shape.TextFrame.TextRange.Text = ""; } for (int i = 2; i < rowCount; i++)//清空排名。杨斌 2015-03-31 { sha.Table.Cell(i, 1).Shape.TextFrame.TextRange.Text = ""; } //加载选举人员 TagSet tagSet = new TagSet(sld.Tags); int PollCount = tagSet.LoadValue(TagKey.Poll_CandidatesCount, 0).ToInt; TDictionary dicPollList = new TDictionary(); for (int i = 0; i < PollCount; i++) { string id = tagSet.LoadValue(TagKey.Poll_CandidatesID_, i, "").Value.ToString(); string name = tagSet.LoadValue(TagKey.Poll_CandidatesName_, i, "").Value.ToString(); if (!dicPollList.Contains(id)) dicPollList.Add(id, name); } string sID = sld.SlideID.ToString(); ////查询选举结果。杨斌 2016-04-27 //string sql = "SELECT ST_Response.T_ID, ST_Response.R_Result, Count(ST_Response.R_Result) AS R_Result_Count" + // " FROM ST_Response" + // " GROUP BY ST_Response.T_ID, ST_Response.R_Result" + // " HAVING (((ST_Response.T_ID)='" + sID + "'))" + // " ORDER BY Count(ST_Response.R_Result) DESC, ST_Response.R_Result ASC;"; //GlobalInfo.DBOperation.OpenDataSet(sql); //if (GlobalInfo.DBOperation.DataSet.Tables.Count > 0) //{ // int recordCount = GlobalInfo.DBOperation.DataSet.Tables[0].Rows.Count; // if (recordCount > 0) // { // int startRow = 2; // int otherCount = 0; // for (int i = 0; i < recordCount; i++) // { // DataRow row = GlobalInfo.DBOperation.DataSet.Tables[0].Rows[i]; // int nowRow = i + startRow; // if (nowRow < rowCount) // { // string sRes = row["R_Result"].ToString(); // sha.Table.Cell(nowRow, 2).Shape.TextFrame.TextRange.Text = sRes; // if (dicPollList.Contains(sRes)) // sha.Table.Cell(nowRow, 3).Shape.TextFrame.TextRange.Text = dicPollList[sRes]; // sha.Table.Cell(nowRow, 4).Shape.TextFrame.TextRange.Text = row["R_Result_Count"].ToString(); // } // else // { // otherCount += ConvertOper.Convert(row["R_Result_Count"].ToString()).ToInt; // } // } // if (rowCount > 2) // sha.Table.Cell(rowCount, 4).Shape.TextFrame.TextRange.Text = otherCount.ToString(); // } //} //GlobalInfo.DBOperation.CloseDataSet(); //查询选举结果。杨斌 2016-04-27 Dictionary dic = GetPollResultData(sID); if (dic.Count > 0) { int startRow = 2; double otherCount = 0; int i = 0; foreach (var v in dic) { string result = v.Key; double count = v.Value; int nowRow = i + startRow; if (nowRow < rowCount) { sha.Table.Cell(nowRow, 2).Shape.TextFrame.TextRange.Text = result; if (dicPollList.Contains(result)) sha.Table.Cell(nowRow, 3).Shape.TextFrame.TextRange.Text = dicPollList[result]; sha.Table.Cell(nowRow, 4).Shape.TextFrame.TextRange.Text = count.ToString(); } else { otherCount += count; } i++; } if (rowCount > 2) sha.Table.Cell(rowCount, 4).Shape.TextFrame.TextRange.Text = otherCount.ToString(); } //计算排名 2015-03-31 int rank = 1; sha.Table.Cell(2, 1).Shape.TextFrame.TextRange.Text = rank.ToString(); for (int i = 3; i < rowCount; i++) { if (sha.Table.Cell(i, 4).Shape.TextFrame.TextRange.Text != sha.Table.Cell(i - 1, 4).Shape.TextFrame.TextRange.Text) { rank = i - 1; } sha.Table.Cell(i, 1).Shape.TextFrame.TextRange.Text = rank.ToString(); } } catch (Exception ex) { SystemLog.WriterLog(ex); } } } }