面对日益不利的局势,王世充不得不亲自出面,试图与李世民达成和平协议。他们在洛阳城外,隔着洛水进行了谈判,然而这场和谈最终并未能达成一致,双方谈崩。
随后,李世民果断采取了军事行动,他派遣各路将士对王世充的城镇发起了猛烈的攻击,几乎每战必胜。到了九月,王君廓成功地攻克了王世充的頧辕县,并一路向东,攻占了管城后才返回。这一系列的军事胜利,使得河南的各个州县纷纷选择投降,归附了李世民。
面对这样的形势,王世充已经失去了独自对抗唐军的能力。他不得不寻求外部的援助。尽管窦建德与王世充并非真正的盟友,甚至可以说是敌人,但王世充此时已经别无选择,只能向窦建德求援。这对他来说,无疑是一种饮鸩止渴的行为,但在绝望之中,他也只能采取这样的策略。
十一月,窦建德派出了使者,表示愿意与王世充讲和,并愿意提供所需的援助。王世充得知这一消息后,立即派遣了他哥哥的儿子王琬和内史令长孙安世回访,再次请求窦建德出兵援助。然而,这样的外援能否真正扭转局势,还是未知数。
武德四年(621年)二月,窦建德攻下了周桥城,并俘虏了孟海公。他留下部将范愿守卫曹州,并带领孟海公和徐圆朗的军队去援救王世充。窦建德的军队到达滑州时,王世充的官员韩洪开门迎接,于是窦建德一路进逼元州、梁州、管州,并在荥阳集结了军队。三月,秦王李世民到达虎牢,与窦建德的军队交战,杀死了不少敌军并俘虏了他们的将领殷秋、石瓒。
当时,王世充的弟弟王世辨在徐州,他派遣郭士衡带领几千人跟随窦建德,两军合兵共十多万,号称三十万,驻扎在成皋,并在板渚修建营房准备决战。他们还派遣密使与王世充约定里应外合。然而,经过两个月的战斗,他们逼近虎牢却无法继续前进。李世民派遣王君廓带领轻骑兵绕到窦建德的背后,袭击了他的运粮队伍,俘虏了大将张青特和许多士兵。
窦建德多次失利,人心惶惶。他的将领和士兵都想要回洺州。这时,凌敬建议窦建德全军渡过黄河,攻占怀州河阳,并进军上党县,再夺取河东地区,这样可以扩大地盘并解除唐军对王世充的包围。然而,窦建德准备采纳这个建议时,被王世充的使者长孙安世用金银财宝贿赂了他的将领,导致他们反对凌敬的建议。
窦建德的妻子曹氏也劝他采纳凌敬的意见,沿着滏口那条路,趁着唐朝兵力空虚,集中兵力夺取山北的土地,再借助突厥的力量包抄关中,这样唐朝廷就会召回军队保卫自己,从而解除对王世充的包围。但窦建德没有听从她的建议,坚持要全军压向虎牢。唐军则按兵不动,以挫伤窦建德的锐气。
当窦建德把大军都召集到汜水时,秦王李世民派骑兵去挑衅他们。窦建德也不甘示弱,直接出兵反击。秦王派窦抗去迎战,双方打得不可开交。窦建德的军队慢慢开始撤退,秦王就趁机派骑兵冲入敌阵,来来回回打了四五场,最后窦建德的军队大败。窦建德自己也被打伤了,逃到了牛口渚,结果被白士让和杨武威给抓住了。
在那之前,军队里流传着一句童谣:“豆入牛口,势不得久。”窦建德逃到了牛口渚,特别讨厌这个名字,没想到还真就栽在这儿了。
窦建德被抓后,李世民问他:“我攻打王世充,你跑来凑什么热闹?”窦建德回答说:“我今天不来,你迟早也会来打我。”后来,王世充也投降了,裴矩也带着洺州投降了唐朝。
窦建德的军队在战败后全都散了,他的妻子曹氏和左仆射齐善行带着几百人逃回了洺州。窦建德的残余势力想立他的养子为君主,但齐善行觉得这是天意,窦建德那么强大都被抓了,于是建议大家向唐朝投降,别给老百姓带来灾难。他们就把所有的财物都分给了士兵,让他们各自离开。齐善行和窦建德的妻子等人就带着官员投降了唐朝,交出了山东的土地和夏国的印章。
七月,秦王把窦建德带到了长安,然后在市场上杀了他,那年他四十九岁。
窦建德此人出身农家,性格豪爽,能一路走到一方军阀,可知在河北还是很得人心的,于是窦建德的部分旧部就拥立大将刘黑闼起兵反唐。
刘黑闼的军事能力极强,强到打败多名李唐名将,例如李神通、罗艺、李世绩、李元吉等人。
眼看刘黑闼这么给力,窦建德的旧部纷纷前来投靠,甚至部分唐朝官吏也倒投刘黑闼,很快刘黑闼就收复了窦建德的旧地。
李渊对此头也大了,不得已再次派李世民出战。为什么不得已呢?
因为此时李世民与太子李建成的矛盾已经到了水火不容的地步,李渊也不想看到两人搞得剑拔弩张,于是有意雪藏李世民,不想让李世民在出风头。
但在这种大局面下,除了李世民,李渊手下也没有其他大将能够解决这样的麻烦。
于是在正德五年(622年)二月,秦王李世民在卫州对上了刘黑闼,刚开始两人还是打得有来有回、互有胜负。李世民还是使出那招,等着你没粮犯错再一举拿下。
三月,李世民利用洺水的险要地形,布下军阵来压制刘黑闼的军队,同时派遣突袭部队切断他的粮草补给线。刘黑闼多次前来挑战,但李世民坚守阵地,不与他正面交锋,以此消磨刘黑闼军队的锐气。
由于刘黑闼城中的粮食已经耗尽,李世民判断他一定会来决战。于是,李世民预先命令士兵堵住洺水的上游,并对守堤的官员说:“战斗一旦打响,等刘黑闼的军队过河走到河中间时,就立即挖开堤坝。”
果然,刘黑闼率领步兵和骑兵两万人想要渡过洺水布阵,与唐军进行决战。但战斗刚一打响,洺水上游的堤坝就被挖开,河水汹涌而来。刘黑闼的军队在混乱中被冲散,无法渡过洺水,最终一万多人被唐军杀死,几千人溺水身亡。
刘黑闼和范愿等人带着剩下的一千多人逃往突厥。
这场仗还没彻底打完,李渊就把李世民招回去了,认为剩下的事就交给手下去做,风头不要一个人出完。
结果就是刘黑闼又行了,获得了突厥的帮助,三个月后又再起兵侵犯山东,又是几次大胜唐军。
魏征观察到,尽管李建成是嫡长子并且已经被封为太子,但他并没有像秦王李世民那样拥有显著的战功,同时他在仁义方面的名声也没有广泛传播。因此,魏征认为李建成需要一些战绩和声誉来巩固自己的地位。
基于这样的判断,魏征向李建成提出了建议,希望他能够主动请缨去征讨刘黑闼,以此建立战功,并在百姓中传播自己的仁义之名,李建成听取了魏征的建议。
太子李建成督兵进讨刘黑闼,在馆陶大败敌军后,继续追击至毛州,刘黑闼败逃途中被刘弘基追击。追击至饶阳,因诸葛德威的背叛而被捕,最终与弟弟刘十善一同被李建成斩首,山东地区得以平定。
至此,李唐彻底统一了北方和中原。