123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- <?php
- namespace App\Jobs\Orders;
- use App\Consts\SysConsts;
- use App\Modules\Order\Services\OrderService;
- use App\Modules\Trade\Models\Order;
- use App\Modules\User\Models\User;
- use Exception;
- use Illuminate\Bus\Queueable;
- use Illuminate\Queue\SerializesModels;
- use Illuminate\Queue\InteractsWithQueue;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Foundation\Bus\Dispatchable;
- use Illuminate\Support\Facades\DB;
- use Redis;
- /**
- * 增加订单统计金额
- */
- class AddOrderAmount implements ShouldQueue
- {
- use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
- private $key;
- private $date;
- private $order_no;
- private $channel_id;
- private $send_order_id;
- private $uid;
- private $amount;
- private $pay_time;
- /**
- * Create a new job instance.
- * @param string $order_no 订单号
- * @param float $amount 支付金额
- * @param string $paid_time 支付成功事件
- * @return void
- */
- public function __construct(string $order_no)
- {
- $this->order_no = $order_no;
- $order = $this->findOrder($order_no);
- $this->channel_id = $order->distribution_channel_id;
- $this->send_order_id = $order->send_order_id;
- $this->amount = $order->price;
- $this->pay_time = $order->created_at;
- $this->date = date('Y-m-d', strtotime($order->created_at));
- $this->key = 'increase_order_amount:' . $this->date;
- }
- /**
- * Execute the job.
- *
- * @return void
- */
- public function handle()
- {
- $service = new OrderService;
- try {
- if (!Redis::exists($this->key)) {
- Redis::hSet($this->key, $this->order_no, 1);
- Redis::expire($this->key, SysConsts::ONE_DAY_SECONDS * 2);
- } else if (Redis::hExists($this->key, $this->order_no)) {
- return;
- } else {
- Redis::hSet($this->key, $this->order_no, 1);
- }
- DB::beginTransaction();
- $service->increaseChannelAmount($this->date, $this->channel_id, $this->amount);
- $service->increaseSendOrderAmount($this->date, $this->channel_id, $this->send_order_id, $this->amount, $this->pay_time);
- $user = User::where('id', $this->uid)->select('send_order_id')->first();
- if ($user) {
- $user_send_order = $user->send_order_id;
- $service->increaseUserSendOrderAmount($this->date, $this->channel_id, $user_send_order, $this->amount, $this->pay_time);
- }
- DB::commit();
- } catch (Exception $e) {
- DB::rollback();
- Redis::hDel($this->key, $this->order_no);
- myLog('increase_order_amount')->error($this->order_no);
- myLog('increase_order_amount')->error($e->getMessage());
- }
- }
- private function findOrder(string $order_no)
- {
- return Order::where('order_no', $order_no)
- ->select('send_order_id', 'distribution_channel_id', 'pay_end_at', 'uid', 'price')
- ->first();
- }
- }
|