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. js利用select标签生成简易计算功能

    html中使用select option作为运算符的承接容器,输入值,选择不同运算符,计算结果. 文章地址 https://www.cnblogs.com/sandraryan/ <!DOCTY ...

  2. PHP 面试题二

    1.抓取远程图片到本地,你会用什么函数? fsockopen, A 2.用最少的代码写一个求3值最大值的函数. function get_max($a,$b,$c) { return ($a > ...

  3. [转]【转】大型高性能ASP.NET系统架构设计

    大型高性能ASP.NET系统架构设计 大型动态应用系统平台主要是针对于大流量.高并发网站建立的底层系统架构.大型网站的运行需要一个可靠.安全.可扩展.易维护的应用系统平台做为支撑,以保证网站应用的平稳 ...

  4. Vue 原生动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 地址中如果含有"+",发给服务器时"+"变成了空格问题解析

    如地址为sms:+7 915 444-414-444,含有空格. 服务器解码 URLDecoder.decode("sms:+7 915 444-414-444"),返回的是sms ...

  6. Spring Security 5中 PasswordEncoder的使用

    在最新的 Spring Security 5发布版本中, 出于安全性的考虑调整了PasswordEncoder的实现与使用策略. 1.以前常用的实现 StandardPasswordEncoder, ...

  7. P1028 过河问题

    题目描述 为了躲避黑暗大魔王的追杀,zifeiy与他的伙伴们共N人连夜逃出了黑暗城堡,他们走到一条河的东岸边,想要过河到西岸.而东岸边有一条小船. 船太小了,一次只能乘坐两人.每个人都有一个渡河时间T ...

  8. API自动化测试指南

    我相信自动化技能已经成为高级测试工程师总体技能的标配.敏捷和持续测试破坏了传统的测试自动化实践,导致测试工程师重新考虑自动化的完成方式.当今的自动化工程师需要在GUI的下方深入到API级别完成软件质量 ...

  9. git无密码push

    近来项目中调研,jupyterlab和git的整合内容,git server我使用的gitbucket和bitbucket.(项目要求使用bitbucket,看错一个字母下载了两个镜像) gitbuc ...

  10. RabbitMQ之pika模块

    发布/订阅 系统 send.py import pika import time s_conn = pika.BlockingConnection(pika.ConnectionParameters( ...