From c3b644e9241a3f4bd45f09e6ea0f85a54b78e85f Mon Sep 17 00:00:00 2001 From: cody <648753004@qq.com> Date: Fri, 28 Nov 2025 14:35:19 +0800 Subject: [PATCH] update --- app/Http/Controllers/Admin/UserController.php | 18 +- 课程统计说明文档.md | 300 ------------------ 2 files changed, 10 insertions(+), 308 deletions(-) delete mode 100644 课程统计说明文档.md diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 6d1438a..61c6da2 100755 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -213,11 +213,21 @@ class UserController extends BaseController } }); } + // 新数据 if (isset($all['company_tag'])) { $list = $list->whereHas('company', function ($query) use ($all) { $query->where('company_tag', 'like', '%' . $all['company_tag'] . '%'); }); } + // 旧数据 + if (isset($all['company_type'])) { + $company_type = explode(',', $all['company_type']); + $list = $list->whereHas('company', function ($query) use ($company_type) { + foreach ($company_type as $v) { + $query->orWhereRaw('company_tag', 'like', '%' . $v . '%'); + } + }); + } $list = $list->whereHas('courseSigns', function ($query) use ($all) { if (isset($all['course_id'])) { $query->where('course_id', $all['course_id']); @@ -302,14 +312,6 @@ class UserController extends BaseController $company_area = explode(',', $all['company_area']); $query->whereIn('company_area', $company_area); } - if (isset($all['company_type'])) { - $company_type = explode(',', $all['company_type']); - $query->where(function ($q) use ($company_type) { - foreach ($company_type as $v) { - $q->orWhereRaw('FIND_IN_SET(?, company_type)', [$v]); - } - }); - } if (isset($all['company_industry'])) { $company_industry = explode(',', $all['company_industry']); $query->where(function ($q) use ($company_industry) { diff --git a/课程统计说明文档.md b/课程统计说明文档.md deleted file mode 100644 index 371a734..0000000 --- a/课程统计说明文档.md +++ /dev/null @@ -1,300 +0,0 @@ -# 课程统计系统数据说明文档 - - -## 🎯 一、基础统计数据 - -### 1. 报名人数(course_signs_total) - -**简单理解**:就像学校统计有多少人报名了课程。 - -**统计方式**: -- 系统会查看在您选择的时间范围内,所有提交了报名申请的人数 -- 不管审核是否通过,只要提交了报名就算一个人 -- 如果同一个人报名了多门课程,会分别计算(比如张三报名了3门课,就算3个人次) - -**举个例子**: -- 时间范围:2024年1月1日 - 2024年12月31日 -- 张三报名了"企业管理"课程 → 算1人 -- 李四报名了"财务管理"和"市场营销"两门课程 → 算2人 -- 总计:3人次 - ---- - -### 2. 审核通过人数(course_signs_pass) - -**简单理解**:报名后,经过审核被批准参加课程的人数。 - -**统计方式**: -- 只统计审核状态为"审核通过"的报名记录 -- 同样,如果一个人通过了多门课程的审核,会分别计算 - -**与报名人数的区别**: -- 报名人数 = 所有提交申请的人(包括待审核、已通过、已拒绝) -- 审核通过人数 = 只有审核通过的人 - -**举个例子**: -- 100人报名,其中80人审核通过,20人待审核或未通过 -- 报名人数 = 100人 -- 审核通过人数 = 80人 - ---- - -### 3. 审核通过人数(去重)(course_signs_pass_unique) - -**简单理解**:这是"真实的人数",一个人不管报名了多少门课程,只算1个人。 - -**统计方式**: -- 系统会通过手机号来识别是否是同一个人 -- 如果同一个手机号报名了多门课程,只算1个人 -- 这样可以知道真正有多少个不同的学员参加了培训 - -**举个例子**: -- 张三用手机号13800138000报名了3门课程,都审核通过了 -- 李四用手机号13900139000报名了1门课程,审核通过了 -- 审核通过人数(不去重)= 4人次(3+1) -- 审核通过人数(去重)= 2人(张三1人 + 李四1人) - -**为什么需要去重?** -- 不去重:可以知道课程的总参与人次,了解课程的受欢迎程度 -- 去重:可以知道实际培养了多少个不同的学员,这是更准确的培养人数 - ---- - -### 4. 开课场次(course_total) - -**简单理解**:在指定时间范围内,实际开了多少次课。 - -**统计方式**: -- 系统会查看课程日历表,统计在您选择的时间范围内,有多少次课程安排 -- 每次课程安排算1场次 -- 比如一门课程在1月、2月、3月各开一次,就算3场次 - -**举个例子**: -- 时间范围:2024年第一季度 -- "企业管理"课程在1月15日、2月15日、3月15日各开一次 → 3场次 -- "财务管理"课程在1月20日、2月20日各开一次 → 2场次 -- 总计:5场次 - ---- - -### 5. 开课天数(course_day_total) - -**简单理解**:所有课程加起来,总共上了多少天课。 - -**统计方式**: -- 系统会统计每场课程持续的天数 -- 把所有场次的天数加起来 -- 比如一门课程持续3天,另一门持续2天,总计就是5天 - -**与开课场次的区别**: -- 开课场次 = 开了多少次课(不管每次上几天) -- 开课天数 = 总共上了多少天课 - -**举个例子**: -- "企业管理"课程开了3次,每次持续2天 → 6天 -- "财务管理"课程开了2次,每次持续1天 → 2天 -- 总计:8天 - ---- - -## 🏢 二、企业相关统计数据 - -### 6. 被投企业数(course_signs_invested) - -**简单理解**:参加培训的学员中,有多少人所在的企业是被我们投资的企业。 - -**统计方式**: -- 系统会查看每个学员所在的企业信息 -- 如果企业的"是否被投"标记为"是",就算1家企业 -- 如果多个学员来自同一家被投企业,只算1家企业(去重) - -**举个例子**: -- 张三、李四、王五都来自"元禾控股"这家被投企业 -- 虽然3个人都参加了培训,但只算1家被投企业 -- 如果还有赵六来自另一家被投企业"元禾原点",那就是2家被投企业 - ---- - -### 7. 上市公司数(company_market_total) - -**简单理解**:参加培训的学员中,有多少人所在的企业是上市公司。 - -**统计方式**: -- 系统会查看每个学员所在的企业信息 -- 如果企业的"是否上市公司"标记为"是",就算1家上市公司 -- 如果多个学员来自同一家上市公司,只算1家企业(去重) - -**举个例子**: -- 张三、李四都来自"苏州某上市公司" -- 虽然2个人都参加了培训,但只算1家上市公司 - ---- - -### 8. 今年上市公司数量(company_market_year_total) - -**简单理解**:在参加培训的学员所在企业中,有多少家是在今年(当前年份)上市的。 - -**统计方式**: -- 系统会查看每个学员所在的企业信息 -- 如果企业是上市公司,且上市日期(stock_date)在今年,就算1家 -- 如果多个学员来自同一家今年上市的公司,只算1家企业(去重) - -**举个例子**: -- 时间范围:2024年1月1日 - 2024年12月31日 -- 张三来自"A公司",A公司在2024年3月上市 → 算1家 -- 李四来自"B公司",B公司在2023年上市 → 不算(不是今年上市的) -- 总计:1家今年上市公司 - ---- - -### 9. 入学后上市公司数量(company_market_after_enrollment_total) - -**简单理解**:学员报名参加培训后,他所在的企业才上市的公司数量。 - -**统计方式**: -- 系统会比较学员的报名时间和企业上市时间 -- 如果企业上市时间 ≥ 学员报名时间,说明是"入学后上市" -- 如果多个学员来自同一家这样的公司,只算1家企业(去重) - -**举个例子**: -- 张三在2024年1月报名参加培训 -- 张三所在的企业在2024年6月上市 -- 因为上市时间(6月)晚于报名时间(1月),所以算1家"入学后上市公司" -- 这体现了培训对企业发展的促进作用 - ---- - -### 10. 元和员工参与企业(company_join_total) - -**简单理解**:参加培训的学员中,有多少人所在的企业名称中包含"元禾"相关关键词。 - -**统计方式**: -- 系统会检查企业名称,如果包含以下关键词之一,就算1家企业: - - 元禾控股、元禾原点、元禾厚望、元禾重元、元禾璞华、元禾谷风、元禾绿柳、元禾辰坤、元禾沙湖 - - 禾裕集团、苏州科服、信诚管理咨询 - - 集成电路公司、常州团队、国企元禾 -- 如果多个学员来自同一家这样的企业,只算1家企业(去重) - -**举个例子**: -- 张三来自"元禾控股有限公司" -- 李四来自"元禾原点投资公司" -- 虽然企业名称不同,但都包含"元禾",所以算2家企业 - ---- - -### 11. 全市干部参与企业(company_ganbu_total) - -**简单理解**:参加培训的学员中,有多少人的来源标记为"跟班学员"(通常是干部)。 - -**统计方式**: -- 系统会查看每个学员的"来源"字段 -- 如果来源是"跟班学员",就算1个人 -- 如果同一个人报名了多门课程,只算1个人(去重) - -**举个例子**: -- 张三的来源是"跟班学员",报名了2门课程 → 算1人 -- 李四的来源是"跟班学员",报名了1门课程 → 算1人 -- 总计:2人 - ---- - -### 12. 苏州头部企业(cover_head_total) - -**简单理解**:参加培训的学员中,有多少人所在的企业是苏州的头部企业(通常是高新技术企业)。 - -**统计方式**: -- 系统会查看企业信息中的"企业资质"字段 -- 如果企业资质中包含"高新技术企业",就算1家企业 -- 如果多个学员来自同一家这样的企业,只算1家企业(去重) - -**举个例子**: -- 张三、李四都来自"苏州某高新技术企业" -- 虽然2个人都参加了培训,但只算1家头部企业 - ---- - -### 13. 高层次人才(cover_rencai_total) - -**简单理解**:参加培训的学员中,有多少人报名的是"人才培训"类型的课程。 - -**统计方式**: -- 系统会查看学员报名的课程类型 -- 如果课程类型是"人才培训",就算1个人 -- 如果同一个人报名了多门"人才培训"课程,只算1个人(去重) - -**举个例子**: -- 张三报名了"人才培训"类型的课程 → 算1人 -- 李四报名了"企业管理"类型的课程 → 不算 -- 总计:1人 - ---- - -### 14. 重点上市公司(cover_stock_total) - -**简单理解**:参加培训的学员中,有多少人所在的企业是重点上市公司。 - -**统计方式**: -- 系统会查看企业信息中的"是否上市公司"字段 -- 如果标记为"是",就算1家企业 -- 如果多个学员来自同一家上市公司,只算1家企业(去重) - -**与"上市公司数"的区别**: -- 这个统计可能有额外的筛选条件(具体看业务需求) -- 通常"重点上市公司"是"上市公司"的一个子集 - ---- - -## 📊 三、明细统计数据 - -### 15. 课程分类明细统计(courseTypesSum) - -**简单理解**:按照不同的课程类型,分别统计每个类型和每门课程的培养人数。 - -**统计方式**: -- 系统会按照课程类型分组统计 -- 对于每个课程类型,会统计: - - 该类型所有课程的培养人数总和 - - 该类型所有课程的培养人数(去重) -- 对于每门具体课程,会统计该课程的培养人数 - -**举个例子**: -- 课程类型:"企业管理" - - 包含课程:"企业管理基础"、"企业管理进阶" - - 该类型培养人数:100人(两门课程加起来) - - 该类型培养人数(去重):80人(去除重复报名的人) - - "企业管理基础"课程培养人数:60人 - - "企业管理进阶"课程培养人数:40人 - ---- - -### 16. 区域明细统计(areas) - -**简单理解**:按照不同的区域,统计每个区域有多少学员参加了培训。 - -**统计方式**: -- 系统会按照学员所在企业的区域进行分组统计 -- 对于苏州市内的企业,会按照具体的区域(比如"工业园区"、"高新区"等)统计 -- 对于苏州市外的企业,统一归为"苏州市外" -- 每个区域会统计: - - 该区域的报名人数(不去重) - - 该区域的报名人数(去重,按手机号) - -**举个例子**: -- 工业园区:50人报名,去重后40人 -- 高新区:30人报名,去重后25人 -- 苏州市外:20人报名,去重后18人 - ---- - -## 🔍 四、统计的时间范围 - -所有统计数据都基于您选择的时间范围: - -- **开始日期**:统计从这个日期开始的报名或开课 -- **结束日期**:统计到这个日期为止的报名或开课 - -**重要说明**: -- 对于报名人数:看的是学员的报名时间是否在这个范围内 -- 对于开课场次:看的是课程的实际开课日期是否在这个范围内 -- 对于企业统计:看的是学员的报名时间是否在这个范围内 -