2025-12-25 15:55:38 +08:00
Imports System . IO
Imports System . Net
Imports System . Text
Imports Newtonsoft . Json
Public Class EnergySavingAttribute
Public G_ReportingScenario As ReportingScenario
Public G_loopNameAddr As Dictionary ( Of String , String )
Public G_roomtypeid As Integer
Public G_Hotelid As Integer
Public G_Uploaduser As String
Public G_roomtypename As String
Public G_DateStr As Dictionary ( Of String , List ( Of ( String , String ) ) )
Public IsLoadServer As Integer = 0
Public g_Oldloopinfo As String = " "
Public DbConnString As String = " Server=blv-cloud-db.mysql.rds.aliyuncs.com;Port=3307;Database=blv_rcu_db;Uid=blv_rcu;Pwd=fnadiaJDIJ7546;charset=utf8; "
Private Sub Form1_Load ( sender As Object , e As EventArgs ) Handles MyBase . Load
PowerGridInit ( )
RatioGridInit ( )
LoadPowerInit ( )
End Sub
'给页面加载数据
Sub New ( nReportingScenario As ReportingScenario , roomtypeid As Integer , hotelid As Integer , uploaduser As String , datestr As String , roomtypename As String )
' 此调用是设计器所必需的。
InitializeComponent ( )
G_roomtypeid = roomtypeid
G_roomtypename = roomtypename
G_Hotelid = hotelid
G_Uploaduser = uploaduser
G_loopNameAddr = New Dictionary ( Of String , String )
G_ReportingScenario = nReportingScenario
2026-01-16 19:20:06 +08:00
Dim li As List ( Of MDevNodeMessage ) = nReportingScenario . getDateDisposeRuning ( True )
2025-12-25 15:55:38 +08:00
For Each item In li
If G_loopNameAddr . ContainsKey ( item . ModalAddress ) Then
Continue For
Else
G_loopNameAddr . Add ( item . ModalAddress , item . Name )
End If
Next
G_DateStr = New Dictionary ( Of String , List ( Of ( String , String ) ) )
2026-01-21 11:06:52 +08:00
If Not String . IsNullOrEmpty ( datestr ) Then
Dim tnli As List ( Of ( String , String ) )
Dim strbuf As String ( ) = datestr . Split ( vbLf )
Dim cstrbutf As String ( )
For Each item In strbuf
cstrbutf = item . Trim ( ) . Split ( " , " )
If G_DateStr . ContainsKey ( cstrbutf ( 2 ) ) Then
tnli = G_DateStr ( cstrbutf ( 2 ) )
tnli . Add ( ( cstrbutf ( 3 ) , cstrbutf ( 4 ) ) )
Else
tnli = New List ( Of ( String , String ) )
tnli . Add ( ( cstrbutf ( 3 ) , cstrbutf ( 4 ) ) )
G_DateStr . Add ( cstrbutf ( 2 ) , tnli )
End If
Next
Console . WriteLine ( G_DateStr . Count )
Else
Dim tnli1 As New List ( Of ( String , String ) )
'tnli1.Add(("60", "全局亮度节能"))
Dim tnli2 As New List ( Of ( String , String ) )
'tnli2.Add(("1", "1"))
G_DateStr . Add ( 2 , tnli1 )
G_DateStr . Add ( 3 , tnli2 )
End If
2025-12-25 15:55:38 +08:00
' 在 InitializeComponent() 调用之后添加任何初始化。
End Sub
Public Sub PowerGridInit ( )
PowerInit . NewFile ( )
PowerInit . DisplayRowNumber = True
PowerInit . Cols = 9
PowerInit . Rows = 1
PowerInit . ExtendLastCol = True
PowerInit . Cell ( 0 , 0 ) . Text = " ID "
PowerInit . Cell ( 0 , 1 ) . Text = " 启用 "
PowerInit . Cell ( 0 , 2 ) . Text = " 酒店编号 "
PowerInit . Cell ( 0 , 3 ) . Text = " 房型 "
PowerInit . Cell ( 0 , 4 ) . Text = " 本地回路名称 "
PowerInit . Cell ( 0 , 5 ) . Text = " 回路地址 "
PowerInit . Cell ( 0 , 6 ) . Text = " 功率 "
PowerInit . Cell ( 0 , 7 ) . Text = " 节能比例(%) "
PowerInit . Cell ( 0 , 8 ) . Text = " 备注 "
PowerInit . Column ( 0 ) . Width = 40
PowerInit . Column ( 1 ) . Width = 20
PowerInit . Column ( 2 ) . Width = 60
PowerInit . Column ( 3 ) . Width = 200
PowerInit . Column ( 4 ) . Width = 100
PowerInit . Column ( 5 ) . Width = 80
PowerInit . Column ( 6 ) . Width = 50
PowerInit . Column ( 7 ) . Width = 80
PowerInit . Column ( 1 ) . CellType = FlexCell . CellTypeEnum . CheckBox
PowerInit . Column ( 7 ) . CellType = FlexCell . CellTypeEnum . ComboBox
PowerInit . Column ( 0 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
PowerInit . Column ( 1 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
PowerInit . Column ( 2 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
PowerInit . Column ( 3 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
PowerInit . Column ( 4 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
PowerInit . Column ( 5 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
PowerInit . Column ( 6 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
PowerInit . Column ( 7 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
PowerInit . Column ( 8 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
'设置1到4列不可编辑
For i As Integer = 2 To 5
PowerInit . Column ( i ) . Locked = True
Next
End Sub
'加载PowerInit表
Public Sub LoadPowerInit ( )
If IsNothing ( G_loopNameAddr ) OrElse G_loopNameAddr . Count = 0 Then Return
Dim dic As Dictionary ( Of String , Dictionary ( Of String , String ) ) = GetholteloopVAl ( G_Hotelid , G_roomtypeid )
Dim ncdic As Dictionary ( Of String , String )
Dim li As List ( Of ( String , String ) )
Dim Gcstr As String
Dim Ginttype As Integer = - 1
For i As Integer = 0 To G_loopNameAddr . Keys . Count - 1
Gcstr = G_loopNameAddr . Keys ( i ) . Substring ( 0 , 3 )
Integer . TryParse ( Gcstr , Ginttype )
Select Case Ginttype
2026-01-16 19:20:06 +08:00
Case 24 , 1 'pwm调光 、继电器
2025-12-25 15:55:38 +08:00
li = G_DateStr ( 2 . ToString )
PowerInit . AddItem ( " " )
PowerInit . Cell ( PowerInit . Rows - 1 , 2 ) . Text = G_Hotelid
PowerInit . Cell ( PowerInit . Rows - 1 , 3 ) . Text = G_roomtypename
PowerInit . Cell ( PowerInit . Rows - 1 , 4 ) . Text = G_loopNameAddr . Values ( i )
PowerInit . Cell ( PowerInit . Rows - 1 , 5 ) . Text = G_loopNameAddr . Keys ( i )
PowerInit . Cell ( PowerInit . Rows - 1 , 6 ) . Text = " 0 "
If li . Count > 0 Then
2026-01-21 11:06:52 +08:00
'默认勾选ta
2025-12-25 15:55:38 +08:00
PowerInit . Cell ( PowerInit . Rows - 1 , 7 ) . Text = li ( 0 ) . Item1
Else
2026-01-21 11:06:52 +08:00
PowerInit . Cell ( PowerInit . Rows - 1 , 7 ) . Text = " 60 "
2025-12-25 15:55:38 +08:00
End If
If Not IsNothing ( dic ) AndAlso dic . ContainsKey ( G_loopNameAddr . Keys ( i ) ) Then
ncdic = dic ( G_loopNameAddr . Keys ( i ) )
PowerInit . Cell ( PowerInit . Rows - 1 , 1 ) . Text = ncdic . Item ( " push_state " )
PowerInit . Cell ( PowerInit . Rows - 1 , 6 ) . Text = ncdic . Item ( " power " )
PowerInit . Cell ( PowerInit . Rows - 1 , 8 ) . Text = ncdic . Item ( " remark " )
End If
Case 52 '色温
li = G_DateStr ( 2 . ToString )
PowerInit . AddItem ( " " )
PowerInit . Cell ( PowerInit . Rows - 1 , 2 ) . Text = G_Hotelid
PowerInit . Cell ( PowerInit . Rows - 1 , 3 ) . Text = G_roomtypename
PowerInit . Cell ( PowerInit . Rows - 1 , 4 ) . Text = G_loopNameAddr . Values ( i )
PowerInit . Cell ( PowerInit . Rows - 1 , 5 ) . Text = G_loopNameAddr . Keys ( i )
PowerInit . Cell ( PowerInit . Rows - 1 , 6 ) . Text = " 0 "
If li . Count > 0 Then
2026-01-21 11:06:52 +08:00
2025-12-25 15:55:38 +08:00
PowerInit . Cell ( PowerInit . Rows - 1 , 7 ) . Text = li ( 0 ) . Item1
Else
2026-01-21 11:06:52 +08:00
PowerInit . Cell ( PowerInit . Rows - 1 , 7 ) . Text = " 60 "
2025-12-25 15:55:38 +08:00
End If
If Not IsNothing ( dic ) AndAlso dic . ContainsKey ( G_loopNameAddr . Keys ( i ) ) Then
ncdic = dic ( G_loopNameAddr . Keys ( i ) )
'PowerInit.Cell(PowerInit.Rows - 1, 3).Text = ncdic.Item("name")
PowerInit . Cell ( PowerInit . Rows - 1 , 1 ) . Text = ncdic . Item ( " push_state " )
PowerInit . Cell ( PowerInit . Rows - 1 , 6 ) . Text = ncdic . Item ( " power " )
PowerInit . Cell ( PowerInit . Rows - 1 , 8 ) . Text = ncdic . Item ( " remark " )
End If
Case 50 'pwm调光
li = G_DateStr ( 2 . ToString )
PowerInit . AddItem ( " " )
PowerInit . Cell ( PowerInit . Rows - 1 , 2 ) . Text = G_Hotelid
PowerInit . Cell ( PowerInit . Rows - 1 , 3 ) . Text = G_roomtypename
PowerInit . Cell ( PowerInit . Rows - 1 , 4 ) . Text = G_loopNameAddr . Values ( i )
PowerInit . Cell ( PowerInit . Rows - 1 , 5 ) . Text = G_loopNameAddr . Keys ( i )
PowerInit . Cell ( PowerInit . Rows - 1 , 6 ) . Text = " 0 "
If li . Count > 0 Then
2026-01-21 11:06:52 +08:00
2025-12-25 15:55:38 +08:00
PowerInit . Cell ( PowerInit . Rows - 1 , 7 ) . Text = li ( 0 ) . Item1
Else
2026-01-21 11:06:52 +08:00
PowerInit . Cell ( PowerInit . Rows - 1 , 7 ) . Text = " 60 "
2025-12-25 15:55:38 +08:00
End If
If Not IsNothing ( dic ) AndAlso dic . ContainsKey ( G_loopNameAddr . Keys ( i ) ) Then
ncdic = dic ( G_loopNameAddr . Keys ( i ) )
'PowerInit.Cell(PowerInit.Rows - 1, 3).Text = ncdic.Item("name")
PowerInit . Cell ( PowerInit . Rows - 1 , 1 ) . Text = ncdic . Item ( " push_state " )
PowerInit . Cell ( PowerInit . Rows - 1 , 6 ) . Text = ncdic ( " power " )
PowerInit . Cell ( PowerInit . Rows - 1 , 8 ) . Text = ncdic ( " remark " )
End If
Case 7 '温控
li = G_DateStr ( 3 . ToString )
RatioInit . AddItem ( " " )
RatioInit . Cell ( RatioInit . Rows - 1 , 2 ) . Text = G_Hotelid
RatioInit . Cell ( RatioInit . Rows - 1 , 3 ) . Text = G_roomtypename
RatioInit . Cell ( RatioInit . Rows - 1 , 4 ) . Text = G_loopNameAddr . Values ( i )
RatioInit . Cell ( RatioInit . Rows - 1 , 5 ) . Text = G_loopNameAddr . Keys ( i )
If li . Count > 0 Then
2026-01-21 11:06:52 +08:00
2025-12-25 15:55:38 +08:00
'取回路地址第4到6位转成int类型
Dim Ginttype2 As Integer = Integer . Parse ( G_loopNameAddr . Keys ( i ) . Substring ( 3 , 3 ) )
'使用linq查询li中Item2为Ginttype2的项 取其Item1
Dim Gstr As String = ( From x In li Where x . Item1 = Ginttype2 Select x . Item2 ) . FirstOrDefault
RatioInit . Cell ( RatioInit . Rows - 1 , 9 ) . Text = Gstr
Else
2026-01-21 11:06:52 +08:00
RatioInit . Cell ( RatioInit . Rows - 1 , 9 ) . Text = " 1 "
2025-12-25 15:55:38 +08:00
End If
If Not IsNothing ( dic ) AndAlso dic . ContainsKey ( G_loopNameAddr . Keys ( i ) ) Then
ncdic = dic ( G_loopNameAddr . Keys ( i ) )
'RatioInit.Cell(0, 1).Text = "酒店编号"
'RatioInit.Cell(0, 2).Text = "房型"
'RatioInit.Cell(0, 3).Text = "空调名称"
'RatioInit.Cell(0, 4).Text = "空调回路"
'RatioInit.Cell(0, 5).Text = "空调类型"
'RatioInit.Cell(0, 6).Text = "厂牌"
'RatioInit.Cell(0, 7).Text = "型号"
'RatioInit.Cell(0, 8).Text = "空调节能温差"
'RatioInit.Cell(0, 9).Text = "房间高度"
'RatioInit.Cell(0, 10).Text = "房间面积"
'RatioInit.Cell(0, 11).Text = "热损失系数"
'RatioInit.Cell(0, 12).Text = "备注"
RatioInit . Cell ( RatioInit . Rows - 1 , 1 ) . Text = ncdic . Item ( " push_state " )
RatioInit . Cell ( RatioInit . Rows - 1 , 6 ) . Text = ncdic ( " air_type " )
RatioInit . Cell ( RatioInit . Rows - 1 , 7 ) . Text = ncdic ( " air_brand " )
RatioInit . Cell ( RatioInit . Rows - 1 , 8 ) . Text = ncdic ( " air_model " )
RatioInit . Cell ( RatioInit . Rows - 1 , 10 ) . Text = ncdic ( " height " )
RatioInit . Cell ( RatioInit . Rows - 1 , 11 ) . Text = ncdic ( " area " )
RatioInit . Cell ( RatioInit . Rows - 1 , 12 ) . Text = ncdic ( " heat_loss " )
RatioInit . Cell ( RatioInit . Rows - 1 , 13 ) . Text = ncdic ( " remark " )
End If
2026-01-16 19:20:06 +08:00
2025-12-25 15:55:38 +08:00
End Select
Next
End Sub
Public Function GetholteloopVAl ( hotelID As String , roomtypeid As String ) As Dictionary ( Of String , Dictionary ( Of String , String ) )
If String . IsNullOrEmpty ( hotelID ) AndAlso String . IsNullOrEmpty ( roomtypeid ) Then Return Nothing
Dim dic As Dictionary ( Of String , Dictionary ( Of String , String ) ) = New Dictionary ( Of String , Dictionary ( Of String , String ) )
Dim dt As DataTable
Dim indexDci As Dictionary ( Of String , String )
Using db As New DbExecutor ( DbExecutor . DbTypeEnum . Mysql , DbConnString )
db . Open ( )
dt = db . ExecuteDataTable ( db . CmdHelper . DbSearchAll ( " blv_rcu_db " , " tbl_room_type_circuit_powers " , $ " `hotel_rcu_code`='{hotelID}' and `room_type_code`='{roomtypeid}' " ) )
db . Close ( )
End Using
If IsNothing ( dt ) OrElse dt . Rows . Count = 0 Then Return Nothing
For Each row As DataRow In dt . Rows
If dic . ContainsKey ( row ( " address " ) ) Then
indexDci = dic ( row ( " address " ) )
indexDci ( " push_state " ) = row ( " push_state " )
indexDci ( " type " ) = row ( " type " )
indexDci ( " name " ) = row ( " name " )
indexDci ( " power " ) = row ( " power " )
indexDci ( " rate " ) = row ( " rate " )
indexDci ( " temperature " ) = row ( " temperature " )
If Not IsDBNull ( row ( " air_type " ) ) Then
indexDci ( " air_type " ) = row ( " air_type " )
End If
If Not IsDBNull ( row ( " air_brand " ) ) Then
indexDci ( " air_brand " ) = row ( " air_brand " )
End If
If Not IsDBNull ( row ( " air_model " ) ) Then
indexDci ( " air_model " ) = row ( " air_model " )
End If
indexDci ( " height " ) = row ( " height " )
indexDci ( " area " ) = row ( " area " )
indexDci ( " heat_loss " ) = row ( " heat_loss " )
indexDci ( " remark " ) = row ( " remark " )
Else
indexDci = New Dictionary ( Of String , String )
indexDci . Add ( " type " , row ( " type " ) )
indexDci . Add ( " push_state " , row ( " push_state " ) )
indexDci . Add ( " name " , row ( " name " ) )
indexDci . Add ( " power " , row ( " power " ) )
indexDci . Add ( " rate " , row ( " rate " ) )
indexDci . Add ( " temperature " , row ( " temperature " ) )
If Not IsDBNull ( row ( " air_type " ) ) Then
indexDci . Add ( " air_type " , row ( " air_type " ) )
End If
If Not IsDBNull ( row ( " air_brand " ) ) Then
indexDci . Add ( " air_brand " , row ( " air_brand " ) )
End If
If Not IsDBNull ( row ( " air_model " ) ) Then
indexDci . Add ( " air_model " , row ( " air_model " ) )
End If
indexDci . Add ( " height " , row ( " height " ) )
indexDci . Add ( " area " , row ( " area " ) )
indexDci . Add ( " heat_loss " , row ( " heat_loss " ) )
indexDci . Add ( " remark " , row ( " remark " ) )
dic . Add ( row ( " address " ) , indexDci )
End If
Next
Return dic
End Function
Public Sub RatioGridInit ( )
RatioInit . NewFile ( )
RatioInit . DisplayRowNumber = True
RatioInit . Cols = 14
RatioInit . Rows = 1
RatioInit . ExtendLastCol = True
RatioInit . Cell ( 0 , 0 ) . Text = " ID "
'酒店编号 房间号 空调回路 空调类型 厂牌 型号 空调节能温差 备注
RatioInit . Cell ( 0 , 1 ) . Text = " 启用 "
RatioInit . Cell ( 0 , 2 ) . Text = " 酒店编号 "
RatioInit . Cell ( 0 , 3 ) . Text = " 房型 "
RatioInit . Cell ( 0 , 4 ) . Text = " 空调名称 "
RatioInit . Cell ( 0 , 5 ) . Text = " 空调回路 "
RatioInit . Cell ( 0 , 6 ) . Text = " 空调类型 "
RatioInit . Cell ( 0 , 7 ) . Text = " 厂牌 "
RatioInit . Cell ( 0 , 8 ) . Text = " 型号 "
RatioInit . Cell ( 0 , 9 ) . Text = " 空调节能温差 "
RatioInit . Cell ( 0 , 10 ) . Text = " 房间高度 "
RatioInit . Cell ( 0 , 11 ) . Text = " 房间面积 "
RatioInit . Cell ( 0 , 12 ) . Text = " 热损失系数 "
RatioInit . Cell ( 0 , 13 ) . Text = " 备注 "
RatioInit . Column ( 0 ) . Width = 40
RatioInit . Column ( 1 ) . Width = 20
RatioInit . Column ( 2 ) . Width = 60
RatioInit . Column ( 3 ) . Width = 200
RatioInit . Column ( 4 ) . Width = 100
RatioInit . Column ( 5 ) . Width = 80
RatioInit . Column ( 6 ) . Width = 50
RatioInit . Column ( 7 ) . Width = 100
RatioInit . Column ( 8 ) . Width = 80
RatioInit . Column ( 9 ) . Width = 80
RatioInit . Column ( 10 ) . Width = 80
RatioInit . Column ( 11 ) . Width = 80
RatioInit . Column ( 12 ) . Width = 80
RatioInit . Column ( 1 ) . CellType = FlexCell . CellTypeEnum . CheckBox
RatioInit . Column ( 9 ) . CellType = FlexCell . CellTypeEnum . ComboBox
RatioInit . Column ( 0 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
RatioInit . Column ( 1 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
RatioInit . Column ( 2 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
RatioInit . Column ( 3 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
RatioInit . Column ( 4 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
RatioInit . Column ( 5 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
RatioInit . Column ( 6 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
RatioInit . Column ( 7 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
RatioInit . Column ( 8 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
RatioInit . Column ( 9 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
RatioInit . Column ( 10 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
RatioInit . Column ( 11 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
RatioInit . Column ( 12 ) . Alignment = FlexCell . AlignmentEnum . CenterCenter
'设置 1到2 列为只读
For i As Integer = 2 To 3
RatioInit . Column ( i ) . Locked = True
Next
End Sub
'Private Function ToolStripButton1_Click(sender As Object, e As EventArgs) As List(Of Dictionary(Of String, Object))
Private Function GetRatioInitLi ( ) As List ( Of Dictionary ( Of String , Object ) )
'判断PowerInit 是否为空
If RatioInit . Rows = 1 Then
'MsgBox("请先添加完整的温控数据!")
Return Nothing
End If
''遍历PowerInit
Dim li As New List ( Of Dictionary ( Of String , Object ) )
Dim dic As Dictionary ( Of String , Object )
Dim fnumber As Double = 0
For i As Integer = 1 To RatioInit . Rows - 1
'遍历每一列
dic = New Dictionary ( Of String , Object )
dic . Add ( " type " , 1 )
2026-01-16 19:20:06 +08:00
dic . Add ( " is_carbon " , 0 )
2025-12-25 15:55:38 +08:00
If RatioInit . Cell ( i , 1 ) . Text . Equals ( " 1 " ) Then
dic . Add ( " push_state " , 1 )
Else
dic . Add ( " push_state " , 0 )
End If
For j As Integer = 4 To RatioInit . Cols - 1
'判断是否为空
Dim str As String = RatioInit . Cell ( i , j ) . Text
2026-01-05 11:03:10 +08:00
If String . IsNullOrEmpty ( RatioInit . Cell ( i , j ) . Text ) AndAlso j <> RatioInit . Cols - 1 AndAlso j <> 4 Then
MsgBox ( $ " 温控 第{i}行 {j}列数据缺失请补全数据再进行上传! " )
2025-12-25 15:55:38 +08:00
Return Nothing
End If
'RatioInit.Cell(0, 1).Text = "酒店编号"
'RatioInit.Cell(0, 2).Text = "房型"
'RatioInit.Cell(0, 3).Text = "空调名称"
'RatioInit.Cell(0, 4).Text = "空调回路"
'RatioInit.Cell(0, 5).Text = "空调类型"
'RatioInit.Cell(0, 6).Text = "厂牌"
'RatioInit.Cell(0, 7).Text = "型号"
'RatioInit.Cell(0, 8).Text = "空调节能温差"
'RatioInit.Cell(0, 9).Text = "备注"
'判断各列
Select Case j
Case 3
dic . Add ( " room_type_code " , G_roomtypeid )
Case 4
dic . Add ( " name " , RatioInit . Cell ( i , j ) . Text . Trim )
Case 5
dic . Add ( " address " , RatioInit . Cell ( i , j ) . Text . Trim )
Case 6
dic . Add ( " air_type " , RatioInit . Cell ( i , j ) . Text . Trim )
Case 7
dic . Add ( " air_brand " , RatioInit . Cell ( i , j ) . Text . Trim )
Case 8
dic . Add ( " air_model " , RatioInit . Cell ( i , j ) . Text . Trim )
Case 9
If Not Double . TryParse ( RatioInit . Cell ( i , j ) . Text . Trim , fnumber ) Then
2026-01-05 11:03:10 +08:00
MsgBox ( $ " 温控第{i}行{j}列,【空调节能温差】 数据异常! " )
2025-12-25 15:55:38 +08:00
Return Nothing
Else
If fnumber >= 15 Or fnumber < 0 Then
2026-01-05 11:03:10 +08:00
MsgBox ( $ " 温控第{i}行{j}列,【功率】 数据异常!数值范围为 1到15 " )
2025-12-25 15:55:38 +08:00
Return Nothing
End If
End If
dic . Add ( " temperature " , fnumber )
Case 10
If Not Double . TryParse ( RatioInit . Cell ( i , j ) . Text . Trim , fnumber ) Then
2026-01-05 11:03:10 +08:00
MsgBox ( $ " 温控第{i}行{j}列,【房间高度】 数据异常! " )
2025-12-25 15:55:38 +08:00
Return Nothing
End If
dic . Add ( " height " , fnumber )
Case 11
If Not Double . TryParse ( RatioInit . Cell ( i , j ) . Text . Trim , fnumber ) Then
2026-01-05 11:03:10 +08:00
MsgBox ( $ " 温控第{i}行,【房间面积】 数据异常! " )
2025-12-25 15:55:38 +08:00
Return Nothing
End If
dic . Add ( " area " , fnumber )
Case 12
If Not Double . TryParse ( RatioInit . Cell ( i , j ) . Text . Trim , fnumber ) Then
2026-01-05 11:03:10 +08:00
MsgBox ( $ " 温控第{i}行{j}列,【热损失系数】 数据异常! " )
2025-12-25 15:55:38 +08:00
Return Nothing
End If
dic . Add ( " heat_loss " , fnumber )
Case 13
dic . Add ( " remark " , RatioInit . Cell ( i , j ) . Text . Trim )
End Select
Next
li . Add ( dic )
Next
'Dim params As String = JsonConvert.SerializeObject(li)
'API_AllocationBarCode(G_Hotelid, li)
Return li
End Function
Private Sub ToolStripButton2_Click ( sender As Object , e As EventArgs ) Handles ToolStripButton3 . Click
'判断PowerInit 是否为空
If PowerInit . Rows = 1 Then
MsgBox ( " 请先添加数据 " )
Return
End If
''遍历PowerInit
Dim li As New List ( Of Dictionary ( Of String , Object ) )
Dim dic As Dictionary ( Of String , Object )
Dim fnumber As Double = 0
For i As Integer = 1 To PowerInit . Rows - 1
'遍历每一列
dic = New Dictionary ( Of String , Object )
dic . Add ( " type " , 0 )
2026-01-16 19:20:06 +08:00
dic . Add ( " is_carbon " , 0 )
2025-12-25 15:55:38 +08:00
If PowerInit . Cell ( i , 1 ) . Text . Equals ( " 1 " ) Then
dic . Add ( " push_state " , 1 )
Else
dic . Add ( " push_state " , 0 )
End If
2026-01-16 19:20:06 +08:00
2025-12-25 15:55:38 +08:00
For j As Integer = 4 To PowerInit . Cols - 1
'判断是否为空
Dim str As String = PowerInit . Cell ( i , j ) . Text
2026-01-05 11:03:10 +08:00
If String . IsNullOrEmpty ( PowerInit . Cell ( i , j ) . Text ) AndAlso j <> PowerInit . Cols - 1 AndAlso j <> 4 Then
MsgBox ( $ " 第{i}行{j}列数据缺失请补全数据再进行上传! " )
2025-12-25 15:55:38 +08:00
Return
End If
'判断各列
Select Case j
Case 3
dic . Add ( " room_type_code " , G_roomtypeid )
Case 4
dic . Add ( " name " , PowerInit . Cell ( i , j ) . Text . Trim )
Case 5
dic . Add ( " address " , PowerInit . Cell ( i , j ) . Text . Trim )
Case 6
If Not Double . TryParse ( PowerInit . Cell ( i , j ) . Text . Trim , fnumber ) Then
2026-01-05 11:03:10 +08:00
MsgBox ( $ " 第{i}行{j}列,【功率】 数据异常! " )
2025-12-25 15:55:38 +08:00
Return
Else
If fnumber >= 10000 Or fnumber < 0 Then
2026-01-05 11:03:10 +08:00
MsgBox ( $ " 第{i}行{j}列,【功率】 数据异常!数值范围为 1到10000 " )
2025-12-25 15:55:38 +08:00
Return
End If
End If
dic . Add ( " power " , fnumber )
Case 7
If Not Double . TryParse ( PowerInit . Cell ( i , j ) . Text . Trim , fnumber ) Then
2026-01-05 11:03:10 +08:00
MsgBox ( $ " 第{i}行{j}列,【节能比例(%)】 数据异常! " )
2025-12-25 15:55:38 +08:00
Return
Else
If fnumber > 100 Or fnumber < 0 Then
2026-01-05 11:03:10 +08:00
MsgBox ( $ " 第{i}行{j}列,【节能比例(%)】 数据异常!数值范围为 1到100 " )
2025-12-25 15:55:38 +08:00
Return
End If
End If
dic . Add ( " rate " , fnumber )
Case 8
dic . Add ( " remark " , PowerInit . Cell ( i , j ) . Text . Trim )
End Select
Next
li . Add ( dic )
Next
Dim strInputMsg As String = InputBox ( " 请输入密码 " , " 密码确认 " )
If strInputMsg <> " 123456 " Then Return
Dim Tli As List ( Of Dictionary ( Of String , Object ) ) = GetRatioInitLi ( )
If IsNothing ( Tli ) Then
'MsgBox("上传失败")
2026-01-21 11:06:52 +08:00
'Return
2025-12-25 15:55:38 +08:00
Else
'将tli 添加到li中
li . AddRange ( Tli )
End If
'插入数据到数据库
Deletetbl_room_type_circuit_powers ( G_Hotelid , G_roomtypeid , li )
GenerateTransactionInsertionStatements ( G_Hotelid , G_roomtypeid , li )
If API_AllocationBarCode ( G_Hotelid , G_roomtypeid , li ) Then
MsgBox ( " 上传成功 " )
Else
MsgBox ( " 上传失败 " )
End If
End Sub
'插入数据到数据库
Public Function Deletetbl_room_type_circuit_powers ( hotelID As String , roomtypeid As String , insertClunm As List ( Of Dictionary ( Of String , Object ) ) ) As Boolean
If IsNothing ( insertClunm ) AndAlso insertClunm . Count = 0 Then Return False
Dim dt As DataTable
Using db As New DbExecutor ( DbExecutor . DbTypeEnum . Mysql , DbConnString )
db . Open ( )
dt = db . ExecuteDataTable ( db . CmdHelper . DeleteRows ( " tbl_room_type_circuit_powers " , $ " `hotel_rcu_code`='{hotelID}' and `room_type_code`='{roomtypeid}' " ) )
db . Close ( )
End Using
Return True
End Function
'生成事务插入语句
Public Function GenerateTransactionInsertionStatements ( hotelID As String , roomtypeid As String , insertClunm As List ( Of Dictionary ( Of String , Object ) ) ) As Boolean
If IsNothing ( insertClunm ) AndAlso insertClunm . Count = 0 Then Return False
'遍历insertClunm
Dim colNames As New StringBuilder
Dim db As New DbExecutor ( DbExecutor . DbTypeEnum . Mysql , DbConnString )
Dim str As String = String . Empty
For Each dic As Dictionary ( Of String , Object ) In insertClunm
dic . Add ( " hotel_rcu_code " , hotelID )
dic . Add ( " room_type_code " , roomtypeid )
str = db . CmdHelper . Insert2 ( " tbl_room_type_circuit_powers " , dic )
colNames . Append ( str & vbCrLf )
Next
Return Add_room_type_circuit_powers ( colNames . ToString )
End Function
Public Function Add_room_type_circuit_powers ( insertClunm As String ) As Boolean
If String . IsNullOrEmpty ( insertClunm ) Then Return False
Dim dt As DataTable
Using db As New DbExecutor ( DbExecutor . DbTypeEnum . Mysql , DbConnString )
db . Open ( )
Try
db . BeginTransaction ( )
dt = db . ExecuteDataTable ( insertClunm )
db . CommitTransaction ( )
Catch ex As Exception
db . RollbackTransaction ( )
db . Close ( )
Return False
End Try
db . Close ( )
End Using
Return True
End Function
Public Shared Function API_AllocationBarCode ( hotelID As String , roomtypeid As String , params As List ( Of Dictionary ( Of String , Object ) ) ) As Boolean
Dim jsonString As String = String . Empty
Dim dic As New Dictionary ( Of String , Object )
'获取秒级时间戳
Dim timeStamp As String = ( DateTime . Now - New DateTime ( 1970 , 1 , 1 , 0 , 0 , 0 , 0 ) ) . TotalSeconds . ToString ( " 0 " )
Dim md5key As String = GetStringMd5 ( " BLV@blv-oa.com " )
Dim filepath As String = $ " hotel_code={hotelID}&time={timeStamp}&key={md5key.ToLower} "
Dim md5 As String = GetStringMd5 ( filepath )
dic . Add ( " hotel_code " , hotelID )
dic . Add ( " room_type_code " , roomtypeid )
dic . Add ( " time " , timeStamp )
dic . Add ( " sign " , md5 . ToLower )
dic . Add ( " params " , params )
Dim jsonDatastr As String = JsonConvert . SerializeObject ( dic )
Try
jsonString = HttpMothod . PostData2 ( " https://f-xcx.blv-oa.com/rcu/v1/circuit/power " , jsonDatastr )
Catch ex As Exception
MsgBox ( $ " 网络API调用错误, 请联系管理员。 " )
Return Nothing
End Try
'Console.WriteLine(jsonString)
If jsonString = Nothing Then
Return False
End If
Dim login As Dictionary ( Of String , String )
Try
login = JsonConvert . DeserializeObject ( Of Dictionary ( Of String , String ) ) ( jsonString )
If Not IsNothing ( login ) AndAlso login . ContainsKey ( " code " ) Then
If login . Item ( " code " ) . Equals ( " 200 " ) Then
Return True
Else
Return False
End If
Return False
Else
Return False
End If
Catch ex As Exception
'MsgBox($"Json数据转换错误, 请联系管理员。详情 : Json data to AllocationAPI error")
Return False
End Try
End Function
Public Shared Function PostData ( ByVal url As String , ByVal data As String ) As String
ServicePointManager . Expect100Continue = False
Dim request As HttpWebRequest = CType ( WebRequest . Create ( url ) , HttpWebRequest )
'//Post请求方式
request . Method = " POST "
'内容类型
request . ContentType = " application/x-www-form-urlencoded "
'将URL编码后的字符串转化为字节
Dim encoding As New UTF8Encoding ( )
Dim bys As Byte ( ) = encoding . GetBytes ( data )
'设置请求的 ContentLength
request . ContentLength = bys . Length
'获得请 求流
Dim newStream As Stream = request . GetRequestStream ( )
newStream . Write ( bys , 0 , bys . Length )
newStream . Close ( )
'获得响应流
Dim sr As StreamReader = New StreamReader ( request . GetResponse ( ) . GetResponseStream )
Return sr . ReadToEnd
End Function
Private Sub PowerInit_CellChange ( Sender As Object , e As FlexCell . Grid . CellChangeEventArgs ) Handles PowerInit . CellChange
If e . Row = 0 Then Return
If e . Col = 6 Or e . Col = 7 Then
Dim fnumber As Double
If Double . TryParse ( PowerInit . Cell ( e . Row , e . Col ) . Text . Trim , fnumber ) Then
If ( fnumber > 100 Or fnumber < 0 ) AndAlso e . Col = 7 Then
MsgBox ( $ " 第{PowerInit.Cell(e.Row, 0).Text}行,【节能比例(%)】 数据异常!数值范围为 1到100 " )
Return
End If
Else
2026-01-21 11:06:52 +08:00
MsgBox ( $ " 第{PowerInit.Cell(e.Row, 0).Text} 行 【功率】或节能比例 数据格式不正确,请输入数字! " )
2025-12-25 15:55:38 +08:00
Return
End If
End If
2026-01-21 11:06:52 +08:00
2025-12-25 15:55:38 +08:00
End Sub
Private Sub PowerInit_ComboDropDown ( Sender As Object , e As FlexCell . Grid . ComboDropDownEventArgs ) Handles PowerInit . ComboDropDown
If e . Row = 0 Then Return
If e . Col = 7 Then
PowerInit . ComboBox ( e . Col ) . Items . Clear ( )
'设置选项为 1到100
For i As Integer = 1 To 100
PowerInit . ComboBox ( e . Col ) . Items . Add ( i . ToString ( ) )
Next
End If
End Sub
Private Sub RatioInit_CellChange ( Sender As Object , e As FlexCell . Grid . CellChangeEventArgs ) Handles RatioInit . CellChange
If e . Row = 0 Then Return
If e . Col = 9 Then
Dim fnumber As Double
If Double . TryParse ( RatioInit . Cell ( e . Row , e . Col ) . Text . Trim , fnumber ) Then
If fnumber >= 1 And fnumber <= 15 Then
Else
MsgBox ( $ " 第{RatioInit.Cell(e.Row, 0).Text}行,【空调节能温差】 数据异常,【空调节能温差】数值范围为 1到15! " )
End If
Else
2026-01-21 11:06:52 +08:00
'MsgBox($"第{RatioInit.Cell(e.Row, 0).Text}行,【空调节能温差】 数据异常!")
2025-12-25 15:55:38 +08:00
Return
End If
End If
2026-01-21 11:06:52 +08:00
2025-12-25 15:55:38 +08:00
End Sub
Private Sub RatioInit_ComboDropDown ( Sender As Object , e As FlexCell . Grid . ComboDropDownEventArgs ) Handles RatioInit . ComboDropDown
If e . Row = 0 Then Return
If e . Col = 9 Then
RatioInit . ComboBox ( e . Col ) . Items . Clear ( )
'设置选项为 1到100
For i As Integer = 1 To 15
RatioInit . ComboBox ( e . Col ) . Items . Add ( i . ToString ( ) )
Next
End If
End Sub
Private Sub CheckBox1_CheckedChanged ( sender As Object , e As EventArgs ) Handles CheckBox1 . CheckedChanged
'当勾选时CheckBox1时将PowerInit表和RatioInit表中各行启用列设置为1
If CheckBox1 . Checked Then
For i As Integer = 1 To PowerInit . Rows - 1
PowerInit . Cell ( i , 1 ) . Text = " 1 "
Next
For i As Integer = 1 To RatioInit . Rows - 1
RatioInit . Cell ( i , 1 ) . Text = " 1 "
Next
Else
'当取消勾选时CheckBox1时将PowerInit表和RatioInit表中各行启用列设置为0
For i As Integer = 1 To PowerInit . Rows - 1
PowerInit . Cell ( i , 1 ) . Text = " 0 "
Next
For i As Integer = 1 To RatioInit . Rows - 1
RatioInit . Cell ( i , 1 ) . Text = " 0 "
Next
End If
End Sub
End Class