///--------------------------------------------------------------------------
/// 文 件 名: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);
}
}
}
}