HisPopup.tsx(HIS 弹框)已上线,主表通过 02010108 QueryLatestWarningByPatient 聚合展示"每患者每类型最新一条"预警;02010104 ProcessWarning,仅更新单条 warningId;BS_DRGWarningRecord 表字段:FixmedinsCode / HISAdmID / PatientName / WarningType / WarningDate / WarningTime / WarningStatus / ProcessUser_Dr / ProcessDate / ProcessTime / ProcessRemark,已具备按"机构+就诊+类型+日期"批量定位的数据基础。02010104 处理逻辑(第 736–797 行):按 warningId 打开对象 → 状态映射(processed→02 已确认、ignored→03 已忽略)→ 写入处理人/日期/时间/原因 → %Save;CB_MapInterface 接口注册规范;02010104(warningId / processStatus / processRemark),友好兼容;02010104 的状态映射与处理字段;Center.tsx 行为不变;Goals:
02010109,以被处理记录为锚点,批量更新"当日 + 同机构 + 同就诊(HISAdmID) + 同类型(WarningType)"的全部待处理记录;result.updatedCount,供前端提示;HisPopup 处理提交切换至 02010109,刷新主表并提示同步条数。Non-Goals:
BS_DRGWarningRecord 表结构;02010104 既有逻辑(Center.tsx 仍可用);02010109BatchProcessWarningByDay{"params":[{"warningId":"<锚点ID>","processStatus":"processed|ignored","processRemark":""}], "session":[{...}]}处理流程:
warningId 非空,打开锚点记录;不存在则返回 -2;FixmedinsCode、HISAdmID、WarningType、WarningDate;processed→02、ignored→03,兼容中文"已确认/已忽略"及原始码;%SYS.Transaction;执行批量更新 SQL:
UPDATE BS_DRGWarningRecord
SET WarningStatus = :targetStatus,
ProcessUser_Dr = :userID,
ProcessDate = :procDate,
ProcessTime = :procTime,
ProcessRemark = :processRemark
WHERE FixmedinsCode = :fixmedinsCode
AND HISAdmID = :hisAdmId
AND WarningType = :warningType
AND WarningDate = :warningDate
AND WarningStatus = '01' -- 仅更新待处理,保护已处理记录
%ROWCOUNT 取影响行数 → result.updatedCount;-3。{errorCode:"0", errorMessage:"处理成功", result:{updatedCount:N}}02010104 被 Center.tsx 监控中心使用,需保留单条处理语义;02010109 复用同一状态映射与写库字段,逻辑不重复、行为可控。frontend/src/api/warning.ts:
ts
export const batchProcessWarningByDay = (
id: string | number,
processType: 'processed' | 'ignored',
processRemark: string,
) => invoke('02010109', [{ warningId: id, processStatus: processType, processRemark }]);
HisPopup.tsx:handleSubmitEdit 中将 processWarning(record.id, processType, processRemark) 替换为 batchProcessWarningByDay(record.id, processType, processRemark);成功提示改为 已处理,当日同类共同步 N 条;其余(关闭 Drawer、loadData 刷新、失败保留)逻辑不变。
request.ts getMockResponse 追加 02010109 分支:{errorCode:"0", errorMessage:"(dev) 处理成功", result:{updatedCount:2}}。
Modal 内、处理备注上方,新增「处理方式范围」单选组(Radio.Group),选项:
single:仅处理当前这一条预警(默认选中),走 02010104 ProcessWarning;batch:批量处理当日同患者同类型预警,走 02010109 BatchProcessWarningByDay。const [processScope, setProcessScope] = useState<'single' | 'batch'>('single');打开弹框 handleProcess 时重置为 'single'。batch 时,调用 queryLatestWarningByPatient 或 queryWarningRecords 以锚点记录的 fixmedinsCode / hisAdmId / warningType / warningDate + warningStatus='01' 预查,展示 Alert 提示"将同步处理当日同类 N 条预警(含本条)";预查失败不阻断提交,仅不显示条数。submitProcess 改造:
```ts
const api = processScope === 'batch'
? batchProcessWarningByDay(currentRecord.id, processType, values.processRemarks || '')
: processWarning(currentRecord.id, processType, values.processRemarks || '');
const res: any = await api;
if (res.errorCode === '0') {
const cnt = res.result?.updatedCount;
const extra = processScope === 'batch' && cnt ? ,当日同类共同步 ${cnt} 条 : '';
message.success((processType === 'processed' ? '已确认处理' : '已忽略该预警') + extra);
setProcessModalVisible(false);
loadData();
} else {
message.error(res.errorMessage || '处理失败');
}
```
Center.tsx 既有监控中心用法)。CB_MapInterface 新增:Code='02010109'、ClassName='src.DRG.Warning'、MethodName='BatchProcessWarningByDay'、InterfaceName='当日同患者同类型预警批量处理'、IsActive='Y'。| 风险 | 缓解措施 |
|---|---|
| 事务内批量更新失败导致部分写库 | %SYS.Transaction + 异常回滚,返回 -3 不刷新主表 |
| 误更新非当日/非同类记录 | WHERE 精确锁定 4 个维度(fixmedinsCode+HISAdmID+WarningType+WarningDate) |
| 覆盖已处理记录 | 仅 WarningStatus='01' 待处理参与更新 |
| 锚点记录本身已非待处理 | 即便锚点已处理,WHERE 条件仍会正确更新其余待处理同类记录,updatedCount 如实反映 |
| HIS 端调用无感 | 仅前端提交入口切换,HIS 调用方无需改动 |
src.DRG.Warning.cls 与 src.DRG.Warning/1.int;执行 SQL 插入 CB_MapInterface 02010109。warning.ts、HisPopup.tsx、request.ts;npm run build 部署到 Nginx。CB_MapInterface 02010109 记录可停用接口;前端回退 HisPopup 提交至 processWarning 即可恢复单条模式。WarningDate 使用"锚点记录本身的预警日期"作为当日判定基准(推荐),无需前端额外传日期;