/// <summary> /// 是否是无效配送时间点 /// </summary> /// <param name="so">订单</param> /// <param name="timestring">时间区域字符串的集合</param> /// <param name="holidays">所有假期,如果传值为null,将在程序中重新读取</param> /// <returns>无效返回真,否则返回假</returns> internal static bool IsInValidDeliveryTime(SOInfo so, string timestring, List <Holiday> holidays, bool isForceAudit) { bool isInvalid = false; //强制审核不用效验 if (isForceAudit) { return(isInvalid); } //未有配送时间无需判断 if (!so.ShippingInfo.DeliveryDate.HasValue) { return(isInvalid); } //订单类型团购不用判断 if (so.BaseInfo.SOType == SOType.GroupBuy) { return(isInvalid); } //配送信息 var shipType = ExternalDomainBroker.GetShippingTypeBySysNo(so.ShippingInfo.ShipTypeSysNo.Value); //配送类型是0,3的不检查 //只检查1和2 if (shipType.DeliveryType != ShipDeliveryType.OneDayOnce && shipType.DeliveryType != ShipDeliveryType.OneDayTwice) { return(isInvalid); } //节假日 List <Holiday> shipHolidays = null; if (holidays == null) { shipHolidays = ExternalDomainBroker.GetHolidayAfterToday(so.CompanyCode) .FindAll(x => x.ShipTypeSysNo == shipType.SysNo || !x.ShipTypeSysNo.HasValue); } else { shipHolidays = holidays.FindAll(x => x.ShipTypeSysNo == shipType.SysNo || !x.ShipTypeSysNo.HasValue); } //时间节点 List <TimeSpan> timepoints = null; if (string.IsNullOrEmpty(timestring)) { timepoints = GetDeliveryTimePointBySO(so); } else { timepoints = ParseTimeSpot(timestring); } if (timepoints.Count == 0) { return(isInvalid); } //计算器 DeliveryIteration calculator = new DeliveryIteration(DateTime.Now, (int)shipType.DeliveryType, shipHolidays, timepoints, shipType.IntervalDays ?? 0, null); calculator.Roll(); DateTime latestDate = calculator.LatestDate; int finalSection = calculator.FinalSection; //比较 if (so.ShippingInfo.DeliveryDate < latestDate) { isInvalid = true; } else if (so.ShippingInfo.DeliveryDate == latestDate) { if (so.ShippingInfo.DeliveryTimeRange < finalSection) { isInvalid = true; } } return(isInvalid); }