public static ReportConfig ReadReportConfig(string configPath) { string configData; ReportConfig ReportConfig = new ReportConfig(); try { StreamReader file = new StreamReader(configPath); configData = file.ReadToEnd(); JavaScriptSerializer js = new JavaScriptSerializer(); ReportConfig confPar = js.Deserialize <ReportConfig>(configData); ReportConfig = confPar; return(ReportConfig); } catch (Exception) { ReportConfig.Error = "Ошибка конфигурации файла " + configPath; Console.WriteLine("Ошибка конфигурации файла " + configPath); return(ReportConfig); } }
public static void Reports(string logsPath, ReportConfig ReportConfig, EmailConfig EmailConfig, string date) { List <JuridicalLimErr> JuridicalLimit = new List <JuridicalLimErr>(), JuridicalError = new List <JuridicalLimErr>(); string jurIDEmailError, jurIDError, jurIDEmailLimit, jurIDLimit, email; int index, sendSuccess = 0; for (int pl = 0; pl < ReportConfig.ProgrammLoyalty.Length; pl++) { for (int rp = 0; rp < ReportConfig.ProgrammLoyalty[pl].Reports.Length; rp++) { for (int pr = 0; pr < ReportConfig.ProgrammLoyalty[pl].Reports[rp].Periods.Length; pr++) { switch (ReportConfig.ProgrammLoyalty[pl].Reports[rp].DivideBy) { case Variables.divideByJuridical: JuridicalError.Clear(); JuridicalLimit.Clear(); jurIDEmailError = string.Empty; jurIDError = string.Empty; jurIDEmailLimit = string.Empty; jurIDLimit = string.Empty; List <JuridicalData> JuridicalData = AdditionalFunc.GetJuridicalDataDB(ReportConfig.ProgrammLoyalty[pl].DataSource); for (int i = 0; i < JuridicalData.Count; i++) { index = ReportConfig.ProgrammLoyalty[pl].Reports[rp].LegacyCliId.IndexOf(JuridicalData[i].jurID); if (ReportConfig.ProgrammLoyalty[pl].Reports[rp].LegacyCliId.Count == 0 | index >= 0) { GenerateReportResult GenerateReport = Report(logsPath, ReportConfig.ProgrammLoyalty[pl].DirectoryName, ReportConfig.ProgrammLoyalty[pl].DataSource, ReportConfig.ProgrammLoyalty[pl].Reports[rp].ReportPath, ReportConfig.ExportPath, ReportConfig.ProgrammLoyalty[pl].Reports[rp].ReportName, ReportConfig.ProgrammLoyalty[pl].Reports[rp].Periods[pr].ToLower(), ReportConfig.ProgrammLoyalty[pl].Reports[rp].TimeFrom, ReportConfig.ProgrammLoyalty[pl].Reports[rp].TimeTo, ReportConfig.ProgrammLoyalty[pl].Reports[rp].ExportFormat, ReportConfig.ProgrammLoyalty[pl].Reports[rp].ByProg, JuridicalData[i], date); if (GenerateReport.generateResult == 0) { if (EmailConfig.Send.Value) { email = JuridicalData[i].email; if (!string.IsNullOrEmpty(email)) { AdditionalFunc.LogFile(logsPath + "\\" + Variables.fileEmailRouting, "Найдена почта " + email + " по ЮЛ " + JuridicalData[i].jurInnAndTitle + ".", false); if (EmailConfig.SendLimit > sendSuccess) { if (DispatchReport(logsPath, GenerateReport.ExportFiles, EmailConfig, JuridicalData[i].jurInnAndTitle, email) == 0) { sendSuccess++; } else { JuridicalError.Add(new JuridicalLimErr { jurID = JuridicalData[i].jurID, email = email }); } //таймаут при следующей отправке Thread.Sleep((int)EmailConfig.SendTimeout * 1000); } else { AdditionalFunc.LogFile(logsPath + "\\" + Variables.fileEmailRouting, "Превышен лимит на отправку сообщений.", false); JuridicalLimit.Add(new JuridicalLimErr { jurID = JuridicalData[i].jurID, email = email }); } } else { AdditionalFunc.LogFile(logsPath + "\\" + Variables.fileEmailRouting, "Не найдена почта по ЮЛ " + JuridicalData[i].jurInnAndTitle + ".", false); } } } else { JuridicalError.Add(new JuridicalLimErr { jurID = JuridicalData[i].jurID, email = string.Empty }); } } } if (JuridicalError.Count != 0) { for (int i = 0; i < JuridicalError.Count; i++) { jurIDEmailError = jurIDEmailError + JuridicalError[i].jurID + " - " + JuridicalError[i].email + "\n"; if (string.IsNullOrEmpty(jurIDError)) { jurIDError = JuridicalError[i].jurID.ToString(); } else { jurIDError = jurIDError + "," + JuridicalError[i].jurID; } } AdditionalFunc.LogFile(logsPath + "\\" + Variables.fileIDEmailError, jurIDEmailError, false); AdditionalFunc.LogFile(logsPath + "\\" + Variables.fileIDError, jurIDError, false); } if (JuridicalLimit.Count != 0) { for (int i = 0; i < JuridicalLimit.Count; i++) { jurIDEmailLimit = jurIDEmailLimit + JuridicalLimit[i].jurID + " - " + JuridicalLimit[i].email + "\n"; if (string.IsNullOrEmpty(jurIDLimit)) { jurIDLimit = JuridicalLimit[i].jurID.ToString(); } else { jurIDLimit = jurIDLimit + "," + JuridicalLimit[i].jurID; } } AdditionalFunc.LogFile(logsPath + "\\" + Variables.fileIDEmailLimit, jurIDEmailLimit, false); AdditionalFunc.LogFile(logsPath + "\\" + Variables.fileIDLimit, jurIDLimit, false); } break; case Variables.divideByClub: List <BonusClub> BonusClub = AdditionalFunc.GetBonusClubDataDB(ReportConfig.ProgrammLoyalty[pl].DataSource); for (int i = 0; i < BonusClub.Count; i++) { Report(logsPath, ReportConfig.ProgrammLoyalty[pl].DirectoryName, ReportConfig.ProgrammLoyalty[pl].DataSource, ReportConfig.ProgrammLoyalty[pl].Reports[rp].ReportPath, ReportConfig.ExportPath, ReportConfig.ProgrammLoyalty[pl].Reports[rp].ReportName, ReportConfig.ProgrammLoyalty[pl].Reports[rp].Periods[pr].ToLower(), ReportConfig.ProgrammLoyalty[pl].Reports[rp].TimeFrom, ReportConfig.ProgrammLoyalty[pl].Reports[rp].TimeTo, ReportConfig.ProgrammLoyalty[pl].Reports[rp].ExportFormat, ReportConfig.ProgrammLoyalty[pl].Reports[rp].ByProg, BonusClub[i], date); } break; default: Report(logsPath, ReportConfig.ProgrammLoyalty[pl].DirectoryName, ReportConfig.ProgrammLoyalty[pl].DataSource, ReportConfig.ProgrammLoyalty[pl].Reports[rp].ReportPath, ReportConfig.ExportPath, ReportConfig.ProgrammLoyalty[pl].Reports[rp].ReportName, ReportConfig.ProgrammLoyalty[pl].Reports[rp].Periods[pr].ToLower(), ReportConfig.ProgrammLoyalty[pl].Reports[rp].TimeFrom, ReportConfig.ProgrammLoyalty[pl].Reports[rp].TimeTo, ReportConfig.ProgrammLoyalty[pl].Reports[rp].ExportFormat, ReportConfig.ProgrammLoyalty[pl].Reports[rp].ByProg.ToLower(), date); break; } } } } }
static int Main(string[] args) { string fileReportConfig = Variables.fileReportConfig; string fileEmailConfig = Variables.fileEmailConfig; string date = DateTime.Now.ToString("yyyy.MM.dd HH:mm"); string logsPath = AppDomain.CurrentDomain.BaseDirectory; for (int i = 0; i < args.Length; i += 2) { switch (args[i]) { case Variables.flagConfig: fileReportConfig = args[i + 1]; break; case Variables.flagEmailConfig: fileEmailConfig = args[i + 1]; break; case Variables.flagDate: date = args[i + 1]; break; case Variables.flagPath: logsPath = args[i + 1]; if (!Directory.Exists(logsPath)) { Directory.CreateDirectory(logsPath); } break; default: Console.WriteLine("Use /config <configFile> or /emailConfig <configFile> or /date <yyyy.MM.dd> or /logsPath <logsPath> flags"); return(1); } } if (AdditionalFunc.CheckDate(date) == 1) { Console.WriteLine("Use /config <configFile> or /emailConfig <configFile> or /date <yyyy.MM.dd> or /logsPath <logsPath> flags"); return(1); } Console.WriteLine("StimulsoftConsole v." + Assembly.GetExecutingAssembly().GetName().Version.ToString() + " " + Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE").ToString() + " " + DateTime.Now + "\n"); AdditionalFunc.LogFile(logsPath + "\\" + Variables.fileLog, "StimulsoftConsole v." + Assembly.GetExecutingAssembly().GetName().Version.ToString() + " " + Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE").ToString() + " " + DateTime.Now + "\n", false); AdditionalFunc.CheckDriveSpace(logsPath); ReportConfig ReportConfig = Config.ReadReportConfig(fileReportConfig); EmailConfig EmailConfig = Config.ReadEmailConfig(fileEmailConfig); if (ReportConfig.Error != null) { AdditionalFunc.LogFile(logsPath + "\\" + Variables.fileError, ReportConfig.Error, false); return(1); } Reports(logsPath, ReportConfig, EmailConfig, date); return(0); }