123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- <?php
- namespace App\Handlers;
- use App\Models\Device;
- use App\Models\Order;
- use App\Repositories\Enums\OrderStatusEnum;
- use App\Repositories\Enums\OrderWorkTypeCodeEnum;
- use Carbon\Carbon;
- use Illuminate\Support\Facades\Log;
- trait OrderTrait
- {
- public static function startBoxByOrder($order, $box_no = false)
- {
- if ($box_no === false) $box_no = Device::byIdGetNo($order['device_id']);
- $mode = $aTime = $bTime = 0;
- $data = [];
- $time = $order['work_time'];
- $c = Carbon::parse($order['pay_time'])->diffInMinutes(Carbon::now(), false);
- if ($c >= 3) {
- $time = $time - $c;
- }
- switch ($order['work_type']) {
- case OrderWorkTypeCodeEnum::A:
- $mode = 1;
- $aTime = $time;
- $data['a'] = 1;
- $bOrder = Order::query()->where('device_id', $order['device_id'])->where('work_type', OrderWorkTypeCodeEnum::B)->where('status', OrderStatusEnum::IN_SERVICE)->first();
- if ($bOrder) {
- $b = $bOrder->work_time - Carbon::parse($bOrder['pay_time'])->diffInMinutes(Carbon::now(), false);
- if ($b > 0) {
- $mode = 2;
- $bTime = $b;
- }
- }
- break;
- case OrderWorkTypeCodeEnum::B:
- $mode = 3;
- $bTime = $time;
- $data['b'] = 1;
- $aOrder = Order::query()->where('device_id', $order['device_id'])->where('work_type', OrderWorkTypeCodeEnum::A)->where('status', OrderStatusEnum::IN_SERVICE)->first();
- if ($aOrder) {
- $a = $aOrder->work_time - Carbon::parse($aOrder['pay_time'])->diffInMinutes(Carbon::now(), false);
- if ($a > 0) {
- $mode = 2;
- $aTime = $a;
- }
- }
- break;
- case OrderWorkTypeCodeEnum::AB:
- $mode = 2;
- $bTime = $time;
- $aTime = $time;
- $data['a'] = 1;
- $data['b'] = 1;
- break;
- }
- Device::query()->where('id', $order['device_id'])->update($data);
- return self::startBox($box_no, $mode, $aTime, $bTime);
- }
- public static function closeBoxByOrder($order, $box_no, $a = 0, $b = 0)
- {
- $mode = $aTime = $bTime = 0;
- switch ($order['work_type']) {
- case OrderWorkTypeCodeEnum::A:
- $aTime = 0;
- if ($b) {
- $bTime = self::getOtherTime($order, OrderWorkTypeCodeEnum::B);
- $mode = 3;
- }
- break;
- case OrderWorkTypeCodeEnum::B:
- $mode = 3;
- $bTime = 0;
- if ($a) {
- $aTime = self::getOtherTime($order, OrderWorkTypeCodeEnum::A);
- $mode = 1;
- }
- break;
- case OrderWorkTypeCodeEnum::AB:
- $bTime = 0;
- $aTime = 0;
- break;
- }
- Log::error("*******");
- Log::error($aTime);
- Log::error($bTime);
- Log::error("*******");
- return self::startBox($box_no, $mode, $aTime, $bTime);
- }
- private static function getOtherTime($order, $type)
- {
- $other_order = Order::query()->where('device_id', $order->device_id)->where('work_type', $type)->where('status', OrderStatusEnum::IN_SERVICE)->select(['work_time', 'start_use_time'])->first();
- if (!$other_order) return 0;
- $time = Carbon::now()->diffInMinutes(Carbon::parse($other_order->start_use_time)->addMinutes($other_order->work_time), false);
- if ($time < 0) return 0;
- return $time;
- }
- }
|