fix(emr): 修复医生账号无权限访问电子病历管理

- 将EMR模块权限从 inpatient:emr 改为通用的 emr 权限
- 添加EMR数据同步菜单
- 为医生角色添加EMR相关权限
This commit is contained in:
2026-06-21 09:44:59 +08:00
parent c285c1ba5e
commit 732e4f5ffd
6 changed files with 63 additions and 16 deletions

View File

@@ -21,7 +21,7 @@ public class EmrCompletenessController {
private final IEmrCompletenessAppService emrCompletenessAppService;
@PostMapping("/check")
@PreAuthorize("@ss.hasPermi('inpatient:emr:edit')")
@PreAuthorize("@ss.hasPermi('emr:edit')")
@Operation(summary = "执行病历完整性检查")
public R<Map<String, Object>> checkCompleteness(
@RequestParam("emrId") Long emrId,
@@ -30,7 +30,7 @@ public class EmrCompletenessController {
}
@GetMapping("/results/{emrId}")
@PreAuthorize("@ss.hasPermi('inpatient:emr:list')")
@PreAuthorize("@ss.hasPermi('emr:list')")
@Operation(summary = "获取完整性检查结果")
public R<?> getCheckResults(@PathVariable Long emrId) {
return R.ok(emrCompletenessAppService.getCheckResults(emrId));

View File

@@ -23,28 +23,28 @@ public class EmrDataWarehouseController {
private final IEmrDataWarehouseAppService emrDataWarehouseAppService;
@PostMapping("/extract")
@PreAuthorize("@ss.hasPermi('infection:emr:edit')")
@PreAuthorize("@ss.hasPermi('emr:edit')")
@Operation(summary = "提取结构化数据")
public R<List<EmrStructuredData>> extractStructuredData(@RequestParam("emrId") Long emrId) {
return R.ok(emrDataWarehouseAppService.extractStructuredData(emrId));
}
@GetMapping("/data/{encounterId}")
@PreAuthorize("@ss.hasPermi('infection:emr:list')")
@PreAuthorize("@ss.hasPermi('emr:list')")
@Operation(summary = "查询结构化数据")
public R<List<EmrStructuredData>> getStructuredData(@PathVariable Long encounterId) {
return R.ok(emrDataWarehouseAppService.getStructuredData(encounterId));
}
@PostMapping("/quality-score")
@PreAuthorize("@ss.hasPermi('infection:emr:edit')")
@PreAuthorize("@ss.hasPermi('emr:edit')")
@Operation(summary = "计算质控评分")
public R<EmrQualityScore> calculateQualityScore(@RequestParam("encounterId") Long encounterId) {
return R.ok(emrDataWarehouseAppService.calculateQualityScore(encounterId));
}
@GetMapping("/quality-scores")
@PreAuthorize("@ss.hasPermi('infection:emr:list')")
@PreAuthorize("@ss.hasPermi('emr:list')")
@Operation(summary = "查询质控评分列表")
public R<List<EmrQualityScore>> getQualityScores(@RequestParam("encounterId") Long encounterId) {
return R.ok(emrDataWarehouseAppService.getQualityScores(encounterId));

View File

@@ -30,21 +30,21 @@ public class EmrRevisionController {
private final IEmrRevisionAppService emrRevisionAppService;
@PostMapping("/record")
@PreAuthorize("@ss.hasPermi('inpatient:emr:edit')")
@PreAuthorize("@ss.hasPermi('emr:edit')")
@Operation(summary = "记录修改留痕")
public R<EmrRevision> recordRevision(@RequestBody EmrRevision revision) {
return R.ok(emrRevisionAppService.recordRevision(revision));
}
@GetMapping("/list/{emrId}")
@PreAuthorize("@ss.hasPermi('inpatient:emr:list')")
@PreAuthorize("@ss.hasPermi('emr:list')")
@Operation(summary = "获取修改历史列表")
public R<?> getRevisions(@PathVariable Long emrId) {
return R.ok(emrRevisionAppService.getRevisions(emrId));
}
@GetMapping("/page")
@PreAuthorize("@ss.hasPermi('inpatient:emr:list')")
@PreAuthorize("@ss.hasPermi('emr:list')")
@Operation(summary = "分页查询修改留痕")
public R<?> getPage(
@RequestParam(value = "emrId", required = false) Long emrId,
@@ -61,14 +61,14 @@ public class EmrRevisionController {
}
@GetMapping("/{id}")
@PreAuthorize("@ss.hasPermi('inpatient:emr:list')")
@PreAuthorize("@ss.hasPermi('emr:list')")
@Operation(summary = "获取修订详情")
public R<?> getById(@PathVariable Long id) {
return R.ok(emrRevisionAppService.getRevisionDetail(id));
}
@GetMapping("/compare")
@PreAuthorize("@ss.hasPermi('inpatient:emr:list')")
@PreAuthorize("@ss.hasPermi('emr:list')")
@Operation(summary = "对比两个修订版本")
public R<?> compareRevisions(
@RequestParam("revisionId1") Long id1,

View File

@@ -23,7 +23,7 @@ public class EmrTimelinessController {
private final IEmrTimelinessAppService emrTimelinessAppService;
@PostMapping("/check")
@PreAuthorize("@ss.hasPermi('inpatient:emr:edit')")
@PreAuthorize("@ss.hasPermi('emr:edit')")
@Operation(summary = "执行病历时限检查")
public R<EmrTimelinessStatisticsDto> checkTimeliness(
@RequestParam(value = "encounterId", required = false) Long encounterId) {
@@ -31,7 +31,7 @@ public class EmrTimelinessController {
}
@GetMapping("/alerts")
@PreAuthorize("@ss.hasPermi('inpatient:emr:list')")
@PreAuthorize("@ss.hasPermi('emr:list')")
@Operation(summary = "获取病历时限提醒列表")
public R<Map<String, Object>> getTimelinessAlerts(
@RequestParam(value = "emrType", required = false) String emrType,

View File

@@ -20,21 +20,21 @@ public class EmrVersionController {
private final IEmrVersionAppService emrVersionAppService;
@PostMapping("/save")
@PreAuthorize("@ss.hasPermi('inpatient:emr:edit')")
@PreAuthorize("@ss.hasPermi('emr:edit')")
@Operation(summary = "保存病历版本")
public R<EmrVersion> saveVersion(@RequestBody EmrVersion version) {
return R.ok(emrVersionAppService.saveVersion(version));
}
@GetMapping("/list/{emrId}")
@PreAuthorize("@ss.hasPermi('inpatient:emr:list')")
@PreAuthorize("@ss.hasPermi('emr:list')")
@Operation(summary = "获取病历版本列表")
public R<?> getVersions(@PathVariable Long emrId) {
return R.ok(emrVersionAppService.getVersions(emrId));
}
@GetMapping("/compare")
@PreAuthorize("@ss.hasPermi('inpatient:emr:list')")
@PreAuthorize("@ss.hasPermi('emr:list')")
@Operation(summary = "对比两个版本")
public R<?> compareVersions(
@RequestParam("versionId1") Long versionId1,

View File

@@ -0,0 +1,47 @@
-- V101__add_emr_sync_menu_and_permissions.sql
-- 添加EMR数据同步菜单和医生权限
-- 1. 添加EMR数据同步菜单在电子病历管理下
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
VALUES (
'EMR数据同步',
(SELECT menu_id FROM sys_menu WHERE menu_name = '电子病历管理' LIMIT 1),
99,
'sync',
'emr/sync/index',
'C',
'0',
'0',
'emr:sync:list',
'upload',
'admin',
NOW(),
'admin',
NOW(),
'EMR数据同步 - 从病历表同步数据到修订历史和搜索索引'
);
-- 2. 为医生角色添加EMR权限
-- 获取医生角色ID假设角色名为'医生'或'doctor'
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT
r.role_id,
m.menu_id
FROM sys_role r
CROSS JOIN sys_menu m
WHERE r.role_name IN ('医生', 'doctor', '门诊医生', '住院医生')
AND m.perms IN (
'emr:list',
'emr:edit',
'emr:sync:list'
)
AND NOT EXISTS (
SELECT 1 FROM sys_role_menu rm
WHERE rm.role_id = r.role_id AND rm.menu_id = m.menu_id
);
-- 3. 更新EMR相关菜单的权限将inpatient:emr改为emr
UPDATE sys_menu SET perms = 'emr:list' WHERE perms = 'inpatient:emr:list';
UPDATE sys_menu SET perms = 'emr:edit' WHERE perms = 'inpatient:emr:edit';
UPDATE sys_menu SET perms = 'emr:list' WHERE perms = 'infection:emr:list';
UPDATE sys_menu SET perms = 'emr:edit' WHERE perms = 'infection:emr:edit';