test
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.
 
 
 
 
 
 

2171 lines
81 KiB

<?php
defined('IN_IA') or exit('Access Denied');
class Recruit {
/**
* Comment: 默认行业类别列表
* Author: zzw
* Date: 2020/11/25 10:41
* @return array
*/
public static function defaultIndustryList(){
return [
//技术
[
'title' => '技术' ,
'list' => [
'后端开发' ,
'移动开发' ,
'测试' ,
'运维' ,
'数据' ,
'项目管理' ,
'硬件开发' ,
'前端开发' ,
'通信' ,
'电子半导体' ,
'高端技术' ,
'人工智能' ,
'其他技术'
] ,
] ,
//产品
[
'title' => '产品' ,
'list' => [
'产品经理' ,
'高端产品' ,
'其他产品' ,
] ,
] ,
//设计
[
'title' => '设计' ,
'list' => [
'视觉/交互设计' ,
'游戏设计' ,
'用户研究' ,
'高端设计职位' ,
'非视觉设计' ,
'其他设计' ,
] ,
] ,
//运营
[
'title' => '运营' ,
'list' => [
'运营' ,
'编辑' ,
'客服' ,
'高端运营' ,
'其他运营' ,
] ,
] ,
//市场
[
'title' => '市场' ,
'list' => [
'政府事务' ,
'市场/营销' ,
'公关媒介' ,
'会务会展' ,
'广告' ,
'高端市场' ,
'其他市场' ,
] ,
] ,
//人事/财务/行政
[
'title' => '人事/财务/行政' ,
'list' => [
'人力资源' ,
'高级管理' ,
'行政' ,
'财务' ,
'法务' ,
'其他职能' ,
] ,
] ,
//销售
[
'title' => '销售' ,
'list' => [
'销售行政/商务' ,
'房地产销售/招商' ,
'服务业销售' ,
'汽车销售' ,
'广告/会展销售' ,
'金融销售' ,
'外贸销售' ,
'销售' ,
'课程销售' ,
'医疗销售' ,
'销售管理' ,
'其他销售' ,
] ,
] ,
//传媒
[
'title' => '传媒' ,
'list' => [
'采编/写作/出版' ,
'影视媒体' ,
'其他传媒' ,
] ,
] ,
//金融
[
'title' => '金融' ,
'list' => [
'投融资' ,
'风控' ,
'税务审计' ,
'银行' ,
'互联网金融' ,
'保险' ,
'证券' ,
'其他金融' ,
] ,
] ,
//教育培训
[
'title' => '教育培训' ,
'list' => [
'教育产品研发' ,
'教育行政' ,
'教师' ,
'IT培训' ,
'职业培训' ,
'特长培训' ,
'其他教育培训' ,
] ,
] ,
//医疗健康
[
'title' => '医疗健康' ,
'list' => [
'临床试验' ,
'医生/医技' ,
'护士/护理' ,
'健康整形' ,
'生物制药' ,
'医疗器械' ,
'药店' ,
'其他医疗健康' ,
] ,
] ,
//采购/贸易
[
'title' => '采购/贸易' ,
'list' => [
'采购' ,
'进出口贸易' ,
'其他采购/贸易' ,
] ,
] ,
//供应链/物流
[
'title' => '供应链/物流' ,
'list' => [
'物流' ,
'仓储' ,
'交通/运输' ,
'高端供应链' ,
'其他供应链' ,
] ,
] ,
//房地产/建筑
[
'title' => '房地产/建筑' ,
'list' => [
'房地产规划开发' ,
'设计装修与市政建设' ,
'物业管理' ,
'高端房地产职位' ,
'其他房地产' ,
] ,
] ,
//咨询/翻译/法律
[
'title' => '咨询/翻译/法律' ,
'list' => [
'咨询/调研' ,
'律师' ,
'翻译' ,
'其他咨询类' ,
] ,
] ,
//旅游
[
'title' => '旅游' ,
'list' => [
'旅游服务' ,
'旅游产品开发/策划' ,
'其他旅游' ,
] ,
] ,
//服务业
[
'title' => '服务业' ,
'list' => [
'餐饮' ,
'酒店' ,
'零售' ,
'美容保健' ,
'运动健身' ,
'婚礼/花艺' ,
'宠物服务' ,
'安保/家政/维修' ,
'其他服务业' ,
] ,
] ,
//生产制造
[
'title' => '生产制造' ,
'list' => [
'生产营运' ,
'质量安全' ,
'新能源' ,
'汽车制造' ,
'汽车服务' ,
'机械设计/制造' ,
'化工' ,
'服装/纺织/皮革' ,
'技工/普工' ,
'其他生产制造' ,
] ,
] ,
];
}
/**
* Comment: 默认职位列表
* Author: zzw
* Date: 2020/11/25 14:31
* @return array
*/
public static function defaultPositionList(){
return [
//技术
'后端开发' => [
'Perl' ,
'Hadoop' ,
'Node.js' ,
'数据采集' ,
'C++' ,
'Java' ,
'Python' ,
'GIS工程师' ,
'C' ,
'Delphi' ,
'Erlang' ,
'全栈工程师' ,
'.NET' ,
'C#' ,
'PHP' ,
'Golang' ,
'VB' ,
'Ruby' ,
'后端开发' ,
'语音/视频/图形开发'
] ,
'移动开发' => [
'JavaScript' ,
'UE4' ,
'HTML5' ,
'Flash开发' ,
'COCOS2DX' ,
'移动web前端' ,
'U3D' ,
'iOS' ,
'Android' ,
'移动开发' ,
] ,
'测试' => [
'硬件测试' ,
'功能测试' ,
'游戏测试' ,
'自动化测试' ,
'测试开发' ,
'性能测试' ,
'移动端测试' ,
'渗透测试' ,
'测试工程师' ,
'软件测试' ,
] ,
'运维' => [
'运维开发工程师' ,
'网络安全' ,
'网络工程师' ,
'运维工程师' ,
'系统安全' ,
'IT技术支持' ,
'DBA' ,
'系统工程师' ,
'系统管理员' ,
] ,
'数据' => [
'ETL工程师' ,
'数据开发' ,
'数据' ,
'数据挖掘' ,
'数据分析师' ,
'数据架构师' ,
'数据仓库' ,
] ,
'项目管理' => [
'项目专员' ,
'需求分析工程师' ,
'项目主管' ,
'项目助理' ,
'硬件项目经理' ,
'实施工程师' ,
'实施顾问' ,
'项目经理' ,
] ,
'硬件开发' => [
'DSP开发' ,
'FPGA开发' ,
'驱动开发' ,
'射频工程师' ,
'嵌入式' ,
'PCB工艺' ,
'ARM开发' ,
'硬件工程师' ,
'单片机' ,
'电路设计' ,
'系统集成' ,
'自动化' ,
] ,
'前端开发' => [
'JavaScript' ,
'前端开发' ,
'HTML5' ,
'web前端' ,
'Flash开发' ,
] ,
'通信' => [
'通信项目经理' ,
'有线传输工程师' ,
'光网络工程师' ,
'通信项目专员' ,
'移动通信工程师' ,
'通信技术工程师' ,
'无线/射频通信工程师' ,
'光传输工程师' ,
'通信电源工程师' ,
'通信设备工程师' ,
'核心网工程师' ,
'通信标准化工程师' ,
'通信测试工程师' ,
'电信交换工程师' ,
'光通信工程师' ,
'电信网络工程师' ,
'通信研发工程师' ,
] ,
'电子半导体' => [
'电气设计工程师' ,
'电气工程师' ,
'FAE' ,
'集成电路IC设计' ,
'电子工程师' ,
'IC验证工程师' ,
] ,
'高端技术' => [
'架构师' ,
'CTO' ,
'技术经理' ,
'技术合伙人' ,
'IC验证工程师' ,
'运维总监' ,
'技术总监' ,
'测试经理' ,
] ,
'人工智能' => [
'语音识别' ,
'数据挖掘' ,
'人工智能' ,
'深度学习' ,
'算法研究员' ,
'算法工程师' ,
'反欺诈/风控算法' ,
'图像识别' ,
'机器学习' ,
'自然语言处理' ,
'搜索算法' ,
'推荐算法' ,
'智能驾驶系统工程师' ,
] ,
'其他技术' => [
'其他技术职位' ,
] ,
//产品
'产品经理' => [
'产品经理' ,
'产品助理' ,
'产品专员' ,
'游戏策划' ,
'网页产品经理' ,
'硬件产品经理' ,
'数据产品经理' ,
'移动产品经理' ,
'电商产品经理'
] ,
'高端产品' => [
'产品VP' ,
'产品总监' ,
'游戏制作人' ,
'高端产品职位'
] ,
'其他产品' => [
'其他产品职位' ,
] ,
//设计
'视觉/交互设计' => [
'包装设计' ,
'网页设计师' ,
'平面设计' ,
'Flash设计师' ,
'动画设计' ,
'插画师' ,
'人像修图师' ,
'美工' ,
'APP设计师' ,
'UI设计师' ,
'CAD设计/制图' ,
'多媒体设计师' ,
'视觉设计' ,
'广告设计' ,
'漫画师' ,
'3D设计师' ,
'原画师' ,
'设计师助理'
] ,
'游戏设计' => [
'游戏角色设计' ,
'游戏场景设计' ,
'游戏动作设计' ,
'游戏界面设计' ,
'游戏数值策划' ,
'游戏特效设计' ,
] ,
'用户研究' => [
'UX设计师' ,
'数据分析师' ,
'用户研究员' ,
'用户研究总监' ,
'用户研究经理'
] ,
'高端设计职位' => [
'设计总监' ,
'视觉设计总监' ,
'高端设计职位' ,
'设计经理/主管'
] ,
'非视觉设计' => [
'橱柜设计' ,
'陈列设计' ,
'展览/展示设计' ,
'珠宝设计' ,
'服装/纺织设计' ,
'非视觉设计' ,
'工业设计' ,
'家具设计' ,
'家居设计' ,
'室内设计' ,
'照明设计'
] ,
'其他设计' => [
'其他设计职位'
] ,
//运营
'运营' => [
'运营助理/专员' ,
'微信运营' ,
'品类运营' ,
'网店店长' ,
'游戏运营' ,
'网站运营' ,
'线下拓展运营' ,
'策略运营' ,
'数据运营' ,
'数据标注' ,
'内容审核' ,
'用户运营' ,
'产品运营' ,
'商家运营' ,
'电商运营' ,
'车辆运营' ,
'跨境电商运营' ,
'活动运营' ,
'社区运营' ,
'微博运营' ,
'内容运营' ,
'新媒体运营' ,
'直播运营' ,
'运营' ,
] ,
'编辑' => [
'采编' ,
'文案策划' ,
'编辑' ,
'副主编' ,
'内容编辑' ,
'网站编辑' ,
'医学编辑' ,
] ,
'客服' => [
'售后客服' ,
'客服主管' ,
'客服专员' ,
'售前客服' ,
'网络客服' ,
'客服经理' ,
'咨询热线/呼叫中心客服' ,
] ,
'高端运营' => [
'运营总监' ,
'客服总监' ,
'主编' ,
'COO' ,
'运营经理/主管' ,
'高端运营职位' ,
] ,
'其他运营' => [
'其他运营职位' ,
] ,
//市场
'政府事务' => [
'政府关系' ,
'企业党建' ,
'政策研究' ,
] ,
'市场/营销' => [
'网络推广' ,
'选址开发' ,
'SEM' ,
'商业数据分析' ,
'APP推广' ,
'市场策划' ,
'市场顾问' ,
'营销主管' ,
'游戏推广' ,
'商务渠道' ,
'市场营销' ,
'市场推广' ,
'海外市场' ,
'网络营销' ,
'SEO' ,
'活动策划' ,
] ,
'公关媒介' => [
'媒介专员' ,
'品牌公关' ,
'公关媒介' ,
'活动策划执行' ,
'广告协调' ,
'媒介经理' ,
'媒介策划' ,
] ,
'会务会展' => [
'会议活动策划' ,
'会展活动执行' ,
'会议活动执行' ,
'会展活动策划' ,
'会务会展' ,
] ,
'广告' => [
'策划经理' ,
'广告' ,
'广告制作' ,
'媒介投放' ,
'美术指导' ,
'广告创意设计' ,
'广告审核' ,
'广告/会展项目经理' ,
'广告设计' ,
'广告文案' ,
'媒介合作' ,
] ,
'高端市场' => [
'媒介总监' ,
'CMO' ,
'市场总监' ,
'高端市场职位' ,
'公关总监' ,
'创意总监' ,
] ,
'其他市场' => [
'其他市场职位' ,
] ,
//人事/财务/行政
'人力资源' => [
'绩效考核' ,
'人力资源总监' ,
'组织发展' ,
'人力资源VP/CHO' ,
'人力资源专员/助理' ,
'培训' ,
'培训' ,
'HRBP' ,
'人力资源经理' ,
'人力资源主管' ,
'薪资福利' ,
'员工关系' ,
] ,
'行政' => [
'行政总监' ,
'经理助理' ,
'后勤' ,
'行政主管' ,
'行政经理' ,
'前台' ,
'行政专员/助理' ,
] ,
'财务' => [
'审计' ,
'财务' ,
'税务' ,
'总账会计' ,
'结算' ,
'财务经理' ,
'出纳' ,
'CFO' ,
'财务主管' ,
'财务总监' ,
'财务顾问' ,
'会计' ,
'成本' ,
] ,
'法务' => [
'法务经理' ,
'法律顾问' ,
'法务总监' ,
'法务主管' ,
'法务专员/助理' ,
'律师' ,
] ,
'高级管理' => [
'高级管理职位' ,
'分公司/代表处负责人' ,
'副总裁/副总经理/VP' ,
'联合创始人' ,
'合伙人' ,
'总裁/总经理/CEO' ,
'董事会秘书' ,
'区域负责人' ,
'总助/CEO助理/董事长助理' ,
] ,
'其他职能' => [
'网络其他职能职位推广' ,
] ,
//销售
'销售行政/商务' => [
'商务总监' ,
'商务经理' ,
'商务专员' ,
'销售助理' ,
'销售运营' ,
] ,
'房地产销售/招商' => [
'房地产销售总监' ,
'地产中介' ,
'房地产销售/招商' ,
'置业顾问' ,
'物业招商管理' ,
] ,
'服务业销售' => [
'珠宝销售' ,
'美容顾问' ,
'彩妆顾问' ,
'瘦身顾问' ,
'旅游顾问' ,
'会籍顾问' ,
] ,
'汽车销售' => [
'汽车配件销售' ,
'汽车销售' ,
] ,
'广告/会展销售' => [
'媒介顾问' ,
'广告销售' ,
'会展活动销售' ,
'会议活动销售' ,
] ,
'金融销售' => [
'保险顾问' ,
'理财顾问' ,
'证券经纪人' ,
'信用卡销售' ,
] ,
'外贸销售' => [
'外贸经理' ,
'外贸业务员' ,
] ,
'销售' => [
'大客户代表' ,
'销售专员' ,
'销售' ,
'销售工程师' ,
'销售顾问' ,
'网络销售' ,
'代理商销售' ,
'客户代表' ,
'BD经理' ,
'电话销售' ,
'渠道销售' ,
'客户经理' ,
] ,
'课程销售' => [
'留学顾问' ,
'招生顾问' ,
'课程顾问' ,
] ,
'医疗销售' => [
'医疗销售' ,
'医疗器械销售' ,
'医药代表' ,
'医疗销售' ,
'健康顾问' ,
'医美咨询' ,
] ,
'销售管理' => [
'销售总监' ,
'区域总监' ,
'团队经理' ,
'销售经理' ,
'城市经理' ,
'销售管理' ,
'团队经理' ,
'销售VP' ,
] ,
'其他销售' => [
'其他销售职位' ,
] ,
//传媒
'采编/写作/出版' => [
'自媒体' ,
'总编' ,
'采编/写作/出版' ,
'排版设计' ,
'撰稿人' ,
'编辑' ,
'记者' ,
'校对录入' ,
] ,
'影视媒体' => [
'影视策划' ,
'主播助理' ,
'摄影/摄像' ,
'化妆/造型/服装' ,
'后期制作' ,
'影视媒体' ,
'音频编辑' ,
'主持人/DJ' ,
'演员/配音/模特' ,
'导演/编导' ,
'影视发行' ,
'灯光师' ,
'主播' ,
'录音/音效' ,
'音频编辑' ,
'编剧' ,
'视频编辑' ,
'后期制作' ,
'经纪人' ,
'影视特效' ,
'放映员' ,
'制片人' ,
'剪辑师' ,
'艺人助理' ,
] ,
'其他传媒' => [
'其他传媒职位' ,
] ,
//金融
'投融资' => [
'投资总监' ,
'其他投融资职位' ,
'行业研究' ,
'资产管理' ,
'投资VP' ,
'投资顾问' ,
'投资合伙人' ,
'投融资' ,
'投后管理' ,
'投资经理' ,
'并购' ,
'投资助理' ,
] ,
'风控' => [
'风控' ,
'合规稽查' ,
'律师' ,
'资信评估' ,
] ,
'税务审计' => [
'会计' ,
'法务' ,
'清算' ,
'审计' ,
] ,
'银行' => [
'银行' ,
'信贷管理' ,
'柜员' ,
'风控' ,
'大堂经理' ,
'商务渠道' ,
'客户经理' ,
'分析师' ,
] ,
'互联网金融' => [
'金融产品经理' ,
'分析师' ,
'清算' ,
'风控' ,
'审计' ,
'催收员' ,//传说中的打手???
'互联网金融' ,
'投资经理' ,
] ,
'保险' => [
'保险精算师' ,
'保险理赔' ,
] ,
'证券' => [
'交易员' ,
'证券分析师' ,
'证券' ,
] ,
'其他金融' => [
'其他金融职位' ,
] ,
//教育培训
'教育产品研发' => [
'培训策划' ,
'培训师' ,
'教育产品研发' ,
'课程编辑' ,
'培训研究' ,
'课程设计' ,
] ,
'教育行政' => [
'教学管理' ,
'教务管理' ,
'园长/副园长' ,
'校长/副校长' ,
'教育行政' ,
'班主任/辅导员' ,
] ,
'教师' => [
'就业老师' ,
'其他外语教师' ,
'英语教师' ,
'托管老师' ,
'幼教' ,
'体育教师' ,
'生物教师' ,
'文科教师' ,
'高中教师' ,
'日语教师' ,
'早教老师' ,
'助教' ,
'化学教师' ,
'小学教师' ,
'体育教师' ,
'理科教师' ,
'音乐教师' ,
'教师' ,
'物理教师' ,
'美术教师' ,
'数学教师' ,
'初中教师' ,
'家教' ,
] ,
'IT培训' => [
'iOS培训讲师' ,
'C++培训讲师' ,
'PHP培训讲师' ,
'IT培训' ,
'Unity 3D培训讲师' ,
'软件测试培训讲师' ,
'Android培训讲师' ,
'Web前端培训讲师' ,
'JAVA培训讲师' ,
'UI设计培训讲师' ,
'动漫培训讲师' ,
'.NET培训讲师' ,
] ,
'职业培训' => [
'财会培训讲师' ,
'培训师' ,
'拓展培训' ,
'HR培训讲师' ,
] ,
'特长培训' => [
'跆拳道教练' ,
'篮球教练' ,
'羽毛球教练' ,
'其他运动教练' ,
'表演教师' ,
'乐高教师' ,
'轮滑教练' ,
'吉他教师' ,
'机器人教师' ,
'健身教练' ,
'书法教师' ,
'舞蹈老师' ,
'瑜伽老师' ,
'钢琴教师' ,
'古筝教师' ,
'武术教练' ,
'游泳教练' ,
] ,
'其他教育培训' => [
'其他教育培训职位' ,
] ,
//医疗健康
'临床试验' => [
'临床研究' ,
'临床协调' ,
'临床项目经理' ,
'医学总监' ,
'临床数据分析' ,
] ,
'医生/医技' => [
'中医' ,
'牙科医生' ,
'全科医生' ,
'药剂师' ,
'心理医生' ,
'检验科医师' ,
'医生助理' ,
'B超医生' ,
'医学影像医师' ,
'放射科医师' ,
'内科医生' ,
'验光师' ,
'医生' ,
'康复治疗师' ,
] ,
'护士/护理' => [
'护士' ,
'导医' ,
'护士长' ,
] ,
'健康整形' => [
'整形师' ,
'营养师' ,
'针灸推拿' ,
'理疗师' ,
'健康整形' ,
] ,
'生物制药' => [
'医药项目经理' ,
'药品注册' ,
'医药研发' ,
'生物制药' ,
'药品生产' ,
] ,
'医疗器械' => [
'医疗器械研发' ,
'医疗器械生产/质量管理' ,
'医疗器械注册' ,
] ,
'药店' => [
'药店店长' ,
'执业药师/驻店药师' ,
'药店店员' ,
] ,
'其他医疗健康' => [
'其他医疗健康职位' ,
] ,
//采购/贸易
'采购' => [
'采购工程师' ,
'商品经理' ,
'采购总监' ,
'买手' ,
'采购助理' ,
'采购主管' ,
'采购专员' ,
'采购经理' ,
'供应商质量工程师' ,
] ,
'进出口贸易' => [
'单证员' ,
'报关/报检员' ,
'进出口贸易' ,
'贸易跟单' ,
] ,
'其他采购/贸易' => [
'其他采购/贸易类职位' ,
] ,
//供应链/物流
'物流' => [
'调度员' ,
'供应链经理' ,
'货运代理专员' ,
'物流运营' ,
'物流专员' ,
'物流跟单' ,
'水/空/陆运操作' ,
'供应链专员' ,
'核销员' ,
'物流经理' ,
'物流/仓储项目经理' ,
'货运代理经理' ,
] ,
'仓储' => [
'仓库经理' ,
'仓库文员' ,
'配/理/拣/发货' ,
'仓储' ,
'仓库管理员' ,
] ,
'交通/运输' => [
'货运司机' ,
'运输经理/主管' ,
'交通/运输' ,
'商务司机' ,
'配送员' ,
'驾校教练' ,
'网约车司机' ,
'代驾司机' ,
'快递员' ,
] ,
'高端供应链' => [
'物流总监' ,
'高端供应链职位' ,
'供应链总监' ,
] ,
'其他供应链' => [
'其他供应链职位' ,
] ,
//房地产/建筑
'房地产规划开发' => [
'房地产策划' ,
'房地产规划开发' ,
'房产评估师' ,
'地产项目管理' ,
'地产招投标' ,
] ,
'设计装修与市政建设' => [
'消防工程师' ,
'装修项目经理' ,
'工程造价' ,
'建筑工程师' ,
'工程监理' ,
'建筑施工现场管理' ,
'施工员' ,
'工程预算' ,
'园林/景观设计' ,
'施工安全员' ,
'BIM工程师' ,
'土木/土建/结构工程师' ,
'建筑设计师' ,
'室内设计' ,
'幕墙工程师' ,
'建筑机电工程师' ,
'材料员' ,
'软装设计师' ,
'测绘/测量' ,
'城市规划设计' ,
'弱电工程师' ,
'设计装修与市政建设' ,
'暖通工程师' ,
'资料员' ,
'给排水工程师' ,
] ,
'物业管理' => [
'物业管理员' ,
'绿化工' ,
'物业经理' ,
'物业维修' ,
] ,
'高端房地产职位' => [
'高端房地产职位' ,
'地产招投标总监' ,
'地产策划总监' ,
'地产项目总监' ,
] ,
'其他房地产' => [
'其他房地产职位' ,
] ,
//咨询/翻译/法律
'咨询/调研' => [
'咨询/调研' ,
'市场调研' ,
'人力资源咨询顾问' ,
'婚恋咨询师' ,
'咨询经理' ,
'猎头顾问' ,
'咨询总监' ,
'财务咨询顾问' ,
'IT咨询顾问' ,
'知识产权/专利/商标代理人' ,
'其他咨询顾问' ,
'企业管理咨询' ,
'数据分析师' ,
'战略咨询' ,
'咨询项目管理' ,
'心理咨询师' ,
] ,
'律师' => [
'律师助理' ,
'知识产权律师' ,
'专利律师' ,
'事务所律师' ,
'法务' ,
] ,
'翻译' => [
'日语翻译' ,
'俄语翻译' ,
'英语翻译' ,
'法语翻译' ,
'德语翻译' ,
'西班牙语翻译' ,
'韩语/朝鲜语翻译' ,
'其他语种翻译' ,
] ,
'其他咨询类' => [
'其他咨询/翻译类职位' ,
] ,
//旅游
'旅游服务' => [
'计调' ,
'导游' ,
'讲解员' ,
'旅游服务' ,
'预定票务' ,
'签证专员' ,
] ,
'旅游产品开发/策划' => [
'旅游产品经理' ,
'旅游产品开发/策划' ,
'旅游策划师' ,
] ,
'其他旅游' => [
'其他旅游职位' ,
] ,
//服务业
'餐饮' => [
'后厨' ,
'西餐厨师' ,
'洗碗工' ,
'面点师' ,
'餐饮店长' ,
'签证专员' ,
'烧烤师傅' ,
'茶艺师' ,
'咖啡师' ,
'西点师' ,
'行政总厨' ,
'送餐员' ,
'餐饮' ,
'配菜打荷' ,
'厨师' ,
'日料厨师' ,
'餐饮学徒' ,
'凉菜厨师' ,
'收银' ,
'领班' ,
'传菜员' ,
'服务员' ,
'中餐厨师' ,
'厨师长' ,
] ,
'酒店' => [
'酒店经理' ,
'客房服务员' ,
'前厅经理' ,
'客房经理' ,
'礼仪/迎宾/接待' ,
'酒店前台' ,
'收银' ,
] ,
'零售' => [
'督导/巡店' ,
'导购' ,
'门店店长' ,
'陈列员' ,
'理货员' ,
'防损员' ,
'卖场经理' ,
'促销员' ,
'收银' ,
'店员/营业员' ,
] ,
'美容保健' => [
'美发学徒' ,
'美甲师' ,
'化妆师' ,
'发型师' ,
'养发师' ,
'美容师' ,
'足疗师' ,
'按摩师' ,
'美体师' ,
'美容店长' ,
'纹绣师' ,
'美睫师' ,
] ,
'运动健身' => [
'舞蹈老师' ,
'救生员' ,
'健身教练' ,
'瑜伽老师' ,
'健身' ,
'游泳教练' ,
'美体教练' ,
] ,
'婚礼/花艺' => [
'婚礼策划' ,
'花艺师' ,
] ,
'宠物服务' => [
'宠物医生' ,
'宠物美容' ,
] ,
'安保/家政/维修' => [
'护工' ,
'消防中控员' ,
'育婴师' ,
'押运员' ,
'保安' ,
'地铁安检' ,
'保安经理' ,
'家电维修' ,
'月嫂' ,
'产后康复师' ,
'保姆' ,
'保洁' ,
'手机维修' ,
'保洁经理' ,
] ,
'其他服务业' => [
'其他服务业职位' ,
] ,
//生产制造
'生产营运' => [
'生产营运' ,
'生产跟单' ,
'厂长' ,
'生产员' ,
'生产组长/拉长' ,
'生产设备管理' ,
'生产总监' ,
'生产计划管理' ,
'车间主任' ,
] ,
'质量安全' => [
'生产安全员' ,
'认证工程师' ,
'审核员' ,
'质量管理/测试' ,
'汽车质量工程师' ,
'可靠度工程师' ,
'体系工程师' ,
'故障分析师' ,
] ,
'新能源' => [
'线束设计' ,
'电机工程师' ,
'充电桩设计' ,
'电池工程师' ,
] ,
'汽车制造' => [
'汽车项目管理' ,
'车身/造型设计' ,
'汽车零部件设计' ,
'动力系统工程师' ,
'内外饰设计工程师' ,
'汽车电子工程师' ,
'汽车设计' ,
'底盘工程师' ,
] ,
'汽车服务' => [
'汽车维修' ,
'二手车评估师' ,
'汽车服务顾问' ,
'汽车美容' ,
'汽车定损理赔' ,
'4S店店长' ,
'维修站长' ,
] ,
'机械设计/制造' => [
'机电工程师' ,
'机械维修/保养' ,
'注塑工程师' ,
'热设计工程师' ,
'材料工程师' ,
'夹具工程师' ,
'机械制图' ,
'焊接工程师' ,
'铸造/锻造工程师' ,
'精益工程师' ,
'机械工程师' ,
'机械设计/制造' ,
'冲压工程师' ,
'机械设备工程师' ,
'工业工程师' ,
'工艺/制程工程师' ,
'CNC/数控' ,
'模具工程师' ,
'机械设计师' ,
'机械结构工程师' ,
] ,
'化工' => [
'涂料研发' ,
'化学分析' ,
'化妆品研发' ,
'实验室技术员' ,
'食品/饮料研发' ,
'化工项目经理' ,
'化工工程师' ,
] ,
'服装/纺织/皮革' => [
'服装/纺织/皮革跟单' ,
'打样/制版' ,
'面料辅料开发' ,
] ,
'技工/普工' => [
'注塑工' ,
'焊工' ,
'缝纫工' ,
'折弯工' ,
'铲车司机' ,
'锅炉工' ,
'氩弧焊工' ,
'搬运工' ,
'铣工' ,
'木工' ,
'叉车工' ,
'喷塑工' ,
'空调工' ,
'车工' ,
'包装工' ,
'样衣工' ,
'电工' ,
'切割工' ,
'抛光工' ,
'电镀工' ,
'油漆工' ,
'组装工' ,
'普工/操作工' ,
'磨工' ,
'铆工' ,
'学徒工' ,
'电梯工' ,
'机修工' ,
'钳工' ,
'模具工' ,
'普工/操作工' ,
] ,
'其他生产制造' => [
'其他生产制造职位' ,
] ,
];
}
/**
* Comment: 默认标签列表
* Author: zzw
* Date: 2020/12/1 10:23
* @return array
*/
public static function defaultLabelList(){
return [
//1=学历要求
['type' => 1 , 'title' => '中专/技校'] ,
['type' => 1 , 'title' => '高中'] ,
['type' => 1 , 'title' => '大专'] ,
['type' => 1 , 'title' => '本科'] ,
['type' => 1 , 'title' => '硕士'] ,
//2=职位福利
['type' => 2 , 'title' => '加班补助'] ,
['type' => 2 , 'title' => '社保'] ,
['type' => 2 , 'title' => '年终奖'] ,
['type' => 2 , 'title' => '节日福利'] ,
['type' => 2 , 'title' => '年假'] ,
['type' => 2 , 'title' => '婚假'] ,
['type' => 2 , 'title' => '交通补贴'] ,
['type' => 2 , 'title' => '餐补'] ,
['type' => 2 , 'title' => '医保'] ,
['type' => 2 , 'title' => '话费补贴'] ,
['type' => 2 , 'title' => '住房公积金'] ,
['type' => 2 , 'title' => '包吃包住'] ,
//3=经验标签
['type' => 3 , 'title' => '1年以下'] ,
['type' => 3 , 'title' => '1~3年'] ,
['type' => 3 , 'title' => '3~5年'] ,
['type' => 3 , 'title' => '5~10年'] ,
['type' => 3 , 'title' => '10年以上'] ,
//4=企业规模
['type' => 4 , 'title' => '10人以下'] ,
['type' => 4 , 'title' => '10~49人'] ,
['type' => 4 , 'title' => '50~99人'] ,
['type' => 4 , 'title' => '100~499人'] ,
['type' => 4 , 'title' => '500~1000人'] ,
['type' => 4 , 'title' => '1000人以上'] ,
//5=企业性质
['type' => 5 , 'title' => '个体商户'] ,
['type' => 5 , 'title' => '私营企业'] ,
['type' => 5 , 'title' => '股份制企业'] ,
['type' => 5 , 'title' => '国有企业'] ,
['type' => 5 , 'title' => '政府机关'] ,
['type' => 5 , 'title' => '外资企业'] ,
];
}
/**
* Comment: 根据条件获取对应的行业信息
* Author: zzw
* Date: 2020/12/1 11:50
* @param array $where
* @param array $field
* @return array|bool|mixed
*/
public static function getIndustryList(array $where = [],array $field = []){
global $_W;
$where['uniacid'] = $_W['uniacid'];
$where['aid'] = $_W['aid'];
return pdo_getall(PDO_NAME."recruit_industry",$where,$field,'','sort DESC,id DESC');
}
/**
* Comment: 根据条件获取对应的职位信息
* Author: zzw
* Date: 2020/12/1 11:52
* @param array $where
* @param array $field
* @return array|bool|mixed
*/
public static function getPositionList(array $where = [],array $field = []){
global $_W;
$where['uniacid'] = $_W['uniacid'];
$where['aid'] = $_W['aid'];
return pdo_getall(PDO_NAME."recruit_position",$where,$field,'','sort DESC,id DESC');
}
/**
* Comment: 根据条件获取对应的标签信息列表
* Author: zzw
* Date: 2020/12/2 14:21
* @param int $type
* @param array|string $field
* @return array|bool|mixed
*/
public static function getLabelList(int $type,$field = ['id','title']){
global $_W;
if(is_array($field)){
$where['uniacid'] = $_W['uniacid'];
$where['aid'] = $_W['aid'];
$where['type'] = $type;
return pdo_getall(PDO_NAME."recruit_label",$where,$field,'','sort DESC,id DESC');
}else{
$where = " WHERE uniacid = {$_W['uniacid']} AND aid = {$_W['aid']} AND type ={$type} ";
$sql = "SELECT {$field} FROM".tablename(PDO_NAME."recruit_label") .$where." ORDER BY sort DESC,id DESC " ;
return pdo_fetchall($sql);
}
}
/**
* Comment: 根据条件获取对应的企业信息列表
* Author: zzw
* Date: 2020/12/8 17:22
* @param string $diyWhere
* @param string $field
* @param string $order
* @param string $limit
* @return array|bool|mixed
*/
public static function getEnterpriseList(string $diyWhere = '',string $field = '*',string $order = 'ORDER BY listorder DESC,id DESC',string $limit = ''){
global $_W;
//sql语句生成
$where = " WHERE uniacid = {$_W['uniacid']} AND aid = {$_W['aid']} AND recruit_switch = 1 {$diyWhere} ";
$sql = "SELECT {$field} FROM ".tablename(PDO_NAME."merchantdata");
//列表信息获取
$list = pdo_fetchall($sql.$where.$order.$limit);
foreach($list as $index => &$item){
$item = self::handleEnterpriseInfo($item);
}
//总数获取
$totalSql = str_replace($field,'count(*)',$sql);
$total = pdo_fetchcolumn($totalSql.$where);
return [$list,$total];
}
/**
* Comment: 根据条件获取对应的招聘信息列表
* Author: zzw
* Date: 2020/12/9 15:16
* @param string $diyWhere
* @param string $field
* @param string $order
* @param string $limit
* @return array
*/
public static function getRecruitList(string $diyWhere = '',string $field = '*',string $order = 'ORDER BY sort DESC,id DESC',string $limit = ''){
global $_W;
//sql语句生成
$where = " WHERE uniacid = {$_W['uniacid']} AND aid = {$_W['aid']} {$diyWhere} ";
$sql = "SELECT {$field} FROM ".tablename(PDO_NAME."recruit_recruit");
//列表信息获取
$list = pdo_fetchall($sql.$where.$order.$limit);
foreach($list as $index => &$item){
$item = self::handleRecruitInfo($item);
}
//总数获取
$totalSql = str_replace($field,'count(*)',$sql);
$total = pdo_fetchcolumn($totalSql.$where);
return [$list,$total];
}
/**
* Comment: 根据条件获取对应的简历信息列表
* Author: zzw
* Date: 2020/12/10 9:47
* @param array $where
* @param array $field
* @param string $order
* @param array $limit
* @return array
*/
public static function getResumeList(array $where = [],array $field = [],string $order = 'id DESC',array $limit = []){
global $_W;
//条件补充
$where['uniacid'] = $_W['uniacid'];
$where['aid'] = $_W['aid'];
//信息列表获取
$list = pdo_getall(PDO_NAME."recruit_resume",$where,$field,'',trim($order),$limit);
foreach($list as $key => &$val){
$val = self::handleResumeInfo($val);
}
//总数获取
$total = pdo_count(PDO_NAME."recruit_resume",$where);
return [$list,$total];
}
/**
* Comment: 处理传递进来的单条招聘信息
* Author: zzw
* Date: 2020/12/10 18:31
* @param array $item
* @return mixed
*/
public static function handleRecruitInfo(array $item){
//判断是否获取行业职位信息
if($item['industry_pid']) $item['industry'] = pdo_getcolumn(PDO_NAME."recruit_industry",['id'=>$item['industry_pid']],'title');
if($item['industry_id']) $item['sub_industry'] = pdo_getcolumn(PDO_NAME."recruit_industry",['id'=>$item['industry_id']],'title');
if($item['position_id']) $item['position'] = pdo_getcolumn(PDO_NAME."recruit_position",['id'=>$item['position_id']],'title');
//获取发布方信息
if($item['recruitment_type'] == 1 && $item['release_mid']){
//个人招聘
$user = pdo_get(PDO_NAME."member",['id'=>$item['release_mid']],['nickname','avatar']);
$item['release'] = [
'name' => $user['nickname'] ,
'logo' => tomedia($user['avatar']) ,
'nature' => '个人招聘' ,
'scale' => '' ,
'industry' => '' ,
'is_authentication' => 0
];
//判断是否认证
if (p('attestation')) if (Attestation::checkAttestation(1,$item['release_mid'])['attestation'] == 1) $item['release']['is_authentication'] = 1;
}else if($item['recruitment_type'] == 2 && $item['release_sid']){
//企业招聘
$shop = pdo_get(PDO_NAME."merchantdata",['id'=>$item['release_sid']],['storename','logo','recruit_nature_id','recruit_scale_id','recruit_industry_id']);
$item['release'] = [
'name' => $shop['storename'] ,
'logo' => tomedia($shop['logo']) ,
'nature' => pdo_getcolumn(PDO_NAME . "recruit_label" , ['id' => $shop['recruit_nature_id']] , 'title') ,
'scale' => pdo_getcolumn(PDO_NAME . "recruit_label" , ['id' => $shop['recruit_scale_id']] , 'title') ,
'industry' => pdo_getcolumn(PDO_NAME . "recruit_industry" , ['id' => $shop['recruit_industry_id']] , 'title') ,
'is_authentication' => 0
];
//判断是否认证
if(p('attestation')) if(Attestation::checkAttestation(2,$item['release_sid'])['attestation'] == 2) $item['release']['is_authentication'] = 1;
}else if(array_key_exists('recruitment_type',$item)){
//错误数据 不能判断发布方
$item['release'] = [
'name' => '' ,
'logo' => '' ,
'nature' => '' ,
'scale' => '' ,
'industry' => '' ,
'is_authentication' => 0
];
}
//判断获取薪资信息
if(in_array($item['job_type'],[1,3])){
//全职
if($item['full_type'] == 1) $item['salary'] = '面议';
else if($item['full_type'] == 2) $item['salary'] = self::handleSalary($item['full_salary_min'],false).'~'.self::handleSalary($item['full_salary_max']);
//获取全职福利信息
if($item['welfare']){
$welfare = explode(',',$item['welfare']);
$welfareList = pdo_getall(PDO_NAME."recruit_label",['id IN'=>$welfare],['title']);
$item['welfare_list'] = array_column($welfareList,'title');
}
}else if($item['job_type'] == 2){
//兼职
if($item['part_type'] == 1) $item['salary'] = $item['part_salary']."元/时";
else if($item['part_type'] == 2) $item['salary'] = $item['part_salary']."元/天";
else if($item['part_type'] == 3) $item['salary'] = $item['part_salary']."元/月";
//判断结算方式
switch ($item['part_settlement']){
case 1:$item['settlement'] = '日结';break;
case 2:$item['settlement'] = '周结';break;
case 3:$item['settlement'] = '月结';break;
case 4:$item['settlement'] = '完工结算';break;
}
}
//获取工作区域
if($item['work_province']) $item['province'] = pdo_getcolumn(PDO_NAME."area",['id'=>$item['work_province']],'name');
if($item['work_city']) $item['city'] = pdo_getcolumn(PDO_NAME."area",['id'=>$item['work_city']],'name');
if($item['work_area']) $item['area'] = pdo_getcolumn(PDO_NAME."area",['id'=>$item['work_area']],'name');
//状态信息处理
if($item['status']){
switch ($item['status']){
case 1:$item['status_text'] = '待付款';break;
case 2:$item['status_text'] = '审核中';break;
case 3:$item['status_text'] = '未通过';break;
case 4:$item['status_text'] = '招聘中';break;
case 5:$item['status_text'] = '已结束';break;
}
}
//时间信息处理
if($item['create_time']){
//获取今天和昨天的开始时间
$today = strtotime(date("Y-m-d 00:00:00",time()));
$yestoday = strtotime("-1 day",$today);
//判断发布时间
if($item['create_time'] >= $today) $item['release_time'] = '今日';
else if($item['create_time'] < $today && $item['create_time'] > $yestoday) $item['release_time'] = '昨日';
else $item['release_time'] = date("m-d",$item['create_time']);
}
//距离计算
if($item['distances']){
if($item['distances'] < 1000){
$item['distances_text'] = $item['distances'].'m';
}else{
$item['distances_text'] = sprintf("%.2f",$item['distances'] / 1000).'km';
}
}
//获取期望工作地区 取最小一级
if ($item['area']) $item['region'] = $item['area'];
else if ($item['city']) $item['region'] = $item['city'];
else if ($item['province']) $item['region'] = $item['province'];
//性别要求 性别要求:1=不限,2=男,3=女
if($item['gender'] == 1) $item['gender_text'] = '男女不限';
else if($item['gender'] == 2) $item['gender_text'] = '仅限男性';
else if($item['gender'] == 3) $item['gender_text'] = '仅限女性';
//年龄要求
if($item['age_min'] && $item['age_max']) $item['age'] = $item['age_min'].'~'.$item['age_max']."";
//学历要求
if($item['education_label_id']) $item['education'] = pdo_getcolumn(PDO_NAME."recruit_label",['id'=>$item['education_label_id']],'title');
else if(array_key_exists('education_label_id',$item)) $item['education'] = '学历不限';
//经验要求
if($item['experience_label_id']) $item['experience'] = pdo_getcolumn(PDO_NAME."recruit_label",['id'=>$item['experience_label_id']],'title');
else if(array_key_exists('experience_label_id',$item)) $item['experience'] = '经验不限';
return $item;
}
/**
* Comment: 处理传递进来的单条简历信息
* Author: zzw
* Date: 2020/12/11 15:59
* @param $val
* @return mixed
*/
public static function handleResumeInfo($val){
//头像处理
if($val['avatar']) $val['avatar'] = tomedia($val['avatar']);
//发布时间
if($val['create_time']) $val['create_time_text'] = date("Y-m-d",$val['create_time']);
//性别获取 性别:2=男,3=女
if($val['gender'] == 2) $val['gender_text'] = '男';
else if($val['gender'] == 3) $val['gender_text'] = '女';
//上岗状态:1=随时上岗,2=一周之内,3=一月之内,4=考虑中,5=无换岗意向
switch ($val['work_status']){
case 1:$val['work_status_text'] = '随时上岗';break;
case 2:$val['work_status_text'] = '一周之内';break;
case 3:$val['work_status_text'] = '一月之内';break;
case 4:$val['work_status_text'] = '考虑中';break;
case 5:$val['work_status_text'] = '无换岗意向';break;
}
//工作经验获取
if($val['experience_label_id']) $val['experience'] = pdo_getcolumn(PDO_NAME."recruit_label",['id'=>$val['experience_label_id']],'title');
//最高学历获取
if($val['education_label_id']) $val['education'] = pdo_getcolumn(PDO_NAME."recruit_label",['id'=>$val['education_label_id']],'title');
//年龄获取
if($val['birth_time']) $val['age'] = self::getAge(date("Y-m-d",$val['birth_time']));
//期望职位
if($val['expect_position']){
$positionIds = explode(',',$val['expect_position']);
$positionList = pdo_getall(PDO_NAME."recruit_position",['id IN'=>$positionIds],['title']);
$val['expect_position_list'] = array_column($positionList,'title');
}
//工作类型:1=全职,2=兼职
if($val['job_type'] == 1){
$val['job_type_text'] = '全职';
if($val['expect_salary_min'] && $val['expect_salary_max']){
$val['salary'] = trim(self::handleSalary($val['expect_salary_min']),'K').'~'.self::handleSalary($val['expect_salary_max']);
}
}else if($val['job_type'] == 2) {
$val['job_type_text'] = '兼职';
$val['salary'] = $val['expect_salary_min'].'~'.$val['expect_salary_max']."";
}
//工作区域
if($val['expect_work_province']) $val['province'] = pdo_getcolumn(PDO_NAME."area",['id'=>$val['expect_work_province']],'name');
if($val['expect_work_city']) $val['city'] = pdo_getcolumn(PDO_NAME."area",['id'=>$val['expect_work_city']],'name');
if($val['expect_work_area']) $val['area'] = pdo_getcolumn(PDO_NAME."area",['id'=>$val['expect_work_area']],'name');
//获取期望工作地区 取最小一级
if ($val['area']) $val['region'] = $val['area'];
else if ($val['city']) $val['region'] = $val['city'];
else if ($val['province']) $val['region'] = $val['province'];
//工作经历
if($val['work_experience']){
$work = unserialize($val['work_experience']);
if(is_array($work)){
foreach ($work as &$workItem){
$workItem['start_time'] = date("Y-m-d",$workItem['start_time']);
$workItem['end_time'] = date("Y-m-d",$workItem['end_time']);
}
}
$val['work_experience'] = is_array($work) ? $work : [];
}
//教育经历
if($val['educational_experience']){
$educational = unserialize($val['educational_experience']);
if(is_array($educational)){
foreach ($educational as &$educationalItem){
$educationalItem['start_time'] = date("Y-m-d",$educationalItem['start_time']);
$educationalItem['end_time'] = date("Y-m-d",$educationalItem['end_time']);
}
}
$val['educational_experience'] = is_array($educational) ? $educational : [];
}
//在校职务
if($val['school_office']){
$school_office = unserialize($val['school_office']);
if(is_array($school_office)){
foreach ($school_office as &$school_office_item){
$school_office_item['start_time'] = date("Y-m-d",$school_office_item['start_time']);
$school_office_item['end_time'] = date("Y-m-d",$school_office_item['end_time']);
}
}
$val['school_office'] = is_array($school_office) ? $school_office : [];
}
return $val;
}
/**
* Comment: 处理传递进来的单条企业信息
* Author: zzw
* Date: 2020/12/11 18:28
* @param $item
* @return mixed
*/
public static function handleEnterpriseInfo($item){
if(array_key_exists('logo' , $item)) $item['logo'] = tomedia($item['logo']);
//是否获取企业性质
if (array_key_exists('recruit_nature_id' , $item)) $item['nature'] = pdo_getcolumn(PDO_NAME . "recruit_label" , ['id' => $item['recruit_nature_id']] , 'title');
//是否获取企业规模
if (array_key_exists('recruit_scale_id' , $item)) $item['scale'] = pdo_getcolumn(PDO_NAME . "recruit_label" , ['id' => $item['recruit_scale_id']] , 'title');
//是否获取企业行业
if (array_key_exists('recruit_industry_id' , $item)) $item['industry'] = pdo_getcolumn(PDO_NAME . "recruit_industry" , ['id' => $item['recruit_industry_id']] , 'title');
//是否获取区域信息
if($item['provinceid']) $item['area'] = pdo_getcolumn(PDO_NAME . "area" , ['id' => $item['provinceid']] , 'name')."·";
if($item['areaid']) $item['area'] .= pdo_getcolumn(PDO_NAME . "area" , ['id' => $item['areaid']] , 'name')."·";
if($item['distid']) $item['area'] .= pdo_getcolumn(PDO_NAME . "area" , ['id' => $item['distid']] , 'name');
//获取招聘中的招聘信息
if($item['id']) $item['release_recruit'] = pdo_count(PDO_NAME . "recruit_recruit" , ['release_sid' => $item['id'],'status'=>4]);
//判断当前企业是否认证 0=未认证,1=已认证
$item['is_authentication'] = 0;//默认未认证
if(p('attestation')) if(Attestation::checkAttestation(2,$item['id'])['attestation'] == 2) $item['is_authentication'] = 1;
//距离计算
if($item['distances']){
if($item['distances'] < 1000){
$item['distances_text'] = $item['distances'].'m';
}else{
$item['distances_text'] = sprintf("%.2f",$item['distances'] / 1000).'km';
}
}
//富文本信息处
if(array_key_exists('introduction',$item)) $item['introduction'] = htmlspecialchars_decode($item['introduction']);
//相册信息处理
if(array_key_exists('recruit_adv',$item)){
$album = unserialize($item['recruit_adv']);
if (is_array($album)){
foreach($album as &$img){
$img = tomedia($img);
}
}
unset($item['recruit_adv']);
$item['album'] = is_array($album) ? $album : [];
}
return $item;
}
/**
* Comment: 根据日期获取年龄
* Author: zzw
* Date: 2020/12/4 14:30
* @param string $birthday
* @return false|string
*/
public static function getAge(string $birthday){
[$year , $month , $day] = explode("-" , $birthday);
$year_diff = date("Y") - $year;
$month_diff = date("m") - $month;
$day_diff = date("d") - $day;
if ($day_diff < 0 || $month_diff < 0) $year_diff--;
return $year_diff;
}
/**
* Comment: 薪资金额转换
* Author: zzw
* Date: 2020/12/9 14:37
* @param string $money
* @param bool $company
* @return string
*/
public static function handleSalary(string $money,bool $company = true){
//获取小数点前的数字
if($money >= 1000) $k = floor($money / 1000);
else $k = 0;
//获取小数点后的数字
if($money % 1000 > 0) $k = sprintf("%.1f",$k + (($money % 1000) / 1000));
//数据拼接
if($company) return $k."K";
else return $k;
}
/**
* Comment: 根据条件获取招聘信息推荐列表
* Author: zzw
* Date: 2021/1/12 14:58
* @param int $id 当前招聘信息id
* @param int $positionId 职位id,如果当前职位不够数量,则会从当前职位对应的子行业中补齐推荐数量
* @param int $workProvince 省id,仅推荐统一省的招聘信息
* @param int $num 需要获取的推荐数量
* @return array|mixed
*/
public static function getRecruitRecommend(int $id,int $positionId,int $workProvince,int $num){
$field = "id,title,recruitment_type,release_mid,release_sid,job_type,full_type,full_salary_min,full_salary_max,
welfare,part_type,part_salary,part_settlement,work_province,work_city,work_area,status,create_time,is_top";
[$list , $total] = self::getRecruitList(" AND id <> {$id} AND work_province = {$workProvince} AND position_id = {$positionId} AND status = 4 " , $field , " ORDER BY rand() " , " LIMIT {$num} ");
//判断数量是否达标
if (count($list) < $num) {
//获取子行业信息 再次查询
$surplus = $num - count($list);
$industryId = pdo_getcolumn(PDO_NAME . "recruit_position" , ['id' => $positionId] , 'industry_id');
if(count($list) > 0) {
$ids = array_column($list,'id');
$ids = array_merge($ids , [$id]);
$where = " id NOT IN {$ids} ";
}else{
$where = " id <> {$id} ";
}
[$twoList , $twoTotal] = self::getRecruitList(" AND {$where} AND work_province = {$workProvince} AND industry_id = {$industryId} AND status = 4 " , $field , " ORDER BY rand() " , " LIMIT {$surplus} ");
$list = array_merge($list , $twoList);
}
//删除多余的信息
foreach ($list as &$item) {
unset($item['position_id'] , $item['release_mid'] , $item['release_sid'] , $item['full_type'] , $item['full_salary_min'] , $item['full_salary_max'] , $item['welfare'] , $item['part_type'] , $item['part_salary'] , $item['part_settlement'] , $item['work_province'] , $item['work_city'] , $item['work_area'] , $item['create_time'] , $item['province'] , $item['city'] , $item['area'] , $item['job_type'] , $item['distances']);
}
return is_array($list) && count($list) > 0 ? $list : [];
}
/**
* Comment: 获取发布相关信息
* Author: zzw
* Date: 2020/12/14 16:54
* @param int $recruitmentType 招聘类型:1=个人招聘,2=企业招聘
* @param int $mid 发布方用户id
* @param int $sid 发布方商户id
* @return array
*/
public static function getReleaseSituation(int $recruitmentType,int $mid = 0,int $sid = 0){
global $_W;
//获取最大免费发布数量 超出限制后发布所需支付的金额
$totalWhere['uniacid'] = $_W['uniacid'];
$totalWhere['recruitment_type'] = $recruitmentType;
if($recruitmentType == 1){
//个人招聘
$totalWhere['release_mid'] = $mid;
$set = Setting::agentsetting_read('recruit_set');
$releaseNumber = $set['release_number'];//免费发布数量
$releasePricce = sprintf("%.2f" , $set['release_price']);//超出限制后发布所需支付的金额
}else{
//企业招聘
$totalWhere['release_sid'] = $sid;
$groupId = pdo_getcolumn(PDO_NAME."merchantdata",['id'=>$sid],'groupid');
$groupInfo = pdo_get(PDO_NAME."chargelist",['id'=>$groupId],['release_number','release_price']);
$releaseNumber = $groupInfo['release_number'];//免费发布数量
$releasePricce = sprintf("%.2f" , $groupInfo['release_price']);//超出限制后发布所需支付的金额
}
//获取已经发布的招聘数量
$total = pdo_count(PDO_NAME."recruit_recruit",$totalWhere);
//拼装返回信息
$data = [
'max' => $releaseNumber ,//免费发布数量
'price' => $releasePricce ,//超出限制后发布所需支付的金额
'total' => $total ,//已发布数量
'is_pay' => ($total >= $releaseNumber && $releasePricce > 0) ? 1 : 0 ,//当前发布是否需要付费 0=不需要,1=需要
];
return $data;
}
/**
* Comment: 招聘信息支付回调处理
* Date: 2021/1/8 17:04
* @param $params
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public static function payRecruitOrderNotify($params) {
global $_W;
//写入异步日志记录
Util::wl_log('recruit_notify', PATH_DATA . "recruit/data/", $params);
$order = pdo_get(PDO_NAME."order",['orderno' => $params['tid']],['plugin','id','fkid','fightstatus','num']);
//更新订单
$data = array('status' => $params['result'] == 'success' ? 3 : 0);
$data['paytype'] = $params['type'];
if ($params['tag']['transaction_id']) $data['transid'] = $params['tag']['transaction_id'];
$data['paytime'] = TIMESTAMP;
pdo_update(PDO_NAME . 'order', $data, array('id' => $order['id']));
$task = array(
'type' => $order['plugin'],
'orderid' => $order['id']
);
$task = serialize($task);
Queue::addTask(2, $task, time(), $order['id']);
if($order['fightstatus'] == 2){
//这里是置顶回调
$endTime = strtotime("+{$order['num']} days");
$topData = [
'is_top' => 1,
'top_end_time' => $endTime,
];
pdo_update(PDO_NAME."recruit_recruit",$topData,['id'=>$order['fkid']]);
}else{
//这里是发布招聘信息的回调
$recruitId = $order['fkid']; //获取招聘信息id
//获取招聘信息
$recruit = pdo_get(PDO_NAME."recruit_recruit",['id'=>$recruitId],['title','recruitment_type','release_mid','release_sid','create_time']);
//根据是否需要审核 修改招聘信息状态
$set = Setting::agentsetting_read('recruit_set');
if($set['is_examine'] == 1) {
//待审核
pdo_update(PDO_NAME."recruit_recruit",['status'=>2],['id'=>$recruitId]);
$tip = '请等待审核';
//给代理商管理员发送审核消息
$nickname = pdo_getcolumn(PDO_NAME."member",['id' => $recruit['release_mid']],'nickname');
$first = '招聘审核通知';
$content = "用户{$nickname}".date('m月d日H时i分',$recruit['create_time'])."发布了招聘信息";//业务内容
$status = '待审核';//处理结果
$remark = '请尽快审核!';//备注信息
$time = time();//操作时间(时间戳)
News::noticeAgent('recruit_examine',$_W['aid'],$first,'招聘审核通知',$content,$status,$remark,$time);
} else {
//招聘中
pdo_update(PDO_NAME."recruit_recruit",['status'=>4],['id'=>$recruitId]);
$tip = '正在招聘中';
}
//根据发布方发布模板消息 招聘类型:1=个人招聘,2=企业招聘
if($recruit['recruitment_type'] == 1){
//发送模板消息给用户
$nickname = pdo_getcolumn(PDO_NAME."member",['id'=>$recruit['release_mid']],'nickname');
$message = [
'first' => "尊敬的{$nickname}" ,
'type' => '发布招聘' ,//业务类型
'content' => "您在".date('m月d日H时i分',$recruit['create_time'])."发布的[{$recruit['title']}]招聘已支付成功,{$tip}" ,//业务内容
'status' => '支付成功' ,//处理结果
'time' => date('Y-m-d H:i:s' , time()) ,//操作时间
'remark' => ''
];
TempModel::sendInit('service',$recruit['release_mid'],$message,$_W['source']);
}else{
//发送模板消息给企业
$name = pdo_getcolumn(PDO_NAME."merchantdata",['id'=>$recruit['release_sid']],'storename');
$staffList = pdo_getall(PDO_NAME."merchantuser",['storeid'=>$recruit['release_sid'],'ismain IN'=>[1,3]],['mid','name']);
foreach($staffList as $item){
$message = [
'first' => "尊敬的{$item['name']}" ,
'type' => '发布招聘' ,//业务类型
'content' => "[{$name}]在".date('m月d日H时i分',$recruit['create_time'])."发布的[{$recruit['title']}]招聘已支付成功,{$tip}" ,//业务内容
'status' => '支付成功' ,//处理结果
'time' => date('Y-m-d H:i:s' , time()) ,//操作时间
'remark' => ''
];
TempModel::sendInit('service',$item['mid'],$message,$_W['source']);
}
}
}
}
/**
* Comment: 导出简历 —— 列表导出
* Author: zzw
* Date: 2021/2/1 14:52
* @param $list
*/
public static function exportResumeList($list){
//列表信息处理
foreach($list as &$item){
//性别信息处理 性别:2=男,3=女
if($item['gender'] == 2) $item['gender_text'] = '男';
else if($item['gender'] == 2) $item['gender_text'] = '女';
else $item['gender_text'] = '';
//上岗状态:1=随时上岗,2=一周之内,3=一月之内,4=考虑中,5=无换岗意向
switch ($item['work_status']){
case 1: $item['work_status_text'] = '随时上岗';break;
case 2: $item['work_status_text'] = '一周之内';break;
case 3: $item['work_status_text'] = '一月之内';break;
case 4: $item['work_status_text'] = '考虑中';break;
case 5: $item['work_status_text'] = '无换岗意向';break;
default: $item['work_status_text'] = '';
}
//工作类型:1=全职,2=兼职
if($item['job_type'] == 1) $item['job_type_text'] = '全职';
else $item['job_type_text'] = '兼职';
//删除不需要的内容
unset($item['id'],$item['avatar'],$item['gender'],$item['work_status'],$item['job_type'],$item['create_time']);
}
//简历导出
self::exportResume($list);
exit();
}
/**
* Comment: 导出简历 —— 单个简历导出
* Author: zzw
* Date: 2021/2/1 15:24
* @param $info
*/
public static function exportResumeInfo($info){
$data['name'] = $info['name'];
$data['phone'] = $info['phone'];
//获取工作经验信息
if($info['experience_label_id'] > 0) $data['experience'] = pdo_getcolumn(PDO_NAME."recruit_label",['id'=>$info['experience_label_id']],'title');
else $data['experience'] = '无工作经验';
//最高学历
$data['education'] = pdo_getcolumn(PDO_NAME."recruit_label",['id'=>$info['education_label_id']],'title');
//期望薪资
if($info['job_type'] == 1) $data['expect_salary'] = $info['expect_salary_min'].'元/月'.' ~ '.$info['expect_salary_max'].'元/月';
else $data['expect_salary'] = $info['expect_salary_min'].'元/天'.' ~ '.$info['expect_salary_max'].'元/天';
//期望工作区域
$areaName = tablename(PDO_NAME.'area');
$sql = "SELECT concat(
(SELECT name FROM ".$areaName." WHERE id = ".$info['expect_work_province']." ),
CASE WHEN ".$info['expect_work_city']." > 0 THEN concat('.',(SELECT name FROM ".$areaName." WHERE id = ".$info['expect_work_city']." ))
ELSE ''
END,
CASE WHEN ".$info['expect_work_city']." > 0 AND ".$info['expect_work_area']." > 0 THEN concat('.',(SELECT name FROM ".$areaName." WHERE id = ".$info['expect_work_area']." ))
ELSE ''
END) as expect_work_address FROM".$areaName;
$data['expect_work_address'] = pdo_fetchcolumn($sql);
//性别信息处理 性别:2=男,3=女
if($info['gender'] == 2) $data['gender_text'] = '男';
else if($info['gender'] == 2) $data['gender_text'] = '女';
else $info['gender_text'] = '';
//上岗状态:1=随时上岗,2=一周之内,3=一月之内,4=考虑中,5=无换岗意向
switch ($info['work_status']){
case 1: $data['work_status_text'] = '随时上岗';break;
case 2: $data['work_status_text'] = '一周之内';break;
case 3: $data['work_status_text'] = '一月之内';break;
case 4: $data['work_status_text'] = '考虑中';break;
case 5: $data['work_status_text'] = '无换岗意向';break;
default: $data['work_status_text'] = '';
}
//工作类型:1=全职,2=兼职
if($info['job_type'] == 1) $data['job_type_text'] = '全职';
else $data['job_type_text'] = '兼职';
self::exportResume([$data], $data['name'].'的简历.csv');
}
/**
* Comment: 简历导出
* Author: zzw
* Date: 2021/2/1 15:27
* @param $list
* @param string $exportTitle
*/
private static function exportResume($list,$exportTitle = '简历列表.csv'){
//标题列表数组
$title = [
'name' => '用户姓名',
'phone' => '联系方式',
'experience' => '工作经验',
'education' => '教育学历',
'expect_salary' => '期望薪资',
'expect_work_address' => '期望工作地区',
'gender_text' => '性别',
'work_status_text' => '上岗状态',
'job_type_text' => '期望工作类型',
];
//导出信息
util_csv::export_csv_2($list, $title, $exportTitle);
exit();
}
/**
* Comment: 计划任务
* Author: zzw
* Date: 2021/1/13 11:34
*/
public function doTask() {
global $_W;
//修改所有已过期的置顶
pdo_update(PDO_NAME."recruit_recruit",['is_top'=>0],['top_end_time <='=>time()]);
}
/**
* 邀请面试企业主动发送消息
* @param $title // 职位
* @param $interviewTime // 面试时间
* @param $interviewArea // 面试地点
* @param $sendId // 发送企业id
* @param $receiveId // 接收用户id
* @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
* @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
* @author whj
* @date 2023-08-15 10:42
*/
public static function sendRecruit($title,$interviewTime,$interviewArea,$sendId,$receiveId)
{
global $_W;
$mid = pdo_getcolumn(PDO_NAME . 'merchantuser',['storeid' => $sendId,'ismain' => 1],'mid');
if ($mid) {
$freeChat = Rights::freeChatRights($mid,2);
if (!$freeChat) {
$memberIsChat = Rights::memberIsChat($mid);
if (!$memberIsChat['status']) return ['status' => 0, 'msg' => $memberIsChat['msg']];
}
}
$data = [];
$interviewDateTime = date("Y-m-d H:i",$interviewTime);
$data['uniacid'] = $_W['uniacid'];//
$data['send_id'] = $sendId; //发送方id
$data['send_type'] = 2; //发送方类型(1=用户;2=商户)
$data['receive_id'] = $receiveId; //接收人id
$data['receive_type'] = 1; //接收人类型(1=用户;2=商户)
$data['create_time'] = time();//发送时间(建立时间)
$data['type'] = 0;//内容类型(0=文本信息(默认),1=图片地址,2=视频信息)
$data['plugin'] = '';//通讯插件
$content = '<div style="display: flex;align-items: center;word-wrap:break-word;flex-wrap: wrap;">
邀请面试通知<br>
面试时间:'.$interviewDateTime.'<br>
面试地点:'.$interviewArea.'<br>
面试职位:'.$title.'
</div>';
$data['content'] = htmlspecialchars_decode($content);
$res = Im::insert($data);
return ['status' => 1,'msg' => '发送成功'];
}
}