From 473dc2820c4d6f7e4fd0f7f56f0e38b2bbe8fa9e Mon Sep 17 00:00:00 2001 From: guob yuano Date: Wed, 30 Sep 2026 13:56:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B1=8F=E8=94=BD=202=E6=9C=88=E4=BB=BD?= =?UTF-8?q?=E8=A1=A5=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Jobs/SupplementCostUploadJob.cs | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/Src/Dlhis.ScheduledTask/Jobs/SupplementCostUploadJob.cs b/Src/Dlhis.ScheduledTask/Jobs/SupplementCostUploadJob.cs index b565b2e7..dcaa92e2 100644 --- a/Src/Dlhis.ScheduledTask/Jobs/SupplementCostUploadJob.cs +++ b/Src/Dlhis.ScheduledTask/Jobs/SupplementCostUploadJob.cs @@ -43,11 +43,21 @@ namespace Dlhis.ScheduledTask.Jobs; /// 2. 手工已补传但未回写上传记录的工号必须排除,见 。 /// 3. 上报金额沿用原任务写法(Math.Abs(合计),未做 ROUND),与现网行为一致,勿擅自改成保留 2 位。 /// -/// 执行方式(cron = "0 0 0 1 1 ?",仅兜底,**必须手动触发一次,不会自动跑**): -/// - 触发入口:**https://face.jinkosolar.com/hangfire/**(走 ingress,NodePort 31005 的 /hangfire 是 404) -/// → Recurring Jobs → "【临时】2026-02消费费用补传" → Trigger now; -/// - 不要改成"每天/每小时"这类会反复命中的 cron:已成功的虽会被自动跳过, -/// 但"未确认"批次会被重复提交(HCM_0015_INSERT 幂等语义未确认); +/// 当前状态(2026-09-30 更新):**2 月补传已完成,本任务已屏蔽** +/// - 执行结果:待补传 13,078 人 → 成功写入 13,076 人(7,893 + 13,076 = 20,969,与库内计数一致); +/// 未写入 2 人:`30002488`(23.20 元,JIP 未返回 S,待财务在 SAP 侧确认)、`WB-1091`(0.70 元,本地测试工号); +/// 另有 `30011368`(388.00 元) 系 2026-03 用 Postman 手工补传、未回写平台记录(JIP 侧已有,无需处理)。 +/// - 屏蔽方式: = true ⇒ 任务即使被触发也只写一行警告日志、**不取数、不上传、不写库**; +/// 代码保留不删除,便于日后核对/复用。恢复方式:把 Disabled 改为 false 并重新发版。 +/// - 注意:Hangfire 的 recurring job 定义存在 Redis 里,屏蔽代码**不会**删掉它; +/// 它只会在兜底时间(2027-01-01)触发一次,届时因 Disabled=true 而空转,不会误传数据。 +/// +/// 历史执行方式(cron = "0 0 0 1 1 ?",仅兜底 ⇒ 不会自动跑,需手动触发一次): +/// - 触发入口:**https://face.jinkosolar.com/hangfire/**(走 ingress;NodePort 31005 的 /hangfire 返回 404) +/// → `Recurring Jobs` → **勾选 `SupplementCostUploadJob` 这一行** → 列表上方出现 **`Trigger now`** 按钮 → 点它 +/// (注意:不勾选时行内看不到按钮,容易误以为没有该功能); +/// - 千万不要用"每天/每小时"这类会反复命中的 cron:已成功的会被自动跳过, +/// 但"未确认"批次(超时/未返回)会被反复重试,那是唯一会造成重复提交的场景; /// - 本地调试需要注册时,给特性加 RunOnDevelopment = true(默认 false,避免开发环境误跑真接口)。 /// /// 补传完成后:**删除本文件**并从 scheduled 重新发版(即方案中的"用完即拆")。 @@ -96,12 +106,27 @@ public class SupplementCostUploadJob : BaseJob /// private static readonly List ManuallyUploadedUserCodes = new() { "30011368" }; + /// + /// 【总开关】true = **整体屏蔽**(不取数、不调 JIP、不写库),仅写一行警告日志。 + /// 2026-09-30 补传完成后按运维要求置为 true,防止再次自动上传; + /// 与 的区别:DryRun 仍会取数并打统计日志,Disabled 连取数都不做。 + /// 同样故意声明为 static readonly(非 const),否则 if 之后的代码会被判为"不可达"而报 CS0162。 + /// + private static readonly bool Disabled = true; + public SupplementCostUploadJob(IServiceProvider serviceProvider) : base(serviceProvider) { } protected override async Task RunAsync(IServiceProvider serviceProvider) { + if (Disabled) + { + Logger.LogWarning( + "【补传】本任务已屏蔽(Disabled=true),未执行任何操作。2026-02 补传已于 2026-09-30 完成(13076/13078);若确需重跑,请把 Disabled 改为 false 并重新发版"); + return; + } + var jipApi = serviceProvider.GetService(); var stopwatch = Stopwatch.StartNew();