Browse Source

Merge branch 'version1.5' into dev_wf

wufeng 2 years ago
parent
commit
4d3b3ae641

+ 12 - 5
app/abutment/controller/Order.php

@@ -4,7 +4,7 @@ namespace app\abutment\controller;
 
 use app\admin\model\ActionLog;
 use app\admin\model\GoodLog;
-use app\admin\model\ProcessOrder;
+use app\admin\model\GoodStockInfo;use app\admin\model\ProcessOrder;
 use think\Exception;
 use think\facade\Db;
 use think\facade\Validate;
@@ -435,7 +435,7 @@ class Order extends HomeBaseController
             ->whereIn('cgdNo', $param['cgdNo'])
             ->where(['is_del' => 0, 'supplierNo' => $this->request->user['supplierNo']])
             ->where('status', '=', 1)
-            ->column('id,wsm_code,good_num,spuCode,order_type,send_status,status,supplierNo', 'cgdNo');
+            ->column('id,wsm_code,good_num,good_price,spuCode,order_type,send_status,status,supplierNo', 'cgdNo');
 
         if (empty($cgdinfo)) return json_show(1005, "未找到采购单数据或采购单未发货");
 
@@ -466,7 +466,7 @@ class Order extends HomeBaseController
                 if (empty($cgdinfo[$cgdNo])) throw new Exception('未找到采购单数据或采购单未发货');
 
                 $wsm_in_code = makeNo("CF");
-
+				$bn_code = makeNo("BN");
                 $send_num = $cgdinfo[$cgdNo]['good_num'];
                 //改变编码规则,将原编码后两位换成序列号
                 //str_pad字符串填充
@@ -477,6 +477,7 @@ class Order extends HomeBaseController
                 $win = Db::name("purchease_in")->insertGetId([
                     "wsm_in_code" => $wsm_in_code,
                     "cgdNo" => $cgdNo,
+                    "bnCode"=>$bn_code,
                     "wsm_code" => $cgdinfo[$cgdNo]['wsm_code'],
                     "wsm_reaper" => isset($recep[$cgdinfo[$cgdNo]['wsm_code']]) ? $recep[$cgdinfo[$cgdNo]['wsm_code']] : '',
                     "send_num" => $cgdinfo[$cgdNo]['good_num'],
@@ -541,12 +542,18 @@ class Order extends HomeBaseController
                     $good['total_stock'] = $good['usable_stock'] + $good['wait_out_stock'];
                     $good['updatetime'] = date("Y-m-d H:i:s");
                     $upd = Db::name("good_stock")->save($good);
+                    $stockid=$good['id']?? Db::name("good_stock")->getLastInsID();
                     //商品变动日志表,good_log_code字段存储采购单单号
-                    $good_data[] = ['good_log_code' => $wsm_in_code, "stock_id" => isset($good['id']) ? $good['id'] : Db::name("good_stock")->getLastInsID(), "type" => 1, 'stock' => $send_num, "stock_name" => "usable_stock"];
-                    $good_data[] = ['good_log_code' => $wsm_in_code, "stock_id" => isset($good['id']) ? $good['id'] : Db::name("good_stock")->getLastInsID(), "type" => 2, 'stock' => $send_num, "stock_name" => "wait_in_stock"];
+                    $good_data[] = ['good_log_code' => $wsm_in_code, "stock_id" =>$stockid, "type" => 1, 'stock' => $send_num, "stock_name" => "usable_stock"];
+                    $good_data[] = ['good_log_code' => $wsm_in_code, "stock_id" =>$stockid, "type" => 2, 'stock' => $send_num, "stock_name" => "wait_in_stock"];
                     if ($upd) {
                         GoodLog::LogAdd(['id' => $uid, 'nickname' => $nickname], $good_data, 'RKD');
                         if ($cgdinfo[$cgdNo]['order_type'] == 1) {
+                        	$bnin=GoodStockInfo::AddBn($stockid,$bn_code,$send_num,$cgdinfo[$cgdNo]['good_price']);
+	                        if($bnin==false){
+	                            Db::rollback();
+	                            return error_show(1004,"库存bn数据新增失败");
+	                        }
                             $bk = Db::name("order_bk")->where(['cgdNo' => $cgdNo])->find();
                             if ($bk == false) {
                                 $bk = [

+ 42 - 2
app/abutment/controller/Sale.php

@@ -4,7 +4,7 @@ namespace app\abutment\controller;
 
 use app\admin\model\ActionLog;
 use app\admin\model\GoodLog;
-use app\admin\model\ProcessOrder;
+use app\admin\model\GoodStockInfo;use app\admin\model\ProcessOrder;
 use Exception;
 use think\facade\Cache;
 use think\facade\Db;
@@ -323,6 +323,27 @@ class Sale extends HomeBaseController
                     Db::rollback();
                     return json_show(1002, "库存更新失败");
                 }
+
+                 if($einfo["order_type"]!=1){
+                	$outsend =Db::name("order_send")->where(["outCode"=> $outCode])->findOrEmpty();
+                	if(empty($outsend)){
+                			Db::rollback();
+                             return error_show(1002, "未找到关联采购单");
+                		}
+                	$cgdinfo= Db::name("purchease_order")->where(["cgdNo"=>$outsend['cgdNo'],"is_del"=>0])
+                	->findOrEmpty();
+                	$bn_code =makeNo("BN");
+                	$bnin=GoodStockInfo::AddBn($stokc["id"],$bn_code,$outinfo['send_num'],$cgdinfo['good_price']??0);
+	                 if($bnin==false){
+	                      Db::rollback();
+	                      return error_show(1004,"库存bn数据新增失败");
+	                 }
+	                 $bnup =GoodStockInfo::OrderBn($outinfo['orderCode'],$stokc["id"],$outinfo['send_num']);
+	                 if($bnup==false){
+	                      Db::rollback();
+	                      return error_show(1004,"库存bn库存数更新失败");
+	                 }
+                }
                 $good_data[] = ['good_log_code' => $outCode, "stock_id" => $stokc['id'], "type" => 2, 'stock' => $outinfo['send_num'], "stock_name" => "wait_out_stock"];
 
                 GoodLog::LogAdd(['id' => $uid, 'nickname' => $uname], $good_data, "CKD");
@@ -496,7 +517,26 @@ class Sale extends HomeBaseController
                             ->where('id', $stock['id'])
                             ->update($stock);
                         if ($stock_rs == false) throw new Exception($value['outCode'] . '库存更新失败');
-
+						 if($sale_infos[$order_out_infos[$value['outCode']]['orderCode']]["order_type"]!=1){
+		                    $outsend =Db::name("order_send")->where(["outCode"=> $value['outCode']])->findOrEmpty();
+		                    if(empty($outsend)){
+		                            Db::rollback();
+		                             return error_show(1002, "未找到关联采购单");
+		                        }
+		                    $cgdinfo= Db::name("purchease_order")->where(["cgdNo"=>$outsend['cgdNo'],"is_del"=>0])
+		                    ->findOrEmpty();
+		                    $bn_code =makeNo("BN");
+		                    $bnin=GoodStockInfo::AddBn($stock["id"],$bn_code,$order_out_infos[$value['outCode']]['send_num'],$cgdinfo['good_price']??0);
+			                 if($bnin==false){
+			                      Db::rollback();
+			                      return error_show(1004,"库存bn数据新增失败");
+			                 }
+			                 $bnup =GoodStockInfo::OrderBn($order_out_infos[$value['outCode']]['orderCode'],$stock["id"],$order_out_infos[$value['outCode']]['send_num']);
+			                 if($bnup==false){
+			                      Db::rollback();
+			                      return error_show(1004,"库存bn库存数更新失败");
+			                 }
+						 }
                         $good_data[] = [
                             'good_log_code' => $value['outCode'],
                             'stock_id' => $stock['id'],

File diff suppressed because it is too large
+ 625 - 293
app/admin/controller/After.php


+ 183 - 65
app/admin/controller/Allot.php

@@ -4,7 +4,7 @@ namespace app\admin\controller;
 
 use app\admin\model\ActionLog;
 use app\admin\model\GoodLog;
-use app\admin\model\ProcessOrder;
+use app\admin\model\GoodStockInfo;use app\admin\model\ProcessOrder;
 use app\BaseController;
 use think\App;
 use think\facade\Db;
@@ -133,8 +133,7 @@ class Allot extends Base
         return app_show(0,"获取成功",['count'=>$count,'list'=>$data]);
     }
     public function create(){
-
-        $token =isset($this->post['token']) && $this->post['token'] !=="" ? trim($this->post['token']) :"";
+    	$token =isset($this->post['token']) && $this->post['token'] !=="" ? trim($this->post['token']) :"";
     $wsm_out = isset($this->post['wsm_out']) && $this->post['wsm_out'] !=="" ? trim($this->post['wsm_out']) :"";
     if($wsm_out==""){
         return error_show(1002,"出库仓库编号不能为空");
@@ -149,27 +148,6 @@ class Allot extends Base
             ->where(['is_del' => 0, 'status' => 1])
             ->whereIn('wsm_code', [$wsm_out, $wsm_in])
             ->column('supplierNo,companyNo', 'wsm_code');//supplierNo所属供货商,companyNo业务企业
-
-//        $in_companyNo = isset($this->post['in_companyNo']) && $this->post['in_companyNo'] !=="" ? trim($this->post['in_companyNo']) :"";
-//        if($in_companyNo==""){
-//            return error_show(1002,"in_companyNo不能为空");
-//        }
-//        $out_companyNo = isset($this->post['out_companyNo']) && $this->post['out_companyNo'] !=="" ? trim($this->post['out_companyNo']) :"";
-//        if($out_companyNo==""){
-//            return error_show(1002,"out_companyNo不能为空");
-//        }
-//        $company =Db::name("business")->where(['companyNo'=>$in_companyNo,"is_del"=>0])->find();
-//        if($company==false){
-//            return error_show(1002,"未找到入库业务公司");
-//        }
-//        $company =Db::name("business")->where(['companyNo'=>$out_companyNo,"is_del"=>0])->find();
-//        if($company==false){
-//            return error_show(1002,"未找到出库业务公司");
-//        }
-//    $good_type_code = isset($this->post['good_type_code']) && $this->post['good_type_code'] !=="" ? trim($this->post['good_type_code']) :"";
-//    if($good_type_code==""){
-//        return error_show(1002,"商品属性不能为空");
-//    }
     $allot_code=makeNo("XK");
     $apply_id =GetUserInfo($token);
         if(empty($apply_id)||$apply_id['code']!=0){
@@ -212,28 +190,34 @@ class Allot extends Base
             $dm=[];
             if($pd>0) {
                 foreach ($dain as $value) {
-                    $st = Db::name("good_stock")->alias("a")->leftJoin("good b" ,"a.spuCode=b.spuCode")
-                        ->where(['wsm_code' => $wsm_out, 'a.spuCode' => $value['spuCode'], 'a.is_del' => 0])
-                        ->field("a.spuCode,wsm_code,usable_stock,wait_out_stock,wait_in_stock,b.good_name")->find();
+                    $st = Db::name("good_stock_info")->alias("a")
+                     ->leftJoin("good_stock d" ,"d.id=a.stockid")
+                    ->leftJoin("good b" ,"d.spuCode=b.spuCode")
+                        ->where(['wsm_code' => $wsm_out, 'a.bnCode' => $value['bnCode'], 'd.is_del' => 0])
+                        ->field("d.spuCode,wsm_code,d.usable_stock,d.wait_out_stock,d.wait_in_stock,b.good_name,a.total_num,a.balance_num,a.origin_price")
+                        ->find();
 
                     if (empty($st)) {
                         Db::rollback();
                         return error_show(1003, "商品不能为空");
                         }
-                    if($value['allot_num']>$st['usable_stock']){
+                    if($value['allot_num']>$st['balance_num']){
+                    	 Db::rollback();
                         return error_show(2000,"库存数量不足");
                     }
                         $temp = [];
                         $temp['good_name'] = $st['good_name'];
                         $temp['allot_code'] =$allot_code;
-                        $temp['good_type_code'] = $value['spuCode'];
+                        $temp['bnCode'] =$value['bnCode'];
+                        $temp['good_type_code'] = $st['spuCode'];
+                        $temp['origin_price'] = $st['origin_price'];
                         $temp['allot_num'] = $value['allot_num'];
-                        $temp['usable_num'] =$st['usable_stock'];
+                        $temp['usable_num'] =$st['balance_num'];
                         $temp['error_num'] = 0;
                         $temp['error_remark'] = "";
                         $temp['stock_num'] = 0;
                         $temp['error_code']="";
-                        $temp['good_num']=$st['usable_stock'];
+                        $temp['good_num']=$st['balance_num'];
                         $temp['addtime'] = date("Y-m-d H:i:s");
                         $temp['updatetime'] = date("Y-m-d H:i:s");
                         $dm[]=$temp;
@@ -296,10 +280,13 @@ class Allot extends Base
 
             $data=[];
         foreach ($vmp as $k=>$value){
-            $s =Db::name('good_stock')->where(['spuCode'=>$value['good_type_code'],'wsm_code'=>$str['wsm_out']])
-                ->find();
+           $s = Db::name("good_stock_info")->alias("a")
+                     ->leftJoin("good_stock d" ,"d.id=a.stockid")
+                        ->where(['wsm_code' => $str['wsm_out'], 'a.bnCode' => $value['bnCode'], 'd.is_del' => 0])
+                        ->field("a.balance_num,a.origin_price")
+                        ->find();
             if($str['status']<=1) {
-                $value['usable_num'] = $s['usable_stock'];
+                $value['usable_num'] = $s['balance_num']??0;
             }
             $value['error_msg']="";
             $value['good_code']=$value['spuCode']=$value['good_type_code'];
@@ -366,9 +353,12 @@ class Allot extends Base
             $da = Db::name('allot_stock')->where(["id"=>$id,"is_del"=>0])->save($data);
             if($da!=false) {
                 foreach ($dain as $value) {
-                    $st = Db::name("good_stock")->alias("a")->leftJoin("good b" ,"a.spuCode=b.spuCode")
-                        ->where(['wsm_code' => $wsm_out, 'a.spuCode' => $value['spuCode'], 'a.is_del' => 0])
-                        ->field("a.spuCode,wsm_code,usable_stock,wait_out_stock,wait_in_stock,b.good_name")->find();
+                    $st = Db::name("good_stock_info")->alias("a")
+                     ->leftJoin("good_stock d" ,"d.id=a.stockid")
+                    ->leftJoin("good b" ,"d.spuCode=b.spuCode")
+                        ->where(['wsm_code' => $wsm_out, 'a.bnCode' => $value['bnCode'], 'd.is_del' => 0])
+                        ->field("d.spuCode,wsm_code,d.usable_stock,d.wait_out_stock,d.wait_in_stock,b.good_name,a.total_num,a.balance_num,a.origin_price")
+                        ->find();
                     if (empty($st)) {
                         Db::rollback();
                         return error_show(1003, "商品不能为空");
@@ -381,21 +371,23 @@ class Allot extends Base
                         }
                     }
 
-                    if($value['allot_num']>$st['usable_stock']){
+                    if($value['allot_num']>$st['balance_num']){
                         Db::rollback();
-                        return error_show(2000,"库存数量不足");
+                        return error_show(2000,"批次库存数量不足");
                     }
                     $temp = [];
                    isset($value['id'])&&$value['id']!=="" ? $temp['id'] = $value['id']:'';
                     $temp['good_name'] = $st['good_name'];
-                    $temp['good_type_code'] = $value['spuCode'];
+                    $temp['good_type_code'] = $st['spuCode'];
+                    $temp['bnCode'] =$value['bnCode'];
                     $temp['allot_num'] = $value['allot_num'];
-                    $temp['usable_num'] =$st['usable_stock'];
+                    $temp['usable_num'] =$st['balance_num'];
+                    $temp['origin_price'] = $st['origin_price'];
                     $temp['error_num'] = 0;
                     $temp['error_remark'] = "";
                     $temp['allot_code'] = $etid['allot_code'];
                     $temp['stock_num'] = 0;
-                    $temp['good_num']=$st['usable_stock'];
+                    $temp['good_num']=$st['balance_num'];
                     $temp['error_code']="";
                     $temp['is_del']=$value['is_del'];
                     isset($value['id'])&&$value['id']!=="" ? '' :$temp['addtime'] = date("Y-m-d H:i:s");
@@ -408,8 +400,6 @@ class Allot extends Base
                 }
                 $order = ["order_code"=>$etid['allot_code'],"status"=>$etid['status'],"action_remark"=>'',"action_type"=>"edit"];
                 ActionLog::logAdd($this->post['token'],$order,"DBD",$etid['status'],$this->post);
-//                $process=["order_code"=>$etid['allot_code'],"order_id"=>$etid['id'],"order_status"=>$etid['status'],"order_type"=>'DBD',"before_status"=>1];
-//                ProcessOrder::AddProcess($token,$process);
                 Db::commit();
                 return error_show(0, "调拨更新成功");
             }
@@ -471,6 +461,11 @@ class Allot extends Base
                             Db::rollback();
                             return error_show(2000,"超出库存数量");
                         }
+                        $stockinfo = Db::name("good_stock_info")->where(["bnCode"=>$value['bnCode'],"stockid"=>$stock['id']])->find();
+                         if($value['allot_num']>$stockinfo['balance_num']){
+                            Db::rollback();
+                            return error_show(2000,"超出bn库存数量");
+                        }
                         if($status==2){
                             $stock['usable_stock']-=$value['allot_num'];
                             $stock['wait_out_stock']+=$value['allot_num'];
@@ -481,6 +476,11 @@ class Allot extends Base
                             if($Db==false){
                                 Db::rollback();
                                 return error_show(1002,"状态更新失败");
+                            }
+							$stoup =GoodStockInfo::bnStock($stock['id'],$value['bnCode'],$value['allot_num'],1);
+                            if($stoup==false){
+                            	Db::rollback();
+                                return error_show(1002,"bn库存数修改失败");
                             }
                            //商品变动日志表,good_log_code字段存储调拨单号
                         $good_data[] = ['good_log_code' => $st['allot_code'], "stock_id" => $stock['id'], "type" => 1, 'stock' =>$value['allot_num'], "stock_name" => "wait_out_stock"];
@@ -602,25 +602,20 @@ class Allot extends Base
         if($datainfo>0) {
             $good_data=[];
             foreach ($dain as $value) {
-                $st = Db::name("good_stock")->alias("a")->leftJoin("good b" ,"a.spuCode=b.spuCode")
-                    ->where(['wsm_code' => $al['wsm_out'], 'a.spuCode' => $value['good_code'], 'a.is_del' => 0])
-                    ->field("a.spuCode,wsm_code,usable_stock,wait_out_stock,wait_in_stock,b.good_name")->find();
-                if ($st==false) {
-                    Db::rollback();
-                    return error_show(1003, "未找到商品");
-                }
+//                $st = Db::name("good_stock")->alias("a")->leftJoin("good b" ,"a.spuCode=b.spuCode")
+//                    ->where(['wsm_code' => $al['wsm_out'], 'a.spuCode' => $value['good_code'], 'a.is_del' => 0])
+//                    ->field("a.spuCode,wsm_code,usable_stock,wait_out_stock,wait_in_stock,b.good_name")->find();
+//                if ($st==false) {
+//                    Db::rollback();
+//                    return error_show(1003, "未找到商品");
+//                }
                 $n = Db::name('allot_info')->where(['id'=>$value['id'],'allot_code'=>$al['allot_code'],'is_del'=>0])->find();
                 if($n==false){
                     Db::rollback();
                     return error_show(10032, "未找到盘点信息数据");
                 }
-//                if($value['allot_num']>$st['usable_stock']){
-//                    return error_show(2000,"库存数量不足");
-//                }
                 $temp = [];
                 $temp['error_code']=$value['error_code'];
-                $temp['good_num']=$st['usable_stock'];
-                $temp['usable_num'] = $st['usable_stock'];
                 $temp['error_num'] = $value['error_num'];
                 $temp['error_remark'] = $value['error_remark'];
                 $temp['stock_num']=$n['allot_num']-$value['error_num'];
@@ -712,21 +707,16 @@ public function vesio(){
             $order = ["order_code"=>$al['allot_code'],"status"=>$al['status'],"action_remark"=>'',"action_type"=>"edit"];
             ActionLog::logAdd($this->post['token'],$order,"DBD",5,$this->post);
             foreach ($dain as $value) {
-                $st = Db::name("good_stock")->alias("a")->leftJoin("good b" ,"a.spuCode=b.spuCode")
-                    ->where(['wsm_code' => $al['wsm_out'], 'a.spuCode' => $value['good_code'], 'a.is_del' => 0])
-                    ->field("a.spuCode,wsm_code,usable_stock,wait_out_stock,wait_in_stock,b.good_name")->find();
-                if ($st==false) {
-                    Db::rollback();
-                    return error_show(1003, "商品不能为空");
-                }
+//                $st = Db::name("good_stock")->alias("a")->leftJoin("good b" ,"a.spuCode=b.spuCode")
+//                    ->where(['wsm_code' => $al['wsm_out'], 'a.spuCode' => $value['good_code'], 'a.is_del' => 0])
+//                    ->field("a.spuCode,wsm_code,usable_stock,wait_out_stock,wait_in_stock,b.good_name")->find();
+
                 $p = Db::name('allot_info')->where(['id'=>$value['id'],'allot_code'=>$al['allot_code'],"is_del"=>0])->find();
                 if($p==false){
                     Db::rollback();
                     return error_show(1002,"未找到盘点数据");
                 }
                 $temp = [];
-                $temp['good_num']=$st['usable_stock'];
-                $temp['usable_num']=$st['usable_stock'];
                 $temp['error_num'] = $value['error_num']+$p['stock_num']-$value['stock_num'];
                 $temp['stock_num'] = $value['stock_num'];
                 $temp['error_remark'] = $value['error_remark'];
@@ -751,6 +741,11 @@ public function vesio(){
                     Db::rollback();
                     return error_show(1004, "验货更新失败");
                 }
+                $stoup =GoodStockInfo::bnStock($stock['id'],$p['bnCode'],$p['allot_num'],0,$p['origin_price']);
+                if($stoup==false){
+                	Db::rollback();
+                    return error_show(1002,"bn库存数修改失败");
+                }
                 //商品变动日志表,good_log_code字段存储调拨单号
                 $good_data[] = ['good_log_code' => $allot_code, "stock_id" => $stock['id'], "type" => 2, 'stock' => $p['stock_num'], "stock_name" => "wait_in_stock"];
                 $good_data[] = ['good_log_code' => $allot_code, "stock_id" => $stock['id'], "type" => 1, 'stock' => $p['stock_num'], "stock_name" => "usable_stock"];
@@ -768,4 +763,127 @@ public function vesio(){
         return error_show(1005,$e->getMessage());
     }
 }
+
+	public function goodlist()
+    {
+        $page = isset($this->post['page']) && $this->post['page'] !== "" ? intval($this->post['page']) : 1;
+        $size = isset($this->post['size']) && $this->post['size'] !== "" ? intval($this->post['size']) : 10;
+        $condtion = [['b.is_del', "=", 0], ['c.is_del', "=", 0],["d.balance_num",">=",0]];
+        $wsmcode = isset($this->post['wsm_code']) && $this->post['wsm_code'] !== "" ? trim($this->post['wsm_code']) : "";
+        if ($wsmcode !== "") {
+            //return error_show(1002,"仓库code不能为空");
+            $condtion[] = ['c.wsm_code', "=", $wsmcode];
+            // $typecode= Db::name("good_stock")->where(["wsm_code"=>$wsmcode,'is_del'=>0])->column("good_type_code");
+        }
+        $goodcode = isset($this->post['good_code']) && $this->post['good_code'] !== "" ? trim($this->post['good_code'])
+            : "";
+        if ($goodcode != "") {
+            // $condtion['a.good_code'] = Db::raw("like '%{$goodcode}%'");
+            $condtion[] = ['b.spuCode', "like", "%{$goodcode}%"];
+        }
+        $good_name = isset($this->post['good_name']) && $this->post['good_name'] !== "" ? trim($this->post['good_name'])
+            : "";
+        if ($good_name != "") {
+            //  $condtion['a.good_name'] = Db::raw("like '%{$good_name}%'");
+            $condtion[] = ['b.good_name', "like", "%{$good_name}%"];
+        }
+        $supplierNo = isset($this->post['supplierNo']) && $this->post['supplierNo'] !== "" ? trim($this->post['supplierNo']) : "";
+        if ($supplierNo != "") {
+            $supplier = Db::name("supplier")->where(["code" => $supplierNo])->find();
+            if (empty($supplier)) {
+                return error_show(1004, "未找到供应商信息");
+            }
+            $wsmcode = Db::name("warehouse_info")->where(["is_del" => 0, "supplierNo" => $supplierNo])->column("wsm_code");
+            $condtion[] = ['c.wsm_code', "in", $wsmcode];
+        }
+        $companyNo = isset($this->post['companyNo']) && $this->post['companyNo'] !== "" ? trim($this->post['companyNo']) : "";
+        if ($companyNo !== "") {
+            $wsmcode = Db::name("warehouse_info")->where(['companyNo' => $companyNo, "is_del" => 0])->column("wsm_code");
+            $condition[] = ["c.wsm_code", "in", $wsmcode];
+        }
+        $stock_low = isset($this->post['stock_low']) && $this->post['stock_low'] !== "" ? intval($this->post['stock_low'])
+            : "";
+        if ($stock_low != "") {
+            $condtion[] = ['d.balance_num', ">=", $stock_low];
+        }
+        $stock_up = isset($this->post['stock_up']) && $this->post['stock_up'] !== "" ? trim($this->post['stock_up'])
+            : "";
+        if ($stock_up != "") {
+            $condtion[] = ['d.balance_num', "<=", $stock_up];
+        }
+
+        $cat_id = isset($this->post['cat_id']) && $this->post['cat_id'] !== "" ? intval($this->post['cat_id']) : "";
+        if ($cat_id != "") {
+            $at = Db::name('cat')->where(['id' => $cat_id])->find();
+            if (empty($at)) {
+                return error_show(1004, "未找到分类信息");
+            }
+            $cat = manger([$at['id']], $at['level']);
+            $condtion[] = ['b.cat_id', "in", $cat];
+        }
+        $company_name = isset($this->post['company_name']) && $this->post['company_name'] !== "" ? trim($this->post['company_name']) : "";
+        if ($company_name !== "") $condtion[] = ["b.createrid", 'in', get_company_item_user_by_name($company_name)];
+
+        $count = Db::name("good")
+            ->alias("b")
+            ->join("good_stock c", "c.spuCode=b.spuCode", "left")
+            ->join("good_stock_info d", "c.id=d.stockid", "left")
+            ->where($condtion)
+            ->count();
+        $page >= ceil($count / $size) ? $page = ceil($count / $size) : "";
+        $list = Db::name("good")
+            ->alias("b")
+            ->leftJoin("good_stock c", "c.spuCode=b.spuCode")
+            ->join("good_stock_info d", "c.id=d.stockid", "left")
+            ->leftJoin("depart_user u", "u.uid=b.createrid AND u.is_del=0")
+            ->where($condtion)
+            ->field("b.*,c.id as stock_id,c.usable_stock,c.wait_in_stock,c.wait_out_stock,c.wsm_code,u.uid,u.nickname,u.itemid,d.bnCode,d.balance_num,d.origin_price")
+            ->page($page, $size)
+            ->select()
+            ->toArray();
+
+        $data = [];
+        if ($list) {
+            //品牌信息
+            $brands = Db::name('brand')->whereIn('id', array_column($list, 'brand_id'))->where('is_del', 0)->column('brand_name', 'id');
+            $units = Db::name('unit')->whereIn('id', array_column($list, 'good_unit'))->where('is_del', 0)->column('unit', 'id');
+            $business = Db::name('business')->whereIn('companyNo', array_column($list, 'companyNo'))->where('is_del', 0)->column('company', 'companyNo');
+            foreach ($list as $key => $value) {
+                $supplier = Db::name("supplier")->where(["code" => $value['supplierNo']])->find();
+                $value['supplier_name'] = isset($supplier['name']) ? $supplier['name'] : "";
+                $wsmcode = Db::name("warehouse_info")->alias("a")->leftJoin("supplier b", "a.supplierNo=b.code")->where(["a.wsm_code" => $value['wsm_code']])->field("a.name as wsm_name,b.name,b.code")->find();
+                $value['wsm_name'] = isset($wsmcode['wsm_name']) ? $wsmcode['wsm_name'] : "";
+                $value['wsm_supplier'] = isset($wsmcode['name']) ? $wsmcode['name'] : "";
+                $value['wsm_supplierNo'] = isset($wsmcode['code']) ? $wsmcode['code'] : "";
+                $value['can'] = isset($value['cat_id']) && $value['cat_id'] != 0 ? made($value['cat_id']) : [];
+
+                $value['brand_name'] = isset($brands[$value['brand_id']]) ? $brands[$value['brand_id']] : '';
+                $value['unit'] = isset($units[$value['good_unit']]) ? $units[$value['good_unit']] : '';
+                $value['companyName'] = isset($business[$value['companyNo']]) ? $business[$value['companyNo']] : '';
+                //规格信息
+                $spec = Db::name("good_spec")->where(["spuCode" => $value['spuCode'], "is_del" => 0])->select()->toArray();
+
+                $speclist = [];
+                if (!empty($spec)) {
+                    foreach ($spec as $val) {
+                        $temp = [];
+                        $temp['spec_id'] = $val['spec_id'];
+                        $temp['spec_value_id'] = $val['spec_value_id'];
+                        $sp = Db::name("specs")->where(["id" => $val['spec_id']])->find();
+                        $temp['spec_name'] = isset($sp["spec_name"]) ? $sp["spec_name"] : "";
+                        $spv = Db::name("spec_value")->where(["id" => $val['spec_value_id']])->find();
+                        $temp['spec_value'] = isset($spv["spec_value"]) ? $spv["spec_value"] : "";
+                        $speclist[] = $temp;
+                    }
+                }
+                $value['specinfo'] = $speclist;
+                $value['cgder'] = isset($supplier['person']) ? $supplier['person'] : '';
+                $value['company_name'] = implode('/', array_column(GetPart($value['itemid']), 'name'));
+                $data[] = $value;
+            }
+
+        }
+
+        return app_show(0, "获取成功", ["list" => $data, "count" => $count]);
+    }
 }

+ 281 - 313
app/admin/controller/Check.php

@@ -108,6 +108,7 @@ public function __construct(App $app)
             ->leftJoin("good_stock c", "c.spuCode=b.spuCode")
             ->leftJoin("depart_user u", "u.uid=b.createrid AND u.is_del=0")
             ->where($condtion)
+            ->field("b.*,c.id as stock_id,c.usable_stock,c.wait_in_stock,c.wait_out_stock,c.wsm_code,u.uid,u.nickname,u.itemid")
             ->page($page, $size)
             ->select()
             ->toArray();
@@ -131,7 +132,7 @@ public function __construct(App $app)
                 $value['brand_name'] = isset($brands[$value['brand_id']]) ? $brands[$value['brand_id']] : '';
                 $value['unit'] = isset($units[$value['good_unit']]) ? $units[$value['good_unit']] : '';
                 $value['companyName'] = isset($business[$value['companyNo']]) ? $business[$value['companyNo']] : '';
-
+                $value['bninfo'] =Db::name("good_stock_info")->where([["stockid","=",$value['stock_id']],["balance_num",">",0]])->select()->toArray();
                 //规格信息
                 $spec = Db::name("good_spec")->where(["spuCode" => $value['spuCode'], "is_del" => 0])->select()->toArray();
 
@@ -149,17 +150,8 @@ public function __construct(App $app)
                     }
                 }
                 $value['specinfo'] = $speclist;
-
-                //采购人
-//                $value['cgder'] = Db::name('supplier')
-//                    ->where([
-//                        'code' => $value['supplierNo'],
-//                        'is_del' => 0,
-//                    ])->value('person', '');
                 $value['cgder'] = isset($supplier['person']) ? $supplier['person'] : '';
-
                 $value['company_name'] = implode('/', array_column(GetPart($value['itemid']), 'name'));
-
                 $data[] = $value;
             }
 
@@ -167,295 +159,268 @@ public function __construct(App $app)
 
         return app_show(0, "获取成功", ["list" => $data, "count" => $count]);
     }
-public function list()
-{
-    $page = isset($this->post['page']) && $this->post['page'] !== "" ? intval($this->post['page']) : "1";
-    $size = isset($this->post['size']) && $this->post['size'] !== "" ? intval($this->post['size']) : "10";
-    $where = [['a.is_del',"=",0],['b.is_del',"=",0]];
-    $start= isset($this->post['start']) && $this->post['start'] !== "" ? $this->post['start']:"";
-    if ($start !="") {
-      //  $where["a.addtime"]=Db::raw(">= '{$start}'");
-        $where[]=['a.addtime',">=",$start];
-    }
-    $end = isset($this->post['end']) && $this->post['end'] !== "" ? $this->post['end'] :"";
-    if($end !=""){
-      //  $where["a.addtime"] = Db::raw("<= '{$end}'");
-        $where[]=['a.addtime',"<=",$end];
-    }
-    $check_code = isset($this->post['check_code']) && $this->post['check_code'] !== "" ? trim($this->post['check_code']) : "";
-    if ($check_code !== "") {
-       // $where['a.check_code'] = Db::raw("like '%$check_code%'");
-        $where[]=['a.check_code',"like","%$check_code%"];
-    }
-    $wsm_code = isset($this->post['wsm_code']) && $this->post['wsm_code'] !== "" ? trim($this->post['wsm_code']) : "";
-    if ($wsm_code  !== "") {
-      //  $where['a.wsm_code'] =  Db::raw("like '%$wsm_code%'");
-        $where[]=['a.wsm_code',"like","%$wsm_code%"];
-    }
-    $apply_name = isset($this->post['apply_name']) && $this->post['apply_name'] !== "" ? trim($this->post['apply_name']) : "";
-    if ($apply_name !== "") {
-     //   $where['a.apply_name'] = $apply_name;
-        $where[]=['a.apply_name',"like","%$apply_name%"];
-    }
-    $type = isset($this->post['type']) && $this->post['type'] !== "" ? trim($this->post['type']) : "";
-    if ($type !== "") {
-       // $where['a.type'] = $type;
-        $where[]=['a.type',"=",$type];
-    }
-    $apply_id = isset($this->post['apply_id']) && $this->post['apply_id'] !== "" ? intval($this->post['apply_id']) : "";
-    if ($apply_id!== "") {
-       // $where['a.apply_id'] = $apply_id;
-        $where[]=['a.apply_id',"=",$apply_id];
-    }
-    $status= isset($this->post['status']) && $this->post['status'] !== "" ? intval($this->post['status']) : "";
-    if ($status !== "") {
-       // $where['a.status '] = $status;
-        $where[]=['a.status',"=",$status];
-    }
-    $companyNo = isset($this->post['companyNo']) && $this->post['companyNo'] !== "" ? trim($this->post['companyNo']) : "";
-    if ($companyNo !== "") {
-        $condition[]=["a.companyNo ","=",$companyNo ];
-    }
-    $count = Db::name('good_check')->alias('a')->join("warehouse_info b","a.wsm_code = b.wsm_code","left")
-        ->join("supplier v","v.code=b.supplierNo","left")
-        ->where($where)->count();
-    $total = ceil($count / $size);
-    $page = $page <= $total ? $page : $total;
-    $list = Db::name('good_check')->alias('a')->join("warehouse_info b","a.wsm_code = b.wsm_code","left")
-        ->join("supplier v","v.code=b.supplierNo","left")
-        ->field("a.status,a.apply_id,a.apply_name,a.type,a.addtime,a.wsm_code,a.check_code,b.name,a.id,v.name as 'caname',v.code")->where($where)->page($page,$size)->order("a.id desc")->select();
-    $data=[];
-    foreach ($list as $key=>$value){
-        $value['rename'] ='';
-        if($value['apply_id']!=0){
-            $depart = Db::name("depart_user")->alias("a")->leftJoin("company_item b","a.itemid = b.id")->where(['a.uid'=>$value['apply_id'],'a.is_del'=>0])
-                ->column('b.name');
-           // var_dump(Db::name("depart_user")->getLastSql());
-            $value['rename'] =implode(",",$depart);
-        }
-        $data[] = $value;
-    }
-    return app_show(0,"获取成功",['count'=>$count,'list'=>$data]);
-
-    }
-public function goodlist(){
-    $page = isset($this->post['page']) && $this->post['page'] !=="" ? intval($this->post['page']) :"1";
-    $size = isset($this->post['size']) && $this->post['size'] !=="" ? intval($this->post['size']) :"10";
-    $where = ['is_del'=>0];
-    $id = isset($this->post['id']) && $this->post['id'] !=="" ? intval($this->post['id']) :"";
-    if($id==""){
-        return error_show(1002,"参数id不能为空");
-    }
-    $fo = Db::name('good_check')->alias('a')->join('warehouse_info b',"b.wsm_code=a.wsm_code","left")
-        ->join('supplier c',"c.code=b.supplierNo","left")->field("c.name,c.code,a.*")
-        ->where(['a.id'=>$id,'a.is_del'=>0])->find();
-    if(empty($fo)){
-        return error_show(1003,"未找到盘点信息");
-    }
-    if ($fo['check_code'] !== "") {
-        $where['check_code'] = $fo['check_code'];
-    }
-    $count = Db::name('check_item')->where($where)->count();
-    $total = ceil($count / $size);
-    $page = $page >= $total ?  $total: $page;
-    $list = Db::name('check_item')->where($where)->page($page,$size)->select();
-    return app_show(0,"获取成功",['count'=>$count,'list'=>$list]);
-}
-public function create(){
-    $token =isset($this->post['token']) && $this->post['token'] !=="" ? trim($this->post['token']) :"";
-
-    $wsm_code = isset($this->post['wsm_code']) && $this->post['wsm_code'] !=="" ? trim($this->post['wsm_code']):"";
-    if($wsm_code==""){
-        return error_show(1002,"盘点仓库编号不能为空");
-    }
-    $type = isset($this->post['type']) && $this->post['type'] !=="" ? intval($this->post['type']) :"";
-    if($type==""){
-        return error_show(1002,"盘点类型不能为空");
-    }
-    $companyNo = isset($this->post['companyNo']) && $this->post['companyNo'] !=="" ? trim($this->post['companyNo']) :"";
-    if($companyNo==""){
-        return error_show(1002,"参数companyNo不能为空");
-    }
-    $company =Db::name("business")->where(['companyNo'=>$companyNo,"is_del"=>0])->find();
-    if($company==false){
-        return error_show(1002,"未找到业务公司");
-    }
-    $check_code = makeNo("CK");
-    $apply_id=GetUserInfo($token);
-    if(empty($apply_id)||$apply_id['code']!=0){
-        return error_show(1002,"申请人数据不存在");
-    }
-    $rm= isset($apply_id["data"]['id']) ?  $apply_id["data"]['id'] : "";
-    $ri= isset($apply_id["data"]['nickname']) ?  $apply_id["data"]['nickname'] : "";
-    $status = isset($this->post['status']) && $this->post['status'] !=="" ? intval($this->post['status']) :"0";
-    $remark = isset($this->post['remark']) && $this->post['remark'] !=="" ? intval($this->post['remark']) :"";
-    Db::startTrans();
-    try{
-        $data=[
-            "check_code"=>$check_code,
-            "wsm_code"=>$wsm_code,
-            "type"=>$type,
-            "status"=>$status,
-            "companyNo"=>$companyNo,
-            "remark"=>$remark,
-            "apply_id"=>$rm,
-            "apply_name"=>$ri,
-            "is_del"=>0,
-            "addtime"=>date('Y-m-d H:i:s'),
-            "updatetime"=>date("Y-m-d H:i:s")
-        ];
-        $da= Db::name('good_check')->insert($data,true);
-//        $dio=[];
-//        if($da>0){
-//            foreach ($dain as $value){
-//            $st=Db::name("good_type")->alias("b")->join("good a","a.good_code = b.good_code","left")
-//                ->join("good_stock c","c.good_type_code = b.type_code","left")->where(['c.wsm_code'=>$wsm_code,'good_type_code'=>$value['type_code'],'b.is_del'=>0,'a.is_del'=>0])->where("c.is_del=0 or c.is_del is null")
-//                ->field("b.type_code,a.good_name,c.wsm_code,c.wait_in_stock,c.wait_out_stock,c.usable_stock,c.good_type_code,a.original_price")->find();
-//
-//            $temp=[];
-//            $temp['good_name']=$st['good_name'];
-//            $temp['origin_price']=$st['original_price'];
-//            $temp['good_type_code']=$st['good_type_code'];
-//            $temp['origin_num']=$st['usable_stock'];
-//            $temp['check_num']=0;
-//            $temp['diff_num']=0;
-//            $temp['status']=0;
-//            $temp['remark']="";
-//            $temp['is_del']=0;
-//            $temp['check_time']=date('Y-m-d H:i:s');
-//            $temp['check_code']=$check_code;
-//            $temp['addtime']=date("Y-m-d H:i:s");
-//            $temp['updatetime']=date("Y-m-d H:i:s");
-//            $dio[] =$temp;
-//            }
-//            $in= Db::name('check_item')->insertAll($dio);
-//        }
-        if($da){
-            $orde = ["order_code"=>$check_code,"status"=>$data['status'],"action_remark"=>'',"action_type"=>"create"];
-            ActionLog::logAdd($this->post['token'],$orde,'PDD',$data['status'],$orde);
-            $process=["order_code"=>$check_code,"order_id"=>$da,"order_status"=>$data['status'],"order_type"=>'PDD',"before_status"=>$data['status'], 'holder_id' => $data['apply_id']];
-            ProcessOrder::AddProcess($this->post['token'],$process);
-           Db::commit();
-            return error_show(0,"盘点创建成功");
-        }else{
-            Db::rollback();
-           return error_show(1002,"创建失败");
-        }
-    }catch (\Exception $e){
-        Db::rollback();
-        return error_show(1005,$e->getMessage());
-   }
-    }
-public function info(){
-    $id = isset($this->post['id']) && $this->post['id'] !=="" ? intval($this->post['id']) :"";
-    if($id==""){
-        return error_show(1002,"参数id不能为空");
-    }
-    $fo = Db::name('good_check')->alias('a')->join('warehouse_info b',"b.wsm_code=a.wsm_code","left")
-        ->join('supplier c',"c.code=b.supplierNo","left")->field("c.name,c.code,a.*")
-        ->where(['a.id'=>$id,'a.is_del'=>0])->find();
-    if(empty($fo)){
-        return error_show(1003,"未找到盘点信息");
-    }
-    $fi = Db::name('check_item')->where(['check_code'=>$fo['check_code'],'is_del'=>0])->select();
-    $fo['item']=$fi;
-    if(empty($fo)){
-        return error_show(1002,"未找到盘点编号");
-    }else{
-        return app_show(0,"获取成功",$fo);
-    }
-}
-public function edit()
-{
-    $token =isset($this->post['token']) && $this->post['token'] !=="" ? trim($this->post['token']) :"";
-    $id = isset($this->post['id']) && $this->post['id'] !== "" ? intval($this->post['id']) : "";
-    $eid = Db::name('good_check')->where(['id' => $id, 'is_del' => 0])->find();
-    if ($eid ==="") {
-        return error_show(1002, "未找到盘点编号信息");
-    }
-    $wsm_code = isset($this->post['wsm_code']) && $this->post['wsm_code'] !== "" ? trim($this->post['wsm_code']) : "";
-    if ($wsm_code == "") {
-        return error_show(1002, "盘点仓库不能为空");
-    }
-    $type = isset($this->post['type']) && $this->post['type'] !== "" ? trim($this->post['type']) : "";
-    $remark = isset($this->post['remark']) && $this->post['remark'] !== "" ? trim($this->post['remark']) : "";
-    if ($type == "") {
-        return error_show(1002, "盘点类型不能为空");
-    }
-    $apply_id=GetUserInfo($token);
-    if(empty($apply_id)||$apply_id['code']!=0){
-        return error_show(1002,"申请人数据不存在");
-    }
-    $rm= isset($apply_id["data"]['id']) ?  $apply_id["data"]['id'] : "";
-    $ri= isset($apply_id["data"]['nickname']) ?  $apply_id["data"]['nickname'] : "";
-//    $dain=isset($this->post['good']) && $this->post['good'] !=="" ? $this->post['good']:"";
-//    if($type==2){
-//       // var_dump($dain);
-//        if($dain==""||empty($dain)){
-//            return error_show(1002,"商品不能为空");
-//        }
-//    }else{
-//        if($type==1) {
-//
-//            $dain= Db::name("good_type")->alias("b")->join("good a","a.good_code = b.good_code","left")
-//                ->join("good_stock c","c.good_type_code = b.type_code","left")->where(['c.wsm_code'=>$wsm_code,'b.is_del'=>0,'a.is_del'=>0])->where("c.is_del=0 or c.is_del is null")
-//                ->field("b.type_code,a.good_name")->select();
-//            //var_dump($dain);
-//        }
-//        if($dain==""){
-//            return error_show(1003,"商品不能为空");
-//        }
-//    }
-    Db::startTrans();
-    try {
-        $var = [
-            "wsm_code" => $wsm_code,
-            "type" => $type,
-            "apply_id" => $rm,
-            "apply_name" => $ri,
-            "remark" => $remark,
-            "updatetime" => date("Y-m-d H:i:s")
-        ];
-        $up = Db::name('good_check')->where(['id'=>$id,'is_del' => 0])->save($var);
-//            $dn =[];
-//            if($up>0){
-//                foreach ($dain as $value){
-//                    $st=Db::name("good_type")->alias("b")->join("good a","a.good_code = b.good_code","left")
-//                        ->join("good_stock c","c.good_type_code = b.type_code","left")->where(['c.wsm_code'=>$wsm_code,'good_type_code'=>$value['type_code'],'b.is_del'=>0,'a.is_del'=>0])->where("c.is_del=0 or c.is_del is null")
-//                        ->field("b.type_code,a.good_name,c.wsm_code,c.wait_in_stock,c.wait_out_stock,c.usable_stock,c.good_type_code,a.original_price")->find();
-//                    $temp=[];
-//                    $temp['good_name']=$st['good_name'];
-//                    $temp['origin_price']=$st['original_price'];
-//                    $temp['good_type_code']=$st['good_type_code'];
-//                    $temp['origin_num']=$st['usable_stock'];
-//                    $temp['check_num']=0;
-//                    $temp['diff_num']=0;
-//                    $temp['status']=0;
-//                    $temp['remark']="";
-//                    $temp['is_del']=0;
-//                    $temp['check_time']=date('Y-m-d H:i:s');
-//                    $temp['check_code']=$eid['check_code'];
-//                    $temp['addtime']=date("Y-m-d H:i:s");
-//                    $temp['updatetime']=date("Y-m-d H:i:s");
-//                    $dn[] =$temp;
-//                }
-//                $np = Db::name('check_item')->where(['check_code'=>$eid['check_code'],'is_del'=>0])->update(['is_del'=>1,'updatetime'=>date('Y-m-d H:i:s')]);
-//               $io = db::name('check_item')->insertAll($up);
-               // var_dump(Db::name('check_item')->getLastSql());
-                if ($up) {
-                    $orde = ["order_code"=>$eid['check_code'],"status"=>$eid['status'],"action_remark"=>'',"action_type"=>"edit"];
-                    ActionLog::logAdd($this->post['token'],$orde,'qrd',$eid['status'],$orde);
-                    Db::commit();
-                    return error_show(0, "盘点更新成功");
-                }
+	public function list()
+	{
+	    $page = isset($this->post['page']) && $this->post['page'] !== "" ? intval($this->post['page']) : "1";
+	    $size = isset($this->post['size']) && $this->post['size'] !== "" ? intval($this->post['size']) : "10";
+	    $where = [['a.is_del',"=",0],['b.is_del',"=",0]];
+	    $start= isset($this->post['start']) && $this->post['start'] !== "" ? $this->post['start']:"";
+	    if ($start !="") {
+	      //  $where["a.addtime"]=Db::raw(">= '{$start}'");
+	        $where[]=['a.addtime',">=",$start];
+	    }
+	    $end = isset($this->post['end']) && $this->post['end'] !== "" ? $this->post['end'] :"";
+	    if($end !=""){
+	      //  $where["a.addtime"] = Db::raw("<= '{$end}'");
+	        $where[]=['a.addtime',"<=",$end];
+	    }
+	    $check_code = isset($this->post['check_code']) && $this->post['check_code'] !== "" ? trim($this->post['check_code']) : "";
+	    if ($check_code !== "") {
+	       // $where['a.check_code'] = Db::raw("like '%$check_code%'");
+	        $where[]=['a.check_code',"like","%$check_code%"];
+	    }
+	    $wsm_code = isset($this->post['wsm_code']) && $this->post['wsm_code'] !== "" ? trim($this->post['wsm_code']) : "";
+	    if ($wsm_code  !== "") {
+	      //  $where['a.wsm_code'] =  Db::raw("like '%$wsm_code%'");
+	        $where[]=['a.wsm_code',"like","%$wsm_code%"];
+	    }
+	    $apply_name = isset($this->post['apply_name']) && $this->post['apply_name'] !== "" ? trim($this->post['apply_name']) : "";
+	    if ($apply_name !== "") {
+	     //   $where['a.apply_name'] = $apply_name;
+	        $where[]=['a.apply_name',"like","%$apply_name%"];
+	    }
+	    $type = isset($this->post['type']) && $this->post['type'] !== "" ? trim($this->post['type']) : "";
+	    if ($type !== "") {
+	       // $where['a.type'] = $type;
+	        $where[]=['a.type',"=",$type];
+	    }
+	    $apply_id = isset($this->post['apply_id']) && $this->post['apply_id'] !== "" ? intval($this->post['apply_id']) : "";
+	    if ($apply_id!== "") {
+	       // $where['a.apply_id'] = $apply_id;
+	        $where[]=['a.apply_id',"=",$apply_id];
+	    }
+	    $status= isset($this->post['status']) && $this->post['status'] !== "" ? intval($this->post['status']) : "";
+	    if ($status !== "") {
+	       // $where['a.status '] = $status;
+	        $where[]=['a.status',"=",$status];
+	    }
+	    $companyNo = isset($this->post['companyNo']) && $this->post['companyNo'] !== "" ? trim($this->post['companyNo']) : "";
+	    if ($companyNo !== "") {
+	        $condition[]=["a.companyNo ","=",$companyNo ];
+	    }
+	    $count = Db::name('good_check')->alias('a')->join("warehouse_info b","a.wsm_code = b.wsm_code","left")
+	        ->join("supplier v","v.code=b.supplierNo","left")
+	        ->where($where)->count();
+	    $total = ceil($count / $size);
+	    $page = $page <= $total ? $page : $total;
+	    $list = Db::name('good_check')->alias('a')->join("warehouse_info b","a.wsm_code = b.wsm_code","left")
+	        ->join("supplier v","v.code=b.supplierNo","left")
+	        ->field("a.status,a.apply_id,a.apply_name,a.type,a.addtime,a.wsm_code,a.check_code,b.name,a.id,v.name as 'caname',v.code")->where($where)->page($page,$size)->order("a.id desc")->select();
+	    $data=[];
+	    foreach ($list as $key=>$value){
+	        $value['rename'] ='';
+	        if($value['apply_id']!=0){
+	            $depart = Db::name("depart_user")->alias("a")->leftJoin("company_item b","a.itemid = b.id")->where(['a.uid'=>$value['apply_id'],'a.is_del'=>0])
+	                ->column('b.name');
+	           // var_dump(Db::name("depart_user")->getLastSql());
+	            $value['rename'] =implode(",",$depart);
+	        }
+	        $data[] = $value;
+	    }
+	    return app_show(0,"获取成功",['count'=>$count,'list'=>$data]);
 
-        Db::rollback();
-        return error_show(1003,"盘点更新失败");
-    } catch (\Exception $e) {
-        Db::rollback();
-        return error_show(1005, $e->getMessage());
-    }
-}
+	    }
+	public function goodlist(){
+	    $page = isset($this->post['page']) && $this->post['page'] !=="" ? intval($this->post['page']) :"1";
+	    $size = isset($this->post['size']) && $this->post['size'] !=="" ? intval($this->post['size']) :"10";
+	    $where = ['is_del'=>0];
+	    $id = isset($this->post['id']) && $this->post['id'] !=="" ? intval($this->post['id']) :"";
+	    if($id==""){
+	        return error_show(1002,"参数id不能为空");
+	    }
+	    $fo = Db::name('good_check')->alias('a')->join('warehouse_info b',"b.wsm_code=a.wsm_code","left")
+	        ->join('supplier c',"c.code=b.supplierNo","left")->field("c.name,c.code,a.*")
+	        ->where(['a.id'=>$id,'a.is_del'=>0])->find();
+	    if(empty($fo)){
+	        return error_show(1003,"未找到盘点信息");
+	    }
+	    if ($fo['check_code'] !== "") {
+	        $where['check_code'] = $fo['check_code'];
+	    }
+	    $count = Db::name('check_item')->where($where)->count();
+	    $total = ceil($count / $size);
+	    $page = $page >= $total ?  $total: $page;
+	    $list = Db::name('check_item')->where($where)->page($page,$size)->select();
+	    return app_show(0,"获取成功",['count'=>$count,'list'=>$list]);
+	}
+	public function create(){
+	    $token =isset($this->post['token']) && $this->post['token'] !=="" ? trim($this->post['token']) :"";
+	    $wsm_code = isset($this->post['wsm_code']) && $this->post['wsm_code'] !=="" ? trim($this->post['wsm_code']):"";
+	    if($wsm_code==""){
+	        return error_show(1002,"盘点仓库编号不能为空");
+	    }
+	    $type = isset($this->post['type']) && $this->post['type'] !=="" ? intval($this->post['type']) :"";
+	    if($type==""){
+	        return error_show(1002,"盘点类型不能为空");
+	    }
+	    $companyNo = isset($this->post['companyNo']) && $this->post['companyNo'] !=="" ? trim($this->post['companyNo']) :"";
+	    if($companyNo==""){
+	        return error_show(1002,"参数companyNo不能为空");
+	    }
+	    $company =Db::name("business")->where(['companyNo'=>$companyNo,"is_del"=>0])->find();
+	    if($company==false){
+	        return error_show(1002,"未找到业务公司");
+	    }
+	    $check_code = makeNo("CK");
+	    $apply_id=GetUserInfo($token);
+	    if(empty($apply_id)||$apply_id['code']!=0){
+	        return error_show(1002,"申请人数据不存在");
+	    }
+	    $rm= isset($apply_id["data"]['id']) ?  $apply_id["data"]['id'] : "";
+	    $ri= isset($apply_id["data"]['nickname']) ?  $apply_id["data"]['nickname'] : "";
+	    $status = isset($this->post['status']) && $this->post['status'] !=="" ? intval($this->post['status']) :"0";
+	    $remark = isset($this->post['remark']) && $this->post['remark'] !=="" ? intval($this->post['remark']) :"";
+	    Db::startTrans();
+	    try{
+	        $data=[
+	            "check_code"=>$check_code,
+	            "wsm_code"=>$wsm_code,
+	            "type"=>$type,
+	            "status"=>$status,
+	            "companyNo"=>$companyNo,
+	            "remark"=>$remark,
+	            "apply_id"=>$rm,
+	            "apply_name"=>$ri,
+	            "is_del"=>0,
+	            "addtime"=>date('Y-m-d H:i:s'),
+	            "updatetime"=>date("Y-m-d H:i:s")
+	        ];
+	        $da= Db::name('good_check')->insert($data,true);
+	        if($da){
+	            $orde = ["order_code"=>$check_code,"status"=>$data['status'],"action_remark"=>'',"action_type"=>"create"];
+	            ActionLog::logAdd($this->post['token'],$orde,'PDD',$data['status'],$orde);
+	            $process=["order_code"=>$check_code,"order_id"=>$da,"order_status"=>$data['status'],"order_type"=>'PDD',"before_status"=>$data['status']];
+	            ProcessOrder::AddProcess($this->post['token'],$process);
+	           Db::commit();
+	            return error_show(0,"盘点创建成功");
+	        }else{
+	            Db::rollback();
+	           return error_show(1002,"创建失败");
+	        }
+	    }catch (\Exception $e){
+	        Db::rollback();
+	        return error_show(1005,$e->getMessage());
+	   }
+	    }
+	public function info(){
+	    $id = isset($this->post['id']) && $this->post['id'] !=="" ? intval($this->post['id']) :"";
+	    if($id==""){
+	        return error_show(1002,"参数id不能为空");
+	    }
+	    $fo = Db::name('good_check')->alias('a')->join('warehouse_info b',"b.wsm_code=a.wsm_code","left")
+	        ->join('supplier c',"c.code=b.supplierNo","left")->field("c.name,c.code,a.*")
+	        ->where(['a.id'=>$id,'a.is_del'=>0])->find();
+	    if(empty($fo)){
+	        return error_show(1003,"未找到盘点信息");
+	    }
+	    $fi = Db::name('check_item')->where(['check_code'=>$fo['check_code'],'is_del'=>0])->select();
+	    $fo['item']=$fi;
+	    if(empty($fo)){
+	        return error_show(1002,"未找到盘点编号");
+	    }else{
+	        return app_show(0,"获取成功",$fo);
+	    }
+	}
+	public function edit()
+	{
+	    $token =isset($this->post['token']) && $this->post['token'] !=="" ? trim($this->post['token']) :"";
+	    $id = isset($this->post['id']) && $this->post['id'] !== "" ? intval($this->post['id']) : "";
+	    $eid = Db::name('good_check')->where(['id' => $id, 'is_del' => 0])->find();
+	    if ($eid ==="") {
+	        return error_show(1002, "未找到盘点编号信息");
+	    }
+	    $wsm_code = isset($this->post['wsm_code']) && $this->post['wsm_code'] !== "" ? trim($this->post['wsm_code']) : "";
+	    if ($wsm_code == "") {
+	        return error_show(1002, "盘点仓库不能为空");
+	    }
+	    $type = isset($this->post['type']) && $this->post['type'] !== "" ? trim($this->post['type']) : "";
+	    $remark = isset($this->post['remark']) && $this->post['remark'] !== "" ? trim($this->post['remark']) : "";
+	    if ($type == "") {
+	        return error_show(1002, "盘点类型不能为空");
+	    }
+	    $apply_id=GetUserInfo($token);
+	    if(empty($apply_id)||$apply_id['code']!=0){
+	        return error_show(1002,"申请人数据不存在");
+	    }
+	    $rm= isset($apply_id["data"]['id']) ?  $apply_id["data"]['id'] : "";
+	    $ri= isset($apply_id["data"]['nickname']) ?  $apply_id["data"]['nickname'] : "";
+	//    $dain=isset($this->post['good']) && $this->post['good'] !=="" ? $this->post['good']:"";
+	//    if($type==2){
+	//       // var_dump($dain);
+	//        if($dain==""||empty($dain)){
+	//            return error_show(1002,"商品不能为空");
+	//        }
+	//    }else{
+	//        if($type==1) {
+	//
+	//            $dain= Db::name("good_type")->alias("b")->join("good a","a.good_code = b.good_code","left")
+	//                ->join("good_stock c","c.good_type_code = b.type_code","left")->where(['c.wsm_code'=>$wsm_code,'b.is_del'=>0,'a.is_del'=>0])->where("c.is_del=0 or c.is_del is null")
+	//                ->field("b.type_code,a.good_name")->select();
+	//            //var_dump($dain);
+	//        }
+	//        if($dain==""){
+	//            return error_show(1003,"商品不能为空");
+	//        }
+	//    }
+	    Db::startTrans();
+	    try {
+	        $var = [
+	            "wsm_code" => $wsm_code,
+	            "type" => $type,
+	            "apply_id" => $rm,
+	            "apply_name" => $ri,
+	            "remark" => $remark,
+	            "updatetime" => date("Y-m-d H:i:s")
+	        ];
+	        $up = Db::name('good_check')->where(['id'=>$id,'is_del' => 0])->save($var);
+	//            $dn =[];
+	//            if($up>0){
+	//                foreach ($dain as $value){
+	//                    $st=Db::name("good_type")->alias("b")->join("good a","a.good_code = b.good_code","left")
+	//                        ->join("good_stock c","c.good_type_code = b.type_code","left")->where(['c.wsm_code'=>$wsm_code,'good_type_code'=>$value['type_code'],'b.is_del'=>0,'a.is_del'=>0])->where("c.is_del=0 or c.is_del is null")
+	//                        ->field("b.type_code,a.good_name,c.wsm_code,c.wait_in_stock,c.wait_out_stock,c.usable_stock,c.good_type_code,a.original_price")->find();
+	//                    $temp=[];
+	//                    $temp['good_name']=$st['good_name'];
+	//                    $temp['origin_price']=$st['original_price'];
+	//                    $temp['good_type_code']=$st['good_type_code'];
+	//                    $temp['origin_num']=$st['usable_stock'];
+	//                    $temp['check_num']=0;
+	//                    $temp['diff_num']=0;
+	//                    $temp['status']=0;
+	//                    $temp['remark']="";
+	//                    $temp['is_del']=0;
+	//                    $temp['check_time']=date('Y-m-d H:i:s');
+	//                    $temp['check_code']=$eid['check_code'];
+	//                    $temp['addtime']=date("Y-m-d H:i:s");
+	//                    $temp['updatetime']=date("Y-m-d H:i:s");
+	//                    $dn[] =$temp;
+	//                }
+	//                $np = Db::name('check_item')->where(['check_code'=>$eid['check_code'],'is_del'=>0])->update(['is_del'=>1,'updatetime'=>date('Y-m-d H:i:s')]);
+	//               $io = db::name('check_item')->insertAll($up);
+	               // var_dump(Db::name('check_item')->getLastSql());
+	                if ($up) {
+	                    $orde = ["order_code"=>$eid['check_code'],"status"=>$eid['status'],"action_remark"=>'',"action_type"=>"edit"];
+	                    ActionLog::logAdd($this->post['token'],$orde,'qrd',$eid['status'],$orde);
+	                    Db::commit();
+	                    return error_show(0, "盘点更新成功");
+	                }
+	        Db::rollback();
+	        return error_show(1003,"盘点更新失败");
+	    } catch (\Exception $e) {
+	        Db::rollback();
+	        return error_show(1005, $e->getMessage());
+	    }
+	}
 
     /**
      * @return \think\response\Json|void
@@ -557,11 +522,12 @@ public function edit()
         if(empty($fo)){
             return error_show(1003,"未找到盘点信息");
         }
-        $list = Db::name("good_basic")->alias("b")
-            ->join("good_stock c","c.spuCode=b.spuCode","left")
-            ->where(['c.wsm_code'=>$fo['wsm_code'],"b.is_del"=>0,"c.is_del"=>0])->field("b.spuCode'商品编码',
+        $list = Db::name("good_stock_info")->alias("d")
+            ->join("good_stock c","c.id=d.stockid and d.balance_num>0","left")
+            ->join("good b","c.spuCode=b.spuCode","left")
+            ->where(['c.wsm_code'=>$fo['wsm_code'],"b.is_del"=>0,"c.is_del"=>0])->field("d.bnCode '商品批次号',b.spuCode'商品编码',
             b.good_name '商品名称',b.craft_desc '商品描述',b.brand_id '品牌',b.good_unit '单位',b.supplierNo '供应商编码','' as '供应商名称','' as  '一级分类','' as '二级分类','' as  '三级分类',
-            b.addtime '新建时间',c.wsm_code '仓库编码','' as '仓库名称',c.usable_stock '可用库存','' as '盘点库存'")
+            b.addtime '新建时间',c.wsm_code '仓库编码','' as '仓库名称',c.usable_stock '可用库存',d.balance_num '批次库存数','' as '盘点库存'")
             ->select();
         $data=[];
         foreach ($list as $key=>$value){
@@ -605,22 +571,24 @@ public function edit()
         $insert=[];
         foreach ($data as $value){
             if($value["value0"]==""){
-                return error_show(1003,"商品编号不能为空");
+                return error_show(1003,"商品批次编号不能为空");
             }
-            if($value["value14"]===""){
+            if($value["value16"]===""){
                 continue;
             }
-            $stock = Db::name("good_stock")->where(["spuCode"=>$value["value0"],"wsm_code"=>$fo['wsm_code'], "is_del"=>0])->find();
-            $stock_num = isset($stock) ? $stock['usable_stock']:0;
+            $stock = Db::name("good_stock")->alias("a")
+            ->join("good_stock_info b","a.id=b.stockid","left")
+            ->where(["a.spuCode"=>$value["value1"],"wsm_code"=>$fo['wsm_code'],"bnCode"=>$value['value0'],"is_del"=>0])->find();
+            $stock_num = isset($stock) ? $stock['balance_num']:0;
             $insert[]=[
-                "spuCode"=>$value["value0"],
-                "good_name"=>$value["value1"],
+                "spuCode"=>$value["value1"],
+                "bnCode"=>$value["value0"],
+                "good_name"=>$value["value2"],
                 "origin_price"=>0,
-                "origin_num"=>isset($stock) ? $stock['usable_stock']:0,
-                "check_num"=>$value["value14"],
-                "is_profit"=>intval($value["value14"])>=$stock_num ?0:1,
-                "diff_num"=>intval($value["value14"])>=$stock_num ?intval($value["value14"])
-                    -$stock_num:$stock_num-intval($value["value14"]),
+                "origin_num"=>isset($stock) ? $stock['balance_num']:0,
+                "check_num"=>$value["value16"],
+                "is_profit"=>intval($value["value16"])>=$stock_num ?0:1,
+                "diff_num"=>intval($value["value16"])>=$stock_num ?intval($value["value16"])-$stock_num:$stock_num-intval($value["value16"]),
                 'addtime'=>date("Y-m-d H:i:s"),
                 'updatetime'=>date("Y-m-d H:i:s"),
                 "check_code"=>$fo['check_code']

+ 148 - 81
app/admin/controller/Orderback.php

@@ -5,7 +5,7 @@ namespace app\admin\controller;
 
 use app\admin\model\ActionLog;
 use app\admin\model\GoodLog;
-use app\admin\model\ProcessOrder;
+use app\admin\model\GoodStockInfo;use app\admin\model\ProcessOrder;
 use think\App;
 use think\Exception;
 use think\facade\Db;
@@ -68,7 +68,7 @@ class Orderback extends Base
         $condition='';
         if(!empty($role['write']) && $this->uid!=""){
             // $where[]=["a.apply_id","in",$role['write']];
-            $condition .="cgderid = {$this->uid} or apply_id in (".implode(',',$role['write']).")";
+            $condition .="cgderid = {$this->uid} or apply_id in (".implode(',',$role['write']).") or person_id={$this->uid}";
         }
 //        if(!empty($role['platform']) ){
 //            $where[]=["platform_id","in",$role['platform']];
@@ -400,7 +400,6 @@ class Orderback extends Base
         });
 
         if (!$val->check($param)) return error_show(1004, $val->getError());
-//        $good =Db::name("good")
         Db::startTrans();
         try {
 
@@ -425,7 +424,8 @@ class Orderback extends Base
                 Db::rollback();
                 return error_show(1004,"未找到售后单数据");
             }
-
+			$sabebn =Db::name("sale_info")->where([["orderCode",'=',$info['orderCode']],["num",">",0]])->select()
+			->toArray();
             if($param['can_sell_num']!=0&& $param['can_sell_wsm']!=''){
                     if($sale['is_stock']==1){ //库存品退回原仓库 备库单释放数量 采购单
                         $param['can_sell_wsm'] = $out['wsm_code'];
@@ -449,9 +449,43 @@ class Orderback extends Base
                     if($st_up==false){
                         return error_show(1005,'可售商品入库失败');
                     }
-                $good_data=['good_log_code'=>$param['thNo'],"stock_id"=>isset($stock['id'])? $stock['id']:Db::name("good_stock")->getLastInsID(),"type"=>1,'stock'=>$param['can_sell_num'],"stock_name"=>"usable_stock"];
+                    $stockid = isset($stock['id']) ? $stock['id'] : Db::name("good_stock")->getLastInsID();
+
+                        if(!empty($sabebn)){
+                        	$total_num =$param['can_sell_num'];
+                        	foreach ($sabebn as $ve){
+                        		$tempnum=0;
+                        		if ($total_num==0) break;
+                        		if($total_num>=$ve['num']){
+                        			$tempnum = $ve['num'];
+                        			$total_num-=$ve['num'];
+                        			$ve['num']=0;
+                        		}else{
+                        		    $tempnum = $total_num;
+                        			$ve['num']-=$total_num;
+                        			$total_num=0;
+                        		}
+                        		$bnin=GoodStockInfo::ReturnAdd($stockid,$ve['bnCode'],$tempnum,$ve['stockid']);
+                        		if($bnin==false){
+                        			 Db::rollback();
+                                    return error_show(1005, '可售商品Bn库存数入库失败');
+                        		}
+								$up=Db::name("sale_info")->save($ve);
+                        		if($up==false){
+                        			 Db::rollback();
+                                    return error_show(1005, '可售商品Bn库存数入库失败');
+                        		}
+								$bnin=GoodStockInfo::ReturnBn($info['returnCode'],$ve['id'],$tempnum);
+                        		if($bnin==false){
+                        			 Db::rollback();
+                                    return error_show(1005, '可售商品Bn库存数入库失败');
+                        		}
+                        	}
+                        }
+                $good_data=['good_log_code'=>$param['thNo'],"stock_id"=> $stockid,"type"=>1,'stock'=>$param['can_sell_num'],"stock_name"=>"usable_stock"];
                 GoodLog::LogAdd($this->post['token'],$good_data,'RKTHD');
              }
+
             if($param['defective_num']!=0&& $param['defective_wsm']!=''){
                 $defective = Db::name("good_stock")->where(["spuCode"=>$info['good_code'],'wsm_code'=>$param['defective_wsm']])->find();
                 if(empty($defective)) {
@@ -476,6 +510,39 @@ class Orderback extends Base
                     Db::rollback();
                     return error_show(1005,'次品商品入库失败');
                 }
+                $stockid = isset($defective['id']) ? $defective['id'] : Db::name("good_stock")->getLastInsID();
+                $sabebn =Db::name("sale_info")->where(["orderCode"=>$info['orderCode']])->select()->toArray();
+                 if(!empty($sabebn)){
+                        	$total_num =$param['defective_num'];
+                        	foreach ($sabebn as $ve){
+                        		$tempnum=0;
+                        		if ($total_num==0) break;
+                        		if($total_num>=$ve['num']){
+                        			$tempnum = $ve['num'];
+                        			$total_num-=$ve['num'];
+                        			$ve['num']=0;
+                        		}else{
+                        		    $tempnum = $total_num;
+                        			$ve['num']-=$total_num;
+                        			$total_num=0;
+                        		}
+                        	    $bnin=GoodStockInfo::ReturnAdd($stockid,$ve['bnCode'],$tempnum,$ve['stockid']);
+                        		if($bnin==false){
+                        			 Db::rollback();
+                                    return error_show(1005, '可售商品Bn库存数入库失败');
+                        		}
+								$up=Db::name("sale_info")->save($ve);
+                        		if($up==false){
+                        			 Db::rollback();
+                                    return error_show(1005, '可售商品Bn库存数入库失败');
+                        		}
+								$bnin=GoodStockInfo::ReturnBn($info['returnCode'],$ve['id'],$tempnum);
+                        		if($bnin==false){
+                        			 Db::rollback();
+                                    return error_show(1005, '可售商品Bn库存数入库失败');
+                        		}
+                        	}
+                        }
                 $good_data=['good_log_code'=>$param['thNo'],"stock_id"=>isset($defective['id'])? $defective['id']:Db::name("good_stock")->getLastInsID(),"type"=>1,'stock'=>$param['defective_num'],"stock_name"=>"usable_stock"];
                 GoodLog::LogAdd($this->post['token'],$good_data,'RKTHD');
             }
@@ -502,55 +569,55 @@ class Orderback extends Base
                         Db::rollback();
                         return error_show(1005,'销售单订单更新失败');
                     }
-                    $ordernum =Db::name("order_num")->where(['orderCode'=>$info['orderCode']])->find();
-                    if($ordernum==false){
-                        Db::rollback();
-                        return error_show(1005,'未找到关联采购单');
-                    }
-                    $ordernum['send_num']-=$info['return_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']*$param['can_sell_num'],2);
-                    $cgd['th_num']+=  $param['can_sell_num'];
-                    if($cgd['th_num']==$cgd['send_num']&& $cgd['wsend_num']==0){
-                        $cgd['status']=4;
-                    }
-                    $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,'采购单数据更新失败');
-                    }
-                    if($cgd['bkcode']!=""){
-                        $bk=Db::name("purchease_order")->where(["bkcode"=>$cgd['bkcode'],"order_type"=>1,"order_source"=>0,"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"=>1,"is_del"=>0])->where("order_source","<>",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,'备库单库存数据释放失败');
-                        }
-                    }
+//                    $ordernum =Db::name("order_num")->where(['orderCode'=>$info['orderCode']])->find();
+//                    if($ordernum==false){
+//                        Db::rollback();
+//                        return error_show(1005,'未找到关联采购单');
+//                    }
+//                    $ordernum['send_num']-=$info['return_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']*$param['can_sell_num'],2);
+//                    $cgd['th_num']+=  $param['can_sell_num'];
+//                    if($cgd['th_num']==$cgd['send_num']&& $cgd['wsend_num']==0){
+//                        $cgd['status']=4;
+//                    }
+//                    $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,'采购单数据更新失败');
+//                    }
+//                    if($cgd['bkcode']!=""){
+//                        $bk=Db::name("purchease_order")->where(["bkcode"=>$cgd['bkcode'],"order_type"=>1,"order_source"=>0,"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"=>1,"is_del"=>0])->where("order_source","<>",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($returninfo['return_tag']==1){
                         $sale['th_num']+= $info['return_num'];
@@ -604,33 +671,33 @@ class Orderback extends Base
                             Db::rollback();
                             return error_show(1005,'销售单订单更新失败');
                         }
-                        $ordernum =Db::name("order_num")->where(['orderCode'=>$info['orderCode']])->find();
-                        if($ordernum==false){
-                            Db::rollback();
-                            return error_show(1005,'未找到关联采购单');
-                        }
-                        $ordernum['send_num']-=$info['return_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']*$param['can_sell_num'],2);
-                        $cgd['th_num']+=  $param['can_sell_num'];
-                        if($cgd['th_num']==$cgd['send_num']&& $cgd['wsend_num']==0){
-                            $cgd['status']=4;
-                        }
-                        $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,'采购单数据更新失败');
-                        }
+//                        $ordernum =Db::name("order_num")->where(['orderCode'=>$info['orderCode']])->find();
+//                        if($ordernum==false){
+//                            Db::rollback();
+//                            return error_show(1005,'未找到关联采购单');
+//                        }
+//                        $ordernum['send_num']-=$info['return_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']*$param['can_sell_num'],2);
+//                        $cgd['th_num']+=  $param['can_sell_num'];
+//                        if($cgd['th_num']==$cgd['send_num']&& $cgd['wsend_num']==0){
+//                            $cgd['status']=4;
+//                        }
+//                        $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,'采购单数据更新失败');
+//                        }
                     }
                 }
             }

+ 39 - 128
app/admin/controller/Purchin.php

@@ -3,7 +3,7 @@ namespace app\admin\controller;
 
 use app\admin\model\ActionLog;
 use app\admin\model\GoodLog;
-use app\admin\model\ProcessOrder;
+use app\admin\model\GoodStockInfo;use app\admin\model\ProcessOrder;
 use app\BaseController;
 use think\facade\Db;
 use think\App;
@@ -173,11 +173,8 @@ class Purchin extends Base
            return error_show(1005,"采购单未发货");
        }
 
-        $wsm_in_code = makeNo("CF");
-//       $wsm_code = isset($this->post['wsm_code'])&&$this->post['wsm_code']!="" ? trim($this->post['wsm_code']):"";
-//       if($wsm_code==""){
-//           return error_show(1004,"参数 wsm_code 不能为空");
-//       }
+       $wsm_in_code = makeNo("CF");
+       $bn_code = makeNo("BN");
        $wsminfo = Db::name("warehouse_info")->where(["wsm_code"=>$cgdinfo['wsm_code'],"is_del"=>0])->find();
        if(empty($wsminfo)){
            return error_show(1004,"未找到仓库信息");
@@ -208,24 +205,13 @@ class Purchin extends Base
         if($send_num>$cgdinfo['wsend_num']-$wsmin_num){
             return error_show(1009,"采购单剩余未发货数量不足");
         }
-//        if($cgdinfo['order_type']==1||$cgdinfo['order_type']==2 ){
-//            $goodinfo = Db::name("good_basic")->where(["spuCode"=>$cgdinfo['spuCode'],"is_del"=>0])->find();
-//            if($goodinfo==false){
-//                return error_show(1004,"商品数据未找到");
-//            }
-//            if($goodinfo['is_stock']==0){
-//                $status=4;
-//            }
-//        } else {
-//            $send_way = Db::name("good_zixun")->where(["spuCode" => $cgdinfo['spuCode'], "is_del" => 0])->value('send_way');
-//            if ($send_way) $status = 4;
-//        }
         if($sendtype==2 || $cgdinfo['order_type']!=1){
             $status=4;
         }
         $orin = [
             "wsm_in_code"=>$wsm_in_code,
             "cgdNo"=>$cgdNo,
+            "bnCode"=>$bn_code,
             "wsm_code"=>$cgdinfo['wsm_code'],
             "wsm_reaper"=>isset($recep)&& $recep['wsm_name']!=''? $recep['wsm_name']:"",
             "send_num"=>$send_num,
@@ -282,35 +268,25 @@ class Purchin extends Base
                             "addtime"=>date("Y-m-d H:i:s"),
                             "updatetime"=>date("Y-m-d H:i:s"),
                         ];
-                     //   $order = ["order_code"=>$good['spuCode'],"status"=>1,"action_remark"=>'',
-                        // "action_type"=>"create"];
-                    }else{
-                     //   $order = ["order_code"=>$good['spuCode'],"status"=>1,"action_remark"=>'',
-                        // "action_type"=>"edit"];
                     }
                     $good['wait_in_stock']-=$send_num;
-//                    if($good['presale_stock']>0){
-//                        if($good['presale_stock']>=$send_num){
-//                            $good['presale_stock']-=$send_num;
-//                            $good['wait_out_stock']+=$send_num;
-//                        }else{
-//                            $good['presale_stock']=0;
-//                            $good['usable_stock']+=$send_num-$good['presale_stock'];
-//                            $good['wait_out_stock']+=$good['presale_stock'];
-//                        }
-//                    }else{
-                        $good['usable_stock']+=$send_num;
-               //     }
-
+                    $good['usable_stock']+=$send_num;
                     $good['total_stock']=$good['usable_stock']+$good['wait_out_stock'];
                     $good['updatetime'] = date("Y-m-d H:i:s");
                     $upd=  Db::name("good_stock")->save($good);
+                    $stockid=$good['id']?? Db::name("good_stock")->getLastInsID();
                     //商品变动日志表,good_log_code字段存储采购单单号
-                    $good_data[]=['good_log_code'=>$wsm_in_code,"stock_id"=>isset($good['id'])? $good['id']:Db::name("good_stock")->getLastInsID(),"type"=>1,'stock'=>$send_num,"stock_name"=>"usable_stock"];
-                    $good_data[]=['good_log_code'=>$wsm_in_code,"stock_id"=>isset($good['id'])? $good['id']:Db::name("good_stock")->getLastInsID(),"type"=>2,'stock'=>$send_num,"stock_name"=>"wait_in_stock"];
+                    $good_data[]=['good_log_code'=>$wsm_in_code,"stock_id"=>$stockid,"type"=>1,'stock'=>$send_num,"stock_name"=>"usable_stock"];
+                    $good_data[]=['good_log_code'=>$wsm_in_code,"stock_id"=>$stockid,"type"=>2,'stock'=>$send_num,"stock_name"=>"wait_in_stock"];
                     if($upd){
-                        GoodLog::LogAdd($this->post['token'],$good_data,'RKD');
+                    	GoodLog::LogAdd($this->post['token'],$good_data,'RKD');
+                        //todo:: 新增bn编号库存数据修改
                         if($cgdinfo['order_type']==1){
+                        	$bnin=GoodStockInfo::AddBn($stockid,$bn_code,$send_num,$cgdinfo['good_price']);
+	                        if($bnin==false){
+	                            Db::rollback();
+	                            return error_show(1004,"库存bn数据新增失败");
+	                        }
                             $bk =Db::name("order_bk")->where(['cgdNo'=>$cgdinfo['cgdNo']])->find();
                             if($bk==false){
                                 $bk=[
@@ -342,8 +318,7 @@ class Purchin extends Base
                         if($cgdinfo['send_status']==3 && $cgdinfo['order_type']!=1){
                             $send=Db::name("order_send")->where(["cgdNo"=>$cgdNo,"status"=>1])->column("outCode");
                             if(!empty($send)){
-                                $out =Db::name("order_out")->where(["outCode"=>$send,"status"=>0])->select()
-                                    ->toArray();
+                                $out =Db::name("order_out")->where(["outCode"=>$send,"status"=>0])->select()->toArray();
                                 if(!empty($out)){
                                     $up =Db::name("order_out")->where(["outCode"=>$send,"status"=>0])->update
                                     (["status"=>1,'wsm_code'=>$cgdinfo['wsm_code'],"updatetime"=>date('Y-m-d H:i:s')]);
@@ -352,7 +327,6 @@ class Purchin extends Base
                                         return error_show(1004,"出库单出库失败");
                                     }else{
                                         foreach ($out as $k => $v_outCode) {
-                                            //修改状态,添加待办
                                             ActionLog::logAdd($this->post['token'], [
                                                 "order_code" => $v_outCode['outCode'],//出库单号
                                                 "status" => 0,//这里的status是之前的值
@@ -389,8 +363,10 @@ class Purchin extends Base
                                         Db::rollback();
                                         return error_show(1004,"库存数量更新失败");
                                     }
-                                    $good_data[]=['good_log_code'=>$wsm_in_code,"stock_id"=>isset($good['id'])?$good['id']:Db::name("good_stock")->getLastInsID(),"type"=>1,'stock'=>$send_num,"stock_name"=>"wait_out_stock"];
-                                    $good_data[]=['good_log_code'=>$wsm_in_code,"stock_id"=>isset($good['id'])?$good['id']:Db::name("good_stock")->getLastInsID(),"type"=>1,'stock'=>$send_num,"stock_name"=>"usable_stock"];
+                                    $stockid= isset($good['id'])?$good['id']:Db::name("good_stock")->getLastInsID();
+
+                                    $good_data[]=['good_log_code'=>$wsm_in_code,"stock_id"=>$stockid,"type"=>1,'stock'=>$send_num,"stock_name"=>"wait_out_stock"];
+                                    $good_data[]=['good_log_code'=>$wsm_in_code,"stock_id"=>$stockid,"type"=>1,'stock'=>$send_num,"stock_name"=>"usable_stock"];
                                     GoodLog::LogAdd($this->post['token'],$good_data,'RKD');
                                     $sendp=Db::name("order_send")->where(["cgdNo"=>$cgdNo,"outCode"=>$send,"status"=>1])->save (["status"=>2]);
                                     if($sendp==false){
@@ -400,6 +376,7 @@ class Purchin extends Base
                                 }
                             }
                         }
+
                         ActionLog::logAdd($this->post['token'],$order,"CGD", $cgdinfo['status'],$cgdinfo);
                         $process = ["order_code" => $cgdNo, "order_id" => $cgdinfo['id'], "order_status" => $cgdinfo['status'], "order_type" => 'CGD', "before_status" => $order['status'], 'holder_id' => Db::name('supplier')->where(['code' => $cgdinfo['supplierNo'], 'is_del' => 0])->value('personid', 0)];
                         ProcessOrder::AddProcess($this->post['token'],$process);
@@ -679,29 +656,22 @@ class Purchin extends Base
                     }else{
                         $order = ["order_code"=>$good['spuCode'],"status"=>1,"action_remark"=>'', "action_type"=>"edit"];
                     }
-//                    $good['usable_stock']+=$info['wsm_num'];
                     $good['wait_in_stock']-=$info['wsm_num'];
-//                    if($good['presale_stock']>0){
-//                        if($good['presale_stock']>=$info['wsm_num']){
-//                            $good['presale_stock']-=$info['wsm_num'];
-//                            $good['wait_out_stock']+$info['wsm_num'];
-//                        }else{
-//                            $good['presale_stock']=0;
-//                            $good['usable_stock']+=$info['wsm_num']-$good['presale_stock'];
-//                            $good['wait_out_stock']+=$good['presale_stock'];
-//                        }
-//                    }else{
-                        $good['usable_stock']+=$info['wsm_num'];
-          //          }
-
+					$good['usable_stock']+=$info['wsm_num'];
                     $good['total_stock']=$good['usable_stock']+$good['wait_out_stock'];
                     $good['updatetime'] = date("Y-m-d H:i:s");
                     $upd=  Db::name("good_stock")->save($good);
+                    $stockid=$good['id']?? Db::name("good_stock")->getLastInsID();
                     //商品变动日志表,good_log_code字段存储入库单编号
                     $good_data[] = ['good_log_code' => $incode, "stock_id" => isset($good['id']) ? $good['id'] : Db::name("good_stock")->getLastInsID(), "type" => 1, 'stock' => $info['wsm_num'], "stock_name" => "usable_stock"];
                     $good_data[] = ['good_log_code' => $incode, "stock_id" => isset($good['id']) ? $good['id'] :
                         Db::name("good_stock")->getLastInsID(), "type" => 2, 'stock' => $info['wsm_num'], "stock_name" => "wait_in_stock"];
                     if($upd){
+                    	$bnin=GoodStockInfo::AddBn($stockid,$info['bnCode'],$info['wsm_num'],$cgdinfo['good_price']);
+                    	if($bnin==false){
+                    		Db::rollback();
+                            return error_show(1004,"库存bn数据新增失败");
+                    	}
                         GoodLog::LogAdd($this->post['token'],$good_data,'RKD');
                         Db::commit();
                         return app_show(0,'商品入库成功');
@@ -985,27 +955,12 @@ class Purchin extends Base
                                 "addtime"=>date("Y-m-d H:i:s"),
                                 "updatetime"=>date("Y-m-d H:i:s"),
                             ];
-                            $order = ["order_code"=>$good['spuCode'],"status"=>1,"action_remark"=>'',
-                                "action_type"=>"create"];
-
+                            $order = ["order_code"=>$good['spuCode'],"status"=>1,"action_remark"=>'',"action_type"=>"create"];
                         }else{
                             $order = ["order_code"=>$good['spuCode'],"status"=>1,"action_remark"=>'', "action_type"=>"edit"];
                         }
-                    $good['wait_in_stock']-=$return['wsm_num']+$return['return_num']-$return['reissue_num'];
-//                        if($good['presale_stock']>0){
-//                            if($good['presale_stock']>=$return['wsm_num']){
-//                                $good['presale_stock']-=$return['wsm_num'];
-//                                $good['wait_out_stock']+=$return['wsm_num'];
-//                            }else{
-//                                $good['presale_stock']=0;
-//                                $good['usable_stock']+=$return['wsm_num']-$good['presale_stock'];
-//                                $good['wait_out_stock']+=$good['presale_stock'];
-//                            }
-//                        }else{
-                            $good['usable_stock']+=$return['wsm_num'];
-//                        }
-//                        $good['usable_stock']+=$return['wsm_num'];
-//                        $good['wait_in_stock']-=$return['wsm_num']+$return['return_num']-$return['reissue_num'];
+                        $good['wait_in_stock']-=$return['wsm_num']+$return['return_num']-$return['reissue_num'];
+						$good['usable_stock']+=$return['wsm_num'];
                         $good['total_stock']=$good['usable_stock']+$good['wait_out_stock'];
                         $good['updatetime'] = date("Y-m-d H:i:s");
                         $upd=  Db::name("good_stock")->save($good);
@@ -1013,8 +968,14 @@ class Purchin extends Base
                             Db::rollback();
                             return error_show(1002,"库存更新失败");
                         }
-                        $good_data[]=['good_log_code' => $incode,"stock_id"=>isset($good['id'])? $good['id']:Db::name("good_stock")->getLastInsID(),"type"=>1, 'stock'=>$info['wsm_num'],"stock_name"=>"usable_stock"];
-                        $good_data[]=['good_log_code' => $incode,"stock_id"=>isset($good['id'])? $good['id']:Db::name("good_stock")->getLastInsID(),"type"=>2, 'stock'=>$good['wait_in_stock'],"stock_name"=>"wait_in_stock"];
+                        $stockid=$good['id']?? Db::name("good_stock")->getLastInsID();
+                        $bnin=GoodStockInfo::AddBn($stockid,$info['bnCode'],$return['wsm_num'],$cgdinfo['good_price']);
+                    	if($bnin==false){
+                    		Db::rollback();
+                            return error_show(1004,"库存bn数据新增失败");
+                    	}
+                        $good_data[]=['good_log_code' => $incode,"stock_id"=>$stockid,"type"=>1, 'stock'=>$info['wsm_num'],"stock_name"=>"usable_stock"];
+                        $good_data[]=['good_log_code' => $incode,"stock_id"=>$stockid,"type"=>2, 'stock'=>$good['wait_in_stock'],"stock_name"=>"wait_in_stock"];
                         GoodLog::LogAdd($this->post['token'],$good_data,'RKD');
 
                     $order = ["order_code"=>$cgdinfo['cgdNo'],"status"=>$cgdinfo['status'],"action_remark"=>'',"action_type"=>"edit"];
@@ -1033,7 +994,6 @@ class Purchin extends Base
                         Db::rollback();
                         return error_show(1004,"采购单数量更新失败");
                     }
-
                     $bk =Db::name("order_bk")->where(['cgdNo'=>$cgdinfo['cgdNo']])->lock(true)->find();
                     if($bk==false){
                         $bk=[
@@ -1120,55 +1080,6 @@ class Purchin extends Base
             $data[]=$value;
         }
         return app_show(0,"获取成功",['list'=>$data,'count'=>$count]);
-
     }
 
-//    public function ReturnStatus(){
-//        $incode = isset($this->post['wsm_in_code'])&&$this->post['wsm_in_code']!="" ? trim($this->post['wsm_in_code']) :"";
-//        if($incode==""){
-//            return error_show(1004,"参数wsm_in_code 不为空");
-//        }
-//        $info = Db::name("purchease_in")->where(['wsm_in_code'=>$incode,"is_del"=>0])->find();
-//        if(empty($info)){
-//            return error_show(1004,"未找到发货单数据");
-//        }
-//        $return = Db::name("purchease_return")->where(['wsm_in_code'=>$incode,"is_del"=>0])->find();
-//        if(empty($return)){
-//            return error_show(1004,"未找到数据");
-//        }
-//        if($info['status']<4){
-//            return error_show(1004,"入库单未完成");
-//        }
-//        $status = isset($this->post['status'])&&$this->post['status']!="" ?$this->post['status']:"";
-//        if($status==""){
-//            return error_show(1004,"参数status 不为空");
-//        }
-//        Db::startTrans();
-//        try{
-//            $data=[
-//                "status"=>$status,
-//                "updatetime"=>date("Y-m-d H:i:s")
-//            ];
-//            $up =Db::name("purchease_return")->where($return)->save($data);
-//            if($up){
-//                    $info['status']=$status==1?5:6;
-//                    $info['updatetime']=date("Y-m-d H:i:s");
-//                    $sa=Db::name("purchease_in")->save($info);
-//                    if($sa){
-//                        Db::commit();
-//                        return  app_show(0,"更新成功");
-//                    }else{
-//                        Db::rollback();
-//                        return  error_show(1004,"更新失败");
-//                    }
-//            }else{
-//                Db::rollback();
-//                return  error_show(1004,"更新失败");
-//            }
-//        }catch (\Exception $e){
-//            Db::rollback();
-//            return  error_show(1004,$e->getMessage());
-//        }
-//
-//    }
 }

+ 277 - 242
app/admin/controller/Reorder.php

@@ -4,7 +4,7 @@
 namespace app\admin\controller;
 
 use app\admin\model\GoodLog;
-use app\admin\model\ProcessOrder;
+use app\admin\model\GoodStockInfo;use app\admin\model\ProcessOrder;
 use think\facade\Db;
 use think\App;
 use app\admin\model\ActionLog;
@@ -85,6 +85,8 @@ class Reorder extends Base
                 "apply_name"=>$ri,
                 "cgderid"=>$goon['createrid'],
                 "cgder"=>$goon['creater'],
+                "person"=>$supplier['person']??'',
+                "person_id"=>$supplier['personid']??0,
                 "error_code"=>$errorCode,
                 "num"=>$thnum,
                 "total_fee"=>round($order['sale_price']*$thnum,2),
@@ -104,22 +106,9 @@ class Reorder extends Base
                 ActionLog::logAdd($this->post['token'],$stn,"XSTHD",$in['status'],$in);
                 $process=["order_code"=>$returnCode,"order_id"=>$create,"order_status"=>$in['status'],"order_type"=>'XSTHD',"before_status"=>0,'holder_id'=>$in['apply_id']];
                 ProcessOrder::AddProcess($this->post['token'],$process);
-
                 //维护台账信息
                 Db::execute("UPDATE `wsm_standing_book` SET `returnGoodCode`=CONCAT(IFNULL(`returnGoodCode`,''),',{$returnCode}'),`updatetime`='" . date('Y-m-d H:i:s') . "' WHERE `orderCode`='{$ordeCode}'");
 
-//                $rs = Db::name('standing_book')->where('orderCode', $ordeCode)->order('returnGoodCode')->find();
-//                if (!empty($rs)) {
-//                    if ($rs['returnGoodCode'] == '') Db::name('standing_book')->where('id', $rs['id'])->update(["returnGoodCode" => $returnCode, "updatetime" => date("Y-m-d H:i:s")]);
-//                    else {
-//                        unset($rs['id']);
-//                        $rs['standBookNo'] = makeNo('IO');
-//                        $rs['addtime'] = $rs['updatetime'] = date("Y-m-d H:i:s");
-//                        $rs['returnGoodCode'] = $returnCode;
-//                        Db::name('standing_book')->insert($rs);
-//                    }
-//                }
-
                 if($returnadr!=""){
                     $inf=[];
                     foreach ($returnadr as $val){
@@ -172,19 +161,20 @@ class Reorder extends Base
                                         Db::rollback();
                                         return error_show(1004, "地址发货单更新失败");
                                     }
-                                    $ordersend = Db::name("order_send")->where(["outCode" => $out['outCode']])->find();
-                                    if ($ordersend['send_num'] < $val['return_num']) {
-                                        Db::rollback();
-                                        return error_show(1004, "发货单发货数量不足");
-                                    }
-                                    $ordersend['send_num'] -= $val['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, "发货单更新失败");
-                                    }
+
+//                                    $ordersend = Db::name("order_send")->where(["outCode" => $out['outCode']])->find();
+//                                    if ($ordersend['send_num'] < $val['return_num']) {
+//                                        Db::rollback();
+//                                        return error_show(1004, "发货单发货数量不足");
+//                                    }
+//                                    $ordersend['send_num'] -= $val['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, "发货单更新失败");
+//                                    }
 
 //                                }
                         }
@@ -242,89 +232,105 @@ class Reorder extends Base
                         "order_status" =>$order['status'],"before_status"=>$lor
                     ]);
 
-                    $ordernum = Db::name("order_num")->where(['orderCode' => $ordeCode])->find();
-                    if ($ordernum == false) {
-                        Db::rollback();
-                        return error_show(1005, '未找到关联采购单');
-                    }
-                    $ordernum['send_num'] -= $thnum;
-                    $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'] * $thnum, 2);
-                    $cgd['th_num'] += $thnum;
-                    $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, '采购单数据更新失败');
-                    }
-                    if ($cgd['bkcode'] != "") {
-                        $bk = Db::name("purchease_order")->where(["bkcode" => $cgd['bkcode'], "order_type" => 1, "order_source" =>0, "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" =>
-                                1, "is_del" => 0])->where("order_source","<>",0)->field("sum(send_num)-sum(th_num) as num")
-                            ->find();
+//                    $ordernum = Db::name("order_num")->where(['orderCode' => $ordeCode])->find();
+//                    if ($ordernum == false) {
+//                        Db::rollback();
+//                        return error_show(1005, '未找到关联采购单');
+//                    }
+//                    $ordernum['send_num'] -= $thnum;
+//                    $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'] * $thnum, 2);
+//                    $cgd['th_num'] += $thnum;
+//                    $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, '采购单数据更新失败');
+//                    }
+//                    if ($cgd['bkcode'] != "") {
+//                        $bk = Db::name("purchease_order")->where(["bkcode" => $cgd['bkcode'], "order_type" => 1, "order_source" =>0, "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" =>
+//                                1, "is_del" => 0])->where("order_source","<>",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, '备库单库存数据释放失败');
+//                        }
+//                    }
 
-                        $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, '备库单库存数据释放失败');
-                        }
-                    }
-                    $stock = Db::name("good_stock")->where(["spuCode" => $order['good_code'], 'wsm_code' => $cgd['wsm_code']])
+					$saleinfo=Db::name("sale_info")->where([["orderCode","=",$ordeCode],["num",">",0]])->select()
+					->toArray();
+					if(empty($saleinfo)) {
+						Db::rollback();
+						return error_show(1005, '商品批次数据未找到');
+					}
+					$tempnum =$thnum;
+					foreach ( $saleinfo as $va){
+					if($tempnum ==0) break;
+					$stock = Db::name("good_stock")->where(["spuCode" => $order['good_code'], 'id' => $va['stockid']])
                         ->find();
-                    if (empty($stock)) {
-                        $stock = [
-                            "spuCode" => $order['good_code'],
-                            "wsm_code" => $cgd['wsm_code'],
-                            "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"),
-                        ];
-                    }
-//                    if($stock['presale_stock']>0){
-//                            if($stock['presale_stock']>=$thnum){
-//                                $stock['presale_stock']-=$thnum;
-//                            }else{
-//                                $stock['presale_stock']=0;
-//                                $stock['usable_stock']+=$thnum;
-//                                $stock['wait_out_stock'] -= ($thnum -$stock['presale_stock']);
-//                            }
-//                    }else{
-                        $stock['usable_stock']+=$thnum;
-                        $stock['wait_out_stock'] -= $thnum;
-              //      }
+					if($stock==false) {
+						Db::rollback();
+						return error_show(1005, '商品库存数据未找到');
+					}
+					if($va['num']>=$tempnum) {
+						$tnm = $tempnum;
+						$va['num']-= $tempnum;
+						$tempnum=0;
+					}else{
+						$tnm = $va['num'];
+						$tempnum -=$va['num'];
+						$va['num'] =0;
+					}
+                    $stock['usable_stock']+=$tnm;
+                    $stock['wait_out_stock'] -=$tnm;
                     $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' => $returnCode, "stock_id" => isset($stock['id']) ? $stock['id'] : Db::name("good_stock")->getLastInsID(), "type" => 1, 'stock' => $thnum, "stock_name" => "usable_stock"];
-                    $good_data[]= ['good_log_code' => $returnCode, "stock_id" => isset($stock['id']) ? $stock['id'] : Db::name("good_stock")->getLastInsID(), "type" => 2, 'stock' => $thnum, "stock_name" => "wait_out_stock"];
+					$ps = GoodStockInfo::AddBn($va['stockid'],$va['bnCode'],$tnm);
+                     if ($ps == false) {
+                        return error_show(1005, '商品批次退货入库失败');
+                    }
+                     $ret = GoodStockInfo::ReturnBn($returnCode,$va['id'],$tnm);
+                     if ($ret == false) {
+                        return error_show(1005, '商品批次退货入库失败');
+                    }
+                     $va['updatetime']=date("Y-m-d H:i:s");
+                     $sal= Db::name("sale_info")->save($va);
+					  if ($sal == false) {
+                        return error_show(1005, '商品批次退货入库失败');
+                    }
+                    $good_data[]= ['good_log_code' => $returnCode, "stock_id" => $va['stockid'], "type" => 1, 'stock' => $thnum, "stock_name" => "usable_stock"];
+                    $good_data[]= ['good_log_code' => $returnCode, "stock_id" => $va['stockid'], "type" => 2, 'stock' => $thnum, "stock_name" => "wait_out_stock"];
                     GoodLog::LogAdd($this->post['token'], $good_data, 'XSTHD');
+					}
+
                     $data=[
                         "orderCode"=>$ordeCode,
                         "th_type"=>1,
@@ -394,7 +400,7 @@ class Reorder extends Base
         $condition='';
         if(!empty($role['write']) && $this->uid!=""){
             // $where[]=["sr.apply_id","in",$role['write']];
-            $condition .="sr.cgderid = {$this->uid} or sr.apply_id in (".implode(',',$role['write']).")";
+            $condition .="sr.cgderid = {$this->uid} or sr.apply_id in (".implode(',',$role['write']).") or sr.person_id={$this->uid}";
         }
         $company_name = isset($this->post['company_name']) && $this->post['company_name'] !== "" ? trim($this->post['company_name']) : "";
         if ($company_name !== "") $where[] = ["sr.apply_id", 'in', get_company_item_user_by_name($company_name)];
@@ -695,19 +701,19 @@ class Reorder extends Base
                                         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, "发货单更新失败");
-                                    }
+//                                    $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, "发货单更新失败");
+//                                    }
 
                                 }
                             }
@@ -735,58 +741,60 @@ class Reorder extends Base
                             Db::rollback();
                             return error_show(1005, '销售单订单更新失败');
                         }
-                        $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'];
-                        if($cgd['th_num']==$cgd['send_num']&& $cgd['wsend_num']==0){
-                            $cgd['status']=4;
-                        }
-                        $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, '采购单数据更新失败');
-                        }
-                        if ($cgd['bkcode'] != "") {
-                            $bk = Db::name("purchease_order")->where(["bkcode" => $cgd['bkcode'], "order_type" => 1,"order_source"=>0, "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"
-                                => 1, "is_del" => 0])->where("order_source","<>",0)
-                                ->field("sum(send_num)-sum(th_num) as num")->find();
+//                        $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'];
+//                        if($cgd['th_num']==$cgd['send_num']&& $cgd['wsend_num']==0){
+//                            $cgd['status']=4;
+//                        }
+//                        $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, '采购单数据更新失败');
+//                        }
+//                        if ($cgd['bkcode'] != "") {
+//                            $bk = Db::name("purchease_order")->where(["bkcode" => $cgd['bkcode'], "order_type" => 1,"order_source"=>0, "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"
+//                                => 1, "is_del" => 0])->where("order_source","<>",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, '备库单库存数据释放失败');
+//                            }
+//                        }
+
 
-                            $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) {
@@ -867,6 +875,7 @@ class Reorder extends Base
                                 return error_show(1005, '可售商品入库失败');
                             }
 
+
                         } else {
                             $orderinfo['th_num'] += $info['num'];
                             if($orderinfo['th_num']==$orderinfo['send_num']&& $orderinfo['wsend_num']==0){
@@ -965,7 +974,41 @@ class Reorder extends Base
                             Db::rollback();
                             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"];
+                        $stockid = isset($stock['id']) ? $stock['id'] : Db::name("good_stock")->getLastInsID();
+                        $sabebn =Db::name("sale_info")->where(["orderCode"=>$orderinfo["orderCode"]])->select()->toArray();
+                        if(!empty($sabebn)){
+                        	$total_num =$info['num'];
+                        	foreach ($sabebn as $ve){
+                        		$tempnum=0;
+                        		if ($total_num==0) break;
+                        		if($total_num>=$ve['num']){
+                        			$tempnum = $ve['num'];
+                        			$total_num-=$ve['num'];
+                        			$ve['num']=0;
+                        		}else{
+                        		    $tempnum = $total_num;
+                        			$total_num=0;
+                        			$ve['num']-=$total_num;
+                        		}
+                        		$bnin=GoodStockInfo::AddBn($stockid,$ve['bnCode'],$tempnum,$ve['origin_price']);
+                        		if($bnin==false){
+                        			 Db::rollback();
+                                    return error_show(1005, '可售商品Bn库存数入库失败');
+                        		}
+								$up=Db::name("sale_info")->save($ve);
+                        		if($up==false){
+                        			 Db::rollback();
+                                    return error_show(1005, '可售商品Bn库存数入库失败');
+                        		}
+								$bnin=GoodStockInfo::ReturnBn($info['returnCode'],$ve['id'],$tempnum);
+                        		if($bnin==false){
+                        			 Db::rollback();
+                                    return error_show(1005, '可售商品Bn库存数入库失败');
+                        		}
+                        	}
+                        }
+
+                        $good_data = ['good_log_code' => $info['returnCode'], "stock_id" => $stockid, "type" => 1, 'stock'=> $info['num'], "stock_name" => "usable_stock"];
                         GoodLog::LogAdd($this->post['token'], $good_data, 'XSTHD');
                     }
                     $data=[
@@ -1143,14 +1186,17 @@ class Reorder extends Base
         }
         $remark =isset($this->post['remark']) &&$this->post['remark']!=''?trim($this->post['remark']) :"";
         $addr =Db::name("order_addr")->where([["orderCode","=",$orderCode],["is_del","=",0]])->select()->toArray();
-         $ordernum = Db::name("order_num")->where(['orderCode' => $orderCode])->find();
-        if ($ordernum == false) {
-        	return error_show(1005, '未找到关联采购单');
-        }
-         $cgd = Db::name("purchease_order")->where(["cgdNo" => $ordernum['cgdNo'], "is_del" => 0])->find();
-        if ($cgd == false) {
-            return error_show(1005, '未找到采购单数据');
+        if($order['is_stock']==0){
+        	 $ordernum = Db::name("order_num")->where(['orderCode' => $orderCode])->find();
+	        if ($ordernum == false) {
+	            return error_show(1005, '未找到关联采购单');
+	        }
+	         $cgd = Db::name("purchease_order")->where(["cgdNo" => $ordernum['cgdNo'], "is_del" => 0])->find();
+	        if ($cgd == false) {
+	            return error_show(1005, '未找到采购单数据');
+	        }
         }
+
         if($order['is_stock']==0&&$cgd['send_status']!=1){
         	return error_show(1005, '采购单已发起入库');
         }
@@ -1166,6 +1212,8 @@ class Reorder extends Base
                 "apply_name"=>$this->uname,
                 "cgderid"=>$goon['createrid'],
                 "cgder"=>$goon['creater'],
+                 "person"=>$supplier['person']??'',
+                "person_id"=>$supplier['personid']??0,
                 "error_code"=>$errorCode,
                 "num"=>$order['wsend_num'],
                 "total_fee"=>round($order['sale_price']*$order['wsend_num'],2),
@@ -1219,18 +1267,18 @@ class Reorder extends Base
                                         Db::rollback();
                                         return error_show(1004, "地址发货单更新失败");
                                     }
-                                    $ordersend = Db::name("order_send")->where(["outCode" => $send['outCode']])->find();
-                                    if($ordersend==false){
-                                    	Db::rollback();
-                                        return error_show(1004, "发货单关联数据未找到");
-                                    }
-                                    $ordersend['status'] = 0;
-                                    $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, "发货单更新失败");
-                                    }
+//                                    $ordersend = Db::name("order_send")->where(["outCode" => $send['outCode']])->find();
+//                                    if($ordersend==false){
+//                                    	Db::rollback();
+//                                        return error_show(1004, "发货单关联数据未找到");
+//                                    }
+//                                    $ordersend['status'] = 0;
+//                                    $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, "发货单更新失败");
+//                                    }
                         }
                         $temp['returnCode']=$returnCode;
                         $temp['orderCode']=$orderCode;
@@ -1281,67 +1329,54 @@ class Reorder extends Base
                         'holder_id=' => $order['apply_id']
                     ]);
 
-                    $ordernum['send_num'] -= $thnum;
-                    $orderup = Db::name("order_num")->save($ordernum);
-                    if ($orderup == false) {
-                        Db::rollback();
-                        return error_show(1005, '关联数据更新失败');
-                    }
-					$cgd['th_fee'] += round($cgd['good_price'] * $thnum, 2);
-                    $cgd['th_num'] += $thnum;
-                    $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, '采购单数据更新失败');
-                    }
-					 if ($cgd['bkcode'] != "") {
-                        $bk = Db::name("purchease_order")->where(["bkcode" => $cgd['bkcode'], "order_type" => 1, "order_source" =>0, "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" =>1, "is_del" => 0])->where("order_source","<>",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, '备库单库存数据释放失败');
-                        }
-                    }
-					  $stock = Db::name("good_stock")->where(["spuCode" => $order['good_code'], 'wsm_code' => $cgd['wsm_code']])
+                  	$saleinfo=Db::name("sale_info")->where([["orderCode","=",$orderCode],["num",">",0]])->select()
+					->toArray();
+					if(empty($saleinfo)) {
+						Db::rollback();
+						return error_show(1005, '商品批次数据未找到');
+					}
+					$tempnum =$thnum;
+					foreach ( $saleinfo as $va){
+					if($tempnum ==0) break;
+					$stock = Db::name("good_stock")->where(["spuCode" => $order['good_code'], 'id' => $va['stockid']])
                         ->find();
-                    if (empty($stock)) {
-                        $stock = [
-                            "spuCode" => $order['good_code'],
-                            "wsm_code" => $cgd['wsm_code'],
-                            "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']+=$thnum;
-                    $stock['wait_out_stock'] -= $thnum;
+					if($stock==false) {
+						Db::rollback();
+						return error_show(1005, '商品库存数据未找到');
+					}
+					if($va['num']>=$tempnum) {
+						$tnm = $tempnum;
+						$va['num']-= $tempnum;
+						$tempnum=0;
+					}else{
+						$tnm = $va['num'];
+						$tempnum -=$va['num'];
+						$va['num'] =0;
+					}
+                    $stock['usable_stock']+=$tnm;
+                    $stock['wait_out_stock'] -=$tnm;
                     $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' => $returnCode, "stock_id" => isset($stock['id']) ? $stock['id'] : Db::name("good_stock")->getLastInsID(), "type" => 1, 'stock' => $thnum, "stock_name" => "usable_stock"];
-                    $good_data[]= ['good_log_code' => $returnCode, "stock_id" => isset($stock['id']) ? $stock['id'] : Db::name("good_stock")->getLastInsID(), "type" => 2, 'stock' => $thnum, "stock_name" => "wait_out_stock"];
-                    GoodLog::LogAdd(["id"=>$this->uid,"nickname"=>$this->uname], $good_data, 'XSTHD');
+					$ps = GoodStockInfo::AddBn($va['stockid'],$va['bnCode'],$tnm);
+                     if ($ps == false) {
+                        return error_show(1005, '商品批次退货入库失败');
+                    }
+                     $ret = GoodStockInfo::ReturnBn($returnCode,$va['id'],$tnm);
+                     if ($ret == false) {
+                        return error_show(1005, '商品批次退货入库失败');
+                    }
+                      $va['updatetime']=date("Y-m-d H:i:s");
+                     $sal= Db::name("sale_info")->save($va);
+					  if ($sal == false) {
+                        return error_show(1005, '商品批次退货入库失败');
+                    }
+                    $good_data[]= ['good_log_code' => $returnCode, "stock_id" => $va['stockid'], "type" => 1, 'stock' => $thnum, "stock_name" => "usable_stock"];
+                    $good_data[]= ['good_log_code' => $returnCode, "stock_id" => $va['stockid'], "type" => 2, 'stock' => $thnum, "stock_name" => "wait_out_stock"];
+                    GoodLog::LogAdd($this->post['token'], $good_data, 'XSTHD');
+					}
                     $data=[
                         "orderCode"=>$orderCode,
                         "th_type"=>1,

+ 214 - 175
app/admin/controller/Sale.php

@@ -5,7 +5,7 @@ namespace app\admin\controller;
 use app\abutment\model\SupplierRelationUser;
 use app\abutment\model\SupplierUser;
 use app\admin\model\GoodLog;
-use app\admin\model\ProcessOrder;
+use app\admin\model\GoodStockInfo;use app\admin\model\ProcessOrder;
 use Exception;
 use think\App;
 use think\facade\Cache;
@@ -94,16 +94,15 @@ class Sale extends Base
         }
         if ($goodinfo['is_stock'] == 1) {
             $stock = Db::name("good_stock")->alias("a")->leftJoin("warehouse_info b", "a.wsm_code=b.wsm_code")->where
-            (["spuCode" => $spuCode, "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo" => $supplierNo])->field("a.id,a.wait_in_stock,a.usable_stock,a.wait_out_stock")->find();
+            (["spuCode" => $spuCode, "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo" =>
+            $supplierNo])->field("a.id,a.wait_in_stock,a.usable_stock,a.wait_out_stock,a.wsm_code")->find();
             if ($stock == false || $stock['usable_stock'] < $good_num) {
                 return error_show(1003, "库存数量不足");
             }
-//            if($stock['usable_stock']>0 && $stock['usable_stock']<$good_num){
-//                return error_show(1003,"可用库存数量不足");
-//            }
-//            if($stock['usable_stock']== 0 && $stock['wait_in_stock']- $stock['presale_stock']<$good_num){
-//                return error_show(1003,"待入库存数量不足");
-//            }
+			$stock_num =Db::name("good_stock_info")->where(["stockid"=>$stock['id']])->sum('balance_num');
+            if($stock_num < $good_num){
+                return error_show(1003, "Bn库存数量不足");
+            }
             $origin_price = 0;
         } else {
             if ($is_activity == 0) {
@@ -301,38 +300,36 @@ class Sale extends Base
                     }
                 } else {
                     $outstatus = 1;
-                    $bol = $this->RelaCgd([
-                        'orderCode' => $orderCode,
-                        "good_num" => $good_num,
-                        "spuCode" => $spuCode,
-                        "companyNo" => $supplierNo,
-                        "cost_fee" => isset($good['cost_fee']) ? $good['cost_fee'] : 0,
-                        'order_type' => $data['order_type'],
-                        'order_source' => $data['order_source'],
-                    ], $standing_book_da);
-                    if ($bol == false) {
-                        Db::rollback();
-                        return error_show(1002, "库存商品关联采购单失败");
-                    }
+//                    $bol = $this->RelaCgd([
+//                        'orderCode' => $orderCode,
+//                        "good_num" => $good_num,
+//                        "spuCode" => $spuCode,
+//                        "companyNo" => $supplierNo,
+//                        "cost_fee" => isset($good['cost_fee']) ? $good['cost_fee'] : 0,
+//                        'order_type' => $data['order_type'],
+//                        'order_source' => $data['order_source'],
+//                    ], $standing_book_da);
+//                    if ($bol == false) {
+//                        Db::rollback();
+//                        return error_show(1002, "库存商品关联采购单失败");
+//                    }
                     if (isset($stock)) {
-
-//                        if($stock['usable_stock']==0){
-//                            $stck = ["presale_stock"=>$stock['presale_stock']+$good_num,
-//                                    "updatetime"=>date("Y-m-d H:i:s")
-//                                     ];
-//                        }else{
                         $stck = [
                             "usable_stock" => $stock['usable_stock'] - $good_num,
                             "wait_out_stock" => $stock['wait_out_stock'] + $good_num,
                             "updatetime" => date("Y-m-d H:i:s")
                         ];
-//                        }
 
                         $upad = Db::name("good_stock")->where($stock)->update($stck);
                         if ($upad == false) {
                             Db::rollback();
                             return error_show(1002, "库存商品更新库存失败");
                         }
+                        $stockinfo =GoodStockInfo::OrderBn($orderCode,$stock['id'],$good_num);
+                        if($stockinfo==false){
+                        	 Db::rollback();
+                            return error_show(1002, "Bn库存更新库存失败");
+                        }
                         //商品变动日志表,good_log_code字段存储采购单号
                         $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $stock['id'], "type" => 2, 'stock' => $good_num, "stock_name" => "usable_stock"];
                         $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $stock['id'], "type" => 1, 'stock' => $good_num, "stock_name" => "wait_out_stock"];
@@ -368,43 +365,44 @@ class Sale extends Base
                         $temp['arrive_time'] = $arrtime;
                         $vmp = Db::name('order_addr')->insert($temp, true);
                         if ($vmp > 0) {
-                            //  if($is_stock==1) {
-                            $order = Db::name("order_num")->where(["orderCode" => $orderCode, "status" => 1])->where([["wsend_num", ">=", 0]])
-                                ->lock(true)->find();
-                            if ($order == false) {
-                                return error_show(1004, "未找到可以发货得采购单数据");
-                            }
-                            $num = $value['receipt_quantity'];
-                            $outCode = makeNo("DF");
-                            //改变编码规则,将原来的outCode后两位换成序列号
-                            //str_pad字符串填充
-                            $outCode = substr($outCode, 0, -2) . str_pad($i, 2, '0', STR_PAD_LEFT);
-                            $i++;
-                            $order['wsend_num'] -= $num;
-                            $order['send_num'] += $num;
-                            $or = Db::name("order_num")->save($order);
-                            if ($or == false) {
-                                Db::rollback();
-                                return error_show(1002, "发货地址添加创建失败");
-                            }
-                            $tep = [
-                                "cgdNo" => $order['cgdNo'],
-                                "outCode" => $outCode,
-                                "send_num" => $num,
-                                "status" => 1,
-                                "addtime" => date("Y-m-d H:i:s"),
-                                "updatetime" => date("Y-m-d H:i:s")
-                            ];
-                            $sen = Db::name("order_send")->save($tep);
-                            if ($sen == false) {
-                                Db::rollback();
-                                return error_show(1002, "发货地址添加创建失败");
-                            }
-
-                            $cgdinfo = Db::name("purchease_order")->where(["cgdNo" => $order['cgdNo']])->find();
-                            if ($cgdinfo == false) {
-                                Db::rollback();
-                                return error_show(1002, "未匹配到采购数据");
+	                        $num = $value['receipt_quantity'];
+	                        $outCode = makeNo("DF");
+	                        //改变编码规则,将原来的outCode后两位换成序列号
+	                        //str_pad字符串填充
+	                        $outCode = substr($outCode, 0, -2) . str_pad($i, 2, '0', STR_PAD_LEFT);
+	                        $i++;
+                           if($is_stock!=1) {
+	                            $order = Db::name("order_num")->where(["orderCode" => $orderCode, "status" => 1])->where([["wsend_num", ">=", 0]])
+	                                ->lock(true)->find();
+	                            if ($order == false) {
+	                                return error_show(1004, "未找到可以发货得采购单数据");
+	                            }
+	                            $order['wsend_num'] -= $num;
+	                            $order['send_num'] += $num;
+	                            $or = Db::name("order_num")->save($order);
+	                            if ($or == false) {
+	                                Db::rollback();
+	                                return error_show(1002, "发货地址添加创建失败");
+	                            }
+	                            $tep = [
+	                                "cgdNo" => $order['cgdNo'],
+	                                "outCode" => $outCode,
+	                                "send_num" => $num,
+	                                "status" => 1,
+	                                "addtime" => date("Y-m-d H:i:s"),
+	                                "updatetime" => date("Y-m-d H:i:s")
+	                            ];
+	                            $sen = Db::name("order_send")->save($tep);
+	                            if ($sen == false) {
+	                                Db::rollback();
+	                                return error_show(1002, "发货地址添加创建失败");
+	                            }
+
+	                            $cgdinfo = Db::name("purchease_order")->where(["cgdNo" => $order['cgdNo']])->find();
+	                            if ($cgdinfo == false) {
+	                                Db::rollback();
+	                                return error_show(1002, "未匹配到采购数据");
+	                            }
                             }
                             $out = [
                                 "orderCode" => $orderCode,
@@ -419,7 +417,7 @@ class Sale extends Base
                                 "send_num" => $num,
                                 "check_num" => 0,
                                 "error_num" => 0,
-                                "wsm_code" => $cgdinfo['wsm_code'],
+                                "wsm_code" => $is_stock == 1 ?$stock['wsm_code']:$cgdinfo['wsm_code'],
                                 "order_type" => $is_stock == 1 ? 1 : 2,
                                 "status" => $outstatus,
                                 "addtime" => date("Y-m-d H:i:s"),
@@ -451,9 +449,10 @@ class Sale extends Base
 //                                        $standing_book_da['outCode'] = $outCode;
                                 if (isset($standing_book_da['outCode'])) $standing_book_da['outCode'][] = $outCode;
                                 else $standing_book_da['outCode'] = [$outCode];
-                            }
-                            //   }
-                        } else {
+                                }
+                              }
+
+                         else {
                             Db::rollback();
                             return error_show(1002, "发货地址添加创建失败");
                         }
@@ -686,15 +685,15 @@ class Sale extends Base
                 $vmp = Db::name('order_addr')->insert($temp, true);
                 if ($vmp > 0) {
                     $num = $value['receipt_quantity'];
-                    $order = Db::name("order_num")->where(["orderCode" => $orderCode, "status" => 1])->where([["wsend_num", ">=", 0]])
+                      $outCode = makeNo("DF");
+                    //维护商品所在仓库的库存 --- start
+                    if ($etid['is_stock'] != 1){
+                    	$order = Db::name("order_num")->where(["orderCode" => $orderCode, "status" => 1])->where([["wsend_num", ">=", 0]])
                         ->find();
                     if (empty($order) || $order['wsend_num'] < $num) {
                         return error_show(1004, "未找到可以发货得采购单数据");
                     }
 
-                    $outCode = makeNo("DF");
-
-
                     //改变编码规则,将原来的outCode后两位换成序列号
                     //str_pad字符串填充
                     $outCode = substr($outCode, 0, -2) . str_pad($i, 2, '0', STR_PAD_LEFT);
@@ -707,7 +706,7 @@ class Sale extends Base
                         Db::rollback();
                         return error_show(1002, "发货地址添加创建失败");
                     }
-                    $tep = [
+                     $tep = [
                         "cgdNo" => $order['cgdNo'],
                         "outCode" => $outCode,
                         "send_num" => $num,
@@ -725,38 +724,11 @@ class Sale extends Base
                         Db::rollback();
                         return error_show(1002, "未匹配到采购数据");
                     }
-
-                    //维护商品所在仓库的库存 --- start
                     $temp = Db::name('good_stock')
                         ->field('id,usable_stock,wait_out_stock')
-                        ->where(['spuCode' => $order['spuCode'], 'wsm_code' => $cgdinfo['wsm_code']])
+                        ->where(['spuCode' => $etid['spuCode'], 'wsm_code' => $cgdinfo['wsm_code']])
                         ->find();
-                    if ($etid['is_stock'] == 1) {
-                        if ($temp == false) {
-                            Db::rollback();
-                            return error_show(1004, '库存不足');
-                        }
-                        if (($temp['wait_out_stock'] - $num) < 0) {
-                            Db::rollback();
-                            return error_show(1004, '库存不足');
-                        }
-
-//                            $up =Db::name('good_stock')
-//                                ->where('id', $temp['id'])
-//                                ->update([
-//                                    'usable_stock' => $temp['usable_stock'] - $num,
-//                                    'wait_out_stock' => $temp['wait_out_stock'] + $num,
-//                                    'updatetime' => date('Y-m-d H:i:s'),
-//                                ]);
-//                            if($up==false){
-//                                Db::rollback();
-//                                return error_show(1004, '库存更新失败');
-//                            }
-//                            $good_data[] = ['good_log_code' =>$outCode, "stock_id" =>$temp['id'], "type" => 1,'stock'=>$num, "stock_name" => "wait_out_stock"];
-//                            $good_data[] = ['good_log_code' =>$outCode, "stock_id" =>$temp['id'], "type" => 2,'stock'=>$num, "stock_name" => "usable_stock"];
-//                            GoodLog::LogAdd($this->post['token'],$good_data,"CKD");
-                        $status = 1;
-                    } else {
+                    	//非库存品 导入地址生成发货单时占用库存 可用库存进入待出库
                         if ($temp == false || ($temp['usable_stock'] - $num) < 0) {
                             $status = 0;
                         } else {
@@ -781,9 +753,19 @@ class Sale extends Base
                             GoodLog::LogAdd($this->post['token'], $good_data, "CKD");
                             $status = 1;
                         }
+                    }else{
+                    	$stockid=Db::name("sale_info")->where(["orderCode"=>$orderCode])->value("stockid","");
+                    	if($stockid==''){
+                    		Db::rollback();
+                    		return error_show(1005,"未找到对应库存仓库");
+                    	}
+                    	$cgdinfo = Db::name("good_stock")->where(["id"=>$stockid])->findOrEmpty();
+                    	if(empty($cgdinfo)){
+                    		Db::rollback();
+                    		return error_show(1005,"未找到对应库存仓库");
+                    	}
                     }
 
-
                     $out = [
                         "orderCode" => $orderCode,
                         "outCode" => $outCode,
@@ -836,6 +818,11 @@ class Sale extends Base
                     return error_show(1002, "发货地址添加创建失败");
                 }
             }
+//            $OrderBn = GoodStockInfo::OrderBn($orderCode,$stock_id,$num);
+//		      if($OrderBn==false){
+//		        Db::rollback();
+//		        return error_show(1004,"Bn库存数关联订单失败");
+//		      }
             Db::commit();
             return app_show(0, "发货地址添加完成");
         } catch (\Exception $e) {
@@ -1898,15 +1885,19 @@ class Sale extends Base
             } else {
 
                 $stock = Db::name("good_stock")->alias("a")->leftJoin("warehouse_info b", "a.wsm_code=b.wsm_code")->where
-                (["spuCode" => $good['spuCode'], "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo" => $data['companyNo']])->field("a.id,a.usable_stock,a.wait_out_stock")->find();
+                (["spuCode" => $good['spuCode'], "a.is_del" => 0, "a.status" => 1, "b.wsm_type" => 5, "b.companyNo"
+                => $data['companyNo']])->field("a.id,a.usable_stock,a.wait_out_stock,a.wsm_code")->find();
                 if ($stock == false || $stock['usable_stock'] < $data['good_num']) {
                     return 1; //库存不足
                 }
-
-                $bol = $this->RelaCgd(['orderCode' => $orderCode, "good_num" => $data['good_num'], "spuCode" => $good['spuCode'], "companyNo" => $data['companyNo'], "cost_fee" => $goodlass['cost_fee'], 'order_type' => $cgd['order_type'], 'order_source' => $cgd['order_source']], $standing_book_data);
-                if ($bol == false) {
-                    return 3;//关联采购失败
-                }
+			$stock_num =Db::name("good_stock_info")->where(["stockid"=>$stock['id']])->sum('balance_num');
+            if($stock_num <  $data['good_num']){
+              return 1; //库存不足
+            }
+//                $bol = $this->RelaCgd(['orderCode' => $orderCode, "good_num" => $data['good_num'], "spuCode" => $good['spuCode'], "companyNo" => $data['companyNo'], "cost_fee" => $goodlass['cost_fee'], 'order_type' => $cgd['order_type'], 'order_source' => $cgd['order_source']], $standing_book_data);
+//                if ($bol == false) {
+//                    return 3;//关联采购失败
+//                }
                 if (isset($stock)) {
                     $stck = [
                         "usable_stock" => $stock['usable_stock'] - $data['good_num'],
@@ -1917,6 +1908,10 @@ class Sale extends Base
                     if ($upad == false) {
                         return 2; //库存更新失败
                     }
+                     $stockinfo =GoodStockInfo::OrderBn($orderCode,$stock['id'],$data['good_num']);
+                        if($stockinfo==false){
+                        	      return 2; //库存不足
+                        }
                     //商品变动日志表,good_log_code字段存储采购单号
                     $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $stock['id'], "type" => 2, 'stock' => $data['good_num'], "stock_name" => "usable_stock"];
                     $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $stock['id'], "type" => 1, 'stock' => $data['good_num'], "stock_name" => "wait_out_stock"];
@@ -1952,42 +1947,45 @@ class Sale extends Base
                     $vmp = Db::name('order_addr')->insert($temp, true);
                     if ($vmp > 0) {
                         $standing_book_data['customer_code'] = $temp['customer_code'];
-//                            if ($good['is_stock'] == 1) {
-                        $order = Db::name("order_num")->where(["orderCode" => $orderCode, "status" => 1])->where([["wsend_num", ">=", 0]])
-                            ->lock(true)->find();
-                        if ($order == false) {
-                            return 3;
-                        }
-                        $num = $value['receipt_quantity'];
-                        $outCode = makeNo("DF");
-                        //改变编码规则,将原来的outCode后两位换成序列号
-                        //str_pad字符串填充
-                        $outCode = substr($outCode, 0, -2) . str_pad($i, 2, '0', STR_PAD_LEFT);
-                        $i++;
-                        $order['wsend_num'] -= $num;
-                        $order['send_num'] += $num;
-                        $or = Db::name("order_num")->save($order);
-                        if ($or == false) {
-
-                            return 3;
-                        }
-                        $tep = [
-                            "cgdNo" => $order['cgdNo'],
-                            "outCode" => $outCode,
-                            "send_num" => $num,
-                            "status" => 1,
-                            "addtime" => date("Y-m-d H:i:s"),
-                            "updatetime" => date("Y-m-d H:i:s")
-                        ];
-                        $sen = Db::name("order_send")->save($tep);
-                        if ($sen == false) {
-
-                            return 3;
-                        }
-                        $cgdinfo = Db::name("purchease_order")->where(["cgdNo" => $order['cgdNo']])->find();
-                        if ($cgdinfo == false) {
-
-                            return 4;
+                            $num = $value['receipt_quantity'];
+	                        $outCode = makeNo("DF");
+                            $outCode = substr($outCode, 0, -2) . str_pad($i, 2, '0', STR_PAD_LEFT);
+	                        $i++;
+                            if ($good['is_stock'] != 1) {
+	                        $order = Db::name("order_num")->where(["orderCode" => $orderCode, "status" => 1])->where([["wsend_num", ">=", 0]])
+	                            ->lock(true)->find();
+	                        if ($order == false) {
+	                            return 3;
+	                        }
+
+	                        //改变编码规则,将原来的outCode后两位换成序列号
+	                        //str_pad字符串填充
+
+	                        $order['wsend_num'] -= $num;
+	                        $order['send_num'] += $num;
+	                        $or = Db::name("order_num")->save($order);
+	                        if ($or == false) {
+
+	                            return 3;
+	                        }
+	                        $tep = [
+	                            "cgdNo" => $order['cgdNo'],
+	                            "outCode" => $outCode,
+	                            "send_num" => $num,
+	                            "status" => 1,
+	                            "addtime" => date("Y-m-d H:i:s"),
+	                            "updatetime" => date("Y-m-d H:i:s")
+	                        ];
+	                        $sen = Db::name("order_send")->save($tep);
+	                        if ($sen == false) {
+
+	                            return 3;
+	                        }
+	                        $cgdinfo = Db::name("purchease_order")->where(["cgdNo" => $order['cgdNo']])->find();
+	                        if ($cgdinfo == false) {
+
+	                            return 4;
+	                        }
                         }
                         $out = [
                             "orderCode" => $orderCode,
@@ -2002,7 +2000,7 @@ class Sale extends Base
                             "send_num" => $num,
                             "check_num" => 0,
                             "error_num" => 0,
-                            "wsm_code" => $cgdinfo['wsm_code'],
+                            "wsm_code" => $good['is_stock'] == 1 ?$stock['wsm_code']:$cgdinfo['wsm_code'],
                             "order_type" => 1,
                             "status" => $good['is_stock'] == 1 ? 1 : 0,
                             "addtime" => date("Y-m-d H:i:s"),
@@ -3522,19 +3520,10 @@ class Sale extends Base
         $rm = isset($apply_id["data"]['id']) ? $apply_id["data"]['id'] : "";
         $ri = isset($apply_id["data"]['nickname']) ? $apply_id["data"]['nickname'] : "";
         $sendtime = isset($this->post['sendtime']) && $this->post['sendtime'] !== "" ? $this->post['sendtime'] : date("Y-m-d H:i:s");
-        $order = Db::name("order_num")->where(["orderCode" => $orderCode, "status" => 1])->where([["wsend_num", ">=", 0]])
-            ->find();
-        if (empty($order)) {
-            return error_show(1004, "未找到可以发货得采购单数据");
-        }
+
         Db::startTrans();
         try {
-            $order = Db::name("order_num")->where(["orderCode" => $orderCode, "status" => 1])->where([["wsend_num", ">=", 0]])
-                ->lock(true)->find();
-            if ($order == false) {
-                Db::rollback();
-                return error_show(1004, "未找到可以发货得采购单数据");
-            }
+
             $addrlst = [
                 "orderCode" => $orderCode,
                 "addr" => $addr,
@@ -3551,18 +3540,14 @@ class Sale extends Base
             ];
             $addrid = Db::name("order_addr")->insert($addrlst, true);
             if ($addrid > 0) {
-//                    $der['send_num'] +=$send_num;
-//                    $der['wsend_num'] -= $send_num;
-//                    $der['send_status'] = $der['send_num'] == 0 ? 1 : $der['wsend_num'] == 0 ? 3 : 2;
-//                    $der['status'] = $der['send_num'] == 0 ? 0 : $der['wsend_num'] == 0 ?2 :1;
-//                    $der['updatetime'] = date("Y-m-d H:i:s");
-//                    $si = Db::name('sale')->save($der);
-//                    if($si==false){
-//                        Db::rollback();
-//                        return error_show(1002,"出库单新建失败");
-//                    }
-
                 $outCode = makeNo("DF");
+                if($der['order_type']!=1){
+                $order = Db::name("order_num")->where(["orderCode" => $orderCode, "status" => 1])->where([["wsend_num", ">=", 0]])
+                ->lock(true)->find();
+	            if ($order == false) {
+	                Db::rollback();
+	                return error_show(1004, "未找到可以发货得采购单数据");
+	            }
                 $cgd = Db::name("purchease_order")->where(["cgdNo" => $order['cgdNo']])->find();
                 if ($cgd == false) {
                     Db::rollback();
@@ -3583,11 +3568,24 @@ class Sale extends Base
                     "addtime" => date("Y-m-d H:i:s"),
                     "updatetime" => date("Y-m-d H:i:s")
                 ];
-                $sen = Db::name("order_send")->save($tep);
-                if ($sen == false) {
-                    Db::rollback();
-                    return error_show(1002, "发货地址添加创建失败");
+	                $sen = Db::name("order_send")->save($tep);
+	                if ($sen == false) {
+	                    Db::rollback();
+	                    return error_show(1002, "发货地址添加创建失败");
+	                }
+                }else{
+					$stockid=Db::name("sale_info")->where(["orderCode"=>$orderCode])->value("stockid","");
+                    	if($stockid==''){
+                    		Db::rollback();
+                    		return error_show(1005,"未找到对应库存仓库");
+                    	}
+                    	$cgd = Db::name("good_stock")->where(["id"=>$stockid])->findOrEmpty();
+                    	if(empty($cgd)){
+                    		Db::rollback();
+                    		return error_show(1005,"未找到对应库存仓库");
+                    	}
                 }
+
                 $data = [
                     "wsm_code" => isset($cgd['wsm_code']) ? $cgd['wsm_code'] : "",
                     "orderCode" => $orderCode,
@@ -3809,6 +3807,27 @@ class Sale extends Base
                     Db::rollback();
                     return error_show(1002, "库存更新失败");
                 }
+                if($einfo["order_type"]!=1){
+                	$outsend =Db::name("order_send")->where(["outCode"=> $outCode])->findOrEmpty();
+                	if(empty($outsend)){
+                			Db::rollback();
+                             return error_show(1002, "未找到关联采购单");
+                		}
+                	$cgdinfo= Db::name("purchease_order")->where(["cgdNo"=>$outsend['cgdNo'],"is_del"=>0])
+                	->findOrEmpty();
+                	$bn_code =makeNo("BN");
+                	$bnin=GoodStockInfo::AddBn($stokc["id"],$bn_code,$outinfo['send_num'],$cgdinfo['good_price']??0);
+	                 if($bnin==false){
+	                      Db::rollback();
+	                      return error_show(1004,"库存bn数据新增失败");
+	                 }
+	                 $bnup =GoodStockInfo::OrderBn($outinfo['orderCode'],$stokc["id"],$outinfo['send_num']);
+	                 if($bnup==false){
+	                      Db::rollback();
+	                      return error_show(1004,"库存bn库存数更新失败");
+	                 }
+                }
+
                 $good_data[] = ['good_log_code' => $outCode, "stock_id" => $stokc['id'], "type" => 2, 'stock' => $outinfo['send_num'], "stock_name" => "wait_out_stock"];
 
                 GoodLog::LogAdd(['id' => $uid, 'nickname' => $uname], $good_data, "CKD");
@@ -4416,7 +4435,8 @@ class Sale extends Base
                 $sale_infos = Db::name("sale")
                     ->where('orderCode', $order_out_infos[$value['outCode']]['orderCode'])
                     ->where('is_del', 0)
-                    ->column('id,send_num,wsend_num,status,good_code,order_source,apply_id', 'orderCode');
+                    ->column('id,send_num,wsend_num,status,good_code,order_source,order_type', 'orderCode');
+
 
                 if (!isset($sale_infos[$order_out_infos[$value['outCode']]['orderCode']])) throw new Exception($value['outCode'] . '该发货单对应的销售单未找到');
 
@@ -4514,7 +4534,26 @@ class Sale extends Base
                             ->where('id', $stock['id'])
                             ->update($stock);
                         if ($stock_rs == false) throw new Exception($value['outCode'] . '库存更新失败');
-
+						 if($sale_infos[$order_out_infos[$value['outCode']]['orderCode']]["order_type"]!=1){
+		                    $outsend =Db::name("order_send")->where(["outCode"=> $value['outCode']])->findOrEmpty();
+		                    if(empty($outsend)){
+		                            Db::rollback();
+		                             return error_show(1002, "未找到关联采购单");
+		                        }
+		                    $cgdinfo= Db::name("purchease_order")->where(["cgdNo"=>$outsend['cgdNo'],"is_del"=>0])
+		                    ->findOrEmpty();
+		                    $bn_code =makeNo("BN");
+		                    $bnin=GoodStockInfo::AddBn($stock["id"],$bn_code,$order_out_infos[$value['outCode']]['send_num'],$cgdinfo['good_price']??0);
+			                 if($bnin==false){
+			                      Db::rollback();
+			                      return error_show(1004,"库存bn数据新增失败");
+			                 }
+			                 $bnup =GoodStockInfo::OrderBn($order_out_infos[$value['outCode']]['orderCode'],$stock["id"],$order_out_infos[$value['outCode']]['send_num']);
+			                 if($bnup==false){
+			                      Db::rollback();
+			                      return error_show(1004,"库存bn库存数更新失败");
+			                 }
+						 }
                         $good_data[] = [
                             'good_log_code' => $value['outCode'],
                             'stock_id' => $stock['id'],

+ 231 - 0
app/admin/model/GoodStockInfo.php

@@ -0,0 +1,231 @@
+<?php
+declare (strict_types = 1);
+
+namespace app\admin\model;
+
+use think\Exception;
+use think\Model;
+
+/**
+ * @mixin \think\Model
+ */
+class GoodStockInfo extends Model
+{
+
+    /**
+	* @param int $stockid 仓库库存id
+	* @param string $bn bn编号
+	* @param int $num  bn数量
+	* @param float $origin_price 采购成本价
+	* @return bool  入库bn库存数新建 或退回bn库存数
+	*/
+    static function AddBn(int $stockid,string $bn,int $num,float $origin_price=0){
+		$data=self::where(["stockid"=>$stockid,"bnCode"=>$bn])->findOrEmpty()->toArray();
+		if(empty($data)){
+			$data=[
+				"stockid"=>$stockid,
+				"bnCode"=>$bn,
+				"total_num"=>$num,
+				"used_num"=>0,
+				"balance_num"=>$num,
+				"origin_price"=>$origin_price,
+				"addtime"=>date("Y-m-d H:i:s"),
+				"updatetime"=>date("Y-m-d H:i:s")
+				];
+			$result=self::insert($data);
+		}else{
+			$total_num = $data["balance_num"]+$num;
+			if($total_num> $data["total_num"]) throw new Exception("批次入库数量超过总数",1006);
+			$temp=[];
+			$temp["balance_num"]=$total_num;
+			$temp["used_num"]=$data["used_num"]-$num;
+			$temp["updatetime"]=date("Y-m-d H:i:s");
+			$result=self::update($temp,$data)->getNumRows();
+		}
+
+		return $result;
+    }
+
+	/**
+	* @param int $stockid
+	* @param int $num
+	 * @return array  库存品下单消耗bn库存数
+	* @throws \think\Exception
+	* @throws \think\db\exception\DataNotFoundException
+	* @throws \think\db\exception\DbException
+	* @throws \think\db\exception\ModelNotFoundException
+	*/
+	static function SaleBn(int $stockid,int $num){
+		$arr = self::where([["stockid","=",$stockid],["balance_num",">",0]])->select()->toArray();
+		if(empty($arr)) throw new Exception("库存批次数量不足","1006");
+		$list=[];
+		foreach ($arr as $item) {
+			if($num<=0) break;
+			$temp=[];
+			$update=[];
+		    if($item['balance_num']<=$num){
+		    	$update['balance_num'] =0;
+		    	$update['used_num']= $item['used_num']+$item['balance_num'];
+		    	$num-=$item['balance_num'];
+		    	$update['updatetime'] =date("Y-m-d H:i:s");
+		    	$temp=["bnCode"=>$item['bnCode'],"num"=>$item['balance_num'],"origin_price"=>$item["origin_price"]];
+		    }else{
+				$update['balance_num']=$item['balance_num']-$num;
+		    	$update['used_num']=$item['used_num']+$num;
+		    	$update['updatetime'] =date("Y-m-d H:i:s");
+		    	$temp=["bnCode"=>$item['bnCode'],"num"=>$num,"origin_price"=>$item["origin_price"]];
+		    	$num=0;
+		    }
+			self::update($update,$item);
+		    $list[]=$temp;
+		}
+		return $list;
+    }
+	/**
+	* @param int $stockid
+	* @param string $bn
+	* @param int $num
+	* @return bool  盘点修改bn仓库库存数
+	* @throws \think\Exception
+	*/
+	static function CheckBn(int $stockid,string $bn,int $num){
+		$data=self::where(["stockid"=>$stockid,"bnCode"=>$bn])->findOrEmpty()->toArray();
+		if(empty($data)) throw new Exception("未找到Bn库存数据",1006);
+			$update=[];
+			$update["balance_num"]=$num;
+			$update["total_num"]=$data["used_num"]+$num;
+			$update["updatetime"]=date("Y-m-d H:i:s");
+		return self::update($update,$data)->getNumRows();
+    }
+	/**
+	* @param string $orderCode
+	* @param int $stockid
+	* @param int $num
+	 * @return int
+	* @throws \think\Exception
+	* @throws \think\db\exception\DataNotFoundException
+	* @throws \think\db\exception\DbException
+	* @throws \think\db\exception\ModelNotFoundException
+	 */
+	static function OrderBn(string $orderCode,int $stockid,int $num){
+        $bnArr=self::SaleBn($stockid,$num);
+        if(empty($bnArr)) throw new Exception("未找到Bn库存数据",1006);
+        $ordBn=[];
+        foreach ($bnArr as $value){
+	        $saleBn=[
+	        "orderCode"=>$orderCode,
+	        "bnCode"=>$value['bnCode'],
+	        "stockid"=>$stockid,
+	        "num"=>$value['num'],
+	        "origin_price"=>$value['origin_price'],
+	        "addtime"=>date("Y-m-d H:i:s"),
+	        "updatetime"=>date("Y-m-d H:i:s"),
+	        ];
+	        $ordBn[]=$saleBn;
+        }
+
+        return self::name("sale_info")->insertAll($ordBn);
+    }
+	/**
+	* @param string $returnCode
+	* @param int $salebnid
+	* @param int $num
+	* @param int $type
+	 * @return bool
+	* @throws \think\Exception
+	 */
+	static function ReturnBn(string $returnCode,int $salebnid,int $num,int $type=1){
+    	$sabn=self::name("sale_info")->where(['id'=>$salebnid])->findOrEmpty()->toArray();
+    	if(empty($sabn))throw new Exception("未找到Bn订单数据",1006);
+    	$return=[
+    		"returnCode"=>$returnCode,
+    	    "type"=>$type,
+    	    "orderCode"=>$sabn['orderCode'],
+    	    "bnCode"=>$sabn['bnCode'],
+    	    "origin_price"=>$sabn['origin_price'],
+    	    "num"=>$num,
+    	    "addtime"=>date("Y-m-d H:i:s")
+    	    ];
+    	return self::name("return_info")->insert($return);
+    }
+	/**  调拨专用 需要注意bn总数变化
+	* @param int $stockid 库存id
+	* @param string $bnCode bn编号
+	* @param int $num  库存数量
+	* @param int $flag  操作类型 0 添加库存 1 减少库存
+	* @param float|int $origin_price  成本价
+	 * @return bool
+	* @throws \think\Exception
+ */
+	static function bnStock(int $stockid,string $bnCode,int $num,int $flag=0,float $origin_price=0){
+			$stock =self::where(["stockid"=>$stockid,"bnCode"=>$bnCode])->lock(true)->findOrEmpty()->toArray();
+			$update=[];
+			if($flag==1) {
+				if(empty($stock)|| $stock['balance_num']< $num)
+					throw new Exception("bn库存数不足",1006);
+				else{
+						$update['balance_num']=$stock['balance_num']-$num;
+						$update['total_num']=$stock['total_num']-$num;
+						$update['updatetime']=date("Y-m-d H:i:s");
+					}
+			}else{
+				if (empty($stock)){
+					$update=[
+						"bnCode"=>$bnCode,
+						"stockid"=>$stockid,
+						"total_num"=>$num,
+						"used_num"=>0,
+						"balance_num"=>$num,
+						"origin_price"=>$origin_price,
+						"addtime"=>date("Y-m-d H:i:s"),
+						"updatetime"=>date("Y-m-d H:i:s")
+						];
+				}else{
+						$update['balance_num']=$stock['balance_num']+$num;
+						$update['total_num']=$stock['total_num']+$num;
+						$update['updatetime']=date("Y-m-d H:i:s");
+				}
+			}
+
+			return	empty($stock)? self::insert($update): self::update($update,$stock)->getNumRows();
+	}
+	/**
+    退货退到其他仓库的话 原仓库批次总数 - 退货数量
+	* @param $stockid 退货仓库
+	* @param $bnCode bn批次编号
+	* @param $num 退货数量
+	* @param $origin_stockid 原仓库
+	 * @return int
+	* @throws \think\Exception
+	 */
+	static function ReturnAdd(int $stockid,string $bnCode,int $num,int $origin_stockid){
+		$origin = self::where(["stockid"=>$origin_stockid,"bnCode"=>$bnCode])->findOrEmpty()->toArray();
+		if($stockid!=$origin_stockid){
+			if(empty($origin))throw new Exception("未找到Bn订单数据",1006);
+			$temp['total_num'] =$origin['total_num'] -$num;
+			$temp['used_num'] =$origin['used_num'] -$num;
+			$temp['updatetime'] =date("Y-m-d H:i:s");
+			self::update($temp,$origin);
+		}
+		$stock = self::where(["stockid"=>$stockid,"bnCode"=>$bnCode])->findOrEmpty()->toArray();
+		if(empty($stock)){
+			$update=[
+						"bnCode"=>$bnCode,
+						"stockid"=>$stockid,
+						"total_num"=>$num,
+						"used_num"=>0,
+						"balance_num"=>$num,
+						"origin_price"=>$origin['origin_price'],
+						"addtime"=>date("Y-m-d H:i:s"),
+						"updatetime"=>date("Y-m-d H:i:s")
+						];
+			$result= self::insert($update);
+		}else{
+						$update['balance_num']=$stock['balance_num']+$num;
+						$stockid!=$origin_stockid ? $update['total_num']=$stock['total_num']+$num:$update['used_num']=$stock['used_num']-$num;
+						$update['updatetime']=date("Y-m-d H:i:s");
+					$result=self::update($update,$stock)->getNumRows();
+		}
+		return $result;
+	}
+}

+ 1 - 0
app/admin/route/app.php

@@ -131,6 +131,7 @@ Route::rule('allotstatus','admin/Allot/status');
 Route::rule('allotgetont','admin/Allot/getont');
 Route::rule('allotgetin','admin/Allot/getin');
 Route::rule('allotvesio','admin/Allot/vesio');
+Route::rule('allotgood','admin/Allot/goodlist');
 
 Route::rule('userlist', 'admin/User/list');
 Route::rule('userinfo', 'admin/User/userInfo');

+ 42 - 34
app/command/ImportOrderFromCHandleData.php

@@ -5,7 +5,7 @@ namespace app\command;
 
 use app\admin\model\ActionLog;
 use app\admin\model\GoodLog;
-use app\admin\model\OrderImportFromC as OIFCModel;
+use app\admin\model\GoodStockInfo;use app\admin\model\OrderImportFromC as OIFCModel;
 use app\admin\model\ProcessOrder;
 use app\admin\model\Test1;
 use think\console\Command;
@@ -119,11 +119,14 @@ class ImportOrderFromCHandleData extends Command
                             ->alias("a")
                             ->leftJoin("warehouse_info b", "a.wsm_code=b.wsm_code")
                             ->where(["spuCode" => $spuCode, "a.is_del" => 0, "a.status" => 1, 'b.wsm_type' => 5, "b.companyNo" => $supplierNo])
-                            ->field("a.id,a.usable_stock,a.wait_out_stock")
+                            ->field("a.id,a.usable_stock,a.wait_out_stock,a.wsm_code")
                             ->find();
 
                         if ($stock == false || $stock['usable_stock'] < $good_num) throw new Exception('库存数量不足');
-
+							$stock_num =Db::name("good_stock_info")->where(["stockid"=>$stock['id']])->sum('balance_num');
+				            if($stock_num <  $good_num){
+				              throw new Exception('bn库存数量不足');
+				            }
                         $origin_price = 0;
 
                     } else {
@@ -300,8 +303,9 @@ class ImportOrderFromCHandleData extends Command
 
                         } else {
                             //库存品
-                            $bol = $this->RelaCgd(['orderCode' => $orderCode, "good_num" => $good_num, "spuCode" => $spuCode, "companyNo" => $supplierNo, 'order_type' => $order_type, 'order_source' => $order_source, 'good_createrid' => $ct['createrid'], 'good_creater' => $ct['creater']], $standing_book_data);
-                            if ($bol == false) throw new Exception('库存商品关联采购单失败');
+//                            $bol = $this->RelaCgd(['orderCode' => $orderCode, "good_num" => $good_num, "spuCode" => $spuCode, "companyNo" => $supplierNo, 'order_type' => $order_type, 'order_source' => $order_source,'good_createrid'=>$ct['createrid'],'good_creater'=>$ct['creater']], $standing_book_data);
+//                            if ($bol == false) throw new Exception('库存商品关联采购单失败');
+
 
                             if (isset($stock)) {
                                 $stck = [
@@ -313,7 +317,10 @@ class ImportOrderFromCHandleData extends Command
                                     ->where($stock)
                                     ->update($stck);
                                 if ($upad == false) throw new Exception('库存商品更新库存失败');
-
+								 $stockinfo =GoodStockInfo::OrderBn($orderCode,$stock['id'],$good_num);
+		                        if($stockinfo==false){
+		                                throw new Exception('bn库存商品更新库存失败');
+		                        }
                                 //商品变动日志表,good_log_code字段存储采购单号
                                 $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $datainfo, "type" => 2, 'stock' => $good_num, "stock_name" => "usable_stock"];
                                 $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $datainfo, "type" => 1, 'stock' => $good_num, "stock_name" => "wait_out_stock"];
@@ -338,34 +345,35 @@ class ImportOrderFromCHandleData extends Command
                             ];
                             $vmp = Db::name('order_addr')->insert($temp, true);
                             if ($vmp > 0) {
-                                $order = Db::name("order_num")
-                                    ->where(["orderCode" => $orderCode, "status" => 1])
-                                    ->where([["wsend_num", ">=", 0]])
-                                    ->lock(true)
-                                    ->find();
-                                if ($order == false) throw new Exception('未找到可以发货得采购单数据');
-
-
-                                $num = $extend_data['num'];
+                            	 $num = $extend_data['num'];
                                 $outCode = makeNo("DF");
-                                $order['wsend_num'] -= $num;
-                                $order['send_num'] += $num;
-                                $or = Db::name("order_num")->save($order);
-                                if ($or == false) throw new Exception('发货地址更新失败');
-
-                                $tep = [
-                                    "cgdNo" => $order['cgdNo'],
-                                    "outCode" => $outCode,
-                                    "send_num" => $num,
-                                    "status" => 1,
-                                    "addtime" => date("Y-m-d H:i:s"),
-                                    "updatetime" => date("Y-m-d H:i:s")
-                                ];
-                                $sen = Db::name("order_send")->save($tep);
-                                if ($sen == false) throw new Exception('发货地址添加创建失败');
-
-                                $cgdinfo = Db::name("purchease_order")->where(["cgdNo" => $order['cgdNo']])->find();
-                                if ($cgdinfo == false) throw new Exception('未匹配到采购数据');
+                            	if($is_stock!=1){
+	                                    $order = Db::name("order_num")
+	                                    ->where(["orderCode" => $orderCode, "status" => 1])
+	                                    ->where([["wsend_num", ">=", 0]])
+	                                    ->lock(true)
+	                                    ->find();
+	                                if ($order == false) throw new Exception('未找到可以发货得采购单数据');
+	                                $order['wsend_num'] -= $num;
+	                                $order['send_num'] += $num;
+	                                $or = Db::name("order_num")->save($order);
+	                                if ($or == false) throw new Exception('发货地址更新失败');
+
+	                                $tep = [
+	                                    "cgdNo" => $order['cgdNo'],
+	                                    "outCode" => $outCode,
+	                                    "send_num" => $num,
+	                                    "status" => 1,
+	                                    "addtime" => date("Y-m-d H:i:s"),
+	                                    "updatetime" => date("Y-m-d H:i:s")
+	                                ];
+	                                $sen = Db::name("order_send")->save($tep);
+	                                if ($sen == false) throw new Exception('发货地址添加创建失败');
+
+	                                $cgdinfo = Db::name("purchease_order")->where(["cgdNo" => $order['cgdNo']])->find();
+	                                if ($cgdinfo == false) throw new Exception('未匹配到采购数据');
+
+                            	}
 
                                 $out = [
                                     "orderCode" => $orderCode,
@@ -380,7 +388,7 @@ class ImportOrderFromCHandleData extends Command
                                     "send_num" => $num,
                                     "check_num" => 0,
                                     "error_num" => 0,
-                                    "wsm_code" => $cgdinfo['wsm_code'],
+                                    "wsm_code" =>$is_stock==1?$stock['wsm_code']: $cgdinfo['wsm_code'],
                                     "order_type" => $order_type,
                                     "status" => $is_stock == 1 ? 1 : 0,
                                     "addtime" => date("Y-m-d H:i:s"),

+ 50 - 46
app/command/handleYzOrderData.php

@@ -4,7 +4,7 @@ namespace app\command;
 
 use app\admin\model\ActionLog;
 use app\admin\model\GoodLog;
-use app\admin\model\ProcessOrder;
+use app\admin\model\GoodStockInfo;use app\admin\model\ProcessOrder;
 use think\console\Command;
 use think\console\Input;
 use think\console\Output;
@@ -30,7 +30,7 @@ class handleYzOrderData extends Command
 
         $c_data = Cache::store('redis')->handler()->rpop(Config::get('app.handle_queue_key'));
 
-        if ($c_data) {
+        if ($c_data){
 
             $c_data = json_decode($c_data, true);
 
@@ -344,6 +344,7 @@ class handleYzOrderData extends Command
                             'gold_price' => $ct['cgd_gold_price'],
                             'good_createrid' => $goodinfo['createrid'],
                             'good_creater' => $goodinfo['creater'],//商品创建人
+                            'weight' => $ct['noble_weight'],//商品创建人
                         ];
 
                         //非库存品
@@ -352,18 +353,18 @@ class handleYzOrderData extends Command
 
                     } else {
                         //库存品
-                        $cgd = [
-                            'orderCode' => $orderCode,
-                            "good_num" => $good_num,
-                            "spuCode" => $spuCode,
-                            "companyNo" => $supplierNo,
-                            'order_type' => $order_type,
-                            'order_source' => $order_source,
-                            'good_createrid' => $goodinfo['createrid'],
-                            'good_creater' => $goodinfo['creater'],//商品创建人
-                        ];
-                        $bol = $this->RelaCgd($cgd, $standing_book_data);
-                        if ($bol == false) throw new Exception('库存商品关联采购单失败');
+//                        $cgd = [
+//                            'orderCode' => $orderCode,
+//                            "good_num" => $good_num,
+//                            "spuCode" => $spuCode,
+//                            "companyNo" => $supplierNo,
+//                            'order_type' => $order_type,
+//                            'order_source' => $order_source,
+//                            'good_createrid' => $goodinfo['createrid'],
+//                            'good_creater' => $goodinfo['creater'],//商品创建人
+//                        ];
+//                        $bol = $this->RelaCgd($cgd, $standing_book_data);
+//                        if ($bol == false) throw new Exception('库存商品关联采购单失败');
 
                         if (isset($stock)) {
                             $stck = [
@@ -375,7 +376,11 @@ class handleYzOrderData extends Command
                                 ->where($stock)
                                 ->update($stck);
                             if ($upad == false) throw new Exception('库存商品更新库存失败');
-
+		                        $stockinfo =GoodStockInfo::OrderBn($orderCode,$stock['id'],$good_num);
+		                    if($stockinfo==false){
+		                             Db::rollback();
+		                            return error_show(1002, "Bn库存更新库存失败");
+		                     }
                             //商品变动日志表,good_log_code字段存储采购单号
                             $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $datainfo, "type" => 2, 'stock' => $good_num, "stock_name" => "usable_stock"];
                             $good_data[] = ['good_log_code' => $orderCode, "stock_id" => $datainfo, "type" => 1, 'stock' => $good_num, "stock_name" => "wait_out_stock"];
@@ -409,35 +414,34 @@ class handleYzOrderData extends Command
                         ];
                         $vmp = Db::name('order_addr')->insertGetId($temp);
                         if ($vmp > 0) {
-                            $order = Db::name("order_num")
-                                ->where(["orderCode" => $orderCode, "status" => 1])
-                                ->where([["wsend_num", ">=", 0]])
-                                ->lock(true)
-                                ->find();
-                            if ($order == false) throw new Exception('未找到可以发货得采购单数据');
-
-
-                            $num = $c_data['num'];
-                            $outCode = makeNo("DF");
-                            $order['wsend_num'] -= $num;
-                            $order['send_num'] += $num;
-                            $or = Db::name("order_num")->save($order);
-                            if ($or == false) throw new Exception('发货地址更新失败');
-
-                            $tep = [
-                                "cgdNo" => $order['cgdNo'],
-                                "outCode" => $outCode,
-                                "send_num" => $num,
-                                "status" => 1,
-                                "addtime" => date("Y-m-d H:i:s"),
-                                "updatetime" => date("Y-m-d H:i:s")
-                            ];
-                            $sen = Db::name("order_send")->save($tep);
-                            if ($sen == false) throw new Exception('发货地址添加创建失败');
-
-                            $cgdinfo = Db::name("purchease_order")->where(["cgdNo" => $order['cgdNo']])->find();
-                            if ($cgdinfo == false) throw new Exception('未匹配到采购数据');
-
+								$num = $c_data['num'];
+	                            $outCode = makeNo("DF");
+                        	if ($is_stock != 1) {
+	                            $order = Db::name("order_num")
+	                                ->where(["orderCode" => $orderCode, "status" => 1])
+	                                ->where([["wsend_num", ">=", 0]])
+	                                ->lock(true)
+	                                ->find();
+	                            if ($order == false) throw new Exception('未找到可以发货得采购单数据');
+	                            $order['wsend_num'] -= $num;
+	                            $order['send_num'] += $num;
+	                            $or = Db::name("order_num")->save($order);
+	                            if ($or == false) throw new Exception('发货地址更新失败');
+
+	                            $tep = [
+	                                "cgdNo" => $order['cgdNo'],
+	                                "outCode" => $outCode,
+	                                "send_num" => $num,
+	                                "status" => 1,
+	                                "addtime" => date("Y-m-d H:i:s"),
+	                                "updatetime" => date("Y-m-d H:i:s")
+	                            ];
+	                            $sen = Db::name("order_send")->save($tep);
+	                            if ($sen == false) throw new Exception('发货地址添加创建失败');
+
+	                            $cgdinfo = Db::name("purchease_order")->where(["cgdNo" => $order['cgdNo']])->find();
+	                            if ($cgdinfo == false) throw new Exception('未匹配到采购数据');
+							}
                             $out = [
                                 "orderCode" => $orderCode,
                                 "outCode" => $outCode,
@@ -451,7 +455,7 @@ class handleYzOrderData extends Command
                                 "send_num" => $num,
                                 "check_num" => 0,
                                 "error_num" => 0,
-                                "wsm_code" => $cgdinfo['wsm_code'],
+                                "wsm_code" => $is_stock==1? $stock['wsm_code']:$cgdinfo['wsm_code'],
                                 "order_type" => $order_type,
                                 "status" => $is_stock == 1 ? 1 : 0,
                                 "addtime" => date("Y-m-d H:i:s"),
@@ -604,7 +608,7 @@ class handleYzOrderData extends Command
             "demo_fee" => $data['demo_fee'],
             "nake_fee" => $data['nake_fee'],
             "delivery_fee" => $data['delivery_fee'],
-            #"weight"=>$data['weight'],
+            "weight"=>$data['weight'],
             "diff_weight" => "0",
             "diff_fee" => "0",
             "gold_price" => $data['gold_price'],

+ 54 - 0
app/command/license.php

@@ -0,0 +1,54 @@
+<?php
+declare (strict_types = 1);
+
+namespace app\command;
+
+use think\console\Command;
+use think\console\Input;
+use think\console\input\Argument;
+use think\console\input\Option;
+use think\console\Output;
+use app\admin\common\Ocr;
+use think\facade\Db;
+class license extends Command
+{
+    protected function configure()
+    {
+        // 指令配置
+        $this->setName('license')
+            ->setDescription('the license command');
+    }
+
+    protected function execute(Input $input, Output $output)
+    {
+        // 指令输出
+        $data=$this->getdata();
+        $ocr =new Ocr();
+        foreach ($data as $value){
+            $datwa =  $ocr->query("",$value['license_img']);
+            if($datwa['code']==0 && isset($datwa['data']['result'])){
+                $license = $datwa['data']['result'];
+                $value['legaler']= isset($license['legal_representative'])?$license['legal_representative']:"";
+                $value['addr']= isset($license['address'])?$license['address']:"";
+                $value['registertime']= isset($license['found_date'])? $license['found_date']:"";
+                $value['scope']= isset($license['business_scope'])?$license['business_scope']:"";
+                $value['capital']= isset($license['registered_capital'])?$license['registered_capital']:"";
+                $value['nature']= isset($license['type'])?$license['type']:"";
+                $value['registercode']= isset($license['registration_number'])?$license['registration_number']:"";
+                $value['status']=1;
+                $value['ocr_status']=1;
+            }else{
+                $value['remark']="营业执照识别失败";
+                $value['status']=0;
+                $value['ocr_status']=2;
+            }
+            Db::name("supplier")->save($value);
+        }
+        $output->writeln('license');
+    }
+
+    public function getdata(){
+      $sql = Db::name("supplier")->where(["ocr_status"=>2])->select();
+      return $sql;
+    }
+}

+ 1 - 1
app/common.php

@@ -1256,7 +1256,7 @@ if (!function_exists('get_handle_user_list')) {
                 ->cursor();
 
             foreach ($share as $s) {
-                if ($s['to_user']) $data[] = [$s['to_user']];
+                if ($s['to_user']) $data[] = $s['to_user'];
                 elseif ($s['to_group']) {
                     $group_user = Db::name('role_group')
                         ->where([

Some files were not shown because too many files changed in this diff