master
cody 3 months ago
parent 2c89ec0457
commit f3fced0de8

@ -407,7 +407,11 @@ class OtherController extends CommonController
// 区域明细统计
$areas = CourseSign::area($start_date, $end_date, 1, $courses->pluck('id'), true);
return $this->success(compact('list', 'courseTypesSum', 'areas'));
// 获取统计项元数据
$statistics_metadata = Course::getStatisticsMetadata();
return $this->success(compact('list', 'courseTypesSum', 'areas', 'statistics_metadata'));
}
/**

@ -10,8 +10,18 @@ use Illuminate\Filesystem\Filesystem;
class Course extends SoftDeletesModel
{
protected $appends = [
'date_status', 'publicize', 'sign_date_status', 'qrcode', 'teacher_detail',
'status_text', 'is_fee_text', 'is_arrange_text', 'show_txl_text', 'show_mobile_text', 'auto_schoolmate_text', 'is_virtual_text'
'date_status',
'publicize',
'sign_date_status',
'qrcode',
'teacher_detail',
'status_text',
'is_fee_text',
'is_arrange_text',
'show_txl_text',
'show_mobile_text',
'auto_schoolmate_text',
'is_virtual_text'
];
protected $casts = ['publicize_ids' => 'json'];
@ -72,7 +82,8 @@ class Course extends SoftDeletesModel
public function getPublicizeAttribute($value)
{
if (empty($this->publicize_ids)) return [];
if (empty($this->publicize_ids))
return [];
return Upload::whereIn('id', $this->publicize_ids)->get();
}
@ -285,5 +296,101 @@ class Course extends SoftDeletesModel
return $url;
}
/**
* 获取课程统计项元数据
* 返回每个统计项的计算逻辑和验证方法说明
* @return array
*/
public static function getStatisticsMetadata()
{
return [
'course_signs_total' => [
'name' => '报名人数',
'from' => '统计在指定时间范围内、指定课程范围内的所有报名记录数量。包括所有状态的报名(待审核、已通过、已拒绝等),同时会加上历史课程数据中的人数统计。一个学员报名多个课程会计算多次。',
'verify' => ''
],
'course_signs_pass' => [
'name' => '审核通过人数',
'from' => '统计在指定时间范围内、指定课程范围内审核通过的报名记录数量。只统计状态为"已通过"的报名,不包括待审核、已拒绝等其他状态。同时会加上历史课程数据中已通过的人数统计。一个学员报名多个课程会计算多次。',
'verify' => ''
],
'course_signs_pass_unique' => [
'name' => '审核通过人数去重',
'from' => '统计在指定时间范围内、指定课程范围内审核通过的学员人数(按学员去重)。与"审核通过人数"的区别是:如果同一个学员报名了多个课程,这里只计算一次。通过学员的手机号进行去重,确保每个学员只统计一次。同时会加上历史课程数据中去重后的人数统计。',
'verify' => ''
],
'course_total' => [
'name' => '开课场次',
'from' => '统计在指定时间范围内、指定课程体系范围内的开课场次数。一个课程可能有多个场次(比如分多天上课),这里统计的是场次数,不是课程数。只要场次的开始时间或结束时间在指定时间范围内,就会被统计。',
'verify' => ''
],
'course_day_total' => [
'name' => '开课天数',
'from' => '统计在指定时间范围内、指定课程体系范围内的开课天数总和。只统计标记为"需要统计天数"的场次每个场次可能有不同的天数比如3天、5天等将所有场次的天数相加得到总天数。',
'verify' => ''
],
'company_market_total' => [
'name' => '上市公司数',
'from' => '统计在指定时间范围内、指定课程范围内报名的学员中,所在公司为上市公司的公司数量。通过学员关联到其所在公司,筛选出已上市的公司,然后按公司去重统计。如果同一公司有多个学员报名,只计算一次。',
'verify' => ''
],
'ganbu_total' => [
'name' => '跟班学员数',
'from' => '统计在指定时间范围内、指定课程范围内的跟班学员人数。筛选条件1)学员的"来源"字段包含"跟班学员"2)课程类型标记为"需要统计跟班学员"。同时会加上员工参与表中的额外数据。按学员去重,同一学员只计算一次。',
'verify' => ''
],
'company_market_year_total' => [
'name' => '今年上市公司数量',
'from' => '统计所有在今年(当前年份)上市的公司数量。直接从上市公司表中查询,统计上市日期在今年内的公司。这个统计不依赖学员报名记录,统计的是所有在今年上市的公司,不管是否有学员报名。',
'verify' => ''
],
'company_market_after_enrollment_total' => [
'name' => '入学后上市公司数量',
'from' => '统计所有标记为"入学后上市"的公司数量。直接从上市公司表中查询,统计标记为"入学后上市"的公司。这个统计不依赖学员报名记录,统计的是所有在学员入学后才上市的公司。',
'verify' => ''
],
'course_signs_invested' => [
'name' => '累计被投企业数',
'from' => '统计从课程开始日期到结束日期,在指定课程范围内报名的学员中,所在公司为被投企业的公司数量。通过学员关联到其所在公司,筛选出标记为"被投企业"的公司,检查公司的被投时间是否在截止日期之前(或没有记录被投时间),然后按公司去重统计。同一公司多个学员只计算一次。',
'verify' => ''
],
'company_invested_after_enrollment_total' => [
'name' => '入学后被投企业数量',
'from' => '统计在指定时间范围内报名的学员中,所在公司在学员入学后被投的公司数量。以学员报名的课程开课时间作为"入学时间",筛选出公司的被投时间晚于入学时间的公司,然后按公司去重统计。同一公司多个学员只计算一次。',
'verify' => ''
],
'company_invested_year_total' => [
'name' => '今年被投企业数',
'from' => '统计在指定时间范围内报名的学员中,所在公司在指定年份范围内被投的公司数量。从开始日期和结束日期中提取年份范围,筛选出公司的被投时间在指定年份范围内的公司,然后按公司去重统计。同一公司多个学员只计算一次。',
'verify' => ''
],
'company_join_total' => [
'name' => '元和员工参与人数',
'from' => '统计在指定时间范围内、指定课程范围内报名的学员中,所在公司为元和投资公司的学员人数。通过学员关联到其所在公司,筛选出元和投资的公司,然后按学员去重统计。同一学员报名多个课程只计算一次。',
'verify' => ''
],
'company_ganbu_total' => [
'name' => '全市干部参与企业',
'from' => '统计在指定时间范围内、指定课程范围内报名的学员中,来源为"跟班学员"且课程类型标记为"需要统计跟班学员"的学员人数。与"跟班学员数"的统计逻辑相同,同时会加上员工参与表中的额外数据。按学员去重,同一学员只计算一次。',
'verify' => ''
],
'cover_head_total' => [
'name' => '苏州头部企业',
'from' => '统计在指定时间范围内、指定课程范围内报名的学员中,所在公司为苏州头部企业的公司数量。通过学员关联到其所在公司,筛选出标记为"苏州头部企业"的公司,然后按公司去重统计。同一公司多个学员只计算一次。',
'verify' => ''
],
'cover_rencai_total' => [
'name' => '高层次人才',
'from' => '统计在指定时间范围内、指定课程范围内报名的学员中,标记为"高层次人才"的学员人数。通过学员的个人信息(如学历等)判断是否为高层次人才,然后按学员去重统计。同一学员报名多个课程只计算一次。',
'verify' => ''
],
'cover_stock_total' => [
'name' => '重点上市公司',
'from' => '统计在指定时间范围内、指定课程范围内报名的学员中,所在公司为重点上市公司的公司数量。通过学员关联到其所在公司,筛选出重点上市公司,然后按公司去重统计。与"上市公司数"的统计逻辑相同,但筛选的是重点上市公司。同一公司多个学员只计算一次。',
'verify' => ''
],
];
}
}

Loading…
Cancel
Save