public BillingBeat GetLastBeatAsNoTracking(int cycleId, BeatTypes type) { var typeint = (int)type; var beat = QueryAsNoTracking <BillingBeat>() .Where(b => b.CycleId == cycleId && b.BeatType == typeint) .OrderByDescending(c => c.Number) .FirstOrDefault(); return(beat); }
public string DoBeat(BeatTypes type = BeatTypes.Test, string token = "", bool wait = false) { var cycle = Factory.Job.GetLastCycle(token); if (!cycle.IsActive || cycle == null) { return("цикл не запущен"); } if (type == BeatTypes.Characters) { if (!Factory.Job.BlockBilling()) { throw new BillingException(BillingException); } } var task = Task.Run(() => { try { var beat = Factory.Job.GetLastBeatAsNoTracking(cycle.Id, type); var newBeat = new BillingBeat(); newBeat.Number = beat != null ? beat.Number + 1 : 1; newBeat.StartTime = DateTime.Now.ToUniversalTime(); newBeat.CycleId = cycle.Id; newBeat.BeatType = (int)type; Factory.Job.AddAndSave(newBeat); var dto = new JobLifeDto { Beat = newBeat }; switch ((BeatTypes)newBeat.BeatType) { case BeatTypes.Test: dto.AddHistory("test beat"); break; case BeatTypes.Items: dto = DoItemsBeat(dto); break; case BeatTypes.Characters: dto = DoCharactersBeat(dto); break; default: dto.AddHistory("unknown beat type"); break; } dto.Beat.FinishTime = DateTime.Now.ToUniversalTime(); Factory.Job.AddAndSave(dto.Beat); Factory.Job.AddRangeAndSave(dto.History); } catch (Exception e) { Console.Error.WriteLine(e.ToString()); throw; } finally { if (type == BeatTypes.Characters) { if (!Factory.Job.UnblockBilling()) { throw new Exception("Биллинг был разблокирован раньше времени"); } } } }); if (wait) { task.Wait(); } return($"Пересчет для {cycle.Token}_{cycle.Number} запущен "); }
public BillingBeat GetLastBeatAsNoTracking(BeatTypes type) { var cycle = GetLastCycle(); return(GetLastBeatAsNoTracking(cycle.Id, type)); }