Explorar o código

售前退货单优化

wufeng %!s(int64=2) %!d(string=hai) anos
pai
achega
e90e688f08
Modificáronse 1 ficheiros con 41 adicións e 33 borrados
  1. 41 33
      app/admin/controller/ReorderChild.php

+ 41 - 33
app/admin/controller/ReorderChild.php

@@ -253,7 +253,7 @@ class ReorderChild extends Base
 
         $info = Db::name('sale_return_child')
             ->alias('a')
-            ->field('a.id,a.num,a.status,a.returnCode,a.outChildCode,a.return_num,a.return_wsm_code,a.orderCode,a.outCode,a.saleReturnChildCode,a.apply_id,b.good_code spuCode,c.status order_out_status,b.id saleid,d.num thnum,d.id sr_id,d.apply_id sr_apply_id,b.is_stock,b.order_type')
+            ->field('a.id,a.num,a.status,a.returnCode,a.outChildCode,a.return_num,a.return_wsm_code,a.orderCode,a.outCode,a.saleReturnChildCode,a.apply_id,b.good_code spuCode,c.status order_out_status,b.id saleid,d.num thnum,d.id sr_id,d.apply_id sr_apply_id,b.is_stock,b.order_type,d.is_addr')
             ->leftJoin('sale b', 'b.orderCode=a.orderCode')
             ->leftJoin('order_out_child c', 'c.outChildCode=a.outChildCode AND c.is_del=0')
             ->leftJoin('sale_return d', 'd.returnCode=a.returnCode')
@@ -343,9 +343,7 @@ class ReorderChild extends Base
                 $old_status = $order['status'];
 
                 $thnum = $info['thnum'];//退货总数量
-//                $all_loss_num = Db::name('sale_return_child')
-//                    ->where(['is_del' => 0, 'returnCode' => $info['returnCode']])
-//                    ->sum('loss_num');
+
 //                $thnum = $info['thnum'] - $all_loss_num;//退货总数量-丢失总数量
 //                if ($order['wsend_num'] < $thnum) throw new Exception("销售单未发货数量不足退货");
 
@@ -522,7 +520,12 @@ class ReorderChild extends Base
                         if ($total == 0) break;
                     }
 
-                    if (($info['return_num'] - $info['loss_num']) > 0) {
+                    $all_total = Db::name('sale_return_child')
+                        ->where(['is_del' => 0, 'returnCode' => $info['returnCode']])
+                        ->field('sum(`return_num`) - sum(`loss_num`) total')
+                        ->findOrEmpty();
+
+                    if ($all_total['total'] > 0) {
                         $stockid = Db::name('good_stock')
                             ->insertGetId([
                                 'project_code' => '',
@@ -530,9 +533,9 @@ class ReorderChild extends Base
                                 'wsm_code' => $info['return_wsm_code'],
                                 'wait_in_stock' => 0,
                                 'wait_out_stock' => 0,
-                                'usable_stock' => $info['return_num'] - $info['loss_num'],
+                                'usable_stock' => $all_total['total'],
                                 'intra_stock' => 0,
-                                'total_stock' => $info['return_num'] - $info['loss_num'],
+                                'total_stock' => $all_total['total'],
                                 'status' => 1,
                                 'is_del' => 0,
                                 'warn_stock' => 0,
@@ -544,9 +547,9 @@ class ReorderChild extends Base
                             ->insert([
                                 'stockid' => $stockid,
                                 'bnCode' => substr(makeNo("BN"), 0, -2) . str_pad($j++, 2, '0', STR_PAD_LEFT),
-                                'total_num' => $info['return_num'] - $info['loss_num'],
+                                'total_num' => $all_total['total'],
                                 'used_num' => 0,
-                                'balance_num' => $info['return_num'] - $info['loss_num'],
+                                'balance_num' => $all_total['total'],
                                 'origin_price' => $origin_price,
                                 'addtime' => $date,
                                 'updatetime' => $date,
@@ -569,32 +572,37 @@ class ReorderChild extends Base
                 }
             }
 
-            //发货工单数量减少
-            $tmp = Db::name('order_out_child')
-                ->where(['is_del' => 0, 'outChildCode' => $info['outChildCode']])
-                ->field('id,num')
-                ->findOrEmpty();
-            $tmp['num'] -= $thnum;
-            $tmp['updatetime'] = $date;
-            if ($tmp['num'] <= 0) $tmp['is_del'] = 1;
-
-            Db::name('order_out_child')
-                ->where(['is_del' => 0, 'id' => $tmp['id']])
-                ->update($tmp);
-
-            //维护发货单
-            $temp = Db::name('order_out')
-                ->field('id,send_num')
-                ->where(['is_del' => 0, 'outCode' => $info['outCode']])
-                ->findOrEmpty();
+            //有地址就会有发货单,继而有发货工单
+            if ($info['is_addr'] == 1) {
+                //发货工单数量减少
+                $tmp = Db::name('order_out_child')
+                    ->where(['is_del' => 0, 'outChildCode' => $info['outChildCode']])
+                    ->field('id,num')
+                    ->findOrEmpty();
+                halt($info['outChildCode']);
+                $tmp['num'] -= $info['return_num'];
+                $tmp['updatetime'] = $date;
+                if ($tmp['num'] <= 0) $tmp['is_del'] = 1;
+
+                Db::name('order_out_child')
+                    ->where(['is_del' => 0, 'id' => $tmp['id']])
+                    ->update($tmp);
+
+                //维护发货单
+                $temp = Db::name('order_out')
+                    ->field('id,send_num')
+                    ->where(['is_del' => 0, 'outCode' => $info['outCode']])
+                    ->findOrEmpty();
 
-            $temp['send_num'] -= $thnum;
-            $temp['updatetime'] = $date;
-            if ($temp['send_num'] <= 0) $temp['is_del'] = 1;
+                $temp['send_num'] -= $info['return_num'];
+                $temp['updatetime'] = $date;
+                if ($temp['send_num'] <= 0) $temp['is_del'] = 1;
+
+                Db::name('order_out')
+                    ->where('id', $temp['id'])
+                    ->update($temp);
+            }
 
-            Db::name('order_out')
-                ->where('id', $temp['id'])
-                ->update($temp);
 
             //维护bn
             if ($info['order_out_status'] == 1) {