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));
            }
        }
Пример #3
0
        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));
            }
        }
Пример #6
0
        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" }));
            }
        }