瀏覽代碼

Merge branch 'master' into yang

# Conflicts:
#	app/Console/Kernel.php
ANG YU 5 年之前
父節點
當前提交
938674703c

+ 2 - 0
.gitignore

@@ -7,6 +7,8 @@
 /public/images/QRCodeIMG/*
 /resources/images/QRCodeIMG/*
 /public/mix-manifest.json
+/public/js/app.js
+/public/css/app.csscd
 /storage/*.key
 /vendor
 .env

+ 10 - 4
app/Console/Commands/SyncWMSOrderTask.php

@@ -35,8 +35,6 @@ class SyncWMSOrderTask extends Command
 
     /**
      * Execute the console command.
-     *
-     * @return int
      */
     public function handle()
     {
@@ -45,9 +43,17 @@ class SyncWMSOrderTask extends Command
          * @var OrderService $orderService
          */
         $oracleDOCOrderHeaderService = app('OracleDOCOrderHeaderService');
+
         $orderService = app('OrderService');
         $start_date = Carbon::now()->subSeconds(60+5);
-        $orderHeaders = $oracleDOCOrderHeaderService->getWMSOrderOnStartDate($start_date);
-        $orderService->createOrderInfo($orderHeaders);
+
+        // 这段时间段内的新增
+        $orderHeaders_addTime = $oracleDOCOrderHeaderService->getWMSOrderOnStartDate($start_date);
+        // 这段时间段内的修改
+        $orderHeaders_editTime = $oracleDOCOrderHeaderService->getWMSOrderOnEditDate($start_date);
+        // 创建
+        $orderService->syncOrder($orderHeaders_addTime);
+        // 创建
+        $orderService->syncOrder($orderHeaders_editTime);
     }
 }

+ 47 - 0
app/Console/Commands/TestTemp.php

@@ -0,0 +1,47 @@
+<?php
+
+namespace App\Console\Commands;
+
+use App\Http\Controllers\Controller;
+use App\Http\Controllers\TestController;
+use App\OracleDOCOrderHeader;
+use Carbon\Carbon;
+use Illuminate\Console\Command;
+
+class TestTemp extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'TestTemp';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'TestTemp';
+
+    /**
+     * Create a new command instance.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        return (new TestController())->cleanOrderRepeat();
+    }
+
+}

+ 1 - 0
app/Console/Kernel.php

@@ -20,6 +20,7 @@ class Kernel extends ConsoleKernel
         \App\Console\Commands\WASSyncWMSOrderInformation::class,
         \App\Console\Commands\SyncLogCacheTask::class,
         \App\Console\Commands\SyncUserVisitMenuLogsCacheTask::class,
+        \App\Console\Commands\TestTemp::class,
     ];
 
     /**

+ 25 - 0
app/Http/Controllers/OrderIssueController.php

@@ -717,4 +717,29 @@ class OrderIssueController extends Controller
         return app(ExportService::class)->json($row,$json,"订单问题件");
     }
 
+    public function recycleBin(Request $request)
+    {
+        if (!Gate::allows('订单管理-问题件-删除')) {
+            return redirect(url('/'));
+        }
+        /**
+         * @var OrderIssueService $service
+         */
+        $service = app('OrderIssueService');
+        $orderIssues = $service->getRecycleBinPaginate($request->input());
+        $paginate = $request['paginate'] ?? 50;
+        return view('order.issue.recycle',compact('orderIssues','paginate'));
+    }
+
+    public function recoverOrderIssueApi(Request $request)
+    {
+        if (!Gate::allows('订单管理-问题件-删除')) {
+            return ['success'=>false,'error'=>'没有对应权限'];
+        }
+        /**
+         * @var OrderIssueService $service
+         */
+        $service = app('OrderIssueService');
+        return  $service->recoverOrderIssue($request['ids']);
+    }
 }

+ 8 - 1
app/Http/Controllers/TestController.php

@@ -994,14 +994,21 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
     }
 
     public function testOrderPackages(){
+        $batch_number = 'W201114000104';
+        $weight = 0.3;
+        OrderPackage::createPackagesFromBatchCode($batch_number,$weight);
     }
 
     public function view(){
         return view('test');
     }
+    public function tdel(){
+        echo '223232323';
+        return 'asdfsadfsdf';
+    }
     public function cleanOrderRepeat(){
 
-        ini_set('max_execution_time',2500);
+        ini_set('max_execution_time',6500);
         ini_set('memory_limit','1526M');
         for($i=0;true;$i++){
             $orders_repeating=Order::query()

+ 1 - 1
app/Order.php

@@ -12,7 +12,7 @@ class Order extends Model
 
     protected $fillable = [
         'id', 'batch_id',  'owner_id', 'status',
-        'created_at', 'code', 'shop_id', 'owner_id', 'client_code',
+        'created_at', 'code', 'shop_id',  'client_code',
         'logistic_id', 'consignee_name', 'consignee_phone', 'province',
         'city', 'district', 'address', 'wms_status','status','warehouse_id','wms_edittime'];
 

+ 3 - 0
app/OrderIssue.php

@@ -4,11 +4,13 @@ namespace App;
 
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\SoftDeletes;
 
 class OrderIssue extends Model
 {
     //
     use ModelTimeFormat;
+    use SoftDeletes;
 
     protected $fillable = [
         'order_id', 'created_at', 'rejected_bill_id', 'rejecting_status', 'result_explain','logistic_number_return',
@@ -218,6 +220,7 @@ class OrderIssue extends Model
         return parent::delete();
     }
 
+
     // 同步退回单
     public function syncRejectedBill()
     {

+ 15 - 0
app/Services/OracleDOCOrderHeaderService.php

@@ -80,4 +80,19 @@ Class OracleDOCOrderHeaderService
             ->where('DOC_Order_Header.addTime','>=',$startDate)
             ->get();
     }
+
+    public function getWMSOrderOnEditDate($startDate){
+        return OracleDOCOrderHeader::query()->selectRaw(implode(',',self::$columns))
+            ->with(['oracleBASCustomer'=>function($query){
+                $query->selectRaw('BAS_CUSTOMER.CustomerID,BAS_CUSTOMER.Customer_Type,BAS_CUSTOMER.Descr_C,BAS_CUSTOMER.Active_Flag');
+            },'oracleDOCOrderDetails'=>function($query){
+                $query->selectRaw('doc_order_details.orderNo,doc_order_details.customerid,doc_order_details.sku,doc_order_details.QtyOrdered');
+            }, 'actAllocationDetails'=>function($query){
+                $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID,ACT_Allocation_Details.Sku');
+            },'oracleBASCode'=>function($query){
+                $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
+            }])
+            ->where('DOC_Order_Header.editTime','>=',$startDate)
+            ->get();
+    }
 }

+ 22 - 0
app/Services/OrderIssueService.php

@@ -564,4 +564,26 @@ class OrderIssueService
     {
         return  $this->getConditionQuery($params)->get();
     }
+
+
+    public function getRecycleBinPaginate($params){
+        return OrderIssue::query()
+            ->with(['order'=>function($query){
+                $query->with(['logistic','shop','owner','packages'=>function($query){
+                $query->with('commodities');
+            }]);
+        },'rejectedBill.items','issueType','secondOrder.packages.commodities'])->onlyTrashed()->paginate($params['paginate'] ?? 50);
+    }
+
+    public function recoverOrderIssue($ids)
+    {
+        try {
+            $bool = OrderIssue::query()->withTrashed()->whereIn('id', $ids)->restore();
+            app('LogService')->log(__METHOD__, __FUNCTION__, '恢复问题件 ids = ' . json_encode($ids));
+            return ['success'=>$bool];
+        } catch (\Exception $e) {
+            app('LogService')->log(__METHOD__, 'ERROR '.__FUNCTION__, '恢复问题件 Error' . json_encode($ids).' || '.json_encode($e->getMessage()).' || '.json_encode($e->getTraceAsString()));
+            return ['success'=>false,'error'=>$e->getMessage()];
+        }
+    }
 }

+ 2 - 1
app/Services/OrderPackageService.php

@@ -519,7 +519,8 @@ class OrderPackageService
             }])
             ->where('Doc_Order_Header.WaveNo',$batchCode)
             ->get();
-        $orderService->syncOrder($orderHeaders);
+        $orderService->syncOrderByWMSOrderHeaders($orderHeaders);
+        $this->syncPackageByOrderHeaders($orderHeaders);
         $orders = Order::query()->with('packages')->whereIn('code',data_get($orderHeaders,'*.orderno'))->get();
         $update_params = [[
             'id','weight','weighed_at','status','batch_number'

+ 38 - 73
app/Services/OrderService.php

@@ -203,7 +203,7 @@ class OrderService
             $ordernos = app('OracleActAllocationDetailService')
                 ->getOrderno(['checktime_start'=>$checktime_start,'checktime_end'=>$checktime_end,
                     'paginate'=>$paginate,'page'=>$page]);
-            if ($ordernos)$params['ordernos'] = $ordernos;
+            $params['ordernos'] = $ordernos;
         }
         $sql="select ACT_ALLOCATION_DETAILS.CHECKTIME,DOC_ORDER_HEADER.addtime,DOC_ORDER_HEADER.C_PROVINCE,DOC_ORDER_HEADER.C_CITY,DOC_ORDER_HEADER.C_DISTRICT,DOC_ORDER_HEADER.C_CONTACT,DOC_ORDER_HEADER.OrderNo,DOC_ORDER_HEADER.SOStatus,DOC_ORDER_HEADER.WAREHOUSEID,DOC_ORDER_HEADER.CustomerID
         ,DOC_ORDER_HEADER.C_Tel2,DOC_ORDER_HEADER.C_Tel1,DOC_ORDER_HEADER.CarrierName,DOC_ORDER_HEADER.IssuePartyName,DOC_ORDER_HEADER.EDIREMARKS2,
@@ -649,7 +649,7 @@ class OrderService
         $warehouses = app(WarehouseService::class)->getByWmsOrders($orderHeaders);
         $warehouses_map = $dataHandlerService->dataHeader(['code'],$warehouses);
         $updateParams = [[
-            'id','owner_id','wms_status','logistic_id','shop_id','consignee_name','consignee_phone','province','city','district','address','client_code','updated_at','wms_edittime','warehouse_id'
+            'id','owner_id','wms_status','logistic_id','shop_id','consignee_name','consignee_phone','province','city','district','address','client_code','updated_at','wms_edittime','warehouse_id','created_at'
         ]];
         $updated_at = Carbon::now()->toDateTimeString();
         foreach ($orderHeaders as $orderHeader) {
@@ -768,9 +768,10 @@ class OrderService
     // TODO
     public function syncOrder(&$orderHeaders)
     {
-        /** @var OrderPackageService $packageService */
+        /**
+         * @var OrderPackageService $packageService
+         */
         $packageService = app("OrderPackageService");
-        var_dump('syncOrderByWMSOrderHeaders',new Carbon());
         $this->syncOrderByWMSOrderHeaders($orderHeaders);
         $packageService->syncOrderPackage($orderHeaders);
     }
@@ -943,85 +944,49 @@ class OrderService
                 'address' => $orderHeader->c_address1,
                 'client_code' => $orderHeader->soreference1,
                 'updated_at' => $updated_at,
+                'created_at' => $orderHeader->addtime,
                 'wms_edittime' => $orderHeader->edittime,
                 'warehouse_id' => $warehouse_id];
         }
     }
 
-    public function batchDeleteUnnecessaryOrder(){
-        $start_id = 0;
-        $step = 1000;
-        while(true){
-            $order_map = [];
-
-            $package_del = [];      $orderCommodities = [];         $bin = [];          $batch = [];            $order = [];
-            $package_update= [];    $orderCommodities_update= [];   $bin_update= [];    $batch_update= [];      $order_update = [];
-            $orders = Order::query()->with('packages.commodities','orderCommodities','bin','batch')->where('id','>',$start_id)->where('id','<',$start_id+$step)->get();
-            $this->getOrderMap($orders,$order_map);
-
-            if(count($order_map) == 0)continue;
-
-
-        }
-    }
-    // OrderPackages
-    public function batchDeleteUnnecessaryOrderPackages($order_map)
-    {
-        $packages = collect();
-        $del_packages= collect();
-        $update_packages = collect();
-        foreach ($order_map as $key =>$items) {
-            $orderPackage = null;
-            $items->packages->each(function($packages){
-
-            });
-        }
-    }
-    //  Batch
-    public function batchDeleteUnnecessaryBatch($order_map,&$batch_order_no_map)
-    {
-        foreach ($order_map as $items) {
-            collect($items)->each(function($order)use(&$batch_order_no_map){
-                $bin = $order->batch;
-                if($bin ?? false){
-                    $batch_order_no_map[$order->code][] = $bin;
-                }
-            });
-        }
-    }
-    // OrderCommodities
-    public function batchDeleteUnnecessaryOrderCommodities($order_map,&$orderCommodities_map)
+    // TODO
+    public function createOrFindOrder($orderHeader)
     {
-        foreach ($order_map as $items) {
-            collect($items)->each(function($order)use(&$orderCommodities_map){
-                $orderCommodities = $order->orderCommodities;
-                if($bin ?? false){
-                    $orderCommodities_map[$order->code][] = $orderCommodities;
-                }
-            });
+        $order = Order::query()->where('code',$orderHeader->orderno)->first();
+        if($order)return $order;
+        $create_params = $this->getParamByOrderHeader($orderHeader);
+        try {
+            $order = Order::query()->create($create_params);
+            app('LogService')->log(__METHOD__, __FUNCTION__, '创建 Order' . json_encode($order));
+            return $order;
+        } catch (\Exception $e) {
+            app('LogService')->log(__METHOD__, 'Error'.__FUNCTION__, '创建 Order Error' .' || '. json_encode($order).' || '.json_encode($e->getMessage()).' || '.json_encode($e->getTraceAsString()));
+            return null;
         }
     }
-    // Bin
-    public function batchDeleteUnnecessaryBin($order_map,&$bin_order_no_map)
+    // TODO
+    public function createOrFindOrderInfo($orderHeader)
     {
-        foreach ($order_map as $items) {
-            collect($items)->each(function($order)use(&$bin_order_no_map){
-                $bin = $order->bin;
-                if($bin ?? false){
-                    $bin_order_no_map[$order->code][] = $bin;
-                }
-            });
+        /**
+         * @var OrderPackageService $orderPackageService
+         * @var OrderPackageCommoditiesService $orderPackageCommoditiesService
+         */
+        $orderPackageService = app('OrderPackageService');
+        $orderPackageCommoditiesService = app('OrderPackageCommoditiesService');
+        $order = Order::query()->with('packages.commodities')->where('code',$orderHeader->orderno)->first();
+        if($order) return $order;
+        $create_param = $this->getParamByOrderHeader($orderHeader);
+        try {
+            $orderHeaders = [$orderHeader];
+            $order = Order::query()->create($create_param);
+            $orderPackageService->syncOrderPackage($orderHeaders);
+            $orderPackageCommoditiesService->syncOrderPackageCommodities($orderHeaders);
+            return  Order::query()->with('packages.commodities')->where('code',$orderHeader->orderno)->first();
+        } catch (\Exception $e) {
+            app('LogService')->log(__METHOD__, 'Error'.__FUNCTION__, '创建 Order Error' .' || '. json_encode($order).' || '.json_encode($e->getMessage()).' || '.json_encode($e->getTraceAsString()));
+            return null;
         }
     }
 
-    public function getOrderMap($orders,&$orderMap)
-    {
-        $orders->each(function($items,$key)use(&$orderMap){
-            // $items $order集合
-            if($items->count()>1){
-                $order_map[$key] = $items;  // 保留超过2个orders
-            }
-        });
-    }
-
 }

+ 34 - 0
database/migrations/2020_11_16_142745_add_soft_delete_to_order_issues.php

@@ -0,0 +1,34 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddSoftDeleteToOrderIssues extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('order_issues', function (Blueprint $table) {
+            // 软删除
+            $table->softDeletes();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('order_issues', function (Blueprint $table) {
+            //
+            $table->dropColumn('deleted_at');
+        });
+    }
+}

+ 2 - 2
public/js/app.js

@@ -2330,7 +2330,7 @@ function fromByteArray (uint8) {
 var BlobBuilder = typeof BlobBuilder !== 'undefined' ? BlobBuilder :
   typeof WebKitBlobBuilder !== 'undefined' ? WebKitBlobBuilder :
   typeof MSBlobBuilder !== 'undefined' ? MSBlobBuilder :
-  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder : 
+  typeof MozBlobBuilder !== 'undefined' ? MozBlobBuilder :
   false;
 
 /**
@@ -86489,4 +86489,4 @@ module.exports = __webpack_require__(/*! D:\Demo\bswas\resources\sass\app.scss *
 
 /***/ })
 
-/******/ });
+/******/ });

+ 3 - 0
resources/views/order/issue/create.blade.php

@@ -452,6 +452,9 @@
                             arr.push(owner)
                         }
                     });
+                    if(arr.length > 0){
+                        this.order.owner_id = arr[0].id;
+                    }
                     this.filterOwners = arr;
                 }
             }

+ 5 - 1
resources/views/order/issue/menu.blade.php

@@ -34,7 +34,11 @@
                         <a class="nav-link" href="{{URL::current()}}" :class="{active:isActive('edit',3)}">修改</a>
                     </li>
                 @endcan
-
+                @can('订单管理-问题件-删除')
+                    <li class="nav-item" >
+                        <a class="nav-link" href="{{url('order/issue/recycle')}}" :class="{active:isActive('recycle',3)}">回收站</a>
+                    </li>
+                @endcan
             </ul>
         </div>
     </div>

+ 189 - 0
resources/views/order/issue/recycle.blade.php

@@ -0,0 +1,189 @@
+@extends('layouts.app')
+@section('title')订单管理-问题件-回收站@endsection
+@section('content')
+    <div id="nav2">
+        @component('order.issue.menu')@endcomponent
+    </div>
+    <div class="container-fluid d-none" id="recycle_div">
+        <div style="min-width: 1990px" class="card">
+            <div class="card">
+                <div class="card-body">
+                    <div class="card">
+                        <table class="col-sm-3 table table-sm table-bordered align-middle m-0">
+                            <tr>
+                                <td class="text-muted align-middle">每页显示条数:</td>
+                                <td>
+                                    <select name="paginate" id="paginate" class="form-control" @change="setPaginate" v-model="paginate">
+                                    <option v-for="paginate in paginates" :value="paginate.name" >@{{ paginate.value }}</option>
+                                    </select>
+                                </td>
+                            </tr>
+                            <tr>
+                                <td class="text-muted align-middle">操作选定记录:</td>
+                                <td>
+                                    <div class="btn btn-outline-danger" @click="recover">恢复</div>
+                                </td>
+                            </tr>
+                        </table>
+                    </div>
+                    </div>
+
+                    <table class="table table-sm table-striped table-bordered table-hover card-body p-0 m-0">
+                        <tr>
+                            <th>
+                                <input id="all" type="checkbox" @click="checkAll($event)"/>
+                            </th>
+                            <th>id</th>
+                            <th>登记时间</th>
+                            <th>订单日期</th>
+                            <th>客户订单号</th>
+                            <th>原始承运商</th>
+                            <th>店铺</th>
+                            <th>原始运单号</th>
+                            <th>退回单号</th>
+                            <th>二次订单号</th>
+                            <th>自定义单号</th>
+                        </tr>
+
+                        <tr v-for="orderIssue in orderIssues">
+                            <td>
+                                <input type="checkbox" :value="orderIssue.id" v-model="checkData" >
+                            </td>
+                            <td>@{{ orderIssue.id }}</td>
+                            <td>@{{ orderIssue.created_at }}    </td>
+                            <td>
+                                <span v-if="orderIssue.order">@{{ orderIssue.order.created_at }}</span>
+                            </td>
+                            <td>
+                                <span v-if="orderIssue.order">@{{ orderIssue.order.client_code }}</span>
+                            </td>
+                            <td>
+                                <span v-if="orderIssue.order">
+                                    <span v-if="orderIssue.order.logistic">
+                                        @{{ orderIssue.order.logistic.name }}
+                                    </span>
+                                </span>
+                            </td>
+                            <td>
+                                <span v-if="orderIssue.order">
+                                    <span v-if="orderIssue.order.shop">
+                                        @{{ orderIssue.order.shop.name }}
+                                    </span>
+                                </span>
+                            </td>
+                            <td>
+                                <div v-if="orderIssue.order">
+                                    <div v-if="orderIssue.order.packages">
+                                        <p v-for="package in orderIssue.order.packages">@{{ package.logistic_number }}</p>
+                                    </div>
+                                </div>
+                            </td>
+                            <td>
+                                <div v-if="orderIssue.secondOrder">
+                                    <div v-if="orderIssue.secondOrder.packages">
+                                        <p v-for="package in orderIssue.secondOrder.packages">@{{ package.logistic_number }}</p>
+                                    </div>
+                                </div>
+                            </td>
+                            <td>
+                                <span>@{{ orderIssue.second_client_no }}</span>
+                            </td>
+                            <td>
+                                @{{ orderIssue.custom_code }}
+                            </td>
+                        </tr>
+                    </table>
+                    {{$orderIssues->withQueryString()->links()}}
+                </div>
+            </div>
+        </div>
+
+    </div>
+@endsection
+@section('lastScript')
+    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+    <script>
+        let vue = new Vue({
+            el: "#recycle_div",
+            data: {
+                orderIssues:  {!!  $orderIssues->toJson() !!}['data'],
+                checkBool: false,
+                checkData: [],
+                paginate:{!! $paginate !!},
+                paginates: [
+                    {name: 50, value: '50条'},
+                    {name: 100, value: '100条'},
+                    {name: 200, value: '200条'},
+                    {name: 500, value: '500条'},
+                    {name: 1000, value: '1000条'},
+                ],
+            },
+            watch: {
+                checkData: function (value) {
+                    if (value.length === this.orderIssues.length) {
+                        this.checkBool = true;
+                    }else{
+                        this.checkBool = false;
+                    }
+                },
+            },
+            mounted: function () {
+                $("#recycle_div").removeClass('d-none');
+            },
+            methods: {
+                checkAll(e){
+                    if (e.target.checked) {
+                        this.orderIssues.forEach((el, i) => {
+                            if (this.checkData.indexOf(el.id) == '-1') {
+                                this.checkData.push(el.id);
+                            }
+                        });
+                    } else {
+                        this.checkData = [];
+                    }
+                },
+                recover() {
+                    if (this.checkData.length === 0) {
+                        tempTip.setDuration(2000);
+                        tempTip.show('请勾选需要恢复的问题件');
+                        return;
+                    }
+                    if(!confirm('是否恢复所选问题件'))return;
+                    let _this = this;
+                    let data = {ids: this.checkData};
+                    tempTip.setDuration(99999);
+                    tempTip.waitingTip('处理中请稍后');
+                    axios.post('{{url('apiLocal/order/issue/recycle/recover')}}', data)
+                        .then(function (response) {
+                            tempTip.cancelWaitingTip();
+                            tempTip.setDuration(2000);
+                            if (response.data.success) {
+                                tempTip.showSuccess('恢复成功');
+                                for (let i = 0; i < _this.orderIssues.length; i++) {
+                                    if(data.ids.includes(orderIssue.id))
+                                        _this.orderIssues.splice(i,1);
+
+                                }
+                            } else {
+                                tempTip.show(response.data.error);
+                            }
+                        }).catch(function (error) {
+                            tempTip.cancelWaitingTip();
+                            tempTip.setDuration(2000);
+                            tempTip.show(error);
+                    });
+                },
+                setPaginate:function(){
+                    let form=$("<form method='get'></form>");
+                    let paginate = $('#paginate').val();
+                    form.append($("<input type='text' name='paginate' value='"+paginate+"'>"));
+                    $("body").append(form);
+                    form.submit();
+                },
+
+            }
+        });
+
+    </script>
+@endsection
+

+ 3 - 0
routes/apiLocal.php

@@ -64,6 +64,9 @@ Route::group(['prefix' => 'order'], function () {
             Route::post('destroy', 'OrderIssueProcessLogController@apiDestroy');
             Route::post('batchStore','OrderIssueProcessLogController@batchStoreApi');
         });
+        Route::group(['prefix'=>'recycle'],function(){
+            Route::post('recover','OrderIssueController@recoverOrderIssueApi');
+        });
     });
 
     Route::group(['prefix'=>'tracking'],function (){

+ 1 - 0
routes/web.php

@@ -476,6 +476,7 @@ Route::group(['prefix'=>'order'],function(){
         Route::post('batchImport','OrderIssueController@batchImport');
         Route::get('excelImport','OrderIssueController@excelImport');
         Route::get('edit/{id}','OrderIssueController@edit');
+        Route::get('recycle','OrderIssueController@recycleBin');
 //        Route::match(['get','post'],'export','OrderIssueController@exportOrderIssue');
         Route::match(['get','post'],'export','OrderIssueController@exportJsonExcel');
     });

+ 42 - 0
tests/Services/OrderIssueService/GetRecycleBinPaginateTest.php

@@ -0,0 +1,42 @@
+<?php
+
+namespace Tests\Services\OrderIssueService;
+
+use App\OrderIssue;
+use App\Services\OrderIssueService;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Tests\TestCase;
+
+class GetRecycleBinPaginateTest extends TestCase
+{
+    /**
+     * @var OrderIssueService $service
+     */
+    public $service;
+    public $data = [];
+    public function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated stub
+        $this->service = app('OrderIssueService');
+        $orderIssues = $this->service->getRecycleBinPaginate([]);
+        if($orderIssues->count() == 0){
+            $orderIssue = OrderIssue::query()->create([
+                'is_new_rejecting' => '无',
+                'rejecting_status' => '无',
+                'imported_status' => '正常',
+            ]);
+            $data['orderIssue'] = $orderIssue;
+            $orderIssue->delete();
+        }
+    }
+
+    public function testGetRecycleBinPaginate()
+    {
+        $orderIssue = $this->service->getRecycleBinPaginate([]);
+        $this->assertNotEmpty($orderIssue);
+        if(isset($data['orderIssue'])){
+            $data['orderIssue']->delete();
+        }
+    }
+}

+ 40 - 0
tests/Services/OrderIssueService/RecoverOrderIssueTest.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace Tests\Services\OrderIssueService\RecoverOrderIssueTest;
+
+use App\OrderIssue;
+use App\Services\OrderIssueService;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Tests\TestCase;
+
+class RecoverOrderIssueTest extends TestCase
+{
+    /**
+     * @var OrderIssueService $service
+     */
+    public $service;
+    public $data = [];
+
+    public function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated stub
+        $this->service = app('OrderIssueService');
+        $orderIssue = OrderIssue::query()->create([
+            'is_new_rejecting' => '无',
+            'rejecting_status' => '无',
+            'imported_status' => '正常',
+        ]);
+        $this->data['orderIssue'] = $orderIssue;
+        $orderIssue->delete();
+    }
+
+    public function testRecoverOrderIssue()
+    {
+        $ids = [$this->data['orderIssue']['id']];
+        $this->service->recoverOrderIssue($ids);
+        $orderIssue = OrderIssue::query()->where('id',$ids[0])->first();
+        $this->assertNotEmpty($orderIssue);
+        $orderIssue->forceDelete();
+    }
+}

+ 40 - 0
tests/Services/OrderService/CreateOrFindOrderInfoTest.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace Tests\Services\OrderService;
+
+use App\OracleDOCOrderHeader;
+use App\Order;
+use App\Owner;
+use App\Services\OrderService;
+use Carbon\Carbon;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Illuminate\Support\Str;
+use Tests\TestCase;
+
+class CreateOrFindOrderInfoTest extends TestCase
+{
+
+    /**
+     * @var OrderService $orderService
+     */
+    public $orderService;
+    public $data = [];
+    public $order ;
+    public function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated stub
+        $this->orderService = app('OrderService');
+        $this->data['orderHeader'] = OracleDOCOrderHeader::query()->orderBy('addTime')->first();
+    }
+    public function testCreateOrFindOrderInfo()
+    {
+        $this->orderService->createOrFindOrderInfo($this->data['orderHeader']);
+        $order =Order::query()->where('code',$this->data['orderHeader']['orderno'])->first();
+        $this->assertNotNull($order);
+        $this->order = $order;
+        $this->assertEquals($order->code,$this->data['orderHeader']['orderno']);
+        $this->order->delete();
+    }
+
+}

+ 36 - 0
tests/Services/OrderService/CreateOrFindOrderTest.php

@@ -0,0 +1,36 @@
+<?php
+
+namespace Tests\Services\OrderService;
+
+use App\OracleDOCOrderHeader;
+use App\Order;
+use App\Services\OrderService;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Tests\TestCase;
+
+class CreateOrFindOrderTest extends TestCase
+{
+    /**
+     * @var OrderService $orderService
+     */
+    public $orderService;
+    public $data = [];
+    public $order ;
+    public function setUp(): void
+    {
+        parent::setUp();
+        $this->orderService = app('OrderService');
+        $this->data['orderHeader'] = OracleDOCOrderHeader::query()->orderBy('addTime')->first();
+    }
+
+    public function testExample()
+    {
+        $this->orderService->createOrFindOrder($this->data['orderHeader']);
+        $order = Order::query()->where('code',$this->data['orderHeader']['orderno'])->first();
+        $this->assertNotNull($order);
+        $this->order = $order;
+        $this->assertEquals($order->code,$this->data['orderHeader']['orderno']);
+        $this->order->delete();
+    }
+}