From d63c5d5b0749c160f1cfa994f2ec03b1baf0095b Mon Sep 17 00:00:00 2001 From: zhaoyun Date: Thu, 28 May 2026 23:33:21 +0800 Subject: [PATCH] =?UTF-8?q?fix(#582):=20=E8=AF=B7=E4=BF=AE=E5=A4=8D=20Bug?= =?UTF-8?q?=20#582=EF=BC=9A[=E4=BD=8F=E9=99=A2=E5=8C=BB=E7=94=9F=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E7=AB=99-=E6=89=8B=E6=9C=AF=E7=94=B3=E8=AF=B7]=20?= =?UTF-8?q?=E6=89=8B=E6=9C=AF=E7=94=B3=E8=AF=B7=E5=8D=95=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E5=90=8E=E7=94=9F=E6=88=90=E7=9A=84=E6=89=8B=E6=9C=AF=E5=8D=95?= =?UTF-8?q?=E5=8F=B7=E5=89=8D=E7=BC=80=E9=94=99=E8=AF=AF=E5=A5=97=E7=94=A8?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E5=8D=95=E5=89=8D=E7=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: - 手术申请单保存时,`RequestFormManageAppServiceImpl.saveRequestForm()` 方法**硬编码**使用 `"JCZ"` 前缀和 `AssignSeqEnum.CHECK_APPLY_NO`,没有根据传入的 `typeCode` 区分申请单类型。 - Controller 中虽然 `saveSurgeryRequestForm` 正确传入了 `ActivityDefCategory.PROCEDURE.getCode()` (`"24"`),但 Service 层忽略了这个参数,导致手术申请单号也生成为 `JCZ` 前缀。 - ### 修改的文件(2 个) - 1. `openhis-common/.../enums/AssignSeqEnum.java`** - 新增 `SURGERY_APPLY_NO("73", "手术申请单号", "SSZ")` 枚举 - 2. `openhis-application/.../impl/RequestFormManageAppServiceImpl.java`** - 原代码(第158-161行)硬编码 `JCZ` 前缀 - 改为根据 `typeCode` 动态选择: - `PROCEDURE`(手术)→ 使用 `SSZ` 前缀,通过 `SURGERY_APPLY_NO` 独立计流水号 - 其他类型(检查等)→ 保持原有 `JCZ` 前缀不变 - ### 全链路验证 - | 环节 | 状态 | - |---|---| - | 录入(前端手术申请) | ✅ 前端调用 `/reg-doctorstation/request-form/save-surgery` | - | 保存(Controller → Service) | ✅ `typeCode = "24"` 传入,Service 根据此值选择前缀 | - | 单号生成 | ✅ `SSZ + yyMMdd + 5位流水号`,与检查流水号独立隔离 | - | 查询/展示 | ✅ 无影响,`prescriptionNo` 字段结构一致 | - | 修改/删除 | ✅ 无影响,编辑时复用已有单号 | - | 关联模块 | ✅ 无影响(下游仅按 `prescriptionNo` 做关联查询) | - ### 注意事项 - 手术申请单的日流水号与检查申请完全隔离(Redis key 分别为 `assign-seq:SSZ:{date}` 和 `assign-seq:JCZ:{date}`),互不干扰。 修复: - Bug #582 --- .../appservice/impl/RequestFormManageAppServiceImpl.java | 9 ++++++--- .../java/com/openhis/common/enums/AssignSeqEnum.java | 4 ++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java index a3f653048..eb7841ebc 100755 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/regdoctorstation/appservice/impl/RequestFormManageAppServiceImpl.java @@ -155,10 +155,13 @@ public class RequestFormManageAppServiceImpl implements IRequestFormManageAppSer return R.fail("无待签发的医嘱,该申请单不可编辑"); } } else { - // 检查申请单号:JC(检查)+ Z(住院标识)+ yyMMdd(日期)+ 5位顺序号 + // 根据申请单类型生成不同前缀的单号 String dateStr = new java.text.SimpleDateFormat("yyMMdd").format(new Date()); - int seq = assignSeqUtil.getSeqNoByDay(AssignSeqEnum.CHECK_APPLY_NO.getPrefix()); - prescriptionNo = "JCZ" + dateStr + String.format("%05d", seq); + AssignSeqEnum seqEnum = ActivityDefCategory.PROCEDURE.getCode().equals(typeCode) + ? AssignSeqEnum.SURGERY_APPLY_NO + : AssignSeqEnum.CHECK_APPLY_NO; + int seq = assignSeqUtil.getSeqNoByDay(seqEnum.getPrefix()); + prescriptionNo = seqEnum.getPrefix() + dateStr + String.format("%05d", seq); } // 当前时间 diff --git a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/AssignSeqEnum.java b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/AssignSeqEnum.java index 3df82c5aa..568ef6708 100755 --- a/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/AssignSeqEnum.java +++ b/openhis-server-new/openhis-common/src/main/java/com/openhis/common/enums/AssignSeqEnum.java @@ -274,6 +274,10 @@ public enum AssignSeqEnum { * 检查申请单号(住院) */ CHECK_APPLY_NO("72", "检查申请单号", "JCZ"), + /** + * 手术申请单号(住院) + */ + SURGERY_APPLY_NO("73", "手术申请单号", "SSZ"), /** * b 病历文书 */