Browse Source

设置售前退货工单优化

wufeng 2 years ago
parent
commit
a40126fbe3

+ 35 - 0
app/admin/controller/OrderOutChild.php

@@ -630,5 +630,40 @@ class OrderOutChild extends Base
         return json_show(0, '获取列表成功', $data);
     }
 
+    //根据发货单号获取发货工单列表
+    public function getList()
+    {
+        $param = $this->request->only(['outCode'], 'post', 'trim');
+
+        $val = Validate::rule(['outCode'=>'require']);
+
+        if($val->check($param)==false) return json_show(1004,$val->getError());
+
+        $where = ['a.is_del'=>0, 'outCode'=>$param['outCode']];
+
+        $list = Db::name('order_out_child')
+            ->alias('a')
+            ->field('a.*,c.supplierNo wsm_supplierNo,c.supplierName wsm_supplierName,c.name wsm_name,c.contactor_name')
+            ->leftJoin('warehouse_info c', 'c.wsm_code=a.wsm_code AND c.is_del=0')
+            ->order(['a.addtime' => 'desc', 'a.id' => 'desc'])
+            ->where($where)
+            ->select()
+            ->toArray();
+
+//        $all_apply_id = array_column($list, 'apply_id');
+//        $company_name = get_company_name_by_uid($all_apply_id);
+
+//        //校验是否开通了供应商账号
+//        $supp_account = checkHasAccountBySupplierNos(array_unique(array_column($list, 'supplierNo')));
+//
+//        $data = [];
+//        foreach ($list as $value) {
+//            $value['company_name'] = $company_name[$value['apply_id']] ?? '';
+//            $value['has_account'] = (int)isset($supp_account[$value['supplierNo']]);
+//            $data[] = $value;
+//        }
+
+        return json_show(0, '获取成功', $list);
+    }
 
 }

+ 1 - 1
app/admin/controller/Reorder.php

@@ -1878,7 +1878,7 @@ class Reorder extends Base
 
         $list = Db::name('sale_returnaddr')
             ->alias('a')
-            ->field('a.id,a.outCode,a.send_num,a.return_num,b.contactor,b.mobile,b.addr_code,b.addr,"" addr_code_cn')
+            ->field('a.id,a.outCode,a.send_num,a.return_num,a.is_sale_return_child,b.contactor,b.mobile,b.addr_code,b.addr,"" addr_code_cn')
             ->leftJoin('order_addr b', 'b.id=a.addrid and b.is_del=0')
             ->where($where)
             ->order(['a.addtime' => 'desc', 'a.id' => 'desc'])

+ 30 - 9
app/admin/controller/ReorderChild.php

@@ -17,17 +17,18 @@ class ReorderChild extends Base
     public function add()
     {
 
-        $param = $this->request->only(['returnCode', 'list', 'type'], 'post', 'trim');
+        $param = $this->request->only(['returnCode', 'outCode', 'list', 'type'], 'post', 'trim');
 
         $val = Validate::rule([
             'returnCode|退货单编号' => 'require',
+            'outCode|发货单编号' => 'require',
             'list|退货工单集合' => 'require|array|max:100',
             'type|工单退货类型' => 'require|number|in:1,2',
         ]);
         if ($val->check($param) == false) return json_show(1004, $val->getError());
 
         $saleReturn = Db::name('sale_return')
-            ->field('id,orderCode,status,companyNo,companyName,customer_code,customer_name')
+            ->field('id,orderCode,status,companyNo,companyName,customer_code,customer_name,num')
             ->where(['is_del' => 0, 'returnCode' => $param['returnCode']])
             ->findOrEmpty();
         if (empty($saleReturn)) return json_show(1004, '该退货单不存在');
@@ -44,22 +45,38 @@ class ReorderChild extends Base
             $orderOutChild = Db::name('order_out_child')
                 ->where(['is_del' => 0, 'outChildCode' => array_unique(array_column($param['list'], 'outChildCode'))])
                 ->column('outCode,wsm_code,num,status', 'outChildCode');
-        }
 
+            $saleReturnAddr = Db::name('sale_returnaddr')
+                ->field('id,return_num,is_sale_return_child')
+                ->where(['is_del' => 0, 'returnCode' => $param['returnCode'], 'outCode' => $param['outCode']])
+                ->findOrEmpty();
+            if (empty($saleReturnAddr)) return json_show(1004, '该退货地址不存在');
+            if ($saleReturnAddr['is_sale_return_child'] == 1) return json_show(1004, '该退货地址不能重复设置退货工单');
+            if ($saleReturnAddr['return_num'] != array_sum(array_column($param['list'], 'return_num'))) return json_show(1004, '数量错误');
+        }
 
         $val_child = Validate::rule([
             'outChildCode|发货工单号' => 'requireIf:type,2',
             'return_num|退货数量' => 'require|number|gt:0|max:999999999999',
-            'return_wsm_code|退货仓库编码' => 'require',
-
+            'return_wsm_code|退货仓库编码' => 'require'
         ]);
 
+        if ($saleReturn['sale_return'] < array_sum(array_column($param['list'], 'return_num'))) return json_show(1004, '数量错误');
+
         Db::startTrans();
 
         try {
 
             $date = date('Y-m-d H:i:s');
 
+            //维护退货地址
+            if ($param['type'] == 2) {
+                Db::name('sale_returnaddr')
+                    ->where(['id' => $saleReturnAddr['id'], 'is_del' => 0, 'is_sale_return_child' => 0])
+                    ->update(['is_sale_return_child' => 1, 'updatetime' => $date]);
+            }
+
+            //生成售前退货工单
             $insert = [];
             $i = 0;
             foreach ($param['list'] as $value) {
@@ -71,7 +88,7 @@ class ReorderChild extends Base
                 $insert[] = [
                     'orderCode' => $saleReturn['orderCode'],
                     'returnCode' => $param['returnCode'],
-                    'outCode' => $param['type'] == 2 ? $orderOutChild[$value['outChildCode']]['outCode'] : '',
+                    'outCode' => $param['type'] == 2 ? $param['outCode'] : '',
                     'outChildCode' => $value['outChildCode'] ?? '',
                     'order_out_child_status' => $param['type'] == 2 ? $orderOutChild[$value['outChildCode']]['status'] : '',
                     'saleReturnChildCode' => substr(makeNo('KCC'), 0, -2) . str_pad($i++, 2, '0', STR_PAD_LEFT),
@@ -102,9 +119,13 @@ class ReorderChild extends Base
 
             if ($insert) Db::name('sale_return_child')->insertAll($insert);
 
-            Db::name('sale_return')
-                ->where(['is_del' => 0, 'id' => $saleReturn['id'], 'status' => 11])
-                ->update(['status' => 12, 'updatetime' => $date]);
+            //维护售前退货单
+            $total_return_num = Db::name('sale_return_child')->where(['is_del' => 0, 'returnCode' => $param['returnCode'], 'status' => 1])->sum('return_num');
+            if ($total_return_num >= $saleReturn['num']) {
+                Db::name('sale_return')
+                    ->where(['is_del' => 0, 'id' => $saleReturn['id'], 'status' => 11])
+                    ->update(['status' => 12, 'updatetime' => $date]);
+            }
 
             Db::commit();
             return json_show(0, '设置退货工单成功');

+ 3 - 2
app/admin/route/app.php

@@ -431,8 +431,8 @@ Route::rule('goodupoffline', 'admin/Goodup/offlineGoodBySpuCode');
 Route::rule('getgoodexamlist', 'admin/Goodup/getGoodExamList');
 Route::rule('goodofflist', 'admin/GoodOfflineLog/getList');
 Route::rule('goodoffdetail', 'admin/GoodOfflineLog/getDetail');
-Route::rule("goodchangelog","admin/Goodup/changeLog");
-Route::rule("goodcompliance","admin/Goodup/AddCompliance");
+Route::rule("goodchangelog", "admin/Goodup/changeLog");
+Route::rule("goodcompliance", "admin/Goodup/AddCompliance");
 
 
 Route::rule('goodproof', 'admin/Goodup/prooflist');
@@ -774,6 +774,7 @@ route::rule('child_add', 'admin/OrderOutChild/add');//拆单
 route::rule('child_info', 'admin/OrderOutChild/info');//详情
 route::rule('child_send', 'admin/OrderOutChild/send');//发货
 route::rule('child_out_list', 'admin/OrderOutChild/getListByOutCode');//根据发货单号查询发货工单
+route::rule('child_out_get_list', 'admin/OrderOutChild/getList');//根据发货单号获取发货工单列表()
 
 
 route::rule('order_cancel', 'admin/Sale/orderCancel');//订单取消