Explorar o código

Merge branch 'master' into zengjun

ajun %!s(int64=5) %!d(string=hai) anos
pai
achega
dbfffd282d

+ 65 - 1
app/Http/Controllers/CommodityController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
 
 use App\Commodity;
 use App\Imports\CommodityImport;
+use App\OracleBasSKU;
 use Exception;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Http\Request;
@@ -23,7 +24,7 @@ class CommodityController extends Controller
     public function index()
     {
         if(!Gate::allows('商品信息-查询')){ return redirect(url('/'));  }
-        $commodities=Commodity::orderBy('id','desc')->paginate(50);
+        $commodities=Commodity::query()->orderBy('id','desc')->paginate(50);
         return view('maintenance.commodity.index',['commodities'=>$commodities]);
     }
 
@@ -162,4 +163,67 @@ class CommodityController extends Controller
         }
         return ['success'=>'true','name'=>$name];
     }
+
+    public function syncWMS(Request $request){
+        $owner_code = $request->owner_code ?? false;
+        $owner_id = $request->owner_id ?? false;
+        if (!$owner_code || !$owner_id)return ['success'=>false, 'data'=>"未指定货主"];
+
+        $map = [];
+        $skus = [];
+        $wmsCommodities = app('oracleBasSkuService')->getOwnerCommodities(['code' => $owner_code]);
+        foreach ($wmsCommodities as $index => $wmsCommodity){
+            $map[$wmsCommodity->sku] = $index;
+            $skus[] = $wmsCommodity->sku;
+        }
+
+        $commodities = app('commodityService')->getOwnerCommodities(['id' => $owner_id, 'sku'=>$skus]);
+
+        $updateCommodities = [];
+        $updateCommodities[] = [
+            'id', 'name', 'length', 'width', 'height', 'volumn',
+        ];
+        foreach ($commodities as $commodity){
+            $wms = $wmsCommodities[$map[$commodity->sku]];
+            if (($commodity->length != $wms->skulength) || ($commodity->width != $wms->skuwidth)
+                || ($commodity->height != $wms->skuhigh) || ($commodity->volumn != $wms->cube)
+                || ($commodity->name != $wms->descr_c)){
+                $updateCommodities[] = [
+                    'id'=>$commodity->id,
+                    'name' => $wms->descr_c,
+                    'length' => $wms->skulength,
+                    'width' => $wms->skuwidth,
+                    'height' => $wms->skuhigh,
+                    'volumn' => $wms->cube
+                ];
+            }
+            unset($wmsCommodities[$map[$commodity->sku]]);
+            unset($map[$commodity->sku]);
+        }
+        unset($commodities);
+        unset($skus);
+
+        if (count($updateCommodities) > 1)app('commodityService')->batchUpdate($updateCommodities);
+
+        $createCommodities = [];
+        $today = date('Y-m-d H:i:s');
+        foreach ($map as $sku => $index){
+            $wms = $wmsCommodities[$index];
+            $createCommodities[] = [
+                'owner_id' => $owner_id,
+                'sku' => $wms->sku,
+                'name' => $wms->descr_c,
+                'length' => $wms->skulength,
+                'width' => $wms->skuwidth,
+                'height' => $wms->skuhigh,
+                'volumn' => $wms->cube,
+                "created_at" => $today,
+            ];
+            unset($wmsCommodities[$index]);
+        }
+
+        if (count($createCommodities) > 0)app('commodityService')->insert($createCommodities);
+
+        return ['success'=>true];
+    }
 }

+ 3 - 9
app/Http/Controllers/OwnerController.php

@@ -72,15 +72,9 @@ class OwnerController extends Controller
             'code'=>['required', 'string', 'max:50',"unique:owners,code,$id"]
         ]);
     }
-    /**
-     * Display the specified resource.
-     *
-     * @param Owner $owner
-     * @return Response
-     */
-    public function show(Owner $owner)
-    {
-        //
+    public function getOwners(){
+        $owners = app('ownerService')->getSelection(['id','code','name']);
+        return $owners;
     }
 
     /**

+ 4 - 0
app/Http/Controllers/TestController.php

@@ -12,6 +12,7 @@ use App\Log;
 use App\Logistic;
 use App\OracleActAllocationDetails;
 use App\OracleBasCode;
+use App\OracleBasSKU;
 use App\OracleDOCASNDetail;
 use App\OracleDOCOrderHeader;
 use App\OracleDocOrderPackingSummary;
@@ -408,6 +409,9 @@ class TestController extends Controller
     }
 
     public function test2(){
+        $a = OracleBasSKU::query()->where('customerid','HY')->get();
+        unset($a[0]);
+        dd($a[1],$a);
     }
 
     /*1*/

+ 2 - 0
app/Providers/AppServiceProvider.php

@@ -8,6 +8,7 @@ use App\Services\common\BatchUpdateService;
 use App\Services\CommodityBarcodeService;
 use App\Services\common\DataHandlerService;
 use App\Services\InventoryCompareService;
+use App\Services\OracleBasSkuService;
 use App\Services\OracleDOCOrderHeaderService;
 use App\Services\OrderIssuePerformanceService;
 use App\Services\AllInventoryService;
@@ -108,6 +109,7 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('storeCheckingReceiveItemService',StoreCheckingReceiveItemService::class);
         app()->singleton('commodityBarcodeService',CommodityBarcodeService::class);
         app()->singleton('commodityService',CommodityService::class);
+        app()->singleton('oracleBasSkuService',OracleBasSkuService::class);
 
         $this->loadingOrderModuleService();
         $this->loadingBasedModuleService();

+ 15 - 3
app/Services/CommodityService.php

@@ -3,12 +3,9 @@
 namespace App\Services;
 
 use App\Commodity;
-use App\Http\Controllers\Controller;
 use App\OracleBasSKU;
 use App\Owner;
 use App\Services\common\BatchUpdateService;
-use Illuminate\Support\Facades\Auth;
-use Illuminate\Support\Facades\DB;
 
 Class CommodityService
 {
@@ -162,4 +159,19 @@ Class CommodityService
         }
     }
 
+
+    public function getOwnerCommodities(array $params){
+        $query = Commodity::query();
+        foreach ($params as $column => $value){
+            if (!is_array($value)){
+                $value = [$value];
+            }
+            $query->whereIn($column,$value);
+        }
+        return $query->get();
+    }
+
+    public function batchUpdate(array $params){
+        return app(BatchUpdateService::class)->batchUpdate('commodities', $params);
+    }
 }

+ 20 - 0
app/Services/OracleBasSkuService.php

@@ -0,0 +1,20 @@
+<?php 
+
+namespace App\Services; 
+
+use App\OracleBasSKU;
+
+Class OracleBasSkuService
+{ 
+    public function getOwnerCommodities(array $params){
+        $query = OracleBasSKU::query();
+        if ($params['code'] ?? false){
+            if (!is_array($params['code'])){
+                $params['code'] = [$params['code']];
+            }
+            $query->whereIn('customerid',$params['code']);
+        }
+        return $query->get();
+    }
+
+}

+ 67 - 2
resources/views/maintenance/commodity/index.blade.php

@@ -6,13 +6,33 @@
         @component('maintenance.menu')@endcomponent
         @component('maintenance.commodity.menu')@endcomponent
     </span>
-    <div class="container-fluid">
+    <div class="container-fluid" id="list">
         <div class="card">
             <div class="card-body">
                 @if(Session::has('successTip'))
                     <div class="alert alert-success h1">{{Session::get('successTip')}}</div>
                 @endif
-                <table class="table table-striped table-sm" id="list">
+                <div class="modal fade" id="modal" tabindex="-1" role="dialog" aria-hidden="true">
+                    <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
+                        <div class="modal-content">
+                            <div class="modal-body" style="text-align:center;height: 150px">
+                                <div class="row col-12 mt-5">
+                                    <label class="col-2 text-info">选择货主:</label>
+                                    <select class="form-control form-control-sm col-6" name="owner_code" v-model="owner_code">
+                                        <option v-for="owner in owners" :value="owner.code">@{{ owner.name }}</option>
+                                    </select>
+                                    <input placeholder="搜索货主" @input="seekOwner($event)" class="form-control form-control-sm col-3">
+                                </div>
+                            </div>
+                            <div class="modal-footer">
+                                <button class="col-12 btn btn-success" @click="syncCommodity()">开始同步</button>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+
+                <button class="btn btn-sm btn-outline-info mb-1" @click="openModal()" >同步商品</button>
+                <table class="table table-striped table-sm">
                     <tr>
                         <th>ID</th>
                         <th>SKU</th>
@@ -56,6 +76,8 @@
                     },
                     @endforeach
                 ],
+                owners : [],
+                owner_code : '',
             },
             methods:{
                 edit:function(id){
@@ -86,6 +108,49 @@
                             tempTip.show('删除商品信息失败!'+'网络错误:' + err)
                         });
                 },
+                openModal(){
+                    axios.post('{{url('apiLocal/maintenance/owner/getOwners')}}')
+                        .then(res=>{
+                            this.owners = res.data;
+                            $("#modal").modal('show');
+                        });
+                },
+                syncCommodity(){
+                    if (!this.owner_code){
+                        tempTip.setDuration(3000);
+                        tempTip.show('未选择货主');
+                        return;
+                    }
+                    let owner_id = "";
+                    this.owners.some(owner => {
+                        if (owner.code === this.owner_code){
+                            owner_id = owner.id;
+                            return true;
+                        }
+                    });
+                    axios.post('{{url('maintenance/commodity/syncWMS')}}',{owner_code : this.owner_code, owner_id : owner_id})
+                        .then(res => {
+                            if (res.data.success){
+                                tempTip.setDuration(2000);
+                                tempTip.setIndex(1099);
+                                tempTip.showSuccess("同步成功");
+                                return true;
+                            }
+                            tempTip.setDuration(3000);
+                            tempTip.show(res.data.data);
+                        }).catch(err => {
+                            tempTip.setDuration(3000);
+                            tempTip.showSuccess("网络错误:"+err);
+                        });
+                },
+                seekOwner(e){
+                    this.owners.some(owner => {
+                        if (owner.name.indexOf(e.target.value) !== -1){
+                            this.owner_code = owner.code;
+                            return true;
+                        }
+                    });
+                }
             }
         });
     </script>

+ 55 - 11
resources/views/store/checkingReceive/show.blade.php

@@ -37,8 +37,8 @@
                             <div class="btn btn-sm btn-outline-primary" v-if="status.barcodeDisable" @click="status.barcodeDisable=false">手动输入</div>
                             <div class="btn btn-sm btn-outline-danger" v-if="!status.barcodeDisable" @click="status.barcodeDisable=true">扫描输入</div>
                         </div>
-                        <input type="text" id="barcode" class="form-control" placeholder="扫入条码" :class="inputMode=='regular' ? '' : 'mt-2'"
-                               :disabled="status.barcodeDisable" v-model="inputting.barcode" {{-- @focusin="focusOutDocument" @focusout="focusDocument" --}}>
+                        <input type="text" id="barcode" class="form-control"
+                               :placeholder="status.barcodeDisable ? '扫入条码' : '输入条码'" :disabled="status.barcodeDisable" v-model="inputting.barcode" :class="inputMode=='regular' ? '' : 'mt-4'" {{-- @focusin="focusOutDocument" @focusout="focusDocument" --}}>
 
                         <div v-if="inputMode=='regular'">
                         <div class="card-title">生产日期:</div>
@@ -59,16 +59,16 @@
 
                         <div class="card-title">格口号:</div>
                         <input type="number" id="bin" class="form-control mt-n2 mb-2" style='height: 80px;font-size: 5em;color:red;font-weight: bolder;padding: 3px;text-align: center'
-                               {{--v-model="inputting.bin" :disabled="status.binDisable" @focusin="focusOutDocument" @focusout="focusDocument" @keyup="oninputEnter"--}}>
+                               v-model="inputting.bin"{{-- :disabled="status.binDisable" @focusin="focusOutDocument" @focusout="focusDocument" @keyup="oninputEnter"--}}>
 
                         <div v-if="inputMode=='regular'">
                             <div class="card-title">批次号:</div>
                             <input type="text" class="form-control mb-2"
-                                   {{--v-model="inputting.batch_number" @focusin="focusOutDocument" @focusout="focusDocument" @keyup="oninputEnter"--}}>
+                                   v-model="inputting.batch_number"{{-- @focusin="focusOutDocument" @focusout="focusDocument" @keyup="oninputEnter"--}}>
                         </div>
                     </div>
                     <div class="col-12" v-if="status.commitButtonVisible && inputMode=='regular'" >
-                        <button class="btn btn-success btn form-control" {{--@click="commitGoods"--}}>确定</button>
+                        <button class="btn btn-success btn form-control" @click="commitGoods">确定</button>
                     </div>
                 </div>
                 <p class="card-text text-muted mt-3 mb-n3 text-center">已完成:</p>
@@ -166,7 +166,10 @@
             inputting:{
                 barcode : '',
                 amount : '',
+                bin : '',
+                batch_number : '',
             },
+            goodses : [],
         },
         mounted(){
             $('#container').removeClass('d-none');
@@ -201,10 +204,10 @@
                 this.inputMode = menuName;
                 this.inputting.barcode='';
                 if (menuName === 'regular') {
-                    this.amountDisable = false;
+                    this.status.amountDisable = false;
                     $('#amountLabel').text('输入数量:');
-                } else {
-                    this.amountDisable = true;
+                }else {
+                    this.status.amountDisable = true;
                     $('#amountLabel').text('自动扫入数量:');
                 }
             },
@@ -236,10 +239,35 @@
                 });
             },
             showCommitButton: function () {
-                if(this.inputting.barcode && this.inputting.amount && this.inputting.bin_number){
-                    this.commitButtonVisible=true;
+                if(this.inputting.barcode && this.inputting.amount && this.inputting.bin){
+                    if (this.status.commitButtonVisible){
+                        this.commitGoods();
+                        this.status.commitButtonVisible=false;
+                    }else this.status.commitButtonVisible=true;
                 }
             },
+            commitGoods: function () {
+                window.tempTip.setDuration(3500);
+                if(!this.inputting.barcode){window.tempTip.show('请扫入条码');return;}
+                else if(!this.inputting.amount){window.tempTip.show('请输入数量');return;}
+                else if(!this.inputting.bin){window.tempTip.show('请输入隔口号');return;}
+                this.recordOrPlusGoods();
+                window.tempTip.setDuration(1500);
+                window.tempTip.showSuccess('成功提交:' + data.inputting.barcode);
+                this.cleanInputs();
+                this.audioDing();
+            },
+            cleanInputs: function () {
+                this.changeToScanInputBarcode();
+                this.inputting.barcode='';
+                this.inputting.amount='';
+                this.inputting.bin='';
+                this.inputting.produce_date='';
+                this.inputting.valid_date='';
+                this.inputting.batch_number='';
+                this.status.commitButtonVisible=false;
+                this.status.binDisable=false;
+            },
             autoFillBin: function () {
                 let data = this;
                 let isNotRepeatingBarcode=this.goodses.every(function(goods){
@@ -301,7 +329,6 @@
                     data.focusOutDocument();
                     window.tempTip.confirm('扫到其它条码,是否切换至新条码并记录?', doIt, function () {
                         data.inputting.barcode = data.lastScannedBarcode;
-                        // data.cleanInputs();
                         data.focusDocument();
                     })
                 } else {
@@ -379,6 +406,23 @@
                 }
                 startVibrate(500);
             },
+            recordOrPlusGoods: function () {
+                if(this.inputMode==='regular'){
+                    this.addGoods();
+                    return;
+                }
+                let isNotRepeating=this.goodses.every(goods => {
+                    if(goods.barcode===this.inputting.barcode){
+                        goods.amount=parseInt(goods.amount)+parseInt(this.inputting.amount);
+                        return false;
+                    }
+                    return true;
+                });
+                if(isNotRepeating)this.addGoods();
+            },
+            addGoods(){
+                this.goodses.unshift(JSON.parse(JSON.stringify(this.inputting)));
+            }
         },
     });
 </script>

+ 7 - 0
routes/apiLocal.php

@@ -1,6 +1,7 @@
 <?php
 
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Route;
 
 /*
 地址前缀:/apiLocal/
@@ -56,5 +57,11 @@ Route::group(['prefix' => 'order'], function () {
 
 });
 
+Route::group(['prefix'=>'maintenance'],function (){
+    Route::group(['prefix'=>'owner'],function (){
+        Route::post('getOwners','OwnerController@getOwners');
+    });
+});
+
 
 

+ 1 - 1
routes/web.php

@@ -37,8 +37,8 @@ Route::group(['prefix'=>'maintenance'],function(){
         Route::group(['prefix'=>'import'],function(){
             Route::post('excel', 'CommodityController@importExcel');
         });
-
         Route::get('import', 'CommodityController@import');
+        Route::post('syncWMS','CommodityController@syncWMS');
     });
     /** 货主 */
     Route::group(['prefix'=>'owners'],function(){