gorden hace 7 meses
padre
commit
f37a2b0b5d

+ 38 - 0
app/admin/controller/sys_manage/RestaurantTableController.php

@@ -2,6 +2,7 @@
 
 namespace app\admin\controller\sys_manage;
 
+use app\common\Qrcode;
 use app\controller\Curd;
 use app\model\SysDept;
 use app\model\SysUser;
@@ -252,6 +253,43 @@ class RestaurantTableController extends Curd{
         }
 
         return json_success('',$data);
+    }
 
+    public function downloadQrcode(Request $request)
+    {
+        $tableId = $request->get('table_id','');
+        $uid = JwtToken::getCurrentId();
+        $user = SysUser::where('user_id',$uid)->first();
+        $restaurant = SysDept::where('dept_category','餐厅')->where(function($query) use ($user) {
+            $query->where('dept_id',$user->join_user_dept_id)->orWhere('dept_super_id',$user->join_user_dept_id);
+        })->first();
+        if(!$restaurant){
+            return  json_fail('您所在的营业场所没有餐厅,请联系管理员添加!');
+        }
+        $fileName = 'table-'.md5($tableId);
+        // 图片已存在,删除之前的
+        if (file_exists(public_path() . "/storage/qrcode/".$fileName.'.png')){
+            unlink(public_path() . "/storage/qrcode/".$fileName.'.png');
+        }
+
+        $table = SysDept::where('dept_id',$tableId)->where('dept_category','桌台')->first();
+        $restaurant = SysDept::where('dept_id',$table->dept_super_id)->first();
+        $premises = SysDept::where('dept_id',$restaurant->dept_super_id)->first();
+        if (!$premises){
+            return json_fail('营业场所不存在');
+        }
+        $qrcodeContent = [
+            'action'=>'scan-dishes',
+            'data'=>[
+                'premises'=>$premises->dept_id,
+                'table'=>$table->dept_name,
+                'dept'=>$table->dept_id
+            ]
+        ];
+
+        $qrcode = (new Qrcode)->create(json_encode($qrcodeContent,JSON_UNESCAPED_UNICODE),$fileName);
+        if ($qrcode !== false){
+            return json_success('success',['url'=>getenv('STORAGE_DOMAIN').'/storage/qrcode/'.$fileName.'.png']);
+        }
     }
 }

+ 80 - 0
app/common/Qrcode.php

@@ -0,0 +1,80 @@
+<?php
+
+namespace app\common;
+
+use Endroid\QrCode\Color\Color;
+use Endroid\QrCode\Encoding\Encoding;
+use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelLow;
+use Endroid\QrCode\Label\Label;
+use Endroid\QrCode\Logo\Logo;
+use Endroid\QrCode\QrCode as QrCodeQrCode;
+use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
+use Endroid\QrCode\Writer\PngWriter;
+
+class Qrcode{
+    private $logo = null;
+    private $label = null;
+    private $size = 600;
+    
+    public function __construct() 
+    {
+        // 
+    }
+    
+    /**
+     * 设置二维码LOGO
+     */
+    public function setLogo($logo_path)
+    {
+        $this->logo = Logo::create($logo_path)   //logo的照片路径
+            ->setResizeToWidth(20);             //logo的大小
+    }
+    
+    /**
+     * 设置二维码下方文字
+     */
+    public function setLabel($text)
+    {
+        $this->label = Label::create($text)      //二维码下面的文字
+            ->setTextColor(new Color(0, 0, 0)); //文字的颜色        
+    }
+    
+    /**
+     * 生成二维码
+     * @param string $url [链接]
+     * @return string  [type]  [返回图片path]
+     */
+    public function create(string $url,string $fileName)
+    {
+        $writer = new PngWriter();
+        
+        $qrCode = QrCodeQrCode::create($url)//跳转的url地址
+            ->setEncoding(new Encoding('UTF-8'))    //设置编码格式
+            ->setErrorCorrectionLevel(new ErrorCorrectionLevelLow())    //设置纠错级别为低
+            ->setSize($this->size)      //大小
+            ->setMargin(20)             //边距
+            ->setRoundBlockSizeMode(new RoundBlockSizeModeMargin())     //设置圆轮大小边距
+            ->setForegroundColor(new Color(0, 0, 0))        //前景色
+            ->setBackgroundColor(new Color(255, 255, 255));       //背景色
+        
+        $result = $writer->write($qrCode, $this->logo, $this->label);
+        
+        $result->getString();
+        
+        $file_path = public_path() . "/storage/qrcode/";
+        
+        if (!is_dir($file_path)) {
+            mkdir($file_path, 0755, true);
+        }
+        
+        if (!empty($fileName)){
+            $qrcode = $fileName.'.png';
+        }else{
+            $qrcode = time() . mt_rand(0, 9999). '.png';
+        }
+        
+        $result->saveToFile($file_path . $qrcode);
+        
+        return $file_path . $qrcode;
+    }
+}

+ 2 - 1
composer.json

@@ -44,7 +44,8 @@
     "intervention/image": "^2.7",
     "webman/console": "^1.3",
     "yansongda/pay": "v2.10",
-    "webman/event": "^1.0"
+    "webman/event": "^1.0",
+    "endroid/qr-code": "^4.6"
   },
   "suggest": {
     "ext-event": "For better performance. "

+ 1 - 0
route/admin.php

@@ -192,6 +192,7 @@ Route::group('/admin', function () {
             Route::post('/update', [\app\admin\controller\sys_manage\RestaurantTableController::class, 'update']);
             Route::delete('/delete', [\app\admin\controller\sys_manage\RestaurantTableController::class, 'delete']);
             Route::get('/exportTable', [\app\admin\controller\sys_manage\RestaurantTableController::class, 'exportTable']);
+            Route::get('/downQrcode', [\app\admin\controller\sys_manage\RestaurantTableController::class, 'downloadQrcode']);
         })->middleware([
             \app\middleware\AdminAuthCheck::class
         ]);