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.
531 lines
17 KiB
531 lines
17 KiB
<?php
|
|
// +----------------------------------------------------------------------
|
|
// | Niucloud-admin 企业快速开发的多应用管理平台
|
|
// +----------------------------------------------------------------------
|
|
// | 官方网址:https://www.niucloud.com
|
|
// +----------------------------------------------------------------------
|
|
// | niucloud团队 版权所有 开源版本可自由商用
|
|
// +----------------------------------------------------------------------
|
|
// | Author: Niucloud Team
|
|
// +----------------------------------------------------------------------
|
|
|
|
namespace app\service\api\apiService;
|
|
|
|
use app\model\chat_friends\ChatFriends;
|
|
use app\model\course_schedule\CourseSchedule;
|
|
use app\model\person_course_schedule\PersonCourseSchedule;
|
|
use app\model\personnel\Personnel;
|
|
use app\model\student_course_usage\StudentCourseUsage;
|
|
use app\model\student_courses\StudentCourses;
|
|
use app\model\student\Student;
|
|
use app\model\customer_resources\CustomerResources;
|
|
use app\model\venue\Venue;
|
|
use core\base\BaseApiService;
|
|
use think\facade\Db;
|
|
|
|
/**
|
|
* 测试-控制器服务层
|
|
* Class MemberService
|
|
* @package app\service\api\member
|
|
*/
|
|
class PersonCourseScheduleService extends BaseApiService
|
|
{
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
}
|
|
|
|
//查询列表
|
|
public function getList(array $where)
|
|
{
|
|
$page_params = $this->getPageParam();//获取请求参数中的页码+分页数
|
|
$page = $page_params['page'];
|
|
$limit = $page_params['limit'];
|
|
|
|
$model = new PersonCourseSchedule();
|
|
//判断有没有客户资源id
|
|
if (!empty($where['resources_id'])) {
|
|
$model = $model->where('resources_id', $where['resources_id']);
|
|
}
|
|
|
|
//上课日期
|
|
if (!empty($where['course_date'])) {
|
|
$model = $model->where('school_person_course_schedule.course_date', $where['course_date']);
|
|
}
|
|
|
|
//判断有没有客户上课状态
|
|
if (array_key_exists('status', $where) && $where['status'] != '') {
|
|
// $model = $model->where('status', $where['status']);
|
|
$model = $model->where('school_person_course_schedule.status', $where['status']);
|
|
}
|
|
|
|
$venues_info = [];//场地信息
|
|
// 判断有没有场地ID
|
|
if (!empty($where['venue_id'])) {
|
|
$model = $model->hasWhere('courseScheduleHasOne', ['venue_id' => $where['venue_id']]);
|
|
$venues_info = Venue::where('id', $where['venue_id'])->find();
|
|
if ($venues_info) {
|
|
$venues_info = $venues_info->toArray();
|
|
} else {
|
|
$venues_info = [];
|
|
}
|
|
}
|
|
|
|
$data = $model->order('course_date', 'desc')
|
|
->with([
|
|
//课程安排表
|
|
'courseScheduleHasOne' => function ($query) {
|
|
$query->with([
|
|
'venue',//场地
|
|
'campus',//校区
|
|
'course',//课程
|
|
'coach',//教练
|
|
]);
|
|
},
|
|
])
|
|
->paginate([
|
|
'list_rows' => $limit,
|
|
'page' => $page,
|
|
])
|
|
->toArray();
|
|
|
|
$data['venues_info'] = $venues_info;//场地信息详情
|
|
return $data;
|
|
}
|
|
|
|
//查询详情
|
|
public function getInfo(array $where)
|
|
{
|
|
|
|
$res = [
|
|
'code' => 0,
|
|
'msg' => '暂无数据',
|
|
'data' => []
|
|
];
|
|
|
|
$model = new PersonCourseSchedule();
|
|
//判断有无人员与课程安排关系表id
|
|
if (!empty($where['person_course_schedule_id'])) {
|
|
$model = $model->where('id', $where['person_course_schedule_id']);
|
|
}
|
|
$data = $model
|
|
->with([
|
|
//课程安排表
|
|
'courseScheduleHasOne' => function ($query) {
|
|
$query->with([
|
|
'venue',//场地
|
|
'campus',//校区
|
|
'course',//课程
|
|
'coach',//教练
|
|
]);
|
|
},
|
|
])
|
|
->find();
|
|
|
|
|
|
if ($data) {
|
|
$data = $data->toArray();
|
|
|
|
if (empty($data['courseScheduleHasOne']['id'])) {
|
|
$res = [
|
|
'code' => 0,
|
|
'msg' => '暂无课程安排数据',
|
|
'data' => []
|
|
];
|
|
return $res;
|
|
}
|
|
|
|
$res = [
|
|
'code' => 1,
|
|
'msg' => '操作成功',
|
|
'data' => $data
|
|
];
|
|
return $res;
|
|
} else {
|
|
$res = [
|
|
'code' => 0,
|
|
'msg' => '暂无数据',
|
|
'data' => []
|
|
];
|
|
return $res;
|
|
}
|
|
}
|
|
|
|
//修改人员与课程安排关系表
|
|
public function editStatus($person_course_schedule_id, array $data)
|
|
{
|
|
|
|
$res = [
|
|
'code' => 0,
|
|
'msg' => '操作失败',
|
|
'data' => []
|
|
];
|
|
|
|
if (empty($data['updated_at'])) {
|
|
$data['updated_at'] = date('Y-m-d H:i:s');
|
|
}
|
|
|
|
$model = PersonCourseSchedule::where('id', $person_course_schedule_id)->find();
|
|
if (!$model) {
|
|
$res = [
|
|
'code' => 0,
|
|
'msg' => '未找到课程安排信息',
|
|
'data' => []
|
|
];
|
|
return $res;
|
|
}
|
|
|
|
//状态0待上课1已上课2请假
|
|
if (in_array($model['status'], [0, 2])) {
|
|
$edit = PersonCourseSchedule::where('id', $person_course_schedule_id)->update($data);
|
|
|
|
if ($edit) {
|
|
$res = [
|
|
'code' => 1,
|
|
'msg' => '操作成功',
|
|
'data' => []
|
|
];
|
|
}
|
|
return $res;
|
|
} elseif ($model['status'] == 1) {
|
|
$res = [
|
|
'code' => 0,
|
|
'msg' => '该课程已上课无法请假',
|
|
'data' => []
|
|
];
|
|
return $res;
|
|
}
|
|
}
|
|
|
|
//获取排课日期
|
|
public function getCalendar(array $where)
|
|
{
|
|
$data = PersonCourseSchedule::where('resources_id', $where['resources_id'])
|
|
->where('course_date', '>=', $where['start_date'])
|
|
->where('course_date', '<=', $where['end_date'])
|
|
->select()
|
|
->toArray();
|
|
|
|
$result = [];
|
|
$currentDate = strtotime($where['start_date']);
|
|
$endDate = strtotime($where['end_date']);
|
|
|
|
while ($currentDate <= $endDate) {
|
|
$dateStr = date('Y-m-d', $currentDate);
|
|
$today = date('d', $currentDate);
|
|
$weekDay = date('w', $currentDate);
|
|
$weekMap = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
|
|
$weekStr = $weekMap[$weekDay];
|
|
|
|
$result[] = [
|
|
'date' => $dateStr,
|
|
'status' => '1', // 默认状态为正常
|
|
'is_sign' => '0', // 是否有课|1=有课,0=没课
|
|
'week' => $weekStr,
|
|
'today' => $today
|
|
];
|
|
|
|
$currentDate = strtotime('+1 day', $currentDate);
|
|
}
|
|
|
|
foreach ($data as $v) {
|
|
foreach ($result as &$rv) {
|
|
if ($rv['date'] == $v['course_date']) {
|
|
//0待上课1已上课2请假
|
|
if (in_array($v['status'], [0, 1])) {
|
|
$status = '1';
|
|
} else {
|
|
$status = '2';
|
|
}
|
|
$rv['status'] = $status;//状态1是正常 2请假
|
|
$rv['is_sign'] = '1';//是否有课|1=有课,0=没课
|
|
}
|
|
}
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
//获取学生排课的全部场地列表
|
|
public function getVenueListAll(array $where)
|
|
{
|
|
$schedule_id = PersonCourseSchedule::where('resources_id', $where['resources_id'])
|
|
->where('course_date', $where['course_date'])
|
|
->distinct(true)
|
|
->column('schedule_id');
|
|
|
|
if(!$schedule_id){
|
|
return [];
|
|
}
|
|
|
|
$venue_id = CourseSchedule::whereIn('id',$schedule_id)->distinct(true)->column('venue_id');
|
|
if(!$venue_id){
|
|
return [];
|
|
}
|
|
|
|
$res = Venue::whereIn('id',$venue_id)
|
|
->with([
|
|
'campus'
|
|
])
|
|
->select()->toArray();
|
|
|
|
return $res;
|
|
}
|
|
|
|
//获取学生排课的教练列表
|
|
public function memberCoachList(array $where)
|
|
{
|
|
$page_params = $this->getPageParam();//获取请求参数中的页码+分页数
|
|
$page = $page_params['page'];
|
|
$limit = $page_params['limit'];
|
|
|
|
$res = [
|
|
'code' => 0,
|
|
'msg' => '暂无课程安排',
|
|
'data' => []
|
|
];
|
|
|
|
$schedule_id = PersonCourseSchedule::where('resources_id', $where['resources_id'])->distinct(true)->column('schedule_id');
|
|
if(!$schedule_id){
|
|
return $res;
|
|
}
|
|
$coach_id = CourseSchedule::whereIn('id',$schedule_id)->distinct(true)->column('coach_id');
|
|
if(!$coach_id){
|
|
return $res;
|
|
}
|
|
|
|
$data = Personnel::whereIn('id', $coach_id)
|
|
->paginate([
|
|
'list_rows' => $limit,
|
|
'page' => $page,
|
|
])
|
|
->toArray();
|
|
$res = [
|
|
'code' => 1,
|
|
'msg' => '操作成功',
|
|
'data' => $data
|
|
];
|
|
return $res;
|
|
|
|
}
|
|
|
|
//获取学生课时消费记录列表
|
|
public function getStudentCourseUsageList(array $where)
|
|
{
|
|
$page_params = $this->getPageParam();//获取请求参数中的页码+分页数
|
|
$page = $page_params['page'];
|
|
$limit = $page_params['limit'];
|
|
|
|
$res = [
|
|
'code' => 0,
|
|
'msg' => '暂无更多',
|
|
'data' => []
|
|
];
|
|
|
|
$schedule_id = PersonCourseSchedule::where('resources_id',$where['resources_id'])
|
|
->where('status',1)
|
|
->distinct(true)
|
|
->column('schedule_id');
|
|
|
|
if(!$schedule_id){
|
|
return $res;
|
|
}
|
|
|
|
$data = StudentCourseUsage::whereIn('student_course_id',$schedule_id)
|
|
->order('usage_date', 'desc')
|
|
->with([
|
|
'studentCourseHasOne' => function ($query) {
|
|
$query->append(['course']);
|
|
}
|
|
])
|
|
->paginate([
|
|
'list_rows' => $limit,
|
|
'page' => $page,
|
|
])
|
|
->toArray();
|
|
|
|
if(!count($data['data'])){
|
|
return $res;
|
|
}
|
|
|
|
$res = [
|
|
'code' => 1,
|
|
'msg' => '操作成功',
|
|
'data' => $data
|
|
];
|
|
|
|
return $res;
|
|
}
|
|
|
|
//获取学生课程信息列表(包含教练配置)
|
|
public function getStudentCourseInfo(array $where)
|
|
{
|
|
$res = [
|
|
'code' => 0,
|
|
'msg' => '暂无课程信息',
|
|
'data' => []
|
|
];
|
|
|
|
// 通过客户资源ID查找对应的学员
|
|
$student = Student::where('resource_id', $where['resource_id'])->find();
|
|
if (!$student) {
|
|
return $res;
|
|
}
|
|
|
|
// 查询学员的课程信息
|
|
$studentCourses = StudentCourses::where('student_id', $student['id'])
|
|
->with([
|
|
'course' => function($query) {
|
|
$query->field('id,course_name,status');
|
|
},
|
|
'student' => function($query) {
|
|
$query->field('id,name');
|
|
}
|
|
])
|
|
->select()
|
|
->toArray();
|
|
|
|
if (empty($studentCourses)) {
|
|
return $res;
|
|
}
|
|
|
|
$courseData = [];
|
|
foreach ($studentCourses as $course) {
|
|
// 计算已上课时和请假次数
|
|
$usedCount = StudentCourseUsage::where('student_course_id', $course['id'])
|
|
->where('usage_type', 'consume')
|
|
->count();
|
|
|
|
$leaveCount = PersonCourseSchedule::where('resources_id', $where['resource_id'])
|
|
->where('status', 2) // 2表示请假
|
|
->count();
|
|
|
|
// 获取教练配置信息
|
|
$mainCoach = null;
|
|
$education = null;
|
|
$assistants = [];
|
|
|
|
if (!empty($course['main_coach_id'])) {
|
|
$mainCoach = Personnel::where('id', $course['main_coach_id'])->field('id,name')->find();
|
|
}
|
|
if (!empty($course['education_id'])) {
|
|
$education = Personnel::where('id', $course['education_id'])->field('id,name')->find();
|
|
}
|
|
if (!empty($course['assistant_ids'])) {
|
|
$assistantIds = explode(',', $course['assistant_ids']);
|
|
$assistants = Personnel::whereIn('id', $assistantIds)->field('id,name')->select()->toArray();
|
|
}
|
|
|
|
// 计算课程状态
|
|
$status = 'active'; // 默认进行中
|
|
if (!empty($course['end_date'])) {
|
|
if (strtotime($course['end_date']) < time()) {
|
|
$status = 'expired'; // 已过期
|
|
}
|
|
}
|
|
if ($usedCount >= $course['total_hours']) {
|
|
$status = 'completed'; // 已完成
|
|
}
|
|
|
|
$courseData[] = [
|
|
'id' => $course['id'],
|
|
'course_name' => $course['course']['course_name'] ?? '未知课程',
|
|
'total_count' => $course['total_hours'] ?? 0,
|
|
'used_count' => $usedCount,
|
|
'leave_count' => $leaveCount,
|
|
'expiry_date' => $course['end_date'] ?? '',
|
|
'status' => $status,
|
|
'main_coach_id' => $course['main_coach_id'] ?? null,
|
|
'main_coach_name' => $mainCoach['name'] ?? '未分配',
|
|
'education_id' => $course['education_id'] ?? null,
|
|
'education_name' => $education['name'] ?? '未分配',
|
|
'assistant_ids' => $course['assistant_ids'] ?? '',
|
|
'assistant_names' => implode(', ', array_column($assistants, 'name')) ?: '无'
|
|
];
|
|
}
|
|
|
|
$res = [
|
|
'code' => 1,
|
|
'msg' => '获取成功',
|
|
'data' => $courseData
|
|
];
|
|
|
|
return $res;
|
|
}
|
|
|
|
//获取人员列表(教练、教务、助教)
|
|
public function getPersonnelList()
|
|
{
|
|
$res = [
|
|
'code' => 0,
|
|
'msg' => '获取人员列表失败',
|
|
'data' => []
|
|
];
|
|
|
|
try {
|
|
// 获取所有人员,可以通过角色或者其他字段来区分角色类型
|
|
$personnel = Personnel::field('id,name,role_type,role_name')
|
|
->where('status', 1) // 假设1表示正常状态
|
|
->select()
|
|
->toArray();
|
|
|
|
$res = [
|
|
'code' => 1,
|
|
'msg' => '获取成功',
|
|
'data' => $personnel
|
|
];
|
|
} catch (\Exception $e) {
|
|
$res['msg'] = '获取人员列表异常:' . $e->getMessage();
|
|
}
|
|
|
|
return $res;
|
|
}
|
|
|
|
//更新学生课程人员配置
|
|
public function updateStudentCoursePersonnel($studentCourseId, array $data)
|
|
{
|
|
$res = [
|
|
'code' => 0,
|
|
'msg' => '更新失败',
|
|
'data' => []
|
|
];
|
|
|
|
try {
|
|
// 检查学生课程是否存在
|
|
$studentCourse = StudentCourses::where('id', $studentCourseId)->find();
|
|
if (!$studentCourse) {
|
|
$res['msg'] = '学生课程不存在';
|
|
return $res;
|
|
}
|
|
|
|
// 准备更新数据
|
|
$updateData = [];
|
|
if (isset($data['main_coach_id']) && $data['main_coach_id'] !== '') {
|
|
$updateData['main_coach_id'] = intval($data['main_coach_id']);
|
|
}
|
|
if (isset($data['education_id']) && $data['education_id'] !== '') {
|
|
$updateData['education_id'] = intval($data['education_id']);
|
|
}
|
|
if (isset($data['assistant_ids'])) {
|
|
$updateData['assistant_ids'] = strval($data['assistant_ids']);
|
|
}
|
|
$updateData['update_time'] = date('Y-m-d H:i:s');
|
|
|
|
// 执行更新
|
|
$result = StudentCourses::where('id', $studentCourseId)->update($updateData);
|
|
|
|
if ($result !== false) {
|
|
$res = [
|
|
'code' => 1,
|
|
'msg' => '更新成功',
|
|
'data' => $updateData
|
|
];
|
|
} else {
|
|
$res['msg'] = '更新数据库失败';
|
|
}
|
|
} catch (\Exception $e) {
|
|
$res['msg'] = '更新异常:' . $e->getMessage();
|
|
}
|
|
|
|
return $res;
|
|
}
|
|
}
|
|
|