You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel订单与订单商品表按供应商拆分订单实现问题

问题排查与修复方案

原有代码问题梳理

  • 第一个购物车遍历逻辑中写了break,循环仅执行1次就终止,仅会生成1条订单,无法适配多供应商场景
  • 订单总金额$total_ht、$total_ttc为全局累加变量,未按供应商维度单独计算,就算移除break,后续生成的供应商订单金额也会包含前面所有供应商的商品金额,计算错误
  • 订单商品写入逻辑是全局遍历所有购物车商品,全部写入第一次生成的唯一订单中,完全未实现按供应商拆分订单的需求
  • 团购标识$achat_groupe仅取最后一个购物车商品的属性赋值,逻辑错误,应该按商品维度判断

修复后代码

public function validation_commande(Request $request){
    $utilisateur = Utilisateur::where('id','=',session('utilisateur'))->first();
    $paniers = Panier::where('utilisateur_id','=',$utilisateur->id)->get();
    $utilisateur_id = $utilisateur->id;
    $mode_paiement_id = 4;
    $adresse = Adresse::where('utilisateur_id','=',$utilisateur_id)
        ->where('adresse_par_defaut','=',1)
        ->first();
    $nombre_produit_panier = count($paniers);
    if($nombre_produit_panier >= 1)
    {
        // 按供应商ID分组购物车商品
        $paniersParFournisseur = $paniers->groupBy(function ($item) {
            return $item->produit->utilisateur_id;
        });

        foreach ($paniersParFournisseur as $fournisseurId => $produitsGroupe) {
            // 单独计算当前供应商订单的总金额
            $total_ht = 0;
            $total_ttc = 0;
            foreach ($produitsGroupe as $c) {
                $total_ht += $c->produit->prix_total($c->quantite);
                $total_ttc += $c->produit->prix_total_ttc($c->quantite);
            }

            // 生成当前供应商对应的独立订单
            $commande = Commande::create([
                'utilisateur_id'=>$utilisateur_id,
                'fournisseur_id'=>$fournisseurId,
                'boutique_id'=>$produitsGroupe->first()->produit->boutique_id,
                'statut'=>'en_cours_de_traitement',
                'statut_fournisseur'=>'pas_encore_vue_sa_commande',
                'total_ht'=>$total_ht,
                'total_ttc'=>$total_ttc,
                'mode_paiement_id'=>$mode_paiement_id,
                'adresse_id'=>$adresse->id,
                'date_commande'=>now()
            ]);

            // 写入当前供应商对应订单的所有商品
            foreach ($produitsGroupe as $c) {
                $achat_groupe = $c->achat_groupe == 1 ? 1 : 0;
                CommandeProduit::create([
                    'commande_id'=>$commande->id,
                    'produit_id'=>$c->produit->id,
                    'prix_ht'=>$c->produit->prix_sans_taxe($c->quantite),
                    'prix_ttc'=>$c->produit->prix($c->quantite),
                    'quantite'=>$c->quantite,
                    'utilisateur_id'=>$utilisateur->id,
                    'fournisseur_id'=>$fournisseurId,
                    'boutique_id'=>$c->produit->boutique_id,
                    'achat_groupe'=>$achat_groupe,
                    'date_creation'=>now()
                ]);
            }

            // 若需给每个供应商单独发邮件通知,可在此处放开对应注释
            $lien_button = env('APP_URL').'/mes-commandes-b/';
            $data = [
                'subject' => "Nouvelle commande",
                'titre_page' => 'Vous avez reçu une nouvelle commande',
                'message' => 'Vous avez reçu une nouvelle commande sur votre espace Market Makers',
                'lien_button' => $lien_button,
                'message_button' => 'Voir'
            ];
            // Mail::to($produitsGroupe->first()->produit->utilisateur->email)->send(new NotificationMail($data,$produitsGroupe->first()->produit->utilisateur));
        }

        // 全局通知逻辑
        $message_a_envoye = "**** Market Makers **** \n \n";
        $message_a_envoye .= "Une nouvelle commande vient d'arriver";
        $this->telegram_send_2(urlencode($message_a_envoye));

        Session::flash('success','Votre commande a bien été effectué avec succès');
        Panier::where('utilisateur_id', $utilisateur->id)->delete();
        $request->session()->put('venue_du_panier',null);
        return redirect(route('mes-commandes'));
    }
    else
    {
        return redirect(route('mes-commandes'));
    }
}

内容的提问来源于stack exchange,提问作者Dassoah Maixent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:15:06