wupengfei 3 jaren geleden
bovenliggende
commit
4cc31052ac
2 gewijzigde bestanden met toevoegingen van 12 en 18 verwijderingen
  1. 3 2
      application/api/common.php
  2. 9 16
      application/api/controller/Shoppingcar.php

+ 3 - 2
application/api/common.php

@@ -10,10 +10,11 @@ function update_goods_stock($goods_id,$goods_no,$num){
     $spec = json_decode($goods_info['spec'],true);
     foreach ($spec as $gk=>&$gv) {
         if($gv['goods_no'] == $goods_no) {
-            $spec[$gk]['store_num'] = bcsub($gv['store_num'],$num);
+            $spec[$gk]['store_num'] = bcsub($gv['store_num'],$num) > 0 ? bcsub($gv['store_num'],$num) : 0;
         }
     }
- return   Db::table('store_goods')->where(['id'=>$goods_id])->update(['spec'=>json_encode($spec),'stock'=>$goods_info['stock']-$num]);
+    $stock = $goods_info['stock']-$num >0 ? $goods_info['stock']-$num:0;
+ return   Db::table('store_goods')->where(['id'=>$goods_id])->update(['spec'=>json_encode($spec),'stock'=>$stock]);
 }
 
 

+ 9 - 16
application/api/controller/Shoppingcar.php

@@ -194,12 +194,13 @@ class Shoppingcar extends Base
     function checkGoods($goods_id,$goods_no){
         $ret_data = ['error_code'=>0,'num'=>0,'goods_info'=>[]];
         $goods_info = Db::table('store_goods')
-            ->field('id,spec,stock,is_integral')
-            ->where(['id'=>$goods_id,'status'=>1,'is_deleted'=>0])
+            ->field('id,spec,stock,is_integral,status,is_deleted')
+            ->where(['id'=>$goods_id])
             ->find();
         if(empty($goods_info)){
             $ret_data['error_code'] = 1;
         }else{
+            if($goods_info['status'] == 0 || $goods_info['is_deleted'] == 1 ) $ret_data['error_code'] = 1;
             $key=  array_search($goods_no,array_column(json_decode($goods_info['spec'],true),'goods_no'));
             if($key === false) $ret_data['error_code'] = 2;
             foreach (json_decode($goods_info['spec'],true) as $c){
@@ -219,7 +220,7 @@ class Shoppingcar extends Base
      * @desc  更改购物车商品数量
      * @author qc
      * @url /api/Shoppingcar/changeNum
-     * @method GET
+     * @method POST
      * @header name:Authorization require:1 desc:Token
      * @param  name:id type:int  : default:-- desc:购物车记录id
      * @param  name:num type:int  : default:20 desc:变更数量(减少数量是负数)
@@ -234,12 +235,13 @@ class Shoppingcar extends Base
         if($ck_ret['error_code'] == 2) $this->error('该规格已经下架');
         if( $num > 0 &&  ($ck_ret['num'] < $num || $ck_ret['goods_info']['stock'] < $num ) ) $this->error('库存不足');
         Db::startTrans();
-        if( $num + $car_info['num'] == 0){
+        if( $num + $car_info['num'] <= 0){
+            if($num + $car_info['num'] < 0) $num = $car_info['num'] * -1;
             $up1 = Db::table('shopping_trolley')->where(['id'=>$id])->delete();
         }else{
             $up1 = Db::table('shopping_trolley')->where(['id'=>$id])->update(['num'=>$num + $car_info['num']]);
         }
-        // 商品规格详情
+        // 更新商品库存
         $up2 =  update_goods_stock($car_info['goods_id'],$car_info['goods_no'],$num);
         if(!$up1 || !$up2) {
             Db::rollback();
@@ -268,17 +270,8 @@ class Shoppingcar extends Base
             Db::startTrans();
             $car_info =Db::table('shopping_trolley')->where(['user_id'=>$this->uid,'id'=>$id])->find();
             $ck_ret = $this->checkGoods($car_info['goods_id'],$car_info['goods_no']);
-            if($ck_ret['error_code'] == 0) {
-                // 商品规格详情
-                $spec = json_decode($ck_ret['goods_info']['spec'],true);
-                foreach ($spec as &$pv) {
-                    if($pv['goods_no'] == $car_info['goods_no']) {
-                        $pv['store_num']+=$car_info['num'];// 追加库存
-                    }
-                }
-                // 更新商品库存
-                $up2 = Db::table('store_goods')->where(['id'=>$car_info['goods_id']])
-                    ->update(['stock'=>$ck_ret['goods_info']['stock']+$car_info['num'],'spec'=>json_encode($spec)]);
+            if(!$ck_ret['error_code'] != 2) {
+                $up2 =  update_goods_stock($car_info['goods_id'],$car_info['goods_no'],$car_info['num']*-1);
             }else{
                 $up2 = true;
             }