Blame view

项目文档相关/sql/修复冷忠翠金三角ID为空.sql 5.62 KB
c4040263   “wangming”   feat: V2.0.2 会员标签...
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
  -- =============================================================================
  -- 单人修复:冷忠翠(用户ID 13198577167)健康师业绩金三角ID为空
  --
  -- 背景:客户端异步取金三角ID,编辑入口未回填耗卡日期 / 接口未返回即提交时会落空,
  --       导致金三角业绩页少算,数据看板正常,两边对不上。
  -- 口径:她 2025-11  2026-07 每月绑定均为「精英队」841835190497051909
  --       按「用户ID + 业绩月份」到 lq_jinsanjiao_user 取当月绑定回填,仅补空值。
  --
  -- 默认范围:20267月(8  / ¥2711.33,即当前反馈的差异)
  -- 全量范围:放开第 5 
  -- =============================================================================
  
  SET @user_id    = '13198577167';
  SET @start_time = '2026-07-01';
  SET @end_time   = '2026-08-01';
  
  -- =============================================================================
  -- 1. 修复前预览
  -- =============================================================================
  
  SELECT hk.F_Id            AS 耗卡单号,
         hk.hksj            AS 耗卡时间,
         hk.mdmc            AS 门店,
         hk.hymc            AS 会员,
         j.F_ItemName       AS 品项,
         j.jksyj            AS 消耗业绩,
         j.F_jsjid          AS 当前金三角ID,
         ju.jsj_id          AS 应回填金三角ID,
         jsj.jsj            AS 战队
  FROM lq_xh_jksyj j
  JOIN lq_xh_hyhk hk ON hk.F_Id = j.glkdbh
  LEFT JOIN lq_jinsanjiao_user ju
         ON ju.user_id = j.jkszh
        AND ju.F_Month = DATE_FORMAT(j.yjsj, '%Y%m')
        AND ju.F_DeleteMark = 0
  LEFT JOIN lq_ycsd_jsj jsj ON jsj.F_Id = ju.jsj_id
  WHERE j.F_IsEffective = 1
    AND j.jkszh = @user_id
    AND (j.F_jsjid IS NULL OR j.F_jsjid = '')
    AND j.yjsj >= @start_time
    AND j.yjsj <  @end_time
  ORDER BY hk.hksj;
  
  -- =============================================================================
  -- 2. 备份
  -- =============================================================================
  
  -- 注意:GTID 模式禁用 CREATE TABLE ... SELECT,必须先建表再 INSERT SELECT
  DROP TABLE IF EXISTS bak_lzc_jsjid_20260729;
  CREATE TABLE bak_lzc_jsjid_20260729 (
      row_id     VARCHAR(50)    NOT NULL COMMENT '业绩行主键 lq_xh_jksyj.F_Id',
      glkdbh     VARCHAR(50)    NULL     COMMENT '关联耗卡单号',
      jkszh      VARCHAR(50)    NULL     COMMENT '健康师用户ID',
      jksxm      VARCHAR(50)    NULL     COMMENT '健康师姓名',
      yjsj       DATETIME       NULL     COMMENT '业绩时间',
      jksyj      DECIMAL(18, 2) NULL     COMMENT '健康师业绩',
      old_jsj_id VARCHAR(255)   NULL     COMMENT '修复前金三角ID',
      PRIMARY KEY (row_id)
  ) COMMENT '冷忠翠金三角ID修复备份 20260729';
  
  INSERT INTO bak_lzc_jsjid_20260729 (row_id, glkdbh, jkszh, jksxm, yjsj, jksyj, old_jsj_id)
  SELECT j.F_Id, j.glkdbh, j.jkszh, j.jksxm, j.yjsj, j.jksyj, j.F_jsjid
  FROM lq_xh_jksyj j
  WHERE j.F_IsEffective = 1
    AND j.jkszh = @user_id
    AND (j.F_jsjid IS NULL OR j.F_jsjid = '')
    AND j.yjsj >= @start_time
    AND j.yjsj <  @end_time;
  
  SELECT COUNT(*) AS 备份行数, ROUND(SUM(jksyj), 2) AS 涉及业绩 FROM bak_lzc_jsjid_20260729;
  
  -- =============================================================================
  -- 3. 执行修复
  -- =============================================================================
  
  UPDATE lq_xh_jksyj j
  JOIN lq_jinsanjiao_user ju
    ON ju.user_id = j.jkszh
   AND ju.F_Month = DATE_FORMAT(j.yjsj, '%Y%m')
   AND ju.F_DeleteMark = 0
   AND ju.jsj_id IS NOT NULL
   AND ju.jsj_id <> ''
  SET j.F_jsjid = ju.jsj_id
  WHERE j.F_IsEffective = 1
    AND j.jkszh = @user_id
    AND (j.F_jsjid IS NULL OR j.F_jsjid = '')
    AND j.yjsj >= @start_time
    AND j.yjsj <  @end_time;
  
  -- =============================================================================
  -- 4. 验证:修复后应全部归入「精英队」,无「未挂战队」行
  -- =============================================================================
  
  SELECT COALESCE(jsj.jsj, '未挂战队') AS 战队,
         COUNT(*)                     AS 行数,
         ROUND(SUM(j.jksyj), 2)       AS 消耗业绩
  FROM lq_xh_jksyj j
  LEFT JOIN lq_ycsd_jsj jsj ON jsj.F_Id = j.F_jsjid
  WHERE j.F_IsEffective = 1
    AND j.jkszh = @user_id
    AND j.yjsj >= @start_time
    AND j.yjsj <  @end_time
  GROUP BY 战队;
  
  -- =============================================================================
  -- 5. 全量修复(可选):她还有以下缺口,确认后放开执行
  --    耗卡 202511(5/722.77)  202512(1/120)   202601(5/2199.92)
  --         202604(6/1618.28) 202605(5/1959.2) 202606(5/0)
  --    开单 202601(1/0) 202603(2/1399.6) 202606(2/0)
  -- =============================================================================
  
  -- UPDATE lq_xh_jksyj j
  -- JOIN lq_jinsanjiao_user ju
  --   ON ju.user_id = j.jkszh AND ju.F_Month = DATE_FORMAT(j.yjsj, '%Y%m')
  --  AND ju.F_DeleteMark = 0 AND ju.jsj_id IS NOT NULL AND ju.jsj_id <> ''
  -- SET j.F_jsjid = ju.jsj_id
  -- WHERE j.F_IsEffective = 1 AND j.jkszh = @user_id
  --   AND (j.F_jsjid IS NULL OR j.F_jsjid = '');
  
  -- UPDATE lq_kd_jksyj j
  -- JOIN lq_jinsanjiao_user ju
  --   ON ju.user_id = j.jkszh AND ju.F_Month = DATE_FORMAT(j.yjsj, '%Y%m')
  --  AND ju.F_DeleteMark = 0 AND ju.jsj_id IS NOT NULL AND ju.jsj_id <> ''
  -- SET j.jsj_id = ju.jsj_id
  -- WHERE j.F_IsEffective = 1 AND j.jkszh = @user_id
  --   AND (j.jsj_id IS NULL OR j.jsj_id = '');
  
  -- =============================================================================
  -- 6. 回滚(仅在结果有误时执行)
  -- =============================================================================
  
  -- UPDATE lq_xh_jksyj j
  -- JOIN bak_lzc_jsjid_20260729 k ON k.row_id = j.F_Id
  -- SET j.F_jsjid = k.old_jsj_id;