feat: 添加手机号在线历史归类功能,新增 UserPhoneDayLog 模型并优化数据处理逻辑

This commit is contained in:
lingling 2025-03-17 19:22:33 +08:00
parent c5b308c1c4
commit fdb351a901
3 changed files with 89 additions and 10 deletions

View File

@ -11,18 +11,21 @@ use App\model\Dictionary;
use App\model\Message;
use App\model\ExchangeRate;
use app\model\User;
use app\model\UserPhoneDayLog;
use app\model\UserPhoneLog;
use app\model\UserReward;
use hg\apidoc\annotation as Apidoc;
use support\Db;
use support\Log;
use Carbon\Carbon;
/**
* @Apidoc\Title("?")
* @Apidoc\Title("自用测试?")
*/
class TextController
{
protected $noNeedLogin = ['get_projectdetailed', 'get_projectdetailed', 'get_mechanism_list'];
protected $noNeedLogin = ['classifyPhoneOnlineHistory', 'get_projectdetailed', 'get_mechanism_list'];
/**
* @Apidoc\Title("1.0 手机号在线历史归类函数")
@ -31,15 +34,40 @@ class TextController
*/
public function classifyPhoneOnlineHistory(Request $request)
{
$result = Db::table('your_table') // 这里的 'your_table' 应该是你存储用户积分的表名
->select('username', Db::raw('SUM(amount) as total_points')) // 计算每个用户名的积分总数
->groupBy('username') // 按用户名分组
$threeDaysAgo = Carbon::now()->subDays(3)->startOfDay(); // 三天前的开始时间
$date = Db::table('user_phone_log')
->selectRaw('DATE(created_at) AS date')
->where('created_at', '<=', $threeDaysAgo)
->groupByRaw('DATE(created_at)')
->orderBy('date')
->get();
foreach ($result as $v) {
$user = User::where('username', $v->username)->first();
$user->money += $v->total_points;
$user->save();
break;
foreach ($date as $v) {
// var_dump($v->date);
$date = $v->date;
// 使用 Carbon 格式化日期为一天的开始和结束
$startOfDay = Carbon::parse($date)->startOfDay();
$endOfDay = Carbon::parse($date)->endOfDay();
// 查询指定日期的记录
$logs = UserPhoneLog::whereBetween('created_at', [$startOfDay, $endOfDay])
->selectRaw('phone, SUM(time) AS total_time') // 按照手机号分组,统计总时长
->groupBy('phone')
->get();
var_dump($date);
// 处理每个手机的在线时长
foreach ($logs as $log) {
// 在这里可以处理每个手机的在线时长,如记录日志、更新数据库等
echo "Phone: {$log->phone}, Total Time: {$log->total_time}" . PHP_EOL;
$UserPhoneDayLog=new UserPhoneDayLog();
$UserPhoneDayLog->phone=$log->phone;
$UserPhoneDayLog->created_at=$startOfDay;
$UserPhoneDayLog->updated_at=$startOfDay;
$UserPhoneDayLog->time=$log->total_time;
$UserPhoneDayLog->save();
}
UserPhoneLog::whereBetween('created_at', [$startOfDay, $endOfDay])->delete();
}
}
}

View File

@ -0,0 +1,40 @@
<?php
namespace app\model;
use support\Model;
/**
* 用户WS信息表模型
*
* @property int $id 用户记录的唯一标识符
* @property string $phone 用户手机号WS手机号
* @property string $created_at 创建时间
* @property string $updated_at 更新时间
* @property string $time 在线时间
*/
class UserPhoneDayLog extends Model
{
/**
* 表名
*
* @var string
*/
protected $table = 'user_phone_day_log';
/**
* 主键
*
* @var string
*/
protected $primaryKey = 'id';
/**
* 是否自动维护时间戳字段
*
* @var bool
*/
public $timestamps = true;
}

11
testall.ps1 Normal file
View File

@ -0,0 +1,11 @@
# 获取所有符合条件的测试文件
$testFiles = Get-ChildItem -Path "./tests" -Filter "Test*.php"
# 遍历每个测试文件并执行 PHPUnit
foreach ($testFile in $testFiles) {
$filePath = $testFile.FullName # 获取文件的完整路径
Write-Host "Running tests on: $filePath"
# 执行 PHPUnit 测试
& ./vendor/bin/phpunit --bootstrap support/bootstrap.php --testdox $filePath
}