浏览代码

出标机 领标增加限制

cqpCow 1 年之前
父节点
当前提交
5b5bcbbcb3
共有 4 个文件被更改,包括 66 次插入6 次删除
  1. 4 6
      app/Http/Controllers/Api/DwyController.php
  2. 3 0
      app/Jobs/LabelDealJob.php
  3. 22 0
      app/Service/DwyService.php
  4. 37 0
      app/Service/Service.php

+ 4 - 6
app/Http/Controllers/Api/DwyController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Api;
 
 
 use App\Model\BigKingTbj;
+use App\Service\DwyService;
 use App\Service\EmployeeService;
 use App\Service\SysMenuService;
 use Illuminate\Http\Request;
@@ -645,12 +646,11 @@ class DwyController extends BaseController
 
     public function setLb(Request $request)
     {
-
-
-
         $param = $request->all();
-
         file_put_contents('dwy.txt', json_encode($param) . PHP_EOL, 8);
+        list($status,$msg) = DwyService::getInstance()->setLimitForBoxOut($param);
+        if(! $status) return ['status' => '201', 'data' => [],'msg'=> $msg];
+
 //        $param = [
 //            'token'=>'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIyNzM2OTUyNTA3NTI5NTQzNzMiLCJhdXRoIjoiUk9MRV9JTk5FUl9VU0VSLFJPTEVfQlJBTkRfQVJSRVNULFJPTEVfQURNSU4iLCJ0b2tlbklkIjoiOTUwIiwiZXhwIjoxNzA3OTcxMTcxfQ.2VQ9Wqmk4rvKAcTsQPw59llBbeXjalKDGIZA4kesnuOJ0POmPVOVlRLbTtUDxl0XiFdPDUrKzuEFl2DXSgQdJg',
 //            'list'=>[
@@ -670,8 +670,6 @@ class DwyController extends BaseController
 //
 //            return $this->test();
 //        }
-
-
         $url = 'https://tm.dwycloud.com/jbl/api/module-data/brand_in_stock/brand_in_stock/diy/box_inventory';
         $header = [
             'Content-Type:application/json',

+ 3 - 0
app/Jobs/LabelDealJob.php

@@ -45,6 +45,9 @@ class LabelDealJob implements ShouldQueue
             //调用外部方法
             list($lead_bind,$lead_out) = DwyService::getInstance()->setBoxData($this->header,$dv,$return,$box_list,$data);
 
+            //删除限制
+            DwyService::getInstance()->delLimitForBoxOut($lead_bind);
+
             //调用保存接口
             LabelDealService::getInstance()->boxOut($lead_bind,$lead_out,$this->header,$this->id);
         }catch (\Throwable $exception){

+ 22 - 0
app/Service/DwyService.php

@@ -288,6 +288,28 @@ class DwyService extends Service
 
     }
 
+    //限制领标
+    public function setLimitForBoxOut($data){
+        if(empty($data['token']) || empty($data['list']) || $data['mac']) return [false, '缺少必要参数,操作失败'];
+
+        foreach ($data['list'] as $value){
+            $key = $data['mac'] . $value['order_item_id'] . hash('md5', $value['title']);
+            $bool = $this->limitingSendRequestBackg($key, $value['num'], 3600);
+            if(! $bool) return [false, '同一产品相同商标限制同时操作,请稍后操作!'];
+        }
+
+        return [true, ''];
+    }
+
+    //删除限制领标
+    public function delLimitForBoxOut($data){
+        if(empty($data['device_code']) || empty($data['material_list'])) return ;
+
+        foreach ($data['material_list'] as $value){
+            $key = $data['device_code'] . $value['order_item_id'] . hash('md5', $value['material_code_show']);
+            $this->dellimitingSendRequestBackg($key);
+        }
+    }
 
     public function post_helper($url, $data, $auth)
     {

+ 37 - 0
app/Service/Service.php

@@ -3,6 +3,8 @@
 namespace App\Service;
 
 
+use Illuminate\Support\Facades\Redis;
+
 /**
  * 公用的公共服务
  * @package App\Models
@@ -232,4 +234,39 @@ class Service
 
         return $result;
     }
+
+    //后台端 某些需要限制请求频率的接口
+    //需要主动删除  Redis::del($key)
+    public function limitingSendRequestBackg($key, $value=0, $ttl = 0){
+        // 默认值
+        if(! empty($value)) $value = 1;
+
+        // 使用Redis Facade设置,当键名不存在时才设置成功
+        if (Redis::setnx($key, $value)) {
+            //多少秒后过期 不然需要主动删除
+            if($ttl > 0)  Redis::expire($key, $ttl);
+            return true;
+        }
+
+        return false;
+    }
+
+    //主动删除
+    public function dellimitingSendRequestBackg($key){
+        Redis::del($key);
+    }
+
+    //后台端 某些需要限制请求频率的接口 有过期时间
+    public function limitingSendRequestBackgExpire($key,$ttl = 5){
+        if($ttl < 5) $ttl = 5;
+
+        // 使用Redis Facade设置,当键名不存在时才设置成功
+        if (Redis::setnx($key, 1)) {
+            Redis::expire($key, $ttl); //多少秒后过期
+
+            return [true, ''];
+        }
+
+        return [false,'操作频繁, 请在 ' . $ttl . '秒后重试'];
+    }
 }