master
cody 3 months ago
parent c2bfba40ef
commit 6f799ce71a

5
1

@ -1,5 +0,0 @@
Merge branch 'master' of ssh://47.101.48.251:/data/git/wx.sstbc.com
# 请输入一个提交信息以解释此合并的必要性,尤其是将一个更新后的上游分支
# 合并到主题分支。
#
# 以 '#' 开始的行将被忽略,而空的提交说明将终止提交。

@ -145,8 +145,8 @@ class OtherController extends CommonController
// 高层次人才
// 获取人才培训课程
$list['cover_rencai_total'] = CourseSign::rencai();
// 苏州重点上市公司
$list['cover_stock_total'] = CourseSign::suzhouStock();
// 重点上市公司
$list['cover_stock_total'] = CourseSign::shangshi();
// 培养人次1
$start_date = CourseType::START_DATE;
// 默认结束日期一年以后
@ -794,87 +794,71 @@ class OtherController extends CommonController
break;
case 'company_market_total':
// 上市公司明细 - 从stock_companys表获取所有上市公司与coursesHome统计逻辑保持一致
$stockCompanies = StockCompany::with('company')->get();
// 上市公司明细 - 与coursesHome统计逻辑保持一致
// 使用CourseSign::shangshi方法获取数据确保与统计逻辑一致
$shangshiList = CourseSign::shangshi($start_date, $end_date, $course_ids, true);
foreach ($shangshiList as $item) {
$company = $item['company'] ?? null;
$users = $item['users'] ?? [];
foreach ($stockCompanies as $stockCompany) {
// 通过company_id关联到Company表获取详细信息
$company = $stockCompany->company_id ? $stockCompany->company : null;
if (!$company) {
// 如果没有company_id尝试通过公司名称关联
$company = Company::where('company_name', $stockCompany->company_name)->first();
continue;
}
// 公司基本信息(只在第一行使用)
// 获取StockCompany信息如果有
$stockCompany = StockCompany::where('company_id', $company->id)
->orWhere('company_name', $company->company_name)
->first();
// 公司基本信息
$companyInfo = [
'company_name' => $stockCompany->company_name,
'company_name' => $company->company_name ?? '',
'company_legal_representative' => $company->company_legal_representative ?? '',
'company_date' => $company->company_date ?? '',
'stock_date' => $stockCompany->stock_date ?? '',
'is_after_enrollment' => $stockCompany->is_after_enrollment == 1 ? '是' : '否',
'is_after_enrollment' => $stockCompany && $stockCompany->is_after_enrollment == 1 ? '是' : '否',
'company_address' => $company->company_address ?? '',
'company_city' => $company->company_city ?? '',
'company_area' => $company->company_area ?? '',
'company_tag' => $company->company_tag ?? '',
];
// 获取该公司的学员信息
if ($company) {
$users = $company->users()
->whereHas('courseSigns', function ($q) {
$q->where('status', 1);
})
->with([
'courseSigns' => function ($query) {
$query->where('status', 1)
->with(['course.typeDetail']);
}
])
->get();
if ($users->isEmpty()) {
// 如果没有学员,仍然导出公司基本信息
$data[] = array_merge($companyInfo, [
'user_name' => '',
'course_names' => '',
'course_types' => '',
'course_count' => 0,
]);
} else {
// 每个学员一行,每行都显示完整的公司信息
foreach ($users as $user) {
$courseSigns = $user->courseSigns ?? collect([]);
// 获取课程名称列表,用中文顿号分隔
$courseNames = $courseSigns->pluck('course.name')->filter()->unique()->values()->implode('、');
// 获取课程体系列表,用中文顿号分隔
$courseTypes = $courseSigns->pluck('course.typeDetail.name')
->filter()
->unique()
->values()
->implode('、');
// 报名课程数
$courseCount = $courseSigns->count();
// 每个学员一行,每行都显示完整的公司信息
$data[] = array_merge($companyInfo, [
'user_name' => $user->name ?? '',
'course_names' => $courseNames,
'course_types' => $courseTypes,
'course_count' => $courseCount,
]);
}
}
} else {
// 如果没有关联的公司,只导出基本信息
if (empty($users)) {
// 如果没有学员,仍然导出公司基本信息
$data[] = array_merge($companyInfo, [
'user_name' => '',
'course_names' => '',
'course_types' => '',
'course_count' => 0,
]);
} else {
// 每个学员一行,每行都显示完整的公司信息
foreach ($users as $userData) {
$user = $userData['user'] ?? null;
$courses = $userData['courses'] ?? [];
if (!$user) {
continue;
}
// 获取课程名称列表,用中文顿号分隔
$courseNames = collect($courses)->pluck('course_name')->filter()->unique()->values()->implode('、');
// 获取课程体系列表,用中文顿号分隔
$courseTypes = collect($courses)->pluck('course_type')->filter()->unique()->values()->implode('、');
// 报名课程数
$courseCount = count($courses);
// 每个学员一行,每行都显示完整的公司信息
$data[] = array_merge($companyInfo, [
'user_name' => $userData['user_name'] ?? $user->name ?? '',
'course_names' => $courseNames,
'course_types' => $courseTypes,
'course_count' => $courseCount,
]);
}
}
}
$fields = [
@ -1687,13 +1671,13 @@ class OtherController extends CommonController
break;
case 'cover_stock_total':
// 苏州重点上市公司明细 - 使用模型方法
$companiesData = CourseSign::suzhouStock($start_date, $end_date, $course_ids, true);
// 重点上市公司明细 - 使用模型方法
$companiesData = CourseSign::shangshi($start_date, $end_date, $course_ids, true);
foreach ($companiesData as $item) {
$company = $item['company'];
$users = $item['users'] ?? [];
// 公司基本信息
// 公司基本信息(只在第一行使用)
$companyInfo = [
'company_name' => $company->company_name,
'company_legal_representative' => $company->company_legal_representative ?? '',
@ -1717,7 +1701,8 @@ class OtherController extends CommonController
'course_count' => 0,
]);
} else {
// 每个学员一行,每行都显示完整的公司信息
// 每个学员一行
$isFirstRow = true;
foreach ($users as $userInfo) {
$user = $userInfo['user'] ?? null;
$courses = $userInfo['courses'] ?? [];
@ -1738,13 +1723,35 @@ class OtherController extends CommonController
$courseCount = count($courses);
}
// 每个学员一行,每行都显示完整的公司信息
$data[] = array_merge($companyInfo, [
'user_name' => $userInfo['user_name'] ?? ($user->name ?? ''),
'course_names' => $courseNames,
'course_types' => $courseTypes,
'course_count' => $courseCount,
]);
if ($isFirstRow) {
// 第一行:显示公司信息
$data[] = array_merge($companyInfo, [
'user_name' => $userInfo['user_name'] ?? ($user->name ?? ''),
'course_names' => $courseNames,
'course_types' => $courseTypes,
'course_count' => $courseCount,
]);
$isFirstRow = false;
} else {
// 后续行:公司信息为空
$data[] = [
'company_name' => '',
'company_legal_representative' => '',
'company_date' => '',
'stock_date' => '',
'company_address' => '',
'company_city' => '',
'company_area' => '',
'company_tag' => '',
'business_scope' => '',
'contact_phone' => '',
'contact_mail' => '',
'user_name' => $userInfo['user_name'] ?? ($user->name ?? ''),
'course_names' => $courseNames,
'course_types' => $courseTypes,
'course_count' => $courseCount,
];
}
}
}
}
@ -1765,7 +1772,7 @@ class OtherController extends CommonController
'course_types' => '课程体系',
'course_count' => '报名课程数',
];
$filename = '苏州重点上市公司明细';
$filename = '重点上市公司明细';
break;
default:

@ -0,0 +1,87 @@
{
"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、按公司去重统计公司数量5、注意与\"上市公司数\"的统计逻辑相同,但筛选的是重点上市公司,同一公司多个学员只计算一次。",
"verify": ""
}
}
Loading…
Cancel
Save