store_id = get_store_id(); } /** * @return array */ public function rules() { return [ [['status'], 'integer'], ]; } public function attributeLabels() { return [ 'status' => '设备状态', ]; } /** * @param array $arr | status 状态 name 名称 cat_id 分类id mch_id 入驻商 is_verify 审核 select 查询数据 * @return array */ public static function getList ($arr = []) { $query = Monitor::find() ->where(['store_id' => get_store_id()]); if (isset($arr['status']) && $arr['status'] > -1) { $query->andWhere([ 'status' => $arr['status'] ]); } $query->orderBy(['created_at' => SORT_ASC, 'id' => SORT_DESC]); $pagination = pagination_make($query); $pagination['data'] = $pagination['list']; return [ 'code' => 0, 'msg' => 'success', 'data' => $pagination ]; } /** * 绑定设备 * @param $arr * @return array */ public static function addItem($arr = []){ if($arr['id']){ $model = Monitor::findOne($arr['id']); }else{ $model = new Monitor(); } $model->store_id = get_store_id(); $model->name = $arr['name']; $model->serial = $arr['serial']; $model->code = $arr['code']; $model->cover_pic = $arr['cover_pic']; $model->status = 1; $t = \Yii::$app->db->beginTransaction(); try { if(!$model->save()){ $t->rollBack(); return ['code'=>1,'msg'=>$model->getErrors()]; } if($arr['id'] <= 0){ // 获取萤石配置 $setting = AdoptSetting::findOne(['store_id'=>get_store_id()]); if(!$setting->ys_app_key || !$setting->ys_secret){ $t->rollBack(); return ['code'=>1,'msg'=>'未设置萤石信息']; } $ysOpen = new YsClient($setting->ys_app_key,$setting->ys_secret); $getAccessTokenResult = $ysOpen->getAccessToken(); if(false == $getAccessTokenResult){ $t->rollBack(); return ['code'=>1,'msg'=>"萤石账号有误"]; } $addResult = $ysOpen->addDeviceItem($arr['serial'],$arr['code']); if($addResult['code'] != 200){ $t->rollBack(); return ['code'=>1,'msg'=>$addResult['msg']]; } } $t->commit(); return [ 'code' => 0, 'msg' => 'success', ]; }catch (\Exception $e){ $t->rollBack(); return ['code'=>1,'msg'=>$e->getMessage()]; } } /** * 解除绑定 * @param $arr * @return array * @throws \Throwable */ public static function delItem($arr = []){ $model = Monitor::findOne($arr['device_id']); if(!$model){ return ['code'=>1,'msg'=>'设备不存在,请先刷新设备列表']; } $t = \Yii::$app->db->beginTransaction(); try { // 获取萤石配置 $setting = AdoptSetting::findOne(['store_id'=>get_store_id()]); if(!$setting->ys_app_key || !$setting->ys_secret){ $t->rollBack(); return ['code'=>1,'msg'=>'未设置萤石信息']; } $ysOpen = new YsClient($setting->ys_app_key,$setting->ys_secret); $getAccessTokenResult = $ysOpen->getAccessToken(); if(false == $getAccessTokenResult){ $t->rollBack(); return ['code'=>1,'msg'=>"萤石账号有误"]; } $delResult = $ysOpen->delDeviceItem($model->serial); if($delResult['code'] != 200){ $t->rollBack(); return ['code'=>1,'msg'=>$delResult['msg']]; } if(!$model->delete()){ $t->rollBack(); return ['code'=>1,'msg'=>"删除设备失败"]; } $t->commit(); return ['code'=>0,'msg'=> '删除设备成功']; }catch (\Exception $e){ $t->rollBack(); return ['code'=>1,'msg'=>$e->getMessage()]; } } /** * 刷新设备列表 * @return array|void */ public static function refresh(){ // 获取萤石配置 $setting = AdoptSetting::findOne(['store_id'=>get_store_id()]); if(!$setting->ys_app_key || !$setting->ys_secret){ return ['code'=>1,'msg'=>'未设置萤石信息']; } $ysOpen = new YsClient($setting->ys_app_key,$setting->ys_secret); $getAccessTokenResult = $ysOpen->getAccessToken(); if(false == $getAccessTokenResult){ return ['code'=>1,'msg'=>"萤石账号有误"]; } $result = $ysOpen->getDeviceList(); if($result['code'] != 200){ return ['code'=>1,'msg'=>$result['msg'],'resultCode'=>$result['code']]; } foreach($result['data'] as $item){ // 根据设备序列号查询设备是否存在 $deviceItem = Monitor::findOne(['serial'=>$item['deviceSerial']]); if($deviceItem){ // 更新一下状态 $deviceItem->status = $item['status']; }else{ // 写入一条 $deviceItem = new Monitor(); $deviceItem->store_id = get_store_id(); $deviceItem->name = $item['deviceName']; $deviceItem->serial = $item['deviceSerial']; $deviceItem->status = $item['status']; $deviceItem->created_at = bcdiv($item['addTime'],1000,0); } if(!$deviceItem->save()){ } } return ['code'=>0,'msg'=>'更新成功']; } /** * 获取设备选择列表 * @return array */ public static function getSelectList(){ $list = Monitor::find()->where([ 'store_id' => get_store_id() ])->select('id,name')->all(); return ['code'=>0,'data'=>$list]; } }