public static bool Query(string code, out CouponCodeDto couponCode)
 {
     couponCode = null;
     using (var DB = new SSMMEntities())
     {
         var model = DB.CouponCode.SingleOrDefault(x => x.Code == code);
         if (model == null)
         {
             return(false);
         }
         //判断是否过期
         if (model.Status != 1 || DateTime.Now > model.ExpirationTime)
         {
             return(false);
         }
         couponCode = new CouponCodeDto()
         {
             Id             = model.Id,
             Code           = model.Code,
             Des            = model.Des,
             Amount         = model.Amount,
             CreateTime     = model.CreateTime,
             ExpirationTime = model.ExpirationTime,
             MaxCount       = model.MaxCount,
             Status         = model.Status
         };
         return(true);
     }
 }
Exemple #2
0
        public JsonResult CheckPCode()
        {
            var pcode = RequestHelper.GetValue("pcode");

            if (string.IsNullOrEmpty(pcode))
            {
                return(Json(new { result = false, info = "优惠码不能为空!" }, JsonRequestBehavior.DenyGet));
            }
            var     info       = "";
            decimal amount     = 0;
            var     couponcode = new CouponCodeDto();
            var     result     = CouponCodeService.Query(pcode, out couponcode);

            if (result)
            {
                amount = couponcode.Amount;
                info   = $"优惠码有效!优惠金额:{amount}";
            }
            else
            {
                info   = "优惠码已过期或已超过最大使用次数!";
                amount = 0;
            }
            return(Json(new { result = result, info = info, amount = amount }, JsonRequestBehavior.DenyGet));
        }
Exemple #3
0
        public ActionResult AddPost()
        {
            var des            = RequestHelper.GetValue("des");
            var amount         = RequestHelper.GetDecimal("amount");
            var expirationtime = RequestHelper.GetInt("expirationtime");

            if (amount <= 0 || expirationtime <= 0)
            {
                return(RedirectToAction("Add"));
            }
            var dto = new CouponCodeDto()
            {
                Code           = FormatHelper.GetCouponCode(),
                Des            = des,
                Amount         = amount,
                CreateTime     = DateTime.Now,
                ExpirationTime = DateTime.Now.AddDays(expirationtime),
                MaxCount       = 0,
                Status         = 1
            };
            var result = CouponCodeService.Add(dto);

            LogService.Info($"CouponCodeService.Add >>> {result} --- {dto.Code}");
            return(RedirectToAction("List"));
        }
Exemple #4
0
        public void ConvertToDto_CouponCodeNotNull_ReturnSameProducts()
        {
            CouponCode couponCode = MockCouponCode();

            CouponCodeDto couponCodeDto = couponCode.ConvertToDto();

            Assert.Equal(couponCode.Products, couponCodeDto.Products);
        }
Exemple #5
0
        public void ConvertToDto_CouponCodeNotNull_ReturnSameMinAmount()
        {
            CouponCode couponCode = MockCouponCode();

            CouponCodeDto couponCodeDto = couponCode.ConvertToDto();

            Assert.Equal(couponCode.MinAmount, couponCodeDto.MinAmount);
        }
Exemple #6
0
        public void ConvertToDto_CouponCodeNotNull_ReturnSameId()
        {
            CouponCode couponCode = MockCouponCode();

            CouponCodeDto couponCodeDto = couponCode.ConvertToDto();

            Assert.Equal(couponCode.Id, couponCodeDto.Id);
        }
Exemple #7
0
        public void ConvertToDto_CouponCodeNotNull_ReturnSameCDateStart()
        {
            CouponCode couponCode = MockCouponCode();

            CouponCodeDto couponCodeDto = couponCode.ConvertToDto();

            Assert.Equal(couponCode.DateStart, couponCodeDto.DateStart);
        }
Exemple #8
0
        public void ConvertToDto_CouponCodeNotNull_ReturnSameDateExpire()
        {
            CouponCode couponCode = MockCouponCode();

            CouponCodeDto couponCodeDto = couponCode.ConvertToDto();

            Assert.Equal(couponCode.DateExpire, couponCodeDto.DateExpire);
        }
Exemple #9
0
        public void ConvertToDto_CouponCodeNotNull_ReturnSameCustomers()
        {
            CouponCode couponCode = MockCouponCode();

            CouponCodeDto couponCodeDto = couponCode.ConvertToDto();

            Assert.Equal(couponCode.Customers, couponCodeDto.Customers);
        }
Exemple #10
0
        public void ConvertToDto_CouponCodeNotNull_ReturnSameSubCategories()
        {
            CouponCode couponCode = MockCouponCode();

            CouponCodeDto couponCodeDto = couponCode.ConvertToDto();

            Assert.Equal(couponCode.SubCategories, couponCodeDto.SubCategories);
        }
 /// <summary>
 /// 添加
 /// </summary>
 public static bool Add(CouponCodeDto dto)
 {
     using (var DB = new SSMMEntities())
     {
         DB.CouponCode.Add(new CouponCode()
         {
             Code           = dto.Code,
             Des            = dto.Des,
             Amount         = dto.Amount,
             CreateTime     = dto.CreateTime,
             ExpirationTime = dto.ExpirationTime,
             MaxCount       = dto.MaxCount,
             Status         = dto.Status
         });
         return(DB.SaveChanges() > 0);
     }
 }
Exemple #12
0
        /// <summary>
        /// 支付宝转账支付
        /// </summary>
        public static bool PayMentForAlipayTransfer(string uid, string pid, string pwd, string pcode, out string info)
        {
            info = "";
            decimal amount = 0;

            using (var DB = new SSMMEntities())
            {
                var user    = DB.User.SingleOrDefault(x => x.Email == uid);
                var product = DB.Product.Find(pid);
                if (product == null)
                {
                    info = "该产品不存在!请重新支付!";
                    return(false);
                }
                amount = product.Price;
                //优惠码
                var couponcode = new CouponCodeDto();
                if (CouponCodeService.Query(pcode, out couponcode))
                {
                    amount = product.Price - couponcode.Amount;
                    amount = amount < 0 ? 0 : amount;
                }
                else
                {
                    if (!string.IsNullOrEmpty(pcode))
                    {
                        info = "优惠码已过期或已超过最大使用次数!请重新支付!";
                        return(false);
                    }
                }
                var tradeno = FormatHelper.GenerateOutTradeNo();
                //生成订单
                DB.Order.Add(new Order()
                {
                    TradeNumber = tradeno,
                    ProductId   = product.Id,
                    ProductName = product.Name,
                    Price       = product.Price,
                    Amount      = amount,
                    CreateTime  = DateTime.Now,
                    Status      = 1,
                    Type        = PaymentType.支付宝转账.ToString(),
                    UserId      = user.Id
                });
                //ss信息
                var ss = DB.SS.SingleOrDefault(x => x.userid == user.Id);
                if (ss == null)
                {
                    DB.SS.Add(new SS()
                    {
                        id = tradeno,
                        t  = FormatHelper.ConvertDateTimeInt(DateTime.Now),   //ss服务端更新时间
                        u  = 0,                                               //上传流量
                        d  = 0,                                               //下载流量
                        transfer_enable = FormatHelper.GB2B(product.Traffic), //long 总套餐流量
                        port            = SSService.GetNextPort(),            //端口
                        password        = pwd,                                //密码
                        @switch         = 1,
                        enable          = 1,
                        isrest          = product.IsRest,                                                               //是否重置流量
                        last_rest_time  = FormatHelper.ConvertDateTimeInt(DateTime.Now.AddDays(30)),                    //重置流量时间
                        expiration_time = FormatHelper.ConvertDateTimeInt(DateTime.Now.AddDays(product.ExpirationDay)), //过期时间
                        create_time     = FormatHelper.ConvertDateTimeInt(DateTime.Now),
                        userid          = user.Id
                    });
                }
                else
                {
                    ss.t = FormatHelper.ConvertDateTimeInt(DateTime.Now);    //ss服务端更新时间
                    ss.u = 0;                                                //上传流量
                    ss.d = 0;                                                //下载流量
                    ss.transfer_enable = FormatHelper.GB2B(product.Traffic); //long 总套餐流量
                    ss.password        = pwd;                                //密码
                    ss.@switch         = 1;
                    ss.enable          = 1;
                    ss.isrest          = product.IsRest;                                                               //是否重置流量
                    ss.last_rest_time  = FormatHelper.ConvertDateTimeInt(DateTime.Now.AddDays(30));                    //重置流量时间
                    ss.expiration_time = FormatHelper.ConvertDateTimeInt(DateTime.Now.AddDays(product.ExpirationDay)); //过期时间
                    ss.create_time     = FormatHelper.ConvertDateTimeInt(DateTime.Now);
                }
                //返佣
                if (user.ParentId.HasValue)
                {
                    var parent = DB.User.Find(user.ParentId.Value);
                    if (parent != null)
                    {
                        var num          = Convert.ToInt32(SettingCache.Cache.Get(SettingFlag.RebateNum)) * 0.01;
                        var agentamounts = amount * (decimal)num;//返佣金额为最终优惠后的实际交易价格的返佣百分比
                        parent.Balance += agentamounts;
                        DB.Record.Add(new Record()
                        {
                            Amount     = agentamounts,
                            CreateTime = DateTime.Now,
                            Type       = RecordType.返佣.ToString(),
                            Info       = $"用户[{user.Id}]{user.Email}购买了{product.Name},产品价格{product.Price.ToString("0.00")}元,最终交易价格{amount.ToString("0.00")}元,返佣百分比{num * 100}%,返佣金额{agentamounts.ToString("0.00")}元",
                            UserId     = parent.Id,
                            Remark     = PaymentType.支付宝转账.ToString()
                        });
                    }
                }
                if (DB.SaveChanges() > 0)
                {
                    info = "支付成功!";
                    return(true);
                }
                else
                {
                    info = "发现错误!支付失败!";
                    return(false);
                }
            }
        }
Exemple #13
0
        /// <summary>
        /// 校验参数签名,返回最终订单金额
        /// </summary>
        public static bool CheckParameterSign(string uid, string pid, string pwd, string pcode, int timestamp, string sign, PaymentType type, out string info, out decimal amount)
        {
            info   = "";
            amount = 0;
            //校验参数
            var ServerSign = ParameterSign(uid, pid, pwd, pcode, timestamp);

            if (sign != ServerSign)
            {
                info = "签名错误!请重新支付!";
                return(false);
            }
            var time = FormatHelper.GetTime(timestamp);

            if ((DateTime.Now - time).TotalMinutes > 30)
            {
                info = "支付已过期!请重新支付!";
                return(false);
            }
            using (var DB = new SSMMEntities())
            {
                var user = DB.User.SingleOrDefault(x => x.Email == uid);
                if (user == null)
                {
                    info = "该用户不存在!请重新支付!";
                    return(false);
                }
                var product = DB.Product.Find(pid);
                if (product == null)
                {
                    info = "该产品不存在!请重新支付!";
                    return(false);
                }
                amount = product.Price;
                //优惠码
                var couponcode = new CouponCodeDto();
                if (CouponCodeService.Query(pcode, out couponcode))
                {
                    amount = product.Price - couponcode.Amount;
                    amount = amount < 0 ? 0 : amount;
                }
                else
                {
                    if (!string.IsNullOrEmpty(pcode))
                    {
                        info = "优惠码已过期或已超过最大使用次数!请重新支付!";
                        return(false);
                    }
                }
                //支付方式为 支付宝转账 优惠后的价格为0
                if (type == PaymentType.支付宝转账)
                {
                    if (amount == 0)
                    {
                        info = "支付成功!";
                        return(true);
                    }
                }
                //支付方式为 账户余额支付 需要校验余额
                if (type == PaymentType.账户余额)
                {
                    if (user.Balance < amount)
                    {
                        info = "账户余额不足!";
                        return(false);
                    }
                }

                return(true);
            }
        }