Example #1
0
        public void AddOrderTrace(string orderNO, Guid userId)
        {
            var user = DbSession.Users.GetSingle(u => u.ID == userId);

            if (user == null)
            {
                throw new Exception("当前用户不存在");
            }

            var order = DbSession.Orders.All.Where(o => (o.State != OrderState.Cancel && o.State != OrderState.Completed) && o.NO.Equals(orderNO)).FirstOrDefault();

            if (order == null)
            {
                throw new Exception("不存在该订单,订单可能被取消或订单已完成交易");
            }

            var trace = new OderTrace
            {
                ID              = Guid.NewGuid(),
                OrderID         = order.ID,
                SubmittedBy     = user,
                SubmittedUserID = user.ID,
                SubmitTime      = DateTime.Now,
                TraceOf         = order,
                Description     = user.TraceInfo == null ? "无到站信息" : user.TraceInfo.Info
            };

            order.Traces.Add(trace);

            DbSession.SaveChanges();
        }
Example #2
0
        public Entities.Order SubmitOrder(Guid userId, Entities.Order order)
        {
            var user = DbSession.Users.GetSingle(u => u.ID == userId);

            if (user == null)
            {
                throw new Exception("当前用户不存在");
            }

            // 计算运费
            decimal freight     = 10;
            decimal books_total = 0;

            foreach (var item in order.OrderItems)
            {
                var book = DbSession.Books.GetSingle(b => b.ID == item.BookID);
                books_total += book.SellingPrice.GetValueOrDefault() * (decimal)item.Quantity;
            }
            if (books_total >= 78)
            {
                freight = 0;
            }

            // 处理订单地址
            ReceiptInfo receipt = DbSession.ReceiptInfos.GetSingle(r => r.ID == order.Receipt.ID);

            if (receipt == null)
            {
                receipt = new ReceiptInfo
                {
                    ID          = Guid.NewGuid(),
                    Address     = order.Receipt.Address,
                    ReceiptName = order.Receipt.ReceiptName,
                    Phone       = order.Receipt.Phone,
                    Email       = order.Receipt.Email
                };
                user.Receipts.Add(receipt);
            }

            // 生成订单主体
            var newOrder = new Order
            {
                ID          = Guid.NewGuid(),
                NO          = DateTime.Now.ToString("yyyyMMddHHmm") + new Random().Next(0, 100),
                Freight     = freight,
                OrderPrice  = books_total + freight,
                SubmitDate  = DateTime.Now,
                State       = OrderState.Submitted,
                ReceiptID   = receipt.ID,
                UserID      = user.ID,
                ShipDate    = null,
                IsAudited   = false,
                AuditDate   = null,
                AuditUserID = null
            };

            DbSession.Orders.Add(newOrder, false);

            // 生成订单明细
            newOrder = user.Orders.FirstOrDefault(o => o.ID == newOrder.ID);
            foreach (var item in order.OrderItems)
            {
                var book    = DbSession.Books.GetSingle(b => b.ID == item.BookID);
                var newItem = new OrderItem
                {
                    BookID    = book.ID,
                    Quantity  = item.Quantity,
                    UnitPrice = book.SellingPrice.GetValueOrDefault()
                };
                newOrder.OrderItems.Add(newItem);
            }

            // 生成订单跟踪
            OderTrace trace = new OderTrace
            {
                ID              = Guid.NewGuid(),
                Description     = "客户" + user.Name + "提交了订单",
                SubmittedUserID = user.ID,
                SubmitTime      = DateTime.Now
            };

            newOrder.Traces.Add(trace);

            // 删除购物车商品
            foreach (var item in order.OrderItems)
            {
                var cartItem = user.ShoppingCart.CartItems.FirstOrDefault(i => i.BookID == item.BookID);
                if (cartItem == null)
                {
                    continue;
                }
                DbSession.CartItems.Delete(cartItem, false);
            }

            DbSession.SaveChanges();

            return(newOrder);
        }