/// <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 { //暂时什么都不做 } }