liu
4 天以前 e09a6147e2c4828760b5afb2b2be05f3e8ad2356
docs(sql): 新增全勤奖行内调整数据库脚本

- 该功能为纯代码改动,标准环境无需数据库变更
- 脚本用于目标环境缺少 attendance_bonus 字段时幂等补齐

Co-Authored-By: Claude <noreply@anthropic.com>
已添加1个文件
92 ■■■■■ 文件已修改
doc/sql/20260918_salary_attendance_bonus.sql 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
doc/sql/20260918_salary_attendance_bonus.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
-- =====================================================================
-- åŠŸèƒ½ï¼šè–ªé…¬æ ¸ç®— â€”— å…¨å‹¤å¥–支持工资表行内调整
-- æ—¥æœŸï¼š2026-09-18
-- åˆ†æ”¯ï¼šdev_天津_玮苓乐器
--
-- ã€é‡è¦è¯´æ˜Žã€‘
--   æœ¬åŠŸèƒ½ä¸ºçº¯ä»£ç å±‚æ”¹åŠ¨ï¼š
--     å‰ç«¯ formDia.vue(全勤奖列放开编辑 + å®žæ—¶é‡ç®—)
--     åŽç«¯ SchemeApplicableStaffServiceImpl.resolveAttendanceBonus(优先取行内传入值)
--   æ‰€ä¾èµ–çš„ attendance_bonus å­—段在两个表中【本来就已存在】,
--   å› æ­¤åœ¨æ ‡å‡†çŽ¯å¢ƒä¸‹ã€æ— éœ€æ‰§è¡Œä»»ä½•æ•°æ®åº“å˜æ›´ã€‘ï¼Œç›´æŽ¥éƒ¨ç½²å‰åŽç«¯ä»£ç å³å¯ã€‚
--
--   æœ¬è„šæœ¬ç”¨äºŽï¼šç›®æ ‡çŽ¯å¢ƒï¼ˆå¦‚å®¢æˆ·çŽ°åœºåº“ã€æ—§ç‰ˆæœ¬åº“ï¼‰ç¼ºå°‘è¯¥å­—æ®µæ—¶å®‰å…¨è¡¥é½ã€‚
--   è„šæœ¬å¯é‡å¤æ‰§è¡Œï¼Œå·²å­˜åœ¨åˆ™è‡ªåŠ¨è·³è¿‡ï¼Œä¸ä¼šæŠ¥é”™ã€‚
--
-- æ¶‰åŠè¡¨ï¼š
--   staff_on_job.attendance_bonus         å‘˜å·¥æ¡£æ¡ˆå…¨å‹¤å¥–(NOT NULL é»˜è®¤ 100.00)
--   staff_salary_detail.attendance_bonus  å·¥èµ„明细全勤奖(NOT NULL é»˜è®¤ 100.00)
-- =====================================================================
-- ---------------------------------------------------------------------
-- 1. æ‰§è¡Œå‰è‡ªæ£€ï¼šæŸ¥çœ‹ä¸¤ä¸ªå­—段的现状
-- ---------------------------------------------------------------------
SELECT table_name        AS è¡¨å,
       column_name       AS å­—段名,
       column_type       AS ç±»åž‹,
       is_nullable       AS å¯ç©º,
       column_default    AS é»˜è®¤å€¼,
       column_comment    AS æ³¨é‡Š
FROM information_schema.columns
WHERE table_schema = DATABASE()
  AND table_name IN ('staff_on_job', 'staff_salary_detail')
  AND column_name = 'attendance_bonus';
-- ---------------------------------------------------------------------
-- 2. å¹‚等补齐字段(字段已存在则跳过)
--    æ³¨æ„ï¼šDELIMITER æ˜¯å®¢æˆ·ç«¯æŒ‡ä»¤ï¼ŒNavicat / DBeaver / mysql CLI å‡æ”¯æŒï¼›
--          è‹¥ç”¨ä¸æ”¯æŒ DELIMITER çš„工具,请只执行其中缺失的那条 ALTER。
-- ---------------------------------------------------------------------
DROP PROCEDURE IF EXISTS sp_add_attendance_bonus;
DELIMITER $$
CREATE PROCEDURE sp_add_attendance_bonus()
BEGIN
    IF NOT EXISTS (SELECT 1 FROM information_schema.columns
                   WHERE table_schema = DATABASE()
                     AND table_name = 'staff_on_job'
                     AND column_name = 'attendance_bonus') THEN
        ALTER TABLE staff_on_job
            ADD COLUMN attendance_bonus DECIMAL(10,2) NOT NULL DEFAULT 100.00 COMMENT '全勤奖金';
    END IF;
    IF NOT EXISTS (SELECT 1 FROM information_schema.columns
                   WHERE table_schema = DATABASE()
                     AND table_name = 'staff_salary_detail'
                     AND column_name = 'attendance_bonus') THEN
        ALTER TABLE staff_salary_detail
            ADD COLUMN attendance_bonus DECIMAL(10,2) NOT NULL DEFAULT 100.00 COMMENT '全勤奖金';
    END IF;
END$$
DELIMITER ;
CALL sp_add_attendance_bonus();
DROP PROCEDURE sp_add_attendance_bonus;
-- ---------------------------------------------------------------------
-- 3. åŽ†å²æ•°æ®å…œåº•ï¼ˆå¯é€‰ï¼‰
--    ä»…当目标环境该字段允许 NULL ä¸”存在 NULL å€¼æ—¶ï¼Œæ‰éœ€è¦æ‰§è¡Œä¸‹é¢ä¸¤æ¡ï¼›
--    æ ‡å‡†çŽ¯å¢ƒä¸‹å­—æ®µä¸º NOT NULL é»˜è®¤ 100,无需执行。
-- ---------------------------------------------------------------------
-- UPDATE staff_on_job         SET attendance_bonus = 100.00 WHERE attendance_bonus IS NULL;
-- UPDATE staff_salary_detail  SET attendance_bonus = 100.00 WHERE attendance_bonus IS NULL;
-- ---------------------------------------------------------------------
-- 4. æ‰§è¡ŒåŽéªŒè¯ï¼šåº”能看到两行记录,类型 decimal(10,2)、默认值 100.00
-- ---------------------------------------------------------------------
SELECT table_name     AS è¡¨å,
       column_name    AS å­—段名,
       column_type    AS ç±»åž‹,
       is_nullable    AS å¯ç©º,
       column_default AS é»˜è®¤å€¼,
       column_comment AS æ³¨é‡Š
FROM information_schema.columns
WHERE table_schema = DATABASE()
  AND table_name IN ('staff_on_job', 'staff_salary_detail')
  AND column_name = 'attendance_bonus';
-- =====================================================================
-- é™„:本次功能的行为说明(无需执行 SQL,仅备查)
--   åº”发合计 = å…¨å‹¤å¥– + åŸºæœ¬å·¥èµ„ Ã— æ•ˆç›Š(折合倍数) + æ´¥è´´ + å…¶ä»–æ”¶å…¥
--   å…¨å‹¤å¥–取值优先级:工资表行内传入值(支持 0) > å‘˜å·¥æ¡£æ¡ˆ staff_on_job.attendance_bonus
-- =====================================================================