/// <summary>
        /// Executes a task
        /// </summary>
        //public void Execute()
        //{
        //    try
        //    {
        //        //update ds data from channel(dsz)
        //        _itemService.UpdateChannelData();

        //        //compare current and last time channel data and get the items which were changed and need to be sync
        //        List<int> syncItemIDs = new List<int>();
        //        var di = new DirectoryInfo(ThirdStoreConfig.Instance.ThirdStoreDSZData);
        //        if (di.Exists)
        //        {
        //            FileInfo[] files = di.GetFiles().ToArray();
        //            if (files.Count() > 0)
        //            {
        //                var top2DataFile = files.OrderByDescending(fi => fi.CreationTime).Take(2);
        //                var syncDSPriceBelow = Convert.ToDecimal(ThirdStoreConfig.Instance.SyncDSPriceBelow);
        //                var dsInventoryThredshold = Convert.ToInt32(ThirdStoreConfig.Instance.DSInventoryThreshold);
        //                if (top2DataFile.Count()==2)
        //                {
        //                    var latestDataFile = top2DataFile.First();
        //                    var secondLatestDataFile = top2DataFile.Last();

        //                    var latestData = _csvContext.Read<DSZSKUModel>(latestDataFile.FullName, _csvFileDescription);
        //                    var secondLatestData = _csvContext.Read<DSZSKUModel>(secondLatestDataFile.FullName, _csvFileDescription);

        //                    //var changedData = from ld in latestData
        //                    //                  join sld in secondLatestData on ld.SKU equals sld.SKU
        //                    //                  where (ld.InventoryQty>0&&sld.InventoryQty==0)||(ld.InventoryQty==0 && sld.InventoryQty>0)
        //                    //                  select ld;

        //                    var leftJoinResult= from ld in latestData
        //                                        join sld in secondLatestData on ld.SKU equals sld.SKU into leftJoin
        //                                        from lj in leftJoin.DefaultIfEmpty()
        //                                        where lj==null
        //                                        ||
        //                                        ((((ld.InventoryQty >= dsInventoryThredshold && lj.InventoryQty< dsInventoryThredshold) || (ld.InventoryQty < dsInventoryThredshold && lj.InventoryQty >= dsInventoryThredshold))
        //                                        ||(ld.Price!=lj.Price))&& (ld.Price <= syncDSPriceBelow || lj.Price <= syncDSPriceBelow))
        //                                        select ld.SKU;

        //                    var rightJoinResult = from sld in secondLatestData
        //                                          join ld in latestData on sld.SKU equals ld.SKU into rightJoin
        //                                          from rj in rightJoin.DefaultIfEmpty()
        //                                          where rj == null
        //                                          ||
        //                                          ((((sld.InventoryQty >= dsInventoryThredshold && rj.InventoryQty < dsInventoryThredshold) || (sld.InventoryQty < dsInventoryThredshold && rj.InventoryQty >= dsInventoryThredshold))
        //                                          ||(sld.Price!=rj.Price)) && (sld.Price <= syncDSPriceBelow || rj.Price <= syncDSPriceBelow))
        //                                          select sld.SKU;

        //                    syncItemIDs = (from sku in leftJoinResult.Union(rightJoinResult).Distinct()
        //                                      join itm in _itemService.GetAllItems() on sku.ToLower() equals itm.SKU.ToLower()
        //                                   select itm.ID).ToList();

        //                }
        //                else if(top2DataFile .Count()==1)
        //                {
        //                    var latestDataFile = top2DataFile.First();
        //                    var latestData = _csvContext.Read<DSZSKUModel>(latestDataFile.FullName, _csvFileDescription);

        //                    syncItemIDs = (from ld in latestData
        //                                   join itm in _itemService.GetAllItems() on ld.SKU.ToLower() equals itm.SKU.ToLower()
        //                                   where itm.Cost <= syncDSPriceBelow
        //                                   select itm.ID).ToList();
        //                }
        //            }
        //        }

        //        //sync online inventory for the specific item ids
        //        if (syncItemIDs.Count > 0)
        //            LogManager.Instance.Info("Sync affected item ids for update DSZ data: " + syncItemIDs.Select(id => id.ToString()).Aggregate((current, next) => current + "," + next));
        //        _jobItemService.SyncInventory(syncItemIDs);

        //    }
        //    catch (Exception ex)
        //    {
        //        LogManager.Instance.Error(ex.Message);
        //    }
        //}

        public void Execute()
        {
            try
            {
                var allDSItems = new List <D_Item>();
                foreach (var dsChannel in _dsChannels)
                {
                    allDSItems.AddRange(dsChannel.GetDSData());
                }

                _itemService.AddOrUpdateItem(allDSItems);

                var allSyncSKUs = new List <string>();
                foreach (var dsChannel in _dsChannels)
                {
                    allSyncSKUs.AddRange(dsChannel.GetNeedSyncSKUs());
                }

                var allSyncItemIDs = (from sku in allSyncSKUs
                                      join itm in _itemService.GetAllItems() on sku.ToLower() equals itm.SKU.ToLower()
                                      select itm.ID).ToList();

                if (allSyncItemIDs.Count > 0)
                {
                    LogManager.Instance.Info("Sync affected item ids for update DS data: " + allSyncItemIDs.Select(id => id.ToString()).Aggregate((current, next) => current + "," + next));
                }
                _jobItemService.SyncInventory(allSyncItemIDs);
            }
            catch (Exception ex)
            {
                LogManager.Instance.Error(ex.Message);
            }
        }