public ActionResult Record(int busNumber) { try { User user = null; using (var userDAO = new UserDAO()) user = userDAO.Get(Convert.ToInt32(User.FindFirst("id").Value)); if (user != null) { int recordId = 0; using (var FlowRecordDAO = new FlowRecordDAO()) FlowRecordDAO.Register(busNumber.ToString(), user); if (recordId != 0) { return(StatusCode(202, new { Message = "Registrado com sucesso" })); } } return(StatusCode(404, new { Message = "Usuário não encontrado" })); } catch (Exception ex) { return(StatusCode(500, new { Exception = ex, Message = "Erro ao gravar registro no servidor" })); } }
public ActionResult ProcessImageBytes() { try { var picture = Request.Body; var pictureSize = (int)Request.ContentLength; if (picture != null || picture.Length > 0) { using (MemoryStream targetStream = new MemoryStream()) { Stream sourceStream = picture; byte[] buffer = new byte[pictureSize + 1]; int read = 0; while ((read = sourceStream.Read(buffer, 0, buffer.Length)) > 0) { targetStream.Write(buffer, 0, read); } Task <string> recognizeTask = Task.Run(() => OpenALPR.ProcessImage(buffer)); recognizeTask.Wait(); var response = JsonConvert.DeserializeObject <OpenALPRResponse>(recognizeTask.Result); if (!response.error_code.Equals("400")) { response.error = "kk"; } using (var recordFlowDAO = new FlowRecordDAO()) recordFlowDAO.Register("XUMBADO ATENÇÃO", null); // Printa resultado //SystemNotifier.SendNotificationAsync(response); } return(StatusCode(200)); } return(StatusCode(406)); } catch (Exception ex) { return(StatusCode(500)); } }
public ActionResult ChargeRegistration(int recordId) { Rules rules; FlowRecord record; using (var providerDAO = new RulesDAO()) rules = providerDAO.Get(); if (rules == null) { return(StatusCode(404, new { Message = "Não há regras base para o cálculo da fatura" })); } using (var flowRecordDAO = new FlowRecordDAO()) record = flowRecordDAO.Get(recordId); if (record == null) { return(StatusCode(404, new { Message = "Registro não encontrado" })); } if (record.Departure != null) { var permanence = record.Departure - record.Arrival; var total = rules.Tax * Convert.ToDecimal(Math.Floor(permanence.Value.TotalMinutes / rules.IntervalMinutes)); // Caso tenha permanecido menos que o intervalo de cobrança, é cobrado a taxa mínima if (total <= 0) { total += rules.Tax; } return(StatusCode(200, new Invoice() { Id = 0, GenerationDate = DateTime.Now, TaxConsidered = rules.Tax, IntervalMinutesConsidered = rules.IntervalMinutes, CompanyDebtor = record.BusRegistered.BusCompany, TotalCost = total })); } return(StatusCode(412, new { Message = "O registro deve estar fechado para ser tarifado." })); }
public ActionResult Record([FromBody] string busNumber) { try { User user = null; using (var userDAO = new UserDAO()) user = userDAO.Get(Convert.ToInt32(User.FindFirst("id").Value)); if (user != null) { FlowRecord record; using (var FlowRecordDAO = new FlowRecordDAO()) record = FlowRecordDAO.Register(busNumber, user); if (record != null) { SystemNotifier.VehicleActionAsync(record); return(StatusCode(202, new { Message = "Registrado com sucesso" })); } else { SystemNotifier.WarningAsync(new SystemWarning() { Moment = DateTime.Now, Type = SystemWarning.WarningType.NotRegistered, LicensePlate = busNumber, Message = "A placa não foi reconhecida para nenhuma empresa no banco de dados" }); return(StatusCode(304, new { Message = "Não foi possível efetuar o registro" })); } } return(StatusCode(404, new { Message = "Usuário não encontrado" })); } catch (Exception ex) { return(StatusCode(500, new { Message = "Erro ao gravar registro no servidor" })); } }
public ActionResult ProcessImageBytes() { try { if (Response.Body != null || Response.ContentLength > 0) { using (StreamReader targetStream = new StreamReader(Request.Body)) { byte[] bytes; using (var memoryStream = new MemoryStream()) { Request.Body.CopyTo(memoryStream); bytes = memoryStream.ToArray(); } Task <string> recognizeTask = Task.Run(() => new OpenALPR(_secretKey).ProcessImage(bytes)); recognizeTask.Wait(); var response = JsonConvert.DeserializeObject <OpenALPRResponse>(recognizeTask.Result); if (!response.Error && response.Results.Length > 0) { FlowRecord record = null; using (var recordFlowDAO = new FlowRecordDAO()) record = recordFlowDAO.Register(response.Results[0].Plate, null); if (record != null) { SystemNotifier.VehicleActionAsync(record); return(StatusCode(200)); } else { SystemNotifier.WarningAsync(new SystemWarning() { Moment = DateTime.Now, Type = SystemWarning.WarningType.NotRegistered, LicensePlate = response.Results[0].Plate, Message = "A placa não foi reconhecida para nenhuma empresa no banco de dados" }); return(StatusCode(404)); } } } } SystemNotifier.WarningAsync(new SystemWarning() { Moment = DateTime.Now, Type = SystemWarning.WarningType.NotRecognized, Message = "Falha ao identificar a placa" }); return(StatusCode(406)); } catch (Exception ex) { return(StatusCode(500)); } }
public ActionResult GenerateInvoice(int companyId, [FromBody] DateTime begin) { try { Company company; Rules rules; using (var companyDAO = new CompanyDAO()) company = companyDAO.Get(companyId); if (company == null) { return(StatusCode(404, new { Message = "Empresa não encontrada" })); } using (var providerDAO = new RulesDAO()) rules = providerDAO.Get(); if (rules == null) { return(StatusCode(404, new { Message = "Não há regras base para o cálculo da fatura" })); } using (var invoiceDAO = new InvoiceDAO()) { var invoice = new Invoice() { GenerationDate = DateTime.Now, CompanyDebtor = company.Id, TaxConsidered = rules.Tax, IntervalMinutesConsidered = rules.IntervalMinutes }; invoice.Id = invoiceDAO.Add(invoice); if (invoice.Id != 0) { using (var flowRecordDAO = new FlowRecordDAO()) { List <FlowRecord> records; decimal total = 0; flowRecordDAO.MarkCharge(invoice.Id, company.Id, begin, begin.AddDays(company.InvoiceInterval)); records = invoiceDAO.GetInvoiceRecords(invoice.Id); Parallel.ForEach(records, (record) => { // Calcula o valor para o período de permanência desse Ônibus com base no intervalo de cobrança e o valor da tarifa var permanence = record.Departure - record.Arrival; total += rules.Tax * Convert.ToDecimal(Math.Floor(permanence.Value.TotalMinutes / rules.IntervalMinutes)); // Caso tenha permanecido menos que o intervalo de cobrança, é cobrado a taxa mínima if (total <= 0) { total += rules.Tax; } }); if (records.Count <= 0 && invoiceDAO.Cancel(invoice.Id)) { return(StatusCode(304, new { Message = "Não há registros não faturados para este período" })); } if (invoiceDAO.SetInvoiceValue(invoice.Id, total)) { invoice = invoiceDAO.Get(invoice.Id); return(StatusCode(200, invoice)); } } } return(StatusCode(304, new { Message = "A fatura não foi gerada" })); } } catch (Exception ex) { return(StatusCode(500, new { Message = "Erro interno ao gerar fatura" })); } }