/// <summary> /// 转为每日计数实体 /// </summary> /// <returns></returns> public CountPerDayEntity AsCountPerDayEntity() { CountPerDayEntity entity = new CountPerDayEntity(); entity.CountType = this.CountType; entity.ObjectId = this.ObjectId; entity.OwnerId = this.OwnerId; entity.StatisticsCount = this.StatisticsCount; entity.ReferenceYear = DateTime.UtcNow.Year; entity.ReferenceMonth = DateTime.UtcNow.Month; entity.ReferenceDay = DateTime.UtcNow.Day; return(entity); }
/// <summary> /// 新建实体时使用 /// </summary> public static CountPerDayEntity New() { CountPerDayEntity countsPerDayEntity = new CountPerDayEntity(); return(countsPerDayEntity); }
/// <summary> /// 执行队列 /// </summary> public void ExecQueue() { Database database = CreateDAO(); try { database.OpenSharedConnection(); //将CountQueue中的数据更新至计数表 foreach (string key in CountQueue.Keys) { Queue <CountQueueItem> queue = null; bool removed = CountQueue.TryRemove(key, out queue); if (!removed || queue == null) { continue; } string countTableName = GetTableName_Counts(key); while (queue.Count > 0) { var item = queue.Dequeue(); //需要判断数据库中是否存在记录 var sql = PetaPoco.Sql.Builder; sql.Select("CountId") .From(countTableName) .Where("ObjectId=@0 and CountType=@1", item.ObjectId, item.CountType); CountEntity countEntity = database.FirstOrDefault <CountEntity>(sql); if (countEntity == null) { database.Insert(countTableName, "CountId", item.AsCountEntity()); } else { sql = PetaPoco.Sql.Builder; sql.Append("Update " + countTableName) .Append("Set StatisticsCount = StatisticsCount + @0 ", item.StatisticsCount) .Where("ObjectId=@0", item.ObjectId) .Where("CountType=@0", item.CountType); database.Execute(sql); } } } //将CountPerDayQueue中的数据更新每日计数表 foreach (string key in CountPerDayQueue.Keys) { Queue <CountQueueItem> queue = null; bool removed = CountPerDayQueue.TryRemove(key, out queue); if (!removed || queue == null) { continue; } string countPerDayTableName = GetTableName_CountsPerDay(key); while (queue.Count > 0) { var item = queue.Dequeue(); var sql = PetaPoco.Sql.Builder; sql.Select("Id") .From(countPerDayTableName) .Where("ObjectId=@0 and CountType=@1 and ReferenceYear=@2 and ReferenceMonth=@3 and ReferenceDay=@4", item.ObjectId, item.CountType, DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day); CountPerDayEntity countPerDayEntity = database.FirstOrDefault <CountPerDayEntity>(sql); if (countPerDayEntity == null) { database.Insert(countPerDayTableName, "Id", item.AsCountPerDayEntity()); } else { sql = PetaPoco.Sql.Builder; sql.Append("Update " + countPerDayTableName) .Append("Set StatisticsCount = StatisticsCount + @0 ", item.StatisticsCount) .Where("ObjectId=@0", item.ObjectId) .Where("CountType=@0", item.CountType) .Where("ReferenceYear=@0 and ReferenceMonth=@1 and ReferenceDay=@2", DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day); database.Execute(sql); } } } } finally { database.CloseSharedConnection(); } }
/// <summary> /// 新建实体时使用 /// </summary> public static CountPerDayEntity New() { CountPerDayEntity countsPerDayEntity = new CountPerDayEntity(); return countsPerDayEntity; }
/// <summary> /// 转为每日计数实体 /// </summary> /// <returns></returns> public CountPerDayEntity AsCountPerDayEntity() { CountPerDayEntity entity = new CountPerDayEntity(); entity.CountType = this.CountType; entity.ObjectId = this.ObjectId; entity.OwnerId = this.OwnerId; entity.StatisticsCount = this.StatisticsCount; entity.ReferenceYear = DateTime.UtcNow.Year; entity.ReferenceMonth = DateTime.UtcNow.Month; entity.ReferenceDay = DateTime.UtcNow.Day; return entity; }