public void BeginWork()
 {
     while (true)
     {
         SPIN_FLFL_FILE_LOG_INFO_INSERT entity = null;
         var result = _msmq.ReceiveTranMessageQueue(x =>
         {
             entity = x.FromJson <SPIN_FLFL_FILE_LOG_INFO_INSERT>();
             _commonBl.Execute(entity);
             return(entity.ReturnValue == 0);
         });
         Nlog.Info(_nLogName, $"{entity?.pFILE_NAME}\t{result.msg}");
         if (result.code == 1)
         {
             break;
         }
     }
     Thread.Sleep(10000);
 }
        public void BeginWork(params FtpConfig[] ftpConfigs)
        {
            var ftpConfig = ftpConfigs[0];

            Nlog.Info(ftpConfig.FileType, $"{ftpConfig.FileType}\t开始运行...");

            var ftp = Containers.Resolve <IFtp>(
                new NamedParameter("nLogName", ftpConfig.FileType),
                new NamedParameter("ftpServerIp", ftpConfig.Ip),
                new NamedParameter("ftpProt", ftpConfig.Port),
                new NamedParameter("privateKeyFile", Path.Combine(Environment.CurrentDirectory, @"SFTP_KEY\tmp.cap")),
                new NamedParameter("ftpRemotePath", ftpConfig.RemoteFolder),
                new NamedParameter("ftpUserId", ftpConfig.Uid),
                new NamedParameter("ftpPassword", ftpConfig.Pwd),
                new NamedParameter("isdirectory", ftpConfig.IsDirectory));

            ftp.InitializeFileListStyle();

            var list1 = ftp.FindFiles().Where(x => ftpConfig.NameContains.Length <= 0 || x.Name.ToLower().Contains(ftpConfig.NameContains.ToLower()));

            Thread.Sleep(3000);
            var list2 = ftp.FindFiles();

            var list = list1.Join(list2, x => new { x.Name, x.Size }, y => new { y.Name, y.Size },
                                  (x, y) => new FileStruct {
                IsDirectory = x.IsDirectory, Name = x.Name, CreateTime = x.CreateTime, FullName = x.FullName, Size = x.Size, IsSuccess = false
            })
                       .Where(x => x.IsDirectory == ftpConfig.IsDirectory && int.TryParse(x.Size, out int size) && size > 0).ToList();

            string time = DateTime.Now.ToString("yyyy-MM-dd");

            Parallel.ForEach(list, new ParallelOptions()
            {
                MaxDegreeOfParallelism = ftpConfig.MaxDegreeOfParallelism
            }, f =>
            {
                f.LocalFullName = $@"{ftpConfig.LocalDirectory}\{ftpConfig.FileType}\{(ftpConfig.LocalBackupFolder.Length > 0 ? ftpConfig.LocalBackupFolder : ftpConfig.RemoteFolder)}\{time}\{Math.Abs(Guid.NewGuid().GetHashCode()).ToString().PadRight(10, '0')}";
                if (ftp.Download(f.Name, f.LocalFullName))
                {
                    f.IsSuccess = true;
                    var message = new SPIN_FLFL_FILE_LOG_INFO_INSERT
                    {
                        pFLFL_TYPE    = ftpConfig.FileType,
                        pFILE_NAME    = f.Name,
                        pFLFL_URL     = $@"{f.LocalFullName}\{f.Name}",
                        pFLFL_STS     = "0",
                        pFLFL_USUS_ID = ftpConfig.RemoteFolder
                    }.ToJson();

                    if (_msmq.SendTranMessageQueue(message, (result, msg) => Nlog.Info(ftpConfig.FileType, $"{f.Name} \t msmq {(result ? "√" : "failed")} {msg}")))
                    {
                        //备份文件
                        if (ftpConfig.RemoteBackupFolder.Length > 0)
                        {
                            ftp.ReNameToBackupDirectory(ftpConfig.RemoteBackupFolder, f.Name);
                        }
                        else
                        {
                            ftp.Delete(f.FullName);
                        }
                    }
                }
            });

            Nlog.Info(ftpConfig.FileType, $"{ftpConfig.FileType}\t运行完毕...\r\n\r\n");
            Thread.Sleep(ftpConfig.ThreadMillisecondsTimeout);
        }
        public void BeginWork(params FtpConfig[] ftpConfigs)
        {
            var ftpConfig = ftpConfigs[0];

            Nlog.Info(ftpConfig.FileType, $"{ftpConfig.FileType}\t开始运行...");

            var ftp = Containers.Resolve <IFtp>(
                new NamedParameter("nLogName", ftpConfig.FileType),
                new NamedParameter("ftpServerIp", ftpConfig.Ip),
                new NamedParameter("ftpProt", ftpConfig.Port),
                new NamedParameter("privateKeyFile", Path.Combine(Environment.CurrentDirectory, @"SFTP_KEY\tmp.cap")),
                new NamedParameter("ftpRemotePath", ftpConfig.RemoteFolder),
                new NamedParameter("ftpUserId", ftpConfig.Uid),
                new NamedParameter("ftpPassword", ftpConfig.Pwd),
                new NamedParameter("isdirectory", ftpConfig.IsDirectory));

            ftp.InitializeFileListStyle();
            //Thread.Sleep(5000);

            var list1 = ftp.FindFiles().Where(x => ftpConfig.NameContains.Length <= 0 || x.Name.ToLower().Contains(ftpConfig.NameContains.ToLower()));

            Thread.Sleep(3000);
            var list2 = ftp.FindFiles();

            var list = list1.Join(list2, x => new { x.Name, x.Size }, y => new { y.Name, y.Size },
                                  (x, y) => new FileStruct {
                IsDirectory = x.IsDirectory, Name = x.Name, CreateTime = x.CreateTime, FullName = x.FullName, Size = x.Size, IsSuccess = false
            })
                       .Where(x => x.IsDirectory == ftpConfig.IsDirectory).ToList();

            string time        = DateTime.Now.ToString("yyyy-MM-dd");
            var    messageList = new List <string>();

            Parallel.ForEach(list, new ParallelOptions()
            {
                MaxDegreeOfParallelism = ftpConfig.MaxDegreeOfParallelism
            }, f =>
            {
                f.LocalFullName = $@"{ftpConfig.LocalDirectory}\{ftpConfig.FileType}\{(ftpConfig.LocalBackupFolder.Length > 0 ? ftpConfig.LocalBackupFolder : ftpConfig.RemoteFolder)}\{time}\{Math.Abs(Guid.NewGuid().GetHashCode()).ToString().PadRight(10, '0')}";
                if (ftp.Download(f.Name, f.LocalFullName))
                {
                    f.IsSuccess = true;
                    var message = new SPIN_FLFL_FILE_LOG_INFO_INSERT
                    {
                        pFLFL_TYPE    = ftpConfig.FileType,
                        pFILE_NAME    = f.Name,
                        pFLFL_URL     = $@"{f.LocalFullName}\{f.Name}",
                        pFLFL_STS     = "0",
                        pFLFL_USUS_ID = ftpConfig.RemoteFolder
                    }.ToJson();
                    messageList.Add(message);
                }
            });

            lock (_obj)
            {
                _listFileStruct.AddRange(list);
                _listMessage.AddRange(messageList);
            }

            if (list.Count <= 0 || list.Count(x => !x.IsSuccess) > 0)
            {
                Nlog.Info(ftpConfig.FileType, $"整包下载总数:{list.Count},其中失败{list.Count(x => !x.IsSuccess)}");
            }

            Nlog.Info(ftpConfig.FileType, $"{ftpConfig.FileType}\t运行完毕...\r\n\r\n");
        }