| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- using System.ComponentModel.DataAnnotations;
- namespace Domain.Entities.Stocks;
- /// <summary>
- /// SEIBro 상호변경 정보 (getFmnmAltInfo) — 사명 변경 전후·혼용유통기간 (Wave 3).
- /// 자연키 UNIQUE (IssucoCustno, RgtStdDt) — 한 회사·권리기준일당 1행.
- /// 이벤트 구동: RightsBaseDate 의 RGT_RACD=204(상호변경) 인 (회사번호, 기준일)을 트리거로 수집한다.
- /// </summary>
- public class CorpNameChange
- {
- [Key]
- public int ID { get; private set; }
- /// <summary>발행회사 고객번호 (ISSUCO_CUSTNO)</summary>
- public int IssucoCustno { get; private set; }
- /// <summary>권리기준일자 (RGT_STD_DT)</summary>
- public DateOnly RgtStdDt { get; private set; }
- /// <summary>변경전상호(국문, FMNM_BFALT_KOR_NM)</summary>
- public string? FmnmBfaltKorNm { get; private set; }
- /// <summary>변경전상호(영문, FMNM_BFALT_ENG_NM)</summary>
- public string? FmnmBfaltEngNm { get; private set; }
- /// <summary>변경후상호(국문, FMNM_ALT_KOR_NM)</summary>
- public string? FmnmAltKorNm { get; private set; }
- /// <summary>변경후상호(영문, FMNM_ALT_ENG_NM)</summary>
- public string? FmnmAltEngNm { get; private set; }
- /// <summary>혼용유통시작일자 (MIXUS_CIRCL_BEGIN_DT)</summary>
- public DateOnly? MixusCirclBeginDt { get; private set; }
- /// <summary>혼용유통종료일자 (MIXUS_CIRCL_EXPRY_DT)</summary>
- public DateOnly? MixusCirclExpryDt { get; private set; }
- /// <summary>단일유통일자 (UNI_CIRCL_DT)</summary>
- public DateOnly? UniCirclDt { get; private set; }
- public DateTime UpdatedAt { get; private set; } = DateTime.UtcNow;
- private CorpNameChange() { }
- public static CorpNameChange Create(
- int issucoCustno,
- DateOnly rgtStdDt,
- string? fmnmBfaltKorNm,
- string? fmnmBfaltEngNm,
- string? fmnmAltKorNm,
- string? fmnmAltEngNm,
- DateOnly? mixusCirclBeginDt,
- DateOnly? mixusCirclExpryDt,
- DateOnly? uniCirclDt)
- {
- return new CorpNameChange
- {
- IssucoCustno = issucoCustno,
- RgtStdDt = rgtStdDt,
- FmnmBfaltKorNm = Trimmed(fmnmBfaltKorNm),
- FmnmBfaltEngNm = Trimmed(fmnmBfaltEngNm),
- FmnmAltKorNm = Trimmed(fmnmAltKorNm),
- FmnmAltEngNm = Trimmed(fmnmAltEngNm),
- MixusCirclBeginDt = mixusCirclBeginDt,
- MixusCirclExpryDt = mixusCirclExpryDt,
- UniCirclDt = uniCirclDt
- };
- }
- /// <summary>재수집 반영 — 변경 필드가 있을 때만 UpdatedAt 갱신 (자연키는 불변)</summary>
- public void Update(
- string? fmnmBfaltKorNm,
- string? fmnmBfaltEngNm,
- string? fmnmAltKorNm,
- string? fmnmAltEngNm,
- DateOnly? mixusCirclBeginDt,
- DateOnly? mixusCirclExpryDt,
- DateOnly? uniCirclDt)
- {
- var changed = false;
- changed |= Set(Trimmed(fmnmBfaltKorNm), FmnmBfaltKorNm, v => FmnmBfaltKorNm = v);
- changed |= Set(Trimmed(fmnmBfaltEngNm), FmnmBfaltEngNm, v => FmnmBfaltEngNm = v);
- changed |= Set(Trimmed(fmnmAltKorNm), FmnmAltKorNm, v => FmnmAltKorNm = v);
- changed |= Set(Trimmed(fmnmAltEngNm), FmnmAltEngNm, v => FmnmAltEngNm = v);
- changed |= Set(mixusCirclBeginDt, MixusCirclBeginDt, v => MixusCirclBeginDt = v);
- changed |= Set(mixusCirclExpryDt, MixusCirclExpryDt, v => MixusCirclExpryDt = v);
- changed |= Set(uniCirclDt, UniCirclDt, v => UniCirclDt = v);
- if (changed)
- {
- UpdatedAt = DateTime.UtcNow;
- }
- }
- private static string? Trimmed(string? value)
- {
- return string.IsNullOrWhiteSpace(value) ? null : value.Trim();
- }
- private static bool Set<T>(T incoming, T current, Action<T> assign)
- {
- if (EqualityComparer<T>.Default.Equals(incoming, current))
- {
- return false;
- }
- assign(incoming);
- return true;
- }
- }
|