xieruidong 2 years ago
parent
commit
cf5d387788

+ 3 - 2
application/api/controller/mall/Orders.php

@@ -17,6 +17,7 @@ class Orders extends Api
     /**
      * 预下单
      * @ApiMethod (POST)
+     * @ApiParams (name=frm,description="来源1直接下单2购物车")
      * @ApiParams (name=form,description="key为规格id,对象:num购买数量,num_install安装数量")
      * @ApiParams (name=coupon_use,description=是否使用优惠券)
      * @ApiParams (name=coupon_id,description=优惠券id)
@@ -32,7 +33,7 @@ class Orders extends Api
         $service=new OrderService();
         $service->setUser($user);
         $service->setGoods($goods);
-        $service->setFrm(1);
+        $service->setFrm($data['frm']);
         $service->setCouponUse($data['coupon_use']??false);
         $service->setCouponId($data['coupon_id']??0);
         $info=$service->calculate();
@@ -82,7 +83,7 @@ class Orders extends Api
         $service->setCouponId($data['coupon_id']??0);
         Db::startTrans();
         $info=$service->calculate();
-        Db::commit();
+        //Db::commit();
         $this->success();
     }
 

+ 1 - 1
application/common/model/Goods.php

@@ -59,7 +59,7 @@ class Goods Extends Model
     }
     public function setAmount(){
         $sku=$this->sku()->find();
-        $this->update([
+        $this->where('id',$this['id'])->update([
             'amount'=>$sku['amount'],
             'amount_kill'=>$sku['amount_kill'],
         ]);

+ 19 - 13
application/common/service/OrderService.php

@@ -112,16 +112,22 @@ class OrderService extends BaseService {
     {
         if($this->frm==1) {
             $goods=$this->goods;
-            foreach ($goods as $sku_id=>&$info){
-                $sku=GoodsSku::find($sku_id);
+            $newGoods=[];
+            foreach ($goods as $sku_id=>$info){
+                $sku=GoodsSku::with(['goods'])->find($sku_id);
                 if(!$sku){
                     $this->error('规格不存在');
                 }
-                $info['sku']=$sku;
-                $info['goods']=$sku->goods;
-                $info['goods_id']=$sku['goods_id'];
+                $temp=[];
+                $temp['num']=$info['num'];
+                $temp['num_install']=$info['num_install'];
+                $temp['sku']=$sku;
+                $temp['goods']=$sku->goods;
+                $temp['goods_id']=$sku['goods_id'];
+                $temp['goods_sku_id']=$sku['id'];
+                $newGoods[]=$temp;
             }
-            return $goods;
+            return $newGoods;
         }else{
             $map=[];
             if(!is_null($this->cartSkuIds)){
@@ -134,7 +140,7 @@ class OrderService extends BaseService {
             return $this->getUser()->cart()
                 ->where($map)
                 ->with(['goods','sku'])
-                ->select();
+                ->select()->toArray();
         }
     }
 
@@ -163,17 +169,17 @@ class OrderService extends BaseService {
                 $skuIds[]=$goods['sku']['id'];
             }
         }
-        $info['num']=array_sum(array_column($info['goods']->toArray(),'num'));
-        $info['num_install']=array_sum(array_column($info['goods']->toArray(),'num_install'));
+        $info['num']=array_sum(array_column($info['goods'],'num'));
+        $info['num_install']=array_sum(array_column($info['goods'],'num_install'));
 
         foreach ($info['goods'] as $goods){
-            $amount=bcmul($this->getAmount($goods['sku']),$goods['num']);
+            $amount=bcmul($this->getAmount($goods['sku'],$goods['goods']),$goods['num']);
             $goods['this_amount']=$amount;
             $info['amount_total']=bcadd($info['amount_total'],$amount);
         }
 
         #安装费
-        $info['amount_install']=InstallService::getFee(array_column($info['goods']->toArray(),null,'goods_sku_id'),'num_install');
+        $info['amount_install']=InstallService::getFee(array_column($info['goods'],null,'goods_sku_id'),'num_install');
         $info['amount_total']=bcadd($info['amount_total'],$info['amount_install']);
 
         #优惠券
@@ -211,8 +217,8 @@ class OrderService extends BaseService {
         return $info;
     }
 
-    protected function getAmount(GoodsSku $sku){
-        if(KillService::open() && $sku['goods']['is_kill']){
+    protected function getAmount($sku,$goods){
+        if(KillService::open() && $goods['is_kill']){
             $amount=$sku['amount_kill'];
         }else{
             $amount=$sku['amount'];