zoukankan      html  css  js  c++  java
  • mongo repository

    using MongoDB.Driver;
    
    namespace Dben.Invoice.Repository
    {
        /// <summary>
        /// 仓储基类
        /// </summary>
        public abstract class BaseRepository
        {
            protected static readonly IMongoClient Client;
    
            protected static readonly IMongoDatabase Database;
    
            static BaseRepository()
            {
                //MongoClientSettings setting = new MongoClientSettings
                //{
                //    MaxConnectionPoolSize = 500,
                //    WaitQueueSize = 2000,
                //    Server = new MongoServerAddress(DbSetting.ConnectionString)
                //};
                Client = new MongoClient(DbSetting.ConnectionString);
                Database = Client.GetDatabase(DbSetting.InvoiceDataBase);
            }
        }
    }
    /*******************************************************
     * 
     * 作者:朱皖苏
     * 创建日期:20180528
     * 说明:此文件只包含一个类,具体内容见类型注释。
     * 运行环境:.NET 4.0
     * 版本号:1.0.0
     * 
     * 历史记录:
     * 创建文件 朱皖苏 20180528 16:19
     * 
    *******************************************************/
    
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading.Tasks;
    using Dben.Invoice.Models;
    using NLog;
    using MongoDB.Driver;
    using System.Linq;
    using MongoDB.Bson;
    
    namespace Dben.Invoice.Repository
    {
        /// <summary>
        /// 发票仓储
        /// </summary>
        public class InvoiceRepository : BaseRepository
        {
            /// <summary>
            /// 过滤器
            /// </summary>
            public FilterDefinitionBuilder<Models.Invoice> filterBuilder = Builders<Models.Invoice>.Filter;
    
    
    
            /// <summary>
            /// 更新器
            /// </summary>
            public UpdateDefinitionBuilder<Models.Invoice> updateBuilder = Builders<Models.Invoice>.Update;
    
            private static readonly ILogger logger = LogManager.GetCurrentClassLogger();
    
            /// <summary>
            /// 大于开始 小于等于结束
            /// </summary>
            /// <param name="begin"></param>
            /// <param name="end"></param>
            /// <param name="source"></param>
            /// <returns></returns>
            internal long CountByDate(DateTime begin, DateTime end, string source)
            {
                var filter = filterBuilder.Where(m => m.Source == source && m.CreateTime > begin && m.CreateTime <= end);
                return Database.GetCollection<Models.Invoice>("Invoice").Count(filter);
            }
    
            internal long CountBySync(bool syncStatus)
            {
                var filter = filterBuilder.Where(m => m.SynStatus == syncStatus);
                return Database.GetCollection<Models.Invoice>("Invoice").Count(filter);
            }
    
            /// <summary>
            /// 新增发票
            /// </summary>
            /// <param name="invoices"></param>
            public async Task AddAsync(IEnumerable<Models.Invoice> invoices)
            {
                try
                {
                    var collection = Database.GetCollection<Models.Invoice>("Invoice");
                    await collection.InsertManyAsync(invoices);
                }
                catch (Exception e)
                {
                    logger.Error(e);
                }
    
            }
    
            /// <summary>
            /// 新增发票
            /// </summary>
            /// <param name="invoice"></param>
            public async Task AddAsync(Models.Invoice invoice)
            {
                try
                {
                    var collection = Database.GetCollection<Models.Invoice>("Invoice");
                    await collection.InsertOneAsync(invoice);
                }
                catch (Exception e)
                {
                    logger.Error(e);
                }
    
            }
            /// <summary>
            /// 保存发票文件
            /// </summary>
            /// <param name="invoiceFile"></param>
            public async Task SaveInvoiceFileAsync(InvoiceFile invoiceFile)
            {
                try
                {
                    var collection = Database.GetCollection<Models.InvoiceFile>("InvoiceFile");
                    await collection.InsertOneAsync(invoiceFile);
                }
                catch (Exception e)
                {
                    logger.Error(e);
                }
    
            }
    
            /// <summary>
            /// 查询前top条未推送的数据。
            /// </summary>
            /// <param name="top"></param>
            /// <returns></returns>
            public async Task<List<Models.InvoiceTitle>> GetInvoices(int top)
            {
                try
                {
                    var collection = Database.GetCollection<Models.InvoiceTitle>("Invoice");
                    var list = await collection.Find(x => x.SynStatus == false).Limit(top).ToListAsync();
    
                    if (list != null && list.Count > 0)
                    {
                        return list;
                    }
                }
                catch (Exception e)
                {
                    logger.Error(e);
                }
                return null;
            }
    
            /// <summary>
            /// 批量更新推送状态
            /// </summary>
            /// <param name="invoices"></param>
            /// <returns></returns>
            public async Task UpdateInvoices(List<Models.InvoiceTitle> invoices)
            {
                try
                {
                    List<ObjectId> ids = invoices.Select(a => a._id).ToList();
                    var collection = Database.GetCollection<Models.InvoiceTitle>("Invoice");
                    var filter = Builders<Models.InvoiceTitle>.Filter.In("_id", ids);
                    var update = Builders<Models.InvoiceTitle>.Update.Set("SynStatus", true);
                    await collection.UpdateManyAsync(filter, update);
                }
                catch (Exception e)
                {
                    logger.Error(e);
                }
            }
    
        }
    }
        /// <summary>
        /// 发票信息
        /// </summary>
        public class Invoice
        {
            /// <summary>
            /// 购方名称
            /// </summary>
            public string PurchaserName { get; set; }
    
            /// <summary>
            /// 购方税号
            /// </summary>
            public string PurchaserTaxNo { get; set; }
    
            /// <summary>
            /// 购方开户行账户
            /// </summary>
            public string PurchaserBank { get; set; }
    
            /// <summary>
            /// 购方地址电话
            /// </summary>
            public string PurchaserAddressPhone { get; set; }
    
            /// <summary>
            /// 销方名称
            /// </summary>
            public string SalesName { get; set; }
    
            /// <summary>
            /// 销方税号
            /// </summary>
            public string SalesTaxNo { get; set; }
    
            /// <summary>
            /// 销方地址电话
            /// </summary>
            public string SalesAddressPhone { get; set; }
    
            /// <summary>
            /// 销方开户行账户
            /// </summary>
            public string SalesBank { get; set; }
    
            ///// <summary>
            ///// 主键ID
            ///// </summary>
            //public ObjectId Id { get; set; }
    
            /// <summary>
            /// 地区编码
            /// </summary>
            public string AreaCode { get; private set; }
    
            /// <summary>
            /// 地区名称
            /// </summary>
            public string AreaName { get; private set; }
    
            private string _invoiceCode;
    
            /// <summary>
            /// 发票代码
            /// </summary>
            public string InvoiceCode
            {
                get { return _invoiceCode; }
                set
                {
                    _invoiceCode = value;
                    var area = InvoiceParser.ParseArea(value);
                    AreaCode = area.Item1;
                    AreaName = area.Item2;
                }
            }
    
            /// <summary>
            /// 发票号码
            /// </summary>
            public string InvoiceNumber { get; set; }
    
            /// <summary>
            /// 发票类型
            /// 1=增值税专用发票 2=机动车销售统一发票 3=货物运输业增值税专用发票
            /// 4=增值税普通发票 5=增值税电子发票 6=增值税普通发票(卷票)
            /// </summary>
            public InvoiceType InvoiceType { get; set; }
    
            /// <summary>
            /// 发票状态
            /// </summary>
            public InvoiceStatus InvoiceStatus { get; set; }
    
            /// <summary>
            /// 开票日期
            /// </summary>
            public DateTime BillingDate { get; set; }
    
            /// <summary>
            /// 金额(价税合计)
            /// </summary>
            public double SumAmount { get; set; }
    
            /// <summary>
            /// 未税金额
            /// </summary>
            public double Amount { get; set; }
    
            /// <summary>
            /// 税额
            /// </summary>
            public double TaxAmount { get; set; }
    
            /// <summary>
            /// 备注
            /// </summary>
            public string Remark { get; set; }
    
            /// <summary>
            /// 发票来源 如 发票管家、发票查验平台
            /// </summary>
            public string Source { get; set; }
    
            /// <summary>
            /// 发票来源的唯一标识
            /// </summary>
            public string SourceId { get; set; }
    
            /// <summary>
            /// 采集时间
            /// </summary>
            public DateTime CreateTime { get; set; }
    
            /// <summary>
            /// 收款人
            /// </summary>
            public string Payee { get; set; }
    
            /// <summary>
            /// 复核人
            /// </summary>
            public string Checker { get; set; }
    
            /// <summary>
            /// 开票人
            /// </summary>
            public string Drawer { get; set; }
    
            /// <summary>
            /// 校验码
            /// </summary>
            public string CheckCode { get; set; }
    
            /// <summary>
            /// 机器码
            /// </summary>
            public string MachineCode { get; set; }
    
            /// <summary>
            /// 发票是否为真
            /// </summary>
            public bool IsTrue { get; set; }
    
            /// <summary>
            /// 发票明细
            /// </summary>
            public IList<InvoiceItem> Items { get; set; }
    
            /// <summary>
            /// 机动车发票信息
            /// </summary>
            public VehicleInfo VehicleInfo { get; set; }
    
            /// <summary>
            /// 货物运输业发票信息
            /// </summary>
            public FreightTransport FreightTransport { get; set; }
    
            /// <summary>
            /// 同步状态
            /// </summary>
            public bool SynStatus { get; set; }
        }
  • 相关阅读:
    Pentest_Mind-mapping 渗透测试思维导图
    pt-archiver归档数据丢失
    Vue笔记:bin-code-editor使用
    Vue笔记:Vue3 Table导出为Excel
    Go异步check简单示例
    flask_apscheduler定时任务组件使用
    组织沟通文化的变革与卓有成效的管理沟通
    业绩核能
    管理
    SAP MM 移动平均价管理的物料库存初始化导入的一个小问题
  • 原文地址:https://www.cnblogs.com/zhuwansu/p/10837014.html
Copyright © 2011-2022 走看看