1. using MongoDB.Driver;
  2.  
  3. namespace Dben.Invoice.Repository
  4. {
  5. /// <summary>
  6. /// 仓储基类
  7. /// </summary>
  8. public abstract class BaseRepository
  9. {
  10. protected static readonly IMongoClient Client;
  11.  
  12. protected static readonly IMongoDatabase Database;
  13.  
  14. static BaseRepository()
  15. {
  16. //MongoClientSettings setting = new MongoClientSettings
  17. //{
  18. // MaxConnectionPoolSize = 500,
  19. // WaitQueueSize = 2000,
  20. // Server = new MongoServerAddress(DbSetting.ConnectionString)
  21. //};
  22. Client = new MongoClient(DbSetting.ConnectionString);
  23. Database = Client.GetDatabase(DbSetting.InvoiceDataBase);
  24. }
  25. }
  26. }
  1. /*******************************************************
  2. *
  3. * 作者:朱皖苏
  4. * 创建日期:20180528
  5. * 说明:此文件只包含一个类,具体内容见类型注释。
  6. * 运行环境:.NET 4.0
  7. * 版本号:1.0.0
  8. *
  9. * 历史记录:
  10. * 创建文件 朱皖苏 20180528 16:19
  11. *
  12. *******************************************************/
  13.  
  14. using System;
  15. using System.Collections.Generic;
  16. using System.Text;
  17. using System.Threading.Tasks;
  18. using Dben.Invoice.Models;
  19. using NLog;
  20. using MongoDB.Driver;
  21. using System.Linq;
  22. using MongoDB.Bson;
  23.  
  24. namespace Dben.Invoice.Repository
  25. {
  26. /// <summary>
  27. /// 发票仓储
  28. /// </summary>
  29. public class InvoiceRepository : BaseRepository
  30. {
  31. /// <summary>
  32. /// 过滤器
  33. /// </summary>
  34. public FilterDefinitionBuilder<Models.Invoice> filterBuilder = Builders<Models.Invoice>.Filter;
  35.  
  36. /// <summary>
  37. /// 更新器
  38. /// </summary>
  39. public UpdateDefinitionBuilder<Models.Invoice> updateBuilder = Builders<Models.Invoice>.Update;
  40.  
  41. private static readonly ILogger logger = LogManager.GetCurrentClassLogger();
  42.  
  43. /// <summary>
  44. /// 大于开始 小于等于结束
  45. /// </summary>
  46. /// <param name="begin"></param>
  47. /// <param name="end"></param>
  48. /// <param name="source"></param>
  49. /// <returns></returns>
  50. internal long CountByDate(DateTime begin, DateTime end, string source)
  51. {
  52. var filter = filterBuilder.Where(m => m.Source == source && m.CreateTime > begin && m.CreateTime <= end);
  53. return Database.GetCollection<Models.Invoice>("Invoice").Count(filter);
  54. }
  55.  
  56. internal long CountBySync(bool syncStatus)
  57. {
  58. var filter = filterBuilder.Where(m => m.SynStatus == syncStatus);
  59. return Database.GetCollection<Models.Invoice>("Invoice").Count(filter);
  60. }
  61.  
  62. /// <summary>
  63. /// 新增发票
  64. /// </summary>
  65. /// <param name="invoices"></param>
  66. public async Task AddAsync(IEnumerable<Models.Invoice> invoices)
  67. {
  68. try
  69. {
  70. var collection = Database.GetCollection<Models.Invoice>("Invoice");
  71. await collection.InsertManyAsync(invoices);
  72. }
  73. catch (Exception e)
  74. {
  75. logger.Error(e);
  76. }
  77.  
  78. }
  79.  
  80. /// <summary>
  81. /// 新增发票
  82. /// </summary>
  83. /// <param name="invoice"></param>
  84. public async Task AddAsync(Models.Invoice invoice)
  85. {
  86. try
  87. {
  88. var collection = Database.GetCollection<Models.Invoice>("Invoice");
  89. await collection.InsertOneAsync(invoice);
  90. }
  91. catch (Exception e)
  92. {
  93. logger.Error(e);
  94. }
  95.  
  96. }
  97. /// <summary>
  98. /// 保存发票文件
  99. /// </summary>
  100. /// <param name="invoiceFile"></param>
  101. public async Task SaveInvoiceFileAsync(InvoiceFile invoiceFile)
  102. {
  103. try
  104. {
  105. var collection = Database.GetCollection<Models.InvoiceFile>("InvoiceFile");
  106. await collection.InsertOneAsync(invoiceFile);
  107. }
  108. catch (Exception e)
  109. {
  110. logger.Error(e);
  111. }
  112.  
  113. }
  114.  
  115. /// <summary>
  116. /// 查询前top条未推送的数据。
  117. /// </summary>
  118. /// <param name="top"></param>
  119. /// <returns></returns>
  120. public async Task<List<Models.InvoiceTitle>> GetInvoices(int top)
  121. {
  122. try
  123. {
  124. var collection = Database.GetCollection<Models.InvoiceTitle>("Invoice");
  125. var list = await collection.Find(x => x.SynStatus == false).Limit(top).ToListAsync();
  126.  
  127. if (list != null && list.Count > )
  128. {
  129. return list;
  130. }
  131. }
  132. catch (Exception e)
  133. {
  134. logger.Error(e);
  135. }
  136. return null;
  137. }
  138.  
  139. /// <summary>
  140. /// 批量更新推送状态
  141. /// </summary>
  142. /// <param name="invoices"></param>
  143. /// <returns></returns>
  144. public async Task UpdateInvoices(List<Models.InvoiceTitle> invoices)
  145. {
  146. try
  147. {
  148. List<ObjectId> ids = invoices.Select(a => a._id).ToList();
  149. var collection = Database.GetCollection<Models.InvoiceTitle>("Invoice");
  150. var filter = Builders<Models.InvoiceTitle>.Filter.In("_id", ids);
  151. var update = Builders<Models.InvoiceTitle>.Update.Set("SynStatus", true);
  152. await collection.UpdateManyAsync(filter, update);
  153. }
  154. catch (Exception e)
  155. {
  156. logger.Error(e);
  157. }
  158. }
  159.  
  160. }
  161. }
  1. /// <summary>
  2. /// 发票信息
  3. /// </summary>
  4. public class Invoice
  5. {
  6. /// <summary>
  7. /// 购方名称
  8. /// </summary>
  9. public string PurchaserName { get; set; }
  10.  
  11. /// <summary>
  12. /// 购方税号
  13. /// </summary>
  14. public string PurchaserTaxNo { get; set; }
  15.  
  16. /// <summary>
  17. /// 购方开户行账户
  18. /// </summary>
  19. public string PurchaserBank { get; set; }
  20.  
  21. /// <summary>
  22. /// 购方地址电话
  23. /// </summary>
  24. public string PurchaserAddressPhone { get; set; }
  25.  
  26. /// <summary>
  27. /// 销方名称
  28. /// </summary>
  29. public string SalesName { get; set; }
  30.  
  31. /// <summary>
  32. /// 销方税号
  33. /// </summary>
  34. public string SalesTaxNo { get; set; }
  35.  
  36. /// <summary>
  37. /// 销方地址电话
  38. /// </summary>
  39. public string SalesAddressPhone { get; set; }
  40.  
  41. /// <summary>
  42. /// 销方开户行账户
  43. /// </summary>
  44. public string SalesBank { get; set; }
  45.  
  46. ///// <summary>
  47. ///// 主键ID
  48. ///// </summary>
  49. //public ObjectId Id { get; set; }
  50.  
  51. /// <summary>
  52. /// 地区编码
  53. /// </summary>
  54. public string AreaCode { get; private set; }
  55.  
  56. /// <summary>
  57. /// 地区名称
  58. /// </summary>
  59. public string AreaName { get; private set; }
  60.  
  61. private string _invoiceCode;
  62.  
  63. /// <summary>
  64. /// 发票代码
  65. /// </summary>
  66. public string InvoiceCode
  67. {
  68. get { return _invoiceCode; }
  69. set
  70. {
  71. _invoiceCode = value;
  72. var area = InvoiceParser.ParseArea(value);
  73. AreaCode = area.Item1;
  74. AreaName = area.Item2;
  75. }
  76. }
  77.  
  78. /// <summary>
  79. /// 发票号码
  80. /// </summary>
  81. public string InvoiceNumber { get; set; }
  82.  
  83. /// <summary>
  84. /// 发票类型
  85. /// 1=增值税专用发票 2=机动车销售统一发票 3=货物运输业增值税专用发票
  86. /// 4=增值税普通发票 5=增值税电子发票 6=增值税普通发票(卷票)
  87. /// </summary>
  88. public InvoiceType InvoiceType { get; set; }
  89.  
  90. /// <summary>
  91. /// 发票状态
  92. /// </summary>
  93. public InvoiceStatus InvoiceStatus { get; set; }
  94.  
  95. /// <summary>
  96. /// 开票日期
  97. /// </summary>
  98. public DateTime BillingDate { get; set; }
  99.  
  100. /// <summary>
  101. /// 金额(价税合计)
  102. /// </summary>
  103. public double SumAmount { get; set; }
  104.  
  105. /// <summary>
  106. /// 未税金额
  107. /// </summary>
  108. public double Amount { get; set; }
  109.  
  110. /// <summary>
  111. /// 税额
  112. /// </summary>
  113. public double TaxAmount { get; set; }
  114.  
  115. /// <summary>
  116. /// 备注
  117. /// </summary>
  118. public string Remark { get; set; }
  119.  
  120. /// <summary>
  121. /// 发票来源 如 发票管家、发票查验平台
  122. /// </summary>
  123. public string Source { get; set; }
  124.  
  125. /// <summary>
  126. /// 发票来源的唯一标识
  127. /// </summary>
  128. public string SourceId { get; set; }
  129.  
  130. /// <summary>
  131. /// 采集时间
  132. /// </summary>
  133. public DateTime CreateTime { get; set; }
  134.  
  135. /// <summary>
  136. /// 收款人
  137. /// </summary>
  138. public string Payee { get; set; }
  139.  
  140. /// <summary>
  141. /// 复核人
  142. /// </summary>
  143. public string Checker { get; set; }
  144.  
  145. /// <summary>
  146. /// 开票人
  147. /// </summary>
  148. public string Drawer { get; set; }
  149.  
  150. /// <summary>
  151. /// 校验码
  152. /// </summary>
  153. public string CheckCode { get; set; }
  154.  
  155. /// <summary>
  156. /// 机器码
  157. /// </summary>
  158. public string MachineCode { get; set; }
  159.  
  160. /// <summary>
  161. /// 发票是否为真
  162. /// </summary>
  163. public bool IsTrue { get; set; }
  164.  
  165. /// <summary>
  166. /// 发票明细
  167. /// </summary>
  168. public IList<InvoiceItem> Items { get; set; }
  169.  
  170. /// <summary>
  171. /// 机动车发票信息
  172. /// </summary>
  173. public VehicleInfo VehicleInfo { get; set; }
  174.  
  175. /// <summary>
  176. /// 货物运输业发票信息
  177. /// </summary>
  178. public FreightTransport FreightTransport { get; set; }
  179.  
  180. /// <summary>
  181. /// 同步状态
  182. /// </summary>
  183. public bool SynStatus { get; set; }
  184. }

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. 基于ThinkPHP与阿里大于的PHP短信验证功能

    https://blog.csdn.net/s371795639/article/details/53381274 PHP阿里大鱼短信验证 第一步 登陆阿里大于注册账号,在用户管理中心创建应用,确定A ...

  2. C# 16 进制字符串转 int

    最近在写硬件,发现有一些测试是做 16 进制的字符串,需要把他转换为整形才可以处理. 本文告诉大家如何从 16 进制转整形 如果输入的是 0xaa 这时转换 int 不能使用 Parse 不然会出现异 ...

  3. Vue的filter过滤器

    一和二,请参考https://www.cnblogs.com/zui-ai-java/p/11109213.html 三.index.html <!DOCTYPE html> <ht ...

  4. linux下svn清除非版本控制文件的方法

    使用svn status命令,文件名前面显示问好的就是非版本控制的文件

  5. vue-lazyload: 想弃坑,但没有找到合适的替代品

    vue-lazyload,相信在vue项目中大家都有用到过它,同时也遇到过大大小小的坑.笔者也遇到过这样一个bug,在一个图片列表页面中,总有一定的概率图片的状态为load,导致图片一直加载中...这 ...

  6. H3C IPv6地址分类

  7. C# 如何引用 WshShell 类

    如果想要创建快捷方式等,很多使用都需要引用 WshShell 类,这个类需要通过 COM 的方法引用 引用 WshShell 不是在一个程序集,而是 Windows Script Host Objec ...

  8. eclipse快捷键记录

    转自:http://blog.csdn.net/siphiababy/article/details/74179684 ctrl+2+L这个快捷键可自动补全代码,极大提升编码效率! 注:ctrl和2同 ...

  9. Java虚拟机参数,增加虚拟机最大内存,在/etc/profile增加如下: export JAVA_OPTS="-Xms9g -Xmx9g"

    一.运行class文件 执行带main方法的class文件,Java虚拟机命令参数行为: java <CLASS文件名> 注意:CLASS文件名不要带文件后缀.class 例如: java ...

  10. css3 移动端旋转动画暂停

    音乐播放图片旋转动画 ios不支持暂停: animation-play-state: paused; @-webkit-keyframes rotate{ 100% { transform: rota ...