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; } }