甘肃特色果品区块链溯源智慧云平台开发
2022-12-13李鸿杰周璐琼
张 超 李鸿杰 王 琴 米 莹 周璐琼
(甘肃林业职业技术学院,甘肃 天水 741020)
1 开发工具
经过调查、对比、分析,甘肃特色果品溯源智慧云平台的开发采用面向对象的VB.NET程序设计语言和面向大中型企业的数据库管理系统作为开发工具,具体信息如下:
开发工具:Microsoft Visual Studio 2010
数据库管理系统:SQL Server 2008
运行环境:Microsoft .NET Framework 4.0
2 功能实现
甘肃特色果品区块链溯源智慧云平台主要包括溯源信息采集功能和果品质量安全追溯功能,即溯源信息的输入和输出两个方面。溯源信息的输入主要由特色果品种植主体、加工主体、质检主体和销售主体实时完成;而溯源信息的输出主要由特色果品消费者检索查询获取。具体信息流如图1所示:
图1 溯源平台信息流图
3 系统编码
使用VB.NET编程语言和SQL Server数据库管理系统对甘肃特色果品质量安全信息进行全流程管理,主要包括质量安全因子的增、删、改、查等操作。22个质量管理环节和全流程信息均可以通过各自的管理模块进行采集和追踪,而果品编码则是贯穿整个数据采集、管理的唯一标识,果品编码模块核心代码如下:
Private Subguopinbianma_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
bd = False
Dimselectstr As String
selectstr = "select (select count(果品编码) from [guopinbianma] as [guopinbianma2] where [guopinbianma2].ID<=[guopinbianma].ID) as 序号,果园标识,果品类别,果品名称,果品等级,果品编码,查询次数,果品状态,备注,ID from [guopinbianma] order by 序号"
sqladapter = New SqlDataAdapter(selectstr, sqlconn)
Dim guopinbianmatmp1 As NewDataTable
If ds.Tables("guopinbianmatmp1") IsNot Nothing Then
ds.Tables("guopinbianmatmp1").Clear()
End If
sqladapter.Fill(ds, "guopinbianmatmp1")
DataGridView1.DataSource =ds.Tables("guopinbianmatmp1")
Fori As Int32 = 0 To DataGridView1.Columns.Count - 1
DataGridView1.Columns(i).SortMode = DataGridViewColumnSortMode.NotSortable
Next
DataGridView1.Columns("ID").Visible = False
Ifds.Tables("guopinbianmatmp1").Rows.Count > 0 Then
Select Case flag
Case "add"
DataGridView1.CurrentCell = DataGridView1.Rows(DataGridView1.Rows.Count - 1).Cells("序号").value
DataGridView1.Rows(DataGridView1.Rows.Count - 1).Selected = True
Case "modify"
DataGridView1.CurrentCell = DataGridView1.Rows(rec).Cells("序号").value
DataGridView1.Rows(rec).Selected = True
Case "delete"
If rec = DataGridView1.Rows.Count Then
DataGridView1.CurrentCell = DataGridView1.Rows(rec - 1).Cells("序号").value
DataGridView1.Rows(rec - 1).Selected = True
Else
DataGridView1.CurrentCell = DataGridView1.Rows(rec).Cells("序号").value
DataGridView1.Rows(rec).Selected = True
End If
Case Else
DataGridView1.CurrentCell = DataGridView1.Rows(rec).Cells("序号").value
End Select
End If
flag = ""
check = False
lockcontrol()
IfLogin.usertype = "系统管理员" Then
Button1.Enabled = True
Button2.Enabled = True
Else
Button1.Enabled = False
Button2.Enabled = False
Button4.Enabled = False
End If
bd = True
End Sub
以上代码为果品编码模块的Load事件过程,主要进行模块的初始化操作,包括在DataGridView控件中加载果品编码信息,初始化界面中的所有数据绑定控件和按钮控件等。
Private SubButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
n =InputBox("请输入要进行果品编码的数量:", "编码数量", 1)
If Int(n) > 0 Then
If DataGridView1.Rows.Count > 0 Then
rec = DataGridView1.CurrentCell.RowIndex
End If
flag = "add"
Button1.Enabled = False
Button2.Enabled = False
lockcontrol()
TextBox1.clear()
ComboBox1.clear()
ComboBox2.clear()
ComboBox3.clear()
ComboBox4.clear()
TextBox2.clear()
TextBox3.Text = "0"
ComboBox5.clear()
TextBox4.clear()
ComboBox1.Focus()
Me.AcceptButton = Button3
Me.CancelButton = Button5
End If
End Sub
以上代码为果品编码模块上Button1的Click事件过程,主要完成用户单击事件发生时,添加记录的初始化操作。
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If DataGridView1.RowCount > 0 Then
rec = DataGridView1.CurrentRow.Index
flag = "modify"
Button1.Enabled = False
Button2.Enabled = False
lockcontrol()
ComboBox1.Focus()
Me.AcceptButton = Button3
Me.CancelButton = Button5
Else
MsgBox("表中无数据!", , "信息提示")
End If
End Sub
以上代码为果品编码模块上Button2的Click事件过程,主要完成用户单击事件发生时,修改记录的初始化操作。
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
checkdata()
If check = True Then
Select Case flag
Case "add"
Try
DimMyRnd As New Random
Dim a, b, c As Integer
Ifsqlconn.State = ConnectionState.Closed Then
sqlconn.Open()
End If
Fori As Integer = 1 To n
a =MyRnd.Next
b =MyRnd.Next
c =MyRnd.Next
Dim cod As String = TextBox1.Text & Format(Now, "YYYYMMDDHHmmssSSS") & a & b & c
sqladapter.InsertCommand = New SqlCommand("insert into [guopinbianma](果园标识,果品类别,果品名称,果品等级,果品编码,查询次数,果品状态,备注) values('" & ComboBox1.Text & "','" & ComboBox2.Text & "','" & ComboBox3.Text & "','" & ComboBox4.Text & "','" & cod & "','" & TextBox3.Text & "','" & ComboBox5.Text & "','" & TextBox4.Text & "')", sqlconn)
sqladapter.InsertCommand.ExecuteNonQuery()
Next
MsgBox("果品编码添加成功!", MsgBoxStyle.Information, "成功提示")
CatchsqlExceptionErr As SqlClient.SqlException
MessageBox.Show(sqlExceptionErr.Message)
Finally
sqlconn.Close()
End Try
guopinbianma_Load(Sender, e)
guopinbianma_Activated(Sender, e)
Case "modify"
Try
sqladapter.UpdateCommand = New SqlCommand("update [guopinbianma] set 果园标识='" & ComboBox1.Text & "',果品类别='" & ComboBox2.Text & "',果品名称='" & ComboBox3.Text & "',果品等级='" & ComboBox4.Text & "',果品编码='" & TextBox2.Text & "',查询次数='" & TextBox3.Text & "',果品状态='" & ComboBox5.Text & "',备注='" & TextBox4.Text & "' where ID='" & DataGridView1.CurrentRow.Cells("ID").Value & "'", sqlconn)
Ifsqlconn.State = ConnectionState.Closed Then
sqlconn.Open()
End If
sqladapter.UpdateCommand.ExecuteNonQuery()
MsgBox("果品编码信息修改成功!", MsgBoxStyle.Information, "成功提示")
Catch ex As Exception
Finally
sqlconn.Close()
End Try
guopinbianma_Load(Sender, e)
End Select
End If
End Sub
以上代码为果品编码模块上Button3的Click事件过程,主要是对用户添加或修改的果品编码信息进行保存,并初始化界面上各控件的状态。
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Ifds.Tables("guopinbianmatmp1").Rows.Count > 0 Then
rec = DataGridView1.CurrentCell.RowIndex
IfMsgBox("确定删除记录吗?", vbInformation + vbOKCancel + vbDefaultButton2, "删除提示") = vbOK Then
Try
Dimdeletestr As String = "delete from [guopinbianma] where ID='" & DataGridView1.CurrentRow.Cells("ID").Value & "'"
sqladapter.DeleteCommand = New SqlCommand(deletestr, sqlconn)
Ifsqlconn.State = ConnectionState.Closed Then
sqlconn.Open()
End If
sqladapter.DeleteCommand.ExecuteNonQuery()
MsgBox("果品编号删除成功!", vbInformation, "成功提示")
flag = "delete"
guopinbianma_Load(Sender, e)
guopinbianma_Activated(sender, e)
Catch ex As Exception
Finally
sqlconn.Close()
End Try
End If
End If
End Sub
以上代码为果品编码模块上Button4的Click事件过程,主要完成选定记录的删除操作,并初始化界面上控件的状态。
4 调试运行
4.1 测试方法
系统测试,是检验各模块按照功能设计要求正常运行,保证系统安全、可靠、持续运行的必要手段,主要包括单元测试、集成测试、系统测试、验收测试和回归测试等。采用各种测试方法和技术对系统进行测绘的过程中,对发现的各种错误和Bug即时进行修改、完善,最终使各溯源模块能够稳定运行,实现其溯源管理功能,如图2所示。
图2 系统测试流程图
4.2 运行界面
系统界面包括登录界面、主操作平台界面,以及各溯源管理模块界面等。其中,用户登录界面和主操作平台界面如下图所示。
(1)用户登录界面
甘肃特色果品溯源智慧云平台为分布式管理系统,允许不同空间的用户实时进行数据采集、处理。为保证溯源环节信息的安全和责任可究,平台的用户登录界面可对用户身份的合法性进行验证,阻止非法用户登录,允许合法用户进入并使用相应的溯源模块管理信息。系统的用户类型包括栽培企业、加工部门、质检机构、收购企业、零售企业、消费者、系统管理员等,用户通过手机号码作为用户名登录,界面如图3。
图3 用户登录界面
(2)主操作平台界面
22个质量环节和管理信息模块通过主操作平台界面进行整合,并提供统一的操作入口,实现效果如图4。
图4 溯源平台主界面
5 小结
针对甘肃特色果品质量安全控制技术薄弱、生产规范程度较差、溯源体系不健全等现状,按照“市场需要、政府支持、产教融合”的行业发展需要,基于区块链数据难以篡改和去中心化的优点,通过溯源数据上链以实现甘肃特色果品生产过程、加工过程、质量检测、流程销售等质量安全关键环节全程可追溯,并打造甘肃特色果品的质量安全品牌形象。