예제 #1
0
        /// <summary>
        /// get specified order by order code.
        /// </summary>
        /// <param name="orderCode">order id</param>
        /// <returns></returns>
        public async Task <(bool Succeed, OrderItemResult Order, string ErrorMessage)> GetOrder(int userId,
                                                                                                string orderCode)
        {
            var order = await Dapper.QueryFirstOrDefaultAsync <OrderItemResult>(
                "select OrderCode,OrderStatus,PayStatus,CreatedOn,Result from `Order` where OrderCode=@orderCode and UserId=@userId",
                new { orderCode, userId });

            if (order == null)
            {
                return(false, null, "order not exists");
            }
            var lstDetail = await Dapper.QueryAsync <NewOrderDetail>(
                "select OrderCode,GoodsId,Count,Price from OrderDetail where OrderCode=@orderCode", new { orderCode });

            var lstGoodsId = lstDetail.Select(i => i.GoodsId).ToList();
            var lstGoods   = await GoodsService.GoodsInfos(lstGoodsId);

            order.GoodsInfos = new List <GoodsInfoObj>();
            lstDetail.ForEach(j =>
            {
                var srcGoods = lstGoods.FirstOrDefault(k => k.Id == j.GoodsId);
                order.GoodsInfos.Add(new GoodsInfoObj
                {
                    Count   = j.Count,
                    GoodsId = j.GoodsId,
                    Price   = j.Price,
                    Pic     = srcGoods?.Pic,
                    Title   = srcGoods?.Title
                });
            });
            order.Amount = order.GoodsInfos.Sum(k => k.Count * k.Price);
            return(true, order, "");
        }
예제 #2
0
        public async Task <(bool Succeed, string ErrorMessage, AuthResult Result)> Login(LoginView login)
        {
            var user = await Dapper.QueryFirstOrDefaultAsync(
                "select id,email,password,nickname from Users where email=@Email;",
                new { login.Email });

            if (user == null)
            {
                return(false, "Email does not exist!", null);
            }
            if (!BCryptor.Verify(login.Password, user.password))
            {
                return(false, "The password is incorrect!", null);
            }
            var claims = new[]
            {
                new Claim(ClaimTypes.Sid, user.id.ToString()),
                new Claim(ClaimTypes.Name, user.nickname),
                new Claim(ClaimTypes.NameIdentifier, login.Email),
                new Claim(ClaimTypes.Role, "user"),
            };
            var token = TokenBuilder.Build(claims, TimeSpan.FromDays(1));

            return(true, "", new AuthResult
            {
                Token = token.Token,
                Expire = token.Expires
            });
        }
예제 #3
0
        public async Task <ResponseResult <UserBase> > UserInfo(int userId)
        {
            var userInfo = await Dapper.QueryFirstOrDefaultAsync <UserBase>(
                "select Email,NickName from Users where Id=@userId",
                new { userId });

            if (userInfo == null)
            {
                return new ResponseResult <UserBase> {
                           Success = false, Error = "user not exists.", Result = null
                }
            }
            ;
            return(new ResponseResult <UserBase> {
                Success = true, Error = "", Result = userInfo
            });
        }
    }
예제 #4
0
        /// <summary>
        /// update order status
        /// </summary>
        /// <param name="orderCode">order uid</param>
        /// <param name="status">order status</param>
        /// <returns></returns>
        public async Task <ResponseResult <bool> > UpdateOrderStatus(string orderCode, OrderStatus status, string orderResult = "")
        {
            try
            {
                var order = await Dapper.QueryFirstOrDefaultAsync <NewOrderBase>(
                    "select OrderCode,OrderStatus,PayStatus from `Order` where OrderCode=@orderCode", new { orderCode });

                if (order.OrderStatus == status)
                {
                    //log
                    Logger.LogError($"order code is :{orderCode},updated status is the same to the old status.");
                    return(new ResponseResult <bool>
                    {
                        Result = false,
                        Error = $"operation not permitted.",
                        Success = false
                    });
                }

                if (order.OrderStatus == OrderStatus.Delete) //deleted order cann't be handle
                {
                    //log
                    Logger.LogError($"order code is :{orderCode},deleted order cann't be handled.");
                    return(new ResponseResult <bool>
                    {
                        Result = false,
                        Error = $"operation not permitted.",
                        Success = false
                    });
                }
                if (order.OrderStatus == OrderStatus.Failed) //failed order can only be delete
                {
                    if (status != OrderStatus.Delete)
                    {
                        //log
                        Logger.LogError($"order code is :{orderCode},failed order can only be deleted.");
                        return(new ResponseResult <bool>
                        {
                            Result = false,
                            Error = $"operation not permitted.",
                            Success = false
                        });
                    }
                }

                if (order.OrderStatus == OrderStatus.Cancel) //cancelled order can only be deleted
                {
                    if (status != OrderStatus.Delete)
                    {
                        //log
                        Logger.LogError($"order code is :{orderCode},cancelled order can only be deleted.");
                        return(new ResponseResult <bool>
                        {
                            Result = false,
                            Error = $"operation not permitted.",
                            Success = false
                        });
                    }
                }

                if (order.OrderStatus == OrderStatus.Submmit) //submmitted order can be cancelled or failed.
                {
                    if (status != OrderStatus.Cancel && status != OrderStatus.Failed)
                    {
                        //log
                        Logger.LogError($"order code is :{orderCode},submmitted order can only be cancelled or failed.");
                        return(new ResponseResult <bool>
                        {
                            Result = false,
                            Error = $"operation not permitted.",
                            Success = false
                        });
                    }
                }

                if (order.OrderStatus == OrderStatus.Complete) //completed order can only be deleted
                {
                    if (status != OrderStatus.Delete)
                    {
                        //log
                        Logger.LogError($"order code is :{orderCode},completed order can only be deleted.");
                        return(new ResponseResult <bool>
                        {
                            Result = false,
                            Error = $"operation not permitted.",
                            Success = false
                        });
                    }
                }

                var result = await Dapper.ExecuteAsync(
                    "update `Order` set OrderStatus=@status,Result=@orderResult where OrderCode=@orderCode",
                    new { status, orderResult, orderCode });

                if (result == 1)
                {
                    return(new ResponseResult <bool>
                    {
                        Result = true,
                        Error = "",
                        Success = true
                    });
                }
                else
                {
                    //log
                    Logger.LogError($"order code is :{orderCode},order status was not changed.");
                    return(new ResponseResult <bool>
                    {
                        Result = false,
                        Error = $"operation failed.",
                        Success = false
                    });
                }
            }
            catch (Exception e)
            {
                Logger.LogError(e, $"order code is :{orderCode},order status changed has error.");
                return(new ResponseResult <bool>
                {
                    Result = false,
                    Error = $"operation has error.",
                    Success = false
                });
            }
        }