Giter VIP home page Giter VIP logo

chord's Introduction

chord

Chord 是数字平台公司 2015 年开始研发的新一代分布式图书馆软件。

它采用点对点通讯协议,允许没有 Internet 公开 IP 的图书馆服务器或者前端之间开展协作,实现图书馆业务和数据分享。

Z39.50 函数库

chord 里面包含一个 DigitalPlatform.Z3950.dll 函数库,实现了 Z39.50 协议栈的基本功能,使用它可以很方便地搭建 Z39.50 前端。它采用 C# 较新的 async await 写法处理通讯任务,结构合理,容易理解,节省资源。

TestZClient 是示范如何使用 Z39.50 函数库的一个小 Windows Form 前端程序,能对指定的 Z39.50 服务器进行检索、获取数据的操作,并把获取到的 MARC 记录显示在内嵌浏览器控件中。

chord's People

Contributors

919506114 avatar cobbybyent avatar digitalplatform avatar lelong2002huyao avatar renyh avatar yinjuan1123 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chord's Issues

"我的图书馆“测试工作单/绑定账号

  1. 未选择图书馆时,点击菜单选项“我的图书馆/绑定账号”进入“绑定账号”界面时会出现未选择图书馆文字提示行,点击链接选择图书馆。选好图书馆后,自动转回绑定账号界面。

Web:√(2018.4.18)
微信:


  1. 当选择图书馆时,系统会自动绑定一个public帐户,public显示在绑定账号界面左上角,界面右上角显示当前图书馆名称。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. “绑定账号“界面显示正常。(图书馆一栏显示为当前图书馆名称,点击”绑定方式“输入框,下拉显示有四种方式可选。分别是姓名,证条码号,手机号码,工作人员账号。”绑定“按钮下方有”找回密码“链接)

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接3,在“绑定账号“界面,用户可以点击图书馆一栏右侧的选择按钮进入”选择图书馆“界面,选择好图书馆后系统自动转回”绑定账号“界面,图书馆名称变为刚才新选的图书馆。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 在“绑定账号“界面,当绑定方式选择”姓名“时,绑定方式下方为”姓名“栏。
    在输入框里输入读者姓名-点击”绑定“,系统弹出对话框提示没有输入密码-点击”确定“,对话框关闭回到绑定账号界面;
    密码栏输入不正确的密码-点”绑定“-系统弹出对话框提示账号不存在或密码不正确-点击”确定“-对话框关闭回到绑定账号界面;
    密码栏输入正确的密码-点”绑定“-系统弹出对话框提示绑定成功-点击”确定“-对话框关闭回到“我的信息”界面。界面左上方显示读者姓名,右上角显示绑定的图书馆。
    如果是微信入口,系统会发送绑定微信通知。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 在“绑定账号“界面,当绑定方式选择”证条码号“时,绑定方式下方为”证条码号“栏。
    在输入框里输入读者证条码-点击”绑定“-系统弹出对话框提示没有输入密码-点击”确定“,对话框关闭回到绑定账号界面;
    密码栏输入不正确的密码后-点”绑定“-系统弹出对话框提示账号不存在或密码不正确-点击”确定“-对话框关闭回到绑定账号界面;
    密码栏输入正确的密码-再点”绑定“-系统弹出对话框提示绑定成功-点击”确定“-对话框关闭回到“我的信息”界面。界面左上方显示读者姓名,右上角显示绑定的图书馆。
    如果是微信入口,系统会发送绑定微信通知。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 在“绑定账号“界面,当绑定方式选择”电话号码“时,绑定方式下方为”电话号码“栏。
    在输入框里输入读者登记到dp2系统的电话号码-点击”绑定“-系统弹出对话框提示没有输入密码-点击”确定“-对话框关闭回到绑定账号界面;
    密码栏输入不正确的密码后-点”绑定“-系统弹出对话框提示账号不存在或密码不正确-点击”确定“-对话框关闭回到绑定账号界面;
    密码栏输入正确的密码后-点”绑定“-系统弹出对话框提示绑定成功-点击”确定“-对话框关闭回到“我的信息”界面。界面左上方显示读者姓名,右上角显示绑定的图书馆。
    如果是微信入口,系统会发送绑定微信通知。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 绑定一个读者账号后,点击“我的图书馆/绑定账号”进入“账号管理“界面,界面显示当前绑定了读者账号,并以红色对勾显示当前绑定账号的姓名(证条码号),图书馆,并提示可以绑定多个图书馆账号,账号右下角有”解绑“按钮。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接4,在“绑定账号“界面,当绑定方式选择”工作人员账号“时,绑定方式下方为”账号名“栏。
    在输入框里输入工作人员账号-点击”绑定“-系统弹出对话框提示没有输入密码-点击”确定“-对话框关闭回到绑定账号界面;
    密码栏输入不正确的密码-点”绑定“-系统弹出对话框提示账号不存在或密码不正确-点击”确定“-对话框关闭回到绑定账号界面;
    密码栏输入正确的密码后-点”绑定“-系统弹出对话框提示绑定成功-点击”确定“-对话框关闭回到“图书馆介绍”界面。界面左上方显示工作人员姓名,右上角显示绑定的图书馆。
    如果是微信入口,系统会发送绑定微信通知。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接9,绑定工作人员账号后,点击“我的图书馆/绑定账号”进入“账号管理“界面,界面显示当前绑定的是工作人员账号,并以红色对勾显示当前绑定的账号名,图书馆,并提示可以绑定多个图书馆账号,账号右下角有”解绑“按钮。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 在“账号管理“界面,当只绑定了一个账号时,
    点击“解绑“-系统弹出对话框提示是否确定要解绑-点击”取消“-对话框关闭回到”账号管理“界面;
    点击“解绑“-系统弹出对话框提示是否确定要解绑-点击”确定“-系统弹出对话框提示解绑成功-点”确定“-回到”绑定账号“界面,左上角显示的账号名称为Public,右上角显示的图书馆为解绑账号对应的图书馆名称。
    如果是微信入口,系统会发送解绑微信通知。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 在“账号管理“界面,点击“新增绑定帐户”按钮系统进入“绑定账号“界面。用户可按照5,6,7,9的操作绑定多个读者帐户 或者 工作人员帐户。如果是微信入口,每次绑定成功时都会收到微信通知。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 如果用户新增绑定的账号为已绑定的某读者帐户或工作人员账号,操作完毕之后,“账号管理“界面不会新增绑定记录。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 如果用户绑定了多个账号,“账号管理“界面显示所有已绑定的账号(读者账号和工作人员账号分开显示)。最后一个绑定的账号前面以红色对勾显示该账号为当前活动账号。当前活动账号右下角有”解绑“按钮;其他账号右下角有”设为活动账号“和”解绑“两个按钮。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接14,在“账号管理“界面,点击非当前账号后面的“设为活动账号“按钮-系统弹出对话框提示设置活动账号成功-再点”确定“-进入这个账号对应的页面。(如果是读者账号,进入对应的”我的信息“界面;如果是工作人员账号,仍然回到”账号管理“界面)。
    在”账号管理“界面,当前账号被设置为新的活动账号。上一个活动账号前的对勾消失。处在活动状态的账号只有一个。

Web:√(2018.4.18)
微信:√(2018.4.20)
(建议:在“账号管理”界面设置活动账号为新的读者账号时,系统跳转到对应的“我的信息”界面。此处是否方便读者使用,需要收集读者意见)


  1. 切换活动账号后,进入任意菜单选项界面时,界面上面的账号名和图书馆名称均显示为当前活动账号的账号名和图书馆名称。所有的操作和信息都是针对当前活动帐户的。

Web:√(2018.4.18)
微信:√(2018.4.20)

  1. 接14,如果用户绑定了多个账号,在“账号管理“界面可以对任意绑定的帐户解绑。如果解绑的帐户是当前活动帐户,则解绑后程序会自动根据算法选一个帐户为活动帐户。如果解绑帐户不是活动帐户,则当前活动帐户不受影响。如果是微信入口,每一次解绑成功时都会收到解绑通知信息。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 多个账号绑定后全部解绑时,系统进入“绑定账号“界面,同时界面显示的账号名称为public,图书馆默认为最后一个解绑的账号对应的图书馆名称。

Web:√(2018.4.18)
微信:√(2018.4.20)

Chord各项目的目标框架修改清单

项目名称 原目标框架 新目标框架 类型
DigitalPlatform.Base .NET Framework 4.5 .NET Standard 2.0 类库
DigitalPlatform.Xml .NET Framework 4.5 .NET Standard 2.0 类库
DigitalPlatform.Text .NET Framework 4.5 .NET Standard 2.0 类库
DigitalPlatform.LibraryRestClient .NET Framework 4.5 .NET Standard 2.0 类库
DigitalPlatform.MarcKernel .NET Framework 4.5 .NET Framework 4.6.1 类库
DigitalPlatform.Message .NET Framework 4.5 .NET Framework 4.6.1 类库
DigitalPlatform.Message.client .NET Framework 4.5 .NET Framework 4.6.1 类库
DigitalPlatform.IO .NET Framework 4.5 .NET Framework 4.6.1 类库
DigitalPlatform.Interfaces .NET Framework 4.0 .NET Standard 2.0 类库
DongshifangMessageInterface .NET Framework 4.0 .NET Standard 2.0 类库
ilovelibrary.Server .NET Framework 4.5 .NET Framework 4.6.1 类库
ilovelibrary .NET Framework 4.5 .NET Framework 4.6.1 mvc项目
dp2weixin.service .NET Framework 4.5 .NET Standard 2.0 类库
dp2weixinWeb .NET Framework 4.5 .NET Framework 4.6.1 mvc项目
testSearch .NET Framework 4.5 .NET Framework 4.6.1 winform
dp2Tools .NET Framework 4.5 .NET Framework 4.6.1 winform

为微信公众号模块增加一个 Console 管理界面

设想可为微信公众号增加一个 Console 交互界面。用逐级选菜单的简单交互方式,实现一些基本的图书馆业务管理工作。比如对读者记录的管理。

这种界面的优点是,比普通 Web 界面开发成本低。

可以参考 dp2OPAC 的 Console 网页页面。

“我爱图书馆”测试工作单/二维码+设置

二维码:

  1. 未选择图书馆时,点击菜单选项“我的图书馆/二维码”--进入“二维码界面”,界面上出现未选择图书馆文字提示行--点击“选择图书馆”链接--进入“选择图书馆”界面--选好图书馆--系统自动转回“二维码“界面,并提示不是读者账号--点击绑定账号链接--进入“绑定账号”界面--绑定账号--系统进入“我的信息”界面。

Web:√(2018.4.18)
微信:

  1. 接1,点击“我的图书馆/二维码”进入“二维码”界面,界面显示当前读者的二维码(含读者姓名和证条码号)。并提示不要把二维码展示给无关人员。

Web:√(2018.4.18)
微信:√(2018.4.25)

  1. 绑定多个读者账号时,更改当前活动读者账号后,二维码为更改后的读者所对应的二维码。

Web:√(2018.4.18)
微信:√(2018.4.25)

  1. 当前账号不是读者账号时,点击“我的图书馆/二维码”进入二维码界面,界面提示当前不是读者账户,需要绑定。
    Web:√(2018.4.18)
    微信:√(2018.4.25)

  2. 接上,点击链接进入账号管理界面,新增或选择读者账号后,系统跳转到“我的信息”界面。
    Web:√(2018.4.18)
    微信:√(2018.4.25)


设置

  1. 未选择图书馆时,点击菜单选项“我的图书馆/设置”--j进入“设置”界面,界面出现未选择图书馆文字提示--点击“选择图书馆”链接--进入“选择图书馆”界面--选好图书馆--系统自动转回“设置“界面。

Web:√(2018.4.18)
微信:

  1. 设置界面的显示内容与当前账号权限相关。
    基本显示包含:我的图书馆一栏显示当前图书馆名称,用户点击后面的选择按钮可以进入“选择图书馆”界面,更换选择图书馆后系统自动转会“设置”界面;系统默认勾选“显示头像”和“显示图书封面”两个选项。

Web:√(2018.4.18)
微信:√(2018.4.25)

  1. 当账号为public时,“监控本馆信息”、“监控消息隐藏敏感字段”选项不显示,“校验输入的条码号”选项处于禁用状态;声音方案一栏下拉列表处于禁用状态。

Web:X.当账号为public时,“监控本馆信息”、“监控消息隐藏敏感字段”显示,处于禁用状态,“校验输入的条码号”选项处于可用状态;声音方案一栏无默认选择,但下拉列表处于可用状态。(2018.4.18)
微信:X.测试结果同web(2018.4.25)

  1. 当前账号为具有流通权限的读者账号时,“监控本馆信息”、“监控消息隐藏敏感字段”选项不显示;选项“馆藏限定范围”只显示当前账号对应权限的馆藏;“校验输入的条码号”可用且默认不勾选、“声音方案”处于可用状态,且声音方案默认为“提示语音+具体信息语音”。

Web:X.当前账号为具有流通权限的读者账号时,“监控本馆信息”、“监控消息隐藏敏感字段”显示,处于禁用状态(2018.4.18)
微信:X.测试结果同web(2018.4.25)

  1. 当前账号为分馆工作人员账号时,“监控本馆信息”、“监控消息隐藏敏感字段”选项处于可用状态,默认不勾选;选项“馆藏限定范围”显示当前账号对应权限的馆藏;“校验输入的条码号”可用且默认不勾选、“声音方案”处于可用状态,且声音方案默认为“提示语音+具体信息语音”。

Web:√(2018.4.18)
微信:√(2018.4.25)

  1. 当前账号为总馆工作人员账号时,“监控本馆信息”、“监控消息隐藏敏感字段”选项处于可用状态,选项“馆藏限定范围”可用看到总馆下分馆的馆藏;“校验输入的条码号”、“声音方案”处于可用状态,且声音方案默认为“提示语音+具体信息语音”。

Web:√(2018.4.18)
微信:√(2018.4.25)

对 ilovelibrary 界面的几点意见

  1. 操作人员最关心的是那些易变的代表特定读者和图书信息的内容。比如 输入的证条码号;显示出来的读者姓名;显示出来读者当前在借的册的情况。而这些文字的栏目提示,例如“证条码号” “册条码号” “借阅信息” 等等,随着时间的推移操作人员会越来越熟悉,通常凭借位置就能明白这里显示的是什么内容。

虽然不到最极端的情况 --- 那就是不显示这些栏目提示,那么退后一步,让这些栏目提示的文字变小一点,颜色变灰一点还是可以的,让它们不要那么夺目。也就是说把刺激感官的机会留给上述那些易变的独特的需要注意的内容。对了,也就是还要让它们突出、再突出。

设计字体字号,可以考虑这个信息点是比较重要的么?省略了它会有什么后果?最重要的应该最突出显示。或者在当时突出显示。

  1. 右边“借阅信息”这四个字建议修改为“在借册”。

“我爱图书馆”测试工作单/书目检索

  1. 选择了图书馆的情况下,点击 “资源/书目查询”,进入书目查询界面,且书目检索界面显示正常。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 简单检索:检索词输入框空白时,发起检索,系统以“全部”检索途径,匹配方式“前方一致”来检索,其检索结果与dp2内务相同。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接上,向下滑动查看更多结果,如果后面没有结果记录,则不再自动加载。微信里面向下滑动增加显示检索结果时,每次增加显示15条记录。如果后面没有记录,则不再自动加载。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接2,检索词输入框里输入检索词,检索结果与高级检索以及dp2内务对应的方式一致(每类检索词输入测试:书名,ISBN,作者,主题词,分类号,出版时间,出版社)

Web:X(2018.4.18)。检索词分别输入“图画”,“剪”,“江苏少年”,“2012”,“I”,”978“,“K”,"K825",“9”,前6个检索词的检索结果均与内务相同,输入“K”,"K825",“9”检索,结果不相同。具体如下:
星洲学校:

输入 Web简单检索 Web高级检索 内务
9 0 0 52
978 51 51 51
K 7 7 11
K825 5 5 8
I 42 42 42
I712 5 5 5
图画 5 5 5
1 1 1
江苏少年 15 15 15
12 0 0 0
2012 5 5 5

微信:X.测试过程和结果同web(2018.4.20)


  1. 点击检索结果中任意一条书目记录,展开显示书目详细信息,包括封面图片、书目信息、册信息。封面是否显示可以通过设置菜单进行设置。

Web:√(2018.4.18)
(建议在检索方式与检索结果之间设立一个分界线,显示时分界线上面的检索方式保持不动,下面滚动显示检索结果。以便读者可以根据结果调整检索内容的输入)
微信:√(2018.4.20)


  1. 当设置中勾选了馆藏地,检索到的书目下面只显示属于当前勾选馆藏地的册信息。其他馆藏的册记录不显示在书目下面。

Web: X.当前账号“yinming/星洲学校”,设置中勾选的馆藏地为“班级书架”,简单检索/全部检索,检索结果中显示了馆藏地位于图书馆的册记录信息。(2018.4.18)
微信:X.测试过程和结果同web(2018.4.20)


  1. 每条书目记录的右侧,有一个向下的小箭头,点击可以展开查看更详细的信息。展开后,向下的小箭头变成向上的小箭头,点击向上的箭头,关闭详细信息。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 若当前为工作人员账号,在书目信息的下方右侧,会出现“好书推荐”按钮,如果当前不是有权限的工作人员,则不出现该按钮。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 点击“好书推荐”按钮,进入新推荐好书界面,通过设置可以对当前图书进行推荐。点击“取消”,回到书目查询结果页面;点击“确定”,推荐成功,系统显示推荐好书界面。

Web:X。在新推荐好书界面点击“取消”后,显示的是空白的新推荐好书界面,没有回到原来的书目查询结果界面。(2018.4.18)
微信:X。在新推荐好书界面点击“取消”后,显示的是空白的新推荐好书界面,没有回到原来的书目查询结果界面。(2018.4.20)


  1. 接6,若当前为读者账号,显示读者针对该册的预约情况。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接9,未预约时,可点击右侧“预约”按钮预约图书。

Web:√(2018.4.18)
微信:√(2018.4.18)


  1. 接10,点击“预约”按钮,系统弹出对话框询问是否对册(册条码)进行预约,点击“取消”,对话框消失,回到刚才的界面;点击“确定”,系统弹出对话框显示预约成功与否,再点击“确定”,对话框关闭,预约信息相应更改显示预约情况。

Web:√(2018.4.18)
微信:√(2018.4.18)
(建议:弹出的对话框里有时会出现“不要让这个页面创建更多信息”选框,若用户勾选这个选项,随即“预约”,“取消预约”“放弃取书”按钮均失效,必须关闭浏览器后重新进入才行。(当前测试为ie浏览器))


  1. 接11,当预约立即得到兑现时,以黄色底纹显示兑现信息,并提示预约到书通知已经发出,几天之内可以办理借阅手续等详细信息。使用微信预约时用户会同时收到预约到书通知。

Web:√(2018.4.18)
微信:√(2018.4.20)
(建议:黄色底纹显示的内容中表明发送通知消息的方式,并在此处提醒用户具体可以办理借阅的日期范围和注意事项。即把通知消息的具体内容显示在这里,更加为用户提供方便。)


  1. 当预约数量已达上限时,点击“预约”按钮,系统弹出对话框询问是否对册(册条码)进行预约;点击“确定”,系统弹出对话框提示预约事项达到上限,预约被拒,再点击“确定”,对话框关闭,预约信息显示预约被拒的信息。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接9,对已预约的书,可点击右侧“取消预约”按钮取消预约。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 点击“取消预约”按钮,系统弹出是否对册(册条码)取消预约的提示对话框。点击“取消”,回到刚才的界面;点击“确定”后,弹出取消预约成功对话框。再点击“确定”,预约信息一栏更新状态为“未预约”。使用微信取消预约时用户会同时收到取消预约的通知。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 已到约时,预约信息一栏右侧出现“放弃取书”按钮。点击“放弃取书”,系统弹出对话框提示是否真的要放弃取书;点击“取消”,回到刚才的界面;点击“确定”,系统弹出取消预约成功提示及详细信息,再点击“确定”,预约信息一栏更新为“未预约”,并以黄色底纹显示放弃取书的具体信息。同时预约信息右侧的按钮显示“预约”。使用微信放弃取书时用户会同时收到取消预约的通知。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接9,如果某册是当前读者在借,预约信息显示不能预约,右侧显示“续借”按钮。点击“续借”按钮,系统弹出对话框提示是否真的续借,点击“取消”按钮,取消续借请求,回到刚才的界面;点击“确定”,系统弹出“续借成功”提示对话框,再点“确定”,在借情况信息一栏更新为续借信息,并显示“续借成功”。使用微信续借时用户会同时收到续借通知。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接6,册信息处,如果当前帐户不是读者时,显示不能查看预约信息的提示。点击链接进入账号管理页面,可以在这里新增绑定读者帐号。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 点击书目查询页面的“高级检索”,进入高级检索页面。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 高级检索的检索途径包含:全部,书名,ISBN,作者,主题词,分类号,出版时间,出版社。检索途径可任选一种。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 高级检索的匹配方式包含:前方一致,中间一致,后方一致,精确一致。匹配方式可以任选一种。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 高级检索页面显示正确,点击”简单检索“链接可以切换到简单检索界面。

Web::√(2018.4.18)
微信:√(2018.4.20)


  1. 接18,高级检索途径设置为“全部”,匹配方式“前方一致”时,输入各种检索词或者不输入,检索结果与对应的简单检索和dp2内务检索结果一致。

Web:X。检索词依次输入为“图画”,“剪”,“9”,”978“,“江苏少年”,“2012”,“K",”K825',"I".检索结果与简单检索一致,但输入为“9”,“K",”K825"时与内务检索结果不同。具体数据同4.(2018.4.18)
微信:X。测试过程及结果同web.(2018.4.20)


  1. 高级时检索途径和匹配方式为“全部-前方一致”以外的其他组合时,检索结果与dp2内务对应检索结果一致。

Web:X。测试图书馆:星洲学校
1)检索方式:全部/中间一致

输入 Web 内务
9 29 56
K 10 17
K825 5 10
I 48 54
I712 5 43
12 16 18
2012 5 5
5 5
少年 15 15

2)测试方式:全部/后方一致

输入 Web 内务
9 10 18
K 0 2
K825 0 0
I 1 26
12 5 5
2012 5 5
0 0
少年 0 0

3)检索方式采用全部/后方一致、全部/精确一致时,高级检索结果与dp2内务相同。
4)其他检索方式及测试结果

检索途径 匹配方式 检索词 测试结果
书名 前方一致 高级检索结果=dp2内务对应检索结果
书名 中间一致 高级检索结果=dp2内务对应检索结果
书名 后方一致 高级检索结果=dp2内务对应检索结果
书名 精确一致 高级检索结果=dp2内务对应检索结果
ISBN 前方一致 9 高级检索结果=dp2内务对应检索结果
ISBN 中间一致 9 高级检索结果=dp2内务对应检索结果
ISBN 后方一致 9 高级检索结果=dp2内务对应检索结果
ISBN 精确一致 9 高级检索结果=dp2内务对应检索结果
ISBN 前方一致 978 高级检索结果=dp2内务对应检索结果
ISBN 中间一致 978 高级检索结果=dp2内务对应检索结果
ISBN 后方一致 978 高级检索结果=dp2内务对应检索结果
ISBN 精确一致 978 高级检索结果=dp2内务对应检索结果
作者 前方一致 高级检索结果=dp2内务对应检索结果
作者 中间一致 高级检索结果=dp2内务对应检索结果
作者 后方一致 高级检索结果=dp2内务对应检索结果
作者 精确一致 高级检索结果=dp2内务对应检索结果
主题词 前方一致 高级检索结果=dp2内务对应检索结果
主题词 中间一致 高级检索结果=dp2内务对应检索结果
主题词 后方一致 高级检索结果=dp2内务对应检索结果
主题词 精确一致 高级检索结果=dp2内务对应检索结果
分类号 前方一致 K 高级检索结果=dp2内务对应检索结果
分类号 中间一致 K 高级检索结果=dp2内务对应检索结果
分类号 后方一致 K 高级检索结果=dp2内务对应检索结果
分类号 精确一致 K 高级检索结果=dp2内务对应检索结果
分类号 前方一致 K825 高级检索结果=dp2内务对应检索结果
分类号 中间一致 K825 高级检索结果=dp2内务对应检索结果
分类号 后方一致 K825 高级检索结果=dp2内务对应检索结果
分类号 精确一致 K825 高级检索结果=dp2内务对应检索结果
分类号 前方一致 I 高级检索结果=dp2内务对应检索结果
分类号 中间一致 I 高级检索结果=dp2内务对应检索结果
分类号 后方一致 I 高级检索结果=dp2内务对应检索结果
分类号 精确一致 I 高级检索结果=dp2内务对应检索结果
分类号 前方一致 I712 高级检索结果=dp2内务对应检索结果
分类号 中间一致 I712 高级检索结果=dp2内务对应检索结果
分类号 后方一致 I712 高级检索结果=dp2内务对应检索结果
分类号 精确一致 I712 高级检索结果=dp2内务对应检索结果
出版时间 前方一致 2012 高级检索结果=dp2内务对应检索结果
出版时间 中间一致 2012 高级检索结果=dp2内务对应检索结果
出版时间 后方一致 2012 高级检索结果=dp2内务对应检索结果
出版时间 精确一致 2012 高级检索结果=dp2内务对应检索结果
出版时间 前方一致 12 高级检索:未命中;p2内务对应检索结果:“字符串12不是合格的freetime格式
出版时间 中间一致 12 高级检索:15;dp2内务对应检索结果:“字符串12不是合格的freetime格式
出版时间 后方一致 12 高级检索:未命中;dp2内务对应检索结果:“字符串12不是合格的freetime格式
出版时间 精确一致 12 高级检索:未命中;dp2内务对应检索结果:“字符串12不是合格的freetime格式
出版社 前方一致 少年 高级检索结果=dp2内务对应检索结果
出版社 中间一致 少年 高级检索结果=dp2内务对应检索结果
出版社 后方一致 少年 高级检索结果=dp2内务对应检索结果
出版社 精确一致 少年 高级检索结果=dp2内务对应检索结果

微信:X。测试过程及结果同web.(2018.4.20)

我爱图书馆微信公众号项目编译过程

从克隆chord完整原代码后,依次对下面项目重新生成。

  • DigitalPlatform.Common
  • DigitalPlatform.IO
  • DigitalPlatform.Xml
  • DigitalPlatform.Text
  • DigitalPlatform.MarcKernel
  • DigitalPlatform.MarcQuery
  • DigitalPlatform.Interfaces
  • DigitalPlatform.Message
  • DigitalPlatform.MessageClient
  • DigitalPlatform.LibraryRestClient
  • dp2weixin.service
  • dp2weixinWeb

chord解决方案中的其它项目可以暂时不管,DigitalPlatform开头的是公司通用程序集,dp2weixin开头的两个项目是公众号重点。

MarcLoader

MarcLoader简介

MarcQuery 函数库增加了一个类 MarcLoader: https://github.com/DigitalPlatform/chord/blob/master/DigitalPlatform.MarcQuery/MarcLoader.cs

这个类用于遍历 ISO2709 文件里面的记录。可以用两种方式遍历:一种是遍历 ISO2709 原始 byte []。这个可能仅仅具有调试观察意义。另外一种是遍历时候返回 MARC 机内格式字符串。

机内格式字符串是非常方便可以直接装入 MarcQuery 函数库的主要对象 MarcRecord 的。 其实函数库提供 MarcLoader 这个类,就是给函数库增加从外界导入 MARC 数据的手段。

以前是假定使用这个函数库的人一定能自己搞定从 ISO2709 文件到机内格式这个过程的。聚焦在机内格式字符串如何处理方面。但其实现在要推广这个函数库,一般使用者对于从 ISO2709 文件中读入数据也是头疼的,所以最好把这些功能包含到 MarcQuery 函数库中,让它更加实用。

以前在 dp2 系统中是 MarcUtil 这个类在管辖这些文件 IO 的任务,不过写得比较乱,代码经过很多年的慢慢积累,风格也前后差异很大。这次考虑到函数库建设问题,自然是要把这些环节都理一理

后面还要开发一个 MarcWriter 类,用来负责向 ISO2709 文件写入内容,或者说用来创建 ISO2709 文件。 其实这些功能十几年来反复写。但这次依然是继续加强整理,胜在函数组织方面。

MarcLoader 类这次做得比较彻底,它是一个枚举器,直接用 foreach(...) 就可以遍历, 非常符合初学开发的人的偏好。简单,是没有止境的,越简单越好。

TestZClient 小前端里面加了一段测试验证这个 MarcLoader 类功能的代码。不过在打开文件的时候,还没有界面可以指定文件的编码方式,还是默认 GB2312。这里似乎需要一个专用于打开 ISO2709 文件的对话框,其实 dp2 项目里面是有的。但是否复制到 chord 里面来,还没有想好。
其实这些功能主要是要找到一个合适的函数库存放。

函数库的功能组织要合理。所谓合理就是,用它的时候它存在,不用它的时候就不连接它。最好功能成组。不要出现因为需要一个函数库里面的一点点功能,就连接整个函数库的局面。这通常说明函数库内的功能组织不是太合理。如果合理的话,相近的功能都是在一起的,只要引用少量函数库就可以获得必要的功能。

比如 MarcQuery 是处理 MARC 的,那么相关的功能都聚集在这里原则上没有错。但另外一个维度,要考虑函数库是否和 UI 有关,比如是否和 Windows Form 有关。和 UI 无关的函数库,一般是默默用在服务器模块,服务器不需要 UI。有 UI 的函数组织在一起,和无 UI 的分开。这样函数库可以视为用于底层的或者服务器的,和用于前端的。 有 UI 的函数库,也可以细分为,为 Windows Form 服务的,为 WPF 服务的,为 IE 浏览器控件服务的,几类。也需要按类单独聚集。

所以现在拿着这个 MARC 文件打开专用对话框,要考虑考虑放在什么函数库里面。

放在 MarcQuery 函数库里面,违背了这个函数库不包含 UI 组件的原则。

MarcLoade 类还可以挂接回调函数,在遍历过程中触发回调函数显示装载进度。注意它并不去显示,而是仅仅触发函数。


MarcLoader使用例子

看这个代码: https://github.com/DigitalPlatform/chord/blob/master/TestZClient/Form1.cs
这段代码简单得令人发指。

首先构造 MarcLoader 的时候,注意有个回调函数稍微洋派一点,不要被迷惑了,它不过是提供进度条显示用。如果对回调函数不理解,回调函数这里使用 null 也行。

然后就是一个 foreach,注意截图的底部。就是这个 foreach 就完成了对文件里面记录的遍历。哪怕文件有一亿个记录,也可以遍历,而且不多费内存。

目前这个 MarcLoader 还比较简单,构造的时候是给它一个文件名字符串。后面我还会增加给它一个 stream 用于构造的版本,因为有的开发者喜欢这么用。

您可以重点看看它是如何实现 IEnumberable 接口的,如何写庞大集合(如果全部装入内存会导致内存溢出)的 yield 枚举过程的。这个 yield 是 C# 后来的语法糖,是我们常说如何如何超过 Java 的重要部分。

这些和 await 什么加在一起,构成了“现代”的 C#。其实很多人写的老式 C# 和这种现代的差异很大,几乎是不同的两种“语言”了。

最后那个截图,为啥 foreach 要包在一个 Task.Run() 以内并且 await,那就是要让 Windows Form 界面在长操作中不至于冻结。而且,要全程控制这个 foreach,比如能用 try catch 包住,可以捕获异常。那这个 await 写法就几乎是唯一的了。

如果用 Task.Run() 启动了一个 Task 但是不 await,Windows Form 界面也做到了不冻结,但 _click() 函数这里对循环过程失控了,因为循环在一个不相干的单独线程里面去执行了,飞走了。比如万一抛出异常就麻烦,没有人去捕获和处理。

这是 2018 年了,所以写这些东西要求要高一些。如果是十年前,可以用 Application.DoEnvents() 来对付一下,让界面不至于冻结,但这个方法问题很多,具体表现就是 dp2catalog 经常会抛一点异常什么的,始终不太容易写完美和干净。


MarcQuery 函数库增加了从一个 ISO2709 byte[] 转换到机内格式 string 的函数

用户问题:


为什么我这会出现字段前面都少内容的结果
是不是我直接用marc的string初始化marcrecord不对

数字平台谢:
构造 MarcRecord 的时候,用的是一个机内格式的字符串。这个字符串前面 24 个 char 是头标区,后面依次为各个字段。每个字段末尾都有字段结束符 char,注意这个 char 的内码是 30(十进制)。字段内容中可能有子字段符号,内码是 31。整个记录结束可用也可用不用记录结束符,记录结束符是 29。

node.Content 是字段或者子字段内容。要看这个 node 是具体什么类型了。node.Name 是字段或者子字段名。注意子字段名是一个字符的字符串。

字段的 node.Content 里面可能有子字段符号,您显示出来的时候小心,有些环境不一定能显示这个字符。可以在显示前替换一下,确保显示出来能被看见。node.Text 一般是等于 node.Name 连接 node.Indicator 连接 node.Content。

一般关于编程的交流,可以在 GitHub 上建立一个自己的 repo,然后把写好的代码 Push 上去,这样讨论编程问题的时候,一个 URL 就可以让对方看到全部代码。如果必要也可以 Clone 到本地进行编译调试。这样交流就直接了。

MarcQuery 函数库增加了从一个 ISO2709 byte[] 转换到机内格式 string 的函数,非常方便。先转换为机内格式字符串,再用于构造 MarcRecord 就好了。不过 MarcQuery 的 NuGet 包还没有来得及更新,chord 最新源代码里面是有这个函数的。

看这个代码:
https://github.com/DigitalPlatform/chord/blob/master/DigitalPlatform.MarcQuery/MarcLoader.cs

image

如果代码的实现您觉得繁琐,可以不看,但可以了解一下函数的参数。这个很简单,就是输入一个 byte[],输出一个 string。还要指明 Encoding。这都是设计阶段可以想象的参数。

上面介绍的是如果你手握一个 byte [],可以这么去处理,先把它变换为(机内格式的) string,然后再用于构造 MarcRecord对象。但,容我多说一句。您这个 byte [] 从哪儿来的?

一般来说,是两种途径。一种是从 Z39.50 服务器获取来的。另外一种是从一个 ISO2709 文件读入进来的。

如果是第二种情况,您大概还费了一点功夫,判断 ISO2709 的记录结束符 29,弄清楚了记录边界然后读入的。但这个编程属于基本套路了,很常见,如果每个人都去重复编写一下也是很累的,还容易出错,因为国内出现了一些变种的 ISO2709 文件,每个记录末尾有回车符号一对。

所以 MarcLoader 这个枚举类本身是解决从 ISO2709 文件一个一个读入,遍历 ISO2709 记录而且连带把 ISO2709 转换为机内格式 string 这些工作都做了。

中小学分类简表匹配工具

中小学分类简表匹配工具

功能说明:

查找某中图法分类号在简表中对应的分类号,用于生成索取号得到简表中短的分类号。

开发说明:

开发时可以分为三个层次实现:
第一个层次:输入一个分类号,输出在简表中对应的分类号,输出匹配过程。

第二个层次:
输入一批分类号,每个分类号一行
输出每个分类号在简表中对应的分类号,输出匹配过程。
输出简表中分类号被匹配上的次数

这个小工具直接用winform程序就行,项目放到github上。简表目前就是一个txt文件,取一列(其它信息忽略),在程序启动中加载到内存即可。

样例

参考下面简表,例如输入的中图法分类号A841.63,在简表中匹配上A84;输入A811.64,在简表中匹配上A81。

简表样例:

…
A8	马克思主义、列宁主义、*****、***理论的学习和研究	1
A81	马克思主义的学习和研究	2
A82	列宁主义的学习和研究	2
A83	斯大林的**的学习和研究	2
A84	*****的学习和研究	2
A849	***理论的学习和研究	2
A85	著作汇编的学习和研究	2
…

输入的 中图法分类号 样例:

A85
A841.63
A841.63
A841.4
A841.4
A841.26
A841.23
A84
A82
A811.64
A811.63

简表参考:http://www.clcindex.com/

(移至115)在输入读者证条码号的界面,具备一个按钮,可以出现一个选择读者的对话框,里面用单位等方式逐级选择读者

数字平台谢涛 2017/12/6 12:25:45
后面我建议,在输入读者证条码号的界面,具备一个按钮,可以出现一个选择读者的对话框,里面用单位等方式逐级选择读者。比如先选择一个班,然后自动列出这个班的所有读者姓名,然后再选择具体读者。这个功能是如此自然以至于都不用培训了

ilovelibrary 登录问题

我启动了一个 dp2libraryxe 单机版,显然它没有 restful 监听的能力,所以 ilovelibrary 默认的 dp2library URL 进行 login 的时候就抛出异常了。你可以用 dp2libraryxe 临时切换为单机版来测试,也可以通过修改 ilovelibrary 的 dp2library URL 来模拟这种情况。

ilovelibraryserver.cs 中的这个函数:
public SessionInfo Login(string strUserName, string strPassword,
out string rights,
out string strError)

它已经有了 strError 这个返回参数,是不是它一般不宜再抛出异常呢?也就是说它应该 catch 到异常。

不过,这样做,是不是不符合 MVC 的开发习惯呢?我的意思是 MVC 是不是也不反对适当抛异常,只要相关层次能接住就行。我对 MVC 开发不了解,这些都是一点猜测。

顺便说一下,ilovelibrary 这个 Web App 肯定是有些异常最终是 Unhandled,到时候可以增加一个机制统一捕获以后发给 dp2003.com。但这种异常的意思是真的“异常”,是开发者不希望看到的故障,开发者在得到异常报告后肯定会修改软件发布新版本解决问题。而上面说的 URL 配置不正确这种情况,应该是开发的时候能预料到的常见情况,应该尽量给出体面的界面回馈,提示用户或者系统管理员修改配置解决应用问题。

馆员备书功能

初步需求设计

读者预约到书,馆员提前预备功能需求:

检索所有读者的预约请求,获取预约信息中包含预约者内容:姓名、单位/部门,所预约图书的书名、作者、索取号、馆藏地点,以及预约日期。

计划以 WinForm 程序实现,给工作人员使用。提供一个窗口,检索“预约到书”库。

选择要去备书的记录,打印小票,拿着小票到书库备书。

备书成功的记录设置状态,显示变绿,或者在另一个备书完成的页面显示。

第一阶段

  1. 查询读者预约的图书;
    1)输入读者证条码号,检索显示该读者所有的预约请求。
    2)不输入读者证条码号,检索显示所有读者的全部预约请求。

  2. 选择检索到结果列表中的项目,输出到电子表格,或打印出来,要求如下:
    1)将同一读者的预约请求归并到一起。
    2) “单位/部门”相同预约者合并为一组。
    3) 输出或打印时,可根据“馆藏地点”与“索取号”内“中图法”分类号大类进行筛选过滤。
    4) 输出或打印的项目在本地记录“已输出”或“已打印”状态。备书成功的记录设置状态,显示变绿,或者在另一个备书完成的页面显示。
    已打印状态上传到哪个服务器,微信公众号怎么访问到?暂是不回传到服务器端。

  3. 备书的记录,打印小票,拿着小票到书库备书

第二阶段

  1. 检索“预约到书”库的结果,生成 XML 格式文件,调用 dp2Library 接口,发送消息给 dp2系统微信公众号,供微信公众号或 web 程序使用。

  2. 在微信公众号或 web 程序显示应备图书时,需登记图书是否已备的状态。再次检索结果时,只显示未备图书。

  3. 备书完成后,可采用电子邮箱,手机短信,微信公众号的方式通知预约者已备图书所在的箱号或架位号。
    备书完成后,通知到预约者的方式可选择电子邮箱,手机短信,微信公众号通知的方式。

Web 界面 Z39.50 编目前端的设想

最近新写的 DigitalPlatform.Z3950 这个 Z39.50 函数库推出以后,编写一个 Z39.50 前端变成了比较容易的任务。由此我想到,可否开发一个 Web 界面的 Z39.50 编目前端,一来是提供给广大用户一种新的选择,另外也可以起到检验 DigitalPlatform.Z3950 函数库的作用。

以下是我对基本功能的一些设想,欢迎大家补充:

  1. 需要建立一个 Z39.50 站点数据库,并提供 Web 界面进行维护管理。这样经过一段时间用户共同添加积累,包含了大部分常用的 Z39.50 服务器参数,选用的时候就很方便了。Z39.50 技术本身现在已经基本普及了,要做好的恰恰是易用性。
  2. Web 界面上,每个注册的用户可以拥有一个自己的 Z39.50 站点列表,站点信息从上述 Z39.50 站点库中引用或者复制。这里要解决一个问题,就是通用的 Z39.50 站点配置信息里面的用户名和密码,可以被每个用户引用或者复制以后的信息,覆盖用户名和密码部分,从而实现不同用户用自己的密码访问同一 Z39.50 的效果。
  3. 具备一定的 MARC 记录编辑功能。
  4. 具备一个类似“购物篮”的设施,可以存储检索后选定的记录,最后统一下载为 ISO2709 文件到用户本地电脑。
  5. 用 .NET Core 开发,系统可以部署在 Linux 服务器上。

“我爱图书馆”测试工作单/好书推荐

  1. 未选择图书馆时,进入“好书推荐”界面时出现未选择图书馆提示,点击链接选择图书馆。选好图书馆后,自动转回到“好书推荐”界面。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. “好书推荐”界面显示正常。好书推荐界面的显示是分为2层,先是栏目层(消息数量),点栏目后进入第二层。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 当前账号为pubilc或读者账号时,用户只能查看好书推荐界面。用户点栏目后进入第二层,可以查看具体内容。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 当前账号为有权限的工作人员账号时,好书推荐界面除了按照两层显示推荐内容以外,增加“新推荐好书”按钮。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 当前为工作人员账号时,在好书推荐界面,点击需要编辑的栏目层标题--系统显示当前标题下所有的推荐内容--单击需要编辑的内容区域--该区域显示显示为绿底色,且右边出现“编辑”和“删除”按钮--点击该内容区域--取消编辑状态:底色消失,“编辑”和“删除”按钮消失。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 删除当前推荐内容:点击需要编辑的栏目层标题--系统显示当前标题下所有的推荐内容--单击需要编辑的内容区域--该区域显示显示为蓝底色,且右边出现“编辑”和“删除”按钮--点击“删除”--系统弹出对话框提示是否要删除该内容
    1)--点“取消”--对话框关闭,回到当前标题内容界面,且编辑区域关闭。系统显示为删除以前的内容。
    2)--点“确定”--系统弹出对话框提示删除成功--点“确定”--对话框关闭,回到当前标题内容界面,编辑区域关闭,且刚才删除的内容消失。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 编辑当前推荐内容。
    点击需要编辑的栏目层标题--系统显示当前标题下所有的推荐内容--单击需要编辑的内容区域--该区域显示显示为绿底色,且右边出现“编辑”和“删除”按钮--点击“编辑”--进入当前标题下的编辑界面--用户在这里可以选择或自定义栏目;同时用户可以编辑标题,内容,注释。
    1)设置后点击“取消”-回到当前推荐标题内容界面。系统显示为修改之前的推荐内容。
    2)设置后点击“保存”--系统弹出对话框提示操作成功--点“确定”-对话框关闭,回到当前标题下的推荐界面,系统显示为修改后的推荐内容。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 工作人员增加推荐好书。
    在好书推荐界面直接点击“新推荐好书”按钮--进入编辑界面,栏目一栏默认显示为“请选择栏目"--选择或自定义栏目;同时可以编辑标题,内容,注释。
    1)设置后点击“取消”--回到空白的“新推荐好书”界面。
    2)设置后点击“确定”--系统弹出对话框提示操作成功--点“确定”--对话框关闭,回到当前栏目的“新推荐好书”界面,系统按照推荐时间后先顺序显示当前栏目下所有的推荐内容,新增内容显示在最上面。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 在好书推荐界面先点击某标题进入对应的推荐界面--点击“新推荐好书”按钮--进入编辑界面时,栏目一栏默认显示为当前栏目名称--选择或自定义栏目;同时可以编辑标题,内容,注释。
    1)设置后点击“取消”--回到空白的“新推荐好书”界面。
    2)设置后点击“确定”--系统弹出对话框提示操作成功--点“确定”--对话框关闭,回到当前栏目的“新推荐好书”界面,系统按照推荐时间后先顺序显示当前栏目下所有的推荐内容,新增内容显示在最上面。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 当前图书馆为分馆时,只能看到本分馆的好书推荐,不能看到总馆或同一总馆下其他分馆的好书推荐。

Web:X(2018.4.25)。当前图书馆为星洲学校时,能够看到总馆的好书推荐内容。
微信:X(2018.4.25)。当前图书馆为星洲学校时,能够看到总馆的好书推荐内容。

"我爱图书馆“测试工作单/找回密码

  1. 未选择图书馆时,点击菜单选项“我的图书馆/找回密码”进入“找回密码”界面时会出现未选择图书馆文字提示行,点击链接选择图书馆。选好图书馆后,自动转回“找回密码“界面。

Web:√(2018.4.18)
微信:


  1. 找回密码界面显示正常。(图书馆栏显示为选定的图书馆名称,姓名栏,手机号码栏,提示栏,“找回密码“按钮)。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 点击图书馆栏右边的选择按钮,进入“选择图书馆“界面,可以改变选择图书馆,之后系统自动转回找回密码界面。

Web:√(2018.4.18)
微信::√(2018.4.20)


  1. 在姓名栏输入读者姓名,手机号码栏输入登记到dp2系统登记的手机号码-点击“找回密码“按钮:
    输入错误时,系统弹出对话框提示姓名与手机号码不一致,并提示当前图书馆名称-点“确定“-对话框关闭回到”找回密码“界面,界面下方显示操作失败提示行。

Web:X.选择分馆输入错误时,提示的当前图书馆为总馆。(2018.4.18)
微信:X。测试过程和结果同web。(2018.4.20)


  1. 在姓名栏输入读者姓名,手机号码栏输入登记到dp2系统登记的手机号码-点击“找回密码“按钮:
    输入正确时,系统弹出对话框提示已经发送密码到手机,同时手机收到短信-点击“确定“-对话框关闭,回到”找回密码“界面,界面下方显示修改密码链接,密码输入框及”绑定账号“按钮。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接5,在姓名栏输入读者姓名,手机号码栏输入登记到dp2系统登记的手机号码-点击“找回密码“按钮,当6与5间隔5分钟以内时,系统弹出对话框提示两次找回密码操作间隔太近,操作被拒,并提示在某个时间以后再试。

Web: X.提示的时间不正确。被拒的当前时间13:58,却提示13:54以后再试,且当前选择的是分馆,此处提示当前图书馆是总馆。(2018.4.18)
微信:X。测试过程和结果同web。(2018.4.20)


  1. 接5,在“找回密码“界面,密码栏输入短信中的密码-点击”绑定账号“-系统弹出对话框提示绑定账号成功-点”确定“-系统显示”我的信息“界面。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 当前读者账号已被绑定时,进行7操作,正常显示完毕,但在“账号管理”页面只显示一个当前读者账号。

Web:√(2018.4.18)
微信:√(2018.4.20)

  1. 接5,在“找回密码“界面,点击修改密码链接,进入”修改密码“界面,”修改密码“界面显示正确(证条码号一栏为刚才找回密码的账号对应的证条码,其他栏位空白)

Web:√(2018.4.18)
微信:√(2018.4.20)

  1. 接7,在“找回密码”界面,输入旧密码,新密码以及输入确认新密码-点击“修改密码”,
    当旧密码输入不正确时:系统弹出对话框提示是否确认修改密码-点“确定”-系统弹出对话框提示操作未成功,旧密码不正确-点“确定”-对话框关闭,回到“找回密码”界面,保留了刚才的输入。
    当旧密码输入正确时,密码和确认密码输入不一致:系统弹出对话框提示是否确认修改密码-点“确定”-系统弹出对话框提示操作未成功,两次新密码输入不一致-点“确定”-对话框关闭,回到“找回密码”界面,保留了刚才的输入。
    当旧密码输入正确,且两次输入密码一致:系统弹出对话框提示是否确认修改密码-点“确定”-系统弹出对话框提示修改密码操作成功-点“确定”-对话框关闭,回到“找回密码”界面,界面下方提示修改密码成功,且输入框空白。

Web:√(2018.4.18)
微信:√(2018.4.20)

dp2Capo Z39.50 功能增强和测试计划

dp2Capo 近期增加了 Z39.50 服务功能,这部分功能需要进行测试。

安装和配置测试

  • 新创建一个实例。如果没有专门修改过实例名,安装程序应该能自动给出一个实例名(实例数据子目录名)。确认后在实例列表里面会显示为正确的实例名(以前一度用过序号方式,后来改进了)

  • 创建和修改实例的时候,会自动检查实例名是否和其他实例重复。

  • 用 Windows 命令提示符,进入数据目录。这样 chordInstaller 中的实例配置对话框中,如果对这个实例进行了修改,最后又用“取消”退出对话框,Undo 机制就会发生作用,会把早先拷贝出去保存的目录拷贝回数据目录,这时候因为命令提示符的当前目录占据着,清除目录的操作会出错,由此可能造成 Undo 失败。需要测试发现可能出现问题,然后逐步解决

  • 一个实例可以不启用 Z39.50 服务。

  • 创建实例的时候,只有 dp2library 服务器参数的情况下,可以不用配置 MQ 路径。但如果同时也配置了 dp2mserver 服务器参数的情况下,会要求 dp2library 服务器参数中具有 MQ 路径。这是因为 dp2library 在推送消息给点对点服务器的时候,需要这个参数。

  • 实例管理对话框可以点“取消”按钮退出,不但对实例配置的所有修改会还原,而且对全局参数的修改也会还原。请逐项检查还原的情况。

  • 实例管理对话框刚进入的时候,并不会停止 dp2Capo 的服务。只是当双击某个实例打开实例对话框时,才自动停止这个实例的服务。实例对话框关闭后服务自动重新启动。

  • “全局参数”按钮文字的开头会有一个加号或者减号字符,加号表示全局服务当前是处在运行状态,减少表示全局服务当前处在停止状态。点“全局参数”按钮会打开全局参数对话框,此时全局服务会自动停止。当对话框关闭后,全局服务会自动重启。

  • 实例列表的上下文菜单中有命令可以启动或者停止全局服务。如果在按下“全局参数”按钮以前,全局服务本来就是停止状态,那么当全局参数对话框关闭的时候,也不会去启动全局服务。除非用实例列表的上下文菜单去专门启动一次。

Z39.50 功能测试

  • 没有启用 Z39.50 服务的实例,在检索的时候应当不参与检索。应该返回报错说实例不存在。

  • 一个实例虽然启用了 Z39.50 服务,但数据库一个也没有配置。检索时应当返回正确的错误码。错误码可以查 diag set 定义。

dp2capo 中点对点 API 传递 BLOB 的问题

dp2capo 连接 dp2library 服务器,然后通过点对点 API 给 dp2mserver 提供服务。当 dp2mserver 的其他前端请求点对点 API 的时候,实际上是转发到了 dp2capo,dp2capo 再请求 dp2library,然后再原路逐级返回响应结果。

由于点对点 API 是基于 Microsoft 的 SignalR 技术构建的,在传递 BLOB 类型参数的时候,是用了类似 base64 这样的编码来传递二进制内容,非常没有效率。本文试图探讨一下如何解决这个问题。

一个思路,就是 dp2capo 提供一个 Web Server,当 dp2mserver 的其他前端请求获得 BLOB 对象的时候,先从 dp2capo 这里获得一个 URL,其主机名为 dp2capo 所在的主机名,然后这些前端直接用 Web Request 请求这个主机,这个 URL,用类似 HTTP 下载文件的方式获得。

但这个方法很显然是有限制的。因为 dp2capo 提供了一种可能,就是当 dp2capo 处在内网的时候,也允许透过 dp2mserver 被外界访问。在这种情况下,外界是无法直接访问 dp2capo 的。所以这个方法只能用于当 dp2capo 在公网服务器上的情形。

沿着这个方向继续思考,其实可以想象 dp2library 服务器自己增加一个 WebServer,专用于提供 BLOB 访问服务。这样 dp2mserver 的其他前端还可以越过 dp2capo 服务器直接访问 dp2library,更节省通讯开销。不过,需要注意的是:1) dp2library 的这个 WebServer 要能够承载大量的请求,请求最好是无状态的;2) 要解决好权限认证问题,比如采取某种临时 token 作为身份验证的手段。

第二个思路,就是 dp2capo 和 dp2mserver 之间另外还有一条 websocket 通道,专用于传递二进制信息。这个属于对 SingalR 的补充了。也许再进一步,可能需要寻找代替 SignalR 的其他通讯框架,既能双向通讯,也能传递二进制信息,类似 ZeroMQ 之类。

问题反馈:任意用户可以查看非public图书馆的“好书推荐”。

开发老师留言(2018/11/21 15:07:03):
现在随便一个人就可以看XXXXX的“好书推荐”,还可以看到具体的书目信息。
记得原来的效果是,随便一个人进入他们的书目查询界面,会有红色的报错提示。这是正确的。而现在随便一个人可以进入这个书目查询界面。我觉得应该恢复以前的效果,就是连进入都不让进入。

XXXXX的微信公众号的 bug,注意看看是不是在各个环节都卡住了权限,如果这个站点不让 public 访问,各个环节都应该不允许单独访问。比如,如果好书推荐功能失守(意思是出现了 bug 导致允许 public 访问),那再这里点击锚点去显示详细书目记录的时候,显示那个也不应该失守。应该是单独防范的。另外,如果允许 URL 单独访问一条书目记录,有这样的入口,也是应该卡住的,这应该从代码编写的各个环节检查一下。总的来说,就是不应该依赖单一一个入口来防范权限。所谓依赖单一入口,意思就是说在单一入口位置做了防范,但其他所有环节都毫无防范。这种单一入口防范是不行的。类似,C/S 模式中,不应该仅依靠前端防范(而是要服务器加以主动防范)。

“我爱图书馆”测试工作单/读者登记

  1. 未选择图书馆时,进入“读者登记”界面时出现未选择图书馆提示行—点击链接—进入“选择图书馆“界面—选好图书馆—系统自动转回“读者登记“界面,并提示当前不是工作人员账号不能使用读者登记—点击绑定账号链接—进入”绑定账号“界面—绑定工作人员账号—系统弹出对话框提示绑定成功—点”确定“—系统转到当前图书馆介绍界面。

Web:√(2018.4.18)
微信:


  1. 接上,点击“更多/读者登记”—进入“读者登记”界面。

Web:√(2018.4.18)
微信:


  1. “读者登记“界面显示正常。栏位包括证条码号,读者类别,姓名,性别,单位,手机号,目标读者库。“新增”和“保存”两个按钮。

Web:√(2018.4.18)
微信:


4. 新增读者登记时,所有的栏位均需要输入且输入正确才能登记,缺一不可。

Web:X。读者类别,单位,手机号未设置或设置不正确时仍然能够登记成功。(2018.4.18)
在读者登记界面,输入证条码号XZXP00089—读者类别没有选择—输入姓名“李”—选择性别”男“—不输入单位—不输入手机号—选择目标库”星洲学校读者“—点击“新增”—系统弹出对话框提示操作成功—点击“确定”,对话框关闭,回到读者登记窗,先前的输入保留。
点击“更多/读者登记“—进入”读者登记“界面—证条码号一栏输入XZXP00089,点”装载“—出现读者李的信息。只登记了姓名,性别,目标读者库。(当性别,目标读者库未设置时,系统会弹出相关的操作失败提示)
微信:


  1. 修改读者登记。证条码号一栏输入读者证条码,点击“装载“—读者登记窗出现该读者相关的登记信息。编辑需要修改栏位的内容—点”保存“。当任何一栏的输入不正确时,系统弹出相关操作失败提示;全部输入正确时,系统提示保存成功。

Web:X。问题同上,读者类别,单位,手机号未设置或设置不正确时系统不会报错。(2018.4.18)
微信:

“我爱图书馆”测试工作单/进入界面

  1. 首次登陆

Web 首次登陆“我爱图书馆”网址,直接进入“图书馆介绍”页面,且页面显示“尚未选择图书馆”文字提示行。
Web:√。(2018.4.18)

微信关注“我爱图书馆”公众号后,首次进入公众号时,进入的第一个界面为欢迎界面,提示用户如何完成找回密码和绑定账号。
微信:√


  1. 点击除“更多/借还窗”和“更多/数字平台”以外的其他任意一个菜单选项,进入对应页面,且页面显示“尚未选择图书馆”文字提示行。

Web:√(2018.4.18)
微信:√


  1. 点击“更多/借还窗”选项,进入“更多/借还窗”页面,系统弹出“尚未选择图书馆”对话框。点击对话框上“确定”按钮,对话框消失,回到借还窗页面,页面显示“尚未选择图书馆”文字提示行,且其他显示正常。

Web:X。 点击“更多”/“借还窗”时,系统弹出“尚未选择图书馆”提示对话框;点击上面的确定按钮后,页面只显示文字提示,没有当前窗口名称,页面下方也没有菜单选项。(2018.4.18)

微信:X。 点击“更多”/“借还窗”时,系统弹出“尚未选择图书馆”提示对话框;点击上面的确定按钮后,页面只显示文字提示,没有当前窗口名称,页面下方也没有菜单选项。


  1. 点击“更多/数字平台”菜单选项,进入数字平台介绍页面,正常显示数字平台介绍,数字平台产品,数字平台联系方式。

Web:√(2018.4.18)
微信:√


  1. 点击任意菜单选项(除“更多/数字平台”以外)页面上的“尚未选择图书馆”提示行后面“请点击这里选择图书馆”链接,均可以进入选择图书馆界面。

Web:√(2018.4.18)
微信:


  1. 接上,在”选择图书馆”界面选择好需要的图书馆后,系统跳转到刚才的菜单选项页面。

Web:√(2018.4.18)
微信:


  1. 在浏览器保存浏览记录的情况下,选择过图书馆后,关闭界面,然后再次登陆,直接显示上次所选图书馆的介绍页面。

Web:√(2018.4.18)
(建议:对不熟悉系统的读者而言,进入web时直接出现上一次图书馆的介绍界面。由于图书馆的名称以灰色显示在屏幕一角,很容易被读者忽略,以为现在显示的就是自己需要的图书馆的信息。建议把当前图书馆的名称以一个更加清晰容易识别的方式来显示,以提示读者可以根据需要修改当前图书馆。)
微信:


  1. 点击任意菜单选项(除“更多/数字平台),进入的页面均显示为上次选择的图书馆所对应的页面。

Web:X。 “借还窗”页面没有显示当前图书馆名称及pulic账号。(2018.4.18)
微信:


  1. 接上,点击任意菜单选项页面(除数字平台和借还窗两个选项以外)右上方的当前图书馆名称,均可进入”选择图书馆”界面。

Web:√(2018.4.18)
微信:


  1. 接上,在”选择图书馆”界面选择需要更改的图书馆后,系统不跳转,仍保持在“选择图书馆”界面。点击其他菜单选项时进入更改后的图书馆对应的页面。

Web:√(2018.4.18)
微信:


  1. 浏览器保存缓存的情况下,登陆一个账号后,退出web后再次进去,系统保留上次所选的图书馆,但不保留之前所登陆的账号信息。

Web:X. 登陆一个账号后,退出web后再次进去,系统保留上次所选的图书馆,也保留并登陆了之前所登陆的账号。(2018.4.18)


  1. 微信登陆一个账号后,退出后再次进去,系统保留上次所选的图书馆,同时保留之前所登陆的账号信息。

微信:

“我爱图书馆”测试工作单/我的信息

  1. 未选择图书馆时,进入“我的信息”页面会出现未选择图书馆提示,点击链接选择图书馆。选好图书馆后,自动转回。

Web:√(2018.4.18)
微信:


  1. 接1,如果当前帐户不是读者帐户,出现提示,点击链接进入帐户管理界面,新增读者账号或将设定当前账号为读者帐户后,系统自动跳转到我的信息界面。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接1,如果当前帐户是读者帐号,则直接显示我的信息。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. "我的信息"界面显示正常。(上面是4行二级界面入口,分别是 待交费、在借、预约、修改密码。注意括号里的数量未超过5,用对应点号表示,超过5括号中直接是数字。待交费的数量右侧黄色显示;在借超期的,右侧红字超期数量;预约到期的右侧绿色显示到书数量。下方是个人信息,注意最下方的头像是否显示可以在设置中修改。另外二维码要显示正常,二维码处有时报缺权限。)

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 在我的信息界面,点击“待交费”栏,进入“违约交费”界面。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. “违约交费”界面显示违约交费信息,提醒读者欠费记录,需要到柜台交费。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接4,在我的信息界面上点击“在借”栏,进入“在借续借”界面。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. "在借续借"界面显示当前读者在借图书。册信息最后“操作“一栏显示“续借”按钮,读者可以在这里进行续借。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接8,在我的信息界面上点击“续借”按钮,系统弹出提示对话框提示是否需要续借册(册条码),点击“取消”,对话框关闭,回到在借续借界面;点击“确定”,弹出对话框提示续借操作成功与否,再点“确定“对话框关闭,回到”在借续借“界面,同时界面上操作一栏更新显示续借成功或续借失败以及操作失败的原因。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接4,在我的信息界面上点击“预约”栏,进入“预约请求”界面,显示当前读者的图书预约信息。已约未到的书后面有“取消预约”按钮、已到未取的书后面有“放弃取书”按钮。显示内容的最后,系统提示可以勾选需要合并的预约项进行合并预约。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接10,在“预约请求”界面,点击“放弃取书”按钮,系统弹出对话框提示是否需要对册(册条码)放弃取书,点击“取消”,对话框关闭,回到“预约请求”界面;点击“确定”,系统弹出对话框提示书已到但放弃取书以及其他注意事项。用户使用微信放弃取书时同时会收到预约取消的通知。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接10,在在“预约请求”界面,点击“取消预约”按钮,系统弹出对话框提示是否需要对册(册条码)取消预约,点击“取消”,对话框关闭,回到“预约请求”界面;点击“确定”,系统弹出对话框提示书取消预约操作成功。再点击“确定”,提示对话框关闭,回到“预约请求”界面,不显示刚才取消预约的书。用户使用微信取消预约时同时会收到预约取消的通知。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接10,在“预约请求”界面,点击勾选未到图书前面的复选框,只选一个预约时,系统提示“请继续选择,多于1项才能合并“;当选择大于1项时,界面右下方显示“合并预约以及合并数量“按钮,点击这个按钮,系统弹出对话框提示确认对册(册条码)进行合并预约吗?,点击”取消“,关闭对话框回到”预约请求界面“;点击”确定“,系统弹出对话框提示操作成功。再点击“确定”,提示对话框关闭,回到“预约请求”界面,刚才合并的两个预约显示到一个当中。两个预约的册条码号,摘要都显示在一个预约中。且该预约操作一栏有“取消预约“和”拆散预约“两个按钮 。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接13,点击合并预约项后面的“拆散预约“按钮,系统弹出对话框提示是否要拆散,点击”取消“,关闭对话框回到”预约请求“界面;点击”确定“,系统弹出对话框提示书操作成功。再点击“确定”,提示对话框关闭,回到“预约请求”界面,合并的一个预约被拆成多,显示到预约请求界面的前面。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 接4,在“我的信息”界面,点击“修改密码”一栏,进入“修改密码“界面。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 在“修改密码“界面,输入旧密码,并输入两次新密码后,点击”修改密码“按钮,系统弹出对话框提示书是否确定修改密码,点击”取消“,关闭对话框回到”修改密码“界面,刚才输入的旧密码新密码保存在界面中;点击“确定”,系统弹出对话框提示修改密码操作成功。再点击“确定”,提示对话框关闭,回到“预约请求”界面,旧密码和新密码栏为空,且“修改密码“按钮下方显示”密码修改成功“。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 在“修改密码“界面,输入旧密码,并输入两次新密码后,点击”修改密码“按钮,系统弹出对话框提示书是否确定修改密码,点击”取消“,关闭对话框回到”修改密码“界面,刚才输入的旧密码新密码保存在界面中;当输入不正确时,点击“确定”,系统弹出对话框提示操作失败,以及失败的原因。再点击“确定”,提示对话框关闭,回到“预约请求”界面,旧密码和新密码栏为刚才的设置,同时显示操作未成功。

Web:√(2018.4.18)
微信:√(2018.4.20)


  1. 读者头像显示与否可由”我的图书馆/设置“中勾选”显示头像“选项来设定。勾选时,显示;不勾选不显示。

Web:√(2018.4.18)
微信:√(2018.4.20)

账户绑定对应的图书馆改为路径形式

账户绑定对应的图书馆以路径的形式存储在一个字段里,不要搞成多个字段,尤其是项目间接口配合时,同类的参数要做成一个参数,或者打成一个包。

想到路径有三截组成:图书馆id/分馆代码/帐户名(或读者证条码)

目前帐户信息里图书馆 与 分馆代码 是分成两个字段存储的,如下:

    public class WxUserItem
    {
        [BsonId]
        [BsonRepresentation(BsonType.ObjectId)]
        public string id { get; private set; }

        // 微信id
        public string weixinId { get; set; }    

        // 图书馆代码
        public string libId { get; set; }
        // 图书馆名称
        public string libName { get; set; }
        //实际分馆代码,读者与工作人员都有该字段
        public string libraryCode { get; set; }
        public bool IsdpAdmin
        {
            get
            {
                if (this.libName == WeiXinConst.C_Dp2003LibName)
                    return true;
                else
                    return false;
            }
        }

        // 20170509
        //绑定时选择的分馆代码,与自己的实际分馆代码 不同,比如绑定时选择的空(总馆),但实际是方洲小学。
        public string bindLibraryCode { get; set; } 

        // 读者证条码号
        public string readerBarcode { get; set; }  

        // 读者姓名
        public string readerName { get; set; }

        //单位
        public string department { get; set; }  //部门,二维码下方显示 // 2016-6-16 新增

        // 读者记录xml
        public string xml { get; set; }        

        // 读者记录路径
        public string recPath { get; set; } 
        
        // 读者参考id
        public string refID { get; set; }
        public string createTime { get; set; }
        public string updateTime { get; set; }

        // 是否活动状态
        public int isActive = 0;

        //账户类型:0表示读者 1表示工作人员 // 2016-6-16 新增
        public int type = 0;

        //当type=2时,表示工作人员账户名称,其它时候为空// 2016-6-16 新增       
        public string userName { get; set; } 
        public int isActiveWorker= 0; //是否为当前激活工作人员账户,注意该字段对读者账户无意义(均为0),暂时未用到


        // 2016-8-26 jane 新增
        public int state { get; set; } //状态:0失效 1有效 2恢复时的临时状态 
        public string remark { get; set; } // 会存一下绑定方式等

        // 权限
        public string rights { get; set; }

        // 公众号id 2016-11-14
        public string appId { get; set; }

        //tracing 2016-11-21 type=1工作人员时有意义 默认为空或者off
        public string tracing { get; set; }

        public bool IsMask
        {
            get
            {
                if (tracing == null)
                    tracing = "";

                if (this.tracing.IndexOf("-mask") != -1)  // -mask 指不做马赛克处理
                    return false;
                else
                    return true;
            }
        }

        // 20170213 jane
        // 本用户在dp系统有权限的馆藏地,是xml格式
        /*
<item canborrow="no" itemBarcodeNullable="yes">保存本库</item>
<item canborrow="no" itemBarcodeNullable="yes">阅览室</item>
<item canborrow="yes" itemBarcodeNullable="yes">流通库</item>
<library code="方洲小学">
<item canborrow="yes" itemBarcodeNullable="yes">图书总库</item>
</library>
<library code="星洲小学">
<item canborrow="yes" itemBarcodeNullable="yes">阅览室</item>
</library>
         */
        public string location { get; set; }

        // 20170213 在微信中选择的馆藏地,是以逗号分隔的两级路径,如:/流通库,方洲小学/图书总库
        public string selLocation { get; set; }

       // 借还时是否校验条码
        public int verifyBarcode { get; set; }

        // 借还时语音方案
        public int audioType { get; set; }



        // 从setting表移来的字段
        public int showPhoto { get; set; }
        public int showCover { get; set; }
        public string bookSubject { get; set; } // 20170509加
}

中小学分类简表匹配工具开发注意事项

  1. dp2Tools是工具集,所以不可以改动主程序中的启动文件,只要在主界面中加载菜单。
  2. 减少代码耦合度,方法是多使用函数。
  3. 简表加载不要在程序启动时就加载,在程序运行后利用一个事件读取文件并检查简表的正确性分类号,名称,级别,序号。
  4. 程序在运行中加入进度条这样的提示信息提示程序的运行状况,自己要去分析系统需求以及设计。
  5. 类成员的赋值使用get; set,比如 public string Class { get; set; }。
  6. Text文本的赋值,用StringBuild拼接字符,然后再赋值给Text,注意界面的信息跟底层不要有交互。
  7. 资料匹配的时候有一个停止中断的功能,程序开发者需要站在用户的角度去考虑。
  8. 能给匹配过程输出一个简单明了的匹配过程。
  9. 程序要经过反复测试,至少能经过自己这一关再提交同步。
  10. 在代码中尽量加注释。

Z39.50 协议函数库

chord 项目要有自己的新一代 Z39.50 协议函数库,通过改写和升级 dp2 v2 的 DigitalPlatform.Z39.50 函数库达成,名字还是沿用以前的。

这个函数库有如下目标:

  1. 简化结构,便于一般开发者理解和使用。简化最初级方式的调用。
  2. 用 C# 新特性 async await 来大幅度简化以前的异步通讯写法。
  3. 采用 .NET Standard 2.0 的 DLL 形态,以便 .NET Core 项目可以调用它。能用于 Windows Form、WPF、.NET Core Server 等各种场合。
  4. 尽量节省内存,提高一台服务器内允许的极限通道数。这是为了满足 Z39.50 群检的需求。
  5. 支持双 IP 的 Z39.50 服务器访问和服务器参数特殊定义。

"我爱图书馆“测试工作单/专业借还

  1. 未选择图书馆时,点击“更过/专业借还”进入专业借还界面,--出现未选择图书馆提示行--点击链接—进入“选择图书馆”界面--选好图书馆—系统自动转回到“专业借还”界面,显示当前账号权限不足提示—点击链接—进入“绑定账号”界面—绑定工作人员账号—系统弹出对话框提示绑定成功—点击“确定”—进入“我的图书馆”界面。

Web:√(2018.4.18)
微信:


  1. 接上,点击“更多/专业借还”,进入专业借还界面,界面显示正常(包含借书,还书两个子界面)。当账号具有两个子界面的权限时,默认进入借书界面,且鼠标焦点自动放在输入框里,语音提示“请扫入读者”。

Web:√(2018.4.18)
微信:


  1. 当前账号不具备借还权限时,点击“更过/专业借还”进入专业借还界面,会出现不具备操作权限的提示行。

Web:X.当前账号为读者账号“殷铭”时进入“专业借还”界面,界面显示出借书/还书子界面。但在上面借书或还书时系统提示不具有权限。(2018.4.18)
微信:


  1. 当前账号只具备借书或者还书权限时,点击“更过/专业借还”进入专业借还界面,不具备权限的子界面显示为禁用状态。

Web:X。(2018.4.18)
微信:


  1. 在专业借还的设置中,勾选条码校验功能后,借还书时系统能自动识别扫入的是读者证条码还是册条码。

Web:√(2018.4.18)
微信:


  1. 借还界面默认的声音提示方式为“提示语音+具体信息语音”,点击进入借书界面时语音提示“请扫入读者条码”,扫入后语音朗读读者姓名;扫入图书条码后,操作成功时系统报“成功”并朗读书名,如果操作失败时报“出错”并朗读错误原因;点击进入还书界面时有语音提示“请扫入图书”,扫入册条码后操作成功报“成功”并朗读书名,操作失败报“出错”并朗读错误原因。

Web:X. 借书成功时只朗读了书名,没有报“成功”;借书失败时只有音效提示,没有报“出错”,也没有报“出错”原因。
还书操作成功时只朗读了书名,没有报“成功”;还书失败时以音效提示,没有语音报“出错”,也没有报“出错”原因。(2018.4.18)
微信:


  1. 当声音设置为“简单音效+具体信息语音”,点击进入借书界面时有简单音效,扫入后读者后朗读读者姓名;扫入图书条码后,操作成功时系统报“成功”并朗读书名,如果操作失败时报“出错”并朗读错误原因;点击进入还书界面时有简单音效,扫入册条码后操作成功报“成功”并朗读书名,操作失败报“出错”并朗读错误原因。

Web:X. 借书成功时只朗读了书名,没有报“成功”;借书失败时只有音效提示,没有报“出错”,也没有报“出错”原因。
还书操作成功时只朗读了书名,没有报“成功”;还书失败时以音效提示,没有语音报“出错”,也没有报“出错”原因。(2018.4.18)
微信:


  1. 当声音方案设定为“提示语音”,点击进入借书界面时,鼠标焦点自动选中输入框里的内容,同时语音提示“请扫入读者”,扫入后读者提示“加载读者成功,请扫入图书“,扫入图书条码后,如果操作成功提示“成功”,操作失败提示“出错”;点击进入“还书“界面时,系统提示”请扫入图书“,还书扫入册条码后,系统报“成功”,失败报“出错”。

Web:√(2018.4.18)
微信:


  1. 当声音设置为“简单音效”时,进入借书界面时有简单音效,扫入后读者简单音效;扫入图书条码后,操作成功时提示成功音效,如果操作失败提示失败音效;进入还书界面时有简单音效,扫入册条码后,操作成功时提示成功音效,如果操作失败提示失败音效。

Web:√(2018.4.18)
微信:


  1. 在还书界面上,可以扫入ISBN进行还书。
    Web:X.关闭“校验输入的条码号”功能后,未勾选馆藏范围的情况下,当扫入一个ISBN 978-7-5346-5590-6时,系统提示册条码号978-7-5346-5590-6不存在。无法使用ISBN来借还。(2018.4.18)

微信:


11.可以实现快速扫入条码进行借还。

Web:√(2018.4.18)
微信:


  1. 当设置中勾选“监控本馆信息”时,本馆发生借还时能收到微信借还记录提示;取消勾选后,本馆发生借还时不能收到微信借还记录提示。
    微信:

Z39.50 函数库测试构想

这里是关于 Z39.50 函数库的测试的一些想法,和细化方法。

多通道测试

能根据输入的数字自动开辟多个通道,持续对一个指定的 Z39.50 服务器进行检索和获取操作。

需要用 Windows Form 界面或者其他界面,设计一个窗口,这个窗口里面主要包含一个 ListView,它里面每行显示一个通道的运行状态。

每个通道的任务,大致是循环执行检索、获取。检索词可以预先准备到一个文件中,每行一个检索词。这样等于执行了批检索功能。

在 ListView 行上点右鼠标键可以出现上下文菜单,里面有各种针对通道的命令。其中一个命令是暂停或者切断通道。通道被切断后,自动从 ListView 里面消失。也可以把这些命令放在窗口的一个工具条上,或上下文菜单和工具条同时具备。

开发出来这个功能以后,要观察一下一般机器环境,最多可以开辟多少个通道?Z39.50 服务器是否可能被压垮?

我爱图书馆测试发现的一些问题


  1. 专业借还未实现ISBN借还。需要修正。具体测试过程如下:

目标:在还书界面上,可以扫入ISBN进行还书。
Web结果:X.关闭“校验输入的条码号”功能后,未勾选馆藏范围的情况下,当扫入一个ISBN 978-7-5346-5590-6时,系统提示册条码号978-7-5346-5590-6不存在。无法使用ISBN来借还。


  1. 使用专业借还借还操作时,声音提示有不合理的地方,具体如下:

目标:借还界面默认的声音提示方式为“提示语音+具体信息语音”,点击进入借书界面时语音提示“请扫入读者条码”,扫入后语音朗读读者姓名;扫入图书条码后,操作成功时系统报“成功”并朗读书名,如果操作失败时报“出错”并朗读错误原因;点击进入还书界面时有语音提示“请扫入图书”,扫入册条码后操作成功报“成功”并朗读书名,操作失败报“出错”并朗读错误原因。
Web测试结果:X. 借书成功时只朗读了书名,没有报“成功”;借书失败时只有音效提示,没有报“出错”,也没有报“出错”原因。
还书操作成功时只朗读了书名,没有报“成功”;还书失败时以音效提示,没有语音报“出错”,也没有报“出错”原因。

目标:当声音设置为“简单音效+具体信息语音”,点击进入借书界面时有简单音效,扫入后读者后朗读读者姓名;扫入图书条码后,操作成功时系统报“成功”并朗读书名,如果操作失败时报“出错”并朗读错误原因;点击进入还书界面时有简单音效,扫入册条码后操作成功报“成功”并朗读书名,操作失败报“出错”并朗读错误原因。
Web测试结果:X. 借书成功时只朗读了书名,没有报“成功”;借书失败时只有音效提示,没有报“出错”,也没有报“出错”原因。
还书操作成功时只朗读了书名,没有报“成功”;还书失败时以音效提示,没有语音报“出错”,也没有报“出错”原因。


  1. 无流通权限的账号能够进入专业借还界面,但进行借还操作时系统会提示无操作权限。测试过程如下:

目标:当前账号不具备借还权限时,点击“更过/专业借还”进入专业借还界面,会出现不具备操作权限的提示行。
Web:X.当前账号为读者账号“殷铭”时进入“专业借还”界面,界面显示出借书/还书子界面。但在上面借书或还书时系统提示不具有权限。

目标:当前账号只具备借书或者还书权限时,点击“更过/专业借还”进入专业借还界面,不具备权限的子界面显示为禁用状态。
Web:X。暂无此功能,无法测试。


  1. 读者登记时没有限定“读者类别”,“单位”,“手机号码”为必填内容。测试过程如下,

目标:新增读者登记时,所有的栏位均需要输入且输入正确才能登记,缺一不可。
Web:X。读者类别,单位,手机号未设置或设置不正确时仍然能够登记成功。
在读者登记界面,输入证条码号XZXP00089—读者类别没有选择—输入姓名“李”—选择性别”男“—不输入单位—不输入手机号—选择目标库”星洲学校读者“—点击“新增”—系统弹出对话框提示操作成功—点击“确定”,对话框关闭,回到读者登记窗,先前的输入保留。
点击“更多/读者登记“—进入”读者登记“界面—证条码号一栏输入XZXP00089,点”装载“—出现读者李的信息。只登记了姓名,性别,目标读者库。(当性别,目标读者库未设置时,系统会弹出相关的操作失败提示)

目标:修改读者登记。证条码号一栏输入读者证条码,点击“装载“—读者登记窗出现该读者相关的登记信息。编辑需要修改栏位的内容—点”保存“。当任何一栏的输入不正确时,系统弹出相关操作失败提示;全部输入正确时,系统提示保存成功。
Web:X。问题同上,读者类别,单位,手机号未设置或设置不正确时系统不会报错。


  1. 设置界面没有实现依据当前账号权限进行显示。尤其是针对public账号和读者账号。测试过程如下:

目标:当前账号为public时,进入“设置”界面,“监控本馆信息”、“监控消息隐藏敏感字段”选项不显示,“校验输入的条码号”选项处于禁用状态;声音方案一栏下拉列表处于禁用状态。
Web测试结果:账号为public时,“监控本馆信息”、“监控消息隐藏敏感字段”显示,处于禁用状态,“校验输入的条码号”选项处于可用状态;声音方案一栏无默认选择,但下拉列表处于可用状态。

目标:账号为具有流通权限的读者账号时,“监控本馆信息”、“监控消息隐藏敏感字段”选项不显示;选项“馆藏限定范围”只显示当前账号对应权限的馆藏;“校验输入的条码号”可用且默认不勾选、“声音方案”处于可用状态,且声音方案默认为“提示语音+具体信息语音”。
Web测试结果:当前账号为具有流通权限的读者账号时,“监控本馆信息”、“监控消息隐藏敏感字段”显示,处于禁用状态


  1. 当前选择分馆时,能够看到总馆的公告
    具体测试过程:当前选择“南开区宜宾里小学”时,可以看到总馆“南开区中小盟学图书馆联盟开盟”的公告。

  1. 当前为分馆时,在找回密码界面弹出的报错界面,提示当前图书馆显示为总馆,测试过程如下:

当前图书馆为星洲学校,找回密码界面,输入读者姓名后,输入的手机号码与登记到图书馆的号码不一致时,系统弹出的操作失败对话框,下面一行的当前图书馆显示为“总馆-图书馆测试”。


  1. 书目检索时,同样的检索前提下,简单检索与高级检索结果不同于dp2内务相同方式下的检索结果。具体测试如下:

1) 全部/前方一致

检索词输入 Web简单检索 Web高级检索 内务
9 0 0 52
K 7 7 11
K825 5 5 8

2)全部/中间一致

检索词输入 高级检索 内务
9 29 56
K 10 17
K825 5 10
I 48 54
I712 5 43
12 16 18

3)全部/后方一致

检索词输入 高级检索 内务
9 10 18
K 0 2
I 1 26

4)其他检索结果

检索途径 匹配方式 检索词 测试结果
出版时间 前方一致 12 高级检索:未命中;p2内务对应检索结果:“字符串12不是合格的freetime格式
出版时间 中间一致 12 高级检索:15;dp2内务对应检索结果:“字符串12不是合格的freetime格式
出版时间 后方一致 12 高级检索:未命中;dp2内务对应检索结果:“字符串12不是合格的freetime格式
出版时间 精确一致 12 高级检索:未命中;dp2内务对应检索结果:“字符串12不是合格的freetime格式

  1. 进行馆藏地设置后,书目检索结果仍然能够显示勾选的馆藏以外的册记录信息。

测试过程如下:当前账号“yinming/星洲学校”,设置中勾选的馆藏地为“班级书架”,简单检索/全部检索,检索结果中显示了馆藏地位于图书馆的册记录信息。


  1. 点击“更多/借还窗”进入借还界面时,界面不显示当前窗口名称,下方也没有菜单选项。无论使用什么账号进去都存在这个问题。

以public账号进入借还窗时,界面上方也不显示当前的账号名称和当前图书馆名称。
以读者或者工作人员账号进入借还窗时,界面上方显示的账号名称在界面右上角(不同于其他界面均显示在左上角),且没有显示 当前图书馆名称。


  1. 通过web方式访问”我爱图书馆“时,进入网址后会直接登陆到之前使用过的账号上。可能导致用户信息泄露,需要修正。

学习 文档管理工具 的一些过程资料

一、StackEdit

先研究了在线Markdown编辑器 StackEdit,开源项目,在本机部署后,试用了一下,可以编写文档,但没找到数据存在什么地方,换另一种浏览访问内容变成空的了。
说是可以同步到github但发现需要先打赏5美元,付款没成功,另外没有帐户管理功能,fork了一下源代码,暂时放弃了。
https://github.com/benweet/stackedit
https://www.oschina.net/p/stackedit

二、showdoc

然后研究了showdoc,开源项目,也是markdown格式,并且支持权限管理,感觉还比较,可以先用用,在本机部署了一翻。
源代码地址:https://github.com/star7th/showdoc
文档地址:https://www.showdoc.cc/web/#/help?page_id=14

安装过程:
1)运行 wamp-server-wamp5-2-5-multi-win.exe
2)运行时报MSVCR110dll未找到,是缺vcredist_x86.exe,注意64位机器也要装x86版本,如果装了x64版本,还会报同样的提示
https://serverfault.com/questions/517694/cant-start-php-cgi-exe-msvcr110-dll-is-missing

ou need VS C++ 2012. Go here: http://www.microsoft.com/en-us/download/details.aspx?id=30679
You need to download the x86 version if you install the 64bit version it will give the same error.

image

3)运行 wampServer,会在桌面任务栏右侧出现一个小图标,右键先要设置一下语言,选中文。
然后左健打开www目录,把showdoc-master目录拷到wamp安装目录的www下。

4)修改端口,因为IIS用了80端口,所以需要修改wamp的apache默认端口为其它端口。
https://jingyan.baidu.com/article/fea4511a41982bf7bb912592.html
左键托盘图标,在“Apache”里可以直接打开httpd.conf,查找到“Listen 80”,可以改成其他端口,我选用8088。
重启wamp,就可以生效了。但是“Localhost”、“phpMyAdmin”、“SQLiteManager”,你可以点击打开看到依旧是默认的80端口。找到wamp安装目录下的wampmanager.tpl文件,记事本打开,修改localhost后面加上8088。
此时本机localhost:8080可以访问了。

5)注意防火墙 和 安全组要放开对应端口。

6)在外网访问是到403Forbidden的问题,参考这个文档对设置Allow from all
https://jingyan.baidu.com/article/a378c960b40334b32928304a.html
https://stackoverflow.com/questions/10873295/error-message-forbidden-you-dont-have-permission-to-access-on-this-server

Gitbook学习

一、Gitbook部署

GitBook 是一个基于 Node 开发的命令行工具,所以需要先安装nodejs,再使用 npm 来安装 gitbook。

1.安装Node环境

  • 从官网 https://nodejs.org/#download 下载Node.js安装包,是一个msi文件。
  • 运行node-v8.11.1-x64.msi,按步骤next,直到安装完成。
  • 完装完成后,在开始菜单有Node.js这个应用。
  • 可以运行uninstall node.js卸载Node。

2.测试node是否安装成功

这里用三种方式测试node环境,选其一就可以。
1)在命令行运行node -v
2)在命令行运行js语句

  • 输入命令:node
  • 再输入:console.log("Hello,World!");

3)写一个js文件,通过node搭建一个网页

  • 先在磁盘下建立一个app文件夹,app文件夹里面写一个test.js。
    test.js代码如下:
    var http = require("http");
    http.createServer(function(req, res) {
    res.writeHead( 200 , {"Content-Type":"text/html"});
    res.write("<h1>Node.js</h1>");
    res.write("<p>Hello World</p>");
    }).listen(3000);
    console.log("HTTP server is listening at port 3000.");
  • 再从命令行进入app的文件夹,在命令窗口执行【node test.js】
  • 然后在浏览器中输入网址http://127.0.0.1:3000。如果你正常访问了,那么就安装成功了。

3.gitbook 安装

在命令行输入下面命令
npm install -g gitbook-cli

NPM是随同NodeJS一起安装的包管理工具,安装node时npm也一并安装好了,可以通过输入 "npm -v" 来测试是否成功安装。
-cli表示全局安装Gitbook,可以在系统任何地方运行gitbook命令
卸载命令 npm uninstall -g gitbook 注:好像没起作用

4.检查gitbook是否安装

在命令行输入 gitbook -V 注意:V大写
目前GitBook version: 3.2.3

5.Gitbook使用

创建一个自己的书籍目录,例如mybook
在命令行窗口进入自己的目录mybook

然后输入命令:

gitbook init

之后目录中会自动生成 README.md 和 SUMMARY.md 两个文件。
这两个文件在 GitBook 项目中是必须存在的,其中 README.md 是对书籍的简单介绍,SUMMARY.md 是对书籍目录的描述,并且 GitBook 会通过该文件中的目录描述自动生成对应的目录和文件。

其中,SUMMARY.md 文件中内容的格式是这样的:

# Summary
* [概述](README.md)
* [第一章](chapter1/README.md)
  * [第一节](chapter1/section1.md)
  * [第二节](chapter1/section2.md)
* [第二章](chapter2/README.md)
  * [第一节](chapter2/section1.md)
  * [第二节](chapter2/section2.md)
* [结束](end/README.md)

当你修改了 SUMMARY.md 文件中的内容后,你可以再次使用 gitbook init 来自动生成对应的目录和文件。

gitbook serve

书籍目录结构创建完成以后,我们就可以使用 gitbook serve 来编译和预览书籍了:
gitbook serve 命令实际上会首先调用 gitbook build 编译书籍,完成以后会打开一个 web 服务器,监听在本地的 4000 端口。

C:\0-d\0-book\mybook>gitbook serve
Live reload server started on port: 35729
Press CTRL+C to quit ...
info: 7 plugins are installed
info: loading plugin "livereload"... OK
info: loading plugin "highlight"... OK
info: loading plugin "search"... OK
info: loading plugin "lunr"... OK
info: loading plugin "sharing"... OK
info: loading plugin "fontsettings"... OK
info: loading plugin "theme-default"... OK
info: found 8 pages
info: found 7 asset files
info: >> generation finished with success in 0.7s !
Starting server ...
Serving book on http://localhost:4000
Starting server ...
Serving book on http://localhost:4000

之后,你就可以使用浏览器打开 http://127.0.0.1:4000 查看效果了。
localhost

gitbook部署参考地址
https://www.zybuluo.com/yangfch3/note/158290
https://segmentfault.com/a/1190000004482449

Markdown语法
http://wowubuntu.com/markdown/

“我爱图书馆”公众号测试

仅关注,未选图书馆
TC-GZH-01 首次关注公众号,未选定图书馆

书目查询
TC-GZH-02.1 测试不允许外部访问的图书馆
TC-GZH-02.2 测试书目检索和装载记录(先装载15条,向下滚动显示)。
TC-GZH-02.3 测试检索记录数量多的图书馆。
TC-GZH-02.4 测试输入检索词,进行书目查询。

测试详细信息
TC-GZH-03.1 测试书目检索后,查看详细信息
TC-GZH-03.2 测试查看有数字对象记录的详细信息

关于选择图书馆,但未绑定帐户,点各菜单的效果
TC-GZH-04.1 测试匿名账户选择图书馆后,是否可以正常查看 好书推荐、公告、图书馆介绍 界面的信息,不能修改或者删除。
TC-GZH-04.2 匿名账户选定图书馆(星洲学校),查看除 书目查询、好书推荐、公告、图书馆介绍 以外的页面。

关于绑定帐户
TC-GZH-05.1 测试找回密码,并绑定账户。
TC-GZH-05.2 测试通过图书馆柜台绑定读者账户
TC-GZH-05.3 测试绑定读者账户。
绑定工作人员

测试预览和下载PDF
TC-GZH-06.1 测试读者预览PDF
TC-GZH-06.2 测试读者下载PDF。

关于预约图书
TC-GZH-07.1 测试预约外借的图书。
TC-GZH-07.2 测试预约在架的图书
TC-GZH-07.3 测试取消预约的图书。
TC-GZH-07.4 测试读者进行图书续借

读者办理图书借还
TC-GZH-08.1 测试读者通过 借还窗 办理借还。
TC-GZH-08.2 测试读者扫码借还书。

工作人员编辑功能
TC-GZH-09.1 测试工作人员增加、修改、删除好书推荐。
TC-GZH-09.2 测试工作人员可以发布、修改、删除公告
TC-GZH-09.3 测试工作人员可以发布、修改、删除图书馆介绍。

测试工作人员为读者办理借还
TC-GZH-10.1 测试工作人员通过借还窗(二维码)为读者办理借还
TC-GZH-10.2 测试工作人员通过 专业借还 为读者办理借还书

测试工作员监控消息
TC-GZH-11.1 测试工作人员监控图书馆消息。
TC-GZH-11.2 测试工作人员监控消息且隐藏敏感字段。

测试工作员预览和下载PDF
TC-GZH-12.1 测试工作人员预览PDF。
TC-GZH-12.2 测试工作人员预览和下载PDF。


13.1读者注册
13.2馆员审核


14.1 超期提醒
14.2 即将到期提醒


15.1 配置只支持在架预约
15.2 配置不给读者立即发通知,但监控消息的馆员能收到通知

Github 使用

如何删除自己fork的 repository

在自己的fork项目页面里,点击settings,然后在最下方点击 Delete this repository。

如何fork一个项目到自己的账号下

打开要fork的源仓库,点击右上角的fork按钮,这样就把源仓库的内容复制到自己的账号下。
在自己账号下的项目页面,复制项目地址。
在vs环境下克隆自己的项目。

怎样提交自己的修改到自己的仓库

先提交更改的内容,在同步之前先获取源仓库的最新版本然后同步,如果有不需要提交的内容可以撤销提交更改

怎样同步源仓库的更新到自己的仓库

创建一个 pull request 同步源仓库到自己的仓库,然后提交更改

"我爱图书馆“测试工作单/公告

  1. 未选择图书馆时,进入“公告”界面时出现未选择图书馆提示,点击链接选择图书馆。选好图书馆后,自动转回“公告”界面。

Web:√(2018.4.18)
微信:


  1. “公告”界面显示正常。公告界面没有栏目的概念,直接平坦显示公告的标题和内容。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 当前账号为pubilc或读者账号时,用户只能查看公告界面。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 当前账号为有权限的工作人员账号时,公告界面除了显示内容以外,增加“新发布公告”按钮。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 当前为工作人员账号时,点击需要编辑的公告内容 --该区域显示显示为绿底色,且右边出现“编辑”和“删除”按钮--点击该内容区域,取消编辑状态:底色消失,“编辑”和“删除”按钮消失。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 工作人员可以对当前公告内容进行删除。
    点击需要编辑的公告内容区域--该区域显示显示为绿底色,且右边出现“编辑”和“删除”按钮--点击“删除”--系统弹出对话框提示是否要删除该内容--点“取消”--对话框关闭,回到公告界面,且编辑区域关闭。
    点击需要编辑的公告内容区域--该区域显示显示为绿底色,且右边出现“编辑”和“删除”按钮--点击“删除”--系统弹出对话框提示是否要删除该内容--点“确定”--系统弹出对话框提示删除成功--点“确定”-对话框关闭,回到公告界面,编辑区域关闭,且刚才删除的内容消失。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 工作人员可以对当前公告内容进行编辑。
    点击需要编辑的公告内容区域--该区域显示显示为绿底色,且右边出现“编辑”和“删除”按钮--点击“编辑”--进入公告编辑界面--编辑标题和内容--点“取消”--对话框关闭,回到公告界面,且编辑区域关闭。系统显示为修改之前的公告内容。
    点击需要编辑的公告内容区域--该区域显示显示为绿底色,且右边出现“编辑”和“删除”按钮--点击“编辑”--进入公告编辑界面--编辑标题和内容--点“保存”--系统弹出对话框提示保存成功--点“确定”--对话框关闭,回到公告界面,且编辑区域关闭。系统显示为修改之后的公告内容。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 增加公告。在公告界面直接点击“新发布公告”按钮--公告编辑界面,用户可以编辑标题,内容。
    1)设置后点击“取消”--回到“公告”界面。系统显示修改之前的公告内容。
    2)设置后点击“确定”--系统弹出对话框提示操作成功--点“确定”--对话框关闭,回到“公告”界面,系统按照公告时间后先顺序显示公告内容,当前新增内容显示在最上面。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 当前图书馆为分馆时,只能看到本分馆的公告,不能看到总馆或同一总馆下其他分馆的公告。

Web:X.当前图书馆为“南开区宜宾里小学”时,可以看到总馆“南开区中小盟学图书馆联盟开盟”的公告。(2018.4.18)
微信:X.当前图书馆为“南开区宜宾里小学”时,可以看到总馆“南开区中小盟学图书馆联盟开盟”的公告。(2018.4.25)

dp2Capo SIP 服务器功能与测试计划

需求和功能概述

dp2 中原有的 SIP Server 不能支持多租户情形。这次改造和迁移主要是解决这个问题,允许 SIP Server 多个实例并存。那么计划采用的方法实际上是只使用一个 SIP 监听端口,然后根据 SIP 请求中 Login 请求里面携带的用户名,析出用户名中 '@' 以后的部分,定位到具体的实例,解决多租户应用问题。

鉴于前不久刚在 dp2Capo 中实现了 Z39.50 服务器功能,顺便也抽出一个 TcpServer 类,重载以后实现 SIP 服务器功能,复用代码。好处很多,其中一个是可以享用为 Z39.50 服务器所开发的根据前端 IP 地址限定同一个 IP 能使用的最大通道数的功能。

连接断开后用户无法得到通知

具体操作:执行检索操作后,几分钟不继续点击检索,连接就会断开,这时用户再调用查询下一批记录,会报以下异常:ErrorInfo=recv出错:无法从传输连接中读取数据:你的主机中的软件中止了一个已建立的连接。。

“我爱图书馆”测试工作单/图书馆介绍

  1. 未选择图书馆时,进入“图书馆介绍”界面时出现未选择图书馆提示,点击链接选择图书馆。选好图书馆后,自动转回“图书馆介绍”界面。

Web:√(2018.4.18)
微信:


  1. “图书馆介绍”界面显示正常。图书馆介绍界面有栏目的概念,但显示是在同一个界面,且按栏目分组显示。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 当前账号为pubilc或读者账号时,用户只能查看图书馆介绍界面。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 当前账号为有权限的工作人员账号时,图书馆界面除了显示内容以外,增加“新发布信息”按钮。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 点击需要编辑的介绍内容 --该区域显示显示为绿底色,且右边出现“编辑”和“删除”按钮--点击该内容区域,取消编辑状态:底色消失,“编辑”和“删除”按钮消失。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 工作人员可以对当前介绍内容进行删除。
    点击需要编辑的介绍内容区域--该区域显示显示为绿底色,且右边出现“编辑”和“删除”按钮--点击“删除”--系统弹出对话框提示是否要删除该内容--点“取消”--对话框关闭,回到介绍界面,且编辑区域关闭。
    点击需要编辑的介绍内容区域--该区域显示显示为绿底色,且右边出现“编辑”和“删除”按钮--点击“删除”-系统弹出对话框提示是否要删除该内容--点“确定”--系统弹出对话框提示删除成功--点“确定”--对话框关闭,回到图书馆介绍界面,编辑区域关闭,且刚才删除的内容消失。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 工作人员可以对当前介绍内容进行编辑。
    点击需要编辑的内容区域--该区域显示显示为绿底色,且右边出现“编辑”和“删除”按钮--点击“编辑”--进入图书馆介绍编辑界面--下拉选择或自定义栏目,编辑标题和内容--点“取消”--对话框关闭,回到图书馆介绍界面,且编辑区域关闭。系统显示为修改之前的介绍内容。
    点击需要编辑的内容区域--该区域显示显示为绿底色,且右边出现“编辑”和“删除”按钮--点击“编辑”--进入图书馆介绍编辑界面--下拉选择或自定义栏目,编辑标题和内容--点“保存”--系统弹出对话框提示保存成功--点“确定”--对话框关闭,回到图书馆介绍界面,且编辑区域关闭。系统显示为修改之后的介绍内容(含未修改的内容)。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 工作人员增加介绍内容。
    在图书馆介绍界面直接点击“新发布信息”按钮--进入图书馆介绍编辑界面--用户可以下拉选择或自定义栏目,编辑标题和内容,
    1)设置后点击“取消”--回到“图书馆介绍”界面。系统显示增加之前的介绍内容。
    2)设置后点击“确定-”-系统弹出对话框提示操作成功--点“确定”--对话框关闭,回到“图书馆介绍”界面,系统按照介绍先后顺序显示内容,当前新增内容按照编辑时栏目最前面的数字顺序显示在预定的位置。

Web:√(2018.4.18)
微信:√(2018.4.25)


  1. 当前图书馆为分馆时,只能看到本分馆的图书馆介绍,不能看到总馆或同一总馆下其他分馆的介绍。

Web:X.在总馆的图书馆介绍界面增加一条测试信息,当前设为星洲图书馆时,可以看到该信息。(2018.4.25)
微信:X.同Web测试结果。(2018.4.25)

如何通过ChordInstaller升级dp2capo桥接模块

升级ChordInstaller之前,需要先将dp2Installer升级到最新版本,参见通过dp2Installer升级dp2服务器模块

下面是ChordInstaller升级过程:

  1. 在服务器上,启动ChordInstaller。
    image

  2. 如果有新版本,会出现更新提示,如果没有出现更新提示,请退出ChordInstaller,然后再次启动ChordInstaller,多反复退出启动几次,直到出现更新提示。
    image

  3. 然后点"确定" 下载最新版本。
    image

  4. ChordInstaller最新版本下载完成,会弹出一个安全警告,点 运行。
    image

  5. ChordInstaller提示升级dp2capo模块,点 是 ,升级dp2capo模块。
    image
    image

  6. 升级完成,面板最后一行 显示dp2capo版本为 1.32。
    image

我爱图书馆 公众号的一些Issues

关于返回检索界面,是否显示原来检索信息

问题描述:手机上对“星洲学校”进行检索。什么检索词都不输入,检索,命中一批结果,第一条就是“剪面包的男孩”。看它的详细情况,点对象缩略图进入 PDF 预览页面。然后用浏览器 back 按钮回到检索页面,是没有任何检索命中的原始状态。而从检索页面,用“剪”进行检索,命中,预览,back 回来,回到检索画面,能看到原先的命中浏览结果

原因:返回检索界面,是否重新显示原来的检索信息,是根据原界面留的检索词判断的,如果检索词为空,怕影响效率,不进行重新检索。代码如下:

登录不成功问题

配置图书馆时,如果不配置联系人手机号的话,访问公告、介绍等界面出现登录不成功的问题。
再修改一下图书馆配置,加上联系人手机号后,则正常访问公告、介绍等界面。
请检查原因。

查询返回结果的数据库顺序问题

微信公众号里 查询图书时 可以自定义返回结果的书目库顺序吗?吉林动画这边检索时返回的顺序是期刊库,光盘库。图书库在后面。

高级检索 增加选择数据库

高级检索界面,增加数据库选择

选择学生姓名列表

后面我建议,在输入读者证条码号的界面,具备一个按钮,可以出现一个选择读者的对话框,里面用单位等方式逐级选择读者。比如先选择一个班,然后自动列出这个班的所有读者姓名,然后再选择具体读者。这个功能是如此自然以至于都不用培训了

发送微信通知

一些用户单位(海洋、华神)提到工作人员在公众号发布好书推荐时,目前读者只能点进好书推荐栏目才能查看新书信息,能否发布完好书推荐,公告号程序自动同时发送一条微信通知给关注的读者用户,起到提醒的作用。

微信公众号模块关于隐私信息屏蔽问题

微信公众号模块中,绑定读者记录后,“我的图书馆”-“我的信息”页面内,希望屏蔽隐私信息,比如身份证号、手机号、地址等。

分馆单独发公告

前段时间南开联盟某小学在公众号中发布好书推荐,虽然是单独的分馆,但目前好书推荐、公告、图书馆介绍这几个栏目是全部成员馆共享的。后面考虑支持独立发布。

dp2capo实例管理测试计划

测试用例目录

  1. 新建实例时,修改dp2capo实例名
  2. 对已存在dp2capo实例,修改实例名,检查是否正常修改
  3. 测试删除部capo实例

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.