API update.
This commit is contained in:
parent
8ce9e92550
commit
9b7987a11e
@ -42,3 +42,16 @@ if (!function_exists('xmlToObject')) {
|
||||
return @simplexml_load_string(@file_get_contents($link), 'SimpleXMLElement', LIBXML_NOCDATA);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ('format_date_sql'){
|
||||
|
||||
function format_date_sql($params, $model)
|
||||
{
|
||||
foreach ($params->getFields() as $param) {
|
||||
$params->setFields(["TO_CHAR(TO_DATE({$model->qualifyColumn($param)}, 'YYMM'), 'MM/YYYY')"]);
|
||||
}
|
||||
return $params;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -3,6 +3,11 @@
|
||||
|
||||
namespace App\Helpers;
|
||||
|
||||
use DateInterval;
|
||||
use DatePeriod;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class Helpers
|
||||
{
|
||||
public static function uploadFiles($params, $field): ?string
|
||||
@ -15,4 +20,50 @@ class Helpers
|
||||
return $result;
|
||||
}
|
||||
|
||||
public static function orderByDate($result): array
|
||||
{
|
||||
return collect($result)->transform(fn($value) => Arr::set($value, 'mes', date_format(date_create($value['mes']), "M/Y")))->all();
|
||||
}
|
||||
|
||||
public static function checkDate($value): array
|
||||
{
|
||||
|
||||
$year = collect($value)->transform(fn($item, $value) => collect(Str::of($item['mes'])
|
||||
->explode('-')->offsetGet(0)))->unique()->toArray();
|
||||
$month = collect($value)->transform(fn($item, $value) => collect(Str::of($item['mes'])
|
||||
->explode('-')->offsetGet(1)))->unique()->toArray();
|
||||
|
||||
$month_stat = end($month);
|
||||
$date_stat = current($year);
|
||||
$date_end = end($year);
|
||||
|
||||
$start_date = date_create("{$date_stat[0]}-01-01");
|
||||
$end_date = date_create("{$date_end[0]}-{$month_stat[0]}-30");
|
||||
|
||||
$interval = DateInterval::createFromDateString('1 months');
|
||||
$daterange = new DatePeriod($start_date, $interval, $end_date);
|
||||
|
||||
$date = [];
|
||||
foreach ($daterange as $date1) {
|
||||
$date[] = $date1->format('Y-m'.'-01');
|
||||
}
|
||||
|
||||
$arr = collect($value)->toArray();
|
||||
|
||||
foreach ($date as $dt) {
|
||||
if (!in_array($dt, array_column($arr, 'mes'))) {
|
||||
$arr[] = ['mes' => $dt];
|
||||
}
|
||||
}
|
||||
|
||||
usort($arr, function ($a, $b, $i = 'mes') {
|
||||
$t1 = strtotime($a[$i]);
|
||||
$t2 = strtotime($b[$i]);
|
||||
return $t1 - $t2;
|
||||
});
|
||||
|
||||
return $arr;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -16,6 +16,8 @@ abstract class AbstractRepository
|
||||
|
||||
protected AbstractRepository|Model $model;
|
||||
|
||||
protected $item;
|
||||
|
||||
/**
|
||||
* @throws BindingResolutionException
|
||||
*/
|
||||
@ -24,20 +26,9 @@ abstract class AbstractRepository
|
||||
$this->model = $model ?? $this::resolveModel();
|
||||
}
|
||||
|
||||
public function __call($name, $arguments)
|
||||
public function filterBuilder($params): void
|
||||
{
|
||||
$result = $this->forwardCallTo($this->model, $name, $arguments);
|
||||
|
||||
if ($result === $this->model) {
|
||||
return $this;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function __get($name)
|
||||
{
|
||||
return $this->model->{$name};
|
||||
$this->item = static::getFilterBuilder($params);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -56,4 +47,21 @@ abstract class AbstractRepository
|
||||
|
||||
return (new static)->$model;
|
||||
}
|
||||
|
||||
public function __call($name, $arguments)
|
||||
{
|
||||
$result = $this->forwardCallTo($this->model, $name, $arguments);
|
||||
|
||||
if ($result === $this->model) {
|
||||
return $this;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
public function __get($name)
|
||||
{
|
||||
return $this->model->{$name};
|
||||
}
|
||||
}
|
||||
|
||||
@ -33,6 +33,7 @@ class EconomyRepository extends AbstractRepository implements EconomyContractInt
|
||||
return $query;
|
||||
}
|
||||
|
||||
/* Economia bruta anual */
|
||||
public function getGrossAnnualEconomy($params): Collection|array
|
||||
{
|
||||
$field = [
|
||||
@ -52,11 +53,12 @@ class EconomyRepository extends AbstractRepository implements EconomyContractInt
|
||||
->get();
|
||||
}
|
||||
|
||||
/* Economia bruta mensal */
|
||||
public function getGrossMonthlyEconomy($params)
|
||||
{
|
||||
$field = [
|
||||
DB::raw("TO_DATE(economia.mes, 'YYMM') as mes"),
|
||||
DB::raw("SUM(economia.economia_acumulada)/1000 as economia_acumulada"),
|
||||
DB::raw("SUM(economia.economia_acumulada) as economia_acumulada"),
|
||||
DB::raw("(SUM(economia.economia_mensal)/SUM(economia.custo_livre)) as econ_percentual"),
|
||||
"economia.dad_estimado"
|
||||
];
|
||||
@ -66,14 +68,14 @@ class EconomyRepository extends AbstractRepository implements EconomyContractInt
|
||||
">=",
|
||||
DB::raw("TO_DATE(TO_CHAR(current_date , 'YYYY-01-01'), 'YYYY-MM-DD') - interval '1' year"))
|
||||
->groupBy(['mes', 'dad_estimado'])
|
||||
->orderBy('mes')
|
||||
->orderBy('dad_estimado')
|
||||
->orderBy(DB::raw("mes, dad_estimado"))
|
||||
->get();
|
||||
|
||||
return collect(static::checkDate($result))->transform(fn($value) => Arr::set($value, 'mes', date_format(date_create($value['mes']), "M/Y")))->all();
|
||||
|
||||
}
|
||||
|
||||
/* cativo x livre mensal*/
|
||||
public function getCaptiveMonthlyEconomy($params)
|
||||
{
|
||||
$field = [
|
||||
@ -93,11 +95,11 @@ class EconomyRepository extends AbstractRepository implements EconomyContractInt
|
||||
DB::raw("TO_DATE(TO_CHAR(current_date, 'YYYY-12-31'), 'YYYY-MM-DD') ")
|
||||
])
|
||||
->groupBy(['mes', 'dad_estimado'])
|
||||
->orderBy('mes')
|
||||
->orderBy('dad_estimado')
|
||||
->orderBy(DB::raw("mes, dad_estimado"))
|
||||
->get();
|
||||
}
|
||||
|
||||
/* Indicador de custo R$/MWh */
|
||||
public function getCostMWhEconomy($params)
|
||||
{
|
||||
$field = [
|
||||
@ -114,8 +116,7 @@ class EconomyRepository extends AbstractRepository implements EconomyContractInt
|
||||
DB::raw("TO_DATE(TO_CHAR(current_date, 'YYYY-12-31'), 'YYYY-MM-DD') ")
|
||||
])
|
||||
->groupBy(['mes', 'dad_estimado'])
|
||||
->orderBy('mes')
|
||||
->orderBy('dad_estimado')
|
||||
->orderBy(DB::raw("mes, dad_estimado"))
|
||||
->get();
|
||||
|
||||
return collect(static::checkDate($result))->transform(fn($value) => Arr::set($value, 'mes', date_format(date_create($value['mes']), "M/Y")))->all();
|
||||
|
||||
@ -4,7 +4,10 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Repositories;
|
||||
|
||||
use Illuminate\Contracts\Container\BindingResolutionException;
|
||||
use Illuminate\Database\Eloquent\Collection;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
trait MethodsTrait
|
||||
{
|
||||
@ -40,20 +43,23 @@ trait MethodsTrait
|
||||
}
|
||||
|
||||
|
||||
public function search($params)
|
||||
/**
|
||||
* @throws BindingResolutionException
|
||||
*/
|
||||
public function search($params, $rowField = false)
|
||||
{
|
||||
$filter = static::getFilterBuilder($params);
|
||||
$this->filterBuilder($params);
|
||||
|
||||
$filter->setFields(collect($filter->getFields())->transform(fn($value) => $this->model->qualifyColumn($value))->all());
|
||||
$fields = $this->item->applyField();
|
||||
|
||||
$query = $this->model->select($filter->getFields());
|
||||
$query = $this->model->select($fields);
|
||||
|
||||
$response = $filter->applyFilter($query);
|
||||
$response = $this->item->applyFilter($query);
|
||||
|
||||
if ($filter->isDistinct()){
|
||||
if ($this->item->isDistinct()){
|
||||
$response = $response->distinct();
|
||||
}
|
||||
|
||||
return $response->get();
|
||||
return $response->get();
|
||||
}
|
||||
}
|
||||
@ -34,7 +34,7 @@ class PldRepository extends AbstractRepository implements PldContractInterface
|
||||
|
||||
|
||||
/**
|
||||
* @throws BindingResolutionException
|
||||
* Geral por Região
|
||||
*/
|
||||
public function getOverviewByRegion(): array|Collection
|
||||
{
|
||||
@ -42,7 +42,7 @@ class PldRepository extends AbstractRepository implements PldContractInterface
|
||||
'pld.submercado as submarket',
|
||||
'pld.mes_ref as year_month',
|
||||
DB::raw("TO_CHAR(TO_DATE(pld.mes_ref, 'YYMM'), 'MM/YYYY') as year_month_formatted"),
|
||||
DB::raw("SUM(pld.valor) as value")
|
||||
DB::raw("AVG(pld.valor) as value")
|
||||
];
|
||||
|
||||
|
||||
@ -52,6 +52,7 @@ class PldRepository extends AbstractRepository implements PldContractInterface
|
||||
->get();
|
||||
}
|
||||
|
||||
/** Tabela de Consumo */
|
||||
public function getListConsumption($params): Collection|array
|
||||
{
|
||||
$fields = [
|
||||
@ -144,6 +145,7 @@ class PldRepository extends AbstractRepository implements PldContractInterface
|
||||
|
||||
/**
|
||||
* @throws BindingResolutionException
|
||||
* PLD, Valores Diários
|
||||
*/
|
||||
public function getConsumptionByDaily($params, $field = "mes_ref"): Collection|array
|
||||
{
|
||||
@ -151,7 +153,7 @@ class PldRepository extends AbstractRepository implements PldContractInterface
|
||||
DB::raw("TO_CHAR((date('1899-12-31') + interval '1' day * pld.dia_num), 'DD') as day_formatted"),
|
||||
DB::raw("(date('1899-12-31') + interval '1' day * pld.dia_num) as day_calc"),
|
||||
'pld.submercado as submarket',
|
||||
DB::raw("SUM(pld.valor) as value"),
|
||||
DB::raw("AVG(pld.valor) as value"),
|
||||
DB::raw("TO_CHAR(TO_DATE(pld.mes_ref, 'YYMM'), 'MM/YYYY') as year_month"),
|
||||
DB::raw("TO_CHAR(TO_DATE(pld.mes_ref, 'YYMM'), 'MM/YYYY') as year_month_formatted"),
|
||||
];
|
||||
@ -177,7 +179,7 @@ class PldRepository extends AbstractRepository implements PldContractInterface
|
||||
'hora as hour',
|
||||
DB::raw("(date('1899-12-31') + interval '1' day * pld.dia_num) as day_calc"),
|
||||
'pld.submercado as submarket',
|
||||
DB::raw("SUM(pld.valor) as value"),
|
||||
'pld.valor as value',
|
||||
DB::raw("TO_CHAR(TO_DATE(pld.mes_ref, 'YYMM'), 'MM/YYYY') as year_month"),
|
||||
DB::raw("TO_CHAR(TO_DATE(pld.mes_ref, 'YYMM'), 'MM/YYYY') as year_month_formatted"),
|
||||
];
|
||||
@ -185,13 +187,13 @@ class PldRepository extends AbstractRepository implements PldContractInterface
|
||||
$i = 0;
|
||||
foreach ($params['filters'] as $param) {
|
||||
if ($param['field'] === $field) {
|
||||
$params['filters'][$i]['field'] = "(date('1899-12-31') + interval '1' day * pld.{$param['field']})";
|
||||
$params['filters'][$i]['field'] = "(date('1899-12-30') + interval '1' day * pld.{$param['field']})";
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
|
||||
return $this->execute($fields, $params)
|
||||
->groupBy('day_formatted', 'hour', 'day_calc', 'submarket', 'year_month', 'year_month_formatted')
|
||||
->orderBy('hour', 'asc')
|
||||
->get();
|
||||
}
|
||||
|
||||
|
||||
77
app/Support/FilterBuilder/Entity/FieldItem.php
Normal file
77
app/Support/FilterBuilder/Entity/FieldItem.php
Normal file
@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Support\FilterBuilder\Entity;
|
||||
|
||||
use App\Support\FilterBuilder\EntityJson;
|
||||
|
||||
class FieldItem extends EntityJson
|
||||
{
|
||||
|
||||
/**
|
||||
* @var string|null
|
||||
*/
|
||||
protected string|null $type = null;
|
||||
|
||||
/**
|
||||
* @var string|null
|
||||
*/
|
||||
protected string|null $format = null;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected string $field;
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getType(): string|null
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
*/
|
||||
public function setType(string $type): void
|
||||
{
|
||||
$this->type = $type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getFormat(): ?string
|
||||
{
|
||||
return $this->format;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|null $format
|
||||
*/
|
||||
public function setFormat(?string $format): void
|
||||
{
|
||||
$this->format = $format;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getField(): string
|
||||
{
|
||||
return $this->field;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $field
|
||||
*/
|
||||
public function setField(string $field): void
|
||||
{
|
||||
$this->field = $field;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
30
app/Support/FilterBuilder/FieldType.php
Normal file
30
app/Support/FilterBuilder/FieldType.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Support\FilterBuilder;
|
||||
|
||||
use App\Support\FilterBuilder\Entity\FieldItem;
|
||||
use Illuminate\Database\Query\Expression;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class FieldType
|
||||
{
|
||||
const FUNCTION_FIELD = [
|
||||
"TO_CHAR"
|
||||
];
|
||||
|
||||
public static function field(FieldItem $field)
|
||||
{
|
||||
if (in_array($field->getType(), self::FUNCTION_FIELD)) {
|
||||
return static::makeFormatFieldDate($field);
|
||||
}
|
||||
|
||||
return $field->getField();
|
||||
}
|
||||
|
||||
public static function makeFormatFieldDate($field): Expression
|
||||
{
|
||||
return DB::raw("TO_CHAR(TO_DATE({$field->field}, 'YYMM'), '{$field->format}') as {$field->field}");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -4,10 +4,13 @@ declare(strict_types=1);
|
||||
|
||||
namespace App\Support\FilterBuilder;
|
||||
|
||||
use App\Support\FilterBuilder\Entity\FieldItem;
|
||||
use App\Support\FilterBuilder\Entity\FilterItem;
|
||||
use App\Support\FilterBuilder\Entity\OrderItem;
|
||||
use App\Support\FilterBuilder\Interfaces\IFilterBuilder;
|
||||
use Illuminate\Contracts\Container\BindingResolutionException;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class FilterQueryBuilder extends EntityJson implements IFilterBuilder
|
||||
{
|
||||
@ -47,6 +50,30 @@ class FilterQueryBuilder extends EntityJson implements IFilterBuilder
|
||||
return $builder;
|
||||
}
|
||||
|
||||
|
||||
public function applyField($fields = [])
|
||||
{
|
||||
if (!empty($this->getFields())) {
|
||||
foreach ($this->getFields() as $field)
|
||||
{
|
||||
$fields[] = FieldType::field($field);
|
||||
}
|
||||
}
|
||||
return $fields;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*/
|
||||
public function format_date_sql(): static
|
||||
{
|
||||
foreach ($this->getFields() as $param) {
|
||||
$this->setFields([DB::raw("TO_CHAR(TO_DATE({$param}, 'YYMM'), 'MM/YYYY') as {$param}")]);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
@ -60,7 +87,7 @@ class FilterQueryBuilder extends EntityJson implements IFilterBuilder
|
||||
*/
|
||||
public function setFields(array $fields): void
|
||||
{
|
||||
$this->fields = $fields;
|
||||
$this->fields = $this->arrayObjectCast($fields, FieldItem::class);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -55,10 +55,11 @@ Route::middleware(['auth:sanctum', 'ability:Admin'])->group(function () {
|
||||
});
|
||||
|
||||
Route::middleware(['auth:sanctum', 'ability:Client'])->group(function () {
|
||||
Route::post('pld/overview', [\App\Http\Controllers\PldController::class, 'overviewByRegion']);
|
||||
Route::post('pld/list', [\App\Http\Controllers\PldController::class, 'listConsumption']);
|
||||
Route::post('pld/daily', [\App\Http\Controllers\PldController::class, 'consumptionByDaily']);
|
||||
Route::post('pld/schedule', [\App\Http\Controllers\PldController::class, 'consumptionBySchedule']);
|
||||
|
||||
Route::post('pld/overview', [\App\Http\Controllers\PldController::class, 'overviewByRegion']); //Visão Geral por Região
|
||||
Route::post('pld/list', [\App\Http\Controllers\PldController::class, 'listConsumption']); // Tabela de Consumo
|
||||
Route::post('pld/daily', [\App\Http\Controllers\PldController::class, 'consumptionByDaily']); // Consumo por Diário
|
||||
Route::post('pld/schedule', [\App\Http\Controllers\PldController::class, 'consumptionBySchedule']); // Consumo por Horários
|
||||
|
||||
Route::post('economy', [\App\Http\Controllers\EconomyController::class, 'index']);
|
||||
Route::post('economy/grossAnnual', [\App\Http\Controllers\EconomyController::class, 'grossAnnualEconomy']);
|
||||
@ -70,7 +71,7 @@ Route::middleware(['auth:sanctum', 'ability:Client'])->group(function () {
|
||||
Route::post('telemetry/demand', [\App\Http\Controllers\TelemetryController::class, 'demand']);
|
||||
Route::post('telemetry/discretization', [\App\Http\Controllers\TelemetryController::class, 'discretization']);
|
||||
|
||||
Route::post('operation/summary', [\App\Http\Controllers\OperationSummaryController::class, 'operationSummary']);
|
||||
Route::post('operation/summary', [\App\Http\Controllers\OperationSummaryController::class, 'operationSummary']); // Resumo Operações
|
||||
Route::post('operation', [\App\Http\Controllers\OperationSummaryController::class, 'index']);
|
||||
|
||||
Route::post('notify', [\App\Http\Controllers\NotificationController::class, 'notify']);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user