|
|
@@ -0,0 +1,212 @@
|
|
|
+-- =====================================================
|
|
|
+-- 员工素养提升计划表
|
|
|
+-- 功能说明:
|
|
|
+-- 1. 办公室创建素养提升任务,选择填写人员
|
|
|
+-- 2. 通过Activiti工作流发送待办给被选人
|
|
|
+-- 3. 被选人填写个人素养提升计划表并提交
|
|
|
+-- 4. 提交后不可修改,支持列表导出和个人表格导出
|
|
|
+-- =====================================================
|
|
|
+
|
|
|
+-- 1. 素养提升任务表(办公室创建)
|
|
|
+CREATE TABLE IF NOT EXISTS `wk_quality_improvement_task` (
|
|
|
+ `id` VARCHAR(64) NOT NULL COMMENT '主键ID',
|
|
|
+ `title` VARCHAR(200) NOT NULL COMMENT '活动标题',
|
|
|
+ `year` VARCHAR(20) NOT NULL COMMENT '活动年份',
|
|
|
+ `description` TEXT COMMENT '活动描述',
|
|
|
+ `status` VARCHAR(2) DEFAULT '0' COMMENT '状态(0:草稿 1:已发送 2:已截止)',
|
|
|
+ `process_instance_id` VARCHAR(64) DEFAULT NULL COMMENT 'Activiti流程实例ID',
|
|
|
+ `office_id` VARCHAR(64) DEFAULT NULL COMMENT '创建部门ID',
|
|
|
+ `office_name` VARCHAR(200) DEFAULT NULL COMMENT '创建部门名称',
|
|
|
+ `create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
|
|
|
+ `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
|
|
|
+ `update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
|
|
|
+ `update_date` DATETIME DEFAULT NULL COMMENT '更新时间',
|
|
|
+ `remarks` VARCHAR(255) DEFAULT NULL COMMENT '备注信息',
|
|
|
+ `del_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标记(0:正常 1:删除)',
|
|
|
+ PRIMARY KEY (`id`),
|
|
|
+ KEY `idx_status` (`status`),
|
|
|
+ KEY `idx_del_flag` (`del_flag`)
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='素养提升任务表';
|
|
|
+
|
|
|
+-- 2. 素养提升个人记录表(被选人填写)
|
|
|
+CREATE TABLE IF NOT EXISTS `wk_quality_improvement_record` (
|
|
|
+ `id` VARCHAR(64) NOT NULL COMMENT '主键ID',
|
|
|
+ `task_id` VARCHAR(64) NOT NULL COMMENT '关联任务ID',
|
|
|
+ `task_title` VARCHAR(200) DEFAULT NULL COMMENT '任务标题(冗余)',
|
|
|
+ `task_year` VARCHAR(20) DEFAULT NULL COMMENT '任务年份(冗余)',
|
|
|
+ `user_id` VARCHAR(64) NOT NULL COMMENT '填写人ID',
|
|
|
+ `user_name` VARCHAR(100) DEFAULT NULL COMMENT '姓名(冗余)',
|
|
|
+ `office_name` VARCHAR(200) DEFAULT NULL COMMENT '部门(冗余)',
|
|
|
+ `position` VARCHAR(100) DEFAULT NULL COMMENT '岗位',
|
|
|
+ `work_years` VARCHAR(20) DEFAULT NULL COMMENT '入职年限',
|
|
|
+ `growth_stage` VARCHAR(50) DEFAULT NULL COMMENT '当前成长阶段',
|
|
|
+ `weakness_goal` TEXT COMMENT '短板与不足/总体目标',
|
|
|
+ -- 专业实操能力提升(4个方向)
|
|
|
+ `score_mapping` INT DEFAULT NULL COMMENT '识图/算量/建模 评分(1-5)',
|
|
|
+ `plan_mapping` TEXT COMMENT '识图/算量/建模 目标措施',
|
|
|
+ `score_pricing` INT DEFAULT NULL COMMENT '清单/定额计价 评分(1-5)',
|
|
|
+ `plan_pricing` TEXT COMMENT '清单/定额计价 目标措施',
|
|
|
+ `score_change` INT DEFAULT NULL COMMENT '变更/签证/索赔/争议处理 评分(1-5)',
|
|
|
+ `plan_change` TEXT COMMENT '变更/签证/索赔/争议处理 目标措施',
|
|
|
+ `score_process` INT DEFAULT NULL COMMENT '全过程业务能力 评分(1-5)',
|
|
|
+ `plan_process` TEXT COMMENT '全过程业务能力 目标措施',
|
|
|
+ -- 数字化与办公能力提升(3个方向)
|
|
|
+ `score_ccpm` INT DEFAULT NULL COMMENT 'CCPM系统全流程操作 评分(1-5)',
|
|
|
+ `plan_ccpm` TEXT COMMENT 'CCPM系统 目标措施',
|
|
|
+ `score_software` INT DEFAULT NULL COMMENT '广联达/未来/博威等软件 评分(1-5)',
|
|
|
+ `plan_software` TEXT COMMENT '广联达等软件 目标措施',
|
|
|
+ `score_ai` INT DEFAULT NULL COMMENT 'AI辅助工具应用 评分(1-5)',
|
|
|
+ `plan_ai` TEXT COMMENT 'AI辅助工具 目标措施',
|
|
|
+ -- 学习考证与知识更新
|
|
|
+ `engineer_status` VARCHAR(20) DEFAULT NULL COMMENT '造价工程师状态(备考中/已通过/已取得)',
|
|
|
+ `engineer_plan` TEXT COMMENT '造价工程师具体计划',
|
|
|
+ `engineer_deadline` VARCHAR(50) DEFAULT NULL COMMENT '造价工程师完成时限',
|
|
|
+ `training_types` VARCHAR(200) DEFAULT NULL COMMENT '培训类型(多选逗号分隔)',
|
|
|
+ `training_direction` TEXT COMMENT '培训方向',
|
|
|
+ `training_deadline` VARCHAR(50) DEFAULT NULL COMMENT '培训完成时限',
|
|
|
+ `regulation_level` VARCHAR(20) DEFAULT NULL COMMENT '清单/定额/新规掌握程度',
|
|
|
+ `regulation_deadline` VARCHAR(50) DEFAULT NULL COMMENT '新规掌握完成时限',
|
|
|
+ `case_count` INT DEFAULT NULL COMMENT '案例篇数',
|
|
|
+ `insight_count` INT DEFAULT NULL COMMENT '心得篇数',
|
|
|
+ `paper_count` INT DEFAULT NULL COMMENT '论文篇数',
|
|
|
+ `output_difficulty` TEXT COMMENT '输出困难说明',
|
|
|
+ `output_deadline` VARCHAR(50) DEFAULT NULL COMMENT '输出完成时限',
|
|
|
+ -- 沟通服务与业务开拓能力提升(5个方向)
|
|
|
+ `score_comm_client` INT DEFAULT NULL COMMENT '与甲方/施工单位沟通 评分(1-5)',
|
|
|
+ `plan_comm_client` TEXT COMMENT '与甲方/施工单位沟通 目标措施',
|
|
|
+ `score_comm_writing` INT DEFAULT NULL COMMENT '书面表达/底稿/报告撰写 评分(1-5)',
|
|
|
+ `plan_comm_writing` TEXT COMMENT '书面表达 目标措施',
|
|
|
+ `score_comm_response` INT DEFAULT NULL COMMENT '客户需求响应与关系维护 评分(1-5)',
|
|
|
+ `plan_comm_response` TEXT COMMENT '客户需求响应 目标措施',
|
|
|
+ `score_comm_cross` INT DEFAULT NULL COMMENT '跨专业贯通 评分(1-5)',
|
|
|
+ `plan_comm_cross` TEXT COMMENT '跨专业贯通 目标措施',
|
|
|
+ `score_comm_expand` INT DEFAULT NULL COMMENT '主动开拓/洽谈业务能力 评分(1-5)',
|
|
|
+ `plan_comm_expand` TEXT COMMENT '主动开拓 目标措施',
|
|
|
+ -- 底部总结
|
|
|
+ `core_advantage` TEXT COMMENT '核心优势与提升思路',
|
|
|
+ -- 流程与状态
|
|
|
+ `process_instance_id` VARCHAR(64) DEFAULT NULL COMMENT 'Activiti流程实例ID',
|
|
|
+ `submit_status` VARCHAR(2) DEFAULT '0' COMMENT '提交状态(0:未填写 1:已提交)',
|
|
|
+ `submit_date` DATETIME DEFAULT NULL COMMENT '提交时间',
|
|
|
+ `create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建者',
|
|
|
+ `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
|
|
|
+ `update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新者',
|
|
|
+ `update_date` DATETIME DEFAULT NULL COMMENT '更新时间',
|
|
|
+ `remarks` VARCHAR(255) DEFAULT NULL COMMENT '备注信息',
|
|
|
+ `del_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '删除标记(0:正常 1:删除)',
|
|
|
+ PRIMARY KEY (`id`),
|
|
|
+ KEY `idx_task_id` (`task_id`),
|
|
|
+ KEY `idx_user_id` (`user_id`),
|
|
|
+ KEY `idx_submit_status` (`submit_status`),
|
|
|
+ KEY `idx_process_instance_id` (`process_instance_id`),
|
|
|
+ KEY `idx_del_flag` (`del_flag`)
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='素养提升个人记录表';
|
|
|
+
|
|
|
+-- =====================================================
|
|
|
+-- 3. 字典数据:当前成长阶段(growth_stage)
|
|
|
+-- 说明:在sys_dict表中插入成长阶段选项,前端下拉框和后端导出均从字典读取
|
|
|
+-- 使用方式:
|
|
|
+-- JSP: <c:forEach items="${fns:getDictList('growth_stage')}" var="dict">
|
|
|
+-- Java: DictUtils.getDictList("growth_stage")
|
|
|
+-- =====================================================
|
|
|
+INSERT INTO `sys_dict` (`id`, `value`, `label`, `type`, `description`, `sort`, `parent_id`, `create_by`, `create_date`, `update_by`, `update_date`, `remarks`, `del_flag`)
|
|
|
+VALUES
|
|
|
+ ('wk_gs_001', '基础造价助理', '基础造价助理', 'growth_stage', '当前成长阶段', 10, '0', '1', NOW(), '1', NOW(), '基础造价助理', '0'),
|
|
|
+ ('wk_gs_002', '资深造价助理', '资深造价助理', 'growth_stage', '当前成长阶段', 20, '0', '1', NOW(), '1', NOW(), '资深造价助理', '0'),
|
|
|
+ ('wk_gs_003', '项目现场负责人', '项目现场负责人', 'growth_stage', '当前成长阶段', 30, '0', '1', NOW(), '1', NOW(), '项目现场负责人', '0'),
|
|
|
+ ('wk_gs_004', '初级项目负责人', '初级项目负责人', 'growth_stage', '当前成长阶段', 40, '0', '1', NOW(), '1', NOW(), '初级项目负责人', '0'),
|
|
|
+ ('wk_gs_005', '项目经理', '项目经理', 'growth_stage', '当前成长阶段', 50, '0', '1', NOW(), '1', NOW(), '项目经理', '0');
|
|
|
+
|
|
|
+-- =====================================================
|
|
|
+-- 4. 字典数据:入职年限(work_years)
|
|
|
+-- =====================================================
|
|
|
+INSERT INTO `sys_dict` (`id`, `value`, `label`, `type`, `description`, `sort`, `parent_id`, `create_by`, `create_date`, `update_by`, `update_date`, `remarks`, `del_flag`)
|
|
|
+VALUES
|
|
|
+ ('wk_wy_001', '1年内', '1年内', 'work_years', '入职年限', 10, '0', '1', NOW(), '1', NOW(), '1年内', '0'),
|
|
|
+ ('wk_wy_002', '1-2年', '1-2年', 'work_years', '入职年限', 20, '0', '1', NOW(), '1', NOW(), '1-2年', '0'),
|
|
|
+ ('wk_wy_003', '2-3年', '2-3年', 'work_years', '入职年限', 30, '0', '1', NOW(), '1', NOW(), '2-3年', '0'),
|
|
|
+ ('wk_wy_004', '3-4年', '3-4年', 'work_years', '入职年限', 40, '0', '1', NOW(), '1', NOW(), '3-4年', '0'),
|
|
|
+ ('wk_wy_005', '5', '更多', 'work_years', '入职年限', 50, '0', '1', NOW(), '1', NOW(), '更多', '0');
|
|
|
+
|
|
|
+-- =====================================================
|
|
|
+-- 5. 字典数据:造价工程师状态(engineer_status)
|
|
|
+-- =====================================================
|
|
|
+INSERT INTO `sys_dict` (`id`, `value`, `label`, `type`, `description`, `sort`, `parent_id`, `create_by`, `create_date`, `update_by`, `update_date`, `remarks`, `del_flag`)
|
|
|
+VALUES
|
|
|
+ ('wk_es_001', '备考中', '备考中', 'engineer_status', '造价工程师状态', 10, '0', '1', NOW(), '1', NOW(), '备考中', '0'),
|
|
|
+ ('wk_es_002', '已通过', '已通过', 'engineer_status', '造价工程师状态', 20, '0', '1', NOW(), '1', NOW(), '已通过', '0'),
|
|
|
+ ('wk_es_003', '已取得', '已取得', 'engineer_status', '造价工程师状态', 30, '0', '1', NOW(), '1', NOW(), '已取得', '0');
|
|
|
+
|
|
|
+-- =====================================================
|
|
|
+-- 6. 字典数据:培训类型(training_type)
|
|
|
+-- =====================================================
|
|
|
+INSERT INTO `sys_dict` (`id`, `value`, `label`, `type`, `description`, `sort`, `parent_id`, `create_by`, `create_date`, `update_by`, `update_date`, `remarks`, `del_flag`)
|
|
|
+VALUES
|
|
|
+ ('wk_tt_001', '入职集训', '入职集训', 'training_type', '培训类型', 10, '0', '1', NOW(), '1', NOW(), '入职集训', '0'),
|
|
|
+ ('wk_tt_002', '全员培训', '全员培训', 'training_type', '培训类型', 20, '0', '1', NOW(), '1', NOW(), '全员培训', '0'),
|
|
|
+ ('wk_tt_003', '季度内训', '季度内训', 'training_type', '培训类型', 30, '0', '1', NOW(), '1', NOW(), '季度内训', '0'),
|
|
|
+ ('wk_tt_004', '线上自学', '线上自学', 'training_type', '培训类型', 40, '0', '1', NOW(), '1', NOW(), '线上自学', '0');
|
|
|
+
|
|
|
+-- =====================================================
|
|
|
+-- 7. 字典数据:新规掌握程度(regulation_level)
|
|
|
+-- =====================================================
|
|
|
+INSERT INTO `sys_dict` (`id`, `value`, `label`, `type`, `description`, `sort`, `parent_id`, `create_by`, `create_date`, `update_by`, `update_date`, `remarks`, `del_flag`)
|
|
|
+VALUES
|
|
|
+ ('wk_rl_001', '了解', '了解', 'regulation_level', '新规掌握程度', 10, '0', '1', NOW(), '1', NOW(), '了解', '0'),
|
|
|
+ ('wk_rl_002', '熟悉', '熟悉', 'regulation_level', '新规掌握程度', 20, '0', '1', NOW(), '1', NOW(), '熟悉', '0'),
|
|
|
+ (`wk_rl_003', '掌握', '掌握', 'regulation_level', '新规掌握程度', 30, '0', '1', NOW(), '1', NOW(), '掌握', '0'),
|
|
|
+ (`wk_rl_004', '精通', '精通', 'regulation_level', '新规掌握程度', 40, '0', '1', NOW(), '1', NOW(), '精通', '0');
|
|
|
+
|
|
|
+-- =====================================================
|
|
|
+-- 8. 数据权限支持:记录表新增 office_id、company_id 字段(已建表的环境执行)
|
|
|
+-- 说明:数据权限过滤(dataScopeFilterOR 生成的 dsf)依赖主表别名的
|
|
|
+-- a.office_id、a.company_id 字段,因此记录表需要冗余这两个字段
|
|
|
+-- =====================================================
|
|
|
+ALTER TABLE `wk_quality_improvement_record`
|
|
|
+ ADD COLUMN `office_id` VARCHAR(64) DEFAULT NULL COMMENT '填写人部门ID(数据权限用)' AFTER `user_name`,
|
|
|
+ ADD COLUMN `company_id` VARCHAR(64) DEFAULT NULL COMMENT '所属公司ID(数据权限用)' AFTER `office_id`;
|
|
|
+
|
|
|
+-- 存量数据回填:按填写人当前部门回填 office_id
|
|
|
+UPDATE `wk_quality_improvement_record` r
|
|
|
+LEFT JOIN `sys_user` u ON u.id = r.user_id
|
|
|
+SET r.office_id = u.office_id
|
|
|
+WHERE r.office_id IS NULL;
|
|
|
+
|
|
|
+-- 存量数据回填:按填写人部门向上取 type='1' 的公司节点回填 company_id
|
|
|
+UPDATE `wk_quality_improvement_record` r
|
|
|
+LEFT JOIN `sys_user` u ON u.id = r.user_id
|
|
|
+LEFT JOIN `sys_office` o ON o.id = u.office_id
|
|
|
+SET r.company_id = (
|
|
|
+ SELECT x.id FROM `sys_office` x
|
|
|
+ WHERE x.type = '1' AND (x.id = o.id OR FIND_IN_SET(x.id, o.parent_ids))
|
|
|
+ ORDER BY LENGTH(x.parent_ids) DESC LIMIT 1
|
|
|
+)
|
|
|
+WHERE r.company_id IS NULL;
|
|
|
+
|
|
|
+-- =====================================================
|
|
|
+-- 9. 清理素养提升计划通知的重复数据
|
|
|
+-- 说明:同一任务+同一用户+同一标题+status=0(未读)的通知只保留最新的一条,
|
|
|
+-- 删除其余重复记录,避免一个人收到多条相同通知
|
|
|
+-- 执行前建议先备份:SELECT * FROM work_project_notify WHERE type='202' AND status='0'
|
|
|
+-- =====================================================
|
|
|
+
|
|
|
+-- 查看当前重复情况(可选,用于确认重复数据量)
|
|
|
+-- SELECT notify_id, notify_user, title, COUNT(*) as cnt
|
|
|
+-- FROM work_project_notify
|
|
|
+-- WHERE type = '202' AND status = '0' AND del_flag = '0'
|
|
|
+-- GROUP BY notify_id, notify_user, title
|
|
|
+-- HAVING COUNT(*) > 1;
|
|
|
+
|
|
|
+-- 删除重复通知:保留每组中 update_date 最新的一条(update_date 相同时保留 id 最大的)
|
|
|
+DELETE FROM work_project_notify
|
|
|
+WHERE type = '202' AND status = '0' AND del_flag = '0'
|
|
|
+ AND id NOT IN (
|
|
|
+ -- 每组保留最新的一条
|
|
|
+ SELECT keep_id FROM (
|
|
|
+ SELECT notify_id, notify_user, title,
|
|
|
+ SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY update_date DESC, id DESC), ',', 1) as keep_id
|
|
|
+ FROM work_project_notify
|
|
|
+ WHERE type = '202' AND status = '0' AND del_flag = '0'
|
|
|
+ GROUP BY notify_id, notify_user, title
|
|
|
+ ) tmp
|
|
|
+ );
|