アットウィキロゴ
''' <summary>
''' RRRXXYのデータ
''' </summary>
''' <remarks></remarks>
Public Class XXXXXZData

    Public OPRXXZCode As String
    Public ParentCode As String
    Public OPRKubun As Integer
    Public OPRcd As String

    Private _clsOPQindex As clsOPQindex
    ''' <summary>
    ''' OPQIndex
    ''' ※更新禁止
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public ReadOnly Property OPQindex() As clsOPQindex
        Get
            Return _clsOPQindex
        End Get
    End Property

    Private _clsOPROrd As New List(Of clsOPROrd)
    ''' <summary>
    ''' OPROrd
    ''' ※更新禁止
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public ReadOnly Property OPROrd() As List(Of clsOPROrd)
        Get
            Return _clsOPROrd
        End Get
    End Property

    Private _childXXZList As New List(Of XXXXXZData)
    ''' <summary>
    ''' このXXYの直下にある子XXYのリスト
    ''' ※更新禁止
    ''' ※全ての子XXYを取得する場合はXXXXXZManager.FindChildXXXXXZDataを利用すること
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public ReadOnly Property ChildXXZList() As List(Of XXXXXZData)
        Get
            Return Me._childXXZList
        End Get
    End Property

    Private _loadedOPT As Boolean = False
    ''' <summary>
    ''' OPSを取得済みかどうか
    ''' ※更新禁止
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Property LoadedOPT() As Boolean
        Get
            Return _loadedOPT
        End Get
        Set(value As Boolean)
            Me._loadedOPT = _loadedOPT
        End Set
    End Property

    Sub New(clsOPQindex As clsOPQindex)

    End Sub

End Class

Public Class clsOPQindex
    Public OPRXXZCode As String
    Public OPQarentCode As String
    Public OPRKubun As String

    Sub New(XXZcode As String, parentXXZcode As String)
        Me.OPRXXZCode = XXZcode
        Me.OPQarentCode = parentXXZcode
    End Sub
End Class

Public Class clsOPROrd
    Public XXZCode As String
    Public OPRcd As String
    Public Bunrui As String
    Public Bunrui2 As String
    Public Syno As String

    Sub New(XXZcode As String)
        Me.XXZCode = XXZcode
    End Sub
End Class

Public Class clsOPQindexHist
    Public OPRmodKubun As Integer
    Public WsName As String
    Public OPRmodTime As DateTime
    Public OPRXXZCode As String
    Public OPRcd As String
    Public OPROpt2 As String

End Class



''' <summary>
''' XXXSetDataAccess.Instance.~のようにして利用
''' ※利用禁止
''' </summary>
''' <remarks></remarks>
Friend Class XXXXXZDataAccess

    Private Sub New()
    End Sub

    Private Shared _instance As XXXXXZDataAccess = New XXXXXZDataAccess
    ''' <summary>
    '''
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared ReadOnly Property Instance() As XXXXXZDataAccess
        Get
            Return _instance
        End Get
    End Property

    ''' <summary>
    '''
    ''' </summary>
    ''' <param name="OPRcd"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetOPQIndex(OPRcd As String) As List(Of clsOPQindex)

        Dim result As New List(Of clsOPQindex)

        Dim sql As New System.Text.StringBuilder()
        sql.AppendLine("select")
        sql.AppendLine("    *")
        sql.AppendLine("from")
        sql.AppendLine("    ")
        sql.AppendLine("where")
        sql.AppendLine("    OPRcd = '" & OPRcd & "'")
        sql.AppendLine("OPT by")
        sql.AppendLine("    ")

        Return result
    End Function

    ''' <summary>
    '''
    ''' </summary>
    ''' <param name="OPRcd"></param>
    ''' <param name="setcode"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function GetOPT(OPRcd As String, setcode As String) As List(Of clsOPROrd)

        Dim result As New List(Of clsOPROrd)

        Dim sql As New System.Text.StringBuilder()
        sql.AppendLine("select")
        sql.AppendLine("    *")
        sql.AppendLine("from")
        sql.AppendLine("    ")
        sql.AppendLine("where")
        sql.AppendLine("    OPRcd = '" & OPRcd & "'")
        sql.AppendLine("and")
        sql.AppendLine("    setcode = '" & setcode & "'")
        sql.AppendLine("OPT by")
        sql.AppendLine("    ")

        Return result
    End Function

End Class


Partial Public Class XXXXXZManager

    ''' <summary>
    ''' XXYのOPSを読み込む
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub LoadXXZOPTData(pXXZ As XXXXXZData)
        If pXXZ.OPRKubun <> 2 _
            OrElse pXXZ.LoadedOPT Then

            Return
        End If


    End Sub

    ''' <summary>
    ''' XXYのOPSだけ削除
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub DeleteXXXXXZOPT(pXXZ As XXXXXZData)

        If pXXZ Is Nothing _
            OrElse pXXZ.OPRKubun <> 2 _
            OrElse pXXZ.OPRcd <> Me._OPRcd Then

            Return
        End If

        'OPSを取得
        Me.LoadXXZOPTData(pXXZ)


        Dim updateHist As New List(Of XXXXXZData)
        updateHist.Add(pXXZ)
        Me.RegistOPQIndexHist(1, updateHist)

    End Sub

    ''' <summary>
    ''' XXYのOPSだけ削除
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub DeleteXXXXXZOPT(pXXZ As XXXXXZData, bunrui As String, bunrui2 As String, syno As Integer)

        If pXXZ Is Nothing _
            OrElse pXXZ.OPRKubun <> 2 _
            OrElse pXXZ.OPRcd <> Me._OPRcd Then

            Return
        End If

        'OPSを取得
        Me.LoadXXZOPTData(pXXZ)


        Dim updateHist As New List(Of XXXXXZData)
        updateHist.Add(pXXZ)
        Me.RegistOPQIndexHist(1, updateHist)

    End Sub

End Class


Public Class XXXXXZManager

    Private _modTime As DateTime
    Private _wsName As String
    Private _OPRcd As String
    Private _ordno As Integer
    Private _histList As List(Of clsOPQindexHist)

#Region "Properies"

    Private _allXXZList As List(Of XXXXXZData) = Nothing
    ''' <summary>
    ''' 全XXYのリスト
    ''' ※ゴミ箱や無効なXXYは含まない
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public ReadOnly Property AllXXZList() As List(Of XXXXXZData)
        Get
            Return Me._allXXZList
        End Get
    End Property

    Private _rootList As List(Of XXXXXZData) = Nothing
    ''' <summary>
    ''' ルートフォルダのリスト
    ''' ※ゴミ箱は含まない
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public ReadOnly Property RootList() As List(Of XXXXXZData)
        Get
            Return Me._rootList
        End Get
    End Property

    Private _trash As XXXXXZData = Nothing
    ''' <summary>
    ''' ゴミ箱
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public ReadOnly Property Trash() As XXXXXZData
        Get
            Return Me._trash
        End Get
    End Property

#End Region

#Region "Pulic Methods"

    ''' <summary>
    ''' コンストラクタ
    ''' </summary>
    ''' <param name="modTime"></param>
    ''' <param name="wsName"></param>
    ''' <param name="ordno"></param>
    ''' <param name="OPRcd"></param>
    ''' <remarks></remarks>
    Public Sub New(modTime As DateTime, wsName As String, ordno As Integer, OPRcd As String)
        Me._modTime = modTime
        Me._wsName = wsName
        Me._OPRcd = OPRcd
        Me._ordno = ordno

        Me.LoadXXXXXZData()
    End Sub

    ''' <summary>
    ''' 指定したXXYコードのデータを取得
    ''' </summary>
    ''' <param name="XXZcode"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function FindXXXXXZData(XXZcode As String) As XXXXXZData
        For Each pXXZData As XXXXXZData In Me._allXXZList
            If pXXZData.OPRXXZCode = XXZcode _
                AndAlso pXXZData.OPRcd = Me._OPRcd Then

                Return pXXZData
            End If
        Next
        Return Nothing
    End Function

    ''' <summary>
    ''' ゴミ箱に移動
    ''' </summary>
    ''' <param name="pXXZ"></param>
    ''' <remarks></remarks>
    Public Sub MoveToTrash(pXXZ As XXXXXZData)

        If pXXZ Is Nothing _
            OrElse (pXXZ.OPRKubun <> 1 OrElse pXXZ.OPRKubun <> 2) _
            OrElse pXXZ.OPRcd <> Me._OPRcd Then

            Return
        End If

        '親のXXYを探して、親のXXYの子から除外
        Dim parent As XXXXXZData = Me.FindXXXXXZData(pXXZ.ParentCode)
        parent.ChildXXZList.Remove(parent)

        'TOOD Regist
        pXXZ.ParentCode = "00000000"
        Trash.ChildXXZList.Add(pXXZ)

        'ゴミ箱に移動するXXYのリストを取得
        Dim moveXXZList As List(Of XXXXXZData) = Me.FindChildXXXXXZData(pXXZ)


        Me.RegistOPQIndexHist(1, moveXXZList)

    End Sub

    ''' <summary>
    ''' XXYを削除
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub DeleteXXXXXZ(pXXZ As XXXXXZData)

        If pXXZ Is Nothing _
            OrElse (pXXZ.OPRKubun <> 1 OrElse pXXZ.OPRKubun <> 2) _
            OrElse pXXZ.OPRcd <> Me._OPRcd Then

            Return
        End If

        '削除するXXYのリストを作成
        Dim deleteXXZList As List(Of XXXXXZData) = Me.FindChildXXXXXZData(pXXZ)

        For Each item As XXXXXZData In deleteXXZList
            If item.OPRKubun = 1 _
                OrElse item.OPRKubun = 2 Then

                item.OPRKubun = 9
            End If
        Next

        Me.RegistOPQIndexHist(2, deleteXXZList)

    End Sub

    ''' <summary>
    ''' 指定したXXYを親とするリストを取得
    ''' </summary>
    ''' <remarks></remarks>
    Public Function FindChildXXXXXZData(pXXZ As XXXXXZData) As List(Of XXXXXZData)
        Dim resultChildXXZ As New List(Of XXXXXZData)
        resultChildXXZ.Add(pXXZ)
        Me.FindChildXXXXXZDataRecursive(pXXZ, resultChildXXZ)
        Return resultChildXXZ
    End Function

#End Region

#Region "Private Methods"

    ''' <summary>
    ''' XXXXXZDataを読み込む
    ''' ※OPSのデータは読み込まれません
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub LoadXXXXXZData()

        'RRRXXY取得
        Me._allXXZList = New List(Of XXXXXZData)
        Dim OPQIndexList As List(Of clsOPQindex) = XXXXXZDataAccess.Instance.GetOPQIndex(Me._OPRcd)
        For Each OPQindex As clsOPQindex In OPQIndexList
            Dim pXXZ As New XXXXXZData(OPQindex)
            Me._allXXZList.Add(pXXZ)
        Next

        Dim checkXXZList As New List(Of XXXXXZData)
        checkXXZList.AddRange(Me._allXXZList)

        'ルートフォルダを見つける
        Dim rootList As List(Of XXXXXZData) = New List(Of XXXXXZData)
        For Each pXXZ As XXXXXZData In checkXXZList
            If pXXZ.OPRKubun = 0 Then

                rootList.Add(pXXZ)
            End If
        Next

        '全XXYのリストから見つかったフォルダを除外
        For Each item As XXXXXZData In rootList
            checkXXZList.Remove(item)
        Next

        '子のXXYを再帰的に設定
        For Each rootXXZ As XXXXXZData In rootList
            Me.XXZChildRecursive(checkXXZList, rootXXZ)
        Next

        'ゴミ箱を探す
        Dim trash As XXXXXZData = Nothing
        For Each item As XXXXXZData In rootList
            If item.OPRXXZCode = "00000000" Then
                trash = item
            End If
        Next

        If trash Is Nothing Then
            'ゴミ箱がなければ作る
            'TOOD Regist
            trash = New XXXXXZData(New clsOPQindex("00000000", "00000000"))
        Else
            rootList.Remove(trash)
        End If

        Me._trash = trash
        Me._rootList = rootList
    End Sub

    ''' <summary>
    ''' XXXXXZDataに子のXXYを再帰的に設定
    ''' </summary>
    ''' <param name="XXZList"></param>
    ''' <param name="parent"></param>
    ''' <remarks></remarks>
    Private Sub XXZChildRecursive(XXZList As List(Of XXXXXZData), parent As XXXXXZData)
        Dim childXXZList As New List(Of XXXXXZData)

        '子のXXYを探す
        For Each pXXZ As XXXXXZData In XXZList
            If pXXZ.ParentCode = parent.ParentCode _
                AndAlso (pXXZ.OPRKubun = 1 OrElse pXXZ.OPRKubun = 2) Then

                childXXZList.Add(pXXZ)
            End If
        Next

        '子のXXYを設定
        parent.ChildXXZList.AddRange(childXXZList)

        '全XXYのリストから子のXXYを除外
        For Each pXXZ As XXXXXZData In childXXZList
            XXZList.Remove(pXXZ)
        Next

        '子のXXYを設定
        For Each childPXXZ As XXXXXZData In childXXZList
            If childPXXZ.OPRKubun = 2 Then
                Me.XXZChildRecursive(XXZList, childPXXZ)
            End If
        Next
    End Sub

    ''' <summary>
    ''' 履歴を登録
    ''' ※修正区分が1、2のときだけ、更新するデータのリストが必要
    ''' </summary>
    ''' <param name="modKubun">
    ''' 修正区分
    ''' 0:変更なし
    ''' 1:更新
    ''' 2:削除
    ''' </param>
    ''' <param name="updateXXZList">更新するデータ</param>
    ''' <remarks></remarks>
    Private Sub RegistOPQIndexHist(modKubun As Integer _
                           , updateXXZList As List(Of XXXXXZData))

        Select Case modKubun
            Case 0
            Case 1
            Case 2
                If updateXXZList Is Nothing _
                    OrElse updateXXZList.Count = 0 Then
                    Return
                End If
            Case Else
                Return
        End Select

        If _histList Is Nothing Then
            '履歴を1回も登録したことがない場合

            Dim targetList As New List(Of XXXXXZData)

            '有効なルートに含まれるXXYをリストに追加
            For Each pXXZ As XXXXXZData In Me._rootList
                Dim childList As List(Of XXXXXZData) = Me.FindChildXXXXXZData(pXXZ)
                targetList.AddRange(childList)
            Next
            'ゴミ箱のルートだけ追加
            targetList.Add(Trash)

            _histList = New List(Of clsOPQindexHist)
            For Each pXXZ As XXXXXZData In targetList
                Dim hist As clsOPQindexHist = Me.CreateHist(pXXZ, Me._modTime, Me._wsName)
                _histList.Add(hist)
            Next
        End If

        'OPRmodKubunを更新
        For Each hist As clsOPQindexHist In _histList
            For Each pXXZ As XXXXXZData In updateXXZList
                If hist.OPRcd = pXXZ.OPRcd _
                    AndAlso hist.OPRXXZCode = pXXZ.OPRXXZCode Then

                    hist.OPRmodKubun = modKubun
                    hist.OPROpt2 = Me._ordno.ToString
                End If
            Next
        Next

        'TODO Regist

    End Sub

    ''' <summary>
    '''
    ''' </summary>
    ''' <param name="pXXZ"></param>
    ''' <param name="modTime"></param>
    ''' <param name="wsName"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Function CreateHist(pXXZ As XXXXXZData, modTime As DateTime, wsName As String) As clsOPQindexHist
        Dim hist As New clsOPQindexHist
        hist.OPRmodKubun = 0
        hist.OPRmodTime = modTime
        hist.WsName = wsName
        Return hist
    End Function

    ''' <summary>
    ''' 指定したXXYを親とするリストを取得(再帰処理)
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub FindChildXXXXXZDataRecursive(pXXZ As XXXXXZData, resultChildXXZ As List(Of XXXXXZData))
        If pXXZ.ChildXXZList Is Nothing Then
            Return
        End If

        For Each child As XXXXXZData In pXXZ.ChildXXZList
            resultChildXXZ.Add(child)
            Me.FindChildXXXXXZDataRecursive(child, resultChildXXZ)
        Next
    End Sub

#End Region

End Class
最終更新:2016年03月22日 02:22