本文引用的文件
本文件围绕“批量更新Jx数据作业(BatchUpdateJXDataJob)”进行系统化技术文档梳理,覆盖其职责、执行流程、数据来源、关键算法、错误处理、性能特征与运维建议。该作业负责从IPEasy批量报表与网页抓取两种渠道获取绩效数据,对当月未结算且非特定前缀的绩效事项进行批量匹配与更新,并在字段变更时触发点数重算或仅保存更新。
graph TB
subgraph "API服务"
C["SystemDataController<br/>触发作业"]
P["Program<br/>Quartz调度"]
Q["QuartzUtil<br/>作业注册/触发器"]
end
subgraph "作业"
J["BatchUpdateJXDataJob<br/>批量更新Jx数据"]
UJ["UpdateJXDataFromIPEasyJob<br/>单条/批量抓取"]
end
subgraph "数据源"
IP["IPEasyUtility<br/>报表下载/网页抓取"]
DB["数据库<br/>PerformanceItem等"]
end
C --> J
P --> Q
Q --> J
J --> IP
J --> DB
UJ --> IP
UJ --> DB
图表来源
章节来源
章节来源
作业执行链路:
sequenceDiagram
participant Client as "客户端/调用方"
participant Ctrl as "SystemDataController"
participant Job as "BatchUpdateJXDataJob"
participant Util as "IPEasyUtility"
participant DB as "数据库"
Client->>Ctrl : 调用 UpdateJXData()
Ctrl->>Job : 异步执行 Execute()
Job->>DB : 查询当月待更新的绩效事项
Job->>Util : 下载报表1上月完成案件
Util-->>Job : 返回DataTable
Job->>Util : 下载报表2中国一次OA授权表
Util-->>Job : 返回DataTable
Job->>Job : 构建“案号|处理事项”字典索引
loop 逐条处理
Job->>DB : 匹配DataRow或单条抓取
Job->>Util : 单条抓取网页抓取
Util-->>Job : 返回动态对象
Job->>DB : 更新字段并判断是否保存/重算
end
Job-->>Client : 日志与统计输出
图表来源
flowchart TD
Start(["开始 Execute"]) --> LoadItems["筛选当月待更新记录"]
LoadItems --> HasItems{"是否有待更新记录?"}
HasItems --> |否| End(["结束"])
HasItems --> |是| Download1["下载报表1"]
Download1 --> Download2["下载报表2"]
Download2 --> BuildIndex["构建案号|处理事项索引"]
BuildIndex --> Loop["逐条处理"]
Loop --> Match{"批量匹配成功?"}
Match --> |是| UpdateFromRow["从DataRow更新字段"]
Match --> |否| SingleFetch["单条抓取最多重试3次"]
UpdateFromRow --> Changed{"字段是否变更?"}
SingleFetch --> Changed
Changed --> |是| Refresh["刷新点数或保存"]
Changed --> |否| Next["继续下一条"]
Refresh --> Next
Next --> Loop
Loop --> Stats["输出统计与日志"]
Stats --> End
图表来源
章节来源
classDiagram
class IPEasyUtility {
+DownloadReport(reportName, isModifyDate) DataTable
+GetPerformanceRecord(caseNo, doItem, caseStage) dynamic
-CreateChromeDriver(downloadPath) ChromeDriver
-Login(driver, wait) void
-WaitForFileDownload(dir, timeout) string
}
图表来源
章节来源
erDiagram
PERFORMANCE_ITEM {
int Id PK
string CaseNo
string DoItem
string CaseStage
string CaseCoefficient
string DoItemCoefficient
int? ReviewerId
int? ExternalHandlerId
string ApplicationType
string CaseType
int? WordCount
double? BasePoint
string AgentFeedbackMemo
}
图表来源
章节来源
章节来源
graph LR
J["BatchUpdateJXDataJob"] --> Q["QuartzUtil"]
J --> U["IPEasyUtility"]
J --> E["EF Core/DbContext"]
E --> P["PerformanceItem"]
J --> C["PerformanceItemController"]
Q --> S["Program"]
S --> A["appsettings.json"]
图表来源
章节来源
[本节为通用性能讨论,无需列出具体文件来源]
章节来源
BatchUpdateJXDataJob 通过“批量报表匹配+单条网页抓取”的双通道策略,高效地对当月绩效事项进行数据更新,并在字段变更时智能决定是否重算点数。结合 Quartz 的定时调度与完善的日志统计,该作业具备良好的稳定性与可观测性。建议在生产环境中持续监控日志与报表可用性,确保更新质量与系统健康。
[本节为总结性内容,无需列出具体文件来源]
章节来源