Esempio n. 1
0
        /// <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);
                }
            }
        }
Esempio n. 2
0
        /// <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);
                }
            }
        }