getPageParam();//获取请求参数中的页码+分页数 $page = $page_params['page']; $limit = $page_params['limit']; $model = new PhysicalTest(); //判断用没有员工id if (!empty($where['resource_id'])) { $model = $model->where('resource_id', $where['resource_id']); } $data = $model ->field($field) ->order('id','desc') ->append([ 'customerResources' ]) ->with([ 'customerResourcesHasOne' ]) ->paginate([ 'list_rows' => $limit, 'page' => $page, ])->toArray(); foreach ($data['data'] as &$v) { $age = $v['age'];//年龄 $gender = $v['customerResourcesHasOne']['gender'] == 'female' ? 2:1 ;//性别( 1:男,2:女) $height = $v['height'];//身高 $weight = $v['weight'];//体重 $v['calculateChildHealthScore'] = calculateChildHealthScore($age, $gender, $height, $weight);//综合评分 } return $data; } //查询详情 public function getInfo(array $where,string $field = '*') { $model = new PhysicalTest(); //判断用没有体测报告id if (!empty($where['id'])) { $model = $model->where('id', $where['id']); } $data = $model ->field($field) ->append([ 'customerResources' ]) ->with([ 'customerResourcesHasOne' ]) ->find(); if ($data) { $data = $data->toArray(); $age = $data['age'];//年龄 $gender = $data['customerResourcesHasOne']['gender'] == 'female' ? 2 : 1;//性别( 1:男,2:女) $height = $data['height'];//身高 $weight = $data['weight'];//体重 $data['calculateChildHealthScore'] = calculateChildHealthScore($age, $gender, $height, $weight);//综合评分 $res = [ 'code' => 1, 'msg' => '操作成功', 'data' => $data ]; return $res; } else { $res = [ 'code' => 0, 'msg' => '暂无数据', 'data' => [] ]; return $res; } } /** * 添加体测记录 * @param array $data * @return array */ public function add(array $data) { try { $model = new PhysicalTest(); // 设置基础数据 $physicalTestData = [ 'resource_id' => $data['resource_id'], 'student_id' => $data['student_id'], 'age' => $data['age'], 'height' => $data['height'], 'weight' => $data['weight'], 'coach_id' => $data['coach_id'] ?? null, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s') ]; // 设置体测项目数据 $test_items = [ 'seated_forward_bend', 'sit_ups', 'push_ups', 'flamingo_balance', 'thirty_sec_jump', 'standing_long_jump', 'agility_run', 'balance_beam', 'tennis_throw', 'ten_meter_shuttle_run' ]; foreach ($test_items as $item) { if (isset($data[$item])) { $physicalTestData[$item] = $data[$item]; } } // 处理体测报告附件 if (!empty($data['physical_test_report'])) { $physicalTestData['physical_test_report'] = is_array($data['physical_test_report']) ? implode(',', $data['physical_test_report']) : $data['physical_test_report']; } $result = $model->create($physicalTestData); if ($result) { return [ 'code' => 1, 'msg' => '添加成功', 'data' => $result->toArray() ]; } else { return [ 'code' => 0, 'msg' => '添加失败', 'data' => [] ]; } } catch (\Exception $e) { return [ 'code' => 0, 'msg' => '添加失败:' . $e->getMessage(), 'data' => [] ]; } } /** * 编辑体测记录 * @param array $data * @return array */ public function edit(array $data) { try { $model = new PhysicalTest(); $record = $model->find($data['id']); if (!$record) { return [ 'code' => 0, 'msg' => '记录不存在', 'data' => [] ]; } // 更新基础数据 $updateData = [ 'updated_at' => date('Y-m-d H:i:s') ]; // 允许更新的字段 $allowed_fields = [ 'age', 'height', 'weight', 'coach_id', 'seated_forward_bend', 'sit_ups', 'push_ups', 'flamingo_balance', 'thirty_sec_jump', 'standing_long_jump', 'agility_run', 'balance_beam', 'tennis_throw', 'ten_meter_shuttle_run' ]; foreach ($allowed_fields as $field) { if (isset($data[$field])) { $updateData[$field] = $data[$field]; } } // 处理体测报告附件 if (isset($data['physical_test_report'])) { $updateData['physical_test_report'] = is_array($data['physical_test_report']) ? implode(',', $data['physical_test_report']) : $data['physical_test_report']; } $result = $record->save($updateData); if ($result !== false) { return [ 'code' => 1, 'msg' => '修改成功', 'data' => $record->toArray() ]; } else { return [ 'code' => 0, 'msg' => '修改失败', 'data' => [] ]; } } catch (\Exception $e) { return [ 'code' => 0, 'msg' => '修改失败:' . $e->getMessage(), 'data' => [] ]; } } /** * 删除体测记录 * @param int $id * @return array */ public function delete($id) { try { $model = new PhysicalTest(); $record = $model->find($id); if (!$record) { return [ 'code' => 0, 'msg' => '记录不存在', 'data' => [] ]; } $result = $record->delete(); if ($result) { return [ 'code' => 1, 'msg' => '删除成功', 'data' => [] ]; } else { return [ 'code' => 0, 'msg' => '删除失败', 'data' => [] ]; } } catch (\Exception $e) { return [ 'code' => 0, 'msg' => '删除失败:' . $e->getMessage(), 'data' => [] ]; } } /** * 上传PDF文件 * @param $file * @return array */ public function uploadPdf($file) { try { if (!$file || !$file->isValid()) { return [ 'code' => 0, 'msg' => '上传的文件无效', 'data' => [] ]; } // 验证文件类型 $allowedExtensions = ['pdf']; $fileExtension = strtolower($file->getOriginalExtension()); if (!in_array($fileExtension, $allowedExtensions)) { return [ 'code' => 0, 'msg' => '只支持PDF文件格式', 'data' => [] ]; } // 验证文件大小(限制10MB) $maxSize = 10 * 1024 * 1024; // 10MB if ($file->getSize() > $maxSize) { return [ 'code' => 0, 'msg' => '文件大小不能超过10MB', 'data' => [] ]; } // 设置上传目录 $uploadDir = './uploads/physical_test/pdf/' . date('Y/m/'); // 如果目录不存在,创建目录 if (!is_dir($uploadDir)) { mkdir($uploadDir, 0755, true); } // 生成唯一文件名 $fileName = date('YmdHis') . '_' . uniqid() . '.pdf'; // 移动文件 $file->move($uploadDir, $fileName); // 构建完整路径 $fullPath = $uploadDir . $fileName; $webPath = '/uploads/physical_test/pdf/' . date('Y/m/') . $fileName; // 返回文件信息 return [ 'code' => 1, 'msg' => '上传成功', 'data' => [ 'file_name' => $fileName, 'file_path' => $fullPath, 'file_url' => $webPath, 'file_size' => filesize($fullPath), 'upload_time' => date('Y-m-d H:i:s') ] ]; } catch (\Exception $e) { return [ 'code' => 0, 'msg' => '上传失败:' . $e->getMessage(), 'data' => [] ]; } } }