238 lines
8.5 KiB
PHP
238 lines
8.5 KiB
PHP
<?php
|
||
|
||
namespace App\Commands;
|
||
|
||
use App\Component\Models\Base;
|
||
use App\Component\Models\Dishes;
|
||
use App\Component\Models\OrderBot;
|
||
use App\Component\Models\OrderBotStorage;
|
||
use App\Component\Models\OrderItems;
|
||
use App\Component\Models\Orders;
|
||
use App\Component\Models\TerminalUpdate;
|
||
use App\Console\Commands\HRCCommand;
|
||
use App\Console\Commands\HRCCommandInterface;
|
||
use Carbon\Carbon;
|
||
|
||
class POSTOrder extends HRCCommand implements HRCCommandInterface {
|
||
protected $signature = 'postorder';
|
||
|
||
public function command($input, $output = null) {
|
||
|
||
if (isset($input['task'])) {
|
||
if ($input['task'] == 'create') {
|
||
$order = new Orders;
|
||
$order->staff_id = 1;
|
||
$order->is_send = 0;
|
||
$order->save();
|
||
$order = Orders::where('id', '=', $order->id)->first();
|
||
$orderItems = OrderItems::where('order_id', '=', $order->id)->get();
|
||
if (!isset($orderItems)) {
|
||
$orderItems = [];
|
||
}
|
||
return [
|
||
'status' => 'success',
|
||
'order' => $order,
|
||
'orderItems' => $orderItems,
|
||
'message' => 'Заказ создан',
|
||
];
|
||
}
|
||
|
||
if ($input['task'] == 'delete' && isset($input['id'])) {
|
||
$order = Orders::where('id', '=', $input['id'])->first();
|
||
if ($order->total_count > 0) {
|
||
return [
|
||
'status' => 'success',
|
||
'error_message' => 'Разрешено удаление только пустых заказов.',
|
||
];
|
||
} else {
|
||
$order->delete();
|
||
return [
|
||
'status' => 'success',
|
||
'message' => 'Заказ удален',
|
||
];
|
||
}
|
||
|
||
}
|
||
|
||
if ($input['task'] == 'update' && isset($input['order_id'])) {
|
||
$order = Orders::find($input['order_id']);
|
||
if (isset($input['item']) && $input['item'] == 'add') {
|
||
$orderItem = new OrderItems;
|
||
$orderItem->order_id = $input['order_id'];
|
||
$orderItem->item_id = $input['item_id'];
|
||
$orderItem->item_count = $input['item_count'];
|
||
$item_price = Dishes::where('code', '=', $input['item_id'])->first();
|
||
$orderItem->item_price = $item_price->cosht;
|
||
$orderItem->staff_id = 1;
|
||
$orderItem->save();
|
||
}
|
||
if (isset($input['client_id'])) {
|
||
if ($input['client_id'] !== null) {
|
||
$order->client_id = $input['client_id'];
|
||
} else {
|
||
$order->client_id = null;
|
||
}
|
||
|
||
}
|
||
if (isset($input['item_count'])) {
|
||
$order->total_count = $order->total_count + $input['item_count'];
|
||
$order->total_price = $order->total_price + ($item_price->cosht * $input['item_count']);
|
||
}
|
||
|
||
$order->is_send = 0;
|
||
$order->save();
|
||
return [
|
||
'status' => 'success',
|
||
'message' => 'Заказ обновлен',
|
||
];
|
||
}
|
||
|
||
if ($input['task'] == 'complete' && isset($input['id'])) {
|
||
$order = Orders::find($input['id']);
|
||
$order->is_send = 1;
|
||
if (isset($input['client_id'])) {
|
||
$order->client_id = $input['client_id'];
|
||
}
|
||
$order->is_delivery = $input['is_delivery'];
|
||
$order->is_pickup = $input['is_pickup'];
|
||
$order->save();
|
||
return [
|
||
'status' => 'success',
|
||
'message' => 'Заказ отправлен',
|
||
];
|
||
}
|
||
|
||
if ($input['task'] == 'pay' && isset($input['info'])) {
|
||
$test_json = Base::validate_json(urldecode($input['info']));
|
||
if (!$test_json) {
|
||
return [
|
||
'status' => 'fail',
|
||
'message' => 'Ошибка обработки JSON',
|
||
];
|
||
}
|
||
$order_info = json_decode(urldecode($input['info']), true);
|
||
|
||
if (isset($order_info['order_id'])) {
|
||
$order_id = intval($order_info['order_id']);
|
||
$order = OrderBotStorage::where('id', $order_id)->first();
|
||
if (!isset($order)) {
|
||
return [
|
||
'status' => 'fail',
|
||
'message' => 'Заказ с данным ID не найден',
|
||
];
|
||
}
|
||
} else {
|
||
return [
|
||
'status' => 'fail',
|
||
'message' => 'Отсутствует ID заказа',
|
||
];
|
||
}
|
||
|
||
if (isset($order_info['transaction_id'])) {
|
||
$transaction_id = intval($order_info['transaction_id']);
|
||
$order_data = json_decode(base64_decode($order['order']), true);
|
||
if ($transaction_id != $order_data['id']) {
|
||
return [
|
||
'status' => 'fail',
|
||
'message' => 'ID заказа не соответствует ID транзакции',
|
||
];
|
||
}
|
||
} else {
|
||
return [
|
||
'status' => 'fail',
|
||
'message' => 'Отсутствует ID транзакции',
|
||
];
|
||
}
|
||
|
||
if (isset($order_info['time'])) {
|
||
$pay_time = $order_info['time'];
|
||
if ($pay_time < $order['created_at']) {
|
||
return [
|
||
'status' => 'fail',
|
||
'message' => 'Время создания заказа больше чем время оплаты',
|
||
];
|
||
}
|
||
} else {
|
||
return [
|
||
'status' => 'fail',
|
||
'message' => 'Отсутствует время оплаты заказа',
|
||
];
|
||
}
|
||
|
||
if (isset($order_info['amount'])) {
|
||
$amount = floatval($order_info['amount']);
|
||
if ($amount != floatval($order_data['price'])) {
|
||
return [
|
||
'status' => 'fail',
|
||
'message' => 'Сумма оплаты не соответствует сумме заказа',
|
||
];
|
||
}
|
||
} else {
|
||
return [
|
||
'status' => 'fail',
|
||
'message' => 'Отсутствует сумма оплаты',
|
||
];
|
||
}
|
||
|
||
if (isset($order_info['is_print'])) {
|
||
$is_print = $order_info['is_print'];
|
||
} else {
|
||
$is_print = false;
|
||
}
|
||
|
||
if (isset($order_info['is_closed'])) {
|
||
$is_closed = $order_info['is_closed'];
|
||
} else {
|
||
$is_closed = false;
|
||
}
|
||
|
||
if ($order['is_send'] === 0) {
|
||
return [
|
||
'status' => 'fail',
|
||
'message' => 'Заказ ещё не отправлен',
|
||
];
|
||
} else {
|
||
$pay_task = array(
|
||
'order_id' => $order_id,
|
||
'transaction_id' => $transaction_id,
|
||
'time' => $pay_time,
|
||
'amount' => $amount,
|
||
'is_print' => $is_print,
|
||
'is_closed' => $is_closed
|
||
);
|
||
$todayDate = Carbon::now('Europe/Minsk')->format('Y-m-d H:i:m');
|
||
$bot_info = OrderBot::first();
|
||
$terminal_id = $bot_info['terminal_id'];
|
||
$check_order = TerminalUpdate::where('method', 'payorder')
|
||
->where('more', base64_encode(json_encode($pay_task)))
|
||
->count();
|
||
if ($check_order > 0) {
|
||
return [
|
||
'status' => 'fail',
|
||
'message' => 'Задача оплаты в обработке',
|
||
];
|
||
}
|
||
$task = new TerminalUpdate;
|
||
$task->terminal_id = $terminal_id;
|
||
$task->next_at = $todayDate;
|
||
$task->method = 'payorder';
|
||
$task->period = 1;
|
||
$task->is_cycle = 0;
|
||
$task->more = base64_encode(json_encode($pay_task));
|
||
$task->save();
|
||
}
|
||
|
||
return [
|
||
'status' => 'success',
|
||
'message' => 'Информация об оплате отправлена',
|
||
];
|
||
}
|
||
|
||
} else {
|
||
return [
|
||
'status' => 'success',
|
||
'error_message' => 'Проверьте введенные данные',
|
||
];
|
||
}
|
||
}
|
||
} |