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 > )
{
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; }
}

mongo repository的更多相关文章

  1. Spring data mongodb 替换 Repository 实现类,findAll 排除 字段

    因文档比较大,有时候findAll 不想返回所有数据.没有找到默认的findAll 能够include 或者 exclude 的方法,所以想办法扩展一下实现类 query.fields().inclu ...

  2. mongodb 速成笔记

    以下环境为mac osx + jdk 1.8 + mongodb v3.2.3 一.安装 brew安装方式是mac下最简单的方式 brew update brew install mongodb 其它 ...

  3. Spring data mongodb 聚合,投射,内嵌数组文档分页.

    尽量别直接用 DBObject  ,Spring data mongodb 的api 本来就没什么多大用处,如果还直接用 DBObject 那么还需要自己去解析结果,说动做个对象映射,累不累 Spri ...

  4. .net core 2.2 & Mongodb

    .net core 2.2 API项目中使用Mongodb 简单的CRUD封装 创建FoodPlan.Core 项目 创建IEntityBase.cs 接口约束 创建Single.cs 实体 IEnt ...

  5. linux记录-docker配置mysql

    docker部署mysql 1.拉取镜像 docker pull mysql 2.docker  rm   containerID  删除镜像iD 3.创建镜像 docker run --name=m ...

  6. Repository 仓储,你的归宿究竟在哪?(一)-仓储的概念

    写在前面 写这篇博文的灵感来自<如何开始DDD(完)>,很感谢young.han兄这几天的坚持,陆陆续续写了几篇有关于领域驱动设计的博文,让园中再次刮了一阵"DDD探讨风&quo ...

  7. [Mongo] How to Install Mongo on Debian(不要安装)

    Install MongoDB on Debian¶ This tutorial outlines the steps to install MongoDB on Debian systems. Th ...

  8. spring-boot支持双数据源mysql+mongo

    这里,首先想说的是,现在的web应用,处理的数据对象,有结构化的,也有非结构化的.同时存在.但是在spring-boot操作数据库的时候,若是在properties文件中配置数据源的信息,通过默认配置 ...

  9. 将 node.js 的数据保存到 mongo 数据库中

    Mongo 数据库 安装 首先到 Mongo 的官方网站下载安装程序:http://www.mongodb.org/,我下载的文件名为:mongodb-win32-x86_64-2008plus-2. ...

随机推荐

  1. C# 配置文件存储 各种序列化算法性能比较

    本文比较多个方式进行配置文件的存储,对比各个不同算法的读写性能. 在应用软件启动的时候,需要读取配置文件,但是启动的性能很重要,所以需要有一个很快的读取配置文件的方法. 如果你不想看过程,那么请看拖动 ...

  2. Python--day46--MySQL自定义函数

    1,mysql自定义函数(mysql函数会降低查找速度,使用 了函数的行和列不能再用索引查找了,这样对性能要求高的需求就不能这样写) 函数调用 select f(参数1,参数2): 对函数进行调用:

  3. Python--day39--管道和数据共享(面试可能会问到)

    1,管道 上面所述挂起即为阻塞 管道.py from multiprocessing import Pipe, Process def func(conn1,conn2): conn2.close() ...

  4. H3C RIP协议概述

  5. H3C 什么是路由

  6. dotnet 使用 MessagePack 序列化对象

    和很多序列化库一样,可以通过 MessagePack 序列化和反序列化,和 json 相比这个库提供了二进制的序列化,序列化之后的内容长度比 json 小很多 这个库能序列的内容不多,大多数时候建议使 ...

  7. ABP在MultipleDbContext也就是多库的场景下发布后异常“Could not find content root folder”问题处理

    ABP多库支持 ABP支持多库的方案在abp的案例中aspnetboilerplate-samples中给了现成的demo,其中MultipleDbContextDemo是EF的相关针对dotnet的 ...

  8. EF 配置多个数据库

    1.先创建两个DbContext using System; using System.Data.Common; using System.Data.Entity; using System.Data ...

  9. CentOS系统将UTC时间修改为CST时间方法

    世界协调时间(Universal Time Coordinated,UTC): GPS 系统中有两种时间区分,一为UTC,另一为LT(地方时)两者的区别为时区不同,UTC就是0时区的时间,地方时为本地 ...

  10. 同时安装了python3.4和python3.5,如何使用pip?

    首先我们python3.4 -m pip --version一下 再python3.5 -m pip --version 一下 发现两个pip版本不同,在使用pip3时,使用的其实是python3.4 ...