| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- namespace Infrastructure.StockData;
- /// <summary>
- /// SEIBro getGmeetMeasureInfo(총회안건) 응답 파서 — 순수 C#. 공용 SeibroXml envelope 입력.
- /// 자연키(ISSUCO_CUSTNO, RGT_STD_DT, AGENDA_SEQ) + 필수 AGENDA_NM 중 하나라도 없거나 비형식이면 건너뛴다.
- /// AGENDA_SCH_SEQO 는 CHAR(6) 우측공백 포함 가능(fixture "1 ") → Trim 저장.
- /// </summary>
- public static class SeibroGmeetMeasureParser
- {
- public sealed record Row(
- 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
- );
- public static IReadOnlyList<Row> Parse(SeibroXml.Envelope envelope)
- {
- var rows = new List<Row>();
- foreach (var fields in envelope.Rows)
- {
- var custno = SeibroFieldParse.Int(SeibroXml.GetOrNull(fields, "ISSUCO_CUSTNO"));
- var rgtStdDt = SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "RGT_STD_DT"));
- var agendaSeq = SeibroFieldParse.Int(SeibroXml.GetOrNull(fields, "AGENDA_SEQ"));
- var agendaNm = SeibroXml.GetOrNull(fields, "AGENDA_NM")?.Trim();
- if (custno is null || rgtStdDt is null || agendaSeq is null || string.IsNullOrEmpty(agendaNm))
- {
- continue;
- }
- rows.Add(new Row(
- custno.Value,
- SeibroXml.GetOrNull(fields, "ISSUIN_NO")?.Trim(),
- rgtStdDt.Value,
- SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "GMET_DT")),
- SeibroXml.GetOrNull(fields, "GMET_KACD")?.Trim(),
- agendaSeq.Value,
- SeibroXml.GetOrNull(fields, "AGENDA_XPRES_NO")?.Trim(),
- SeibroXml.GetOrNull(fields, "AGENDA_SCH_SEQO")?.Trim(),
- SeibroXml.GetOrNull(fields, "AGENDA_NO")?.Trim(),
- SeibroXml.GetOrNull(fields, "DTAIL_AGENDA_NO")?.Trim(),
- agendaNm,
- SeibroXml.GetOrNull(fields, "ENG_AGENDA_NM")?.Trim(),
- SeibroXml.GetOrNull(fields, "DTAIL_AGENDA_NM")?.Trim(),
- SeibroXml.GetOrNull(fields, "DTAIL_ENG_AGENDA_NM")?.Trim(),
- SeibroXml.GetOrNull(fields, "VOTE_MANN_TPCD")?.Trim(),
- SeibroXml.GetOrNull(fields, "GMET_RESULT_TPCD")?.Trim()
- ));
- }
- return rows;
- }
- }
|