///-------------------------------------------------------------------------- /// 文 件 名:Response.cs /// 功能描述:反馈控制类 /// 修改标识:赵丽 2012-1-10 /// 修改标志:杨斌 2018-04-09 ///-------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Linq; using System.Text; using GeneralLib; using PowerPoint = Microsoft.Office.Interop.PowerPoint; using System.Data; using System.Windows.Forms; using System.IO; using System.Drawing; using System.Diagnostics; using KingLib; using ProService; namespace SunVoteARSPPT { public delegate void ResponseEventHander(ResponsePar ObjResponsePar); /// /// 应用业务接口 /// public interface IResponse { /// /// 反馈事件 /// event ResponseEventHander ResponseEventHander; /// /// 启动应用反馈 /// void Start(); /// /// 停止应用反馈 /// void Stop(); /// /// 基站连接 /// SunVote.BaseConnection BaseConnection { get; set; } /// /// 幻灯片Tag值 /// TagSet TagSet { get; set; } /// /// 反馈类型 /// ResponseType ResponseType { get; set; } } /// /// 反馈数据类 /// public class ResponsePar { /// /// 基站标签 /// public string BaseTag { get; set; } /// /// 键盘ID /// public string KeyID { get; set; } /// /// 键盘值 /// public string KeyValue { get; set; } /// /// 按键速度,即答题用时(秒),用于名单排序,得分相同比速度 /// public double Speed { get; set; } /// /// 按键日期时间,如签到时间 /// public DateTime Time { get; set; } /// /// 是否答对(答对个数) /// public int Correct { get; set; } /// /// 答题得分 /// public double Score { get; set; } ///// ///// 确认键。杨斌 2020-06-16 ///// //public int CommitOK = -1; } /// /// 候选人信息 /// public class CandidateInfo { /// /// 候选人ID /// public string CandidateID { get; set; } /// /// 候选人名称 /// public string CandidateName { get; set; } } public enum ResponseStatus { /// /// 准备 /// bsReady = 0, /// /// 开始 /// bsStart = 1, /// /// 停止 /// bsStop = 2, } /// /// 排序记分元素 /// 杨斌 2014-04-18 /// public class OrderItem { public int No = 0; public double Score = 0; public int[] Count = null; public OrderItem(int no, double score, int[] count) { No = no; Score = score; Count = count; } } /// /// 到时停止 /// public delegate void StopEventHander(); /// /// 下一张幻灯片 /// public delegate void NextSlideEventHander(); /// /// 启用名单事件 /// public delegate void VoteListEnabledEventHander(bool enabled); /// /// 有反馈时间 /// public delegate void IsResponsedEventHander(); /// /// 应用业务类 /// public class Response { public event VoteListEnabledEventHander VoteListEnabledEvent; //public event StopEventHander StopEvent;//杨斌 2014-08-20 屏蔽 public event IsResponsedEventHander IsResponsedEvent; /// /// 下一张幻灯片 /// public event NextSlideEventHander NextSlideEvent; /// /// 键盘反馈信息 /// public TDictionary ResponseDataList { get; set; } //public /// /// 存储选项反馈数量 /// public Dictionary ResponseOptionList { get; set; } /// /// 存储选项反馈数量,不计算权重。杨斌 2016-11-12 /// public Dictionary ResponseOptionListNoRate { get; set; } /// /// 存储选项反馈数量,重复按键值的。杨斌 2016-01-07 /// public Dictionary ResponseOptionListCount { get; set; } /// /// 保存更新的键盘信息 /// public TDictionary ResponseKeypadList { get; set; } /// /// 键盘授权列表 /// public Dictionary AuthorKeypadList { get; set; } /// /// 抢答成功的键盘编号。翻页时清除。抢答成功后赋值。优先于授权 /// 杨斌 2014-05-20 /// public string KeyIDQDOK = ""; /// /// 候选人信息 /// public Dictionary CandidateInfoList { get; set; } /// /// 签到码信息 2012-06-18 /// public Dictionary SignInCode { get; set; } /// /// 幻灯片内存值 /// public TagSet TagSet = new TagSet(); /// /// 当前幻灯片 /// public PowerPoint.Slide CurrentSlide { get; set; } /// /// 反馈对象 /// public IResponse Busines = null; /// /// 远程控制 /// public SunVote.Request ARSRequest = null; /// /// 下一张幻灯片 /// public bool NextSlide = false; /// /// 下一张幻灯片自动开始反馈,在幻灯片翻页事件中判断调用启动反馈 /// 杨斌 2012-03-06 /// public bool NextSlideAutoStart = false; /// /// 是否允许刷新图表 /// public bool AllowRefreshChart = false; /// /// 其他操作时,投票无效,如:键盘替换过程 /// public bool IsAnOtherOper = false; /// /// 记录原来设置的事件 /// private string oldTimerValue = "00:30"; /// /// 是否启用名单 true:是 /// public bool EnableList { get { //杨斌 2015-03-27。避免重复查询性能问题。 //return new RosterList().RosterEnabled; return Globals.Ribbons.rbSunVoteARS.chkVoterEnabled.Checked; } set { VoteListEnabledEvent(value); new RosterList().RosterEnabled = value; if (value) { InitRosterInfo();//这里可能有问题。如果重新导入名单,新的值没有被加载。杨斌 2012-11-27 } } } /// /// 是否启用签到码 /// public int SignInCodeIndex { get { return new RosterList().SignInCodeIndex; } set { new RosterList().SignInCodeIndex = value; } } /// /// 作为显示姓名的字段 /// 杨斌 2013-12-23 /// public string ShowNameCol { get { string col = ""; try { col = Globals.SunVoteARSAddIn.Application.ActivePresentation.Tags["ShowNameField"]; } catch { } return col; } set { try { Globals.SunVoteARSAddIn.Application.ActivePresentation.Tags.Add("ShowNameField", value); } catch { } } } /// /// 报表中显示的字段 /// 杨斌 2015-11-27 /// public string ShowReportCol { get { string col = ""; try { col = Globals.SunVoteARSAddIn.Application.ActivePresentation.Tags["ShowReportCol"]; } catch { } return col; } set { try { Globals.SunVoteARSAddIn.Application.ActivePresentation.Tags.Add("ShowReportCol", value); } catch { } } } public string VoteWeightCol { get { string col = ""; try { col = Globals.SunVoteARSAddIn.Application.ActivePresentation.Tags["VoteWeightCol"]; } catch { } return col; } set { try { Globals.SunVoteARSAddIn.Application.ActivePresentation.Tags.Add("VoteWeightCol", value); } catch { } } } /// /// 作为学号或身份ID判定的字段 /// 杨斌 2013-12-23 /// public string UIDCol { get { string col = ""; //try //{ // col = Globals.SunVoteARSAddIn.Application.ActivePresentation.Tags["UIDField"]; //} //catch { } try//杨斌 2015-11-03 { string sql = "Select * From ST_TopicPar Where TP_Name='UIDCol'"; DataSet ds = GlobalInfo.DBOperation.GetDataSet(sql); if (ds.Tables.Count > 0) { DataTable tb = ds.Tables[0]; if (tb.Rows.Count > 0) col = tb.Rows[0]["TP_Value"].ToString(); } } catch (Exception ex) { SystemLog.WriterLog(ex); } return col; } set { //try //{ // Globals.SunVoteARSAddIn.Application.ActivePresentation.Tags.Add("UIDField", value); //} //catch { } try//杨斌 2015-11-03 { string sql = "Select * From ST_TopicPar Where TP_Name='UIDCol'"; GlobalInfo.DBOperation.OpenDataSet(sql); if (GlobalInfo.DBOperation.DataSet.Tables.Count > 0) { DataTable tb = GlobalInfo.DBOperation.DataSet.Tables[0]; if (tb.Rows.Count > 0) { tb.Rows[0]["TP_Value"] = value; GlobalInfo.DBOperation.UpdateDataSet(); } else { GlobalInfo.DBOperation.CloseDataSet(); sql = "INSERT INTO ST_TopicPar (TP_Name, TP_Value)" + " VALUES ('UIDCol', '" + value + "')"; GlobalInfo.DBOperation.ExecuteNonQuery(sql); } } GlobalInfo.DBOperation.CloseDataSet(); } catch (Exception ex) { SystemLog.WriterLog(ex); } } } private static string ShowMapColListCount = "ShowMapColListCount"; private static string ShowMapColListKey = "ShowMapColListKey"; /// /// 作为显示按键明细的字段,自定义多个。若个数为0则非自定义 /// 杨斌 2014-09-09 /// public List ShowMapColList { get { List lstCol = new List(); try { PowerPoint.Tags tags = Globals.SunVoteARSAddIn.Application.ActivePresentation.Tags; int count = ConvertOper.Convert(tags[ShowMapColListCount]).ToInt; for (int i = 1; i <= count; i++) { string name = tags[ShowMapColListKey + i]; lstCol.Add(name); } } catch { } return lstCol; } set { try { PowerPoint.Tags tags = Globals.SunVoteARSAddIn.Application.ActivePresentation.Tags; tags.Add(ShowMapColListCount, value.Count.ToString()); for (int i = 0; i < value.Count; i++) { tags.Add(ShowMapColListKey + (i + 1), value[i]); } } catch { } } } /// /// 作为显示按键明细的字段 /// 杨斌 2014-06-16 /// public string ShowMapCol { get { string col = ""; try { col = Globals.SunVoteARSAddIn.Application.ActivePresentation.Tags["ShowMapCol"]; if (col == "") col = ShowNameCol; } catch { } return col; } set { try { Globals.SunVoteARSAddIn.Application.ActivePresentation.Tags.Add("ShowMapCol", value); } catch { } } } /// /// 投票键盘权重 /// 创建:杨斌 2012-11-27 /// public int VoteRateIndex { get { return new RosterList().VoteRateIndex; } set { new RosterList().VoteRateIndex = value; } } /// /// 保存播放状态时的幻灯片图表显示状态 /// 杨斌 2014-12-04 /// public Dictionary DicSlideShowChart = new Dictionary(); /// /// 是否手动启用显示图表 /// private bool showPicture = false; public bool ShowPicture { get { return showPicture; } set { showPicture = value; if (value) { ////刷新图表 RefreshChart(); //杨斌 2016-06-21 if (Globals.SunVoteARSAddIn.PPTShow.SlideShow != null) if (Globals.SunVoteARSAddIn.PPTShow.IsChartShowWindow(Globals.SunVoteARSAddIn.PPTShow.SlideShow)) if ((Globals.SunVoteARSAddIn.PPTShow.FrmChart != null) && (!Globals.SunVoteARSAddIn.PPTShow.FrmChart.Visible)) Globals.SunVoteARSAddIn.PPTShow.FrmChart.ShowCenter(); } else { //隐藏图片 foreach (PowerPoint.Shape s in CurrentSlide.Shapes) { if (s.Name == "pic") s.Visible = Microsoft.Office.Core.MsoTriState.msoFalse; } //杨斌 2016-06-21 if (Globals.SunVoteARSAddIn.PPTShow.SlideShow != null) if (Globals.SunVoteARSAddIn.PPTShow.IsChartShowWindow(Globals.SunVoteARSAddIn.PPTShow.SlideShow)) if ((Globals.SunVoteARSAddIn.PPTShow.FrmChart != null) && (Globals.SunVoteARSAddIn.PPTShow.FrmChart.Visible)) Globals.SunVoteARSAddIn.PPTShow.FrmChart.Hide(); } PPTOper.ShowDataLabel(CurrentSlide, DataLabelType.VOTEMEAN, value);//显示平均值。杨斌 2014-04-15 PPTOper.ShowDataLabel(CurrentSlide, DataLabelType.VoteMedian, value);//显示中间值。杨斌 2016-03-29 PPTOper.ShowDataLabel(CurrentSlide, DataLabelType.VoteRange, value);//显示投票范围。杨斌 2016-03-29 PPTOper.ShowDataLabel(CurrentSlide, DataLabelType.GradeAvg, value);//显示评议平均分。杨斌 2019-06-27 PPTOper.ShowTableVoteCount(CurrentSlide, false, LabelTypes.ltNone, 0, true);//杨斌 2016-11-12 } } /// /// 图表显示方式 /// private ChartViewType chartViewType = ChartViewType.csStop; public ChartViewType ChartViewType { get { return chartViewType; } set { chartViewType = value; } } /// /// 停止状态,停止时控制图表显示 /// //public bool IsStop = false; /// /// 键盘授权:是否所有人,Ture 是 /// public bool IsAllPerson = true; /// /// 自定义背景音乐。杨斌 2015-04-10 /// public string SlideBackMusic = ""; public bool IsNextSlide = false; /// /// 业务状态:true 开始 /// private ResponseStatus businessStatus = ResponseStatus.bsReady; public ResponseStatus BusinessStatus { get { return businessStatus; } set { if (businessStatus != value) { businessStatus = value; //点开始恢复时间,先恢复时间标签,再启用定时器 //tmrTimer.Enabled = (value == ResponseStatus.bsStart ? true : false); //若启动投票时,计时器为0,则恢复初始值,开始计时。计时器设置为0则自动变为30秒。 杨斌 2012-03-15 if (value == ResponseStatus.bsStart) { if (GetTimerCount() <= 0) { List lstShape = PPTOper.GetDataLabelShape(CurrentSlide, DataLabelType.TIMER); foreach (PowerPoint.Shape shape in lstShape) { shape.TextFrame.TextRange.Text = TagSet.GetValue(TagKey.ResponseTimer).Value; } } //shape.TextFrame.TextRange.Text = TagSet.GetValue(TagKey.ResponseTimer).Value; tmrTimer.Enabled = true; } else { tmrTimer.Enabled = false; } //杨斌 2015-03-27 if (value == ResponseStatus.bsStart) { //杨斌 2015-04-01。修复Interval=0的错误,导致签到码签到清空后不能签到了。 int voterCount = GetParticipateNum(); int itv = voterCount * 1; if (itv < 1000) itv = 1000; tmrRefresh.Interval = itv; tmrRefresh.Enabled = true; } else { tmrRefresh.Enabled = false; } if (value != ResponseStatus.bsStop) { TagSet tagSet = new SunVoteARSPPT.TagSet(CurrentSlide.Tags); int runTimeShowScore = tagSet.GetValue(TagKey.Score_RunTimeShowScore).ToInt; int showTotal = tagSet.GetValue(TagKey.Score_ShowTotal).ToInt; int showAvg = tagSet.GetValue(TagKey.Score_ShowAvg).ToInt; IsNextSlide = false; foreach (PowerPoint.Shape shape in CurrentSlide.Shapes) { switch (shape.Name) { case "TIMER": //陈总说:继续时剩下几秒,就是几秒。屏蔽下面一行代码即可继续计时。杨斌 2012-03-15 //shape.TextFrame.TextRange.Text = TagSet.GetValue(TagKey.ResponseTimer).Value; break; case "SUMSCORE"://杨斌 2016-12-13 if (value == ResponseStatus.bsStart) { if ((runTimeShowScore == 1) && (showTotal == 1)) shape.Visible = Microsoft.Office.Core.MsoTriState.msoTrue; else shape.Visible = Microsoft.Office.Core.MsoTriState.msoFalse; } break; case "AVGSCORE"://杨斌 2016-12-13 if (value == ResponseStatus.bsStart) { if ((runTimeShowScore == 1) && (showAvg == 1)) shape.Visible = Microsoft.Office.Core.MsoTriState.msoTrue; else shape.Visible = Microsoft.Office.Core.MsoTriState.msoFalse; } break; case "AVGScoreGroup"://杨斌 2015-07-28 case "AVGScoreTableGroup": case "AVGScoreTableGroupDetail": if (value == ResponseStatus.bsStart) shape.Visible = Microsoft.Office.Core.MsoTriState.msoFalse; break; } } RefreshChart(); //HidePicture(); } else { if (value == ResponseStatus.bsStop) { //评分刷新分数 if (Globals.SunVoteARSAddIn.PPTShow.ResponseType == ResponseType.Score) CaculateScore(Globals.SunVoteARSAddIn.PPTShow.SlideShow, true); RefreshLable(); RefreshChart();//ToDo: 高度可能为0,则出错,影响下面代码执行 //RefreshPollRank(); } } } //杨斌 2015-03-17 //if (businessStatus != ResponseStatus.bsStop) ////if (businessStatus == ResponseStatus.bsStart) //启动了才需要停止 //{ // if (Busines != null) // Busines.Stop(); //} if (value == ResponseStatus.bsStop) { if (Busines != null) Busines.Stop(); } if (businessStatus == ResponseStatus.bsStart) { InitBusines(); //杨斌 2015-04-10 if (string.IsNullOrEmpty(SlideBackMusic)) { if (GlobalInfo.sysConfig.BackgSoundEnabled) GlobalInfo.DXSoundPlay.PlayLoop(GlobalInfo.Sound_Key_Back); } else { GlobalInfo.DXSoundPlay.PlayLoop(GlobalInfo.Sund_Key_BackSlide); } } //杨斌 2015-04-10 if (businessStatus == ResponseStatus.bsStop) { GlobalInfo.DXSoundPlay.Stop(GlobalInfo.Sound_Key_Back); GlobalInfo.DXSoundPlay.Stop(GlobalInfo.Sund_Key_BackSlide); } } } /// /// 记录参与者人数 /// private double ParticipateNum = 0; /// /// 刷新定时器标签 /// private System.Windows.Forms.Timer tmrTimer = null; /// /// 刷新标签、图表 /// public System.Windows.Forms.Timer tmrRefresh = null; /// /// 反馈数据库业务存取模块 /// private ResponseDB ResponseDB = new ResponseDB(); public Response() { ResponseDataList = new TDictionary(); ResponseOptionList = new Dictionary(); ResponseOptionListNoRate = new Dictionary();//杨斌 2016-11-12 ResponseOptionListCount = new Dictionary(); ResponseKeypadList = new TDictionary(); AuthorKeypadList = new Dictionary(); CandidateInfoList = new Dictionary(); //2012-06-18 赵丽 签到码数据 SignInCode = new Dictionary(); tmrTimer = new System.Windows.Forms.Timer(); tmrTimer.Interval = 1000; tmrTimer.Tick += new EventHandler(tmrTimer_Tick); tmrTimer.Enabled = false; tmrRefresh = new System.Windows.Forms.Timer(); tmrRefresh.Interval = 1000; tmrRefresh.Tick += new EventHandler(tmrRefresh_Tick); tmrRefresh.Enabled = false; //不需要,屏蔽。杨斌 2016-12-13 //ARSRequest = new SunVote.Request(); //ARSRequest.BaseConnection = GlobalInfo.baseConnect.baseConnection; } /// /// 投票键盘权重:key=键盘,item=权重值(默认=1) /// 创建:杨斌 2012-11-27 /// public TDictionary VoterRate = new TDictionary(); /// /// 初始化签到码字段 /// //杨斌 2017-03-30 /// public void InitRosterSignInCode(PowerPoint.Slide sld) { try { SignInCode.Clear(); FrmVoteDetail frmDetail = Globals.SunVoteARSAddIn.frmVoteBar.frmVoteDetail; if (frmDetail != null) frmDetail.SignInCodeIndex = 0; TagSet tagSet = new TagSet(sld.Tags); int sinMode = tagSet.GetValue(TagKey.SignIn_Mode).ToInt; string colName = ""; if (sinMode == 1) { colName = tagSet.GetValue(TagKey.SignIn_CodeField).Value; if (colName.Length < 1) return; } RosterList Roster = new RosterList(); int colIndex = -1; if (!Roster.RosterEnabled) return; Roster.LoadRoster(); if (sinMode == 1) { for (int i = 0; i < Roster.Columns.Count; i++) { if (Roster.Columns[i].ColumnName == colName) { colIndex = i; break; } } } else if (sinMode == 2) { colIndex = Roster.Columns.Count - 1; } if (frmDetail != null) frmDetail.SignInCodeIndex = colIndex; if (colIndex == -1) return; for (int i = 0; i < Roster.Rows.Count; i++) { string keyID = Roster.Rows[i].Cells[0].ToString(); //签到码 if (keyID != "") { if (!SignInCode.Keys.Contains(keyID)) { string code = Roster.Rows[i].Cells[colIndex].ToString(); SignInCode.Add(keyID, code); } } } //} //if (sinMode == 2)//杨斌 2017-03-30 //{ // Dictionary dicRUID = FrmVoterList.GetDicRUID(Roster); // for (int i = 0; i < Roster.Rows.Count; i++) // { // string keyID = Roster.Rows[i].Cells[0].ToString(); // if (keyID != "") // { // if (!SignInCode.Keys.Contains(keyID)) // { // string rid = Roster.Rows[i].RowIndex + ""; // if (dicRUID.ContainsKey(rid)) // SignInCode.Add(keyID, dicRUID[rid]); // } // } // } //} } catch (Exception ex) { SystemLog.WriterLog(ex, false); } } /// /// 权重值总和。杨斌 2015-01-26 /// public double VoteRateSum = 0; /// /// 人员名单总数 /// public double RousterCount = 0; /// /// 初始化权重字段 /// 杨斌 2014-10-27 /// 杨斌 2015-01-26 /// 杨斌 2015-03-27 /// public void InitRosterVoteRate(PowerPoint.Slide sld) { try { VoterRate.Clear(); VoteRateSum = 0;//反馈人数总权重 totalWeight = 0;//参与人数总权重 TagSet tagSet = new TagSet(sld.Tags); string colName = tagSet.GetValue(TagKey.ResponsePara_VoteRateField).Value; if (colName.Length < 1) return; RosterList Roster = new RosterList(); int colIndex = -1; if (!Roster.RosterEnabled) return; Roster.LoadRoster(); RousterCount = Roster.Rows.Count;//杨斌 2015-03-27 for (int i = 0; i < Roster.Columns.Count; i++) { if (Roster.Columns[i].ColumnName == colName) { colIndex = i; break; } } if (colIndex == -1) return; for (int i = 0; i < Roster.Rows.Count; i++) { string keyID = Roster.Rows[i].Cells[0].ToString(); //杨斌 2015-03-27 if (GlobalInfo.response.ResponseDataList.Contains(keyID)) VoteRateSum += ConvertOper.Convert(Roster.Rows[i].Cells[colIndex].ToString()).ToDouble; //权重 if (keyID != "") { if (!VoterRate.Contains(keyID)) { //小数点问题处理。杨斌 2020-02-20 bool beConvert = true; double rate = 0; if (beConvert) rate = ConvertOper.Convert(Roster.Rows[i].Cells[colIndex].ToString()).ToDouble;//2020-02-20 权重小数点问题 else double.TryParse(Roster.Rows[i].Cells[colIndex].ToString(), out rate); totalWeight += rate; //杨斌 2018-05-22 if (rate < 0) rate = 0; //if (rate <= 0) rate = 1; VoterRate.Add(keyID, rate); } } } } catch (Exception ex) { SystemLog.WriterLog(ex, false); } } //2014-3-17 增加权重总值 public double totalWeight = 0; /// /// 创建 赵丽 2012-06-18 /// 创建:杨斌 2012-11-27 /// 加载签到码信息、加载投票键盘权重 /// public void InitRosterInfo() { //取消该函数功能。将名单中字段设置移到签到和投票权重设置的面板中独立设置。在播放时初始化。杨斌 2014-10-27 //拆分函数分别为InitRosterSignInCode,InitRosterVoteRate return; try { totalWeight = 0; SignInCode.Clear(); VoterRate.Clear(); RosterList Roster = new RosterList(); if (!Roster.RosterEnabled) return; Roster.LoadRoster(); for (int i = 0; i < Roster.Rows.Count; i++) { string keyID = Roster.Rows[i].Cells[0].ToString(); //签到码 if (!SignInCode.Keys.Contains(keyID)) { string code = Roster.Rows[i].Cells[GlobalInfo.response.SignInCodeIndex].ToString(); SignInCode.Add(keyID, code); } if (keyID != "") { //投票键盘权重 if ((GlobalInfo.response.VoteRateIndex > 0) && (!VoterRate.Contains(keyID))) { double rate = ConvertOper.Convert(Roster.Rows[i].Cells[GlobalInfo.response.VoteRateIndex].ToString()).ToDouble; totalWeight += rate; //杨斌 2018-05-22 if (rate < 0) rate = 0; //if (rate <= 0) rate = 1; VoterRate.Add(keyID, rate); } } } } catch (Exception ex) { SystemLog.WriterLog(ex, false); } } /// /// 改成public,停止时再调用一次刷新。杨斌 2015-03-30。 /// /// /// public void tmrRefresh_Tick(object sender, EventArgs e) { //tmrRefresh.Enabled = false;//屏蔽。杨斌 2018-12-25。修改:杨斌 2015-03-27 //杨斌 2018-12-14。注销下面代码 ////杨斌 2015-04-10 //if (businessStatus != ResponseStatus.bsStart) // return; RefreshPPTShowObjects();//杨斌 2018-04-20 //tmrRefresh.Enabled = true;//屏蔽。杨斌 2018-12-25。修改:杨斌 2015-03-27 } /// /// 刷新播放幻灯片的所有对象。杨斌 2018-04-20 /// public void RefreshPPTShowObjects() { RefreshLable(); //RefreshPollRank(); //ChartViewType chartViewType=EnumName.GetEnum(TagSet.GetValue(TagKey.ChartPara_ShowTime).Value); switch (chartViewType) { case ChartViewType.csStart: RefreshChart(); break; default: break; } if (showPicture) RefreshChart(); //实时计算分数。杨斌 2016-04-15 if (Globals.SunVoteARSAddIn.PPTShow.ResponseType == ResponseType.Score) { CaculateScore(Globals.SunVoteARSAddIn.PPTShow.SlideShow); } //杨斌 2015-03-27 if (Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar != null) { Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.frmVoteDetail.ChangeDataInitMap(); Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.frmVoteDetail.ReDrawMap(); } } /// /// 获取计时器时间 /// 创建:杨斌 2012-03-15 /// /// public int GetTimerCount() { int res = 0; try { string lblText = ""; List lstShape = PPTOper.GetDataLabelShape(CurrentSlide, DataLabelType.TIMER); foreach (PowerPoint.Shape shape in lstShape) { lblText = shape.TextFrame.TextRange.Text.Trim(); res = ConvertOper.TimeToSecond(lblText); break; } } catch (Exception ex) { SystemLog.WriterLog(ex, false); } return res; } void tmrTimer_Tick(object sender, EventArgs e) { string lblText = ""; string[] s; List lstShape = PPTOper.GetDataLabelShape(CurrentSlide, DataLabelType.TIMER); foreach (PowerPoint.Shape shape in lstShape) { lblText = shape.TextFrame.TextRange.Text.Trim(); lblText = GetTimerValue(lblText); s = lblText.Split(':'); //秒值 int sValue = ConvertOper.Convert(s[1]).ToInt; //分钟值 int mValue = ConvertOper.Convert(s[0]).ToInt; //时间到 if ((sValue == 0) && (mValue == 0)) { //反馈停止 //if (StopEvent != null) { StopEvent(); }//杨斌 2014-08-20 屏蔽 //杨斌 2014-11-05 if (Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.IsVoteStart) { Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.VoteStart(false); if (!Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.IsVoteStart && GlobalInfo.sysConfig.StopShowCorrectAsw)//杨斌 2019-09-03 { Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.tsbCorrectAnswer.Checked = true;//ShowCorrectAnswerButtonState(); } } if (GlobalInfo.sysConfig.IsAutoPageTimeOut) { //tmrRefresh.Enabled = false; //杨斌 2014-08-20 if ((!Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.tmrDelayVoteStart.Enabled) && (!Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.IsRunNextSlideEvent)) { Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.IsAutoPageTimeOut = true; Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.DelayVoteStart = GlobalInfo.sysConfig.AutoPageWaitTime; NextSlide = true; //NextSlideEvent();//用事件会发生意外的时序,乱。杨斌 2014-08-20 Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.response_NextSlideEvent(); } } return; } if (sValue == 0) { mValue = mValue - 1; sValue = 59; } else { sValue = sValue - 1; } s[1] = sValue.ToString().PadLeft(2, '0'); s[0] = mValue.ToString().PadLeft(2, '0'); shape.TextFrame.TextRange.Text = s[0] + ":" + s[1]; if (VoteServer.IsStart) Globals.SunVoteARSAddIn.PPTShow.SendSlideScreenTimer();//多地点刷新计时器。杨斌 2018-06-25 break; } } /// /// 转换时间值 /// /// /// internal static string GetTimerValue(string strValue) { if (strValue.IndexOf(":") == -1) { int t = ConvertOper.Convert(strValue).ToInt; string mm = (t / 60).ToString().PadLeft(2, '0'); string ss = (t % 60).ToString().PadLeft(2, '0'); strValue = mm + ":" + ss; } return strValue; } /// /// 清空反馈数据 /// 创建 赵丽 /// public void ClearResponse() { try { //初始化标签 InitLable(); //清空所有内存 ResponseDataList.Clear(); LstResponseData.Clear();//杨斌 2016-01-13 ResponseOptionList.Clear(); ResponseOptionListNoRate.Clear();//杨斌 2016-11-12 ResponseOptionListCount.Clear();//杨斌 2016-01-07 ResponseKeypadList.Clear(); //初始化选项个数列表(1-10) for (int i = 0; i < 10; i++) { ResponseOptionList.Add(i.ToString(), 0); ResponseOptionListNoRate.Add(i.ToString(), 0);//杨斌 2016-11-12 ResponseOptionListCount.Add(i.ToString(), 0);//杨斌 2016-01-07 } ClearScoreLable(); RefreshLable(); GlobalInfo.response.ShowPicture = true; RefreshChart(); Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.frmVoteDetail.ClearMapData(); } catch (Exception ex) { } //重新添加定时器标签 //清空所有标签 } /// /// 选项文本排序。停止时排序,开始或清除时恢复原来顺序。 /// 杨斌 2014-04-25 /// /// public void SetOrderOptionText(PowerPoint.Slide slide, bool isSort) { try { if (slide == null) return; TagSet tagSet = new TagSet(slide.Tags); ResponseType rType = EnumName.GetEnum(tagSet.GetValue(TagKey.ResponseType).Value.ToString()); if (rType != ResponseType.Order) return; int scoreMode = tagSet.GetValue(TagKey.Order_ScoreMode).ToInt; if (scoreMode != 1) return; if (isSort) { PowerPoint.Shape shaOpt = PPTOper.GetOptionTextLinkShape(slide); if (shaOpt != null) { string[] aryOpt = PPTOper.GetShapeOptionText(shaOpt); List lstNewOpt = new List(); string sortResult = ""; for (int i = 0; i < GlobalInfo.response.ListOrderScore.Count; i++) { OrderItem odItem = GlobalInfo.response.ListOrderScore[i]; if (i > 0) sortResult += ","; sortResult += odItem.No; if (aryOpt.Length >= odItem.No) lstNewOpt.Add(odItem.No + ". " + aryOpt[odItem.No - 1]); } tagSet.SetValue(TagKey.Order_SortResult, sortResult); shaOpt.TextFrame.TextRange.Paragraphs(-1, -1).ParagraphFormat.Bullet.Type = PowerPoint.PpBulletType.ppBulletNone; shaOpt.TextFrame.TextRange.Text = PPTOper.FormatShapeOptionText(lstNewOpt.ToArray()); } } else { PowerPoint.Shape shaOpt = PPTOper.GetOptionTextLinkShape(slide); if (shaOpt != null) { string sortResult = tagSet.GetValue(TagKey.Order_SortResult).Value; if (sortResult.Length > 0) { string[] arySort = sortResult.Split(new char[] { ',' }); if (arySort.Length > 0) { string[] aryOpt = PPTOper.GetShapeOptionText(shaOpt); List lstOldOpt = arySort.ToList(); for (int i = 0; i < arySort.Length; i++) { int n = ConvertOper.Convert(arySort[i]).ToInt - 1; if (aryOpt.Length > i) { string sNo = (n + 1) + "."; int m = aryOpt[i].IndexOf(sNo); if (m >= 0) lstOldOpt[n] = aryOpt[i].Substring(sNo.Length).TrimStart(new char[] { ' ' }); else lstOldOpt[n] = aryOpt[i]; } } tagSet.SetValue(TagKey.Order_SortResult, ""); PPTOper.SetShapeOptionText(shaOpt, PPTOper.FormatShapeOptionText(lstOldOpt.ToArray()), false); } } } } } catch (Exception ex) { SystemLog.WriterLog(ex); } } /// /// 清除评分标签 /// 杨斌 2015-07-28 /// public void ClearScoreLable() { foreach (PowerPoint.Shape shape in CurrentSlide.Shapes) { if ((shape.Name == "SUMSCORE") || (shape.Name == "AVGSCORE") || (shape.Name == "AVGScoreGroup")) { string lblText = shape.TextFrame.TextRange.Text.Trim(); string[] s = lblText.Split(':'); if (s.Length >= 2)//杨斌 2015-07-28 lblText = s[0].TrimEnd(' ') + " : " + "0";//杨斌 2019-06-06//lblText = s[0] + ":" + "0"; else lblText = "0"; shape.TextFrame.TextRange.Text = lblText; } if (shape.Name == "AVGScoreTableGroup") { try { if (shape.HasTable == Microsoft.Office.Core.MsoTriState.msoTrue) { //杨斌 2015-11-24 for (int i = 2; i <= shape.Table.Rows.Count; i++) { if (shape.Table.Columns.Count >= 3) shape.Table.Cell(i, 3).Shape.TextFrame.TextRange.Text = "0"; if (shape.Table.Columns.Count >= 4) shape.Table.Cell(i, 4).Shape.TextFrame.TextRange.Text = "0"; } } } catch (Exception ex) { SystemLog.WriterLog(ex); } } if (shape.Name == "AVGScoreTableGroupDetail") { try { if (shape.HasTable == Microsoft.Office.Core.MsoTriState.msoTrue) { //杨斌 2015-11-24 for (int i = 2; i <= shape.Table.Rows.Count; i++) { if (shape.Table.Columns.Count >= 3) shape.Table.Cell(i, 3).Shape.TextFrame.TextRange.Text = "0"; for (int col = 1; col <= shape.Table.Columns.Count; col++) shape.Table.Rows[i].Cells[col].Shape.Fill.Visible = Microsoft.Office.Core.MsoTriState.msoFalse; } } } catch (Exception ex) { SystemLog.WriterLog(ex); } } } } /// /// 用来保存做选择题时,数字选举按键模式的 /// Dictionary> DicChoicePoll = null; /// /// 启动MySDK。杨斌 2016-08-28 /// public void StartMySDK() { TagSet tagSet = new TagSet(Globals.SunVoteARSAddIn.PPTShow.SlideShow.Tags); Param e = new Param(); DicChoicePoll = null;//杨斌 2018-02-06 //SDK中0按字母,1按数字。杨斌 2016-11-16 int OptionsMode = tagSet.GetValue(TagKey.KeypadPara_OptionMode).ToInt == 0 ? 1 : 0; switch (Globals.SunVoteARSAddIn.PPTShow.ResponseType) { case ResponseType.SignIn: e.Pa.Add("StartVote", "SignIn"); //int SignInMode = tagSet.GetValue(TagKey.SignIn_Mode).ToInt > 0 ? 1 : 0;//杨斌 2017-03-30 int SignInMode = tagSet.GetValue(TagKey.SignIn_Mode).ToInt;//杨斌 2019-02-26 //日本的S50Plus支持签到模式5:数字+字母大小写+空格。杨斌 2019-03-05。需在签到面板增加选项“支持数字和字母大小写和空格” if ((SignInMode == 1) && (SystemConfig.KeypadType == "S50Plus")) SignInMode = 5; if (SignInMode == 2)//杨斌 2020-11-12 SignInMode = 1; e.Pa.Add("SignInMode", SignInMode); break; case ResponseType.Choice: int ChoicesCount = tagSet.GetValue(TagKey.Choice_OptionCount).ToInt; int ChoicesLimit = tagSet.GetValue(TagKey.Choice_OptionLimit).ToInt; if (ChoicesCount > GlobalInfo.MaxOptionCount)//超过10个选项做选举。杨斌 2018-02-02 { DicChoicePoll = new Dictionary>(); //if (ChoicesLimit > 1) //{ e.Pa.Add("StartVote", "Election"); e.Pa.Add("ElectionSelects", ChoicesLimit); //} //else //{ // e.Pa.Add("StartVote", "Number"); // e.Pa.Add("NumberMode", 0); //} //杨斌 2018-12-26。M52Li只支持分段式选举模式 int UIMode = 4; switch (SystemConfig.KeypadType) { case "M52Li": UIMode = 7; break; } if (UIMode == 7) { e.Pa.Add("UIMode", UIMode);//4=数字编号,7=分段式。杨斌 2018-09-29 int MinSelects = (tagSet.GetValue(TagKey.Choice_IisN).ToInt == 1) ? ChoicesLimit : 1; e.Pa.Add("MinSelects", MinSelects);//最少可选。 e.Pa.Add("DuplicateOptions", 1);//0=允许重复,1=不允许重复。 //选举编号分段范围。杨斌 2018-12-26 e.Pa.Add("LimitNumber1Min", 1); e.Pa.Add("LimitNumber1Max", ChoicesCount); e.Pa.Add("LimitNumber2Min", 65535); e.Pa.Add("LimitNumber2Max", 65535); e.Pa.Add("LimitNumber3Min", 65535); e.Pa.Add("LimitNumber3Max", 65535); } if (UIMode == 4)//杨斌 2020-05-25 { e.Pa.Add("NumberOptions", ChoicesCount); //杨斌 2020-06-16 e.Pa.Add("ItemStartID", 1); e.Pa.Add("ItemEndID", ChoicesCount); } } else { //杨斌 2019-12-06。国防科大定制6级评议,单选题使用名单式选举模式进行分组。名单下载点击调用ToolKit下载 if ((SystemConfig.KeypadType == "E11") && (ChoicesLimit == 1)) { DicChoicePoll = new Dictionary>(); e.Pa.Add("StartVote", "Election"); e.Pa.Add("UIMode", 1);//UI模式1=名单式选举 e.Pa.Add("ElectionSelects", 1);//可选人数,选出人数 e.Pa.Add("MinSelects", 1);//最小可选,硬件无效果 } else { e.Pa.Add("StartVote", "Choices"); int ChoicesLessEnabled = tagSet.GetValue(TagKey.Choice_IisN).ToInt; e.Pa.Add("ChoicesCount", ChoicesCount); e.Pa.Add("ChoicesLimit", ChoicesLimit); e.Pa.Add("OptionsMode", OptionsMode); e.Pa.Add("ChoicesLessEnabled", ChoicesLessEnabled); } } break; case ResponseType.Group://杨斌 2018-05-17 int GroupCount = tagSet.GetValue(TagKey.Group_OptionCount).ToInt; if (GroupCount > GlobalInfo.MaxOptionCount)//超过10个选项用数字模式。杨斌 2018-02-02 { DicChoicePoll = new Dictionary>(); e.Pa.Add("StartVote", "Number"); e.Pa.Add("NumberMode", 0); } else { e.Pa.Add("StartVote", "Choices"); e.Pa.Add("ChoicesCount", GroupCount); e.Pa.Add("ChoicesLimit", 1); e.Pa.Add("OptionsMode", OptionsMode); e.Pa.Add("ChoicesLessEnabled", 0); } break; case ResponseType.Judge: switch (SystemConfig.KeypadType) { case "M30": case "S52Plus": case "M5"://杨斌 2020-06-22。M5=S52Plus升级版增加(CommitOK==1)判断 case "Interact+"://"Interact+"=="S52Plus",杨斌 2020-08-24 case "Interact++"://"Interact++"=="M5",杨斌 2020-08-24 case "M00": case "S60"://杨斌 2017-08-22 case "S53"://杨斌 2019-03-25 case "SHV52plus"://杨斌 2020-07-28,SHV52plus即S53 case "SHV52Plus"://杨斌 2020-07-28,SHV52plus即S53 case "M52Li"://杨斌 2020-05-06 case "G1"://杨斌 2020-05-06 e.Pa.Add("StartVote", "TrueFalse");//支持判断键 e.Pa.Add("TrueFalseMode", 1); break; default: e.Pa.Add("StartVote", "Choices"); e.Pa.Add("ChoicesCount", 2); e.Pa.Add("ChoicesLimit", 1); e.Pa.Add("OptionsMode", OptionsMode); e.Pa.Add("ChoicesLessEnabled", 0); break; } break; case ResponseType.Order: e.Pa.Add("StartVote", "Sequence"); int OrderCount = tagSet.GetValue(TagKey.Order_OptionCount).ToInt; int OrderLimit = tagSet.GetValue(TagKey.Order_OptionLimit).ToInt; int IisN = TagSet.GetValue(TagKey.Order_IisN).ToInt; int AABB = TagSet.GetValue(TagKey.Order_AABB).ToInt; e.Pa.Add("OrderCount", OrderCount); e.Pa.Add("OrderLimit", OrderLimit); e.Pa.Add("OptionsMode", OptionsMode); if (AABB == 1) { e.Pa.Add("SequenceLessEnabled", 2); } else { if (IisN == 1) e.Pa.Add("SequenceLessEnabled", 1); else e.Pa.Add("SequenceLessEnabled", 0); } break; case ResponseType.Number: e.Pa.Add("StartVote", "Number"); e.Pa.Add("NumberMode", 0); break; case ResponseType.Poll: int isMulti = tagSet.GetValue(TagKey.Poll_Multi).ToInt; //去掉多次提交功能。杨斌 2017-09-30 ////PowerVote的定制选举,多个采用多次提交。杨斌 2017-06-12 //if ((GlobalInfo.OEMLogo == OEMLogos.oemPowerVote) && (GlobalInfo.OEMLogo2 == OEMLogos2.SunVote)) // isMulti = 0; //判断选举模式:数字or分段式选举 int UseModeLimitNumber = tagSet.GetValue(TagKey.Poll_UseModeLimitNumber).ToInt; switch (SystemConfig.KeypadType) { case "M52Li"://刘红英说:以后M52Li和其他键盘不再支持数字选举模式。杨斌 2018-12-27 if (UseModeLimitNumber != 1) { UseModeLimitNumber = 1; tagSet.SetValue(TagKey.Poll_UseModeLimitNumber, UseModeLimitNumber); } break; } if ((isMulti == 1) || (UseModeLimitNumber == 1))//杨斌 2018-12-27 { DicChoicePoll = new Dictionary>();//杨斌 2020-06-12 e.Pa.Add("StartVote", "Election"); e.Pa.Add("ElectionSelects", tagSet.GetValue(TagKey.Poll_EffectiveVotes).ToInt);//数字选举可选数 int UIMode = (UseModeLimitNumber == 1) ? 7 : 4; e.Pa.Add("UIMode", UIMode);//4=数字编号,7=分段式。杨斌 2018-09-29 if (UIMode == 7) { int MinSelects = tagSet.GetValue(TagKey.Poll_MinSelects).ToInt; int DuplicateOptions = tagSet.GetValue(TagKey.Poll_CanRepeat).ToInt; int LimitRange2Enabled = tagSet.GetValue(TagKey.Poll_LimitRange2Enabled).ToInt; int LimitRange3Enabled = tagSet.GetValue(TagKey.Poll_LimitRange3Enabled).ToInt; string range1 = tagSet.GetValue(TagKey.Poll_LimitRange1).Value; string range2 = tagSet.GetValue(TagKey.Poll_LimitRange2).Value; string range3 = tagSet.GetValue(TagKey.Poll_LimitRange3).Value; e.Pa.Add("MinSelects", MinSelects);//最少可选。杨斌 2018-09-29 e.Pa.Add("DuplicateOptions", DuplicateOptions);//0=允许重复,1=不允许重复。杨斌 2018-09-29 int LimitNumber1Min = 0; int LimitNumber1Max = 0; int LimitNumber2Min = 0; int LimitNumber2Max = 0; int LimitNumber3Min = 0; int LimitNumber3Max = 0; GetRangeNum(range1, 1, out LimitNumber1Min, out LimitNumber1Max); GetRangeNum(range2, LimitRange2Enabled, out LimitNumber2Min, out LimitNumber2Max); GetRangeNum(range3, LimitRange3Enabled, out LimitNumber3Min, out LimitNumber3Max); //选举编号分段范围。杨斌 2018-09-29 e.Pa.Add("LimitNumber1Min", LimitNumber1Min); e.Pa.Add("LimitNumber1Max", LimitNumber1Max); e.Pa.Add("LimitNumber2Min", LimitNumber2Min); e.Pa.Add("LimitNumber2Max", LimitNumber2Max); e.Pa.Add("LimitNumber3Min", LimitNumber3Min); e.Pa.Add("LimitNumber3Max", LimitNumber3Max); } if (UIMode == 4)//杨斌 2020-06-16 { e.Pa.Add("NumberOptions", CandidateInfoList.Count); //杨斌 2020-06-16 List lstNum = new List(); foreach (var v in CandidateInfoList) { int num = ConvertOper.Convert(v.Value.CandidateID).ToInt; if (num > 0) lstNum.Add(num); } int minNum = lstNum.Min(); int maxNum = lstNum.Max(); e.Pa.Add("ItemStartID", minNum); e.Pa.Add("ItemEndID", maxNum); } } else { e.Pa.Add("StartVote", "Number"); e.Pa.Add("NumberMode", 0); } break; case ResponseType.Score: e.Pa.Add("StartVote", "Number"); e.Pa.Add("NumberMode", 0); break; case ResponseType.Text: e.Pa.Add("StartVote", "Cloze"); //GlobalInfo.SDK.Cloze.ClozeType = 0; //GlobalInfo.SDK.Cloze.MaxLength = 16; //GlobalInfo.SDK.Cloze.PromptMode = 0; //GlobalInfo.SDK.Cloze.CorrectAnswer = ""; break; case ResponseType.Vote: int VoteCount = tagSet.GetValue(TagKey.Vote_OptionCount).ToInt; switch (SystemConfig.KeypadType) { case "M30": case "S52Plus": case "M5"://杨斌 2020-06-22。M5=S52Plus升级版增加(CommitOK==1)判断 case "Interact+"://"Interact+"=="S52Plus",杨斌 2020-08-24 case "Interact++"://"Interact++"=="M5",杨斌 2020-08-24 case "M00": case "W00"://杨斌 2018-06-04 case "S53"://杨斌 2019-03-25 case "SHV52plus"://杨斌 2020-07-28,日本Votingeyes的SHV52plus=S53 case "SHV52Plus"://杨斌 2020-07-28,日本Votingeyes的SHV52plus=S53 case "M52Li"://杨斌 2020-04-30 case "G1"://杨斌 2020-05-06 e.Pa.Add("StartVote", "Vote");//支持表决键 e.Pa.Add("VoteMode", VoteCount == 2 ? 1 : 0); break; default: e.Pa.Add("StartVote", "Choices"); //int VoteOptionsMode = tagSet.GetValue(TagKey.KeypadPara_OptionMode).ToInt; e.Pa.Add("ChoicesCount", VoteCount); e.Pa.Add("ChoicesLimit", 1); e.Pa.Add("OptionsMode", OptionsMode); e.Pa.Add("ChoicesLessEnabled", 0); break; } break; case ResponseType.Grade: //杨斌 2019-02-26。国防科大定制6级评议,使用表决的按键模式2。其他功能均不支持 if (SystemConfig.KeypadType == "E11") { e.Pa.Add("StartVote", "Vote"); e.Pa.Add("VoteMode", 2); } else { e.Pa.Add("StartVote", "Choices"); int GradeCount = tagSet.GetValue(TagKey.Grade_OptionCount).ToInt; //int GradeOptionsMode = tagSet.GetValue(TagKey.KeypadPara_OptionMode).ToInt; e.Pa.Add("ChoicesCount", GradeCount); e.Pa.Add("ChoicesLimit", 1); e.Pa.Add("OptionsMode", OptionsMode); e.Pa.Add("ChoicesLessEnabled", 0); } break; } int VoteModifyMode = tagSet.GetValue(TagKey.KeypadPara_ModifyMode).ToInt == 1 ? 0 : 1; int VoteSecrecyMode = tagSet.GetValue(TagKey.KeypadPara_SecrecyMode).ToInt; e.Pa.Add("VoteModifyMode", VoteModifyMode); e.Pa.Add("VoteSecrecyMode", VoteSecrecyMode); if (VoteServer.IsStart)//杨斌 2017-12-11 { SendMeetVoteSDK(e); } else { GlobalInfo.ServerRequest(e); } } private void GetRangeNum(string range, int enabled, out int numStart, out int numEnd) { numStart = 1; numEnd = 65535; try { if (enabled == 1) { var ary = range.Split('-'); if (ary.Length >= 2) { numStart = ConvertOper.Convert(ary[0]).ToInt; numEnd = ConvertOper.Convert(ary[1]).ToInt; } } else { numStart = 65535; numEnd = 65535; } } catch (Exception ex) { SystemLog.WriterLog(ex); } } /// /// 停止MySDK。杨斌 2016-08-28 /// public void StopMySDK() { //GlobalInfo.SDK.VoteStart = false; Param e = new Param(); e.Pa.Add("StartVote", "Stop"); if (VoteServer.IsStart)//杨斌 2017-12-11 { SendMeetVoteSDK(e); } else { Param p = GlobalInfo.ServerRequest(e); } } void SendMeetVoteSDK(Param e) { Dictionary dicSend = new Dictionary(); int itemCount = PPTOper.GetVoteChartItemCount(Globals.SunVoteARSAddIn.PPTShow.SlideShow); dicSend.Add("ItemCount", itemCount); foreach (var v in e.Pa) { dicSend.Add(v.Key, v.Value); } VoteServer.SendMsg(dicSend); } /// /// 杨斌 2018-12-14 /// void SendVoteAck(ResponsePar resPar) { Dictionary dicSend = new Dictionary(); dicSend.Add("SendVoteAck", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); dicSend.Add("KeyID", resPar.KeyID); dicSend.Add("KeyValue", resPar.KeyValue); dicSend.Add("Speed", resPar.Speed); dicSend.Add("Time", resPar.Time); VoteServer.SendMsg(dicSend); } public bool IsStartRunshAnswer = false; /// /// 启动抢答 /// 杨斌 2013-12-24 /// public void RushAnswerStart() { ResponseType responseType = Globals.SunVoteARSAddIn.PPTShow.ResponseType; Busines = new ARSRushAnswer(); //ARSRushAnswer.KeyModel = GlobalInfo.hardwareManage.KeyModel; Busines.TagSet = TagSet; Busines.BaseConnection = GlobalInfo.baseConnect.baseConnection; Busines.ResponseType = responseType; //Busines.Keypad = GlobalInfo.hardwareManage.KeyModel; //Busines.IniBusiness(); //if (GlobalInfo.GetSdkType() == 0)//杨斌 2016-10-26 //{ Param e = new Param(); e.Pa.Add("StartVote", "RushAnswer"); GlobalInfo.ServerRequest(e); //} //else //{ // Busines.ResponseEventHander -= Busines_ResponseEventHander; // Busines.ResponseEventHander += Busines_ResponseEventHander;//杨斌 2016-10-26 // Busines.Start(); //} IsStartRunshAnswer = true; } /// /// 停止抢答 /// 杨斌 2013-12-24 /// public void RushAnswerStop() { IsStartRunshAnswer = false; //if (GlobalInfo.GetSdkType() == 0)//杨斌 2016-10-26 //{ Param e = new Param(); e.Pa.Add("StartVote", "Stop"); GlobalInfo.ServerRequest(e); //} //else //{ // if (Busines != null) // { // Busines.Stop(); // Busines.ResponseEventHander -= Busines_ResponseEventHander;//杨斌 2016-10-26 // } // Busines = null; //} } /// /// 签到模式 /// 杨斌 2013-01-24 /// public int SignInMode = 0; /// /// 初始化应用 /// private void InitBusines() { ResponseType responseType = Globals.SunVoteARSAddIn.PPTShow.ResponseType; //选择应用 Busines = null; //杨斌 2017-04-19 //if ((GlobalInfo.hardwareManage.GetConnectBaseNum() > 0) && (!GlobalInfo.sysConfig.DemoEnable)) if (!GlobalInfo.sysConfig.DemoEnable) { switch (responseType) { case ResponseType.None: case ResponseType.Slide: return; break; case ResponseType.Choice: Busines = new ARSChoise(); break; case ResponseType.SignIn: //2012-06-18 添加签到码签到功能 SignInMode = TagSet.GetValue(TagKey.SignIn_Mode).ToInt;//杨斌 2013-01-24 if (SignInMode == 0)//杨斌 2017-03-30 Busines = new ARSSignIn(); else { //杨斌 由于S70不能修改签到码,所以暂时用数值模式。 2015-04-28 //同样问题,S50、S56 //if (GlobalInfo.hardwareManage.KeyModel == "S70") // Busines = new ARSSignIn(true); //else Busines = new ARSScore(); } break; case ResponseType.Group: Busines = new ARSChoise(); break; case ResponseType.Judge: //ARSChoise choiseJudge = new ARSChoise(); //choiseJudge.Choise.Options = 2; //choiseJudge.Choise.OptionalN = 1; //Busines = choiseJudge; Busines = new ARSChoise(); break; case ResponseType.Vote: //ARSChoise choiseVote = new ARSChoise(); //choiseVote.Choise.Options = 3; //choiseVote.Choise.OptionalN = 1; //Busines = choiseVote; Busines = new ARSChoise(); break; case ResponseType.Grade: //ARSChoise choiseGrade = new ARSChoise(); //choiseGrade.Choise.OptionalN = 1; //Busines = choiseGrade; Busines = new ARSChoise(); break; case ResponseType.Score: Busines = new ARSScore(); break; case ResponseType.Number: Busines = new ARSScore(); break; case ResponseType.Text: Busines = new ARSText(); break; case ResponseType.Order: Busines = new ARSSequence(); break; case ResponseType.Poll: LoadCandidateList();//必须在new ARSElection()前面初始化。杨斌 2016-04-26 //杨斌 2016-04-26 //if ((GlobalInfo.OEMLogo2 == OEMLogos2.oemSunVoteMultiPoll) && PanelPoll.IsMultiPollKeypad()) //杨斌 2017-02-13 if (PanelPoll.IsUseMultiPoll(Globals.SunVoteARSAddIn.PPTShow.SlideShow) && PanelPoll.IsMultiPollKeypad()) Busines = new ARSElection(); else Busines = new ARSScore(); break; default: break; } } else { Busines = new Demo(); //初始化演示模式键盘 if (IsAllPerson) { //杨斌 2016-12-05 List ls = FrmImportSlideSelect.GetNumRange(GlobalInfo.hardwareManage.RangeOfKey); if (ls.Count > 0) { int cnt = GlobalInfo.hardwareManage.PersonNum; if (ls.Count < cnt) cnt = ls.Count; Demo.Keypads = new string[cnt]; for (int i = 0; i < cnt; i++) { Demo.Keypads[i] = ls[i].ToString(); } } else { Demo.Keypads = new string[GlobalInfo.hardwareManage.PersonNum]; for (int i = 0; i < GlobalInfo.hardwareManage.PersonNum; i++) { Demo.Keypads[i] = (i + 1).ToString(); } } } else { Demo.Keypads = AuthorKeypadList.Values.ToArray(); } if (responseType == ResponseType.Poll) { string[] pollList = CandidateInfoList.Keys.ToArray(); Demo.PollList = new Dictionary(pollList.Length); for (int i = 0; i < pollList.Length; i++) { Demo.PollList.Add(i.ToString(), pollList[i]); } } ////2012-06-19 赵丽 添加签到码签到的演示模式 //if ((responseType == ResponseType.SignIn) && (TagSet.GetValue(TagKey.SignIn_Mode).ToInt == 1)) //{ //} } Busines.TagSet = TagSet; Busines.BaseConnection = GlobalInfo.baseConnect.baseConnection; Busines.ResponseType = responseType; Busines.ResponseEventHander += new ResponseEventHander(Busines_ResponseEventHander); chartViewType = EnumName.GetEnum(TagSet.GetValue(TagKey.ChartPara_ShowTime).Value); //杨斌 2015-04-10 SlideBackMusic = TagSet.GetValue(TagKey.ResponsePara_SlideBackMusic).Value; GlobalInfo.DXSoundPlay.RemoveSound(GlobalInfo.Sund_Key_BackSlide); string pathSound = GlobalInfo.SOUND_DIR + SlideBackMusic; if (File.Exists(pathSound)) GlobalInfo.DXSoundPlay.LoadSound(GlobalInfo.Sund_Key_BackSlide, pathSound); } /// /// 当前名单,Slide初始化时加载 /// 杨斌 2014-06-11 /// RosterList RosterNow = new RosterList(); /// /// 评委权重 /// 杨斌 2014-06-11 /// Dictionary DicJudgeRage = new Dictionary(); /// /// 初始化应用业务 /// 根据幻灯片类型 选择应用业务 /// 创建 赵丽 /// public void InitResponse() { //杨斌 2014-06-11 RosterNow.LoadRoster(); LoadJudgeRage(); //加载授权键盘列表 LoadAuthorKeypadList(); //加载反馈数据 LoadResponseData(); //刷新标签 //RefreshLable();//放在PPTShow文件的(InitMap加载坐席图数据)后面刷新。杨斌 2013-02-26 } /// /// 初始化应用业务数据。杨斌 2017-08-07 /// public void InitResponse2() { RosterNow.LoadRoster(); LoadAuthorKeypadList(); LoadResponseData(); } /// /// 加载评委权重 /// 杨斌 2014-06-11 /// private void LoadJudgeRage() { try { DicJudgeRage.Clear(); TagSet tagSet = new TagSet(CurrentSlide.Tags); string sJudgeRage = tagSet.LoadValue(TagKey.Score_JudgeRage, "").Value; int RateCol = -1; if (sJudgeRage.Length > 0) { for (int i = 0; i < RosterNow.Columns.Count; i++) { if (RosterNow.Columns[i].ColumnName == sJudgeRage) { RateCol = i; break; } } for (int i = 0; i < RosterNow.Rows.Count; i++) { string key = RosterNow.Rows[i].Cells[RosterNow.KeypadIdColumnIndex].ToString(); double rate = 1; if (RosterNow.RosterEnabled && (RateCol != -1))//杨斌 2014-07-28 { rate = ConvertOper.Convert(RosterNow.Rows[i].Cells[RateCol].ToString()).ToDouble; //杨斌 2018-05-22 if (rate < 0) rate = 0; //if (rate <= 0) // rate = 1; if (!DicJudgeRage.ContainsKey(key)) DicJudgeRage.Add(key, rate); } else//杨斌 2014-07-28 if (!DicJudgeRage.ContainsKey(key)) DicJudgeRage.Add(key, 1); //double rate = ConvertOper.Convert(RosterNow.Rows[i].Cells[RateCol].ToString()).ToDouble; //if (rate < 0) // rate = 0; //if (!DicJudgeRage.ContainsKey(key)) // DicJudgeRage.Add(key, rate); } } } catch (Exception ex) { SystemLog.WriterLog(ex); } } /// /// 隐藏图片 /// 创建 赵丽 /// public void HidePicture() { if (CurrentSlide == null) { return; } if ((chartViewType != ChartViewType.csStart) && (showPicture == false)) { //隐藏图片 foreach (PowerPoint.Shape s in CurrentSlide.Shapes) { if (s.Name == "pic") s.Visible = Microsoft.Office.Core.MsoTriState.msoFalse; } } } /// /// 若选择题则必须从"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(); } else//杨斌 2012-10-22 { if (res.Length > 0) res = res + ","; res = res + chr.ToString(); } } catch (Exception ex) { } } } catch (Exception ex) { res = result; } return res; } ///// ///// 杨斌 2016-08-28 ///// ///// //public void SDK_OnKeyVoteEvt(KeyData data) //{ // ResponsePar ObjResponseValue = new ResponsePar(); // ObjResponseValue.BaseTag = ""; // ObjResponseValue.KeyID = data.KeyID; // ObjResponseValue.KeyValue = data.KeyValue; // ObjResponseValue.Speed = data.Speed; // Busines_ResponseEventHander(ObjResponseValue); //} public void GetKeyPress() { if (VoteServer.IsStart)//由网络代收。杨斌 2017-12-11 return; Param p = new Param(); p.Pa.Add("GetKeyPress", ""); Param r = GlobalInfo.ServerRequest(p); TagSet tagSet = new TagSet(Globals.SunVoteARSAddIn.PPTShow.SlideShow.Tags);//杨斌 2020-05-25 if (r.Pa.ContainsKey("GetKeyPress")) { Dictionary dic = MyService.DeserializeObj>(r.Pa["GetKeyPress"].ToString()); foreach (var v in dic) { ResponsePar pa = new ResponsePar(); //杨斌 2018-02-06 if (DicChoicePoll == null) { pa.KeyID = v.Value.KeyID; pa.KeyValue = v.Value.KeyValue; pa.Speed = v.Value.Speed; //pa.CommitOK = v.Value.CommitOK; Busines_ResponseEventHander(pa); } else//CommitOK=1,KeyValue=1=11 { //string[] a = v.Value.KeyValue.Split('='); //杨斌 2018-12-26 var bb = v.Value.KeyValue.Split(','); foreach (var b in bb)//杨斌 2020-06-17 { string[] a = null; if (b.IndexOf("-") > 0) a = b.Split('-');//分段式选举:"01-5" else if (b.IndexOf("=") > 0)//杨斌 2020-06-22 a = b.Split('=');//数字选举:"1=5"。"1=1,1025=0"是什么鬼?杨斌 2019-12-09 else a = b.Split('\0');//杨斌 2020-06-22。只能呵呵 //if (v.Value.KeyValue.IndexOf("-") > 0) // a = v.Value.KeyValue.Split('-');//分段式选举:"01-5" //else // a = v.Value.KeyValue.Split('=');//数字选举:"1=5"。"1=1,1025=0"是什么鬼?杨斌 2019-12-09 //if (Globals.SunVoteARSAddIn.PPTShow.ResponseType == ResponseType.Poll)//杨斌 2020-06-12 //{ // int MaxSelects = TagSet.GetValue(TagKey.Poll_EffectiveVotes).ToInt; // int MinSelects = TagSet.GetValue(TagKey.Poll_MinSelects).ToInt; // if (!DicChoicePoll.ContainsKey(v.Value.KeyID)) // DicChoicePoll.Add(v.Value.KeyID, new List()); //} //else { if (a.Length >= 2)//数字选举模式 { //杨斌 2020-06-15 int MaxSelects = 0;//最大可选 int MinSelects = 0;//最小可选 //需从选举名单计算选项最小最大值。S52和M52Li。2020-06-16 //杨斌 2020-05-25 int ChoicesCount = tagSet.GetValue(TagKey.Choice_OptionCount).ToInt; //int ChoicesLimit = tagSet.GetValue(TagKey.Choice_OptionLimit).ToInt; //int ChoicesLessEnabled = tagSet.GetValue(TagKey.Choice_IisN).ToInt; int maxOption = GlobalInfo.MaxOptionCountAdv; if (Globals.SunVoteARSAddIn.PPTShow.ResponseType == ResponseType.Choice) { maxOption = ChoicesCount; } int selIndex = ConvertOper.Convert(a[0]).ToInt - 1; int selNo = ConvertOper.Convert(a[1]).ToInt; string strSelNo = a[1]; string option = ""; if (a[1].IndexOf(',') > 0)//杨斌 2019-12-09。兼容"1=1,1025=0"按键值 { var aa = a[1].Split(','); selNo = ConvertOper.Convert(aa[0]).ToInt; strSelNo = aa[0]; } //杨斌 2020-06-15。判断按键值有效性 bool judgeValue = false; //杨斌 2020-06-22 bool isOK = true; List lstKeypadType = new List { "G1", "M5", "Interact++" };//支持CommitOK==1判断,定制版的Interact++==M5。杨斌 2020-08-14 if (lstKeypadType.Contains(SystemConfig.KeypadType)) isOK = (v.Value.CommitOK == 1); if (Globals.SunVoteARSAddIn.PPTShow.ResponseType == ResponseType.Poll) { option = strSelNo; judgeValue = true;//CandidateInfoList.ContainsKey(strSelNo); MaxSelects = TagSet.GetValue(TagKey.Poll_EffectiveVotes).ToInt; MinSelects = TagSet.GetValue(TagKey.Poll_MinSelects).ToInt; } else { isOK = true; option = (char)(selNo + 64) + ""; judgeValue = (selNo >= 1) && (selNo <= maxOption); MaxSelects = tagSet.GetValue(TagKey.Choice_OptionLimit).ToInt; int ChoicesLessEnabled = tagSet.GetValue(TagKey.Choice_IisN).ToInt; if (ChoicesLessEnabled == 1) MinSelects = MaxSelects; } //if ((selNo >= 1) && (selNo <= maxOption))//杨斌 2018-10-16 if (judgeValue)//杨斌 2020-06-15 { if (!DicChoicePoll.ContainsKey(v.Value.KeyID)) DicChoicePoll.Add(v.Value.KeyID, new List()); List ls = DicChoicePoll[v.Value.KeyID]; if (Globals.SunVoteARSAddIn.PPTShow.ResponseType != ResponseType.Poll) { if (!ls.Contains(option)) { for (int i = ls.Count; i <= selIndex; i++) ls.Add(""); ls[selIndex] = option; } } else { for (int i = ls.Count; i <= selIndex; i++) ls.Add(""); if (selIndex >= 0)//杨斌 2020-06-22 ls[selIndex] = option; } pa.KeyID = v.Value.KeyID; bool isValueOK = false; if (isOK) { if (MaxSelects > 1) { if (ls.Count >= MinSelects) isValueOK = true; } else { isValueOK = true; } } if (isValueOK) { if (Globals.SunVoteARSAddIn.PPTShow.ResponseType == ResponseType.Poll) { for (int m = 0; m < ls.Count; m++) { pa.KeyValue = (m + 1) + "=" + ls[m]; pa.Speed = v.Value.Speed; //pa.CommitOK = v.Value.CommitOK; Busines_ResponseEventHander(pa); } } else { pa.KeyValue = string.Join("", ls); pa.Speed = v.Value.Speed; //pa.CommitOK = v.Value.CommitOK; Busines_ResponseEventHander(pa); } } //if ((ChoicesLessEnabled == 1) && (ChoicesLimit > 1))//杨斌 2020-05-25 //{ // if (ls.Count == ChoicesLimit) // { // Busines_ResponseEventHander(pa); // } //} //else //{ // Busines_ResponseEventHander(pa); //} } } else if (a.Length >= 1)//数字模式。杨斌 2018-05-17 { int selNo = ConvertOper.Convert(a[0]).ToInt; if ((selNo >= 1) && (selNo <= GlobalInfo.MaxOptionCountAdv))//杨斌 2018-10-16 { string option = (char)(selNo + 64) + ""; pa.KeyID = v.Value.KeyID; pa.KeyValue = option; pa.Speed = v.Value.Speed; //pa.CommitOK = v.Value.CommitOK; Busines_ResponseEventHander(pa); } } } } } } } } /// /// 提交后是否可修改:0=可修改,1=不可修改 /// 杨斌 2016-01-18 /// public int ModifyMode = 0; /// /// 检测是否按键重复提交。杨斌 2015-06-25 /// List LstResponseCheck = new List(); /// /// 存储每个键盘多次按键值。ResponseDataList存储的是每个键盘最新按键 /// 杨斌 2015-06-26 /// public List LstResponseData = new List(); /// /// 键盘状态事件 /// 创建 赵丽 /// 修改:杨斌 2012-03-14 /// 修改:杨斌 2012-04-11 改成public,方便外部模拟调用 /// /// public void Busines_ResponseEventHander(ResponsePar ObjResponsePar) { //停止反馈或抢答后不接受数据,抢答没有使用BusinessStatus状态。杨斌 2018-05-30 if ((BusinessStatus != ResponseStatus.bsStart) && !IsStartRunshAnswer)//停止反馈后不再接收数据。杨斌 2018-04-20 { RefreshChart();//刷新图表。杨斌 2018-12-14 return; } //杨斌 2018-12-14 ResponsePar par = new ResponsePar(); par.BaseTag = ObjResponsePar.BaseTag; par.KeyID = ObjResponsePar.KeyID; par.KeyValue = ObjResponsePar.KeyValue; par.Score = ObjResponsePar.Score; par.Correct = ObjResponsePar.Correct; par.Time = ObjResponsePar.Time; par.Speed = ObjResponsePar.Speed; Stopwatch t = Stopwatch.StartNew(); string ss = ""; //杨斌 2017-08-07 Microsoft.Office.Interop.PowerPoint.Slide SlideNow = null; ResponseType ResponseTypeNow = ResponseType.None; if (Globals.SunVoteARSAddIn.PPTShow.IsShowSlide) { SlideNow = Globals.SunVoteARSAddIn.PPTShow.SlideShow; ResponseTypeNow = Globals.SunVoteARSAddIn.PPTShow.ResponseType; } else { SlideNow = Globals.SunVoteARSAddIn.PPTEdit.SlideEdit; ResponseTypeNow = Globals.SunVoteARSAddIn.PPTEdit.ResponseTypeSlideEdit; } //表决等没有速度,不能用这种方式验证。杨斌 2015-07-07 ////防止键盘重复提交按键。杨斌 2015-06-25 //string sResKey = ObjResponsePar.KeyID + "_" + ObjResponsePar.KeyValue + "_" + ObjResponsePar.Speed; //if (LstResponseCheck.Contains(sResKey)) // return; //else // LstResponseCheck.Add(sResKey); //是否限制键盘个数提交数据。杨斌 2012-11-05 if (GlobalInfo.LIMITED_EDITION > 0) { if (ResponseDataList.Count >= GlobalInfo.LIMITED_EDITION) return; } //进行某些操作时,投票无效 如:键盘替换 if (IsAnOtherOper) { return; } ResponseType responseType = ResponseTypeNow; string keyValue = ObjResponsePar.KeyValue; double score = 0; //杨斌 2017-08-07 FrmRushAnswer frmRushAnswer = null; FrmVoteBar frmVoteBar = Globals.SunVoteARSAddIn.frmVoteBar; if (frmVoteBar != null)//杨斌 2017-08-07 { frmRushAnswer = frmVoteBar.frmRushAnswer; if (frmVoteBar.isRushAnswer) { if (frmRushAnswer != null) { frmRushAnswer.ShowRushAnswer(ObjResponsePar); //if (!frmRushAnswer.CanPressQD) return;//杨斌 2011-08-18 //frmRushAnswer.StopRushAnswer(); //string keyIdOrName = ""; //if (!string.IsNullOrEmpty(MemberList.RushAnswer)) //{ // keyIdOrName = MemberList.GetRushAnswerShow(MemberList.RushAnswer, ObjResponsePar.KeyID.ToString()); //} //if (string.IsNullOrEmpty(keyIdOrName) == true) //{ // keyIdOrName = ObjResponsePar.KeyID.ToString(); // string temp = GlobalInfo.LPT.ReadString("FrmRushAnswer", "lblMsg2", "请-号键盘作答!"); // temp = temp.Replace("-", keyIdOrName); // frmRushAnswer.lblMsg.Text = temp; //} //else //{ // string temp = GlobalInfo.LPT.ReadString("FrmRushAnswer", "lblMsg3", "请-作答!"); // temp = temp.Replace("-", keyIdOrName); // frmRushAnswer.lblMsg.Text = temp; //} ////杨斌 2011-08-18 抢答后授权引起签到图表数据错误 //if (Globals.SunVoteARSAddIn.ShowCurrBaseTagsModel.ResponseType != 0) //{ // if (VotingService.ResponseData.Count == 0)//杨斌 2011-08-18 // { // //授权 // VotingService.AuthorizeKeypad.Clear(); // VotingService.AuthorizeKeypad.Add((int)KeypadResponseEventParam.KeypadID); // } //} } return; } } if (frmRushAnswer != null)//杨斌 2015-04-29 { if (frmRushAnswer.IsRun) return; } if (ModifyMode == 1)//不允许修改,软件屏蔽。杨斌 2016-01-18 { string sID = ObjResponsePar.KeyID; if (GlobalInfo.response.ResponseDataList.Contains(sID)) { //如果是选举模式多选,不允许修改,硬件屏蔽。杨斌 2019-03-15 if ((responseType == ResponseType.Poll) && (PanelPoll.IsUseMultiPoll(SlideNow) && PanelPoll.IsMultiPollKeypad())) { } else { if (!string.IsNullOrEmpty(GlobalInfo.response.ResponseDataList[sID].KeyValue)) return; } } } ss += t.ElapsedMilliseconds + " "; t.Restart(); //评分判断数据 if (responseType == ResponseType.Score) { if (!JudgeScoreValue(ref keyValue)) { return; } ObjResponsePar.KeyValue = keyValue; } ss += t.ElapsedMilliseconds + " "; t.Restart(); //数字判断数据 杨斌 2012-03-13 if (responseType == ResponseType.Number) { if (!JudgeNumberValue(ref keyValue)) { return; } ////2012-10-09 赵丽 数字题最多保留4位小数 //try //{ // ObjResponsePar.KeyValue = Math.Round(Convert.ToDecimal(keyValue), 4).ToString(); //} //catch //{ // ObjResponsePar.KeyValue = keyValue; //} ObjResponsePar.KeyValue = keyValue;//杨斌 2013-04-27 去掉小数位限制 } ss += t.ElapsedMilliseconds + " "; t.Restart(); //杨斌 2013-01-29 添加签到码签到 bool bCheckKeyID = true; if ((responseType == ResponseType.SignIn) && EnableList) { int signInMode = 0; signInMode = TagSet.GetValue(TagKey.SignIn_Mode).ToInt; if (signInMode > 0)//杨斌 2017-03-30 { bCheckKeyID = false; //杨斌 2017-02-23 if (SystemConfig.KeypadType == "M30") { if (ObjResponsePar.KeyValue.Length >= 3) { int n3 = 0; if (int.TryParse(ObjResponsePar.KeyValue[2] + "", out n3)) ObjResponsePar.KeyValue = ObjResponsePar.KeyValue.Substring(0, 2) + (char)(n3 + 64); } } //if (SignInCode[ObjResponsePar.KeyID.ToString()] != ObjResponsePar.KeyValue) { return; } }//签到码签到 } if (bCheckKeyID)//杨斌 2013-01-29 { //选举判断是否含有该候选人 //未授权 if (!IsAuthorize(ObjResponsePar.KeyID)) { return; } } ss += t.ElapsedMilliseconds + " "; t.Restart(); string keyID = ObjResponsePar.KeyID.ToString(); //按键音 if (GlobalInfo.sysConfig.PressSoundEnabled) { GlobalInfo.DXSoundPlay.Play(GlobalInfo.Sound_Key_Vote); //GlobalInfo.DXSoundPlay.Stop(GlobalInfo.Sound_Key_Vote); } //ObjResponsePar.Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); ObjResponsePar.Time = DateTime.Now; //选择类型需要在收到按键时即计算对错和得分,减轻批量保存时运算 ObjResponsePar.Correct = 0; ObjResponsePar.Score = 0; //ABC转换1,2,3,以下代码应放到接收按键值事件中 string result = ObjResponsePar.KeyValue; string pollNo = ""; string pollValue = ""; int pollNoInt = 0; switch (responseType) { case ResponseType.Choice: case ResponseType.Group: case ResponseType.Grade: case ResponseType.Judge: case ResponseType.Vote: case ResponseType.Order: if (GlobalInfo.GetSdkType() == 1)//杨斌 2016-12-06 result = result.Replace("Q", "J"); result = FormatABCTo123(result); //判断是否正确,计算分数 //性能需要优化!!!杨斌 2015-03-27 if (IsCorrect(ResponseTypeNow, result, out score)) { ObjResponsePar.Correct = 1; } //if (!string.IsNullOrEmpty(KeyIDQDOK) && (keyID != KeyIDQDOK) && (score < 0))//杨斌 2019-04-09 // score = 0; //按正确答案的[首次]答题时间记分。杨斌 2018-05-08 List lstShape = PPTOper.GetDataLabelShape(Globals.SunVoteARSAddIn.PPTShow.SlideShow, DataLabelType.TIMER); if ((lstShape.Count > 0) && (responseType == ResponseType.Choice))//有计时器,可能按正确答案的剩余时间计分。杨斌 2018-09-12 { TagSet tagSet = new TagSet(Globals.SunVoteARSAddIn.PPTShow.SlideShow.Tags); //计分模式,1:按选项分值,0:按正确答案,2:按正确答案和剩余时间 int scoreMode = tagSet.GetValue(TagKey.Choice_ScoreMode).ToInt; if (scoreMode == 2) { //按未改变按键值的首次按键速度计算分数。杨斌 2018-05-15 double speed = ObjResponsePar.Speed; if (ResponseDataList.Contains(keyID)) { if (ResponseDataList[keyID].KeyValue == result + ",") speed = ResponseDataList[keyID].Speed;//取未改变按键值的首次按键速度 } string sTime = tagSet.GetValue(TagKey.ResponseTimer).Value; double timeTotal = ConvertOper.TimeToSecond(sTime); double timeRes = timeTotal - speed; if (timeRes < 0) timeRes = 0; if (timeRes > timeTotal) timeRes = timeTotal; score = score * timeRes / timeTotal; score = ConvertOper.Convert(score.ToString("F4")).ToDouble;//保留4位小数 } } ObjResponsePar.Score = score; ObjResponsePar.KeyValue = result + ","; break; case ResponseType.Number: case ResponseType.Text://杨斌 2015-01-12 //判断是否正确,计算分数 if (IsCorrect(ResponseTypeNow, result, out score)) { ObjResponsePar.Correct = 1; } //if (!string.IsNullOrEmpty(KeyIDQDOK) && (keyID != KeyIDQDOK) && (score < 0))//杨斌 2019-04-09 // score = 0; ObjResponsePar.Score = score; ObjResponsePar.KeyValue = result; break; case ResponseType.Poll: //杨斌 2016-04-26 //if ((GlobalInfo.OEMLogo2 == OEMLogos2.oemSunVoteMultiPoll) && PanelPoll.IsMultiPollKeypad()) //杨斌 2017-02-13 if (PanelPoll.IsUseMultiPoll(SlideNow) && PanelPoll.IsMultiPollKeypad()) { if (string.IsNullOrEmpty(result)) return; string[] aryPoll = result.Split('='); //杨斌 2018-09-30。SDK分段式选举与数字选举不兼容,数字选举模式4值为"1=4",而分段式模式7值为"01-4" int UseModeLimitNumber = TagSet.GetValue(TagKey.Poll_UseModeLimitNumber).ToInt; if (UseModeLimitNumber == 1) { //新的键盘又乱改分隔符了,以前分段式是'-',现在又改成'=',不兼容,很好,干得漂亮!2020-06-12 ////aryPoll = result.Split('-'); if (result.IndexOf("-") > 0) aryPoll = result.Split('-'); else aryPoll = result.Split('='); } //PowerVote的定制选举,多个采用多次提交。杨斌 2017-06-12 if (((GlobalInfo.OEMLogo == OEMLogos.oemPowerVote) || (GlobalInfo.OEMLogo == OEMLogos.oemAngage))//杨斌 2018-03-22 && (GlobalInfo.OEMLogo2 == OEMLogos2.SunVote)) { if (aryPoll.Length < 2) { pollNo = "1"; pollValue = aryPoll[0]; pollNoInt = ConvertOper.Convert(pollNo).ToInt; if ((CandidateInfoList.Count > 0) && (pollValue != "0")) if (!CandidateInfoList.Keys.Contains(pollValue)) { return; } break; } } if (aryPoll.Length < 2) return; pollNo = aryPoll[0]; pollValue = aryPoll[1]; pollNoInt = ConvertOper.Convert(pollNo).ToInt; if (CandidateInfoList.Count > 0)//有名单情况判断,没有名单情况也可投。杨斌 2014-10-24 if (!CandidateInfoList.Keys.Contains(pollValue)) { return; } } else { //已经投过 if (CandidateInfoList.Count > 0)//有名单情况判断,没有名单情况也可投。杨斌 2014-10-24 if (!CandidateInfoList.Keys.Contains(keyValue)) { return; } } break; default: break; } ss += t.ElapsedMilliseconds + " "; t.Restart(); //键盘反馈信息 if (ResponseDataList.Contains(keyID)) { ResponseDataList[keyID].BaseTag = ObjResponsePar.BaseTag; ////ResponseDataList[keyID].KeyValue = ObjResponsePar.KeyValue; ResponseDataList[keyID].Time = ObjResponsePar.Time; ResponseDataList[keyID].Score = ObjResponsePar.Score; ResponseDataList[keyID].Correct = ObjResponsePar.Correct; //提交同一个结果时,按键速度不变。杨斌 2018-04-09 if (ResponseDataList[keyID].KeyValue != ObjResponsePar.KeyValue)//杨斌 2018-05-16 ResponseDataList[keyID].Speed = ObjResponsePar.Speed; //杨斌 2016-04-27 //if ((responseType == ResponseType.Poll) && (GlobalInfo.OEMLogo2 == OEMLogos2.oemSunVoteMultiPoll) && PanelPoll.IsMultiPollKeypad()) //杨斌 2017-02-13 if ((responseType == ResponseType.Poll) && PanelPoll.IsUseMultiPoll(SlideNow) && PanelPoll.IsMultiPollKeypad()) { string[] ary = ResponseDataList[keyID].KeyValue.Split(','); //PowerVote的定制选举,多个采用多次提交。杨斌 2017-06-12 if (((GlobalInfo.OEMLogo == OEMLogos.oemPowerVote) || (GlobalInfo.OEMLogo == OEMLogos.oemAngage))//杨斌 2018-03-22 && (GlobalInfo.OEMLogo2 == OEMLogos2.SunVote)) { if (ary.Contains(pollValue)) return; pollNoInt = 0; for (int n = 0; n < ary.Length; n++) { if (string.IsNullOrEmpty(ary[n])) { pollNoInt = n + 1; break; } } } if ((pollNoInt >= 1) && (pollNoInt <= ary.Length)) ary[pollNoInt - 1] = pollValue; //PowerVote的定制选举,多个采用多次提交。杨斌 2017-06-12 if (((GlobalInfo.OEMLogo == OEMLogos.oemPowerVote) || (GlobalInfo.OEMLogo == OEMLogos.oemAngage))//杨斌 2018-03-22 && (GlobalInfo.OEMLogo2 == OEMLogos2.SunVote)) { if (pollValue == "0") { for (int n = 0; n < ary.Length; n++) ary[n] = ""; } } ResponseDataList[keyID].KeyValue = string.Join(",", ary); } else { ResponseDataList[keyID].KeyValue = ObjResponsePar.KeyValue; } } else { //杨斌 2016-02-24。容器保留的必须是新创建的。否则 //上面修改同一个键盘ResponseDataList[keyID]值会导致LstResponseData.Add(ObjResponsePar)值被改变 ResponsePar resPar = new ResponsePar(); resPar.BaseTag = ObjResponsePar.BaseTag; resPar.KeyID = ObjResponsePar.KeyID; ////resPar.KeyValue = ObjResponsePar.KeyValue; resPar.Score = ObjResponsePar.Score; resPar.Correct = ObjResponsePar.Correct; resPar.Time = ObjResponsePar.Time; resPar.Speed = ObjResponsePar.Speed; ////ResponseDataList.Add(keyID, ObjResponsePar); //杨斌 2016-04-27 //if ((responseType == ResponseType.Poll) && (GlobalInfo.OEMLogo2 == OEMLogos2.oemSunVoteMultiPoll) && PanelPoll.IsMultiPollKeypad()) //杨斌 2017-02-13 if ((responseType == ResponseType.Poll) && PanelPoll.IsUseMultiPoll(SlideNow) && PanelPoll.IsMultiPollKeypad()) { int limit = TagSet.GetValue(TagKey.Poll_EffectiveVotes).ToInt; string[] ary = new string[limit];//GlobalInfo.maxNumberPollSelect for (int i = 0; i < ary.Length; i++) ary[i] = ""; if ((pollNoInt >= 1) && (pollNoInt <= ary.Length)) ary[pollNoInt - 1] = pollValue; //PowerVote的定制选举,多个采用多次提交。杨斌 2017-06-12 if (((GlobalInfo.OEMLogo == OEMLogos.oemPowerVote) || (GlobalInfo.OEMLogo == OEMLogos.oemAngage))//杨斌 2018-03-22 && (GlobalInfo.OEMLogo2 == OEMLogos2.SunVote)) { if (pollValue == "0") { for (int n = 0; n < ary.Length; n++) ary[n] = ""; } } resPar.KeyValue = string.Join(",", ary); } else { resPar.KeyValue = ObjResponsePar.KeyValue; } ResponseDataList.Add(keyID, resPar); } LstResponseData.Add(ObjResponsePar); //网络版。杨斌 2018-12-13 if (VoteServer.IsStart) { SendVoteAck(par); } ss += t.ElapsedMilliseconds + " "; t.Restart(); //* 杨斌 2015-03-27。屏蔽。避免性能问题 //更新选项反馈个数 UpdateResponseCount(ResponseTypeNow); ss += t.ElapsedMilliseconds + " "; t.Restart(); //刷新标签 //RefreshLable(); //判断图表是否时时显示,刷新图表 //if(TagSet.GetValue(TagKey.ChartPara_ShowTime).Value=="csStart") // RefreshChart(); if (Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar != null)//杨斌 2015-03-19 Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.frmVoteDetail.ChangeData(ObjResponsePar); //*/ ss += t.ElapsedMilliseconds + " "; t.Restart(); TagSet.SetValue(TagKey.Responsed, 1); FrmVoteBar.PanelEnabled = false; if (IsResponsedEvent != null) IsResponsedEvent(); ////System.Windows.Forms.Application.DoEvents();//杨斌 2015-03-27。避免卡死 ss += t.ElapsedMilliseconds + " "; t.Restart(); FrmVoteBar.ShowDebug(ss); } /// /// 评分-判断分数值是否有效 /// /// /// public bool JudgeScoreValue(ref string keyValue) { bool bResult = true; //反馈限制的小数个数 double minValue = TagSet.GetValue(TagKey.Score_LowRange).ToDouble; double maxValue = 0; string highRange = TagSet.GetValue(TagKey.Score_HighRange).Value; if (highRange == "") maxValue = 9999999999; else maxValue = ConvertOper.Convert(highRange).ToDouble; double score = ConvertOper.Convert(keyValue).ToDouble; string decStr = TagSet.GetValue(TagKey.Score_DecimalFormat).Value; //限定了输入小数个数 if (decStr != "") { int dec = ConvertOper.Convert(decStr).ToInt; string formatStr = "0."; for (int i = 0; i < dec; i++) formatStr += "0"; score = Convert.ToDouble(score.ToString(formatStr)); } if ((score > maxValue) || (score < minValue)) { bResult = false; } keyValue = score.ToString(); return bResult; } /// /// 数字-判断分数值是否有效 /// 杨斌 2012-03-13 /// 修改:杨斌 2012-06-27 /// /// /// public bool JudgeNumberValue(ref string keyValue) { bool bResult = true; //反馈限制的小数个数 double minValue = 0; string lowRange = TagSet.GetValue(TagKey.Number_LowRange).Value; if (lowRange == "") minValue = -999999999; else minValue = ConvertOper.Convert(lowRange).ToDouble; double maxValue = 0; string highRange = TagSet.GetValue(TagKey.Number_HighRange).Value; if (highRange == "") maxValue = 9999999999; else maxValue = ConvertOper.Convert(highRange).ToDouble; double score = ConvertOper.Convert(keyValue).ToDouble; string decStr = TagSet.GetValue(TagKey.Number_DecimalFormat).Value; //限定了输入小数个数 if (decStr != "") { int dec = ConvertOper.Convert(decStr).ToInt; string formatStr = "0."; for (int i = 0; i < dec; i++) formatStr += "0"; score = Convert.ToDouble(score.ToString(formatStr)); } if ((score > maxValue) || (score < minValue)) { bResult = false; } keyValue = score.ToString(); return bResult; } /// /// 更新每个选项的反馈人数 /// 创建 赵丽 /// 修改:杨斌 2012-03-13 /// private void UpdateResponseCount(ResponseType responseType, PowerPoint.Slide sld = null) { ResponseOptionList.Clear(); ResponseOptionListNoRate.Clear();//杨斌 2016-11-12 ResponseOptionListCount.Clear();//杨斌 2016-01-07 //杨斌 2018-01-27 TagSet tagSet = TagSet; if (sld != null) tagSet = new TagSet(sld.Tags); try { int optionCount = 0; switch (responseType) { case ResponseType.SignIn: optionCount = 2; break; case ResponseType.Group: optionCount = tagSet.GetValue(TagKey.Group_OptionCount).ToInt; break; case ResponseType.Choice: optionCount = tagSet.GetValue(TagKey.Choice_OptionCount).ToInt; break; case ResponseType.Judge: optionCount = 2; break; case ResponseType.Vote: optionCount = tagSet.GetValue(TagKey.Vote_OptionCount).ToInt; break; case ResponseType.Grade: optionCount = tagSet.GetValue(TagKey.Grade_OptionCount).ToInt; break; default: break; } if (responseType == ResponseType.SignIn) { //int responseCount = 0; //for (int i = 0; i < ResponseDataList.Count; i++) //{ // if (ResponseDataList[i].KeyValue != "") // responseCount += 1; // ResponseOptionList["0"] = responseCount; // //未签到的人数 // int unSignInCount = 0; // //启用名单 // if (IsAllPerson) // unSignInCount = GlobalInfo.hardwareManage.PersonNum - responseCount; // else // unSignInCount = AuthorKeypadList.Count - responseCount; // ResponseOptionList["1"] = unSignInCount; //} } else { //更新个选项对应的反馈人数 //键盘投票权重:杨斌 2012-11-27 //2014-3-17 增加是否加权的方法 //杨斌 2015-03-27 //bool useVoteRate = isVoteRateA(); bool useVoteRate = isVoteRate(); //bool useVoteRate = CanVoteRate(); //杨斌 2015-01-26。屏蔽下面代码 //键盘权重功能的开启。杨斌 2012-11-30 //switch (GlobalInfo.OEMLogo) //{ // case OEMLogos.oemSunVote: // case OEMLogos.oemZX: // break; // default: // useVoteRate = false; // break; //} //杨斌 2016-11-12 for (int i = 0; i < optionCount; i++) { int responseCount = 0; //string option = NumToABC(i + 1); string option = (i + 1).ToString(); for (int j = 0; j < ResponseDataList.Count; j++) { //if (ResponseDataList[j].KeyValue.IndexOf(option + ",") != -1) if (ResponseDataList[j].KeyValue.Split(',').Contains(option))//杨斌 2018-02-06 { responseCount += 1; } } ResponseOptionListNoRate[i.ToString()] = responseCount; } if (useVoteRate) { for (int i = 0; i < optionCount; i++) { double responseCount = 0; //string option = NumToABC(i + 1); string option = (i + 1).ToString(); for (int j = 0; j < ResponseDataList.Count; j++) { //if (ResponseDataList[j].KeyValue.IndexOf(option + ",") != -1) if (ResponseDataList[j].KeyValue.Split(',').Contains(option))//杨斌 2018-02-06 { string keyId = ResponseDataList[j].KeyID.ToString(); if (VoterRate.Contains(keyId)) responseCount += 1 * VoterRate[keyId];//乘以权重 else { //启用了名单,已投过票,但单名单改变情况,已投票但名单里不存在的权重设置为0。杨斌 2017-04-20 //responseCount += 1; if (RosterList.RosterLoad.GetRowByKeyId(keyId) == null) responseCount += 0; else responseCount += 1; } } } ResponseOptionList[i.ToString()] = responseCount; //杨斌 2016-01-12 //GlobalInfo.response.LstResponseData double responseNumCount = 0; for (int j = 0; j < LstResponseData.Count; j++) { //if (LstResponseData[j].KeyValue.IndexOf(option + ",") != -1) if (LstResponseData[j].KeyValue.Split(',').Contains(option))//杨斌 2018-02-06 { string keyId = LstResponseData[j].KeyID.ToString(); responseNumCount += 1; } } ResponseOptionListCount[i.ToString()] = responseNumCount; } } else { for (int i = 0; i < optionCount; i++) { int responseCount = 0; //string option = NumToABC(i + 1); string option = (i + 1).ToString(); for (int j = 0; j < ResponseDataList.Count; j++) { //if (ResponseDataList[j].KeyValue.IndexOf(option + ",") != -1) if (ResponseDataList[j].KeyValue.Split(',').Contains(option))//杨斌 2018-02-06 { responseCount += 1; } } ResponseOptionList[i.ToString()] = responseCount; //杨斌 2016-01-12 //GlobalInfo.response.LstResponseData double responseNumCount = 0; for (int j = 0; j < LstResponseData.Count; j++) { //if (LstResponseData[j].KeyValue.IndexOf(option + ",") != -1) if (LstResponseData[j].KeyValue.Split(',').Contains(option))//杨斌 2018-02-06 { string keyId = LstResponseData[j].KeyID.ToString(); responseNumCount += 1; } } ResponseOptionListCount[i.ToString()] = responseNumCount; } } } } catch (Exception ex) { } } /// /// 判断是否启用了权重,并初始化权重值。 /// 杨斌 2015-03-27 /// /// public bool isVoteRate() { bool res = isVoteRateA(); if (res) { PowerPoint.Slide sld = null; if (Globals.SunVoteARSAddIn.PPTShow.IsShowSlide) { sld = Globals.SunVoteARSAddIn.PPTShow.SlideShow; } else { sld = Globals.SunVoteARSAddIn.PPTEdit.SlideEdit; } GlobalInfo.response.InitRosterVoteRate(sld); } return res; //ResponseType responseType = ResponseType.Slide;//杨斌 2014-06-04 //Slide sld = null; //if (Globals.SunVoteARSAddIn.PPTShow.IsShowSlide) //{ // responseType = Globals.SunVoteARSAddIn.PPTShow.ResponseType; // sld = Globals.SunVoteARSAddIn.PPTShow.SlideShow; //} //else //{ // responseType = Globals.SunVoteARSAddIn.PPTEdit.ResponseTypeSlideEdit; // sld = Globals.SunVoteARSAddIn.PPTEdit.SlideEdit; //} //TagSet tagSet = new TagSet(sld.Tags); //bool useVoteRate = false; ////if (this.VoteRateIndex > 0)//杨斌 2015-01-26 屏蔽 //{ // switch (responseType) // { // case ResponseType.Choice: // case ResponseType.Judge: // case ResponseType.Vote: // case ResponseType.Grade://杨斌 2013-02-25 // string colName = tagSet.GetValue(TagKey.ResponsePara_VoteRateField).Value; // useVoteRate = (colName.Length > 0); // GlobalInfo.response.InitRosterVoteRate(sld); // break; // default: // break; // } //} //return useVoteRate; } /// /// 仅判断是否启用的权重。杨斌 2015-03-27 /// /// public bool isVoteRateA() { ResponseType responseType = ResponseType.Slide;//杨斌 2014-06-04 PowerPoint.Slide sld = null; if (Globals.SunVoteARSAddIn.PPTShow.IsShowSlide) { responseType = Globals.SunVoteARSAddIn.PPTShow.ResponseType; sld = Globals.SunVoteARSAddIn.PPTShow.SlideShow; } else { responseType = Globals.SunVoteARSAddIn.PPTEdit.ResponseTypeSlideEdit; sld = Globals.SunVoteARSAddIn.PPTEdit.SlideEdit; } TagSet tagSet = new TagSet(sld.Tags); bool useVoteRate = false; //if (this.VoteRateIndex > 0)//杨斌 2015-01-26 屏蔽 { switch (responseType) { case ResponseType.Choice: case ResponseType.Judge: case ResponseType.Vote: case ResponseType.Grade://杨斌 2013-02-25 case ResponseType.Poll://杨斌 2018-01-30 string colName = tagSet.GetValue(TagKey.ResponsePara_VoteRateField).Value; useVoteRate = (colName.Length > 0) && this.EnableList;//杨斌 2017-01-06 break; default: break; } } return useVoteRate; } /// /// 是否支持权重 /// 杨斌 2014-10-27 /// /// public bool CanVoteRate() { ResponseType responseType = ResponseType.Slide;//杨斌 2014-06-04 if (Globals.SunVoteARSAddIn.PPTShow.IsShowSlide) responseType = Globals.SunVoteARSAddIn.PPTShow.ResponseType; else responseType = Globals.SunVoteARSAddIn.PPTEdit.ResponseTypeSlideEdit; bool useVoteRate = false; switch (responseType) { case ResponseType.Choice: case ResponseType.Judge: case ResponseType.Vote: case ResponseType.Grade://杨斌 2013-02-25 case ResponseType.Poll://杨斌 2018-01-30 useVoteRate = true; break; default: break; } return useVoteRate; } /// /// 判断键盘是否授权 /// 创建 赵丽 /// /// /// public bool IsAuthorize(string KeyID) { try { bool bResult = true; if (KeyIDQDOK.Length > 0)//杨斌 2014-05-20 { bResult = (KeyID == KeyIDQDOK); } else { bool rosterEnabled = EnableList;//杨斌 2015-03-27 //投票人数达到参与人数 //启用了名单以名单为主 if (!rosterEnabled) { //屏蔽!!!。杨斌 2015-03-27。性能问题 //if (!GlobalInfo.hardwareManage.JudgeKeyStatus(KeyID)) { return false; } if (!GlobalInfo.hardwareManage.JudgeKeypadRangeSet(KeyID)) { return false; }//杨斌 2016-05-19 if ((ResponseDataList.Count >= GlobalInfo.hardwareManage.PersonNum) && (!ResponseDataList.Contains(KeyID.ToString()))) { return false; } } string authorType = TagSet.GetValue(TagKey.ResponsePara_CanVote).Value; //列ID string colID = TagSet.GetValue(TagKey.ResponsePara_CanVoteGroup).Value; string curSlideID = CurrentSlide.SlideID.ToString(); switch (authorType) { case "cvAll": if (rosterEnabled) bResult = AuthorKeypadList.Keys.Contains(KeyID.ToString()); //bResult = true;//杨斌 2015-01-14 break; case "cvPerson": if (rosterEnabled) bResult = AuthorKeypadList.Keys.Contains(KeyID.ToString()); break; case "cvTopic": //启用名单时,判断该键盘是否有对应名单 if (rosterEnabled) bResult = IsExistKeypad(KeyID.ToString()); bResult = AuthorKeypadList.Keys.Contains(KeyID.ToString()); break; default: if (rosterEnabled) bResult = AuthorKeypadList.Keys.Contains(KeyID.ToString()); break; } } return bResult; } catch (Exception ex) { return false; } } /// /// 加载候选人名单 /// 创建 赵丽 /// public void LoadCandidateList() { CandidateInfoList.Clear(); int PollCount = TagSet.GetValue(TagKey.Poll_CandidatesCount).ToInt; for (int i = 0; i < PollCount; i++) { //string CandidateID = TagSet.LoadValue(TagKey.Poll_CandidatesID_, i, "").Value.ToString(); //杨斌 2016-04-26 string CandidateID = TagSet.LoadValue(TagKey.Poll_CandidatesID_, i, "").ToInt.ToString(); string CandidateName = TagSet.LoadValue(TagKey.Poll_CandidatesName_, i, "").Value.ToString(); CandidateInfo candidateInfo = new CandidateInfo(); candidateInfo.CandidateID = CandidateID; candidateInfo.CandidateName = CandidateName; if (!CandidateInfoList.Keys.Contains(CandidateID)) { CandidateInfoList.Add(CandidateID, candidateInfo); } else { CandidateInfoList[CandidateID].CandidateID = CandidateID; CandidateInfoList[CandidateID].CandidateName = CandidateName; } } } /// /// 加载反馈数据 /// public void LoadResponseData() { ResponseDB.LoadResponseData(); //更新选项反馈数量 if (Globals.SunVoteARSAddIn.PPTShow.IsShowSlide) { if (Globals.SunVoteARSAddIn.PPTShow.ResponseType == ResponseType.Poll) LoadCandidateList(); else UpdateResponseCount(Globals.SunVoteARSAddIn.PPTShow.ResponseType); } else//杨斌 2017-08-07 { UpdateResponseCount(Globals.SunVoteARSAddIn.PPTEdit.ResponseTypeSlideEdit); } } /// /// 保存反馈题目信息 /// public void SaveResponseInfo() { ResponseDB.SaveResponseInfo(); } /// /// 保存反馈数据 /// public void SaveResponseData() { ResponseDB.SaveResponseData(); } /// /// 刷新图表 /// public void RefreshChart() { //杨斌 2014-09-12 if (ResponseDataList.Count > 0) Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.Slide_IsResponsed, 1); //更新图片 Globals.SunVoteARSAddIn.PPTEdit.InitChart(false, CurrentSlide); } /// /// 获取答对人数 /// 创建:杨斌 2012-03-14 /// /// public int GetCorrectCount() { int res = 0; try { for (int i = 0; i < ResponseDataList.Count; i++) { if (ResponseDataList[i].Correct > 0) { res++; } } } catch (Exception ex) { SystemLog.WriterLog(ex); } return res; } /* /// /// 刷新选举排行 /// public void RefreshPollRank() { TagSet tagSet = new TagSet(); tagSet.Tags = CurrentSlide.Tags; ResponseType responseType = EnumName.GetEnum(tagSet.GetValue(TagKey.ResponseType).Value.ToString()); if (responseType != ResponseType.Poll) return; Dictionary pollRankList = new Dictionary(); if (ResponseDataList.Count == 0) return; try { foreach (PowerPoint.Shape s in CurrentSlide.Shapes) { if (s.Name == "PollRank") { for (int i = 1; i <= 8; i++) { for (int j = 0; j < 4; j++) s.Table.Cell(i + 1, j + 1).Shape.TextFrame.TextRange.Text = ""; } for (int i = 0; i < ResponseDataList.Count; i++) { if (pollRankList.ContainsKey(ResponseDataList[i].KeyValue)) pollRankList[ResponseDataList[i].KeyValue]++; else pollRankList.Add(ResponseDataList[i].KeyValue, 1); } string[] keys = new string[pollRankList.Count]; int[] values = new int[pollRankList.Count]; pollRankList.Values.CopyTo(values, 0); pollRankList.Keys.CopyTo(keys, 0); System.Array.Sort(values, keys); int iCount = (pollRankList.Count > 8) ? 8 : pollRankList.Count; try { for (int i = 1; i <= iCount; i++) { s.Table.Cell(i + 1, 1).Shape.TextFrame.TextRange.Text = i.ToString(); s.Table.Cell(i + 1, 2).Shape.TextFrame.TextRange.Text = keys[pollRankList.Count - i]; s.Table.Cell(i + 1, 3).Shape.TextFrame.TextRange.Text = CandidateInfoList[keys[pollRankList.Count - i]].CandidateName; s.Table.Cell(i + 1, 4).Shape.TextFrame.TextRange.Text = values[pollRankList.Count - i].ToString(); } } catch { } } } } catch (Exception ex) { SystemLog.WriterLog(ex); } } */ //public TDictionary SortByValue(TDictionary di) //{ // string[] keys = new string[di.Count]; // int[] values = new int[di.Count]; // di.Values.CopyTo(values, 0); // di.Keys.CopyTo(keys, 0); // TDictionary pollRankList = new TDictionary(); // for (int i = 0; i < values.Length; i++) // { // if(!pollRankList.ContainsKey(keys[i].ToString())) // pollRankList.Add(keys[i].ToString(),values[i]); // } // return pollRankList; //} /// /// 刷新标签 /// 创建 赵丽 /// 修改:杨斌 2012-03-15 /// 修改:杨斌 2012-06-01 /// 修改:杨斌 2012-06-11 搜索:DefPercentDecCount /// 杨斌 2015-03-27 /// public void RefreshLable() { try { if (CurrentSlide == null) return; int dueno = 0;//应到人数 double votedOk = 0;//反馈人数 string colName = Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.GetValue(TagKey.ResponsePara_VoteRateField).Value; bool isRate = (colName.Length > 0) && this.EnableList;//杨斌 2017-01-06 //不带权重。杨斌 2018-07-30 double participateNum_Men = GetParticipateNum();//参与人数 double votedOk_Men = ResponseDataList.Count;//反馈人数 int signedNum = -1;//实到人数。杨斌 2018-12-25。 if (isRate) { votedOk = GlobalInfo.response.GetResponseNum(); } else { votedOk = ResponseDataList.Count;//有效反馈人数(签到码为签到成功人数)。杨斌 2013-02-26 } int submitNumNoRate = ResponseDataList.Count;//反馈人数无权重。杨斌 2019-01-14 if (EnableList) { //dueno = AuthorKeypadList.Count; //2012-07-11 赵丽 更改参与人数 dueno = ResponseDB.LoadPersonList().Count; //杨斌 2013-01-29 if (Globals.SunVoteARSAddIn.frmVoteBar != null) { FrmVoteDetail frmDetail = Globals.SunVoteARSAddIn.frmVoteBar.frmVoteDetail; if (frmDetail != null) { if (frmDetail.IsCodeSignIn())//杨斌 2013-02-26 { dueno = frmDetail.VoterCount; votedOk = frmDetail.SignInOkCount;//杨斌 2013-02-26 votedOk_Men = frmDetail.SignInOkCount;//参与人数-不带权重。杨斌 2018-07-30 } } } } else dueno = GlobalInfo.hardwareManage.PersonNum; //记录应到人数,便于统计 Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.Slide_Dueno, dueno); //不带权重保存。杨斌 2018-07-30 Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.Slide_ParticipantNum_Men, participateNum_Men); Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.Slide_SubmitNum_Men, votedOk_Men); //记录参与人数,便于统计 //杨斌 2015-03-27 if (isRate) { if (Globals.SunVoteARSAddIn.PPTShow.SlideShow != null) ParticipateNum = GlobalInfo.response.GetParticipantNum(Globals.SunVoteARSAddIn.PPTShow.ResponseType, Globals.SunVoteARSAddIn.PPTShow.SlideShow); } else ParticipateNum = GetParticipateNum(); Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.Slide_ParticipantNum, ParticipateNum); //记录反馈人数,便于统计数据标签 Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.Slide_SubmitNum, votedOk);//杨斌 2013-02-26 //记录赞成人数。杨斌 2018-07-25 double voteYesCount = 0; double voteNoCount = 0; double voteAbsCount = 0; if (Globals.SunVoteARSAddIn.PPTShow.ResponseType == ResponseType.Vote) { string opt = "0"; if (isRate)//带权重 { if (GlobalInfo.response.ResponseOptionList.Keys.Contains(opt)) //有反馈数据 voteYesCount = GlobalInfo.response.ResponseOptionList[opt]; Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.VoteYesCount, voteYesCount); opt = "1"; if (GlobalInfo.response.ResponseOptionList.Keys.Contains(opt)) //有反馈数据 voteNoCount = GlobalInfo.response.ResponseOptionList[opt]; Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.VoteNoCount, voteNoCount); opt = "2"; if (GlobalInfo.response.ResponseOptionList.Keys.Contains(opt)) //有反馈数据 voteAbsCount = GlobalInfo.response.ResponseOptionList[opt]; Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.VoteAbsCount, voteAbsCount); } else//不带权重 { if (GlobalInfo.response.ResponseOptionListNoRate.Keys.Contains(opt)) //有反馈数据 voteYesCount = GlobalInfo.response.ResponseOptionListNoRate[opt]; Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.VoteYesCount, voteYesCount); opt = "1"; if (GlobalInfo.response.ResponseOptionListNoRate.Keys.Contains(opt)) //有反馈数据 voteNoCount = GlobalInfo.response.ResponseOptionListNoRate[opt]; Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.VoteNoCount, voteNoCount); opt = "2"; if (GlobalInfo.response.ResponseOptionListNoRate.Keys.Contains(opt)) //有反馈数据 voteAbsCount = GlobalInfo.response.ResponseOptionListNoRate[opt]; Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.VoteAbsCount, voteAbsCount); } } string sPercent = "";//百分比 int correct = GetCorrectCount();//答对人数 //记录答对人数,便于统计数据标签 Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.Slide_CorrectNum, correct); //记录平均值。杨斌 2014-04-15 int dMean = 0; for (int i = 0; i < ResponseDataList.Count; i++) { string[] aryVal = ResponseDataList[i].KeyValue.Split(new char[] { ',' }); for (int n = 0; n < aryVal.Length; n++) dMean += ConvertOper.Convert(aryVal[n]).ToInt; } string sMean = "0"; if (votedOk > 0) sMean = ConvertOper.Round45((double)dMean / votedOk, 2).ToString(); if (ResponseDataList.Count > 0) sMean = ConvertOper.Round45((double)dMean / ResponseDataList.Count, 2).ToString(); Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.Slide_VoteMean, sMean); //计算评议平均分。杨斌 2019-06-27 string sGradeAvg = "0"; string gradeScoreOption = Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.GetValue(TagKey.Grade_ScoreOption).Value; if (!string.IsNullOrEmpty(gradeScoreOption)) { var aryGradeScoreSet = gradeScoreOption.Split(PublicFunction.SplitItemScore);//杨斌 2019-07-19 if (aryGradeScoreSet.Length > 0) { sGradeAvg = GlobalInfo.response.ResponseDB.GetGradeScore(aryGradeScoreSet); sGradeAvg = ConvertOper.Convert(sGradeAvg).ToDouble.ToString(); Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.Slide_GradeAvg, sGradeAvg); } } //百分比分母,如图表、正确率 string percentMode = Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.GetValue(TagKey.ChartPara_DataPercentBase).Value; double percentCountCorrect = ParticipateNum;//默认"crParticipant" switch (percentMode) { case "crResponse": percentCountCorrect = ResponseDataList.Count; break; case "crParticipant": break; } //杨斌 2015-06-03 if (isRate) { if (Globals.SunVoteARSAddIn.PPTShow.SlideShow != null) percentCountCorrect = GlobalInfo.response.GetParticipantNumNoRate(Globals.SunVoteARSAddIn.PPTShow.ResponseType, Globals.SunVoteARSAddIn.PPTShow.SlideShow); } else percentCountCorrect = ParticipateNum; double notVoted = ParticipateNum - votedOk;//未按人数。杨斌 2015-04-20 //杨斌 2015-06-15 if (Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar != null) Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.ShowVotedCount(submitNumNoRate);//之前是带权重的votedOk。杨斌 2019-04-17 foreach (PowerPoint.Shape shape in CurrentSlide.Shapes) { switch (shape.Name) { case "DUENO"://应到人数 PPTOper.ShowLabelData(shape, dueno.ToString()); break; case "SIGNED"://实到人数。杨斌 2018-12-25 if (signedNum == -1) signedNum = ReportEx.GetSignedNum(CurrentSlide);//实到人数=上一个签到的人数。杨斌 2018-12-24 PPTOper.ShowLabelData(shape, signedNum.ToString()); break; case "NOTSIGNED"://未到人数。杨斌 2019-01-14 if (signedNum == -1) signedNum = ReportEx.GetSignedNum(CurrentSlide);//实到人数=上一个签到的人数。 int notSignedNum = dueno - signedNum;//未到人数 PPTOper.ShowLabelData(shape, notSignedNum.ToString()); break; case "VotingMissSigned"://已到未按人数。杨斌 2019-01-14 //if (signedNum == -1) // signedNum = ReportEx.GetSignedNum(CurrentSlide);//实到人数=上一个签到的人数。 //int notVotedSigned = signedNum - submitNumNoRate; var lstIDSin = ReportEx.GetSignedIDs(CurrentSlide); List lstIDRes = new List(); if (Globals.SunVoteARSAddIn.PPTShow.SlideShow == null) { lstIDRes = ReportEx.GetResponseIDs(CurrentSlide); } 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); } } int notVotedSigned = 0; foreach (var v in lstIDSin) { if (!lstIDRes.Contains(v)) notVotedSigned++; } PPTOper.ShowLabelData(shape, notVotedSigned.ToString()); break; case "VOTENO"://反馈人数 PPTOper.ShowLabelData(shape, votedOk.ToString());//杨斌 2013-02-26 break; case "VOTENOP"://反馈人数-百分比 sPercent = ConvertOper.GetPercent(votedOk, ParticipateNum, PPTEdit.DefPercentDecCount); PPTOper.ShowLabelData(shape, sPercent); break; case "VOTENOPV"://反馈人数-数值+百分比 sPercent = ConvertOper.GetPercent(votedOk, ParticipateNum, PPTEdit.DefPercentDecCount); PPTOper.ShowLabelData(shape, votedOk.ToString() + " (" + sPercent + ")"); break; //杨斌 2015-04-20 case "VOTEMiss"://未按人数 PPTOper.ShowLabelData(shape, notVoted.ToString());//杨斌 2013-02-26 break; case "VOTEMissP"://未按人数-百分比 sPercent = ConvertOper.GetPercent(notVoted, ParticipateNum, PPTEdit.DefPercentDecCount); PPTOper.ShowLabelData(shape, sPercent); break; case "VOTEMissPV"://未按人数-数值+百分比 sPercent = ConvertOper.GetPercent(notVoted, ParticipateNum, PPTEdit.DefPercentDecCount); PPTOper.ShowLabelData(shape, notVoted.ToString() + " (" + sPercent + ")"); break; case "VOTEMEAN"://平均值。杨斌 2014-04-14 if ((GlobalInfo.OEMLogo == OEMLogos.oemiPericles) && (GlobalInfo.OEMLogo2 == OEMLogos2.oemHideData))//杨斌 2020-03-06 { sMean = "--"; } PPTOper.ShowLabelData(shape, sMean); break; case "GradeAvg"://评议平均分。杨斌 2019-06-27 PPTOper.ShowLabelData(shape, sGradeAvg); break; case "ANSWER"://正确答案 string correctAsw = Globals.SunVoteARSAddIn.PPTEdit.GetSlideCorrectAnswer(CurrentSlide, Globals.SunVoteARSAddIn.PPTShow.ResponseType); //杨斌 2012-07-02 bool bABCD = (Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.GetValue(TagKey.KeypadPara_OptionMode).ToInt == 1); if (bABCD) correctAsw = PPTOper.FormatNumABC(correctAsw); PPTOper.ShowLabelData(shape, correctAsw); break; case "CorrectShape"://正确答案标记。杨斌 2015-01-26 break; case "CRRECTNO"://答对人数 PPTOper.ShowLabelData(shape, correct.ToString()); break; case "CRRECTNOP"://答对人数-百分比 sPercent = ConvertOper.GetPercent(correct, percentCountCorrect, PPTEdit.DefPercentDecCount); PPTOper.ShowLabelData(shape, sPercent); break; case "CRRECTNOPV"://答对人数-数值+百分比 sPercent = ConvertOper.GetPercent(correct, percentCountCorrect, PPTEdit.DefPercentDecCount); PPTOper.ShowLabelData(shape, correct.ToString() + " (" + sPercent + ")"); break; case "PARTICIPATE"://参与人数 PPTOper.ShowLabelData(shape, ParticipateNum.ToString()); break; case "VoteMedian"://平均值。杨斌 2016-03-29 //假设有5个参与者,他们选择的答案分别为 1,3,5,11,15,则中间值为5;即参与者提交的答案个数为奇数位时,中间值为正中位置的数值。 //假设有6个参与者,他们选择的答案分别为 1,3,5,10,11,12,则中间值为7.5(中间2位数的平均值,即5和10相加的后的平均值);即参与者提交的答案个数为偶数位时,中间值为正中间2个数值的平均值。 List lstRes = new List(); double median = 0; string[] aryOption = PPTOper.GetOptionTextBySlide(Globals.SunVoteARSAddIn.PPTShow.SlideShow); if (aryOption != null) { for (int i = 0; i < ResponseDataList.Count; i++) { int a = 0; string sRes = ResponseDataList[i].KeyValue; if (sRes.Substring(sRes.Length - 1) == ",") sRes = sRes.Substring(0, sRes.Length - 1); if (int.TryParse(sRes, out a)) { //取题目选项的数值 if ((a >= 1) && (a <= aryOption.Length)) { double b = 0; if (double.TryParse(aryOption[a - 1], out b)) { //if (!lstRes.Contains(b)) lstRes.Add(b); } else { lstRes.Add(a);//杨斌 2020-05-08 } } } } if (lstRes.Count > 0) { lstRes = lstRes.OrderBy(o => o).ToList(); if ((lstRes.Count % 2) == 1) { median = lstRes[lstRes.Count / 2]; } else { median = ConvertOper.Round45((lstRes[lstRes.Count / 2 - 1] + lstRes[lstRes.Count / 2]) / 2, 2); } } //保存值 Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.Slide_VoteMedian, median); } else//评分计算中间值。杨斌 2020-05-08 { for (int i = 0; i < ResponseDataList.Count; i++) { int a = 0; string sRes = ResponseDataList[i].KeyValue; //if (sRes.Substring(sRes.Length - 1) == ",") // sRes = sRes.Substring(0, sRes.Length - 1); if (int.TryParse(sRes, out a)) { lstRes.Add(a);//杨斌 2020-05-08 } } if (lstRes.Count > 0) { lstRes = lstRes.OrderBy(o => o).ToList(); if ((lstRes.Count % 2) == 1) { median = lstRes[lstRes.Count / 2]; } else { median = ConvertOper.Round45((lstRes[lstRes.Count / 2 - 1] + lstRes[lstRes.Count / 2]) / 2, 2); } } //保存值 Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.Slide_VoteMedian, median); } string sMedian = median.ToString(); if ((GlobalInfo.OEMLogo == OEMLogos.oemiPericles) && (GlobalInfo.OEMLogo2 == OEMLogos2.oemHideData))//杨斌 2020-03-06 { sMedian = "--"; } PPTOper.ShowLabelData(shape, sMedian); break; case "VoteRange"://投票范围。杨斌 2016-03-29 //假设有5个参与者,他们选择的答案选项分别为3,4,5,6,9. 那么答案选项的范围则为3-9. List lstResR = new List(); string range = "-"; string[] aryOptionR = PPTOper.GetOptionTextBySlide(Globals.SunVoteARSAddIn.PPTShow.SlideShow); if (aryOptionR != null) { for (int i = 0; i < ResponseDataList.Count; i++) { int a = 0; string sRes = ResponseDataList[i].KeyValue; if (sRes.Substring(sRes.Length - 1) == ",") sRes = sRes.Substring(0, sRes.Length - 1); if (int.TryParse(sRes, out a)) { //取题目选项的数值 if ((a >= 1) && (a <= aryOptionR.Length)) { double b = 0; if (double.TryParse(aryOptionR[a - 1], out b)) { if (!lstResR.Contains(b)) lstResR.Add(b); } else { if (!lstResR.Contains(a))//杨斌 2020-05-08 lstResR.Add(a); } } } } if (lstResR.Count > 0) { lstResR = lstResR.OrderBy(o => o).ToList(); range = lstResR[0] + "-" + lstResR[lstResR.Count - 1]; } //保存值 Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.Slide_VoteRange, range); } else//评分计算中间值。杨斌 2020-05-08 { for (int i = 0; i < ResponseDataList.Count; i++) { int a = 0; string sRes = ResponseDataList[i].KeyValue; //if (sRes.Substring(sRes.Length - 1) == ",") // sRes = sRes.Substring(0, sRes.Length - 1); if (int.TryParse(sRes, out a)) { if (!lstResR.Contains(a))//杨斌 2020-05-08 lstResR.Add(a); } } if (lstResR.Count > 0) { lstResR = lstResR.OrderBy(o => o).ToList(); range = lstResR[0] + "-" + lstResR[lstResR.Count - 1]; } //保存值 Globals.SunVoteARSAddIn.PPTShow.TagSetSlide.SetValue(TagKey.Slide_VoteRange, range); } PPTOper.ShowLabelData(shape, range); break; case "VotePassResult"://表决通过结果。杨斌 2018-07-25 string pass = GlobalInfo.SysLanguage.LPT.ReadString("PanelVote", "VotePass", "Pass"); string noPass = GlobalInfo.SysLanguage.LPT.ReadString("PanelVote", "VoteNotPass", "Not Pass"); bool isPass = PPTEdit.IsVotePass(CurrentSlide); string passResult = isPass ? pass : noPass; PPTOper.ShowLabelData(shape, passResult); break; case "PARTICIPATE_Men"://参与人数-不带权重。杨斌 2018-07-30 PPTOper.ShowLabelData(shape, participateNum_Men.ToString()); break; case "VOTENO_Men"://反馈人数-不带权重。杨斌 2018-07-30 PPTOper.ShowLabelData(shape, votedOk_Men.ToString()); break; case "VOTENOP_Men"://反馈人数-百分比-不带权重。杨斌 2018-07-30 sPercent = ConvertOper.GetPercent(votedOk_Men, participateNum_Men, PPTEdit.DefPercentDecCount); PPTOper.ShowLabelData(shape, sPercent); break; case "VOTENOPV_Men"://反馈人数-数值+百分比-不带权重。杨斌 2018-07-30 sPercent = ConvertOper.GetPercent(votedOk_Men, participateNum_Men, PPTEdit.DefPercentDecCount); PPTOper.ShowLabelData(shape, votedOk_Men.ToString() + " (" + sPercent + ")"); break; default: break; } } if ((ParticipateNum == ResponseDataList.Count) && (ParticipateNum != 0) && (businessStatus == ResponseStatus.bsStart)) { if (GlobalInfo.sysConfig.IsAutoPageAllVoted) { if (!IsNextSlide) { //杨斌 2014-08-20 屏蔽下面 //if (StopEvent != null) StopEvent(); //2013-2-27 最后一张幻灯片自动仍然在反馈 //杨斌 2014-11-05 if (Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.IsVoteStart) { Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.VoteStart(false); if (GlobalInfo.sysConfig.StopShowCorrectAsw)//杨斌 2019-09-03 { Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.tsbCorrectAnswer.Checked = true;//ShowCorrectAnswerButtonState(); } } //杨斌 2014-08-20 if ((!Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.tmrDelayVoteStart.Enabled) && (!Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.IsRunNextSlideEvent)) { Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.IsAutoPageAllVoted = true; Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.DelayVoteStart = GlobalInfo.sysConfig.AutoPageWaitTime; NextSlide = true; //NextSlideEvent();//用事件会发生意外的时序,乱。杨斌 2014-08-20 Globals.SunVoteARSAddIn.PPTShow.FrmVoteBar.response_NextSlideEvent(); } } IsNextSlide = true; } } } catch (Exception ex) { SystemLog.WriterLog(ex); } } /// /// 清空所有的标签数据 /// 创建 赵丽 /// public void InitLable() { foreach (PowerPoint.Shape shape in CurrentSlide.Shapes) { switch (shape.Name) { case "CRRECTNO": break; case "VOTENO": break; case "VOTENOP": break; case "VOTENOPV": break; case "VOTENO_Men"://杨斌 2018-07-30 break; case "VOTENOP_Men"://杨斌 2018-07-30 break; case "VOTENOPV_Men"://杨斌 2018-07-30 break; case "CRRECTNOP": break; case "CRRECTNOPV": break; case "TIMER": //shape.TextFrame.TextRange.Text = "00:30"; PPTOper.ReSetTimer(Globals.SunVoteARSAddIn.PPTEdit.SlideEdit);//杨斌 2012-03-16 break; default: break; } } } /// /// 加载键盘授权信息 /// 创建 赵丽 /// private void LoadAuthorKeypadList() { try { AuthorKeypadList.Clear(); string curSlideID = CurrentSlide.SlideID.ToString(); int curSlideIndex = CurrentSlide.SlideIndex; string authorType = TagSet.GetValue(TagKey.ResponsePara_CanVote).Value; switch (authorType) { case "cvPerson": IsAllPerson = true; if (EnableList) { IsAllPerson = false; ResponseDB.LoadAuthorKeypadPerson(curSlideID, TagSet); } break; case "cvTopic": IsAllPerson = false; ResponseDB.LoadAuthorKeypadTopic(TagSet, curSlideIndex); break; case "cvAll": //所有人,且启用名单 if (EnableList) { IsAllPerson = false; LoadPersonList(); } else { IsAllPerson = true; } ////杨斌 2015-01-14 //IsAllPerson = true; //if (EnableList) // LoadPersonList(); break; default: if (EnableList) { IsAllPerson = false; LoadPersonList(); } else { IsAllPerson = true; } break; } } catch (Exception ex) { } } /// /// 加载人员名单 /// 创建 赵丽 /// private void LoadPersonList() { AuthorKeypadList = ResponseDB.LoadPersonList(); } /// /// 加载反馈结果,幻灯片浏览编辑的时候加载反馈数据 /// /// public void LoadTopicResult(string topicID, ResponseType responseType) { //LoadAuthorKeypadList(); //List keylist = AuthorKeypadList.Keys.ToList(); ResponseDataList.Clear(); ResponseOptionList.Clear(); ResponseOptionListNoRate.Clear();//杨斌 2016-11-12 ResponseDataList = ResponseDB.GetResponseData(topicID, responseType, LstResponseData); //杨斌 2018-01-27 PowerPoint.Slide sldFind = null; try { PowerPoint.Presentation pres = Globals.SunVoteARSAddIn.Application.ActivePresentation; sldFind = pres.Slides.FindBySlideID(ConvertOper.Convert(topicID).ToInt); } catch { } UpdateResponseCount(responseType, sldFind); } ///// ///// //2012-10-11 屏蔽名单更改 ///// ///// ///// //public void RefreshResult(string topicID, ResponseType responseType) //{ // ResponseDB.DeleteTopicResult(); // LoadTopicResult(topicID, responseType); // ResponseDB.SaveResponseResult(Globals.SunVoteARSAddIn.PPTEdit.PPT.ActivePresentation.Slides.FindBySlideID(Convert.ToInt32(topicID))); //} /// /// 获得参与人数 /// 创建 赵丽 /// /// public int GetParticipateNum() { try { int iNum = 0; string sSql = ""; DataSet ds = null; string curSlideID = CurrentSlide.SlideID.ToString(); string authorType = TagSet.GetValue(TagKey.ResponsePara_CanVote).Value; string authorValue = "0"; switch (authorType) { case "cvAll": case "cvPerson": if (EnableList) { iNum = AuthorKeypadList.Count; } else { iNum = GlobalInfo.hardwareManage.PersonNum; } break; case "cvTopic": iNum = AuthorKeypadList.Count; break; default: if (EnableList) { iNum = AuthorKeypadList.Count; } else { iNum = GlobalInfo.hardwareManage.PersonNum; } break; } return iNum; } catch { return 0; } } /// /// 判断键盘是否有名单对应 /// /// public bool IsExistKeypad(string keyID) { bool bResult = false; DataSet ds = null; string sSql = "select a.* from ST_RosterValue a,ST_RosterColumn b where " + "a.RC_ID=b.RC_ID and b.RC_Index=1 and a.RV_Text='" + keyID + "'"; ds = GlobalInfo.DBOperation.OpenDataSet(sSql); if (ds.Tables[0].Rows.Count != 0) bResult = true; return bResult; } /// /// 判断答案是否正确,计算得分 /// 创建 赵丽 /// 修改:杨斌 2012-03-13 /// 修改:杨斌 2012-10-22 /// /// private bool IsCorrect(ResponseType responseType, string keyValue, out double dScore) { string currectAnswer = ""; string currectAnswer2 = "";//杨斌 2012-10-22 bool bResult = false; dScore = 0; int scoreMode = 0; string[] aryAnswer = null; string[] keyValues = null; switch (responseType) { case ResponseType.Choice: currectAnswer = TagSet.GetValue(TagKey.Choice_CorrectAnswer).Value; currectAnswer2 = TagSet.GetValue(TagKey.Choice_CorrectAnswer2).Value;//杨斌 2012-10-22 //计分模式,1:按选项分值,0:按正确答案,2:按正确答案和剩余时间 scoreMode = TagSet.GetValue(TagKey.Choice_ScoreMode).ToInt; //按选项计分或按正确答案计分。杨斌 2015-03-27。为投票性能优化 if ((scoreMode == 0) || (scoreMode == 2))//正确答案和剩余时间,杨斌 2018-05-08 { if (currectAnswer.Length < 1) return false; } aryAnswer = currectAnswer.Split(','); keyValues = keyValue.Split(','); if (PublicFunction.AryIsEqual(aryAnswer, keyValues)) bResult = true; //按选项计分或按正确答案计分, if (scoreMode == 1) { string optionScore = TagSet.GetValue(TagKey.Choice_ScoreOption).Value; Dictionary optionScoreList = PublicFunction.GetItemScore(optionScore); double dTotalScore = 0; //计算总分数 for (int i = 0; i < keyValues.Length; i++) { int optionItem = ConvertOper.Convert(keyValues[i]).ToInt; if (optionScoreList.Keys.Contains(optionItem)) dTotalScore += optionScoreList[optionItem]; } dScore = dTotalScore; //选项总分为负清零 int ScoreOptionZero = TagSet.GetValue(TagKey.Choice_ScoreOptionZero).ToInt; if ((ScoreOptionZero == 1) && (dScore < 0)) dScore = 0; //杨斌 2012-10-22 bResult = false; string sNum = FormatABCTo123(currectAnswer2); sNum = sNum.Replace("10", "0"); aryAnswer = sNum.Split(','); if (PublicFunction.AryIsEqual(aryAnswer, keyValues)) bResult = true; //2012-11-21 日本按选项计分,设置正确答案后,只要没有答对都计0分 if (GlobalInfo.OEMLogo == OEMLogos.oem3eAnalyzer) { if ((!bResult) && (currectAnswer2 != "")) dScore = 0; } }//按选项计分 else { if (currectAnswer.Length > 0)//没有正确答案不计分,杨斌 2012-03-01 { if (bResult) { int rightScore = TagSet.GetValue(TagKey.Choice_ScoreRight).ToInt; dScore = rightScore; } else { int wrongScore = TagSet.GetValue(TagKey.Choice_ScoreWrong).ToInt; dScore = wrongScore; } } }//按正确答案计分 break; case ResponseType.Judge://杨斌 2012-03-13 currectAnswer = TagSet.GetValue(TagKey.Judge_CorrectAnswer).Value; currectAnswer2 = TagSet.GetValue(TagKey.Judge_CorrectAnswer2).Value;//杨斌 2012-10-22 //计分模式,1:按选项分值,0:按正确答案 scoreMode = TagSet.GetValue(TagKey.Judge_ScoreMode).ToInt; //按选项计分或按正确答案计分。杨斌 2015-03-27。为投票性能优化 if ((scoreMode == 0) || (scoreMode == 2))//正确答案和剩余时间,杨斌 2018-05-08 { if (currectAnswer.Length < 1) return false; } aryAnswer = currectAnswer.Split(','); keyValues = keyValue.Split(','); if (PublicFunction.AryIsEqual(aryAnswer, keyValues)) bResult = true; //按选项计分或按正确答案计分, if (scoreMode == 1) { string optionScore = TagSet.GetValue(TagKey.Judge_ScoreOption).Value; Dictionary optionScoreList = PublicFunction.GetItemScore(optionScore); double dTotalScore = 0; //计算总分数 for (int i = 0; i < keyValues.Length; i++) { int optionItem = ConvertOper.Convert(keyValues[i]).ToInt; if (optionScoreList.Keys.Contains(optionItem)) dTotalScore += optionScoreList[optionItem]; } dScore = dTotalScore; //选项总分为负清零 int ScoreOptionZero = TagSet.GetValue(TagKey.Judge_ScoreOptionZero).ToInt; if ((ScoreOptionZero == 1) && (dScore < 0)) dScore = 0; //杨斌 2012-10-22 bResult = false; string sNum = FormatABCTo123(currectAnswer2); sNum = sNum.Replace("10", "0"); aryAnswer = sNum.Split(','); if (PublicFunction.AryIsEqual(aryAnswer, keyValues)) bResult = true; //2012-11-21 日本按选项计分,设置正确答案后,只要没有答对都计0分 if (GlobalInfo.OEMLogo == OEMLogos.oem3eAnalyzer) { if ((!bResult) && (currectAnswer2 != "")) dScore = 0; } }//按选项计分 else { if (currectAnswer.Length > 0)//没有正确答案不计分,杨斌 2012-03-01 { if (bResult) { int rightScore = TagSet.GetValue(TagKey.Judge_ScoreRight).ToInt; dScore = rightScore; } else { int wrongScore = TagSet.GetValue(TagKey.Judge_ScoreWrong).ToInt; dScore = wrongScore; } } }//按正确答案计分 break; case ResponseType.Order: //2012-12-25 不需要去掉分隔符,否则答案判断有误 赵丽 //keyValue = keyValue.Replace(",", "");//排序题格式化去掉分隔符。杨斌 2012-11-19 currectAnswer = TagSet.GetValue(TagKey.Order_CorrectAnswer).Value; scoreMode = TagSet.GetValue(TagKey.Order_ScoreMode).ToInt; if (scoreMode == 0)//排序计分模式2判断有误。杨斌 2018-07-06 //if ((scoreMode == 0) || (scoreMode == 2))//正确答案和剩余时间,杨斌 2018-05-08 { if (currectAnswer.Length > 0)//没有正确答案不计分,杨斌 2012-03-01 { if (keyValue == currectAnswer) { bResult = true; } if (bResult) { int rightScore = TagSet.GetValue(TagKey.Order_ScoreRight).ToInt; dScore = rightScore; } else { int wrongScore = TagSet.GetValue(TagKey.Order_ScoreWrong).ToInt; dScore = wrongScore; } } } else if (scoreMode == 2)//杨斌 2016-06-02 { if ((currectAnswer.Length > 0) && (keyValue.Length > 0)) { string[] aryCorrect = currectAnswer.Split(','); string[] aryResult = keyValue.Split(','); Dictionary dicScoreOpt = new Dictionary(); string scoreOpt = TagSet.GetValue(TagKey.Order_ScoreOption).Value; string[] aryScore = scoreOpt.Split(PublicFunction.SplitItemScore);//杨斌 2019-07-19 for (int i = 0; i < aryScore.Length; i++) { string[] aryScoreItem = aryScore[i].Split(new char[] { '=' }); if (aryScoreItem.Length >= 2) { int opt = ConvertOper.Convert(aryScoreItem[0]).ToInt; double noScore = ConvertOper.Convert(aryScoreItem[1]).ToDouble; if (!dicScoreOpt.ContainsKey(opt)) dicScoreOpt.Add(opt, noScore); } } int countRight = 0; for (int i = 0; i < aryResult.Length; i++) { if (i < aryCorrect.Length) { if (aryResult[i] == aryCorrect[i]) { int n = i + 1; countRight++; if (dicScoreOpt.ContainsKey(n)) dScore += dicScoreOpt[n]; } } } if (countRight >= aryCorrect.Length) bResult = true; } } break; case ResponseType.Number://杨斌 2012-03-13 currectAnswer = TagSet.GetValue(TagKey.Number_CorrectAnswer).Value; if (currectAnswer.Length > 0)//没有正确答案不计分,杨斌 2012-03-01 { if (keyValue == currectAnswer) { bResult = true; } if (bResult) { int rightScore = TagSet.GetValue(TagKey.Number_ScoreRight).ToInt; dScore = rightScore; } else { int wrongScore = TagSet.GetValue(TagKey.Number_ScoreWrong).ToInt; dScore = wrongScore; } } break; case ResponseType.Text://杨斌 2015-01-12 currectAnswer = TagSet.GetValue(TagKey.Number_CorrectAnswer).Value; if (currectAnswer.Length > 0)//没有正确答案不计分,杨斌 2012-03-01 { if (keyValue == currectAnswer) { bResult = true; } if (bResult) { int rightScore = TagSet.GetValue(TagKey.Number_ScoreRight).ToInt; dScore = rightScore; } else { int wrongScore = TagSet.GetValue(TagKey.Number_ScoreWrong).ToInt; dScore = wrongScore; } } break; case ResponseType.Score: break; default: break; } return bResult; } /// /// 计算评委分组平均分 /// 键为空的值为最后加权的总分,其他为各组平均分 /// 杨斌 2015-07-30 /// public Dictionary CaculateScoreAvgGroup(PowerPoint.Slide slide) { Dictionary res = new Dictionary(); try { TagSet tagSet = new TagSet(slide.Tags); string group = ""; Dictionary dicGroupRate = FrmScoreGroupRate.GetDicScoreGroupRate(slide, out group); if (group.Length < 1) return res; Dictionary> dicScore = new Dictionary>(); foreach (var v in dicGroupRate) { dicScore.Add(v.Key, new List()); } int colGroup = 0; for (int i = 1; i < RosterNow.Columns.Count; i++) { if (RosterNow.Columns[i].ColumnName == group) { colGroup = i; break; } } for (int i = 0; i < ResponseDataList.Count; i++) { string key = ResponseDataList[i].KeyID; RosterRow rr = RosterNow.GetRowByKeyId(key); string groupVal = rr.Cells[colGroup]; if (dicScore.ContainsKey(groupVal)) { double score = ConvertOper.Convert(ResponseDataList[i].KeyValue).ToDouble; dicScore[groupVal].Add(score); } } res.Add("", 0); foreach (var v in dicScore) { int remMax = ConvertOper.Convert(slide.Tags[group + "_" + v.Key + "_RemoveMax"].ToString()).ToInt; int remMin = ConvertOper.Convert(slide.Tags[group + "_" + v.Key + "_RemoveMin"].ToString()).ToInt; List lst = v.Value.ToList(); lst = lst.OrderBy(o => o).ToList(); for (int i = 0; i < remMin; i++) { if (lst.Count > 0) lst.RemoveAt(0); } for (int i = 0; i < remMax; i++) { if (lst.Count > 0) lst.RemoveAt(lst.Count - 1); } if (lst.Count > 0) res.Add(v.Key, lst.Average()); else res.Add(v.Key, 0); //if (v.Value.Count > 0) // res.Add(v.Key, v.Value.Average()); //else // res.Add(v.Key, 0); } double endScore = 0; foreach (var v in res) { if (v.Key.Length > 0) { double rate = 1; if (dicGroupRate.ContainsKey(v.Key)) { rate = dicGroupRate[v.Key]; } endScore += v.Value * rate; } } res[""] = endScore; } catch (Exception ex) { SystemLog.WriterLog(ex); } return res; } /// /// 计算评分结果 /// 杨斌 2015-01-07 /// /// 计算的幻灯片 /// 计算出的总分 /// 计算出的平均分 public void CaculateScore(PowerPoint.Slide slide, out double totalScore, out double avgScore) { totalScore = 0; avgScore = 0; try { if (slide == null) { return; } TagSet currentTagSet = new TagSet(); currentTagSet.Tags = slide.Tags; int minNum = currentTagSet.GetValue(TagKey.Score_RemoveLowCount).ToInt; int maxNum = currentTagSet.GetValue(TagKey.Score_RemoveHighCount).ToInt; int resultFormat = currentTagSet.GetValue(TagKey.Score_ResultFormat).ToInt; string formatStr = "0."; for (int i = 0; i < resultFormat; i++) formatStr += "0"; //double[] aryScore = new double[ResponseDataList.Count]; List lstScore = new List(); for (int i = 0; i < ResponseDataList.Count; i++) { //aryScore[i] = ConvertOper.Convert(ResponseDataList[i].KeyValue).ToDouble; double[] aryScoreAdd = new double[2]; aryScoreAdd[0] = ConvertOper.Convert(ResponseDataList[i].KeyValue).ToDouble; aryScoreAdd[1] = 1; string key = ResponseDataList[i].KeyID.ToString(); if (DicJudgeRage.ContainsKey(key)) { aryScoreAdd[1] = DicJudgeRage[key]; } lstScore.Add(aryScoreAdd); } lstScore = lstScore.OrderBy(o => o[0]).ToList(); double rateCount = 0;//总权重 double totalScoreRate = 0; if ((minNum + maxNum) < ResponseDataList.Count)//不能全去掉了 { for (int i = minNum; i < lstScore.Count - maxNum; i++) { totalScore += lstScore[i][0]; totalScoreRate += lstScore[i][0] * lstScore[i][1]; rateCount += lstScore[i][1]; } } if (rateCount != 0) avgScore = totalScoreRate / rateCount; ////杨斌 2014-06-11 计算评委权重。需要屏蔽去掉最高最低分 //if (DicJudgeRage.Count > 0) //{ // for (int i = 0; i < ResponseDataList.Count; i++) // { // string key = ResponseDataList[i].KeyID.ToString(); // if (DicJudgeRage.ContainsKey(key)) // { // aryScore[i] *= DicJudgeRage[key]; // } // } // minNum = 0; // maxNum = 0; //} //else //{ // Array.Sort(aryScore); //} //if ((minNum + maxNum) >= ResponseDataList.Count) // totalScore = 0; //else // for (int i = minNum; i < aryScore.Length - maxNum; i++) // totalScore += aryScore[i]; //int totalNum = (ResponseDataList.Count - (minNum + maxNum)); //if (totalNum > 0) // avgScore = totalScore / totalNum; //进行两次转换,实现四舍五入 totalScore = Convert.ToDouble(totalScore.ToString(formatStr)); if (totalScoreRate != 0) totalScore = Convert.ToDouble(totalScoreRate.ToString(formatStr));//总分加权。杨斌 2016-01-04 avgScore = Convert.ToDouble(avgScore.ToString(formatStr)); } catch (Exception ex) { SystemLog.WriterLog(ex); } } /// /// 计算得分 /// ///计算的幻灯片 /// public void CaculateScore(PowerPoint.Slide slide, bool isVoteStop = false) { if (slide == null) { return; } double totalScore = 0; double avgScore = 0; TagSet currentTagSet = new TagSet(); currentTagSet.Tags = slide.Tags; int showAvgG = currentTagSet.GetValue(TagKey.Score_ShowAvgGroup).ToInt; int showAvgTG = currentTagSet.GetValue(TagKey.Score_ShowAvgTableGroup).ToInt; int resultDec = currentTagSet.GetValue(TagKey.Score_ResultFormat).ToInt; int runTimeShowScore = currentTagSet.GetValue(TagKey.Score_RunTimeShowScore).ToInt; if (isVoteStop) runTimeShowScore = 1; CaculateScore(slide, out totalScore, out avgScore); //小数点格式化。杨斌 2016-01-04 int decEndScore = currentTagSet.GetValue(TagKey.Score_ResultFormat).ToInt; string strTotalScore = ConvertOper.Round45String(totalScore, decEndScore); string strAvgScore = ConvertOper.Round45String(avgScore, decEndScore); Dictionary dicScore = CaculateScoreAvgGroup(slide);//杨斌 2015-07-30 //保存分数,方便编辑插入时显示 杨斌 2012-03-16 //currentTagSet.SetValue(TagKey.Slide_ScoreSUM, totalScore); //currentTagSet.SetValue(TagKey.Slide_ScoreAVG, avgScore); //杨斌 2016-01-04 currentTagSet.SetValue(TagKey.Slide_ScoreSUM, strTotalScore); currentTagSet.SetValue(TagKey.Slide_ScoreAVG, strAvgScore); //刷新平均分和总分 string lblText = ""; string[] s = null; foreach (PowerPoint.Shape shape in slide.Shapes) { switch (shape.Name) { case "SUMSCORE": lblText = shape.TextFrame.TextRange.Text.Trim(); s = lblText.Split(':'); //if (s.Length >= 2)//杨斌 2015-07-28 // lblText = s[0] + ":" + totalScore.ToString(); //else // lblText = totalScore.ToString(); //杨斌 2016-01-04 if (s.Length >= 2)//杨斌 2015-07-28 lblText = s[0].TrimEnd(' ') + " : " + strTotalScore;//杨斌 2019-06-06//lblText = s[0] + ":" + strTotalScore; else lblText = strTotalScore; shape.TextFrame.TextRange.Text = lblText; int showTotal = currentTagSet.GetValue(TagKey.Score_ShowTotal).ToInt; if ((showTotal == 1) && (runTimeShowScore == 1))//杨斌 2016-04-26 shape.Visible = Microsoft.Office.Core.MsoTriState.msoTrue; break; case "AVGSCORE": lblText = shape.TextFrame.TextRange.Text.Trim(); s = lblText.Split(':'); //if (s.Length >= 2)//杨斌 2015-07-28 // lblText = s[0] + ":" + avgScore.ToString(); //else // lblText = avgScore.ToString(); //杨斌 2016-01-04 if (s.Length >= 2)//杨斌 2015-07-28 lblText = s[0].TrimEnd(' ') + " : " + strAvgScore;//杨斌 2019-06-06//lblText = s[0] + ":" + strAvgScore; else lblText = strAvgScore; shape.TextFrame.TextRange.Text = lblText; int showAvg = currentTagSet.GetValue(TagKey.Score_ShowAvg).ToInt; if ((showAvg == 1) && (runTimeShowScore == 1))//杨斌 2016-04-26 shape.Visible = Microsoft.Office.Core.MsoTriState.msoTrue; break; case "AVGScoreGroup"://评委分组平均分 double scoreAvgG = 0; if (dicScore.ContainsKey("")) scoreAvgG = dicScore[""]; lblText = shape.TextFrame.TextRange.Text.Trim(); s = lblText.Split(':'); string scoreAvgGStr = "0"; if (scoreAvgG != 0) scoreAvgGStr = ConvertOper.Round45String(scoreAvgG, resultDec); if (s.Length >= 2)//杨斌 2015-07-28 lblText = s[0].TrimEnd(' ') + " : " + scoreAvgGStr;//杨斌 2019-06-06//lblText = s[0] + ":" + scoreAvgGStr; else lblText = scoreAvgGStr; shape.TextFrame.TextRange.Text = lblText; if (showAvgG == 1) shape.Visible = Microsoft.Office.Core.MsoTriState.msoTrue; break; case "AVGScoreTableGroup"://评委分组平均分表 if (shape.HasTable == Microsoft.Office.Core.MsoTriState.msoTrue) { string groupName = currentTagSet.GetValue(TagKey.Score_JudgeGroupDetail_GroupName).Value; Dictionary dicGroup = PanelScore.GetScoreGroupVotedCount(groupName); for (int i = 2; i <= shape.Table.Rows.Count; i++) { double scoreAvgI = 0; if (dicScore.Count > (i - 1)) scoreAvgI = dicScore.Values.ToList()[i - 1]; string scoreAvgIStr = "0"; if (scoreAvgI != 0) scoreAvgIStr = ConvertOper.Round45String(scoreAvgI, resultDec); ////shape.Table.Cell(i, 2).Shape.TextFrame.TextRange.Text = "参与数?"; ////shape.Table.Cell(i, 3).Shape.TextFrame.TextRange.Text = "反馈数?"; string groupValue = shape.Table.Cell(i, 1).Shape.TextFrame.TextRange.Text; if (dicGroup.ContainsKey(groupValue)) shape.Table.Cell(i, 3).Shape.TextFrame.TextRange.Text = dicGroup[groupValue].ToString(); shape.Table.Cell(i, 4).Shape.TextFrame.TextRange.Text = scoreAvgIStr; } } if (showAvgTG == 1) shape.Visible = Microsoft.Office.Core.MsoTriState.msoTrue; break; case "AVGScoreTableGroupDetail"://评委分组平均分表明细表 if (shape.HasTable == Microsoft.Office.Core.MsoTriState.msoTrue) { Dictionary dicSort = new Dictionary(); for (int i = 2; i <= shape.Table.Rows.Count; i++) { //double scoreAvgI = 0; //if (dicScore.Count > i) // scoreAvgI = dicScore.Values.ToList()[i]; //string scoreAvgIStr = "0"; //if (scoreAvgI != 0) // scoreAvgIStr = ConvertOper.Round45String(scoreAvgI, resultDec); string keyId = shape.Table.Cell(i, 1).Shape.TextFrame.TextRange.Text; string score = ""; double dScore = 0; if (GlobalInfo.response.ResponseDataList.Contains(keyId)) score = GlobalInfo.response.ResponseDataList[keyId].KeyValue; dScore = ConvertOper.Convert(score).ToDouble; shape.Table.Cell(i, 3).Shape.TextFrame.TextRange.Text = score; if (score.Length > 0)//未评分的不计算。 dicSort.Add(i, dScore); } List lstSort = dicSort.OrderBy(o => o.Value).ToDictionary(o => o.Key, o => o.Value).Keys.ToList(); string group = currentTagSet.GetValue(TagKey.Score_JudgeGroupDetail_GroupName).Value; string groupVal = currentTagSet.GetValue(TagKey.Score_JudgeGroupDetail_GroupValue).Value; int remMax = ConvertOper.Convert(slide.Tags[group + "_" + groupVal + "_RemoveMax"].ToString()).ToInt; int remMin = ConvertOper.Convert(slide.Tags[group + "_" + groupVal + "_RemoveMin"].ToString()).ToInt; for (int i = 0; i < lstSort.Count; i++) { int row = lstSort[i]; for (int col = 1; col <= shape.Table.Columns.Count; col++) { if (i < remMin) { shape.Table.Rows[row].Cells[col].Shape.Fill.Visible = Microsoft.Office.Core.MsoTriState.msoTrue; shape.Table.Rows[row].Cells[col].Shape.Fill.BackColor.RGB = Convert.ToInt32("0000FF", 16); shape.Table.Rows[row].Cells[col].Shape.Fill.ForeColor.RGB = Convert.ToInt32("0000FF", 16); } else if (i >= (lstSort.Count - remMax)) { shape.Table.Rows[row].Cells[col].Shape.Fill.Visible = Microsoft.Office.Core.MsoTriState.msoTrue; shape.Table.Rows[row].Cells[col].Shape.Fill.BackColor.RGB = Convert.ToInt32("00FF00", 16); shape.Table.Rows[row].Cells[col].Shape.Fill.ForeColor.RGB = Convert.ToInt32("00FF00", 16); } else shape.Table.Rows[row].Cells[col].Shape.Fill.Visible = Microsoft.Office.Core.MsoTriState.msoFalse; } } } if (showAvgTG == 1) shape.Visible = Microsoft.Office.Core.MsoTriState.msoTrue; break; } } PPTOper.ShowTableScoreRank(slide, false);//杨斌 2017-09-21 } /// /// 删除题目反馈记录 /// /// public void ClearResponseDB(string topicID) { string sSql = "delete from ST_Response where T_ID='" + topicID + "'"; GlobalInfo.DBOperation.ExecuteNonQuery(sSql); ClearResponse(); } /// /// 20140317- 赵丽 获取加权后的反馈人数 /// /// public double GetResponseNum() { double iNum = 0; if (isVoteRate()) { //杨斌 2015-01-26 屏蔽 //for (int i = 0; i < ResponseDataList.Count; i++) //{ // //杨斌 2014-06-04 // string key = ResponseDataList[i].KeyID.ToString(); // if (VoterRate.Contains(key)) // iNum += VoterRate[key]; //} iNum = VoteRateSum;//杨斌 2015-01-26 } else { return ResponseDataList.Count; } return iNum; } /// /// 获得参与人数(2014-3-17 增加加权值) /// 杨斌 2015-03-27。加权 /// 创建 赵丽 /// /// public double GetParticipantNum(ResponseType responseType, PowerPoint.Slide slide) { TagSet tagSet = new TagSet(); tagSet.Tags = slide.Tags; double iNum = 0; if (GlobalInfo.response.isVoteRate()) { iNum = GlobalInfo.response.totalWeight; } else { if (responseType == ResponseType.SignIn) iNum = tagSet.GetValue(TagKey.Slide_Dueno).ToDouble; else { iNum = tagSet.GetValue(TagKey.Slide_ParticipantNum).ToDouble; } } return iNum; } /// /// 获得参与人数,不加权,用于计算正确率。杨斌 2015-03-27 /// /// /// /// public double GetParticipantNumNoRate(ResponseType responseType, PowerPoint.Slide slide) { TagSet tagSet = new TagSet(slide.Tags); double iNum = 0; if (responseType == ResponseType.SignIn) iNum = tagSet.GetValue(TagKey.Slide_Dueno).ToDouble; else { iNum = EnableList ? RousterCount : GlobalInfo.hardwareManage.PersonNum; } return iNum; } /// /// 排序题记分排序 /// 杨斌 2014-04-18 /// /// /// /// private int CompareOrderItem(OrderItem x, OrderItem y) { int res = 0; //Asc if (x.No > y.No) res = 1; else if (x.No < y.No) res = -1; //Desc for (int i = y.Count.Length - 1; i >= 0; i--) { if (x.Count[i] > y.Count[i]) res = -1; else if (x.Count[i] < y.Count[i]) res = 1; } //Desc if (x.Score > y.Score) res = -1; else if (x.Score < y.Score) res = 1; return res; } /// /// 排序题结果分数 /// public List ListOrderScore = new List(); /// /// 获得排序题结果 /// 杨斌 2014-04-17 /// public void GetOrderResult(PowerPoint.Slide slide) { try { ListOrderScore.Clear(); //TagSet tagSet = null; //if (Globals.SunVoteARSAddIn.PPTShow.IsShowSlide) //{ // if (Globals.SunVoteARSAddIn.PPTShow.ResponseType != ResponseType.Order) return; // tagSet = Globals.SunVoteARSAddIn.PPTShow.TagSetSlide; //} //else //{ // if (Globals.SunVoteARSAddIn.PPTEdit.ResponseTypeSlideEdit != ResponseType.Order) return; // tagSet = Globals.SunVoteARSAddIn.PPTEdit.TagSet; //} TagSet tagSet = new TagSet(slide.Tags); ResponseType rType = EnumName.GetEnum(tagSet.GetValue(TagKey.ResponseType).Value.ToString()); if (rType != ResponseType.Order) return; int scoreMode = tagSet.GetValue(TagKey.Order_ScoreMode).ToInt; if (scoreMode != 1) return; int optCount = tagSet.GetValue(TagKey.Order_OptionCount).ToInt; if (optCount < 1) return; List lstItem = new List(); double[] aryOptScore = new double[optCount]; for (int i = 0; i < optCount; i++) lstItem.Add(new OrderItem(i + 1, 0, new int[optCount])); string score = tagSet.GetValue(TagKey.Order_ScoreOption).Value; string[] aryScore = score.Split(new char[] { PublicFunction.SplitItemScore });//杨斌 2019-07-19 for (int i = 0; i < aryScore.Length; i++) { string[] aryScoreItem = aryScore[i].Split(new char[] { '=' }); if (aryScoreItem.Length >= 2) { int opt = ConvertOper.Convert(aryScoreItem[0]).ToInt; double noScore = ConvertOper.Convert(aryScoreItem[1]).ToDouble; if ((opt >= 1) && (opt <= optCount)) aryOptScore[opt - 1] = noScore; } } for (int i = 0; i < this.ResponseDataList.Count; i++) { string[] aryVal = ResponseDataList[i].KeyValue.Split(new char[] { ',' }); for (int n = 0; n < aryVal.Length; n++) { int opt = ConvertOper.Convert(aryVal[n]).ToInt; if ((opt >= 1) && (opt <= optCount) && (n < optCount)) { int no = opt - 1; lstItem[no].Score += aryOptScore[n]; lstItem[no].Count[n]++; } } } lstItem.Sort(CompareOrderItem); ListOrderScore = lstItem; ////调试显示。杨斌 2014-04-18 //List lstShow = new List(); //lstShow.Add("no\t score\t count"); //foreach (OrderItem a in lstItem) //{ // string[] aryCnt = new string[a.Count.Length]; // for (int i = 0; i < aryCnt.Length; i++) // aryCnt[i] = a.Count[i].ToString(); // lstShow.Add(a.No + "\t " + a.Score + "\t " + string.Join(",", aryCnt)); //} //MessageBox.Show(string.Join("\r\n", lstShow.ToArray())); } catch (Exception ex) { SystemLog.WriterLog(ex); } } } }