feat: 金蝶冲销状态回写拆分独立定时任务并支持分批配置

- 新增KingdeeWriteOffResultTask独立调度(Nacos thirdParty.bfi.writeOffResult.*开关/cron),从付款结果任务第④步拆出
- BfiProperties新增writeOffResult配置:syncEnabled开关、queryBatchSize分批大小默认1000,冲销批量查询与批量落库共用
- 回写仅扫描已同步且未冲销的结算单,已冲销为终态不再复查
- kingdee_write_off_status列默认值改为unwrittenoff,存量已同步NULL数据回填未冲销
- 补充扫描数/防重键数/金蝶返回数/落库数关键日志,summary文案修正为待查未冲销结算单
This commit is contained in:
刘泉佳
2026-10-30 23:04:10 +08:00
parent 6c0f15290a
commit 014d254295
7 changed files with 113 additions and 17 deletions
@@ -2,7 +2,7 @@
-- 列名遵循 MyBatis-Plus 驼峰转下划线默认映射(kingdeeWriteOffStatus -> kingdee_write_off_status,kingdeeWriteOffTime -> kingdee_write_off_time);
-- 若存在早期脚本误建的旧列名 kingdee_writeoff_status / kingdee_writeoff_time 则先重命名,否则按缺失新增
-- 结算单列表展示金蝶侧旧应付/应收单冲销状态:定时任务按 A102-4/A302-4 hadwrittenoff 批量回写,
-- 选单预检/重推闸门实时查询后顺带回写;NULL=未推送金蝶或尚未校验,unwrittenoff-未冲销,writtenoff-已冲销(部分冲销视同已冲销)
-- 选单预检/重推闸门实时查询后顺带回写;默认 unwrittenoff-未冲销(金蝶单据在未冲销前即视为未冲销,避免首跑全量初始化回写),writtenoff-已冲销(部分冲销视同已冲销)
-- ==================== kingdee_write_off_status ====================
-- 旧列名重命名(早期脚本版本,不存在则跳过)
@@ -12,7 +12,7 @@ SET @old_col := (
AND COLUMN_NAME = 'kingdee_writeoff_status'
);
SET @ddl_sql = IF(@old_col = 1,
'ALTER TABLE `blade_formal_settlement` CHANGE COLUMN `kingdee_writeoff_status` `kingdee_write_off_status` varchar(20) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ''金蝶冲销状态:unwrittenoff-未冲销 writtenoff-已冲销(NULL=未推送金蝶或未校验)''',
'ALTER TABLE `blade_formal_settlement` CHANGE COLUMN `kingdee_writeoff_status` `kingdee_write_off_status` varchar(20) COLLATE utf8mb4_general_ci DEFAULT ''unwrittenoff'' COMMENT ''金蝶冲销状态:unwrittenoff-未冲销(默认) writtenoff-已冲销''',
'SELECT 1');
PREPARE ddl_stmt FROM @ddl_sql;
EXECUTE ddl_stmt;
@@ -21,7 +21,7 @@ DEALLOCATE PREPARE ddl_stmt;
-- 缺失则新增(支持重复执行)
SET @ddl_sql = (
SELECT IF(COUNT(*) = 0,
'ALTER TABLE `blade_formal_settlement` ADD COLUMN `kingdee_write_off_status` varchar(20) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ''金蝶冲销状态:unwrittenoff-未冲销 writtenoff-已冲销(NULL=未推送金蝶或未校验)'' AFTER `kingdee_fail_reason`',
'ALTER TABLE `blade_formal_settlement` ADD COLUMN `kingdee_write_off_status` varchar(20) COLLATE utf8mb4_general_ci DEFAULT ''unwrittenoff'' COMMENT ''金蝶冲销状态:unwrittenoff-未冲销(默认) writtenoff-已冲销'' AFTER `kingdee_fail_reason`',
'SELECT 1')
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
@@ -32,6 +32,13 @@ PREPARE ddl_stmt FROM @ddl_sql;
EXECUTE ddl_stmt;
DEALLOCATE PREPARE ddl_stmt;
-- 存量已同步结算单回填默认未冲销(可重复执行:仅补 NULL 行;未同步单据保持默认值即可,前端按同步状态展示'-')
UPDATE `blade_formal_settlement`
SET `kingdee_write_off_status` = 'unwrittenoff'
WHERE `kingdee_write_off_status` IS NULL
AND `kingdee_sync_status` = 'synced'
AND `is_deleted` = 0;
-- ==================== kingdee_write_off_time ====================
-- 旧列名重命名(早期脚本版本,不存在则跳过)
SET @old_col := (