初始化

This commit is contained in:
2025-12-11 10:06:44 +08:00
commit f6cfed9a05
1203 changed files with 1461923 additions and 0 deletions

View File

@@ -0,0 +1,442 @@
Imports FlexCell
Public Class ReportingScenario
Sub New(_UserName As String, _HotleID As String, _RoomTypeID As String, filename As String, Version As String grd As FlexCell.Grid, Devicemodel As Dictionary(Of String DeviceModel, ActionConfiguration As List(Of TableRowTag))
UserName = _UserName
RoomTypeID = _RoomTypeID
HotleID = _HotleID
DevColList = New List(Of MTableSet)
' DevRowList = New List(Of MTableSet)
ConfigurationName = filename
ConfigurationVersion = Version
Tgrd = grd
TDevicemodel = Devicemodel
'Runing(grd Devicemodel, ActionConfiguration)
End Sub
Sub New(grd As FlexCell.Grid, Devicemodel As Dictionary(Of String DeviceModel)
Tgrd = grd
TDevicemodel = Devicemodel
End Sub
'配置名称
Public ConfigurationName As String
'配置版本
Public ConfigurationVersion As String
Public HotleID As String
Public RoomTypeID As String
Public UserName As String
Public Tgrd As FlexCell.Grid
Public DevColList As List(Of MTableSet)
Public TDevicemodel As Dictionary(Of String DeviceModel
'列集合
'{
' 设备名
' 设备节点集合
' { 节点类型
' 节点名
' 节点下属回路集合 键值对 k:回路 v : 回路别名
' }
''}
Public DevRowList As List(Of MTableSet)
'行集合
'{
' 设备名
'' 设备节点集合
'' { 节点类型
'' 节点名
'' 节点下属回路集合 键值对 k:回路 v : 回路别名
'' }
'}
#Region "数据处理"
Public Function getDateDisposeRuning() As List(Of MDevNodeMessage)
Return DateDisposeRuning(Tgrd, TDevicemodel)
End Function
Public Function DateDisposeRuning(_grd As FlexCell.Grid _Devicemodel As Dictionary(Of String DeviceModel)) As List(Of MDevNodeMessage)
If IsNothing(_grd) Then Return Nothing
Dim ACtabRange As CtabRange
Dim rt As New RoomTypeConfig(RoomTypeID)
Dim ot As String = "1"
Dim result As New List(Of MDevNodeMessage
Dim dic As New Dictionary(Of String, MDevNodeMessage)
Dim NodeLoopname As String
Dim NCtabRange As CtabRange
Dim NodeLoop As String = String.Empty
For Each Dev In _Devicemodel '遍历设备
For Each DevNode In Dev.Value.Nodes '遍历设备下属子节点
Dim devAddr As String = GetActionDeviceAddr(Dev.Value, DevNode.Name).ToString
If DevNode.Interface.Equals("DO") OrElse DevNode.Interface.Equals("LIGHT") Then '判断是否为输出设备
If DevNode.DEV_TYPE_DATA.Equals("4") Then '服务设备节点特殊处理
For ni As Integer = 0 To 14
NodeLoopname = DevNode.Nodes.Item(ni).Name
NodeLoop = DevNode.Nodes.Item(ni).LoopAddr
NodeLoop = $"{DevNode.DEV_TYPE_DATA.PadLeft(3, "0")}{devAddr.PadLeft(3, "0")}{NodeLoop.PadLeft(3, "0")}"
If dic.ContainsKey(NodeLoop) Then Continue For
ot = Dev.Value.Name
ot = ot.Replace(vbLf, "").Replace(vbCr "").Replace(":" "").Replace("\" "").Replace("/" "").Replace("|" "").Replace("'", "").Replace("'", "").Replace("?", "").Replace("!", "").Replace("`", "")
Dim datenode As New MDevNodeMessage(result.Count, NodeLoop, ot, NodeLoopname, DevNode.DEV_TYPE_DATA, rt)
dic.Add(NodeLoop, datenode)
result.Add(datenode)
Next
For ri As Integer = TableInteraction.TableRowNumber.Max To _grd.Rows - 1 ' 遍历每行找到服务起始行
ACtabRange = New CtabRange(_grd, ri, TableInteraction.TableColNumber.DeviceName)
If ACtabRange.devname.Equals("HOSTSERVICE") Then '找到服务集合
For cj As Integer = ACtabRange.fr To ACtabRange.lr
NodeLoopname = _grd.Cell(cj, TableInteraction.TableColNumber.KeyName).Text.Replace(vbLf, "").Replace(vbCr "").Replace(":" "").Replace("\" "").Replace("/" "").Replace("|" "").Replace("'", "").Replace("'", "").Replace("?", "").Replace("!", "").Replace("`", "")
NodeLoop = _grd.Cell(cj, TableInteraction.TableColNumber.KeyVal).Text
NodeLoop = $"{DevNode.DEV_TYPE_DATA.PadLeft(3, "0")}{devAddr.PadLeft(3, "0")}{NodeLoop.PadLeft(3, "0")}"
If dic.ContainsKey(NodeLoop) Then Continue For
ot = Dev.Value.Name
ot = ot.Replace(vbLf, "").Replace(vbCr "").Replace(":" "").Replace("\" "").Replace("/" "").Replace("|" "").Replace("'", "").Replace("'", "").Replace("?", "").Replace("!", "").Replace("`", "")
Dim datenode As New MDevNodeMessage(result.Count, NodeLoop, ot, NodeLoopname, DevNode.DEV_TYPE_DATA, rt)
dic.Add(NodeLoop, datenode)
result.Add(datenode)
Next
End If
Next
Exit For '完成遍历退出服务输出的处理
Else '正常输出节点
For i As Integer = TableInteraction.TableColNumber.InsertColumn To _grd.Cols - 2
ACtabRange = New CtabRange(_grd, TableInteraction.TableRowNumber.DeviceName, i)
If ACtabRange.devname.Equals(Dev.Key) Then '在表格找到对应设备
For j As Integer = ACtabRange.fc To ACtabRange.lc '遍历设备下属节点集合
NCtabRange = New CtabRange(_grd, TableInteraction.TableRowNumber.FunctionName, j)
If NCtabRange.devname.ToUpper.Equals("LIGHT") Then
NCtabRange.devname = "DO"
End If
If NCtabRange.devname.ToUpper.Equals("DRY_CURTAIN") Then
NCtabRange.devname = "CURTAIN"
End If
If DevNode.Name.ToUpper.Equals(NCtabRange.devname.ToUpper) Then '找到当前设备的当前节点
For k = NCtabRange.fc To NCtabRange.lc '遍历当前节点下属回路集合
If _grd.Column(k).Visible = True Then '过滤隐藏的回路
NodeLoopname = _grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeAnother, k).Text.Replace(vbLf, "").Replace(vbCr "").Replace(":" "").Replace("\" "").Replace("/" "").Replace("|" "").Replace("'", "").Replace("'", "").Replace("?", "").Replace("!", "").Replace("`", "")
If DevNode.Nodes.Count = 1 Then
NodeLoop = 0
Else
NodeLoop = _grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeID, k).Text
End If
NodeLoop = $"{DevNode.DEV_TYPE_DATA.PadLeft(3, "0")}{devAddr.PadLeft(3, "0")}{NodeLoop.PadLeft(3, "0")}"
If dic.ContainsKey(NodeLoop) Then Continue For
ot = Dev.Value.Name
ot = ot.Replace(vbLf, "").Replace(vbCr "").Replace(":" "").Replace("\" "").Replace("/" "").Replace("|" "").Replace("'", "").Replace("'", "").Replace("`", "").Replace("?", "").Replace("!", "").Replace(" ", "")
Dim datenode As New MDevNodeMessage(result.Count, NodeLoop, ot, NodeLoopname, DevNode.DEV_TYPE_DATA, rt)
dic.Add(NodeLoop, datenode)
result.Add(datenode)
End If
Next
Exit For
End If
j = NCtabRange.lc
Next
Exit For
End If
i = ACtabRange.lc
Next
End If
End If
Next
Next
Return result
End Function
'Public Sub Runing(_grd As FlexCell.Grid _Devicemodel As Dictionary(Of String DeviceModel), _ActionConfiguration As List(Of TableRowTag))
' If IsNothing(_grd) Then Return
' Dim nodename As String = String.Empty
' Dim ACtabRange As CtabRange
' Dim NCtabRange As CtabRange
' Dim CdevMode As DeviceModel
' Dim CdevModeNode As DeviceChildNodeClass
' Dim AnotherName As String = String.Empty
' Dim Result As String = String.Empty
' Dim NodeLoop As String = String.Empty
' Dim NodeLoopname As String = String.Empty
' Dim scene As String = String.Empty
' For i As Integer = TableInteraction.TableColNumber.InsertColumn To _grd.Cols - 2
' ACtabRange = New CtabRange(_grd, TableInteraction.TableRowNumber.DeviceName, i)
' '遍历设备
' If Not String.IsNullOrEmpty(ACtabRange.devname) AndAlso _Devicemodel.ContainsKey(ACtabRange.devname) Then
' CdevMode = _Devicemodel.Item(ACtabRange.devname)
' Dim nMTableSet As New MTableSet(ACtabRange.devname)
' DevColList.Add(nMTableSet)
' '遍历设备节点
' For j As Integer = ACtabRange.fc To ACtabRange.lc
' NCtabRange = New CtabRange(_grd, TableInteraction.TableRowNumber.FunctionName, j)
' CdevModeNode = Nothing
' For Each index In CdevMode.Nodes
' If index.Name.Equals(NCtabRange.devname) Then
' CdevModeNode = index
' Exit For
' End If
' Next
' If Not IsNothing(CdevModeNode) Then
' Result = CdevModeNode.DEV_TYPE_DATA.PadLeft(3, "0")
' Dim Mdnm As New MDevNodeMessage(CdevModeNode.Name, Result)
' nMTableSet.DevNode.Add(Mdnm)
' '遍历遍历设备节点下属回路
' For k = NCtabRange.fc To NCtabRange.lc
' If _grd.Column(k).Visible = True Then
' Dim dic As New Dictionary(Of String, String)
' NodeLoop = _grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeID, k).Text
' NodeLoopname = _grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeAnother, k).Text
' If Mdnm.DevNodeDic.ContainsKey(NodeLoop) Then
' Continue For
' Else
' dic.Add("回路别名", NodeLoopname)
' Mdnm.DevNodeDic.Add(NodeLoop, dic)
' End If
' End If
' Next
' End If
' j = NCtabRange.lc
' Next
' End If
' i = ACtabRange.lc
' Next
' Dim rowtag As TableRowTag
' For i As Integer = TableInteraction.TableRowNumber.Max To _grd.Rows - 1
' ACtabRange = New CtabRange(_grd, i, TableInteraction.TableColNumber.DeviceName)
' If ACtabRange.devname.Equals("HOSTSERVICE") Then
' ACtabRange.devname = _Devicemodel.Keys(0)
' End If
' If Not String.IsNullOrEmpty(ACtabRange.devname) AndAlso (_Devicemodel.ContainsKey(ACtabRange.devname)) Then
' CdevMode = _Devicemodel.Item(ACtabRange.devname)
' Dim nMTableSet As New MTableSet(ACtabRange.devname)
' DevRowList.Add(nMTableSet)
' '遍历设备
' For j As Integer = ACtabRange.fr To ACtabRange.lr
' If j >= TableInteraction.TableRowNumber.Max AndAlso (i - TableInteraction.TableRowNumber.Max < _ActionConfiguration.Count) Then
' rowtag = _ActionConfiguration.Item(j - TableInteraction.TableRowNumber.Max)
' CdevModeNode = Nothing
' For Each index In CdevMode.Nodes
' If index.Name.Equals(rowtag.G_DevNodeName) Then
' CdevModeNode = index
' Exit For
' End If
' Next
' If Not IsNothing(CdevModeNode) Then
' Result = CdevModeNode.DEV_TYPE_DATA.PadLeft(3, "0")
' NodeLoop = _grd.Cell(j, TableInteraction.TableColNumber.KeyVal).Text
' Dim Tisbol As Boolean = True
' For Each Tindex In nMTableSet.DevNode
' If Tindex.DevNodeName.Equals(CdevModeNode.Name) AndAlso Tindex.DevNodeDic.ContainsKey(NodeLoop) Then
' Tisbol = False
' Continue For
' End If
' Next
' If Tisbol = False Then Continue For
' Dim Mdnm As New MDevNodeMessage(CdevModeNode.Name, Result)
' nMTableSet.DevNode.Add(Mdnm)
' '遍历遍历设备节点下属回路
' If _grd.Row(j).Visible = True Then
' Dim dic As New Dictionary(Of String, String)
' NodeLoopname = _grd.Cell(j, TableInteraction.TableColNumber.KeyName).Text
' scene = _grd.Cell(j, TableInteraction.TableColNumber.SceneID).Text
' If Mdnm.DevNodeDic.ContainsKey(NodeLoop) Then
' Continue For
' Else
' dic.Add("回路别名", NodeLoopname)
' dic.Add("场景号", scene)
' Mdnm.DevNodeDic.Add(NodeLoop, dic)
' End If
' End If
' End If
' End If
' Next
' End If
' i = ACtabRange.lr
' Next
'End Sub
'Public Sub Runing(_grd As FlexCell.Grid _Devicemodel As Dictionary(Of String DeviceModel), _ActionConfiguration As List(Of TableRowTag))
' If IsNothing(_grd) Then Return
' Dim ACtabRange As CtabRange
' Dim NCtabRange As CtabRange
' Dim NodeLoopname As String
' Dim NodeLoop As String = String.Empty
' For Each Dev In _Devicemodel '遍历设备
' Dim nMTableSet As New MTableSet(Dev.Key)
' DevColList.Add(nMTableSet)
' For Each DevNode In Dev.Value.Nodes '遍历设备下属子节点
' If DevNode.Interface.Equals("DO") Then '判断是否为输出设备
' If DevNode.DEV_TYPE_DATA.Equals("4") Then '服务设备节点特殊处理
' For ri As Integer = TableInteraction.TableRowNumber.Max To _grd.Rows - 1 ' 遍历每行找到服务起始行
' ACtabRange = New CtabRange(_grd, ri, TableInteraction.TableColNumber.DeviceName)
' If ACtabRange.devname.Equals("HOSTSERVICE") Then '找到服务集合
' Dim devAddr As String = GetActionDeviceAddr(Dev.Value, DevNode.Name).ToString
' Dim devnodename As String = TableInteraction.GetAnotherName(DevNode.Name)
' Dim MDevNode As New MDevNodeMessage(devAddr, devnodename, DevNode.DEV_TYPE_DATA)
' nMTableSet.DevNode.Add(MDevNode)
' For cj As Integer = ACtabRange.fr To ACtabRange.lr '遍历服务集合
' NodeLoopname = _grd.Cell(cj, TableInteraction.TableColNumber.KeyName).Text
' NodeLoop = _grd.Cell(cj, TableInteraction.TableColNumber.KeyVal).Text
' If MDevNode.DevNodeDic.ContainsKey(NodeLoop) Then
' Continue For
' Else
' Dim dic As New Dictionary(Of String, String)
' dic.Add("回路别名", NodeLoopname)
' dic.Add("回路地址", NodeLoop)
' MDevNode.DevNodeDic.Add(NodeLoop, dic)
' End If
' Next
' Exit For '完成遍历退出服务输出的处理
' End If
' Next
' Else '正常输出节点
' For i As Integer = TableInteraction.TableColNumber.InsertColumn To _grd.Cols - 2
' ACtabRange = New CtabRange(_grd, TableInteraction.TableRowNumber.DeviceName, i)
' If ACtabRange.devname.Equals(Dev.Key) Then '在表格找到对应设备
' For j As Integer = ACtabRange.fc To ACtabRange.lc '遍历设备下属节点集合
' NCtabRange = New CtabRange(_grd, TableInteraction.TableRowNumber.FunctionName, j)
' If DevNode.Name.Equals(NCtabRange.devname) Then '找到当前设备的当前节点
' Dim devAddr As String = GetActionDeviceAddr(Dev.Value, DevNode.Name).ToString
' Dim devnodename As String = TableInteraction.GetAnotherName(DevNode.Name)
' Dim MDevNode As New MDevNodeMessage(devAddr, devnodename, DevNode.DEV_TYPE_DATA)
' nMTableSet.DevNode.Add(MDevNode)
' For k = NCtabRange.fc To NCtabRange.lc '遍历当前节点下属回路集合
' NodeLoopname = String.Empty
' If _grd.Column(k).Visible = True Then '过滤隐藏的回路
' NodeLoopname = _grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeAnother, k).Text
' NodeLoop = _grd.Cell(TableInteraction.TableRowNumber.FunctionChildNodeID, k).Text
' Dim dic As New Dictionary(Of String, String)
' dic.Add("回路别名", NodeLoopname)
' dic.Add("回路地址", NodeLoop)
' MDevNode.DevNodeDic.Add(NodeLoop, dic)
' End If
' Next
' Exit For
' End If
' j = NCtabRange.lc
' Next
' Exit For
' End If
' i = ACtabRange.lc
' Next
' End If
' End If
' Next
' Next
'End Sub
Private Function GetActionDeviceAddr(Dev As DeviceModel, DevNodeName As String) As Integer
For Each index In Dev.Config
If index.Name.Equals($"{DevNodeName }设备组信息") Then
For Each node In index.Attributes
If node.Name.Equals("DeviceAddr") Then
Return CInt(node.DataDefault)
End If
Next
End If
If index.Name.Equals($"设备存在") Then
For Each node In index.Attributes
If node.Name.Equals("拨码地址") Then
Return CInt(node.Value)
End If
Next
End If
Next
Return -1
End Function
#End Region
End Class
Public Class MTableSet
Public Sub New(name As String)
DevNode = New List(Of MDevNodeMessage)
DevName = name
End Sub
' 设备名
Public DevName As String
' 设备下所有输出节点
Public DevNode As List(Of MDevNodeMessage)
End Class
Public Class MDevNodeMessage
Public Sub New(addr As String, NodeName As String, NodeType As String)
End Sub
Public Sub New(yid As Integer, Ma As String, ol As String, Nm As String, Ty As String, RTy As RoomTypeConfig)
ID = yid
ModalAddress = Ma
outlet = ol
Name = Nm
Type = Ty
RoomType = RTy
End Sub
'序号
Dim ID As Integer
' 设备地址
Public ModalAddress As String
'设备输出节点名
Public outlet As String
'设备输出节点类型
Public Name As String
'设备输出节点下所有回路和相关信息
Public Type As String
Public RoomType As RoomTypeConfig
End Class
Public Class RoomTypeConfig
Sub New(tID As String)
ID = tID
End Sub
Public ID As String
End Class