make(UserBillServices::class); while (true) { $users = Db::name('user') ->where('frozen_points', '>', 0) ->field('uid, frozen_points, available_points') ->limit($limit) ->page($page) ->select() ->toArray(); if (empty($users)) break; foreach ($users as $user) { try { $releaseAmount = (int)floor($user['frozen_points'] * $releaseRatio); if ($releaseAmount <= 0) continue; Db::name('user')->where('uid', $user['uid'])->update([ 'frozen_points' => max(0, $user['frozen_points'] - $releaseAmount), 'available_points' => $user['available_points'] + $releaseAmount, ]); // 记录积分变动日志 $newBalance = $user['available_points'] + $releaseAmount; $billServices->income('frozen_points_release', $user['uid'], [ 'number' => $releaseAmount, 'mark' => date('Y-m-d') . ' 每日积分释放(待释放积分的0.4‰)', 'balance' => $newBalance, 'type' => 'integral', 'title' => '积分释放', 'pm' => 1, ], $newBalance, 0); } catch (\Throwable $e) { Log::error('fsgx dailyRelease uid=' . $user['uid'] . ' error: ' . $e->getMessage()); } } if (count($users) < $limit) break; $page++; } return true; } }