579 lines
30 KiB
MySQL
579 lines
30 KiB
MySQL
|
|
-- ==========================================================
|
|||
|
|
-- Boss 招聘系统:高真实度种子数据(可重复执行)bulk_real_v1
|
|||
|
|
-- 说明:
|
|||
|
|
-- 1) 不硬编码任何主键ID;全部通过自然键/查询获取
|
|||
|
|
-- 2) 幂等:对唯一键用 INSERT IGNORE;对非唯一用 NOT EXISTS
|
|||
|
|
-- 3) utf8mb4:避免中文/emoji 乱码
|
|||
|
|
-- 4) 数据规模:1000 个求职者 + 20 公司 + 40 Boss + 200 岗位 + 1000 投递 + 部分决策/面试
|
|||
|
|
-- ==========================================================
|
|||
|
|
|
|||
|
|
USE boss;
|
|||
|
|
SET NAMES utf8mb4;
|
|||
|
|
|
|||
|
|
START TRANSACTION;
|
|||
|
|
|
|||
|
|
-- 种子标记(用于识别/清理:只删带该标记的数据)
|
|||
|
|
SET @SEED_TAG := 'SEED_TAG:bulk_real_v1';
|
|||
|
|
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
-- 1) 构造 1..1000 序列(不使用窗口函数/递归,兼容性更好)
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
-- 1) 构造 1..1000 序列(兼容“Can't reopen table”环境)
|
|||
|
|
-- 说明:不再多次引用临时表 seed_digits,改用内联 digits
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
CREATE TEMPORARY TABLE IF NOT EXISTS seed_seq (n INT NOT NULL PRIMARY KEY) ENGINE=MEMORY;
|
|||
|
|
TRUNCATE TABLE seed_seq;
|
|||
|
|
|
|||
|
|
INSERT INTO seed_seq(n)
|
|||
|
|
SELECT (a.d + b.d*10 + c.d*100 + d4.d*1000) + 1 AS n
|
|||
|
|
FROM
|
|||
|
|
(SELECT 0 d UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
|
|||
|
|
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
|
|||
|
|
CROSS JOIN
|
|||
|
|
(SELECT 0 d UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
|
|||
|
|
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
|
|||
|
|
CROSS JOIN
|
|||
|
|
(SELECT 0 d UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
|
|||
|
|
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) c
|
|||
|
|
CROSS JOIN
|
|||
|
|
(SELECT 0 d UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
|
|||
|
|
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) d4
|
|||
|
|
WHERE (a.d + b.d*10 + c.d*100 + d4.d*1000) < 1000;
|
|||
|
|
|
|||
|
|
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
-- 2) 基础字典:城市/姓名/方向(让数据“像真的”)
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
CREATE TEMPORARY TABLE IF NOT EXISTS seed_city (
|
|||
|
|
rn INT PRIMARY KEY,
|
|||
|
|
city VARCHAR(64),
|
|||
|
|
district VARCHAR(64)
|
|||
|
|
) ENGINE=InnoDB;
|
|||
|
|
TRUNCATE TABLE seed_city;
|
|||
|
|
INSERT INTO seed_city(rn, city, district) VALUES
|
|||
|
|
(0,'北京','海淀'),(1,'上海','浦东'),(2,'深圳','南山'),(3,'杭州','滨江'),(4,'广州','天河'),
|
|||
|
|
(5,'成都','高新'),(6,'南京','建邺'),(7,'武汉','光谷'),(8,'西安','高新'),(9,'苏州','工业园'),
|
|||
|
|
(10,'重庆','渝中'),(11,'天津','滨海'),(12,'长沙','岳麓'),(13,'合肥','高新'),(14,'厦门','思明'),
|
|||
|
|
(15,'青岛','崂山'),(16,'宁波','鄞州'),(17,'济南','历下'),(18,'郑州','金水'),(19,'福州','鼓楼');
|
|||
|
|
|
|||
|
|
CREATE TEMPORARY TABLE IF NOT EXISTS seed_surname (rn INT PRIMARY KEY, v VARCHAR(16)) ENGINE=InnoDB;
|
|||
|
|
TRUNCATE TABLE seed_surname;
|
|||
|
|
INSERT INTO seed_surname(rn,v) VALUES
|
|||
|
|
(0,'王'),(1,'李'),(2,'张'),(3,'刘'),(4,'陈'),(5,'杨'),(6,'黄'),(7,'赵'),(8,'周'),(9,'吴'),
|
|||
|
|
(10,'徐'),(11,'孙'),(12,'胡'),(13,'朱'),(14,'高'),(15,'林'),(16,'何'),(17,'郭'),(18,'马'),(19,'罗'),
|
|||
|
|
(20,'梁'),(21,'宋'),(22,'郑'),(23,'谢'),(24,'韩'),(25,'唐'),(26,'冯'),(27,'于'),(28,'董'),(29,'萧');
|
|||
|
|
|
|||
|
|
CREATE TEMPORARY TABLE IF NOT EXISTS seed_given (rn INT PRIMARY KEY, v VARCHAR(16)) ENGINE=InnoDB;
|
|||
|
|
TRUNCATE TABLE seed_given;
|
|||
|
|
INSERT INTO seed_given(rn,v) VALUES
|
|||
|
|
(0,'子涵'),(1,'雨桐'),(2,'浩然'),(3,'嘉怡'),(4,'宇轩'),(5,'欣怡'),(6,'俊杰'),(7,'梓萱'),(8,'思琪'),(9,'泽宇'),
|
|||
|
|
(10,'晨曦'),(11,'若曦'),(12,'明轩'),(13,'芷晴'),(14,'一凡'),(15,'可欣'),(16,'天宇'),(17,'语嫣'),(18,'书豪'),(19,'梦瑶'),
|
|||
|
|
(20,'佳宁'),(21,'思源'),(22,'安然'),(23,'梓睿'),(24,'昕妍'),(25,'奕辰'),(26,'沐辰'),(27,'心怡'),(28,'知远'),(29,'嘉航');
|
|||
|
|
|
|||
|
|
CREATE TEMPORARY TABLE IF NOT EXISTS seed_track (
|
|||
|
|
rn INT PRIMARY KEY,
|
|||
|
|
track VARCHAR(64),
|
|||
|
|
keywords VARCHAR(255)
|
|||
|
|
) ENGINE=InnoDB;
|
|||
|
|
TRUNCATE TABLE seed_track;
|
|||
|
|
INSERT INTO seed_track(rn,track,keywords) VALUES
|
|||
|
|
(0,'Java后端','Java, Spring Boot, MySQL, Redis, 微服务, MQ'),
|
|||
|
|
(1,'前端工程化','Vue/React, TypeScript, Webpack/Vite, 性能优化'),
|
|||
|
|
(2,'数据分析','SQL, Python, 可视化, 指标体系, A/B Test'),
|
|||
|
|
(3,'测试开发','自动化测试, Java/Python, CI/CD, 性能测试'),
|
|||
|
|
(4,'算法/推荐','Python, 机器学习, 特征工程, 推荐/排序, TensorFlow'),
|
|||
|
|
(5,'产品经理','需求分析, PRD, 数据驱动, 版本迭代, 协作推进'),
|
|||
|
|
(6,'运维/DevOps','Linux, Docker, Kubernetes, 监控告警, 自动化'),
|
|||
|
|
(7,'Android','Kotlin/Java, Jetpack, 性能优化, 组件化'),
|
|||
|
|
(8,'iOS','Swift, UIKit/SwiftUI, 性能优化, 组件化'),
|
|||
|
|
(9,'安全工程','Web安全, 渗透测试, 风控, 安全审计');
|
|||
|
|
|
|||
|
|
SET @sn_cnt := (SELECT COUNT(*) FROM seed_surname);
|
|||
|
|
SET @gn_cnt := (SELECT COUNT(*) FROM seed_given);
|
|||
|
|
SET @ct_cnt := (SELECT COUNT(*) FROM seed_city);
|
|||
|
|
SET @tk_cnt := (SELECT COUNT(*) FROM seed_track);
|
|||
|
|
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
-- 3) 公司(20家,真实感:行业/规模/官网/地址/介绍)
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
CREATE TEMPORARY TABLE IF NOT EXISTS seed_company (
|
|||
|
|
rn INT PRIMARY KEY,
|
|||
|
|
name VARCHAR(128),
|
|||
|
|
industry VARCHAR(128),
|
|||
|
|
size_range VARCHAR(64),
|
|||
|
|
website VARCHAR(255),
|
|||
|
|
city_rn INT,
|
|||
|
|
intro TEXT
|
|||
|
|
) ENGINE=InnoDB;
|
|||
|
|
TRUNCATE TABLE seed_company;
|
|||
|
|
|
|||
|
|
INSERT INTO seed_company(rn,name,industry,size_range,website,city_rn,intro) VALUES
|
|||
|
|
(0,'星环数据','企业服务','500-2000','https://www.transwarp.cn',1,'面向企业的数据平台与数智化解决方案,覆盖数据治理、湖仓一体与实时分析,强调工程落地与长期交付。'),
|
|||
|
|
(1,'云帆科技','互联网','200-500','https://www.yunfan-tech.example',3,'聚焦电商与内容平台的中台能力建设,提供高可用服务、实时计算与增长工具,注重用户体验与效率。'),
|
|||
|
|
(2,'极光智联','物联网','500-2000','https://www.jiguang-iot.example',2,'服务智慧城市与工业互联网,打造设备接入、边缘计算与安全运维体系,项目覆盖多地政企客户。'),
|
|||
|
|
(3,'海豚互娱','游戏','1000+','https://www.haitun-game.example',1,'移动游戏与互动娱乐公司,重视玩法创新与数据驱动运营,持续投入研发与美术制作管线。'),
|
|||
|
|
(4,'清风医疗','医疗健康','200-500','https://www.qingfeng-med.example',0,'医疗信息化与互联网医院解决方案提供商,围绕诊疗流程、运营管理与数据合规持续迭代。'),
|
|||
|
|
(5,'墨迹物流','物流供应链','500-2000','https://www.moji-logistics.example',18,'专注仓配一体与配送调度优化,建设订单、库存、路径规划与司机端系统,强调稳定与成本效率。'),
|
|||
|
|
(6,'智图视觉','人工智能','200-500','https://www.zhitu-vision.example',8,'计算机视觉与多模态应用团队,落地安防、质检与内容理解,强调算法工程化与模型迭代效率。'),
|
|||
|
|
(7,'蓝鲸金融科技','金融科技','2000-10000','https://www.lanjin-fintech.example',6,'面向银行/保险的数字化产品与风控系统,重视审计合规、可追溯与高可用架构。'),
|
|||
|
|
(8,'微光教育','教育','200-500','https://www.weiguang-edu.example',12,'提供在线学习与教务管理平台,关注课程体验、学习数据与教学运营工具,持续快速迭代。'),
|
|||
|
|
(9,'风筝出行','出行','500-2000','https://www.fengzheng-mobility.example',4,'覆盖打车与同城出行业务,建设订单/计价/派单系统与司机生态,强调实时性与风控。'),
|
|||
|
|
(10,'北斗云安','安全','200-500','https://www.beidou-sec.example',0,'企业安全与风控平台,覆盖账号安全、漏洞治理与安全运营,强调攻防思维与工程落地。'),
|
|||
|
|
(11,'青岚内容','内容社区','500-2000','https://www.qinglan-content.example',7,'内容分发与社区平台,重视推荐、审核与增长实验体系,追求体验与效率的平衡。'),
|
|||
|
|
(12,'橙子零售','新零售','200-500','https://www.chengzi-retail.example',5,'围绕门店数字化、会员体系与供应链协同,构建全渠道交易与运营平台。'),
|
|||
|
|
(13,'图灵硬件','智能硬件','200-500','https://www.turing-hw.example',2,'硬件与软件协同研发团队,覆盖设备固件、App与云端平台,强调质量体系与交付节奏。'),
|
|||
|
|
(14,'森海能源','能源','500-2000','https://www.senhai-energy.example',10,'能源企业数字化团队,建设生产运营系统与数据平台,重视稳定性与安全规范。'),
|
|||
|
|
(15,'远望制造','智能制造','2000-10000','https://www.yuanwang-mfg.example',15,'面向工厂的MES/APS与数据采集平台,强调现场落地与跨部门协作能力。'),
|
|||
|
|
(16,'澜星文旅','文旅','200-500','https://www.lanxing-travel.example',14,'文旅平台与票务系统,覆盖商家入驻、履约与客服体系,注重体验与稳定运营。'),
|
|||
|
|
(17,'沐风房产科技','房产','500-2000','https://www.mufang-prop.example',9,'房产交易与经纪人工具平台,重视搜索推荐、交易安全与服务质量。'),
|
|||
|
|
(18,'鲸准招聘','企业服务','200-500','https://www.jingzhun-hr.example',17,'招聘与组织管理SaaS,覆盖简历、面试、入职与组织协作,强调易用性与数据闭环。'),
|
|||
|
|
(19,'旭日科研','科研服务','50-200','https://www.xuri-research.example',13,'科研数据管理与实验流程平台,服务高校与科研机构,注重权限、合规与可追溯。');
|
|||
|
|
|
|||
|
|
-- 插入公司(name 唯一:uk_company_name)
|
|||
|
|
INSERT INTO company(name, industry, size_range, website, address, intro, status, created_at, updated_at, is_deleted)
|
|||
|
|
SELECT sc.name,
|
|||
|
|
sc.industry,
|
|||
|
|
sc.size_range,
|
|||
|
|
sc.website,
|
|||
|
|
CONCAT(ct.city,'·',ct.district),
|
|||
|
|
CONCAT(sc.intro, '(', @SEED_TAG, ')'),
|
|||
|
|
1,
|
|||
|
|
DATE_SUB(NOW(), INTERVAL (100 + sc.rn*3) DAY),
|
|||
|
|
DATE_SUB(NOW(), INTERVAL (10 + sc.rn) DAY),
|
|||
|
|
0
|
|||
|
|
FROM seed_company sc
|
|||
|
|
JOIN seed_city ct ON ct.rn = sc.city_rn
|
|||
|
|
ON DUPLICATE KEY UPDATE updated_at = updated_at;
|
|||
|
|
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
-- 4) Boss 用户(40个,均匀绑定公司;不硬编码 company_id)
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
INSERT IGNORE INTO `user`(
|
|||
|
|
user_account, password, phone, email, username,
|
|||
|
|
user_role, company_id, status, profile, created_at, updated_at, is_deleted
|
|||
|
|
)
|
|||
|
|
SELECT
|
|||
|
|
CONCAT('boss_seed_', LPAD(s.n,3,'0')) AS user_account,
|
|||
|
|
'9e7b74dc1da0327f18e3a7861929b9bc' AS password,
|
|||
|
|
CONCAT('13', LPAD(800000000 + s.n, 9, '0')) AS phone,
|
|||
|
|
CONCAT('boss', LPAD(s.n,3,'0'), '@corp-mail.cn') AS email,
|
|||
|
|
CONCAT(sn.v, gn.v) AS username,
|
|||
|
|
'boss' AS user_role,
|
|||
|
|
NULL AS company_id,
|
|||
|
|
1 AS status,
|
|||
|
|
CONCAT(
|
|||
|
|
'负责团队招聘与面试评估,关注候选人基础功与工程习惯;',
|
|||
|
|
'日常会参与需求评审与技术方案讨论,强调沟通效率与结果交付;',
|
|||
|
|
'偏好有项目闭环经验、能快速定位问题并持续学习的同学。 ',
|
|||
|
|
@SEED_TAG
|
|||
|
|
) AS profile,
|
|||
|
|
DATE_SUB(NOW(), INTERVAL (500 + (s.n % 180)) DAY) AS created_at,
|
|||
|
|
DATE_SUB(NOW(), INTERVAL (60 + (s.n % 30)) DAY) AS updated_at,
|
|||
|
|
0 AS is_deleted
|
|||
|
|
FROM seed_seq s
|
|||
|
|
JOIN seed_surname sn ON sn.rn = MOD(s.n, @sn_cnt)
|
|||
|
|
JOIN seed_given gn ON gn.rn = MOD(s.n*7, @gn_cnt)
|
|||
|
|
WHERE s.n <= 40;
|
|||
|
|
|
|||
|
|
-- 绑定 Boss 到公司(通过 company.name,自然键)
|
|||
|
|
UPDATE `user` u
|
|||
|
|
JOIN (
|
|||
|
|
SELECT
|
|||
|
|
CONCAT('boss_seed_', LPAD(s.n,3,'0')) AS boss_account,
|
|||
|
|
sc.name AS company_name
|
|||
|
|
FROM seed_seq s
|
|||
|
|
JOIN seed_company sc ON sc.rn = MOD(((s.n-1) DIV 2), 20)
|
|||
|
|
WHERE s.n <= 40
|
|||
|
|
) bm ON bm.boss_account = u.user_account
|
|||
|
|
JOIN company c ON c.name = bm.company_name
|
|||
|
|
SET u.company_id = c.id
|
|||
|
|
WHERE u.user_role='boss' AND (u.company_id IS NULL OR u.company_id=0);
|
|||
|
|
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
-- 5) 岗位模板(10类) -> 每家公司 10 个岗位,共 200
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
CREATE TEMPORARY TABLE IF NOT EXISTS seed_job_tpl(
|
|||
|
|
rn INT PRIMARY KEY,
|
|||
|
|
title VARCHAR(128),
|
|||
|
|
job_type VARCHAR(64),
|
|||
|
|
salary_min INT,
|
|||
|
|
salary_max INT,
|
|||
|
|
job_desc TEXT,
|
|||
|
|
req TEXT
|
|||
|
|
) ENGINE=InnoDB;
|
|||
|
|
TRUNCATE TABLE seed_job_tpl;
|
|||
|
|
|
|||
|
|
INSERT INTO seed_job_tpl(rn,title,job_type,salary_min,salary_max,job_desc,req) VALUES
|
|||
|
|
(0,'Java后端工程师','全职',20000,42000,
|
|||
|
|
'你将参与核心业务服务的设计与开发,负责接口设计、数据建模与性能优化;与产品、测试协作推进版本交付,保障线上稳定性与可观测性;有机会参与中台建设与治理体系落地。',
|
|||
|
|
'熟悉Java与常用框架(Spring Boot等),理解HTTP/SQL基础;具备MySQL索引/事务/慢SQL优化经验;了解Redis/消息队列/微服务基本理念,能写出可维护的代码并进行单元测试。'),
|
|||
|
|
(1,'前端工程师(Web)','全职',18000,38000,
|
|||
|
|
'负责Web端功能迭代与工程化建设,推进组件化、性能优化与可用性提升;与后端联调并落地埋点、监控与灰度发布;参与页面体验优化与跨端适配。',
|
|||
|
|
'熟悉Vue/React任一技术栈,掌握TypeScript与常见构建工具;理解浏览器渲染与性能指标,有定位线上问题经验;具备良好代码规范与组件设计能力,能编写单元测试更佳。'),
|
|||
|
|
(2,'数据分析师','全职',16000,32000,
|
|||
|
|
'围绕业务目标搭建指标体系与数据看板,进行专题分析并输出可执行建议;参与A/B实验设计、效果评估与用户行为洞察;与产品/运营协作推动策略落地与复盘。',
|
|||
|
|
'熟练使用SQL进行数据抽取与建模,掌握Python进行分析与可视化;理解常见统计概念与实验方法;具备结构化表达与沟通能力,能够将结论转化为行动方案。'),
|
|||
|
|
(3,'测试开发工程师','全职',16000,30000,
|
|||
|
|
'建设自动化测试与质量平台,完善用例体系、回归流程与持续集成;负责关键链路的稳定性保障、性能压测与缺陷分析;推动研发流程优化与质量度量。',
|
|||
|
|
'熟悉Java/Python任一语言,了解常见测试框架与CI/CD;理解接口/性能/安全基础测试方法;具备问题定位能力与良好沟通推动能力,能持续输出可复用工具。'),
|
|||
|
|
(4,'算法工程师(推荐/排序)','全职',30000,60000,
|
|||
|
|
'参与推荐/搜索相关模型训练与效果迭代,负责特征工程、样本构建与线上服务部署;与业务一起定义指标并进行实验验证;推动模型工程化与成本优化。',
|
|||
|
|
'熟悉机器学习基础与常用算法,掌握Python与至少一种深度学习框架;了解特征工程、评估指标与线上A/B;有大规模数据处理或模型线上化经验更佳。'),
|
|||
|
|
(5,'产品经理','全职',18000,35000,
|
|||
|
|
'负责需求调研、PRD撰写与版本规划,推动研发/设计/测试协作交付;跟踪数据与用户反馈,持续迭代产品体验;参与跨部门沟通协调与目标拆解。',
|
|||
|
|
'具备清晰的结构化思维与沟通能力,能把复杂问题拆解为可执行需求;理解数据分析与基本技术概念;有互联网产品经验或B端协作经验更佳。'),
|
|||
|
|
(6,'DevOps工程师','全职',20000,40000,
|
|||
|
|
'负责服务部署、监控告警与自动化运维,完善发布流程与故障应急预案;推进容器化与基础设施规范化;提升系统可用性、可观测性与发布效率。',
|
|||
|
|
'熟悉Linux与网络基础,掌握Docker/K8s或相关工具;了解监控日志体系(Prometheus/ELK等);具备脚本能力与故障排查经验,安全意识强。'),
|
|||
|
|
(7,'运营专员','全职',12000,22000,
|
|||
|
|
'负责内容/活动/社群运营,制定节奏并跟踪效果;参与用户增长与留存策略设计,沉淀运营方法论;与产品协作推动功能优化与活动落地。',
|
|||
|
|
'具备较强的数据敏感度与执行力,能独立推进活动方案与复盘;熟悉常见运营工具与渠道;沟通协作好,能在不确定中快速迭代。'),
|
|||
|
|
(8,'后端实习生(Java)','实习',3000,8000,
|
|||
|
|
'参与业务模块开发与Bug修复,学习工程规范与协作流程;在导师指导下完成接口开发、单测与文档;有机会参与小型性能优化与工具建设。',
|
|||
|
|
'计算机相关专业优先,具备Java/SQL基础;能使用Git并理解基本开发流程;学习能力强,愿意写文档和单元测试,有项目/竞赛经历更佳。'),
|
|||
|
|
(9,'前端实习生(Web)','实习',3000,8000,
|
|||
|
|
'参与页面功能开发与样式优化,完善组件与工程化配置;在导师指导下完成需求拆解与联调;沉淀可复用的组件/工具。',
|
|||
|
|
'具备HTML/CSS/JavaScript基础,了解Vue/React任一框架;愿意在代码规范与工程化上投入;具备沟通协作意识与持续学习能力。');
|
|||
|
|
|
|||
|
|
-- 插入岗位(非唯一表:用 NOT EXISTS 防重复)
|
|||
|
|
INSERT INTO job_posting(
|
|||
|
|
boss_id, company_id, title, location, job_type,
|
|||
|
|
salary_min, salary_max, description, requirement,
|
|||
|
|
status, publish_at, created_at, updated_at, is_deleted
|
|||
|
|
)
|
|||
|
|
SELECT
|
|||
|
|
(SELECT ub.id
|
|||
|
|
FROM `user` ub
|
|||
|
|
WHERE ub.user_role='boss' AND ub.company_id=c.id
|
|||
|
|
ORDER BY ub.id
|
|||
|
|
LIMIT 1) AS boss_id,
|
|||
|
|
c.id AS company_id,
|
|||
|
|
jt.title,
|
|||
|
|
ct.city AS location,
|
|||
|
|
jt.job_type,
|
|||
|
|
jt.salary_min,
|
|||
|
|
jt.salary_max,
|
|||
|
|
CONCAT(
|
|||
|
|
jt.job_desc,
|
|||
|
|
'\n\n福利:五险一金、年度体检、弹性办公、技术分享、带薪年假;',
|
|||
|
|
'\n团队:代码评审+文档规范,强调稳定性与可维护性。',
|
|||
|
|
'\n(', @SEED_TAG, '|COMPANY=', c.name, '|TPL=', LPAD(jt.rn+1,2,'0'), ')'
|
|||
|
|
) AS description,
|
|||
|
|
CONCAT(
|
|||
|
|
jt.req,
|
|||
|
|
'\n\n加分项:开源贡献/竞赛经历/英文技术文档能力/具备从0到1的项目闭环。'
|
|||
|
|
) AS requirement,
|
|||
|
|
1 AS status,
|
|||
|
|
DATE_SUB(NOW(), INTERVAL (MOD((sc.rn*7 + jt.rn*3), 56) + 5) DAY) AS publish_at,
|
|||
|
|
DATE_SUB(NOW(), INTERVAL (MOD((sc.rn*7 + jt.rn*3), 56) + 5) DAY) AS created_at,
|
|||
|
|
DATE_ADD(
|
|||
|
|
DATE_SUB(NOW(), INTERVAL (MOD((sc.rn*7 + jt.rn*3), 56) + 5) DAY),
|
|||
|
|
INTERVAL MOD(jt.rn, 5) DAY
|
|||
|
|
) AS updated_at,
|
|||
|
|
0 AS is_deleted
|
|||
|
|
FROM company c
|
|||
|
|
JOIN seed_company sc ON sc.name = c.name
|
|||
|
|
JOIN seed_city ct ON ct.rn = sc.city_rn
|
|||
|
|
JOIN seed_job_tpl jt
|
|||
|
|
WHERE NOT EXISTS (
|
|||
|
|
SELECT 1
|
|||
|
|
FROM job_posting j
|
|||
|
|
WHERE j.company_id = c.id
|
|||
|
|
AND j.title = jt.title
|
|||
|
|
AND j.location = ct.city
|
|||
|
|
AND j.job_type = jt.job_type
|
|||
|
|
AND j.salary_min = jt.salary_min
|
|||
|
|
AND j.salary_max = jt.salary_max
|
|||
|
|
AND j.is_deleted = 0
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
-- 6) 求职者用户(1000个):bulkuser_0001 ~ bulkuser_1000
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
INSERT IGNORE INTO `user`(
|
|||
|
|
user_account, password, phone, email, username,
|
|||
|
|
user_role, company_id, status, profile, created_at, updated_at, is_deleted
|
|||
|
|
)
|
|||
|
|
SELECT
|
|||
|
|
CONCAT('bulkuser_', LPAD(s.n,4,'0')) AS user_account,
|
|||
|
|
'9e7b74dc1da0327f18e3a7861929b9bc' AS password,
|
|||
|
|
CONCAT('13', LPAD(100000000 + s.n, 9, '0')) AS phone,
|
|||
|
|
CONCAT('u', LPAD(s.n,4,'0'), '@mailbox.cn') AS email,
|
|||
|
|
CONCAT(sn.v, gn.v) AS username,
|
|||
|
|
'user' AS user_role,
|
|||
|
|
NULL AS company_id,
|
|||
|
|
1 AS status,
|
|||
|
|
CONCAT(
|
|||
|
|
'(', @SEED_TAG, ')',
|
|||
|
|
' 求职意向:', tk.track, ';',
|
|||
|
|
'技术关键词:', tk.keywords, ';',
|
|||
|
|
'期望城市:', ct.city, ';',
|
|||
|
|
'经验:', CASE
|
|||
|
|
WHEN MOD(s.n,10)=0 THEN '应届/实习经历'
|
|||
|
|
WHEN MOD(s.n,10)=1 THEN '1-3年'
|
|||
|
|
WHEN MOD(s.n,10)=2 THEN '3-5年'
|
|||
|
|
ELSE '2-4年'
|
|||
|
|
END, ';',
|
|||
|
|
'个人特点:学习快、沟通清晰、能把问题拆解并推进到落地,重视代码规范与复盘。 ',
|
|||
|
|
@SEED_TAG
|
|||
|
|
) AS profile,
|
|||
|
|
DATE_SUB(NOW(), INTERVAL (120 + MOD(s.n, 720)) DAY) AS created_at,
|
|||
|
|
DATE_SUB(NOW(), INTERVAL (5 + MOD(s.n, 60)) DAY) AS updated_at,
|
|||
|
|
0 AS is_deleted
|
|||
|
|
FROM seed_seq s
|
|||
|
|
JOIN seed_surname sn ON sn.rn = MOD(s.n*3, @sn_cnt)
|
|||
|
|
JOIN seed_given gn ON gn.rn = MOD(s.n*11, @gn_cnt)
|
|||
|
|
JOIN seed_track tk ON tk.rn = MOD(s.n, @tk_cnt)
|
|||
|
|
JOIN seed_city ct ON ct.rn = MOD(s.n*5, @ct_cnt);
|
|||
|
|
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
-- 7) 简历:每个求职者至少 1 份默认简历(summary>=50, content>=200)
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
INSERT INTO resume(
|
|||
|
|
user_id, resume_title, is_default, summary, content, attachment_url,
|
|||
|
|
created_at, updated_at, is_deleted
|
|||
|
|
)
|
|||
|
|
SELECT
|
|||
|
|
u.id,
|
|||
|
|
CONCAT(u.username, ' - 默认简历') AS resume_title,
|
|||
|
|
1 AS is_default,
|
|||
|
|
CONCAT(
|
|||
|
|
'候选人概述:', u.username, ',目标方向为', tk.track,
|
|||
|
|
',具备', CASE WHEN MOD(u.id,4)=0 THEN '扎实的基础与良好工程意识'
|
|||
|
|
WHEN MOD(u.id,4)=1 THEN '较强的数据分析与问题拆解能力'
|
|||
|
|
WHEN MOD(u.id,4)=2 THEN '前后端协作经验与交付意识'
|
|||
|
|
ELSE '快速学习与持续复盘习惯' END,
|
|||
|
|
';期望在', ct.city, '长期发展,重视团队协作与技术成长。 ', @SEED_TAG
|
|||
|
|
) AS summary,
|
|||
|
|
CONCAT(
|
|||
|
|
'教育背景:\n',
|
|||
|
|
'- 本科:计算机/软件/信息相关专业(2019-2023),核心课程:数据结构、数据库、操作系统、计算机网络。\n\n',
|
|||
|
|
'工作/实习经历:\n',
|
|||
|
|
'- 参与业务需求评审、接口对齐与版本迭代,能在不确定中快速定位关键问题并推动落地。\n',
|
|||
|
|
'- 熟悉基础开发流程:需求->开发->自测->联调->灰度->上线->复盘,重视文档与可维护性。\n\n',
|
|||
|
|
'项目经历:\n',
|
|||
|
|
'- 项目A:订单/内容/会员模块(负责接口设计、数据建模、缓存与慢SQL优化;支持高峰期稳定运行)。\n',
|
|||
|
|
'- 项目B:数据分析/指标看板(使用SQL+Python完成指标体系搭建与自动化报表,支持业务决策)。\n',
|
|||
|
|
'- 项目C:质量与自动化(补齐单测、接口自动化、CI流水线,提升回归效率与稳定性)。\n\n',
|
|||
|
|
'技能清单:\n',
|
|||
|
|
'- ', tk.keywords, ';\n',
|
|||
|
|
'- 通用能力:沟通协作、问题定位、复盘总结、文档表达。\n\n',
|
|||
|
|
'自我评价:\n',
|
|||
|
|
'对结果负责,愿意把事情做“闭环”;遇到问题先定位根因再优化方案;能接受节奏与压力,持续学习新技术并落地到项目中。\n',
|
|||
|
|
'(', @SEED_TAG, ')'
|
|||
|
|
) AS content,
|
|||
|
|
CASE
|
|||
|
|
WHEN MOD(u.id,10)=0 THEN CONCAT('https://cdn.example.com/resume/', u.user_account, '.pdf')
|
|||
|
|
ELSE NULL
|
|||
|
|
END AS attachment_url,
|
|||
|
|
u.created_at AS created_at,
|
|||
|
|
u.updated_at AS updated_at,
|
|||
|
|
0 AS is_deleted
|
|||
|
|
FROM `user` u
|
|||
|
|
JOIN seed_track tk ON tk.rn = MOD(u.id, @tk_cnt)
|
|||
|
|
JOIN seed_city ct ON ct.rn = MOD(u.id*3, @ct_cnt)
|
|||
|
|
WHERE u.user_role='user'
|
|||
|
|
AND u.user_account LIKE 'bulkuser_%'
|
|||
|
|
AND NOT EXISTS (
|
|||
|
|
SELECT 1 FROM resume r
|
|||
|
|
WHERE r.user_id = u.id AND r.is_default=1 AND r.is_deleted=0
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- 额外简历(约 30% 用户多一份非默认)
|
|||
|
|
INSERT INTO resume(
|
|||
|
|
user_id, resume_title, is_default, summary, content, attachment_url,
|
|||
|
|
created_at, updated_at, is_deleted
|
|||
|
|
)
|
|||
|
|
SELECT
|
|||
|
|
u.id,
|
|||
|
|
CONCAT(u.username, ' - 投递版简历') AS resume_title,
|
|||
|
|
0 AS is_default,
|
|||
|
|
CONCAT('投递版摘要:突出与岗位匹配的关键经验与项目闭环,强调可量化结果与协作推进能力。 ', @SEED_TAG) AS summary,
|
|||
|
|
CONCAT(
|
|||
|
|
'核心亮点:\n',
|
|||
|
|
'- 负责过关键模块交付,能独立完成需求拆解、接口设计与联调上线。\n',
|
|||
|
|
'- 有性能与稳定性优化经验:慢SQL分析、缓存策略、监控告警与故障复盘。\n',
|
|||
|
|
'- 注重工程质量:代码规范、单元测试、文档与可维护性。\n\n',
|
|||
|
|
'项目补充:\n',
|
|||
|
|
'- 需求背景、方案选择、数据指标与上线效果复盘,能用数据证明价值。\n',
|
|||
|
|
'- 跨团队沟通:产品/测试/运营协作推进,能对齐目标并落地执行。\n',
|
|||
|
|
'(', @SEED_TAG, ')'
|
|||
|
|
) AS content,
|
|||
|
|
NULL AS attachment_url,
|
|||
|
|
DATE_SUB(u.created_at, INTERVAL 5 DAY) AS created_at,
|
|||
|
|
u.created_at AS updated_at,
|
|||
|
|
0 AS is_deleted
|
|||
|
|
FROM `user` u
|
|||
|
|
WHERE u.user_role='user'
|
|||
|
|
AND u.user_account LIKE 'bulkuser_%'
|
|||
|
|
AND MOD(u.id, 10) IN (1,2,3)
|
|||
|
|
AND NOT EXISTS (
|
|||
|
|
SELECT 1 FROM resume r
|
|||
|
|
WHERE r.user_id = u.id AND r.is_default=0 AND r.is_deleted=0
|
|||
|
|
AND r.resume_title LIKE '%投递版%'
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
-- 8) 投递:1000 条(每个 bulkuser_0001..1000 各投 1 个岗位)
|
|||
|
|
-- - boss_id 必须等于岗位的 boss_id
|
|||
|
|
-- - resume_id 必须属于该 user
|
|||
|
|
-- - applied_at:近 30~45 天分布;updated_at >= applied_at
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
CREATE TEMPORARY TABLE IF NOT EXISTS job_index (
|
|||
|
|
id BIGINT UNSIGNED NOT NULL PRIMARY KEY,
|
|||
|
|
rn INT NOT NULL
|
|||
|
|
) ENGINE=MEMORY;
|
|||
|
|
TRUNCATE TABLE job_index;
|
|||
|
|
|
|||
|
|
SET @rn := -1;
|
|||
|
|
INSERT INTO job_index(id, rn)
|
|||
|
|
SELECT id, (@rn := @rn + 1) AS rn
|
|||
|
|
FROM job_posting
|
|||
|
|
WHERE is_deleted=0
|
|||
|
|
ORDER BY id;
|
|||
|
|
|
|||
|
|
SET @job_cnt := (SELECT COUNT(*) FROM job_index);
|
|||
|
|
|
|||
|
|
-- 若岗位为空则不插入投递(保护)
|
|||
|
|
INSERT IGNORE INTO application(
|
|||
|
|
user_id, resume_id, job_id, boss_id, status, applied_at, updated_at, is_deleted
|
|||
|
|
)
|
|||
|
|
SELECT
|
|||
|
|
u.id AS user_id,
|
|||
|
|
(SELECT r.id
|
|||
|
|
FROM resume r
|
|||
|
|
WHERE r.user_id=u.id AND r.is_deleted=0
|
|||
|
|
ORDER BY r.is_default DESC, r.id ASC
|
|||
|
|
LIMIT 1) AS resume_id,
|
|||
|
|
j.id AS job_id,
|
|||
|
|
j.boss_id AS boss_id,
|
|||
|
|
CASE
|
|||
|
|
WHEN MOD(s.n, 20)=0 THEN 1 -- 撤回
|
|||
|
|
WHEN MOD(s.n, 17)=0 THEN 2 -- 过期
|
|||
|
|
WHEN MOD(s.n, 9)=0 THEN 3 -- 面试中
|
|||
|
|
WHEN MOD(s.n, 33)=0 THEN 4 -- 已录用
|
|||
|
|
WHEN MOD(s.n, 25)=0 THEN 5 -- 已拒绝
|
|||
|
|
ELSE 0 -- 已投递
|
|||
|
|
END AS status,
|
|||
|
|
DATE_ADD(
|
|||
|
|
DATE_SUB(NOW(), INTERVAL (MOD(s.n*7,16) + 30) DAY),
|
|||
|
|
INTERVAL MOD(s.n*13, 600) MINUTE
|
|||
|
|
) AS applied_at,
|
|||
|
|
DATE_ADD(
|
|||
|
|
DATE_ADD(
|
|||
|
|
DATE_SUB(NOW(), INTERVAL (MOD(s.n*7,16) + 30) DAY),
|
|||
|
|
INTERVAL MOD(s.n*13, 600) MINUTE
|
|||
|
|
),
|
|||
|
|
INTERVAL MOD(s.n, 6) DAY
|
|||
|
|
) AS updated_at,
|
|||
|
|
0 AS is_deleted
|
|||
|
|
FROM seed_seq s
|
|||
|
|
JOIN `user` u
|
|||
|
|
ON u.user_account = CONCAT('bulkuser_', LPAD(s.n,4,'0'))
|
|||
|
|
AND u.user_account LIKE 'bulkuser_%'
|
|||
|
|
JOIN job_index ji
|
|||
|
|
ON ji.rn = MOD(s.n-1, @job_cnt)
|
|||
|
|
JOIN job_posting j
|
|||
|
|
ON j.id = ji.id
|
|||
|
|
WHERE @job_cnt > 0;
|
|||
|
|
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
-- 9) Boss 处理:对约 80% 的投递生成决策(每投递最多 1 条)
|
|||
|
|
-- - decided_at 在 applied_at 后 0~7 天
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
INSERT INTO boss_application_decision(
|
|||
|
|
application_id, boss_id, decision, stage, note, decided_at, updated_at, is_deleted
|
|||
|
|
)
|
|||
|
|
SELECT
|
|||
|
|
a.id AS application_id,
|
|||
|
|
a.boss_id,
|
|||
|
|
CASE
|
|||
|
|
WHEN a.status IN (5) THEN 2 -- 已拒绝
|
|||
|
|
WHEN a.status IN (1,2) THEN 3 -- 撤回/过期 -> 待定
|
|||
|
|
WHEN MOD(a.id, 9)=0 THEN 3 -- 少量待定
|
|||
|
|
ELSE 1 -- 进入流程
|
|||
|
|
END AS decision,
|
|||
|
|
CASE
|
|||
|
|
WHEN a.status=4 THEN 3 -- Offer
|
|||
|
|
WHEN a.status=3 THEN 2 -- 面试
|
|||
|
|
WHEN MOD(a.id, 6)=0 THEN 1 -- 邀面
|
|||
|
|
WHEN MOD(a.id, 5)=0 THEN 0 -- 筛选
|
|||
|
|
ELSE 1
|
|||
|
|
END AS stage,
|
|||
|
|
CONCAT(
|
|||
|
|
'处理备注:',
|
|||
|
|
CASE
|
|||
|
|
WHEN a.status=5 THEN '匹配度不足,建议后续补齐项目深度与量化结果。'
|
|||
|
|
WHEN a.status=4 THEN '综合表现优秀,进入Offer流程并沟通入职时间。'
|
|||
|
|
WHEN a.status=3 THEN '安排面试流程,重点考察基础、项目细节与协作能力。'
|
|||
|
|
WHEN a.status IN (1,2) THEN '候选人状态变化,暂挂起并记录。'
|
|||
|
|
ELSE '初筛通过,进入下一阶段跟进。'
|
|||
|
|
END,
|
|||
|
|
'(', @SEED_TAG, ')'
|
|||
|
|
) AS note,
|
|||
|
|
DATE_ADD(a.applied_at, INTERVAL MOD(a.id, 8) DAY) AS decided_at,
|
|||
|
|
DATE_ADD(a.applied_at, INTERVAL MOD(a.id, 8) DAY) AS updated_at,
|
|||
|
|
0 AS is_deleted
|
|||
|
|
FROM application a
|
|||
|
|
JOIN `user` u ON u.id = a.user_id AND u.user_account LIKE 'bulkuser_%'
|
|||
|
|
WHERE MOD(a.id, 5) <> 0 -- 约 80% 生成决策
|
|||
|
|
AND NOT EXISTS (
|
|||
|
|
SELECT 1 FROM boss_application_decision d
|
|||
|
|
WHERE d.application_id = a.id
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
-- 10) 面试安排:对部分“邀面/面试阶段”的投递生成面试(未来 2~10 天)
|
|||
|
|
-- ----------------------------------------------------------
|
|||
|
|
INSERT INTO interview(
|
|||
|
|
application_id, boss_id, user_id,
|
|||
|
|
interview_time, mode, location, status, note,
|
|||
|
|
created_at, updated_at, is_deleted
|
|||
|
|
)
|
|||
|
|
SELECT
|
|||
|
|
a.id AS application_id,
|
|||
|
|
a.boss_id,
|
|||
|
|
a.user_id,
|
|||
|
|
DATE_ADD(
|
|||
|
|
DATE_ADD(NOW(), INTERVAL (MOD(a.id, 9) + 2) DAY),
|
|||
|
|
INTERVAL (MOD(a.id, 8) + 9) HOUR
|
|||
|
|
) AS interview_time,
|
|||
|
|
CASE WHEN MOD(a.id, 3)=0 THEN 1 ELSE 0 END AS mode,
|
|||
|
|
CASE
|
|||
|
|
WHEN MOD(a.id, 3)=0 THEN CONCAT(c.address, ' ', '(', c.name, ')')
|
|||
|
|
ELSE CONCAT('https://meeting.example.com/', a.id, '?pwd=', LPAD(MOD(a.id*97,10000),4,'0'))
|
|||
|
|
END AS location,
|
|||
|
|
CASE WHEN MOD(a.id, 4)=0 THEN 0 ELSE 1 END AS status,
|
|||
|
|
CONCAT(
|
|||
|
|
'面试说明:请准备自我介绍与最近项目的架构、难点与取舍;',
|
|||
|
|
'线上请提前 10 分钟入会并测试网络设备。 ',
|
|||
|
|
'(', @SEED_TAG, ')'
|
|||
|
|
) AS note,
|
|||
|
|
NOW() AS created_at,
|
|||
|
|
NOW() AS updated_at,
|
|||
|
|
0 AS is_deleted
|
|||
|
|
FROM boss_application_decision d
|
|||
|
|
JOIN application a ON a.id = d.application_id
|
|||
|
|
JOIN job_posting j ON j.id = a.job_id
|
|||
|
|
JOIN company c ON c.id = j.company_id
|
|||
|
|
JOIN `user` u ON u.id = a.user_id AND u.user_account LIKE 'bulkuser_%'
|
|||
|
|
WHERE d.decision = 1
|
|||
|
|
AND d.stage >= 1
|
|||
|
|
AND MOD(a.id, 2)=0 -- 约 50% 生成面试
|
|||
|
|
AND NOT EXISTS (
|
|||
|
|
SELECT 1 FROM interview i
|
|||
|
|
WHERE i.application_id = a.id AND i.is_deleted=0
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
COMMIT;
|
|||
|
|
|
|||
|
|
-- 可选:快速检查(执行后你也可以手动跑)
|
|||
|
|
-- SELECT COUNT(*) FROM `user` WHERE profile LIKE '%SEED_TAG:bulk_real_v1%';
|
|||
|
|
-- SELECT COUNT(*) FROM company WHERE intro LIKE '%SEED_TAG:bulk_real_v1%';
|
|||
|
|
-- SELECT COUNT(*) FROM job_posting WHERE description LIKE '%SEED_TAG:bulk_real_v1%';
|
|||
|
|
-- SELECT COUNT(*) FROM resume WHERE content LIKE '%SEED_TAG:bulk_real_v1%';
|
|||
|
|
-- SELECT COUNT(*) FROM application a JOIN `user` u ON u.id=a.user_id WHERE u.profile LIKE '%SEED_TAG:bulk_real_v1%';
|
|||
|
|
-- SELECT COUNT(*) FROM boss_application_decision d JOIN application a ON a.id=d.application_id JOIN `user` u ON u.id=a.user_id WHERE u.profile LIKE '%SEED_TAG:bulk_real_v1%';
|
|||
|
|
-- SELECT COUNT(*) FROM interview i JOIN application a ON a.id=i.application_id JOIN `user` u ON u.id=a.user_id WHERE u.profile LIKE '%SEED_TAG:bulk_real_v1%';
|