多个新功能的增加与维护
甲方爸爸又提新需求了,从昨天到今天没歇,主要完成了以下几个功能的增加。
1、照片缓存
这个需求是要求上位机将机箱门被打开后拍摄的照片缓存到上位机,后来经过进一步讨论,实现一个保存拍照数据到上位机本地以及通过上位机查询后展示给用户的功能能够较好满足该需求。因为拍照主要是为了防盗,只有当机柜门被打开,才会拍照,所以每次拍照的信息都极为关键,我们不能只缓存一定时间段内的照片,只要拍了,我们就应该存下来,以备后边调查取证时得到有价值的线索。所以我采用了保存图片到本地,并提供给用户一个查询特定图片的接口。所以我们的图片缓存就变成了–>图片保存+查询功能。
存图片时可以将图片以二进制文件信息存进数据库或者将图片保存到本地,为了方便查询,我们势必要用到数据库,但是因为图片较字符数据量较大,所以将图片保存到数据库的操作并不可取,我采用了将图片保存到本地的指定文件夹,然后将图片的存储路径存入数据库,为此,需要专门新建一个表picture_table来保存图片的地址信息,该表的字段我设计了id, address, time, picture_url四个字段,其中id作为主键,address表示拍照的设备所在地址,time表示拍照的时间,pictrue_url表示图片的保存路径。然后我们需要将picturebox里的图片保存到指定的文件夹,并获得该路径,将该路径以及相关信息写入picture_table表中。
关键代码如下:
1 | /** |
接下来我们有了存储图片的文件夹以及数据库中的图片路径,我们需要增加查询图片的功能,考虑查询条件主要有两个:地段,时间。根据智能机箱安装的地段位置查询该地段机箱拍照的历史记录以及特定时间段该地段机箱拍照的记录。两个查询,查询到的图片放入imagelist中,再将imagelist绑定到listview中,通过listview展示给用户,关键代码如下:
1 | /* |
效果图如下:
2、点击图片保存功能
又提出了将拍到的图片自定义保存到自己喜欢的文件夹的功能,想了一下应该不是很难,我给显示拍到的照片的picture_box增加了一个双击事件,在该事件中可以将当前picturebox中的图片保存到本地计算机中指定的文件夹,这样的代码应该很多,在网上找了一份代码稍作修改后可以正常实现功能,代码如下:
1 | /* |
3、实现异常记录的查询
需要能够将下位机上传的异常数据增加一个查询接口,查询出来显示给用户,一开始觉得这个功能不就是将查询全部的代码中的sql语句改一下条件不就好了?关键的数据有温度,湿度,平衡,还有箱门状态,只要温湿度超阈值或者箱门被打开或失去平衡,都归为异常情况查出来就完了。没想到真的操作起来发现好多坑,sql语句写对了,但是一直报错,无奈去看数据库,不看不知道,一看吓一跳,原来数据库里关键信息比如:温度,湿度等本该是数字的数据,全被定义成了文本,怪不得会报错,文本根本不能比较大小啊。心里跑过无数匹。。。这谁定义的数据表啊,连个主键都没有,这些关键的用来查询的数字你给我定义成了字符串?excuse me?!! 博主是今年5月份从一个师兄手里接手的这个项目,之前没仔细看过这个数据库的表格式。
字符串没事,我可以转啊,正当我以为找到了方便的方法的时候,突然我看到了这个数据湿度:0 %。就像被浇了一盆冷水一样,温度的数据因为他虽然定义的是文本,但实际还是24.5这样类似的数据,这个用sql自带的val(字段)就可以转成数字,但是这个0 %让我一下子失去了希望,看来使用简单的sql语句来查询是做不到了。可是,当我想到以后的数据表如果不做修改,还是这个样子,好多查询功能就无法实现了,这样的设计违背了我们使用数据库的初衷,数据库主要就是完成各种条件查询的功能,方便我们提取数据里的有价值信息,如果放着这张坏表不去修改,以后只能出现更多的大坑,所以我决定改这张表的结构,将所有本该是数字的字段修改为数字格式,其他的文本类型不做改动。之后,用了一条轻松愉快的条件查询语句搞定了该功能,关键代码如下:
1 | /** |
4、增加修改wifi名称和密码的功能
应需求,在上位机端增加一个可以更改下位机(即智能机箱)上的wifi名称和密码的功能。和负责下位机的师弟讨论好了传输协议以后,实现了这部分功能,因为采用了byte[]数组来传递,所以,为了方便起见,我们的修改功能并不能够支持中文,后续可能会做修改。代码如下:
1 | /** |