Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        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());
        }
Esempio n. 3
0
        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();
        }
Esempio n. 4
0
        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();
        }
Esempio n. 5
0
        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();
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }