未完成任务数量 查询优化
This commit is contained in:
@@ -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];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user