コード例 #1
0
        public bool CancelOrder(int userId, string tradeNo)
        {
            if (userId > 0 && !string.IsNullOrEmpty(tradeNo))
            {
                using (var ctx = DbContext(DbOperation.Write))
                {
                    ctx.BeginTransaction();

                    var repo = new OrderRepo(ctx);

                    if (repo.UpdateOrderStatus(tradeNo, (int)Enums.OrderStatus.交易关闭))
                    {
                        ctx.Commit();

                        #region 更新商品库存量

                        try
                        {
                            // 恢复商品库存量
                            var productRepo = new ProductRepo(ctx);
                            var productList = productRepo.GetProductsByTradeNo(tradeNo);

                            foreach (var orderItem in productList)
                            {
                                productRepo.AddAmount(orderItem.ProductId, orderItem.Num);
                            }
                        }
                        catch (Exception ex)
                        {
                            // nothing
                        }

                        #endregion

                        return(true);
                    }
                    else
                    {
                        ctx.Rollback();
                        return(false);
                    }
                }
            }
            return(false);
        }
コード例 #2
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);
        }