Blame view

项目文档相关/sql/2026-05-06/2026-05-06_考勤扩展_全量合并.sql 4.76 KB
ecdeab1e   “wangming”   feat(export): 添加参...
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`;