update: fix coupon & server record rate issue

This commit is contained in:
tokumeikoi 2022-07-17 00:59:35 +08:00
parent 2073727a0a
commit 8702a3489b
8 changed files with 26 additions and 23 deletions

View File

@ -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([

View File

@ -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([

View File

@ -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([

View File

@ -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([

View File

@ -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,

View File

@ -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);

View File

@ -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;
} }

View File

@ -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');