| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- using System.ComponentModel.DataAnnotations;
- namespace Domain.Entities.Stocks;
- /// <summary>
- /// SEIBro 총회안건 정보 (getGmeetMeasureInfo) — 주총 안건·결과 (Wave 3).
- /// 자연키 UNIQUE (IssucoCustno, RgtStdDt, AgendaSeq) — 한 회사·권리기준일·안건일련번호당 1행.
- /// GeneralMeeting 과 동일 트리거(RGT_RACD 총회계열)로 함께 수집한다.
- /// </summary>
- public class MeetingAgenda
- {
- [Key]
- public int ID { get; private set; }
- /// <summary>발행회사 고객번호 (ISSUCO_CUSTNO)</summary>
- public int IssucoCustno { get; private set; }
- /// <summary>발행회사발행체번호 (ISSUIN_NO)</summary>
- public string? IssuinNo { get; private set; }
- /// <summary>권리기준일자 (RGT_STD_DT)</summary>
- public DateOnly RgtStdDt { get; private set; }
- /// <summary>총회일자 (GMET_DT)</summary>
- public DateOnly? GmetDt { get; private set; }
- /// <summary>총회종류코드 (GMET_KACD) — 001정기 002임시 003종류 009기타</summary>
- public string? GmetKacd { get; private set; }
- /// <summary>안건일련번호 (AGENDA_SEQ)</summary>
- public int AgendaSeq { get; private set; }
- /// <summary>안건표시번호 (AGENDA_XPRES_NO)</summary>
- public string? AgendaXpresNo { get; private set; }
- /// <summary>안건조회순서 (AGENDA_SCH_SEQO)</summary>
- public string? AgendaSchSeqo { get; private set; }
- /// <summary>안건번호 (AGENDA_NO)</summary>
- public string? AgendaNo { get; private set; }
- /// <summary>세부안건번호 (DTAIL_AGENDA_NO)</summary>
- public string? DtailAgendaNo { get; private set; }
- /// <summary>안건명 (AGENDA_NM)</summary>
- public string AgendaNm { get; private set; } = default!;
- /// <summary>영문안건명 (ENG_AGENDA_NM)</summary>
- public string? EngAgendaNm { get; private set; }
- /// <summary>세부안건명 (DTAIL_AGENDA_NM)</summary>
- public string? DtailAgendaNm { get; private set; }
- /// <summary>세부영문안건명 (DTAIL_ENG_AGENDA_NM)</summary>
- public string? DtailEngAgendaNm { get; private set; }
- /// <summary>투표방식구분코드 (VOTE_MANN_TPCD) — 1집중투표 4최다득표자선임 9해당없음</summary>
- public string? VoteMannTpcd { get; private set; }
- /// <summary>총회결과구분코드 (GMET_RESULT_TPCD) — 1승인 2부결 3수정승인 4부분승인 5철회</summary>
- public string? GmetResultTpcd { get; private set; }
- public DateTime UpdatedAt { get; private set; } = DateTime.UtcNow;
- private MeetingAgenda() { }
- public static MeetingAgenda Create(
- int issucoCustno,
- string? issuinNo,
- DateOnly rgtStdDt,
- DateOnly? gmetDt,
- string? gmetKacd,
- int agendaSeq,
- string? agendaXpresNo,
- string? agendaSchSeqo,
- string? agendaNo,
- string? dtailAgendaNo,
- string agendaNm,
- string? engAgendaNm,
- string? dtailAgendaNm,
- string? dtailEngAgendaNm,
- string? voteMannTpcd,
- string? gmetResultTpcd)
- {
- if (string.IsNullOrWhiteSpace(agendaNm))
- {
- throw new ArgumentException("agendaNm required", nameof(agendaNm));
- }
- return new MeetingAgenda
- {
- IssucoCustno = issucoCustno,
- IssuinNo = Trimmed(issuinNo),
- RgtStdDt = rgtStdDt,
- GmetDt = gmetDt,
- GmetKacd = Trimmed(gmetKacd),
- AgendaSeq = agendaSeq,
- AgendaXpresNo = Trimmed(agendaXpresNo),
- AgendaSchSeqo = Trimmed(agendaSchSeqo),
- AgendaNo = Trimmed(agendaNo),
- DtailAgendaNo = Trimmed(dtailAgendaNo),
- AgendaNm = agendaNm.Trim(),
- EngAgendaNm = Trimmed(engAgendaNm),
- DtailAgendaNm = Trimmed(dtailAgendaNm),
- DtailEngAgendaNm = Trimmed(dtailEngAgendaNm),
- VoteMannTpcd = Trimmed(voteMannTpcd),
- GmetResultTpcd = Trimmed(gmetResultTpcd)
- };
- }
- /// <summary>재수집 반영 — 변경 필드가 있을 때만 UpdatedAt 갱신 (자연키는 불변)</summary>
- public void Update(
- string? issuinNo,
- DateOnly? gmetDt,
- string? gmetKacd,
- string? agendaXpresNo,
- string? agendaSchSeqo,
- string? agendaNo,
- string? dtailAgendaNo,
- string agendaNm,
- string? engAgendaNm,
- string? dtailAgendaNm,
- string? dtailEngAgendaNm,
- string? voteMannTpcd,
- string? gmetResultTpcd)
- {
- var changed = false;
- changed |= Set(Trimmed(issuinNo), IssuinNo, v => IssuinNo = v);
- changed |= Set(gmetDt, GmetDt, v => GmetDt = v);
- changed |= Set(Trimmed(gmetKacd), GmetKacd, v => GmetKacd = v);
- changed |= Set(Trimmed(agendaXpresNo), AgendaXpresNo, v => AgendaXpresNo = v);
- changed |= Set(Trimmed(agendaSchSeqo), AgendaSchSeqo, v => AgendaSchSeqo = v);
- changed |= Set(Trimmed(agendaNo), AgendaNo, v => AgendaNo = v);
- changed |= Set(Trimmed(dtailAgendaNo), DtailAgendaNo, v => DtailAgendaNo = v);
- if (!string.IsNullOrWhiteSpace(agendaNm) && AgendaNm != agendaNm.Trim())
- {
- AgendaNm = agendaNm.Trim();
- changed = true;
- }
- changed |= Set(Trimmed(engAgendaNm), EngAgendaNm, v => EngAgendaNm = v);
- changed |= Set(Trimmed(dtailAgendaNm), DtailAgendaNm, v => DtailAgendaNm = v);
- changed |= Set(Trimmed(dtailEngAgendaNm), DtailEngAgendaNm, v => DtailEngAgendaNm = v);
- changed |= Set(Trimmed(voteMannTpcd), VoteMannTpcd, v => VoteMannTpcd = v);
- changed |= Set(Trimmed(gmetResultTpcd), GmetResultTpcd, v => GmetResultTpcd = 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;
- }
- }
|