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);
}
}
}
}