/// <summary>
        /// VOBC产品子子系统设备执行部署实现方法
        /// </summary>
        /// <param name="configState">预检状态信息</param>
        public override void RunDeploy(DeployConfiState configState)
        {
            //获取当前正在处理的vobc产品类对象
            VOBCProduct vobc = base.BelongProduct as VOBCProduct;

            //当前为VOBC产品第一个烧录设备  执行产品烧录前的准备过程
            if (vobc.InProcess == false && vobc.SkipFlag == false)
            {
                ///清空烧录过程状态
                vobc.ResetDeviceProcState();

                //通知界面刷新
                CDeviceDataFactory.Instance.VobcContainer.dataModify.Modify();

                //预检状态信息赋值
                vobc.DeployConfigCheck = configState;
                vobc.recvCheckCount    = 0;

                //开始部署前清空更新成功文件计数
                UpdateSuccessFileCount = 0;

                #region 给予更新状态实例赋初始值--依据用户在界面中勾选的烧录文件类型
                vobc._updateFileState = new VOBCUpdateFileState();

                vobc._updateFileState.AtoBootCompleteFlag  = configState.IsBootLoaderCheck;
                vobc._updateFileState.AtpBootCompleteFlag  = configState.IsBootLoaderCheck;
                vobc._updateFileState.ComBootCompleteFlag  = configState.IsBootLoaderCheck;
                vobc._updateFileState.MmiBootCompleteFlag  = configState.IsBootLoaderCheck;
                vobc._updateFileState.CcovBootCompleteFlag = configState.IsBootLoaderCheck;

                vobc._updateFileState.AtoCoreCompleteFlag  = configState.IsCoreCheck;
                vobc._updateFileState.AtpCoreCompleteFlag  = configState.IsCoreCheck;
                vobc._updateFileState.ComCoreCompleteFlag  = configState.IsCoreCheck;
                vobc._updateFileState.MmiCoreCompleteFlag  = configState.IsCoreCheck;
                vobc._updateFileState.CcovCoreCompleteFlag = configState.IsCoreCheck;

                vobc._updateFileState.AtoDataCompleteFlag  = configState.IsDataCheck;
                vobc._updateFileState.AtpDataCompleteFlag  = configState.IsDataCheck;
                vobc._updateFileState.CcovDataCompleteFlag = configState.IsDataCheck;

                vobc._updateFileState.AtoNvramCompleteFlag = configState.IsNvRamCheck;
                vobc._updateFileState.AtpNvramCompleteFlag = configState.IsNvRamCheck;
                vobc._updateFileState.MmiNvramCompleteFlag = configState.IsNvRamCheck;

                vobc._updateFileState.CcovConfigCompleteFlag = configState.IsIniCheck;

                #endregion
                //获取对端状态
                VOBCProduct oppovobc = CDeviceDataFactory.Instance.GetOppositeProductByIDEnd(vobc.ProductID);
                //设备预检
                string preCheckResult = PreCheck(vobc.VobcStateInfo, oppovobc.VobcStateInfo);

                //预检结论等于空即预检成功  不等于空 预检失败
                if (preCheckResult != String.Empty)
                {
                    //设置VOBC产品下的子子系统预检状态
                    foreach (IDevice device in vobc.CBelongsDevice)
                    {
                        device.PreCheckResult     = false;
                        device.PreCheckFailReason = preCheckResult;
                    }

                    //刷新界面
                    CDeviceDataFactory.Instance.VobcContainer.dataModify.Modify();

                    //记录警告日志
                    LogManager.InfoLog.LogProcWarning("VOBCDevice", "RunDeploy", "VOBC产品:" + base.BelongProduct.ProductID + "预检失败,原因" + preCheckResult);
                    LogManager.InfoLog.LogProcWarning("VOBCDevice", "RunDeploy", "VOBC产品:" + base.BelongProduct.ProductID + "部署未执行,部署进程结束");

                    vobc.SkipFlag  = true;
                    vobc.InProcess = false;
                    vobc.Report.ReportWindow("VOBC" + vobc.ProductID + "更新失败!请检查是否满足预检通过条件并重新开始部署");
                    ///通知刷新背景色
                    CDeviceDataFactory.Instance.VobcContainer.dataModify.Color();
                }
                else
                {
                    //设置VOBC产品下的子子系统预检状态
                    foreach (IDevice device in vobc.CBelongsDevice)
                    {
                        device.PreCheckResult     = true;
                        device.PreCheckFailReason = preCheckResult;
                    }

                    //记录日志
                    LogManager.InfoLog.LogProcInfo("VOBCDevice", "RunDeploy", "开始VOBC产品:" + base.BelongProduct.ProductID + "部署过程");

                    //设置跳过标志为false  后续代码根据此标志 执行具体部署
                    vobc.SkipFlag = false;

                    //生成配置文件
                    BelongProduct.GenConfig();

                    //当前处于部署阶段
                    vobc.InProcess = true;
                }

                ////用完清空VobcStateInfo(有误)
                //vobc.VobcStateInfo = null;
                //oppovobc.VobcStateInfo = null;
            }

            //如果跳过标志为假且当前处在部署第一阶段,执行部署
            if ((!vobc.SkipFlag) && (vobc.StepOne))
            {
                vobc.InProcess = true;
                CDeviceDataFactory.Instance.VobcContainer.dataModify.Color();

                //执行部署
                DeployExec();

                //若执行部署过程中 跳出标志被置为true
                if (vobc.SkipFlag == true)
                {
                    ///当前处于部署之中
                    if (vobc.InProcess == true)
                    {
                        //刷新界面日志信息
                        vobc.Report.ReportWindow("VOBC" + vobc.ProductID + "更新失败:执行过程中出现失败环节,请重新开始部署");
                        vobc.InProcess = false;
                    }

                    ///通知刷新背景色
                    CDeviceDataFactory.Instance.VobcContainer.dataModify.Color();
                }
            }
            //当前处于第一阶段但是跳过标志为true,则更新失败
            else if (vobc.StepOne)
            {
                LogManager.InfoLog.LogProcInfo("VOBCDevice", "RunDeploy", base.BelongProduct.ProductID + "部署过程失败:生成配置文件前的相关环节失败或未收到允许上传的回复");
                //vobc.Report.ReportWindow("更新失败!(生成配置文件前的相关环节失败或未收到允许上传的回复)");
                //刷新界面
                CDeviceDataFactory.Instance.VobcContainer.dataModify.Modify();
                CDeviceDataFactory.Instance.VobcContainer.dataModify.Color();
            }
            //当前处于第二阶段,任何在第二阶段运行至此处的设备不予理会,第一阶段结束后则证明更新标志为已下发
            else
            {
            }
        }
        /// <summary>
        /// VOBC子子系统设备部署执行(更新复位)执行虚方法
        /// </summary>
        public virtual void DeployExec()
        {
            //获取VOBC产品实例
            VOBCProduct vobc = base.BelongProduct as VOBCProduct;

            //验证需要发送的文件是否存在(返回true 则代表文件检查成功且已发送了文件传输请求)
            if (GetFileListAndCheckExist(vobc))
            {
                ////记录日志
                //LogManager.InfoLog.LogProcInfo(this.GetType().Name, "DeployExec", "开始VOBC产品:" + base.BelongProduct.ProductID + "的子子系统:" + base.DeviceType + "部署过程");

                //发送文件
                if (!SendFile(vobc))
                {
                    //LogManager.InfoLog.LogProcError(this.GetType().Name, "DeployExec", "VOBC产品:" + base.BelongProduct.ProductID + "的子子系统:" + base.DeviceType + "发送文件超时,部署失败!");
                    vobc.Report.ReportWindow("VOBC产品:" + base.BelongProduct.ProductID + "的子子系统:" + base.DeviceType + "发送文件超时,部署失败!");
                    vobc.SkipFlag = true;
                    //vobc.InProcess = false; Modified @ 10.16 在外层置false
                    //Modified @ 9.28 与DataAnalysis的操作重复,且时机不同步,删除此处界面变化,判断仅用于跳出执行流程。
                    //CDeviceDataFactory.Instance.VobcContainer.SetProductDeviceState(vobc.Ip, Convert.ToInt32(vobc.Port), "发送失败");
                    //CDeviceDataFactory.Instance.VobcContainer.SetProductState(vobc.Ip, Convert.ToInt32(vobc.Port), "更新失败");
                    return;
                }

                //执行文件校验操作
                if (!CheckFile(vobc))
                {
                    //LogManager.InfoLog.LogProcError(this.GetType().Name, "DeployExec", "VOBC产品:" + base.BelongProduct.ProductID + "的子子系统:" + base.DeviceType + "校验文件超时或未通过,部署失败!");
                    vobc.Report.ReportWindow("VOBC产品:" + base.BelongProduct.ProductID + "的子子系统:" + base.DeviceType + "校验文件超时或未通过,部署失败!");
                    vobc.SkipFlag = true;
                    //vobc.InProcess = false; Modified @ 10.16 在外层置false
                    //Modified @ 9.28 与DataAnalysis的操作重复,且时机不同步,删除此处界面变化,判断仅用于跳出执行流程。
                    //CDeviceDataFactory.Instance.VobcContainer.SetProductDeviceState(vobc.Ip, Convert.ToInt32(vobc.Port),"校验失败");
                    //CDeviceDataFactory.Instance.VobcContainer.SetProductState(vobc.Ip,Convert.ToInt32(vobc.Port),"更新失败");
                    return;
                }

                //检查VOBC产品是否全部发送和校验,这里有冗余操作,并不是在这里完成的文件校验核对 @ 10.16
                if (vobc.IsFileChecked())
                {
                    //记录日志
                    LogManager.InfoLog.LogProcInfo(this.GetType().Name, "DeployExec", "VOBC" + base.BelongProduct.ProductID + "所有文件校验通过,开始更新过程");

                    //刷新界面显示内容
                    vobc.Report.ReportWindow("VOBC" + vobc.ProductID + "部署文件校验成功!");

                    //执行文件更新流程
                    if (!BelongProduct.FileUpdate())
                    {
                        vobc.SkipFlag  = true;
                        vobc.InProcess = false;
                    }
                }
                else
                {
                    ///校验不通过次数+1
                    vobc.recvCheckCount++;
                }
                if (vobc.recvCheckCount == vobc.CSelectedDeviceType.Count)
                {
                    ///接收到全部device的校验回复,依然失败,校验失败
                    vobc.Report.ReportWindow("VOBC" + vobc.ProductID + "部署文件校验失败!");
                    vobc.SkipFlag = true;
                    //vobc.InProcess = false; Modified @ 10.16 在外层置false
                    CDeviceDataFactory.Instance.VobcContainer.SetProductFailReason(vobc.Ip, Convert.ToInt32(vobc.Port), "文件校验未通过");
                    CDeviceDataFactory.Instance.VobcContainer.SetProductState(vobc.Ip, Convert.ToInt32(vobc.Port), "更新失败");
                }
            }
            else
            {
                //暂时什么都不做
            }
        }