/// <summary>
        /// 迭代T8配置项
        /// </summary>
        private void IteratonT8TaskItems()
        {
            int intervaltime = 1000 * 60 * 5;//迭代完毕间隔5分钟再重新迭代

            while (!cts.IsCancellationRequested)
            {
                foreach (KeyValuePair <string, T8ConfigItemEntity> item in T8ConfigItemDic)
                {
                    if (cts.IsCancellationRequested)
                    {
                        break;
                    }

                    T8ConfigItemEntity      t8ConfigItem   = item.Value;
                    TimingQueryTimeStragety timingStragety = new BuildInstanceObject().GetTimingQueryTimeStragety(t8ConfigItem.DateType);
                    DateTime TimingStartTime = timingStragety.GetStartTime(DateTime.Now);
                    DateTime TimingEndTime   = timingStragety.GetStartTime(DateTime.Now);

                    if (DateTime.Now >= TimingStartTime && DateTime.Now <= TimingEndTime)
                    {
                        Task.Factory.StartNew(() => BuildServiceTask(t8ConfigItem, cts.Token));
                    }
                }

                for (int i = 0; i < intervaltime; i++)
                {
                    if (cts.IsCancellationRequested)
                    {
                        break;
                    }
                    Thread.Sleep(1000);
                }
            }
        }
        /// <summary>
        /// 添加配置项
        /// </summary>
        /// <param name="dateType"></param>
        /// <param name="dataType"></param>
        /// <param name="item"></param>
        /// <returns></returns>
        public static bool AddItem(DateType dateType, DataType dataType, T8ConfigItemEntity item)
        {
            if (item == null)
            {
                return(false);
            }

            T8ConfigItemContainer t8ConfigItemContainer;

            if (T8Config.T8ItemContainerDic.TryGetValue(dateType, out t8ConfigItemContainer))
            {
                if (dataType == DataType.SaleData)
                {
                    t8ConfigItemContainer.T8ConfigItemSale = item;
                }
                else
                {
                    t8ConfigItemContainer.T8ConfigITemOnShelf = item;
                }

                if (_T8ItemContainerDic.TryAdd(dateType, t8ConfigItemContainer))
                {
                    T8Config.T8ItemContainerDic = _T8ItemContainerDic;
                    if (SerializableHelper <T8ConfigEntity> .BinarySerializeFile(_T8ConfigFilePath, T8Config))
                    {
                        _T8ConfigItemDic = new ConcurrentDictionary <string, T8ConfigItemEntity>();
                        return(true);
                    }
                    else
                    {
                        //T8ConfigItemContainer newitemContainer;
                        //_T8ItemContainerDic.TryRemove(dateType, out newitem);
                        return(false);
                    }
                }
            }

            return(false);
        }
        //public UserCreateTask(T8ConfigItemEntity t8ConfigItem, T8ConfigEntity t8ConfigEntity) : base(t8ConfigItem, t8ConfigEntity)
        //{
        //}

        public override void InitData(T8ConfigItemEntity t8ConfigItem, T8ConfigEntity t8ConfigEntity)
        {
            base._T8ConfigEntity     = t8ConfigEntity;
            base._T8ConfigItemEntity = t8ConfigItem;
        }
 /// <summary>
 /// 设置初始化数据
 /// </summary>
 /// <param name="t8ConfigItem"></param>
 /// <param name="t8ConfigEntity"></param>
 public abstract void InitData(T8ConfigItemEntity t8ConfigItem, T8ConfigEntity t8ConfigEntity);
        /// <summary>
        /// 构建T8任务
        /// </summary>
        private void BuildServiceTask(T8ConfigItemEntity t8ConfigItem, CancellationToken ct)
        {
            try
            {
                ct.ThrowIfCancellationRequested();

                ACreateTask  createTaskService = AutoFacContainer.ResolveNamed <ACreateTask>(typeof(ServiceCreateTask).Name);
                T8TaskEntity t8Task            = createTaskService.CreateTask();
                if (t8Task != null)
                {
                    //获取文件名
                    AFileName aFileNameService = AutoFacContainer.ResolveNamed <AFileName>(typeof(GeneralFileName).Name);
                    t8Task.T8FileEntity.GeneralFileInfo = new T8FileInfoEntity
                    {
                        FileName = aFileNameService.FileName(t8Task.T8FileEntity),
                        FilePath = aFileNameService.FileFullName(t8Task.T8FileEntity)
                    };

                    T8TaskEntity taskEntityQueueItem;
                    if (Completed_TaskQueue.TryGetValue(t8Task.GenerateTaskQueueKey, out taskEntityQueueItem))
                    {
                        return;
                    }

                    if (Processing_TaskQueue.TryGetValue(t8Task.GenerateTaskQueueKey, out taskEntityQueueItem))
                    {
                        return;
                    }

                    if (Error_TaskQueue.TryGetValue(t8Task.GenerateTaskQueueKey, out taskEntityQueueItem))
                    {
                        return;
                    }

                    //添加到执行中队列
                    if (!Common.AddTaskToQueue(Processing_TaskQueue, t8Task, TaskQueueType.Processing))
                    {
                        LogUtil.WriteLog($"任务队列[{t8Task.TaskTitle}]添加失败");

                        Common.SetTaskErrorStatus(t8Task, "添加Processing_TaskQueue失败");
                        Common.AddTaskToQueue(Error_TaskQueue, t8Task, TaskQueueType.Error);
                        return;
                    }

                    //构造数据文件产品并执行
                    DbFileProductDirector director       = new DbFileProductDirector();
                    ADbFileProductBuilder productBuilder = new DbFileProductBuilder();
                    director.ConstructProduct(productBuilder);
                    DbFileProduct product = productBuilder.GetDbFileProduct();
                    product.Execute(t8Task, cts.Token);

                    //任务结束 1从Processing_TaskQueue队列移走 2任务完成,移入Completed_TaskQueue队列 3任务失败,移入
                    if (Common.RemoveTaskFromQueue(Processing_TaskQueue, t8Task, TaskQueueType.Processing))
                    {
                        if (t8Task.T8TaskStatus == T8TaskStatus.Complete)
                        {
                            Common.AddTaskToQueue(Completed_TaskQueue, t8Task, TaskQueueType.Completed);
                            LogUtil.WriteLog($"T8任务[{t8Task.TaskTitle}]执行完成,转移到Completed_TaskQueue队列");
                        }
                        else
                        {
                            Common.AddTaskToQueue(Error_TaskQueue, t8Task, TaskQueueType.Error);
                            LogUtil.WriteLog($"T8任务[{t8Task.TaskTitle}]执行失败,转移到Error_TaskQueue队列,等待下次重试");
                        }
                    }
                }
                else
                {
                    LogUtil.WriteLog("创建任务实体失败");
                }
            }
            catch (Exception ex)
            {
                LogUtil.WriteLog(ex);
            }
        }
        public void CreateConfig(bool isNewCreate)
        {
            if (isNewCreate)
            {
                T8ConfigEntity t8ConfigEntity = T8ConfigHelper.T8Config;
                t8ConfigEntity.PosType    = PosType.自定义;
                t8ConfigEntity.DbFileType = DbFileType.SQLite;

                t8ConfigEntity.T8ItemContainerDic = new ConcurrentDictionary <DateType, T8ConfigItemContainer>();

                t8ConfigEntity.FtpInfo = new FtpInfoEntity
                {
                    ServerAddress   = "ftp://openbook.cn",
                    UserName        = "******",
                    UserPassword    = "******",
                    ServerDirectory = "upload"
                };
                t8ConfigEntity.DataBaseInfo = new DataBaseInfoEntity
                {
                    DataBaseTitle = "Sql Server数据库",
                    ServerName    = "192.168.0.14",
                    DataBaseName  = "T8DataTest",
                    UserName      = "******",
                    UserPassword  = "******",
                    DataBaseType  = DatabaseType.SqlServer
                };


                T8ConfigItemEntity t8ConfigItem = new T8ConfigItemEntity
                {
                    DateType  = DateType.Month,
                    DataType  = DataType.SaleData,
                    SqlString = "select ISBN AS '书号',Title '书名',PublishName '出版社',Price '定价',KindName '分类',SalesCount '销量',Author '作者',SalesDateTime '销售时间',StoreID '仓号' FROM T8_BookInfo where SalesDateTime >= @StartTime and SalesDateTime <= @EndTime ",
                };

                T8ConfigItemEntity t8ConfigItemOnSale = new T8ConfigItemEntity
                {
                    DateType  = DateType.Month,
                    DataType  = DataType.OnShelfData,
                    SqlString = "select ISBN AS '书号',Title '书名',PublishName '出版社',Price '定价',KindName '分类',SalesCount '销量',Author '作者',SalesDateTime '销售时间',StoreID '仓号' FROM T8_BookInfo where SalesDateTime >= @StartTime and SalesDateTime <= @EndTime ",
                };

                T8ConfigItemContainer container = new T8ConfigItemContainer();
                container.T8ConfigItemSale    = t8ConfigItem;
                container.T8ConfigITemOnShelf = t8ConfigItemOnSale;

                t8ConfigEntity.T8ItemContainerDic.TryAdd(DateType.Month, container);

                t8ConfigItem = new T8ConfigItemEntity
                {
                    DateType  = DateType.Week,
                    DataType  = DataType.SaleData,
                    SqlString = "select ISBN AS '书号',Title '书名',PublishName '出版社',Price '定价',KindName '分类',SalesCount '销量',Author '作者',SalesDateTime '销售时间',StoreID '仓号' FROM T8_BookInfo where SalesDateTime >= @StartTime and SalesDateTime <= @EndTime ",
                };

                t8ConfigItemOnSale = new T8ConfigItemEntity
                {
                    DateType  = DateType.Week,
                    DataType  = DataType.OnShelfData,
                    SqlString = "select ISBN AS '书号',Title '书名',PublishName '出版社',Price '定价',KindName '分类',SalesCount '销量',Author '作者',SalesDateTime '销售时间',StoreID '仓号' FROM T8_BookInfo where SalesDateTime >= @StartTime and SalesDateTime <= @EndTime ",
                };

                container = new T8ConfigItemContainer();
                container.T8ConfigItemSale    = t8ConfigItem;
                container.T8ConfigITemOnShelf = t8ConfigItemOnSale;

                t8ConfigEntity.T8ItemContainerDic.TryAdd(DateType.Week, container);

                T8ConfigHelper.AddT8Config(t8ConfigEntity);
            }
        }