Implement Power Factor, Demand and Telemetry endpoints.
This commit is contained in:
parent
ed8d95a942
commit
6e58cf08fe
67
app/Http/Controllers/TelemetryController.php
Normal file
67
app/Http/Controllers/TelemetryController.php
Normal file
@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Resources\TelemetryResource;
|
||||
use App\Repositories\Med5min\Med5minContractInterface;
|
||||
use App\Traits\ApiResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
|
||||
class TelemetryController extends Controller
|
||||
{
|
||||
|
||||
use ApiResponse;
|
||||
|
||||
public function __construct(
|
||||
protected Med5minContractInterface $med5minContract
|
||||
){}
|
||||
|
||||
public function index()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function powerFactor(Request $request)
|
||||
{
|
||||
try {
|
||||
$response = $this->med5minContract->getPowerFactor($request->all());
|
||||
return (new TelemetryResource($response))
|
||||
->response()
|
||||
->setStatusCode(Response::HTTP_OK);
|
||||
} catch (\Exception $ex) {
|
||||
return $this->errorResponse(false, $ex->getMessage(), Response::HTTP_INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function demand(Request $request)
|
||||
{
|
||||
try {
|
||||
$response = $this->med5minContract->getDemand($request->all());
|
||||
return (new TelemetryResource($response))
|
||||
->response()
|
||||
->setStatusCode(Response::HTTP_OK);
|
||||
} catch (\Exception $ex) {
|
||||
return $this->errorResponse(false, $ex->getMessage(), Response::HTTP_INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
public function discretized15min($params)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public function discretizedOneHour($params)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public function discretizedOneDay($params)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
19
app/Http/Resources/TelemetryResource.php
Normal file
19
app/Http/Resources/TelemetryResource.php
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class TelemetryResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return parent::toArray($request);
|
||||
}
|
||||
}
|
||||
@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use DateTimeInterface;
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
@ -12,4 +13,32 @@ use OwenIt\Auditing\Auditable;
|
||||
class Med5min extends Model implements Auditing
|
||||
{
|
||||
use HasFactory, SoftDeletes, Auditable;
|
||||
|
||||
protected $table = "med_5min";
|
||||
|
||||
protected $guarded = ['id'];
|
||||
|
||||
protected $fillable = [
|
||||
'origem',
|
||||
'dia_num',
|
||||
'minuto',
|
||||
'ativa_consumo',
|
||||
'ativa_geracao',
|
||||
'reativa_consumo',
|
||||
'reativa_geracao',
|
||||
'ponto',
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'deleted_at',
|
||||
];
|
||||
|
||||
protected $hidden = [
|
||||
'updated_at',
|
||||
'deleted_at',
|
||||
];
|
||||
|
||||
protected function serializeDate(DateTimeInterface $date): string
|
||||
{
|
||||
return $date->format('d/m/Y H:i:s');
|
||||
}
|
||||
}
|
||||
|
||||
@ -28,15 +28,6 @@ class UserScope implements Scope
|
||||
"=",
|
||||
$model->qualifyColumn("cod_smart_unidade"),
|
||||
)->where('dados_cadastrais.cod_smart_cliente', '=', $user->client_id);
|
||||
|
||||
|
||||
// $sql = DB::table('dados_cadastrais')
|
||||
// ->select([
|
||||
// $model->qualifyColumn("cod_smart_unidade")
|
||||
// ])
|
||||
// ->where($model->qualifyColumn("cod_smart_unidade"), '=', $user->client_id);
|
||||
//
|
||||
// $builder->whereRaw($sql, 'in', $user->client_id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -6,9 +6,10 @@ use App\Repositories\ContractInterface;
|
||||
|
||||
interface Med5minContractInterface extends ContractInterface
|
||||
{
|
||||
public function discretized5min($params);
|
||||
public function discretized15min($params);
|
||||
public function discretizedOneHour($params);
|
||||
public function discretizedOneDay($params);
|
||||
public function getDiscretized15min($params);
|
||||
public function getDiscretizedOneHour($params);
|
||||
public function getDiscretizedOneDay($params);
|
||||
public function getPowerFactor($params);
|
||||
public function getDemand($params);
|
||||
|
||||
}
|
||||
@ -7,6 +7,8 @@ namespace App\Repositories\Med5min;
|
||||
use App\Models\Med5min;
|
||||
use App\Repositories\AbstractRepository;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Collection;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
|
||||
@ -29,31 +31,77 @@ class Med5minRepository extends AbstractRepository implements Med5minContractInt
|
||||
return $query;
|
||||
}
|
||||
|
||||
public function discretized5min($params)
|
||||
public function getPowerFactor($params): Collection|array
|
||||
{
|
||||
$fields =
|
||||
[
|
||||
'med_5min.ponto',
|
||||
'med_5min.dia_num',
|
||||
"med_5min.ponto",
|
||||
"med_5min.dia_num",
|
||||
DB::raw("TO_CHAR((date('1899-12-30') + interval '1' day * med_5min.dia_num), 'DD/MM/YYYY') as day_formatted"),
|
||||
DB::raw("(med_5min.minuto/60) AS hora"),
|
||||
DB::raw("MOD(med_5min.minuto,60) AS minut"),
|
||||
DB::raw("SUM(med_5min.ativa_consumo) AS consumo"),
|
||||
DB::raw("UM(med_5min.reativa_consumo+med_5min.reativa_geracao) AS reativa")
|
||||
DB::raw("SUM(med_5min.reativa_consumo+med_5min.reativa_geracao) AS reativa"),
|
||||
DB::raw("(SUM(med_5min.ativa_consumo)/( (SUM(med_5min.ativa_consumo)^2) + (SUM(med_5min.reativa_consumo+med_5min.reativa_geracao)^2) ))*100 as FP"),
|
||||
DB::raw("0.92 as F_ref")
|
||||
];
|
||||
|
||||
$params = static::filterRow($params);
|
||||
|
||||
return $this->execute($fields, $params)
|
||||
->groupBy(["med_5min.minuto", "med_5min.ponto", "med_5min.dia_num"])
|
||||
->distinct()
|
||||
->get();
|
||||
|
||||
return $this->execute($fields, $params);
|
||||
|
||||
}
|
||||
|
||||
public function discretized15min($params)
|
||||
public function getDemand($params): Collection|array
|
||||
{
|
||||
$fields =
|
||||
[
|
||||
"med_5min.ponto",
|
||||
"med_5min.dia_num",
|
||||
DB::raw("TO_CHAR((date('1899-12-30') + interval '1' day * med_5min.dia_num), 'DD/MM/YYYY') as day_formatted"),
|
||||
DB::raw("(med_5min.minuto/60) AS hora"),
|
||||
DB::raw("SUM(med_5min.ativa_consumo) AS dem_reg"),
|
||||
DB::raw("(CASE WHEN ((med_5min.minuto/60) >= 18 AND (med_5min.minuto/60) <= 21) THEN dados_cadastrais.demanda_p ELSE dados_cadastrais.demanda_fp END) as dem_cont")
|
||||
];
|
||||
|
||||
$params = static::filterRow($params);
|
||||
|
||||
return $this->execute($fields, $params)
|
||||
->join(
|
||||
"dados_cadastrais",
|
||||
"dados_cadastrais.codigo_scde",
|
||||
"=",
|
||||
"med_5min.ponto"
|
||||
)
|
||||
->groupBy(["med_5min.ponto", "med_5min.dia_num", "day_formatted", 'hora', 'dem_cont'])
|
||||
->distinct()
|
||||
->get();
|
||||
}
|
||||
|
||||
public static function filterRow($params, $field = 'dia_num'): array
|
||||
{
|
||||
$arr['filters'] = collect($params['filters'])
|
||||
->map(function ($value) use ($field) {
|
||||
if ($value['field'] === $field) {
|
||||
Arr::set($value, "field", "(date('1899-12-30') + interval '1' DAY * med_5min.{$value['field']})");
|
||||
$value['row'] = true;
|
||||
}
|
||||
return $value;
|
||||
})->all();
|
||||
return $arr;
|
||||
}
|
||||
|
||||
public function getDiscretized15min($params)
|
||||
{
|
||||
$fields =
|
||||
[
|
||||
'med_5min.ponto',
|
||||
'med_5min.dia_num',
|
||||
DB::raw("(med_5min.minuto/60) AS hora"),
|
||||
DB::raw("MOD(med_5min.minuto,60) AS minut"),
|
||||
DB::raw("((MOD(med_5min.minuto,60)/15)+1)*15 AS minut"),
|
||||
DB::raw("SUM(med_5min.ativa_consumo) AS consumo"),
|
||||
DB::raw("UM(med_5min.reativa_consumo+med_5min.reativa_geracao) AS reativa")
|
||||
];
|
||||
@ -61,14 +109,13 @@ class Med5minRepository extends AbstractRepository implements Med5minContractInt
|
||||
return $this->execute($fields, $params);
|
||||
}
|
||||
|
||||
public function discretizedOneHour($params)
|
||||
public function getDiscretizedOneHour($params)
|
||||
{
|
||||
$fields =
|
||||
[
|
||||
'med_5min.ponto',
|
||||
'med_5min.dia_num',
|
||||
DB::raw("(med_5min.minuto/60) AS hora"),
|
||||
DB::raw("MOD(med_5min.minuto,60) AS minut"),
|
||||
DB::raw("SUM(med_5min.ativa_consumo) AS consumo"),
|
||||
DB::raw("UM(med_5min.reativa_consumo+med_5min.reativa_geracao) AS reativa")
|
||||
];;
|
||||
@ -76,14 +123,13 @@ class Med5minRepository extends AbstractRepository implements Med5minContractInt
|
||||
return $this->execute($fields, $params);
|
||||
}
|
||||
|
||||
public function discretizedOneDay($params)
|
||||
public function getDiscretizedOneDay($params)
|
||||
{
|
||||
$fields =
|
||||
[
|
||||
'med_5min.ponto',
|
||||
'med_5min.dia_num',
|
||||
DB::raw("(med_5min.minuto/60) AS hora"),
|
||||
DB::raw("MOD(med_5min.minuto,60) AS minut"),
|
||||
DB::raw("SUM(med_5min.ativa_consumo) AS consumo"),
|
||||
DB::raw("UM(med_5min.reativa_consumo+med_5min.reativa_geracao) AS reativa")
|
||||
];
|
||||
|
||||
@ -77,10 +77,11 @@ class FilterType
|
||||
|
||||
private static function makeBetweenFilter(Builder $builder, FilterItem $filter): Builder
|
||||
{
|
||||
$field = ($filter->getRow()) ? DB::raw($filter->getField()) : $filter->getField();
|
||||
if ($filter->getType() === "between") {
|
||||
return $builder->whereBetween($filter->getField(), $filter->getValue());
|
||||
return $builder->whereBetween($field, $filter->getValue());
|
||||
} elseif ($filter->getType() === "not_between") {
|
||||
return $builder->whereNotBetween($filter->getField(), $filter->getValue());
|
||||
return $builder->whereNotBetween($field, $filter->getValue());
|
||||
}
|
||||
|
||||
return $builder;
|
||||
|
||||
@ -58,6 +58,13 @@ Route::middleware(['auth:sanctum', 'ability:Client'])->group(function () {
|
||||
Route::post('economy/estimates', [\App\Http\Controllers\EconomyController::class, 'captiveMonthlyEconomy']);
|
||||
Route::post('economy/MWh', [\App\Http\Controllers\EconomyController::class, 'costMWhEconomy']);
|
||||
|
||||
// Route::post('telemetry', [\App\Http\Controllers\TelemetryController::class, 'index']);
|
||||
Route::post('telemetry/powerFactor', [\App\Http\Controllers\TelemetryController::class, 'powerFactor']);
|
||||
Route::post('telemetry/demand', [\App\Http\Controllers\TelemetryController::class, 'demand']);
|
||||
// Route::post('telemetry/grossMonthly', [\App\Http\Controllers\TelemetryController::class, 'grossMonthlyEconomy']);
|
||||
// Route::post('telemetry/estimates', [\App\Http\Controllers\TelemetryController::class, 'captiveMonthlyEconomy']);
|
||||
// Route::post('telemetry/MWh', [\App\Http\Controllers\TelemetryController::class, 'costMWhEconomy']);
|
||||
|
||||
Route::post('operation/summary', [\App\Http\Controllers\OperationSummaryController::class, 'operationSummary']);
|
||||
Route::post('operation', [\App\Http\Controllers\OperationSummaryController::class, 'index']);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user