修复冷忠翠金三角ID为空.sql 5.62 KB
-- =============================================================================
-- 单人修复:冷忠翠(用户ID 13198577167)健康师业绩金三角ID为空
--
-- 背景:客户端异步取金三角ID,编辑入口未回填耗卡日期 / 接口未返回即提交时会落空,
--       导致金三角业绩页少算,数据看板正常,两边对不上。
-- 口径:她 2025-11 至 2026-07 每月绑定均为「精英队」841835190497051909,
--       按「用户ID + 业绩月份」到 lq_jinsanjiao_user 取当月绑定回填,仅补空值。
--
-- 默认范围:2026年7月(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;