谢涛
谢涛
# 谁能打开门,谁来打开门 读者和工作人员都可以从智能书柜面板操作打开柜门。 ## 读者 读者打开柜门,然后可以从书柜里面取出图书,或者把图书放进书柜。一般可以认为从书柜里面取出图书,意味着该读者“借走”这本图书;放进图书,意味着该读者“还回”这本图书。 有两点值得探讨: 1) 读者从书柜取走和放回图书的动作可以很快,可以很细碎,一般来说软件完全同步去调用 dp2library 服务器完成借书和还书操作,速度上不一定跟得上。其实也没有必要“跟上”读者动作。可以把读者关闭柜门当作一个结束动作,此时再统一处理借书还书请求:被拿走的图书被认为是读者借走;放回的、原来书柜里面没有的图书被认为是还回。如果在开门状态下,读者反复取和放回一本图书,软件是不对 dp2library 进行请求的,因为还没有到关门的时候。 2) 某些操作的不可抗拒性。读者关门的时候软件集中进行处理,前面探讨了。读者关门时候,可以直接离开,不一定会听从软件界面的指示和警告、报错。比如传统来说读者有个借书册数的上限,如果读者从书柜中拿走超过这个数的图书,软件确实是可以警告提示的,包括文字和声音提示,但读者可以不听从建议直接离开书柜。那么这时候软件应该尽可能把借走的图书信息记载下来,和正常借书差不多(加上一些警告信息),这些图书后面可以正常向读者追讨。这个和一般自助借还差别较大,一般的自助借还遇到情况,软件可以拒绝办手续,如果读者在没有办手续情况下拿走图书,门禁是会报警的。但智能书柜一般不会使用 EAS/AFI 门禁报警机制(这一点后面再详述) 注:dp2library 为 borrow() API 增加了一种 overflowable 方式的新操作,用这种方式来借书,如果超出读者当前允许的册数,也会成功,只是借期只有一天。第二天就会超期。主要目的是让读者可以在当天之内还回,满足智能书柜的特殊要求 ## 工作人员 工作人员打开柜门,然后取、放图书,一般可以认为这是业务需要。放进图书可以理解为把图书“调拨”进入智能书柜,此后这一册图书的归属地变更到了这一个书柜。取走图书的含义暂时不明,当然,智能书柜是能感知到这一册图书被拿走了,会变更内存状态。 下面探讨一下工作人员放进图书时,管理软件应该执行的操作: 1) 首先册记录的...
# 开机启动 智能书柜理论上是持续运行的,它可以监控图书的进进出出。 但第一次开机的时候是什么情况呢?可以简单分为:开机时候软件检测到书柜里面已经有图书;检测到书柜里面没有图书。两种情况。 开机时候检测到书柜里面已经有图书,管理软件就要初始化一个内存列表,这个列表表示当前在书柜里面的图书。同时软件需要尝试对每一册图书都进行一次“还书”操作,这样避免存在借阅状态的图书后面遇到读者取走时候请求借书发生报错。 开机时候如果书柜里面没有图书,后面可能工作人员和读者会往里放进图书,这个分别按照调拨和还回处理即可。
# 错放 智能书柜促使我们去重新思考册记录的馆藏地,代表什么,怎么才能做到完美。 考虑读者会把不属于智能书柜管辖的图书也放入智能书柜,而且这种操作具有不可抗拒性,我们要审视一下这种情况的意义和处理方法。 除了这一册图书不是属于智能书柜外,那么从读者的角度,她/他是希望还书的,因为图书放进去就意味着还给图书馆了。那么管理软件对还书的操作不能少,尤其注意要处理 RFID 芯片的 EAS/AFI 更改(虽然正常情况从智能书柜取走图书并不会修改 EAS/AFI。这一点后面详细探讨) 同时,管理软件似乎应该给管理员发出警告,表示有一本书被错放进入了智能书柜,请管理员速来拿走处理。 智能书柜面板的显示图书信息的界面,要考虑到这种错放的图书也应该可以显示和查询。只是显示状态要和属于智能书柜管辖的那些图书区别开来,便于工作人员识别了解。 对于错放进来的图书,软件处理时要把册记录的 currentLocation 元素修改,以反映当前实际位置(虽然是放错的位置),但 location 元素不应修改。因为 location 元素只能只应被管理员用调拨操作修改。location 元素反映的是原始馆藏地,currrentLocation 元素反映的是实际馆藏地。 自助借还机还书时候,可能会提示还书者把某一些被别的读者预约的(刚被还回的)图书放进智能书柜,以便预约者接到通知来图书馆自行取走。当然这一册图书可能会被错放到其他智能书柜,总之,currentLocation 元素反映了实际放入的位置,所以预约者接到的通知信息总不会错。(注意,放进去了才会发出通知,而不是以前的还回时刻就通知。其实也可以通知两轮:还回时候通知已被还回到某个自助机;放入智能书柜的时候再通知一次图书现在到了智能书柜) 谈到错放位置,其实工作人员也可能错放。当然,工作人员如果用调拨功能去放入智能书柜,那是不会“错”的,因为管理软件会以实际放入的书柜为准修改 location 元素和 currentLocation 元素。只能说,如果把调拨和上架拆分为两个步骤,第二步上架可能会发生错误,即放入的位置(currentLocation)和理论位置(location+shelfNo)不符。 那么从这里,我们可以推论:工作人员无目的转移图书,可以理解为就是这种错放的情形。似乎允许这种操作也是有意义的 ---...
# 调拨操作界面设想 工作人员打开柜门,向书柜里面放入图书,可以理解为典藏调拨操作。调拨的意思,就是把 location 元素为其他馆藏地的图书,修改为书柜的馆藏地。因为同时书确实放进去了,所以也要修改一下 currentLocation 元素。 前面的探讨中,提到工作人员有时候也是无(明显)目的放入图书。即,不一定是要调拨。比如,是放入图书,导致图书的 currentLocation 元素修改,但不希望修改 location 元素。等于这一本图书进入书柜,还是“客人”状态,不是“主人回家”状态,这个书柜还并不是这一册的“家”。 最初容易想到,这样可以在面板界面上,给设计两个不同的功能,调拨和上架。其中上架表示不调拨地上架。 但其实可以把两个功能考虑融合起来做成一个界面,即一个界面功能模块。设想这样:当工作人员开门以后,放入第一本图书开始,软件开始自动运算。软件先观察这一册图书的 location 元素是否符合这个书架的地点字符串定义。如果符合,就是“归家”(归架),location 元素并不需要被修改,无所谓调拨。 如果图书 location 元素表明是外来的,软件会弹出一个对话框,询问是否进入调拨状态?这时候工作人员可以确认,也可以不理会这个对话框,继续放入其他图书。如果不理会对话框继续放入,那么这个对话框上会把后来的图书继续追加到一个列表显示。最终如果工作人员过来处理这个对话框,同意调拨,那么就对累积的列表中的图书批处理做一次调拨操作。如果最终工作人员没有过来处理这个对话框,那么多少时间超时以后对话框会自动关闭,调拨操作不会进行。 (但上述流程中,这些图书无论如何 currentLocation 元素会被修改以反映进入书柜这个状态) 这样,两种目的的操作都在同一套界面上得到了满足。
# 读者操作界面设想 智能书柜的操作,其实概念很简单,可以概括为:读者开门、取书或者放书、关门。当然,开门有一个条件就是读者先要扫读者证进行身份鉴别,这样软件才能知道读者是谁,是否允许她/他开门。 开门以后,到底是放书还是取书,还是二者兼有。开门前是不知道的。所以这个功能既可以借书也可以还书,也可以同时借书和还书。这个动作的菜单名称可以简单直白叫做“开门”,也可以叫“开门(并借还)”。 开门以后,软件会记住开门期间,读者取走的书,和放入的书的信息。等待关门。关门时,软件会自动向 dp2library 服务器请求借书和还书,这时候会出现一个进度条界面,等操作完毕,语音提示读者操作完成或者发生错误。如果发生错误,要看错误的原因。 如果是读者的借书权限不够,读者取走了超过规定数量的书,那么软件会有一个对话框提示读者,请把多出来的图书放回书柜。如果读者(刷卡)开门放回去,这个对话框会消失。但读者很可能不理会这个对话框,把书直接拿走了,那么这个对话框应该是有个超时读秒机制,等超过一定时间读者不响应,软件自动按照超额借阅来处理这些报错的图书。所谓超额借阅和普通借阅差不多,但有关记录的 comment 元素记载一下这个情况。 在实际场景中,有可能是排队等待的下一位读者看到屏幕上上述对话框,“肇事”读者已经走掉了。但没有关系,下一位读者可以继续操作,而这个对话框会自动在超时以后进行后台超额借阅处理。原则上超额借阅请求一定会满足。如果特殊情况无法满足,比如智能书柜发现 dp2library 通讯失败无法访问,那么智能书柜软件要记入一个特殊的日志,后面会自动重试操作。即便是程序退出,重启,这些日志都能保留,不断尝试重试。 (2024/1/24 注) dp2ssl 实际实现相关功能的时候,借书操作虽然超额,但借书操作当时就完成了。读者可以看到对话框提示。读者可以选择在一天之内还回超额部分图书,也可以不还回。如果不还回,就会触发超期违约金。 另外,如果还回的册并不是界面上标注超额的那一册,但只要还回任何一册,dp2library 服务器会自动重新计算超额,尽可能自动消除超额状态。
# EAS/AFI 智能书架因为是一种自然的使用方式,从里面取出图书,或者放进去图书,如果要不破坏这种流畅的方式,那么取出(相当于借出)的时候没有办法把 EAS 修改为 Off。因为软件是通过探测到一册图书“不在无线电感知范围”来作为“取出”信号的,此时想要去修改它的 EAS 为时已晚。 放入图书的时候,软件倒是可能会有充足的时间来对这一册图书的 RFID 标签进行修改 EAS 为 On 的操作。 上面说的是一个原因,无法利用 EAS。 另外一个原因,是智能书架很多时候是放在门禁范围以外,无法利用门禁的防盗检测功能。因而软件也就看起来没有必要去修改 EAS。 但这并不意味着智能书架软件完全不考虑 EAS。如果读者或工作人员把本来不是智能书架的图书放入,那么原则上智能书架软件不去修改这样的册的 EAS。但前面谈到过,有时候读者会把(此类原本不是智能书架管辖的)图书放入智能书架,当作“本册已经还给图书馆了”。如果智能书架软件要自动为这些图书办理还书手续,那么就涉及到一个问题:是否要设置 EAS 为 On? 一个可能是不设置。如果馆员接到通知,来智能书架取走这样的图书,(进入门进去以内)去普通书架上架,那么上架之间馆员要记住,用普通还书电脑去修正一下 EAS。这显然是一种麻烦事,馆员很容易忘记这一步操作。 另外一个可能是智能书架软件在此类图书放入时候,自动设置好 EAS 为...
# dp2SSL 中智能书柜功能用法 在设置对话框中,先设置好必要的指纹中心、人脸中心、RFID 中心URL,然后设置“功能类型”为“智能书柜”。(功能类型默认为“自助借还”) 然后在dp2SSL 的用户文件夹中创建一个文件 shelf.xml。样例如下: ``` ``` door 元素的 lock 属性为门锁参数,例如 `*.1.1`,星号表示任意锁名字,(第一个)1 表示锁控板编号,(第二个)1表示锁的编号(在当前锁控板内)。星号部分也可以用具体的锁名字,如果 COM 口用到多于一个的话。 antenna 属性为读卡器天线参数。例如 `*:1`,星号表示任意读卡器名字,1 表示天线编号。星号用法其实不太好,因为智能书柜一般都有多于一个读卡器(其中一个是 ISO14443A 读卡器),所以最佳做法是使用具体的读卡器名字。另外注意天线编号有的读卡器是从 0 开始,有的是从 1 开始,要看具体读卡器型号的说明。(注:RL8600类型的读写器是从0编号的) shelfNo 属性为架号。一般格式为"书柜位置:竖列号-排号"。书柜位置要根据...
# 请求完成后对话框显示的改进 最前面显示了请求操作的读者姓名。借书和还书操作笔数。然后是用彩色文字醒目显示失败的、警告的和成功的笔数,以便读者看到后进行针对性的处理。 然后是每一笔操作的详细信息。用醒目的颜色显示出操作的状态,报错信息用红色底色文字。 对话框还伴有语音提示。主要是在读者发生超过权限借阅的时候,提醒读者立即放回多拿的图书。
# 2019/11/7 改进 * 柜门控件的字体按照比例进行自动调整。打开门时候的底色从深红色修改为浅蓝色。关闭时候的底色为深绿色没有改动。"e:1"字体颜色改为红色。 * 书柜页面右侧的读者区可以用手指卷动了 * 借还请求结果对话框文字内容可以用手指卷动了 * 读者刷卡后,右侧出现读者信息。点门打算开门的时候,增加了一个对读者记录状态检查的步骤,如果状态不正常则报错并拒绝开门。 检查的算法如下: 1) 检查 state 元素。内容不为空则算作不正常;(读者证挂失等情况) 2) 检查是否有 overdue 元素。有则算作不正常;(有已经还书、尚未交费处理的超期情况) 3) 检查 borrows/borrow 元素里面的 returningDate 属性,如果发生超期则算作不正常 (有在借图书的超期情况)
# 注意测试 shelf 之间 door 数量不一致的情况 假设有这样一个 shelf.xml 配置内容: ``` ``` 可以看出第一个 shelf 元素和第二个 shelf 元素它们下级的 door 元素的数量是不等的。dp2ssl 应能正确显示出这样的三个和四个门的界面。