From a33229b5e14a6ea6ff0554f6fe5881f7f55b4d2c Mon Sep 17 00:00:00 2001 From: Msystech Date: Wed, 19 Aug 2026 18:57:12 +0900 Subject: [PATCH] =?UTF-8?q?ETC=5F=EC=A0=91=EC=86=8D=EC=9C=A0=EC=A0=80=5F?= =?UTF-8?q?=EB=B6=80=EC=84=9C=EB=B2=88=ED=98=B8=20=E2=80=94=20164=EC=A2=85?= =?UTF-8?q?=20=E2=86=92=20165=EC=A2=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 이름은 "부서번호"지만 값은 로그인 사용자 부서의 전화번호다 (bzDataInterface.vb:17287-17313 — M_DepMst.DepTelNum, SYSDATE 기준 M_UidMst 조인). 우리 로그인 조회가 이미 같은 시점·같은 조인으로 부서 행을 붙이고 있어 컬럼 하나(NVL(d.DepTelNum,' '))만 얹었다 — 왕복이 늘지 않는다. HisUser.DepPhone → UserField.DepPhone. - dotnet test 338/338 · --edit-smoke 실패 0 - --db-patient ①~㉞ 전건 통과 - --db-render P062 md5 8d683835f5d81e7bb41c79071d6bf954 불변 Co-Authored-By: Claude Fable 5 --- src/SheetMe.Core/Catalog/TagPreviewCatalog.cs | 12 ++++++++++-- src/SheetMe.Data/Stores/UserContextStore.cs | 10 +++++++--- src/SheetMe.Designer/Services/SessionTagResolver.cs | 3 ++- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/SheetMe.Core/Catalog/TagPreviewCatalog.cs b/src/SheetMe.Core/Catalog/TagPreviewCatalog.cs index 9e43c99..3ab162a 100644 --- a/src/SheetMe.Core/Catalog/TagPreviewCatalog.cs +++ b/src/SheetMe.Core/Catalog/TagPreviewCatalog.cs @@ -76,6 +76,8 @@ public static class TagPreviewCatalog ["ETC_로그인_직종"] = UserField.Job, ["ETC_로그인_근무부서"] = UserField.Department, ["ETC_로그인_근무부서_사용자명"] = UserField.DepartmentAndName, + // 이름은 "부서번호"지만 값은 부서 전화번호다(bzDataInterface.vb:17287-17313 — DepTelNum) + ["ETC_접속유저_부서번호"] = UserField.DepPhone, }; /// @@ -204,9 +206,14 @@ public static class TagPreviewCatalog public static string FromUser(string tag, string id, string name, string mobile, string office) => FromUser(tag, id, name, mobile, office, string.Empty, string.Empty, string.Empty, string.Empty); - /// 로그인 사용자 정보에서 — 면허·전문의·직종·부서까지 받는 본판 + /// 9-인자판 — 부서 전화번호가 없던 시절의 호출부를 위해 위임 public static string FromUser(string tag, string id, string name, string mobile, string office, string license, string specialist, string job, string depName) + => FromUser(tag, id, name, mobile, office, license, specialist, job, depName, string.Empty); + + /// 로그인 사용자 정보에서 — 면허·전문의·직종·부서·부서전화까지 받는 본판 + public static string FromUser(string tag, string id, string name, string mobile, string office, + string license, string specialist, string job, string depName, string depPhone) { if (!UserTags.TryGetValue(tag, out var field)) { @@ -228,12 +235,13 @@ public static class TagPreviewCatalog // 레거시(:17101)는 NVL(DepOfcNam,DepKorNam)||'-'||UidNam — 개원일 미상 결정으로 한글명 고정. // 레거시는 UidNam 으로 걸러 동명이인에서 남의 부서가 나올 수 있는데 여기는 세션 사용자 행이라 결정적이다. UserField.DepartmentAndName => depName.Length > 0 || name.Length > 0 ? $"{depName}-{name}" : string.Empty, + UserField.DepPhone => depPhone, _ => string.Empty, }; } private enum ClockFormat { Date, DateTime, DateTimeMask, DateEnglish, Year, YearSuffixed, Month, Day, Hour, Minute, Time } - private enum UserField { Name, Id, IdAndName, MobilePhone, OfficePhone, License, Specialist, Job, Department, DepartmentAndName } + private enum UserField { Name, Id, IdAndName, MobilePhone, OfficePhone, License, Specialist, Job, Department, DepartmentAndName, DepPhone } #endregion } diff --git a/src/SheetMe.Data/Stores/UserContextStore.cs b/src/SheetMe.Data/Stores/UserContextStore.cs index fc3da00..43ed2f0 100644 --- a/src/SheetMe.Data/Stores/UserContextStore.cs +++ b/src/SheetMe.Data/Stores/UserContextStore.cs @@ -19,7 +19,9 @@ public sealed record HisUser( /// 전문의번호(UidSpcLic) — ETC_로그인_전문의번호 string SpecialistNumber = "", /// 직종명(M_DtsMst JOBCOD 의 DtsCodNam) — ETC_로그인_직종 - string JobName = "") + string JobName = "", + /// 부서 전화번호(M_DepMst.DepTelNum) — ETC_접속유저_부서번호(이름과 달리 전화번호다) + string DepPhone = "") { /// 미인증 세션(인자 없이 단독 실행) — DB 쓰기가 차단된다 public static readonly HisUser Unknown = new(string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty); @@ -78,7 +80,8 @@ public sealed class UserContextStore " NVL(u.UidDepCod,' '), NVL(d.DepKorNam,' '), " + " NVL(u.UidHspCod,' '), NVL(h.HspInsNam,' '), " + " NVL(u.UidDtrYon,' '), NVL(d.DepOfcNam,' '), " + - " NVL(u.UidLicNum,' '), NVL(u.UidSpcLic,' '), NVL(j.DtsCodNam,' ') " + + " NVL(u.UidLicNum,' '), NVL(u.UidSpcLic,' '), NVL(j.DtsCodNam,' '), " + + " NVL(d.DepTelNum,' ') " + "FROM M_UidMst u " + "LEFT JOIN M_DepMst d ON d.DepCod = u.UidDepCod " + " AND TO_CHAR(SYSDATE,'YYYYMMDD') BETWEEN d.DepStrDte AND d.DepEndDte " + @@ -101,7 +104,8 @@ public sealed class UserContextStore reader.GetString(2).Trim(), reader.GetString(3).Trim(), reader.GetString(4).Trim(), reader.GetString(5).Trim(), reader.GetString(6).Trim(), reader.GetString(7).Trim(), - reader.GetString(8).Trim(), reader.GetString(9).Trim(), reader.GetString(10).Trim()); + reader.GetString(8).Trim(), reader.GetString(9).Trim(), reader.GetString(10).Trim(), + reader.GetString(11).Trim()); } #endregion } diff --git a/src/SheetMe.Designer/Services/SessionTagResolver.cs b/src/SheetMe.Designer/Services/SessionTagResolver.cs index 810fc6f..c7e89a6 100644 --- a/src/SheetMe.Designer/Services/SessionTagResolver.cs +++ b/src/SheetMe.Designer/Services/SessionTagResolver.cs @@ -60,7 +60,8 @@ public sealed class SessionTagResolver : ITagValueResolver : TagPreviewCatalog.FromUser(tag, ready.UidCod, ready.UidNam, ready.MobilePhone, ready.OfficePhone, UserSession.Current.LicenseNumber, UserSession.Current.SpecialistNumber, - UserSession.Current.JobName, UserSession.Current.DepNam); + UserSession.Current.JobName, UserSession.Current.DepNam, + UserSession.Current.DepPhone); return value.Length > 0 ? new TagValue(true, value) : new TagValue(false, ready.HasClock ? "이 계정에는 값이 비어 있습니다" : "값을 읽지 못했습니다");