Esempio n. 1
0
        public void Excute()
        {
            var ds = SettingManager.Execute();

            #region 判断是否下载(不下载的条件:1、只有一张表,且是空表,2、有多张表,都为空)

            if (SettingManager.TableMappings.Count() == 1 && ds.Tables[0].Rows.Count == 0)
            {
                return;
            }
            bool isAllNull = true;
            foreach (var mapping in SettingManager.TableMappings)
            {
                if (ds.Tables[mapping.Destination].Rows.Count > 0)
                {
                    isAllNull = false;
                }
            }
            if (isAllNull)
            {
                return;
            }

            #endregion
            SyncFile.RegisterLicense();
            string filepath = SettingManager.FileSavePath + SettingManager.FileName.Replace("{fileDateFormat}", DateTime.Now.ToString("yyyyMMdd"));
            var    fs       = new FileStream(filepath, FileMode.Create);
            var    workbook = new Workbook();
            var    i        = 0;
            foreach (var mapping in SettingManager.TableMappings)
            {
                var arrHeard = new string[mapping.ColumnMappings.Count()];
                var arrRow   = new string[mapping.ColumnMappings.Count()];
                var j        = 0;
                foreach (var column in mapping.ColumnMappings)
                {
                    arrHeard[j] = column.Destination;
                    arrRow[j]   = column.Source;
                    j++;
                }
                if (i == 0)
                {
                    workbook.Worksheets.Clear();
                }
                var worksheet = workbook.Worksheets.Add(mapping.Destination);
                ExcelUtil.CreateWorksheet("", worksheet, worksheet.Name, ds.Tables[mapping.Destination].AsEnumerable().AsQueryable(), arrHeard, arrRow);
                _log.AppendFormat
                    ("{0} rows have been synchronized from {1} table in  DB to {2} sheet in Excel.\r\n",
                    ds.Tables[mapping.Destination].Rows.Count, mapping.Source, mapping.Destination);
                i++;
            }
            SaveFormat saveFormat;
            //Check file format is xls
            if (SettingManager.FileName.Split('.').Last().ToUpper() == "XLS")
            {
                //Set save format optoin to xls
                saveFormat = SaveFormat.Excel97To2003;
            }
            //Check file format is xlsx
            else
            {
                //Set save format optoin to xlsx
                saveFormat = SaveFormat.Xlsx;
            }
            workbook.Save(fs, new XlsSaveOptions(saveFormat));

            #region UploadFile

            string uri = "ftp://" + SettingManager.HostName + "/" + SettingManager.TargetDir + "/" +
                         SettingManager.FileName.Replace("{fileDateFormat}", DateTime.Now.ToString("yyyyMMdd"));
            FtpWebRequest reqFTP = GetRequest(uri, SettingManager.UserName, SettingManager.Password);
            reqFTP.UsePassive    = true;
            reqFTP.UseBinary     = true;
            reqFTP.Method        = WebRequestMethods.Ftp.UploadFile;
            reqFTP.ContentLength = fs.Length;
            int    buffLength = 2048;
            byte[] buff       = new byte[buffLength];
            int    contentLen;
            fs.Close();
            FileInfo localFile = new FileInfo(filepath);
            fs = localFile.OpenRead();
            try
            {
                Stream strm = reqFTP.GetRequestStream();
                contentLen = fs.Read(buff, 0, buffLength);
                while (contentLen != 0)
                {
                    strm.Write(buff, 0, contentLen);
                    contentLen = fs.Read(buff, 0, buffLength);
                }
                strm.Close();
                fs.Close();
                _log.AppendFormat
                    ("UploadFile:" + SettingManager.FileName.Replace("{fileDateFormat}", DateTime.Now.ToString("yyyyMMdd")) + " . \r\n");
            }
            catch (Exception ex)
            {
                throw new Exception(_log.Append("FTP UploadFile failed,because:" + ex.Message).ToString());
            }
            #endregion

            //delete old file ,if custeel retain 20 files
            var leftCount = 5;
            if (SettingManager.FileSavePath.ToLower().Contains("custeel"))
            {
                leftCount = 20;
            }

            localFile.Delete();
            _log.Append("Deleted files : " + DeleteFtpFile(leftCount) + ".\n");
        }