isOptions()) { exit(); } } public function index() { $this->success('请求成功'); } /** * 用户输入账号密码 * 1。验证登录返回信息 */ public function Login() { header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, POST, OPTIONS'); header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Requested-With'); if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { exit; } $param = input(); $username = isset($param['username']) ? trim($param['username']) : ''; $password = isset($param['password']) ? trim($param['password']) : ''; // 查询用户表 $user = Db::name('rfid_user') ->where('username', $username) ->where('password', md5($password)) ->find(); if (!$user) { return json([ 'code' => 401, 'msg' => '用户名或密码错误', 'data' => null ]); } // 获取当前时间戳 & 今天结束时间戳 $now = time(); $todayEnd = strtotime(date('Y-m-d 23:59:59')); // 判断 token 是否有效 $tokenExpireTime = isset($user['token_expire_time']) && !empty($user['token_expire_time']) ? strtotime($user['token_expire_time']) : 0; if (!empty($user['token']) && $tokenExpireTime > $now) { $token = $user['token']; // 继续使用原 token } else { // 生成新 token $token = md5($username . time() . uniqid()); // 更新用户表 token 字段 Db::name('rfid_user') ->where('id', $user['id']) ->update([ 'token' => $token, 'token_expire_time' => date('Y-m-d H:i:s', $todayEnd), 'sys_rq' => date('Y-m-d H:i:s') ]); } // 构造返回数据 $returnData = [ 'user_info' => [ 'id' => $user['id'], 'username' => $user['username'], 'nickname' => $user['nickname'] ?? $user['username'], 'building' => $user['building'], 'room' => $user['room'], 'pen' => $user['pen'] ], 'token' => $token, 'token_expire_time' => date('Y-m-d H:i:s', $todayEnd) ]; return json([ 'code' => 0, 'msg' => '登录成功', 'data' => $returnData ]); } /** * 通过提交的用户id保存当前编号信息 */ public function Post_Usersetup() { header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, POST, OPTIONS'); header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Requested-With'); if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { exit; } $param = input(); $id = trim($param['userid']); $arr = [ 'building' => $param['building'], 'room' => $param['room'], 'pen' => $param['pen'], ]; Db::name('rfid_user') ->where('id', $id) ->update($arr); return json([ 'code' => 0, 'msg' => '保存成功', 'data' => '' ]); } /** * 通过用户的id获取当前用户信息 * rfid_user表可以通过id获取到 * 用户,栋舍编号,房间编号,栏位编号 */ public function UserList() { header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, POST, OPTIONS'); header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Requested-With'); if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { exit; } $param = input(); $id = trim($param['userid']); $res = Db::name('rfid_user') ->field('nickname,username,id,token,token_expire_time,building,room,pen') ->where('id', $id) ->find(); if($res){ return json([ 'code' => 0, 'msg' => '获取用户数据信息', 'data' => $res ]); } } //获取栋舍编号 public function Get_Building(){ header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, POST, OPTIONS'); header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Requested-With'); if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { exit; } $res = Db::name('building') ->select(); return json([ 'code' => 0, 'msg' => '栋舍编号', 'data' => $res ]); } //获取房间编号 public function Get_Room(){ header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, POST, OPTIONS'); header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Requested-With'); if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { exit; } $res = Db::name('room') ->select(); return json([ 'code' => 0, 'msg' => '房间编号', 'data' => $res ]); } //获取栏位编号 public function Get_Pen(){ header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, POST, OPTIONS'); header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Requested-With'); if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { exit; } $res = Db::name('pen') ->select(); return json([ 'code' => 0, 'msg' => '栏位编号', 'data' => $res ]); } /** * 获取前端提交的数据 */ public function Post_ListAdd() { header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, POST, OPTIONS'); header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Requested-With'); if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { exit; } $param = input(); $insertData = []; foreach ($param as $item) { $insertData[] = [ 'username' => $item['username'] ?? '', 'userId' => $item['userId'] ?? '', 'rfid' => trim($item['rfid']), 'rfid_num' => count($param), // 总记录数 'buildingName' => $item['buildingName'] ?? '', 'roomName' => $item['roomName'] ?? '', 'penNo' => $item['penNo'] ?? '', 'model' => $item['deviceModel'] ?? '', 'version' => $item['deviceVersion'] ?? '', 'type' => $item['type'] ?? '', 'sys_rq' => date('Y-m-d H:i:s'), 'gender' => $item['gender'] ?? '', 'birthDate' => $item['birthDate'] ?? '', 'notes' => $item['notes'] ?? '', ]; } if (empty($insertData)) { return json([ 'code' => 1, 'msg' => '无有效数据', ]); } try { $result = Db::name("records")->insertAll($insertData); return json([ 'code' => 0, 'msg' => '数据已提交成功' ]); } catch (\Exception $e) { Log::error('插入失败:' . $e->getMessage()); return json([ 'code' => 500, 'msg' => '插入异常:' . $e->getMessage(), ]); } } //获取数据信息 public function GetListArr(){ header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, POST, OPTIONS'); header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Requested-With'); if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { exit; } // 创建最终返回的数据数组 $list = []; // 查询new_records表的所有数据,保持原样 $newRecordsData = Db::name("new_records") ->select(); // 将new_records表的数据添加到结果数组 if (!empty($newRecordsData)) { $list = array_merge($list, $newRecordsData); } // 查询records表的数据,按sys_rq倒序 $recordsData = Db::name("records") ->order('sys_rq DESC') ->select(); // 对records表数据按rfid去重,只保留每个rfid最新的一条记录 $rfidMap = []; $uniqueRecords = []; foreach ($recordsData as $record) { $rfid = trim($record['rfid']); // 如果这个rfid还没有处理过,则添加到结果中 if (!isset($rfidMap[$rfid])) { $rfidMap[$rfid] = true; $uniqueRecords[] = $record; } } // 将去重后的records表数据添加到结果数组 if (!empty($uniqueRecords)) { $list = array_merge($list, $uniqueRecords); } return json([ 'code' => 0, 'msg' => '数据获取成功', 'list' => $list ]); } }