-- =============================================================================
-- 单据规则 BASE_BILLRULE：销假 / 补卡申请单号
-- 编码须与代码一致：WF_LeaveCancelApplyNo、WF_AttendancePunchApplyNo
-- （AttendancePunchApplyService / 前端 billEnCode）
--
-- 说明：取号接口曾把「单据规则不存在」缓存 3 分钟；若先打开页面后补库，会短期仍取不到号。
-- 已在 BillRuleService 中改为不缓存失败结果，且命中该缓存时会删键重取；请部署后端。
-- 应急：重启 API / 清 Redis（若用 Redis 缓存）或等 3 分钟后再试。
-- =============================================================================
-- 【排查】在业务库执行，确认是否已有记录（有效 = 未删除，且后端按 F_DeleteMark IS NULL 匹配）：
--
--   SELECT F_Id, F_FULLNAME, F_ENCODE, F_PREFIX, F_DeleteMark, F_ENABLEDMARK
--   FROM BASE_BILLRULE
--   WHERE F_ENCODE IN ('WF_LeaveCancelApplyNo','WF_AttendancePunchApplyNo');
--
-- 若只有销假没有补卡：多半是第二条 INSERT 未执行，或 F_Id 与已有行主键冲突导致整句失败。
-- 可再查主键是否被占用：
--
--   SELECT F_Id, F_FULLNAME, F_ENCODE FROM BASE_BILLRULE
--   WHERE F_Id IN ('806449575979201001','806449575979201002');
--
-- =============================================================================

-- 销假（F_Id 使用 806449575979201001，避免与历史脚本 80644957597920000x 冲突）
INSERT INTO `BASE_BILLRULE` (
  `F_Id`,
  `F_FULLNAME`,
  `F_ENCODE`,
  `F_PREFIX`,
  `F_DATEFORMAT`,
  `F_DIGIT`,
  `F_STARTNUMBER`,
  `F_EXAMPLE`,
  `F_THISNUMBER`,
  `F_OUTPUTNUMBER`,
  `F_DESCRIPTION`,
  `F_SORTCODE`,
  `F_CREATORTIME`,
  `F_CREATORUSERID`,
  `F_ENABLEDMARK`,
  `F_DeleteMark`
)
SELECT
  '806449575979201001',
  '销假申请单号',
  'WF_LeaveCancelApplyNo',
  'XJ',
  'yyyyMMdd',
  4,
  '0',
  'XJ202604020001',
  NULL,
  NULL,
  '工作流-销假申请',
  890,
  NOW(),
  NULL,
  1,
  NULL
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `BASE_BILLRULE` t
  WHERE t.`F_ENCODE` = 'WF_LeaveCancelApplyNo' AND (t.`F_DeleteMark` IS NULL OR t.`F_DeleteMark` = 0)
);

-- 补卡（F_Id 使用 806449575979201002）
INSERT INTO `BASE_BILLRULE` (
  `F_Id`,
  `F_FULLNAME`,
  `F_ENCODE`,
  `F_PREFIX`,
  `F_DATEFORMAT`,
  `F_DIGIT`,
  `F_STARTNUMBER`,
  `F_EXAMPLE`,
  `F_THISNUMBER`,
  `F_OUTPUTNUMBER`,
  `F_DESCRIPTION`,
  `F_SORTCODE`,
  `F_CREATORTIME`,
  `F_CREATORUSERID`,
  `F_ENABLEDMARK`,
  `F_DeleteMark`
)
SELECT
  '806449575979201002',
  '补卡申请单号',
  'WF_AttendancePunchApplyNo',
  'BK',
  'yyyyMMdd',
  4,
  '0',
  'BK202604020001',
  NULL,
  NULL,
  '工作流-补卡申请',
  891,
  NOW(),
  NULL,
  1,
  NULL
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `BASE_BILLRULE` t
  WHERE t.`F_ENCODE` = 'WF_AttendancePunchApplyNo' AND (t.`F_DeleteMark` IS NULL OR t.`F_DeleteMark` = 0)
);

-- =============================================================================
-- 【仅补卡】若上面已执行过且只缺补卡，或 201002 仍主键冲突，再执行下面一段（可改 F_Id）
-- =============================================================================
INSERT INTO `BASE_BILLRULE` (
  `F_Id`,
  `F_FULLNAME`,
  `F_ENCODE`,
  `F_PREFIX`,
  `F_DATEFORMAT`,
  `F_DIGIT`,
  `F_STARTNUMBER`,
  `F_EXAMPLE`,
  `F_THISNUMBER`,
  `F_OUTPUTNUMBER`,
  `F_DESCRIPTION`,
  `F_SORTCODE`,
  `F_CREATORTIME`,
  `F_CREATORUSERID`,
  `F_ENABLEDMARK`,
  `F_DeleteMark`
)
SELECT
  '806449575979201012',
  '补卡申请单号',
  'WF_AttendancePunchApplyNo',
  'BK',
  'yyyyMMdd',
  4,
  '0',
  'BK202604020001',
  NULL,
  NULL,
  '工作流-补卡申请',
  891,
  NOW(),
  NULL,
  1,
  NULL
FROM DUAL
WHERE NOT EXISTS (
  SELECT 1 FROM `BASE_BILLRULE` t
  WHERE t.`F_ENCODE` = 'WF_AttendancePunchApplyNo' AND (t.`F_DeleteMark` IS NULL OR t.`F_DeleteMark` = 0)
);
