请假已通过_补写考勤记录_年假等.sql
16.6 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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
-- =============================================================================
-- 说明:将「已终审通过」的请假单(默认仅年假)按自然日写入/更新 lq_attendance_record。
-- 重要:部分库里 FLOW_TASK.F_Id 与请假单 F_Id 不一致,但 F_PROCESSID 会等于请假单 F_Id,
-- 旧脚本只用 F_Id 关联会导致「预览有数据、INSERT 0 行」。本版已改为 F_Id 或 F_PROCESSID 匹配。
-- 兼容:MySQL 5.7 / 8.x
-- =============================================================================
-- ---------------------------------------------------------------------------
-- 零、诊断(先看这个:到底流程表和请假单能不能对上)
-- ---------------------------------------------------------------------------
-- 0a) 年假单在不在
-- SELECT F_Id, F_BILLNO, F_LEAVETYPE, HEX(F_LEAVETYPE) AS type_hex,
-- F_LEAVESTARTTIME, F_LEAVEENDTIME, F_APPLYUSER
-- FROM wform_leaveapply
-- WHERE TRIM(IFNULL(F_LEAVETYPE,'')) LIKE '%年假%'
-- ORDER BY F_LEAVESTARTTIME DESC
-- LIMIT 20;
-- 0b) 同一条请假单:用 F_Id 关联流程(旧逻辑)
-- SELECT la.F_Id, la.F_BILLNO, ft.F_Id AS task_id, ft.F_PROCESSID, ft.F_STATUS, ft.F_CREATORUSERID
-- FROM wform_leaveapply la
-- LEFT JOIN flow_task ft ON ft.F_Id = la.F_Id
-- WHERE la.F_Id = '把你的请假单F_Id贴这里';
-- 0c) 同一条:用 F_PROCESSID 关联(新逻辑常命中这条)
-- SELECT la.F_Id, la.F_BILLNO, ft.F_Id AS task_id, ft.F_PROCESSID, ft.F_STATUS, ft.F_CREATORUSERID
-- FROM wform_leaveapply la
-- LEFT JOIN flow_task ft ON ft.F_PROCESSID = la.F_Id
-- WHERE la.F_Id = '把你的请假单F_Id贴这里';
-- 说明:F_STATUS=2 表示审核通过。若 0b 无行、0c 有行,必须用本文件下面的「关联子查询」版本。
-- ---------------------------------------------------------------------------
-- 序列表子查询(0~999),下面多处复用
-- ---------------------------------------------------------------------------
-- (内联写在各语句中,避免 MySQL 5.7 无 CTE 时无法复用临时表名)
-- ---------------------------------------------------------------------------
-- 一、预览(已改为:流程通过 + (F_Id 或 F_PROCESSID) 匹配请假单)
-- ---------------------------------------------------------------------------
SELECT
la.F_Id AS leave_id,
DATE_ADD(DATE(la.F_LEAVESTARTTIME), INTERVAL seq.n DAY) AS attendance_date,
TRIM(la.F_LEAVETYPE) AS leave_type,
la.F_BILLNO AS bill_no,
COALESCE(NULLIF(TRIM(la.F_APPLYUSER), ''), lc.creator_uid) AS target_user_id,
u.F_REALNAME AS employee_name,
CASE WHEN TRIM(la.F_LEAVETYPE) = '病假' THEN 5 ELSE 4 END AS attendance_status,
LEFT(
CONCAT('请假审批通过:', TRIM(IFNULL(la.F_LEAVETYPE, '')), '(单号 ', IFNULL(la.F_BILLNO, ''), ')'),
500
) AS remark_text
FROM wform_leaveapply la
INNER JOIN (
SELECT
la2.F_Id AS LID,
(
SELECT ft.F_CREATORUSERID
FROM flow_task ft
WHERE ft.F_STATUS = 2
AND (ft.F_Id = la2.F_Id OR (ft.F_PROCESSID IS NOT NULL AND TRIM(ft.F_PROCESSID) <> '' AND ft.F_PROCESSID = la2.F_Id))
ORDER BY IFNULL(ft.F_LastModifyTime, ft.F_CREATORTIME) DESC
LIMIT 1
) AS creator_uid
FROM wform_leaveapply la2
) lc ON lc.LID = la.F_Id AND lc.creator_uid IS NOT NULL
INNER JOIN (
SELECT d1.n + d2.n * 10 + d3.n * 100 AS n
FROM (
SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) d1
CROSS JOIN (
SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) d2
CROSS JOIN (
SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) d3
) seq ON seq.n <= DATEDIFF(DATE(la.F_LEAVEENDTIME), DATE(la.F_LEAVESTARTTIME))
LEFT JOIN base_user u
ON u.F_Id = COALESCE(NULLIF(TRIM(la.F_APPLYUSER), ''), lc.creator_uid)
AND (u.F_DeleteMark IS NULL OR u.F_DeleteMark = 0)
WHERE la.F_LEAVESTARTTIME IS NOT NULL
AND la.F_LEAVEENDTIME IS NOT NULL
AND DATE(la.F_LEAVEENDTIME) >= DATE(la.F_LEAVESTARTTIME)
AND TRIM(IFNULL(la.F_LEAVETYPE, '')) = '年假'
ORDER BY la.F_Id, attendance_date;
-- ---------------------------------------------------------------------------
-- 1b、与「二、写入」相同条件的行数(应为 ≥1)
-- ---------------------------------------------------------------------------
SELECT COUNT(*) AS rows_would_insert
FROM wform_leaveapply la
INNER JOIN (
SELECT
la2.F_Id AS LID,
(
SELECT ft.F_CREATORUSERID
FROM flow_task ft
WHERE ft.F_STATUS = 2
AND (ft.F_Id = la2.F_Id OR (ft.F_PROCESSID IS NOT NULL AND TRIM(ft.F_PROCESSID) <> '' AND ft.F_PROCESSID = la2.F_Id))
ORDER BY IFNULL(ft.F_LastModifyTime, ft.F_CREATORTIME) DESC
LIMIT 1
) AS creator_uid
FROM wform_leaveapply la2
) lc ON lc.LID = la.F_Id AND lc.creator_uid IS NOT NULL
INNER JOIN (
SELECT d1.n + d2.n * 10 + d3.n * 100 AS n
FROM (
SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) d1
CROSS JOIN (
SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) d2
CROSS JOIN (
SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) d3
) seq ON seq.n <= DATEDIFF(DATE(la.F_LEAVEENDTIME), DATE(la.F_LEAVESTARTTIME))
LEFT JOIN base_user u
ON u.F_Id = COALESCE(NULLIF(TRIM(la.F_APPLYUSER), ''), lc.creator_uid)
AND (u.F_DeleteMark IS NULL OR u.F_DeleteMark = 0)
LEFT JOIN lq_mdxx m ON m.F_Id = u.F_MDID
LEFT JOIN lq_attendance_group g
ON g.F_Id = u.F_AttendanceGroupId
AND IFNULL(g.F_DeleteMark, 0) = 0
WHERE la.F_LEAVESTARTTIME IS NOT NULL
AND la.F_LEAVEENDTIME IS NOT NULL
AND DATE(la.F_LEAVEENDTIME) >= DATE(la.F_LEAVESTARTTIME)
AND TRIM(IFNULL(la.F_LEAVETYPE, '')) = '年假';
-- ---------------------------------------------------------------------------
-- 二、写入(已取消块注释,执行前务必确认 1b > 0;建议先备份表)
-- ---------------------------------------------------------------------------
INSERT INTO lq_attendance_record (
F_Id,
F_UserId,
F_EmployeeName,
F_StoreId,
F_StoreName,
F_AttendanceGroupId,
F_AttendanceGroupName,
F_AttendanceDate,
F_PunchInTime,
F_PunchOutTime,
F_Status,
F_LateMinutes,
F_EarlyLeaveMinutes,
F_IsManual,
F_Remark,
F_RuleSnapshotJson,
F_AllRuleSnapshotJson,
F_CreateUserId,
F_CreateTime,
F_UpdateUserId,
F_UpdateTime,
F_IsEffective
)
SELECT
CONCAT('L', REPLACE(UUID(), '-', '')) AS F_Id,
COALESCE(NULLIF(TRIM(la.F_APPLYUSER), ''), lc.creator_uid) AS F_UserId,
IFNULL(u.F_REALNAME, '') AS F_EmployeeName,
u.F_MDID AS F_StoreId,
m.dm AS F_StoreName,
u.F_AttendanceGroupId AS F_AttendanceGroupId,
g.F_GroupName AS F_AttendanceGroupName,
DATE_ADD(DATE(la.F_LEAVESTARTTIME), INTERVAL seq.n DAY) AS F_AttendanceDate,
NULL AS F_PunchInTime,
NULL AS F_PunchOutTime,
CASE WHEN TRIM(la.F_LEAVETYPE) = '病假' THEN 5 ELSE 4 END AS F_Status,
0 AS F_LateMinutes,
0 AS F_EarlyLeaveMinutes,
1 AS F_IsManual,
LEFT(
CONCAT('请假审批通过:', TRIM(IFNULL(la.F_LEAVETYPE, '')), '(单号 ', IFNULL(la.F_BILLNO, ''), ')'),
500
) AS F_Remark,
'{}' AS F_RuleSnapshotJson,
'{}' AS F_AllRuleSnapshotJson,
'system' AS F_CreateUserId,
NOW() AS F_CreateTime,
'system' AS F_UpdateUserId,
NOW() AS F_UpdateTime,
1 AS F_IsEffective
FROM wform_leaveapply la
INNER JOIN (
SELECT
la2.F_Id AS LID,
(
SELECT ft.F_CREATORUSERID
FROM flow_task ft
WHERE ft.F_STATUS = 2
AND (ft.F_Id = la2.F_Id OR (ft.F_PROCESSID IS NOT NULL AND TRIM(ft.F_PROCESSID) <> '' AND ft.F_PROCESSID = la2.F_Id))
ORDER BY IFNULL(ft.F_LastModifyTime, ft.F_CREATORTIME) DESC
LIMIT 1
) AS creator_uid
FROM wform_leaveapply la2
) lc ON lc.LID = la.F_Id AND lc.creator_uid IS NOT NULL
INNER JOIN (
SELECT d1.n + d2.n * 10 + d3.n * 100 AS n
FROM (
SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) d1
CROSS JOIN (
SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) d2
CROSS JOIN (
SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) d3
) seq ON seq.n <= DATEDIFF(DATE(la.F_LEAVEENDTIME), DATE(la.F_LEAVESTARTTIME))
LEFT JOIN base_user u
ON u.F_Id = COALESCE(NULLIF(TRIM(la.F_APPLYUSER), ''), lc.creator_uid)
AND (u.F_DeleteMark IS NULL OR u.F_DeleteMark = 0)
LEFT JOIN lq_mdxx m ON m.F_Id = u.F_MDID
LEFT JOIN lq_attendance_group g
ON g.F_Id = u.F_AttendanceGroupId
AND IFNULL(g.F_DeleteMark, 0) = 0
WHERE la.F_LEAVESTARTTIME IS NOT NULL
AND la.F_LEAVEENDTIME IS NOT NULL
AND DATE(la.F_LEAVEENDTIME) >= DATE(la.F_LEAVESTARTTIME)
AND TRIM(IFNULL(la.F_LEAVETYPE, '')) = '年假'
-- 若 F_UserId 为空会违反 NOT NULL,直接筛掉并避免「静默 0 行」误解
AND COALESCE(NULLIF(TRIM(la.F_APPLYUSER), ''), lc.creator_uid) IS NOT NULL
AND COALESCE(NULLIF(TRIM(la.F_APPLYUSER), ''), lc.creator_uid) <> ''
ON DUPLICATE KEY UPDATE
F_Status = VALUES(F_Status),
F_LateMinutes = 0,
F_EarlyLeaveMinutes = 0,
F_IsManual = 1,
F_Remark = VALUES(F_Remark),
F_RuleSnapshotJson = '{}',
F_AllRuleSnapshotJson = '{}',
F_EmployeeName = VALUES(F_EmployeeName),
F_StoreId = VALUES(F_StoreId),
F_StoreName = VALUES(F_StoreName),
F_AttendanceGroupId = VALUES(F_AttendanceGroupId),
F_AttendanceGroupName = VALUES(F_AttendanceGroupName),
F_UpdateUserId = 'system',
F_UpdateTime = NOW(),
F_IsEffective = 1;
-- ---------------------------------------------------------------------------
-- 三、只补一条请假单(把 YOUR_LEAVE_ID 换成 F_Id;不限制年假时可去掉假种条件)
-- ---------------------------------------------------------------------------
/*
INSERT INTO lq_attendance_record (
F_Id, F_UserId, F_EmployeeName, F_StoreId, F_StoreName,
F_AttendanceGroupId, F_AttendanceGroupName, F_AttendanceDate,
F_PunchInTime, F_PunchOutTime, F_Status, F_LateMinutes, F_EarlyLeaveMinutes,
F_IsManual, F_Remark, F_RuleSnapshotJson, F_AllRuleSnapshotJson,
F_CreateUserId, F_CreateTime, F_UpdateUserId, F_UpdateTime, F_IsEffective
)
SELECT
CONCAT('L', REPLACE(UUID(), '-', '')),
COALESCE(NULLIF(TRIM(la.F_APPLYUSER), ''), lc.creator_uid),
IFNULL(u.F_REALNAME, ''), u.F_MDID, m.dm,
u.F_AttendanceGroupId, g.F_GroupName,
DATE_ADD(DATE(la.F_LEAVESTARTTIME), INTERVAL seq.n DAY),
NULL, NULL,
CASE WHEN TRIM(la.F_LEAVETYPE) = '病假' THEN 5 ELSE 4 END,
0, 0, 1,
LEFT(
CONCAT('请假审批通过:', TRIM(IFNULL(la.F_LEAVETYPE, '')), '(单号 ', IFNULL(la.F_BILLNO, ''), ')'),
500
),
'{}', '{}',
'system', NOW(), 'system', NOW(), 1
FROM wform_leaveapply la
INNER JOIN (
SELECT
la2.F_Id AS LID,
(
SELECT ft.F_CREATORUSERID
FROM flow_task ft
WHERE ft.F_STATUS = 2
AND (ft.F_Id = la2.F_Id OR (ft.F_PROCESSID IS NOT NULL AND TRIM(ft.F_PROCESSID) <> '' AND ft.F_PROCESSID = la2.F_Id))
ORDER BY IFNULL(ft.F_LastModifyTime, ft.F_CREATORTIME) DESC
LIMIT 1
) AS creator_uid
FROM wform_leaveapply la2
WHERE la2.F_Id = 'YOUR_LEAVE_ID'
) lc ON lc.LID = la.F_Id AND lc.creator_uid IS NOT NULL
INNER JOIN (
SELECT d1.n + d2.n * 10 + d3.n * 100 AS n
FROM (
SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) d1
CROSS JOIN (
SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) d2
CROSS JOIN (
SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) d3
) seq ON seq.n <= DATEDIFF(DATE(la.F_LEAVEENDTIME), DATE(la.F_LEAVESTARTTIME))
LEFT JOIN base_user u
ON u.F_Id = COALESCE(NULLIF(TRIM(la.F_APPLYUSER), ''), lc.creator_uid)
AND (u.F_DeleteMark IS NULL OR u.F_DeleteMark = 0)
LEFT JOIN lq_mdxx m ON m.F_Id = u.F_MDID
LEFT JOIN lq_attendance_group g
ON g.F_Id = u.F_AttendanceGroupId AND IFNULL(g.F_DeleteMark, 0) = 0
WHERE la.F_Id = 'YOUR_LEAVE_ID'
AND la.F_LEAVESTARTTIME IS NOT NULL
AND la.F_LEAVEENDTIME IS NOT NULL
AND DATE(la.F_LEAVEENDTIME) >= DATE(la.F_LEAVESTARTTIME)
AND COALESCE(NULLIF(TRIM(la.F_APPLYUSER), ''), lc.creator_uid) IS NOT NULL
AND COALESCE(NULLIF(TRIM(la.F_APPLYUSER), ''), lc.creator_uid) <> ''
ON DUPLICATE KEY UPDATE
F_Status = VALUES(F_Status),
F_LateMinutes = 0,
F_EarlyLeaveMinutes = 0,
F_IsManual = 1,
F_Remark = VALUES(F_Remark),
F_RuleSnapshotJson = '{}',
F_AllRuleSnapshotJson = '{}',
F_EmployeeName = VALUES(F_EmployeeName),
F_StoreId = VALUES(F_StoreId),
F_StoreName = VALUES(F_StoreName),
F_AttendanceGroupId = VALUES(F_AttendanceGroupId),
F_AttendanceGroupName = VALUES(F_AttendanceGroupName),
F_UpdateUserId = 'system',
F_UpdateTime = NOW(),
F_IsEffective = 1;
*/
-- ---------------------------------------------------------------------------
-- 四、仍 0 行时:不依赖流程表,手工指定「员工用户Id」(BASE_USER.F_Id)强插(确认已终审再过)
-- ---------------------------------------------------------------------------
/*
INSERT INTO lq_attendance_record (
F_Id, F_UserId, F_EmployeeName, F_StoreId, F_StoreName,
F_AttendanceGroupId, F_AttendanceGroupName, F_AttendanceDate,
F_PunchInTime, F_PunchOutTime, F_Status, F_LateMinutes, F_EarlyLeaveMinutes,
F_IsManual, F_Remark, F_RuleSnapshotJson, F_AllRuleSnapshotJson,
F_CreateUserId, F_CreateTime, F_UpdateUserId, F_UpdateTime, F_IsEffective
)
SELECT
CONCAT('L', REPLACE(UUID(), '-', '')),
'手工填写BASE_USER的F_Id' AS F_UserId,
IFNULL(u.F_REALNAME, ''), u.F_MDID, m.dm,
u.F_AttendanceGroupId, g.F_GroupName,
DATE_ADD(DATE(la.F_LEAVESTARTTIME), INTERVAL seq.n DAY),
NULL, NULL,
CASE WHEN TRIM(la.F_LEAVETYPE) = '病假' THEN 5 ELSE 4 END,
0, 0, 1,
LEFT(
CONCAT('请假审批通过:', TRIM(IFNULL(la.F_LEAVETYPE, '')), '(单号 ', IFNULL(la.F_BILLNO, ''), ')'),
500
),
'{}', '{}',
'system', NOW(), 'system', NOW(), 1
FROM wform_leaveapply la
INNER JOIN (
SELECT d1.n + d2.n * 10 + d3.n * 100 AS n
FROM (
SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) d1
CROSS JOIN (
SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) d2
CROSS JOIN (
SELECT 0 AS n UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) d3
) seq ON seq.n <= DATEDIFF(DATE(la.F_LEAVEENDTIME), DATE(la.F_LEAVESTARTTIME))
INNER JOIN base_user u ON u.F_Id = '手工填写BASE_USER的F_Id'
AND (u.F_DeleteMark IS NULL OR u.F_DeleteMark = 0)
LEFT JOIN lq_mdxx m ON m.F_Id = u.F_MDID
LEFT JOIN lq_attendance_group g
ON g.F_Id = u.F_AttendanceGroupId AND IFNULL(g.F_DeleteMark, 0) = 0
WHERE la.F_Id = 'YOUR_LEAVE_ID'
AND la.F_LEAVESTARTTIME IS NOT NULL
AND la.F_LEAVEENDTIME IS NOT NULL
AND DATE(la.F_LEAVEENDTIME) >= DATE(la.F_LEAVESTARTTIME)
ON DUPLICATE KEY UPDATE
F_Status = VALUES(F_Status),
F_LateMinutes = 0,
F_EarlyLeaveMinutes = 0,
F_IsManual = 1,
F_Remark = VALUES(F_Remark),
F_RuleSnapshotJson = '{}',
F_AllRuleSnapshotJson = '{}',
F_EmployeeName = VALUES(F_EmployeeName),
F_StoreId = VALUES(F_StoreId),
F_StoreName = VALUES(F_StoreName),
F_AttendanceGroupId = VALUES(F_AttendanceGroupId),
F_AttendanceGroupName = VALUES(F_AttendanceGroupName),
F_UpdateUserId = 'system',
F_UpdateTime = NOW(),
F_IsEffective = 1;
*/