未完成任务数量 查询优化

This commit is contained in:
2025-12-29 22:15:52 +08:00
parent 0b8655e5d2
commit 87290ab4c9
2 changed files with 133 additions and 22 deletions

View File

@@ -886,34 +886,51 @@ class Tasks extends Model
$task_ids = Db::name('vs_tasks')->field('id as task_id,task_type')->where('delete_time',0)->where(['is_active'=>1,'id'=>['<>',1]])->select();
$result = [];
$task_user_count = 0;
foreach($task_ids as $k=>$v){
if($v['task_type']==2){
// 按任务类型分组,减少数据库查询次数
$daily_task_ids = [];
$other_task_ids = [];
foreach($task_ids as $k=>$v) {
if($v['task_type']==2) {
$daily_task_ids[] = $v['task_id'];
} else {
$other_task_ids[] = $v;
}
}
// 一次性查询所有每日任务task_type==2
if (!empty($daily_task_ids)) {
$daily_task_count = Db::name('vs_tasks_user_daily')
->where(['user_id'=>$user_id,'is_claimed'=>0,'is_completed'=>1])
->where('task_id', 'in', $daily_task_ids)
->whereTime('createtime', 'today')
->count();
$task_user_count += $daily_task_count;
}
// 处理其他类型任务
foreach($other_task_ids as $k=>$v) {
if(in_array($v['task_id'],[21,22,23])){
$task_user = db::name('vs_tasks_student')
->where('user_id',$user_id)
->where('task_id',$v['task_id'])
->where('status',1)
->where('delete_time', 0)
->count();
}elseif($v['task_id']==24){
$task_user = Db::name('vs_user_sign_task')->where(['user_id'=>$user_id,'day'=>date('Y-m-d'),'status'=>0])->count();
}elseif(in_array($v['task_id'],[26,27,28,29,30,31,32])){
$task_user = Db::name('vs_user_cp_task')->where(['user_id'=>$user_id,'delete_time'=>0,'day'=>date('Y-m-d'),'status'=>1,'tasks_bag_id'=>$v['task_id']])->count();
}else{
$task_user = Db::name('vs_tasks_user_daily')
->where(['user_id'=>$user_id,'is_claimed'=>0,'is_completed'=>1])
->where('task_id',$v['task_id'])
->whereTime('createtime', 'today')
->count();
}else{
if(in_array($v['task_id'],[21,22,23])){
$task_user = db::name('vs_tasks_student')
->where('user_id',$user_id)
->where('task_id',$v['task_id'])
->where('status',1)
->where('delete_time', 0)
->count();
}elseif($v['task_id']==24){
$task_user = Db::name('vs_user_sign_task')->where(['user_id'=>$user_id,'day'=>date('Y-m-d'),'status'=>0])->count();
}elseif(in_array($v['task_id'],[26,27,28,29,30,31,32])){
$task_user = Db::name('vs_user_cp_task')->where(['user_id'=>$user_id,'delete_time'=>0,'day'=>date('Y-m-d'),'status'=>1,'tasks_bag_id'=>$v['task_id']])->count();
}else{
$task_user = Db::name('vs_tasks_user_daily')
->where(['user_id'=>$user_id,'is_claimed'=>0,'is_completed'=>1])
->where('task_id',$v['task_id'])
->count();
}
}
$task_user_count +=$task_user;
}
$result['num'] = $task_user_count;
return ['code' => 1, 'msg' => '成功','data' => $result];
}