-- 社保公积金方案:改为「按部门绑定」 -- 1) 方案表增加默认缴费基数(不选部门的员工按它计算) -- 2) 新增「方案 - 适用部门」关联表(一个方案可绑定多个部门;一个部门只能绑定一个方案,唯一性在服务层校验) -- 说明:ALTER TABLE ADD COLUMN 不支持 IF NOT EXISTS,这里先查 information_schema 再决定是否执行 SET @db := DATABASE(); -- 1.1 默认社保缴费基数 SET @exists := (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = @db AND table_name = 'hrm_social_security_scheme' AND column_name = 'default_social_security_base'); SET @sql := IF(@exists = 0, 'ALTER TABLE `hrm_social_security_scheme` ADD COLUMN `default_social_security_base` decimal(12,2) DEFAULT NULL COMMENT ''默认社保缴费基数(空则用员工基本工资)'' AFTER `housing_fund_personal_ratio`', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 1.2 默认公积金缴费基数 SET @exists := (SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = @db AND table_name = 'hrm_social_security_scheme' AND column_name = 'default_housing_fund_base'); SET @sql := IF(@exists = 0, 'ALTER TABLE `hrm_social_security_scheme` ADD COLUMN `default_housing_fund_base` decimal(12,2) DEFAULT NULL COMMENT ''默认公积金缴费基数(空或 0 则用社保缴费基数)'' AFTER `default_social_security_base`', 'SELECT 1'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; -- 2. 方案 - 适用部门关联表 CREATE TABLE IF NOT EXISTS `hrm_social_security_scheme_dept` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `scheme_id` bigint NOT NULL COMMENT '社保公积金方案ID', `dept_id` bigint NOT NULL COMMENT '适用部门ID', `creator` varchar(64) DEFAULT '' COMMENT '创建人', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) DEFAULT '' COMMENT '更新人', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`), KEY `idx_scheme_id` (`scheme_id`), KEY `idx_dept_id` (`dept_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '社保公积金方案适用部门'; -- 回滚(如需): -- ALTER TABLE `hrm_social_security_scheme` DROP COLUMN `default_social_security_base`, DROP COLUMN `default_housing_fund_base`; -- DROP TABLE IF EXISTS `hrm_social_security_scheme_dept`;