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; }
    }
原文地址:https://www.cnblogs.com/zhuwansu/p/10837014.html