wugg 2 роки тому
батько
коміт
206264d343
1 змінених файлів з 245 додано та 83 видалено
  1. 245 83
      app/admin/controller/Reorder.php

+ 245 - 83
app/admin/controller/Reorder.php

@@ -3,6 +3,7 @@
 
 namespace app\admin\controller;
 
+use app\admin\model\GoodLog;
 use app\admin\model\ProcessOrder;
 use think\facade\Db;
 use think\App;
@@ -97,7 +98,7 @@ class Reorder extends \app\BaseController
                         }
                         $temp['returnCode']=$returnCode;
                         $temp['orderCode']=$ordeCode;
-                        $temp['outCode']=$send['outCode'];
+                        $temp['outCode']=isset($send['outCode'])?$send['outCode']:"";
                         $temp['addrid']=$val['id'];
                         $temp['send_num']=$addrinfo['receipt_quantity'];
                         $temp['return_num']=$val['return_num'];
@@ -372,30 +373,30 @@ class Reorder extends \app\BaseController
             return error_show(1004,"未找到订单数据");
         }
         if($status==4){
-            $cgd=Db::name("order_num")->where(['orderCode'=>$info["orderCode"],"is_del"=>0])->find();
-            if(empty($cgd)){
-                return error_show(1004,"未找到商品库存数据");
-            }
-            $wsm =Db::name("purchease_order")->where(["cgdNo"=>$cgd['cgdNo'],"is_del"=>0])->find();
-            if(empty($wsm)){
-                return error_show(1004,"未找到商品仓库库存数据");
-            }
-            $good_stock = Db::name("good_stock")->where(["spuCode"=>$orderinfo['good_code'],"wsm_code"=>$wsm,"is_del"=>0])
-                ->select()->toArray();
-            if(empty($good_stock)){
-                return error_show(1004,"未找到商品库存数据");
-            }
-            if($orderinfo['is_stock']==1){
-                $bk =Db::name("purchease_order")->where(["bkcode"=>$cgd['bkcode'],"order_type"=>5,"is_del"=>0])
-                    ->find();
-                if($bk==false){
-                    return error_show(1004,"未找到备库库存数据");
-                }
-                $bkorder=Db::name("order_bk")->where(["cgdNo"=>$bk['cgdNo']])->find();
-                if($bk==false){
-                    return error_show(1004,"未找到备库库存数据");
-                }
-            }
+//            $cgd=Db::name("order_num")->where(['orderCode'=>$info["orderCode"],"is_del"=>0])->find();
+//            if(empty($cgd)){
+//                return error_show(1004,"未找到商品库存数据");
+//            }
+//            $wsm =Db::name("purchease_order")->where(["cgdNo"=>$cgd['cgdNo'],"is_del"=>0])->find();
+//            if(empty($wsm)){
+//                return error_show(1004,"未找到商品仓库库存数据");
+//            }
+//            $good_stock = Db::name("good_stock")->where(["spuCode"=>$orderinfo['good_code'],"wsm_code"=>$wsm,"is_del"=>0])
+//                ->select()->toArray();
+//            if(empty($good_stock)){
+//                return error_show(1004,"未找到商品库存数据");
+//            }
+//            if($orderinfo['is_stock']==1){
+//                $bk =Db::name("purchease_order")->where(["bkcode"=>$cgd['bkcode'],"order_type"=>5,"is_del"=>0])
+//                    ->find();
+//                if($bk==false){
+//                    return error_show(1004,"未找到备库库存数据");
+//                }
+//                $bkorder=Db::name("order_bk")->where(["cgdNo"=>$bk['cgdNo']])->find();
+//                if($bk==false){
+//                    return error_show(1004,"未找到备库库存数据");
+//                }
+//            }
             if($info['is_addr']==1){
                 $addr=Db::name("sale_returnaddr")->where(['returnCode'=>$info['returnCode'],"is_del"=>0])->select()
                     ->toArray();
@@ -432,75 +433,236 @@ class Reorder extends \app\BaseController
             $remark!=""? $info['remark'] =$remark:"";
             $info["updatetime"]=date("Y-m-d H:i:s");
             $up = Db::name("sale_return")->save($info);
-            if($up){
-                $process=["order_code"=>$code,"order_id"=>$info['id'],"order_status"=>$status,"order_type"=>$info['order_type'] == 2?"ZXTHD":"QRTHD"];
-                ProcessOrder::AddProcess($this->post['token'],$process);
-                $ste = ["order_code"=>$code,"status"=>$temp,"action_remark"=>'',"action_type"=>"status"];
-                ActionLog::logAdd($this->post['token'],$ste,$info['order_type'] == 2?"ZXTHD":"QRTHD",$status,$info);
-                if($status==4){
-                    if($info['is_addr']==0){
-                        $orderinfo['wsend_num']-=$info['num'];
-                    }
-
-                    $orderinfo['th_num']+=$info['num'];
-                    $orderinfo['th_fee']+=round($info['num']*$orderinfo['sale_price'],2);
-                    $orderinfo['send_status'] = $orderinfo['send_num'] == 0 ? 1 : $orderinfo['wsend_num'] == 0 ? 3 : 2;
-                    $old_status = $orderinfo['status'];
-                    $orderinfo['status'] = $orderinfo['send_num'] == 0 ?0 : $orderinfo['wsend_num'] == 0 ? 2 : 1;
-                    $orderinfo['updatetime']=date("Y-m-d H:i:s");
-                    $return = Db::name("sale")->save($orderinfo);
-                    if($return==false){
-                        Db::rollback();
-                        return error_show(1004,"更新失败");
-                    }else{
-                        //修改状态,添加待办
-                        ActionLog::logAdd($this->post['token'], [
-                            "order_code" => $orderinfo['orderCode'],//销售单code
-                            "status" => $old_status,//这里的status是之前的值
-                            "action_remark" => '',//备注
-                            "action_type" => "status"//新建create,编辑edit,更改状态status
-                        ], "XSQRD", $orderinfo['status'], $orderinfo);
-
-                        ProcessOrder::AddProcess($this->post['token'], [
-                            "order_type" => 'XSQRD',
-                            "order_code" => $orderinfo['orderCode'],//销售单code
-                            "order_id" => $orderinfo['id'],
-                            "order_status" => $orderinfo['status']
-                        ]);
+            if($up) {
+                $process = ["order_code" => $code, "order_id" => $info['id'], "order_status" => $status, "order_type" => $info['order_type'] == 2 ? "ZXTHD" : "QRTHD"];
+                ProcessOrder::AddProcess($this->post['token'], $process);
+                $ste = ["order_code" => $code, "status" => $temp, "action_remark" => '', "action_type" => "status"];
+                ActionLog::logAdd($this->post['token'], $ste, $info['order_type'] == 2 ? "ZXTHD" : "QRTHD", $status, $info);
+                if ($status == 4) {
+                    if ($info['is_addr'] == 1) {
+                        if (isset($addr) && !empty($addr)) {
+                            foreach ($addr as $value) {
+                                $addrinfo = Db::name("order_addr")->where(['id' => $value['addrid'], "is_del" => 0])->find();
+                                if ($addrinfo == false) {
+                                    Db::rollback();
+                                    return error_show(1004, "地址数据未找到");
+                                }
+                                if ($addrinfo['receipt_quantity'] < $value['return_num']) {
+                                    Db::rollback();
+                                    return error_show(1004, "地址发货数量不足");
+                                }
+                                $addrinfo['receipt_quantity'] -= $value['return_num'];
+                                $addrinfo['is_del'] = $addrinfo['receipt_quantity'] <= 0 ? 1 : 0;
+                                $addrinfo['updatetime'] = date("Y-m-d H:i:s");
+                                $addrup = Db::name("order_addr")->save($addrinfo);
+                                if ($addrup == false) {
+                                    Db::rollback();
+                                    return error_show(1004, "地址发货数量更新失败");
+                                }
+                                if ($value['outCode'] != "") {
+                                    $out = Db::name("order_out")->where(["outCode" => $value['outCode'], "is_del" => 0])
+                                        ->find();
+                                    if ($out == false) {
+                                        Db::rollback();
+                                        return error_show(1004, "地址发货单数据未找到");
+                                    }
+                                    if ($out['status'] >= 2) {
+                                        Db::rollback();
+                                        return error_show(1004, "地址发货单已发货");
+                                    }
+                                    if ($out['send_num'] < $value['return_num']) {
+                                        Db::rollback();
+                                        return error_show(1004, "地址发货单发货数量不足");
+                                    }
+                                    $out['send_num'] -= $value['return_num'];
+                                    $out['is_del'] = $out['send_num'] <= 0 ? 1 : 0;
+                                    $out['updatetime'] = date("Y-m-d H:i:s");
+                                    $outup = Db::name("order_out")->save($out);
+                                    if ($outup == false) {
+                                        Db::rollback();
+                                        return error_show(1004, "地址发货单更新失败");
+                                    }
+                                    $ordersend = Db::name("order_send")->where(["outCode" => $value['outCode']])->find();
+                                    if ($ordersend['send_num'] < $value['return_num']) {
+                                        Db::rollback();
+                                        return error_show(1004, "发货单发货数量不足");
+                                    }
+                                    $ordersend['send_num'] -= $value['return_num'];
+                                    $ordersend['status'] = $ordersend['send_num'] <= 0 ? 0 : 1;
+                                    $ordersend['updatetime'] = date("Y-m-d H:i:s");
+                                    $sendip = Db::name("order_send")->save($ordersend);
+                                    if ($sendip == false) {
+                                        Db::rollback();
+                                        return error_show(1004, "发货单更新失败");
+                                    }
+
+                                }
+                            }
+                        }
                     }
-                    if($info['is_th']==1 && $orderinfo['is_stock']==0){
-
+                    if ($info['is_addr'] == 0) {
+                        if ($orderinfo['wsend_num'] < $info['num']) {
+                            Db::rollback();
+                            return error_show(1004, "销售单未发货数量不足退货");
+                        }
+                        $orderinfo['wsend_num'] -= $info['num'];
+                        $orderinfo['send_num'] += $info['num'];
+                    } else {
+                        if ($orderinfo['send_num'] < $info['num']) {
+                            Db::rollback();
+                            return error_show(1004, "销售单已发货数量不足退货");
+                        }
                     }
-
-                    foreach ($good_stock as $value){
-                        if($value['wait_out_stock']>=$info['num']){
-                            $value['usable_stock']+=$info['num'];
-                            $value['wait_out_stock']-=$info['num'];
-                            $value['updatetime']=date("Y-m-d H:i:s");
-                            $info["num"]=0;
-                        }else{
-                            $value['usable_stock']+=$value['wait_out_stock'];
-                            $value['wait_out_stock']=0;
-                            $value['updatetime']=date("Y-m-d H:i:s");
-                            $info["num"]-=$value['wait_out_stock'];
+                    if ($orderinfo['is_stock'] == 1) {
+                        $orderinfo['th_num'] += $info['num'];
+                        $orderinfo['th_fee'] += round($info['num'] * $orderinfo['sale_price'], 2);
+                        $orderinfo['updatetime'] = date("Y-m-d H:i:s");
+                        $uap = Db::name("sale")->save($orderinfo);
+                        if ($uap == false) {
+                            Db::rollback();
+                            return error_show(1005, '销售单订单更新失败');
                         }
-
-                        $stock = Db::name("good_stock")->save($value);
-                        if($stock==false){
+                        $ordernum = Db::name("order_num")->where(['orderCode' => $info['orderCode']])->find();
+                        if ($ordernum == false) {
+                            Db::rollback();
+                            return error_show(1005, '未找到关联采购单');
+                        }
+                        $ordernum['send_num'] -= $info['num'];
+                        $orderup = Db::name("order_num")->save($ordernum);
+                        if ($orderup == false) {
+                            Db::rollback();
+                            return error_show(1005, '关联数据更新失败');
+                        }
+                        $cgd = Db::name("purchease_order")->where(["cgdNo" => $ordernum['cgdNo'], "is_del" => 0])->find();
+                        if ($cgd == false) {
+                            Db::rollback();
+                            return error_show(1005, '未找到采购单数据');
+                        }
+                        $cgd['th_fee'] += round($cgd['good_price'] * $info['num'], 2);
+                        $cgd['th_num'] += $info['num'];
+                        $cgd['updatetime'] = date("Y-m-d H:i:s");
+                        $cgdup = Db::name("purchease_order")->save($cgd);
+                        if ($cgdup == false) {
                             Db::rollback();
-                            return error_show(1004,"更新失败");
+                            return error_show(1005, '采购单数据更新失败');
                         }
-                        if($info['num']==0){
-                            break;
+                        if ($cgd['bkcode'] != "") {
+                            $bk = Db::name("purchease_order")->where(["bkcode" => $cgd['bkcode'], "order_type" => 1, "is_del" => 0])
+                                ->find();
+                            if ($bk == false) {
+                                Db::rollback();
+                                return error_show(1005, '未找到备库单数据');
+                            }
+                            $orderbk = Db::name("order_bk")->where(['cgdNo' => $bk['cgdNo'], "is_del" => 0])->find();
+                            if ($orderbk == false) {
+                                Db::rollback();
+                                return error_show(1005, '备库单未完全入库');
+                            }
+                            $merge_num = Db::name("purchease_order")->where(["bkcode" => $bk['bkcode'], "order_type" => 5, "is_del" => 0])
+                                ->field("sum(send_num)-sum(th_num) as num")->find();
+
+                            $orderbk['balance_num'] = $orderbk['total_num'] - $merge_num['num'];
+                            $orderbk['merge_num'] = $merge_num['num'];
+                            $orderbk['updatetime'] = date("Y-m-d H:i:s");
+                            $orderbkup = Db::name("order_bk")->save($orderbk);
+                            if ($orderbkup == false) {
+                                Db::rollback();
+                                return error_show(1005, '备库单库存数据释放失败');
+                            }
+                        }
+                    } else {
+
+                        if ($info['is_th'] == 1) {
+                            $orderinfo['th_num'] += $info['num'];
+                            $orderinfo['th_fee'] += round($info['return_num'] * $orderinfo['sale_price'], 2);
+                            $orderinfo['updatetime'] = date("Y-m-d H:i:s");
+                            $uap = Db::name("sale")->save($orderinfo);
+                            if ($uap == false) {
+                                Db::rollback();
+                                return error_show(1005, '销售单订单更新失败');
+                            }
+                            $ordernum = Db::name("order_num")->where(['orderCode' => $orderinfo['orderCode']])->find();
+                            if ($ordernum == false) {
+                                Db::rollback();
+                                return error_show(1005, '未找到关联采购单');
+                            }
+                            $ordernum['send_num'] -= $info['num'];
+                            $orderup = Db::name("order_num")->save($ordernum);
+                            if ($orderup == false) {
+                                Db::rollback();
+                                return error_show(1005, '关联数据更新失败');
+                            }
+                            $cgd = Db::name("purchease_order")->where(["cgdNo" => $ordernum['cgdNo'], "is_del" => 0])->find();
+                            if ($cgd == false) {
+                                Db::rollback();
+                                return error_show(1005, '未找到采购单数据');
+                            }
+                            $cgd['th_num'] += $info['num'];
+                            $cgd['th_fee'] += round($info['num'] * $cgd['good_price'], 2);
+                            $cgd['updatetime'] = date("Y-m-d H:i:s");
+                            $cgdup = Db::name("purchease_order")->save($cgd);
+                            if ($cgdup == false) {
+                                Db::rollback();
+                                return error_show(1005, '采购单数据更新失败');
+                            }
+
+                        } else {
+                            $orderinfo['th_num'] += $info['num'];
+                            $orderinfo['th_fee'] += round($info['num'] * $orderinfo['sale_price'], 2);
+                            $orderinfo['updatetime'] = date("Y-m-d H:i:s");
+                            $uap = Db::name("sale")->save($orderinfo);
+                            if ($uap == false) {
+                                Db::rollback();
+                                return error_show(1005, '销售单订单更新失败');
+                            }
+                            $ordernum = Db::name("order_num")->where(['orderCode' => $orderinfo['orderCode']])->find();
+                            if ($ordernum == false) {
+                                Db::rollback();
+                                return error_show(1005, '未找到关联采购单');
+                            }
+                            $ordernum['send_num'] -= $info['num'];
+                            $ordernum['wsend_num'] = $info['return_num'];
+                            $orderup = Db::name("order_num")->save($ordernum);
+                            if ($orderup == false) {
+                                Db::rollback();
+                                return error_show(1005, '关联数据更新失败');
+                            }
                         }
                     }
 
+                    $wsmcode = $orderinfo['is_stock'] == 1 ? $cgd['wsm_code'] : $info['return_wsm'];
+                    if ($wsmcode == "") {
+                        Db::rollback();
+                        return error_show(1005, '未找到退货仓库');
+                    }
+                    $stock = Db::name("good_stock")->where(["spuCode" => $info['good_code'], 'wsm_code' => $wsmcode])->find();
+                    if (empty($stock)) {
+                        $stock = [
+                            "spuCode" => $info['good_code'],
+                            "wsm_code" => $wsmcode,
+                            "usable_stock" => 0,
+                            "wait_out_stock" => 0,
+                            "wait_in_stock" => 0,
+                            "total_stock" => 0,
+                            "addtime" => date("Y-m-d H:i:s"),
+                            "updatetime" => date("Y-m-d H:i:s"),
+                        ];
+                    }
+                    $stock['usable_stock'] += $info['num'];
+                    $stock['updatetime'] = date("Y-m-d H:i:s");
+                    $st_up = Db::name("good_stock")->save($stock);
+                    if ($st_up == false) {
+                        return error_show(1005, '可售商品入库失败');
+                    }
+                    $good_data = ['good_log_code' => $info['returnCode'], "stock_id" => isset($stock['id']) ?
+                        $stock['id'] : Db::name
+                        ("good_stock")->getLastInsID(), "type" => 1, 'stock' => $info['num'], "stock_name" => "usable_stock"];
+                    GoodLog::LogAdd($this->post['token'], $good_data, 'QRTHD');
                 }
+            }
                 Db::commit();
                 return app_show(0,"更新成功");
-            }
-                Db::rollback();
-                return error_show(1004,"更新失败");
+
         }catch (\Exception $e){
             Db::rollback();
             return error_show(1004,"更新失败");