瀏覽代碼

新增库单据优化,循环读库改为内存操作

Zhouzhendong 6 年之前
父節點
當前提交
dacb9f4e09

+ 6 - 2
app/Commodity.php

@@ -7,8 +7,8 @@ use Illuminate\Database\Eloquent\Model;
 
 class Commodity extends Model
 {
-    protected $fillable=['name','sku','owner_id'];
-    protected $appends=['barcode','owner_name'];
+    protected $fillable=['name','sku','owner_id','created_at'];
+    protected $appends=['barcode','owner_name','owner_code'];
 
     public function barcodes()
     {
@@ -23,6 +23,10 @@ class Commodity extends Model
     public function getOwnerNameAttribute(){
         return $this->owner()->first()['name'];
     }
+    public function getOwnerCodeAttribute(){
+        return $this['owner'] ? $this['owner']['code'] : null;
+    }
+
     static function newCommodityBy_BarcodeOwnerIdNameSku($barcode,$ownerId,$name,$sku){
         $barcodes=rtrim($barcode,',');
         $barcodes=explode(',',$barcodes);

+ 1 - 1
app/CommodityBarcode.php

@@ -6,5 +6,5 @@ use Illuminate\Database\Eloquent\Model;
 
 class CommodityBarcode extends Model
 {
-    protected $fillable=['code','commodity_id'];
+    protected $fillable=['code','commodity_id','created_at'];
 }

+ 5 - 22
app/Http/Controllers/TestController.php

@@ -23,6 +23,7 @@ use App\Rejected;
 use App\RejectedBill;
 use App\RejectedBillItem;
 use App\Role;
+use App\Unit;
 use App\User;
 use App\UserDutyCheck;
 use App\WMSReflectReceive;
@@ -140,28 +141,10 @@ class TestController extends Controller
     }
 
     public function test1(){
-        $a=OracleBas_SKU::limit(10)->get();
+        $a=DB::table('units')->insert([
+            ["name"=>'test4'],["name"=>'test5'],["name"=>'test6'],
+        ]);
         dd($a);
-        /*$pdo= new PDO("oci:dbname=106.14.148.85:1521/orcl","viewer","viewer");
-dd($pdo);*/
-        $db="(DESCRIPTION =
-        (ADDRESS_LIST =
-          (ADDRESS = (PROTOCOL = TCP)(HOST = 106.14.148.85)(PORT = 1521))
-        )
-        (CONNECT_DATA =
-          (SERVER = DEDICATED)
-          (SERVICE_NAME = orcl)
-        ))";
-        $conn = oci_connect('viewer', 'viewer', '106.14.148.85:1521/orcl');
-        if (!$conn) {
-            $e = oci_error();
-            print htmlentities($e['message']);
-            exit;
-        }else {
-            echo "连接oracle成功!";
-        }
-        $basSku=oci_parse($conn, 'select * from "OracleBas_SKU"');
-        //$basSku=$conn->select('select * from "OracleBas_SKU"');
-        dd(oci_execute($basSku));
+
     }
 }

+ 137 - 43
app/Http/Controllers/api/thirdPart/flux/ProcessController.php

@@ -4,7 +4,6 @@ namespace App\Http\Controllers\Api\thirdPart\flux;
 
 
 use App\Commodity;
-use App\CommodityBarcode;
 use App\OracleBasSKU;
 use App\OracleDOCASNDetail;
 use App\OracleDOCMovementDetail;
@@ -12,8 +11,10 @@ use App\OracleDOCMovementHeader;
 use App\OracleDOCOrderDetail;
 use App\Http\Controllers\Controller;
 use App\Owner;
+use Carbon\Carbon;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\DB;
 
 class ProcessController extends Controller
 {
@@ -25,14 +26,53 @@ class ProcessController extends Controller
             $owner=Owner::where("code",$docASNs[0]->customerid)->first();
             if (!$owner)$owner=$this->storeOwner($docASNs[0]->customerid);
             if (!$owner)return ['error'=>'找到了入库单,但未查询到货主代码!'];
+            /*$basSKUs=['owner_code'=>[],'sku'=>[]];
             $commodities=[];
+            $i=0;
+            $docAsnSKUs=array_column($docASNs->toArray(),'sku');
+            $docAsnOwnerCodes=array_column($docASNs->toArray(),'customerid');
+            $commoditiesTem=Commodity::with(['barcodes','owner'=>function($query)use($docAsnOwnerCodes){
+                return $query->whereIn('code',$docAsnOwnerCodes);
+            }])->whereIn('sku',$docAsnSKUs)->get();
+            $commoditiesData=[];
+            foreach ($commoditiesTem as $commodityTem){
+                $commoditiesData[$commodityTem->sku."_".$commodityTem->owner_code]=$commodityTem;
+            }
             foreach ($docASNs as $docASN){
-                $commodity=Commodity::where('sku',$docASN->sku)->first();
-                if (!$commodity)$commodity = $this->storeCommodity($docASN->customerid,$docASN->sku);
-                if (!$commodity)continue;
-                array_push($commodities,['id'=>$commodity->id,'name'=>$commodity->name,
-                    'barcodes'=>$commodity->barcodes,'sku'=>$commodity->sku,'amount'=>$docASN->expectedqty]);
+                $commodity=isset($commoditiesData[$docASN->sku."_".$docASN->customerid])?$commoditiesData[$docASN->sku."_".$docASN->customerid]:null;
+                if (!$commodity){
+                    array_push($basSKUs['owner_code'],$docASN->customerid);
+                    array_push($basSKUs['sku'],$docASN->sku);
+                    $i++;
+                    continue;
+                }
+                $commodity->amount=$docASN->expectedqty;
+                array_push($commodities,$commodity->toArray());
+                unset($docASNs[$i]);
+                $i++;
             }
+            unset($docAsnOwnerCodes,$docAsnSKUs,$commoditiesTem,$commoditiesData);
+            if (count($basSKUs['sku'])>0 && count($basSKUs['owner_code'])>0){
+                $this->storeCommodity($basSKUs);
+                $docAsnSKUs=array_column($docASNs->toArray(),'sku');
+                $docAsnOwnerCodes=array_column($docASNs->toArray(),'customerid');
+                $commoditiesTem=Commodity::with(['barcodes','owner'=>function($query)use($docAsnOwnerCodes){
+                    return $query->whereIn('code',$docAsnOwnerCodes);
+                }])->whereIn('sku',$docAsnSKUs)->get();
+                $commoditiesData=[];
+                foreach ($commoditiesTem as $commodityTem){
+                    $commoditiesData[$commodityTem->sku."_".$commodityTem->owner_code]=$commodityTem;
+                }
+                foreach ($docASNs as $docASN){
+                    $commodity=$commoditiesData[$docASN->sku."_".$docASN->customerid];
+                    if (!$commodity){
+                        continue;
+                    }
+                    $commodity->amount=$docASN->expectedqty;
+                    array_push($commodities,$commodity->toArray());
+                }
+            }*/
+            $commodities=$this->resetData($docASNs,"sku","customerid","expectedqty","asnlineno");
             $processContent=[
                 'wms_code'=>$wms_code,
                 'owner_name'=>$owner->name,
@@ -47,14 +87,7 @@ class ProcessController extends Controller
             $owner=Owner::where("code",$docOrders[0]->customerid)->first();
             if (!$owner)$owner=$this->storeOwner($docOrders[0]->customerid);
             if (!$owner)return ['error'=>'找到了入库单,但未查询到货主代码!'];
-            $commodities=[];
-            foreach ($docOrders as $docOrder){
-                $commodity=Commodity::where('sku',$docOrder->sku)->first();
-                if (!$commodity)$commodity = $this->storeCommodity($docOrder->customerid,$docOrder->sku);
-                if (!$commodity)continue;
-                array_push($commodities,['id'=>$commodity->id,'name'=>$commodity->name,
-                    'barcodes'=>$commodity->barcodes,'sku'=>$commodity->sku,'amount'=>$docOrder->qtyordered]);
-            }
+            $commodities=$this->resetData($docOrders,"sku","customerid","qtyordered",'orderlineno');
             $processContent=[
                 'wms_code'=>$wms_code,
                 'owner_name'=>$owner->name,
@@ -66,19 +99,20 @@ class ProcessController extends Controller
         }
         $docMovementDetails=OracleDOCMovementDetail::where("MDOCNO",$wms_code)->get();//移库单
         if (count($docMovementDetails)>0){
-            $docMovementHeader=OracleDOCMovementHeader::select('CustomerID')->find($wms_code);
-            if (!$docMovementHeader)return ['error'=>'找到了移库单,但未查询移库单表头!'];
-            $owner=Owner::where("code",$docMovementHeader->customerid)->first();
-            if (!$owner)$owner=$this->storeOwner($docMovementHeader->customerid);
+            $docMovementHeaders=OracleDOCMovementHeader::select('CustomerID')->where('MDOCNO',$wms_code)->get();
+            if (count($docMovementHeaders)<1)return ['error'=>'找到了移库单,但未查询移库单表头!'];
+            $owner=Owner::where("code",$docMovementHeaders[0]->customerid)->first();
+            if (!$owner)$owner=$this->storeOwner($docMovementHeaders[0]->customerid);
             if (!$owner)return ['error'=>'找到了入库单,但未查询到货主代码!'];
-            $commodities=[];
+            $commodities=$this->resetData($docMovementDetails,"sku","customerid","toqty","mdoclineno",$docMovementHeaders);
+            /*$commodities=[];
             foreach ($docMovementDetails as $docMovementDetail){
                 $commodity=Commodity::where('sku',$docMovementDetail->sku)->first();
                 if (!$commodity)$commodity = $this->storeCommodity($owner->code,$docMovementDetail->sku);
                 if (!$commodity)continue;
                 array_push($commodities,['id'=>$commodity->id,'name'=>$commodity->name,
                     'barcodes'=>$commodity->barcodes,'sku'=>$commodity->sku,'amount'=>$docMovementDetail->toqty]);
-            }
+            }*/
             $processContent=[
                 'wms_code'=>$wms_code,
                 'owner_name'=>$owner->name,
@@ -91,34 +125,94 @@ class ProcessController extends Controller
         return ['error'=>'未查到对应单据号'];
     }
 
-    private function storeCommodity($owner_code,$sku){
-        $oracleBasSku=OracleBasSKU::where("CustomerID",$owner_code)->where("SKU",$sku)->first();
-        if (!$oracleBasSku)return;
-        $owner=Owner::where('code',$owner_code)->first();
-        if (!$owner)$owner=$this->storeOwner($owner_code);
-        $commodity=new Commodity([
-            "name"=>$oracleBasSku->descr_c,
-            "sku"=>$oracleBasSku->sku,
-            "owner_id"=>$owner->id,
-        ]);
-        $commodity->save();
-        if ($oracleBasSku->alternate_sku1){
-            $barcode=$this->storeCommodityBarCode($oracleBasSku->alternate_sku1,$commodity->id);
-            $commodity->barcodes=[[$barcode]];
+
+    //重组商品数据
+    private function resetData($doc,$skuColumn,$customeridColumn,$amountColumn,$lineNoColumn,$docHeader=null){
+        //处理重组数据
+        $docs=['owner_code'=>[],'sku'=>[]];
+        $commodities=[];
+        $i=0;
+        $docSKUs=array_column($doc->toArray(),'sku');
+        $docOwnerCodes=array_column($docHeader?$docHeader->toArray():$doc->toArray(),'customerid');
+        $commoditiesTem=Commodity::with(['barcodes','owner'=>function($query)use($docOwnerCodes){
+            return $query->whereIn('code',$docOwnerCodes);
+        }])->whereIn('sku',$docSKUs)->get();
+        $commoditiesData=[];
+        foreach ($commoditiesTem as $commodityTem){
+            $commoditiesData[$commodityTem->sku."_".$commodityTem->owner_code]=$commodityTem;
         }
-        $this->log(__METHOD__, 'FLUX二次加工单接口录入商品__' . __FUNCTION__, json_encode($commodity), Auth::user()['id']);
-        return $commodity;
+        foreach ($doc as $docOne){
+            $customerid=$docHeader?$docHeader[0][$customeridColumn]:$docOne[$customeridColumn];
+            $commodity=isset($commoditiesData[$docOne[$skuColumn]."_".$customerid])
+                ?$commoditiesData[$docOne[$skuColumn]."_".$customerid]:null;
+            if (!$commodity){
+                array_push($docs['owner_code'],$docHeader?$docHeader[0][$customeridColumn]:$docOne[$customeridColumn]);
+                array_push($docs['sku'],$docOne[$skuColumn]);
+                $i++;
+                continue;
+            }
+            $commodity->amount=$docOne[$amountColumn];
+            $commodity->lineNo=$docOne[$lineNoColumn];
+            array_push($commodities,$commodity->toArray());
+            unset($doc[$i]);
+            $i++;
+        }
+        unset($docSKUs,$docOwnerCodes,$commoditiesTem,$commoditiesData,$customerid);
+        if (count($docs['sku'])>0 && count($docs['owner_code'])>0){
+            $this->storeCommodity($docs);
+            $docSKUs=array_column($doc->toArray(),'sku');
+            $docOwnerCodes=array_column($docHeader?$docHeader->toArray():$doc->toArray(),'customerid');
+            $commoditiesTem=Commodity::with(['barcodes','owner'=>function($query)use($docOwnerCodes){
+                return $query->whereIn('code',$docOwnerCodes);
+            }])->whereIn('sku',$docSKUs)->get();
+            $commoditiesData=[];
+            foreach ($commoditiesTem as $commodityTem){
+                $commoditiesData[$commodityTem->sku."_".$commodityTem->owner_code]=$commodityTem;
+            }
+            foreach ($doc as $docOne){
+                $customerid=$docHeader?$docHeader[0][$customeridColumn]:$docOne[$customeridColumn];
+                $commodity=isset($commoditiesData[$docOne[$skuColumn]."_".$customerid])
+                    ?$commoditiesData[$docOne[$skuColumn]."_".$customerid]:null;
+                if (!$commodity)continue;
+                $commodity->amount=$docOne[$amountColumn];
+                $commodity->lineNo=$docOne[$lineNoColumn];
+                array_push($commodities,$commodity->toArray());
+            }
+        }
+        return $commodities;
     }
 
-    private function storeCommodityBarCode($code,$commodity_id){
-        $barcode=new CommodityBarcode([
-            'code'=>$code,
-            'commodity_id'=>$commodity_id,
-        ]);
-        $barcode->save();
-        $this->log(__METHOD__, 'FLUX二次加工单接口录入商品条码__' . __FUNCTION__, json_encode($barcode), Auth::user()['id']);
+    private function storeCommodity($basSKUs){
+        $oracleBasSkus=OracleBasSKU::whereIn("CustomerID",$basSKUs['owner_code'])->whereIn("SKU",$basSKUs['sku'])->get();
+        if (count($oracleBasSkus)<1)return;
+        $commoditiesData=[];
+        $commoditiesTem=["sku"=>[],"owner_id"=>[]];
+        $commodityBarCodeData=[];
+        $commodityBarCodeTem=[];
+        $owners_code=array_column($oracleBasSkus->toArray(),'customerid');
+        $ownersTem=Owner::whereIn('code',$owners_code)->get();
+        $owners=array_column($ownersTem->toArray(),'id','code');
+        for($i=0;$i<count($oracleBasSkus);$i++){
+            if (!$owners[$oracleBasSkus[$i]->customerid])$owners[$oracleBasSkus[$i]->customerid]=$this->storeOwner($oracleBasSkus[$i]->customerid);
+            array_push($commoditiesData,["owner_id"=>$owners[$oracleBasSkus[$i]->customerid],"name"=>$oracleBasSkus[$i]->descr_c,"sku"=>$oracleBasSkus[$i]->sku,"created_at"=>Carbon::now()]);
+            array_push($commoditiesTem['sku'],$oracleBasSkus[$i]->sku);
+            array_push($commoditiesTem['owner_id'],$owners[$oracleBasSkus[$i]->customerid]);
+            $commodityBarCodeData[$oracleBasSkus[$i]->sku."_".$owners[$oracleBasSkus[$i]->customerid]]=["code"=>$oracleBasSkus[$i]->alternate_sku1,"commodity_id"=>'','created_at'=>Carbon::now()];
+        }
+        DB::table('commodities')->insert($commoditiesData);
+        $this->log(__METHOD__, 'FLUX二次加工单接口录入商品__' . __FUNCTION__, json_encode($commoditiesData), Auth::user()['id']);
+        $commodities=Commodity::whereIn('sku',$commoditiesTem['sku'])->whereIn('owner_id',$commoditiesTem['owner_id'])->get();
+        foreach ($commodities as $commodity){
+            $commodityBarCodeData[$commodity->sku."_".$commodity->owner_id]['commodity_id']=$commodity->id;
+        }
+        foreach ($commodityBarCodeData as $key=>$value){
+            array_push($commodityBarCodeTem,$value);
+        }
+        DB::table('commodity_barcodes')->insert($commodityBarCodeTem);
+        $this->log(__METHOD__, 'FLUX二次加工单接口录入商品条码__' . __FUNCTION__, json_encode($commodityBarCodeTem), Auth::user()['id']);
     }
 
+
     private function storeOwner($code){
         $owner=new Owner([
             "name"=>$code,

+ 4 - 6
resources/views/process/create.blade.php

@@ -26,7 +26,7 @@
                             <span class=" col-9 input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:1.5;text-align: center;">
                                 <ul class="list-group tooltipTarget" title="双击选择商品" style="width: 100%" onselectstart="return false;">
                                     <li v-for="commodity in processContent.commodities" :id="commodity.id" class="list-group-item list-group-item-action p-0 m-0"
-                                        @dblclick="selectedCommodity(commodity,processContent.wms_code)" :class="processContent.commodity_id && processContent.commodity_id==commodity.id ? 'active' :''">
+                                        @dblclick="selectedCommodity(commodity,processContent.wms_code)" :class="processContent.commodity_id && processContent.commodity_id==commodity.id && processContent.lineNo==commodity.lineNo? 'active' :''">
                                         <p class="form-inline" style="cursor: default;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;"><small style="overflow: hidden;" :title="commodity.name" class="text-left text-info col-6">@{{ commodity.name }}</small>
                                             <small class="text-left  col-6" style="overflow: hidden;">
                                                 <a v-for="barcode in commodity.barcodes">@{{ barcode.code }}&nbsp;&nbsp;&nbsp;</a>
@@ -196,6 +196,7 @@
                     _this.msg=true;
                     axios.post('{{url("api/thirdPart/flux/process/getProcessContent")}}',{wms_code:wms_code})
                         .then(function (response) {
+                            console.log(response.data);
                             if (_this.msg)_this.msg=false;
                             tempTip.cancelWaitingTip();
                             tempTip.setDuration(3000);
@@ -215,6 +216,7 @@
                             processContent['commodity_sku']='';
                             processContent['bill_type']=response.data.bill_type;
                             processContent['amount']='';
+                            processContent['lineNo']='';
                             processContent['addBtnShow']=true;
                             _this.processContents.unshift(processContent);
                         }).catch(function (err) {
@@ -284,6 +286,7 @@
                            processContent.commodity_barcodes=commodity.barcodes;
                            processContent.commodity_sku=commodity.sku;
                            processContent.amount=commodity.amount;
+                           processContent.lineNo=commodity.lineNo;
                            return false;
                        }
                        return  true;
@@ -328,11 +331,6 @@
                     let unit_price=_this.process.unit_price;
                     let remark=_this.process.remark;
                     let amount=_this.process.amount;
-                    /*if (!owner_id || !process_method_id || !unit_price || !amount) {
-                        tempTip.setDuration(3000);
-                        tempTip.show('请确认您信息输入的完整性!');
-                        return;
-                    }*/
                     _this.processContentError=[];
                     axios.post('{{url("process")}}',{
                         owner_id:owner_id,process_method_id:process_method_id,unit_price:unit_price,