fix: 修复测试发现的 7 个问题 + 全 workspace clippy 清零
功能修复: 1. 患者创建空名称验证:后端添加 name.trim().is_empty() 检查 2. 仪表盘统计容错:单个查询失败返回零值而非 500 3. FHIR 路由修复:从 /fhir 移到 /api/v1/fhir 保持一致 4. 冻结模块后端中间件:新增 frozen_module_middleware 拦截冻结路径 5. 积分端点权限码:health.health-data.list → health.points.list 6. 角色权限迁移:护士补充 devices.list,运营补充 points.list/manage 7. 测试结果文档:R01-R05 角色测试 + T00/T10 结果归档 Clippy 全 workspace 清零(14→0 errors): - erp-core: 修复 empty doc line、collapsible if、redundant closure 等 9 处 - erp-health: 修复 too_many_arguments、unused var、unnecessary parens 等 58 处 - erp-ai: 修复 dead_code、unused import 等 11 处 - erp-plugin: 修复 too_many_arguments、wildcard pattern 等 11 处 - erp-server-migration: 修复 enum_variant_names 5 处 - erp-auth/config/workflow/message: 各 1-3 处 工程改进: - lint-staged 配置迁移到 .lintstagedrc.js(函数式避免文件列表传给 clippy) - cargo fmt 统一格式化
This commit is contained in:
@@ -31,7 +31,8 @@ fn followup_nodes() -> Vec<serde_json::Value> {
|
||||
{"id": "gw_outcome", "type": "ExclusiveGateway", "name": "审批结果"},
|
||||
{"id": "end_approved", "type": "EndEvent", "name": "已批准"},
|
||||
{"id": "end_rejected", "type": "EndEvent", "name": "已拒绝"}
|
||||
])).unwrap()
|
||||
]))
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
fn followup_edges() -> Vec<serde_json::Value> {
|
||||
@@ -46,7 +47,8 @@ fn followup_edges() -> Vec<serde_json::Value> {
|
||||
"condition": "outcome == \"approved\"", "label": "批准"},
|
||||
{"id": "e6", "source": "gw_outcome", "target": "end_rejected",
|
||||
"condition": "outcome == \"rejected\"", "label": "拒绝"}
|
||||
])).unwrap()
|
||||
]))
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
/// AI 预约审批流程
|
||||
@@ -60,7 +62,8 @@ fn appointment_nodes() -> Vec<serde_json::Value> {
|
||||
{"id": "gw_outcome", "type": "ExclusiveGateway", "name": "确认结果"},
|
||||
{"id": "end_approved", "type": "EndEvent", "name": "已确认"},
|
||||
{"id": "end_rejected", "type": "EndEvent", "name": "已拒绝"}
|
||||
])).unwrap()
|
||||
]))
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
fn appointment_edges() -> Vec<serde_json::Value> {
|
||||
@@ -75,7 +78,8 @@ fn appointment_edges() -> Vec<serde_json::Value> {
|
||||
"condition": "outcome == \"approved\"", "label": "确认"},
|
||||
{"id": "e6", "source": "gw_outcome", "target": "end_rejected",
|
||||
"condition": "outcome == \"rejected\"", "label": "拒绝"}
|
||||
])).unwrap()
|
||||
]))
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
/// AI 预警确认流程
|
||||
@@ -89,7 +93,8 @@ fn alert_nodes() -> Vec<serde_json::Value> {
|
||||
{"id": "gw_outcome", "type": "ExclusiveGateway", "name": "确认结果"},
|
||||
{"id": "end_acknowledged", "type": "EndEvent", "name": "已确认"},
|
||||
{"id": "end_escalated", "type": "EndEvent", "name": "已升级"}
|
||||
])).unwrap()
|
||||
]))
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
fn alert_edges() -> Vec<serde_json::Value> {
|
||||
@@ -104,7 +109,8 @@ fn alert_edges() -> Vec<serde_json::Value> {
|
||||
"condition": "outcome == \"approved\"", "label": "确认"},
|
||||
{"id": "e6", "source": "gw_outcome", "target": "end_escalated",
|
||||
"condition": "outcome == \"rejected\"", "label": "升级"}
|
||||
])).unwrap()
|
||||
]))
|
||||
.unwrap()
|
||||
}
|
||||
|
||||
struct WorkflowTemplate {
|
||||
|
||||
@@ -173,12 +173,23 @@ impl DefinitionService {
|
||||
}
|
||||
// 当 nodes 或 edges 任一存在时,取最终值验证流程图完整性
|
||||
let _final_nodes = req.nodes.as_ref().or_else(|| {
|
||||
serde_json::from_value::<Vec<crate::dto::NodeDef>>(active.nodes.as_ref().clone()).ok().as_ref().map(|_| unreachable!())
|
||||
serde_json::from_value::<Vec<crate::dto::NodeDef>>(active.nodes.as_ref().clone())
|
||||
.ok()
|
||||
.as_ref()
|
||||
.map(|_| unreachable!())
|
||||
});
|
||||
// 简化:如果提供了 nodes 或 edges,将两者合并后验证
|
||||
if req.nodes.is_some() || req.edges.is_some() {
|
||||
let nodes_val = req.nodes.as_ref().map(|n| serde_json::to_value(n).unwrap_or_default()).unwrap_or(active.nodes.as_ref().clone());
|
||||
let edges_val = req.edges.as_ref().map(|e| serde_json::to_value(e).unwrap_or_default()).unwrap_or(active.edges.as_ref().clone());
|
||||
let nodes_val = req
|
||||
.nodes
|
||||
.as_ref()
|
||||
.map(|n| serde_json::to_value(n).unwrap_or_default())
|
||||
.unwrap_or(active.nodes.as_ref().clone());
|
||||
let edges_val = req
|
||||
.edges
|
||||
.as_ref()
|
||||
.map(|e| serde_json::to_value(e).unwrap_or_default())
|
||||
.unwrap_or(active.edges.as_ref().clone());
|
||||
let nodes: Vec<crate::dto::NodeDef> = serde_json::from_value(nodes_val)
|
||||
.map_err(|e| WorkflowError::Validation(format!("节点数据无效: {e}")))?;
|
||||
let edges: Vec<crate::dto::EdgeDef> = serde_json::from_value(edges_val)
|
||||
|
||||
@@ -322,9 +322,9 @@ impl InstanceService {
|
||||
id: Set(event_id),
|
||||
tenant_id: Set(tenant_id),
|
||||
event_type: Set(event_type),
|
||||
payload: Set(Some(
|
||||
erp_core::events::build_event_payload(serde_json::json!({ "instance_id": id, "changed_by": operator_id })),
|
||||
)),
|
||||
payload: Set(Some(erp_core::events::build_event_payload(
|
||||
serde_json::json!({ "instance_id": id, "changed_by": operator_id }),
|
||||
))),
|
||||
correlation_id: Set(Some(Uuid::now_v7())),
|
||||
status: Set("pending".to_string()),
|
||||
attempts: Set(0),
|
||||
|
||||
Reference in New Issue
Block a user