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. 蝶式套利(butterfly spread)

    多头蝶式套利.预期市场价格趋于稳定,希望在这个价格区间内能获利,可选用多头蝶式套利,以较低的议定价格买进一个看涨期权,又以较高的议定价格买进一个看涨期权,同时又以介于上述2个议定价格之间的中等的议定价 ...

  2. webpack学习(二)初识打包配置

    前言:webpack打包工具让整个项目的不同文件夹相互关联,遵循我们想要的规则.想 .vue文件, .scss文件浏览器并不认识,因此webpage暗中做了很多转译,编译等工作. 事实上,如果我们在没 ...

  3. P1099 双连击

    题目描述 我们假设一个二位整数 \(N(10 \le N \le 99)\) ,它的十位上的数字是 \(A\) ,个位上的数字是 \(B\) ,如果 \(A\) 和 \(B\) 的比例关系满足 \(A ...

  4. P1002 Hello,World!

    题目描述 输出"Hello Wolrd!". 输入格式 无. 输出格式 输出一行"Hello World!". 样例输入 无. 样例输出 Hello World ...

  5. TOJ 6121: 学长的情书 ( 二分)

    传送门: 点我 6121: 学长的情书  时间限制(普通/Java):2000MS/6000MS     内存限制:65536KByte总提交: 79            测试通过:2 描述 抹布收 ...

  6. 2019-8-31-C#-如何写-DEBUG-输出

    title author date CreateTime categories C# 如何写 DEBUG 输出 lindexi 2019-08-31 16:55:58 +0800 2018-2-13 ...

  7. 【Docker】Jenkins的安装与更新

    一.Jenkins安装 1.获取docker镜像 2.查看jenkins版本 3.启动jenkins容器 docker run -d --name jenkins_01 -p 8081:8080 -v ...

  8. Channel 9视频整理【2】

    JadeChang https://channel9.msdn.com/Niners/JadeChang 繁体中文视频 2016 Nano Server / Docker / Containers 打 ...

  9. MySQL Server逻辑架构

    1.MySQL基础 MySQL是一个开放源代码的关系数据库管理系统.原开发者为瑞典的MySQL AB公司,最早是在2001年MySQL3.23进入到管理员的视野并在之后获得广泛的应用. 2008年My ...

  10. CentOS 7 端口白名单设置

    # 查看白名单列表 firewall-cmd --zone=public --list-ports # 添加白名单端口 firewall-cmd --zone=public --add-port=/t ...