wugg 2 жил өмнө
parent
commit
a0b9146b95

+ 10 - 3
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;
@@ -430,7 +430,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', 'cgdNo');
+            ->column('id,wsm_code,good_num,good_price,spuCode,order_type,send_status,status', 'cgdNo');
 
         if (empty($cgdinfo)) return json_show(1005, "未找到采购单数据或采购单未发货");
 
@@ -456,7 +456,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字符串填充
@@ -467,6 +467,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'],
@@ -531,12 +532,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"];
                     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;
@@ -320,6 +320,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");
@@ -490,7 +511,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'],

+ 34 - 40
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;
@@ -471,6 +455,11 @@ class Allot extends Base
                             Db::rollback();
                             return error_show(2000,"超出库存数量");
                         }
+                        $stockinfo = Db::name("good_stock_info")->where(["bnCode"=>$value['bnCode'],"stock_id"=>$stock['id'],"is_del"=>0])->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 +470,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"];
@@ -712,21 +706,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 +740,11 @@ public function vesio(){
                     Db::rollback();
                     return error_show(1004, "验货更新失败");
                 }
+                $stoup =GoodStockInfo::bnStock($stock['id'],$value['bnCode'],$value['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"];

+ 12 - 9
app/admin/controller/Check.php

@@ -561,9 +561,10 @@ public function edit()
         }
         $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'商品编码',
+            ->join("good_stock_info d","c.id=d.stock_id and d.balance_num>0","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 'bn库存数','' as '盘点库存'")
             ->select();
         $data=[];
         foreach ($list as $key=>$value){
@@ -612,17 +613,19 @@ public function edit()
             if($value["value14"]===""){
                 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.stock_id","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,
+                "origin_num"=>isset($stock) ? $stock['balance_num']: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"]),
+                "diff_num"=>intval($value["value14"])>=$stock_num ?intval($value["value14"])-$stock_num:$stock_num-intval($value["value14"]),
                 'addtime'=>date("Y-m-d H:i:s"),
                 'updatetime'=>date("Y-m-d H:i:s"),
                 "check_code"=>$fo['check_code']

+ 118 - 52
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;
@@ -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,7 @@ class Orderback extends Base
                 Db::rollback();
                 return error_show(1004,"未找到售后单数据");
             }
-
+			$sabebn =Db::name("sale_info")->where(["orderCode"=>$info['orderCode']])->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 +448,43 @@ class Orderback extends Base
                     if($st_up==false){
                         return error_show(1005,'可售商品入库失败');
                     }
+                    $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;
+                        			$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'=>$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"];
                 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 +509,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;
+                        			$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'=>$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 +568,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'];

+ 15 - 7
app/admin/controller/Purch.php

@@ -109,8 +109,10 @@ class Purch extends Base
             $where[]=['on.orderCode',"like", '%'.$orderCode.'%'];
         }
         $role=$this->checkRole();
+        $whereor=[];
         if(!empty($role['write'])){
-            $where[]=["po.cgder_id","in",$role['write']];
+            $whereor[]=["po.cgder_id","in",$role['write']];
+            $whereor[]=["sip.personid","=",$this->uid];
         }
         $company_name = isset($this->post['company_name']) && $this->post['company_name'] !== "" ? trim($this->post['company_name']) : "";
         if ($company_name !== "") $where[] = ["po.cgder_id", 'in', get_company_item_user_by_name($company_name)];
@@ -121,20 +123,26 @@ class Purch extends Base
         $count = Db::name("purchease_order")
             ->alias('po')
             ->leftJoin('order_num on', 'on.cgdNo=po.cgdNo')
+            ->leftJoin('supplier sip', 'sip.code=po.supplierNo')
             ->where($where)
             ->where(function ($query) use ($where) {
                 $query->whereOr([['po.order_type', '<>', 1], ['po.order_source', '=', 0]]);
-            })
-            ->count();
+            })->where(function ($query) use ($whereor) {
+                $query->whereOr($whereor);
+            })->count();
         $total = ceil($count/$size);
         $page = $page >= $total ? $total : $page;
         $list = Db::name("purchease_order")
             ->alias('po')
             ->leftJoin('order_num on','on.cgdNo=po.cgdNo')
             ->leftJoin("depart_user u", "u.uid=po.cgder_id AND u.is_del=0")
-            ->field('po.*,on.orderCode,u.itemid')
+             ->leftJoin('supplier sip', 'sip.code=po.supplierNo')
+            ->field('po.*,on.orderCode,u.itemid,sip.personid as supplier_cgderid,sip.person as supplier_cgder')
             ->where($where)
             ->where(function($query) use ($where){$query->whereOr([['po.order_type', '<>', 1],['po.order_source', '=', 0]]);})
+            ->where(function ($query) use ($whereor) {
+                $query->whereOr($whereor);
+            })
             ->page($page,$size)
             ->order("po.addtime desc")
             ->select()
@@ -151,9 +159,9 @@ class Purch extends Base
                 $value['wsm_supplier'] =isset($wsmcode['name']) ? $wsmcode['name']:"";
                 $value['wsm_supplierNo'] =isset($wsmcode['code']) ? $wsmcode['code']:"";
             }
-			$supplierCgder =Db::name("supplier")->where(["code"=>$value['supplierNo']])->findOrEmpty();
-            $value['supplier_cgderid'] = $supplierCgder['personid'] ??'';
-            $value['supplier_cgder'] = $supplierCgder['person'] ??'';
+//			$supplierCgder =Db::name("supplier")->where(["code"=>$value['supplierNo']])->findOrEmpty();
+//            $value['supplier_cgderid'] = $supplierCgder['personid'] ??'';
+//            $value['supplier_cgder'] = $supplierCgder['person'] ??'';
             if($value['order_type']==3){
                 $goon = Db::name("good_zixun")->where(["spuCode"=>$value['spuCode'],"is_del"=>0])->find();
                 $value["speclist"]=isset($goon['specinfo'])&&$goon['specinfo']!=""? json_decode($goon['specinfo'],true):"";

+ 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是之前的值
@@ -387,8 +361,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){
@@ -398,6 +374,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']];
                         ProcessOrder::AddProcess($this->post['token'],$process);
@@ -677,29 +654,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,'商品入库成功');
@@ -983,27 +953,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);
@@ -1011,8 +966,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"];
@@ -1031,7 +992,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=[
@@ -1118,55 +1078,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());
-//        }
-//
-//    }
 }

+ 102 - 66
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;
@@ -696,19 +696,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, "发货单更新失败");
+//                                    }
 
                                 }
                             }
@@ -736,58 +736,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) {
@@ -966,7 +968,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=[

+ 171 - 137
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) {
@@ -299,38 +298,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"];
@@ -366,43 +363,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, "未匹配到采购数据");
+                           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, "未匹配到采购数据");
+	                            }
                             }
                             $out = [
                                 "orderCode" => $orderCode,
@@ -417,7 +415,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"),
@@ -447,9 +445,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, "发货地址添加创建失败");
                         }
@@ -680,15 +679,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);
@@ -701,7 +700,7 @@ class Sale extends Base
                         Db::rollback();
                         return error_show(1002, "发货地址添加创建失败");
                     }
-                    $tep = [
+                     $tep = [
                         "cgdNo" => $order['cgdNo'],
                         "outCode" => $outCode,
                         "send_num" => $num,
@@ -719,38 +718,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 {
@@ -775,9 +747,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,
@@ -828,6 +810,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) {
@@ -1882,11 +1869,14 @@ class Sale extends Base
                 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'],
@@ -1897,6 +1887,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"];
@@ -3498,19 +3492,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,
@@ -3527,18 +3512,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();
@@ -3559,11 +3540,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,
@@ -3780,6 +3774,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");
@@ -4369,7 +4384,7 @@ 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', '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'] . '该发货单对应的销售单未找到');
 
@@ -4464,7 +4479,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'],

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

@@ -0,0 +1,183 @@
+<?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库存数
+	*/
+    public function AddBn(int $stockid,string $bn,int $num,float $origin_price=0){
+		$data=$this->where(["stockid"=>$stockid,"bnCode"=>$bn])->findOrEmpty();
+		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")
+				];
+		}else{
+			$total_num = $data["balance_num"]+$num;
+			if($total_num> $data["total_num"]) throw new Exception("批次入库数量超过总数",1006);
+			$data["balance_num"]=$num;
+			$data["updatetime"]=date("Y-m-d H:i:s");
+		}
+
+		return $this->save($data);
+    }
+
+	/**
+	* @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
+	*/
+    public function SaleBn(int $stockid,int $num){
+		$arr = $this->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=[];
+		    if($item['balance_num']<=$num){
+		    	$item['balance_num'] =0;
+		    	$item['used_num'] +=$item['balance_num'];
+		    	$num-=$item['balance_num'];
+		    	$item['updatetime'] =date("Y-m-d H:i:s");
+		    	$temp=["bnCode"=>$item['bnCode'],"num"=>$item['balance_num'],"origin_price"=>$item["origin_price"]];
+		    }else{
+				$item['balance_num']-=$num;
+		    	$item['used_num'] +=$num;
+		    	$num=0;
+		    	$item['updatetime'] =date("Y-m-d H:i:s");
+		    	$temp=["bnCode"=>$item['bnCode'],"num"=>$num,"origin_price"=>$item["origin_price"]];
+		    }
+		    $this->save($item);
+		    $list[]=$temp;
+		}
+		return $list;
+    }
+	/**
+	* @param int $stockid
+	* @param string $bn
+	* @param int $num
+	* @return bool  盘点修改bn仓库库存数
+	* @throws \think\Exception
+	*/
+    public function CheckBn(int $stockid,string $bn,int $num){
+		$data=$this->where(["stockid"=>$stockid,"bnCode"=>$bn])->findOrEmpty();
+		if(empty($data)) throw new Exception("未找到Bn库存数据",1006);
+			$data["balance_num"]=$num;
+			$data["total_num"]=$data["used_num"]+$num;
+			$data["updatetime"]=date("Y-m-d H:i:s");
+		return $this->save($data);
+    }
+	/**
+	* @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
+	 */
+    public function OrderBn(string $orderCode,int $stockid,int $num){
+        $bnArr=$this->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 $this->name("sale_info")->insertAll($ordBn);
+    }
+	/**
+	* @param string $returnCode
+	* @param int $salebnid
+	* @param int $num
+	* @param int $type
+	 * @return bool
+	* @throws \think\Exception
+	 */
+    public function ReturnBn(string $returnCode,int $salebnid,int $num,int $type=1){
+    	$sabn=$this->name("sale_info")->where(['id'=>$salebnid])->findOrEmpty();
+    	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 $this->name("return_info")->save($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
+ */
+    public function bnStock(int $stockid,string $bnCode,int $num,int $flag=0,float $origin_price=0){
+			$stock =$this->where(["stockid"=>$stockid,"bnCode"=>$bnCode])->lock(true)->findOrEmpty();
+			if($flag==1) {
+				if(empty($stock)|| $stock['balance_num']< $num)
+					throw new Exception("bn库存数不足",1006);
+				else{
+						$stock['balance_num']-=$num;
+						$stock['total_num']-=$num;
+						$stock['updatetime']=date("Y-m-d H:i:s");
+					}
+			}else{
+				if (empty($stock)){
+					$stock=[
+						"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{
+						$stock['balance_num']+=$num;
+						$stock['total_num']+=$num;
+						$stock['updatetime']=date("Y-m-d H:i:s");
+				}
+			}
+			return	$this->save($stock);
+	}
+}

+ 13 - 5
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;
@@ -120,7 +120,10 @@ class ImportOrderFromCHandleData extends Command
                             ->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 {
@@ -297,8 +300,10 @@ 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 = [
@@ -310,7 +315,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"];

+ 21 - 16
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"];
@@ -603,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;
+    }
+}