ETC_접속유저_부서번호 — 164종 → 165종

이름은 "부서번호"지만 값은 로그인 사용자 부서의 전화번호다
(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 <noreply@anthropic.com>
This commit is contained in:
Msystech
2026-08-19 18:57:12 +09:00
co-authored by Claude Fable 5
parent 7f147a3012
commit a33229b5e1
3 changed files with 19 additions and 6 deletions
+10 -2
View File
@@ -76,6 +76,8 @@ public static class TagPreviewCatalog
["ETC_로그인_직종"] = UserField.Job, ["ETC_로그인_직종"] = UserField.Job,
["ETC_로그인_근무부서"] = UserField.Department, ["ETC_로그인_근무부서"] = UserField.Department,
["ETC_로그인_근무부서_사용자명"] = UserField.DepartmentAndName, ["ETC_로그인_근무부서_사용자명"] = UserField.DepartmentAndName,
// 이름은 "부서번호"지만 값은 부서 <b>전화번호</b>다(bzDataInterface.vb:17287-17313 — DepTelNum)
["ETC_접속유저_부서번호"] = UserField.DepPhone,
}; };
/// <summary> /// <summary>
@@ -204,9 +206,14 @@ public static class TagPreviewCatalog
public static string FromUser(string tag, string id, string name, string mobile, string office) 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); => FromUser(tag, id, name, mobile, office, string.Empty, string.Empty, string.Empty, string.Empty);
/// <summary>로그인 사용자 정보에서 — 면허·전문의·직종·부서까지 받는 본판</summary> /// <summary>9-인자판 — 부서 전화번호가 없던 시절의 호출부를 위해 위임</summary>
public static string FromUser(string tag, string id, string name, string mobile, string office, public static string FromUser(string tag, string id, string name, string mobile, string office,
string license, string specialist, string job, string depName) string license, string specialist, string job, string depName)
=> FromUser(tag, id, name, mobile, office, license, specialist, job, depName, string.Empty);
/// <summary>로그인 사용자 정보에서 — 면허·전문의·직종·부서·부서전화까지 받는 본판</summary>
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)) if (!UserTags.TryGetValue(tag, out var field))
{ {
@@ -228,12 +235,13 @@ public static class TagPreviewCatalog
// 레거시(:17101)는 NVL(DepOfcNam,DepKorNam)||'-'||UidNam — 개원일 미상 결정으로 한글명 고정. // 레거시(:17101)는 NVL(DepOfcNam,DepKorNam)||'-'||UidNam — 개원일 미상 결정으로 한글명 고정.
// 레거시는 UidNam 으로 걸러 동명이인에서 남의 부서가 나올 수 있는데 여기는 세션 사용자 행이라 결정적이다. // 레거시는 UidNam 으로 걸러 동명이인에서 남의 부서가 나올 수 있는데 여기는 세션 사용자 행이라 결정적이다.
UserField.DepartmentAndName => depName.Length > 0 || name.Length > 0 ? $"{depName}-{name}" : string.Empty, UserField.DepartmentAndName => depName.Length > 0 || name.Length > 0 ? $"{depName}-{name}" : string.Empty,
UserField.DepPhone => depPhone,
_ => string.Empty, _ => string.Empty,
}; };
} }
private enum ClockFormat { Date, DateTime, DateTimeMask, DateEnglish, Year, YearSuffixed, Month, Day, Hour, Minute, Time } 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 #endregion
} }
+7 -3
View File
@@ -19,7 +19,9 @@ public sealed record HisUser(
/// <summary>전문의번호(UidSpcLic) — ETC_로그인_전문의번호</summary> /// <summary>전문의번호(UidSpcLic) — ETC_로그인_전문의번호</summary>
string SpecialistNumber = "", string SpecialistNumber = "",
/// <summary>직종명(M_DtsMst JOBCOD 의 DtsCodNam) — ETC_로그인_직종</summary> /// <summary>직종명(M_DtsMst JOBCOD 의 DtsCodNam) — ETC_로그인_직종</summary>
string JobName = "") string JobName = "",
/// <summary>부서 전화번호(M_DepMst.DepTelNum) — ETC_접속유저_부서번호(이름과 달리 전화번호다)</summary>
string DepPhone = "")
{ {
/// <summary>미인증 세션(인자 없이 단독 실행) — DB 쓰기가 차단된다</summary> /// <summary>미인증 세션(인자 없이 단독 실행) — DB 쓰기가 차단된다</summary>
public static readonly HisUser Unknown = new(string.Empty, string.Empty, string.Empty, string.Empty, string.Empty, string.Empty); 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.UidDepCod,' '), NVL(d.DepKorNam,' '), " +
" NVL(u.UidHspCod,' '), NVL(h.HspInsNam,' '), " + " NVL(u.UidHspCod,' '), NVL(h.HspInsNam,' '), " +
" NVL(u.UidDtrYon,' '), NVL(d.DepOfcNam,' '), " + " 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 " + "FROM M_UidMst u " +
"LEFT JOIN M_DepMst d ON d.DepCod = u.UidDepCod " + "LEFT JOIN M_DepMst d ON d.DepCod = u.UidDepCod " +
" AND TO_CHAR(SYSDATE,'YYYYMMDD') BETWEEN d.DepStrDte AND d.DepEndDte " + " 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(2).Trim(), reader.GetString(3).Trim(),
reader.GetString(4).Trim(), reader.GetString(5).Trim(), reader.GetString(4).Trim(), reader.GetString(5).Trim(),
reader.GetString(6).Trim(), reader.GetString(7).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 #endregion
} }
@@ -60,7 +60,8 @@ public sealed class SessionTagResolver : ITagValueResolver
: TagPreviewCatalog.FromUser(tag, ready.UidCod, ready.UidNam, : TagPreviewCatalog.FromUser(tag, ready.UidCod, ready.UidNam,
ready.MobilePhone, ready.OfficePhone, ready.MobilePhone, ready.OfficePhone,
UserSession.Current.LicenseNumber, UserSession.Current.SpecialistNumber, 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 return value.Length > 0
? new TagValue(true, value) ? new TagValue(true, value)
: new TagValue(false, ready.HasClock ? "이 계정에는 값이 비어 있습니다" : "값을 읽지 못했습니다"); : new TagValue(false, ready.HasClock ? "이 계정에는 값이 비어 있습니다" : "값을 읽지 못했습니다");