'技术' , '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 = '
邀请面试通知
面试时间:'.$interviewDateTime.'
面试地点:'.$interviewArea.'
面试职位:'.$title.'
'; $data['content'] = htmlspecialchars_decode($content); $res = Im::insert($data); return ['status' => 1,'msg' => '发送成功']; } }