Bladeren bron

Merge branch 'master' of http://101.133.135.193:20080/huhao/baoshi-was

 Conflicts:
	app/Http/Controllers/TestController.php
zhouzhendong 3 jaren geleden
bovenliggende
commit
de15f68a23
31 gewijzigde bestanden met toevoegingen van 433 en 13 verwijderingen
  1. 5 1
      app/Filters/ReceivingTaskFilters.php
  2. 1 1
      app/Http/Controllers/OrderController.php
  3. 5 1
      app/Http/Controllers/OrderIssueController.php
  4. 1 1
      app/Http/Controllers/OrderIssueProcessLogController.php
  5. 27 0
      app/Http/Controllers/ReceivingTaskController.php
  6. 1 0
      app/Http/Controllers/WorkOrderProcessLogController.php
  7. 1 0
      app/Http/Controllers/api/thirdPart/weixin/ProcurementController.php
  8. 4 0
      app/Imports/OrderIssueImport.php
  9. 60 0
      app/Jobs/SyncOrderIssueOrWorkOrderBySWMS.php
  10. 4 0
      app/Providers/AppServiceProvider.php
  11. 145 0
      app/Services/LogisticALiYunService.php
  12. 6 1
      app/Services/OrderIssueProcessLogService.php
  13. 8 1
      app/Services/OrderIssueService.php
  14. 60 0
      app/Services/SyncSWMSOrderIssueAndWorkOrderService.php
  15. 1 0
      app/Services/WorkOrderCancelInterceptService.php
  16. 1 0
      app/Services/WorkOrderDamageService.php
  17. 1 0
      app/Services/WorkOrderExpressAbnormalService.php
  18. 1 0
      app/Services/WorkOrderInformationChangeService.php
  19. 1 0
      app/Services/WorkOrderInterceptService.php
  20. 1 0
      app/Services/WorkOrderLogService.php
  21. 1 0
      app/Services/WorkOrderLossService.php
  22. 1 0
      app/Services/WorkOrderMistakeService.php
  23. 3 2
      app/Services/WorkOrderProcessLogService.php
  24. 12 1
      app/Services/WorkOrderService.php
  25. 4 0
      config/api.php
  26. 13 0
      config/api_logistic.php
  27. 2 1
      resources/views/inventory/stockInventory/mission.blade.php
  28. 1 1
      resources/views/store/inStorage/androidIndex.blade.php
  29. 25 0
      resources/views/store/receivingDashboard/receivingTableList/index.blade.php
  30. 23 0
      resources/views/store/receivingTasks/index.blade.php
  31. 14 2
      routes/web.php

+ 5 - 1
app/Filters/ReceivingTaskFilters.php

@@ -17,7 +17,7 @@ class ReceivingTaskFilters{
     protected $deliveryAppointmentCarQuery;
     protected $receiving;
     protected $filters = [
-        'id','owner_id','warehouse_id','appointment_number','created_at_start','created_at_end','number'
+        'id','owner_id','warehouse_id','appointment_number','created_at_start','created_at_end','number','data'
     ];
     protected $params = [];
 
@@ -55,6 +55,10 @@ class ReceivingTaskFilters{
         }
     }
 
+    public function data($ids){
+        $this->id($ids);
+    }
+
     public function id($ids){
         $this->searchWay($this->queryBuilder,$ids,'id');
     }

+ 1 - 1
app/Http/Controllers/OrderController.php

@@ -55,7 +55,7 @@ class OrderController extends Controller
         $customers = app(OwnerService::class)->getQuery()->select("code","name")->get();
         $page = $request["page"] ?? 1;
         $codes = DB::connection('oracle')->table('BAS_CODES')->select('code', 'codename_c')->where('codeid', 'SO_STS')->orderBy('code', 'asc')->get();
-        $orderIssueType = $this->orderIssueTypeService->getOrderIssueType();
+        $orderIssueType = $this->orderIssueTypeService->getAllOrderIssueTypes();
         return view('order/index/delivering', compact('orders', 'customers', 'request', 'codes', 'commodities', 'page', 'picktotraceids', 'orderIssueType', 'logistics','attributes'));
     }
 

+ 5 - 1
app/Http/Controllers/OrderIssueController.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
 use App\Events\AddOrUpdateOrderIssues;
 use App\Filters\OrderIssueFilters;
 use App\Imports\OrderIssueImport;
+use App\Jobs\SyncOrderIssueOrWorkOrderBySWMS;
 use App\Jobs\SyncRejectedBillRejectingStatusJob;
 use App\Logistic;
 use App\OracleDOCOrderHeader;
@@ -114,6 +115,7 @@ class OrderIssueController extends Controller
             ]);
         }
         SyncRejectedBillRejectingStatusJob::dispatch($orderIssue->order);
+        SyncOrderIssueOrWorkOrderBySWMS::dispatch($orderIssue,SyncOrderIssueOrWorkOrderBySWMS::$ORDER_ISSUE_TYPE);
         OrderIssueProcessLog::query()->create(['order_issue_id' => $orderIssue['id'], 'user_id' => Auth::user()['id'], 'content' => $request['content'], 'type' => '创建']);
         return redirect('order/issue/index');
     }
@@ -219,6 +221,7 @@ class OrderIssueController extends Controller
             $orderIssue = OrderIssue::query()->find($request->id);
             $orderIssue->update($data);
             SyncRejectedBillRejectingStatusJob::dispatch($orderIssue->order);
+            SyncOrderIssueOrWorkOrderBySWMS::dispatch($orderIssue,SyncOrderIssueOrWorkOrderBySWMS::$ORDER_ISSUE_TYPE);
             $this->logService->log(__METHOD__, __FUNCTION__, json_encode($request));
             return ['success' => true];
         } catch (Exception $e) {
@@ -582,7 +585,7 @@ class OrderIssueController extends Controller
     {
         $json = [];
         $row = [
-            '登记日期', '创建日期', '客户','商铺' ,'客户订单号', '原始承运商', '收货人', '收货电话', '省', '市', '区', '收货人地址',
+            '登记日期', '创建日期', '仓库','客户','商铺' ,'客户订单号', '原始承运商', '收货人', '收货电话', '省', '市', '区', '收货人地址',
             '原始运单号', '原始商品', '原始商品名称', '原始商品数量',
             '退回单号', '退单商品名', '退单商品条码', '退单商品数量', '是否正品', '退单状态', '退单备注',
             '操作类型', '说明', '操作者', '情况说明', '问题类别',
@@ -664,6 +667,7 @@ class OrderIssueController extends Controller
             $json[] = [
                 isset($order_issue->created_at) ? str_split($order_issue->created_at, 10)[0] : '',       // 登记日期
                 isset($order->created_at) ? str_split($order->created_at, 10)[0] : '',             // 创建日期
+                $order->warehouse->name ?? '',  // 仓库
                 $order->owner->name ?? '',      // 客户
                 $order->shop->name ?? '',       // 商铺
                 $order->client_code,            // 客户订单号

+ 1 - 1
app/Http/Controllers/OrderIssueProcessLogController.php

@@ -3,6 +3,7 @@
 namespace App\Http\Controllers;
 
 use App\Exceptions\Exception;
+use App\Jobs\SyncOrderIssueOrWorkOrderBySWMS;
 use App\OrderIssue;
 use App\OrderIssueProcessLog;
 use App\Services\OrderIssueProcessLogService;
@@ -96,7 +97,6 @@ class OrderIssueProcessLogController extends Controller
             foreach ($logs as $log) {
                 $result_data[$log->order_issue_id] = $log;
             }
-            app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($request->getContent()));
             return ['success' => true, 'logs' => $result_data];
         } catch (\Exception $e) {
             app('LogService')->log(__METHOD__, __FUNCTION__, json_encode($request->getContent()) . '||' . $e->getMessage() . "||" . $e->getTraceAsString());

+ 27 - 0
app/Http/Controllers/ReceivingTaskController.php

@@ -16,6 +16,7 @@ use Illuminate\Support\Facades\Date;
 use Illuminate\Support\Facades\Gate;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Http;
+use Oursdreams\Export\Export;
 use Ramsey\Uuid\Uuid;
 
 class ReceivingTaskController extends Controller
@@ -148,4 +149,30 @@ class ReceivingTaskController extends Controller
         $ans_numbers = array_filter(preg_split('/[,, ]+/is', $ans_number_string));
         return ['success' => true, 'data' => $ans_numbers];
     }
+
+    public function exportExcel(Request $request, ReceivingTaskFilters $filter){
+        ini_set ('memory_limit', '1024M');
+        $items = ReceivingTask::query()->with(['items', 'owner', 'wareHouse', 'file', 'deliveryAppointmentCar'])->filter($filter)->orderByDesc('created_at')->paginate(50);
+        $json = [];
+        $row = ['收货任务号','状态','货主','ASN单号','投单时间','仓库','预约号','驾驶证号','收货类型'];
+        foreach ($items as $item){
+            $asnNos = [];
+            $item->items->each(function($receivingTaskItem)use(&$asnNos){
+                $asnNos[] = $receivingTaskItem->asn_no;
+            });
+            $asnNos = implode(",\r\n",$asnNos);
+            $json[] = [
+                $item->number,
+                $item->status,
+                isset($item->owner) ? $item->owner->name : '',
+                $asnNos,
+                isset($item->created_at) ? str_split($item->created_at, 10)[0] : '',
+                isset($item->wareHouse) ? $item->wareHouse->name : '',
+                isset($item->deliveryAppointmentCar) ? $item->deliveryAppointmentCar->appointment_number : '',
+                $item->plate_number,
+                $item->receiving_type
+            ];
+        }
+        return Export::make($row, $json, "开单入库");
+    }
 }

+ 1 - 0
app/Http/Controllers/WorkOrderProcessLogController.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Controllers;
 
+use App\Jobs\SyncOrderIssueOrWorkOrderBySWMS;
 use App\Services\WorkOrderProcessLogService;
 use App\Services\WorkOrderService;
 use App\WorkOrder;

+ 1 - 0
app/Http/Controllers/api/thirdPart/weixin/ProcurementController.php

@@ -238,6 +238,7 @@ class ProcurementController extends Controller
                 $procurementDeliver['signer']=$procurement->initiator ?? 0;
                 $procurementDeliver['created_at']=Carbon::now()->toDateTimeString();
                 $procurementDeliver['updated_at']=Carbon::now()->toDateTimeString();
+                $procurementDeliver['signed_at']=Carbon::now()->toDateString();
                 $procurementDeliver->save();
                 ProcurementCheckSheet::query()->create(['procurement_delivery_id'=>$procurementDeliver->id,'account_payable'=>$procurementDeliver->receipt_amount*$procurement->cost_price,'auditor'=>0]);
             }else{

+ 4 - 0
app/Imports/OrderIssueImport.php

@@ -3,6 +3,7 @@
 namespace App\Imports;
 
 use App\Events\AddOrUpdateOrderIssues;
+use App\Jobs\SyncOrderIssueOrWorkOrderBySWMS;
 use App\Jobs\SyncRejectedBillRejectingStatusJob;
 use App\OracleActAllocationDetails;
 use App\OracleDOCOrderHeader;
@@ -110,8 +111,11 @@ class OrderIssueImport implements ToCollection, WithHeadingRow, WithMultipleShee
                 $orderIssue = OrderIssue::query()->create($arr);
                 event(new AddOrUpdateOrderIssues([$orderIssue->order_id]));
                 SyncRejectedBillRejectingStatusJob::dispatch($orderIssue->order);
+
                 if ($orderIssue) {
                     array_push($exception, ['订单' . $row['原始运单号'] . '问题件创建成功!']);
+                    SyncOrderIssueOrWorkOrderBySWMS::dispatch($orderIssue,SyncOrderIssueOrWorkOrderBySWMS::$ORDER_ISSUE_TYPE);
+
                     OrderIssueProcessLog::query()->create(['order_issue_id' => $orderIssue['id'], 'user_id' => Auth::user()['id'], 'content' => '', 'type' => '创建']);
                 } else {
                     array_push($exception, ['订单' . $row['原始运单号'] . '问题件创建失败']);

+ 60 - 0
app/Jobs/SyncOrderIssueOrWorkOrderBySWMS.php

@@ -0,0 +1,60 @@
+<?php
+
+namespace App\Jobs;
+
+use App\OrderIssue;
+use App\Services\SyncSWMSOrderIssueAndWorkOrderService;
+use App\WorkOrder;
+use Illuminate\Bus\Queueable;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use Illuminate\Queue\InteractsWithQueue;
+use Illuminate\Queue\SerializesModels;
+
+class SyncOrderIssueOrWorkOrderBySWMS implements ShouldQueue
+{
+    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
+
+    public static $ORDER_ISSUE_TYPE = 1;
+    public static $WORK_ORDER_TYPE = 2;
+    /** @var OrderIssue */
+    private $orderIssue;
+    /** @var WorkOrder */
+    private $workOrder;
+    private $type;
+
+    /**
+     * Create a new job instance.
+     *
+     * @return void
+     */
+    public function __construct($params,$type)
+    {
+        $this->type = $type;
+        if($type == $this::$ORDER_ISSUE_TYPE){
+            $this->orderIssue = $params;
+        } else if($type == $this::$WORK_ORDER_TYPE){
+            $this->workOrder = $params;
+        }
+    }
+
+    /**
+     * Execute the job.
+     *
+     * @return void
+     */
+    public function handle()
+    {
+        /** @var SyncSWMSOrderIssueAndWorkOrderService  $service */
+        $service = app(SyncSWMSOrderIssueAndWorkOrderService::class);
+        if($this->type ==  $this::$ORDER_ISSUE_TYPE){
+            if($this->orderIssue instanceof WorkOrder){
+                $service->sendWorkOrder($this->workOrder);
+            } else if($this->orderIssue instanceof OrderIssue){
+                $service->sendOrderIssue($this->orderIssue);
+            }
+        } else if($this->type ==  $this::$WORK_ORDER_TYPE){
+            $service->sendWorkOrder($this->workOrder);
+        }
+    }
+}

+ 4 - 0
app/Providers/AppServiceProvider.php

@@ -34,6 +34,7 @@ use App\Services\InventoryAccountService;
 use App\Services\InventoryCompareService;
 use App\Services\LaborCompanyDispatchDetailService;
 use App\Services\LaborReportsCountingRecordService;
+use App\Services\LogisticALiYunService;
 use App\Services\LogisticSFService;
 use App\Services\LogisticYTOService;
 use App\Services\LogisticZopService;
@@ -106,6 +107,7 @@ use App\Services\StoreCheckingReceiveService;
 use App\Services\StoreItemService;
 use App\Services\StoreService;
 use App\Services\CheckActiveMenuService;
+use App\Services\SyncSWMSOrderIssueAndWorkOrderService;
 use App\Services\UnitService;
 use App\Services\UserOwnerGroupService;
 use App\Services\UserService;
@@ -282,6 +284,7 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('LaborReportsCountingRecordService', LaborReportsCountingRecordService::class);
         app()->singleton('LogService', LogService::class);
         app()->singleton('LogisticAliJiSuApiService',LogisticAliJiSuApiService::class);
+        app()->singleton('LogisticALiYunService',LogisticALiYunService::class);
         app()->singleton('LogisticSFService', LogisticSFService::class);
         app()->singleton('LogisticService', LogisticService::class);
         app()->singleton('LogisticSyncRecordService', LogisticSyncRecordService::class);
@@ -430,6 +433,7 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('WorkOrderService',WorkOrderService::class);
         app()->singleton('WorkOrderTypeService',WorkOrderTypeService::class);
         app()->singleton('LaborCompanyDispatchDetailService',LaborCompanyDispatchDetailService::class);
+        app()->singleton('SyncSWMSOrderIssueAndWorkOrderService',SyncSWMSOrderIssueAndWorkOrderService::class);
     }
 
     private function registerObserver()

+ 145 - 0
app/Services/LogisticALiYunService.php

@@ -0,0 +1,145 @@
+<?php
+
+namespace App\Services;
+
+use App\Traits\ServiceAppAop;
+
+class LogisticALiYunService
+{
+    use ServiceAppAop;
+
+    public function query($logistic_number)
+    {
+        $host = config('api_logistic.ALiYun.prod.search.host');
+        $path = config('api_logistic.ALiYun.prod.search.path');
+        $headers = [
+            "Authorization:APPCODE " . config('api_logistic.ALiYun.prod.app-code')
+        ];
+        $url = $host.$path.'?no='.$logistic_number;
+        $curl = curl_init();
+        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, config('api_logistic.ALiYun.prod.method'));
+        curl_setopt($curl, CURLOPT_URL, $url);
+        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
+        curl_setopt($curl, CURLOPT_FAILONERROR, false);
+        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+        curl_setopt($curl, CURLOPT_HEADER, true);
+        if (1 == strpos("$" . $host, "https://")) {
+            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
+            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
+        }
+        $out_put = curl_exec($curl);
+        dd($out_put);
+        $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
+
+        list($header, $body) = explode("\r\n\r\n", $out_put, 2);
+        if ($httpCode == 200) {
+            print("正常请求计费(其他均不计费)<br>");
+            print($body);
+        } else {
+            if ($httpCode == 400 && strpos($header, "Invalid Param Location") !== false) {
+                print("参数错误");
+            } elseif ($httpCode == 400 && strpos($header, "Invalid AppCode") !== false) {
+                print("AppCode错误");
+            } elseif ($httpCode == 400 && strpos($header, "Invalid Url") !== false) {
+                print("请求的 Method、Path 或者环境错误");
+            } elseif ($httpCode == 403 && strpos($header, "Unauthorized") !== false) {
+                print("服务未被授权(或URL和Path不正确)");
+            } elseif ($httpCode == 403 && strpos($header, "Quota Exhausted") !== false) {
+                print("套餐包次数用完");
+            } elseif ($httpCode == 403 && strpos($header, "Api Market Subscription quota exhausted") !== false) {
+                print("套餐包次数用完,请续购套餐");
+            } elseif ($httpCode == 500) {
+                print("API网关错误");
+            } elseif ($httpCode == 0) {
+                print("URL错误");
+            } else {
+                print("参数名错误 或 其他错误");
+                print($httpCode);
+                $headers = explode("\r\n", $header);
+                $headList = array();
+                foreach ($headers as $head) {
+                    $value = explode(':', $head);
+                    $headList[$value[0]] = $value[1];
+                }
+                print($headList['x-ca-error-message']);
+            }
+        }
+    }
+
+    public function format($response, $logistic_number): array
+    {
+        $result = [];
+        if (!isset($response) || ($response && $response->status != 0)) {
+            return [
+                'logistic_number' => $logistic_number,
+            ];
+        } else {
+            try {
+                if ($response->result->number ?? false) $result['logistic_number'] = $response->result->number;
+            } catch (\Exception $e) {
+                LogService::log(LogisticYTOService::class, "AliJiSu快递信息异常", $response);
+            }
+            $list = $response->result->list;
+            if (!empty($list) && is_array($list)) {
+                $lastNativeRoute = $list[0];
+                $result['status'] = $this->getStatus($response);
+                if ($result['status'] == '已签收') $result['received_at'] = $lastNativeRoute->time;
+                $result['transfer_status'] = $this->getTransferStatus($list);
+                $result['routes_length'] = array_key_exists('transfer_status', $result) ? count($result['transfer_status']) : 0;
+            } else {
+                $result['status'] = null;
+                $result['transfer_status'] = [];
+            }
+            if (!array_key_exists('status', $result)) {
+                $result['status'] = null;
+                $result['transfer_status'] = [];
+            }
+            return $result;
+        }
+    }
+
+    /**
+     * @param $nativeData
+     * @return string
+     */
+    private function getStatus($nativeData): string
+    {
+        $status = null;
+        switch ($nativeData->result->deliverystatus) {
+            case '1':
+                $status = '在途';
+                break;
+            case '2':
+                $status = '派送中';
+                break;
+            case '3':
+                $status = '已签收';
+                break;
+            case '4':
+                $status = '派送异常';
+                break;
+            default:
+                $status = '其他';
+        }
+        return $status;
+    }
+
+    /**
+     * @param $nativeRoutes
+     * @return array
+     */
+    private function getTransferStatus($nativeRoutes): array
+    {
+        $transferStatus = [];
+        foreach ($nativeRoutes as $nativeRoute) {
+            $item = [];
+            $item['accept_time'] = $nativeRoute->time;
+            $item['accept_address'] = $nativeRoute->status;
+            $item['remark'] = "";
+            $transferStatus[] = $item;
+        }
+        return $transferStatus;
+    }
+
+
+}

+ 6 - 1
app/Services/OrderIssueProcessLogService.php

@@ -2,6 +2,7 @@
 
 namespace App\Services;
 
+use App\Jobs\SyncOrderIssueOrWorkOrderBySWMS;
 use App\OrderIssue;
 use App\OrderIssueProcessLog;
 use Illuminate\Support\Facades\Auth;
@@ -22,11 +23,13 @@ class OrderIssueProcessLogService
         foreach ($ids as $id) {
             $logs[] = OrderIssueProcessLog::query()
                 ->create(['order_issue_id' => $id, 'content' => $content, 'user_id' => $user_id, 'type' => '处理']);
+            $orderIssue = OrderIssue::query()->where("id",$id)->first();
+            SyncOrderIssueOrWorkOrderBySWMS::dispatch($orderIssue,SyncOrderIssueOrWorkOrderBySWMS::$ORDER_ISSUE_TYPE);
         }
         return $logs;
     }
 
-    public function create(array  $params)
+    public function create(array $params)
     {
         $ids = $params['ids'];
         $content = $params['content'];
@@ -34,6 +37,8 @@ class OrderIssueProcessLogService
         $logs = [];
         foreach ($ids as $id) {
             $logs[] = OrderIssueProcessLog::query()->create(['order_issue_id' => $id, 'content' => $content, 'user_id' => $user_id, 'type' => $params['type']]);
+            $orderIssue = OrderIssue::query()->where("id",$id)->first();
+            SyncOrderIssueOrWorkOrderBySWMS::dispatch($orderIssue,SyncOrderIssueOrWorkOrderBySWMS::$ORDER_ISSUE_TYPE);
         }
         return OrderIssueProcessLog::query()->with('user')->whereIn('id',data_get($logs,'*.id'))->get();
     }

+ 8 - 1
app/Services/OrderIssueService.php

@@ -3,6 +3,7 @@
 namespace App\Services;
 
 use App\Events\AddOrUpdateOrderIssues;
+use App\Jobs\SyncOrderIssueOrWorkOrderBySWMS;
 use App\Jobs\SyncRejectedBillRejectingStatusJob;
 use App\OracleActAllocationDetails;
 use App\OracleDOCASNHeader;
@@ -92,6 +93,7 @@ class OrderIssueService
         event(new AddOrUpdateOrderIssues(data_get($ordersIssues, '*.order_id')));
         $ordersIssues->each(function ($item){
             SyncRejectedBillRejectingStatusJob::dispatch($item->order);
+            SyncOrderIssueOrWorkOrderBySWMS::dispatch($item,SyncOrderIssueOrWorkOrderBySWMS::$ORDER_ISSUE_TYPE);
         });
 //        $this->同步退单状态($ordersIssues);
         $param = [
@@ -133,7 +135,6 @@ class OrderIssueService
             $ordersIssues->each(function ($item){
                 SyncRejectedBillRejectingStatusJob::dispatch($item->order);
             });
-//            $this->同步退单状态($ordersIssues);
             $param = [
                 'ids' => data_get($ordersIssues, '*.id'),
                 'content' => '',
@@ -141,6 +142,9 @@ class OrderIssueService
                 'type' => '创建'
             ];
             $this->orderIssueProcessLogService->create($param);
+            $ordersIssues->each(function ($item) {
+                SyncOrderIssueOrWorkOrderBySWMS::dispatch($item,SyncOrderIssueOrWorkOrderBySWMS::$ORDER_ISSUE_TYPE);
+            });
             $this->logService->log(__METHOD__, __FUNCTION__, '创建问题件' . count($innerParams) . json_encode($innerParams));
             return true;
         } catch (\Exception $e) {
@@ -183,6 +187,7 @@ class OrderIssueService
             $orderIssue->order = $order;
             event(new AddOrUpdateOrderIssues([$orderIssue['order_id']]));
             SyncRejectedBillRejectingStatusJob::dispatch($order);
+            SyncOrderIssueOrWorkOrderBySWMS::dispatch($orderIssue,SyncOrderIssueOrWorkOrderBySWMS::$ORDER_ISSUE_TYPE);
 
             $this->logService->log(__METHOD__, __FUNCTION__, '创建问题件' . json_encode($orderIssue));
         } catch (\Exception $e) {
@@ -233,6 +238,7 @@ class OrderIssueService
             $orderIssue->order_id = $order['id'];
             $orderIssue->save();
             SyncRejectedBillRejectingStatusJob::dispatch($order);
+            SyncOrderIssueOrWorkOrderBySWMS::dispatch($orderIssue,SyncOrderIssueOrWorkOrderBySWMS::$ORDER_ISSUE_TYPE);
             $this->logService->log(__METHOD__, __FUNCTION__, '创建 Order' . json_encode($order));
         }
         return $orderIssue;
@@ -249,6 +255,7 @@ class OrderIssueService
         OrderPackage::query()->create(['order_id' => $order['id'], 'logistic_number' => $arr['logistic_number_return']]);
         $orderIssue->update(['order_id' => $order['id']]);
         SyncRejectedBillRejectingStatusJob::dispatch($order);
+        SyncOrderIssueOrWorkOrderBySWMS::dispatch($orderIssue,SyncOrderIssueOrWorkOrderBySWMS::$ORDER_ISSUE_TYPE);
         event(new AddOrUpdateOrderIssues([$orderIssue['order_id']]));
         return $orderIssue;
     }

+ 60 - 0
app/Services/SyncSWMSOrderIssueAndWorkOrderService.php

@@ -0,0 +1,60 @@
+<?php
+
+
+namespace App\Services;
+
+use App\OrderIssue;
+use App\OrderPackage;
+use App\WorkOrder;
+use Illuminate\Support\Facades\Http;
+
+class SyncSWMSOrderIssueAndWorkOrderService
+{
+    private function getLogisticNumber($orderId)
+    {
+        return OrderPackage::query()->where("order_id", $orderId)->get()->map(function ($item) {
+            return $item->logistic_number;
+        });
+    }
+
+    public function sendOrderIssue(OrderIssue $orderIssue)
+    {
+        $url = config('api.java.base') . config('api.java.reject.syncOrderIssue');
+        $logisticNumbers = $this->getLogisticNumber($orderIssue->order_id);
+        if (sizeof($logisticNumbers) == 0) {
+            return;
+        }
+        $request = [
+            'packageCodes' => $logisticNumbers
+        ];
+        $this->sendMessage($request, $url, "问题件通知SWMS");
+    }
+
+
+    public function sendWorkOrder(WorkOrder $workOrder)
+    {
+        $url = config('api.java.base') . config('api.java.reject.syncWorkOrder');
+        $logisticNumbers = $this->getLogisticNumber($workOrder->order_id);
+        if (sizeof($logisticNumbers) == 0) {
+            return;
+        }
+        $request = [
+            'packageCodes' => $logisticNumbers
+        ];
+        $this->sendMessage($request, $url, "工单创建通知SWMS");
+    }
+
+    public function sendMessage($requestBody, $url, $type)
+    {
+        app('LogService')->log($type, "通知服务端", json_encode($requestBody));
+        $http = Http::post($url, $requestBody);
+        if (!$http->successful()) {
+            app('LogService')->log($type, "sendPiece", '发送失败:' . $http->body());
+            return;
+        }
+        $result = $http->json();
+        if ($result["code"] != 200) {
+            app('LogService')->log($type, "sendPiece", '服务端错误:' . $http->body());
+        }
+    }
+}

+ 1 - 0
app/Services/WorkOrderCancelInterceptService.php

@@ -79,6 +79,7 @@ class WorkOrderCancelInterceptService extends WorkOrderService
             'type' => '创建',
         ]);
         $this->logService->createLog($detail, '创建', '创建工单');
+        $this->sendSWNSMessage($workOrder);
     }
 
     public function batchStore($params)

+ 1 - 0
app/Services/WorkOrderDamageService.php

@@ -86,6 +86,7 @@ class WorkOrderDamageService extends WorkOrderService
             'type' => '创建',
         ]);
         $this->logService->createLog($detail, '创建', '创建工单');
+        $this->sendSWNSMessage($workOrder);
     }
 
     /**

+ 1 - 0
app/Services/WorkOrderExpressAbnormalService.php

@@ -89,6 +89,7 @@ class WorkOrderExpressAbnormalService extends WorkOrderService
             'type' => '创建',
         ]);
         $this->logService->createLog($detail, '创建', '创建工单');
+        $this->sendSWNSMessage($work_order);
     }
 
     /**

+ 1 - 0
app/Services/WorkOrderInformationChangeService.php

@@ -89,6 +89,7 @@ class WorkOrderInformationChangeService extends WorkOrderService
         ]);
 
         $this->logService->createLog($detail, '创建', '创建工单');
+        $this->sendSWNSMessage($workOrder);
     }
 
     /**

+ 1 - 0
app/Services/WorkOrderInterceptService.php

@@ -103,6 +103,7 @@ class WorkOrderInterceptService extends WorkOrderService
             'type' => '创建',
         ]);
         $this->logService->createLog($detail, '创建', '创建');
+        $this->sendSWNSMessage($work_order);
     }
 
     /**

+ 1 - 0
app/Services/WorkOrderLogService.php

@@ -2,6 +2,7 @@
 
 namespace App\Services;
 
+use App\Jobs\SyncOrderIssueOrWorkOrderBySWMS;
 use App\Traits\ServiceAppAop;
 use App\WorkOrderDetail;
 use App\WorkOrderLog;

+ 1 - 0
app/Services/WorkOrderLossService.php

@@ -81,6 +81,7 @@ class WorkOrderLossService extends WorkOrderService
         ]);
 
         $this->logService->createLog($detail, '创建', '创建工单');
+        $this->sendSWNSMessage($work_order);
     }
 
     /**

+ 1 - 0
app/Services/WorkOrderMistakeService.php

@@ -79,6 +79,7 @@ class WorkOrderMistakeService extends WorkOrderService
             'type' => '创建',
         ]);
         $this->logService->createLog($detail, '创建', '商家创建');
+        $this->sendSWNSMessage($work_order);
     }
 
     /**

+ 3 - 2
app/Services/WorkOrderProcessLogService.php

@@ -2,6 +2,7 @@
 
 namespace App\Services;
 
+use App\Jobs\SyncOrderIssueOrWorkOrderBySWMS;
 use App\OrderIssue;
 use App\Traits\ServiceAppAop;
 use App\User;
@@ -35,7 +36,6 @@ class WorkOrderProcessLogService
 
         /** @var WorkOrder $work_order */
         $work_order = $detail->workOrder;
-
         if (in_array($work_order->status, ['宝时处理', '宝时终审'])
             && $work_order->bao_shi_tag != WorkOrder::$NO_STATE_TAG) {
 
@@ -50,7 +50,7 @@ class WorkOrderProcessLogService
             $detail->workOrder()->whereIn('status', [2, 6])->update(['owner_tag' => 1]);
         }
         $process_log->setAttribute('user', $user);
-
+        SyncOrderIssueOrWorkOrderBySWMS::dispatch($work_order,SyncOrderIssueOrWorkOrderBySWMS::$ORDER_ISSUE_TYPE);
         return $process_log;
     }
 
@@ -70,6 +70,7 @@ class WorkOrderProcessLogService
             $detail = $workOrder->details()->where('order_issue_type_id',$workOrder->order_issue_type_id)->orderByDesc('created_at')->first();
             if (!$detail) continue;
             $process_logs[] = $this->createProcessLog($detail, $params, $user);
+            SyncOrderIssueOrWorkOrderBySWMS::dispatch($workOrder,SyncOrderIssueOrWorkOrderBySWMS::$ORDER_ISSUE_TYPE);
         }
         return $process_logs;
     }

+ 12 - 1
app/Services/WorkOrderService.php

@@ -2,6 +2,7 @@
 
 namespace App\Services;
 
+use App\Jobs\SyncOrderIssueOrWorkOrderBySWMS;
 use App\Jobs\SyncRejectedBillRejectingStatusJob;
 use App\OrderIssue;
 use App\OrderIssueProcessLog;
@@ -64,9 +65,10 @@ class WorkOrderService
                 'last_handler_id' => Auth::id() ?? '',
                 'created_at' => now(),
             ]);
+            SyncOrderIssueOrWorkOrderBySWMS::dispatch($workOrder,SyncOrderIssueOrWorkOrderBySWMS::$WORK_ORDER_TYPE);
             return $workOrder;
         }
-        return WorkOrder::query()->create([
+        $workOrder  = WorkOrder::query()->create([
             'order_id' => $order->id,
             'logistic_id' => $order->logistic_id ?? '',
             'owner_id' => $order->owner_id ?? '',
@@ -80,6 +82,8 @@ class WorkOrderService
             'type' => $process_progress,
             'last_handler_id' => Auth::id() ?? '',
         ]);
+        SyncOrderIssueOrWorkOrderBySWMS::dispatch($workOrder,SyncOrderIssueOrWorkOrderBySWMS::$WORK_ORDER_TYPE);
+        return $workOrder;
     }
 
     public function createAndNotification($order, $orderIssueType, $remark, $process_progress = '商家创建'): WorkOrder
@@ -107,6 +111,7 @@ class WorkOrderService
             'work_order_status' => 0,
         ]);
         $this->logService->createLog($detail, '完结', '完结工单');
+        $this->sendSWNSMessage($workOrder);
     }
 
     /**
@@ -131,6 +136,8 @@ class WorkOrderService
         ]);
         $this->detailService->endDetail($detail);                       // 标记为处理过
         $this->logService->createLog($detail, '完结', '货主完结');
+        $this->sendSWNSMessage($detail->workOrder);
+
     }
 
     /**
@@ -441,6 +448,7 @@ class WorkOrderService
         $order_issue->logs()->insert($processLogs);
         $this->orderIssueService->endOrderIssues([$order_issue->id]);
         $detail->processLogs()->where('status', '未同步')->update(['status' => '同步']);
+        $this->sendSWNSMessage($work_order);
     }
 
     public function customRejectedStatus($ids, $customRejectedStatus): int
@@ -482,4 +490,7 @@ class WorkOrderService
         return ['success' => true];
     }
 
+    public function sendSWNSMessage($workOrder){
+        SyncOrderIssueOrWorkOrderBySWMS::dispatch($workOrder,SyncOrderIssueOrWorkOrderBySWMS::$WORK_ORDER_TYPE);
+    }
 }

+ 4 - 0
config/api.php

@@ -110,6 +110,10 @@ return [
             "log" => [
                 "record" => "api/piece/user/record/create",
             ]
+        ],
+        "reject" => [
+            "syncOrderIssue" => "api/order/packageManage/modifyOrderIssues",
+            "syncWorkOrder" => "api/order/packageManage/modifyWorkOrders",
         ]
     ]
 ];

+ 13 - 0
config/api_logistic.php

@@ -166,6 +166,19 @@ return [
             ],
         ],
     ],
+    'ALiYun' => [
+        'prod' => [
+            'app-key' => '203946797',
+            'app-secret' => '5jlb4OfKkVFAbEXa7ebvnSQt5wCLQqWb',
+            'app-code' => '531dca65c4df41bfaa0c58cb52f444db',
+            'type' => 'auto',
+            'method' => 'GET',
+            'search' => [
+                'host' => 'https://wuliu.market.alicloudapi.com/',
+                'path' => 'kdi',
+            ],
+        ],
+    ],
     'init_date' => '2021-05-17 23:59:59',
     'querying_days' => 15,
     'DB' => [

+ 2 - 1
resources/views/inventory/stockInventory/mission.blade.php

@@ -117,7 +117,8 @@
                         total:'{{$inventory->total}}',end_at:'{{$inventory->end_at}}',
                         start_at:'{{$inventory->start_at}}',type:'{{$inventory->type}}',
                         difference:'{{$inventory->difference}}',
-                        remark:'{{$inventory->remark}}',ignored:'{{$inventory->ignored}}',auditor:'{{$inventory->auditor?$inventory->userAuditor->name:''}}',
+                        remark:'{{$inventory->remark}}',ignored:'{{$inventory->ignored}}',
+                        @if($inventory->userAuditor)auditor:'{{$inventory->userAuditor['name']}}',@endif
                     },
                     @endforeach
                 ],

+ 1 - 1
resources/views/store/inStorage/androidIndex.blade.php

@@ -27,7 +27,7 @@
                 <a href="{{url('store/inStorage/boxBindShelf')}}"><button class="btn btn-info w-75 h-25 mt-3 text-white" style="height: 60px"><h4>新箱上架</h4></button></a>
                 <a href="{{url('store/inStorage/boxBindModel')}}"><button class="btn btn-info w-75 h-25 mt-3 text-white" style="height: 60px"><h4>料箱型号</h4></button></a>
                 <a href="{{url('store/inStorage/commodityBindModel')}}"><button class="btn btn-info w-75 h-25 mt-3 text-white" style="height: 60px"><h4>商品型号</h4></button></a>@endcan
-                @can("入库管理-手持入库-收")<a href="{{url('store/blindReceive')}}"><button class="btn btn-info w-75 h-25 mt-3 text-white" style="height: 60px"><h4>盲收</h4></button></a>@endcan
+                @can("入库管理-手持入库-收")<a href="{{url('store/blindReceive')}}"><button class="btn btn-info w-75 h-25 mt-3 text-white" style="height: 60px"><h4>盲收</h4></button></a>@endcan
                 @can("运输管理-编辑")<a href="{{url('transport/waybill/android/shipment')}}"><button class="btn btn-info w-75 h-25 mt-3 text-white" style="height: 60px"><h4>运单发货</h4></button></a>@endcan
                 @can("运输管理-承运商调度")<a href="{{url('transport/waybill/delivering')}}"><button class="btn btn-info w-75 h-25 mt-3 text-white" style="height: 60px"><h4>运单调配</h4></button></a>@endcan
                 <a href="{{url('order/wave/picking')}}"><button class="btn btn-info w-75 h-25 mt-3 text-white" style="height: 60px"><h4>波次分拣</h4></button></a>

+ 25 - 0
resources/views/store/receivingDashboard/receivingTableList/index.blade.php

@@ -49,6 +49,9 @@
             <div class="form-group m-2">
                 <button class="form-control btn btn-sm btn-info" @click="searchData()">查询</button>
             </div>
+            <div class="form-group m-2">
+                <button class="form-control btn btn-sm btn-success" @click="downExcel()">导出EXCEL</button>
+            </div>
         </div>
         <!--            表格-->
         <table class="table table-striped table-bordered table-hover text-nowrap waybill-table td-min-width-80"
@@ -457,6 +460,28 @@
                         }
                     });
                 },
+                downExcel() {
+                    let url = this.getBaseUrl();
+                    url += '/api/device/check/receiveBoard/export';
+                    let search = this.getSearch();
+                    axios.post(url, search).then(res => {
+                        if (res.data.code === 200) {
+                            let filename = res.data.data;
+                            let downUrl = this.getBaseUrl() + '/api/device/check/receiveBoard/download?filename=' + filename;
+                            let link = document.createElement('a');
+                            link.style.display = 'none';
+                            link.href = downUrl;
+                            link.download = `${filename}.xlsx`;
+                            document.body.appendChild(link);
+                            link.click();
+                            document.body.removeChild(link);
+                            tempTip.showSuccess('导出成功!');
+                        } else {
+                            tempTip.setDuration(3000);
+                            tempTip.show(res.data.data);
+                        }
+                    })
+                }
 
             },
 

+ 23 - 0
resources/views/store/receivingTasks/index.blade.php

@@ -16,6 +16,17 @@
                             @click="printReceivingTask">打印任务清单
                     </button>
                 @endcan
+                    <span class="dropdown">
+                        <button type="button"
+                                class="btn btn-outline-dark btn-sm form-control-sm dropdown-toggle tooltipTarget"
+                                data-toggle="dropdown" title="导出所有页将会以搜索条件得到的筛选结果,将其全部记录(每一页)导出"
+                                :class="[checkData.length>0?'btn-dark text-light':'']">导出Excel
+                        </button>
+                        <div class="dropdown-menu">
+                            <a class="dropdown-item" href="javascript:" @click="taskExcelExport(false)">导出勾选内容</a>
+                            <a class="dropdown-item" href="javascript:" @click="taskExcelExport(true)">导出所有页</a>
+                        </div>
+                    </span>
             </div>
             <div>
                 <table class="table table-sm table-striped table-hover table-bordered" id="table">
@@ -56,6 +67,7 @@
     <script type="text/javascript" src="{{mix('js/queryForm/header.js')}}"></script>{{--新版2--}}
     <script type="text/javascript" src="{{asset('js/element-ui.js') }}"></script>
     <script type="text/javascript" src="{{mix('js/lodop/LodopFuncs.js')}}"></script>
+    <script type="text/javascript" src="{{mix('js/queryForm/export.js')}}"></script>
 
     <script type="text/javascript" src='http://localhost:18000/CLodopfuncs.js?name=CLODOPA'></script>
 
@@ -63,6 +75,7 @@
         let vue = new Vue({
             el: "#list",
             data: {
+                checkData:[],
                 receiving_tasks: [],
                 total: 0,
                 selectTr: 0,
@@ -279,6 +292,16 @@
                         });
                     }
                 },
+                taskExcelExport(sign){
+                    let url = '{{url('store/receivingTask/exportExcel')}}';
+                    let token = '{{ csrf_token() }}';
+                    console.log(checkData);
+                    if (sign) {
+                        excelExport(true, checkData, url, this.total, token);
+                    } else {
+                        excelExport(false, checkData, url, null, token);
+                    }
+                },
                 clodopPrint() {
                     let {
                         number,               // 收货任务号

+ 14 - 2
routes/web.php

@@ -37,6 +37,7 @@ Route::prefix('store')->group(function(){
     Route::prefix('receivingTask')->group(function(){
         Route::get("/index","ReceivingTaskController@index");
         Route::get("/create","ReceivingTaskController@create");
+        Route::post("/exportExcel","ReceivingTaskController@exportExcel");
     });
 });
 
@@ -605,10 +606,21 @@ Route::group(['middleware' => 'auth'], function ($route) {
         /** 手持入库 */
         Route::group(['prefix' => 'handInStorage'], function () {
             Route::get('receive', function () {
-                return view('store.handInStorage.receive');
+                /** @var \App\Services\UserService  $userService */
+                $userService=app(\App\Services\UserService::class);
+                $ownerIds=$userService->getUserUnderOwnerIdArr();
+                $isGm=\App\Owner::query()->where("code","GM")->first()['id'];
+                if (in_array($isGm,$ownerIds)){
+                    return view('store.handInStorage.receive');
+                }
             });//收货页面
             Route::get('putaway', function () {
-                return view('store.handInStorage.putaway');
+                $userService=app(\App\Services\UserService::class);
+                $ownerIds=$userService->getUserUnderOwnerIdArr();
+                $isGm=\App\Owner::query()->where("code","GM")->first()['id'];
+                if (in_array($isGm,$ownerIds)){
+                    return view('store.handInStorage.putaway');
+                }
             });//上架页面
             Route::get('inventoryInfo', function () {
                 return view('store.handInStorage.inventoryInfo');