屏蔽 2月份补传
This commit is contained in:
@@ -43,11 +43,21 @@ namespace Dlhis.ScheduledTask.Jobs;
|
|||||||
/// 2. 手工已补传但未回写上传记录的工号必须排除,见 <see cref="ManuallyUploadedUserCodes"/>。
|
/// 2. 手工已补传但未回写上传记录的工号必须排除,见 <see cref="ManuallyUploadedUserCodes"/>。
|
||||||
/// 3. 上报金额沿用原任务写法(<c>Math.Abs(合计)</c>,未做 ROUND),与现网行为一致,勿擅自改成保留 2 位。
|
/// 3. 上报金额沿用原任务写法(<c>Math.Abs(合计)</c>,未做 ROUND),与现网行为一致,勿擅自改成保留 2 位。
|
||||||
///
|
///
|
||||||
/// 执行方式(cron = "0 0 0 1 1 ?",仅兜底,**必须手动触发一次,不会自动跑**):
|
/// 当前状态(2026-09-30 更新):**2 月补传已完成,本任务已屏蔽**
|
||||||
/// - 触发入口:**https://face.jinkosolar.com/hangfire/**(走 ingress,NodePort 31005 的 /hangfire 是 404)
|
/// - 执行结果:待补传 13,078 人 → 成功写入 13,076 人(7,893 + 13,076 = 20,969,与库内计数一致);
|
||||||
/// → Recurring Jobs → "【临时】2026-02消费费用补传" → Trigger now;
|
/// 未写入 2 人:`30002488`(23.20 元,JIP 未返回 S,待财务在 SAP 侧确认)、`WB-1091`(0.70 元,本地测试工号);
|
||||||
/// - 不要改成"每天/每小时"这类会反复命中的 cron:已成功的虽会被自动跳过,
|
/// 另有 `30011368`(388.00 元) 系 2026-03 用 Postman 手工补传、未回写平台记录(JIP 侧已有,无需处理)。
|
||||||
/// 但"未确认"批次会被重复提交(HCM_0015_INSERT 幂等语义未确认);
|
/// - 屏蔽方式:<see cref="Disabled"/> = 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,避免开发环境误跑真接口)。
|
/// - 本地调试需要注册时,给特性加 RunOnDevelopment = true(默认 false,避免开发环境误跑真接口)。
|
||||||
///
|
///
|
||||||
/// 补传完成后:**删除本文件**并从 scheduled 重新发版(即方案中的"用完即拆")。
|
/// 补传完成后:**删除本文件**并从 scheduled 重新发版(即方案中的"用完即拆")。
|
||||||
@@ -96,12 +106,27 @@ public class SupplementCostUploadJob : BaseJob
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private static readonly List<string> ManuallyUploadedUserCodes = new() { "30011368" };
|
private static readonly List<string> ManuallyUploadedUserCodes = new() { "30011368" };
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 【总开关】true = **整体屏蔽**(不取数、不调 JIP、不写库),仅写一行警告日志。
|
||||||
|
/// 2026-09-30 补传完成后按运维要求置为 true,防止再次自动上传;
|
||||||
|
/// 与 <see cref="DryRun"/> 的区别:DryRun 仍会取数并打统计日志,Disabled 连取数都不做。
|
||||||
|
/// 同样故意声明为 static readonly(非 const),否则 if 之后的代码会被判为"不可达"而报 CS0162。
|
||||||
|
/// </summary>
|
||||||
|
private static readonly bool Disabled = true;
|
||||||
|
|
||||||
public SupplementCostUploadJob(IServiceProvider serviceProvider) : base(serviceProvider)
|
public SupplementCostUploadJob(IServiceProvider serviceProvider) : base(serviceProvider)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override async Task RunAsync(IServiceProvider 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<IJinkoJipApi>();
|
var jipApi = serviceProvider.GetService<IJinkoJipApi>();
|
||||||
var stopwatch = Stopwatch.StartNew();
|
var stopwatch = Stopwatch.StartNew();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user