LD 5 лет назад
Родитель
Сommit
afdf046c55

+ 6 - 0
app/Http/Controllers/InventoryController.php

@@ -239,4 +239,10 @@ class InventoryController extends Controller
         if (!$loggingOwner)return ['success'=>false,'data'=>'录入失败!'];
         return ['success'=>true,'data'=>$loggingOwner->owner_id];
     }
+
+    function inventoryCompare(Request $request,OwnerService $ownerService){
+        if (!Gate::allows('库存管理-库存-库存对比')){return redirect(url('/')); }
+        $owners = $ownerService->getSelection();
+        return view('inventory.statement.inventoryCompare',compact('owners'));
+    }
 }

+ 4 - 2
app/Imports/CommodityImport.php

@@ -3,6 +3,7 @@
 namespace App\Imports;
 
 use App\Commodity;
+use App\Owner;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Support\Collection;
 use Maatwebsite\Excel\Concerns\ToCollection;
@@ -31,6 +32,7 @@ class CommodityImport implements ToCollection, WithHeadingRow
             $name = $row['商品名称'] ?? $row['name'] ?? $row['NAME'] ?? $row['Name'] ?? '';
             $sku = $row['商品编码'] ?? $row['sku'] ?? $row['SKU'] ?? $row['Sku'] ?? '';
             $owner = $row['货主'] ?? $row['owner'] ?? $row['owner_name'] ?? $row['OWNER'] ?? $row['Owner'] ?? '';
+            $owner_id=Owner::where('name',$owner)->value('id');
             $commodity=Commodity::whereHas('barcodes', function (Builder $query)use($barcode){
                 $query->where('code',$barcode);
             })->first();
@@ -38,14 +40,14 @@ class CommodityImport implements ToCollection, WithHeadingRow
                 if($this->isOverride){
                     $name?$commodity['name']= $name:false;
                     $sku?$commodity['sku']= $sku:false;
-                    $owner?$commodity['owner_name']= $owner:false;
+                    $owner?$commodity['owner_id']= $owner_id:false;
                     $commodity->update();
                 }
             }else{
                 $commodity=new Commodity([
                     'name' => $name,
                     'sku' => $sku,
-                    'owner_name' => $owner,
+                    'owner_id' => $owner_id,
                 ]);
                 $commodity->save();
                 $commodity->newBarcode($barcode);

+ 75 - 0
app/Imports/InventoryCompareImport.php

@@ -0,0 +1,75 @@
+<?php
+
+namespace App\Imports;
+
+use App\OracleDOCOrderHeader;
+use App\Order;
+use App\OrderIssue;
+use App\OrderIssueProcessLog;
+use App\OrderIssueType;
+use App\Services\OrderService;
+use App\Services\RejectedService;
+use Doctrine\DBAL\Connection;
+use Illuminate\Support\Collection;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Cache;
+use Maatwebsite\Excel\Concerns\ToCollection;
+use Maatwebsite\Excel\Concerns\WithHeadingRow;
+use Maatwebsite\Excel\Concerns\WithMultipleSheets;
+use Maatwebsite\Excel\Imports\HeadingRowFormatter;
+
+HeadingRowFormatter::default('none');
+
+class InventoryCompareImport implements ToCollection, WithHeadingRow, WithMultipleSheets
+{
+
+    public function Collection(Collection $collection)
+    {
+        //$sku=$collection->toArray()[0]['产品编号'] ?? $collection->toArray()[0]['SKU'] ?? $collection->toArray()[0]['物料编号'] ?? ' ';
+        //$amount=$collection->toArray()[0]['数量'] ?? $collection->toArray()[0]['物料库存'] ?? $collection->toArray()[0]['库存量'] ?? ' ';
+        //$warehouse=$collection->toArray()[0]['属性仓'] ?? $collection->toArray()[0]['仓库'] ??' ';
+        $endIS = false;
+        if (!isset($collection->toArray()[0]['产品编号']) || !isset($collection->toArray()[0]['数量']) || !isset($collection->toArray()[0]['属性仓'])) {
+            Cache::put('error', '请检查您第一行标题是否存在产品编号,数量,属性仓');
+        } else {
+            $endIS = true;
+        }
+        $exception = [];
+        $skuAndWarehouseArr=[];
+        $sum = 2;
+        if ($endIS) {
+            foreach ($collection as $row) {
+                //$sku = trim($row['产品编号'], ' ');
+                if (!$row['产品编号']) {
+                    array_push($exception, ['第' . $sum . '行产品编号为空!']);
+                    $sum++;
+                    continue;
+                } else if (!$row['数量']) {
+                    array_push($exception, ['第' . $sum . '行数量为空!']);
+                    $sum++;
+                    continue;
+                } else if (!$row['属性仓']) {
+                    array_push($exception, ['第' . $sum . '行属性仓为空!']);
+                    $sum++;
+                    continue;
+                }
+                $skuAndWarehouse=$row['产品编号']+$row['属性仓'];
+                array_push($skuAndWarehouseArr,$skuAndWarehouse);
+                $sum++;
+            }
+            $uniqueArr=array_unique($skuAndWarehouseArr);
+            if (count($uniqueArr)!=count($skuAndWarehouseArr))array_push($exception, ['产品编码+属性仓不能同时重复!']);
+        }
+        Cache::put('exception', $exception, 86400);
+    }
+
+    /**
+     * 该方法是实现上传文件只选中 第一个表
+     * ExcelImprot 默认是有多少个分表就执行多少次的分表
+     * @return OrderIssueImport[]|array
+     */
+    public function sheets(): array
+    {
+        return [0 => new OrderIssueImport()];
+    }
+}

+ 137 - 0
resources/views/inventory/statement/inventoryCompare.blade.php

@@ -0,0 +1,137 @@
+@extends('layouts.app')
+@section('title')库存管理-库存-库存对比@endsection
+
+@section('content')
+    @component('inventory.statement.menu')@endcomponent
+    <div class="d-none card" id="container">
+        <div class="card-header pt-0">
+            <div id="form"></div>
+        </div>
+        <div class="w-100 ml-4 mt-0 mb-0">
+            <span class="dropdown ">
+                <button class="btn btn-outline-dark btn-sm form-control-sm dropdown-toggle tooltipTarget" :class="[checkData.length>0?'btn-dark text-light':'']"
+                        data-toggle="dropdown" title="导出所有页将会以搜索条件得到的过滤结果,将其全部记录(每一页)导出">
+                    导出Excel
+                </button>
+                <div class="dropdown-menu">
+                    <a class="dropdown-item" @click="dailyLogExport(false)" href="javascript:">导出勾选内容</a>
+                    <a class="dropdown-item" @click="dailyLogExport(true)" href="javascript:">导出所有页</a>
+                </div>
+            </span>
+            <span>
+                <button class="btn btn-outline-dark btn-sm form-control-sm  tooltipTarget"
+                           title="导入Excel生成库存对比">
+                   导入
+                </button>
+            </span>
+        </div>
+    </span>
+        <div class="card-body pt-1">
+            <label for="all" class="d-none" id="cloneCheckAll">
+                <input id="all" type="checkbox" @click="checkAll($event)">全选
+            </label>
+            <table class="table table-sm text-nowrap table-bordered d-none" id="headerRoll"></table>
+            <table class="table table-sm text-nowrap table-striped table-bordered m-0" id="headerParent">
+                <tr class="p-0" id="header"></tr>
+                <tr >
+                   <td>
+                       <input type="checkbox" >
+                   </td>
+                    <td>@{{  }}</td>
+                    <td>@{{  }}</td>
+                    <td>@{{  }}</td>
+                    <td>@{{  }}</td>
+                    <td>@{{  }}</td>
+                    <td>
+                        <span>
+                            <span >
+                                @{{  }}
+                            </span>
+                            <span >
+                                <small >@{{  }}<br></small>
+                            </span>
+                        </span>
+                    </td>
+                </tr>
+            </table>
+        </div>
+    </div>
+@endsection
+
+@section('lastScript')
+    <script type="text/javascript" src="{{asset('js/queryForm/export200818a.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/queryForm200818a.js')}}"></script>
+    <script type="text/javascript" src="{{asset('js/queryForm/header200819.js')}}"></script>
+    <script>
+        let vue = new Vue({
+            el:"#container",
+            data:{
+                differ:[
+                    {name:'全部',value:'全部'},{name:'有',value:'有'},{name:'无',value:'无'},
+                ],
+                owners : [
+                        @foreach($owners as $owner)
+                    {name:"{{$owner->id}}",value:"{{$owner->name}}"},
+                    @endforeach
+                ],
+                checkData:[],
+            },
+            watch:{
+
+            },
+            mounted(){
+                $(".tooltipTarget").tooltip({'trigger': 'hover'});
+                $("#container").removeClass('d-none');
+                let data=[
+                    [
+                        {name:'date_start',type:'dateTime',tip:'选择创建日期的起始时间'},
+                        {name:'mission_code',type:'input',tip:'任务号:糊模查找需要在左边打上%符号',placeholder: '任务号'},
+                        {
+                            name: 'owner_id', type: 'select_multiple_select', tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的客户'],
+                            placeholder: ['货主', '定位或多选货主'], data: this.owners
+                        },
+                    ],
+                    [
+                        {name:'date_end',type:'dateTime',tip:'选择创建日期的结束时间'},
+                        {name: 'differ', type: 'select', placeholder: '差值', data: this.differ},
+                    ],
+                ];
+                this.form = new query({
+                    el:'#form',
+                    condition:data,
+                });
+                this.form.init();
+                let column = [
+                    {name:'cloneCheckAll',customization:true,type:'checkAll',column:'id',
+                        dom:$('#cloneCheckAll').removeClass('d-none'), neglect: true},
+                    {name:'index',value: '序号', neglect: true},
+                    {name:'owner_name',value: '货主'},
+                    {name:'owner_name',value: '任务号'},
+                    {name: 'created_at', value: '生成时间'},
+                    {name: 'commodity_name', value: '商品名称'},
+                    {name:'commodity_sku',value: '商品编码'},
+                    {name: 'commodity_barcodes', value: '商品条码', neglect: true},
+                    {name: 'amount', value: '属性仓', neglect: true},
+                    {name: '', value: '质量状态', neglect: true},
+                    {name: '',value: '宝时库存', neglect: true},
+                    {name: '', value: '参考库存', neglect: true},
+                    {name: '', value: '差值', neglect: true},
+                ];
+                let _this = this;
+                setTimeout(function () {
+                    let header = new Header({
+                        el: "#header",
+                        column: column,
+                        data: _this.inventoryDailyLogs,
+                        restorationColumn: 'id',
+                        fixedTop:($('#form').height())+2,
+                        vue:vue
+                    });
+                    header.init();
+                },0);
+            },
+            methods:{
+            },
+        });
+    </script>
+@endsection

+ 4 - 0
resources/views/inventory/statement/menu.blade.php

@@ -16,6 +16,10 @@
                     <li class="nav-item">
                         <a class="nav-link" href="{{url('inventory/statement/dailyLog')}}" :class="{active:isActive('dailyLog',3)}">库存体积</a>
                     </li> @endcan
+                @can('库存管理-库存-库存对比')
+                    <li class="nav-item">
+                        <a class="nav-link" href="{{url('inventory/statement/inventoryCompare')}}" :class="{active:isActive('inventoryCompare',3)}">库存对比</a>
+                    </li> @endcan
             </ul>
         </div>
     </div>

+ 5 - 2
routes/web.php

@@ -309,14 +309,17 @@ Route::group(['prefix'=>'inventory'],function (){
     //进入盘点或者复盘页面
     Route::any('stockInventory/enterStockInventory/{id}','InventoryAccountController@enterStockInventory');
     //盘点任务导出
-    Route::any('stockInventoryExport','InventoryController@stockInventoryExport');
-    Route::any('stockInventory','InventoryController@stockInventory');
+    Route::any('stockInventoryExport','InventoryAccountController@stockInventoryExport');
+    Route::any('stockInventory','InventoryAccountController@stockInventory');
+
     //库存体积
     Route::get('statement/dailyLog','InventoryController@dailyLog');
     //获取记录监听货主
     Route::post('statement/dailyLog/getLoggingOwner','InventoryController@getLoggingOwner');
     //复盘查询盘点记录
     Route::post('searchStockInventoryRecord','InventoryAccountController@searchStockInventoryRecord');
+    //库存对比
+    Route::get('statement/inventoryCompare','InventoryController@inventoryCompare');
 
     Route::post('statement/dailyLog/addLoggingOwner','InventoryController@addLoggingOwner');
 });