public async Task CalculateUsage(Guid meterReadId, Guid addressId, double meterState, Guid messageMeterId, Guid usageId) { var address = await _addressRepository.Get(addressId); var meterReadTask = _meterReadRepository.Get(meterReadId); MeterRead meterRead = null; if (!address.LastFinishedMeterReadProcess.HasValue) { meterRead = await meterReadTask; meterRead.CreateUsage(meterState, meterState, DateTime.Now, messageMeterId, Guid.NewGuid()); _meterReadRepository.Update(meterRead); return; } var lastMeterRead = await _meterReadRepository.Get(address.LastFinishedMeterReadProcess.Value); var lastUsageForMeter = lastMeterRead.Usages.FirstOrDefault(i => i.MeterId == messageMeterId); meterRead = await meterReadTask; meterRead.CreateUsage(lastUsageForMeter?.CurrentRead ?? meterState, meterState, DateTime.Now, messageMeterId, usageId); _meterReadRepository.Update(meterRead); }
public Task AddUsage(int accountId, MeterRead reading, Guid?uploadResultId) { //_dbContext.MeterReads.Add(new MeterRead //{ // AccountId = accountId, // UploadResultId = uploadResultId, // Reading = reading.Reading, // ReadingDateTime = reading.ReadingDateTime //}); return(_dbContext.SaveChangesAsync()); }
public async Task <IActionResult> BeginMeterReadProcess([FromBody] MeterRead meter) { var address = await _addressRepository.Get(meter.AddressId); if (address == null) { return(NotFound(meter.AddressId)); } address.BeginMeterReadProcess(meter.MeterReadId); _addressRepository.Update(address); return(StatusCode(204)); }