''' <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