getUserId(); $user = LockUserModel::where('user_id', $user_id)->find(); if (!empty($user) && $user['status'] == 2) { $this->success(); } $this->error(''); } public function getUserInfo() { $user_id = $this->getUserId(); $user = LockUserModel::where('user_id', $user_id)->find(); $this->success('', $user); } public function editUserInfo() { $user_id = $this->getUserId(); $info = $this->request->post(); $user = LockUserModel::where('user_id', $user_id)->find(); if (empty($user)) { $info['user_id'] = $user_id; $info['create_time'] = time(); LockUserModel::create($info); } else { $info['status'] = 1; LockUserModel::where('user_id', $user_id)->update($info); } $this->success(); } public function getBookList() { $param = $this->request->param(); $page = empty($param['page']) ? 1 : $param['page']; $size = empty($param['size']) ? 10 : $param['size']; //搜索条件 $list = LockBookModel::where('user_id', $this->getUserId()) ->page($page, $size) ->order('id desc') ->select(); if (!$list->isEmpty()) { $time = time(); foreach ($list as $v) { if ($v['start_time'] > $time) { $v['status'] = 1; $v['status_name'] = '未开始'; } elseif ($v['start_time'] <= $time && $v['end_time'] >= $time) { $v['status'] = 2; $v['status_name'] = '进行中'; } else { if ($v['is_use'] == 1) { $v['status'] = 3; $v['status_name'] = '已完成'; } else { $v['status'] = 4; $v['status_name'] = '爽约'; } } $v['date'] = date('Y年m月d日', $v['start_time']); $v['time'] = date('H:i', $v['start_time']) . ' - ' . date('H:i', $v['end_time']); } } $this->success('', $list); } public function showPassword() { $id = $this->request->param('id'); $book = LockBookModel::where('id', $id)->where('user_id', $this->getUserId())->find(); if (empty($book)) { $this->error('该预约不存在'); } $time = time(); if ($time < $book['start_time']) { $this->error('预约未开始'); } if ($time > $book['end_time']) { $this->error('预约已结束'); } if (!empty($book['password'])) { $this->success('成功', ['password' => $book['password']]); } $password = $this->_getLockPassword($id); $this->success('成功', ['password' => $password]); } public function refreshPassword() { $id = $this->request->param('id'); $book = LockBookModel::where('id', $id)->where('user_id', $this->getUserId())->find(); if (empty($book)) { $this->error('该预约不存在'); } $time = time(); if ($time < $book['start_time']) { $this->error('预约未开始'); } if ($time > $book['end_time']) { $this->error('预约已结束'); } $password = $this->_getLockPassword($id); $this->success('成功', ['password' => $password]); } private function _getLockPassword($id) { $book = LockBookModel::where('id', $id)->where('user_id', $this->getUserId())->find(); if (empty($book)) { $this->error('该预约不存在'); } //锁信息 $lock = LockModel::find($book['lock_id']); if (empty($lock) || empty($lock['lock_id'])) { $this->error('锁不存在或配置有误,请联系管理员'); } $teahouse_setting = cmf_get_option('teahouse_setting'); //获取锁密码的基础信息 $lock_id = $lock['lock_id']; $token = $this->_getLockToken(); $clientId = $teahouse_setting['clientId']; $start_time = $book['start_time']; $end_time = $book['end_time']; $now = time(); //获取锁密码 $url = "https://cnapi.sciener.com/v3/keyboardPwd/get"; $data = [ 'clientId' => $clientId, 'accessToken' => $token, 'lockId' => $lock_id, 'keyboardPwdType' => 1, 'startDate' => $start_time * 1000, 'endDate' => $end_time * 1000, 'date' => $now * 1000, ]; $header = ['Content-Type: application/x-www-form-urlencoded']; $result = Http::http_post_json($url, $data, $header); if (!empty($result['errcode'])) { $this->error('获取密码失败,请联系管理员。' . $result['description']); } //保存密码 $book->password = $result['keyboardPwd']; $book->save(); LockBookModel::where('relation_id', $book['relation_id'])->update(['is_use' => 1]); return $result['keyboardPwd']; } private function _getLockToken() { $teahouse_token = cmf_get_option('teahouse_token'); if (empty($teahouse_token)) { return $this->_getLockTokenFirst(); } $teahouse_token = cmf_get_option('teahouse_token'); if ($teahouse_token['expires_in'] < time()) { return $this->_getLockTokenByRefresh(); } return $teahouse_token['access_token']; } private function _getLockTokenFirst() { $url = "https://cnapi.sciener.com/oauth2/token"; $teahouse_setting = cmf_get_option('teahouse_setting'); if (empty($teahouse_setting)) { $this->error('门锁配置错误,请联系管理员'); } $data = [ 'clientId' => $teahouse_setting['clientId'], 'clientSecret' => $teahouse_setting['clientSecret'], 'username' => $teahouse_setting['username'], 'password' => md5($teahouse_setting['password']), ]; $header = ['Content-Type: application/x-www-form-urlencoded']; $result = Http::http_post_json($url, $data, $header); if (!empty($result['errcode'])) { $this->error('门锁配置错误,请联系管理员。' . $result['description']); } cmf_set_option('teahouse_token', $result); return $result['access_token']; } private function _getLockTokenByRefresh() { $url = "https://cnapi.sciener.com/oauth2/token"; $teahouse_setting = cmf_get_option('teahouse_setting'); if (empty($teahouse_setting)) { $this->error('门锁配置错误,请联系管理员'); } $teahouse_token = cmf_get_option('teahouse_token'); $data = [ 'clientId' => $teahouse_setting['clientId'], 'clientSecret' => $teahouse_setting['clientSecret'], 'grant_type' => 'refresh_token', 'refresh_token' => $teahouse_token['refresh_token'], ]; $header = ['Content-Type: application/x-www-form-urlencoded']; $result = Http::http_post_json($url, $data, $header); if (!empty($result['errcode'])) { $this->error('门锁配置错误,请联系管理员。' . $result['description']); } cmf_set_option('teahouse_token', $result); return $result['access_token']; } }