/// <summary> /// 检查冲突的规则 /// </summary> /// <param name="entity"></param> private static void CheckConflictRule(FreeShippingChargeRuleInfo entity) { List <FreeShippingChargeRuleInfo> allValidRules = FreeShippingChargeRuleDA.GetAllByStatus(FreeShippingAmountSettingStatus.Active, entity.SellerSysNo.Value); allValidRules.RemoveAll(x => x.SysNo == entity.SysNo); if (allValidRules != null && allValidRules.Count > 0) { List <FreeShippingChargeRuleInfo> checkList = new List <FreeShippingChargeRuleInfo>(); List <SimpleObject> conflictList = new List <SimpleObject>(); // 1. 找出有相同时间段的规则 foreach (var ruleItem in allValidRules) { if (entity.StartDate >= ruleItem.StartDate && entity.EndDate <= ruleItem.EndDate) { checkList.Add(ruleItem); } else if (entity.StartDate <= ruleItem.StartDate && entity.EndDate >= ruleItem.StartDate) { checkList.Add(ruleItem); } else if (entity.StartDate <= ruleItem.EndDate && entity.EndDate >= ruleItem.EndDate) { checkList.Add(ruleItem); } } #region 旧逻辑 现在不用 /*if (HasElements(entity.PayTypeSettingValue) || HasElements(entity.ShipAreaSettingValue)) * { * SimpleObjectEqualityComparer comparer = new SimpleObjectEqualityComparer(); * * for (var index = checkList.Count - 1; index >= 0; index--) * { * var rule = checkList[index]; * bool conflict = false; * SimpleObject conflictObject = null; * * //2. 检查这些规则是否和当前规则有相同的支付方式 * if (HasElements(entity.PayTypeSettingValue) && HasElements(rule.PayTypeSettingValue)) * { * var intersect = entity.PayTypeSettingValue.Intersect(rule.PayTypeSettingValue, comparer); * if (intersect != null && intersect.Count() > 0) * { * conflict = true; * //冲突的支付方式:{0} ! * conflictObject = new SimpleObject() * { * ID = rule.SysNo.ToString(), * BakString1 = string.Format("冲突的支付方式:{0} !", String.Join(",", intersect.Select(x => x.Name))) * }; * } * } * else * { * //没有配置支付方式表示不限定配送方式,相当于entity和rule具有相同的支付方式设置,支付方式冲突 * conflict = true; * conflictObject = new SimpleObject() * { * ID = rule.SysNo.ToString(), * BakString1 = "支付方式冲突 !" * }; * } * * //2. 检查这些规则是否和当前规则有相同的配送区域 * if (HasElements(entity.ShipAreaSettingValue) && HasElements(rule.ShipAreaSettingValue)) * { * var intersect = entity.ShipAreaSettingValue.Intersect(rule.ShipAreaSettingValue, comparer); * if (intersect != null && intersect.Count() > 0) * { * if (conflict) * { * //冲突的配送区域:{0} ! * conflictObject.BakString1 = string.Format("{0} {1}", conflictObject.BakString1 * , string.Format("冲突的配送区域:{0} !", String.Join(",", intersect.Select(x => x.Name)))); * } * } * else * { * conflict = false; * conflictObject = null; * } * } * else * { * if (conflict) * { * //冲突的配送区域 * conflictObject.BakString1 = string.Format("{0} {1}", conflictObject.BakString1 * , "配送区域冲突!"); * } * } * * if (conflict) * { * conflictList.Add(conflictObject); * break; * } * } * } * else * { * if (checkList.Count > 0) * { * var checkItem = checkList.First(); * //冲突的时间范围:{1:yyyy-MM-dd} - {2:yyyy-MM-dd} ! * conflictList.Add(new SimpleObject() * { * ID = checkItem.SysNo.ToString(), * BakString1 = string.Format("冲突的时间范围:{0:yyyy-MM-dd} - {1:yyyy-MM-dd} !", checkItem.StartDate, checkItem.EndDate) * }); * } * }*/ #endregion if (checkList.Count > 0) { SimpleObjectEqualityComparer comparer = new SimpleObjectEqualityComparer(); foreach (var checkitem in checkList) { bool conflict = false; SimpleObject conflictObject = null; var Intersect = checkitem.ProductSettingValue.Intersect(entity.ProductSettingValue, comparer); if (Intersect != null && Intersect.Count() > 0) { conflict = true; conflictObject = new SimpleObject() { ID = checkitem.SysNo.ToString(), BakString1 = string.Format("冲突的商品:{0} !", String.Join(",", Intersect.Select(x => x.Name))) }; } if (conflict) { conflictList.Add(conflictObject); break; } } } if (conflictList.Count > 0) { var conflictRuleItem = conflictList.First(); throw new BusinessException("存在冲突的免运费规则:编号为{0},{1} ", conflictRuleItem.ID, conflictRuleItem.BakString1); } } }
/// <summary> /// 检查冲突的规则 /// </summary> /// <param name="entity"></param> private void CheckConflictRule(FreeShippingChargeRuleInfo entity) { List <FreeShippingChargeRuleInfo> allValidRules = ObjectFactory <IFreeShippingChargeRuleDA> .Instance.GetAllByStatus(FreeShippingAmountSettingStatus.Active); allValidRules.RemoveAll(x => x.SysNo == entity.SysNo); if (allValidRules != null && allValidRules.Count > 0) { List <FreeShippingChargeRuleInfo> checkList = new List <FreeShippingChargeRuleInfo>(); List <SimpleObject> conflictList = new List <SimpleObject>(); // 1. 找出有相同时间段的规则 foreach (var ruleItem in allValidRules) { if (entity.StartDate >= ruleItem.StartDate && entity.EndDate <= ruleItem.EndDate) { checkList.Add(ruleItem); } else if (entity.StartDate <= ruleItem.StartDate && entity.EndDate >= ruleItem.StartDate) { checkList.Add(ruleItem); } else if (entity.StartDate <= ruleItem.EndDate && entity.EndDate >= ruleItem.EndDate) { checkList.Add(ruleItem); } } if (HasElements(entity.PayTypeSettingValue) || HasElements(entity.ShipAreaSettingValue)) { SimpleObjectEqualityComparer comparer = new SimpleObjectEqualityComparer(); for (var index = checkList.Count - 1; index >= 0; index--) { var rule = checkList[index]; bool conflict = false; SimpleObject conflictObject = null; //2. 检查这些规则是否和当前规则有相同的支付方式 if (HasElements(entity.PayTypeSettingValue) && HasElements(rule.PayTypeSettingValue)) { var intersect = entity.PayTypeSettingValue.Intersect(rule.PayTypeSettingValue, comparer); if (intersect != null && intersect.Count() > 0) { conflict = true; //冲突的支付方式:{0} ! conflictObject = new SimpleObject() { ID = rule.SysNo.ToString(), BakString1 = GetMessageString("Res_ConflictPayType", String.Join(",", intersect.Select(x => x.Name))) }; } } else { //没有配置支付方式表示不限定配送方式,相当于entity和rule具有相同的支付方式设置,支付方式冲突 conflict = true; conflictObject = new SimpleObject() { ID = rule.SysNo.ToString(), BakString1 = GetMessageString("Res_ConflictAllPayType") }; } //2. 检查这些规则是否和当前规则有相同的配送区域 if (HasElements(entity.ShipAreaSettingValue) && HasElements(rule.ShipAreaSettingValue)) { var intersect = entity.ShipAreaSettingValue.Intersect(rule.ShipAreaSettingValue, comparer); if (intersect != null && intersect.Count() > 0) { if (conflict) { //冲突的配送区域:{0} ! conflictObject.BakString1 = string.Format("{0} {1}", conflictObject.BakString1 , GetMessageString("Res_ConflictShipArea", String.Join(",", intersect.Select(x => x.Name)))); } } else { conflict = false; conflictObject = null; } } else { if (conflict) { //冲突的配送区域 conflictObject.BakString1 = string.Format("{0} {1}", conflictObject.BakString1 , GetMessageString("Res_ConflictAllShipArea")); } } if (conflict) { conflictList.Add(conflictObject); break; } } } else { if (checkList.Count > 0) { var checkItem = checkList.First(); //冲突的时间范围:{1:yyyy-MM-dd} - {2:yyyy-MM-dd} ! conflictList.Add(new SimpleObject() { ID = checkItem.SysNo.ToString(), BakString1 = GetMessageString("Res_ConflictTimeRange", checkItem.StartDate, checkItem.EndDate) }); } } if (conflictList.Count > 0) { var conflictRuleItem = conflictList.First(); ThrowBizException("Res_ConflictCheckResult", conflictRuleItem.ID, conflictRuleItem.BakString1); } } }