ServiceController.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Components\Helpers;
  4. use App\Models\Goods;
  5. use App\Models\Order;
  6. use App\Models\User;
  7. class ServiceController extends Controller {
  8. public function activePrepaidOrder($oid) {
  9. // 取出预支付订单
  10. $prepaidOrder = Order::find($oid);
  11. //去除使用中的套餐和 流量包
  12. Order::query()
  13. ->whereUserId($prepaidOrder->user_id)
  14. ->whereStatus(2)
  15. ->whereIsExpire(0)
  16. ->update(['expire_at' => date('Y-m-d H:i:s'), 'is_expire' => 1]);
  17. //取出对应套餐信息
  18. $prepaidGood = Goods::query()->whereId($prepaidOrder->goods_id)->first();
  19. //激活预支付套餐
  20. Order::query()->whereOid($prepaidOrder->oid)->update([
  21. 'expire_at' => date("Y-m-d H:i:s", strtotime("+".$prepaidGood->days." days")),
  22. 'status' => 2
  23. ]);
  24. //取出用户信息
  25. $user = User::query()->whereId($prepaidOrder->user_id)->first();
  26. $userTraffic = $prepaidGood->traffic * MB;
  27. //拿出可能存在的其余套餐, 推算 最新的到期时间
  28. $expire_time = date('Y-m-d', strtotime("+".$prepaidGood->days." days"));
  29. $prepaidOrders = Order::query()->whereUserId($prepaidOrder->user_id)->whereStatus(3)->get();
  30. foreach($prepaidOrders as $paidOrder){
  31. //取出对应套餐信息
  32. $goods = Goods::query()->whereId($paidOrder->goods_id)->first();
  33. $expire_time = date('Y-m-d', strtotime("+".$goods->days." days", strtotime($expire_time)));
  34. }
  35. //计算账号下一个重置时间
  36. $nextResetTime = date('Y-m-d', strtotime("+".$prepaidGood->period." days"));
  37. if($nextResetTime >= $expire_time){
  38. $nextResetTime = null;
  39. }
  40. //赋予等级
  41. $level = $prepaidOrder->goods->level;
  42. Helpers::addUserTrafficModifyLog($prepaidOrder->user_id, $prepaidOrder->oid, $user->transfer_enable,
  43. $userTraffic, '[预支付订单激活]加上用户购买的套餐流量');
  44. User::query()->whereId($prepaidOrder->user_id)->increment('invite_num', $prepaidOrder->goods->invite_num?: 0, [
  45. 'u' => 0,
  46. 'd' => 0,
  47. 'transfer_enable' => $userTraffic,
  48. 'expire_time' => $expire_time,
  49. 'reset_time' => $nextResetTime,
  50. 'level' => $level
  51. ]);
  52. }
  53. }