// 判断是否超过保留期限 // return: // -1 error // 0 没有超过 // 1 已经超过 int CheckeOutOfReservation( Calendar calendar, XmlDocument queue_rec_dom, out string strError) { strError = ""; string strState = DomUtil.GetElementText(queue_rec_dom.DocumentElement, "state"); // 对通知完成后的记录, 循环中不必处理 if (StringUtil.IsInList("outof", strState) == true) return 0; string strNotifyDate = DomUtil.GetElementText(queue_rec_dom.DocumentElement, "notifyDate"); /* string strItemBarcode = DomUtil.GetElementText(queue_rec_dom.DocumentElement, "itemBarcode"); string strReaderBarcode = DomUtil.GetElementText(queue_rec_dom.DocumentElement, "readerBarcode"); * */ // 解析期限值 string strPeriodUnit = ""; long lPeriodValue = 0; int nRet = LibraryApplication.ParsePeriodUnit( this.App.ArrivedReserveTimeSpan, out lPeriodValue, out strPeriodUnit, out strError); if (nRet == -1) { strError = "预约保留期限 值 '" + this.App.ArrivedReserveTimeSpan + "' 格式错误: " + strError; return -1; } // DateTime notifydate; try { notifydate = DateTimeUtil.FromRfc1123DateTimeString(strNotifyDate); } catch { strError = "通知日期值 '" + strNotifyDate + "' 格式错误"; return -1; } DateTime timeEnd = DateTime.MinValue; nRet = LibraryApplication.GetOverTime( calendar, notifydate, lPeriodValue, strPeriodUnit, out timeEnd, out strError); if (nRet == -1) { strError = "计算保留期过程发生错误: " + strError; return -1; } DateTime now = this.App.Clock.UtcNow; // DateTime.UtcNow; // 正规化时间 nRet = DateTimeUtil.RoundTime(strPeriodUnit, ref now, out strError); if (nRet == -1) return -1; TimeSpan delta = now - timeEnd; long lDelta = 0; nRet = LibraryApplication.ParseTimeSpan( delta, strPeriodUnit, out lDelta, out strError); if (nRet == -1) return -1; if (lDelta > 0) return 1; return 0; }