|
|
@@ -13,6 +13,7 @@ namespace App\Services;
|
|
|
|
|
|
use App\Models\DevicesModel;
|
|
|
use App\Models\GongdengOrderModel;
|
|
|
+use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
/**
|
|
|
* 供灯设备管理-服务类
|
|
|
@@ -91,7 +92,7 @@ class DevicesService extends BaseService
|
|
|
* @return array
|
|
|
*/
|
|
|
public function getDevice(){
|
|
|
- $datas = $this->model::where(['status'=> 1])->orderRaw("rand()")->first();
|
|
|
+ $datas = $this->model::where(['status'=> 1])->orderBy(DB::raw('RAND()'))->first();
|
|
|
$datas = $datas? $datas->toArray() : [];
|
|
|
return $datas;
|
|
|
}
|
|
|
@@ -113,17 +114,19 @@ class DevicesService extends BaseService
|
|
|
$cacheKey = "caches:devices:nums_{$deviceCode}";
|
|
|
$datas = RedisService::get($cacheKey);
|
|
|
if($datas){
|
|
|
- shuffle($datas);
|
|
|
$datas = array_values($datas);
|
|
|
+ shuffle($datas);
|
|
|
return $datas;
|
|
|
}
|
|
|
|
|
|
- $deviceNums = range($deviceInfo->start_num, $deviceInfo->end_num);
|
|
|
+ $deviceNums = range($deviceInfo['start_num'], $deviceInfo['end_num']);
|
|
|
$datas = GongdengOrderModel::where(['status'=> 2, 'lamp_status'=> 2])->pluck('device_num');
|
|
|
$datas = $datas? $datas->toArray() : [];
|
|
|
- if($datas && $deviceNums){
|
|
|
- $datas = array_diff($deviceNums, $datas);
|
|
|
+ if($deviceNums){
|
|
|
+ $datas = $datas? array_diff($deviceNums, $datas) : $deviceNums;
|
|
|
if($datas){
|
|
|
+ $datas = array_values($datas);
|
|
|
+ shuffle($datas);
|
|
|
RedisService::set($cacheKey, $datas, rand(3,5));
|
|
|
}
|
|
|
}
|
|
|
@@ -131,14 +134,22 @@ class DevicesService extends BaseService
|
|
|
return $datas;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 亮灯处理
|
|
|
+ * @param $orderSn 订单号
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
public function catchLamp($orderSn){
|
|
|
if(empty($orderSn)){
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ // 验证是否已处理
|
|
|
+
|
|
|
// 获取可用设备
|
|
|
$errorKey = "caches:lamps:{$orderSn}";
|
|
|
$deviceInfo = $this->getDevice();
|
|
|
+
|
|
|
$deviceCode = isset($deviceInfo['code'])? $deviceInfo['code'] : '';
|
|
|
$startNum = isset($deviceInfo['start_num'])? $deviceInfo['start_num'] : 0;
|
|
|
$endNum = isset($deviceInfo['end_num'])? $deviceInfo['end_num'] : 0;
|
|
|
@@ -158,7 +169,7 @@ class DevicesService extends BaseService
|
|
|
|
|
|
// 亮灯处理
|
|
|
unset($deviceNums[0]);
|
|
|
- RedisService::set("caches:devices:nums_{$deviceCode}", $deviceNums, rand(3,5));
|
|
|
+ RedisService::set("caches:devices:nums_{$deviceCode}", $deviceNums, rand(10,30));
|
|
|
$colors = ['黄','红','绿','白'];
|
|
|
shuffle($colors);
|
|
|
$data = [
|
|
|
@@ -172,10 +183,13 @@ class DevicesService extends BaseService
|
|
|
// 调用亮灯接口处理
|
|
|
$apiUrl = ConfigService::make()->getConfigByCode('gd_api_url');
|
|
|
RedisService::set($errorKey.':request', ['url'=> $apiUrl,'data'=> $data], 3600);
|
|
|
- $result = httpRequest($apiUrl, $data);
|
|
|
+ $result = httpRequest($apiUrl, $data,'post','',3);
|
|
|
RedisService::set($errorKey.':result', $result, 3600);
|
|
|
+ $code = isset($result['code'])? $result['code'] : '';
|
|
|
|
|
|
// 更新灯状态
|
|
|
+ GongdengOrderModel::where('order_sn', $orderSn)->update(['lamp_status'=> 2,'device_num'=> $deviceLampNo,'params'=> json_encode($data, 256)]);
|
|
|
|
|
|
+ return true;
|
|
|
}
|
|
|
}
|