补挂金三角业绩_jsjid_202607.sql
11.9 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
-- =============================================================================
-- 补挂金三角业绩 jsj_id / F_jsjid(2026年7月)
-- =============================================================================
-- ⚠️ 若全量执行易报 2013 Lost connection,请改用分批版:
-- 项目文档相关/sql/2026-07-30/补挂金三角业绩_jsjid_202607_v2_分批.sql
-- =============================================================================
-- 背景:
-- 1) 7/29 前无入库兜底,部分开单/耗卡业绩行 jsj_id 为空
-- 2) 跨战队合开时,开单头只挂了其中一个战队,其他战队健康师业绩行漏挂
--
-- 原则(与 GoldTriangleBindingHelper 一致):
-- - 按「健康师匹配键 + 业绩月份」查 lq_jinsanjiao_user 活跃绑定
-- - 每人补挂【自己当月战队】,不按开单头战队整单覆盖(支持跨战队)
-- - 仅补 jsj_id / F_jsjid 为空的有效业绩行,已有值不覆盖
-- - 同一人同月多条 ACTIVE 绑定时,取 F_CreatorTime 最新且战队主档存在的记录
--
-- 已核对(dev 库 2026-07-30):
-- 虎啸龙吟三人未挂:开单 3 笔 / 耗卡 13 笔,共 16 条
-- 跨战队样例 849167374304150789:唐宇欣 → 虎啸龙吟,柳全菊保持卧虎藏龙
-- 7 月全量可补:开单 316 条、耗卡 866 条(有当月绑定且当前为空)
--
-- 执行顺序:备份 → 预览 → 更新 → 验证
-- =============================================================================
SET @month_start = '2026-07-01 00:00:00';
SET @month_end = '2026-07-31 23:59:59';
SET @perf_month = '202607';
SET @huxiao_jsj = '841830228446676229'; -- 虎啸龙吟
-- -----------------------------------------------------------------------------
-- 0. 备份(强烈建议)
-- -----------------------------------------------------------------------------
DROP TABLE IF EXISTS bak_kd_jksyj_jsjid_202607;
CREATE TABLE bak_kd_jksyj_jsjid_202607 AS
SELECT k.F_Id, k.glkdbh, k.jks, k.jkszh, k.jksxm, k.yjsj, k.jsj_id, k.F_IsEffective
FROM lq_kd_jksyj k
WHERE k.F_IsEffective = 1
AND (k.jsj_id IS NULL OR k.jsj_id = '')
AND k.yjsj >= @month_start
AND k.yjsj <= @month_end;
DROP TABLE IF EXISTS bak_xh_jksyj_jsjid_202607;
CREATE TABLE bak_xh_jksyj_jsjid_202607 AS
SELECT x.F_Id, x.glkdbh, x.jks, x.jkszh, x.jksxm, x.yjsj, x.F_jsjid, x.F_IsEffective
FROM lq_xh_jksyj x
WHERE x.F_IsEffective = 1
AND (x.F_jsjid IS NULL OR x.F_jsjid = '')
AND x.yjsj >= @month_start
AND x.yjsj <= @month_end;
-- -----------------------------------------------------------------------------
-- 1. 公共:当月「健康师 → 战队」映射(去重后每人每月一条)
-- 预览绑定映射(可选,执行下面 SELECT)
-- -----------------------------------------------------------------------------
/*
SELECT
ju1.user_id,
ju1.F_Month,
ju1.jsj_id,
j.jsj AS team_name,
ju1.F_CreatorTime
FROM lq_jinsanjiao_user ju1
INNER JOIN lq_ycsd_jsj j
ON j.F_Id = ju1.jsj_id
AND j.yf = ju1.F_Month
WHERE ju1.F_DeleteMark = 0
AND ju1.status = 'ACTIVE'
AND ju1.jsj_id IS NOT NULL
AND ju1.jsj_id <> ''
AND ju1.F_Month = @perf_month
AND ju1.F_CreatorTime = (
SELECT MAX(ju2.F_CreatorTime)
FROM lq_jinsanjiao_user ju2
INNER JOIN lq_ycsd_jsj j2
ON j2.F_Id = ju2.jsj_id
AND j2.yf = ju2.F_Month
WHERE ju2.user_id = ju1.user_id
AND ju2.F_Month = ju1.F_Month
AND ju2.F_DeleteMark = 0
AND ju2.status = 'ACTIVE'
);
*/
-- -----------------------------------------------------------------------------
-- 2. 预览:7 月待补挂开单业绩(跨战队会按健康师分别映射)
-- -----------------------------------------------------------------------------
SELECT
k.F_Id AS perf_id,
k.glkdbh AS order_id,
k.jksxm,
kd.jsj AS header_team_name,
k.jsj_id AS old_jsj_id,
b.jsj_id AS new_jsj_id,
j.jsj AS new_team_name
FROM lq_kd_jksyj k
INNER JOIN (
SELECT ju1.user_id, ju1.F_Month, ju1.jsj_id
FROM lq_jinsanjiao_user ju1
INNER JOIN lq_ycsd_jsj jx ON jx.F_Id = ju1.jsj_id AND jx.yf = ju1.F_Month
WHERE ju1.F_DeleteMark = 0
AND ju1.status = 'ACTIVE'
AND ju1.jsj_id IS NOT NULL AND ju1.jsj_id <> ''
AND ju1.F_CreatorTime = (
SELECT MAX(ju2.F_CreatorTime)
FROM lq_jinsanjiao_user ju2
INNER JOIN lq_ycsd_jsj j2 ON j2.F_Id = ju2.jsj_id AND j2.yf = ju2.F_Month
WHERE ju2.user_id = ju1.user_id
AND ju2.F_Month = ju1.F_Month
AND ju2.F_DeleteMark = 0
AND ju2.status = 'ACTIVE'
)
) b
ON b.user_id = COALESCE(NULLIF(TRIM(k.jkszh), ''), NULLIF(TRIM(k.jks), ''))
AND b.F_Month = DATE_FORMAT(k.yjsj, '%Y%m')
INNER JOIN lq_ycsd_jsj j ON j.F_Id = b.jsj_id
LEFT JOIN lq_kd_kdjlb kd ON kd.F_Id = k.glkdbh
WHERE k.F_IsEffective = 1
AND (k.jsj_id IS NULL OR k.jsj_id = '')
AND k.yjsj >= @month_start
AND k.yjsj <= @month_end
ORDER BY k.yjsj, k.jksxm;
-- 预期约 316 行
-- -----------------------------------------------------------------------------
-- 3. 预览:7 月待补挂耗卡业绩
-- -----------------------------------------------------------------------------
SELECT
x.F_Id AS perf_id,
x.glkdbh AS order_id,
x.jksxm,
x.F_jsjid AS old_jsj_id,
b.jsj_id AS new_jsj_id,
j.jsj AS new_team_name
FROM lq_xh_jksyj x
INNER JOIN (
SELECT ju1.user_id, ju1.F_Month, ju1.jsj_id
FROM lq_jinsanjiao_user ju1
INNER JOIN lq_ycsd_jsj jx ON jx.F_Id = ju1.jsj_id AND jx.yf = ju1.F_Month
WHERE ju1.F_DeleteMark = 0
AND ju1.status = 'ACTIVE'
AND ju1.jsj_id IS NOT NULL AND ju1.jsj_id <> ''
AND ju1.F_CreatorTime = (
SELECT MAX(ju2.F_CreatorTime)
FROM lq_jinsanjiao_user ju2
INNER JOIN lq_ycsd_jsj j2 ON j2.F_Id = ju2.jsj_id AND j2.yf = ju2.F_Month
WHERE ju2.user_id = ju1.user_id
AND ju2.F_Month = ju1.F_Month
AND ju2.F_DeleteMark = 0
AND ju2.status = 'ACTIVE'
)
) b
ON b.user_id = COALESCE(NULLIF(TRIM(x.jkszh), ''), NULLIF(TRIM(x.jks), ''))
AND b.F_Month = DATE_FORMAT(x.yjsj, '%Y%m')
INNER JOIN lq_ycsd_jsj j ON j.F_Id = b.jsj_id
WHERE x.F_IsEffective = 1
AND (x.F_jsjid IS NULL OR x.F_jsjid = '')
AND x.yjsj >= @month_start
AND x.yjsj <= @month_end
ORDER BY x.yjsj, x.jksxm;
-- 预期约 866 行
-- -----------------------------------------------------------------------------
-- 4A. 【可选·最小范围】仅补虎啸龙吟三人 16 条(已逐条核对 F_Id)
-- 跨战队单 849167374304150789 只补唐宇欣,不动柳全菊卧虎藏龙
-- -----------------------------------------------------------------------------
UPDATE lq_kd_jksyj
SET jsj_id = @huxiao_jsj
WHERE F_Id IN (
'849792273540449542', -- 唐宇欣,开单 849167374304150789(头=卧虎藏龙)
'852022282741089541', -- 唐宇欣,开单 851999330188395781
'852022282741089542' -- 李萌, 开单 851999330188395781
)
AND F_IsEffective = 1
AND (jsj_id IS NULL OR jsj_id = '');
UPDATE lq_xh_jksyj
SET F_jsjid = @huxiao_jsj
WHERE F_Id IN (
'843749838901216517','843749838901216518','844872313659720965',
'846897478727894277','846652670822319365','846692856495080709',
'848020321473660165','848553719795549445','849587037194421509',
'850906583914251525','851690507896620293','851690507900814597',
'851690507905008901'
)
AND F_IsEffective = 1
AND (F_jsjid IS NULL OR F_jsjid = '');
-- -----------------------------------------------------------------------------
-- 4B. 【推荐·全量兜底】7 月所有漏挂且能匹配当月绑定的业绩行(含跨战队)
-- 若已执行 4A,重复执行 4B 也安全(仅补空值)
-- -----------------------------------------------------------------------------
UPDATE lq_kd_jksyj k
INNER JOIN (
SELECT ju1.user_id, ju1.F_Month, ju1.jsj_id
FROM lq_jinsanjiao_user ju1
INNER JOIN lq_ycsd_jsj jx ON jx.F_Id = ju1.jsj_id AND jx.yf = ju1.F_Month
WHERE ju1.F_DeleteMark = 0
AND ju1.status = 'ACTIVE'
AND ju1.jsj_id IS NOT NULL AND ju1.jsj_id <> ''
AND ju1.F_CreatorTime = (
SELECT MAX(ju2.F_CreatorTime)
FROM lq_jinsanjiao_user ju2
INNER JOIN lq_ycsd_jsj j2 ON j2.F_Id = ju2.jsj_id AND j2.yf = ju2.F_Month
WHERE ju2.user_id = ju1.user_id
AND ju2.F_Month = ju1.F_Month
AND ju2.F_DeleteMark = 0
AND ju2.status = 'ACTIVE'
)
) b
ON b.user_id = COALESCE(NULLIF(TRIM(k.jkszh), ''), NULLIF(TRIM(k.jks), ''))
AND b.F_Month = DATE_FORMAT(k.yjsj, '%Y%m')
SET k.jsj_id = b.jsj_id
WHERE k.F_IsEffective = 1
AND (k.jsj_id IS NULL OR k.jsj_id = '')
AND k.yjsj >= @month_start
AND k.yjsj <= @month_end;
UPDATE lq_xh_jksyj x
INNER JOIN (
SELECT ju1.user_id, ju1.F_Month, ju1.jsj_id
FROM lq_jinsanjiao_user ju1
INNER JOIN lq_ycsd_jsj jx ON jx.F_Id = ju1.jsj_id AND jx.yf = ju1.F_Month
WHERE ju1.F_DeleteMark = 0
AND ju1.status = 'ACTIVE'
AND ju1.jsj_id IS NOT NULL AND ju1.jsj_id <> ''
AND ju1.F_CreatorTime = (
SELECT MAX(ju2.F_CreatorTime)
FROM lq_jinsanjiao_user ju2
INNER JOIN lq_ycsd_jsj j2 ON j2.F_Id = ju2.jsj_id AND j2.yf = ju2.F_Month
WHERE ju2.user_id = ju1.user_id
AND ju2.F_Month = ju1.F_Month
AND ju2.F_DeleteMark = 0
AND ju2.status = 'ACTIVE'
)
) b
ON b.user_id = COALESCE(NULLIF(TRIM(x.jkszh), ''), NULLIF(TRIM(x.jks), ''))
AND b.F_Month = DATE_FORMAT(x.yjsj, '%Y%m')
SET x.F_jsjid = b.jsj_id
WHERE x.F_IsEffective = 1
AND (x.F_jsjid IS NULL OR x.F_jsjid = '')
AND x.yjsj >= @month_start
AND x.yjsj <= @month_end;
-- -----------------------------------------------------------------------------
-- 5. 验证:虎啸龙吟 7 月战队业绩(应与接口 GetMyTeamPerformance 一致)
-- -----------------------------------------------------------------------------
SELECT
k.jksxm,
SUM(CAST(k.jksyj AS DECIMAL(18,2))) AS billing_amt,
COUNT(*) AS billing_cnt
FROM lq_kd_jksyj k
WHERE k.jsj_id = @huxiao_jsj
AND k.F_IsEffective = 1
AND k.yjsj >= @month_start
AND k.yjsj <= @month_end
AND k.jksyj IS NOT NULL AND k.jksyj <> '' AND k.jksyj <> '0'
GROUP BY k.jksxm
ORDER BY billing_amt DESC;
-- 预期:李巧娇 42380 / 唐宇欣 37520 / 李萌 16056,合计 95956
SELECT
x.jksxm,
SUM(x.jksyj) AS consume_amt,
COUNT(*) AS consume_cnt
FROM lq_xh_jksyj x
WHERE x.F_jsjid = @huxiao_jsj
AND x.F_IsEffective = 1
AND x.yjsj >= @month_start
AND x.yjsj <= @month_end
AND x.jksyj IS NOT NULL AND x.jksyj <> 0
GROUP BY x.jksxm
ORDER BY consume_amt DESC;
-- 预期:唐宇欣 25961.33 / 李巧娇 18508.17 / 李萌 10979.03,合计 55448.53
-- 跨战队单验证:同一开单两行应分属不同战队
SELECT k.F_Id, k.jksxm, k.jsj_id, j.jsj
FROM lq_kd_jksyj k
LEFT JOIN lq_ycsd_jsj j ON j.F_Id = k.jsj_id
WHERE k.glkdbh = '849167374304150789'
AND k.F_IsEffective = 1;
-- 预期:柳全菊→卧虎藏龙(841830264337335557),唐宇欣→虎啸龙吟(841830228446676229)
-- 仍为空且当月有绑定的残留(应为 0)
SELECT 'kd' AS typ, COUNT(*) AS remain
FROM lq_kd_jksyj k
WHERE k.F_IsEffective = 1
AND (k.jsj_id IS NULL OR k.jsj_id = '')
AND k.yjsj >= @month_start AND k.yjsj <= @month_end
AND EXISTS (
SELECT 1 FROM lq_jinsanjiao_user ju
WHERE ju.F_DeleteMark = 0 AND ju.status = 'ACTIVE'
AND ju.F_Month = DATE_FORMAT(k.yjsj, '%Y%m')
AND ju.user_id = COALESCE(NULLIF(TRIM(k.jkszh), ''), NULLIF(TRIM(k.jks), ''))
)
UNION ALL
SELECT 'xh', COUNT(*)
FROM lq_xh_jksyj x
WHERE x.F_IsEffective = 1
AND (x.F_jsjid IS NULL OR x.F_jsjid = '')
AND x.yjsj >= @month_start AND x.yjsj <= @month_end
AND EXISTS (
SELECT 1 FROM lq_jinsanjiao_user ju
WHERE ju.F_DeleteMark = 0 AND ju.status = 'ACTIVE'
AND ju.F_Month = DATE_FORMAT(x.yjsj, '%Y%m')
AND ju.user_id = COALESCE(NULLIF(TRIM(x.jkszh), ''), NULLIF(TRIM(x.jks), ''))
);
-- -----------------------------------------------------------------------------
-- 6. 回滚(如需)
-- -----------------------------------------------------------------------------
-- UPDATE lq_kd_jksyj k
-- INNER JOIN bak_kd_jksyj_jsjid_202607 b ON b.F_Id = k.F_Id
-- SET k.jsj_id = b.jsj_id;
--
-- UPDATE lq_xh_jksyj x
-- INNER JOIN bak_xh_jksyj_jsjid_202607 b ON b.F_Id = x.F_Id
-- SET x.F_jsjid = b.F_jsjid;