public JobSchedulerBlProvider(IConverter converter, ILoggerFactory loggerFactory, IAttachmentScanHelperProvider attachmentScanHelper, IEmailSendGridBlProvider emailSendGridBlProvider) { _converter = converter; _attachmentScanHelper = attachmentScanHelper; _emailSendGridBlProvider = emailSendGridBlProvider; _logger = loggerFactory.CreateLogger <JobSchedulerBlProvider>(); var daoFactory = new BaseDaoFactory(new EfzDbContextFactory().Create()); _xmlTimer = new Timer(); _completionTimer = new Timer(); _attachmentScanTimer = new Timer(); _jobDao = new BaseDaoFactory(new EfzDbContextFactory().Create()).GetDao <Job>(); _jobScheduler = new BaseDaoFactory(new EfzDbContextFactory().Create()).GetDao <JobScheduler>(); _attachmentTask = new Task(AttachmentScanProcessingAsync); SetupXmlJobTimer(); SetupCompletionJobTimer(); SetupAttachmentScanJobTimer(); }
private IValidationResult UploadAttachment(MemoryStream memoryStream, Attachment entity) { var attachmentDao = new BaseDaoFactory(new EfzDbContextFactory().Create()).GetDao <Attachment>(); if (entity is null) { throw new ArgumentNullException(nameof(entity)); } entity.ServerFileName = Guid.NewGuid().ToString(); attachmentDao.AddItem(entity); try { string filename = $"{entity.ServerFileName}"; string path = "Data/Attachments/"; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } var file = new FileStream($"{path}{filename}", FileMode.Create, FileAccess.Write); memoryStream.WriteTo(file); file.Close(); memoryStream.Close(); } catch (Exception e) { attachmentDao.DeleteItem(entity); throw e; } return(ValidationResult.ResultOk()); }
static void Main(string[] args) { BaseDao dao = BaseDaoFactory.CreateBaseDao("dao_test"); //添加 //for (int i = 0; i < 100000; i++) //{ // dao.Insert<test0>(new test0() // { // Address = "上海"+i, // Id = i, // Name = "王"+i // }); // Console.WriteLine(i); //} // //分页查询 IList <string> ilist = new List <string> { "0", "1" }; IDictionary hints = new Dictionary <string, object>(); hints.Add(DALExtStatementConstant.SHARD_IDS, ilist); var query = dao.GetQuery <test0>().Paging(1, 10, "Id", false);//.Equal("Name", "王10000"); var list_ = dao.SelectList <test0>(query, hints).OrderByDescending(x => x.Id).ToList(); Console.ReadLine(); }
static void Main(string[] args) { BaseDao dao = BaseDaoFactory.CreateBaseDao("dao_test"); IAgentGenDao agentGenDao = DALFactory.AgentGenDao; ////DLPT.Entity.DataModel.AgentGen AgentGenaa = new DLPT.Entity.DataModel.AgentGen(); ////AgentGenaa.Id = 1; ////AgentGenaa.Name = "111"; ////dao.Insert<DLPT.Entity.DataModel.AgentGen>(AgentGenaa); IDictionary <String, IList <String> > dict = new Dictionary <String, IList <String> > { { "0", new List <String> { "0", "1" } } }; IDictionary hints = new Dictionary <String, Object>(); IList <String> shards = new List <String> { "0", "1" }; hints.Add(DALExtStatementConstant.TABLE_IDS, shards); var result = dao.ExecScalar("SELECT count(1) from agentGen_{0} where name='77'", null, hints); //"SELECT count(1) from agent_{0} where name='77'" // var result = dao.GetAll<DLPT.Entity.DataModel.AgentGen>(hints, Common.Enums.OperationType.Default); ////String sql = "SELECT count(1) from agent "; ////object obj = dao.ExecScalar(sql); ////long ret = Convert.ToInt64(obj); //("select count(0) from AgentGen "); Console.WriteLine(result); //// IAgentGenDao agentGenDao = DALFactory.AgentGenDao; //// //AgentGen orm = agentGenDao.OrmByHand("select * from table"); //// DLPT.Entity.DataModel.AgentGen AgentGen = new DLPT.Entity.DataModel.AgentGen(); ////// AgentGen.Id = 1; //// AgentGen.Name = "111"; //// int insertResult = agentGenDao.InsertAgentGen(AgentGen); //// Console.WriteLine(insertResult); // Console.ReadKey(); Console.Read(); }
static void Main(string[] args) { BaseDao dao = BaseDaoFactory.CreateBaseDao("dao_test"); ////添加 for (int i = 0; i < 100000; i++) { dao.Insert <test0>(new test0() { Address = "上海" + i, Id = i, Name = "王" + i }); Console.WriteLine(i); //System.Threading.Thread.Sleep(1000 * 1); } /////修改 //dao.Update<test0>(new test0() //{ // Address = "上海测试", // Id = 1, // Name = "王测试" //}); //分页查询 //IList<string> shardDb = new List<string> { "0", "1" }; //IDictionary hints = new Dictionary<string, object>(); //hints.Add(DALExtStatementConstant.SHARD_IDS, shardDb); //var query = dao.GetQuery<test0>().Paging(1, 10, "Id", false); //.Equal("Name", "王10000"); //while (true) //{ // Console.WriteLine("======================================================"); // var list_ = dao.SelectList<test0>(query, hints).OrderByDescending(x => x.Id).ToList(); // System.Threading.Thread.Sleep(1000 * 3); //} Console.ReadLine(); }
private bool ProcessAttachmentScans(string filePath, List <JobLog> jobLogs) { var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read); var fileName = Path.GetFileNameWithoutExtension(filePath); var fileNameWithExtension = Path.GetFileName(filePath); var deliveryNumberString = string.Empty; var status = false; try { var deliveryNumbers = _attachmentScanHelper.GetBarcodeFromStream(stream); var deliveryDao = new BaseDaoFactory(new EfzDbContextFactory().Create()).GetDao <Delivery>(); foreach (var deliveryNumber in deliveryNumbers) { var delivery = deliveryDao.GetSingle(t => t.DeliveryNumber.Equals(deliveryNumber)); if (delivery != null) { deliveryNumberString = delivery.DeliveryNumber; var pdfStream = _attachmentScanHelper.ConvertImageToPdf(stream); var entity = new Attachment() { OrderNumber = delivery.OrderNumber, DeliveryId = delivery.Id, DeliveryNumber = delivery.DeliveryNumber, FileType = "pdf", FileName = $"{fileName}.pdf" }; UploadAttachment(pdfStream, entity); status = true; break; } } } catch (Exception e) { jobLogs.Add(GetLogException(fileNameWithExtension, e)); stream.Dispose(); } finally { stream.Dispose(); if (status) { if (File.Exists(filePath)) { File.Delete(@filePath); } jobLogs.Add(GetLogException(fileNameWithExtension, new Exception($"Add as attachment for delivery: {deliveryNumberString}"))); } else { jobLogs.Add(GetLogException(fileNameWithExtension, new Exception("Barcode not exist or not match to any delivery number."))); } } return(status); }
private bool InvoiceCompletion(List <JobLog> jobLogs) { int trials = 2; bool status = true; var invoiceDao = new BaseDaoFactory(new EfzDbContextFactory().Create()).GetDao <Invoice>(); var completionDao = new BaseDaoFactory(new EfzDbContextFactory().Create()).GetDao <Completion>(); var attachmentDao = new BaseDaoFactory(new EfzDbContextFactory().Create()).GetDao <Attachment>(); var deliveryDao = new BaseDaoFactory(new EfzDbContextFactory().Create()).GetDao <Delivery>(); var customerDao = new BaseDaoFactory(new EfzDbContextFactory().Create()).GetDao <Customer>(); var path = @"Data/CompletionStorage/"; var invoices = invoiceDao.GetCollection(t => !t.IsCompleted, false); foreach (var invoice in invoices) { try { var serverFilename = Guid.NewGuid().ToString(); var attachmentCompletes = new List <AttachmentComplete>(); var attachments = attachmentDao.GetCollection(t => t.OrderNumber.Equals(invoice.OrderNumber)); if (attachments == null || !attachments.Any()) { ++invoice.CompletionCounter; if (invoice.CompletionCounter < trials) { continue; } } var invoiceIncluded = invoiceDao.GetSingle(t => t.Id.Equals(invoice.Id)); var invoicePdfDocumentArray = GetInvoicePdfDocument(invoiceIncluded); var attachmentFiles = GetAttachmentsFile(attachments); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } CompletionPdf(invoicePdfDocumentArray, attachmentFiles, $"{path}{serverFilename}"); if (attachmentFiles != null && attachmentFiles.Any()) { attachmentCompletes.AddRange(attachments.Select(t => new AttachmentComplete() { AttachmentId = t.Id })); } var completion = new Completion() { CustomerId = invoice.CustomerId, InvoiceId = invoice.Id, OrderId = invoice.OrderId, OrderNumber = invoice.OrderNumber, InvoiceNumber = invoice.InvoiceNumber, InvoiceDate = invoice.InvoiceDate, CompleteFileName = $"{invoice.InvoiceNumber}.pdf", ServerFileName = serverFilename, AttachmentCompletes = attachmentCompletes }; completionDao.AddItem(completion); invoice.IsCompleted = true; foreach (var attachment in attachments) { attachment.IsCompleted = true; } var deliveries = deliveryDao.GetCollection(t => t.OrderNumber.Equals(invoice.OrderNumber)); foreach (var delivery in deliveries) { delivery.IsCompleted = true; } attachmentDao.UpdateRangeItems(attachments); deliveryDao.UpdateRangeItems(deliveries); var customer = customerDao.GetSingle(t => t.Id.Equals(completion.CustomerId)); completion.Customer = customer; _emailSendGridBlProvider.SendInvoiceCompleteNotification(completion); } catch (Exception e) { status = false; jobLogs.Add(GetLogException(invoice.InvoiceNumber, e)); } } try { invoiceDao.UpdateRangeItems(invoices); } catch (Exception e) { status = false; jobLogs.Add(GetLogException("InvoiceCompleteUpdateRange", e)); } return(status); }
private bool GetDataFromXml(string fileName, List <JobLog> jobLogs) { var invoiceDao = new BaseDaoFactory(new EfzDbContextFactory().Create()).GetDao <Invoice>(); var customerDao = new BaseDaoFactory(new EfzDbContextFactory().Create()).GetDao <Customer>(); var orderDao = new BaseDaoFactory(new EfzDbContextFactory().Create()).GetDao <Order>(); var deliveryDao = new BaseDaoFactory(new EfzDbContextFactory().Create()).GetDao <Delivery>(); var status = false; var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read); try { var serializer = new XmlSerializer(typeof(XmlModel.XmlModel)); serializer.UnknownNode += new XmlNodeEventHandler(serializer_UnknownNode); serializer.UnknownAttribute += new XmlAttributeEventHandler(serializer_UnknownAttribute); var xml = (XmlModel.XmlModel)serializer.Deserialize(stream); if (xml.Invoices != null) { foreach (var invoice in xml.Invoices) { if (invoiceDao.GetSingle(t => t.OrderNumber.Equals(invoice.OrderNumber)) != null) { jobLogs.Add(GetLogException(fileName, new Exception($"Invoice with order number:{invoice.OrderNumber} existing."))); continue; } var orderId = orderDao.GetSingle(t => t.OrderNumber.Equals(invoice.OrderNumber), false)?.Id; invoice.OrderId = orderId; invoice.InvoiceItems = invoice.XmlInvoiceItems?.ToList(); invoiceDao.AddItem(invoice); } } if (xml.Orders != null) { foreach (var order in xml.Orders) { if (orderDao.GetSingle(t => t.OrderNumber.Equals(order.OrderNumber)) != null) { jobLogs.Add(GetLogException(fileName, new Exception($"Order with order number:{order.OrderNumber} existing."))); continue; } order.OrderItems = order.XmlOrderItems?.ToList(); var entity = orderDao.AddItem(order); var invoice = invoiceDao.GetSingle(t => t.OrderNumber.Equals(entity.OrderNumber), false); if (invoice.OrderId != entity.Id) { invoice.OrderId = entity.Id; invoiceDao.UpdateItem(invoice); } var delivery = deliveryDao.GetSingle(t => t.OrderNumber.Equals(entity.OrderNumber), false); if (delivery.OrderId != entity.Id) { delivery.OrderId = entity.Id; deliveryDao.UpdateItem(delivery); } } } if (xml.Deliveries != null) { foreach (var delivery in xml.Deliveries) { if (deliveryDao.GetSingle(t => t.OrderNumber.Equals(delivery.OrderNumber)) != null) { jobLogs.Add(GetLogException(fileName, new Exception($"Delivery with order number:{delivery.OrderNumber} existing."))); continue; } var orderId = orderDao.GetSingle(t => t.OrderNumber.Equals(delivery.OrderNumber), false)?.Id; delivery.OrderId = orderId; deliveryDao.AddItem(delivery); } } status = true; stream.Dispose(); } catch (Exception e) { jobLogs.Add(GetLogException(fileName, e)); stream.Dispose(); } finally { stream.Dispose(); if (status) { if (File.Exists(fileName)) { File.Delete(@fileName); } } } return(status); }