-- 0. 员工基础信息表 CREATE TABLE `oa_employee` ( `employee_id` BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '员工ID', `employee_name` VARCHAR(100) NOT NULL COMMENT '姓名', `company` VARCHAR(100) NOT NULL COMMENT '公司', `del_flag` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '删除标志 0=未删,1=已删', `remark` VARCHAR(255) COMMENT '备注', `create_by` VARCHAR(50) COMMENT '创建人', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` VARCHAR(50) COMMENT '更新人', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ) ENGINE = InnoDB CHARSET = utf8mb4 COMMENT ='员工基础信息'; -- 1. 社保/公积金模板主表 CREATE TABLE `oa_insurance_template` ( `insurance_template_id` BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '模板ID', `template_name` VARCHAR(100) NOT NULL COMMENT '模板名称', `del_flag` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '删除标志 0=未删,1=已删', `remark` VARCHAR(255) COMMENT '备注', `create_by` VARCHAR(50) COMMENT '创建人', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` VARCHAR(50) COMMENT '更新人', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='社保/公积金模板主表'; -- 2. 社保/公积金模板明细表 CREATE TABLE `oa_insurance_template_detail` ( `insurance_detail_id` BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '明细ID', `insurance_template_id` BIGINT NOT NULL COMMENT '模板ID → oa_insurance_template.insurance_template_id', `insurance_type` VARCHAR(50) NOT NULL COMMENT '险种代码,如 pension、unemployment…', `amount` DECIMAL(12, 2) NOT NULL COMMENT '金额或比例', `del_flag` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '删除标志', `remark` VARCHAR(255) COMMENT '备注', `create_by` VARCHAR(50) COMMENT '创建人', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` VARCHAR(50) COMMENT '更新人', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX (`insurance_template_id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='社保/公积金模板明细表'; -- 3. 薪资模板主表 CREATE TABLE `oa_salary_template` ( `salary_template_id` BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '模板ID', `template_name` VARCHAR(100) NOT NULL COMMENT '模板名称', `del_flag` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '删除标志', `remark` VARCHAR(255) COMMENT '备注', `create_by` VARCHAR(50) COMMENT '创建人', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` VARCHAR(50) COMMENT '更新人', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间' ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='薪资模板主表'; -- 4. 薪资模板明细表(金额与费率分开) CREATE TABLE `oa_salary_template_detail` ( `salary_detail_id` BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '明细ID', `salary_template_id` BIGINT NOT NULL COMMENT '模板ID → oa_salary_template.salary_template_id', `salary_item` VARCHAR(50) NOT NULL COMMENT '项目代码,如 basic_salary…', `amount` DECIMAL(12, 2) DEFAULT NULL COMMENT '固定金额,仅针对金额项', `rate` DECIMAL(12, 4) DEFAULT NULL COMMENT '费率,仅针对费率项', `del_flag` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '删除标志', `remark` VARCHAR(255) COMMENT '备注', `create_by` VARCHAR(50) COMMENT '创建人', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` VARCHAR(50) COMMENT '更新人', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX (`salary_template_id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='薪资模板明细表'; -- 5. 员工模板绑定及发放记录表 CREATE TABLE `oa_employee_template_binding` ( `binding_id` BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '记录ID', `employee_id` BIGINT NOT NULL COMMENT '员工ID → oa_employee.employee_id', `insurance_template_id` BIGINT NOT NULL COMMENT '保险模板ID → oa_insurance_template.insurance_template_id', `salary_template_id` BIGINT NOT NULL COMMENT '薪资模板ID → oa_salary_template.salary_template_id', `pay_year` SMALLINT NOT NULL COMMENT '发放年度', `pay_month` TINYINT NOT NULL COMMENT '发放月份', `net_salary` DECIMAL(12, 2) NOT NULL COMMENT '实发工资', `total_company_cost` DECIMAL(12, 2) NOT NULL COMMENT '单位总支出', `status` VARCHAR(20) NOT NULL COMMENT '状态(已发/待发)', `del_flag` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '删除标志', `remark` VARCHAR(255) COMMENT '备注', `create_by` VARCHAR(50) COMMENT '创建人', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` VARCHAR(50) COMMENT '更新人', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX (`employee_id`), INDEX (`insurance_template_id`), INDEX (`salary_template_id`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='员工模板绑定及月度发放记录表'; -- 6. 绑定记录明细表(每次发放的模板明细实际金额) CREATE TABLE `oa_binding_item_detail` ( `binding_item_id` BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '明细ID', `binding_id` BIGINT NOT NULL COMMENT '绑定记录ID → oa_employee_template_binding.binding_id', `template_type` ENUM ('insurance','salary') NOT NULL COMMENT '模板类型', `item_detail_id` BIGINT NOT NULL COMMENT '明细ID → oa_insurance_template_detail.insurance_detail_id 或 oa_salary_template_detail.salary_detail_id', `paid_amount` DECIMAL(12, 2) NOT NULL COMMENT '实际缴纳/支付金额', `del_flag` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '删除标志', `remark` VARCHAR(255) COMMENT '备注', `create_by` VARCHAR(50) COMMENT '创建人', `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_by` VARCHAR(50) COMMENT '更新人', `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', INDEX (`binding_id`), INDEX (`template_type`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='绑定记录明细表'; # # 重新设计了一个员工id是因为有的工人不进入oa系统 # # 首先是设计模板就是薪资模板和保险模板以及他们的细节项 # 接下来就是针对每一个员工计算他们的薪资了。 # 每个员工可以绑定一个薪资模板和一个保险模板 # 绑定之后就可以根据每一个模板中的细节添加记录明细 # 添加完了之后就可以计算总共的实际发放工资 # # 因为每一个员工他可能对应的模板不同,因为公司的登记地点不同,例如江苏的险种金额和山东的金额不同 # # 如果可以的话在首次配置好之后,第二个月用户点击计算薪资后可以直接先拷贝一下上一个月的。然后在此基础上更换模板或者修改金额