123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- <?php
- declare (strict_types = 1);
- namespace App\Task;
- use App\Model\Ad;
- use App\Model\Order;
- use App\Model\OrderAd;
- use Hyperf\Contract\StdoutLoggerInterface;
- use Hyperf\DbConnection\Db;
- use Hyperf\Di\Annotation\Inject;
- use Psr\Log\LoggerInterface;
- class EndOrderAdminTask
- {
- /**
- * @Inject
- * @var StdoutLoggerInterface
- */
- private $logger;
- public function __construct(LoggerInterface $logger)
- {
- $this->logger = $logger;
- }
- public function __invoke()
- {
- // 获取需要处理的订单ID列表 判断是否能够结束
- $currentTime = date('Y-m-d H:i:s');
- $orderIds = Order::where('status', 1) //已经审核,等待结束
- ->where('edtime', '<=', $currentTime)
- ->pluck('id')
- ->toArray();
- //单个处理
- // foreach ($orderIds as $orderId) {
- // $data = ['id' => $orderId];
- // $this->singleOverOrder($data);
- // }
- // 批量处理结束订单
- if ($orderIds) {
- $this->logger->info('需要处理的订单ID列表:' . implode(', ', $orderIds));
- $this->OverOder($orderIds);
- }
- //过期时间
- //$exploredTime = date('Y-m-d H:i:s', (time() + 60 * 60 * 2));
- // 获取所有状态为6的订单
- $orders = Order::where('status', 6) // 未审核等待过期
- ->get();
- $expiredOrderIds = [];
- foreach ($orders as $order) {
- // 计算 created_at + 2小时
- $exploredTime = date('Y-m-d H:i:s', strtotime($order->created_at . ' +2 hours'));
- $this->logger->info('exploredTime: ' . $exploredTime . ' 当前时间' . $order->created_at);
- // 检查当前时间是否大于 exploredTime
- if (time() > strtotime($exploredTime)) {
- $expiredOrderIds[] = $order->id;
- }
- }
- if ($expiredOrderIds) {
- $this->logger->info('需要处理的订单ID列表:' . implode(', ', $expiredOrderIds));
- //单个处理
- // 获取需要处理的订单ID列表 判断是否能够过期
- $this->ExpiredOrder($expiredOrderIds);
- }
- }
- /**
- * 处理单个订单是否结束
- */
- private function singleOverOrder(array $data)
- {
- $order = Order::where('id', $data['id'])->first();
- if (empty($order)) {
- $this->logger->warning("没有找到订单ID: {$data['id']}");
- return;
- }
- Db::beginTransaction();
- try {
- $order->status = 7;
- $order->ad_status = 7;
- $order->save();
- //获取 order_ad 表中的记录
- $orderAds = OrderAd::where('order_id', $data['id'])->get();
- if ($orderAds->isEmpty()) {
- $this->logger->warning("没有找到订单ID: {$data['id']} 的 order_ad 记录");
- return;
- }
- //获取 order_ad 表中的记录
- OrderAd::where('order_id', $data['id'])
- ->update(['status' => 7]);
- //在ad表中删除的数据
- Ad::where('order_id', $data['id'])->delete();
- Db::commit();
- } catch (\Exception $e) {
- Db::rollBack();
- $this->logger->error("处理订单ID: {$data['id']} 时发生错误: " . $e->getMessage());
- }
- }
- private function OverOder(array $data): void
- {
- Db::beginTransaction();
- try {
- //设置订单状态
- Order::whereIn('id', $data)->update(['status' => 7, 'ad_status' => 7]);
- //设置广告状态
- OrderAd::whereIn('order_id', $data)->update(['status' => 7]);
- //ad 变更状态为已经审核但是不生效,或者删除订单,或者加入别的状态:比如过期
- Ad::whereIn('order_id', $data)->update(['status' => 2]);
- Db::commit();
- } catch (\Exception $e) {
- Db::rollBack();
- $this->logger->error("处理订单ID: {$data['id']} 时发生错误: " . $e->getMessage());
- }
- }
- private function ExpiredOrder(array $data): void
- {
- Db::beginTransaction();
- try {
- //设置订单状态
- Order::whereIn('id', $data)->update(['status' => 5, 'ad_status' => 5]);
- //设置广告状态
- OrderAd::whereIn('order_id', $data)->update(['status' => 5]);
- Db::commit();
- } catch (\Exception $e) {
- Db::rollBack();
- $this->logger->error("处理订单ID: {$data['id']} 时发生错误: " . $e->getMessage());
- }
- }
- }
|