Files
sirpremiumv2/app/Console/Commands/validacionCompra.php
T

169 lines
6.5 KiB
PHP

<?php
namespace App\Console\Commands;
use App\Models\Historiale;
use App\Models\Log_general;
use App\Models\User;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\DB;
class validacionCompra extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'tarea:validarCompra';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Validar la compra de los usuarios';
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
$fecha_ahora = Carbon::now()->format('Y-m-d H:i:s'); // Fecha y hora actual
$hora_antes = Carbon::now()->subHours(100)->format('Y-m-d H:i:s'); // 24 horas antes
$resultados = Historiale::select('vendedor_id')
->selectRaw('COUNT(*) as total')
->where('estado', 'activo')
->whereBetween('created_at', [$hora_antes, $fecha_ahora])
->groupBy('vendedor_id')
->havingRaw('COUNT(*) > 1')
->get();
foreach ($resultados as $resultado) {
$registro_vendedores_duplicados = Historiale::where('vendedor_id', $resultado->vendedor_id)
->where('estado', 'activo')
->whereBetween('created_at', [$hora_antes, $fecha_ahora])
->orderBy('created_at', 'asc') // Ordenar por fecha ascendente para comparar correctamente
->get();
foreach ($registro_vendedores_duplicados as $index => $registro) {
if ($index > 0) {
$anterior = $registro_vendedores_duplicados[$index - 1];
$diferencia = Carbon::parse($anterior->created_at)->diffInSeconds(Carbon::parse($registro->created_at));
if ($diferencia < 20) {
//echo "Diferencia: {$diferencia} segundos<br>Vendedor ID: {$anterior->nombre_cliente}- {$anterior->created_at} - {$registro->created_at}<br><br>";
$validar_actual = Log_general::where('historial_id', $registro->id)
->where('tipo', 'compra')
->exists(); // Corregido
$validar_anterior = Log_general::where('historial_id', $anterior->id)
->where('tipo', 'compra')
->exists(); // Corregido
if ($validar_actual && $validar_anterior) {
$vendedor = User::find($resultado->vendedor_id);
$email = $vendedor->email;
$mensaje = "⚠️ Compra Duplicada ⚠️\nUsuario: {$email}\nFechas:\n- Anterior: {$anterior->created_at}\n- Actual: {$registro->created_at}\nDiferencia: {$diferencia} segundos";
$this->enviarTelegram($mensaje);
$corregido = $this->corregir($anterior->id, $registro->id);
if ($corregido === true) { // Aseguramos que la corrección fue exitosa
$mensaje = "📌 Corregido 📌\n" .
"🆔 Historial ID inactivo: " . addslashes($registro->id) . "\n" .
"👤 Usuario: " . addslashes($email) . "\n" .
"📅 Fechas:\n" .
" ➤ Anterior: " . addslashes(Carbon::parse($anterior->created_at)->format('d M Y h:i:s A')) . "\n" .
" ➤ Actual: " . addslashes(Carbon::parse($registro->created_at)->format('d M Y h:i:s A')) . "";
$this->enviarTelegram($mensaje);
/* Log_general::create([
'user_id' => $resultado->vendedor_id,
'historial_id' => $registro->id,
'tipo' => 'corregido',
'detalle' => 'Se ha corregido la compra duplicada, usuario: ' . $email . ' - ' .
Carbon::parse($registro->created_at)->format('d M Y h:i A') . ' - ' .
Carbon::parse($anterior->created_at)->format('d M Y h:i A'),
]); */
}
}
}
}
}
}
}
public function enviarTelegram($mensaje)
{
$token = '8163118229:AAENDu4PQGruSx1EHSfMH6BecunxAGyhixY';
$chat_id = '7583714074';
$mensaje = 'Sirpremium:' . "\n" . $mensaje;
$response = Http::get("https://api.telegram.org/bot{$token}/sendMessage", [
'chat_id' => $chat_id,
'text' => $mensaje,
]);
if ($response->successful()) {
echo "Mensaje enviado correctamente.";
} else {
echo "Error al enviar el mensaje.";
}
}
public function corregir($anterior, $actual)
{
try {
DB::beginTransaction(); // Iniciar una transacción
$historial_anterior = Historiale::find($anterior);
$historial_actual = Historiale::find($actual);
if (!$historial_anterior || !$historial_actual) {
return response()->json(['error' => 'Historial no encontrado'], 404);
}
$usuario_anterior = $historial_anterior->vendedor_id;
$actualizar_saldo = User::find($usuario_anterior);
if (!$actualizar_saldo) {
return response()->json(['error' => 'Usuario no encontrado'], 404);
}
// Devolver saldo
$actualizar_saldo->saldo->valor -= $historial_actual->valor;
$actualizar_saldo->save();
// Cancelar historial actual
//$historial_actual->estado = 'cancelado';
$historial_actual->save();
// Eliminar cuentas asociadas
if ($historial_actual->cuentas) {
foreach ($historial_actual->cuentas as $cuenta) {
//$cuenta->delete();
}
}
DB::commit(); // Confirmar la transacción
return true; //
} catch (\Exception $e) {
DB::rollBack(); // Revertir si hay un error
return response()->json(['error' => 'Error al corregir: ' . $e->getMessage()], 500);
}
}
}