diff --git a/src/JiShe.CollectBus.MongoDB/MongoDB/CollectBusMongoDbContext.cs b/src/JiShe.CollectBus.MongoDB/MongoDB/CollectBusMongoDbContext.cs index 2366553..c334325 100644 --- a/src/JiShe.CollectBus.MongoDB/MongoDB/CollectBusMongoDbContext.cs +++ b/src/JiShe.CollectBus.MongoDB/MongoDB/CollectBusMongoDbContext.cs @@ -3,7 +3,10 @@ using JiShe.CollectBus.IotSystems.MessageIssueds; using JiShe.CollectBus.IotSystems.MessageReceiveds; using JiShe.CollectBus.IotSystems.MeterReadingRecords; using JiShe.CollectBus.IotSystems.Protocols; +using MongoDB.Bson; using MongoDB.Driver; +using System; +using System.Collections.Generic; using Volo.Abp.Data; using Volo.Abp.MongoDB; using Volo.Abp.MultiTenancy; @@ -24,13 +27,34 @@ public class CollectBusMongoDbContext : AbpMongoDbContext, ICollectBusMongoDbCon public IMongoCollection Devices => Collection(); public IMongoCollection ProtocolInfos => Collection(); - public IMongoCollection MeterReadingRecords => Collection(); - + /// + /// 抄表记录,默认按天分表 + /// + public IMongoCollection MeterReadingRecordInfo => Database.GetCollection(DateTime.Now.GetCollectionName()); + protected override void CreateModel(IMongoModelBuilder modelBuilder) { base.CreateModel(modelBuilder); + modelBuilder.Entity(builder => + { + // 创建索引 + builder.ConfigureIndexes(index => + { + List> createIndexModels = new List>(); + createIndexModels.Add(new CreateIndexModel( + Builders.IndexKeys.Ascending(nameof(MeterReadingRecords)), + new CreateIndexOptions + { + Unique = true + } + )); + index.CreateMany(createIndexModels); + }); + + }); + modelBuilder.ConfigureCollectBus(); } } diff --git a/src/JiShe.CollectBus.MongoDB/MongoDB/CollectionHelper.cs b/src/JiShe.CollectBus.MongoDB/MongoDB/CollectionHelper.cs new file mode 100644 index 0000000..8bc80ce --- /dev/null +++ b/src/JiShe.CollectBus.MongoDB/MongoDB/CollectionHelper.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace JiShe.CollectBus.MongoDB +{ + /// + /// MongoDB集合帮助类 + /// + public static class CollectionHelper + { + /// + /// 获取集合名称 + /// + /// + /// + /// + public static string GetCollectionName(this DateTime time) + { + return $"{typeof(T).Name}{time:yyyyMMddHHmm}"; + } + } +} diff --git a/src/JiShe.CollectBus.MongoDB/Repository/MeterReadingRecord/IMeterReadingRecordRepository.cs b/src/JiShe.CollectBus.MongoDB/Repository/MeterReadingRecord/IMeterReadingRecordRepository.cs new file mode 100644 index 0000000..7ab95e9 --- /dev/null +++ b/src/JiShe.CollectBus.MongoDB/Repository/MeterReadingRecord/IMeterReadingRecordRepository.cs @@ -0,0 +1,35 @@ +using JiShe.CollectBus.IotSystems.MeterReadingRecords; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories; + +namespace JiShe.CollectBus.Repository.MeterReadingRecord +{ + /// + /// 抄读仓储接口 + /// + public interface IMeterReadingRecordRepository: IRepository + { + /// + /// 批量插入 + /// + /// + /// + /// + /// + Task InsertManyAsync(List entities, DateTime dayTime, CancellationToken cancellationToken = default(CancellationToken)); + + /// + /// 单个插入 + /// + /// + /// + /// + /// + Task InsertOneAsync(MeterReadingRecords entity, DateTime dayTime, CancellationToken cancellationToken = default(CancellationToken)); + } +} diff --git a/src/JiShe.CollectBus.MongoDB/Repository/MeterReadingRecord/MeterReadingRecordRepository.cs b/src/JiShe.CollectBus.MongoDB/Repository/MeterReadingRecord/MeterReadingRecordRepository.cs new file mode 100644 index 0000000..87337ea --- /dev/null +++ b/src/JiShe.CollectBus.MongoDB/Repository/MeterReadingRecord/MeterReadingRecordRepository.cs @@ -0,0 +1,53 @@ +using JiShe.CollectBus.IotSystems.MeterReadingRecords; +using JiShe.CollectBus.MongoDB; +using MongoDB.Bson; +using MongoDB.Driver; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.MongoDB; +using static System.Net.Mime.MediaTypeNames; + +namespace JiShe.CollectBus.Repository.MeterReadingRecord +{ + /// + /// 抄读记录仓储 + /// + public class MeterReadingRecordRepository : MongoDbRepository, IMeterReadingRecordRepository + { + public MeterReadingRecordRepository(IMongoDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + } + + /// + /// 批量插入 + /// + /// + /// + /// + /// + public async Task InsertManyAsync(List entities, DateTime dayTime, CancellationToken cancellationToken = default(CancellationToken)) + { + var collection = await GetCollectionAsync(cancellationToken); + await collection.InsertManyAsync(entities); + } + + /// + /// 单条插入 + /// + /// + /// + /// + /// + public async Task InsertOneAsync(MeterReadingRecords entity,DateTime dayTime, CancellationToken cancellationToken = default(CancellationToken)) + { + var collection = await GetCollectionAsync(cancellationToken); + await collection.InsertOneAsync(entity); + } + } +}