Selaa lähdekoodia

Merge branch 'zengjun' of ssh://was.baoshi56.com:10022/var/git/bswas

LD 5 vuotta sitten
vanhempi
commit
e60acc851c
46 muutettua tiedostoa jossa 1551 lisäystä ja 643 poistoa
  1. 9 1
      app/DischargeTask.php
  2. 15 10
      app/Filters/DischargeTaskFilters.php
  3. 110 0
      app/Filters/FacilitatorExternalFilters.php
  4. 57 48
      app/Http/Controllers/DischargeTaskController.php
  5. 67 36
      app/Http/Controllers/FacilitatorController.php
  6. 61 0
      app/Http/Controllers/FacilitatorExternalController.php
  7. 29 325
      app/Http/Controllers/TestController.php
  8. 86 0
      app/Http/Controllers/api/thirdPart/hengli/PackageController.php
  9. 342 0
      app/Http/Controllers/api/thirdPart/weight/WeightBaseController.php
  10. 5 1
      app/Http/Requests/DischargeTask/DischargeTaskRequest.php
  11. 5 4
      app/Http/Requests/DischargeTask/FacilitatorRequest.php
  12. 5 2
      app/OrderIssue.php
  13. 10 0
      app/Providers/RouteServiceProvider.php
  14. 31 9
      app/Services/DischargeTaskService.php
  15. 23 1
      app/Services/FacilitatorService.php
  16. 5 2
      database/factories/DischargeTaskFactory.php
  17. 65 0
      database/migrations/2021_03_30_104348_change_discharge_auth_name.php
  18. 1 1
      database/seeds/DischargeTaskSeeder.php
  19. 2 2
      resources/views/maintenance/facilitator/_create.blade.php
  20. 2 2
      resources/views/maintenance/facilitator/_edit.blade.php
  21. 4 4
      resources/views/maintenance/facilitator/_table.blade.php
  22. 7 7
      resources/views/maintenance/facilitator/index.blade.php
  23. 2 2
      resources/views/maintenance/menu.blade.php
  24. 1 1
      resources/views/order/issue/index.blade.php
  25. 41 0
      resources/views/personnel/discharge/facilitator/QRcode.blade.php
  26. 91 0
      resources/views/personnel/discharge/facilitator/_table.blade.php
  27. 80 0
      resources/views/personnel/discharge/facilitator/external/_table.blade.php
  28. 110 0
      resources/views/personnel/discharge/facilitator/external/index.blade.php
  29. 45 16
      resources/views/personnel/discharge/facilitator/index.blade.php
  30. 3 3
      resources/views/personnel/discharge/facilitator/menu.blade.php
  31. 6 6
      resources/views/personnel/discharge/menu.blade.php
  32. 2 1
      resources/views/personnel/discharge/statement/_table.blade.php
  33. 6 8
      resources/views/personnel/discharge/statement/index.blade.php
  34. 2 2
      resources/views/personnel/discharge/statement/menu.blade.php
  35. 65 29
      resources/views/personnel/discharge/task/_createTask.blade.php
  36. 9 9
      resources/views/personnel/discharge/task/_executeTask.blade.php
  37. 25 12
      resources/views/personnel/discharge/task/_table.blade.php
  38. 40 22
      resources/views/personnel/discharge/task/index.blade.php
  39. 2 2
      resources/views/personnel/discharge/task/menu.blade.php
  40. 4 0
      resources/views/personnel/menu.blade.php
  41. 0 35
      resources/views/transport/discharge/facilitator/_table.blade.php
  42. 3 3
      resources/views/transport/waybill/index.blade.php
  43. 11 0
      routes/api/thirdPart/hengli.php
  44. 25 18
      routes/apiLocal.php
  45. 23 19
      routes/web.php
  46. 14 0
      tests/webApi/thirdPart/hengli/PackageController.http

+ 9 - 1
app/DischargeTask.php

@@ -22,6 +22,8 @@ class DischargeTask extends Model
 
     const types = [
         '装车',
+        '卸车',
+        '翻托',
         '卸车'
     ];
 
@@ -36,7 +38,7 @@ class DischargeTask extends Model
         'owner_id','type','numbers','status',
         'income_amount','income_unit','income_unit_price','income_total_cost','income_remark',
         'facilitator_id','expenditure_amount','expenditure_unit','expenditure_unit_price','expenditure_total_cost','expenditure_remark',
-        'income_at','expenditure_at'
+        'income_at','expenditure_at','warehouse_id'
     ];
 
     function owner(): BelongsTo
@@ -54,4 +56,10 @@ class DischargeTask extends Model
         return $filters->apply($query);
     }
 
+    public function warehouse(): BelongsTo
+    {
+        return $this->belongsTo(Warehouse::class);
+    }
+
+
 }

+ 15 - 10
app/Filters/DischargeTaskFilters.php

@@ -11,7 +11,7 @@ class DischargeTaskFilters
     protected $request;
     protected $queryBuilder;
     protected $filters = [
-        'owner_id', 'created_at_start', 'created_at_end', 'numbers', 'status', 'type', 'income_remark','facilitator_id'
+        'owner_id', 'created_at_start', 'created_at_end', 'numbers', 'status', 'type', 'income_remark','facilitator_id','created_range'
     ];
     protected $array_filter;
     protected $params = [];
@@ -62,46 +62,51 @@ class DischargeTaskFilters
 
     public function owner_id($owner_id)
     {
-        $this->queryBuilder->where('owner_id',$owner_id);
+        $this->queryBuilder->where('discharge_tasks.owner_id',$owner_id);
     }
 
     public function created_at_start($created_at_start)
     {
-        $this->queryBuilder->where('created_at','>=',$created_at_start);
+        $this->queryBuilder->where('discharge_tasks.created_at','>=',$created_at_start);
     }
     public function created_at_end($created_at_end)
     {
-        $this->queryBuilder->where('created_at','<=',$created_at_end);
+        $this->queryBuilder->where('discharge_tasks.created_at','<=',$created_at_end);
     }
 
     public function numbers($numbers)
     {
-        $this->searchWay($this->queryBuilder,$numbers,'numbers');
+        $this->searchWay($this->queryBuilder,$numbers,'discharge_tasks.numbers');
     }
 
     public function status($status)
     {
-        $this->queryBuilder->where('status',$status);
+        $this->queryBuilder->where('discharge_tasks.status',$status);
     }
 
     public function type($type)
     {
-        $this->queryBuilder->where('type',$type);
+        $this->queryBuilder->where('discharge_tasks.type',$type);
     }
 
     public function income_remark($income_remark)
     {
-        $this->queryBuilder->where('income_remark','like',$income_remark."%");
+        $this->queryBuilder->where('discharge_tasks.income_remark','like',$income_remark."%");
     }
 
     public function id($ids)
     {
-        $this->queryBuilder->whereIn('id',$ids);
+        $this->queryBuilder->whereIn('discharge_tasks.id',$ids);
     }
 
     public function facilitator_id($facilitator_id)
     {
-        $this->searchWay($this->queryBuilder,$facilitator_id,'facilitator_id');
+        $this->searchWay($this->queryBuilder,$facilitator_id,'discharge_tasks.facilitator_id');
+    }
+
+    public function created_range($created_range)
+    {
+        $this->queryBuilder->where('discharge_tasks.created_at','like',$created_range.'%');
     }
 
 }

+ 110 - 0
app/Filters/FacilitatorExternalFilters.php

@@ -0,0 +1,110 @@
+<?php
+
+
+namespace App\Filters;
+
+
+use App\Facilitator;
+use App\Traits\ModelSearchWay;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Http\Request;
+
+class FacilitatorExternalFilters
+{
+
+    use ModelSearchWay;
+
+    protected $request;
+    protected $queryBuilder;
+    protected $filters = [
+        'created_at_start', 'created_at_end', 'facilitator_id', 'range_data', 'id'
+    ];
+    protected $array_filter;
+    protected $params = [];
+
+    public function __construct(Request $request)
+    {
+        $this->request = $request;
+        $this->params = $request->all();
+        $request['range_data'] = $request['data'];
+        unset($request['data']);
+        $this->array_filter = array_filter($this->request->only($this->filters));
+    }
+
+    public function apply($builder)
+    {
+        $this->queryBuilder = $builder;
+        foreach ($this->array_filter as $filter => $value) {
+            if (method_exists($this, $filter)) {
+                $this->$filter($value, $this->queryBuilder);
+            }
+        }
+        return $this->queryBuilder;
+    }
+
+    public function created_at_start($created_at_start)
+    {
+        $this->queryBuilder->where('discharge_tasks.created_at', '>=', $created_at_start);
+    }
+
+    public function created_at_end($created_at_end)
+    {
+        $this->queryBuilder->where('discharge_tasks.created_at', '<=', $created_at_end);
+    }
+
+    // 卸货队 和 时间区间
+    public function range_data($range_data)
+    {
+        $rangeData = explode(',', $range_data);
+        $params = [];
+        foreach ($rangeData as $rangeDatum) {
+            $data = explode(';', $rangeDatum);
+            $data = $this->getSearchArr($data);
+            if (empty($params[$data['id']])) {
+                $params[$data['id']] = [];
+            }
+            $params[$data['id']][] = $data['months'];
+        }
+        $arr = [];
+        foreach ($params as $key => $param) {
+            $facilitator_id = $key;
+            $rangeData = '';
+            foreach ($param as $item) {
+                $rangeData .= $item . '|';
+            }
+            $rangeData = rtrim($rangeData, '|');
+            $arr[$facilitator_id] = $rangeData;
+        }
+
+        $this->queryBuilder->where(function ($query) use ($arr) {
+            foreach ($arr as $key => $item) {
+                $query->orWhere(function ($query) use ($key, $item) {
+                    /** @var Builder $query */
+                    $query->where('discharge_tasks.facilitator_id', $key)->where('discharge_tasks.created_at', 'regexp', '(' . $item . ')');
+                });
+            }
+        });
+    }
+
+    private function getSearchArr($data): array
+    {
+        $param = [];
+        foreach ($data as $datum) {
+            $arr = explode(':', $datum);
+            $param[$arr[0]] = $arr[1];
+        }
+        return $param;
+    }
+
+    public function facilitator_id($facilitator_id)
+    {
+        $this->searchWay($this->queryBuilder, $facilitator_id, 'discharge_tasks.facilitator_id');
+    }
+
+    public function id($id)
+    {
+        $facilitator =  Facilitator::query()->fromQuery('select id from facilitators where MD5(id) = ?',[$id]);
+        $this->queryBuilder->whereIn('discharge_tasks.facilitator_id',$facilitator);
+    }
+
+}

+ 57 - 48
app/Http/Controllers/DischargeTaskController.php

@@ -9,79 +9,63 @@ use App\Filters\DischargeTaskFilters;
 use App\Http\Requests\DischargeTask\DischargeTaskRequest;
 use App\Services\common\ExportService;
 use App\Services\OwnerService;
+use App\Warehouse;
 use Illuminate\Http\Request;
-use Illuminate\Http\Response;
-use Illuminate\Support\Facades\Gate;
+ use Illuminate\Support\Facades\Gate;
 
 class DischargeTaskController extends Controller
 {
     use AsyncResponse;
 
+
     public function index(Request $request, DischargeTaskFilters $filters)
     {
-        if (!Gate::allows('运输管理-卸货-查询')) {
+        if (!Gate::allows('人事管理-卸货-查询')) {
             return redirect(url('/'));
         }
-        $dischargeTasks = DischargeTask::query()->with(['facilitator', 'owner'])->filter($filters)->orderByDesc('id')->paginate($request['paginate'] ?? 50);
+
+        $dischargeTasks = DischargeTask::query()->with(['facilitator', 'owner','warehouse'])->filter($filters)->orderByDesc('id')->paginate($request['paginate'] ?? 50);
         $owners = app(OwnerService::class)->getAuthorizedOwners();
+        $warehouses = Warehouse::query()->select('id','name')->get();
         $facilitators = Facilitator::query()->select('name', 'id')->get();
-        return view('transport.discharge.task.index', compact('dischargeTasks', 'owners', 'facilitators'));
+
+        return view('personnel.discharge.task.index', compact('dischargeTasks', 'owners', 'facilitators','warehouses'));
     }
 
     // 结算报表
     public function statementIndex(Request $request, DischargeTaskFilters $filters)
     {
-        if (!Gate::allows('运输管理-卸货-结算报表-查询')) {
+        if (!Gate::allows('人事管理-卸货-结算报表-查询')) {
             return redirect(url('/'));
         }
-        $dischargeStatements = DischargeTask::query()->with('facilitator')->filter($filters)->orderBy('id')->paginate($request['paginate'] ?? 50);
+
+        $dischargeStatements = DischargeTask::query()->with('facilitator')->filter($filters)->orderByDesc('id')->paginate($request['paginate'] ?? 50);
         $owners = app(OwnerService::class)->getAuthorizedOwners();
         $facilitators = Facilitator::query()->select('name', 'id')->get();
-        return view('transport.discharge.statement.index', compact('dischargeStatements', 'owners', 'facilitators'));
-    }
-
-
-    public function create()
-    {
 
-    }
-
-
-    public function store(Request $request)
-    {
+        return view('personnel.discharge.statement.index', compact('dischargeStatements', 'owners', 'facilitators'));
     }
 
     // async 创建
     public function storeApi(DischargeTaskRequest $request)
     {
-        $this->gate('运输管理-卸货-创建');
+        $this->gate('人事管理-卸货-创建');
+
         $result = app('DischargeTaskService')->createTask($request->all());
+
         if ($result['success']) $this->success($result['data']);
         $this->error('任务创建异常,刷新当前页面重试');
     }
 
-    public function show(DischargeTask $dischargeTask)
-    {
-        //
-    }
-
-
-    public function edit(DischargeTask $dischargeTask)
-    {
-        //
-    }
-
-    public function update(Request $request, DischargeTask $dischargeTask)
-    {
-        //
-    }
-
     // async 编辑
     public function updateApi(DischargeTaskRequest $request)
     {
-        $this->gate('运输管理-卸货-编辑');
+        $this->gate('人事管理-卸货-编辑');
+
         $dischargeTask = DischargeTask::query()->where('id', $request['id'])->first();
+
         $result = app('DischargeTaskService')->updateDischargeTask($dischargeTask, $request->all());
+
         if ($result['success']) $this->success($result['data']);
         else $this->error($result['message'] ?? '操作异常,请刷新页面重试');
     }
@@ -89,7 +73,7 @@ class DischargeTaskController extends Controller
     // 修改任务服务商
     public function updateTaskFacilitatorApi(DischargeTaskRequest $request)
     {
-        $this->gate('运输管理-卸货-编辑');
+        $this->gate('人事管理-卸货-编辑');
         /** @var  DischargeTask $dischargeTask */
         $dischargeTask = DischargeTask::query()->where('id', $request['id'])->first();
         if (!$dischargeTask) $this->error('没有找对应的卸货任务');
@@ -98,18 +82,16 @@ class DischargeTaskController extends Controller
         else $this->error($result['message'] ?? '操作异常,请刷新页面重试');
     }
 
-    public function destroy(DischargeTask $dischargeTask)
-    {
-
-    }
-
     //  async 删除
     public function destroyApi(DischargeTaskRequest $request)
     {
-        $this->gate('运输管理-卸货-删除');
+        $this->gate('人事管理-卸货-删除');
+
         /** @var DischargeTask $dischargeTask */
         $dischargeTask = DischargeTask::query()->where('id', $request['id'])->first();
+
         $result = app('DischargeTaskService')->deleteDischargeTask($dischargeTask);
+
         if ($result['success']) $this->success();
         else $this->error($result['message']);
     }
@@ -117,9 +99,11 @@ class DischargeTaskController extends Controller
     // 执行任务
     public function executingTaskApi(DischargeTaskRequest $request)
     {
-        $this->gate('运输管理-卸货-编辑');
+        $this->gate('人事管理-卸货-编辑');
+
         $dischargeTask = DischargeTask::query()->where('id', $request['id'])->first();
         $result = app('DischargeTaskService')->updateTaskProvider($dischargeTask, $request->all());
+
         if ($result['success']) $this->success($result['data']);
         $this->error($result['message'] ?? '操作异常,请刷新页面重试');
     }
@@ -127,22 +111,47 @@ class DischargeTaskController extends Controller
     // 卸货任务下载
     public function export(Request $request, DischargeTaskFilters $filters)
     {
-        $this->gate('运输管理-卸货-查询');
+        $this->gate('人事管理-卸货-查询');
+
         $dischargeTasks = DischargeTask::query()->with(['Facilitator', 'owner'])->filter($filters)->orderByDesc('id')->get();
+
         $row = ['日期', '客户名称', '作业名称', '入库单号', '数量', '单位', '单价', '收费', '状态', '备注'];
         $json = app('DischargeTaskService')->getJson($dischargeTasks);
+
         return app(ExportService::class)->json($row, $json, "卸货任务");
     }
 
     // 结算报表下载
     public function exportStatements(Request $request, DischargeTaskFilters $filters)
     {
-        $this->gate('运输管理-卸货-结算报表-查询');
+        $this->gate('人事管理-卸货-结算报表-查询');
 
-        $dischargeTasks = DischargeTask::query()->with(['facilitator', 'owner'])->filter($filters)->orderByDesc('id')->get();
-        $row = ['日期', '客户名称', '作业名称', '入库单号', '数量', '单位', '收入单价', '收入合计', '服务商', '数量', '单位', '支出单价', '支出合计', '状态', '收入备注', '支出备注'];
+        $dischargeTasks = DischargeTask::query()->with(['facilitator', 'owner','warehouse'])->filter($filters)->orderByDesc('id')->get();
+
+        $row = ['日期', '客户名称','仓库', '作业名称', '入库单号', '数量', '单位', '收入单价', '收入合计', '装卸队', '数量', '单位', '支出单价', '支出合计', '状态', '收入备注', '支出备注'];
         $json = app('DischargeTaskService')->getStatementsJson($dischargeTasks);
+
         return app(ExportService::class)->json($row, $json, "卸货结算报表");
     }
 
+    public function show(DischargeTask $dischargeTask)
+    {
+    }
+    public function edit(DischargeTask $dischargeTask)
+    {
+    }
+    public function update(Request $request, DischargeTask $dischargeTask)
+    {
+    }
+    public function store(Request $request)
+    {
+    }
+    public function create()
+    {
+    }
+    public function destroy(DischargeTask $dischargeTask)
+    {
+
+    }
+
 }

+ 67 - 36
app/Http/Controllers/FacilitatorController.php

@@ -6,8 +6,10 @@ use App\Components\AsyncResponse;
 use App\Facilitator;
 use App\DischargeTask;
 use App\Filters\DischargeTaskFilters;
+use App\Filters\FacilitatorExternalFilters;
 use App\Http\Requests\DischargeTask\FacilitatorRequest;
 use App\Services\common\ExportService;
+use App\Services\FacilitatorService;
 use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Gate;
@@ -16,95 +18,124 @@ class FacilitatorController extends Controller
 {
     use AsyncResponse;
 
-    // 服务商基础设置
     public function index(Request $request)
     {
-        if (!Gate::allows('服务商-查询')) {
+        if (!Gate::allows('装卸队-查询')) {
             return redirect(url('/'));
         }
+
         $facilitators = Facilitator::query()->select(['id', 'name', 'created_at'])->orderByDesc('id')->paginate($request['paginate'] ?? 50);
+
         return view('maintenance.facilitator.index', compact('facilitators'));
     }
 
-    // 服务商对账单
+    // 装卸队对账单
     public function statementIndex(Request $request, DischargeTaskFilters $filters)
     {
-        if (!Gate::allows('服务商-对账单-查询')) {
+        if (!Gate::allows('装卸队-对账单-查询')) {
             return redirect(url('/'));
         }
+
         $facilitatorStatements = DischargeTask::query()
+            ->selectRaw('sum( discharge_tasks.expenditure_total_cost ) total_cost,' . ' count( 1 ) sum , ' . ' facilitators.name facilitators_name,' . ' facilitators.id id,' . " DATE_FORMAT( discharge_tasks.created_at, '%Y-%m' ) months ")
+            ->leftJoin('facilitators', 'discharge_tasks.facilitator_id', '=', 'facilitators.id')
             ->filter($filters)
-            ->with('facilitator')
-            ->select(['id', 'facilitator_id', 'expenditure_amount', 'expenditure_unit', 'expenditure_unit_price', 'expenditure_total_cost', 'expenditure_remark', 'created_at'])
-            ->whereNotNull('facilitator_id')
-            ->where('facilitator_id','!=','0')
-            ->orderByDesc('id')->paginate($request['paginate'] ?? 50);
+            ->groupBy('months', 'facilitator_id')
+            ->orderByDesc('months')
+            ->paginate($request['paginate'] ?? 50);
+
         $facilitators = Facilitator::query()->get();
-        return view('transport.discharge.facilitator.index', compact('facilitatorStatements', 'facilitators'));
-    }
 
-    public function create()
-    {
+        return view('personnel.discharge.facilitator.index', compact('facilitatorStatements', 'facilitators'));
     }
 
-    public function store(Request $request)
+    // 卸货队扫描二维码
+    public function getQrCode(Request $request)
     {
-    }
+        /** @var FacilitatorService $service */
+        $service = app(FacilitatorService::class);
+        $qrCodeUrl = $service->getQrCodeUrl($request->all());
 
-    public function storeApi(FacilitatorRequest $request)
-    {
-        $this->gate('服务商-创建');
-        $facilitator = Facilitator::query()->create($request->all());
-        $this->success($facilitator);
-    }
+        $facilitator = Facilitator::query()->where('id',$request['facilitator_id'])->first();
 
-    public function show(Facilitator $facilitator)
-    {
+        return view('personnel/discharge/facilitator/external/Qrcode',compact('qrCodeUrl','facilitator'));
     }
 
-    public function edit(Facilitator $facilitator)
+    public function gainStatementApi(Request $request,DischargeTaskFilters $filters)
     {
+        $facilitatorStatements = DischargeTask::query()
+            ->with('facilitator')
+            ->filter($filters)
+            ->get();
+
+        $this->success($facilitatorStatements);
     }
 
-    public function update(Request $request, Facilitator $facilitator)
+    public function storeApi(FacilitatorRequest $request)
     {
+        $this->gate('装卸队-创建');
+
+        $facilitator = Facilitator::query()->create($request->all());
+
+        $this->success($facilitator);
     }
 
     public function updateApi(FacilitatorRequest $request)
     {
-        $this->gate('服务商-编辑');
+        $this->gate('装卸队-编辑');
+
         $facilitator = Facilitator::query()->where('id', $request['id'])->update($request->only(['name']));
+
         if ($facilitator) $this->success(Facilitator::query()->find($request['id']));
         $this->error('更新失败');
     }
 
-    public function destroy(Facilitator $facilitator)
-    {
-    }
-
     public function destroyApi(FacilitatorRequest $request)
     {
-        $this->gate('服务商-删除');
+        $this->gate('装卸队-删除');
+
         $count = Facilitator::query()->where('id', $request['id'])->delete();
+
         if ($count > 0) $this->success('删除成功');
         $this->error('删除失败');
     }
 
     // 对账单导出
-    public function exportStatement(Request $request, DischargeTaskFilters $filters)
+    public function exportStatement(Request $request, FacilitatorExternalFilters $filters)
     {
-        $this->gate('服务商-对账单-查询');
         /** @var Collection $facilitatorStatements */
         $facilitatorStatements = DischargeTask::query()
             ->filter($filters)
             ->with('facilitator')
             ->select(['id', 'facilitator_id', 'expenditure_amount', 'expenditure_unit', 'expenditure_unit_price', 'expenditure_total_cost', 'expenditure_remark', 'created_at'])
             ->whereNotNull('facilitator_id')
-            ->where('facilitator_id','!=','0')
+            ->where('facilitator_id', '!=', '0')
             ->orderByDesc('id')->get();
-        $row = ['日期', '服务商', '数量', '单位', '单价', '总金额合计'];
+
+        $row = ['日期', '装卸队', '数量', '单位', '单价', '总金额合计'];
+
         $json = app('DischargeTaskService')->getFacilitatorStatementsJson($facilitatorStatements);
-        return app(ExportService::class)->json($row, $json, "服务商对账单报表");
+
+        return app(ExportService::class)->json($row, $json, "装卸队对账单报表");
     }
 
+
+    public function create()
+    {
+    }
+    public function store(Request $request)
+    {
+    }
+    public function show(Facilitator $facilitator)
+    {
+    }
+    public function edit(Facilitator $facilitator)
+    {
+    }
+    public function update(Request $request, Facilitator $facilitator)
+    {
+    }
+    public function destroy(Facilitator $facilitator)
+    {
+    }
 }

+ 61 - 0
app/Http/Controllers/FacilitatorExternalController.php

@@ -0,0 +1,61 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Components\AsyncResponse;
+use App\DischargeTask;
+use App\Facilitator;
+use App\Filters\FacilitatorExternalFilters;
+use App\Services\common\ExportService;
+use App\Services\DischargeTaskService;
+use App\Services\FacilitatorService;
+use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Http\Request;
+
+class FacilitatorExternalController extends Controller
+{
+    // 卸货队可访问的页面
+    use AsyncResponse;
+
+    // 查询页面
+    public function index(Request $request,$id)
+    {
+        $facilitator =  Facilitator::query()->fromQuery('select * from facilitators where MD5(id) = ?',[$id])->first();
+        if(!$facilitator)return redirect('exception.404');
+
+        $request['id'] = $id;
+        $filters = new FacilitatorExternalFilters($request);
+
+        $facilitatorStatements = DischargeTask::query()
+            ->selectRaw('sum( discharge_tasks.expenditure_total_cost ) total_cost,' . ' count( 1 ) sum , ' . ' facilitators.name facilitators_name,' . ' facilitators.id id,' . " DATE_FORMAT( discharge_tasks.created_at, '%Y-%m' ) months ")
+            ->leftJoin('facilitators', 'discharge_tasks.facilitator_id', '=', 'facilitators.id')
+            ->filter($filters)
+            ->groupBy('months', 'facilitator_id')
+            ->orderByDesc('months')
+            ->paginate($request['paginate'] ?? 50);
+
+        return view('personnel.discharge.facilitator.external.index',compact('facilitatorStatements','id'));
+    }
+
+    // 下载
+    public function export(Request $request,$id)
+    {
+        $request['id'] = $id;
+        $filters = new FacilitatorExternalFilters($request);
+
+        /** @var Collection $facilitatorStatements */
+        $facilitatorStatements = DischargeTask::query()
+            ->filter($filters)
+            ->with('facilitator')
+            ->select(['id', 'facilitator_id', 'expenditure_amount', 'expenditure_unit', 'expenditure_unit_price', 'expenditure_total_cost', 'expenditure_remark', 'created_at'])
+            ->whereNotNull('facilitator_id')
+            ->where('facilitator_id', '!=', '0')
+            ->orderByDesc('id')->get();
+
+        $row = ['日期', '装卸队', '数量', '单位', '单价', '总金额合计'];
+        $json = app('DischargeTaskService')->getFacilitatorStatementsJson($facilitatorStatements);
+
+        return app(ExportService::class)->json($row, $json, "卸货结算报表");
+    }
+
+}

+ 29 - 325
app/Http/Controllers/TestController.php

@@ -26,6 +26,7 @@ use App\Events\CancelOrder;
 use App\Events\SendEmailEvent;
 use App\Exceptions\Exception;
 use App\Http\Controllers\api\thirdPart\haiq\PickStationController;
+use App\Http\Controllers\api\thirdPart\hengli\PackageController;
 use App\Http\Requests\ForeignHaiRobotic_taskUpdateRequest;
 use App\Http\Requests\TestAaRequest;
 use App\Imports\OrderTrackingImport;
@@ -61,7 +62,6 @@ use App\Owner;
 use App\OwnerFeeDetail;
 use App\OwnerFeeDetailLogistic;
 use App\OwnerPriceExpress;
-use App\OwnerPriceExpressProvince;
 use App\OwnerPriceOperation;
 use App\OwnerPriceOperationItem;
 use App\OwnerReport;
@@ -102,13 +102,11 @@ use App\Services\OrderTrackingOwnerService;
 use App\Services\OrderTrackingService;
 use App\Services\OwnerPriceOperationService;
 use App\Services\OwnerService;
-use App\Services\ProcurementWeiXinSendMessageService;
 use App\Services\RegionService;
 use App\Services\RejectedBillService;
 use App\Services\ShopService;
 use App\Services\StoreService;
 use App\Services\WarehouseService;
-use App\Station;
 use App\StationRuleBatch;
 use App\StationTask;
 use App\StationTaskMaterialBox;
@@ -564,7 +562,6 @@ class TestController extends Controller
         });
         dd($authorities);
     }
-
     public function output2()
     {
         StationTaskBatch::query()->insert([[
@@ -782,40 +779,6 @@ class TestController extends Controller
     }
 
 
-    public function testSyncOrderTask()
-    {
-        Cache::flush();
-        dump('hendle...');
-        dump((string)Carbon::now());
-        dump(memory_get_usage() / 1024 / 1024);
-        $task = new SyncWMSOrderTask();
-        $task->handle();
-        dump((string)Carbon::now());
-        dump('hendle...end');
-        dump(memory_get_usage() / 1024 / 1024);
-        dump(memory_get_peak_usage() / 1024 / 1024);
-        return view('test');
-    }
-
-    public function testSyncWaveNo()
-    {
-        $waveHeader = OracleDOCWaveHeader::query()->where('waveno', 'W201209000024')->first();
-//        Batch::query()->create([
-//            'code' => $waveHeader->waveno,
-//            'wms_created_at' => $waveHeader->addtime,
-//            'remark' => $waveHeader->descr,
-//            'wms_status' => '99',
-//        ]);
-        $waveHeaderDetails = OracleDOCWaveDetails::query()->where('waveno', $waveHeader->waveno)->get();
-        $orderNos = $waveHeaderDetails->map(function ($item) {
-            return $item->orderno;
-        });
-        $orderHeaderService = new OracleDOCOrderHeaderService();
-        $orderHeaders = $orderHeaderService->getOrderInfoByOrderNos($orderNos);
-        $orderService = new OrderService();
-        $orderService->syncOrderByWMSOrderHeaders($orderHeaders);
-    }
-
 
     public function testUpdateSkuNameBarcodeToCommodity_id()
     {
@@ -861,145 +824,42 @@ class TestController extends Controller
         if (count($updateParams) > 0) app(BatchUpdateService::class)->batchUpdate('store_items', $updateParams);
     }
 
-    public function syncOrderTrackingTask()
+    function testUpdateStores()
     {
-        $service = new OrderTrackingService();
-        $start_data = Carbon::parse('2020-12-21 10:00:00');
-        $end_data = Carbon::parse('2020-12-21 10:05:00');
-        $orderNos = OracleDOCOrderHeader::query()->selectRaw('orderno')
-            ->where('addTime', '>=', $start_data)
-            ->where('addTime', '<=', $end_data)
-            ->get()->map(function ($orderHeader) {
-                return $orderHeader->orderno;
-            });
-        $order_no_list = $orderNos->chunk(3000);
-        foreach ($order_no_list as $order_nos) {
-            $orderHeaders = OracleDOCOrderHeader::query()->selectRaw(implode(',', OracleDOCOrderHeaderService::$columns))
-                ->with(['oracleBASCustomer' => function ($query) {
-                    $query->selectRaw('BAS_CUSTOMER.CustomerID,BAS_CUSTOMER.Customer_Type,BAS_CUSTOMER.Descr_C,BAS_CUSTOMER.Active_Flag');
-                }, 'oracleDOCOrderDetails' => function ($query) {
-                    $query->selectRaw('doc_order_details.orderNo,doc_order_details.customerid,doc_order_details.sku,doc_order_details.QtyOrdered,doc_order_details.Location');
-                }, 'actAllocationDetails' => function ($query) {
-                    $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID,ACT_Allocation_Details.Sku,ACT_Allocation_Details.Location');
-                }, 'oracleBASCode' => function ($query) {
-                    $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
-                }, 'orderType' => function ($query) {
-                    $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
-                }])
-                ->whereIn('DOC_Order_Header.OrderNo', $order_nos)
-                ->get();
-            app(OrderService::class)->syncOrderByWMSOrderHeaders($orderHeaders);
-            app("OrderCommodityService")->syncOrderCommodity($orderHeaders);
-            app('OrderPackageService')->syncOrderPackage($orderHeaders);
-            app("OrderPackageCommoditiesService")->syncOrderPackageCommodities($orderHeaders);
-            $service->createByWmsOrderHeader($orderHeaders);
-            unset($orderHeaders);
-        }
-    }
-
-    public function syncOrderTask()
-    {
-        $service = new OrderService();
-        $start_data = Carbon::parse('2020-12-21 10:00:00');
-        $end_data = Carbon::parse('2020-12-21 11:00:00');
-        $orderNos = OracleDOCOrderHeader::query()->selectRaw('orderno')
-            ->where('addTime', '>=', $start_data)
-            ->where('addTime', '<=', $end_data)
-            ->get()->map(function ($orderHeader) {
-                return $orderHeader->orderno;
-            });
-        $order_no_list = $orderNos->chunk(3000);
-        foreach ($order_no_list as $order_nos) {
-            $orderHeaders = OracleDOCOrderHeader::query()->selectRaw(implode(',', OracleDOCOrderHeaderService::$columns))
-                ->with(['oracleBASCustomer' => function ($query) {
-                    $query->selectRaw('BAS_CUSTOMER.CustomerID,BAS_CUSTOMER.Customer_Type,BAS_CUSTOMER.Descr_C,BAS_CUSTOMER.Active_Flag');
-                }, 'oracleDOCOrderDetails' => function ($query) {
-                    $query->selectRaw('doc_order_details.orderNo,doc_order_details.customerid,doc_order_details.sku,doc_order_details.QtyOrdered,doc_order_details.Location');
-                }, 'actAllocationDetails' => function ($query) {
-                    $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID,ACT_Allocation_Details.Sku,ACT_Allocation_Details.Location');
-                }, 'oracleBASCode' => function ($query) {
-                    $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
-                }, 'orderType' => function ($query) {
-                    $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
-                }])
-                ->whereIn('DOC_Order_Header.OrderNo', $order_nos)
-                ->get();
-            $service->syncOrder($orderHeaders);
-            unset($orderHeaders);
+        $stores = Store::query()->where('stored_method', '快速入库')->get();
+        $updated_at = Carbon::now()->toDateTimeString();
+        $updateParams = [[
+            'id', 'is_fast_stored', 'updated_at'
+        ]];
+        foreach ($stores as $store) {
+            if ($store->stored_method != '快速入库') continue;
+            $updateParams[] = [
+                'id' => $store->id,
+                'is_fast_stored' => '快速入库',
+                'updated_at' => $updated_at,
+            ];
         }
+        if (count($updateParams) > 1) app(BatchUpdateService::class)->batchUpdate('stores', $updateParams);
     }
 
-    public function testOrderissue()
+    public function testSyncAsn()
     {
-        $orderIssue_unique = \App\OrderIssue::withTrashed()
-            ->selectRaw('count(1) as count,id,order_id')
-            ->whereNotNull('order_id')
-            ->orderByDesc('created_at')
-            ->groupBy('order_id')
-            ->having('count', '>', 1)
-            ->limit(100)
-            ->get();
-        if ($orderIssue_unique->count() == 0) return;
-        foreach ($orderIssue_unique as $item) {
-            $orderIssue_delete = OrderIssue::withTrashed()->where('order_id', $item->order_id)->get();
-            /** @var OrderIssue $order_issue_unique */
-            $order_issue_unique = $orderIssue_delete->whereNull('deleted_at')->first();
-            if (!$order_issue_unique) $order_issue_unique = $orderIssue_delete->first();
-            $ids = [];
-            foreach ($orderIssue_delete as $key => $order_issue) {
-                if ($order_issue->id == $order_issue_unique->id) continue;
-                $ids[] = $order_issue->id;
-                if ($order_issue['logistic_number_return']) $order_issue_unique['logistic_number_return'] = $order_issue['logistic_number_return'];
-                if ($order_issue['rejecting_status'] != '未退回') $order_issue_unique['rejecting_status'] = $order_issue['rejecting_status'];
-                if ($order_issue['is_new_rejecting'] != '无') $order_issue_unique['is_new_rejecting'] = $order_issue['is_new_rejecting'];
-                if ($order_issue['user_workgroup_id']) $order_issue_unique['user_workgroup_id'] = $order_issue['user_workgroup_id'];
-                if ($order_issue['imported_status'] != '正常') $order_issue_unique['imported_status'] = $order_issue['imported_status'];
-                if ($order_issue['custom_code']) $order_issue_unique['custom_code'] = $order_issue['custom_code'];
-            }
-            $order_issue_unique->save();
-            app('LogService')->log(__METHOD__, __FUNCTION__, '修改OrderIssue:' . json_encode($order_issue_unique));
-            $orderIssues = OrderIssue::query()->whereIn('id', $ids)->get();
-            $bool = OrderIssue::query()->whereIn('id', $ids)->forceDelete();
-            if ($bool) app('LogService')->log(__METHOD__, __FUNCTION__, '删除OrderIssue:' . json_encode($orderIssues));
-        }
+//        dump('hendle...');
+        dump((string)Carbon::now());
+//        dump(memory_get_usage() / 1024 / 1024);
+        $task = new WasSyncWmsAsnInformation();
+        $task->handle();
+        dump((string)Carbon::now());
+//        dump('hendle...end');
+//        dump(memory_get_usage() / 1024 / 1024);
+//        dump(memory_get_peak_usage() / 1024 / 1024);
+//        return view('test');
     }
 
-    public function testChangeOrderTracking()
+    public function editOrderSyncAt()
     {
-        /** @var OrderTrackingService $service */
-        $service = app(OrderTrackingService::class);
-        $maxId = \App\OrderTracking::query()->orderByDesc('id')->first();
-        $orderTracking_min = \App\OrderTracking::query()->where('logistic_id', 0)->orderBy('id')->first();
-        if (!$maxId) return;
-        $maxId = $maxId->id;
-        $minId = $orderTracking_min->id;
-        $logistic = \App\Logistic::query()->where('name', '新杰物流')->first();
-        $logistic_zt = \App\Logistic::query()->where('name', '自提')->first();
-        for ($i = $minId; $i <= $maxId; $i += 100) {
-            $orderTrackings = \App\OrderTracking::query()
-                ->where('id', '>=', $i)
-                ->where('id', '<=', $i + 100)
-                ->where('logistic_id', '=', 0)
-                ->where('created_at', '!=', '0000-00-00 00:00:00')
-                ->get();
-            if ($orderTrackings->count() == 0) continue;
-            $update_params = [['id', 'logistic_id']];
-            $orderTrackings->each(function ($orderTracking) use ($logistic_zt, $logistic, &$update_params) {
-                $order = $orderTracking->commodities->package->order;
-                $logistic_id = $order->logistic_id;
-                if ($logistic_id != null) {
-                    if ($order->logistic_id == $logistic_zt->id) $logistic_id = $logistic->id;
-                    if ($logistic_id == 0) dd($order, $logistic_id);
-                    $update_params[] = [
-                        'id' => $orderTracking->id,
-                        'logistic_id' => $logistic_id,
-                    ];
-                }
-            });
-            if (count($update_params) > 1) {
-                $service->batchUpdate($update_params);
-            }
-        }
+        ValueStore::query()->where('name', 'order_last_created_sync_at')->update(['value' => '2020-12-22 09:00:00']);
+        ValueStore::query()->where('name', 'order_last_updated_sync_at')->update(['value' => '2020-12-22 09:00:00']);
     }
 
     public function testHz()
@@ -1058,100 +918,6 @@ class TestController extends Controller
         $controller->index();
     }
 
-    public function processOrderIssueRejectedBill()
-    {
-        OrderIssue::query()->withTrashed()->whereNotNull('logistic_number_return')->chunkById(200, function ($orderIssues) {
-            $orderIssues->each(function ($orderIssue) {
-                if ($orderIssue->logistic_number_return)
-                    $orderIssue->rejectedBills()->syncWithoutDetaching([trim($orderIssue->logistic_number_return)]);
-            });
-        });
-    }
-
-    public function SyncOrderTracking()
-    {
-        $start_data = Carbon::parse('2021-01-01 00:00:00');
-        $service = new OrderTrackingService();
-        $service->trackingWmsOrderOnCreate($start_data);
-    }
-
-    public function SyncUpdateOrderTracking()
-    {
-        $start_data = Carbon::parse('2021-01-14 00:00:00');
-        $service = new OrderTrackingService();
-        $service->trackingWmsOrderOnEdit($start_data);
-    }
-
-    public function orderTrackingUpdate()
-    {
-        $start_at = '2021-01-08 00:00:00';
-        $end_at = '2021-01-12 00:00:00';
-        // 修改【安桥,锐活】 订单号
-        $orderHeaderService = new OracleDOCOrderHeaderService();
-        $orderTrackingService = new OrderTrackingService();
-        $query = $orderHeaderService->getQuery();
-        $orderHeaders = $query->whereIn('Doc_Order_Header.customerid', ['ONKYO', 'RUIHUO'])
-            ->where('Doc_Order_Header.AddTime', '>=', $start_at)
-            ->where('Doc_Order_Header.AddTime', '<=', $end_at)
-            ->get();
-        $orderTrackingService->updateByWmsOrderHeaders($orderHeaders);
-    }
-
-    public function updateOrderTracking()
-    {
-        OrderTracking::query()->with(['commodities' => function ($query) {
-            $query->with(['commodity', 'package.order']);
-        }])->whereNotNull('client')
-            ->where('created_at', '>=', '2021-01-01')
-            ->where('created_at', '<=', '2021-01-07')
-            ->where('created_at', '!=', '0000-00-00 00:00:00')
-            ->chunkById('200', function ($orderTrackings) {
-                /**
-                 * @var DataHandlerService $dataService
-                 */
-                $service = new OrderTrackingService();
-                $update = [];
-                $update[] = ['id', 'order_client_code_wms'];
-                foreach ($orderTrackings as $orderTracking) {
-                    if ($orderTracking->commodities->order ?? false) {
-                        $update = [
-                            'id' => $orderTracking->id,
-                            'order_client_code_wms' => $orderTracking->commodities->order->client_code
-                        ];
-                    }
-                }
-                if (count($update) > 1) {
-                    $service->batchUpdate($update);
-                }
-            });
-    }
-
-    public function deleteOrderTracking()
-    {
-        $deleteId_arr = [];
-        $deleteCommoditiesId_arr = [];
-        OrderTracking::query()->with(['commodities.package'])
-            ->where('created_at', '!=', '0000-00-00 00:00:00')
-            ->chunkById('200', function ($orderTrackings) use (&$deleteId_arr, &$deleteCommoditiesId_arr) {
-                $deleteIds = [];
-                $deleteCommoditiesId = [];
-                foreach ($orderTrackings as $orderTracking) {
-                    if (!($orderTracking->commodities->package ?? false)) {
-                        $deleteIds[] = $orderTracking->id;
-                        if ($orderTracking->commodities) {
-                            $deleteCommoditiesId[] = $orderTracking->commodities->id;
-                        }
-                    }
-                }
-                if ($deleteIds) {
-                    $deleteId_arr[] = $deleteIds;
-                    $deleteCommoditiesId_arr[] = $deleteCommoditiesId;
-                    OrderTracking::query()->whereIn('id', $deleteIds)->delete();
-                    OrderPackageCommodities::query()->whereIn('id', $deleteCommoditiesId)->delete();
-                }
-            });
-    }
-
     public function updateRejectBillCheckedStatus()
     {
         $time = Carbon::parse("2021-01-22 00:00:00")->subDays(15)->toDateTimeString();
@@ -1168,60 +934,7 @@ class TestController extends Controller
         }
     }
 
-    public function clearCancelledOrder()
-    {
-        $wave_nos = ['W210129000248', 'W210202000216', 'W210202000251', 'W210202000216', 'W210202000282'];
-        $order_nos = ['SO210129004112', 'SO210202003333', 'SO210202003333', 'SO210202003236', 'SO210202003247', 'SO210202003719'];
-        try {
-            OracleDOCWaveDetails::query()->whereIn('WaveNo', $wave_nos)->whereIn('OrderNo', $order_nos)->delete();
-            app('LogService')->log(__CLASS__, __METHOD__, 'Delete OracleDOCWaveDetails' . '  ' . json_encode($order_nos) . json_encode($wave_nos));
-        } catch (Exception $e) {
-            app('LogService')->log(__CLASS__, __METHOD__, 'Error clearCancelledOrder' . json_encode($order_nos) . json_encode($wave_nos));
-        }
-    }
-
-    public function syncOrderByWaveNo(Request $request)
-    {
-        $input = $request->input('wave');
-        if (!$input) {
-            echo 'no wave code!';
-        } else {
-            echo 'syncing ' . $input;
-            return;
-        }
-        $oracleDOCOrderHeaderService = new OracleDOCOrderHeaderService();
-        $orderService = new OrderService();
-        $waveNos = [$input];
-        $orderHeaders = OracleDOCOrderHeader::query()
-            ->selectRaw(implode(',', OracleDOCOrderHeaderService::$columns))
-            ->whereIn('WaveNo', $waveNos)
-            ->get();
-        $orderHeaderList = $orderHeaders->chunk(2000);
-        foreach ($orderHeaderList as $item) {
-            $item = $oracleDOCOrderHeaderService->loadMissing($item);
-//            $last_order = $item->first();                                                               // 时间点靠后的
-//            $newest_orders = $item->where('addtime',$last_order->addtime);
-            if (count($orderHeaders) > 0) {
-                $orderService->syncOrder($item);                                             //  同步订单
-            }
-        }
-    }
 
-    public function syncOrderByWaveNo2(Request $request)
-    {
-        $oracleDOCOrderHeaderService = new OracleDOCOrderHeaderService();
-        $orderService = new OrderService();
-        $waveNos = ['W210220000010', 'W210220000009'];
-        $orderHeaders = OracleDOCOrderHeader::query()
-            ->selectRaw(implode(',', OracleDOCOrderHeaderService::$columns))
-            ->whereIn('WaveNo', $waveNos)
-            ->get();
-        $orderHeaderList = $orderHeaders->chunk(2000);
-        foreach ($orderHeaderList as $item) {
-            $item = $oracleDOCOrderHeaderService->loadMissing($item);
-            $orderService->syncOrder($item);
-        }
-    }
 
     public function updateLaborReport()
     {
@@ -1252,13 +965,4 @@ class TestController extends Controller
             ->get();
         dd($procurementQuotations->toJson());
     }
-
-    public function syncOrdersHeader()
-    {
-        $service  =new OracleDOCOrderHeaderService();
-        $orderService = new  OrderService();
-        $edit_date =  "2021-03-14 22:04:30";
-        $syncOrderHeader = $service->getQuery()->where('editTime',">=",$edit_date)->whereNotIn("SOStatus",["90","99"])->get();
-        $orderService->syncOrder($syncOrderHeader);
-    }
 }

+ 86 - 0
app/Http/Controllers/api/thirdPart/hengli/PackageController.php

@@ -0,0 +1,86 @@
+<?php
+
+
+namespace App\Http\Controllers\api\thirdPart\hengli;
+
+use App\Http\Controllers\api\thirdPart\weight\WeightBaseController;
+use App\Log;
+use Illuminate\Http\Request;
+
+class PackageController extends WeightBaseController
+{
+    // 参数
+    protected $weight = 'weight';     // 重量
+    protected $length = 'length';     // 长
+    protected $width = 'width';      // 宽
+    protected $height = 'height';     // 高
+    protected $code = 'code';       // 快递单号
+    protected $weight_at = 'weight_at';  // 称重时间
+    protected $hid = 'hid';        // 称重设备id
+    protected $name = 'HengLi';       // 名称
+
+    public function new_(Request $request)
+    {
+        return $this->new($request);
+    }
+
+    public function conversionRequest($request)
+    {
+        $params = [];
+        $arr = $request->all();
+        $data = array_key_first($arr);
+        $data = explode(',',$data);
+        foreach ($data as $key=>$value){
+            switch ($key){
+                case '0':
+                    $params['hid'] = $value;
+                    break;
+                case '1':
+                    $params['code'] = $value;
+                    break;
+                case '2':
+                    $params['weight'] =  $value;
+                    break;
+                case '3':
+                    $params['weight_at'] = $value;
+                    break;
+                default:
+                    break;
+            }
+        }
+        return $params;
+    }
+
+    public function getWeightValue($params)
+    {
+        $value = $this->getValue($this->weight,$params);
+        return str_replace('_','.',$value);
+    }
+
+    // 信息返回
+
+    // 返回称重成功信息
+    public function getSuccessMessage($params, $orderPackage): array
+    {
+        return ['success' => true, 'message' => '称重成功'];
+    }
+
+    // 返回包裹未找到异常
+    public function getNotFindOrderPackageMessage($params, $orderPackage): string
+    {
+        return json_encode(['success'=>false,'message'=>'未找打包裹信息',JSON_UNESCAPED_UNICODE]);
+    }
+
+    // 返回富勒信息未找到异常
+    public function getNotFindOrderHeaderMessage($params, $orderPackage):string
+    {
+        return json_encode(['success'=>false,'message'=> '富勒信息未找到'],JSON_UNESCAPED_UNICODE);
+    }
+
+    // 返回称重下发错误
+    public function getWeightMessage($orderPackage,$e)
+    {
+        return json_encode(['success'=>false,'message'=> $e->getMessage],JSON_UNESCAPED_UNICODE);
+    }
+
+}

+ 342 - 0
app/Http/Controllers/api/thirdPart/weight/WeightBaseController.php

@@ -0,0 +1,342 @@
+<?php
+
+
+namespace App\Http\Controllers\api\thirdPart\weight;
+
+
+use App\Events\WeighedEvent;
+use App\Jobs\WeightUpdateInstantBill;
+use App\MeasuringMachine;
+use App\OracleActAllocationDetails;
+use App\OracleDOCOrderHeader;
+use App\OrderPackage;
+use App\Services\OrderService;
+use Carbon\Carbon;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Http\Request;
+
+class WeightBaseController
+{
+
+    protected $weight = '';     // 重量
+    protected $length = '';     // 长
+    protected $width = '';      // 宽
+    protected $height = '';     // 高
+    protected $code = '';       // 快递单号
+    protected $weight_at = '';  // 称重时间
+    protected $hid = '';        // 称重设备id
+    protected $name = '';       // 名称
+
+    public function new(Request $request)
+    {
+        $errors = $this->validator($request);
+        if(count($errors)){
+            return $this->validatorErrors($errors);
+        }
+        return $this->weightOrderPackage($request);
+    }
+
+    public function weightOrderPackage(Request $request)
+    {
+        /**
+         * @var OrderPackage $orderPackage
+         * @var MeasuringMachine $measuringMachine
+         */
+        // 1、转化数据
+        $params = $this->conversionRequest($request);
+
+        // 2.获取快递单号
+        $logistic_number = $this->getCodeValue($params);
+        // 3、获取称重设备
+        $measuringMachine = $this->getMeasuringMachine($params);
+        // 4、快递单号对应的OrderPackage
+        $orderPackage = $this->getOrderPackageByCode($logistic_number);
+        if (is_null($orderPackage)) {
+            /** @var OracleDOCOrderHeader $orderHeader */
+            $orderHeader = $this->findOrderHeaderByLogisticNumber($logistic_number);
+            if (is_null($orderHeader)) {
+                return $this->getNotFindOrderHeaderMessage($params, $orderPackage);
+            }
+            try {
+                $order = $this->createOrderByOrderHeader($orderHeader);
+                $orderPackage = $this->createOrderPackage($params, $measuringMachine, $order);
+            } catch (\Exception $e) {
+                return json_encode(["success" => false, "message" => "写入WAS失败!"], JSON_UNESCAPED_UNICODE);
+            }
+        }
+        // 5、更新包裹信息
+        $bool = $this->updateOrderPackage($orderPackage, $params, $measuringMachine);
+        if (!$bool) return $this->getUpdatePackageMessage($orderPackage);
+        // 6、处理波次信息
+        try {
+            $this->activityWaveNoProcessing($orderPackage);
+        } catch (\Exception $e) {
+            app('LogService')->log(__METHOD__, $this->name, ' weightApi (Error)', json_encode($orderPackage) . '||' . json_encode($e), null);
+            return $this->getWeightMessage($orderPackage, $e);
+        }
+        // 7、称重完成之后操作
+        $this->afterApply($orderPackage);
+        $response = $this->getSuccessMessage($params, $orderPackage);
+        app('LogService')->log(__METHOD__, $this->name, "下发写入包裹成功:" . json_encode($request->getContent()) . '||' . json_encode($response), null);
+        return json_encode($response, JSON_UNESCAPED_UNICODE);
+    }
+
+// region ---数据转化
+
+    public function conversionRequest(Request  $request)
+    {
+        //  1、转化数据
+        $params = [];
+        foreach ($request->input() as $key => $item) {
+            $params[strtolower($key)] = $item;
+        }
+        return $params;
+    }
+// endregion
+
+
+//  region ---称重完成之后的操作
+    // 后续操作
+    public function afterApply(OrderPackage $orderPackage)
+    {
+        $orderPackage->loadMissing(['order' => function ($query) {
+            $query->with('owner', 'logistic');
+        }, 'measuringMachine', 'paperBox']);
+        event(new WeighedEvent($orderPackage));
+        dispatch(new WeightUpdateInstantBill($orderPackage));
+    }
+// endregion
+
+// region ---消息返回
+
+    // 返回称重成功信息
+    public function getSuccessMessage($params, $orderPackage): array
+    {
+        return ['success' => true, 'message' => '称重成功'];
+    }
+
+    // 返回包裹未找到异常
+    public function getNotFindOrderPackageMessage($params, $orderPackage): string
+    {
+        return json_encode(['success' => false, 'message' => '未找打包裹信息', JSON_UNESCAPED_UNICODE]);
+    }
+
+    // 返回富勒信息未找到异常
+    public function getNotFindOrderHeaderMessage($params, $orderPackage): string
+    {
+        return json_encode(['success' => false, 'message' => '富勒信息未找到'], JSON_UNESCAPED_UNICODE);
+    }
+
+    // 返回称重下发错误
+    public function getWeightMessage($orderPackage, $e)
+    {
+        return json_encode(['success' => false, 'message' => $e->getMessage], JSON_UNESCAPED_UNICODE);
+    }
+
+    public function getUpdatePackageMessage($orderPackage)
+    {
+        return json_encode(['success' => false, 'message' => '更新包裹信息出现异常'], JSON_UNESCAPED_UNICODE);
+    }
+
+// endregion
+
+//  region  ---参数校验
+
+    public function validator(Request $request): array
+    {
+        return [];
+    }
+
+    public function validatorErrors($errors)
+    {
+        return json_encode(['success' => false, 'message' => '更新包裹信息出现异常'.json_encode($errors)],JSON_UNESCAPED_UNICODE);
+    }
+
+// endregion
+
+// region  ---参数获取
+    // 重量
+    public function  getWeightValue($params)
+    {
+        return $this->getValue($this->width, $params);
+    }
+
+    // 高
+    public function getHeightValue($params)
+    {
+        return $this->getValue($this->height, $params);
+    }
+
+    // 长
+    public function getLengthValue($params)
+    {
+        return $this->getValue($this->length, $params);
+    }
+
+    // 宽
+    public function getWidthValue($params)
+    {
+        return $this->getValue($this->width, $params);
+    }
+
+    // 快递单号
+    public function getCodeValue($params)
+    {
+        return $this->getValue($this->code, $params);
+    }
+
+    // 称重时间
+    public function getWeightAtValue($params)
+    {
+        return $this->getValue($this->weight_at, $params);
+    }
+
+    // 获取参数
+    public function getValue($name, $param)
+    {
+        $names = explode(',', $name);
+        $value = array_reduce($names, function ($data, $key) {
+            if (isset($data[$key])) $data = $data[$key];
+            else $data = [];
+            return $data;
+        }, $param);
+        if (is_array($value) && count($value) == 0) return null;
+        return $value;
+    }
+
+    // 排序参数
+    public function getEdges($params): array
+    {
+        $length = $this->getLengthValue($params);
+        $height = $this->getHeightValue($params);
+        $width = $this->getWidthValue($params);
+        $edges = [$length ?? 0, $width ?? 0, $height ?? 0];
+        rsort($edges);
+        return $edges;
+    }
+
+
+// endregion
+
+//  region ---包裹
+    // 获取包裹
+    public function getOrderPackageByCode($code)
+    {
+        return OrderPackage::query()
+            ->with(['order' => function ($query) {
+                /** @var Builder $query */
+                $query->with('owner', 'logistic');
+            }])->where('logistic_number', $code)->first();
+    }
+
+    // 更新包裹
+    public function updateOrderPackage(OrderPackage $orderPackage, $params, $measuringMachine)
+    {
+        $edges = $this->getEdges($params);
+        $req_date = Carbon::now();
+        $orderPackage['weight'] = $this->getWeightValue($params);
+        $orderPackage['measuring_machine_id'] = $measuringMachine['id'];
+        $orderPackage['length'] = $edges[0];
+        $orderPackage['width'] = $edges[1];
+        $orderPackage['height'] = $edges[2];
+        $orderPackage['weighed_at'] = $req_date;
+        $orderPackage['bulk'] = $edges[0] * $edges[1] * $edges[2] / 1000;
+        if ($orderPackage->isActivityBatch()) {
+            $result = $this->activityWaveNoProcessing($orderPackage);
+            if (!$result) return false;
+        }
+        return $orderPackage->save();
+    }
+
+
+    // 创建包裹信息
+    public function createOrderPackage($params, $measuringMachine, $order)
+    {
+        $weighed_at = Carbon::now();
+        $edges = $this->getEdges($params);
+        OrderPackage::query()->create([
+            'order_id' => $order->id,
+            'logistic_number' => $this->getCodeValue($params),
+            'measuring_machine_id' => $measuringMachine->id,
+            'weight' => $this->getWeightValue($params),
+            'length' => $edges[0],
+            'width' => $edges[1],
+            'height' => $edges[2],
+            'bulk' => $edges[0] * $edges[1] * $edges[2],
+            'weighed_at' => $weighed_at,
+            'status' => "无",
+        ]);
+        return $this->getOrderPackageByCode($this->getCodeValue($params));
+    }
+
+
+//  endregion
+
+//  region ---称重设备
+    // 获取称重设备
+    public function getMeasuringMachine($params): MeasuringMachine
+    {
+        $hid = $this->getValue($this->hid, $params);
+        /** @var MeasuringMachine $measuringMachine */
+        $measuringMachine = MeasuringMachine::query()->firstOrCreate(['code' => $hid]); // 称重设备
+        $measuringMachine->turnOn();
+        $measuringMachine->turnOffInMinutes(30);
+        return $measuringMachine;
+    }
+//  endregion
+
+// region ---wms操作
+    // 获取orderHeader
+    public function findOrderHeaderByLogisticNumber($code)
+    {
+        $query = OracleActAllocationDetails::query()->select('order_no')->where('picktotraceid', $code);
+        return OracleDOCOrderHeader::query()->with('actAllocationDetails', 'oracleBASCode')->whereIn('Order_No', $query)->first();
+    }
+
+    // 根据WMS订单信息创建订单信息
+    public function createOrderByOrderHeader($orderHeader)
+    {
+        /** @var OrderService $orderService */
+        $orderService = app('OrderService');
+        $order_create_params = $orderService->getParamByOrderHeader($orderHeader);
+        $order = $orderService->first(['code' => $orderHeader->orderno]);
+        if ($order) return $order;
+        $order = $orderService->createOrder($order_create_params);
+        app('LogService')->log(__METHOD__, $this->name, ' 创建Order', json_encode($order) . " || " . $orderHeader);
+        return $order;
+    }
+
+    //处理活动波次
+    public function activityWaveNoProcessing(&$orderPackage)
+    {
+        $fluxController = new \App\Http\Controllers\api\thirdPart\flux\PackageController();
+        if ($orderPackage->isActivityBatch()) {
+            app('LogService')->log(__METHOD__, $this->name . " 依波次号同步所有包裹:", json_encode($orderPackage), null);
+            OrderPackage::query()->where('batch_number', $orderPackage['batch_number'])->update([
+                'weight' => $orderPackage['weight'] ?? null,
+                'length' => $orderPackage['length'] ?? null,
+                'width' => $orderPackage['width'] ?? null,
+                'height' => $orderPackage['height'] ?? null,
+                'bulk' => $orderPackage['bulk'] ?? null,
+                'measuring_machine_id' => $orderPackage['measuring_machine_id'] ?? null,
+                'weighed_at' => $orderPackage['weighed_at'] ?? null,
+                'paper_box_id' => $orderPackage['paper_box_id'] ?? null,
+            ]);
+            $result = $fluxController->markWMSOnBatch($orderPackage['batch_number'], $orderPackage['weight']);
+            if (!$result['result']) {
+                $orderPackage->uploaded_to_wms = "异常";
+            }
+        } else {
+            app('LogService')->log(__METHOD__, $this->name . " 写入包裹至WMS:", json_encode($orderPackage), null);
+            try {
+                $result = $fluxController->accomplishToWMS($orderPackage);
+                if ($result['result'] == 'success') $orderPackage->uploaded_to_wms = "是";
+                else $orderPackage->uploaded_to_wms = "异常";
+            } catch (\Exception $e) {
+                $orderPackage->uploaded_to_wms = "否";
+            }
+        }
+        return $orderPackage->save();
+    }
+// endregion
+}

+ 5 - 1
app/Http/Requests/DischargeTask/DischargeTaskRequest.php

@@ -5,7 +5,6 @@ namespace App\Http\Requests\DischargeTask;
 
 use App\Traits\RequestApiFormValidation;
 use Illuminate\Foundation\Http\FormRequest;
-use Illuminate\Support\Facades\Request;
 use Illuminate\Support\Facades\Route;
 
 
@@ -23,6 +22,7 @@ class DischargeTaskRequest extends FormRequest
         'owner_id' => 'required',
         'type' => 'required',
         'numbers' => 'required',
+        'warehouse_id' => 'required',
         'income_unit' => 'required',
         'income_amount' => 'required',
         'income_unit_price' => 'required',
@@ -31,14 +31,17 @@ class DischargeTaskRequest extends FormRequest
         'owner_id.required' => '货物为必选项',
         'type.required' => '任务类型为必选项',
         'numbers.required' => '入库单号为必填项',
+        'warehouse_id.required' => '仓库未必须选项',
         'income_amount.required' => '数量为必填项',
         'income_unit.required' => '单位为必选项',
         'income_unit_price.required'=> '单价为必填项',
+
     ];
     protected $updateApiRules =[
         'owner_id' => 'required',
         'type' => 'required',
         'numbers' => 'required',
+        'warehouse_id' => 'required',
         'income_unit' => 'required',
         'income_amount' => 'required',
         'income_unit_price' => 'required',
@@ -47,6 +50,7 @@ class DischargeTaskRequest extends FormRequest
         'owner_id.required' => '货物为必选项',
         'type.required' => '任务类型为必选项',
         'numbers.required' => '入库单号为必填项',
+        'warehouse_id.required' => '仓库未必须选项',
         'income_amount.required' => '数量为必填项',
         'income_unit.required' => '单位为必选项',
         'income_unit_price.required'=> '单价为必填项',

+ 5 - 4
app/Http/Requests/DischargeTask/FacilitatorRequest.php

@@ -2,8 +2,9 @@
 
 
 namespace App\Http\Requests\DischargeTask;
+
 use App\Traits\RequestApiFormValidation;
-use  Illuminate\Foundation\Http\FormRequest;
+use Illuminate\Foundation\Http\FormRequest;
 use Illuminate\Support\Facades\Route;
 
 class FacilitatorRequest extends FormRequest
@@ -45,7 +46,7 @@ class FacilitatorRequest extends FormRequest
     public function rules(): array
     {
         $routeName = Route::currentRouteName();
-        switch ($routeName){
+        switch ($routeName) {
             case 'facilitator.storeApi':
                 return $this->storeApiRules;
             case 'facilitator.updateApi':
@@ -57,10 +58,10 @@ class FacilitatorRequest extends FormRequest
         }
     }
 
-    public function massage():array
+    public function massage(): array
     {
         $routeName = Route::currentRouteName();
-        switch ($routeName){
+        switch ($routeName) {
             case 'facilitator.storeApi':
                 return $this->storeApiMessage;
             case 'facilitator.updateApi':

+ 5 - 2
app/OrderIssue.php

@@ -189,12 +189,15 @@ class OrderIssue extends Model
             if (empty($orderIssueMap[$key])) return "差异退回";
             if(isset($rejectedMap[$key]['正品']) && isset($orderIssueMap[$key])){
                 if ( $rejectedMap[$key]['正品'] < $orderIssueMap[$key]) $portion += 1;
-                if ( $rejectedMap[$key]['正品'] > $orderIssueMap[$key]) return "超量退回";                    // 超量退回
+                if ( $rejectedMap[$key]['正品'] > $orderIssueMap[$key]) return "超量退回";                                 // 超量退回
                 if ( $rejectedMap[$key]['正品'] == $orderIssueMap[$key]) $equal += 1;
             }
         }
         if ($equal == count($orderIssueMap) && $equal == count($rejectedMap)  && $portion == 0) return "全部退回";        // 全部退回
-        if ($portion > 0) return "部分退回";                                                            // 部分退回
+        if ($portion > 0) return "部分退回";                                                                              // 部分退回
+        // 部分退回
+        if (count(array_diff_key($orderIssueMap,$rejectedMap)) > 0)return '部分退回';
+        if (count(array_diff_key($rejectedMap,$orderIssueMap)) > 0)return '差异退回';
         return "无";
     }
 

+ 10 - 0
app/Providers/RouteServiceProvider.php

@@ -80,19 +80,29 @@ class RouteServiceProvider extends ServiceProvider
             ->middleware('api')
             ->namespace('App\Http\Controllers\api\thirdPart\flux')
             ->group(base_path('routes/api/thirdPart/flux.php'));
+
         Route::prefix('api/thirdPart/weight')
             ->middleware('api')
             ->namespace('App\Http\Controllers\api\thirdPart\weight')
             ->group(base_path('routes/api/thirdPart/weight.php'));
+
+
         Route::prefix('api/thirdPart/weixin')
             ->namespace('App\Http\Controllers\api\thirdPart\weixin')
             ->group(base_path('routes/api/thirdPart/weixin.php'));
+
         Route::prefix('api/thirdPart/haiq')
             ->namespace('App\Http\Controllers\api\thirdPart\haiq')
             ->group(base_path('routes/api/thirdPart/haiq.php'));
+
         Route::prefix('api/thirdPart/goodscan')
             ->namespace('App\Http\Controllers\api\thirdPart\goodscan')
             ->group(base_path('routes/api/thirdPart/goodscan.php'));
+
+        Route::prefix('api/thirdPart/hengli')
+            ->namespace('App\Http\Controllers\api\thirdPart\hengli')
+            ->group(base_path('routes/api/thirdPart/hengli.php'));
+
         Route::prefix('api/thirdPart/haochuang')
             ->middleware('api')
             ->namespace('App\Http\Controllers\api\thirdPart\haochuang')

+ 31 - 9
app/Services/DischargeTaskService.php

@@ -18,10 +18,18 @@ class DischargeTaskService
     public function updateDischargeTask(DischargeTask $dischargeTask, array $param): array
     {
         if ($dischargeTask->status == 3) return ['success' => false, 'message' => '已完成的卸货任务不可进行编辑'];
-        if(!empty($param['status']) && $param['status'] > 0 && $dischargeTask->facilitator_id == 0)
-            return ['success' => false, 'message' => '未指定服务商的卸货任务,不可进行当前编辑'];
-        // 归档入口
+
+        if(!empty($param['status'])){
+            if( $param['status'] > 0 && $dischargeTask->facilitator_id == 0){
+                return ['success' => false, 'message' => '未指定服务商的卸货任务,不可进行当前编辑'];
+            }
+            if($param['status'] ==3 && $dischargeTask->status == 0){
+                return ['success' => false, 'message' => '未指定服务商的卸货任务,不可进行当前编辑'];
+            }
+        }
+
         $bool = $dischargeTask->update($param);
+
         if ($bool){
             $dischargeTask->refresh();
             $dischargeTask->loadMissing('owner','facilitator');
@@ -34,6 +42,7 @@ class DischargeTaskService
     public function deleteDischargeTask(DischargeTask $dischargeTask): array
     {
         if ($dischargeTask->status == 3) return ['success' => false, 'message' => '已完成的卸货任务不可进行删除'];
+
         try {
             $dischargeTask->delete();
             return ['success' => true];
@@ -46,12 +55,16 @@ class DischargeTaskService
     public function updateTaskFacilitator(DischargeTask $dischargeTask, array $param): array
     {
         unset($param['owner'],$param['income_at']);
+
         if ($param['id']) unset($param['id']);
         if ($dischargeTask->status >= 1) return ['success' => false, 'message' => '当前任务状态不可修改'];
-        $param['expenditure_total_cost'] = $param['expenditure_unit_price'] * $param['expenditure_amount'];
         if (empty($param['expenditure_at'])) $param['expenditure_at'] = now();
         if (empty($param['status'])) $param['status'] = 1;
+
+        $param['expenditure_total_cost'] = $param['expenditure_unit_price'] * $param['expenditure_amount'];
+
         $bool = $dischargeTask->update($param);
+
         if ($bool == 1) {
             $dischargeTask->loadMissing('owner','facilitator');
             return ['success' => true, 'data' => $dischargeTask];
@@ -65,8 +78,10 @@ class DischargeTaskService
         if (empty($param['income_total_cost'])) $param['income_total_cost'] = $param['income_unit_price'] * $param['income_amount'];
         if (empty($param['income_at'])) $param['income_at'] = now();
         if (empty($param['status'])) $param['status'] = 0;
+
         $dischargeTask = DischargeTask::query()->create($param);
-        $dischargeTask->loadMissing('owner');
+        $dischargeTask->loadMissing('facilitator', 'owner','warehouse');
+
         return ['success' => true, 'data' => $dischargeTask];
     }
 
@@ -75,9 +90,11 @@ class DischargeTaskService
     {
         $json = [];
         foreach ($dischargeTasks as $dischargeTask) {
+
             /** @var DischargeTask $dischargeTask */
             /** @var Carbon $date */
             $date = $dischargeTask['created_at'];
+
             $json[] = [
                 $date->toDateTimeString(),
                 $dischargeTask->owner->name ?? '',
@@ -99,12 +116,15 @@ class DischargeTaskService
     {
         $json = [];
         foreach ($dischargeTasks as $dischargeTask) {
+
             /** @var DischargeTask $dischargeTask */
             /** @var Carbon $date */
             $date = $dischargeTask['created_at'];
+
             $json[] = [
-                $date->toDateTimeString(),                          //日期
+                $date->toDateTimeString() ,                          // 日期
                 $dischargeTask->owner->name ?? '',                  // 客户名称
+                $dischargeTask->warehouse->name ?? '',              // 仓库
                 DischargeTask::types[$dischargeTask['type']] ?? '',   // 作业名称
                 $dischargeTask['numbers'],                            // 入库单号
                 // --- 收入信息
@@ -132,15 +152,17 @@ class DischargeTaskService
     {
         $json = [];
         foreach ($dischargeTasks as $dischargeTask) {
+
             /** @var Carbon $date */
             $date = $dischargeTask->created_at;
+
             $json[] = [
                 $date->toDateTimeString(),                           // 日期
                 $dischargeTask->facilitator->name ?? '',      // 服务商
-                $dischargeTask['expenditure_amount'],                             // 数量
+                $dischargeTask['expenditure_amount'].'',                             // 数量
                 DischargeTask::units[$dischargeTask['expenditure_unit']] ?? '',   // 单位
-                $dischargeTask['expenditure_unit_price'],                         // 支出单价
-                $dischargeTask['expenditure_total_cost'],                         // 支出合计
+                $dischargeTask['expenditure_unit_price'].'',                         // 支出单价
+                $dischargeTask['expenditure_total_cost'].'',                         // 支出合计
             ];
         }
         return $json;

+ 23 - 1
app/Services/FacilitatorService.php

@@ -2,12 +2,34 @@
 
 namespace App\Services;
 
+use App\DischargeTask;
+use App\Filters\DischargeTaskFilters;
 use App\Traits\ServiceAppAop;
 use App\Facilitator;
+use Endroid\QrCode\QrCode;
 
 class FacilitatorService
 {
     use ServiceAppAop;
-    protected $modelClass=Facilitator::class;
+
+    protected $modelClass = Facilitator::class;
+
+
+    public function getQrCodeUrl(array $param): string
+    {
+        $facilitator_id = md5($param['facilitator_id']);
+        $urlString = '/personnel/discharge/facilitator/external/' . $facilitator_id . '/index';
+        $url = url($urlString);
+        $url .= '?created_range=' . ($param['range'] ?? '');
+
+        $qrCode = new QrCode($url);
+        $fileURL = base_path('public/images/QRCodeIMG/facilitator_id_' . $facilitator_id . '.png');
+
+        if (!file_exists($fileURL)) {
+            $qrCode->writeFile($fileURL);
+        }
+
+        return url('images/QRCodeIMG/facilitator_id_' . $facilitator_id . '.png');
+    }
 
 }

+ 5 - 2
database/factories/DischargeTaskFactory.php

@@ -8,7 +8,7 @@ use Illuminate\Database\Eloquent\Factory;
 
 $factory->define(DischargeTask::class, function (Faker $faker) {
     return [
-         'owner_id' => $faker->numberBetween(0, 10),
+         'owner_id' => $faker->numberBetween(1, 10),
         'type' => $faker->numberBetween(0, 1),
         'numbers' => $faker->name(11),
         'status' => $faker->numberBetween(0, 3),
@@ -17,11 +17,14 @@ $factory->define(DischargeTask::class, function (Faker $faker) {
         'income_unit_price' => $faker->numberBetween(0, 10),
         'income_total_cost' => $faker->numberBetween(0, 100),
         'income_remark' => $faker->title(),
-        'discharge_provider_id' => $faker->numberBetween(0, 10),
+        'facilitator_id' => $faker->numberBetween(1, 2),
         'expenditure_amount' => $faker->numberBetween(0, 20),
         'expenditure_unit' => $faker->numberBetween(0, 2),
         'expenditure_unit_price' => $faker->numberBetween(0, 10),
         'expenditure_total_cost' => $faker->numberBetween(0, 100),
         'expenditure_remark' => $faker->title(),
+        'created_at' => $faker->dateTime(),
+        'updated_at' => $faker->dateTime(),
+        'warehouse_id' => $faker->numberBetween(1,2),
     ];
 });

+ 65 - 0
database/migrations/2021_03_30_104348_change_discharge_auth_name.php

@@ -0,0 +1,65 @@
+<?php
+
+use App\Authority;
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class ChangeDischargeAuthName extends Migration
+{
+    protected $changeAuthNames = [
+        '运输管理-卸货-服务商报表-查询' => '人事管理-卸货-装卸队报表-查询',
+        '服务商' => '装卸队',
+        '服务商-查询' => '装卸队-查询',
+        '服务商-编辑' => '装卸队-编辑',
+        '服务商-删除' => '装卸队-删除',
+        '服务商-对账单-查询' => '装卸队-对账单-查询',
+        '服务商-创建' => '装卸队-创建',
+        '运输管理-卸货' => '人事管理-卸货',
+        '运输管理-卸货-查询' => '人事管理-卸货-查询',
+        '运输管理-卸货-编辑' => '人事管理-卸货-编辑',
+        '运输管理-卸货-创建' => '人事管理-卸货-创建',
+        '运输管理-卸货-删除' => '人事管理-卸货-删除',
+        '运输管理-卸货-结算报表-查询' => '人事管理-卸货-结算报表-查询',
+    ];
+
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        foreach ($this->changeAuthNames as $name => $changeName){
+            Authority::query()->where('name',$name)->update([
+                'name'=> $changeName,
+                'alias_name'=> $changeName,
+            ]);
+        }
+
+        Schema::table('discharge_tasks',function (Blueprint $table){
+            $table->integer('warehouse_id')->comment('仓库')->default(null);
+            $table->bigInteger('facilitator_id')->comment('装卸队')->default(null)->change();
+        });
+
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        foreach ($this->changeAuthNames as $changeName => $name){
+            Authority::query()->where('name',$name)->update([
+                'name'=> $changeName,
+                'alias_name'=> $changeName,
+            ]);
+        }
+
+        Schema::table('discharge_tasks',function (Blueprint $table){
+            $table->dropColumn('warehouse_id');
+        });
+    }
+}

+ 1 - 1
database/seeds/DischargeTaskSeeder.php

@@ -12,7 +12,7 @@ class DischargeTaskSeeder extends Seeder
      */
     public function run()
     {
-        $params = factory(DischargeTask::class)->times(50)->make()->toArray();
+        $params = factory(DischargeTask::class)->times(100)->make()->toArray();
         DischargeTask::query()->insert($params);
     }
 }

+ 2 - 2
resources/views/maintenance/facilitator/_create.blade.php

@@ -2,7 +2,7 @@
     <div class="modal-dialog modal-dialog-centered ">
         <div class="modal-content">
             <div class="modal-header">
-                <h5 class="modal-title text-center">服务商添加</h5>
+                <h5 class="modal-title text-center">装卸队添加</h5>
                 <button type="button" class="close" data-dismiss="modal" @click="createFacilitator={}">
                     <span>&times;</span>
                 </button>
@@ -10,7 +10,7 @@
             <div class="modal-body">
                 <form class="form">
                     <div class="form-group row" >
-                        <label for="add-name" class="col-sm-3 col-form-label text-right">服务商名称</label>
+                        <label for="add-name" class="col-sm-3 col-form-label text-right">装卸队名称</label>
                         <div class="col-sm-9 form-inline">
                             <input type="text" class="form-control col-sm-12" v-model="createFacilitator.name" placeholder="输入服务商名称" :class="facilitatorError.name? 'is-invalid' :''">
                             <div class="invalid-feedback" >

+ 2 - 2
resources/views/maintenance/facilitator/_edit.blade.php

@@ -2,7 +2,7 @@
     <div class="modal-dialog modal-dialog-centered">
         <div class="modal-content">
             <div class="modal-header">
-                <h5 class="modal-title text-center">服务商添加</h5>
+                <h5 class="modal-title text-center">装卸队添加</h5>
                 <button type="button" class="close" data-dismiss="modal" @click="editFacilitator={},selectIndex=null,facilitatorError={}">
                     <span>&times;</span>
                 </button>
@@ -10,7 +10,7 @@
             <div class="modal-body">
                 <form class="form">
                     <div class="form-group row" >
-                        <label for="add-name" class="col-sm-3 col-form-label text-right">服务商名称</label>
+                        <label for="add-name" class="col-sm-3 col-form-label text-right">装卸队名称</label>
                         <div class="col-sm-9 form-inline">
                             <input type="text" class="form-control col-sm-12" v-model="editFacilitator.name" placeholder="输入服务商名称" :class="facilitatorError.name? 'is-invalid' :''">
                             <div class="invalid-feedback" >

+ 4 - 4
resources/views/maintenance/facilitator/_table.blade.php

@@ -1,7 +1,7 @@
 <table class="table table-sm table-striped table-bordered table-hover card-body p-0 m-0">
     <tr class="text-center">
         <th>序号</th>
-        <th>服务商名称</th>
+        <th>装卸队名称</th>
         <th>创建时间</th>
         <th>操作</th>
     </tr>
@@ -12,11 +12,11 @@
             <td>@{{ facilitator.name }}</td>
             <td>@{{ facilitator.created_at }}</td>
             <td>
-                @can('服务商-编辑')
+                @can('装卸队-编辑')
                 <button class="btn btn-sm btn-outline-primary" @click="showUpDateModal(true,index,facilitator)">编辑
                 @endcan
                 </button>
-                @can('服务商-删除')
+                @can('装卸队-删除')
                 <button class="btn btn-sm btn-outline-danger" @click="destroyFacilitator(facilitator,index)">删除</button>
                 @endcan
             </td>
@@ -26,7 +26,7 @@
         <tr>
             <td colspan="4">
                 <div class="alert alert-info text-lg-center">
-                    服务商数据为空
+                    装卸队数据为空
                 </div>
             </td>
         </tr>

+ 7 - 7
resources/views/maintenance/facilitator/index.blade.php

@@ -1,17 +1,17 @@
 @extends('layouts.app')
 
-@section('title','服务商')
+@section('title','装卸队')
 
 @section('content')
-    <nav class="nav2">
+    <nav id="nav2">
         @component('maintenance.menu')@endcomponent
     </nav>
     <div class="container-fluid d-none" id="facilitator">
         <div class="card">
-            @can('服务商-创建')
+            @can('装卸队-创建')
             @include('maintenance.facilitator._create')
             @endcan
-            @can('服务商-编辑')
+            @can('装卸队-编辑')
             @include('maintenance.facilitator._edit')
             @endcan
             <div class="card-body">
@@ -92,7 +92,7 @@
                     axios.post(url,this.createFacilitator).then(res=>{
                         if(res.data.success){
                             this.facilitators.unshift(res.data.data);
-                            tempTip.showSuccess('添加服务商成功');
+                            tempTip.showSuccess('添加装卸队成功');
                             this.showCreatedModal(false)
                             return ;
                         }else if(res.data.error){
@@ -112,7 +112,7 @@
                     axios.put(url,this.editFacilitator).then(res=>{
                         if(res.data.success){
                             this.$set(this.facilitators,this.selectIndex,res.data.data);
-                            tempTip.showSuccess('服务商更新成功');
+                            tempTip.showSuccess('装卸队更新成功');
                             this.showUpDateModal(false);
                             return ;
                         }else if(res.data.error){
@@ -131,7 +131,7 @@
                     tempTip.setDuration(1999);
                     axios.delete(url).then(res=>{
                         if(res.data.success){
-                            tempTip.showSuccess("服务商删除成功");
+                            tempTip.showSuccess("装卸队删除成功");
                             this.$delete(this.facilitators,index);
                             return ;
                         }else if(res.data.error){

+ 2 - 2
resources/views/maintenance/menu.blade.php

@@ -123,9 +123,9 @@
                 <li class="nav-item">
                     <a class="nav-link text-muted" href="{{url('maintenance/configuration')}}" :class="{active:isActive('configuration',2)}">系统配置</a>
                 </li>@endcan
-            @can('服务商')
+            @can('装卸队')
                 <li class="nav-item">
-                    <a class="nav-link text-muted" href="{{url('maintenance/facilitator')}}" :class="{active:isActive('facilitator',2)}">服务商</a>
+                    <a class="nav-link text-muted" href="{{url('maintenance/facilitator')}}" :class="{active:isActive('facilitator',2)}">装卸队</a>
                 </li>
             @endcan
         </ul>

+ 1 - 1
resources/views/order/issue/index.blade.php

@@ -881,7 +881,7 @@
                         data: this.logistics
                     },
                     {name: 'logistic_number_return', type: 'input', tip: '退回单号:前或后加百分号为单个模糊搜索,否则为多条件精确搜索', placeholder: '退回单号'},
-                    {name: 'send_client_code', type: 'input', tip: '二次订单号:前或后加百分号为单个模糊搜索,否则为多条件精确搜索', placeholder: '二次订单号'},
+                    // {name: 'send_client_code', type: 'input', tip: '二次订单号:前或后加百分号为单个模糊搜索,否则为多条件精确搜索', placeholder: '二次订单号'},
                     {name: ['shop_name','shop_name_limit_time'], type: 'input_select', tip: ['商铺:前或后加 百分号为单个模糊搜索,默认添加后%,否则为多条件精确搜索','查询范围越短,搜索速度越快'], placeholder: ['店铺',''],
                         data:log_content_range,
                         rules:[{son:{shop_name_limit_time:{default:'15',required_without_all_if:['created_at_start','created_at_end']}}}]},

+ 41 - 0
resources/views/personnel/discharge/facilitator/QRcode.blade.php

@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html>
+<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>显示二维码 BsWAS</title>
+    <!-- Styles -->
+    <link href="{{ mix('css/app.css') }}" rel="stylesheet">
+</head>
+<body>
+<div class="container-fluid " id="page">
+    <div class="card ">
+        <div class="card-body">
+            <div class="align-content-center m-3">
+                <h3 class="text-center text-dark">卸货队@{{ facilitator.name }}二维码</h3><br>
+            </div>
+            <div class="row">
+                <div class="col text-center" style="float:left;">
+                    <img id="img" class="img-thumbnail" style="margin-top: 20px" :src="qrCodeUrl" width="35%" alt=""/>
+                    <p class="m-2 h1 text-center">@{{ facilitator.name }}</p>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script src="{{ mix('js/app.js') }}"></script>
+<script>
+    new Vue({
+        el: "#page",
+        data: {
+            qrCodeUrl: '{!! $qrCodeUrl !!}',
+            facilitator:{!! $facilitator !!},
+        },
+    });
+</script>
+</body>
+</html>

+ 91 - 0
resources/views/personnel/discharge/facilitator/_table.blade.php

@@ -0,0 +1,91 @@
+<table class="table table-hover card-body p-0 m-0">
+{{--<table class="table table-sm table-striped table-bordered table-hover card-body p-0 m-0">--}}
+    <thead class="thead-light">
+    <tr class="text-center">
+        <th>
+            <label>
+                <input type="checkbox" id="selectAll" @click="selectAll">
+            </label>
+        </th>
+        <th>序号</th>
+        <th>时间段</th>
+        <th>装卸队</th>
+        <th>订单数量</th>
+        <th>总金额</th>
+        <th>月账单详情</th>
+        @auth
+            <th>操作</th>
+        @endauth
+    </tr>
+    </thead>
+    <tbody>
+    <template v-if="facilitatorStatements.length>0">
+        <template  v-for="(facilitatorStatement,index) in facilitatorStatements">
+        <tr class="text-center"
+            @click="selectTr===index+1?selectTr=0:selectTr=index+1" :class="selectTr===index+1?'focusing' : ''">
+            <td>
+                <label >
+                    <input type="checkbox" v-model="checkData" :value="'months:'+facilitatorStatement['months']+';id:'+facilitatorStatement['id']">
+                </label>
+            </td>
+            <td class="align-text-bottom">@{{index+1}}</td>
+            <td class="align-text-bottom">@{{ facilitatorStatement.months }}</td>
+            <td class="align-text-bottom">@{{ facilitatorStatement.facilitators_name }}</td>
+            <td class="align-text-bottom">@{{ facilitatorStatement.sum }}</td>
+            <td class="align-text-bottom">@{{ facilitatorStatement.total_cost }}</td>
+            <td>
+                <button class="align-self-center btn btn-outline-info m-0" @click="gainStatement(facilitatorStatement,index,$event)">点击展开</button>
+            </td>
+            @auth
+            <td class="align-text-bottom">
+                <a :href="getQRCodeUrl(facilitatorStatement)" target="_blank">
+                    <button class="align-self-center btn btn-outline-primary m-0" @click="seekQrcode(facilitatorStatement)">查看</button>
+                </a>
+            </td>
+            @endauth
+        </tr>
+        <tr v-if="facilitatorStatement.showSubject" class="p-0 up" >
+            <td></td>
+            <td colspan="7" class="p-0 m-0">
+                <div class="p-0 " :id="'Statement' + index">
+                    <table class="table table-bordered m-0">
+                        <thead class="thead-light">
+                        <tr>
+                            <th>日期</th>
+                            <th>装卸队</th>
+                            <th>数量</th>
+                            <th>单位</th>
+                            <th>单价</th>
+                            <th>总金额合计</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <tr v-for="(item,index) in facilitatorStatement.subjection">
+                            <td>@{{ item.created_at }}</td>
+                            <td>@{{ item.facilitator ? item.facilitator.name :'' }}</td>
+                            <td>@{{ item.expenditure_amount }}</td>
+                            <td>@{{ item.expenditure_unit }}</td>
+                            <td>@{{ item.expenditure_unit_price }}</td>
+                            <td>@{{ item.expenditure_total_cost }}</td>
+                        </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </td>
+        </tr>
+        </template>
+
+    </template>
+    <template v-else>
+        <tr>
+            <td colspan="8">
+                <div class='alert alert-info text-lg-center'>
+                    装卸队对账单数据为空
+                </div>
+            </td>
+        </tr>
+    </template>
+    </tbody>
+</table>
+<hr>
+{{ $facilitatorStatements->withQueryString()->links() }}

+ 80 - 0
resources/views/personnel/discharge/facilitator/external/_table.blade.php

@@ -0,0 +1,80 @@
+<table class="table table-hover card-body p-0 m-0">
+    <thead class="thead-light">
+    <tr class="text-center">
+        <th>
+            <label>
+                <input type="checkbox" id="selectAll" @click="selectAll">
+            </label>
+        </th>
+        <th>序号</th>
+        <th>时间段</th>
+        <th>装卸队</th>
+        <th>订单数量</th>
+        <th>总金额</th>
+        <th>月账单详情</th>
+    </tr>
+    </thead>
+    <tbody>
+    <template v-if="facilitatorStatements.length>0">
+        <template  v-for="(facilitatorStatement,index) in facilitatorStatements">
+        <tr class="text-center"
+            @click="selectTr===index+1?selectTr=0:selectTr=index+1" :class="selectTr===index+1?'focusing' : ''">
+            <td>
+                <label >
+                    <input type="checkbox" v-model="checkData" :value="'months:'+facilitatorStatement['months']+';id:'+facilitatorStatement['id']">
+                </label>
+            </td>
+            <td class="align-text-bottom">@{{index+1}}</td>
+            <td class="align-text-bottom">@{{ facilitatorStatement.months }}</td>
+            <td class="align-text-bottom">@{{ facilitatorStatement.facilitators_name }}</td>
+            <td class="align-text-bottom">@{{ facilitatorStatement.sum }}</td>
+            <td class="align-text-bottom">@{{ facilitatorStatement.total_cost }}</td>
+            <td>
+                <button class="align-self-center btn btn-outline-info m-0" @click="gainStatement(facilitatorStatement,index,$event)">点击展开</button>
+            </td>
+        </tr>
+        <tr v-if="facilitatorStatement.showSubject" class="p-0 up" >
+            <td></td>
+            <td colspan="7" class="p-0 m-0">
+                <div class="p-0 " :id="'Statement' + index">
+                    <table class="table table-bordered m-0">
+                        <thead class="thead-light">
+                        <tr>
+                            <th>日期</th>
+                            <th>装卸队</th>
+                            <th>数量</th>
+                            <th>单位</th>
+                            <th>单价</th>
+                            <th>总金额合计</th>
+                        </tr>
+                        </thead>
+                        <tbody>
+                        <tr v-for="(item,index) in facilitatorStatement.subjection">
+                            <td>@{{ item.created_at }}</td>
+                            <td>@{{ item.facilitator ? item.facilitator.name :'' }}</td>
+                            <td>@{{ item.expenditure_amount }}</td>
+                            <td>@{{ item.expenditure_unit }}</td>
+                            <td>@{{ item.expenditure_unit_price }}</td>
+                            <td>@{{ item.expenditure_total_cost }}</td>
+                        </tr>
+                        </tbody>
+                    </table>
+                </div>
+            </td>
+        </tr>
+        </template>
+
+    </template>
+    <template v-else>
+        <tr>
+            <td colspan="8">
+                <div class='alert alert-info text-lg-center'>
+                    装卸队对账单数据暂无
+                </div>
+            </td>
+        </tr>
+    </template>
+    </tbody>
+</table>
+<hr>
+{{ $facilitatorStatements->withQueryString()->links() }}

+ 110 - 0
resources/views/personnel/discharge/facilitator/external/index.blade.php

@@ -0,0 +1,110 @@
+<!DOCTYPE html>
+<html>
+<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>对账单 BsWAS</title>
+    <!-- Styles -->
+    <link href="{{ mix('css/app.css') }}" rel="stylesheet">
+</head>
+<body>
+<div class="container-fluid " id="page">
+    <div id="form_div"></div>
+    <div class="form-inline mt-1" id="btn">
+            <span class="dropdown">
+                <button type="button" class="btn btn-outline-dark btn-sm form-control-sm dropdown-toggle tooltipTarget"
+                        :class="[checkData.length>0?'btn-dark text-light':'']"
+                        data-toggle="dropdown" title="导出所有页将会以搜索条件得到的筛选结果,将其全部记录(每一页)导出">导出Excel
+                </button>
+                <div class="dropdown-menu">
+                    <a class="dropdown-item" @click="Export(false)" href="javascript:">导出勾选内容</a>
+                    <a class="dropdown-item" @click="Export(true)" href="javascript:">导出所有页</a>
+                </div>
+            </span>
+        @include('personnel.discharge.facilitator.external._table')
+    </div>
+</div>
+
+<script src="{{ mix('js/app.js') }}"></script>
+<script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
+<script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
+<script>
+    new Vue({
+        el: "#page",
+        data: {
+            facilitatorStatements: {!! $facilitatorStatements->toJson() !!}['data'],
+            units: {0: 'm3', 1: '吨', 2: '托', 3: '件'},
+            facilitator:'{!! $id !!}',
+            checkData: [],
+            selectTr: 0,
+        },
+        created() {
+            let _this = this;
+            this.facilitatorStatements.forEach(function (facilitatorStatement, index, array) {
+                array[index]['expenditure_unit'] = _this.units[facilitatorStatement['expenditure_unit']];
+                array[index]['subjection'] = [];
+                array[index]['showSubject'] = false;
+            });
+        },
+        mounted() {
+            $('#list').removeClass('d-none');
+            $(".tooltipTarget").tooltip({'trigger': 'hover'});
+            let data = [[
+                {name: 'created_at_start', type: 'dateTime', tip: '创建开始日期'},
+                {name: 'created_at_end', type: 'dateTime', tip: '创建结束日期'},
+            ]];
+            this.form = new query({
+                el: '#form_div',
+                condition: data,
+            });
+            this.form.init();
+        },
+        methods: {
+            selectAll(e) {
+                if (!e.target.checked) this.checkData = [];
+                else {
+                    this.facilitatorStatements.forEach((item, i) => {
+                        let data = 'months:'+item['months']+';id:'+item['id'];
+                        if (this.checkData.indexOf(data) === -1) this.checkData.push(data);
+                    });
+                }
+            },
+            gainStatement(facilitatorStatement, index, $e) {
+                if (facilitatorStatement.showSubject) {
+                    facilitatorStatement.showSubject = false;
+                    $($e.target).html('点击展开');
+                    return;
+                }
+                $($e.target).html('加载中...');
+                let url = '{{url('apiLocal/facilitator/gainStatement')}}'
+                let data = {
+                    'created_range': facilitatorStatement['months'],
+                    'facilitator_id': facilitatorStatement['id'],
+                };
+                window.axios.post(url, data).then(res => {
+                    if (res.data.success) {
+                        this.$set(this.facilitatorStatements[index], 'subjection', res.data.data);
+                        facilitatorStatement['showSubject'] = true;
+                        $("#Statement" + index).slideToggle();
+                        $($e.target).html('点击收起');
+                        this.$forceUpdate();
+                    }
+                }).catch(err => {
+                    $($e.target).html('点击展开');
+                    window.tempTip.show(err);
+                });
+            },
+            Export(isExportAll) {
+                let url = '{{url('personnel/discharge/facilitator/external/')}}'+'/'+this.facilitator+'/export';
+                let token = '{{ csrf_token() }}';
+                excelExport(isExportAll, this.checkData, url, this.sum, token);
+            },
+        }
+    });
+</script>
+</body>
+</html>
+

+ 45 - 16
resources/views/transport/discharge/facilitator/index.blade.php → resources/views/personnel/discharge/facilitator/index.blade.php

@@ -1,12 +1,12 @@
 @extends('layouts.app')
 
-@section('title','卸货服务商')
+@section('title','装卸队')
 
 @section('content')
     <div id="nav2">
-        @component('transport.menu')@endcomponent
-        @component('transport.discharge.menu')@endcomponent
-        @component('transport.discharge.facilitator.menu')@endcomponent
+        @component('personnel.menu')@endcomponent
+        @component('personnel.discharge.menu')@endcomponent
+        @component('personnel.discharge.facilitator.menu')@endcomponent
     </div>
     <div id="list" class="d-none container-fluid">
         <div id="form_div"  style="min-width: 2250px"></div>
@@ -21,7 +21,7 @@
                     <a class="dropdown-item" @click="Export(true)" href="javascript:">导出所有页</a>
                 </div>
             </span>
-            @include('transport.discharge.facilitator._table')
+            @include('personnel.discharge.facilitator._table')
         </div>
     </div>
 @endsection
@@ -56,11 +56,13 @@
                 let _this = this;
                 this.facilitatorStatements.forEach(function(facilitatorStatement,index,array){
                     array[index]['expenditure_unit'] = _this.units[facilitatorStatement['expenditure_unit']];
+                    array[index]['subjection'] = [];
+                    array[index]['showSubject'] = false;
                 });
-                this.facilitators.forEach(function(provider,index,array){
+                this.facilitators.forEach(function(provider,index,array) {
                     array[index] = {
-                        name:provider.id,
-                        value:provider.name,
+                        name: provider.id,
+                        value: provider.name,
                     }
                 });
             },
@@ -70,8 +72,8 @@
                 $(".tooltipTarget").tooltip({'trigger': 'hover'});
                 let data = [[
                     {
-                        name: 'facilitator_id', type: 'select_multiple_select', tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的服务商'],
-                        placeholder: ['服务商', '服务商'],
+                        name: 'facilitator_id', type: 'select_multiple_select', tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的装卸队'],
+                        placeholder: ['装卸队', '装卸队'],
                         data: _this.facilitators
                     },
                     {name: 'created_at_start', type: 'dateTime', tip: '创建开始日期'},
@@ -80,22 +82,49 @@
                 this.form = new query({
                     el: '#form_div',
                     condition: data,
-                    appendDom : "btn",
-                    paginations:[ 50, 100, 200, 500,1000,20],
-                })
+                });
                 this.form.init();
             },
             methods:{
-                checkAll(e) {
+                selectAll(e) {
                     if (!e.target.checked) this.checkData = [];
                     else {
                         this.facilitatorStatements.forEach((item, i) => {
-                            if (this.checkData.indexOf(item['id']) === -1) this.checkData.push(item['id']);
+                            let data = 'months:'+item['months']+';id:'+item['id'];
+                            if (this.checkData.indexOf(data) === -1) this.checkData.push(data);
                         });
                     }
                 },
+                gainStatement(facilitatorStatement,index,$e){
+                    if(facilitatorStatement.showSubject){
+                        facilitatorStatement.showSubject=false;
+                        $($e.target).html('点击展开');
+                        return;
+                    }
+                    $($e.target).html('加载中...');
+                    let url = '{{url('apiLocal/facilitator/gainStatement')}}'
+                    let data = {
+                        'created_range':facilitatorStatement['months'],
+                        'facilitator_id':facilitatorStatement['id'],
+                    };
+                    window.axios.post(url,data).then(res=>{
+                        if(res.data.success){
+                            this.$set(this.facilitatorStatements[index],'subjection',res.data.data);
+                            facilitatorStatement['showSubject'] = true;selectAll
+                            $("#Statement"+index).slideToggle();
+                            $($e.target).html('点击收起');
+                            this.$forceUpdate();
+                        }
+                    }).catch(err=>{
+                        $($e.target).html('点击展开');
+                        window.tempTip.show(err);
+                    });
+                },
+                getQRCodeUrl(facilitatorStatement){
+                    return '{{url('/personnel/discharge/facilitator/qrCode')}}'+'/?facilitator_id='+facilitatorStatement['id'];
+                },
                 Export(isExportAll) {
-                    let url = '{{url('transport/discharge/facilitator/export')}}';
+                    let url = '{{url('personnel/discharge/facilitator/export')}}';
                     let token = '{{ csrf_token() }}';
                     excelExport(isExportAll, this.checkData, url, this.sum, token);
                 },

+ 3 - 3
resources/views/transport/discharge/facilitator/menu.blade.php → resources/views/personnel/discharge/facilitator/menu.blade.php

@@ -2,12 +2,12 @@
 
     <div class="card">
         <ul class="nav nav-pills">
-            @can('服务商-查询')
+            @can('卸货队-查询')
             <li class="nav-item">
-                <a target="transport/discharge/provider/index" class="nav-link" href="{{url('transport/discharge/facilitator/index')}}" :class="{active:isActive('index',4)}">对账单</a>
+                <a target="personnel/discharge/provider/index" class="nav-link" href="{{url('personnel/discharge/facilitator/index')}}" :class="{active:isActive('index',4)}">对账单</a>
             </li>
             @endcan
-            @can('服务商')
+            @can('装卸队')
             <li class="nav-item">
                 <a target="maintenance/facilitator" class="nav-link text-dark" href="{{url('maintenance/facilitator')}}" :class="{active:isActive('facilitator',2)}">基础设置</a>
             </li>

+ 6 - 6
resources/views/transport/discharge/menu.blade.php → resources/views/personnel/discharge/menu.blade.php

@@ -1,19 +1,19 @@
 <div class="container-fluid nav3" >
     <div class="card">
         <ul class="nav nav-pills">
-            @can('运输管理-卸货')
+            @can('人事管理-卸货')
             <li class="nav-item">
-                <a target="transport/discharge/task" class="nav-link" href="{{url('transport/discharge/task/index')}}" :class="{active:isActive('task',3)}">卸货任务</a>
+                <a target="transport/discharge/task" class="nav-link" href="{{url('personnel/discharge/task/index')}}" :class="{active:isActive('task',3)}">卸货任务</a>
             </li>
             @endcan
-            @can('运输管理-卸货-结算报表-查询')
+            @can('人事管理-卸货-结算报表-查询')
             <li class="nav-item">
-                <a target="transport/discharge/statement" class="nav-link" href="{{url('transport/discharge/statement/index')}}" :class="{active:isActive('statement',3)}">计算报表</a>
+                <a target="transport/discharge/statement" class="nav-link" href="{{url('personnel/discharge/statement/index')}}" :class="{active:isActive('statement',3)}">结算报表</a>
             </li>
             @endcan
-            @can('服务商-对账单-查询')
+            @can('装卸队-对账单-查询')
             <li class="nav-item">
-                <a target="transport/discharge/provider" class="nav-link" href="{{url('transport/discharge/facilitator/index')}}" :class="{active:isActive('facilitator',3)}">服务商</a>
+                <a target="transport/discharge/provider" class="nav-link" href="{{url('personnel/discharge/facilitator/index')}}" :class="{active:isActive('facilitator',3)}">卸货队账单</a>
             </li>
             @endcan
         </ul>

+ 2 - 1
resources/views/transport/discharge/statement/_table.blade.php → resources/views/personnel/discharge/statement/_table.blade.php

@@ -16,7 +16,7 @@
         <th class="td-cool">单位</th>
         <th class="td-cool">收入单价</th>
         <th class="td-cool">收入合计</th>
-        <th>服务商</th>
+        <th>装卸队</th>
         <th>数量</th>
         <th>单位</th>
         <th>支出单价</th>
@@ -56,4 +56,5 @@
         </tr>
     </template>
 </table>
+{{ $dischargeStatements->withQueryString()->links() }}
 <hr>

+ 6 - 8
resources/views/transport/discharge/statement/index.blade.php → resources/views/personnel/discharge/statement/index.blade.php

@@ -4,8 +4,8 @@
 
 @section('content')
     <div id="nav2">
-        @component('transport.menu')@endcomponent
-        @component('transport.discharge.menu')@endcomponent
+        @component('personnel.menu')@endcomponent
+        @component('personnel.discharge.menu')@endcomponent
     </div>
     <div id="list" class="d-none container-fluid">
         <div id="form_div" style="min-width: 2250px"></div>
@@ -21,7 +21,7 @@
                     <a class="dropdown-item" @click="StatementsExport(true)" href="javascript:">导出所有页</a>
                 </div>
             </span>
-            @include('transport.discharge.statement._table')
+            @include('personnel.discharge.statement._table')
         </div>
     </div>
 @endsection
@@ -75,8 +75,8 @@
                     {name: 'status', type: 'select', tip: '状态', data: status, placeholder: '状态'},
                 ], [
                     {
-                        name: 'facilitator_id', type: 'select_multiple_select', tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的服务商'],
-                        placeholder: ['服务商', '定位或多选服务商'],
+                        name: 'facilitator_id', type: 'select_multiple_select', tip: ['输入关键词快速定位下拉列表,回车确定', '选择要显示的装卸队'],
+                        placeholder: ['装卸队', '定位或多选装卸队'],
                         data: _this.facilitators
                     },
                     {name: 'income_remark', type: 'input', tip: '备注', data: _this.status, placeholder: '支出备注'},
@@ -85,8 +85,6 @@
                 this.form = new query({
                     el: '#form_div',
                     condition: data,
-                    appendDom: "btn",
-                    paginations: [50, 100, 200, 500, 1000, 20],
                 })
                 this.form.init();
             },
@@ -100,7 +98,7 @@
                     }
                 },
                 StatementsExport(isExportAll) {
-                    let url = '{{url('transport/discharge/statement/export')}}';
+                    let url = '{{url('personnel/discharge/statement/export')}}';
                     let token = '{{ csrf_token() }}';
                     excelExport(isExportAll, this.checkData, url, this.sum, token);
                 }

+ 2 - 2
resources/views/transport/discharge/statement/menu.blade.php → resources/views/personnel/discharge/statement/menu.blade.php

@@ -1,9 +1,9 @@
 <div class="container-fluid">
     <div class="card">
         <ul class="nav nav-pills">
-            @can('服务商-对账单-查询')
+            @can('装卸队-对账单-查询')
             <li class="nav-item">
-                <a target="transport/discharge/statement/index" class="nav-link" href="{{url('transport/discharge/statement/index')}}" :class="{active:isActive('recycle',2)}">查询</a>
+                <a target="personnel/discharge/statement/index" class="nav-link" href="{{url('personnel/discharge/statement/index')}}" :class="{active:isActive('recycle',2)}">查询</a>
             </li>
             @endcan
         </ul>

+ 65 - 29
resources/views/transport/discharge/task/_createTask.blade.php → resources/views/personnel/discharge/task/_createTask.blade.php

@@ -6,7 +6,8 @@
                     <span v-show="isUpdate">卸货任务修改</span>
                     <span v-show="!isUpdate">卸货任务添加</span>
                 </h5>
-                <button type="button" class="close" data-dismiss="modal" @click="addTask={},isUpdate=false,taskError={}">
+                <button type="button" class="close" data-dismiss="modal"
+                        @click="addTask={},isUpdate=false,taskError={}">
                     <span>&times;</span>
                 </button>
             </div>
@@ -14,87 +15,119 @@
             <div class="modal-body">
                 <form class="form">
                     <div class="form-group row">
-                        <label for="addTask-owner-id" class="col-sm-3 col-form-label text-right">货主</label>
+                        <label for="addTask-owner-id" class="col-sm-3 col-form-label text-right text-primary">货主 *</label>
                         <div class="col-sm-5">
-                            <select id="addTask-owner-id" class="form-control" v-model="addTask.owner_id" :class="taskError.owner_id? 'is-invalid' :''">
-                                <option v-for="(owner,index) in ownerFilter" :value="owner.name" :key="owner+index">@{{ owner.value }}</option>
+                            <select id="addTask-owner-id" class="form-control"
+                                    v-model="addTask.owner_id" :class="taskError.owner_id? 'is-invalid' :''" @focus="taskError.owner_id = null">
+                                <option v-for="(owner,index) in ownerFilter" :value="owner.name" :key="owner+index">@{{
+                                    owner.value }}
+                                </option>
                             </select>
-                            <div class="invalid-feedback" >
+                            <div class="invalid-feedback">
                                 @{{ taskError['owner_id'] ? taskError['owner_id'][0] : '' }}
                             </div>
                         </div>
                         <div class="col-3 ">
-                            <input class="form-control " placeholder="输入货主进行刷选" @change="filterOwner($event)">
+                            <input class="form-control" id="owner-name-filter" placeholder="输入货主进行刷选" @input="filterOwner($event)">
                         </div>
                     </div>
 
                     <div class="form-group row">
-                        <label for="addTask-created-at" class="col-sm-3 col-form-label text-right">预约日期</label>
+                        <label for="addTask-created-at" class="col-sm-3 col-form-label text-right text-primary">预约日期 *</label>
                         <div class="col-sm-9 form-inline">
-                            <input type="date" id="addTask-created-at" class="form-control col-9" name="size" v-model="addTask.income_at" >
+                            <input type="datetime-local" id="addTask-created-at" class="form-control col-9"
+                                   v-model="addTask.income_at" @focus="taskError.income_at= null">
                         </div>
                     </div>
 
                     <div class="form-group row">
-                        <label for="addTask-type" class="col-sm-3 col-form-label text-right" >作业名称</label>
+                        <label for="addTask-type" class="col-sm-3 col-form-label text-right text-primary text-primary">作业名称 *</label>
                         <div class="col-sm-9 form-inline">
-                            <select id="addTask-type" class="form-control col-4" v-model="addTask.type" :class="taskError.type? 'is-invalid' :''">
+                            <select id="addTask-type" class="form-control col-4" v-model="addTask.type"
+                                    :class="taskError.type? 'is-invalid' :''"
+                                    @focus="taskError.type= null">
                                 <option v-for="(type,index) in taskTypes" :value="type.name" :key="type+index">@{{
                                     type.value }}
                                 </option>
                             </select>
-                            <div class="invalid-feedback" >
+                            <div class="invalid-feedback">
                                 @{{ taskError['type'] ? taskError['type'][0] : '' }}
                             </div>
                         </div>
                     </div>
 
                     <div class="form-group row">
-                        <label for="addTask-numbers" class="col-sm-3 col-form-label text-right">入库单</label>
-                        <div class="col-sm-9 form-inline" >
-                            <input type="text" id="addTask-numbers" class="form-control col-9" name="size" v-model="addTask.numbers" :class="taskError.numbers? 'is-invalid' :''">
-                            <div class="invalid-feedback" >
+                        <label for="addTask-type" class="col-sm-3 col-form-label text-right text-primary">仓库 *</label>
+                        <div class="col-sm-9 form-inline">
+                            <select id="addTask-type" class="form-control col-4" v-model="addTask.warehouse_id"
+                                    :class="taskError.warehouse_id? 'is-invalid' :''"
+                                    @focus="taskError.warehouse_id = null">
+                                <option v-for="(type,index) in warehouses" :value="type.id" :key="type+index">@{{ type.name }}
+                                </option>
+                            </select>
+                            <div class="invalid-feedback">
+                                @{{ taskError['warehouse_id'] ? taskError['warehouse_id'][0] : '' }}
+                            </div>
+                        </div>
+                    </div>
+
+                    <div class="form-group row">
+                        <label for="addTask-numbers" class="col-sm-3 col-form-label text-right text-primary">入库单 *</label>
+                        <div class="col-sm-9 form-inline">
+                            <input type="text" id="addTask-numbers" class="form-control col-9"
+                                   v-model="addTask.numbers" :class="taskError.numbers? 'is-invalid' :''"
+                                   @focus="taskError.numbers = null">
+                            <div class="invalid-feedback">
                                 @{{ taskError['numbers'] ? taskError['numbers'][0] : '' }}
                             </div>
                         </div>
                     </div>
 
                     <div class="form-group row">
-                        <label for="addTask-amount" class="col-sm-3 col-form-label text-right">数量</label>
+                        <label for="addTask-amount" class="col-sm-3 col-form-label text-right text-primary">数量 *</label>
                         <div class="col-sm-9 form-inline">
-                            <input type="number" id="addTask-amount" class="form-control col-9" name="size" v-model="addTask.income_amount" :class="taskError.income_amount? 'is-invalid' :''">
-                            <div class="invalid-feedback" >
+                            <input type="number" id="addTask-amount" class="form-control col-9"
+                                   v-model="addTask.income_amount" :class="taskError.income_amount? 'is-invalid' :''"
+                                   @focus="taskError.income_amount = null">
+                            <div class="invalid-feedback">
                                 @{{ taskError['income_amount'] ? taskError['income_amount'][0] : '' }}
                             </div>
                         </div>
                     </div>
 
                     <div class="form-group row">
-                        <label for="addTask-amount" class="col-sm-3 col-form-label text-right">单位</label>
+                        <label for="addTask-amount" class="col-sm-3 col-form-label text-right text-primary">单位 *</label>
                         <div class="col-sm-9 form-inline">
-                            <select id="addTask-type" class="form-control col-4" v-model="addTask.income_unit" :class="taskError.income_unit? 'is-invalid' :''">
-                                <option v-for="(unit,index) in units" :value="unit.name" :key="unit+index">@{{ unit.value }}</option>
+                            <select id="addTask-type" class="form-control col-4" v-model="addTask.income_unit"
+                                    :class="taskError.income_unit? 'is-invalid' :''"
+                                    @focus="taskError.income_unit = null">
+                                <option v-for="(unit,index) in units" :value="unit.name" :key="unit+index">@{{
+                                    unit.value }}
+                                </option>
                             </select>
-                            <div class="invalid-feedback" >
+                            <div class="invalid-feedback">
                                 @{{ taskError['income_unit'] ? taskError['income_unit'][0] : '' }}
                             </div>
                         </div>
                     </div>
 
                     <div class="form-group row">
-                        <label for="addTask-income-unit-price" class="col-sm-3 col-form-label text-right">单价</label>
+                        <label for="addTask-income-unit-price" class="col-sm-3 col-form-label text-right text-primary">单价 *</label>
                         <div class="col-sm-9 form-inline">
-                            <input type="number" id="addTask-income-unit-price" class="form-control col-9" v-model="addTask.income_unit_price" :class="taskError.income_unit_price? 'is-invalid' :''">
-                            <div class="invalid-feedback" >
+                            <input type="number" id="addTask-income-unit-price" class="form-control col-9"
+                                   v-model="addTask.income_unit_price" :class="taskError.income_unit_price? 'is-invalid' :''"
+                                   @focus="taskError.income_unit_price = null">
+                            <div class="invalid-feedback">
                                 @{{ taskError['income_unit_price'] ? taskError['income_unit_price'][0] : '' }}
                             </div>
                         </div>
                     </div>
 
                     <div class="form-group row" v-show="isUpdate">
-                        <label for="addTask-income-total-cost" class="col-sm-3 col-form-label text-right">总价</label>
+                        <label for="addTask-income-total-cost" class="col-sm-3 col-form-label text-right text-primary">总价 *</label>
                         <div class="col-sm-9 form-inline">
-                            <input type="number" id="addTask-income-total-cost" class="form-control col-9" v-model="addTask.income_total_cost">
+                            <input type="number" id="addTask-income-total-cost" class="form-control col-9"
+                                   v-model="addTask.income_total_cost">
                         </div>
                     </div>
 
@@ -109,8 +142,11 @@
             </div>
 
             <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-dismiss="modal" @click="addTask={},isUpdate=false,taskError={}">关闭</button>
-                <button type="button" class="btn btn-primary" v-show="isUpdate" @click="updateCurrentTask(addTask,selectIndex)">提交
+                <button type="button" class="btn btn-secondary" data-dismiss="modal"
+                        @click="addTask={},isUpdate=false,taskError={}">关闭
+                </button>
+                <button type="button" class="btn btn-primary" v-show="isUpdate"
+                        @click="updateCurrentTask(addTask,selectIndex)">提交
                 </button>
                 <button type="button" class="btn btn-primary" v-show="!isUpdate" @click="createTask">创建</button>
             </div>

+ 9 - 9
resources/views/transport/discharge/task/_executeTask.blade.php → resources/views/personnel/discharge/task/_executeTask.blade.php

@@ -3,7 +3,7 @@
         <div class="modal-content">
             <div class="modal-header">
                 <h5 class="modal-title text-center text-uppercase">
-                    卸货任务服务商指定
+                    卸货任务装卸队指定
                 </h5>
                 <button type="button" class="close" data-dismiss="modal" @click="executingTack={},selectIndex = null,taskError={}">
                     <span>&times;</span>
@@ -13,7 +13,7 @@
             <div class="modal-body">
                 <form class="form">
                     <div class="form-group row">
-                        <label for="executingTack-owner-id" class="col-sm-3 col-form-label text-right">服务商</label>
+                        <label for="executingTack-owner-id" class="col-sm-3 col-form-label text-right  text-primary">装卸队 *</label>
                         <div class="col-sm-5">
                             <select id="executingTack-owner-id" class="form-control" v-model="executingTack.facilitator_id" :class="taskError.facilitator_id? 'is-invalid' :''">
                                 <option v-for="(providers,index) in facilitatorsFilter" :value="providers.id" :key="providers+index">@{{ providers.name }}</option>
@@ -23,21 +23,21 @@
                             </div>
                         </div>
                         <div class="col-sm-3">
-                            <input class="form-control" placeholder="输入服务商进行刷选" @change="filterProviders($event)">
+                            <input class="form-control" placeholder="输入装卸队进行刷选" @input="filterProviders($event)">
                         </div>
                     </div>
 
                     <div class="form-group row">
-                        <label for="executingTack-created-at" class="col-sm-3 col-form-label text-right">卸货日期</label>
+                        <label for="executingTack-created-at" class="col-sm-3 col-form-label text-right text-primary">卸货日期 *</label>
                         <div class="col-sm-9 form-inline">
-                            <input type="date" id="executingTack-created-at"  class="form-control col-9" name="size" v-model="executingTack.expenditure_at">
+                            <input type="datetime-local" id="executingTack-created-at"  class="form-control col-9"  v-model="executingTack.expenditure_at">
                         </div>
                     </div>
 
                     <div class="form-group row">
-                        <label for="executingTack-amount" class="col-sm-3 col-form-label text-right">数量</label>
+                        <label for="executingTack-amount" class="col-sm-3 col-form-label text-right text-primary">数量 *</label>
                         <div class="col-sm-9 form-inline">
-                            <input type="number" id="executingTack-amount" class="form-control col-9" name="size" v-model="executingTack.expenditure_amount" :class="taskError.facilitator_id? 'is-invalid' :''">
+                            <input type="number" id="executingTack-amount" class="form-control col-9"  v-model="executingTack.expenditure_amount" :class="taskError.facilitator_id? 'is-invalid' :''">
                             <div class="invalid-feedback" >
                                 @{{ taskError['facilitator_id'] ? taskError['facilitator_id'][0] : '' }}
                             </div>
@@ -45,7 +45,7 @@
                     </div>
 
                     <div class="form-group row">
-                        <label for="executingTack-amount" class="col-sm-3 col-form-label text-right">单位</label>
+                        <label for="executingTack-amount" class="col-sm-3 col-form-label text-right text-primary">单位 *</label>
                         <div class="col-sm-9 form-inline">
                             <select id="executingTack-type" class="form-control col-4" v-model="executingTack.expenditure_unit" :class="taskError.expenditure_unit? 'is-invalid' :''">
                                 <option v-for="(unit,index) in units" :value="unit.name" :key="unit+index">@{{ unit.value }}</option>
@@ -57,7 +57,7 @@
                     </div>
 
                     <div class="form-group row">
-                        <label for="executingTack-expenditure-unit-price" class="col-sm-3 col-form-label text-right">外派单价</label>
+                        <label for="executingTack-expenditure-unit-price" class="col-sm-3 col-form-label text-right  text-primary">外派单价 *</label>
                         <div class="col-sm-9 form-inline">
                             <input type="number" id="executingTack-expenditure-unit-price" class="form-control col-9"  v-model="executingTack.expenditure_unit_price" :class="taskError.expenditure_unit_price? 'is-invalid' :''">
                             <div class="invalid-feedback" >

+ 25 - 12
resources/views/transport/discharge/task/_table.blade.php → resources/views/personnel/discharge/task/_table.blade.php

@@ -2,8 +2,9 @@
     <tr class="text-center">
         <th><input type="checkbox" class="form-check" name="selectAll" id="selectAll" @click="checkAll"></th>
         <th>序号</th>
-        <th>日期</th>
+        <th>预约时间</th>
         <th>客户名称</th>
+        <th>仓库</th>
         <th>作业名称</th>
         <th>入库单号</th>
         <th>数量</th>
@@ -13,6 +14,7 @@
         <th>状态</th>
         <th>备注</th>
         <th>操作</th>
+        <th>创建时间</th>
     </tr>
     <template v-if="dischargeTasks.length > 0">
         <tr v-for="(dischargeTask,index) in dischargeTasks" :key="index" class="text-center"  @click="selectTr===index+1?selectTr=0:selectTr=index+1" :class="selectTr===index+1?'focusing' : ''">
@@ -20,7 +22,7 @@
             <td>
                 @{{index+1}}
                 <template v-if="dischargeTask.status===0">
-                    <span class="badge badge-pill badge-secondary">未指定服务商</span>
+                    <span class="badge badge-pill badge-secondary">未指定装卸队</span>
                 </template>
                 <template v-else-if="dischargeTask.status===1">
                     <span class="badge badge-pill badge-warning">任务已指定</span>
@@ -32,10 +34,19 @@
                     <span class="badge badge-pill badge-success">完成</span>
                 </template>
             </td>
-            <td>@{{ dischargeTask.created_at }}</td>
+            <td>@{{ dischargeTask.income_at }}</td>
             <td>@{{ dischargeTask.owner ? dischargeTask.owner.name : '' }}</td>
             <td>
-                @can('运输管理-卸货-编辑')
+                @can('人事管理-卸货-编辑')
+                    <select :value="dischargeTask.warehouse_id" class="form-control form-control-sm" :disabled="dischargeTask.status>0" @change="updateCurrentTaskColumn(dischargeTask,index,'warehouse_id',$event)">
+                        <option v-for="(type,i) in warehouses" :value="type.id">@{{ type.name }}</option>
+                    </select>
+                @else
+                        @{{ dischargeTask.warehouse ? dischargeTask.warehouse.name : '' }}
+                @endcan
+            </td>
+            <td>
+                @can('人事管理-卸货-编辑')
                     <select :value="dischargeTask.type" class="form-control form-control-sm" :disabled="dischargeTask.status>0" @change="updateCurrentTaskColumn(dischargeTask,index,'type',$event)">
                         <option v-for="(type,i) in taskTypes" :value="type.name">@{{ type.value }}</option>
                     </select>
@@ -44,7 +55,7 @@
                 @endcan
             </td>
             <td>
-                @can('运输管理-卸货-编辑')
+                @can('人事管理-卸货-编辑')
                     <input type="text" :value="dischargeTask.numbers" class="form-control form-control-sm" :disabled="dischargeTask.status>0" @change="updateCurrentTaskColumn(dischargeTask,index,'numbers',$event)">
                 @else
                     @{{ dischargeTask.numbers }}
@@ -52,7 +63,7 @@
             </td>
             <td>@{{ dischargeTask.income_amount }}</td>
             <td>
-                @can('运输管理-卸货-编辑')
+                @can('人事管理-卸货-编辑')
                     <select  :value="dischargeTask.income_unit" class="form-control form-control-sm" :disabled="dischargeTask.status>0" @change="updateCurrentTaskColumn(dischargeTask,index,'income_unit',$event)">
                         <option v-for="(unit,i) in units" :value="unit.name" v-html="unit.value"></option>
                     </select>
@@ -63,7 +74,7 @@
             <td>@{{ dischargeTask.income_unit_price }}</td>
             <td>@{{ dischargeTask.income_total_cost }}</td>
             <td>
-                @can('运输管理-卸货-编辑')
+                @can('人事管理-卸货-编辑')
                     {{--  dischargeTask.status===3 完成时不可编辑状态 --}}
                     <select :value="dischargeTask.status" class="form-control form-control-sm" :disabled="dischargeTask.status===3" @change="updateCurrentTaskColumn(dischargeTask,index,'status',$event)">
                         <option v-for="(type,i) in status" :value="type.name" v-html="type.value" :disabled="dischargeTask.status > type.name"></option>
@@ -73,23 +84,24 @@
                 @endcan
             </td>
             <td>
-                @can('运输管理-卸货-编辑')
+                @can('人事管理-卸货-编辑')
                     <textarea class="form-control" cols="15" rows="2" :value="dischargeTask.income_remark" :disabled="dischargeTask.status>0" @change="updateCurrentTaskColumn(dischargeTask,index,'income_remark',$event)"></textarea>
                 @else
                     @{{ dischargeTask.income_remark }}
                 @endcan
             </td>
             <td>
-                @can('运输管理-卸货-编辑')
+                @can('人事管理-卸货-编辑')
                 <button class="btn btn-sm btn-outline-primary" @click="showExecutingTaskModal(index,true,dischargeTask)" v-show="dischargeTask.status===0">指定服务商</button>
                 @endcan
-                @can('运输管理-卸货-编辑')
+                @can('人事管理-卸货-编辑')
                 <button class="btn btn-sm btn-outline-primary" @click="showUpdateTaskModal(index,true,dischargeTask)" v-show="dischargeTask.status<=1">编辑</button>
                 @endcan
-                @can('运输管理-卸货-删除')
+                @can('人事管理-卸货-删除')
                 <button class="btn btn-sm btn-outline-danger" @click="deleteTask(index,dischargeTask)">删除</button>
                 @endcan
             </td>
+            <td>@{{ dischargeTask.created_at }}</td>
         </tr>
     </template>
     <template v-else>
@@ -99,5 +111,6 @@
             </td>
         </tr>
     </template>
-    {{ $dischargeTasks->withQueryString()->links() }}
 </table>
+{{ $dischargeTasks->withQueryString()->links() }}
+

+ 40 - 22
resources/views/transport/discharge/task/index.blade.php → resources/views/personnel/discharge/task/index.blade.php

@@ -4,9 +4,9 @@
 
 @section('content')
     <div id="nav2">
-        @component('transport.menu')@endcomponent
-        @component('transport.discharge.menu')@endcomponent
-        @component('transport.discharge.task.menu')@endcomponent
+        @component('personnel.menu')@endcomponent
+        @component('personnel.discharge.menu')@endcomponent
+        @component('personnel.discharge.task.menu')@endcomponent
     </div>
     <div id="list" class="d-none container-fluid">
         <div id="form_div"  style="min-width: 2250px"></div>
@@ -23,17 +23,17 @@
                 </div>
             </span>
             <span class="ml-1">
-                @can('运输管理-卸货-创建')
+                @can('人事管理-卸货-创建')
                 <button type="button" class="btn btn-outline-dark btn-sm form-control-sm tooltipTarget" @click="showCreateTaskModal(true)" style="background: #dad7e8;">创建任务</button>
                 @endcan
             </span>
         </div>
-        @include('transport.discharge.task._table')
-        @can('运输管理-卸货-创建')
-        @include('transport.discharge.task._createTask')
+        @include('personnel.discharge.task._table')
+        @can('人事管理-卸货-创建')
+        @include('personnel.discharge.task._createTask')
         @endcan
-        @can('运输管理-卸货-编辑')
-        @include('transport.discharge.task._executeTask')
+        @can('人事管理-卸货-编辑')
+        @include('personnel.discharge.task._executeTask')
         @endcan
     </div>
 @endsection
@@ -49,6 +49,7 @@
                 owners:{!! $owners !!},
                 ownerFilter: [],
                 facilitators:{!! $facilitators !!},
+                warehouses:{!! $warehouses !!},
                 facilitatorsFilter: [],
                 addTask: {income_at:null},
                 executingTack: {},
@@ -56,6 +57,8 @@
                 taskTypes: [
                     {name: 0, value: "装车"},
                     {name: 1, value: "卸车"},
+                    {name: 2, value: "翻托"},
+                    {name: 3, value: "包膜"},
                 ],
                 units: [
                     {name: 0, value: 'm3'},
@@ -152,8 +155,10 @@
                 },
                 // 创建任务 modals
                 showCreateTaskModal(isDisplay) {
+                    $('owner-name-filter').val('');
                     if (isDisplay){
-                        if(!this.isUpdate)this.addTask.income_at = moment().format('YYYY-MM-DD');
+                        if(!this.isUpdate)this.addTask.income_at =  moment().format('YYYY-MM-DDTHH:mm');
+                        this.$forceUpdate();
                         $("#createdModal").modal('show');
                     } else {
                         this.isUpdate = false;
@@ -162,11 +167,13 @@
                 },
                 // 执行任务 modal
                 showExecutingTaskModal(index, isDisplay, task) {
+                    $('owner-name-filter').val('');
                     this.executingTack = JSON.parse(JSON.stringify(task));
                     this.selectIndex = index;
                     if (isDisplay) {
-                        this.executingTack.expenditure_at = moment().format('YYYY-MM-DD');
+                        this.executingTack.expenditure_at = moment().format('YYYY-MM-DDTHH:mm');
                         this.isUpdate = true;
+                        this.$forceUpdate();
                         $("#executingTaskModal").modal('show');
                     } else {
                         this.isUpdate = false;
@@ -183,13 +190,14 @@
                 },
                 // 创建任务
                 createTask(index) {
+                    console.log(this.addTask);
                     if (this.isUpdate) {
                         this.updateCurrentTask(index);
                         return
                     }
                     this.addTask['income_total_cost'] = Number(this.addTask['income_unit_price']) * Number(this.addTask.income_amount);
                     this.addTask['status'] = 0;
-                    let url = '{{url('apiLocal/transport/discharge/task/store')}}';
+                    let url = '{{url('apiLocal/personnel/discharge/task/store')}}';
                     tempTip.setDuration(2000);
                     tempTip.setIndex(999);
                     axios.post(url, this.addTask).then(res => {
@@ -211,7 +219,7 @@
                 },
                 // 执行任务
                 executedTask(dischargeTask, index) {
-                    let url = '{{url('apiLocal/transport/discharge/task/updateFacilitator')}}';
+                    let url = '{{url('apiLocal/personnel/discharge/task/updateFacilitator')}}';
                     tempTip.setDuration(2000);
                     tempTip.setIndex(9999);
                     dischargeTask['income_total_cost'] = Number(dischargeTask['income_unit_price']) * (dischargeTask['income_amount']);
@@ -237,7 +245,7 @@
                 // 编辑当前任务
                 updateCurrentTask(addTask,index) {
                     // 更新
-                    let url = '{{url('apiLocal/transport/discharge/task/update')}}';
+                    let url = '{{url('apiLocal/personnel/discharge/task/update')}}';
                     tempTip.setDuration(2000);
                     tempTip.setIndex(2000);
                     axios.put(url, addTask).then(res => {
@@ -256,7 +264,7 @@
                     this.selectIndex = null;
                 },
                 updateCurrentTaskColumn(task,index,column,$e){
-                    let url = '{{url('apiLocal/transport/discharge/task/updateColumn')}}';
+                    let url = '{{url('apiLocal/personnel/discharge/task/updateColumn')}}';
                     tempTip.setDuration(2000);
                     tempTip.setIndex(99);
                     let value = $($e.target).val();
@@ -285,7 +293,7 @@
                     if (!confirm("是否删除当前任务")) {
                         return
                     }
-                    let url = '{{url('apiLocal/transport/discharge/task/delete/?id=')}}'+dischargeTask['id'];
+                    let url = '{{url('apiLocal/personnel/discharge/task/delete/?id=')}}'+dischargeTask['id'];
                     tempTip.setDuration(2000);
                     tempTip.setIndex(99);
                     axios.delete(url).then(res => {
@@ -301,28 +309,38 @@
                 },
                 // 下载
                 dischargeTaskExport(isExportAll) {
-                    let url = '{{url('transport/discharge/task/export')}}';
+                    let url = '{{url('personnel/discharge/task/export')}}';
                     let token = '{{ csrf_token() }}';
                     excelExport(isExportAll, this.checkData, url, this.sum, token);
                 },
                 // 筛选货主
                 filterOwner(e) {
                     let value = $(e.target).val();
-                    if (value === '') this.ownerFilter = JSON.parse(JSON.stringify(this.owners));
+                    if (value === '') {
+                        this.ownerFilter = JSON.parse(JSON.stringify(this.owners));
+                        this.addTask.owner_id = null;
+                    }
                     else {
                         this.ownerFilter = this.owners.filter(function (owner) {
-                            return owner.name.indexOf(value) !== -1;
+                            return owner.value.indexOf(value) !== -1;
                         });
+                        if(this.ownerFilter.length > 0)this.addTask.owner_id =this.ownerFilter[0]['name'];
+                        else this.addTask.owner_id = null;
+
                     }
                 },
-                // 筛选服务商
+                // 筛选装卸队
                 filterProviders(e) {
                     let value = $(e.target).val();
                     if (value === '') this.facilitatorsFilter = JSON.parse(JSON.stringify(this.facilitators));
                     else {
-                        this.facilitatorsFilter = this.facilitators.filter(function (providers) {
-                            return providers.name.indexOf(value) !== -1;
+                        let facilitators = JSON.parse(JSON.stringify(this.facilitators));
+                        this.facilitatorsFilter = facilitators.filter(function (item) {
+                            return item.name.indexOf(value) !== -1;
                         });
+                        if(this.facilitatorsFilter.length > 0){
+                            this.executingTack.facilitator_id =this.facilitatorsFilter[0]['id'];
+                        }
                     }
                 }
 

+ 2 - 2
resources/views/transport/discharge/task/menu.blade.php → resources/views/personnel/discharge/task/menu.blade.php

@@ -1,9 +1,9 @@
 <div class="container-fluid">
     <div class="card">
         <ul class="nav nav-pills">
-            @can('运输管理-卸货-查询')
+            @can('人事管理-卸货-查询')
             <li class="nav-item">
-                <a target="transport/discharge/task" class="nav-link" href="{{url('transport/discharge/task/index')}}" :class="{active:isActive('task',3)}">查询</a>
+                <a target="personnel/discharge/task" class="nav-link" href="{{url('personnel/discharge/task/index')}}" :class="{active:isActive('task',3)}">查询</a>
             </li>
             @endcan
         </ul>

+ 4 - 0
resources/views/personnel/menu.blade.php

@@ -6,6 +6,10 @@
                 <li class="nav-item">
                     <a target="personnel/laborReport" class="nav-link" href="{{url('personnel/laborReport')}}" :class="{active:isActive('laborReport',2)}">临时工报表</a>
                 </li> @endcan
+            @can('装卸队')
+                <li class="nav-item">
+                    <a target="personnel/discharge" class="nav-link" href="{{url('personnel/discharge/task/index')}}" :class="{active:isActive('discharge',2)}">卸货</a>
+                </li>@endcan
             @can('人事管理-打卡相关')
                 <li class="nav-item">
                     <a target="personnel/checking-in/createReplenishClock" class="nav-link" href="{{url('personnel/checking-in/createReplenishClock')}}" :class="{active:isActive('checking-in',2)}">打卡相关</a>

+ 0 - 35
resources/views/transport/discharge/facilitator/_table.blade.php

@@ -1,35 +0,0 @@
-<table class="table table-sm table-striped table-bordered table-hover card-body p-0 m-0">
-    <tr class="text-center">
-        <th><input type="checkbox" class="form-check" name="selectAll" id="selectAll" @click="checkAll" ></th>
-        <th>序号</th>
-        <th>日期</th>
-        <th>服务商</th>
-        <th>数量</th>
-        <th>单位</th>
-        <th>单价</th>
-        <th>总金额合计</th>
-    </tr>
-    <template v-if="facilitatorStatements.length>0">
-        <tr v-for="(facilitatorStatement,index) in facilitatorStatements" :key="index" class="text-center" @click="selectTr===index+1?selectTr=0:selectTr=index+1" :class="selectTr===index+1?'focusing' : ''">
-            <td><input type="checkbox" class="form-check" :value="facilitatorStatement.id" v-model="checkData"></td>
-            <td>@{{index+1}}</td>
-            <td>@{{ facilitatorStatement.created_at }}</td>
-            <td>@{{ facilitatorStatement.facilitator ? facilitatorStatement.facilitator.name : '' }}</td>
-            <td>@{{ facilitatorStatement.expenditure_amount }}</td>
-            <td>@{{ facilitatorStatement.expenditure_unit }}</td>
-            <td>@{{ facilitatorStatement.expenditure_unit_price }}</td>
-            <td>@{{ facilitatorStatement.expenditure_total_cost }}</td>
-        </tr>
-    </template>
-    <template v-else>
-        <tr>
-            <td colspan="8">
-                <div class='alert alert-info text-lg-center' >
-                    服务商对账单数据为空
-                </div>
-            </td>
-        </tr>
-    </template>
-    {{ $facilitatorStatements->withQueryString()->links() }}
-</table>
-<hr>

+ 3 - 3
resources/views/transport/waybill/index.blade.php

@@ -48,7 +48,9 @@
             </div>
             <table class="table table-striped table-sm table-bordered table-hover text-nowrap waybill-table td-min-width-80" style="background: #fff;" id="table">
                 <tr v-for="(waybill,i) in waybills" :style="[{color:waybill.status=='待重审'?'red':''||waybill.status=='已完结'?'green':''},{'font-weight': waybill.id==selectedStyle?'bold':''}]"
-                    :id="'waybill'+waybill.id" @click="selectedColor(waybill.id,$event)" position="static" @mouseover="hidetop($event)" @mouseleave="showtop($event)">
+                    :id="'waybill'+waybill.id" @click="selectedColor(waybill.id,$event) & (selectTr===i+1?selectTr=0:selectTr=i+1)" position="static" @mouseover="hidetop($event)" @mouseleave="showtop($event)"
+                    :class="selectTr===i+1?'focusing':''"
+                >
                     <td><input class="checkItem" type="checkbox" :value="waybill.id"></td>
                     <td>
                         <span v-if=waybill.status==="未审核"||waybill.status==="待重审">
@@ -584,13 +586,11 @@
                     excelExport(checkAllSign,checkData,url,this.sum,token);
                 },
                 selectedColor(id,e){
-                    $('#headerParent tr[class=focusing]').removeClass('focusing')
                     if (id==this.selectedStyle){
                         this.selectedStyle='';
                         return;
                     }
                     this.selectedStyle=id;
-                    $(e.target).parent('tr').addClass('focusing')
                 },
                 mouseleaveOwner:function () {
                     if(!this.isOut&&!this.isBlur){

+ 11 - 0
routes/api/thirdPart/hengli.php

@@ -0,0 +1,11 @@
+<?php
+
+use App\Http\Controllers\api\thirdPart\hengli\PackageController;
+use Illuminate\Support\Facades\Route;
+
+/*
+地址前缀:api/thirdPart/hengli
+*/
+Route::group(['prefix'=>'weight'],function(){
+    Route::GET('new', "PackageController@new_");        //称重上传
+});

+ 25 - 18
routes/apiLocal.php

@@ -26,20 +26,26 @@ Route::post('logistic/logisticNumberReturnIsUnique', 'RejectedBillController@api
 
 Route::post('commodity/getCommodityByBarcode', 'CommodityController@apiGetCommodityByBarcode');
 
-Route::post('rejectedBill/getRejectedByLogisticNumberReturn','RejectedController@apiGetRejectedByLogisticNumberReturn');
+Route::post('rejectedBill/getRejectedByLogisticNumberReturn', 'RejectedController@apiGetRejectedByLogisticNumberReturn');
 
-Route::group(['prefix'=>'transport'],function(){
+/** 运输管理 */
+Route::group(['prefix' => 'transport'], function () {
     Route::post('waybill/recoverSelected', 'WaybillController@apiRestoreSelected');
     Route::post('waybill/changeFee', 'WaybillController@changeFee');
     Route::post('waybill/changeCharge', 'WaybillController@changeCharge');
-    Route::group(['prefix'=>'discharge'],function(){
-        Route::group(['prefix'=>'task'],function() {
-            Route::delete('delete','DischargeTaskController@destroyApi')->name('discharge.deleteApi');;
-            Route::post('store','DischargeTaskController@storeApi')->name('discharge.storeApi');
-            Route::put('update','DischargeTaskController@updateApi')->name('discharge.updateApi');
-            Route::put('updateFacilitator','DischargeTaskController@updateTaskFacilitatorApi')->name('discharge.updateTaskFacilitatorApi');
-            Route::put('updateColumn','DischargeTaskController@updateApi')->name('facilitator.updateColumnApi');
+});
 
+/** 人事管理 */
+Route::group(['prefix' => 'personnel'], function () {
+    /** 卸货 */
+    Route::group(['prefix' => 'discharge'], function () {
+        /** 任务 */
+        Route::group(['prefix' => 'task'], function () {
+            Route::delete('delete', 'DischargeTaskController@destroyApi')->name('discharge.deleteApi');;
+            Route::post('store', 'DischargeTaskController@storeApi')->name('discharge.storeApi');
+            Route::put('update', 'DischargeTaskController@updateApi')->name('discharge.updateApi');
+            Route::put('updateFacilitator', 'DischargeTaskController@updateTaskFacilitatorApi')->name('discharge.updateTaskFacilitatorApi');
+            Route::put('updateColumn', 'DischargeTaskController@updateApi')->name('facilitator.updateColumnApi');
         });
     });
 });
@@ -137,10 +143,10 @@ Route::group(['prefix' => 'ownerMaterial'],function(){
 });
 
 /** 供应商 */
-Route::group(['prefix' => 'supplier'],function(){
-    Route::post('store','SupplierController@storeApi')->name('supplier.storeApi');
-    Route::post('update','SupplierController@updateApi')->name('supplier.updateApi');
-    Route::delete('{id}','SupplierController@destroyApi')->name('supplier.destroyApi');
+Route::group(['prefix' => 'supplier'], function () {
+    Route::post('store', 'SupplierController@storeApi')->name('supplier.storeApi');
+    Route::post('update', 'SupplierController@updateApi')->name('supplier.updateApi');
+    Route::delete('{id}', 'SupplierController@destroyApi')->name('supplier.destroyApi');
 });
 /** 系统配置 */
 Route::group(['prefix' => 'configuration'],function(){
@@ -149,9 +155,10 @@ Route::group(['prefix' => 'configuration'],function(){
     Route::delete('{id}','ConfigurationController@destroyApi')->name('configuration.destroyApi');
 });
 
-/** 服务商 */
-Route::group(['prefix'=>'facilitator'],function(){
-    Route::post('store','FacilitatorController@storeApi')->name('facilitator.storeApi');
-    Route::put('update','FacilitatorController@updateApi')->name('facilitator.updateApi');
-    Route::delete('destroy','FacilitatorController@destroyApi')->name('facilitator.destroyApi');
+/** 装卸队 */
+Route::group(['prefix' => 'facilitator'], function () {
+    Route::post('store', 'FacilitatorController@storeApi')->name('facilitator.storeApi');
+    Route::put('update', 'FacilitatorController@updateApi')->name('facilitator.updateApi');
+    Route::delete('destroy', 'FacilitatorController@destroyApi')->name('facilitator.destroyApi');
+    Route::post('gainStatement', 'FacilitatorController@gainStatementApi')->name('facilitator.gainStatementApi');
 });

+ 23 - 19
routes/web.php

@@ -292,24 +292,7 @@ Route::group(['prefix'=>'transport'],function(){
         Route::resource('waybillFinancialExcepted','WaybillFinancialExceptedController');
     });
     Route::resource('waybill','WaybillController');
-    /** 卸货 */
-    Route::group(['prefix'=>'discharge'],function(){
-        /** 卸货任务 */
-        Route::group(['prefix'=>'task'],function(){
-            Route::get('index','DischargeTaskController@index');
-            Route::any('export','DischargeTaskController@export');
-        });
-        /** 结算报表 */
-        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');
-        });
-    });
+
 });
 
 /** 运输财务 */
@@ -549,12 +532,33 @@ Route::group(['prefix'=>'personnel'],function(){
     Route::get('relating',function (){return view('personnel/menuPersonnel');});
 
     Route::resource('laborReport','LaborReportController');
+    Route::group(['prefix'=>'discharge'],function(){
+        /** 卸货任务 */
+        Route::group(['prefix'=>'task'],function(){
+            Route::get('index','DischargeTaskController@index');
+            Route::any('export','DischargeTaskController@export');
+        });
+        /** 结算报表 */
+        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::get('getLaborReport','LaborReportController@getDailyLabor');
 
 /** 临时工报表 */
-
 Route::group(['prefix'=>'laborReport'],function(){
     Route::post('recover','LaborReportController@recover');
     Route::get('recycle','LaborReportController@recycle');

+ 14 - 0
tests/webApi/thirdPart/hengli/PackageController.http

@@ -0,0 +1,14 @@
+# For a quick start check out our HTTP Requests collection (Tools|HTTP Client|Open HTTP Requests Collection).
+##
+## Following HTTP Request Live Templates are available:
+## * 'gtrp' and 'gtr' create a GET request with or without query parameters;
+## * 'ptr' and 'ptrp' create a POST request with a simple or parameter-like body;
+## * 'mptr' and 'fptr' create a POST request to submit a form with a text or file field (multipart/form-data);
+
+GET http://bswas/api/thirdPart/hengli/weight/new
+Content-Type: application/json
+
+{"hengli0012,75451542409790,0_12,2021\/04\/01_10:29:17":null}
+###
+
+