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

登录信息返回
登录页面图修改
设备管理页面修改

Zhouzhendong 4 лет назад
Родитель
Сommit
f7f6a225b5

+ 2 - 2
app/Http/ApiControllers/LoginController.php

@@ -48,7 +48,7 @@ class LoginController
         //验证用户登录
         if (!$user || !Hash::check(base64_decode($password),$user->password)){
             $response["message"] = "用户名或密码错误";
-            $response["status_code"] = 401;
+            $response["status_code"] = 410;
             return response()->json($response);
         }
 
@@ -64,7 +64,7 @@ class LoginController
 
         try {
             $response["data"] = ["token"=>app("UserService")->getJWTToken($user,$privateKey),
-                "menu"=>$this->getMenu($user),"info"=>json_encode(["id"=>$user->id,"name"=>$userName])];
+                "menu"=>$this->getMenu($user),"info"=>["id"=>$user->id,"name"=>$user->name]];
             app("UserService")->setOrRefreshCache($user);
             return response()->json($response);
         }catch (\Exception $e){

+ 98 - 597
app/Http/Controllers/TestController.php

@@ -189,35 +189,59 @@ class TestController extends Controller
         set_time_limit(0);
         $ip = '127.0.0.1';
         $port = 1935;
-        if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) {
-            echo "socket_create() 失败的原因是:".socket_strerror($sock)."\n";
+        if(($sock = \socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) {
+            echo "socket_create() 失败的原因是:".\socket_strerror($sock)."\n";
         }
-        if(($ret = socket_bind($sock,$ip,$port)) < 0) {
-            echo "socket_bind() 失败的原因是:".socket_strerror($ret)."\n";
+        if(($ret = \socket_bind($sock,$ip,$port)) < 0) {
+            echo "socket_bind() 失败的原因是:".\socket_strerror($ret)."\n";
         }
-        if(($ret = socket_listen($sock,4)) < 0) {
-            echo "socket_listen() 失败的原因是:".socket_strerror($ret)."\n";
+        if(($ret = \socket_listen($sock,4)) < 0) {
+            echo "socket_listen() 失败的原因是:".\socket_strerror($ret)."\n";
         }
         $count = 0;
         do {
-            if (($msgsock = socket_accept($sock)) < 0) {
-                echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
+            if (($msgsock = \socket_accept($sock)) < 0) {
+                echo "socket_accept() failed: reason: " . \socket_strerror($msgsock) . "\n";
                 break;
             } else {
                 $msg ="测试成功!\n";
-                socket_write($msgsock, $msg, strlen($msg));
+                \socket_write($msgsock, $msg, strlen($msg));
                 echo "测试成功了啊\n";
-                $buf = socket_read($msgsock,8192);
+                $buf = \socket_read($msgsock,8192);
                 $talkback = "收到的信息:$buf\n";
                 echo $talkback;
                 if(++$count >= 5){break;}
             }
-            socket_close($msgsock);
+            \socket_close($msgsock);
         }while (true);
-        socket_close($sock);
+        \socket_close($sock);
     }
     public function test(Request $request)
     {
+        return view('equipment.index');
+        //return response()->json(["info"=>["id"=>1,"name"=>2]]);
+        return response()->json(["info"=>["id"=>1,"name"=>2]]);
+        dd(time());
+        ini_set('max_execution_time',-1);
+        $worker = new Worker('tcp://0.0.0.0:9865');
+
+        $worker->onConnect = function ($conn) {
+            echo '新的连接来了';
+        };
+        $worker->onClose = function ($conn) {
+            echo '连接断开了';
+        };
+        $worker->onMessage = function ($conn, $message) {
+            $http_resonse = "HTTP/1.1 200 OK\r\n";
+            $http_resonse .= "Connection: keep-alive\r\n";
+            $http_resonse .= "Server: php socket server\r\n";
+            $http_resonse .= "Content-length: 11\r\n\r\n";
+            $http_resonse .= "hello world";
+            fwrite($conn, $http_resonse);
+        };
+
+        $worker->run();
+        return;
         $service = new LogisticService();
         foreach (ReceiveRecord::query()->where("logistic_id",0)->get() as $receive){
             $name = $service->assertExpressCompany($receive->logistic_number);
@@ -256,458 +280,7 @@ class TestController extends Controller
             ]);
         }
     }
-    public function test1()
-    {
-        $a = new \App\Http\Controllers\api\thirdPart\syrius\producer\OrderController();
-        dd($a->createOrder($this->t2())->body());
-    }
-
-
-    public function init_labor_company_dispatch()
-    {
-        $dispatches = LaborCompanyDispatch::all();
-        foreach ($dispatches as $dispatch) {
-            $dispatch->warehouse_id = $dispatch->laborCompany->warehouse_id ?? null;
-            $dispatch->save();
-        }
-    }
-
-    private function t2()
-    {
-        $task = new Task();
-        $task->id = "TEST0004";
-        #$task->batchId = "WTEST0001";
-        $task->warehouseId = "101";
-        $task->type = Task::PUTAWAY;
-        $task->attributes = [
-            "customer" => "幼岚",
-        ];
-        $task->storages = [["serialNo"=>"1635055429594424"]];
-        $task->items = [
-            $this->p1(),
-            $this->p2(),
-        ];
-        return $task->get();
-    }
-    private function p1()
-    {
-        $taskItem = new TaskItem();
-        $taskItem->name = "测试衣服商品名2";
-        $taskItem->barcode = "TEST-013";
-        $taskItem->quantity = (int)1;
-        $taskItem->binLocations = [
-            "G11-133-1",
-        ];
-        $taskItem->attributes = [
-            "storageSerialNo"=>"1635055429594424",
-            "orderLineNo" => "1",
-            "skuLineNo"   => "1",
-            "sku"         => "TEST1",
-            "lotNum"      => "LOT179201",
-            "logisticNumber"=> "圆通",
-        ];
-        return (array)$taskItem->get();
-    }
-    private function p2()
-    {
-        $taskItem = new TaskItem();
-        $taskItem->name = "测试衣服  商品名";
-        $taskItem->barcode = "TEST-012";
-        $taskItem->quantity = (int)1;
-        $taskItem->binLocations = [
-            "G11-099-1",
-        ];
-        $taskItem->attributes = [
-            "storageSerialNo"=>"1635055429594424",
-            "orderLineNo" => "1",
-            "skuLineNo"   => "1",
-            "sku"         => "TEST",
-            "lotNum"      => "LOT17920",
-            "logisticNumber"=> "顺丰",
-        ];
-        return (array)$taskItem->get();
-    }
-
-
-    public function update_order_packages_is_manual_update()
-    {
-        $descriptions = Log::query()
-            ->select('description')
-            ->whereBetween('created_at', ['2021-08-31 10:30:00', '2021-08-31 10:35:00'])
-            ->where('class', 'like', 'https://was.baoshi56.com/package/logistic/batchUpdate%')->pluck('description');
-        foreach ($descriptions as $description) {
-            $description = substr($description, 9);
-            $description = \Illuminate\Support\Str::before($description, "}");
-            $obj = json_decode($description . '}', true);
-            OrderPackage::query()
-                ->whereIn('logistic_number', $obj['logistic_numbers'])
-                ->update([
-                    'status' => '无',
-                    'is_manual_update' => false,
-                ]);
-        }
-    }
-
-    public function testUpdateInv()
-    {
-        ini_set('max_execution_time', 0);
-        ini_set('memory_limit', '4096M');
-        $sql = <<<sql
-select FMLOTNUM,FMLOCATION,PLANTOLOCATION,CREATE_TRANSACTIONID,SKU,CUSTOMERID from TSK_TASKLISTS
-where CUSTOMERID=?
-  AND FMLOCATION= ?
-  AND OPENWHO = ?
-  AND TASKPROCESS = ?
-  AND DOCTYPE = ?
-  AND TASKTYPE = ?
-  AND LOTATT05=?
-  AND LOTATT08=?
-  AND PLANTOID = ?
-  and OPENTIME>=TO_DATE(?,'yyyy-mm-dd hh24:mi:ss')
-  and OPENTIME<=TO_DATE(?,'yyyy-mm-dd hh24:mi:ss')
-sql;
-        $CUSTOMERID = 'JIANSHANG';
-        $FMLOCATION = 'STAGEWH02';
-        $OPENWHO = 'WCS';
-        $TASKPROCESS = '00';
-        $DOCTYPE = 'ASN';
-        $TASKTYPE = 'PA';
-        $LOTATT05 = 'MJ-CP';
-        $LOTATT08 = 'ZP';
-        $PLANTOID = '*';
-        $traceid = 'JIANSHANG03';
-        $start = '2021-09-02 23:59:59';
-        $end = '2021-09-03 11:10:00';
-        $res = DB::connection("oracle")->select(DB::raw($sql),
-            [$CUSTOMERID, $FMLOCATION, $OPENWHO, $TASKPROCESS, $DOCTYPE, $TASKTYPE, $LOTATT05, $LOTATT08, $PLANTOID, $start, $end]);
-        $resItems = array_chunk($res, 200);
-        foreach ($resItems as $res) {
-            DB::connection("oracle")->beginTransaction();
-            try {
-                foreach ($res as $re) {
-                    DB::connection("oracle")->table('INV_LOT_LOC_ID')
-                        ->where([
-                            'LOTNUM' => $re->fmlotnum,
-                            'LOCATIONID' => $re->fmlocation,
-                            'CUSTOMERID' => $re->customerid,
-                            'sku' => $re->sku,
-                            'TRACEID' => '*',
-                        ])
-                        ->update([
-                            'TRACEID' => $traceid,
-                            'EDITWHO' => 'WCS_',
-                        ]);
-                    if ($re->fmlocation != $re->plantolocation) {
-                        DB::connection("oracle")->table('INV_LOT_LOC_ID')
-                            ->where([
-                                'LOTNUM' => $re->fmlotnum,
-                                'LOCATIONID' => $re->plantolocation,
-                                'CUSTOMERID' => $re->customerid,
-                                'sku' => $re->sku,
-                                'TRACEID' => '*',
-                            ])
-                            ->update([
-                                'TRACEID' => $traceid,
-                                'EDITWHO' => 'WCS_',
-                            ]);
-                    }
-                    DB::connection("oracle")->commit();
-                }
-                dd(true);
-            } catch (\Exception $e) {
-                DB::connection("oracle")->rollBack();
-                dd($e->getMessage());
-            }
-        }
-    }
-
-    /**
-     * 重置15天内的数据
-     */
-    public function order_packages_init()
-    {
-        OrderPackage::query()
-            ->whereBetween('created_at', [now()->subDays(15), now()])
-            ->update([
-                'is_delay_deliver' => 0,
-                'sync_routes_flag' => 0,
-                'status' => 1,
-                'exception_status' => 0,
-            ]);
-        OrderPackage::query()
-            ->whereBetween('created_at', [now()->subDays(15), now()])
-            ->whereNotNull('received_at')
-            ->update([
-                'status' => 7,
-            ]);
-    }
-
-    public function syncOrderPackage(){
-        ini_set('memory_limit','500M');
-        ini_set('max_execution_time', 0);
-        $orderPackingSummary = OracleDocOrderPackingSummary::query()
-            ->where('editTime','>=','2021-09-11 12:00:00')
-            ->where('editTime','<=','2021-09-12 12:40:00')
-            ->get();
-
-        $orderPackingSummary_chunk = $orderPackingSummary->chunk(200);
-        foreach ($orderPackingSummary_chunk as $orderPackingSummarys) {
-            foreach ($orderPackingSummarys as $orderPackingSummary) {
-                $orderPackage = OrderPackage::query()->where('logistic_number',$orderPackingSummary->traceid)->first();
-                $orderPackage->update([
-                    'uploaded_to_wms'=> true,
-                    'weight'=>$orderPackingSummary->grossweight,
-                    'length'=>$orderPackingSummary->length,
-                    'width'=>$orderPackingSummary->width,
-                    'height'=>$orderPackingSummary->height,
-                    'weighed_at'=>$orderPackingSummary->edittime
-                ]);
-                dispatch(new WeightUpdateInstantBill($orderPackage));
-            }
-        }
-        return ['success' => true];
-    }
-
-    public function collectUpload()
-    {
-        /** @var OrderPackageService $service */
-        $service = app('OrderPackageService');
-       return $service->collectUpload([
-           '75601803541125'
-        ]);
-    }
-
-    public function init_在途异常()
-    {
-        $logistic_numbers = OrderPackage::query()
-            ->select('logistic_number')
-            ->where('exception_status', 5)
-            ->where('created_at', '>=', now()->subDays(20)->toDateTimeString())
-            ->pluck('logistic_number');
-        /** @var OrderPackageReceivedSyncService $service */
-        $service = app('OrderPackageReceivedSyncService');
-        $service->syncLogisticRoute(false, $logistic_numbers);
-
-
-//        $logistic_numbers = OrderPackage::query()
-//            ->select(['logistic_number', 'order_id', 'id'])
-//            ->whereIn('order_id', function ($query) {
-//                $query->from('orders')->selectRaw('id')->whereIn('logistic_id', function ($builder) {
-//                    $builder->from('logistics')->selectRaw('id')->where('type', '=', '快递')->whereNotIn('belong_company', ['顺丰', '中通', '韵达', '圆通', '京东']);
-//                });
-//            })
-//            ->where('exception_status', 5)
-//            ->where('created_at', '>=', now()->subDays(20)->toDateTimeString())
-//            ->pluck('logistic_number');
-//        $service->syncLogisticRouteByAliJiSu($logistic_numbers);
-    }
-
-    public function store()
-    {
-        ini_set('max_execution_time', 0);
-        ini_set('memory_limit', '1024M');
-//        $now = Carbon::now();
-//        $startDate = $this->getDate();
-        $startDate = '2021-09-25 13:23:14';
-        $diffDay = 1; // 天数
-        for($i = 0;$i<=$diffDay;$i++){
-            $endDate = Carbon::parse($startDate)->addDays(1)->toDateTimeString();
-            $doc_asn_headers = $this->getDocAsnHeader($startDate,$endDate);
-//            if (count($doc_asn_headers)>0){
-//                $this->syncStores($doc_asn_headers);
-//                $this->syncDate($endDate);
-//            }
-            dump($startDate,$endDate);
-            $startDate = $endDate;
-        }
-        $this->clearCache();
-//        ValueStore::query()->updateOrCreate([
-//            'name' => 'last_asn_sync_task_end_at',
-//        ], [
-//            'name' => 'last_asn_sync_task_end_at',
-//            'value' => $now,
-//        ]);
-    }
-
-
-
-    public function getDocAsnHeader($startDate,$endDate)
-    {
-        return OracleDOCASNHeader::query()
-            ->with(['asnType', 'asnStatus'])
-            ->select('asnno','asnstatus','asntype','addtime','edittime','customerid','notes','warehouseid','asnreference3','asnreference2')
-            ->where('EditTime', '>=', $startDate)
-            ->where('EditTime', '<=', $endDate)
-            ->whereColumn('EditTime', '<>', 'addTime')
-            ->orderByDesc('EditTime')
-            ->get();
-    }
-
-    public function getDate(){
-        return ValueStore::query()->where('name','asn_last_updated_sync_at')->value('value');
-    }
-
-    public function syncStores($doc_asn_headers){
-        $service = new StoreService();
-        $service->createStore($doc_asn_headers,"update");
-        $service->updateStore($doc_asn_headers);
-        $service->createStoreRejected($doc_asn_headers);
-        unset($doc_asn_headers);
-    }
-
-    public function syncDate($date)
-    {
-        // 同步更新时间
-        ValueStore::query()->updateOrCreate([
-            'name' => 'asn_last_updated_sync_at',
-        ], [
-            'name' => 'asn_last_updated_sync_at',
-            'value' => $date,
-        ]);
-    }
-    public function clearCache()
-    {
-        $service = new StoreService();
-        $update_set = config('sync.asn_sync.cache_prefix.update_set');
-        $update_keys = config('sync.asn_sync.cache_prefix.update_keys');
-        $service->deleteCacheKey($update_set, $update_keys);
-        // 清空保存 ans  号的栈
-        // 清除 更新时间 开始 结束
-    }
-    public function updateStoreItem()
-    {
-        ini_set('max_execution_time', 0);
-        ini_set('memory_limit', '1024M');
-        $storeIds = Store::query()
-            ->where('updated_at', '>=', '2021-09-25 13:21:26')
-            ->whereColumn('updated_at', '<>', 'created_at')
-            ->pluck('id');
-
-        $storeItemMaxIds = StoreItem::query()
-            ->selectRaw('max(id) as max_id')
-            ->whereIn('store_id', $storeIds)
-            ->groupBy(['store_id', 'asn_line_code'])
-            ->get();
-//        dd($storeItemMaxIds->count());
-        $storeItems = StoreItem::query()
-            ->whereIn('store_id', $storeIds)
-            ->whereNotIn('id', $storeItemMaxIds)
-            ->delete();
-    }
-
-    public function init_SettlementBillReportTask()
-    {
-        $this->dispatch(new SettlementBillReportJob('2021-09-01',[]));
-    }
-    public function test2(){
-        $source_file ="E:\OneDrive\桌面\工作目录\文件库\\5.jpg";
-
-        $img = ImageCreateFromJpeg($source_file);
-        imagecolortransparent($img);//将某个颜色设置成透明色
-        imagecolorstotal($img);
-        header('Content-type:image/jpeg');
-        imagejpeg($img);
-        //dd($this->run('E:\OneDrive\桌面\工作目录\文件库\5.jpg', 'E:\OneDrive\桌面\工作目录\文件库\6.jpg'));
-    }
-
-
-    const FILE_NOT_FOUND = '-1';
-    const FILE_EXTNAME_ILLEGAL = '-2';
-
-    public function run($src1, $src2) {
-        if(!is_file($src1) || !is_file($src2)) exit(self::FILE_NOT_FOUND);
-        $hash1 = $this->getHashValue($src1);
-        $hash2 = $this->getHashValue($src2);
-        if(strlen($hash1) !== strlen($hash2)) return false;
-        $count = 0;
-        $len = strlen($hash1);
-        for($i = 0; $i < $len; $i++) if($hash1[$i] !== $hash2[$i]){
-            $count++;
-        }
-        dd($count);
-        return $count <= 10 ? true : false;
-    }
-
-    public function getImage($file) {
-        $extname = pathinfo($file, PATHINFO_EXTENSION);
-        if(!in_array($extname, ['jpg','jpeg','png','gif'])) exit(self::FILE_EXTNAME_ILLEGAL);
-        $img = call_user_func('imagecreatefrom'. ( $extname == 'jpg' ? 'jpeg' : $extname ) , $file);
-        return $img;
-    }
-    public function getHashValue($file) {
-        $w = 32;
-        $h = 32;
-        $img = imagecreatetruecolor($w, $h);
-        list($src_w, $src_h) = getimagesize($file);
-        $src = $this->getImage($file);
-        imagecopyresampled($img, $src, 0, 0, 0, 0, $w, $h, $src_w, $src_h);
-        imagedestroy($src);
-        $total = 0;
-        $array = array();
-        for( $y = 0; $y < $h; $y++) {
-            for ($x = 0; $x < $w; $x++) {
-                $rgb = imagecolorat($img, $x, $y);
-                $gray = $rgb & 0xFF;
-                /*dump([
-                    ($rgb >> 8) & 0xFF,
-                    ($rgb >> 16) & 0xFF,
-                    $rgb & 0xFF,
-                ]);*/
-                if(!isset($array[$y])) $array[$y] = array();
-                $array[$y][$x] = $gray;
-                $total += $gray;
-            }
-        }
-        imagedestroy($img);
-        $average = intval($total / ($w * $h * 2));
-        $hash = '';
-        for($y = 0; $y < $h; $y++) {
-            for($x = 0; $x < $w; $x++) {
-                $hash .= ($array[$y][$x] >= $average) ? '1' : '0';
-            }
-        }
-        dump($hash);
-        return $hash;
-    }
-
-    public function sortTransferStatus()
-    {
-        $orderPackage = OrderPackage::query()->where('logistic_number','75601831068018')->first();
-        app('OrderPackageService')->sortOrderPackageTransferStatus($orderPackage);
-        dd($orderPackage);
-    }
-
-    public function clear_work_space()
-    {
-        \App\LaborApply::query()->truncate();
-
-        LaborCompanyDispatch::query()->truncate();
 
-        \App\LaborCompanyDispatchDetail::query()->truncate();
-    }
-
-    public function testChange()
-    {
-        $last_start_key = config('sync.order_sync.cache_prefix.last_start_at');
-        $last_end_key = config('sync.order_sync.cache_prefix.last_end_at');
-        Cache::put($last_start_key,Carbon::make('2021-10-12 06:23:37'));
-        Cache::put($last_end_key,Carbon::make('2021-10-12 06:23:38'));
-        ValueStore::query()->where('name','order_last_created_sync_at')->update(['value' => '2021-10-12 06:23:37']);
-        ValueStore::query()->where('name','order_last_updated_sync_at')->update(['value' => '2021-10-12 06:23:37']);
-        ValueStore::query()->where('name','last_order_sync_task_start_at')->update(['value' => '2021-10-12 06:23:37']);
-        ValueStore::query()->where('name','last_order_sync_task_end_at')->update(['value' => '2021-10-12 06:23:38']);
-    }
-
-    public function test3()
-    {
-        foreach (Batch::query()->where("updated_at",">=","2021-11-22 09:00:00")->get() as $batch){
-            try {
-                $this->assignBatch($batch->code);
-            }catch (\Exception $e){
-                continue;
-            }
-        }
-    }
 
     public function assignBatch($code)
     {
@@ -754,151 +327,79 @@ sql;
     }
 
 
-    public function syncOrder()
-    {
-        $code = \request("code");
-        $service = new OracleDOCOrderHeaderService();
-        $orderService = new OrderService();
-        $orderHeaders = $service->getQuery()->where('DOC_Order_Header.WaveNo',$code)->get();
-        $orderService->syncOrderByWMSOrderHeaders($orderHeaders);
-        app("OrderCommodityService")->syncOrderCommodity($orderHeaders);
-        dd('同步完成');
-    }
-
-    public function test_sddgdfg()
-    {
-        /** @var OwnerStoreOutFeeReportService $service */
-        $service = app('OwnerStoreOutFeeReportService');
-        $service->recordReport(null, [2]);
-    }
+}
+class Worker{
+    //监听socket
+    protected $socket = NULL;
 
-    public function testZhenCang()
-    {
-//        $batches=Batch::query()->where('id',161071)->get();
-//        BroadcastBatchToZhengCangJob::dispatch($batches);
-//        $sql = <<<sql
-//select department_id,obligation_id,owner_id,max(valid_time) from department_obligation_owner group by obligation_id,owner_id,department_id
-//sql;
-//        $info = DB::select(DB::raw($sql));
-//        dd($info);
-//        $owner=Owner::query()->with(['departmentObligationOwner'])->find(403);
-//        dd($owner);
-//        $a=app('ObligationService')->recombineCodeIdArr();
-        $now=Carbon::now()->subMonths(-1)->startOfMonth()->startOfDay()->toDateTimeString();
-        dd($now);
-    }
+    //所有的socket连接
+    protected $allSockets = array();
 
-    public function syncOrderIssue()
-    {
-        /** @var OrderIssue $orderIssue */
-        $orderIssue = OrderIssue::query()->find('48798');
-        $orderIssue->syncRejectingStatus();
-    }
+    //连接事件回调
+    public $onConnect = NULL;
 
-    public function test123()
-    {
-        $user = User::query()->where('name','yanyuanmin')->first();
-        Auth::setUser($user);
-        dd(Auth::user());
-        return ;
-        $reflection = new \ReflectionClass(new OrderIssue());
-        dump($reflection->getMethods());
-        dump($reflection->getConstants());
-        dump($reflection->getInterfaces());
-    }
+    //断线事件回调
+    public $onClose = NULL;
 
-    public function syncWorkOrder()
-    {
-        $workOrders = WorkOrder::query()->with('order')->get();
-        foreach ($workOrders as $workOrder) {
-            $workOrder->owner_id = $workOrder->order->owner_id;
-            $workOrder->logistic_id = $workOrder->order->logistic_id;
-            if ($workOrder->review_at){
-                $workOrder->status = 5;
-            }
-            $workOrder->save();
-        }
-    }
+    //接收消息事件回调
+    public $onMessage = NULL;
 
-    public function SyncOrder11(){
-        WorkOrder::query()->whereIn('id',['3420','3421','3422'])->update(['status'=>'3']);
-        WorkOrder::query()->whereIn('id',['3423','3424','3425'])->update(['status'=>'3']);
-    }
+    public function __construct($socket_address) {
+        //创建一个socket监听
+        $this->socket = stream_socket_server($socket_address);
 
-    public function workOrderChangeVersion()
-    {
-        $workOrders = WorkOrder::query()->with('details')->get();
-        $workOrderDetails = $this->groupByWorkOrderId(WorkOrderDetail::query()->get());
-        $WorkOrderLogs = $this->groupByWorkOrderId(WorkOrderLog::query()->get());
-        $workOrderImages = $this->groupByWorkOrderId(WorkOrderImage::query()->get());
-        $workOrderCommodities = $this->groupByWorkOrderId(WorkOrderCommodities::query()->get());
-        $workOrderLogUpDateParams = [['id','tag','work_order_detail_id']];
-        $workOrderImagesUpDateParams = [['id','tag','work_order_detail_id']];
-        $workOrderCommoditiesUpDateParams = [['id','tag','work_order_detail_id']];
-        foreach ($workOrders as $workOrder) {
-            $detail =  $workOrderDetails[$workOrder->id][0] ?? null;
-            if (!$detail){
-                $detail = new WorkOrderDetail([
-                    'work_order_id' => $workOrder->id,
-                    'order_issue_type_id' => $workOrder->order_issue_type_id ?? '',
-                    'remark' => $workOrder->remark,
-                    'status' => $workOrder->status,
-                ]);
-                if ($detail->status == '完结'){$detail->tag = 1;}
-                else {$detail->tag = 0;}
-                $detail->status = $workOrder->status;
-                $detail->save();
-            } else {
-                $detail->order_issue_type_id = $workOrder->order_issue_type_id ?? '';
-                $detail->remark = $workOrder->remark ?? '';
-                $detail->status = $workOrder->status;
-                $detail->update();
-            }
-            if ($WorkOrderLogs[$workOrder->id]??false){
-                $arrays = $this->getUpdateParams($workOrder,$detail,$WorkOrderLogs[$workOrder->id] ?? null);
-                array_push($workOrderLogUpDateParams,$arrays);
-            }
-            if ($workOrderImages[$workOrder->id]??false){
-                $arrays = $this->getUpdateParams($workOrder,$detail,$workOrderImages[$workOrder->id] ?? null);
-                array_push($workOrderImagesUpDateParams,$arrays);
-            }
-            if (  $workOrderCommodities[$workOrder->id]??false){
-                $arrays = $this->getUpdateParams($workOrder,$detail,$workOrderCommodities[$workOrder->id] ?? null);
-                array_push($workOrderCommoditiesUpDateParams,$arrays);
-            }
-        }
+        //设置为非阻塞
+        stream_set_blocking($this->socket, 0);
 
-        $service = new BatchUpdateService();
-        if (count($workOrderLogUpDateParams) > 1) $service->batchUpdate('work_order_logs',$workOrderLogUpDateParams);
-        if (count($workOrderImagesUpDateParams) > 1) $service->batchUpdate('work_order_images',$workOrderImagesUpDateParams);
-        if (count($workOrderCommoditiesUpDateParams) > 1) $service->batchUpdate('work_order_commodities',$workOrderCommoditiesUpDateParams);
+        //将socket监听加入allSockets
+        $this->allSockets[(int)$this->socket] = $this->socket;
     }
 
-    public function getUpdateParams($workOrder,$detail,$items):array
-    {
-        $array = [];
-        $tag = $detail->status == '完成' ? 1 : 0;
-        foreach ($items as $item){
-            $item = ['id' => $item->id,'tag' => $tag,'work_order_detail_id' => $detail->id];
-            $array[] = $item;
-        }
-        return $array;
-    }
+    public function run() {
+        while(true) {
+            //不监听可写事件与带外数据事件
+            $write = $except = array();
+            //监听所有的socket事件
+            $read = $this->allSockets;
+            //整个进程阻塞在这里,持续监听可读事件
+            //此处参数均为引用传递,在函数中会改变传值
+            stream_select($read, $write, $except, 60);
 
-    public function groupByWorkOrderId($items): array
-    {
-        $array = [];
-        foreach ($items as $item) {
-            if (in_array($item->id,$array)){
-                $array[$item->work_order_id][] = $item;
-            } else {
-                $array[$item->work_order_id] = [$item];
+            //处理所有可读事件
+            foreach ($read as $index => $socket) {
+                //如果是监听socket,此处表示有新的连接
+                if ($socket === $this->socket) {
+                    //通过stream_socket_accept获取新的连接
+                    $new_conn_socket = stream_socket_accept($socket);
+
+                    if ($this->onConnect) {
+                        //触发连接事件的回调,并将当前连接传递给回掉函数
+                        call_user_func($this->onConnect, $socket);
+                    }
+                    //记录此socket连接,以便于sream_select监听可读事件
+                    $this->allSockets[(int)$new_conn_socket] = $new_conn_socket;
+                } else
+                    //如果可读事件不为监听socket,则表示对应客户端有数据发过来
+                {
+                    //从连接中读取数据
+                    $buffer = fread($socket, 65535);
+                    //如果数据为空,表示客户端已经断开连接
+                    if ('' === $buffer || false === $buffer) {
+                        //尝试触发onClose回调
+                        if ($this->onClose) {
+                            call_user_func($this->onClose, $socket);
+                        }
+                        fclose($socket);
+                        //关闭socket连接并从allSockets中删除
+                        unset($this->allSockets[(int)$socket]);
+                        continue;
+                    }
+                    //表示一个正常的连接,已经读取到消息,交给回掉函数处理
+                    if ($this->onMessage) {
+                        call_user_func($this->onMessage, $socket, $buffer);
+                    }
+                }
             }
         }
-        return $array;
-    }
-
-    public function  workOrder(){
-        dd(route('workOrder.damage.storeApi'));
     }
 }

+ 2 - 2
app/Http/Requests/Api/WaybillDispatch.php

@@ -19,8 +19,8 @@ class WaybillDispatch extends AndroidGateRequest
             "inquire_tel"           => ["required","string","max:20"],
             "amount"                => ["required","integer","min:1"],
             "amount_unit_name"      => ["required",Rule::in(["件","托"])],
-            "carrier_weight_other"  => ["required_without:carrier_weight","nullable","numeric","min:0.01"],
-            "carrier_weight"        => ["required_without:carrier_weight_other","nullable","numeric","min:0.01"],
+            "carrier_weight_other"  => ["required_without_all:carrier_weight,carrier_weight_other","numeric","min:0.01"],
+            "carrier_weight"        => ["required_without_all:carrier_weight,carrier_weight_other","numeric","min:0.01"],
             "subjoin_fee"           => ["nullable","string"],
         ];
     }

BIN
resources/images/login/log01.jpg


+ 4 - 4
resources/views/equipment/_detailInfo.blade.php

@@ -24,7 +24,7 @@
             </div>
             <div class="modal-body row">
                 <div class="col-6" style="border-right: 1px #D3D3D3 solid">
-                    <div v-for="layer in current.layer" style="border: 1px #000000 solid;height: 70px;cursor: pointer" @click="nextDetail(layer)"
+                    <div v-for="layer in flipLayer" style="border: 1px #000000 solid;height: 70px;cursor: pointer" @click="nextDetail(layer)"
                         :style="[layer===1 ? {borderTop:'none'} : '',layer===current.layer ? {borderBottom:'none'} : '',{width:100*(current.grid)+'px'}]">
                         <span class="h-100 w-100 el-center">@{{ layer<10 ? '0'+layer : layer }}</span>
                     </div>
@@ -32,13 +32,13 @@
                 <div class="col-6 p-0" :style="[error.children ? {border: '2px red solid'} : '']">
                     <div v-for="(item,i) in current.children" class="row m-0" style="border-bottom: 1px #D3D3D3 solid;height: 70px">
                         <div class="col-4">
-                            设备高度/M:<input class="form-control" type="number" step="0.01" :class="error['children['+i+'].height'] ? 'is-invalid' : ''" v-model="item.height"></input>
+                            设备高度/M:<input class="form-control" min="0" type="number" step="0.01" :class="error['children['+i+'].height'] ? 'is-invalid' : ''" v-model="item.height"></input>
                         </div>
                         <div class="col-4">
-                            库位行数:<input class="form-control" :disabled="current.eqId!==undefined" type="number" step="1" :class="error['children['+i+'].row'] ? 'is-invalid' : ''" v-model="item.row"></input>
+                            库位行数:<input class="form-control" min="0" :disabled="current.eqId!==undefined" type="number" step="1" :class="error['children['+i+'].row'] ? 'is-invalid' : ''" v-model="item.row"></input>
                         </div>
                         <div class="col-4">
-                            库位列数:<input class="form-control" :disabled="current.eqId!==undefined" type="number" step="1" :class="error['children['+i+'].column'] ? 'is-invalid' : ''" v-model="item.column"></input>
+                            库位列数:<input class="form-control" min="0" :disabled="current.eqId!==undefined" type="number" step="1" :class="error['children['+i+'].column'] ? 'is-invalid' : ''" v-model="item.column"></input>
                         </div>
                     </div>
                 </div>

+ 62 - 10
resources/views/equipment/index.blade.php

@@ -197,10 +197,10 @@
         </div>
         <div class="col-10 p-0">
             <div class="w-100 bg-secondary" id="canvasApp" style="height: 100vh;overflow: auto;user-select: none;">
-                <div id="canvas" v-if="isLoad" :style="[{width:container.width*(scale/100)+'px'},{height:container.height*(scale/100)+'px'},{transform: 'scale('+(scale/100)+')'}]"
+                <div id="canvas" v-if="isLoad" @keydown.delete="delElement()" :style="[{width:container.width*(scale/100)+'px'},{height:container.height*(scale/100)+'px'},{transform: 'scale('+(scale/100)+')'}]"
                      style="position: relative;transform-origin: 0 0" class="bg-white"
                  @mousedown="contentOnmousedown" @mousemove="contentOnmousemove" @mouseup="contentOnmouseup">
-                    <vue-drag-resize v-for="(element,index) in elements"
+                    <vue-drag-resize v-for="(element,index) in elements" v-if="!element.removeSign"
                                      @activated="onActivated(element)"
                                      @dragging="onDragging"
                                      @resizing="onResizing"
@@ -218,6 +218,7 @@
                     </vue-drag-resize>
                     <vue-drag-resize style="border-width:1px;border-color: #0070C0;border-style: dashed;cursor: pointer"
                                      v-for="(element,index) in equipmentElements" @clicked="showDetail(element)"
+                                     v-if="!element.removeSign"
                                      :is-resizable="false" :snap-to-grid="grid" :grid-x="40" :grid-y="30"
                                      :style="[{backgroundColor:element.color}]"
                                      @activated="onActivated(element)"
@@ -289,7 +290,8 @@
             grid:true,                                                  //设备拖拽是否开启网格
             turn:true,                                                  //设备是否翻转
             isLoadLocation:false,                                       //开启加载库位
-            baseUrl:"https://swms.baoshi56.com/",
+            baseUrl:"http://127.0.0.1:8112/",
+            //baseUrl:"https://swms.baoshi56.com/",
             current:{},                                                 //当前操作的设备
             error:{},
             locations:[],
@@ -299,7 +301,47 @@
         mounted() {
             this.initPage();
         },
+        computed:{
+            flipLayer(){
+                let layer = [];
+                for (let i=this.current.layer;i>0;i--){
+                    layer.push(i);
+                }
+                return layer;
+            },
+        },
+        created: function() {
+            document.onkeydown = e=> {
+                let key = e.keyCode;
+                if (key === 8) {
+                    this.delElement();
+                }
+            };
+        },
         methods:{
+            delCoords(){
+                this.elements.some((el,index)=>{
+                    if (this.currentEl.name === el.name &&
+                        this.currentEl.x === el.x && this.currentEl.y === el.y){
+                        this.$set(this.elements[index],"removeSign",true);
+                        return true;
+                    }
+                })
+            },
+            delEquipment(){
+                this.equipmentElements.some((el,index)=>{
+                    if (this.currentEl.eqId === el.eqId){
+                        this.$set(this.equipmentElements[index],"removeSign",true);
+                        return true;
+                    }
+                })
+            },
+            delElement(){
+                if (this.isNotEdit || !this.current)return;
+
+                if (this.currentEl.eqId)this.delEquipment();
+                else this.delCoords();
+            },
             addCoords(){
                 if (this.isNotEdit)return;
                 this.elements.push({"x":200,"y":200,"width":2,"height":2,"name":"","coords":"居中","border":["left","top","right","bottom"],"color":"white","index":1})
@@ -307,19 +349,28 @@
             clickEditOrSave(){
                 if(this.isNotEdit){this.isNotEdit = false;return;}
                 let equipments = [];
+                let delEquipments = [];
+                let elements = [];
                 this.equipmentElements.forEach(equipment=>{
-                    if (equipment.updateCoords){
+                    if (equipment.removeSign){
+                        delEquipments.push(equipment.eqId);
+                    }else if (equipment.updateCoords){
                         equipments.push({
                             id:equipment.eqId,
                             info:JSON.stringify({x:equipment.x,y:equipment.y,id:equipment.id})
                         });
                     }
                 });
+                this.elements.forEach(el=>{
+                    if (!el.removeSign){
+                        elements.push(el);
+                    }
+                });
                 $.ajax({
                     url : this.baseUrl+"warehouse/saveScene",
                     type : "POST",
                     headers:{'Content-Type':'application/json;charset=utf8'},
-                    data:JSON.stringify({id:this.selected,warehouse:JSON.stringify(this.elements),equipment:equipments}),
+                    data:JSON.stringify({id:this.selected,warehouse:JSON.stringify(elements),equipment:equipments,delEquipments:delEquipments}),
                     success : (res,status)=>{
                         if (res.code===200){
                             this.isNotEdit = true;
@@ -540,11 +591,11 @@
             //数值类属性改变
             changeNumber(key){
                 let val = event.target.value;
-                this.currentEl[key] = val ? parseFloat(val)-0.5 : 0;
+                this.currentEl[key] = val ? parseFloat(val) : 0;
             },
             //子设备选定时的库位加载
             nextDetail(index){
-                if (!this.current.id)return;
+                if (!this.current.eqId)return;
                 this.currentEqChildIndex = index-1;
                 this.isLoadLocation = true;
                 setTimeout(function (){
@@ -623,6 +674,7 @@
                   this.error = error;return;
               }
               let params = this._formatEquipmentData(this.current);
+              params.warehouseDetailId = this.selected;
               $.ajax({
                   url : this.baseUrl+"equipment/saveOrUpdate",
                   type : "post",
@@ -662,7 +714,7 @@
                 if (!equipment.code)error.code = "设备编号未填写";
                 if (!equipment.width)error.width = "设备宽度未填写";
                 if (!equipment.depth)error.depth = "设备深度未填写";
-                if (!equipment.repository)error.repositoryId = "设备库区未选定";
+                //if (!equipment.repository)error.repositoryId = "设备库区未选定";
                 if (equipment.layer !== equipment.children.length)error.children = "设备绑定错误";
                 for (let i=0;i<equipment.layer;i++){
                     if (!equipment.children[i].height)error["children["+i+"].height"] = "设备高度不得为空"
@@ -733,7 +785,7 @@
                                 this.$forceUpdate();
                                 break;
                             default:
-                                window.toast.error("库位建立失败,服务器错误");
+                                window.toast.error(res.message);
                         }
                     },
                     error : (err)=>{
@@ -885,7 +937,7 @@
                 let other = inv.QTYALLOCATED + inv.QTYMVIN + inv.QTYMVOUT + inv.QTYONHOLD + inv.QTYPA + inv.QTYRPIN + inv.QTYRPOUT;
                 return (qty>0 || other>0) ?
                     'color: #fff;background-color: #38c172;border-color: #38c172;' : '';
-            }
+            },
         }
     });
 </script>