mirror of
				https://github.com/v2board/v2board.git
				synced 2025-10-31 09:21:46 +08:00 
			
		
		
		
	update: fix coupon & server record rate issue
This commit is contained in:
		| @@ -82,9 +82,9 @@ class DeepbworkController extends Controller | |||||||
|         Cache::put(CacheKey::get('SERVER_V2RAY_LAST_PUSH_AT', $server->id), time(), 3600); |         Cache::put(CacheKey::get('SERVER_V2RAY_LAST_PUSH_AT', $server->id), time(), 3600); | ||||||
|         $userService = new UserService(); |         $userService = new UserService(); | ||||||
|         foreach ($data as $item) { |         foreach ($data as $item) { | ||||||
|             $u = $item['u'] * $server->rate; |             $u = $item['u']; | ||||||
|             $d = $item['d'] * $server->rate; |             $d = $item['d']; | ||||||
|             $userService->trafficFetch($u, $d, $item['user_id'], $server, 'vmess'); |             $userService->trafficFetch($u, $d, $item['user_id'], $server->toArray(), 'vmess'); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return response([ |         return response([ | ||||||
|   | |||||||
| @@ -74,9 +74,9 @@ class ShadowsocksTidalabController extends Controller | |||||||
|         Cache::put(CacheKey::get('SERVER_SHADOWSOCKS_LAST_PUSH_AT', $server->id), time(), 3600); |         Cache::put(CacheKey::get('SERVER_SHADOWSOCKS_LAST_PUSH_AT', $server->id), time(), 3600); | ||||||
|         $userService = new UserService(); |         $userService = new UserService(); | ||||||
|         foreach ($data as $item) { |         foreach ($data as $item) { | ||||||
|             $u = $item['u'] * $server->rate; |             $u = $item['u']; | ||||||
|             $d = $item['d'] * $server->rate; |             $d = $item['d']; | ||||||
|             $userService->trafficFetch($u, $d, $item['user_id'], $server, 'shadowsocks'); |             $userService->trafficFetch($u, $d, $item['user_id'], $server->toArray(), 'shadowsocks'); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return response([ |         return response([ | ||||||
|   | |||||||
| @@ -79,9 +79,9 @@ class TrojanTidalabController extends Controller | |||||||
|         Cache::put(CacheKey::get('SERVER_TROJAN_LAST_PUSH_AT', $server->id), time(), 3600); |         Cache::put(CacheKey::get('SERVER_TROJAN_LAST_PUSH_AT', $server->id), time(), 3600); | ||||||
|         $userService = new UserService(); |         $userService = new UserService(); | ||||||
|         foreach ($data as $item) { |         foreach ($data as $item) { | ||||||
|             $u = $item['u'] * $server->rate; |             $u = $item['u']; | ||||||
|             $d = $item['d'] * $server->rate; |             $d = $item['d']; | ||||||
|             $userService->trafficFetch($u, $d, $item['user_id'], $server, 'trojan'); |             $userService->trafficFetch($u, $d, $item['user_id'], $server->toArray(), 'trojan'); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return response([ |         return response([ | ||||||
|   | |||||||
| @@ -86,9 +86,9 @@ class VProxyController extends Controller | |||||||
|         Cache::put(CacheKey::get('SERVER_' . strtoupper($this->nodeType) . '_LAST_PUSH_AT', $this->nodeInfo->id), time(), 3600); |         Cache::put(CacheKey::get('SERVER_' . strtoupper($this->nodeType) . '_LAST_PUSH_AT', $this->nodeInfo->id), time(), 3600); | ||||||
|         $userService = new UserService(); |         $userService = new UserService(); | ||||||
|         foreach ($data as $item) { |         foreach ($data as $item) { | ||||||
|             $u = $item['u'] * $this->nodeInfo->rate; |             $u = $item['u']; | ||||||
|             $d = $item['d'] * $this->nodeInfo->rate; |             $d = $item['d']; | ||||||
|             $userService->trafficFetch($u, $d, $item['user_id'], $this->nodeInfo, $this->nodeType); |             $userService->trafficFetch($u, $d, $item['user_id'], $this->nodeInfo->toArray(), $this->nodeType); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         return response([ |         return response([ | ||||||
|   | |||||||
| @@ -28,7 +28,7 @@ class StatUserJob implements ShouldQueue | |||||||
|      * |      * | ||||||
|      * @return void |      * @return void | ||||||
|      */ |      */ | ||||||
|     public function __construct($u, $d, $userId, $server, $protocol, $recordType = 'd') |     public function __construct($u, $d, $userId, array $server, $protocol, $recordType = 'd') | ||||||
|     { |     { | ||||||
|         $this->onQueue('stat'); |         $this->onQueue('stat'); | ||||||
|         $this->u = $u; |         $this->u = $u; | ||||||
| @@ -52,14 +52,14 @@ class StatUserJob implements ShouldQueue | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         $data = StatUser::where('record_at', $recordAt) |         $data = StatUser::where('record_at', $recordAt) | ||||||
|             ->where('server_rate', $this->server->rate) |             ->where('server_rate', $this->server['rate']) | ||||||
|             ->where('user_id', $this->userId) |             ->where('user_id', $this->userId) | ||||||
|             ->first(); |             ->first(); | ||||||
|         if ($data) { |         if ($data) { | ||||||
|             try { |             try { | ||||||
|                 $data->update([ |                 $data->update([ | ||||||
|                     'u' => $data['u'] + $this->u, |                     'u' => $data['u'] + ($this->u * $this->server['rate']), | ||||||
|                     'd' => $data['d'] + $this->d |                     'd' => $data['d'] + ($this->d * $this->server['rate']) | ||||||
|                 ]); |                 ]); | ||||||
|             } catch (\Exception $e) { |             } catch (\Exception $e) { | ||||||
|                 abort(500, '用户统计数据更新失败'); |                 abort(500, '用户统计数据更新失败'); | ||||||
| @@ -67,7 +67,7 @@ class StatUserJob implements ShouldQueue | |||||||
|         } else { |         } else { | ||||||
|             if (!StatUser::create([ |             if (!StatUser::create([ | ||||||
|                 'user_id' => $this->userId, |                 'user_id' => $this->userId, | ||||||
|                 'server_rate' => $this->server->rate, |                 'server_rate' => $this->server['rate'], | ||||||
|                 'u' => $this->u, |                 'u' => $this->u, | ||||||
|                 'd' => $this->d, |                 'd' => $this->d, | ||||||
|                 'record_type' => $this->recordType, |                 'record_type' => $this->recordType, | ||||||
|   | |||||||
| @@ -27,7 +27,7 @@ class TrafficFetchJob implements ShouldQueue | |||||||
|      * |      * | ||||||
|      * @return void |      * @return void | ||||||
|      */ |      */ | ||||||
|     public function __construct($u, $d, $userId, $server, $protocol) |     public function __construct($u, $d, $userId, array $server, $protocol) | ||||||
|     { |     { | ||||||
|         $this->onQueue('traffic_fetch'); |         $this->onQueue('traffic_fetch'); | ||||||
|         $this->u = $u; |         $this->u = $u; | ||||||
| @@ -46,10 +46,10 @@ class TrafficFetchJob implements ShouldQueue | |||||||
|     { |     { | ||||||
|         $user = User::lockForUpdate()->find($this->userId); |         $user = User::lockForUpdate()->find($this->userId); | ||||||
|         if (!$user) return; |         if (!$user) return; | ||||||
|          |  | ||||||
|         $user->t = time(); |         $user->t = time(); | ||||||
|         $user->u = $user->u + $this->u; |         $user->u = $user->u + ($this->u * $this->server['rate']); | ||||||
|         $user->d = $user->d + $this->d; |         $user->d = $user->d + ($this->d * $this->server['rate']); | ||||||
|         if (!$user->save()) throw new \Exception('流量更新失败'); |         if (!$user->save()) throw new \Exception('流量更新失败'); | ||||||
|         $mailService = new MailService(); |         $mailService = new MailService(); | ||||||
|         $mailService->remindTraffic($user); |         $mailService->remindTraffic($user); | ||||||
|   | |||||||
| @@ -15,7 +15,9 @@ class CouponService | |||||||
|  |  | ||||||
|     public function __construct($code) |     public function __construct($code) | ||||||
|     { |     { | ||||||
|         $this->coupon = Coupon::where('code', $code)->first(); |         $this->coupon = Coupon::where('code', $code) | ||||||
|  |             ->lockForUpdate() | ||||||
|  |             ->first(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public function use(Order $order):bool |     public function use(Order $order):bool | ||||||
| @@ -37,6 +39,7 @@ class CouponService | |||||||
|         } |         } | ||||||
|         if ($this->coupon->limit_use !== NULL) { |         if ($this->coupon->limit_use !== NULL) { | ||||||
|             $this->coupon->limit_use = $this->coupon->limit_use - 1; |             $this->coupon->limit_use = $this->coupon->limit_use - 1; | ||||||
|  |             if ($this->coupon->limit_use <= 0) return false; | ||||||
|             if (!$this->coupon->save()) { |             if (!$this->coupon->save()) { | ||||||
|                 return false; |                 return false; | ||||||
|             } |             } | ||||||
|   | |||||||
| @@ -130,7 +130,7 @@ class UserService | |||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public function trafficFetch(int $u, int $d, int $userId, object $server, string $protocol) |     public function trafficFetch(int $u, int $d, int $userId, array $server, string $protocol) | ||||||
|     { |     { | ||||||
|         TrafficFetchJob::dispatch($u, $d, $userId, $server, $protocol); |         TrafficFetchJob::dispatch($u, $d, $userId, $server, $protocol); | ||||||
|         StatServerJob::dispatch($u, $d, $server, $protocol, 'd'); |         StatServerJob::dispatch($u, $d, $server, $protocol, 'd'); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user