feat: 增加自定义头像上传、自动压缩与自动清理功能,统一全站头像路径读取逻辑
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
* 本服务负责:原子性更新用户属性、写入流水记录、提供统计与排行数据。
|
||||
*
|
||||
* @author ChatRoom Laravel
|
||||
*
|
||||
* @version 1.0.0
|
||||
*/
|
||||
|
||||
@@ -25,8 +26,8 @@ class UserCurrencyService
|
||||
* 以后新增货币类型,在此加一行即可。
|
||||
*/
|
||||
private const FIELD_MAP = [
|
||||
'exp' => 'exp_num',
|
||||
'gold' => 'jjb',
|
||||
'exp' => 'exp_num',
|
||||
'gold' => 'jjb',
|
||||
'charm' => 'meili',
|
||||
];
|
||||
|
||||
@@ -34,20 +35,20 @@ class UserCurrencyService
|
||||
* 统一变更用户货币属性并写入流水记录。
|
||||
* 使用数据库事务保证原子性:用户属性更新 + 流水写入同时成功或同时回滚。
|
||||
*
|
||||
* @param User $user 目标用户
|
||||
* @param string $currency 货币类型('exp' / 'gold' / 'charm')
|
||||
* @param int $amount 变更量,正数增加,负数扣除
|
||||
* @param CurrencySource $source 来源活动枚举
|
||||
* @param string $remark 备注说明
|
||||
* @param int|null $roomId 所在房间 ID(可选)
|
||||
* @param User $user 目标用户
|
||||
* @param string $currency 货币类型('exp' / 'gold' / 'charm')
|
||||
* @param int $amount 变更量,正数增加,负数扣除
|
||||
* @param CurrencySource $source 来源活动枚举
|
||||
* @param string $remark 备注说明
|
||||
* @param int|null $roomId 所在房间 ID(可选)
|
||||
*/
|
||||
public function change(
|
||||
User $user,
|
||||
string $currency,
|
||||
int $amount,
|
||||
User $user,
|
||||
string $currency,
|
||||
int $amount,
|
||||
CurrencySource $source,
|
||||
string $remark = '',
|
||||
?int $roomId = null,
|
||||
string $remark = '',
|
||||
?int $roomId = null,
|
||||
): void {
|
||||
if ($amount === 0) {
|
||||
return; // 变更量为 0 不写记录
|
||||
@@ -72,14 +73,14 @@ class UserCurrencyService
|
||||
|
||||
// 写入流水记录(快照当前用户名,排行 JOIN 时再取最新名)
|
||||
UserCurrencyLog::create([
|
||||
'user_id' => $user->id,
|
||||
'username' => $user->username,
|
||||
'currency' => $currency,
|
||||
'amount' => $amount,
|
||||
'balance_after'=> $balanceAfter,
|
||||
'source' => $source->value,
|
||||
'remark' => $remark,
|
||||
'room_id' => $roomId,
|
||||
'user_id' => $user->id,
|
||||
'username' => $user->username,
|
||||
'currency' => $currency,
|
||||
'amount' => $amount,
|
||||
'balance_after' => $balanceAfter,
|
||||
'source' => $source->value,
|
||||
'remark' => $remark,
|
||||
'room_id' => $roomId,
|
||||
]);
|
||||
});
|
||||
}
|
||||
@@ -88,14 +89,12 @@ class UserCurrencyService
|
||||
* 批量变更多个用户的货币属性(适用于自动存点:一次操作多人)。
|
||||
* 每位用户仍独立走事务,单人失败不影响其他人。
|
||||
*
|
||||
* @param array $items [['user' => User, 'changes' => ['exp'=>1,'gold'=>2]], ...]
|
||||
* @param CurrencySource $source
|
||||
* @param int|null $roomId
|
||||
* @param array $items [['user' => User, 'changes' => ['exp'=>1,'gold'=>2]], ...]
|
||||
*/
|
||||
public function batchChange(array $items, CurrencySource $source, ?int $roomId = null): void
|
||||
{
|
||||
foreach ($items as $item) {
|
||||
$user = $item['user'];
|
||||
$user = $item['user'];
|
||||
$changes = $item['changes'] ?? [];
|
||||
foreach ($changes as $currency => $amount) {
|
||||
$this->change($user, $currency, (int) $amount, $source, '', $roomId);
|
||||
@@ -127,8 +126,8 @@ class UserCurrencyService
|
||||
* 只统计正向变更(amount > 0),不因消耗而扣分。
|
||||
*
|
||||
* @param string $currency 'exp' | 'gold' | 'charm'
|
||||
* @param int $limit 返回条数
|
||||
* @param string|null $date 日期,默认今日
|
||||
* @param int $limit 返回条数
|
||||
* @param string|null $date 日期,默认今日
|
||||
*/
|
||||
public function todayLeaderboard(string $currency, int $limit = 20, ?string $date = null): Collection
|
||||
{
|
||||
@@ -149,12 +148,12 @@ class UserCurrencyService
|
||||
->find($row->user_id);
|
||||
|
||||
return (object) [
|
||||
'user_id' => $row->user_id,
|
||||
'user_id' => $row->user_id,
|
||||
'username' => $user?->username ?? '未知用户',
|
||||
'level' => $user?->user_level ?? 0,
|
||||
'sex' => $user?->sex ?? 1,
|
||||
'level' => $user?->user_level ?? 0,
|
||||
'sex' => $user?->sex ?? 1,
|
||||
'headface' => $user?->headface ?? '1.gif',
|
||||
'total' => $row->total,
|
||||
'total' => $row->total,
|
||||
];
|
||||
});
|
||||
}
|
||||
@@ -162,9 +161,9 @@ class UserCurrencyService
|
||||
/**
|
||||
* 用户个人流水明细(用户查询自己的日志)。
|
||||
*
|
||||
* @param int $userId 用户 ID
|
||||
* @param int $userId 用户 ID
|
||||
* @param string|null $currency 为 null 时返回所有货币类型
|
||||
* @param int $days 查询最近多少天
|
||||
* @param int $days 查询最近多少天
|
||||
*/
|
||||
public function userLogs(int $userId, ?string $currency = null, int $days = 7): Collection
|
||||
{
|
||||
@@ -183,8 +182,8 @@ class UserCurrencyService
|
||||
public static function currencyLabel(string $currency): string
|
||||
{
|
||||
return match ($currency) {
|
||||
'exp' => '经验',
|
||||
'gold' => '金币',
|
||||
'exp' => '经验',
|
||||
'gold' => '金币',
|
||||
'charm' => '魅力',
|
||||
default => $currency,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user