public static BatchCreationResult RunImmediateBatchCreation(tblMessageSchedule Schedule, int Priority, ISqlLogic SqlLogic, MessagesModuleLogic Logic) { lock (ImmediateBatchCreation_L) { using (var manager = BatchCreationManager.NewInstance(SqlLogic, Logic)) { var creator = new BatchCreator(manager); var result = creator.CreateBatch(Schedule, Priority); manager.SaveResultsToDB(new[] { result }); return(result); } } }
/// <summary> /// Creates Batch, creates messages assigned to this batch, puts messages to send queque. /// returns entities NOT WRITTEN to db. /// 'sendPriority': int.min - lowest priory, int.max - highest. /// </summary> public BatchCreationResult CreateBatch(tblMessageSchedule schedule, int sendPriority) { var result = new BatchCreationResult(); var batch = Manager.Logic.Create <tblMessageBatch>(); batch.CreatedOn = DateTime.Now; batch.tblMessageSchedule = schedule; batch.IsSms = schedule.IsSms; var dataCollector = new MessageDataCollector(Manager); var msgData = dataCollector.Collect(schedule); var markSpecs = new DefaultMarkUpSpecification { NewLineSymbol = "\n" }; var msgProducer = new MessageProducer(schedule, null, markSpecs); var messages = new List <tblMessage>(); var sendQueues = new List <tblPendingMessagesQueue>(); foreach (var data in msgData) { msgProducer.ChangeWildCards(data.wildCards); foreach (var textData in data.TextProductionData) { var msgRaw = msgProducer.Produce(textData, schedule.IsSms ? MessageType.Sms : MessageType.Sms); var msg = Manager.Logic.Create <tblMessage>(); msg.Adress = msgRaw.Adress; msg.Body = msgRaw.Body; msg.Header = msgRaw.Header; msg.IsSms = schedule.IsSms; msg.tblMessageBatch = batch; messages.Add(msg); var pmq = Manager.Logic.Create <tblPendingMessagesQueue>(); pmq.tblMessage = msg; pmq.Priority = sendPriority; sendQueues.Add(pmq); } } result.Batch = batch; result.Messages = messages; result.SendQueue = sendQueues; return(result); }