You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
350 lines
10 KiB
350 lines
10 KiB
<?php
|
|
// +----------------------------------------------------------------------
|
|
// | Niucloud-admin 企业快速开发的多应用管理平台
|
|
// +----------------------------------------------------------------------
|
|
// | 官方网址:https://www.niucloud.com
|
|
// +----------------------------------------------------------------------
|
|
// | niucloud团队 版权所有 开源版本可自由商用
|
|
// +----------------------------------------------------------------------
|
|
// | Author: Niucloud Team
|
|
// +----------------------------------------------------------------------
|
|
|
|
namespace app\service\api\apiService;
|
|
|
|
use app\model\campus\Campus;
|
|
use app\model\campus_person_role\CampusPersonRole;
|
|
use app\model\chat_friends\ChatFriends;
|
|
use app\model\physical_test\PhysicalTest;
|
|
use core\base\BaseApiService;
|
|
|
|
/**
|
|
* 体测报告-控制器服务层
|
|
* Class MemberService
|
|
* @package app\service\api\member
|
|
*/
|
|
class PhysicalTestService extends BaseApiService
|
|
{
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
}
|
|
|
|
//查询列表
|
|
public function getList(array $where,string $field = '*')
|
|
{
|
|
$page_params = $this->getPageParam();//获取请求参数中的页码+分页数
|
|
$page = $page_params['page'];
|
|
$limit = $page_params['limit'];
|
|
|
|
$model = new PhysicalTest();
|
|
|
|
//判断用没有员工id
|
|
if (!empty($where['student_id'])) {
|
|
$model = $model->where('student_id', $where['student_id']);
|
|
}
|
|
|
|
$data = $model
|
|
->field($field)
|
|
->order('id','desc')
|
|
->append([
|
|
'customerResources'
|
|
])
|
|
->with([
|
|
'customerResourcesHasOne'
|
|
])
|
|
->paginate([
|
|
'list_rows' => $limit,
|
|
'page' => $page,
|
|
])->toArray();
|
|
|
|
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();
|
|
$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'],
|
|
'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 = [
|
|
'height', 'weight', 'coach_id'
|
|
];
|
|
|
|
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' => []
|
|
];
|
|
}
|
|
}
|
|
}
|
|
|