馆员备书功能
初步需求设计
读者预约到书,馆员提前预备功能需求:
检索所有读者的预约请求,获取预约信息中包含预约者内容:姓名、单位/部门,所预约图书的书名、作者、索取号、馆藏地点,以及预约日期。
计划以 WinForm 程序实现,给工作人员使用。提供一个窗口,检索“预约到书”库。
选择要去备书的记录,打印小票,拿着小票到书库备书。
备书成功的记录设置状态,显示变绿,或者在另一个备书完成的页面显示。
第一阶段
-
查询读者预约的图书; 1)输入读者证条码号,检索显示该读者所有的预约请求。 2)不输入读者证条码号,检索显示所有读者的全部预约请求。
-
选择检索到结果列表中的项目,输出到电子表格,或打印出来,要求如下: 1)将同一读者的预约请求归并到一起。 2) “单位/部门”相同预约者合并为一组。 3) 输出或打印时,可根据“馆藏地点”与“索取号”内“中图法”分类号大类进行筛选过滤。 4) 输出或打印的项目在本地记录“已输出”或“已打印”状态。备书成功的记录设置状态,显示变绿,或者在另一个备书完成的页面显示。 已打印状态上传到哪个服务器,微信公众号怎么访问到?暂是不回传到服务器端。
-
备书的记录,打印小票,拿着小票到书库备书
第二阶段
-
检索“预约到书”库的结果,生成 XML 格式文件,调用 dp2Library 接口,发送消息给 dp2系统微信公众号,供微信公众号或 web 程序使用。
-
在微信公众号或 web 程序显示应备图书时,需登记图书是否已备的状态。再次检索结果时,只显示未备图书。
-
备书完成后,可采用电子邮箱,手机短信,微信公众号的方式通知预约者已备图书所在的箱号或架位号。 备书完成后,通知到预约者的方式可选择电子邮箱,手机短信,微信公众号通知的方式。
按册显示
请注意给馆员看的表格中,关于图书的信息应该是每册的信息。比如每一册的索取号需要显示出来。
显示索取号
索取号很重要,因为馆员要看到这个号码才能在书库里面定位找到图书。
索取号一般是两行,第一行是分类号。注意和用户交流的时候,用户所说的“分类号”是索取号里面的这个第一行,而不是书目记录中的分类号。
显示馆藏地 或者 按馆藏地筛选
如果图书馆的馆藏地很多,那么还需要显示出馆藏地字符串。否则光凭索取号无法定位图书。不过,实际工作中,可能每个馆藏地的工作人员希望列表中只列出当前自己所在这个地点的所有已到书册,所以馆藏地可能需要成为界面上的一个筛选条件。
要列出当前所有的已经到书的预约册信息,可以参考内务的源代码 ReservationListForm.cs。
原理是,检索预约到书队列库,所有状态不为空的记录。队列记录的 XML 格式需要在本 Issue 里分析一下,便于解释清楚功能该怎么实现。
预约到书队列库记录 XML 格式基本结构如下:
<root>
<state>arrived</state>
<itemBarcode>B218</itemBarcode>
<itemRefID>
</itemRefID>
<onShelf>true</onShelf>
<libraryCode>
</libraryCode>
<readerBarcode>R0001</readerBarcode>
<notifyDate>Sat, 21 Apr 2018 17:15:29 +0800</notifyDate>
<refID>ff37d58b-02fb-4a73-b465-ec533c3f3181</refID>
<location>流通库</location>
<accessNo>K254/3</accessNo>
</root>
- state —— 状态:值为“arrived”表示预约图书已在馆,可以进行备书;“outof”表示预约图书已到馆,但超过了预约保留期。
- itemBarcode —— 图书条码号,即图书标识。
- itemRefID —— 图书参考ID。
- onShelf —— 需要通知的图书是否在架,值为 true 或 false。
- libraryCode —— 预约者所属分馆的馆代码。
- readerBarcode —— 读者证条码号。
- notifyDate —— 通知日期。
- refID —— 预约到书队列记录参考ID。
- location —— 所预约图书馆藏地点。
- accessNo —— 所预约图书索取号。
讨论过程记录:
-
预约到书后,在预约保留期内,预约者可随时到馆办理借阅,但是如果超过预约保留期还未办理借书,该预约者将失去优先借阅资格,图书将由归回到书架,或通知下一位预约者前来办理借阅。讨论是否有必要在将要超过预约保留期时,与预约到书一样,再次通知读者到馆办理借阅手续。
-
超过预约保留期需要归架的图书,在系统中同样提供查询窗口,供馆员参考。
“预约请求日期”内容的需要从读者信息中获取,读者基本信息和与预约信息相关的内容(初稿)如下:
<root expireDate="">
<barcode>R0001</barcode>
<readerType>本科生</readerType>
<name>张三</name>
<department>信息管理2017级1班</department>
<refID>41249e83-ee31-439c-a5cc-219fd91e72a0</refID>
<reservations>
<request items="B216,B215"
requestDate="Sun, 22 Apr 2018 11:38:35 +0800"
operator="R0001">
</request>
<request items="B218"
requestDate="Sat, 21 Apr 2018 17:15:29 +0800"
operator="R0001"
state="arrived"
arrivedDate="Sat, 21 Apr 2018 17:15:29 +0800"
arrivedItemBarcode="B218"
notifyID="ff37d58b-02fb-4a73-b465-ec533c3f3181"
accessNo="K254/3"
location="流通库">
</request>
</reservations>
</root>
- barcode —— 读者证条码号,也是读者标识,具备唯一性。
- readerType —— 读者类别。
- name —— 读者姓名。
- department —— 单位/部门。
- refID —— 读者参考ID,具备唯一性。
- reservations —— 预约请求列表
-
-
预约请求列表1:
<request items="B216,B215" requestDate="Sun, 22 Apr 2018 11:38:35 +0800" operator="R0001"> </request>
-
- items —— 预约请求的册条码号,以英文逗号分隔的方式区分多个册条码号,其中任何一册到书即表示满足此项预约。
- requestDate —— 请求日期,内容为 RFC1123 格式。
- operator —— 操作者账户名。
-
-
预约请求列表2:
<request items="B218" requestDate="Sat, 21 Apr 2018 17:15:29 +0800" operator="R0001" state="arrived" arrivedDate="Sat, 21 Apr 2018 17:15:29 +0800" arrivedItemBarcode="B218" notifyID="ff37d58b-02fb-4a73-b465-ec533c3f3181" accessNo="K254/3" location="流通库"> </request>
-
- items —— 预约请求的册条码号。
- requestDate —— 请求日期,内容为 RFC1123 格式。
- operator —— 预约读者证条码号。
- state —— 到书状态,值为 "arrived" 表示到书。
- arrivedDate —— 到书日期。
- arrivedItemBarcode —— 到书的册条码号。
- notifyID —— 取书通知ID。
- accessNo —— 到书索取号。
- location —— 到书馆藏地点。
2018/4/24 dp2Mini 项目添加功能:“备书”窗口(文件-备书),输入 读者证条码号,可从“预约到书”库中查询到该读者的所有预约项目。不过目前,还只是显示预约到书库记录的浏览信息,后续还需要根据“读者证条码号”获取读者信息(读者姓名和单位/部门),以及根据“册条码”获取图书信息(题名,ISBN,作者)。
2018/5/5
完成“预约到书”信息检索功能,并解析信息记录 XML 格式内容,获得读者信息和图书信息,方式如下:
- 根据 itemBarcode节点内容,使用 GetItemInfo() 接口获得 XML 格式图书信息,将 XML 格式转换为 MARC 记录的机内格式,然后将 机内格式 通过 MarcQuery 解析,进一步获得 题名,ISBN和作者。(这一步暂未考虑 USMARC 格式)。
- 根据 readerBarcode 节点内容,使用 GetReaderInfo() 接口获得 XML 格式读者信息,其中 strResultTypeList 参数值为 “xml:noborrowhistory” ,目的是仅获得读者的基本信息,不包含读者记录中的借阅历史内容。获得读者记录体信息后,进一步解析 XML 格式内容,获得 读者姓名 和 单位/部门。
2018/5/25
- 打印小票时添加打印内容预览功能。
- 打印时可以选择打印机。
- 使用 ListViewItem 的 Tag 属性 存储预约到书记录结构体。
- 查询结果列表中添加
刷新、移除功能。并可以查询结果进行排序。
2020/2/10 检查之前dp2mini代码,发现配过书的记录,给预约到书记录写了一个priteState字段。
<?xml version="1.0" encoding="utf-8"?>
<root>
<state>arrived</state>
<itemBarcode>XZ000101</itemBarcode>
<itemRefID>
</itemRefID>
<onShelf>true</onShelf>
<libraryCode>星洲学校</libraryCode>
<readerBarcode>XZP10001</readerBarcode>
<notifyDate>Mon, 10 Feb 2020 11:55:26 +0800</notifyDate>
<refID>0a4c11a0-7596-4248-9f0c-d89e3dcb8a45</refID>
<location>星洲学校/图书馆</location>
<accessNo>K825.6=76/Z780</accessNo>
<printState>已打印</printState>
</root>
预约到书记录中,如果是在架图书,有一个onShelf元素,内容为true。
<root>
<state>outof</state>
<itemBarcode>XZ000014</itemBarcode>
<itemRefID />
<onShelf>true</onShelf>
<libraryCode>星洲学校</libraryCode>
<readerBarcode>XZP00004</readerBarcode>
<notifyDate>Wed, 17 Oct 2018 15:49:40 +0800</notifyDate>
<refID>2f99a58c-4233-4e72-8ef3-95a5df93d793</refID>
<location>星洲学校/图书馆</location>
<accessNo>I202.4/S495</accessNo>
</root>