/// <summary>
 /// 创建新的 Sale_Order_Invoice 对象。
 /// </summary>
 /// <param name="intInvoicID">intInvoicID 属性的初始值。</param>
 /// <param name="vchOrderCode">vchOrderCode 属性的初始值。</param>
 public static Sale_Order_Invoice CreateSale_Order_Invoice(global::System.Int32 intInvoicID, global::System.String vchOrderCode)
 {
     Sale_Order_Invoice sale_Order_Invoice = new Sale_Order_Invoice();
     sale_Order_Invoice.intInvoicID = intInvoicID;
     sale_Order_Invoice.vchOrderCode = vchOrderCode;
     return sale_Order_Invoice;
 }
 /// <summary>
 /// 用于向 Sale_Order_Invoice EntitySet 添加新对象的方法,已弃用。请考虑改用关联的 ObjectSet&lt;T&gt; 属性的 .Add 方法。
 /// </summary>
 public void AddToSale_Order_Invoice(Sale_Order_Invoice sale_Order_Invoice)
 {
     base.AddObject("Sale_Order_Invoice", sale_Order_Invoice);
 }
Example #3
0
        /// <summary>
        /// 创建订单
        /// </summary>
        /// <param name="guid"></param>
        /// <param name="channelId"></param>
        /// <param name="uid"></param>
        /// <param name="userId"></param>
        /// <param name="orderEntity"></param>
        /// <returns></returns>
        public static MResult<ItemOrder> CreateOrder(string guid, int channelId, string uid, int userId, OrderEntity orderEntity)
        {
            var result = new MResult<ItemOrder>(true);

            try
            {
                var memberDal = DALFactory.Member();
                var baseDataDal = DALFactory.BaseData();
                var shoppingCartDal = DALFactory.ShoppingCartDal();
                var orderDal = DALFactory.Order();

                var payId = MCvHelper.To<int>(orderEntity.payid, -1);

                #region 验证数据

                #region 用户是否登录
                if (userId <= 0)
                {
                    result.msg = "请登录后再操作!";
                    result.status = MResultStatus.ParamsError;
                    return result;
                }
                #endregion

                #region 收货地址
                if (orderEntity.addressid <= 0)
                {
                    result.msg = "请选择收货地址!";
                    result.status = MResultStatus.ParamsError;
                    return result;
                }
                #endregion

                #region 支付方式
                if (payId < 0)
                {
                    result.msg = "请选择支付方式!";
                    result.status = MResultStatus.ParamsError;
                    return result;
                }
                #endregion

                #region 配送方式
                if (orderEntity.logisticsid <= 0)
                {
                    result.msg = "请选择配送方式!";
                    result.status = MResultStatus.ParamsError;
                    return result;
                }
                #endregion

                #region 发票信息是否完整
                if (orderEntity.titletype == null)
                {
                    result.msg = "请选择发票类型!";
                    result.status = MResultStatus.ParamsError;
                    return result;
                }
                if (orderEntity.titletype != Entity.Enum.Invoice.TitleType.NoNeed)
                {
                    if (orderEntity.invoicecategory == null)
                    {
                        result.msg = "请选择发票分类!";
                        result.status = MResultStatus.ParamsError;
                        return result;
                    }
                    if (orderEntity.titletype == Entity.Enum.Invoice.TitleType.Company && string.IsNullOrEmpty(orderEntity.invoicetitle))
                    {
                        result.msg = "请填写发票抬头!";
                        result.status = MResultStatus.ParamsError;
                        return result;
                    }
                }
                #endregion

                #endregion

                var memberInfo = memberDal.GetMemberInfo(uid);

                #region 验证用户是否存在
                if (memberInfo == null || memberInfo.membNo <= 0)
                {
                    result.msg = "该用户不存在!";
                    result.status = MResultStatus.ParamsError;
                    return result;
                }
                #endregion

                //购物车商品数据
                List<ShoppingCartEntity> norMalShoppingCartList = null;

                #region 判断购物车是否有商品
                var shoppingCartList = shoppingCartDal.GetShoppingCartProductInfosByUserIDGuidChannelID(userId, guid, channelId);
                if (shoppingCartList == null || !shoppingCartList.Any())
                {
                    result.msg = "购物车没有商品!";
                    result.status = MResultStatus.LogicError;
                    return result;
                }
                norMalShoppingCartList = (from a in shoppingCartList
                                          where a.intIsDelete == 0
                                          select a).ToList();

                if (!norMalShoppingCartList.Any())
                {
                    result.msg = "购物车没有商品!";
                    result.status = MResultStatus.LogicError;
                    return result;
                }
                #endregion

                #region 该用户是否是黑名单
                var isExistBacklist = memberDal.CheckUserIdInBackList(userId);
                if (isExistBacklist)
                {
                    result.msg = "您的用户出现异常,请联系我们的客服人员进行解决!";
                    result.status = MResultStatus.LogicError;
                    return result;
                }
                #endregion

                //收货地址信息
                var addressInfo = memberDal.GetMemberAddressInfo(orderEntity.addressid);

                #region 验证收货地址
                #region 是否存在
                if (addressInfo == null || addressInfo.intAddressID <= 0 || addressInfo.intCityID <= 0 && payId <= 0 && orderEntity.logisticsid <= 0)
                {
                    result.msg = "收货地址信息不正确!";
                    result.status = MResultStatus.ParamsError;
                    return result;
                }
                #endregion
                #endregion

                //配送方式
                var deliverInfo = baseDataDal.GetDeliverInfo(orderEntity.logisticsid);

                #region 验证配送方式
                if (deliverInfo == null || deliverInfo.intDeliverID == 0)
                {
                    result.msg = "验证配送方式信息不正确!";
                    result.status = MResultStatus.ParamsError;
                    return result;
                }
                #endregion

                #region 检查商品销售区域
                var checkGoodsSaleAreaState = CheckGoodsSaleArea(norMalShoppingCartList, userId, MCvHelper.To<int>(addressInfo.intCityID), channelId);
                if (checkGoodsSaleAreaState.Any())
                {
                    result.msg = "有部分商品不在您选择的区域内销售!";
                    result.status = MResultStatus.LogicError;
                    result.data = String.Join(",", checkGoodsSaleAreaState.ToArray());
                    return result;
                }
                #endregion

                var summaryOrderInfo = SummaryOrderInfo(norMalShoppingCartList, channelId, userId,
                    payId, orderEntity.logisticsid,
                                                     MCvHelper.To<int>(addressInfo.intCityID));

                #region 开始创建订单
                if (summaryOrderInfo != null && summaryOrderInfo.TotalGoodsFee > 0)
                {
                    var order = new Sale_Order();

                    #region 订单主表信息
                    order.dtCreateDate = DateTime.Now;
                    order.dtSendDate = CheckDateTime(orderEntity.posttimetype, orderEntity.logisticsid);                         //处理送货日期
                    order.intChannel = channelId;
                    order.intCreaterID = 555;
                    order.intDeliverID = orderEntity.logisticsid;
                    order.intLogisticsID = 21;
                    order.intOrderState = 1;
                    order.intOrderType = 1;
                    order.intPayID = payId;
                    order.intPayState = 0;
                    order.intStockID = 100;
                    order.intTotalStars = summaryOrderInfo.TotalScore;
                    order.intUserID = userId;
                    order.numAddAmount = 0;
                    order.numCarriage = summaryOrderInfo.TotalFreight;
                    order.numChange = 0;
                    order.numGoodsAmount = summaryOrderInfo.TotalGoodsFee;
                    order.numCouponAmount = summaryOrderInfo.TotalDiscountFee;
                    order.numReceAmount = summaryOrderInfo.TotalOrderFee;
                    order.numWeight = summaryOrderInfo.TotalWeight;
                    order.vchSendTime = order.dtSendDate.ToShortTimeString();
                    order.vchUserCode = memberInfo.userCode;
                    order.vchOrderCode = GetOrderCode();
                    #endregion

                    #region 配送信息

                    var deliver = new Sale_Order_Deliver();
                    deliver.intAddressID = addressInfo.intAddressID;
                    deliver.intCityID = MCvHelper.To<int>(addressInfo.intCityID, 0);
                    deliver.vchCityName = addressInfo.vchCityName;
                    deliver.vchConsignee = addressInfo.vchConsignee;
                    deliver.intCountyID = MCvHelper.To<int>(addressInfo.intCountyID, 0);
                    deliver.vchCountyName = addressInfo.vchCountyName;
                    deliver.vchDetailAddr = addressInfo.vchStateName + "," + addressInfo.vchCityName + "," + addressInfo.vchCountyName + "," + addressInfo.vchDetailAddr;
                    deliver.vchHausnummer = addressInfo.vchHausnummer;
                    deliver.vchMobile = addressInfo.vchMobile;
                    deliver.vchPhone = addressInfo.vchPhone;
                    deliver.vchPostCode = addressInfo.vchPostCode;
                    deliver.vchRoadName = addressInfo.vchRoadName;
                    deliver.intStateID = MCvHelper.To<int>(addressInfo.intStateID, 0);
                    deliver.vchStateName = addressInfo.vchStateName;
                    deliver.vchUserMemo = orderEntity.remark;
                    deliver.vchOrderCode = order.vchOrderCode;

                    #endregion

                    #region 发票信息

                    var invoice = new Sale_Order_Invoice();
                    if (orderEntity.titletype != null && orderEntity.titletype != Invoice.TitleType.NoNeed)
                    {
                        if (orderEntity.titletype == Invoice.TitleType.Personal)
                        {
                            invoice.vchInvoicTitile = "个人";
                        }
                        else if (orderEntity.titletype == Invoice.TitleType.Company)
                        {
                            invoice.vchInvoicTitile = orderEntity.invoicetitle;
                        }

                        invoice.intInvoiceType = (int)orderEntity.invoicecategory;
                        invoice.intInvoiceKind = 1;
                        invoice.numAmount = order.numReceAmount;
                        invoice.dtBillingTime = DateTime.Now;
                        invoice.dtCreateDate = DateTime.Now;
                        invoice.intIsBilling = 1;
                        invoice.intIsDetail = 0;
                        invoice.vchOrderCode = order.vchOrderCode;
                        invoice.vchPhone = addressInfo.vchPhone;
                        invoice.intUserID = userId;
                    }

                    #endregion

                    #region 保存订单
                    string message;
                    result.info.oid = orderDal.SaveWebOrder(order, invoice, deliver, null, userId, guid, channelId,
                                                        MCvHelper.To<int>(memberInfo.clusterId, 0), -1, out message);
                    if (result.info.oid > 0)
                    {
                        #region 清空购物车
                        shoppingCartDal.ClearShoppingCart(userId);
                        #endregion

                        #region 同步订单信息到 BBHome
                        orderDal.SyncOrderInfoToBBHome(order.vchOrderCode);
                        #endregion

                        result.status = MResultStatus.Success;

                        var payType = string.Empty;
                        if (payId == 0)
                            payType = "货到付款";
                        else if (payId == 1)
                            payType = "在线支付";
                        var postTimetype = string.Empty;
                        switch (orderEntity.posttimetype)
                        {
                            case 1:
                                postTimetype = "工作日送货";
                                break;
                            case 2:
                                postTimetype = "工作日、双休日均可送货";
                                break;
                            case 3:
                                postTimetype = "只双休日送货";
                                break;
                        }

                        result.info.ocode = order.vchOrderCode;
                        result.info.paytype = payType;
                        result.info.logisticstype = deliverInfo.vchDeliverName;
                        result.info.total_fee = order.numGoodsAmount;
                        result.info.total_freight = order.numCarriage;
                        result.info.total_order = order.numReceAmount;
                        result.info.posttimetype = postTimetype;
                    }

                    #endregion

                }
                #endregion
            }
            catch (Exception ex)
            {
                result.status = MResultStatus.ExecutionError;
                MLogManager.Error(MLogGroup.Order.创建订单, null, "", ex);
            }

            return result;
        }