DigitalPlatform / dp2

Integrated Library System / 图书馆集成系统
http://digitalplatform.github.io/dp2
Apache License 2.0
105 stars 54 forks source link

dp2library 操作日志记录格式详释 #1184

Open DigitalPlatform opened 5 months ago

DigitalPlatform commented 5 months ago

本文介绍 dp2library 中各类型操作日志记录的 XML 格式。

DigitalPlatform commented 5 months ago

Borrow

action动作,有两个值borrow和renew(续借)

改进点: 增加一个 readerRefID 元素,内容为读者记录的参考 ID。 增加了一个 itemRefID 元素,内容为册记录的参考 ID。

<root>
  <libraryCode></libraryCode> 馆代码
  <operation>borrow</operation> 操作类型
  <action>borrow/renew</action>  动作 borrow/renew

  <readerBarcode>R0000002</readerBarcode> 读者证条码号
  <readerRefID>...</readerRefID> 读者参考 ID
  <itemBarcode>0000001</itemBarcode>  册条码号
  <itemRefID>...</itemRefID> 册参考 ID

  <borrowDate>Fri, 08 Dec 2006 04:17:31 GMT</borrowDate> 借阅日期。RFC1123 格式
  <borrowPeriod>30day</borrowPeriod> 借阅期限
  <returningDate>Wed, 20 Mar 2024 12:00:00 +0800</returningDate> 还书日期。RFC1123格式
  <type>普通</type>  册类型
  <price>CNY16.80</price> 册价格 

  <no>0</no> 续借次数。0为首次普通借阅,1开始为续借
  <lastReturningDate>Wed, 20 Mar 2024 12:00:00 +0800</lastReturningDate>  当续借次数>0时,此字段表示续借前的应还日期
  <operator>test</operator> 操作者
  <operTime>Fri, 08 Dec 2006 04:17:31 GMT</operTime> 操作时间。RFC 1123 格式

  <borrowID>78f9df8a-6019-4452-be44-d2c7741e6c78</borrowID>  借书id,待进一步说明此字段功能

  <confirmItemRecPath>...</confirmItemRecPath> 辅助判断用的册记录路径

  <readerRecord recPath='...'>...</readerRecord>    最新读者记录,里面的内容是转义过的。
  <itemRecord recPath='...'>...</itemRecord>    最新册记录,里面的内容是转义过的。

  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>  前端地址
  <version>1.10</version>  日志版本
  <time start="2024-02-18T11:25:39" end="2024-02-18T11:25:40" seconds="0.070" /> 使用时长
  <uid>a181295f-c6ea-45e3-be6f-6a5db1e0c6d8</uid>  日志id

</root>

注: 1) confirmItemRecPath 元素里面是前端认为的,可以在册条码号发生重复的情况下辅助程序进行取舍的一个册记录路径。如果册条码号检索发现并没有遇到重复现象,这个路径就根本用不上。而且,即便发生了重复,也有可能这个路径并不和重复的记录的任何一个路径相同。不得不说这个路径给出相当随意,日志记录中这个元素仅仅是把它记载下来,建议服务器处理的时候,如果可能直接看 itemRecord 元素的 recPath 属性,这个路径更靠谱。

详细样例

借书日志示例

<root>
  <libraryCode>
  </libraryCode>
  <operation>borrow</operation>
  <action>borrow</action>

  <readerBarcode>P00001</readerBarcode>
  <readerRefID>3c70aeea-e3e9-4d1b-82de-965b3bd7f65d</readerRefID>
  <itemBarcode>DPB000003</itemBarcode>
  <itemRefID>6487e028-9b79-4b8a-8bad-5e44777bcb63</itemRefID>

  <borrowDate>Sun, 18 Feb 2024 11:25:40 +0800</borrowDate>
  <borrowPeriod>31day</borrowPeriod>
  <returningDate>Wed, 20 Mar 2024 12:00:00 +0800</returningDate>
  <type>普通</type>
  <price>CNY16.80</price>
  <no>0</no>
  <operator>supervisor</operator>
  <operTime>Sun, 18 Feb 2024 11:25:40 +0800</operTime>
  <borrowID>78f9df8a-6019-4452-be44-d2c7741e6c78</borrowID>

  <readerRecord recPath="读者/1">...</readerRecord>
  <itemRecord recPath="中文图书实体/12">...</itemRecord>

  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
  <time start="2024-02-18T11:25:39" end="2024-02-18T11:25:40" seconds="0.070" />
  <uid>a181295f-c6ea-45e3-be6f-6a5db1e0c6d8</uid>
</root>

readerRecord表示读者信息,内容样例如下:看到borrow元素中,增加了refID属性

<?xml version="1.0" encoding="utf-8"?>
<root>
    <barcode>P001</barcode>
    <readerType>本科生</readerType>
    <name>任1</name>
    <department>24级1班</department>
    <refID>9131f365-772d-4ce1-b6ae-334380d41a21</refID>
    <libraryCode>
    </libraryCode>
    <password type="bcrypt">$2a$11$a73g23qT2ApEeJ6qLmEXMO8SY1qe9AzcwtwWWTgIvy1uzFEMQKbb.</password>
    <operations>
        <operation name="create" operator="supervisor" time="Mon, 20 May 2024 10:11:20 +0800" />
    </operations>
    <reservations />
    <borrows>
        <borrow barcode="B001" refID="94623e97-65e2-470e-b55e-160f0ce178a4" oi="" recPath="ryh测试库实体/1" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Tue, 21 May 2024 16:06:00 +0800" borrowPeriod="31day" borrowID="d7bdf7c3-460f-4150-b911-5e0c563332ad" returningDate="Fri, 21 Jun 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" />
    </borrows>
</root>

itemRecord 表示册信息,内容样例如下:看到borrow元素的内容是@refID:xxx形态

<?xml version="1.0" encoding="utf-8"?>
<root>
    <parent>1</parent>
    <location>流通库</location>
    <bookType>普通</bookType>
    <batchNo>20240307验收2</batchNo>
    <price>CNY19.00</price>
    <accessNo>B848.4/K433</accessNo>
    <barcode>B001</barcode>
    <refID>94623e97-65e2-470e-b55e-160f0ce178a4</refID>
    <operations>
        <operation name="create" time="Wed, 27 Mar 2024 11:21:33 +0800" operator="supervisor" />
    </operations>
    <borrower>@refID:9131f365-772d-4ce1-b6ae-334380d41a21</borrower>
    <borrowerReaderType>本科生</borrowerReaderType>
    <borrowerRecPath>ryh读者/1</borrowerRecPath>
    <borrowDate>Tue, 21 May 2024 16:06:00 +0800</borrowDate>
    <borrowID>d7bdf7c3-460f-4150-b911-5e0c563332ad</borrowID>
    <checkInOutDate>Tue, 21 May 2024 16:06:00 +0800</checkInOutDate>
    <borrowPeriod>31day</borrowPeriod>
    <returningDate>Fri, 21 Jun 2024 12:00:00 +0800</returningDate>
    <operator>supervisor</operator>
</root>

续借日志示例

  <operation>borrow</operation>
  <action>renew</action>

  <returningDate>Thu, 18 Apr 2024 12:00:00 +0800</returningDate> 续借后的最新应还日期
  <no>1</no> 续借次数
  <lastReturningDate>Wed, 20 Mar 2024 12:00:00 +0800</lastReturningDate>  续借前的应还日期
renyh commented 5 months ago

Return

action动作有 return/lost/inventory/read/boxing 几种。恢复动作目前仅恢复 return 和 lost 两种,其余会忽略

<root>
  <libraryCode></libraryCode> 馆代码
  <operation>return</operation> 操作类型
  <action>return/lost/inventory/read/boxing</action> 动作

  <itemBarcode>0000001</itemBarcode> 册条码号
  <itemRefID>...</itemRefID> 册参考 ID
  <readerBarcode>R0000002</readerBarcode> 读者证条码号
  <readerRefID>...</readerRefID> 读者参考 ID

  <operator>test</operator> 操作者
  <operTime>Fri, 08 Dec 2006 04:17:45 GMT</operTime> 操作时间。RFC1123 格式
 <overdues>...</overdues> 超期信息 通常内容为一个字符串,为一个<overdue>元素XML文本片断
 <lostComment>...</lostComment> 丢失备注,当action=lost时,有此字段。

  <confirmItemRecPath>...</confirmItemRecPath> 辅助判断用的册记录路径

  <readerRecord recPath='...'>...</readerRecord>    最新读者记录
  <itemRecord recPath='...'>...</itemRecord>    最新册记录

   2016/7/22 新增加
   <borrowDate>...</borrowDate> 借阅日期。RFC1123 格式
   <borrowPeriod>...</borrowPeriod> 借期。形态为 31day
   <denyPeriod>...</denyPeriod>
   <returningDate>...</returningDate> 应还日期。RFC1123 格式
   <borrowOperator>...</borrowOperator> 借阅操作者

  <borrowID>78f9df8a-6019-4452-be44-d2c7741e6c78</borrowID>  借书id,待进一步说明此字段功能

  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress> 前端地址
  <version>1.10</version> 日志版本
  <time start="2024-02-18T11:41:52" end="2024-02-18T11:41:52" seconds="0.041" /> 使用时长
  <uid>8ec2d870-02da-4fa7-a77b-454cc71fe17f</uid> 日志id
</root>

还书日志示例

<root>
  <libraryCode></libraryCode>
  <operation>return</operation>
  <action>return</action>

  <borrowDate>Sun, 18 Feb 2024 11:25:40 +0800</borrowDate>
  <borrowPeriod>31day</borrowPeriod>
  <returningDate>Wed, 20 Mar 2024 12:00:00 +0800</returningDate>
  <borrowOperator>supervisor</borrowOperator>
  <borrowID>78f9df8a-6019-4452-be44-d2c7741e6c78</borrowID>

  <itemBarcode>DPB000003</itemBarcode>
  <itemRefID>6487e028-9b79-4b8a-8bad-5e44777bcb63</itemRefID>
  <readerBarcode>P00001</readerBarcode>
  <readerRefID>3c70aeea-e3e9-4d1b-82de-965b3bd7f65d</readerRefID>

  <readerRecord recPath="读者/1">...</readerRecord>
  <itemRecord recPath="中文图书实体/12">...</itemRecord>

  <operator>supervisor</operator>
  <operTime>Sun, 18 Feb 2024 11:41:52 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
  <time start="2024-02-18T11:41:52" end="2024-02-18T11:41:52" seconds="0.041" />
  <uid>8ec2d870-02da-4fa7-a77b-454cc71fe17f</uid>
</root>

验证还书与普通 还书一模一样

丢失

以下是丢失相关的字段内容,其它同还书字段。

  <operation>return</operation> 
  <action>lost</action> 

  <overdues>&lt;overdue barcode="DPB000003" refID="6487e028-9b79-4b8a-8bad-5e44777bcb63" location="流通库" reason="丢失。原价格: CNY16.80; 违约金因子:1.5" price="CNY25.2" borrowDate="Sun, 18 Feb 2024 11:48:37 +0800" borrowPeriod="60day" returnDate="Sun, 18 Feb 2024 12:01:05 +0800" borrowOperator="supervisor" operator="supervisor" id="638438544653695269-1" /&gt;</overdues>  

  <lostComment>本册于 Sun, 18 Feb 2024 12:01:05 +0800 由读者 @refID:3c70aeea-e3e9-4d1b-82de-965b3bd7f65d 声明丢失。违约金记录id为 638438544653695269-1。最后一次借阅的情况如下: 借阅日期: Sun, 18 Feb 2024 11:48:37 +0800; 借阅期限: 60day。</lostComment>
renyh commented 5 months ago

todo

renyh commented 5 months ago

交费相关操作 amerce

日志格式说明

当读者有违约信息时,就需要走交费手续,才能再借书。

action有5种值:modifyprice,modifycomment,amerce,undo,expire,下面分别说明: 1)读者的违约信息是存储在读者xml时,在交费前,可以修改违约信息(modifyprice)的金额和注释(modifycomment),这两个动作只涉及修改读者xml中违约信息对应内容,不涉及到违约金库。 2)交费(amerce)和撤消交费(undo)这两个动作涉及到读者xml中的违约信息和违约金库记录,交费会消掉读者xml中的违约信息,并且给违约金库增加一笔记录 ;撤消交费会删除违约金库对应的交费记录,并且把对应的违约信息增加到读者xml中。 3)以停代金到期(expire)这个动作,一般是由后台自动执行后,到停借的天数到期时,后台任务会消掉读者xml中的违约信息。

2024改进点: 增加了一个 readerRefID 元素。原有 readerBarcode 元素依然有效

<root>
  <libraryCode></libraryCode>
  <operation>amerce</operation>  
  <action>modifyprice/modifycomment/amerce/expire/undo</action> // modifyprice(修改价格), modifycomment(修改注释),amerce(交费),expire(以停代金到期),undo(撤消交费)

  <readerBarcode>P00001</readerBarcode>
  <readerRefID>57bd7815-a668-44a9-b23a-1f6cf03a16ab</readerRefID>   读者参考ID

  <oldReaderRecord recPath="读者/1">...</oldReaderRecord>  //老读者信息
  <readerRecord recPath="读者/1">...</readerRecord>  //新的读者信息

  <amerceItems>
    <amerceItem id="638438544653695269-1"  newPrice="CNY10"  newComment="xxx"  />  // id属性与读者xml中的overdue的id对应,指定是哪个违约信息。
//当modifyprice(修改价格)时会有newPrice属性,当modifycomment(修改注释)时会有newComment属性。除这两种情况,则没有这两个属性。
  </amerceItems>

  <amerceRecord recPath="违约金/3">...</amerceRecord>   // 当交费(amerce)和撤消交费(undo)会有此元素,否则没有。

   <expiredOverdues>  // 只当以停代金到期(expire)时,才会有此元素。
        <overdue barcode="B001" refID="380e3fed-2cbe-4764-b98f-13d76284f7d0" location="流通库" reason="超期。超 1天; 违约金因子: CNY1.0/day" 
overduePeriod="1day" price="CNY1" borrowDate="Tue, 23 Apr 2024 21:36:40 +0800" borrowPeriod="31day" 
returnDate="Sat, 25 May 2024 21:38:03 +0800" borrowOperator="supervisor" operator="supervisor" 
id="638495051005520137-1" pauseStart="" />
    </expiredOverdues>

  <operator>supervisor</operator>
  <operTime>Sun, 18 Feb 2024 12:09:54 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

各操作样例

修改价格 modifyprice

<root>
    <libraryCode>
    </libraryCode>
    <operation>amerce</operation>
    <action>modifyprice</action>

    <readerBarcode>P001</readerBarcode>
    <readerRefID>4a09c4d5-914b-4db7-bbae-ce5ff83214a0</readerRefID>

    <oldReaderRecord recPath="ryh读者/1">....</oldReaderRecord>
    <readerRecord recPath="ryh读者/1">...</readerRecord>

    <amerceItems>
        <amerceItem id="638466172018233902-1" newPrice="CNY10" />
    </amerceItems>

    <operator>supervisor</operator>
    <operTime>Tue, 23 Apr 2024 19:51:08 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

修改注释 modifycomment

<root>
    <libraryCode>
    </libraryCode>
    <operation>amerce</operation>
    <action>modifycomment</action>
    <readerBarcode>P001</readerBarcode>
    <readerRefID>4a09c4d5-914b-4db7-bbae-ce5ff83214a0</readerRefID>

    <oldReaderRecord recPath="ryh读者/1">...</oldReaderRecord>
    <readerRecord recPath="ryh读者/1">....</readerRecord>

    <amerceItems>
        <amerceItem id="638466172018233902-1" newComment="&gt;新注释" />
    </amerceItems>

    <operator>supervisor</operator>
    <operTime>Tue, 23 Apr 2024 19:54:31 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

交费 amerce

<root>
    <libraryCode>
    </libraryCode>
    <operation>amerce</operation>
    <action>amerce</action>
    <readerBarcode>P001</readerBarcode>
    <readerRefID>4a09c4d5-914b-4db7-bbae-ce5ff83214a0</readerRefID>

    <oldReaderRecord recPath="ryh读者/1">...</oldReaderRecord>
    <readerRecord recPath="ryh读者/1">...</readerRecord>

    <amerceItems>
        <amerceItem id="638466172018233902-1" />
    </amerceItems>
    <amerceRecord recPath="违约金/1">...</amerceRecord>

    <operator>supervisor</operator>
    <operTime>Tue, 23 Apr 2024 19:55:33 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

**日志中amerceRecord 元素存的违约金记录,样例如下:*** 违约金记录中的id相当于refID,是当违约信息还存储在读者xml中就产生这个id,交费后id带到违约金记录里。 另外state元素也很重要,后面结算会改这个状态。

2024改进点: 增加 itemRefID 元素,内容为超期册的参考 ID。 增加 readerRefID 元素,内容为读者参考 ID。 违约金库 keys 模板里面为上述两个元素增加了检索点,名为“册参考ID”和“读者参考ID”。

<?xml version="1.0" encoding="utf-8"?>
<root>
    <state>amerced</state>
    <id>638507762013860523-2</id>
    <libraryCode>
    </libraryCode>

    <itemBarcode>B002</itemBarcode>
    <itemRefID>17723753-f759-40a4-8b5b-cbbd74cb7168</itemRefID>

    <readerBarcode>P001</readerBarcode>
    <readerRefID>4a09c4d5-914b-4db7-bbae-ce5ff83214a0</readerRefID>

    <location>流通库</location>
    <reason>丢失。原价格: CNY19.00; 违约金因子:1.5</reason>
    <price>CNY28.5</price>
    <comment>
    </comment>

    <borrowDate>Wed, 08 May 2024 14:43:06 +0800</borrowDate>
    <borrowPeriod>31day</borrowPeriod>
    <borrowOperator>supervisor</borrowOperator>
    <returnDate>Wed, 08 May 2024 14:43:21 +0800</returnDate>
    <returnOperator>supervisor</returnOperator>

    <operator>supervisor</operator>
    <operTime>Wed, 08 May 2024 14:43:29 +0800</operTime>
</root>

撤消交费 undo

<root>
    <libraryCode>
    </libraryCode>
    <operation>amerce</operation>
    <action>undo</action>

    <readerBarcode>P001</readerBarcode>
    <readerRefID>4a09c4d5-914b-4db7-bbae-ce5ff83214a0</readerRefID>

    <amerceItems>
        <amerceItem id="638466172018233902-1" />
    </amerceItems>
    <amerceRecord recPath="违约金/1"></amerceRecord>

    <oldReaderRecord recPath="ryh读者/1"></oldReaderRecord>
    <readerRecord recPath="ryh读者/1"></readerRecord>

    <operator>supervisor</operator>
    <operTime>Tue, 07 May 2024 11:11:28 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

以停代金到期 expire

<root>
    <libraryCode>
    </libraryCode>
    <operation>amerce</operation>
    <action>expire</action>

    <readerBarcode>P001</readerBarcode>
    <readerRefID>4a09c4d5-914b-4db7-bbae-ce5ff83214a0</readerRefID>

    <expiredOverdues>
        <overdue barcode="B001" refID="380e3fed-2cbe-4764-b98f-13d76284f7d0" location="流通库" 
reason="超期。超 1天; 违约金因子: CNY1.0/day" overduePeriod="1day" price="CNY1"
borrowDate="Tue, 23 Apr 2024 21:36:40 +0800" borrowPeriod="31day" returnDate="Sat, 25 May 2024 21:38:03 +0800" 
borrowOperator="supervisor" operator="supervisor" id="638495051005520137-1" pauseStart="" />
    </expiredOverdues>

    <oldReaderRecord recPath="ryh读者/1">...</oldReaderRecord>
    <readerRecord recPath="ryh读者/1">...</readerRecord>

    <operator>#readersMonitor</operator>
    <operTime>Sun, 26 May 2024 21:38:23 +0800</operTime>
    <version>1.10</version>
</root>
renyh commented 5 months ago

读者记录 setReaderInfo

setReaderInfo日志关于读者记录的变更,除了调setReaderInfo() api会产生此日志,调writeRes()接口如果操作的是读者记录,也是产生此类型日志。

action:值有 new/change/delete/move

style:风格,值可能为ignorechecktimestamp/checkcreatingtimestamp/delete/force一个或多个,例如action=delete,<style description="1个在借册">force</style>表示是强制删除,有在借册的情况下删除该读者。 调writeres()时style=ignorechecktimestamp,delete表示删除且忽略时间戳。

调setReaderInfo()时,action=forcenew/forcechange/forcedelete时,写到日志中是拆开的,action=new/change/delete,style=force。

<root>
  <operation>setReaderInfo</operation>
  <action>new/change/delete/move</action>   //4种值

  <style description="1个在借册">force</style>    //值可能是ignorechecktimestamp/checkcreatingtimestamp/force/delete

  <libraryCode></libraryCode> //分馆代码

  <record recPath="读者/1">...</record>    // 最新的读者内容,当new和change时有此元素
  <oldRecord recPath="读者/1">...</oldRecord>  旧记录,当change和delete时有此元素。(2024/5/25 改进: 动作为 new 时也可能会具备此元素)

  // 当修改读者,但读者里有在借册信息,会有若干对应册的 changeEntityRecord 元素
  <changedEntityRecord itemBarcode="B001" itemRefID="94623e97-65e2-470e-b55e-160f0ce178a4" 
recPath="ryh测试库实体/1" oldBorrower="P001" newBorrower="@refID:9131f365-772d-4ce1-b6ae-334380d41a21" />

  // 以下是操作信息
  <operator>supervisor</operator>
  <operTime>Wed, 21 Feb 2024 09:36:29 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>

</root>

日志样例

new

<root>
  <operation>setReaderInfo</operation>
  <libraryCode>
  </libraryCode>
  <action>new</action>
  <record recPath="读者/1">...</record>  
  <operator>supervisor</operator>
  <operTime>Wed, 21 Feb 2024 09:36:29 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

读者记录本身,2024增加了refid,password,operations

<?xml version="1.0" encoding="utf-8"?>
<root>
    <barcode>P0011</barcode>
    <readerType>本科生</readerType>
    <name>任1</name>
    <department>24级1班</department>
    <refID>9131f365-772d-4ce1-b6ae-334380d41a211</refID>
    <libraryCode>
    </libraryCode>
    <operations>  //2024新增
        <operation name="create" operator="supervisor" time="Tue, 21 May 2024 11:35:42 +0800" />
    </operations>
    <password type="bcrypt">$2a$11$VNvtiDONYJsTHuYac9rnRughDe/ecjpXL6gY5FRExL7MeXuei8pSe</password>
</root>

change

<root>
  <operation>setReaderInfo</operation>
  <libraryCode>
  </libraryCode>
  <action>change</action>
  <record recPath="读者/1">...</record>  新记录
  <oldRecord recPath="读者/1">...</oldRecord>  旧记录
  <operator>supervisor</operator>
  <operTime>Mon, 19 Feb 2024 09:42:55 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

注意新的读者记录体里,确保有refid,并且可能还会有borrows,reservations,outofReservations,overdues,borrowHistory 。

<?xml version="1.0" encoding="utf-8"?>
<root>
    <barcode>P001</barcode>
    <readerType>本科生</readerType>
    <name>任1</name>
    <department>24级1班1</department>
    <refID>9131f365-772d-4ce1-b6ae-334380d41a21</refID>
    <libraryCode>
    </libraryCode>
    <password type="bcrypt">$2a$11$BAwNoK6lkLxA/CBLtv.nJubzFaew00d80aHU8WxWkcDkhWb3uPVlq</password>

    //检查borrows/borrow 元素中,增加了一个 refID 属性
    <borrows>
        <borrow barcode="B001" refID="94623e97-65e2-470e-b55e-160f0ce178a4" oi="" recPath="ryh测试库实体/1" 
biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 16 May 2024 11:51:29 +0800" borrowPeriod="31day" 
borrowID="f68c5287-8400-4bfe-8f4d-e3a01f04a885" returningDate="Sun, 16 Jun 2024 12:00:00 +0800" 
operator="supervisor" type="普通" price="CNY19.00" />
    </borrows>

    //检查reservations/request 元素的arrivedItemBarcode 属性 和 items属性,新版本都是@refID:xxx,旧版本是同条码。
    <reservations>
        <request items="@refID:7ea3a869-e627-467f-a72e-d885a4942008" requestDate="Thu, 16 May 2024 11:51:44 +0800" 
operator="@refID:9131f365-772d-4ce1-b6ae-334380d41a21" state="arrived" arrivedDate="Thu, 16 May 2024 11:51:44 +0800" 
arrivedItemBarcode="@refID:7ea3a869-e627-467f-a72e-d885a4942008" notifyID="56b5190c-0dc1-4a35-b3e2-9be70404c1cb" 
accessNo="B848.4/K433" location="流通库" />
    </reservations>

    // 注:outofReservations表示预约到书过期了,后台程序会自动取消预约,把读者的reservations删除,但增加上outofReservations,所以针对同一册outofReservations和reservations不可能同时存在,
    // 检查outofReservations/request 元素的 itemBarcode 属性,改为@refID:xxx形态
    <outofReservations count="1">
        <request itemBarcode="@refID:7ea3a869-e627-467f-a72e-d885a4942008" notifyDate="Thu, 16 May 2024 11:51:44 +0800" />
    </outofReservations>

    // 检查overdues/overdue 元素中,增加了一个 refID 属性
    <overdues>
        <overdue barcode="B001" refID="94623e97-65e2-470e-b55e-160f0ce178a4" location="流通库" reason="丢失。原价
格: CNY19.00; 违约金因子:1.5" price="CNY28.5" borrowDate="Mon, 20 May 2024 12:12:02 +0800" borrowPeriod="31day" 
returnDate="Mon, 20 May 2024 12:12:07 +0800" borrowOperator="supervisor" operator="supervisor" 
id="638514583343604189-1" />
    </overdues>

    // 检查borrowHistory /borrow 元素中,增加了一个 refID 属性
   <borrowHistory count="1">
    <borrow barcode="B001" refID="94623e97-65e2-470e-b55e-160f0ce178a4" oi="" recPath="ryh测试库实体/1" 
biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 16 May 2024 11:51:29 +0800" borrowPeriod="31day" 
borrowID="f68c5287-8400-4bfe-8f4d-e3a01f04a885" returningDate="Sun, 16 Jun 2024 12:00:00 +0800" 
operator="supervisor" type="普通" price="CNY19.00" returnDate="Mon, 20 May 2024 12:06:05 +0800" 
borrowOperator="supervisor" />
  </borrowHistory>

</root>

delete

<root>
  <operation>setReaderInfo</operation>
  <libraryCode>
  </libraryCode>

  <action>delete</action>
  <oldRecord recPath="读者/3">...</oldRecord>

  <operator>supervisor</operator>
  <operTime>Wed, 21 Feb 2024 15:51:12 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">
  </clientAddress>
  <version>1.10</version>
</root>

changedEntityRecord 元素

根元素下可能会有若干 changeEntityRecord 元素。表示需要对相关册记录进行修改。

itemBarcode 属性:册条码号 itemRefID 属性:册参考 ID recPath 属性:册记录路径 oldBorrower 属性:旧 borrower 元素值 newBorrower 属性:新 borrower 元素值

一个带changedEntityRecord元素的例子

<root>
  <operation>setReaderInfo</operation>
  <libraryCode>
  </libraryCode>
  <action>change</action>
  <record recPath="ryh读者/1">...</record>
  <oldRecord recPath="ryh读者/1">...</oldRecord>

  <changedEntityRecord itemBarcode="B001" itemRefID="94623e97-65e2-470e-b55e-160f0ce178a4" 
recPath="ryh测试库实体/1" oldBorrower="P001" newBorrower="@refID:9131f365-772d-4ce1-b6ae-334380d41a21" />

  <operator>supervisor</operator>
  <operTime>Tue, 09 Apr 2024 11:52:17 +0800</operTime>
  <clientAddress via="http://localhost/dp2library/xe/rest">localhost</clientAddress>
  <version>1.10</version>
</root>

move

注:目前日志中record元素内容为空,因为MoveReaderInfo() 接口比较简单,如果两个路径参数,以后会参加CopyBiblioInfo增强一些,增加提交的xml参数。这样就可以把提交的信息写到record内容里。
移动书目的日志中<record recPath="ryh期刊2/1" newBiblioParam="(null)">...</record>newBiblioParam="(null)" 表示这个xml为最终信息,非提交的xml,如果没有newBiblioParam这个属性或属性值为空,则表示是前端提交的xml。

<root>
    <libraryCode>,</libraryCode>
    <operation>setReaderInfo</operation>
    <action>move</action>

    <record recPath="ryh读者/8">
    </record>
    <oldRecord recPath="ryh读者/1">...</oldRecord>

    <operator>supervisor</operator>
    <operTime>Tue, 21 May 2024 11:26:46 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>
renyh commented 5 months ago

册记录setEntity

日志格式

setEntity日志关于册记录的变更,除了调setEntities() api会产生此日志,调writeRes()接口如果操作的是册记录,也是产生此类型日志。

action元素

action有4种动作:new/change/delete/move 注:writeres()api是根据路径是否有?号,决定日志的action。而setEntities() api则是将参数传的action原样写到日志,例如接口action=new,路径是一个已存在的记录路径,执行的是覆盖操作,但日志中依然记得action为new。(todo,接口会改进,对参数的一致性会做检查,不一致会直接报错返回。)

record与oldRecord元素

new/change/move时,必有record元素。 change/move/delete时,必有oldRecord 元素。 change时,record与oldRecord 元素的recPath属性值相同;move时,recPath属性值不同。

style元素

style元素会记录调接口writeRes()或setEntites()时传的style参数,值有ignorechecktimestamp/checkcreatingtimestamp/delete,其中ignorechecktimestamp和delete可组合使用,中间以逗号分隔。

<root>
    <operation>setEntity</operation>
    <libraryCode>,</libraryCode>
    <action>new/change/delete/move 其一</action>

    <style>ignorechecktimestamp/checkcreatingtimestamp/delete</style>

    <record recPath="ryh期刊实体/1">...</record>  //new和change时,必有此元素
    <oldRecord recPath="ryh期刊实体/1">...</oldRecord>  //change和delete时,必有此元素

    <operator>supervisor</operator>
    <operTime>Tue, 14 May 2024 15:49:30 +0800</operTime>
    <clientAddress via="http://localhost/dp2library/xe/rest">localhost</clientAddress>
    <version>1.10</version>
</root>

各操作具体样例

new

<root>
  <operation>setEntity</operation>
  <libraryCode>
  </libraryCode>
  <action>new</action>

  <record recPath="中文图书实体/1">...</record>

  <operator>supervisor</operator>
  <operTime>Wed, 21 Feb 2024 09:34:28 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

注意记录体本身,要确保有refid

<?xml version="1.0" encoding="utf-8"?>
<root>
    <parent>1</parent>
    <location>流通库</location>
    <price>CNY19.00</price>
    <bookType>普通</bookType>
    <accessNo>B848.4/K433</accessNo>
    <barcode>B001</barcode>
    <refID>c819f8e7-e6cc-468c-8ff2-16586547cd4d</refID>
    <operations>
        <operation name="create" time="Tue, 27 Feb 2024 10:50:27 +0800" operator="supervisor" />
    </operations>
</root>

change

<root>
  <operation>setEntity</operation>
  <libraryCode>,</libraryCode>
  <action>change</action>

  <style>outofrangeAsError</style>

  <record recPath="中文图书实体/12">...</record>  最新记录
  <oldRecord recPath="中文图书实体/12">...</oldRecord>  旧记录

  <operator>supervisor</operator>
  <operTime>Mon, 19 Feb 2024 11:52:48 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

delete

<root>
  <operation>setEntity</operation>
  <libraryCode>
  </libraryCode>
  <action>delete</action>

  <oldRecord recPath="中文图书实体/4">...</oldRecord>

  <operator>supervisor</operator>
  <operTime>Wed, 21 Feb 2024 15:16:32 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

move

<root>
    <operation>setEntity</operation>
    <libraryCode>,</libraryCode>
    <action>move</action>

    <record recPath="ryh期刊2实体/1">...</record>
    <oldRecord recPath="ryh期刊实体/1">...</oldRecord>

    <operator>supervisor</operator>
    <operTime>Sun, 07 Apr 2024 15:15:00 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>
renyh commented 5 months ago

数据库管理manageDatabase

createDatabase

系统初始化时,创建多个数据库的日志

<root>
  <operation>manageDatabase</operation>
  <action>createDatabase</action>
  <libraryCode>
  </libraryCode>
  <databaseInfo>&lt;root&gt;&lt;database type="biblio" syntax="unimarc" usage="book" role="orderRecommendStore,catalogTarget" inCirculation="true" name="中文图书" entityDbName="中文图书实体" orderDbName="中文图书订购" commentDbName="中文图书评注" /&gt;&lt;database type="biblio" syntax="unimarc" usage="series" role="" inCirculation="true" name="中文期刊" entityDbName="中文期刊实体" orderDbName="中文期刊订购" issueDbName="中文期刊期" commentDbName="中文期刊评注" /&gt;&lt;database type="biblio" syntax="usmarc" usage="book" role="" inCirculation="true" name="西文图书" entityDbName="西文图书实体" orderDbName="西文图书订购" commentDbName="西文图书评注" /&gt;&lt;database type="biblio" syntax="usmarc" usage="series" role="" inCirculation="true" name="西文期刊" entityDbName="西文期刊实体" orderDbName="西文期刊订购" issueDbName="西文期刊期" commentDbName="西文期刊评注" /&gt;&lt;database type="reader" inCirculation="true" name="读者" libraryCode="" /&gt;&lt;database type="arrived" name="预约到书" /&gt;&lt;database type="amerce" name="违约金" /&gt;&lt;database type="publisher" name="出版者" /&gt;&lt;database type="message" name="消息" /&gt;&lt;/root&gt;</databaseInfo>
  <databases>
    <database type="biblio" syntax="unimarc" usage="book" role="orderRecommendStore,catalogTarget" inCirculation="true" name="中文图书" entityDbName="中文图书实体" orderDbName="中文图书订购" commentDbName="中文图书评注" />
    <database type="biblio" syntax="unimarc" usage="series" role="" inCirculation="true" name="中文期刊" entityDbName="中文期刊实体" orderDbName="中文期刊订购" issueDbName="中文期刊期" commentDbName="中文期刊评注" />
    <database type="biblio" syntax="usmarc" usage="book" role="" inCirculation="true" name="西文图书" entityDbName="西文图书实体" orderDbName="西文图书订购" commentDbName="西文图书评注" />
    <database type="biblio" syntax="usmarc" usage="series" role="" inCirculation="true" name="西文期刊" entityDbName="西文期刊实体" orderDbName="西文期刊订购" issueDbName="西文期刊期" commentDbName="西文期刊评注" />
    <database type="reader" inCirculation="true" name="读者" libraryCode="" />
    <database type="arrived" name="预约到书" />
    <database type="amerce" name="违约金" />
    <database type="publisher" name="出版者" />
    <database type="message" name="消息" />
  </databases>
  <operator>supervisor</operator>
  <operTime>Mon, 18 Mar 2024 11:57:05 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

创建一个书目数据库的日志

<root>
  <operation>manageDatabase</operation>
  <action>createDatabase</action>
  <libraryCode>
  </libraryCode>
  <databaseInfo>&lt;root&gt;&lt;database type="biblio" syntax="unimarc" usage="book" role="" inCirculation="true" name="测试中文" entityDbName="测试中文实体" orderDbName="测试中文订购" commentDbName="测试中文评注" /&gt;&lt;/root&gt;</databaseInfo>
  <databases>
    <database type="biblio" syntax="unimarc" usage="book" role="" inCirculation="true" name="测试中文" entityDbName="测试中文实体" orderDbName="测试中文订购" commentDbName="测试中文评注" />
  </databases>
  <operator>supervisor</operator>
  <operTime>Mon, 18 Mar 2024 13:36:31 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

创建一个读者数据库的日志

<root>
  <operation>manageDatabase</operation>
  <action>createDatabase</action>
  <libraryCode>
  </libraryCode>
  <databaseInfo>&lt;root&gt;&lt;database type="reader" inCirculation="true" name="测试读者" libraryCode="" /&gt;&lt;/root&gt;</databaseInfo>
  <databases>
    <database type="reader" inCirculation="true" name="测试读者" libraryCode="" />
  </databases>
  <operator>supervisor</operator>
  <operTime>Mon, 18 Mar 2024 13:36:42 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

创建一个子库

<root>
  <operation>manageDatabase</operation>
  <action>createDatabase</action>
  <libraryCode>
  </libraryCode>
  <databaseInfo>&lt;root&gt;&lt;database name="中文图书实体" type="entity" biblioDbName="中文图书" /&gt;&lt;/root&gt;</databaseInfo>
  <databases>
    <database name="中文图书实体" type="entity" biblioDbName="中文图书" />
  </databases>
  <operator>supervisor</operator>
  <operTime>Mon, 18 Mar 2024 14:17:24 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

deleteDatabase

删除逻辑大库

<root>
  <operation>manageDatabase</operation>
  <action>deleteDatabase</action>
  <libraryCode>
  </libraryCode>
  <databaseNames>测试中文1</databaseNames>
  <databases>
    <database name="测试中文1" />
  </databases>
  <operator>supervisor</operator>
  <operTime>Mon, 18 Mar 2024 13:40:18 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

删除一个子库

<root>
  <operation>manageDatabase</operation>
  <action>deleteDatabase</action>
  <libraryCode>
  </libraryCode>
  <databaseNames>中文图书订购</databaseNames>
  <databases>
    <database name="中文图书订购" />
  </databases>
  <operator>supervisor</operator>
  <operTime>Mon, 18 Mar 2024 13:41:57 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

changeDatabase

修改逻辑大数据库名称

<root>
  <operation>manageDatabase</operation>
  <action>changeDatabase</action>
  <libraryCode>
  </libraryCode>
  <databaseNames>测试中文</databaseNames>
  <databaseInfo>&lt;root&gt;&lt;database type="biblio" syntax="unimarc" usage="book" name="测试中文1" entityDbName="测试中文1实体" orderDbName="测试中文1订购" commentDbName="测试中文1评注" /&gt;&lt;/root&gt;</databaseInfo>
  <databases>
    <database type="biblio" syntax="unimarc" usage="book" name="测试中文1" entityDbName="测试中文1实体" orderDbName="测试中文1订购" commentDbName="测试中文1评注" oldName="测试中文" />
  </databases>
  <operator>supervisor</operator>
  <operTime>Mon, 18 Mar 2024 13:38:51 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

是通过oldName来对应数据库名称。

修改子库名称

<root>
  <operation>manageDatabase</operation>
  <action>changeDatabase</action>
  <libraryCode>
  </libraryCode>
  <databaseNames>中文图书</databaseNames>
  <databaseInfo>&lt;root&gt;&lt;database type="biblio" syntax="unimarc" usage="book" entityDbName="中文图书实体1" /&gt;&lt;/root&gt;</databaseInfo>
  <databases>
    <database type="biblio" syntax="unimarc" usage="book" entityDbName="中文图书实体1" oldName="中文图书" />
  </databases>
  <operator>supervisor</operator>
  <operTime>Mon, 18 Mar 2024 14:09:19 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

==

initializeDatabase

<root>
  <operation>manageDatabase</operation>
  <action>initializeDatabase</action>
  <libraryCode>
  </libraryCode>
  <databaseNames>中文图书</databaseNames>
  <databases>
    <database name="中文图书" />
    <database name="中文图书实体" />
    <database name="中文图书订购" />
    <database name="中文图书评注" />
  </databases>
  <operator>supervisor</operator>
  <operTime>Mon, 18 Mar 2024 11:59:02 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

期刊库,多一个期子库。

<root>
  <operation>manageDatabase</operation>
  <action>initializeDatabase</action>
  <libraryCode>
  </libraryCode>
  <databaseNames>中文期刊</databaseNames>
  <databases>
    <database name="中文期刊" />
    <database name="中文期刊实体" />
    <database name="中文期刊订购" />
    <database name="中文期刊期" />
    <database name="中文期刊评注" />
  </databases>
  <operator>supervisor</operator>
  <operTime>Mon, 18 Mar 2024 11:59:41 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>
renyh commented 5 months ago

setSystemParameter

opac/database

<root>
  <operation>setSystemParameter</operation>
  <category>opac</category>
  <name>databases</name>
  <value>...转义内容...</value>
  <libraryCodeList>
  </libraryCodeList>
  <operator>supervisor</operator>
  <operTime>Wed, 21 Feb 2024 09:29:27 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

value内容,注意没有根元素

    <database name="中文图书" alias="cbook" />
    <database name="中文期刊" alias="cseries" />
    <database name="西文图书" alias="ebook" />
    <database name="西文期刊" alias="eseries" />

opac/browseformats

<root>
  <operation>setSystemParameter</operation>
  <category>opac</category>
  <name>browseformats</name>
  <value>...转义内容...</value>
  <libraryCodeList>
  </libraryCodeList>
  <operator>supervisor</operator>
  <operTime>Wed, 21 Feb 2024 09:29:27 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

value内容

    <database name="中文图书">
        <format name="详细" type="biblio">
            <caption lang="zh-CN">详细</caption>
            <caption lang="en">Detail</caption>
        </format>
    </database>
    <database name="中文期刊">
        <format name="详细" type="biblio">
            <caption lang="zh-CN">详细</caption>
            <caption lang="en">Detail</caption>
        </format>
    </database>
    <database name="西文图书">
        <format name="详细" type="biblio">
            <caption lang="zh-CN">详细</caption>
            <caption lang="en">Detail</caption>
        </format>
    </database>
    <database name="西文期刊">
        <format name="详细" type="biblio">
            <caption lang="zh-CN">详细</caption>
            <caption lang="en">Detail</caption>
        </format>
    </database>

circulation/locationTypes

<root>
    <operation>setSystemParameter</operation>
    <category>circulation</category>
    <name>locationTypes</name>
    <value>...</value>
    <libraryCodeList>
    </libraryCodeList>
    <operator>supervisor</operator>
    <operTime>Tue, 27 Feb 2024 16:55:32 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

value

    <item canborrow="no" canreturn="" itemBarcodeNullable="yes">保存本库</item>
    <item canborrow="no" canreturn="" itemBarcodeNullable="yes">阅览室</item>
    <item canborrow="yes" canreturn="" itemBarcodeNullable="yes">流通库</item>
    <item canborrow="yes" canreturn="" itemBarcodeNullable="yes">测试馆藏地</item>

circulation/callNumber

<root>
    <operation>setSystemParameter</operation>
    <category>circulation</category>
    <name>callNumber</name>
    <value></value>
    <libraryCodeList>
    </libraryCodeList>
    <operator>supervisor</operator>
    <operTime>Tue, 27 Feb 2024 16:55:44 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

value

    <group name="中图法" classType="中图法" qufenhaoType="Cutter-Sanborn Three-Figure,GCAT" zhongcihaodb="" callNumberStyle="索取类号+区分号">
        <location name="保存本库" />
        <location name="阅览室" />
        <location name="流通库" />
        <location name="测试馆藏地" />
    </group>

circulation/barcodeValidation

<root>
    <operation>setSystemParameter</operation>
    <category>circulation</category>
    <name>barcodeValidation</name>
    <value></value>
    <libraryCodeList>
    </libraryCodeList>
    <operator>supervisor</operator>
    <operTime>Tue, 27 Feb 2024 16:56:57 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

value

    <validator location="*">
        <patron>
            <range value="P001-P999" />
        </patron>
        <entity>
            <range value="B001-B999" />
        </entity>
    </validator>

circulation/valueTables

<root>
    <operation>setSystemParameter</operation>
    <category>circulation</category>
    <name>valueTables</name>
    <value></value>
    <libraryCodeList>
    </libraryCodeList>
    <operator>supervisor</operator>
    <operTime>Tue, 27 Feb 2024 16:58:18 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

value

    <table name="readerType">本科生,研究生,博士生,教授,职工</table>
    <table name="orderSeller" dbname="">新华文轩,中国邮政,中图公司</table>
    <table name="orderSource" dbname="">财政拨款,本馆经费</table>
    <table name="orderState" dbname="">已订购,已验收</table>
    <table name="orderClass" dbname="">社科,自科</table>

circulation/rightsTable

<root>
    <operation>setSystemParameter</operation>
    <category>circulation</category>
    <name>rightsTable</name>
    <value></value>
    <libraryCodeList>
    </libraryCodeList>
    <operator>supervisor</operator>
    <operTime>Tue, 27 Feb 2024 16:58:31 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

value

    <type reader="本科生">
        <param name="可借总册数" value="10" />
        <param name="可预约册数" value="5" />
        <param name="以停代金因子" value="1.0" />
        <param name="工作日历名" value="基本日历" />
        <type book="普通">
            <param name="可借册数" value="10" />
            <param name="借期" value="31day,15day" />
            <param name="超期违约金因子" value="CNY1.0/day" />
            <param name="丢失违约金因子" value="1.5" />
        </type>
        <type book="教材">
            <param name="可借册数" value="10" />
            <param name="借期" value="31day,15day" />
            <param name="超期违约金因子" value="CNY1.0/day" />
            <param name="丢失违约金因子" value="1.5" />
        </type>
    </type>
    <readerTypes>
        <item>本科生</item>
    </readerTypes>
    <bookTypes>
        <item>普通</item>
        <item>教材</item>
    </bookTypes>
renyh commented 5 months ago

setBiblioInfo

SetBiblioInfo() 和 CopyBiblioInfo() 这两个API均是产生此类型的操作日志,但action不同。所以同一个元素如record,理解的时候,要根据是哪个API调的,来理解其含义。

record:在SetBiblioInfo()相关日志里,表示新记录;在CopyBiblioInfo()相关日志里,表示目标记录。 record元素有时会有一个属性newBiblioParam="(null)",表示该元素的内容不是参数传进来的。如果调CopyBiblioInfo() API给strNewBiblio传了信息,则record内容为参数传的值,且不会有newBiblioParam="(null)"属性,操作时会以新内容覆盖目标书目;如果SetBiblioInfo() API给strBiblio参数传了值,也是同样道理。

oldRecord:在SetBiblioInfo()相关日志里,表示老记录;在CopyBiblioInfo()相关日志里,表示源记录。

在SetBiblioInfo()相关日志里,record与oldRecord的recPath一定相同。在CopyBiblioInfo()相关日志里,record与oldRecord的recPath是不同的路径。

new、change、delete、onlydeletebiblio、onlydeletesubrecord

SetBiblioInfo() API 产生的日志action有:new、change、delete、onlydeletebiblio、onlydeletesubrecord。 new:新增 change:修改 delete:删除 onlydeletebiblio:仅删除书目,不删除下级记录(册/订购/期/评注) onlydeletesubrecord:仅删除下级记录(册/订购/期/评注)

move、copy、onlymovebiblio、onlycopybiblio

CopyBiblioInfo() API 产生的日志action有:move、copy、onlymovebiblio、onlycopybiblio move 和 copy 的区别:move后,源记录(及对象和下级记录)不存在,copy后,源记录(及对象和下级记录)不变。

record 元素中是目标位置记录的实际写入的 XML 内容(注意已经经过了权限过滤处理); oldRecord 元素中是源位置记录的 XML 内容(从数据库中读出的)。

record 元素可以使用 newBiblioParam 属性,如果其值为 "(null)" 表示 API 当时请求的时候,strNewBiblioParam 参数值为空。注意即使是这种情况下,record 元素的文本值依然可以包含一个 XML 记录内容,这是目标位置实际写入的内容。

mergeStyle元素

此API产生的日志中,有一个关键的mergeStyle元素,表示当时操作时选择的合并方式: mergeStyle参数是由书目和下级记录两类style参数,以逗号组合。

书目style分为两种(其一,不能同时存在,缺省认为reserve_source): reserve_source:采用源书目(及对象) reserve_target:采用目标书目(及对象)

下级(册/订购/期/评注)style分成3种(其一,不能同时存在,缺省认为combine_subrecord): combine_subrecord:合并源和目标的下级记录 missing_source_subrecord:采用目标的下级记录 overwrite_target_subrecord:采用源的下级记录(目前不支持)

当mergeStyle为空时,表示书目采用源reserve_source,下级记录采用源和目标合并方式combine_subrecord,即等同reserve_source,combine_subrecord

关于file_reserve_xxx参数 注:新版本mergeStyle 不再支持 file_reserve_xxx参数。只要有 reserve_source,就会保证源记录中的对象复制或者移动到目标记录;只要有 reserve_target,就会保证目标记录中最后保留它自己的原有对象(源记录中的对象和 file 元素都不会过来)。 以前老日志中mergeStyle包括的file_reserve_xxx 在恢复时不会发生作用。

overwritedRecord 另外此API产生的日志,还有一个overwritedRecord元素,表示目标书目记录被覆盖以前的信息,当copy或move时如果目标位置已经存在记录,则日志中会有此元素。


各个元素介绍

moveEntityRecords 元素和 copyEntityRecords 元素

这是一个容器元素。其下有一个或多个 record 元素。record 元素内文本内容目前为空。 record 元素有 recPath 和 targetRecPath 和 newBarcode 属性和 newRefID 属性(2024/5/1 增加)。recPath属性为源记录路径,targetRecPath为目标记录路径。特殊地,如果 targetRecPath 属性值为空,表示删除了 recPath 属性值这条记录。newBarcode 属性为复制时需要对目标记录的 barcode 元素修改成的新值。newRefID 属性为复制时需要对目标记录的 refID 元素修改成的新值。这主要是因为 dp2library 服务器中不允许册条码号出现重复的缘故,如果原样复制一个册记录会引起册条码号重复,必须在复制时把目标内容中的条码号修改(一般是增加一个随机的后缀字符串)。册参考 ID 同样不允许重复,复制册记录的时候童谣需要把目标内容中的参考 ID 修改。

    <moveEntityRecords>
        <record recPath="ryh期刊实体/1" targetRecPath="ryh期刊2实体/1" />
    </moveEntityRecords>
    <moveOrderRecords>
        <record recPath="ryh期刊订购/1" targetRecPath="ryh期刊2订购/1" />
    </moveOrderRecords>
    <moveIssueRecords>
        <record recPath="ryh期刊期/1" targetRecPath="ryh期刊2期/1" />
    </moveIssueRecords>
    <moveCommentRecords>
        <record recPath="ryh期刊评注/1" targetRecPath="ryh期刊2评注/1" />
    </moveCommentRecords>

deletedXXXRecords

当操作过程中有连带删除了下级记录时,日志会有这些元素。 这是一个容器元素。其下有一个或多个 record 元素。record 元素内文本内容目前为空。 record 元素有 recPath属性为源记录路径。

    <deletedEntityRecords>
        <record recPath="ryh期刊实体/1" />
    </deletedEntityRecords>
    <deletedOrderRecords>
        <record recPath="ryh期刊订购/1" />
    </deletedOrderRecords>
    <deletedIssueRecords>
        <record recPath="ryh期刊期/1" />
    </deletedIssueRecords>
    <deletedCommentRecords>
        <record recPath="ryh期刊评注/1" />
    </deletedCommentRecords>

日志格式总览

<root>
    <operation>setBiblioInfo</operation>
    <action>...</action>// SetBiblioinfo()产生new/change/delete/onlydeletebiblio/onlydeletesubrecord;CopyBiblioinfo()产生move/copy/onlymovebiblio/onlycopybiblio

    <oldRecord recPath="ryh期刊/1">...</oldRecord>
    <record recPath="ryh期刊2/1" newBiblioParam="(null)">...</record> 

     // 以下deletedXXXRecords元素,当操作过程中涉及到删除下级记录时,才会有此类元素
    <deletedEntityRecords>
        <record recPath="ryh期刊实体/1" />
    </deletedEntityRecords>
    <deletedOrderRecords>
        <record recPath="ryh期刊订购/1" />
    </deletedOrderRecords>
    <deletedIssueRecords>
        <record recPath="ryh期刊期/1" />
    </deletedIssueRecords>
    <deletedCommentRecords>
        <record recPath="ryh期刊评注/1" />
    </deletedCommentRecords>

    // 以下moveXXXRecords元素move和copy时涉及到移动源书目下级记录才会有此类元素
    <moveEntityRecords>
        <record recPath="ryh期刊实体/1" targetRecPath="ryh期刊2实体/1" />
    </moveEntityRecords>
    <moveOrderRecords>
        <record recPath="ryh期刊订购/1" targetRecPath="ryh期刊2订购/1" />
    </moveOrderRecords>
    <moveIssueRecords>
        <record recPath="ryh期刊期/1" targetRecPath="ryh期刊2期/1" />
    </moveIssueRecords>
    <moveCommentRecords>
        <record recPath="ryh期刊评注/1" targetRecPath="ryh期刊2评注/1" />
    </moveCommentRecords>

    <mergeStyle>...</mergeStyle>  //move或copy时,合并的处理方式,有6种组合,详情说明见上。

    <overwritedRecord recPath="ryh期刊2/1">...</overwritedRecord>  //当move或copy时,目标位置已有记录时,会产生此元素。

    <operator>supervisor</operator>
    <operTime>Wed, 24 Apr 2024 15:02:37 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

各类日志样例

new 新建书目

<root>
  <operation>setBiblioInfo</operation>
  <action>new</action>
  <record recPath="中文图书/1">...</record>  marc记录,转义的xml
  <operator>supervisor</operator>
  <operTime>Wed, 21 Feb 2024 09:34:27 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

change 修改书目

<root>
  <operation>setBiblioInfo</operation>
  <action>change</action>
  <oldRecord recPath="中文图书/2">...</oldRecord>
  <record recPath="中文图书/2">...</record>
  <operator>supervisor</operator>
  <operTime>Wed, 21 Feb 2024 15:53:41 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

delete 删除书目

<root>
  <operation>setBiblioInfo</operation>
  <action>delete</action>
  <oldRecord recPath="中文图书/2">...</oldRecord>
  <operator>supervisor</operator>
  <operTime>Wed, 21 Feb 2024 15:53:44 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

delete 删除书目带下级记录

<root>
    <operation>setBiblioInfo</operation>
    <action>delete</action>
    <oldRecord recPath="ryh期刊/1">...</oldRecord>
    <deletedEntityRecords>
        <record recPath="ryh期刊实体/1" />
    </deletedEntityRecords>
    <deletedOrderRecords>
        <record recPath="ryh期刊订购/1" />
    </deletedOrderRecords>
    <deletedIssueRecords>
        <record recPath="ryh期刊期/1" />
    </deletedIssueRecords>
    <deletedCommentRecords>
        <record recPath="ryh期刊评注/1" />
    </deletedCommentRecords>
    <operator>supervisor</operator>
    <operTime>Sun, 28 Apr 2024 10:54:07 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

onlydeletebiblio 仅删除书目,不删除下级记录

<root>
    <operation>setBiblioInfo</operation>
    <action>onlydeletebiblio</action>
    <oldRecord recPath="ryh期刊/1">...</oldRecord>
    <operator>supervisor</operator>
    <operTime>Sun, 28 Apr 2024 11:48:26 +0800</operTime>
    <clientAddress via="http://localhost/dp2library/xe/rest">localhost</clientAddress>
    <version>1.10</version>
</root>

onlydeletesubrecord 仅删除下级记录,不删除书目记录

<root>
    <operation>setBiblioInfo</operation>
    <action>onlydeletesubrecord</action>
    <oldRecord recPath="ryh期刊/1">...</oldRecord>
    <deletedEntityRecords>
        <record recPath="ryh期刊实体/1" />
    </deletedEntityRecords>
    <deletedOrderRecords>
        <record recPath="ryh期刊订购/1" />
    </deletedOrderRecords>
    <deletedIssueRecords>
        <record recPath="ryh期刊期/1" />
    </deletedIssueRecords>
    <deletedCommentRecords>
        <record recPath="ryh期刊评注/1" />
    </deletedCommentRecords>
    <operator>supervisor</operator>
    <operTime>Sun, 28 Apr 2024 12:04:23 +0800</operTime>
    <clientAddress via="http://localhost/dp2library/xe/rest">localhost</clientAddress>
    <version>1.10</version>
</root>

目标没有记录的情况-move 移动书目

<root>
    <operation>setBiblioInfo</operation>
    <action>move</action>
    <oldRecord recPath="ryh期刊/1">...</oldRecord>
    <record recPath="ryh期刊2/1" newBiblioParam="(null)">...</record>
    <moveEntityRecords>
        <record recPath="ryh期刊实体/1" targetRecPath="ryh期刊2实体/1" />
    </moveEntityRecords>
    <moveOrderRecords>
        <record recPath="ryh期刊订购/1" targetRecPath="ryh期刊2订购/1" />
    </moveOrderRecords>
    <moveIssueRecords>
        <record recPath="ryh期刊期/1" targetRecPath="ryh期刊2期/1" />
    </moveIssueRecords>
    <moveCommentRecords>
        <record recPath="ryh期刊评注/1" targetRecPath="ryh期刊2评注/1" />
    </moveCommentRecords>
    <mergeStyle>...</mergeStyle>  //老版本会有file_reserve_source
    <operator>supervisor</operator>
    <operTime>Wed, 24 Apr 2024 15:02:37 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

目标没有记录的情况-onlymovebiblio 仅移动书目,不移动下级记录

<root>
    <operation>setBiblioInfo</operation>
    <action>onlymovebiblio</action>
    <oldRecord recPath="ryh期刊/1">...</oldRecord>
    <record recPath="ryh期刊2/1" newBiblioParam="(null)">...</record>
    <mergeStyle>
    </mergeStyle>
    <operator>supervisor</operator>
    <operTime>Sun, 28 Apr 2024 11:37:19 +0800</operTime>
    <clientAddress via="http://localhost/dp2library/xe/rest">localhost</clientAddress>
    <version>1.10</version>
</root>

目标没有记录的情况-copy 拷贝书目

<root>
    <operation>setBiblioInfo</operation>
    <action>copy</action>
    <oldRecord recPath="ryh期刊/1">...</oldRecord>
    <copyEntityRecords>
        <record recPath="ryh期刊实体/1" targetRecPath="ryh期刊2实体/1" newBarcode="Q001_7HFMV3CLPE-D2DTVQ8VVSQ" />
    </copyEntityRecords>
    <copyOrderRecords>
        <record recPath="ryh期刊订购/1" targetRecPath="ryh期刊2订购/1" />
    </copyOrderRecords>
    <copyIssueRecords>
        <record recPath="ryh期刊期/1" targetRecPath="ryh期刊2期/1" />
    </copyIssueRecords>
    <copyCommentRecords>
        <record recPath="ryh期刊评注/1" targetRecPath="ryh期刊2评注/1" />
    </copyCommentRecords>
    <record recPath="ryh期刊2/5" newBiblioParam="(null)">...</record>
    <mergeStyle>reserve_source</mergeStyle>  // 老版本日志还file_reserve_source,此参数已作废
    <operator>supervisor</operator>
    <operTime>Thu, 25 Apr 2024 16:24:16 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

目标没有记录的情况-onlycopybiblio 仅拷贝书目,不copy下级记录

<root>
    <operation>setBiblioInfo</operation>
    <action>onlycopybiblio</action>
    <oldRecord recPath="ryh期刊/1">...</oldRecord>
    <record recPath="ryh期刊2/2" newBiblioParam="(null)">...</record>
    <mergeStyle>reserve_source,missing_source_subrecord</mergeStyle> //// 老版本日志有file_reserve_source,此参数已作废
    <operator>supervisor</operator>
    <operTime>Fri, 26 Apr 2024 15:21:10 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

move时,目标位置已有记录,进行合并的日志

1)move,书目=reserve_source,下级记录=combine_subrecord

<root>
    <operation>setBiblioInfo</operation>
    <action>move</action>
    <oldRecord recPath="ryh期刊/1">...</oldRecord>
    <moveEntityRecords>
        <record recPath="ryh期刊实体/1" targetRecPath="ryh期刊2实体/2" />
    </moveEntityRecords>
    <moveOrderRecords>
        <record recPath="ryh期刊订购/1" targetRecPath="ryh期刊2订购/2" />
    </moveOrderRecords>
    <moveIssueRecords>
        <record recPath="ryh期刊期/1" targetRecPath="ryh期刊2期/2" />
    </moveIssueRecords>
    <moveCommentRecords>
        <record recPath="ryh期刊评注/1" targetRecPath="ryh期刊2评注/2" />
    </moveCommentRecords>
    <record recPath="ryh期刊2/1" newBiblioParam="(null)">...</record>
    <overwritedRecord recPath="ryh期刊2/1">...</overwritedRecord>
    <mergeStyle>reserve_source,combine_subrecord</mergeStyle>
</root>

2)move,书目=reserve_source,下级记录=missing_source_subrecord

(todo)是否直接用deletedEntityRecords元素?而不是改变moveEntityRecords的含义,让moveEntityRecords元素始终保持两个属性。

<root>
    <operation>setBiblioInfo</operation>
    <action>move</action>
    <oldRecord recPath="ryh期刊/1">...</oldRecord>
    <moveEntityRecords>
        <record recPath="ryh期刊实体/1" />
    </moveEntityRecords>
    <moveOrderRecords>
        <record recPath="ryh期刊订购/1" />
    </moveOrderRecords>
    <moveIssueRecords>
        <record recPath="ryh期刊期/1" />
    </moveIssueRecords>
    <moveCommentRecords>
        <record recPath="ryh期刊评注/1" />
    </moveCommentRecords>
    <record recPath="ryh期刊2/1" newBiblioParam="(null)">...</record>
    <overwritedRecord recPath="ryh期刊2/1">...</overwritedRecord>

    <mergeStyle>reserve_source,missing_source_subrecord</mergeStyle>
</root>

3)move,书目=reserve_source,下级记录=overwrite_target_subrecord

(目前不支持)

4)move,书目=reserve_target,下级记录=combine_subrecord

<root>
    <operation>setBiblioInfo</operation>
    <action>move</action>
    <oldRecord recPath="ryh期刊/1">...</oldRecord>
    <moveEntityRecords>
        <record recPath="ryh期刊实体/1" targetRecPath="ryh期刊2实体/2" />
    </moveEntityRecords>
    <moveOrderRecords>
        <record recPath="ryh期刊订购/1" targetRecPath="ryh期刊2订购/2" />
    </moveOrderRecords>
    <moveIssueRecords>
        <record recPath="ryh期刊期/1" targetRecPath="ryh期刊2期/2" />
    </moveIssueRecords>
    <moveCommentRecords>
        <record recPath="ryh期刊评注/1" targetRecPath="ryh期刊2评注/2" />
    </moveCommentRecords>
    <record recPath="ryh期刊2/1" newBiblioParam="(null)">...</record>
    <overwritedRecord recPath="ryh期刊2/1">...</overwritedRecord>
    <mergeStyle>reserve_target,combine_subrecord</mergeStyle>
</root>

5)move,书目=reserve_target,下级记录=missing_source_subrecord

<root>
    <operation>setBiblioInfo</operation>
    <action>move</action>
    <oldRecord recPath="ryh期刊/1">...</oldRecord>
    <moveEntityRecords>
        <record recPath="ryh期刊实体/1" />
    </moveEntityRecords>
    <moveOrderRecords>
        <record recPath="ryh期刊订购/1" />
    </moveOrderRecords>
    <moveIssueRecords>
        <record recPath="ryh期刊期/1" />
    </moveIssueRecords>
    <moveCommentRecords>
        <record recPath="ryh期刊评注/1" />
    </moveCommentRecords>
    <record recPath="ryh期刊2/1" newBiblioParam="(null)">...</record>
    <overwritedRecord recPath="ryh期刊2/1">...</overwritedRecord>
    <mergeStyle>reserve_target,missing_source_subrecord</mergeStyle>
</root>

6)move,书目=reserve_target,下级记录=overwrite_target_subrecord

(目前未实现)

copy时,目标位置已有记录,进行合并的日志

1)copy,mergeStyle=reserve_source,combine_subrecord

<root>
    <operation>setBiblioInfo</operation>
    <action>copy</action>
    <oldRecord recPath="ryh期刊/1">...</oldRecord>
    <copyEntityRecords>
        <record recPath="ryh期刊实体/1" targetRecPath="ryh期刊2实体/2" newBarcode="Q001_D2FS5DS1L0QFTP7AAG3EYG" />
    </copyEntityRecords>
    <copyOrderRecords>
        <record recPath="ryh期刊订购/1" targetRecPath="ryh期刊2订购/2" />
    </copyOrderRecords>
    <copyIssueRecords>
        <record recPath="ryh期刊期/1" targetRecPath="ryh期刊2期/2" />
    </copyIssueRecords>
    <copyCommentRecords>
        <record recPath="ryh期刊评注/1" targetRecPath="ryh期刊2评注/2" />
    </copyCommentRecords>
    <record recPath="ryh期刊2/1" newBiblioParam="(null)">...</record>
    <overwritedRecord recPath="ryh期刊2/1">...</overwritedRecord>
    <mergeStyle>reserve_source,combine_subrecord</mergeStyle>
</root>

2)copy,mergeStyle=reserve_source,missing_source_subrecord


老版本
<root>
    <operation>setBiblioInfo</operation>
    <action>copy</action>
    <oldRecord recPath="ryh期刊/1">...</oldRecord>
    <record recPath="ryh期刊2/1" newBiblioParam="(null)">...</record>
    <overwritedRecord recPath="ryh期刊2/1">...</overwritedRecord>
    <mergeStyle>reserve_source,missing_source_subrecord</mergeStyle>
</root>

新版本
<root>
    <operation>setBiblioInfo</operation>
    <action>copy</action>
    <oldRecord recPath="ryh期刊/1">...</oldRecord>
    <copyEntityRecords>
        <record recPath="ryh期刊实体/1" />
    </copyEntityRecords>
    <copyOrderRecords>
        <record recPath="ryh期刊订购/1" />
    </copyOrderRecords>
    <copyIssueRecords>
        <record recPath="ryh期刊期/1" />
    </copyIssueRecords>
    <copyCommentRecords>
        <record recPath="ryh期刊评注/1" />
    </copyCommentRecords>
    <record recPath="ryh期刊2/1" newBiblioParam="(null)">...</record>
    <overwritedRecord recPath="ryh期刊2/1">...</overwritedRecord>
    <mergeStyle>reserve_source,missing_source_subrecord</mergeStyle>
    <operator>supervisor</operator>
    <operTime>Tue, 30 Apr 2024 21:47:18 +0800</operTime>
    <clientAddress via="http://localhost/dp2library/xe/rest">localhost</clientAddress>
    <version>1.10</version>
</root>

3)copy,mergeStyle=reserve_source,overwrite_target_subrecord

目前不支持

4)copy,mergeStyle=reserve_target,combine_subrecord

<root>
    <operation>setBiblioInfo</operation>
    <action>copy</action>
    <oldRecord recPath="ryh期刊/1">...</oldRecord>
    <copyEntityRecords>
        <record recPath="ryh期刊实体/1" targetRecPath="ryh期刊2实体/2" newBarcode="Q001_Q-8I6SC6XE6P5ZTGYFDNHW" />
    </copyEntityRecords>
    <copyOrderRecords>
        <record recPath="ryh期刊订购/1" targetRecPath="ryh期刊2订购/2" />
    </copyOrderRecords>
    <copyIssueRecords>
        <record recPath="ryh期刊期/1" targetRecPath="ryh期刊2期/2" />
    </copyIssueRecords>
    <copyCommentRecords>
        <record recPath="ryh期刊评注/1" targetRecPath="ryh期刊2评注/2" />
    </copyCommentRecords>
    <record recPath="ryh期刊2/1" newBiblioParam="(null)">...</record>
    <overwritedRecord recPath="ryh期刊2/1">...</overwritedRecord>
    <mergeStyle>reserve_target,combine_subrecord</mergeStyle>
</root>

5)copy,mergeStyle=reserve_target,missing_source_subrecord

老版本
<root>
    <operation>setBiblioInfo</operation>
    <action>copy</action>
    <oldRecord recPath="ryh期刊/1">...</oldRecord>
    <record recPath="ryh期刊2/1" newBiblioParam="(null)">...</record>
    <overwritedRecord recPath="ryh期刊2/1">...</overwritedRecord>
    <mergeStyle>reserve_target,missing_source_subrecord</mergeStyle>
</root>

新版本
<root>
    <operation>setBiblioInfo</operation>
    <action>copy</action>
    <oldRecord recPath="ryh期刊/1">....</oldRecord>
    <copyEntityRecords>
        <record recPath="ryh期刊实体/1" />
    </copyEntityRecords>
    <copyOrderRecords>
        <record recPath="ryh期刊订购/1" />
    </copyOrderRecords>
    <copyIssueRecords>
        <record recPath="ryh期刊期/1" />
    </copyIssueRecords>
    <copyCommentRecords>
        <record recPath="ryh期刊评注/1" />
    </copyCommentRecords>
    <record recPath="ryh期刊2/1" newBiblioParam="(null)">...</record>
    <overwritedRecord recPath="ryh期刊2/1">...</overwritedRecord>
    <mergeStyle>reserve_target,missing_source_subrecord</mergeStyle>
    <operator>supervisor</operator>
    <operTime>Tue, 30 Apr 2024 22:04:05 +0800</operTime>
    <clientAddress via="http://localhost/dp2library/xe/rest">localhost</clientAddress>
    <version>1.10</version>
</root>

6)copy,mergeStyle=reserve_target,overwrite_target_subrecord

目前不支持

renyh commented 5 months ago

writeRes

说明

requestResPath 元素是 API 请求当时的参数值。有可能路径中的记录 ID 部分为问号。 resPath 元素是实际操作的对象的路径。 注: 当 style 元素内容为 "delete" 时,日志记录中不会有 resPath 元素。这是因为 delete 使用的都是确定的路径,路径中的记录 ID 部分不会为问号或者空。


通过writeRes接口增删改违约金记录时,会写writeRes类型的日志,根据路径是否带?号,决定是新增还是修改。删除时,style=delete。

但通过writeRes接口写以下数据时,是产生对应数据的日志,不会产生writeRes日志。 1)用writeres对"读者"进行新增/修改/删除时,产生对应的setreaderinfo的new/change/delete。 2)用writeres对"书目"进行新增/修改/删除时,产生对应的setbiblioinfo的new/change/delete。 3)用writeres对"册"进行新增/修改/删除时,产生对应的setEntity的new/change/delete。 4)用writeres对"订购"进行新增/修改/删除时,产生对应的setOrder的new/change/delete日志。 5)用writeres对"期"进行新增/修改/删除时,产生对应的setIssue的new/change/delete日志。 6)用writeres对"评注"进行新增/修改/删除时,产生对应的setComment的new/change/delete日志。

用WriteRes写数据库中记录

新增记录

<root>
    <operation>writeRes</operation>

    <requestResPath>违约金/?</requestResPath>
    <resPath>违约金/2</resPath>

    <ranges>0-856</ranges>
    <totalLength>857</totalLength>
    <metadata></metadata>

    <style> </style>

    <operator>supervisor</operator>
    <operTime>Tue, 07 May 2024 11:35:37 +0800</operTime>
    <clientAddress via="http://localhost/dp2library/xe/rest">localhost</clientAddress>
    <version>1.10</version>
</root>

修改记录

<root>
    <operation>writeRes</operation>

    <requestResPath>违约金/1</requestResPath>
    <resPath>违约金/1</resPath>

    <ranges>0-856</ranges>
    <totalLength>857</totalLength>
    <metadata></metadata>

    <style></style>

    <operator>supervisor</operator>
    <operTime>Tue, 07 May 2024 11:38:07 +0800</operTime>
    <clientAddress via="http://localhost/dp2library/xe/rest">localhost</clientAddress>
    <version>1.10</version>
</root>

删除 style=delete

<root>
    <operation>writeRes</operation>

    <requestResPath>违约金/1</requestResPath>

    <style>delete</style>

    <operator>supervisor</operator>
    <operTime>Tue, 07 May 2024 11:33:35 +0800</operTime>
    <clientAddress via="http://localhost/dp2library/xe/rest">localhost</clientAddress>
    <version>1.10</version>
</root>

style说明

strStyle的值为ignorechecktimestamp/ createdir/ autocreatedir/checkcreatingtimestamp/delete中一个和多个的组合。

“ignorechecktimestamp” 表示本API不检查baInputTimestamp参数中的时间戳和当前资源的时间戳是否吻合。 (todo目前版本还有会检查)。 checkcreatingtimestamp 表示,如果记录以前不存在,新创建,则要检查请求参数中的 timestamp 必须是 null,否则就报错。 (todo目前版本新建了时输入了时间戳,也会保存成功)。 delete 2015/9/3 新增删除资源的功能。(todo,目前发现只能删除数据库记录,还不能删除配置文件和目录)

下面两个功能是创建配置文件和目录有关 “createdir”表示根据strResPath参数指定的路径创建一个目录。
“autocreatedir”表示根据strRecPath参数指定的路径,自动创建中间层尚未创建的子目录。

配置文件与目录相关

写配置文件

<root>
    <operation>writeRes</operation>

    <requestResPath>测试中文实体/cfgs/browse</requestResPath>
    <resPath>测试中文实体/cfgs/browse</resPath>

    <ranges>0-2064</ranges>
    <totalLength>2065</totalLength>
    <metadata>&lt;file mimetype="text" localpath="" /&gt;</metadata>
    <style>
    </style>

    <operator>supervisor</operator>
    <operTime>Tue, 19 Mar 2024 10:48:35 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

创建目录 style=createdir

<root>
    <operation>writeRes</operation>

    <requestResPath>ryh期刊/cfgs/a</requestResPath>
    <resPath>ryh期刊/cfgs/a</resPath>
    <ranges>0-853</ranges>
    <totalLength>854</totalLength>
    <metadata>
    </metadata>
    <style>createdir</style>

    <operator>supervisor</operator>
    <operTime>Wed, 08 May 2024 10:03:27 +0800</operTime>
    <clientAddress via="http://localhost/dp2library/xe/rest">localhost</clientAddress>
    <version>1.10</version>
</root>

创建配置文件时,自动创建目录 style=autocreatedir

<root>
    <operation>writeRes</operation>

    <requestResPath>ryh期刊/cfgs/b/1</requestResPath>
    <resPath>ryh期刊/cfgs/b/1</resPath>

    <ranges>0-856</ranges>
    <totalLength>857</totalLength>
    <metadata>
    </metadata>

    <style>autocreatedir</style>

    <operator>supervisor</operator>
    <operTime>Wed, 08 May 2024 10:13:49 +0800</operTime>
    <clientAddress via="http://localhost/dp2library/xe/rest">localhost</clientAddress>
    <version>1.10</version>
</root>

写对象

注:如果对象文件比较大,会产生多个writeRes写对象的日志。

<root>
  <operation>writeRes</operation>

  <requestResPath>中文图书/1/object/2</requestResPath>
  <resPath>中文图书/0000000001/object/2</resPath>

  <ranges>0-259221</ranges>
  <totalLength>259222</totalLength>
  <metadata>&lt;file mimetype="image/x-png" localpath="C:\Users\renyh\AppData\Local\Apps\2.0\Data\8RC52LOM.AXE\QZQBDM3Z.GY7\dp2c..tion_f4eef041ba8cb13d_0003.004e_43cdd92389045b27\Data\~temp_make_pic_2.png" size="259222" lastmodified="2024/2/19 15:11:59" id="2" path="net.pipe://localhost/dp2kernel/share/?中文图书/1/object/2" timestamp="3b5d1c73b7cbdb0800000000000000ef" readCount="4" /&gt;</metadata>

  <style>
  </style>

  <operator>supervisor</operator>
  <operTime>Wed, 21 Feb 2024 09:34:28 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

写大对象的日志样例

<root>
    <operation>setBiblioInfo</operation>
    <action>change</action>
    <oldRecord recPath="ryh测试库/1">...</oldRecord>
    <record recPath="ryh测试库/1">...</record>
    <operator>supervisor</operator>
    <operTime>Fri, 10 May 2024 11:16:01 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

===

<root>
    <operation>writeRes</operation>
    <operator>supervisor</operator>
    <operTime>Fri, 10 May 2024 11:16:01 +0800</operTime>
    <requestResPath>ryh测试库/1/object/0</requestResPath>
    <resPath>ryh测试库/1/object/0</resPath>
    <ranges>0-511999</ranges>
    <totalLength>1547755</totalLength>
    <metadata>
    </metadata>
    <style>gzip</style>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

===

<root>
    <operation>writeRes</operation>
    <operator>supervisor</operator>
    <operTime>Fri, 10 May 2024 11:16:02 +0800</operTime>
    <requestResPath>ryh测试库/1/object/0</requestResPath>
    <resPath>ryh测试库/1/object/0</resPath>
    <ranges>512000-1023999</ranges>
    <totalLength>1547755</totalLength>
    <metadata>
    </metadata>
    <style>gzip</style>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

===

<root>
    <operation>writeRes</operation>
    <operator>supervisor</operator>
    <operTime>Fri, 10 May 2024 11:16:02 +0800</operTime>
    <requestResPath>ryh测试库/1/object/0</requestResPath>
    <resPath>ryh测试库/1/object/0</resPath>
    <ranges>1024000-1535999</ranges>
    <totalLength>1547755</totalLength>
    <metadata>
    </metadata>
    <style>gzip</style>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

===

<root>
    <operation>writeRes</operation>
    <operator>supervisor</operator>
    <operTime>Fri, 10 May 2024 11:16:02 +0800</operTime>
    <requestResPath>ryh测试库/1/object/0</requestResPath>
    <resPath>ryh测试库/1/object/0</resPath>
    <ranges>1536000-1547754</ranges>
    <totalLength>1547755</totalLength>
    <metadata>&lt;file mimetype="text/xml" localpath="C:\000\log4net.xml" /&gt;</metadata>
    <style>gzip</style>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>
renyh commented 5 months ago

预约操作reservation

读者预约图书,有这几种操作:new创建预约,delete取消预约,merge合并预约,split拆分预约,对应日志不同的动作action。 action的值:

注:后台系统还有一个任务检查预约到期未取,自动消失预约,这种情况没法日志,后面也需要加一下。 2024/5/18后台自动执行的检查 预约到书 是否过期,对过期的预约记录自动设置outof,并且将读者的reservations元素去掉,增加outofReservations,这个过程建议要增加一种预约reservation的action,目前版本是不会产生相关日志的。

另外目前针对预约日志,恢复日志的时候不处理,因为预约到书有时效性(默认是2天),到书不取超过有效期就自动取消了。在恢复 setReaderInfo 和 setEntity 时,也注意不恢复reservations元素。(todo检查一下)

改进点: 增加了一个 itemRefIdList 元素。原有 itemBarcodeList 元素依然有效 增加了一个 readerRefID 元素。原有 readerBarcode 元素依然有效 注意operation,读者创建的预约,也是@refID:xxx形态

格式样例

<root>
  <libraryCode>
  </libraryCode>
  <operation>reservation</operation>
  <action>new/delete/merge/split之一</action> 动作

  <readerBarcode>P00002</readerBarcode>
  <readerRefID>8157937d-43cd-40fd-a012-14bb835c6da1</readerRefID>   //2024新增

  <itemBarcodeList>B0001</itemBarcodeList>
  <itemRefIdList>@refID:fd136d31-1399-4733-a7bb-3cd1a1ed2a69</itemRefIdList>  //2024新增

  <operator>@refID:8157937d-43cd-40fd-a012-14bb835c6da1</operator>  //读者创建的预约,新版本也是@refID:xxx形态
  <operTime>Wed, 21 Feb 2024 14:21:42 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

merge或split特殊点

itemBarcodeList和itemRefIdList是多册,中间以逗号分隔。注itemBarcodeList这里是以接口参数的值,所以也是直接写成@refID:xxx形态。

<root>
...
  <action>merge/split之一</action>

  <readerBarcode>P00001</readerBarcode>
  <readerRefID>610cd0db-1709-407e-a1d4-e4164791856b</readerRefID>

  <itemBarcodeList>@refID:00453ffd-136b-4d65-a7c9-b1161d5938b9,@refID:fd136d31-1399-4733-a7bb-3cd1a1ed2a69</itemBarcodeList>
  <itemRefIdList>@refID:00453ffd-136b-4d65-a7c9-b1161d5938b9,@refID:fd136d31-1399-4733-a7bb-3cd1a1ed2a69</itemRefIdList>
...
renyh commented 5 months ago

changeReaderPassword

<root>
    <libraryCode>
    </libraryCode>
    <operation>changeReaderPassword</operation>
    <newPassword>$2a$11$oBaZ7UTpWfXmoXR/BUysMOyca6yqdu/YIqn7EZmrKulq7lASK0MWO</newPassword>
    <type>bcrypt</type>  //密码类型
    <expire>Thu, 22 Aug 2024 16:04:55 +0800</expire>  //失效期
    <readerBarcode>P001</readerBarcode>
    <readerRefID>9131f365-772d-4ce1-b6ae-334380d41a21</readerRefID>
    <readerRecord recPath="ryh读者/1">...</readerRecord>
    <operator>supervisor</operator>
    <operTime>Fri, 24 May 2024 16:04:55 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

2024/5 日志记录中增加了一个 type 元素。注意不是 password 元素的 type 属性。另外,先前版本本来就有可能在日志记录中写入 exipre 属性,对应于读者记录中的 password 元素的 expire 属性内容,表示密码失效期。注意用能够体现密码失效期的案例进行一下测试验证。 注意测试的时候,用 changeReaderPassword 日志动作恢复,除了观察读者记录中的 password 元素和相关属性到位以外,最好还用内务或者 API 前端利用(修改后的新密码针对)读者账户登录一下,看看是否可以登录成功,成功了才表示修改密码兑现了。 oldPassword 和 oldReaderRecord 元素暂时不增加了,因为增加后还需要测试检查 GetOperLog() API 获取这个日志记录时候是否正确过滤了相关(password)元素内容,整个比较麻烦,留待以后有精力的时候再增补

renyh commented 5 months ago

setUser

new

<root>
  <operation>setUser</operation>
  <action>new</action>
  <operator>supervisor</operator>
  <operTime>Wed, 21 Feb 2024 15:32:59 +0800</operTime>
  <account name="test" rights="borrow,return" libraryCode="" access="" comment="" binding="" location="">
  </account>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

change

<root>
  <operation>setUser</operation>
  <action>change</action>
  <operator>supervisor</operator>
  <operTime>Wed, 21 Feb 2024 14:06:47 +0800</operTime>
  <oldAccount name="supervisor" rights="borrow,return" type="">
  </oldAccount>
  <account name="supervisor" rights="borrow,return,renew" type="" libraryCode="" access="" comment="" binding="" location="">
  </account>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

delete

<root>
  <operation>setUser</operation>
  <action>delete</action>
  <operator>supervisor</operator>
  <operTime>Wed, 21 Feb 2024 15:35:27 +0800</operTime>
  <oldAccount name="test" rights="borrow,return" libraryCode="" access="" comment="" binding="" location="">
  </oldAccount>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>
DigitalPlatform commented 5 months ago

repairBorrowInfo

    <root>
        <operation>repairBorrowInfo</operation> 
        <action>...</action> 具体动作 有 repairreaderside repairitemside
        <readerBarcode>...</readerBarcode>
        <readerRefID>...</readerRefID>    <!-- 2024/2/22 增加 -->
        <itemBarcode>...</itemBarcode>
        <itemRefID>...</itemRefID>    <!-- 2024/2/22 增加 -->
        <confirmItemRecPath>...</confirmItemRecPath> 辅助判断用的册记录路径
        <operator>test</operator> 
        <operTime>Fri, 08 Dec 2006 10:12:20 GMT</operTime> 

        <!-- 2024/2/22 增加 -->
        <readerRecord recPath='...' changed='false' existing='false' readerKey='...'>...</readerRecord> 如果读者记录发生了改变,则这里记载改变后的读者记录内容
        <itemRecord recPath='...' changed='false' existing='false' itemKey='...'>...</itemRecord> 如果册记录发生了改变,则这里记载改变后的册记录内容

    </root>

readerRecord 元素和 itemRecord 元素的各个属性

recPath 属性

这是读者记录或者册记录的路径。如果读者记录或者册记录原本就不存在,recPath 属性不存在或者属性值为空。

existing 属性

表示读者记录或者册记录是否存在。缺省为 "true"。"false" 表示不存在。

(注1: 为啥(对应的读者和册)记录不存在,日志记录中 readerRecord 元素和 itemRecord 元素还存在呢?这是因为需要用元素的 existing 属性来表示记录不存在) (注2: 为啥不用日志记录中 readerRecord 元素和 itemRecord 元素的不存在表达对应的读者和册记录不存在? 这是因为 version 1.10 以前的日志记录中本来就没有定义这两个元素(也就是说不管对应的记录有没有,这两个元素都没有定义),无法通过元素不存在来表达记录不存在)

changed 属性

表示读者记录或者册记录是否在执行 API 的过程中被修改了。缺省为 "true"。"false" 表示不存在。

(注3: 在快照恢复方式下,只要 readerRecord 和 itemRecord 元素中的内容(代表记录 XML)不为空,同时 recPath 属性不为空,都要覆盖写入一次记录。这样可以增强恢复过程的健壮性和适应性)

readerKey 属性

当读者记录不存在时,操作日志记录中的 readerRecord 元素存在,并具有一个 readerKey 属性,记载了 API 中 strReaderKey 参数的值。

(注: 当读者记录不存在时,操作日志记录中的 readerBarcode 和 readerRefID 元素都不存在)

itemKey 属性

当册记录不存在时,操作日志记录中的 itemRecord 元素存在,并具有一个 itemKey 属性,记载了 API 中 strItemKey 参数的值。

(注: 当册记录不存在时,操作日志记录中的 itemBarcode 和 itemRefID 元素都不存在)

读者一侧修复

读者记录会被修改,册记录可能会被修改。

对读者记录的修改,是去掉相关的 borrow 元素。对册记录的修改,是去掉 borrower 和其它相关元素。

册一侧修复

只会修改册记录,不会修改读者记录。

对册记录的修改,是去掉 borrower 和其它相关元素。


读者借一册,然后把册记录删除,然后从读者一侧恢复。 注意日志中,针对册记录的记录,existing="false",有一个itemKey属性。

<root>
    <libraryCode>
    </libraryCode>
    <operation>repairBorrowInfo</operation>
    <action>repairreaderside</action>
    <readerBarcode>P001</readerBarcode>
    <readerRefID>9131f365-772d-4ce1-b6ae-334380d41a21</readerRefID>
    <readerRecord recPath="ryh读者/1">&lt;root&gt;&lt;barcode&gt;P001&lt;/barcode&gt;&lt;readerType&gt;本科生&lt;/readerType&gt;&lt;name&gt;任1&lt;/name&gt;&lt;department&gt;24级1班&lt;/department&gt;&lt;refID&gt;9131f365-772d-4ce1-b6ae-334380d41a21&lt;/refID&gt;&lt;libraryCode&gt;&lt;/libraryCode&gt;&lt;reservations /&gt;&lt;borrows&gt;&lt;/borrows&gt;&lt;/root&gt;</readerRecord>
    <itemRecord existing="false" itemKey="B001">
    </itemRecord>
    <operator>supervisor</operator>
    <operTime>Wed, 17 Apr 2024 09:50:55 +0800</operTime>
    <clientAddress via="http://localhost/dp2library/xe/rest">localhost</clientAddress>
    <version>1.10</version>
</root>
renyh commented 5 months ago

setOrder/setIssue/setComment

日志格式

这3类日志类似。

setOrder日志关于"订购"记录的变更,除了调setOrders() api会产生此日志,调writeRes()接口如果操作的是"订购"记录,也是产生此类型日志。 setIssue日志关于"期"记录的变更,除了调setIssues() api会产生此日志,调writeRes()接口如果操作的是"期"记录,也是产生此类型日志。 setComment日志关于"期"记录的变更,除了调setIssues() api会产生此日志,调writeRes()接口如果操作的是"期"记录,也是产生此类型日志。

action元素

action有4种动作:new/change/delete/move 注:writeres()api是根据路径是否有?号,决定日志的action。而setOrder/setIssue/setComment 则是将参数传的action原样写到日志,例如接口action=new,路径是一个已存在的记录路径,执行的是覆盖操作,但日志中依然记得action为new。

record与oldRecord元素

new/change/move时,必有record元素。 change/move/delete时,必有oldRecord 元素。 change时,record与oldRecord 元素的recPath属性值相同;move时,recPath属性值不同。

style元素

(todo这3种未记录)style元素会记录调接口writeRes()或setEntites()时传的style参数,值有ignorechecktimestamp/checkcreatingtimestamp/delete,其中ignorechecktimestamp和delete可组合使用,中间以逗号分隔。

<root>
    <operation>setOrder</operation>
    <action>new/change/delete/move之一</action>

    <record recPath="ryh期刊订购/100">...</record>
    <oldRecord recPath="ryh期刊订购/100">...</oldRecord>

    <operator>supervisor</operator>
    <operTime>Tue, 14 May 2024 16:16:19 +0800</operTime>
    <clientAddress via="http://localhost/dp2library/xe/rest">localhost</clientAddress>
    <version>1.10</version>
</root>

new

<root>
  <operation>setOrder</operation>
  <action>new</action>
  <record recPath="中文图书订购/1">...</record>

  <operator>supervisor</operator>
  <operTime>Fri, 23 Feb 2024 12:27:34 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

record内容,确保有refID

<?xml version="1.0" encoding="utf-8"?>
<root>
    <parent>1</parent>
    <index>1</index>
    <catalogNo>1</catalogNo>
    <seller>书店</seller>
    <source>本馆经费</source>
    <range>20230101-20231231</range>
    <issueCount>1</issueCount>
    <copy>2</copy>
    <price>CNY20</price>
    <distribute>保存本库:1;流通库:1</distribute>
    <class>社科</class>
    <batchNo>20240227</batchNo>
    <refID>b0bc6fcb-39cf-4ec3-b05e-905ed59416b4</refID>
    <operations>
        <operation name="create" time="Tue, 27 Feb 2024 10:53:54 +0800" operator="supervisor" />
    </operations>
</root>

change

<root>
  <operation>setOrder</operation>
  <action>change</action>
  <record recPath="中文图书订购/1">...</record>
  <oldRecord recPath="中文图书订购/1">...</oldRecord>
  <operator>supervisor</operator>
  <operTime>Fri, 23 Feb 2024 12:28:51 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

delete

<root>
  <operation>setOrder</operation>
  <action>delete</action>
  <oldRecord recPath="中文图书订购/2">&lt;root&gt;&lt;parent&gt;2&lt;/parent&gt;&lt;index&gt;1&lt;/index&gt;&lt;catalogNo&gt;2&lt;/catalogNo&gt;&lt;seller&gt;a&lt;/seller&gt;&lt;source&gt;b&lt;/source&gt;&lt;range&gt;20230101-20231231&lt;/range&gt;&lt;issueCount&gt;1&lt;/issueCount&gt;&lt;copy&gt;1&lt;/copy&gt;&lt;price&gt;CNY10&lt;/price&gt;&lt;distribute&gt;流通库:1&lt;/distribute&gt;&lt;class&gt;c&lt;/class&gt;&lt;batchNo&gt;20230803&lt;/batchNo&gt;&lt;refID&gt;e25c082a-7484-4580-a24e-8d1bf326106a&lt;/refID&gt;&lt;operations&gt;&lt;operation name="create" time="Fri, 23 Feb 2024 12:44:59 +0800" operator="supervisor" /&gt;&lt;/operations&gt;&lt;/root&gt;</oldRecord>
  <operator>supervisor</operator>
  <operTime>Fri, 23 Feb 2024 12:46:09 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

move

<root>
    <operation>setOrder</operation>
    <action>move</action>
    <record recPath="ryh期刊2订购/1">&lt;root&gt;&lt;parent&gt;1&lt;/parent&gt;&lt;index&gt;1&lt;/index&gt;&lt;catalogNo&gt;100&lt;/catalogNo&gt;&lt;seller&gt;邮局&lt;/seller&gt;&lt;source&gt;本馆&lt;/source&gt;&lt;range&gt;20240101-20241231&lt;/range&gt;&lt;issueCount&gt;12&lt;/issueCount&gt;&lt;copy&gt;2&lt;/copy&gt;&lt;price&gt;CNY10&lt;/price&gt;&lt;distribute&gt;保存本库:1;流通库:1&lt;/distribute&gt;&lt;class&gt;社科&lt;/class&gt;&lt;batchNo&gt;20240326&lt;/batchNo&gt;&lt;refID&gt;8f9b411e-5c4c-49cf-a222-07f5bf5ef637&lt;/refID&gt;&lt;operations&gt;&lt;operation name="create" time="Sun, 07 Apr 2024 15:13:40 +0800" operator="supervisor" /&gt;&lt;/operations&gt;&lt;dprms:file xmlns:dprms="http://dp2003.com/dprms" id="0" _timestamp="a6544b52d156dc080000000000000002" _metadataFile="ryh期刊订购_1_object_0.met" _objectFile="ryh期刊订购_1_object_0.bin"&gt;&lt;/dprms:file&gt;&lt;/root&gt;</record>
    <oldRecord recPath="ryh期刊订购/1">&lt;root&gt;&lt;dprms:file xmlns:dprms="http://dp2003.com/dprms" id="0" _timestamp="a6544b52d156dc080000000000000002" _metadataFile="ryh期刊订购_1_object_0.met" _objectFile="ryh期刊订购_1_object_0.bin"&gt;&lt;/dprms:file&gt;&lt;parent&gt;1&lt;/parent&gt;&lt;index&gt;1&lt;/index&gt;&lt;catalogNo&gt;100&lt;/catalogNo&gt;&lt;seller&gt;邮局&lt;/seller&gt;&lt;source&gt;本馆&lt;/source&gt;&lt;range&gt;20240101-20241231&lt;/range&gt;&lt;issueCount&gt;12&lt;/issueCount&gt;&lt;copy&gt;2&lt;/copy&gt;&lt;price&gt;CNY10&lt;/price&gt;&lt;distribute&gt;保存本库:1;流通库:1&lt;/distribute&gt;&lt;class&gt;社科&lt;/class&gt;&lt;batchNo&gt;20240326&lt;/batchNo&gt;&lt;refID&gt;8f9b411e-5c4c-49cf-a222-07f5bf5ef637&lt;/refID&gt;&lt;operations&gt;&lt;operation name="create" time="Sun, 07 Apr 2024 15:13:40 +0800" operator="supervisor" /&gt;&lt;/operations&gt;&lt;/root&gt;</oldRecord>
    <operator>supervisor</operator>
    <operTime>Sun, 07 Apr 2024 15:15:15 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>
renyh commented 5 months ago

setIssue

new

<root>
  <operation>setIssue</operation>
  <action>new</action>
  <record recPath="中文期刊期/1">...</record>
  <operator>supervisor</operator>
  <operTime>Fri, 23 Feb 2024 12:57:39 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

检查期刊记录内容,确保有refID。

<?xml version="1.0" encoding="utf-8"?>
<root>
    <parent>1</parent>
    <publishTime>20230101</publishTime>
    <issue>1</issue>
    <zong>200</zong>
    <orderInfo>
        <root>
            <parent>1</parent>
            <index>1</index>
            <catalogNo>2</catalogNo>
            <seller>邮局</seller>
            <source>本馆</source>
            <range>20230101-20231231</range>
            <issueCount>12</issueCount>
            <copy>1</copy>
            <price>CNY10</price>
            <distribute>阅览室:1</distribute>
            <class>社科</class>
            <batchNo>20240227</batchNo>
            <refID>b4fe68fc-ba13-4189-bad5-a05812752f6d</refID>
            <operations>
                <operation name="create" time="Tue, 27 Feb 2024 11:05:23 +0800" operator="supervisor" />
            </operations>
        </root>
    </orderInfo>
    <refID>57e6f471-781b-4b8e-8440-dfd4b5d411e7</refID>
    <operations>
        <operation name="create" time="Tue, 27 Feb 2024 11:06:09 +0800" operator="supervisor" />
    </operations>
</root>

change

<root>
  <operation>setIssue</operation>
  <action>change</action>
  <record recPath="中文期刊期/2">&lt;root&gt;&lt;parent&gt;1&lt;/parent&gt;&lt;publishTime&gt;20230201&lt;/publishTime&gt;&lt;issue&gt;1&lt;/issue&gt;&lt;zong&gt;201&lt;/zong&gt;&lt;volume&gt;21&lt;/volume&gt;&lt;orderInfo&gt;&lt;root&gt;&lt;parent&gt;1&lt;/parent&gt;&lt;index&gt;1&lt;/index&gt;&lt;catalogNo&gt;k&lt;/catalogNo&gt;&lt;seller&gt;a&lt;/seller&gt;&lt;source&gt;b&lt;/source&gt;&lt;range&gt;20230101-20231231&lt;/range&gt;&lt;issueCount&gt;12&lt;/issueCount&gt;&lt;copy&gt;2[1]&lt;/copy&gt;&lt;price&gt;CNY10&lt;/price&gt;&lt;distribute&gt;保存本库:1{66060133-4649-4417-812b-3719a37a4c53};流通库:1&lt;/distribute&gt;&lt;class&gt;c&lt;/class&gt;&lt;batchNo&gt;20230803-1&lt;/batchNo&gt;&lt;refID&gt;6759bc2f-8534-46ec-8c7d-3e1a9fc32609&lt;/refID&gt;&lt;operations&gt;&lt;operation name="create" time="Fri, 23 Feb 2024 12:56:20 +0800" operator="supervisor" /&gt;&lt;operation name="lastModified" time="Fri, 23 Feb 2024 12:56:40 +0800" operator="supervisor" /&gt;&lt;/operations&gt;&lt;state&gt;已订购&lt;/state&gt;&lt;totalPrice&gt;CNY240.00&lt;/totalPrice&gt;&lt;orderTime&gt;Fri, 23 Feb 2024 00:00:00 +0800&lt;/orderTime&gt;&lt;orderID&gt;1&lt;/orderID&gt;&lt;/root&gt;&lt;/orderInfo&gt;&lt;refID&gt;1c0d331c-8e5d-437a-ac64-149a5614fbc2&lt;/refID&gt;&lt;operations&gt;&lt;operation name="create" time="Fri, 23 Feb 2024 12:57:39 +0800" operator="supervisor" /&gt;&lt;operation name="lastModified" time="Fri, 23 Feb 2024 12:58:24 +0800" operator="supervisor" /&gt;&lt;/operations&gt;&lt;/root&gt;</record>
  <oldRecord recPath="中文期刊期/2">&lt;root&gt;&lt;parent&gt;1&lt;/parent&gt;&lt;publishTime&gt;20230201&lt;/publishTime&gt;&lt;issue&gt;1&lt;/issue&gt;&lt;zong&gt;201&lt;/zong&gt;&lt;volume&gt;21&lt;/volume&gt;&lt;orderInfo&gt;&lt;root&gt;&lt;parent&gt;1&lt;/parent&gt;&lt;index&gt;1&lt;/index&gt;&lt;catalogNo&gt;k&lt;/catalogNo&gt;&lt;seller&gt;a&lt;/seller&gt;&lt;source&gt;b&lt;/source&gt;&lt;range&gt;20230101-20231231&lt;/range&gt;&lt;issueCount&gt;12&lt;/issueCount&gt;&lt;copy&gt;2&lt;/copy&gt;&lt;price&gt;CNY10&lt;/price&gt;&lt;distribute&gt;保存本库:1;流通库:1&lt;/distribute&gt;&lt;class&gt;c&lt;/class&gt;&lt;batchNo&gt;20230803-1&lt;/batchNo&gt;&lt;refID&gt;6759bc2f-8534-46ec-8c7d-3e1a9fc32609&lt;/refID&gt;&lt;operations&gt;&lt;operation name="create" time="Fri, 23 Feb 2024 12:56:20 +0800" operator="supervisor" /&gt;&lt;operation name="lastModified" time="Fri, 23 Feb 2024 12:56:40 +0800" operator="supervisor" /&gt;&lt;/operations&gt;&lt;state&gt;已订购&lt;/state&gt;&lt;totalPrice&gt;CNY240.00&lt;/totalPrice&gt;&lt;orderTime&gt;Fri, 23 Feb 2024 00:00:00 +0800&lt;/orderTime&gt;&lt;orderID&gt;1&lt;/orderID&gt;&lt;/root&gt;&lt;/orderInfo&gt;&lt;refID&gt;1c0d331c-8e5d-437a-ac64-149a5614fbc2&lt;/refID&gt;&lt;operations&gt;&lt;operation name="create" time="Fri, 23 Feb 2024 12:57:39 +0800" operator="supervisor" /&gt;&lt;/operations&gt;&lt;/root&gt;</oldRecord>
  <operator>supervisor</operator>
  <operTime>Fri, 23 Feb 2024 12:58:24 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

delete

<root>
  <operation>setIssue</operation>
  <action>delete</action>
  <oldRecord recPath="中文期刊期/12">&lt;root&gt;&lt;parent&gt;1&lt;/parent&gt;&lt;publishTime&gt;20231201&lt;/publishTime&gt;&lt;issue&gt;11&lt;/issue&gt;&lt;zong&gt;211&lt;/zong&gt;&lt;volume&gt;21&lt;/volume&gt;&lt;orderInfo&gt;&lt;root&gt;&lt;parent&gt;1&lt;/parent&gt;&lt;index&gt;1&lt;/index&gt;&lt;catalogNo&gt;k&lt;/catalogNo&gt;&lt;seller&gt;a&lt;/seller&gt;&lt;source&gt;b&lt;/source&gt;&lt;range&gt;20230101-20231231&lt;/range&gt;&lt;issueCount&gt;12&lt;/issueCount&gt;&lt;copy&gt;2&lt;/copy&gt;&lt;price&gt;CNY10&lt;/price&gt;&lt;distribute&gt;保存本库:1;流通库:1&lt;/distribute&gt;&lt;class&gt;c&lt;/class&gt;&lt;batchNo&gt;20230803-1&lt;/batchNo&gt;&lt;refID&gt;6759bc2f-8534-46ec-8c7d-3e1a9fc32609&lt;/refID&gt;&lt;operations&gt;&lt;operation name="create" time="Fri, 23 Feb 2024 12:56:20 +0800" operator="supervisor" /&gt;&lt;operation name="lastModified" time="Fri, 23 Feb 2024 12:56:40 +0800" operator="supervisor" /&gt;&lt;/operations&gt;&lt;state&gt;已订购&lt;/state&gt;&lt;totalPrice&gt;CNY240.00&lt;/totalPrice&gt;&lt;orderTime&gt;Fri, 23 Feb 2024 00:00:00 +0800&lt;/orderTime&gt;&lt;orderID&gt;1&lt;/orderID&gt;&lt;/root&gt;&lt;/orderInfo&gt;&lt;refID&gt;3b2a12cb-11e7-4232-8c04-273903635228&lt;/refID&gt;&lt;operations&gt;&lt;operation name="create" time="Fri, 23 Feb 2024 12:57:39 +0800" operator="supervisor" /&gt;&lt;/operations&gt;&lt;/root&gt;</oldRecord>
  <operator>supervisor</operator>
  <operTime>Fri, 23 Feb 2024 13:13:42 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

move

<root>
    <operation>setIssue</operation>
    <action>move</action>
    <record recPath="ryh期刊2期/1">&lt;root&gt;&lt;dprms:file id="0" usage="FrontCover.SmallImage" xmlns:dprms="http://dp2003.com/dprms" _timestamp="2d0130ced056dc080000000000000002" _metadataFile="ryh期刊期_1_object_0.met" _objectFile="ryh期刊期_1_object_0.bin" /&gt;&lt;dprms:file id="1" usage="FrontCover.MediumImage" xmlns:dprms="http://dp2003.com/dprms" _timestamp="edef30ced056dc080000000000000003" _metadataFile="ryh期刊期_1_object_1.met" _objectFile="ryh期刊期_1_object_1.bin" /&gt;&lt;dprms:file id="2" usage="FrontCover.LargeImage" xmlns:dprms="http://dp2003.com/dprms" _timestamp="18f231ced056dc080000000000000004" _metadataFile="ryh期刊期_1_object_2.met" _objectFile="ryh期刊期_1_object_2.bin" /&gt;&lt;parent&gt;1&lt;/parent&gt;&lt;publishTime&gt;20240101&lt;/publishTime&gt;&lt;issue&gt;1&lt;/issue&gt;&lt;zong&gt;100&lt;/zong&gt;&lt;orderInfo&gt;&lt;root&gt;&lt;parent&gt;2&lt;/parent&gt;&lt;index&gt;1&lt;/index&gt;&lt;catalogNo&gt;100&lt;/catalogNo&gt;&lt;seller&gt;邮局&lt;/seller&gt;&lt;source&gt;本馆&lt;/source&gt;&lt;range&gt;20240101-20241231&lt;/range&gt;&lt;issueCount&gt;12&lt;/issueCount&gt;&lt;copy&gt;2&lt;/copy&gt;&lt;price&gt;CNY10&lt;/price&gt;&lt;distribute&gt;保存本库:1;流通库:1&lt;/distribute&gt;&lt;class&gt;社科&lt;/class&gt;&lt;batchNo&gt;20240326&lt;/batchNo&gt;&lt;refID&gt;8f9b411e-5c4c-49cf-a222-07f5bf5ef637&lt;/refID&gt;&lt;operations&gt;&lt;operation name="create" time="Tue, 26 Mar 2024 22:57:09 +0800" operator="supervisor" /&gt;&lt;/operations&gt;&lt;/root&gt;&lt;/orderInfo&gt;&lt;refID&gt;5f89fa29-c0d5-4c3a-8834-056dc62ce6b1&lt;/refID&gt;&lt;operations&gt;&lt;operation name="create" time="Sun, 07 Apr 2024 15:13:40 +0800" operator="supervisor" /&gt;&lt;/operations&gt;&lt;/root&gt;</record>
    <oldRecord recPath="ryh期刊期/1">&lt;root&gt;&lt;dprms:file id="0" usage="FrontCover.SmallImage" xmlns:dprms="http://dp2003.com/dprms" _timestamp="2d0130ced056dc080000000000000002" _metadataFile="ryh期刊期_1_object_0.met" _objectFile="ryh期刊期_1_object_0.bin" /&gt;&lt;dprms:file id="1" usage="FrontCover.MediumImage" xmlns:dprms="http://dp2003.com/dprms" _timestamp="edef30ced056dc080000000000000003" _metadataFile="ryh期刊期_1_object_1.met" _objectFile="ryh期刊期_1_object_1.bin" /&gt;&lt;dprms:file id="2" usage="FrontCover.LargeImage" xmlns:dprms="http://dp2003.com/dprms" _timestamp="18f231ced056dc080000000000000004" _metadataFile="ryh期刊期_1_object_2.met" _objectFile="ryh期刊期_1_object_2.bin" /&gt;&lt;parent&gt;1&lt;/parent&gt;&lt;publishTime&gt;20240101&lt;/publishTime&gt;&lt;issue&gt;1&lt;/issue&gt;&lt;zong&gt;100&lt;/zong&gt;&lt;orderInfo&gt;&lt;root&gt;&lt;parent&gt;2&lt;/parent&gt;&lt;index&gt;1&lt;/index&gt;&lt;catalogNo&gt;100&lt;/catalogNo&gt;&lt;seller&gt;邮局&lt;/seller&gt;&lt;source&gt;本馆&lt;/source&gt;&lt;range&gt;20240101-20241231&lt;/range&gt;&lt;issueCount&gt;12&lt;/issueCount&gt;&lt;copy&gt;2&lt;/copy&gt;&lt;price&gt;CNY10&lt;/price&gt;&lt;distribute&gt;保存本库:1;流通库:1&lt;/distribute&gt;&lt;class&gt;社科&lt;/class&gt;&lt;batchNo&gt;20240326&lt;/batchNo&gt;&lt;refID&gt;8f9b411e-5c4c-49cf-a222-07f5bf5ef637&lt;/refID&gt;&lt;operations&gt;&lt;operation name="create" time="Tue, 26 Mar 2024 22:57:09 +0800" operator="supervisor" /&gt;&lt;/operations&gt;&lt;/root&gt;&lt;/orderInfo&gt;&lt;refID&gt;5f89fa29-c0d5-4c3a-8834-056dc62ce6b1&lt;/refID&gt;&lt;operations&gt;&lt;operation name="create" time="Sun, 07 Apr 2024 15:13:40 +0800" operator="supervisor" /&gt;&lt;/operations&gt;&lt;/root&gt;</oldRecord>
    <operator>supervisor</operator>
    <operTime>Sun, 07 Apr 2024 15:15:20 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>
renyh commented 4 months ago

setComment

new

<root>
  <operation>setComment</operation>
  <action>new</action>
  <record recPath="中文图书评注/16">&lt;root&gt;&lt;dprms:file id="0" usage="uploadimage" xmlns:dprms="http://dp2003.com/dprms" /&gt;&lt;parent&gt;1&lt;/parent&gt;&lt;type&gt;书评&lt;/type&gt;&lt;title&gt;一本好书&lt;/title&gt;&lt;content&gt;ss&lt;/content&gt;&lt;creator&gt;supervisor&lt;/creator&gt;&lt;libraryCode&gt;&lt;/libraryCode&gt;&lt;refID&gt;8276cfc8-4262-4c83-8498-3e5a548b52c1&lt;/refID&gt;&lt;operations&gt;&lt;operation name="create" time="Sun, 25 Feb 2024 22:17:30 +0800" operator="supervisor" /&gt;&lt;/operations&gt;&lt;/root&gt;</record>
  <operator>supervisor</operator>
  <operTime>Sun, 25 Feb 2024 22:17:30 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

检查record内容,确保有refid。

<?xml version="1.0" encoding="utf-8"?>
<root>
    <parent>1</parent>
    <title>一本好书</title>
    <content>test书评</content>
    <creator>@refID:37e7a0dc-ecca-437d-adeb-df52e9c8cb98</creator>
    <libraryCode>
    </libraryCode>
    <refID>3dd4297d-0056-43ef-891f-5d89275d8db2</refID>
    <operations>
        <operation name="create" time="Tue, 27 Feb 2024 11:17:59 +0800" operator="@refID:37e7a0dc-ecca-437d-adeb-df52e9c8cb98" />
    </operations>
</root>

change

<root>
  <operation>setComment</operation>
  <action>change</action>
  <record recPath="中文图书评注/16">...</record>
  <oldRecord recPath="中文图书评注/16">...</oldRecord>
  <operator>supervisor</operator>
  <operTime>Sun, 25 Feb 2024 22:27:52 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

delete

<root>
  <operation>setComment</operation>
  <action>delete</action>
  <oldRecord recPath="中文图书评注/16">...</oldRecord>
  <operator>supervisor</operator>
  <operTime>Sun, 25 Feb 2024 22:29:31 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

move

<root>
    <operation>setComment</operation>
    <action>move</action>
    <record recPath="ryh期刊2评注/1">&lt;root&gt;&lt;parent&gt;1&lt;/parent&gt;&lt;index&gt;001&lt;/index&gt;&lt;title&gt;评注标题&lt;/title&gt;&lt;content&gt;评注正文111&lt;/content&gt;&lt;refID&gt;8bfbae50-b8a8-49b5-a28e-a8e6563af25b&lt;/refID&gt;&lt;creator&gt;supervisor&lt;/creator&gt;&lt;libraryCode&gt;&lt;/libraryCode&gt;&lt;operations&gt;&lt;operation name="create" time="Sun, 07 Apr 2024 15:13:40 +0800" operator="supervisor" /&gt;&lt;/operations&gt;&lt;dprms:file xmlns:dprms="http://dp2003.com/dprms" id="0" _timestamp="ca6fe75cd156dc080000000000000002" _metadataFile="ryh期刊评注_1_object_0.met" _objectFile="ryh期刊评注_1_object_0.bin"&gt;&lt;/dprms:file&gt;&lt;/root&gt;</record>
    <oldRecord recPath="ryh期刊评注/1">&lt;root&gt;&lt;dprms:file xmlns:dprms="http://dp2003.com/dprms" id="0" _timestamp="ca6fe75cd156dc080000000000000002" _metadataFile="ryh期刊评注_1_object_0.met" _objectFile="ryh期刊评注_1_object_0.bin"&gt;&lt;/dprms:file&gt;&lt;parent&gt;1&lt;/parent&gt;&lt;index&gt;001&lt;/index&gt;&lt;title&gt;评注标题&lt;/title&gt;&lt;content&gt;评注正文111&lt;/content&gt;&lt;refID&gt;8bfbae50-b8a8-49b5-a28e-a8e6563af25b&lt;/refID&gt;&lt;creator&gt;supervisor&lt;/creator&gt;&lt;libraryCode&gt;&lt;/libraryCode&gt;&lt;operations&gt;&lt;operation name="create" time="Sun, 07 Apr 2024 15:13:40 +0800" operator="supervisor" /&gt;&lt;/operations&gt;&lt;/root&gt;</oldRecord>
    <operator>supervisor</operator>
    <operTime>Sun, 07 Apr 2024 15:15:20 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>
renyh commented 4 months ago

刷新数据库结构 manageDatabase/refreshDatabase

结论:三种不同方式的刷新日志xml,刷新的数据库记录在databases元素里,刷新方式记录在refreshStyle元素里。
附件中是本次刷新过的对应数据库和修改过下级的配置文件,附件中数据库下包含两个目录cfgs和old_cfgs,目录下的文件仅是刷新方式需要更新的文件(且真实修改过的),例如第一种结构方式,仅会包括修改过keys和browse,如果keys或browse没有修改,则不会包括在附件中。

结构,仅刷新keys与browse

<root>
  <operation>manageDatabase</operation>
  <action>refreshDatabase</action>
  <libraryCode>
  </libraryCode>
  <databases>
    <database name="中文图书" />
    <database name="中文图书实体" />
    <database name="中文图书订购" />
    <database name="中文图书评注" />
  </databases>
  <refreshStyle include="keys,browse" exclude="" autoRebuildKeys="false" recoverModeKeys="false" />
  <operator>supervisor</operator>
  <operTime>Wed, 28 Feb 2024 12:17:59 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

附件: 1.zip

全部,但不包括新记录模板文件

<root>
  <operation>manageDatabase</operation>
  <action>refreshDatabase</action>
  <libraryCode>
  </libraryCode>
  <databases>
    <database name="中文图书" />
    <database name="中文图书实体" />
    <database name="中文图书订购" />
    <database name="中文图书评注" />
  </databases>
  <refreshStyle include="*" exclude="template" autoRebuildKeys="false" recoverModeKeys="false" />
  <operator>supervisor</operator>
  <operTime>Wed, 28 Feb 2024 12:19:22 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

附件: 2.zip

全部

<root>
  <operation>manageDatabase</operation>
  <action>refreshDatabase</action>
  <libraryCode>
  </libraryCode>
  <databases>
    <database name="中文图书" />
    <database name="中文图书实体" />
    <database name="中文图书订购" />
    <database name="中文图书评注" />
  </databases>
  <refreshStyle include="*" exclude="" autoRebuildKeys="false" recoverModeKeys="false" />
  <operator>supervisor</operator>
  <operTime>Wed, 28 Feb 2024 12:20:31 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

附件: 3.zip

选中重建检索点

<root>
  <operation>manageDatabase</operation>
  <action>refreshDatabase</action>
  <libraryCode>
  </libraryCode>
  <databases>
    <database name="中文图书" />
    <database name="中文图书实体" />
    <database name="中文图书订购" />
    <database name="中文图书评注" />
  </databases>
  <refreshStyle include="*" exclude="" autoRebuildKeys="true" recoverModeKeys="false" />
  <operator>supervisor</operator>
  <operTime>Wed, 28 Feb 2024 12:20:59 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

实际没有发生配置文件修改时,没有附件。

keys使用容错日志恢复版

<root>
  <operation>manageDatabase</operation>
  <action>refreshDatabase</action>
  <libraryCode>
  </libraryCode>
  <databases>
    <database name="读者" />
  </databases>
  <refreshStyle include="*" exclude="" autoRebuildKeys="true" recoverModeKeys="true" />
  <operator>supervisor</operator>
  <operTime>Wed, 28 Feb 2024 12:22:03 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

附件: 5.zip

renyh commented 4 months ago

开馆日历 setCalendar

new

<root>
  <operation>setCalendar</operation>
  <action>new</action>
  <calendar name="测试日历" range="20240100-20261231" comment="">
  </calendar>
  <operator>supervisor</operator>
  <operTime>Mon, 04 Mar 2024 10:03:22 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

change

<root>
  <operation>setCalendar</operation>
  <action>change</action>
  <oldCalendar name="测试日历" range="20240100-20261231" comment="">
  </oldCalendar>
  <calendar name="测试日历" range="20240100-20261231" comment="">20240107,20240114,20240121,20240128,20240204,20240211,20240218,20240225</calendar>
  <operator>supervisor</operator>
  <operTime>Mon, 04 Mar 2024 10:04:21 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

delete

<root>
  <operation>setCalendar</operation>
  <action>delete</action>
  <oldCalendar name="测试日历" range="20240100-20261231" comment="">20240107,20240114,20240121,20240128,20240204,20240211,20240218,20240225</oldCalendar>
  <operator>supervisor</operator>
  <operTime>Mon, 04 Mar 2024 10:05:04 +0800</operTime>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>
DigitalPlatform commented 3 months ago

devolveReaderInfo

<root>
  <operation>devolveReaderInfo</operation> 
  <sourceReaderBarcode>...</sourceReaderBarcode> 源读者证条码号
  <targetReaderBarcode>...</targetReaderBarcode> 目标读者证条码号
  <borrows>...</borrows> 移动过去的<borrows>内容,下级为<borrow>元素
  <overdues>...</overdues> 移动过去的<overdue>内容,下级为<overdue>元素
  <sourceReaderRecord recPath='...'>...</sourceReaderRecord>    最新源读者记录
  <targetReaderRecord recPath='...'>...</targetReaderRecord>    最新目标读者记录
  <changedEntityRecord recPath='...' attahchmentIndex='.' itemBarcode='...' itemRefID='...'>...</changedEntityRecord> 所牵连到的发生了修改的实体记录。此元素的文本即是记录体,但注意为不透明的字符串(HtmlEncoding后的记录字符串)。如果存在attachmentIndex属性,则表明实体记录不在此元素文本中,而在日志记录的附件中。
注: itemBarcode 和 itemRefID 属性是 2024/3/27 以后新增加的
  <operator>test</operator> 
  <operTime>Fri, 08 Dec 2006 10:12:20 GMT</operTime> 

  <!-- 2024/3/27 以后增加 -->
  <sourceReaderRefID>...</sourceReaderRefID> 源读者参考 ID
  <targetReaderRefID>...</targetReaderRefID> 目标读者参考 ID

</root>

一个完整的日志例子,有2册在借

<root>
    <libraryCode>,</libraryCode>
    <operation>devolveReaderInfo</operation>
    <sourceReaderBarcode>P001</sourceReaderBarcode>
    <targetReaderBarcode>P002</targetReaderBarcode>
    <sourceReaderRefID>9131f365-772d-4ce1-b6ae-334380d41a21</sourceReaderRefID>
    <targetReaderRefID>7377e63a-11ff-4baf-8d5b-1f2a00def063</targetReaderRefID>
    <operator>supervisor</operator>
    <operTime>Thu, 11 Apr 2024 14:05:35 +0800</operTime>
    <changedEntityRecord recPath="ryh测试库实体/2" itemBarcode="B002" itemRefID="B002">&lt;root&gt;&lt;parent&gt;1&lt;/parent&gt;&lt;location&gt;流通库&lt;/location&gt;&lt;bookType&gt;普通&lt;/bookType&gt;&lt;batchNo&gt;20240307验收2&lt;/batchNo&gt;&lt;price&gt;CNY19.00&lt;/price&gt;&lt;accessNo&gt;B848.4/K433&lt;/accessNo&gt;&lt;barcode&gt;B002&lt;/barcode&gt;&lt;refID&gt;7ea3a869-e627-467f-a72e-d885a4942008&lt;/refID&gt;&lt;operations&gt;&lt;operation name="create" time="Wed, 27 Mar 2024 13:34:36 +0800" operator="supervisor" /&gt;&lt;/operations&gt;&lt;borrower&gt;@refID:7377e63a-11ff-4baf-8d5b-1f2a00def063&lt;/borrower&gt;&lt;borrowerReaderType&gt;本科生&lt;/borrowerReaderType&gt;&lt;borrowerRecPath&gt;ryh读者/1&lt;/borrowerRecPath&gt;&lt;borrowDate&gt;Thu, 11 Apr 2024 14:05:16 +0800&lt;/borrowDate&gt;&lt;borrowID&gt;505e392c-e83e-4945-bac5-d16cc8dcaccd&lt;/borrowID&gt;&lt;checkInOutDate&gt;Thu, 11 Apr 2024 14:05:16 +0800&lt;/checkInOutDate&gt;&lt;borrowPeriod&gt;31day&lt;/borrowPeriod&gt;&lt;returningDate&gt;Sun, 12 May 2024 12:00:00 +0800&lt;/returningDate&gt;&lt;operator&gt;supervisor&lt;/operator&gt;&lt;devolveComment&gt;本册原为读者 P001 所借阅,后于 Thu, 11 Apr 2024 14:05:35 +0800 被转移到读者 @refID:7377e63a-11ff-4baf-8d5b-1f2a00def063 名下&lt;/devolveComment&gt;&lt;/root&gt;</changedEntityRecord>
    <changedEntityRecord recPath="ryh测试库实体/1" itemBarcode="B001" itemRefID="B001">&lt;root&gt;&lt;parent&gt;1&lt;/parent&gt;&lt;location&gt;流通库&lt;/location&gt;&lt;bookType&gt;普通&lt;/bookType&gt;&lt;batchNo&gt;20240307验收2&lt;/batchNo&gt;&lt;price&gt;CNY19.00&lt;/price&gt;&lt;accessNo&gt;B848.4/K433&lt;/accessNo&gt;&lt;barcode&gt;B001&lt;/barcode&gt;&lt;refID&gt;94623e97-65e2-470e-b55e-160f0ce178a4&lt;/refID&gt;&lt;operations&gt;&lt;operation name="create" time="Wed, 27 Mar 2024 11:21:33 +0800" operator="supervisor" /&gt;&lt;/operations&gt;&lt;borrower&gt;@refID:7377e63a-11ff-4baf-8d5b-1f2a00def063&lt;/borrower&gt;&lt;borrowerReaderType&gt;本科生&lt;/borrowerReaderType&gt;&lt;borrowerRecPath&gt;ryh读者/1&lt;/borrowerRecPath&gt;&lt;borrowDate&gt;Thu, 11 Apr 2024 14:05:15 +0800&lt;/borrowDate&gt;&lt;borrowID&gt;9d5ee29e-d858-4dfe-85dc-ecac3c24b611&lt;/borrowID&gt;&lt;checkInOutDate&gt;Thu, 11 Apr 2024 14:05:15 +0800&lt;/checkInOutDate&gt;&lt;borrowPeriod&gt;31day&lt;/borrowPeriod&gt;&lt;returningDate&gt;Sun, 12 May 2024 12:00:00 +0800&lt;/returningDate&gt;&lt;operator&gt;supervisor&lt;/operator&gt;&lt;devolveComment&gt;本册原为读者 P001 所借阅,后于 Thu, 11 Apr 2024 14:05:35 +0800 被转移到读者 @refID:7377e63a-11ff-4baf-8d5b-1f2a00def063 名下&lt;/devolveComment&gt;&lt;/root&gt;</changedEntityRecord>
    <borrows>
        <borrow barcode="B002" refID="7ea3a869-e627-467f-a72e-d885a4942008" oi="" recPath="ryh测试库实体/2" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:05:16 +0800" borrowPeriod="31day" borrowID="505e392c-e83e-4945-bac5-d16cc8dcaccd" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" />
        <borrow barcode="B001" refID="94623e97-65e2-470e-b55e-160f0ce178a4" oi="" recPath="ryh测试库实体/1" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:05:15 +0800" borrowPeriod="31day" borrowID="9d5ee29e-d858-4dfe-85dc-ecac3c24b611" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" />
    </borrows>
    <sourceReaderRecord recPath="ryh读者/1">&lt;root&gt;&lt;barcode&gt;P001&lt;/barcode&gt;&lt;readerType&gt;本科生&lt;/readerType&gt;&lt;name&gt;任1&lt;/name&gt;&lt;department&gt;24级1班&lt;/department&gt;&lt;refID&gt;9131f365-772d-4ce1-b6ae-334380d41a21&lt;/refID&gt;&lt;libraryCode&gt;&lt;/libraryCode&gt;&lt;reservations /&gt;&lt;borrows&gt;&lt;/borrows&gt;&lt;devolvedBorrows comment="已于 Thu, 11 Apr 2024 14:05:35 +0800 将下列借阅信息转移到读者 @refID:7377e63a-11ff-4baf-8d5b-1f2a00def063 名下"&gt;&lt;borrow barcode="B002" refID="7ea3a869-e627-467f-a72e-d885a4942008" oi="" recPath="ryh测试库实体/2" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:05:16 +0800" borrowPeriod="31day" borrowID="505e392c-e83e-4945-bac5-d16cc8dcaccd" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" /&gt;&lt;borrow barcode="B001" refID="94623e97-65e2-470e-b55e-160f0ce178a4" oi="" recPath="ryh测试库实体/1" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:05:15 +0800" borrowPeriod="31day" borrowID="9d5ee29e-d858-4dfe-85dc-ecac3c24b611" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" /&gt;&lt;/devolvedBorrows&gt;&lt;/root&gt;</sourceReaderRecord>
    <targetReaderRecord recPath="ryh读者/2">&lt;root&gt;&lt;barcode&gt;P002&lt;/barcode&gt;&lt;readerType&gt;本科生&lt;/readerType&gt;&lt;name&gt;任2&lt;/name&gt;&lt;department&gt;24级1班&lt;/department&gt;&lt;refID&gt;7377e63a-11ff-4baf-8d5b-1f2a00def063&lt;/refID&gt;&lt;libraryCode&gt;&lt;/libraryCode&gt;&lt;borrows&gt;&lt;borrow barcode="B002" refID="7ea3a869-e627-467f-a72e-d885a4942008" oi="" recPath="ryh测试库实体/2" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:05:16 +0800" borrowPeriod="31day" borrowID="505e392c-e83e-4945-bac5-d16cc8dcaccd" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:9131f365-772d-4ce1-b6ae-334380d41a21 转移而来,操作时间 Thu, 11 Apr 2024 14:05:35 +0800" /&gt;&lt;borrow barcode="B001" refID="94623e97-65e2-470e-b55e-160f0ce178a4" oi="" recPath="ryh测试库实体/1" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:05:15 +0800" borrowPeriod="31day" borrowID="9d5ee29e-d858-4dfe-85dc-ecac3c24b611" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:9131f365-772d-4ce1-b6ae-334380d41a21 转移而来,操作时间 Thu, 11 Apr 2024 14:05:35 +0800" /&gt;&lt;/borrows&gt;&lt;/root&gt;</targetReaderRecord>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

在借册超过10册时,changedEntityRecord元素没有内容,将册xml存储在附件中。

<root>
  <libraryCode>,</libraryCode>
  <operation>devolveReaderInfo</operation>
  <sourceReaderBarcode>P001</sourceReaderBarcode>
  <targetReaderBarcode>P002</targetReaderBarcode>
  <sourceReaderRefID>9131f365-772d-4ce1-b6ae-334380d41a21</sourceReaderRefID>
  <targetReaderRefID>7377e63a-11ff-4baf-8d5b-1f2a00def063</targetReaderRefID>
  <operator>supervisor</operator>
  <operTime>Thu, 11 Apr 2024 14:12:53 +0800</operTime>
  <changedEntityRecord recPath="ryh测试库实体/11" itemBarcode="B011" itemRefID="B011" attachmentIndex="0" />
  <changedEntityRecord recPath="ryh测试库实体/10" itemBarcode="B010" itemRefID="B010" attachmentIndex="1" />
  <changedEntityRecord recPath="ryh测试库实体/9" itemBarcode="B009" itemRefID="B009" attachmentIndex="2" />
  <changedEntityRecord recPath="ryh测试库实体/8" itemBarcode="B008" itemRefID="B008" attachmentIndex="3" />
  <changedEntityRecord recPath="ryh测试库实体/7" itemBarcode="B007" itemRefID="B007" attachmentIndex="4" />
  <changedEntityRecord recPath="ryh测试库实体/6" itemBarcode="B006" itemRefID="B006" attachmentIndex="5" />
  <changedEntityRecord recPath="ryh测试库实体/5" itemBarcode="B005" itemRefID="B005" attachmentIndex="6" />
  <changedEntityRecord recPath="ryh测试库实体/4" itemBarcode="B004" itemRefID="B004" attachmentIndex="7" />
  <changedEntityRecord recPath="ryh测试库实体/3" itemBarcode="B003" itemRefID="B003" attachmentIndex="8" />
  <changedEntityRecord recPath="ryh测试库实体/2" itemBarcode="B002" itemRefID="B002" attachmentIndex="9" />
  <changedEntityRecord recPath="ryh测试库实体/1" itemBarcode="B001" itemRefID="B001" attachmentIndex="10" />
  <borrows>
    <borrow barcode="B011" refID="c3ad34ad-c1f6-4262-a347-b4e5f3e1f8cc" oi="" recPath="ryh测试库实体/11" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:12:42 +0800" borrowPeriod="31day" borrowID="3273885b-95b9-4568-b251-4a973c0a5fba" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" />
    <borrow barcode="B010" refID="aff9bf5d-7eaf-49d4-93a8-0910977c20a4" oi="" recPath="ryh测试库实体/10" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:10:00 +0800" borrowPeriod="31day" borrowID="0d8bcce7-37dd-4a4b-92b0-6ac0a6dd1173" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" />
    <borrow barcode="B009" refID="b10e3257-f35b-477c-bbf8-429452887d34" oi="" recPath="ryh测试库实体/9" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:58 +0800" borrowPeriod="31day" borrowID="486ad8ad-1007-4668-8383-39ddef68b278" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" />
    <borrow barcode="B008" refID="cabc28bd-42cc-47be-abb0-81bd79f25900" oi="" recPath="ryh测试库实体/8" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:56 +0800" borrowPeriod="31day" borrowID="3c491350-1870-469b-a458-f41d3e9ad70d" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" />
    <borrow barcode="B007" refID="11f03db4-6711-4c74-a5d5-988166135a88" oi="" recPath="ryh测试库实体/7" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:53 +0800" borrowPeriod="31day" borrowID="bb6dc786-c0ac-44b3-abaa-16983c1e8199" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" />
    <borrow barcode="B006" refID="22430970-4dff-44d6-bf9b-18fccfec86eb" oi="" recPath="ryh测试库实体/6" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:52 +0800" borrowPeriod="31day" borrowID="0867f025-2bb8-4257-9706-73404ef6eaee" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" />
    <borrow barcode="B005" refID="925371a5-39cf-4e20-ba1c-dc2d01c81333" oi="" recPath="ryh测试库实体/5" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:50 +0800" borrowPeriod="31day" borrowID="fcb50359-e938-4896-879d-e3e444dd2382" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" />
    <borrow barcode="B004" refID="d5546053-b022-4fc7-a862-ee87bc621079" oi="" recPath="ryh测试库实体/4" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:49 +0800" borrowPeriod="31day" borrowID="7fd55fa5-e63d-4268-9984-3a653a84d577" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" />
    <borrow barcode="B003" refID="ab90c285-1dee-49d2-9af2-eadc4743fded" oi="" recPath="ryh测试库实体/3" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:47 +0800" borrowPeriod="31day" borrowID="6ee7578a-0b16-4aa6-a1ab-aed50a3a33d3" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" />
    <borrow barcode="B002" refID="7ea3a869-e627-467f-a72e-d885a4942008" oi="" recPath="ryh测试库实体/2" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:05:16 +0800" borrowPeriod="31day" borrowID="505e392c-e83e-4945-bac5-d16cc8dcaccd" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" />
    <borrow barcode="B001" refID="94623e97-65e2-470e-b55e-160f0ce178a4" oi="" recPath="ryh测试库实体/1" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:05:15 +0800" borrowPeriod="31day" borrowID="9d5ee29e-d858-4dfe-85dc-ecac3c24b611" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" />
  </borrows>
  <sourceReaderRecord recPath="ryh读者/1">&lt;root&gt;&lt;barcode&gt;P001&lt;/barcode&gt;&lt;readerType&gt;本科生&lt;/readerType&gt;&lt;name&gt;任1&lt;/name&gt;&lt;department&gt;24级1班&lt;/department&gt;&lt;refID&gt;9131f365-772d-4ce1-b6ae-334380d41a21&lt;/refID&gt;&lt;libraryCode&gt;&lt;/libraryCode&gt;&lt;reservations /&gt;&lt;borrows&gt;&lt;/borrows&gt;&lt;devolvedBorrows comment="已于 Thu, 11 Apr 2024 14:05:35 +0800 将下列借阅信息转移到读者 @refID:7377e63a-11ff-4baf-8d5b-1f2a00def063 名下"&gt;&lt;borrow barcode="B002" refID="7ea3a869-e627-467f-a72e-d885a4942008" oi="" recPath="ryh测试库实体/2" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:05:16 +0800" borrowPeriod="31day" borrowID="505e392c-e83e-4945-bac5-d16cc8dcaccd" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" /&gt;&lt;borrow barcode="B001" refID="94623e97-65e2-470e-b55e-160f0ce178a4" oi="" recPath="ryh测试库实体/1" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:05:15 +0800" borrowPeriod="31day" borrowID="9d5ee29e-d858-4dfe-85dc-ecac3c24b611" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" /&gt;&lt;/devolvedBorrows&gt;&lt;devolvedBorrows comment="已于 Thu, 11 Apr 2024 14:12:53 +0800 将下列借阅信息转移到读者 @refID:7377e63a-11ff-4baf-8d5b-1f2a00def063 名下"&gt;&lt;borrow barcode="B011" refID="c3ad34ad-c1f6-4262-a347-b4e5f3e1f8cc" oi="" recPath="ryh测试库实体/11" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:12:42 +0800" borrowPeriod="31day" borrowID="3273885b-95b9-4568-b251-4a973c0a5fba" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" /&gt;&lt;borrow barcode="B010" refID="aff9bf5d-7eaf-49d4-93a8-0910977c20a4" oi="" recPath="ryh测试库实体/10" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:10:00 +0800" borrowPeriod="31day" borrowID="0d8bcce7-37dd-4a4b-92b0-6ac0a6dd1173" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" /&gt;&lt;borrow barcode="B009" refID="b10e3257-f35b-477c-bbf8-429452887d34" oi="" recPath="ryh测试库实体/9" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:58 +0800" borrowPeriod="31day" borrowID="486ad8ad-1007-4668-8383-39ddef68b278" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" /&gt;&lt;borrow barcode="B008" refID="cabc28bd-42cc-47be-abb0-81bd79f25900" oi="" recPath="ryh测试库实体/8" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:56 +0800" borrowPeriod="31day" borrowID="3c491350-1870-469b-a458-f41d3e9ad70d" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" /&gt;&lt;borrow barcode="B007" refID="11f03db4-6711-4c74-a5d5-988166135a88" oi="" recPath="ryh测试库实体/7" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:53 +0800" borrowPeriod="31day" borrowID="bb6dc786-c0ac-44b3-abaa-16983c1e8199" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" /&gt;&lt;borrow barcode="B006" refID="22430970-4dff-44d6-bf9b-18fccfec86eb" oi="" recPath="ryh测试库实体/6" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:52 +0800" borrowPeriod="31day" borrowID="0867f025-2bb8-4257-9706-73404ef6eaee" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" /&gt;&lt;borrow barcode="B005" refID="925371a5-39cf-4e20-ba1c-dc2d01c81333" oi="" recPath="ryh测试库实体/5" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:50 +0800" borrowPeriod="31day" borrowID="fcb50359-e938-4896-879d-e3e444dd2382" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" /&gt;&lt;borrow barcode="B004" refID="d5546053-b022-4fc7-a862-ee87bc621079" oi="" recPath="ryh测试库实体/4" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:49 +0800" borrowPeriod="31day" borrowID="7fd55fa5-e63d-4268-9984-3a653a84d577" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" /&gt;&lt;borrow barcode="B003" refID="ab90c285-1dee-49d2-9af2-eadc4743fded" oi="" recPath="ryh测试库实体/3" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:47 +0800" borrowPeriod="31day" borrowID="6ee7578a-0b16-4aa6-a1ab-aed50a3a33d3" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" /&gt;&lt;borrow barcode="B002" refID="7ea3a869-e627-467f-a72e-d885a4942008" oi="" recPath="ryh测试库实体/2" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:05:16 +0800" borrowPeriod="31day" borrowID="505e392c-e83e-4945-bac5-d16cc8dcaccd" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" /&gt;&lt;borrow barcode="B001" refID="94623e97-65e2-470e-b55e-160f0ce178a4" oi="" recPath="ryh测试库实体/1" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:05:15 +0800" borrowPeriod="31day" borrowID="9d5ee29e-d858-4dfe-85dc-ecac3c24b611" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 转移而来,操作时间 Thu, 11 Apr 2024 14:11:08 +0800" /&gt;&lt;/devolvedBorrows&gt;&lt;/root&gt;</sourceReaderRecord>
  <targetReaderRecord recPath="ryh读者/2">&lt;root&gt;&lt;barcode&gt;P002&lt;/barcode&gt;&lt;readerType&gt;本科生&lt;/readerType&gt;&lt;name&gt;任2&lt;/name&gt;&lt;department&gt;24级1班&lt;/department&gt;&lt;refID&gt;7377e63a-11ff-4baf-8d5b-1f2a00def063&lt;/refID&gt;&lt;libraryCode&gt;&lt;/libraryCode&gt;&lt;borrows&gt;&lt;borrow barcode="B011" refID="c3ad34ad-c1f6-4262-a347-b4e5f3e1f8cc" oi="" recPath="ryh测试库实体/11" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:12:42 +0800" borrowPeriod="31day" borrowID="3273885b-95b9-4568-b251-4a973c0a5fba" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:9131f365-772d-4ce1-b6ae-334380d41a21 转移而来,操作时间 Thu, 11 Apr 2024 14:12:53 +0800" /&gt;&lt;borrow barcode="B010" refID="aff9bf5d-7eaf-49d4-93a8-0910977c20a4" oi="" recPath="ryh测试库实体/10" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:10:00 +0800" borrowPeriod="31day" borrowID="0d8bcce7-37dd-4a4b-92b0-6ac0a6dd1173" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:9131f365-772d-4ce1-b6ae-334380d41a21 转移而来,操作时间 Thu, 11 Apr 2024 14:12:53 +0800" /&gt;&lt;borrow barcode="B009" refID="b10e3257-f35b-477c-bbf8-429452887d34" oi="" recPath="ryh测试库实体/9" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:58 +0800" borrowPeriod="31day" borrowID="486ad8ad-1007-4668-8383-39ddef68b278" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:9131f365-772d-4ce1-b6ae-334380d41a21 转移而来,操作时间 Thu, 11 Apr 2024 14:12:53 +0800" /&gt;&lt;borrow barcode="B008" refID="cabc28bd-42cc-47be-abb0-81bd79f25900" oi="" recPath="ryh测试库实体/8" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:56 +0800" borrowPeriod="31day" borrowID="3c491350-1870-469b-a458-f41d3e9ad70d" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:9131f365-772d-4ce1-b6ae-334380d41a21 转移而来,操作时间 Thu, 11 Apr 2024 14:12:53 +0800" /&gt;&lt;borrow barcode="B007" refID="11f03db4-6711-4c74-a5d5-988166135a88" oi="" recPath="ryh测试库实体/7" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:53 +0800" borrowPeriod="31day" borrowID="bb6dc786-c0ac-44b3-abaa-16983c1e8199" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:9131f365-772d-4ce1-b6ae-334380d41a21 转移而来,操作时间 Thu, 11 Apr 2024 14:12:53 +0800" /&gt;&lt;borrow barcode="B006" refID="22430970-4dff-44d6-bf9b-18fccfec86eb" oi="" recPath="ryh测试库实体/6" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:52 +0800" borrowPeriod="31day" borrowID="0867f025-2bb8-4257-9706-73404ef6eaee" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:9131f365-772d-4ce1-b6ae-334380d41a21 转移而来,操作时间 Thu, 11 Apr 2024 14:12:53 +0800" /&gt;&lt;borrow barcode="B005" refID="925371a5-39cf-4e20-ba1c-dc2d01c81333" oi="" recPath="ryh测试库实体/5" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:50 +0800" borrowPeriod="31day" borrowID="fcb50359-e938-4896-879d-e3e444dd2382" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:9131f365-772d-4ce1-b6ae-334380d41a21 转移而来,操作时间 Thu, 11 Apr 2024 14:12:53 +0800" /&gt;&lt;borrow barcode="B004" refID="d5546053-b022-4fc7-a862-ee87bc621079" oi="" recPath="ryh测试库实体/4" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:49 +0800" borrowPeriod="31day" borrowID="7fd55fa5-e63d-4268-9984-3a653a84d577" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:9131f365-772d-4ce1-b6ae-334380d41a21 转移而来,操作时间 Thu, 11 Apr 2024 14:12:53 +0800" /&gt;&lt;borrow barcode="B003" refID="ab90c285-1dee-49d2-9af2-eadc4743fded" oi="" recPath="ryh测试库实体/3" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:47 +0800" borrowPeriod="31day" borrowID="6ee7578a-0b16-4aa6-a1ab-aed50a3a33d3" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:9131f365-772d-4ce1-b6ae-334380d41a21 转移而来,操作时间 Thu, 11 Apr 2024 14:12:53 +0800" /&gt;&lt;borrow barcode="B002" refID="7ea3a869-e627-467f-a72e-d885a4942008" oi="" recPath="ryh测试库实体/2" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:05:16 +0800" borrowPeriod="31day" borrowID="505e392c-e83e-4945-bac5-d16cc8dcaccd" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:9131f365-772d-4ce1-b6ae-334380d41a21 转移而来,操作时间 Thu, 11 Apr 2024 14:12:53 +0800" /&gt;&lt;borrow barcode="B001" refID="94623e97-65e2-470e-b55e-160f0ce178a4" oi="" recPath="ryh测试库实体/1" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:05:15 +0800" borrowPeriod="31day" borrowID="9d5ee29e-d858-4dfe-85dc-ecac3c24b611" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:9131f365-772d-4ce1-b6ae-334380d41a21 转移而来,操作时间 Thu, 11 Apr 2024 14:12:53 +0800" /&gt;&lt;/borrows&gt;&lt;reservations /&gt;&lt;devolvedBorrows comment="已于 Thu, 11 Apr 2024 14:10:23 +0800 将下列借阅信息转移到读者 @refID:54fd66a8-e6cc-4a7d-8950-ad289a4c1c4e 名下"&gt;&lt;borrow barcode="B010" refID="aff9bf5d-7eaf-49d4-93a8-0910977c20a4" oi="" recPath="ryh测试库实体/10" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:10:00 +0800" borrowPeriod="31day" borrowID="0d8bcce7-37dd-4a4b-92b0-6ac0a6dd1173" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" /&gt;&lt;borrow barcode="B009" refID="b10e3257-f35b-477c-bbf8-429452887d34" oi="" recPath="ryh测试库实体/9" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:58 +0800" borrowPeriod="31day" borrowID="486ad8ad-1007-4668-8383-39ddef68b278" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" /&gt;&lt;borrow barcode="B008" refID="cabc28bd-42cc-47be-abb0-81bd79f25900" oi="" recPath="ryh测试库实体/8" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:56 +0800" borrowPeriod="31day" borrowID="3c491350-1870-469b-a458-f41d3e9ad70d" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" /&gt;&lt;borrow barcode="B007" refID="11f03db4-6711-4c74-a5d5-988166135a88" oi="" recPath="ryh测试库实体/7" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:53 +0800" borrowPeriod="31day" borrowID="bb6dc786-c0ac-44b3-abaa-16983c1e8199" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" /&gt;&lt;borrow barcode="B006" refID="22430970-4dff-44d6-bf9b-18fccfec86eb" oi="" recPath="ryh测试库实体/6" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:52 +0800" borrowPeriod="31day" borrowID="0867f025-2bb8-4257-9706-73404ef6eaee" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" /&gt;&lt;borrow barcode="B005" refID="925371a5-39cf-4e20-ba1c-dc2d01c81333" oi="" recPath="ryh测试库实体/5" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:50 +0800" borrowPeriod="31day" borrowID="fcb50359-e938-4896-879d-e3e444dd2382" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" /&gt;&lt;borrow barcode="B004" refID="d5546053-b022-4fc7-a862-ee87bc621079" oi="" recPath="ryh测试库实体/4" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:49 +0800" borrowPeriod="31day" borrowID="7fd55fa5-e63d-4268-9984-3a653a84d577" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" /&gt;&lt;borrow barcode="B003" refID="ab90c285-1dee-49d2-9af2-eadc4743fded" oi="" recPath="ryh测试库实体/3" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:09:47 +0800" borrowPeriod="31day" borrowID="6ee7578a-0b16-4aa6-a1ab-aed50a3a33d3" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" /&gt;&lt;borrow barcode="B002" refID="7ea3a869-e627-467f-a72e-d885a4942008" oi="" recPath="ryh测试库实体/2" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:05:16 +0800" borrowPeriod="31day" borrowID="505e392c-e83e-4945-bac5-d16cc8dcaccd" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:9131f365-772d-4ce1-b6ae-334380d41a21 转移而来,操作时间 Thu, 11 Apr 2024 14:05:35 +0800" /&gt;&lt;borrow barcode="B001" refID="94623e97-65e2-470e-b55e-160f0ce178a4" oi="" recPath="ryh测试库实体/1" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:05:15 +0800" borrowPeriod="31day" borrowID="9d5ee29e-d858-4dfe-85dc-ecac3c24b611" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" devolveComment="从读者 @refID:9131f365-772d-4ce1-b6ae-334380d41a21 转移而来,操作时间 Thu, 11 Apr 2024 14:05:35 +0800" /&gt;&lt;/devolvedBorrows&gt;&lt;borrowHistory count="1"&gt;&lt;borrow barcode="B011" refID="c3ad34ad-c1f6-4262-a347-b4e5f3e1f8cc" oi="" recPath="ryh测试库实体/11" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Thu, 11 Apr 2024 14:10:48 +0800" borrowPeriod="31day" borrowID="c45bed94-03ac-40b0-9b75-91d8edd1462e" returningDate="Sun, 12 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" returnDate="Thu, 11 Apr 2024 14:11:55 +0800" borrowOperator="supervisor" /&gt;&lt;/borrowHistory&gt;&lt;/root&gt;</targetReaderRecord>
  <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
  <version>1.10</version>
</root>

快照方式,移交借阅信息,不会关心源记录是否有在借,仅根据日志中的源记录和目标记录xml进行快照恢复,覆盖系统里的读者记录。

DigitalPlatform commented 3 months ago

hire

    <root>
        <operation>hire</operation> 操作类型
        <action>...</action> 具体动作 有hire hirelate两种
        <readerBarcode>R0000002</readerBarcode> 读者证条码号
        <operator>test</operator> 操作者
        <operTime>Fri, 08 Dec 2006 04:17:45 GMT</operTime> 操作时间
        <overdues>...</overdues> 租金信息 通常内容为一个字符串,为一个或多个<overdue>元素XML文本片断
        <readerRecord recPath='...'>...</readerRecord>  最新读者记录
        <readerRefID>...</readerRefID> 读者记录参考 ID。2024/4/8 增加
    </root>
DigitalPlatform commented 3 months ago

foregift

    <root>
        <operation>foregift</operation> 操作类型
        <action>...</action> 具体动作 目前有foregift return (注: return操作时,overdue元素里面的price属性,可以使用宏 %return_foregift_price% 表示当前剩余的押金额)
        <readerBarcode>R0000002</readerBarcode> 读者证条码号
        <operator>test</operator> 操作者
        <operTime>Fri, 08 Dec 2006 04:17:45 GMT</operTime> 操作时间
        <overdues>...</overdues> 押金信息 通常内容为一个字符串,为一个或多个<overdue>元素XML文本片断
        <readerRecord recPath='...'>...</readerRecord>  最新读者记录
        <readerRefID>...</readerRefID> 读者记录参考 ID。2024/4/8 增加
    </root>

交押金,一条完整样例

<root>
    <libraryCode>
    </libraryCode>
    <operation>foregift</operation>
    <action>foregift</action>
    <readerBarcode>P002</readerBarcode>
    <readerRefID>456</readerRefID>
    <overdues>&lt;overdue reason="押金。" price="CNY100.00" borrowDate="Wed, 10 Apr 2024 15:07:39 +0800" borrowPeriod="" returnDate="" borrowOperator="supervisor" id="638483584590254535-5" /&gt;</overdues>
    <readerRecord recPath="ryh读者/2">&lt;root&gt;&lt;barcode&gt;P002&lt;/barcode&gt;&lt;readerType&gt;本科生&lt;/readerType&gt;&lt;name&gt;任29&lt;/name&gt;&lt;department&gt;24级1班11&lt;/department&gt;&lt;libraryCode&gt;&lt;/libraryCode&gt;&lt;hire expireDate="Thu, 10 Apr 2025 14:56:09 +0800" period="一年" /&gt;&lt;refID&gt;456&lt;/refID&gt;&lt;expireDate&gt;Thu, 10 Apr 2025 14:56:09 +0800&lt;/expireDate&gt;&lt;overdues&gt;&lt;overdue reason="租金。于 Wed, 10 Apr 2024 14:56:09 +0800 交纳 一年 的租金,失效期为 Thu, 10 Apr 2025 14:56:09 +0800" price="CNY200.00" borrowDate="Wed, 10 Apr 2024 14:56:09 +0800" borrowPeriod="一年" returnDate="Thu, 10 Apr 2025 14:56:09 +0800" borrowOperator="supervisor" id="638483577693129717-2" /&gt;&lt;overdue reason="押金。" price="CNY100.00" borrowDate="Wed, 10 Apr 2024 15:07:39 +0800" borrowPeriod="" returnDate="" borrowOperator="supervisor" id="638483584590254535-5" /&gt;&lt;/overdues&gt;&lt;foregift /&gt;&lt;/root&gt;</readerRecord>
    <operator>supervisor</operator>
    <operTime>Wed, 10 Apr 2024 15:07:39 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

退押金样例

<root>
    <libraryCode>
    </libraryCode>
    <operation>foregift</operation>
    <action>return</action>
    <readerBarcode>P001</readerBarcode>
    <readerRefID>9131f365-772d-4ce1-b6ae-334380d41a21</readerRefID>
    <overdues>&lt;overdue reason="押金。" price="-CNY100.00" borrowDate="Mon, 15 Apr 2024 10:41:09 +0800" borrowPeriod="" returnDate="" borrowOperator="supervisor" id="638487744693428424-4" comment="退还押金" /&gt;</overdues>
    <readerRecord recPath="ryh读者/1">&lt;root&gt;&lt;barcode&gt;P001&lt;/barcode&gt;&lt;readerType&gt;本科生&lt;/readerType&gt;&lt;name&gt;任1&lt;/name&gt;&lt;department&gt;24级1班&lt;/department&gt;&lt;refID&gt;9131f365-772d-4ce1-b6ae-334380d41a21&lt;/refID&gt;&lt;libraryCode&gt;&lt;/libraryCode&gt;&lt;reservations&gt;&lt;/reservations&gt;&lt;borrows&gt;&lt;/borrows&gt;&lt;overdues&gt;&lt;overdue reason="押金。" price="-CNY100.00" borrowDate="Mon, 15 Apr 2024 10:41:09 +0800" borrowPeriod="" returnDate="" borrowOperator="supervisor" id="638487744693428424-4" comment="退还押金" /&gt;&lt;/overdues&gt;&lt;foregift&gt;CNY100.00&lt;/foregift&gt;&lt;createDate&gt;Mon, 15 Apr 2024 00:00:01 +0800&lt;/createDate&gt;&lt;expireDate&gt;Tue, 15 Apr 2025 00:00:02 +0800&lt;/expireDate&gt;&lt;dateOfBirth&gt;Mon, 01 Apr 2024 00:00:03 +0800&lt;/dateOfBirth&gt;&lt;hire expireDate="Tue, 15 Apr 2025 10:02:04 +0800" period="一年"&gt;&lt;/hire&gt;&lt;borrowHistory count="1"&gt;&lt;borrow barcode="B001" refID="94623e97-65e2-470e-b55e-160f0ce178a4" oi="" recPath="ryh测试库实体/1" biblioRecPath="ryh测试库/1" location="流通库" borrowDate="Fri, 12 Apr 2024 14:35:26 +0800" borrowPeriod="31day" borrowID="8f4ec3fe-3269-451c-8be8-eae2052f6a7b" returningDate="Mon, 13 May 2024 12:00:00 +0800" operator="supervisor" type="普通" price="CNY19.00" returnDate="Mon, 15 Apr 2024 10:40:56 +0800" borrowOperator="supervisor"&gt;&lt;/borrow&gt;&lt;/borrowHistory&gt;&lt;/root&gt;</readerRecord>
    <operator>supervisor</operator>
    <operTime>Mon, 15 Apr 2024 10:41:09 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>
renyh commented 2 months ago

settlement

结算是读者交费后,对违约金记录的进一步处理,只涉及到违约金库的记录,与读者记录没有关系。

action有3种值: 1)settlement(结算),功能是将违约金记录的已收费(amerced)状态改为结算(settlemented)状态。 2)undosettlement(撤消结算),功能是将违约金记录的结算(settlemented)状态改回为已收费(amerced)状态。 3)delete(删除),功能是删除违约金记录。注:内务或接口是只能删除结算状态的违约金记录。但用恢复日志方式,应不会关注逻辑,只是根据日志覆盖对应的违约金记录

日志格式说明

<root>
    <libraryCode></libraryCode>

    <operation>settlement</operation>

    <action>settlement/undosettlement/delete其一</action>

    <id>638466172018233902-1</id>  //对应违约金记录里的id元素

    <oldAmerceRecord recPath="违约金/1">...</oldAmerceRecord>   //旧记录内容
    <amerceRecord recPath="违约金/1">...</amerceRecord>  //新记录内容

    <operator>supervisor</operator>
    <operTime>Fri, 07 Jun 2024 14:31:01 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

各操作日志样例

结算 settlement

<root>
    <libraryCode>
    </libraryCode>
    <operation>settlement</operation>
    <action>settlement</action>

    <id>638466172018233902-1</id>

    <oldAmerceRecord recPath="违约金/1">...</oldAmerceRecord> 
    <amerceRecord recPath="违约金/1">...</amerceRecord>

    <operator>supervisor</operator>
    <operTime>Fri, 07 Jun 2024 14:31:01 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

撤消结算 undosettlement

<root>
    <libraryCode>
    </libraryCode>
    <operation>settlement</operation>
    <action>undosettlement</action>

    <id>638466172018233902-1</id>
    <oldAmerceRecord recPath="违约金/1">...</oldAmerceRecord>
    <amerceRecord recPath="违约金/1">...</amerceRecord>

    <operator>supervisor</operator>
    <operTime>Fri, 07 Jun 2024 14:40:22 +0800</operTime>
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>

删除结算 delete

<root>
    <libraryCode>
    </libraryCode>
    <operation>settlement</operation>
    <action>delete</action>

    <id>638466172018233902-1</id>
    <oldAmerceRecord recPath="违约金/1">...</oldAmerceRecord>

    ???todo 少了两个元素
    <clientAddress via="net.pipe://localhost/dp2library/xe">localhost</clientAddress>
    <version>1.10</version>
</root>
renyh commented 2 months ago

configChanged

修改library.xml配置文件。

action=change

这类日志,一般是在内务中调接口修改服务器的library.xml配置文件。目前在恢复日志时,不会被兑现。(todo确认)

<root>
    <operation>configChanged</operation>
    <action>change</action>
    <changedElements>amerce,readerdbgroup,itemdbgroup</changedElements>
    <oldValue>...</oldValue>
    <value>...</value>
    <comment>library.xml 被重新装载</comment>

    <operTime>Mon, 06 May 2024 11:25:08 +0800</operTime>
    <clientAddress>localhost</clientAddress>
    <version>1.10</version>
</root>

action=memory

这类日志,一般是没有调接口的情况下,修改了library.xml,然后dp2library自动感应到被修改,产生的日志,目前在恢复时不会兑现。

<root>
    <operation>configChanged</operation>
    <action>memory</action>
    <changedElements>[all],version,rmsserver,arrived,message,amerce,readerdbgroup,itemdbgroup,rightsTable,locationTypes,accounts,browseformats,virtualDatabases,valueTables,calendars,script,mailTemplates,zhongcihao,callNumber,monitors,utilDb,circulation,libraries,clock,libraryInfo</changedElements>
    <value>...</value>
    <comment>dp2library 启动时记载</comment>
    <operTime>Mon, 06 May 2024 11:31:38 +0800</operTime>
    <clientAddress>localhost</clientAddress>
    <version>1.10</version>
</root>