单据规则_BASE_BILLRULE_销假与补卡.sql 3.8 KB
-- =============================================================================
-- 单据规则 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)
);