/// <summary>
        /// 同步任务状态到数据库。
        /// </summary>
        /// <param name="queryObjectResult">查询结果</param>
        /// <param name="taskName">任务名</param>
        private void SaveTaskProgressToDB(QueryObjectResult <DeployProgress> queryObjectResult, string taskName)
        {
            //sync to the database.
            DeployProgress deployProgress = queryObjectResult.Data;
            HWESightTask   hwtask         = HWESightTaskDal.Instance.FindTaskByName(this.ESSession.HWESightHost.ID, taskName);

            hwtask.TaskStatus = deployProgress.TaskStatus;

            hwtask.TaskResult = deployProgress.TaskResult;
            hwtask.TaskCode   = (!string.IsNullOrEmpty(deployProgress.TaskCode) && !string.Equals(deployProgress.TaskCode, "0")) ?
                                (errorPix + deployProgress.TaskCode) : deployProgress.TaskCode;
            hwtask.ErrorDetail = deployProgress.ErrorDetail;

            hwtask.LastModifyTime = System.DateTime.Now;
            //find child device in database.
            int progress = UpdateHWTaskResourceList(hwtask, deployProgress);

            if (progress > 0)
            {
                hwtask.TaskProgress = progress;// deployProgress.TaskProgress;
            }
            else
            {
                hwtask.TaskProgress = deployProgress.TaskProgress;
            }
            if (progress == 100)
            {
                hwtask.SyncStatus = ConstMgr.HWESightTask.SYNC_STATUS_FINISHED;
            }

            hwtask.SyncStatus = GetTaskStatus(hwtask.SyncStatus, deployProgress.TaskStatus, deployProgress.TaskResult, deployProgress.TaskCode);
            HWESightTaskDal.Instance.UpdateEntity(hwtask);
        }
        /// <summary>
        /// 更新任务资源表。 更新设备明细到数据库
        /// </summary>
        /// <param name="hwtask">模板部署任务</param>
        /// <param name="deployProgress">部署任务明细</param>
        /// <returns>完成的设备数量</returns>
        private int UpdateHWTaskResourceList(HWESightTask hwtask, DeployProgress deployProgress)
        {
            bool isFinsihed  = false;
            int  finishedCnt = 0;
            IList <HWTaskResource> resourceList         = HWTaskResourceDal.Instance.FindTaskResourceByTaskId(hwtask.ID);
            Dictionary <string, DeviceProgress> dviDict = new Dictionary <string, DeviceProgress>();

            if (deployProgress.DeviceDetails == null)
            {
                return(0);
            }

            DeviceProgress emptyDevicProcess = null;

            foreach (DeviceProgress deviceProgress in deployProgress.DeviceDetails)
            {
                if (string.IsNullOrEmpty(deviceProgress.DeviceDn))//如果dn为空,设备关闭或者删除的时候。
                {
                    emptyDevicProcess = deviceProgress;
                }
                else
                {
                    dviDict[deviceProgress.DeviceDn.ToUpper()] = deviceProgress;
                }
            }

            foreach (HWTaskResource hwResource in resourceList)
            {
                DeviceProgress deviceProgress = null;
                if (dviDict.ContainsKey(hwResource.DN.ToUpper()))
                {
                    deviceProgress = dviDict[hwResource.DN.ToUpper()];

                    hwResource.DeviceResult   = deviceProgress.DeviceResult;
                    hwResource.DeviceProgress = deviceProgress.Progress;
                    hwResource.ErrorCode      = deviceProgress.ErrorCode;
                    hwResource.ErrorDetail    = deviceProgress.ErrorDetail;

                    hwResource.TaskType       = ConstMgr.HWESightTask.TASK_TYPE_DEPLOY;
                    hwResource.SyncStatus     = hwtask.SyncStatus;
                    hwResource.LastModifyTime = System.DateTime.Now;
                    if (deviceProgress.Progress == 100)
                    {
                        finishedCnt++;
                    }
                }
                else
                {
                    if (emptyDevicProcess != null)
                    {
                        LogUtil.HWLogger.API.WarnFormat("System can't find this dn=[{0}], using the none dn message.", hwResource.DN);
                        hwResource.DeviceResult   = emptyDevicProcess.DeviceResult;
                        hwResource.DeviceProgress = emptyDevicProcess.Progress;
                        hwResource.ErrorCode      = emptyDevicProcess.ErrorCode;
                        hwResource.ErrorDetail    = emptyDevicProcess.ErrorDetail;

                        hwResource.TaskType       = ConstMgr.HWESightTask.TASK_TYPE_DEPLOY;
                        hwResource.SyncStatus     = hwtask.SyncStatus;
                        hwResource.LastModifyTime = System.DateTime.Now;
                        if (emptyDevicProcess.Progress == 100)
                        {
                            finishedCnt++;
                        }
                    }
                    else
                    {
                        LogUtil.HWLogger.API.WarnFormat("System can't find this dn=[{0}]", hwResource.DN);
                    }
                }
                HWTaskResourceDal.Instance.UpdateEntity(hwResource);
            }
            if (resourceList.Count > 0)
            {
                return((finishedCnt * 100) / resourceList.Count);
            }
            else
            {
                return(0);
            }
        }