182 lines
6.5 KiB
C#
182 lines
6.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace SHI.Modal.NW
|
|
{
|
|
/// <summary>
|
|
/// NW(네트워크 다이어그램) 차트의 개별 작업(Task) 데이터를 나타냅니다.
|
|
///
|
|
/// <para><b>개요:</b></para>
|
|
/// <para>
|
|
/// JSON 파일에서 역직렬화되어 NWChart에서 네트워크 다이어그램을 렌더링하는 데 사용됩니다.
|
|
/// 각 작업은 노드로 표시되며, ERE_NW_ACTV_CD와 ERE_NW_NXT_ACTV_CD로 노드 간 연결 관계를 정의합니다.
|
|
/// </para>
|
|
///
|
|
/// <para><b>네트워크 구조:</b></para>
|
|
/// <list type="bullet">
|
|
/// <item>ERE_NW_ACTV_CD - 현재 작업의 활동 코드 (노드 식별자)</item>
|
|
/// <item>ERE_NW_NXT_ACTV_CD - 다음 작업의 활동 코드 (연결 대상)</item>
|
|
/// <item>노드 간 연결선으로 작업 순서/의존성을 시각화</item>
|
|
/// </list>
|
|
///
|
|
/// <para><b>주요 필드:</b></para>
|
|
/// <list type="bullet">
|
|
/// <item>PROJ_NO, BLK_NO - 프로젝트 및 블록 식별자</item>
|
|
/// <item>STDT, FNDT - 시작일, 종료일</item>
|
|
/// <item>WKA_NM - 작업 영역명</item>
|
|
/// <item>PTCH - 패치 번호 (노드 위치 계산에 사용)</item>
|
|
/// </list>
|
|
///
|
|
/// <para><b>날짜 형식:</b></para>
|
|
/// <para>모든 날짜 필드는 "yyyyMMdd" 형식의 문자열입니다. (예: "20250115")</para>
|
|
/// </summary>
|
|
[Serializable]
|
|
public class NWChartDataTask
|
|
{
|
|
#region 식별자 (Identifiers)
|
|
/// <summary>화면 번호 코드</summary>
|
|
public string SCRNO_CD;
|
|
|
|
/// <summary>활동 코드</summary>
|
|
public string ACTV_CD;
|
|
|
|
/// <summary>프로젝트 번호</summary>
|
|
public string PROJ_NO;
|
|
|
|
/// <summary>
|
|
/// 네트워크 활동 코드 (현재 노드 식별자).
|
|
/// 네트워크 다이어그램에서 노드를 고유하게 식별합니다.
|
|
/// </summary>
|
|
public string ERE_NW_ACTV_CD;
|
|
|
|
/// <summary>
|
|
/// 다음 네트워크 활동 코드 (연결 대상 노드).
|
|
/// 이 필드가 비어있으면 종료 노드(End Node)로 표시됩니다.
|
|
/// </summary>
|
|
public string ERE_NW_NXT_ACTV_CD;
|
|
|
|
/// <summary>블록 번호 (선박 건조 블록 식별자)</summary>
|
|
public string BLK_NO;
|
|
#endregion
|
|
|
|
#region 일정 정보 (Schedule Information)
|
|
/// <summary>시작일 (yyyyMMdd 형식)</summary>
|
|
public string STDT;
|
|
|
|
/// <summary>종료일 (yyyyMMdd 형식)</summary>
|
|
public string FNDT;
|
|
#endregion
|
|
|
|
#region 작업 정보 (Work Information)
|
|
/// <summary>작업 영역명</summary>
|
|
public string WKA_NM;
|
|
|
|
/// <summary>공정 단계</summary>
|
|
public string P_STG;
|
|
|
|
/// <summary>프로젝트 타입</summary>
|
|
public string PROJ_TP;
|
|
|
|
/// <summary>관계 타입</summary>
|
|
public string REL_TP;
|
|
#endregion
|
|
|
|
#region 위치 및 연결 정보 (Position and Connection)
|
|
/// <summary>패치 번호 (노드의 행 위치 결정에 사용)</summary>
|
|
public int? PTCH;
|
|
|
|
/// <summary>포인트 개수</summary>
|
|
public int? PT_CNT;
|
|
|
|
/// <summary>X1 좌표</summary>
|
|
public int? X1;
|
|
/// <summary>X2 좌표</summary>
|
|
public int? X2;
|
|
/// <summary>Y1 좌표</summary>
|
|
public int? Y1;
|
|
/// <summary>Y2 좌표</summary>
|
|
public int? Y2;
|
|
|
|
/// <summary>고정 여부 (Y/N)</summary>
|
|
public string FIX_YN;
|
|
#endregion
|
|
|
|
#region 다음 작업 정보 (Next Task Information)
|
|
/// <summary>다음 프로젝트 번호</summary>
|
|
public string NXT_PROJ_NO;
|
|
|
|
/// <summary>다음 프로젝트 타입</summary>
|
|
public string NXT_PROJ_TP;
|
|
|
|
/// <summary>다음 활동 설명</summary>
|
|
public string NXT_ACTV_DSC;
|
|
|
|
/// <summary>최소 지연(Lag) 시간</summary>
|
|
public int? MIN_LAG;
|
|
#endregion
|
|
|
|
#region 계산된 값 (Calculated Values)
|
|
/// <summary>
|
|
/// 런타임에 계산되는 진행률 (0~100).
|
|
/// JSON 직렬화에서 제외됩니다.
|
|
/// </summary>
|
|
[NonSerialized] public float CalculatedProgress;
|
|
#endregion
|
|
|
|
#region 날짜 변환 메서드 (Date Conversion Methods)
|
|
/// <summary>시작일을 DateTime으로 반환합니다.</summary>
|
|
/// <returns>파싱된 DateTime 또는 null</returns>
|
|
public DateTime? GetStartDate() => ParseDate(STDT);
|
|
|
|
/// <summary>종료일을 DateTime으로 반환합니다.</summary>
|
|
/// <returns>파싱된 DateTime 또는 null</returns>
|
|
public DateTime? GetEndDate() => ParseDate(FNDT);
|
|
|
|
/// <summary>
|
|
/// yyyyMMdd 형식의 문자열을 DateTime으로 파싱합니다.
|
|
/// </summary>
|
|
/// <param name="dateStr">날짜 문자열 (예: "20250115")</param>
|
|
/// <returns>파싱된 DateTime 또는 null (빈 문자열이나 "null"인 경우)</returns>
|
|
private DateTime? ParseDate(string dateStr)
|
|
{
|
|
if (string.IsNullOrEmpty(dateStr) || dateStr == "null") return null;
|
|
if (DateTime.TryParseExact(dateStr, "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out DateTime date))
|
|
return date;
|
|
return null;
|
|
}
|
|
#endregion
|
|
|
|
#region 표시 메서드 (Display Methods)
|
|
/// <summary>
|
|
/// 작업의 표시 이름을 반환합니다.
|
|
/// BLK_NO, ERE_NW_ACTV_CD, ACTV_CD, PROJ_NO 순으로 첫 번째 유효한 값을 반환합니다.
|
|
/// </summary>
|
|
/// <returns>표시할 작업명</returns>
|
|
public string GetDisplayName()
|
|
{
|
|
if (!string.IsNullOrEmpty(BLK_NO)) return BLK_NO;
|
|
if (!string.IsNullOrEmpty(ERE_NW_ACTV_CD)) return ERE_NW_ACTV_CD;
|
|
return ACTV_CD ?? PROJ_NO;
|
|
}
|
|
#endregion
|
|
}
|
|
|
|
/// <summary>
|
|
/// NWChartDataTask 목록을 감싸는 래퍼 클래스입니다.
|
|
/// JSON 역직렬화 시 배열을 객체로 감싸기 위해 사용됩니다.
|
|
///
|
|
/// <para><b>사용 예시:</b></para>
|
|
/// <code>
|
|
/// var json = File.ReadAllText(path);
|
|
/// var wrapper = JsonUtility.FromJson<NWChartDataWrapper>("{\"items\":" + json + "}");
|
|
/// var tasks = wrapper.items;
|
|
/// </code>
|
|
/// </summary>
|
|
[Serializable]
|
|
public class NWChartDataWrapper
|
|
{
|
|
/// <summary>작업 데이터 목록</summary>
|
|
public List<NWChartDataTask> items;
|
|
}
|
|
}
|