Beispiel #1
0
        public Enums.PayErrorMsg CheckParamsValid(GenerateOrderDto dto)
        {
            var errorMsg = Enums.PayErrorMsg.失败;

            if (dto.UserId <= 0 || dto.TotalFee < 0 || dto.Payment < 0 || dto.UserCouponId < 0 || dto.PostFee < 0)
            {
                return(Enums.PayErrorMsg.参数错误);
            }

            using (var cxt = DbContext(DbOperation.Read))
            {
                var repo   = new OrderRepo(cxt);
                var result = repo.CheckParamsValid(dto);
                EnumHelper.TryParsebyValue(result, out errorMsg);

                return(errorMsg);
            }
        }
Beispiel #2
0
        public ComplexResponse <object> GenerateOrder([FromBody] GenerateOrderDto dto)
        {
            try
            {
                var msg = Enums.PayErrorMsg.失败;

                var tradeNo = _orderService.GenerateOrder(dto, out msg);
                if (!string.IsNullOrEmpty(tradeNo))
                {
                    msg = Enums.PayErrorMsg.成功;
                }
                LogHelper.Info("\n\n生成订单号:" + tradeNo);

                return(new ComplexResponse <object>((int)msg, data: new { tradeNo }));
            }
            catch (Exception ex)
            {
                LogHelper.Debug("\n\n生成订单异常:\n", ex);
                return(new ComplexResponse <object>((int)Enums.PayErrorMsg.失败, ex.ToString()));
            }
        }
 public static Order ToOrder(this GenerateOrderDto dto)
 {
     return(dto != null?Mapper.Map <GenerateOrderDto, Order>(dto) : null);
 }
Beispiel #4
0
        public string GenerateOrder(GenerateOrderDto dto, out Enums.PayErrorMsg msg)
        {
            string tradeNo = string.Empty;

            msg = CheckParamsValid(dto);
            if (msg == Enums.PayErrorMsg.成功)
            {
                using (var cxt = DbContext(DbOperation.Write))
                {
                    cxt.BeginTransaction();
                    var repo = new OrderRepo(cxt);

                    var id = repo.Insert(new Order
                    {
                        TotalFee     = dto.TotalFee,
                        Payment      = dto.Payment,
                        PayType      = (int)Enums.PayType.微信支付,
                        UserCouponId = dto.UserCouponId,
                        PostFee      = dto.PostFee,
                        UserId       = dto.UserId,
                        UserNickname = dto.UserNickname,
                        IsDeleted    = 0,
                        Sort         = 0,
                        Status       = (int)Enums.OrderStatus.未付款,
                        Creator      = "admin",
                        PayTime      = DateTime.Now,
                        DeliveryTime = DateTime.Now,
                        EndTime      = DateTime.Now,
                        CloseTime    = DateTime.Now,
                        CreateTime   = DateTime.Now,
                        UpdateTime   = DateTime.Now,
                        ShippingName = dto.ShippingName,
                        UserMessage  = dto.UserMessage,
                        IsRate       = string.IsNullOrEmpty(dto.UserMessage) ? 0 : 1,
                    });

                    if (id > 0)
                    {
                        tradeNo = repo.GetTradeNo(id);
                        // 生成订单明细表
                        if (dto.OrderItemDtos.Any())
                        {
                            foreach (var orderItem in dto.OrderItemDtos)
                            {
                                orderItem.OrderId = (int)id;
                                if (repo.InsertOrderItem(orderItem) != 1)
                                {
                                    cxt.Rollback();
                                }
                            }
                        }
                        // 生成订单配送表
                        int result = repo.InsertOrderShipping(new OrderShipping
                        {
                            OrderId    = (int)id,
                            Name       = dto.Receiver,
                            Mobile     = dto.Mobile,
                            Province   = dto.Province,
                            City       = dto.City,
                            District   = dto.District,
                            Address    = dto.Address,
                            PostCode   = dto.PostCode,
                            CreateTime = DateTime.Now,
                            UpdateTime = DateTime.Now,
                            Status     = 1,
                        });

                        if (result == 1)
                        {
                            var flag = true;

                            #region 冻结用户优惠券

                            if (dto.UserCouponId > 0)
                            {
                                flag = repo.UpdateUserCoupon(dto.UserCouponId);
                            }

                            #endregion

                            #region  除购物车

                            if (!string.IsNullOrEmpty(dto.CartIds))
                            {
                                var cartIdArr = dto.CartIds.Split(',').Select(int.Parse).ToArray();
                                flag = repo.DeleteShoppingCart(cartIdArr);
                            }

                            #endregion

                            if (flag)
                            {
                                cxt.Commit();
                            }
                            else
                            {
                                cxt.Rollback();
                            }

                            #region 更新产品库存量(非必实现项)

                            try
                            {
                                var productRepo = new ProductRepo(cxt);

                                foreach (var orderItem in dto.OrderItemDtos)
                                {
                                    productRepo.AddAmount(orderItem.ProductId, -orderItem.Num);
                                }
                            }
                            catch (Exception)
                            {
                                // do nothing
                            }

                            #endregion
                        }
                        else
                        {
                            cxt.Rollback();
                        }
                    }
                    else
                    {
                        cxt.Rollback();
                    }
                }
            }

            return(tradeNo);
        }