ServiceController.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Components\Helpers;
  4. use App\Http\Models\Goods;
  5. use App\Http\Models\GoodsLabel;
  6. use App\Http\Models\Order;
  7. use App\Http\Models\User;
  8. use App\Http\Models\UserLabel;
  9. class ServiceController extends Controller {
  10. public function activePrepaidOrder($oid) {
  11. // 取出预支付订单
  12. $prepaidOrder = Order::find($oid);
  13. //去除使用中的套餐和 流量包
  14. Order::query()->whereUserId($prepaidOrder->user_id)->whereStatus(2)->whereIsExpire(0)->update([
  15. 'expire_at' => date('Y-m-d H:i:s'),
  16. 'is_expire' => 1
  17. ]);
  18. //取出对应套餐信息
  19. $prepaidGood = Goods::query()->whereId($prepaidOrder->goods_id)->first();
  20. //激活预支付套餐
  21. Order::query()->whereOid($prepaidOrder->oid)->update([
  22. 'expire_at' => date("Y-m-d H:i:s",
  23. strtotime("+".$prepaidGood->days." days")),
  24. 'status' => 2
  25. ]);
  26. //取出用户信息
  27. $user = User::query()->whereId($prepaidOrder->user_id)->first();
  28. $userTraffic = $prepaidGood->traffic * 1048576;
  29. //拿出可能存在的其余套餐, 推算 最新的到期时间
  30. $expire_time = date('Y-m-d', strtotime("+".$prepaidGood->days." days"));
  31. $prepaidOrders = Order::query()->whereUserId($prepaidOrder->user_id)->whereStatus(3)->get();
  32. foreach($prepaidOrders as $paidOrder){
  33. //取出对应套餐信息
  34. $goods = Goods::query()->whereId($paidOrder->goods_id)->first();
  35. $expire_time = date('Y-m-d', strtotime("+".$goods->days." days", strtotime($expire_time)));
  36. }
  37. //计算账号下一个重置时间
  38. $nextResetTime = date('Y-m-d', strtotime("+".$prepaidGood->period." days"));
  39. if($nextResetTime >= $expire_time){
  40. $nextResetTime = null;
  41. }
  42. // 用户默认标签
  43. $defaultLabels = Helpers::systemConfig()['initial_labels_for_user']? explode(',',
  44. Helpers::systemConfig()['initial_labels_for_user']) : [];
  45. //取出 商品默认标签 & 系统默认标签 去重
  46. $newUserLabels = array_values(array_unique(array_merge(GoodsLabel::query()
  47. ->whereGoodsId($prepaidOrder->goods_id)
  48. ->pluck('label_id')
  49. ->toArray(), $defaultLabels)));
  50. // 生成标签
  51. foreach($newUserLabels as $vo){
  52. $obj = new UserLabel();
  53. $obj->user_id = $prepaidOrder->user_id;
  54. $obj->label_id = $vo;
  55. $obj->save();
  56. }
  57. Helpers::addUserTrafficModifyLog($prepaidOrder->user_id, $prepaidOrder->oid, $user->transfer_enable,
  58. $userTraffic, '[预支付订单激活]加上用户购买的套餐流量');
  59. User::query()->whereId($prepaidOrder->user_id)->increment('invite_num', $prepaidOrder->invite_num?: 0, [
  60. 'u' => 0,
  61. 'd' => 0,
  62. 'transfer_enable' => $userTraffic,
  63. 'expire_time' => $expire_time,
  64. 'reset_time' => $nextResetTime
  65. ]);
  66. }
  67. }