/// <summary>
 /// 创建店铺优惠活动
 /// </summary>
 /// <param name="o">店铺优惠活动</param>
 /// <returns></returns>
 public int PromotionActivityCreate(Promotion.Activity o)
 {
     if (o.Global)
     {
         o.ItemScope = string.Empty;
     }
     if (o.LimitType == Promotion.LimitType.None)
     {
         o.LimitValue = 0;
     }
     return(Try(nameof(PromotionActivityCreate), () =>
     {
         var cmd = SqlBuilder.Insert("Activity")
                   .Column("Type", o.Type)
                   .Column("Name", o.Name)
                   .Column("Title", o.Title)
                   .Column("Global", o.Global)
                   .Column("WarmUp", o.WarmUp)
                   .Column("Infinite", o.Infinite)
                   .Column("Picture", o.Picture ?? string.Empty)
                   .Column("StartedOn", o.StartedOn)
                   .Column("StoppedOn", o.StoppedOn)
                   .Column("Platform", o.Platform)
                   .Column("MediaScope", o.MediaScope ?? string.Empty)
                   .Column("ItemScope", o.ItemScope ?? string.Empty)
                   .Column("LimitType", o.LimitType)
                   .Column("LimitValue", o.LimitValue)
                   .Column("FreightFree", o.FreightFree)
                   .Column("FreightFreeExclude", o.FreightFreeExclude ?? string.Empty)
                   .Column("ExternalUrl", o.ExternalUrl ?? string.Empty)
                   .Column("RuleData", o.RuleData)
                   .Column("SellerId", o.SellerId)
                   .Column("SellerName", o.SellerName)
                   .Column("Status", o.Status)
                   .Column("CreatedOn", o.CreatedOn)
                   .Column("ModifiedBy", o.ModifiedBy)
                   .Column("ModifiedOn", o.ModifiedOn)
                   .ToCommand(true);
         return PromotionConn.ExecuteScalar <int>(cmd);
     }));
 }
 /// <summary>
 /// 更新店铺优惠活动
 /// </summary>
 /// <param name="o">店铺优惠活动</param>
 /// <returns></returns>
 public bool PromotionActivityUpdate(Promotion.Activity o)
 {
     if (o.LimitType == Promotion.LimitType.None)
     {
         o.LimitValue = 0;
     }
     return(Try(nameof(PromotionActivityUpdate), () =>
     {
         var cmd = SqlBuilder.Update("Activity")
                   .Column("Name", o.Name)
                   .Column("Title", o.Title)
                   .Column("Global", o.Global)
                   .Column("WarmUp", o.WarmUp)
                   .Column("Infinite", o.Infinite)
                   .Column("Picture", o.Picture)
                   .Column("StartedOn", o.StartedOn)
                   .Column("StoppedOn", o.StoppedOn)
                   .Column("Platform", o.Platform)
                   .Column("MediaScope", o.MediaScope)
                   .Column("ItemScope", o.ItemScope)
                   .Column("LimitType", o.LimitType)
                   .Column("LimitValue", o.LimitValue)
                   .Column("FreightFree", o.FreightFree)
                   .Column("FreightFreeExclude", o.FreightFreeExclude)
                   .Column("ExternalUrl", o.ExternalUrl)
                   .Column("RuleData", o.RuleData)
                   //.Column("SellerId", o.SellerId)
                   //.Column("SellerName", o.SellerName)
                   .Column("Status", o.Status)
                   //.Column("CreatedOn", o.CreatedOn)
                   .Column("ModifiedBy", o.ModifiedBy)
                   .Column("ModifiedOn", o.ModifiedOn)
                   .Where("Id=@id", new { o.Id })
                   .ToCommand();
         return PromotionConn.Execute(cmd) > 0;
     }));
 }
        public async Task <IActionResult> Default(int id, bool global, Promotion.Activity model, Promotion.Activity.Rule[] rules)
        {
            var now = DateTime.Now;

            var result = new Result();

            if (id < 0)
            {
                result.Message = "参数错误";
                return(Json(result));
            }
            if (model.Name.IsNullOrEmpty())
            {
                result.Error("请输入活动名称");
                return(Json(result));
            }
            if (model.Name.Length > 100)
            {
                result.Error("活动名称限制为100个字符内");
                return(Json(result));
            }
            if (model.Title.IsNullOrEmpty())
            {
                result.Error("请输入活动标题");
                return(Json(result));
            }
            if (model.Title.Length > 100)
            {
                result.Error("活动标题限制为100个字符内");
                return(Json(result));
            }
            if (model.StartedOn < now.AddHours(-1))
            {
                result.Error("活动开始时间不可小于当前时间");
                return(Json(result));
            }
            if (model.StoppedOn < model.StartedOn)
            {
                result.Error("活动结束时间不可早于活动开始时间");
                return(Json(result));
            }

            if (rules == null || rules.Length < 1)
            {
                result.Message = "请设置优惠规则";
                return(Json(result));
            }

            rules = rules.Where(x => x.Threshold > 0 && x.Discount > 0).OrderByDescending(x => x.Threshold).ToArray();

            if (rules.Length < 1)
            {
                result.Message = "请设置优惠规则";
                return(Json(result));
            }

            for (var i = 0; i < rules.Length; i++)
            {
                var urle = rules[i];

                if (i > 0)
                {
                    var pre = rules[i - 1];
                    //if (model.Type == 0 && urle.Discount < pre.Discount)//保证当前层级优惠比上一级大
                    //{
                    //    result.Message = "优惠规则不合法";
                    //    return Json(result);
                    //}

                    //if (urle.SendGift && string.IsNullOrEmpty(urle.GiftData))
                    //{
                    //    if (string.IsNullOrEmpty(urle.GiftData))
                    //    {
                    //        result.Message = "赠品规则不合法";
                    //        return Json(result);
                    //    }
                    //}
                    //if (urle.SendCoupon)
                    //{
                    //    if (string.IsNullOrEmpty(urle.CouponData))
                    //    {
                    //        result.Message = "优惠券规则不合法";
                    //        return Json(result);
                    //    }
                    //}
                }
                //如果当前层级包邮 之后的层级都必须包邮 且不包邮地区都一样
                //if (urle.)
                //{
                //    for (var j = i; j < len; j++)
                //    {
                //        rules[j].FreightFreeSelected = true;
                //        rules[j].FreightFreeExclude = urle.FreightFreeExclude;
                //    }
                //}
            }

            if (id > 0)
            {
                var old = DefaultStorage.PromotionActivityGet(id);
                if (old == null)
                {
                    result.Message = "数据不存在";
                    return(Json(result));
                }



                var status = await TryUpdateModelAsync(model);

                if (status)
                {
                    old.RuleData = JsonConvert.SerializeObject(rules);

                    result.Status = DefaultStorage.PromotionActivityUpdate(old);
                    if (!result.Status)
                    {
                        result.Message = "更新失败";
                    }
                }
                else
                {
                    result.Message = "参数有误";
                }
                return(Json(result));
            }
            //检查时间段内是否有其它有效活动

            model.Global             = global;
            model.FreightFreeExclude = string.Empty;
            model.ExternalUrl        = string.Empty;
            model.RuleData           = JsonConvert.SerializeObject(rules);
            model.SellerId           = User.Id;
            model.SellerName         = User.Name;
            model.Status             = true;
            model.CreatedOn          = now;
            model.ModifiedBy         = "";
            model.ModifiedOn         = now;
            var newId = DefaultStorage.PromotionActivityCreate(model);

            if (newId > 0)
            {
                result.Success();
            }

            return(Json(result));
        }