2026-05-06_考勤扩展_全量合并.sql
4.76 KB
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
-- =============================================================================
-- 2026-05-06 考勤相关 DDL 全量合并(单次执行本文件即可)
--
-- 包含:
-- A. 应休表建表、门店默认考勤分组列、人员应休/可打卡门店、删除人员表历史班次列
-- B. 班次表 lq_attendance_group 应休三列迁出至 lq_attendance_rest_group + F_DefaultRestGroupId
--
-- 执行前请备份。若某步报 Duplicate column / Duplicate entry / Unknown column,说明已执行过,跳过该步后继续。
-- 应用侧要求:
-- - 执行「A.5 删人员 F_AttendanceGroupId」前,应用需已不读 BASE_USER.F_AttendanceGroupId
-- - 执行「B.4 删班次应休三列」前,应用需已读写 F_DefaultRestGroupId + 应休表
-- =============================================================================
-- ##############################################################################
-- A. 门店班次、人员应休/可打卡、人员历史班次列清理
-- ##############################################################################
-- A.1 应休分组表(福利口径:与班次上下班时间解耦)
CREATE TABLE IF NOT EXISTS `lq_attendance_rest_group` (
`F_Id` varchar(50) NOT NULL,
`F_GroupName` varchar(200) NOT NULL,
`F_MonthlyRestDays` int NOT NULL DEFAULT 0,
`F_HalfDaySplitRestDays` int NOT NULL DEFAULT 0,
`F_RestUnlockCycle` int NOT NULL DEFAULT 0,
`F_IsEnabled` int NOT NULL DEFAULT 1,
`F_Remark` varchar(500) DEFAULT NULL,
`F_SortCode` int NOT NULL DEFAULT 0,
`F_CreateTime` datetime DEFAULT NULL,
`F_DeleteMark` int DEFAULT NULL,
`F_VersionNo` int DEFAULT NULL,
`F_LastModifyUserId` varchar(50) DEFAULT NULL,
`F_LastModifyUserName` varchar(50) DEFAULT NULL,
`F_LastModifyTime` datetime DEFAULT NULL,
`F_CreateUserId` varchar(50) DEFAULT NULL,
PRIMARY KEY (`F_Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='应休分组(月应休/半天拆分/解锁周期)';
-- A.2 门店默认考勤分组(可选)
ALTER TABLE `lq_mdxx`
ADD COLUMN `F_AttendanceGroupId` varchar(50) DEFAULT NULL
COMMENT '门店默认考勤分组(lq_attendance_group.F_Id)'
AFTER `F_TrafficTips`;
-- A.3 人员应休分组绑定(依赖 BASE_USER 仍存在 F_AttendanceGroupId 时可用 AFTER;若该列已删,请改为 AFTER F_GW 等后手工执行)
ALTER TABLE `BASE_USER`
ADD COLUMN `F_AttendanceRestGroupId` varchar(50) DEFAULT NULL
COMMENT '应休分组ID;空则沿用门店班次绑定的默认应休分组'
AFTER `F_AttendanceGroupId`;
-- A.4 人员可打卡门店(JSON 数组字符串)
ALTER TABLE `BASE_USER`
ADD COLUMN `F_PunchAllowedStoreIds` TEXT NULL
COMMENT '可打卡门店ID列表JSON'
AFTER `F_AttendanceRestGroupId`;
-- ##############################################################################
-- B. 班次表应休字段迁出(依赖 A.1 已建 lq_attendance_rest_group,且 lq_attendance_group 仍含旧三列)
-- ##############################################################################
-- B.1 班次表增加指向默认应休分组的指针列
ALTER TABLE `lq_attendance_group`
ADD COLUMN `F_DefaultRestGroupId` varchar(50) DEFAULT NULL
COMMENT '默认应休分组(lq_attendance_rest_group.F_Id)'
AFTER `F_EarlyLeaveToleranceMinutes`;
-- B.2 从旧列复制到应休表(主键 bind_ + 班次 F_Id)
INSERT INTO `lq_attendance_rest_group` (
`F_Id`,
`F_GroupName`,
`F_MonthlyRestDays`,
`F_HalfDaySplitRestDays`,
`F_RestUnlockCycle`,
`F_IsEnabled`,
`F_Remark`,
`F_SortCode`,
`F_CreateTime`,
`F_DeleteMark`,
`F_VersionNo`
)
SELECT
CONCAT('bind_', g.`F_Id`),
CONCAT(IFNULL(NULLIF(TRIM(g.`F_GroupName`), ''), '班次'), '·默认应休'),
IFNULL(g.`F_MonthlyRestDays`, 0),
IFNULL(g.`F_HalfDaySplitRestDays`, 0),
IFNULL(g.`F_RestUnlockCycle`, 0),
1,
NULL,
0,
NOW(),
IFNULL(g.`F_DeleteMark`, 0),
1
FROM `lq_attendance_group` g
WHERE NOT EXISTS (
SELECT 1 FROM `lq_attendance_rest_group` r WHERE r.`F_Id` = CONCAT('bind_', g.`F_Id`)
);
-- B.3 回填班次表指针
UPDATE `lq_attendance_group` g
SET g.`F_DefaultRestGroupId` = CONCAT('bind_', g.`F_Id`)
WHERE (g.`F_DefaultRestGroupId` IS NULL OR g.`F_DefaultRestGroupId` = '');
-- B.4 删除班次表上已迁出的三列(应用须已升级)
ALTER TABLE `lq_attendance_group` DROP COLUMN `F_MonthlyRestDays`;
ALTER TABLE `lq_attendance_group` DROP COLUMN `F_HalfDaySplitRestDays`;
ALTER TABLE `lq_attendance_group` DROP COLUMN `F_RestUnlockCycle`;
-- ##############################################################################
-- A.5 删除人员表历史班次列(应用须已升级;建议在 B 之后执行,减少不一致窗口)
-- ##############################################################################
ALTER TABLE `BASE_USER` DROP COLUMN `F_AttendanceGroupId`;