SeibroGmeetMeasureParser.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. namespace Infrastructure.StockData;
  2. /// <summary>
  3. /// SEIBro getGmeetMeasureInfo(총회안건) 응답 파서 — 순수 C#. 공용 SeibroXml envelope 입력.
  4. /// 자연키(ISSUCO_CUSTNO, RGT_STD_DT, AGENDA_SEQ) + 필수 AGENDA_NM 중 하나라도 없거나 비형식이면 건너뛴다.
  5. /// AGENDA_SCH_SEQO 는 CHAR(6) 우측공백 포함 가능(fixture "1 ") → Trim 저장.
  6. /// </summary>
  7. public static class SeibroGmeetMeasureParser
  8. {
  9. public sealed record Row(
  10. int IssucoCustno,
  11. string? IssuinNo,
  12. DateOnly RgtStdDt,
  13. DateOnly? GmetDt,
  14. string? GmetKacd,
  15. int AgendaSeq,
  16. string? AgendaXpresNo,
  17. string? AgendaSchSeqo,
  18. string? AgendaNo,
  19. string? DtailAgendaNo,
  20. string AgendaNm,
  21. string? EngAgendaNm,
  22. string? DtailAgendaNm,
  23. string? DtailEngAgendaNm,
  24. string? VoteMannTpcd,
  25. string? GmetResultTpcd
  26. );
  27. public static IReadOnlyList<Row> Parse(SeibroXml.Envelope envelope)
  28. {
  29. var rows = new List<Row>();
  30. foreach (var fields in envelope.Rows)
  31. {
  32. var custno = SeibroFieldParse.Int(SeibroXml.GetOrNull(fields, "ISSUCO_CUSTNO"));
  33. var rgtStdDt = SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "RGT_STD_DT"));
  34. var agendaSeq = SeibroFieldParse.Int(SeibroXml.GetOrNull(fields, "AGENDA_SEQ"));
  35. var agendaNm = SeibroXml.GetOrNull(fields, "AGENDA_NM")?.Trim();
  36. if (custno is null || rgtStdDt is null || agendaSeq is null || string.IsNullOrEmpty(agendaNm))
  37. {
  38. continue;
  39. }
  40. rows.Add(new Row(
  41. custno.Value,
  42. SeibroXml.GetOrNull(fields, "ISSUIN_NO")?.Trim(),
  43. rgtStdDt.Value,
  44. SeibroFieldParse.Date(SeibroXml.GetOrNull(fields, "GMET_DT")),
  45. SeibroXml.GetOrNull(fields, "GMET_KACD")?.Trim(),
  46. agendaSeq.Value,
  47. SeibroXml.GetOrNull(fields, "AGENDA_XPRES_NO")?.Trim(),
  48. SeibroXml.GetOrNull(fields, "AGENDA_SCH_SEQO")?.Trim(),
  49. SeibroXml.GetOrNull(fields, "AGENDA_NO")?.Trim(),
  50. SeibroXml.GetOrNull(fields, "DTAIL_AGENDA_NO")?.Trim(),
  51. agendaNm,
  52. SeibroXml.GetOrNull(fields, "ENG_AGENDA_NM")?.Trim(),
  53. SeibroXml.GetOrNull(fields, "DTAIL_AGENDA_NM")?.Trim(),
  54. SeibroXml.GetOrNull(fields, "DTAIL_ENG_AGENDA_NM")?.Trim(),
  55. SeibroXml.GetOrNull(fields, "VOTE_MANN_TPCD")?.Trim(),
  56. SeibroXml.GetOrNull(fields, "GMET_RESULT_TPCD")?.Trim()
  57. ));
  58. }
  59. return rows;
  60. }
  61. }