chunkById(200,function($rows) use(&$count) { foreach($rows as $m) { $key=Conversations::key($m->supply_demand_id,$m->user_id,$m->to_user_id); $old=Dialogue::find($m->dialogue_id); if($old && $old->conversation_key===$key) continue; $count++; if(!$this->option('apply')) continue; DB::transaction(function() use($m,$key) { $c=Dialogue::firstOrCreate(['conversation_key'=>$key],['user_id'=>$m->user_id,'to_user_id'=>$m->to_user_id,'supply_demand_id'=>$m->supply_demand_id?:null]); $m->dialogue_id=$c->id; $m->save(); if(!$c->last_datetime || (string)$m->created_at >= $c->last_datetime) { $c->last_content=$m->content;$c->last_datetime=$m->created_at->format('Y-m-d H:i:s');$c->save(); } }); } }); $this->info(($this->option('apply')?'已整理':'待整理').'消息 '.$count.' 条。缺失供需ID的历史消息保持普通对话。'); return 0; } }