摘 要
物联网技术作为继互联网技术后新一代的通信信息集成应用的典范,其巨大的应用前景受到了学术界和政商界的广泛关注。物联网技术在一些传统行业已经有了很深入的应用,例如,其在商品生产信息溯源、环境监测保护、物流、供应链、能源等领域的成功应用。
与此同时,物联网技术的发展也受到了安全隐私问题的制约。目前物联网拓扑结构一般是客户端一中央服务器模型,即中心化结构。这种结构的特点是数据管理方便、执行效率高,但是,我们经常看到用户数据被有意或无意泄露,给用户隐私带来巨大的危害,究其原因,正是因为中央数据存储机构监管困难,访问权限不明确。区块链作为近年来兴起的技术,具有去信任、去中心化和可溯源特性,是一种有潜力解决物联网隐私安全的技术,因此也是国内外学术界研究的热点。
本文着重研究了区块链系统中的共识机制,对月前主流的共识机制在吞吐量、时延等方面做了量化的比较,分析了每种共识算法的优势和不足,并对目前应用广泛的权益证明(proofof stake)共识机制进行系统的研究,本文针对权益共识机制中存在的“无风险投注”问题,提出了一种新的解决策略,该策略的具体做法是允许投票节点投出支持票和反对票两种,而不是目前存在的只能投出一种票,若节点对某一分叉投支持票该分叉最后胜出,则节点获得收益,反之,若节点对某一分叉投出反对票且该分叉最后没有胜出则节点获得收益。
设计了物联网数据交易系统,提供了区块链网络中点对点之间交互的能力,在以太坊区块链上进行了智能合约部署,设计了数据存储方法。最后,本文设计了基于区块链的物联网数据交易系统,该应用通过使用智能合约实现了数据的点对点自由交易,不需要第三方参与交易,这些交易不需要人为干预,物联网数据与系统代币以太币根据智能合约制定的规则进行交换。
关键词:物联网数据交易系统;Java;SSM;MYSQL
The Internet of Things (IoT) technology, as a model of the integrated application of communication and information of the new generation following the Internet technology, has attracted extensive attention from the academic and political and business circles for its huge application prospects. The Internet of Things technology has already had a very deep application in some traditional industries, for example, its successful application in commodity production information traceability, environmental monitoring and protection, logistics, supply chain, energy and other fields.
At the same time, the development of Internet of Things technology is also restricted by security and privacy issues. At present, the topology of the Internet of Things is generally the client central server model, namely the centralized structure. This structure is characterized by convenient data management and high execution efficiency. However, we often see that user data is leaked intentionally or unintentionally, which brings great harm to user privacy. The reason is that the central data storage organization is difficult to supervise and has unclear access rights. As a technology emerging in recent years, blockchain has the characteristics of distrust, decentralization and traceability. It is a technology that has the potential to solve the privacy security of the Internet of Things, so it is also a research hotspot in domestic and foreign academic circles.
This paper focuses on the consensus mechanism in the blockchain system, makes a quantitative comparison of the mainstream consensus mechanism in terms of throughput, delay, etc., analyzes the advantages and disadvantages of each consensus algorithm, and systematically studies the consensus mechanism of proof of stake, which is widely used at present. This paper proposes a new solution to the problem of "risk-free betting" in the equity consensus mechanism, The specific approach of this strategy is to allow voting nodes to cast support votes and negative votes, instead of only casting one vote at present. If a node votes in support of a fork and the fork finally wins, the node gains income. On the contrary, if a node votes against a fork and the fork does not win, the node gains income.
The Internet of Things data trading system is designed, which provides the ability of point-to-point interaction in the blockchain network. The smart contract is deployed on the Ethereum blockchain, and the data storage method is designed. Finally, this paper designs the Internet of Things data trading system based on the blockchain. This application realizes point-to-point free trading of data by using smart contracts, without the participation of a third party. These transactions do not require human intervention. The Internet of Things data and system token Ether are exchanged according to the rules established by the smart contract.
Keywords: Internet of Things data trading system; Java; SSM; MYSQ
目录
1 绪论
1.1 研究背景与意义
2008年,化名为中本聪的学者发表划时代的论文《比特币:一种点对点电子现金系统》",标志着区块链技术的诞生。以区块链作为底层技术的比特币数字货币系统的成功将这一技术彻底将这一技术推向研究与应用的高潮,其后陆陆续续出现了一些较为成熟的区块链平台,其中有代表性的有Ethereum平台、IBM Hyperledger平台、LISK 平台等。在加密货币领域更是出现了数不胜数的应用,区块链技术的众多成功应用案例引起了更多人对这一新技术的重视,越来越多的商业机构都推出了自己的区块链应用,例如,阿里巴巴2017年便推出了商品溯源链和蚂蚁金服公益链应用,越来越多的国家将数字代币合法化,这一切都表明区块链技术所带来的技术和思维变革为多数人渐渐接受。
区块链技术的巨大潜力引起了很多传统行业的注意,其中以金融领域和物联网领域最为火热,金融领域以支付系统和数字代币为代表,出现了很多成功的结合案例,而在物联网领域目前还处于比较早期的研究阶段,少有较为成熟的应用推出,但是,我们看到物联网的建设与发展确实受到了安全隐私问题的制约,具体来说是物联网数据的隐私性、存储安全性和数据完整性问题。首先数据隐私问题,物联网在家居、个人医疗、交通等方面的应用使得原本属于一些个人隐私的数据被采集起来,这些数据与个人生活息息相关,因此,物联网在方便生活的同时,却有损个人隐私:其次,是数据安全问题,智慧城市、能源、金融等行业已经与物联网有了深层次的融合,这些关乎国计民生的行业数据的存储安全不得不引起人们的担忧,这些数据一旦被窃取或者泄露将造成很大的危害;最后是数据完整性问题,很多领域对数据完整性有着极高的要求,例如物流和商品溯源领域。这些问题是目前传统物联网架构所决定的,亟待新的解决方案。
随着区块链和物联网获得广泛认可,技术世界似乎再次融合。今天,我们分别经历了这两种颠覆性技术的使用案例。物联网的重要性正在为电子器件及其连接的物体带来期待已久的技术革命。物联网对我们的日常生活产生了更为密切的影响,预计到2020年底,将有大约200亿台设备连接在一起工作。每一项技术进步都伴随着一些漏洞, 当数十 亿设备通过中央通信通道连接时,数据安全问题可能是一项重大挑战,这会导致单点故障,这意味着如果黑客发现单个漏洞,即使安装了各种类型安全协议的大型服务器表单,也可能会遭到损害,而区块链技术是分布式数据库技术,没有中央机构,是有可能解决这一问题的方案。因此loT( Internet of Things) +区块链方案应运而生。当然,基于区块链技术的物联网改造升级并不是一个推到重来的过程,而是一个相互融合的过程。鉴于以上分析物联网所出现的问题,区块链技术解决方案将带来一下三点新的变化:
(一)数据安全隐私方面有了新的解决方案。传统的物联网架构是中心化的结构,所有的数据都被中央机构统一采集管理, 首先,这种架构本身对数据安全就是一个威胁,一旦中央管理机构出现安全漏洞将危及大量用户数据安全隐私;其次,中央管理机构掌握着数据访问权限,出于商业利益将用户数据出售的风险确实存在。而在区块链技术中,没有中心化的机构,每一个数据操作都需要用户身份验证,同时每一个数据操作的日志会被永久地记录在区块中,这样,数据管理权限就掌握在了每一个用户手中,从而彻底解决数据安全隐私问题。
(二)区块链技术使得物联网数据有了新的交易模式。区块链最大的优势就是可以去信任地进行交易,用户与用户之间可以通过智能合约制定条款直接进行数据交易,不需要人为干预,这极大地提高了数据利用效率。
(三)区块链技术降低了企业成本。物联网设备呈现儿何级增长,传统物联网架构下中央机构的计算、存储、维护等成本压力骤升,而区块链技术维护是点对点网络中每个节点完成的,分散了压力,提高容错能力。
1.2研究现状
区块链是一种去中心化,分布式账本系统。它利用密码学原理来保证信息传递和处理的安全性;同时采用智能合约实现了对资源的透明访问以及对用户权限控制等功能。基于区块链技术的物联网数据应用场景及优势:
(1)通过智能合约进行数据流转;
(2)提高数据价值的挖掘能力;
(3)提升数据存储效率。在此基础上提出一种基于区块链的物联云平台架构方案,包括底层基础设施层、应用服务器层与上层服务层三部分。该架构将区块链技术融入到传统数据中心中,可以有效解决传统数据中心所存在的问题:虚拟化程度低;数据安全风险大;无法提供统一的数据共享标准;业务连续性差等。 最后以智慧城市管理为例进行实验测试,结果表明该框架可满足海量异构数据组织、传输、存储等需求。
1.3相关技术介绍
(1)基于区块链的物联网数据交易中的web后台管理中的后端不再使用古老的jsp+javabean+servlet技术,而是使用当前主流的SSM框架,它减少java配置代码,简化编程代码,目前SSM框架也是很多企业选择的框架之一。
(2)基于区块链的物联网数据交易中的web后台管理中的前端使用的是bootstrap框架,它配合ajax和jquery可以美化页面设计。
(3)流行vue框架结合jQuery技术,在jQuery基础上扩展一些插件,通过自己定义插件更好的实现前端的设计。
(4)基于区块链的物联网数据交易中数据库用的mysql5.7,它执行效率高。
2 基于区块链的物联网数据交易分析
通过了解对基于区块链的物联网数据交易的真实需求后,将基于区块链的物联网数据交易所需要的角色划分整理成了下图2-1,图2-2和图2-3。
从开发工具来看,由于基于区块链的物联网数据交易是基于JAVA的,因此有很多开发工具都可以进行开发,这些功能强大的开发工具可以给我来设计基于区块链的物联网数据交易带来非常大的方便。
从基于区块链的物联网数据交易的本身技术来说,对于我来开发一个基于区块链的物联网数据交易这个毕设是不费事的。基于区块链的物联网数据交易的开发可以简单的分为前台端、后台端开发以及数据库开发。其中的大部分技术难点在我上学时已经使用过了,同时网络上很多技术点可以让我来借鉴。Web后台管理使用JAVA[9]的SSM架构开发,数据库使用mysql,页面上使用javascript脚本,因此为我在开发基于区块链的物联网数据交易这个毕设上省去了很多多余代码,这给我的毕设项目编写带来了极大的便利。综上所述,从技术层面来看开发基于区块链的物联网数据交易是可行的。
从用户体验来看,市面上很多被广泛使用的系统案例可以让我来参考,因此我可以综合它们的页面交互设计的优点,基于我的毕设项目特点来进行改版,最后达到令用户满意的页面交互体验。综上所述,从技术层面来看开发基于区块链的物联网数据交易是可行的。
从基于区块链的物联网数据交易的开发成本来看,基于区块链的物联网数据交易的设计和开发都是我自己完成的,没有其他成本上的开销。
从基于区块链的物联网数据交易的维护成本来看,基于区块链的物联网数据交易的开发遵循一套完整的代码编写规范,并且基于区块链的物联网数据交易的结构设计非常灵活,遵循高内聚低耦合的原则,因此易于维护和迭代开发。
在基于区块链的物联网数据交易上线之后,上线前期我会根据真实需求来调查,对使用我开发的基于区块链的物联网数据交易来制定一套符合的使用费。系统运行稳定后我会将推广范围到其他的校园当中,其他校园可以使用我的基于区块链的物联网数据交易,只需要缴纳一点点的定金,我会给他们引入广告投资和自营业务。
综合以上的分析,基于区块链的物联网数据交易所带来的经济效益将会带来极大的收益。并且随着我的推广,来使用我开发的基于区块链的物联网数据交易的市场将越来越大,基于区块链的物联网数据交易带来的利润也就越来越多。因此,从经济层面来看开发基于区块链的物联网数据交易的是可行的。
基于区块链的物联网数据交易从角色上划分为了系统用户、管理员两种角色。
管理员用户角色:
(1)登录:管理员的账号是在数据表表中直接设置生成的,不需要进行注册;
(2)公告管理:当点击“公告管理”这一菜单的时候,会出现公告栏这一个子菜单,可以对这个模块进行增删改查操作;
(3)系统用户管理:当点击“系统用户管理”这一菜单的时候,会出现管理员+用户两个子菜单,可以对这两个模块进行增删改查操作;
(4)资源管理:当点击“资源管理”这一菜单的时候,会出现平台资讯+资讯分类这两个子菜单,可以对平台资讯进行增删改查操作;
(5)模块管理:当点击“模块管理”这一菜单的时候,会出现余额充值+数据交易+购买信息+交易记录这四个子菜单,能够对购买信息进行增删改查操作,对数据交易进行管理,以及实现对交易记录进行管理等;
系统用户角色:
(1)注册登录模块:当系统用户想要进入本基于区块链的物联网数据交易中对资讯进行查看评论以及了解药品信息等操作的时候,就必须要登录到系统当中,要是新的用户没有基于区块链的物联网数据交易的账号的话,点击“注册”按钮,就会进入到新用户注册这个界面上,用户输入对应的账号(必须填写)+密码(必须填写)+确认密码(必须填写,而且要与密码一直)+昵称+邮箱+手机号+选择用户身份等等,然后点击“注册”,系统在用户这一数据库中会查询账号是不是存在,两次密码是不是一样,都填写正确就会注册成功,然后再进行登录,如果是之前已经注册过的用户很长时间没有使用,忘记密码,也可以点击“忘记密码”进行找回;
(2)平台资讯:在首页导航栏上我们会看到“平台资讯”这一菜单,我们点击进入进去以后,会看到所有资讯列表,在这个界面,我们可以点击进入进行查看、评论、点赞等;
(3)公告消息:在首页导航栏上我们会看到“公告消息”这一菜单,我们点击进入进去以后,会看到所有管理员在后台发布的公告信息;
(4)我的收藏:在“我的”下可以查看管理“我的收藏”信息,可以查看收藏,也可以对不喜欢的信息进行删除收藏;
(5)我的账户:当用户点击右上角“我的”这个按钮,会出现子菜单,点击“我的账户”可以对个人的资料以及登录系统的密码进行设置;
(6)个人中心:当用户点击右上角“我的”这个按钮,就会进入到对应的后台进行信息的管理了;
基于区块链的物联网数据交易的非功能性需求比如基于区块链的物联网数据交易的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下2-1表格中:
表2-1基于区块链的物联网数据交易非功能需求表
安全性 | 主要指基于区块链的物联网数据交易数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
可靠性 | 可靠性是指基于区块链的物联网数据交易能够安装用户的指示进行操作,经过测试,可靠性90%以上。 |
性能 | 性能是影响基于区块链的物联网数据交易占据市场的必要条件,所以性能最好要佳才好。 |
可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
易用性 | 用户只要跟着基于区块链的物联网数据交易的页面展示内容进行操作,就可以了。 |
可维护性 | 基于区块链的物联网数据交易开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
2.3 系统用例分析
根据上一节功能分析,可以得出系统的用例,系统用户角色用例如图2.1所示。
图2.1 基于区块链的物联网数据交易中系统用户角色用例图
管理员角色用例如图2.2所示。
图2.2 基于区块链的物联网数据交易管理员角色用例图
3 基于区块链的物联网数据交易总体设计
根据第二章中基于区块链的物联网数据交易的功能分析可知,基于区块链的物联网数据交易中整体功能模块图如图3.1所示,
图3.1 基于区块链的物联网数据交易功能模块图
3.3.1 数据库概念结构设计
下面是整个基于区块链的物联网数据交易中主要的数据库表总E-R实体关系图。
图3.2 基于区块链的物联网数据交易总E-R关系图
通过上一小节中基于区块链的物联网数据交易中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。
(1)transaction表:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
transaction_id | int | 11 | 是 | 是 | 交易记录ID |
data_name | varchar | 64 | 否 | 否 | 数据名称 |
selling_users | int | 11 | 否 | 否 | 出售用户 |
selling_price | int | 11 | 否 | 否 | 出售价格 |
full_name | varchar | 64 | 否 | 否 | 姓名 |
user_no | varchar | 64 | 否 | 否 | 用户编号 |
buying_users | int | 11 | 否 | 否 | 购买用户 |
user_address | varchar | 64 | 否 | 否 | 用户地址 |
data_key | varchar | 64 | 否 | 否 | 数据密钥 |
equipment_type | varchar | 64 | 否 | 否 | 设备类型 |
data_type | varchar | 64 | 否 | 否 | 数据类型 |
data_hash | varchar | 64 | 否 | 否 | 数据哈希 |
incidental_information | text | 0 | 否 | 否 | 附带信息 |
order_number | varchar | 64 | 否 | 否 | 订单号 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
(2)system_user表:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
system_user_id | int | 11 | 是 | 是 | 系统用户ID |
full_name | varchar | 64 | 否 | 否 | 姓名 |
gender | varchar | 64 | 否 | 否 | 性别 |
user_balance | int | 11 | 否 | 否 | 用户余额 |
user_no | varchar | 64 | 是 | 否 | 用户编号 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
user_id | int | 11 | 是 | 否 | 用户ID |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
(3)recharge_balance表:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
recharge_balance_id | int | 11 | 是 | 是 | 余额充值ID |
rechargeable_user | int | 11 | 否 | 否 | 充值用户 |
full_name | varchar | 64 | 否 | 否 | 姓名 |
gender | varchar | 64 | 否 | 否 | 性别 |
user_balance | varchar | 64 | 否 | 否 | 用户余额 |
recharge_amount | int | 11 | 否 | 否 | 充值金额 |
recharging_remarks | varchar | 64 | 否 | 否 | 充值备注 |
user_no | varchar | 64 | 否 | 否 | 用户编号 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
(4)purchase_informatio表:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
purchase_information_id | int | 11 | 是 | 是 | 购买信息ID |
data_name | varchar | 64 | 否 | 否 | 数据名称 |
data_classification | varchar | 64 | 否 | 否 | 数据分类 |
selling_users | int | 11 | 否 | 否 | 出售用户 |
selling_price | int | 11 | 否 | 否 | 出售价格 |
buying_users | int | 11 | 否 | 否 | 购买用户 |
user_address | varchar | 64 | 否 | 否 | 用户地址 |
data_key | varchar | 64 | 否 | 否 | 数据密钥 |
full_name | varchar | 64 | 否 | 否 | 姓名 |
user_no | varchar | 64 | 否 | 否 | 用户编号 |
order_number | varchar | 64 | 否 | 否 | 订单号 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
(5)data_transaction表:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
data_transaction_id | int | 11 | 是 | 是 | 数据交易ID |
data_name | varchar | 64 | 否 | 否 | 数据名称 |
data_classification | varchar | 64 | 否 | 否 | 数据分类 |
cover_photo | varchar | 255 | 否 | 否 | 封面图片 |
data_description | text | 0 | 否 | 否 | 数据描述 |
selling_users | int | 11 | 否 | 否 | 出售用户 |
selling_price | int | 11 | 否 | 否 | 出售价格 |
hits | int | 11 | 是 | 否 | 点击数 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
(6)comment表:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
comment_id | int | 11 | 是 | 是 | 评论ID |
user_id | int | 11 | 是 | 否 | 评论人ID |
reply_to_id | int | 11 | 是 | 否 | 回复评论ID |
content | longtext | 0 | 否 | 否 | 内容 |
nickname | varchar | 255 | 否 | 否 | 昵称 |
avatar | varchar | 255 | 否 | 否 | 头像地址 |
create_time | timestamp | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 否 | 更新时间 |
source_table | varchar | 255 | 否 | 否 | 来源表 |
source_field | varchar | 255 | 否 | 否 | 来源字段 |
source_id | int | 10 | 是 | 否 | 来源ID |
4 基于区块链的物联网数据交易设计与实现
基于区块链的物联网数据交易的详细设计与实现主要是根据前面的基于区块链的物联网数据交易的需求分析和基于区块链的物联网数据交易的总体设计来设计页面并实现业务逻辑。主要从基于区块链的物联网数据交易界面实现、业务逻辑实现这两部分进行介绍。
4.1 系统首页页面
当进入基于区块链的物联网数据交易的时候,首先映入眼帘的是系统的导航栏,下面是轮播图以及系统内容,其主界面展示如下图4.1所示。
图4.1 系统用户界面图
不是基于区块链的物联网数据交易中正式用户的是可以在线进行注册的,如果你没有本基于区块链的物联网数据交易的账号的话,添加“注册”,当填写上自己的账号+密码+确认密码+昵称+邮箱+手机号等后再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可用户注册成功。注册界面实现了系统用户用户的注册,其注册界面展示如下图4。2所示。
图4.2 注册界面图
系统用户注册逻辑代码如下:
* 注册
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(HttpServletRequest request) throws IOException {
// 查询用户
Map<String, String> query = new HashMap<>();
Map<String,Object> map = service.readBody(request.getReader());
query.put("username",String.valueOf(map.get("username")));
List list = service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "用户已存在");
}
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(1);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
E entity = JSON.parseObject(JSON.toJSONString(body),eClass);
baseMapper.insert(entity);
log.info("[{}] - 插入操作:{}",entity);
}
4.3 登录页面
基于区块链的物联网数据交易中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到基于区块链的物联网数据交易的首页中;否则将会提示相应错误信息,用户登录界面如下图4.3所示。
图4.3 登录界面图
系统用户登录的逻辑代码如下所示。
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
QueryWrapper wrapper = new QueryWrapper<User>();
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
public String select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return sql.toString();
}
public List selectBaseList(String select) {
List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
List<E> list = new ArrayList<>();
for (Map<String,Object> map:mapList) {
list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
}
return list;
}
4.4 平台资讯页面
当用户点击“平台资讯”以后就会进入到以下界面,用户可以输入关键词搜索资讯内容,查看点赞数以及点击数,然后点击到资讯的详细的界面,在这个详细界面可以点赞+评论。其出界面展示如下图4.4所示。
图4.4 平台资讯界面图
当用户点击“数据交易”以后就会给我们展示数据交易的列表,选择一个数据交易进入到图4.5界面中,用户可以对数据交易进行购买,点击购买按钮,进入到4.6界面中,输入数据名称、数据分类、出售用户、出售价格、用户地址、订单号、用户编号等,点击“提交”按钮,就会显示购买成功。
图4.5 数据交易界面图
图4.6 购买界面图
数据交易的逻辑代码如下:
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
此功能为管理员的功能,管理员点击“系统用户管理”菜单后,会展示出管理员+系统用户两个子菜单,任何可以对其进行增删改查操作;其界面展示如下图4.7所示。
图4.7 系统用户管理界面图
用户管理关键代码如下所示。
public List selectBaseList(String select) {
List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
List<E> list = new ArrayList<>();
for (Map<String,Object> map:mapList) {
list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
}
return list;
}
此功能为管理员的功能,管理员点击“资源管理”菜单后,会展示出平台资讯+资讯分类两个子菜单,任何可以对其进行增删改查操作;其界面展示如下图4.8所示。
图4.8 资源管理界面图
此功能为管理员的功能,管理员点击“数据交易”菜单后,会展示出添加数据交易栏,可以对数据交易信息进行增删改查操作;其界面展示如下图4.9所示。
图4.9 数据交易管理界面图
此功能为管理员的功能,管理员点击“购买信息”菜单后能够对购买信息进行增删改查操作;其界面展示如下图4.10所示。
图4.10 购买信息管理界面图
4.10 交易记录管理页面
此功能为管理员的功能,管理员点击“交易记录”菜单后能够对交易记录进行增删改查操作;其界面展示如下图4.11所示。
图4.11 交易记录管理界面图
5基于区块链的物联网数据交易测试
基于区块链的物联网数据交易测试是为了检验软件是否达到设计要求,是否存在错误,通过测试的方法来检查基于区块链的物联网数据交易,以便发现基于区块链的物联网数据交易中的错误。测试工作是保证基于区块链的物联网数据交易质量的关键。
问题1:数据库无法添加中文。
解决过程:重新创建数据库,将库的编码格式改为utf8。
效果:能在新库的表中添加中文。
问题2:控制台报错前台与后台参数不一致
解决过程:检查代码,找到报错参数完成修改,继续报错,服务器移除项目重新运行。
效果:重启项目不再报错。
问题3:报错No bean named 'sysLogServiceImpl' available找不到名为sysLogServiceImpl的bean的对象。
解决过程:询问导师报错原因,发现错误原因是未添加注解@Service,需要在在impl实现类的外面添加@Service注解。
效果:重新debug项目无报错。
问题4:启动项目时报错:Mapped Statements collection does not contain value for
解决过程:网上搜索解决办法,出错可能的原因有多个,经过努力排查,错误原因是mapper映射地址有误。在mybatis-config里重新配置地址。
效果:项目启动正常
系统测试包括:数据交易添加功能测试、购买信息功能测试、交易记录添加功能测试、余额充值功能测试这四大功能测试,如表5.1到5.4所示:
表5.1数据交易添加功能测试表
测试名称 | 测试功能 | 操作过程 | 预期结果 | 测试结果 |
数据交易添加功能模块测试 | 管理员添加数据交易功能是否正常 | 管理员登录成功后点击“添加数据交易”菜单 | 管理员根据提示并依次输入数据交易名称+数据名称+数据分类+出售用户+用户编号等,后点击“提交”按钮 | 数据交易添加信息功能正常 |
表5.2 购买信息功能测试表
测试名称 | 测试功能 | 操作过程 | 预期结果 | 测试结果 |
购买信息添加功能模块测试 | 系统用户添加购买信息功能是否正常 | 系统用户登录成功后点击“添加购买信息”菜单 | 系统用户根据提示并依次输入数据名称+出售价格等,后点击“提交”按钮 | 购买添加信息功能正常 |
表5.3 交易记录添加功能测试表
测试名称 | 测试功能 | 操作过程 | 预期结果 | 测试结果 |
交易记录添加功能模块测试 | 交易记录添加交易记录功能是否正常 | 管理员登录成功后点击“添加交易记录”菜单 | 管理员根据提示并依次输入用户编号+购买用户等,后+用户地址 数据类型点击“提交”按钮 | 交易记录添加信息功能正常 |
表5.4余额充值功能测试表
测试功能 | 操作过程 | 预期结果 | 测试结果 | |
余额充值功能模块测试 | 余额充值功能是否正常 | 系统用户登录成功后点击余额充值中的“开取”按钮 | 系统用户根据提示填写充值信息点击“提交”按钮 | 余额充值信息功能正常 |
通过上面章节编写基于区块链的物联网数据交易的测试用例,已经测试完毕了数据交易添加功能测试、购买信息测试、交易记录添加功能测试、余额充值功能测试,通过这4大模块为基于区块链的物联网数据交易的后期推广运营提供了强力的技术支撑。
至此,基于区块链的物联网数据交易已经结束,在开发前做了许多的准备,在本系统的设计和开发过程中阅览和学习了许多文献资料,从中我也收获了很多宝贵的方法和设计思路,对系统的开发也起到了很重要的作用,系统的开发技术选用的都是自己比较熟悉的,比如SSM、JAVA技术、MYSQL,这些技术都是在以前的学习中学到了,其中许多的设计思路和方法都是在以前不断地学习中摸索出来的经验,其实对于我们来说工作量还是比较大的,但是正是由于之前的积累与准备,才能顺利的完成这个项目,由此看来,积累经验跟做好准备是十分重要的事情。
当然在该系统的设计与实现的过程中也离不开老师以及同学们的帮助,正是因为他们的指导与帮助,我才能够成功的在预期内完成了这个系统。同时在这个过程当中我也收获了很多东西,此系统也有需要改进的地方,但是由于专业知识的浅薄,并不能做到十分完美,希望以后有机会可以让其真正的投入到使用之中。
参考文献
[1]金炜,张戈力.基于技术融合-演进模型的物联网和区块链技术在能源物联网中的应用分析[J].物联网技术,2022,12(11):117-120.DOI:10.16667/j.issn.2095-1302.2022.11.035.
[2]李敦锋,肖瑶,冯勇.一种面向物联网数据交易的高效PCN路由策略[J].计算机科学,2022,49(S2):696-700.
[3]白翔,许从方,柳兴,张磊.区块链物联网安全技术综述及关键技术分析[J].信息技术,2022(10):24-30+40.DOI:10.13274/j.cnki.hdzj.2022.10.005.
[4]王棋.基于SSM框架的网上摄影系统设计与实现[J].电子质量,2022(10):89-93.
[5]谢霜.基于Java技术的网络管理体系结构的应用[J].网络安全技术与应用,2022(10):14-15.
[6]苏婉怡,揣小龙,赵国松,王煜尧.基于Java技术的考试系统关键点研究[J].无线互联科技,2022,19(18):58-60.
[7]杨玉莲.基于SSM框架的智能煤质化验室综合管理系统[J].煤矿现代化,2022,31(05):100-104+109.DOI:10.13606/j.cnki.37-1205/td.2022.05.005.
[8]林佳一.混合式教学在高职MySQL数据库课程的实践研究[J].电脑知识与技术,2022,18(26):133-135.DOI:10.14004/j.cnki.ckt.2022.1737.
[9]李罡,周正茂. 基于Java技术实现内存键值数据管理的方法及其装置[P]. 北京市:CN114840498B,2022-09-13.
[10]王劲松,杨唯正,赵泽宁,魏佳佳.基于有向无环图的区块链技术综述[J].计算机工程,2022,48(06):11-23.DOI:10.19678/j.issn.1000-3428.0064002.
[11]刘文妍. 面向区块链与物联网融合的数据筛选及交易排序服务研究[D].山东大学,2022.DOI:10.27272/d.cnki.gshdu.2022.000754.
[12]张学典,林至锽.一种基于区块链的物联网架构设计[J].软件导刊,2022,21(05):145-150.
[13]郭红, 基于java的软件开发环境检测软件V1.0. 湖北省,武汉东湖学院,2021-10-01.
[14]高宇波. 基于区块链与雾节点信誉的物联网访问控制和数据共享的研究[D].西安理工大学,2021.DOI:10.27398/d.cnki.gxalu.2021.000861.
[15]张亚川. 基于区块链的物联网数据共享模型与关键机制的研究与实现[D].北京工业大学,2021.DOI:10.26935/d.cnki.gbjgu.2021.000118.
[16]杨晟. 基于泛在电力物联网与区块链的综合能源服务研究[D].华北电力大学(北京),2021.DOI:10.27140/d.cnki.ghbbu.2021.001174.
[17]高翩翩. 基于区块链的物联网智能合约模型[D].江苏科技大学,2021.DOI:10.27171/d.cnki.ghdcc.2021.000383.
[18]Witsarut Sriratana,Vittaya Khagwian,Sutham Satthamsakul. Analysis of Electric Current by Using MySQL Database on Web Server for Machine Performance Evaluation: A Case Study of Air Conditioning System[J]. 제어로봇시스템학회 국제학술대회 논문집,2020.
[19]. Design and Implementation of ERP System Based on SSM Framework[J]. ,2020,440(5).
[20]Margaretha Ohyver,Jurike V. Moniaga,Iwa Sungkawa,Bonifasius Edwin Subagyo,Ian Argus Chandra. The Comparison Firebase Realtime Database and MySQL Database Performance using Wilcoxon Signed-Rank Test[J]. Procedia Computer Science,2019,157(C).
[21]Ping Wanxin,Chen Yuankun,Hou Xiaoyan. Design of Campus Bicycle Rental Management System Based on SSM Framework[J]. Journal of Physics: Conference Series,2019,1314.
时间过的很快,不知不觉,在中北大学的学习生活即将结束。毕业之际,我真诚地向帮助过我的老师、家人、同学、朋友们表达感谢。首先要感谢的是我的母校。感谢母校给了我美好的生活和优越的学习环境,使我能学到了很多知识,也不断的变得优秀;感谢家人在这四年期间一直给与我的爱和无条件的支持,让我没有后顾之忧地完成学业;感谢软件学院的任课老师们给我鼓励和认可,让我有信心去做好每一件事情;感谢同学们的帮助,让我的大学生活更有意义。在此次毕业设计的实现过程中, 我得到了老师们的耐心指导让我顺利完成了该设计。从最初的选题和开题开始,老师就给予我很多帮助,他们认真负责的态度、丰富的教学经验让我学到了很多。
同时也要感谢我敬爱的班主任和实训课程的老师,他们在各个方面都教给了我丰富的经验,在面对各种困难时如何处理。因为今年的特殊性,老师们不仅在学习中给我以精心的指导,同时还在其它方面给予我观关怀,指导老师不辞辛苦的为大家录制视频和一遍遍讲解让我心怀感激之情。在此,我真诚的感恩、感谢我的指导教师们。
还要感谢实习期间不厌其烦教导我鼓励我的技术师傅,他指导了我各个方面的技巧,尤其是编程方面,迄今我的很多技巧和编写规范都有赖于他的指导、纠正。
最后还要特别感谢身边的各位同学们,一直支持鼓励我,无论何时何种境况。我很荣幸获得同学们的帮助,也很开心能够和大家共度大学四年的时光。
最后的最后,再次发自肺腑的感谢所有帮助过我的人。
免费领取源码,请点赞关注私信博主