diff --git a/app/Exports/CommonExport.php b/app/Exports/CommonExport.php index cac9453..8ef7741 100755 --- a/app/Exports/CommonExport.php +++ b/app/Exports/CommonExport.php @@ -51,7 +51,7 @@ class CommonExport implements FromCollection, WithStyles, WithColumnWidths, With const HISTORY_COURSES_SUB_COLUMNS = [ 'hc_course_type' => '课程体系', 'hc_course_name' => '课程名称', - 'hc_signs_pass' => '培养人数未去重', + 'hc_signs_pass' => '培养人次未去重', 'hc_signs_pass_unique' => '培养人数去重', 'hc_course_signs_pass' => '课程培养人数', ]; @@ -292,7 +292,7 @@ class CommonExport implements FromCollection, WithStyles, WithColumnWidths, With $endCol = $this->getColumnLetter($index + count(self::USERS_SUB_COLUMNS) - 1); $sheet->mergeCells("{$startCol}1:{$endCol}1"); $sheet->setCellValue("{$startCol}1", $label); - + // 确保第二行表头正确设置所有子列(包括缺失的列) $subIndex = 0; foreach (self::USERS_SUB_COLUMNS as $subField => $subLabel) { @@ -301,7 +301,7 @@ class CommonExport implements FromCollection, WithStyles, WithColumnWidths, With $sheet->setCellValue("{$col}2", $subLabel); $subIndex++; } - + $index += count(self::USERS_SUB_COLUMNS); } elseif (str_contains($field, 'project_users')) { // 项目经理信息列:合并第一行的多个单元格 @@ -309,7 +309,7 @@ class CommonExport implements FromCollection, WithStyles, WithColumnWidths, With $endCol = $this->getColumnLetter($index + count(self::PROJECT_USERS_SUB_COLUMNS) - 1); $sheet->mergeCells("{$startCol}1:{$endCol}1"); $sheet->setCellValue("{$startCol}1", $label); - + // 确保第二行表头正确设置所有子列 $subIndex = 0; foreach (self::PROJECT_USERS_SUB_COLUMNS as $subField => $subLabel) { @@ -317,7 +317,7 @@ class CommonExport implements FromCollection, WithStyles, WithColumnWidths, With $sheet->setCellValue("{$col}2", $subLabel); $subIndex++; } - + $index += count(self::PROJECT_USERS_SUB_COLUMNS); } elseif (str_contains($field, 'history_courses')) { // 历史课程信息列:合并第一行的多个单元格 @@ -325,7 +325,7 @@ class CommonExport implements FromCollection, WithStyles, WithColumnWidths, With $endCol = $this->getColumnLetter($index + count(self::HISTORY_COURSES_SUB_COLUMNS) - 1); $sheet->mergeCells("{$startCol}1:{$endCol}1"); $sheet->setCellValue("{$startCol}1", $label); - + // 确保第二行表头正确设置所有子列 $subIndex = 0; foreach (self::HISTORY_COURSES_SUB_COLUMNS as $subField => $subLabel) { @@ -333,7 +333,7 @@ class CommonExport implements FromCollection, WithStyles, WithColumnWidths, With $sheet->setCellValue("{$col}2", $subLabel); $subIndex++; } - + $index += count(self::HISTORY_COURSES_SUB_COLUMNS); } else { // 其他列:合并第一行和第二行 diff --git a/app/Http/Controllers/Admin/CalendarsController.php b/app/Http/Controllers/Admin/CalendarsController.php index d9170d0..3c19137 100644 --- a/app/Http/Controllers/Admin/CalendarsController.php +++ b/app/Http/Controllers/Admin/CalendarsController.php @@ -142,7 +142,7 @@ class CalendarsController extends BaseController * @OA\Parameter(name="is_publish", in="query", @OA\Schema(type="string"), required=true, description="是否向用户发布0否1是"), * @OA\Parameter(name="address", in="query", @OA\Schema(type="string"), required=true, description="地址"), * @OA\Parameter(name="days", in="query", @OA\Schema(type="string"), required=true, description="天数"), - * @OA\Parameter(name="history_courses", in="query", @OA\Schema(type="array", @OA\Items(type="object")), required=false, description="历史课程数组,每项包含:type(课程体系ID), course_name(课程名称), course_type_signs_pass(培养人数未去重), course_type_signs_pass_unique(培养人数去重), course_signs_pass(课程培养人数), start_time(开始时间), end_time(结束时间)"), + * @OA\Parameter(name="history_courses", in="query", @OA\Schema(type="array", @OA\Items(type="object")), required=false, description="历史课程数组,每项包含:type(课程体系ID), course_name(课程名称), course_type_signs_pass(培养人次未去重), course_type_signs_pass_unique(培养人数去重), course_signs_pass(课程培养人数), start_time(开始时间), end_time(结束时间)"), * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="认证token"), * @OA\Response( * response="200", diff --git a/app/Http/Controllers/Admin/HistoryCourseController.php b/app/Http/Controllers/Admin/HistoryCourseController.php index 68d848a..8394c96 100644 --- a/app/Http/Controllers/Admin/HistoryCourseController.php +++ b/app/Http/Controllers/Admin/HistoryCourseController.php @@ -163,7 +163,7 @@ class HistoryCourseController extends BaseController * description="", * @OA\Parameter(name="id", in="query", @OA\Schema(type="int"), required=false, description="Id(存在更新,不存在新增)"), * @OA\Parameter(name="type", in="query", @OA\Schema(type="string"), required=true, description="课程体系id"), - * @OA\Parameter(name="course_type_signs_pass", in="query", @OA\Schema(type="integer", format="int64"), required=false, description="培养人数未去重"), + * @OA\Parameter(name="course_type_signs_pass", in="query", @OA\Schema(type="integer", format="int64"), required=false, description="培养人次未去重"), * @OA\Parameter(name="course_type_signs_pass_unique", in="query", @OA\Schema(type="integer", format="int64"), required=false, description="培养人数去重"), * @OA\Parameter(name="course_signs_pass", in="query", @OA\Schema(type="integer", format="int64"), required=false, description="课程培养人数"), * @OA\Parameter(name="course_name", in="query", @OA\Schema(type="string", nullable=true), description="课程名称"), diff --git a/app/Http/Controllers/Admin/OtherController.php b/app/Http/Controllers/Admin/OtherController.php index 90271d6..0994eea 100755 --- a/app/Http/Controllers/Admin/OtherController.php +++ b/app/Http/Controllers/Admin/OtherController.php @@ -668,7 +668,7 @@ class OtherController extends CommonController 'course_name' => '课程名称', 'start_time' => '开始时间', 'end_time' => '结束时间', - 'course_type_signs_pass' => '培养人数未去重', + 'course_type_signs_pass' => '培养人次未去重', 'course_type_signs_pass_unique' => '培养人数去重', 'course_signs_pass' => '课程培养人数', ]; @@ -806,7 +806,7 @@ class OtherController extends CommonController 'course_name' => '课程名称', 'start_time' => '开始时间', 'end_time' => '结束时间', - 'course_type_signs_pass' => '培养人数未去重', + 'course_type_signs_pass' => '培养人次未去重', 'course_type_signs_pass_unique' => '培养人数去重', 'course_signs_pass' => '课程培养人数', ]; diff --git a/database/migrations/2025_11_24_105100_create_history_courses_table.php b/database/migrations/2025_11_24_105100_create_history_courses_table.php index 2cacc5c..e8945d7 100644 --- a/database/migrations/2025_11_24_105100_create_history_courses_table.php +++ b/database/migrations/2025_11_24_105100_create_history_courses_table.php @@ -15,7 +15,7 @@ return new class extends Migration { Schema::create('history_courses', function (Blueprint $table) { $table->id(); $table->string('type')->comment('课程体系ID'); - $table->integer('course_type_signs_pass')->default(0)->comment('培养人数未去重'); + $table->integer('course_type_signs_pass')->default(0)->comment('培养人次未去重'); $table->integer('course_type_signs_pass_unique')->default(0)->comment('培养人数去重'); $table->integer('course_signs_pass')->default(0)->comment('课程培养人数'); // 课程名称 diff --git a/统计指标说明.json b/统计指标说明.json deleted file mode 100644 index f460385..0000000 --- a/统计指标说明.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "course_signs_total": { - "name": "报名人数", - "from": "1、统计指定时间范围和课程范围内的所有报名记录数量,包括所有状态的报名(待审核、已通过、已拒绝等);2、加上额外添加的课程数据中的人数统计;3、注意:一个学员报名多个课程会计算多次。", - "verify": "" - }, - "course_signs_pass": { - "name": "培养人次(未去重)", - "from": "1、统计指定课程体系下的指定时间范围内的课程(课程开始或结束时间在时间范围内)下审核通过的报名记录数量;2、统计额外添加的课程数据(关联的分类是历史课程,关联的日历是统计人数选项)里满足时间范围内的课程(课程开始或结束时间在时间范围内)培养人数未去重的数据;3、将两部分数据相加得到总数。", - "verify": "报名管理栏目,累加统计对比" - }, - "course_signs_pass_unique": { - "name": "培养人数(已去重)", - "from": "1、统计指定课程体系下的指定时间范围内的课程(课程开始或结束时间在时间范围内)下审核通过的报名记录数量按照手机号去重;2、统计额外添加的课程数据(关联的分类是历史课程,关联的日历是统计人数选项)里满足时间范围内的课程(课程开始或结束时间在时间范围内)培养人数去重的数据;3、将两部分数据相加得到总数。", - "verify": "" - }, - "course_total": { - "name": "开课场次", - "from": "1、统计指定时间范围内、指定课程体系范围内的日历里记录数量", - "verify": "日历里的数据导出对比" - }, - "course_day_total": { - "name": "开课天数", - "from": "1、在开课场次的基础上;2、获取设置了统计天数的记录;3、计算天数总和。", - "verify": "日历里的数据导出对比" - }, - "company_market_total": { - "name": "重点上市公司数", - "from": "1、统计指定课程体系下的指定时间范围内的课程(课程开始或结束时间在时间范围内)下审核通过的报名记录的用户总数;2、如果一个用户报名多个课程只算一个有效用户;3、筛选出关联的公司是上市公司的用户数量。", - "verify": "企业资质中包含了上市代码的就识别成上市公司" - }, - "ganbu_total": { - "name": "跟班学员数", - "from": "1、统计指定课程体系下的指定时间范围内的课程(课程开始或结束时间在时间范围内)下审核通过的报名记录的用户总数;2、如果一个用户报名多个课程只算一个有效用户;3、筛选出有\"跟班学员\"标签的用户总数。", - "verify": "学员中心,学员标签筛选对比" - }, - "company_market_year_total": { - "name": "今年上市公司数量", - "from": "1、从自定义的上市公司数据里;2、统计上市年份在今年的公司数量。", - "verify": "自定义上市公司数据对比" - }, - "company_market_after_enrollment_total": { - "name": "入学后上市公司数量", - "from": "1、直接从上市公司表中查询;2、统计所有标记为\"入学后上市\"的公司数量;3、注意:这个统计不依赖学员报名记录,统计的是自定义的上市的公司。", - "verify": "自定义上市公司数据对比" - }, - "course_signs_invested": { - "name": "累计被投企业数", - "from": "1、指定课程体系下,从2000-01-01到结束日期的所有课程(课程开始或结束时间在时间范围内)下审核通过的报名记录的用户关联的公司总数;2、筛选被投企业标签的公司;3、再次筛选存在被投日期在时间范围内的公司总数。", - "verify": "" - }, - "company_invested_after_enrollment_total": { - "name": "入学后被投企业数量", - "from": "1、统计指定课程体系下的指定时间范围内的课程(课程开始或结束时间在时间范围内)下审核通过的报名记录的用户关联的公司总数;2、筛选被投企业标签的公司;3、再次筛选存在被投日期并且被投日期在用户报名的课程的开始时间之后的公司数量。", - "verify": "" - }, - "company_invested_year_total": { - "name": "今年被投企业数", - "from": "1、统计指定课程体系下的指定时间范围内的课程(课程开始或结束时间在时间范围内)下审核通过的报名记录的用户关联的公司总数;2、筛选出有被投企业标签的公司;3、再次筛选存在被投日期并且被投日期是今年的公司数量。", - "verify": "" - }, - "company_join_total": { - "name": "元和员工参与人数", - "from": "1、统计指定课程体系下的指定时间范围内的课程(课程开始或结束时间在时间范围内)下报名记录的用户总数(如果一个用户报名多个课程只算一个有效用户);2、筛选自己填写的公司名称包含以下关键词的用户总数:元禾控股、元禾原点、元禾厚望、元禾重元、元禾璞华、元禾谷风、元禾绿柳、元禾辰坤、元禾沙湖、禾裕集团、苏州科服、信诚管理咨询、集成电路公司、常州团队、国器元禾;3、加上自定义的元禾员工/干部培训数据里满足时间范围内的元禾员工总和;4、将两部分数据相加得到总数。", - "verify": "公司管理,筛选公司名字加起来对比" - }, - "company_ganbu_total": { - "name": "全市干部参与企业", - "from": "1、统计指定课程体系下的指定时间范围内的课程(课程开始或结束时间在时间范围内)下审核通过的报名记录的用户总数(如果一个用户报名多个课程只算一个有效用户);2、加上\"元禾员工/干部培训\"栏目里满足时间范围内的\"元禾员工参与\"记录的参与数量的总和;3、将两部分数据相加得到总数。", - "verify": "学员中心,学员标签筛选对比" - }, - "cover_head_total": { - "name": "苏州头部企业", - "from": "1、统计指定课程体系下的指定时间范围内的课程(课程开始或结束时间在时间范围内)下审核通过的报名记录的用户;2、筛选关联的公司包含\"高新技术企业\"字符串的公司,并且用户填写的公司地址,或者关联的企查查公司地址包含苏州的公司;3、统计公司数量。", - "verify": "" - }, - "cover_rencai_total": { - "name": "苏州高层次人才", - "from": "1、统计指定课程体系下的指定时间范围内的课程(课程开始或结束时间在时间范围内)下审核通过的报名记录的用户;2、筛选满足以下条件之一的用户:参加过\"人才培训\"课程类型的用户,或填写的所有报名表单里个人荣誉字段不包含\"其他\"的用户(剩下的选项是国家人才、市级人才等)。并且用户填写的公司地址,或者关联的企查查公司地址包含苏州的公司;3、取两者的并集得到用户总数。", - "verify": "" - }, - "cover_stock_total": { - "name": "苏州重点上市公司", - "from": "1、统计在指定时间范围内、指定课程范围内报名的学员;2、通过学员关联到其所在公司;3、筛选出上市公司;4、并且用户填写的公司地址,或者关联的企查查公司地址包含苏州的公司", - "verify": "" - } -} \ No newline at end of file