Пример #1
0
        public static List<Entities.OrderInfo> GetOrders()
        {
            List<Entities.OrderInfo> orderInfos = new List<Entities.OrderInfo>();

            for (int i = 0; i < 1000; i++)
            {
                Entities.OrderInfo orderInfo = new Entities.OrderInfo
                {
                    OrderId = i,
                    OrderDate = new System.DateTime(),
                    CustomerInfo = new Entities.CustomerInfo
                    {
                        CompanyName = "bingo",
                        ContactName = "bongo"
                    },
                    ProductInfos = new List<Entities.ProductInfo>()
                };

                for (int j = 0; i < 5; i++)
                {
                    orderInfo.ProductInfos.Add(new Entities.ProductInfo
                    {
                        CategoryName = "categoryname",
                        ProductName = "productName"
                    });
                }

                orderInfos.Add(orderInfo);
            }

            return orderInfos;
        }
Пример #2
0
        public void MapOrderInfoModelToEntity(Models.OrderInfo orderInfoMod, Entities.OrderInfo orderInfoEnt)
        {
            var mapper = new MapperConfiguration(configure =>
                                                 configure.CreateMap <Models.OrderInfo, Entities.OrderInfo>())
                         .CreateMapper();

            mapper.Map(orderInfoMod, orderInfoEnt);
        }
Пример #3
0
 /// <summary>
 /// 检测订单信息
 /// </summary>
 /// <param name="data"></param>
 private void CheckOrderInfo(Entities.OrderInfo data)
 {
     if (data == null)
     {
         throw new HimallApiException(OpenApiErrorCode.Trade_not_Exists, "tid");
     }
     if (data.ShopId != shopId)
     {
         throw new HimallApiException(OpenApiErrorCode.Trade_is_Invalid, "app_key");
     }
 }
Пример #4
0
        public object GetExpressInfo(long orderId)
        {
            CheckUserLogin();
            var orderService = ServiceProvider.Instance <IOrderService> .Create;

            Entities.OrderInfo order = orderService.GetOrder(orderId, CurrentUser.Id);
            //订单信息是否正常
            if (order == null)
            {
                return(Json(ErrorResult <dynamic>("订单号不存在")));
            }
            List <object> TracesList = new List <object>();

            //取订单物流信息
            if (!string.IsNullOrWhiteSpace(order.ShipOrderNumber))
            {
                var expressData = ServiceProvider.Instance <IExpressService> .Create.GetExpressData(order.ExpressCompanyName, order.ShipOrderNumber);

                if (expressData.Success)
                {
                    expressData.ExpressDataItems = expressData.ExpressDataItems.OrderByDescending(item => item.Time);//按时间逆序排列
                    foreach (var item in expressData.ExpressDataItems)
                    {
                        var traces = new
                        {
                            acceptStation = item.Content,
                            acceptTime    = item.Time.ToString("yyyy-MM-dd HH:mm:ss")
                        };
                        TracesList.Add(traces);
                    }
                }
            }

            var data = new
            {
                LogisticsData = new
                {
                    success = TracesList.Count > 0,
                    traces  = TracesList
                },
                ExpressCompanyName = order.DeliveryType == DeliveryType.ShopStore ? "门店店员配送" : order.ExpressCompanyName,
                ShipOrderNumber    = order.DeliveryType == DeliveryType.ShopStore ? "" : order.ShipOrderNumber,
                ShipTo             = order.ShipTo,
                CellPhone          = order.CellPhone,
                Address            = order.RegionFullName + order.Address
            };

            return(Json(data: data));
        }
Пример #5
0
        /// <summary>
        /// 发货
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public string Send(HttpContext context)
        {
            string  bizcontent    = context.Request["bizcontent"];
            JObject jo            = (JObject)JsonConvert.DeserializeObject(bizcontent);
            string  SendType      = GetJObjectValue <string>(jo, "SendType");
            string  LogisticName  = GetJObjectValue <string>(jo, "LogisticName");
            string  LogisticType  = GetJObjectValue <string>(jo, "LogisticType");
            string  LogisticNo    = GetJObjectValue <string>(jo, "LogisticNo");
            long    OrderId       = GetJObjectValue <long>(jo, "PlatOrderNo");
            int?    IsSplit       = GetJObjectValue <int?>(jo, "IsSplit");
            string  SenderName    = GetJObjectValue <string>(jo, "SenderName");
            string  SenderTel     = GetJObjectValue <string>(jo, "SenderTel");
            string  SenderAddress = GetJObjectValue <string>(jo, "SenderAddress");
            int     IsHwgFlag     = GetJObjectValue <int>(jo, "IsHwgFlag");

            if (OrderId <= 0)
            {
                throw new HimallApiException("订单号错误");
            }

            Entities.OrderInfo order = OrderApplication.GetOrderInfo(OrderId);

            if (order == null)
            {
                throw new HimallApiException("未找到此订单");
            }

            if (order.OrderStatus != Entities.OrderInfo.OrderOperateStatus.WaitDelivery)
            {
                throw new HimallApiException("当前订单状态没有付款或不是等待发货的订单,所以不能发货!");
            }


            if (string.IsNullOrEmpty(LogisticNo))
            {
                throw new HimallApiException("运单号码不能为空!");
            }

            OrderApplication.SellerSendGood(OrderId, "网店管家", LogisticName, LogisticNo);

            StringBuilder sb = new StringBuilder();

            sb.Append("{");
            sb.Append("\"code\":" + "\"10000\"");
            sb.Append(",\"message\":" + "\"SUCCESS\"");
            sb.Append("}");
            return(sb.ToString());
        }
Пример #6
0
        /// <summary>
        /// 订单信息转换
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        private trade_list_model OrderInfoMapChange(Entities.OrderInfo data)
        {
            #region 基础信息初始化
            var    UserInfo = _iMemberService.GetMemberByName(data.UserName);
            string state = "", city = "", district = "", town = "";
            if (!string.IsNullOrWhiteSpace(data.RegionFullName))
            {
                string[] adressArray = data.RegionFullName.Split(new string[] { " ", ",", "," }, StringSplitOptions.RemoveEmptyEntries);
                if (adressArray != null && adressArray.Length > 1)
                {
                    state    = adressArray[0];
                    city     = adressArray[1];
                    district = adressArray[2];
                    if (adressArray.Length == 4)
                    {
                        town = adressArray[3];
                    }
                    else
                    {
                        town = string.Empty;
                    }
                }
            }
            string status = string.Empty;
            switch (data.OrderStatus)
            {
            case Entities.OrderInfo.OrderOperateStatus.Close:
                status = "TRADE_CLOSED";
                break;

            case Entities.OrderInfo.OrderOperateStatus.Finish:
                status = "TRADE_FINISHED";
                break;

            case Entities.OrderInfo.OrderOperateStatus.WaitDelivery:
                status = "WAIT_SELLER_SEND_GOODS";
                //拼团订单信息修正
                if (data.OrderType == Entities.OrderInfo.OrderTypes.FightGroup)
                {
                    var fgord = _iFightGroupService.GetOrder(data.Id);
                    if (fgord != null)
                    {
                        if (fgord.GetJoinStatus != FightGroupOrderJoinStatus.BuildSuccess)
                        {
                            //未拼团成功的订单为待付款状态返回
                            status = "WAIT_BUYER_PAY";
                        }
                    }
                }
                break;

            case Entities.OrderInfo.OrderOperateStatus.WaitPay:
                status = "WAIT_BUYER_PAY";
                break;

            case Entities.OrderInfo.OrderOperateStatus.WaitReceiving:
                status = "WAIT_BUYER_CONFIRM_GOODS";
                break;

            default:
                status = string.Empty;
                break;
            }
            #endregion

            trade_list_model result = new trade_list_model();
            result.tid               = data.Id.ToString();
            result.buyer_memo        = data.PayRemark;
            result.seller_memo       = data.SellerRemark;
            result.seller_flag       = "";
            result.discount_fee      = data.DiscountAmount;
            result.status            = status;
            result.close_memo        = data.CloseReason;
            result.created           = data.OrderDate;
            result.modified          = data.OrderDate;
            result.pay_time          = data.PayDate;
            result.consign_time      = data.ShippingDate;
            result.end_time          = data.FinishDate;
            result.buyer_uname       = data.UserName;
            result.buyer_email       = UserInfo.Email;
            result.buyer_nick        = UserInfo.Nick;
            result.buyer_area        = regionService.GetFullName(UserInfo.RegionId, "");
            result.receiver_name     = data.ShipTo;
            result.receiver_state    = state;
            result.receiver_city     = city;
            result.receiver_district = district;
            result.receiver_town     = town;
            result.receiver_address  = data.Address;
            result.receiver_zip      = ""; //无邮编
            result.receiver_mobile   = data.CellPhone;
            result.seller_id         = data.ShopId.ToString();
            result.seller_name       = data.ShopName;
            result.seller_mobile     = data.SellerPhone;
            result.invoice_fee       = data.Tax;
            result.invoice_title     = "";  //data.InvoiceTitle;
            result.payment           = data.ProductTotalAmount;
            result.storeId           = "0"; //无门店功能,云商城有
            result.orders            = new List <trade_itme_model>();

            #region 子订单装配
            var orderitems = _iOrderService.GetOrderItemsByOrderId(data.Id);
            foreach (var orderitem in orderitems)
            {
                Entities.TypeInfo typeInfo = _iTypeService.GetTypeByProductId(orderitem.ProductId);
                var    productInfo         = Himall.Application.ProductManagerApplication.GetProduct(orderitem.ProductId);
                string colorAlias          = (typeInfo == null || string.IsNullOrEmpty(typeInfo.ColorAlias)) ? SpecificationType.Color.ToDescription() : typeInfo.ColorAlias;
                string sizeAlias           = (typeInfo == null || string.IsNullOrEmpty(typeInfo.SizeAlias)) ? SpecificationType.Size.ToDescription() : typeInfo.SizeAlias;
                string versionAlias        = (typeInfo == null || string.IsNullOrEmpty(typeInfo.VersionAlias)) ? SpecificationType.Version.ToDescription() : typeInfo.VersionAlias;
                if (productInfo != null)
                {
                    colorAlias   = !string.IsNullOrWhiteSpace(productInfo.ColorAlias) ? productInfo.ColorAlias : colorAlias;
                    sizeAlias    = !string.IsNullOrWhiteSpace(productInfo.SizeAlias) ? productInfo.SizeAlias : sizeAlias;
                    versionAlias = !string.IsNullOrWhiteSpace(productInfo.VersionAlias) ? productInfo.VersionAlias : versionAlias;
                }
                trade_itme_model tradesItem = new trade_itme_model();
                tradesItem.sku_id = orderitem.SkuId;
                //tradesItem.num_id = orderitem.SKU;
                tradesItem.outer_sku_id = orderitem.SKU;
                tradesItem.title        = orderitem.ProductName;
                string skuFullName = "";
                if (!string.IsNullOrEmpty(orderitem.Color))
                {
                    skuFullName = colorAlias + ":" + orderitem.Color + ";";
                }
                //skuFullName = "颜色:" + orderitem.Color + ";";
                if (!string.IsNullOrEmpty(orderitem.Size))
                {
                    skuFullName = sizeAlias + ":" + orderitem.Size + ";";
                }
                //skuFullName = "尺码:" + orderitem.Size + ";";
                if (!string.IsNullOrEmpty(orderitem.Version))
                {
                    skuFullName = versionAlias + ":" + orderitem.Version + ";";
                }
                //skuFullName = "版本:" + orderitem.Version + ";";
                if (!string.IsNullOrEmpty(skuFullName))
                {
                    skuFullName = skuFullName.TrimEnd(';');
                }
                tradesItem.sku_properties_name = skuFullName;
                tradesItem.price    = orderitem.SalePrice;
                tradesItem.num      = (int)orderitem.Quantity;
                tradesItem.pic_path = OpenAPIHelper.HostUrl + orderitem.ThumbnailsUrl;

                tradesItem.refund_status = status;
                result.orders.Add(tradesItem);
            }
            #endregion

            return(result);
        }
Пример #7
0
 public Models.OrderInfo OrderInfoEntityToModel(Entities.OrderInfo orderInfo)
 => new MapperConfiguration(cfg => cfg.CreateMap <Entities.OrderInfo,
                                                  Models.OrderInfo>())
 .CreateMapper()
 .Map <Models.OrderInfo>(orderInfo);
Пример #8
0
        //判断是否给父用户返现
        //本过程应该用事务处理
        void ParentUserOrderCash(Entities.UserInfo user, Entities.OrderInfo order)
        {
            if (order.couponid <= 0)
            {
                return;
            }

            var dbh = Common.CommonService.Resolve <Common.DB.IDBHelper>();

            var coupon = dbh.GetData("select pid from [user.coupon] where id=@0", order.couponid);



            //判断该代金券是不是别人送的
            int pid = ConvertHelper.ToInt32(coupon["pid"]);

            if (pid <= 0)
            {
                return;
            }

            //用户不可以自己给自己返现
            if (pid == user.id)
            {
                return;
            }

            //判断该笔订单是否已经返现
            object exists_cash_obj = dbh.ExecuteScalar <object>("select top 1 1 from [user.cash] where orderno=@0", order.orderno);
            bool   exists_cash     = ConvertHelper.ToInt32(exists_cash_obj) > 0;

            if (exists_cash)
            {
                return;
            }



            var config = dbh.GetData("select top 1 [userpercentLimitAmount],[userpercentAmount] from [sys.config] where [enabled]=1");


            int userpercentLimitAmount = Convert.ToInt32(config["userpercentLimitAmount"]);
            int userpercentAmount      = Convert.ToInt32(config["userpercentAmount"]);

            //订单金额小于最小返现金额
            if (order.amount < userpercentLimitAmount)
            {
                throw new Exception("订单金额小于最小返现金额");
                return;
            }


            //达到返现最低消费
            int percentamt = Convert.ToInt32((decimal)order.amount * ((decimal)userpercentAmount / 100m));

            if (percentamt <= 0)
            {
                throw new Exception("达到返现最低消费");
                return;
            }

            var now = DateTime.Now;


            var conn = dbh.GetConnection();

            System.Data.Common.DbTransaction tran = null;

            try
            {
                conn.Open();
                tran = conn.BeginTransaction();


                var amountCmd = dbh.CreateCommand();
                amountCmd.Connection  = conn;
                amountCmd.Transaction = tran;
                amountCmd.CommandText = "select top 1 amountNow,amountTotal from [user.cashnow] where userid=@userid";
                amountCmd.Parameters.Add(dbh.CreateParameter("@userid", pid));


                //查询流水
                int amountNow   = 0;
                int amountTotal = 0;
                using (var reader = amountCmd.ExecuteReader())
                {
                    if (reader.Read())
                    {
                        amountNow   = reader.GetInt32(0);
                        amountTotal = reader.GetInt32(1);
                    }
                }


                int amountNext = amountNow + percentamt;
                var cmdExe     = dbh.CreateCommand();
                cmdExe.Transaction = tran;
                cmdExe.Connection  = conn;
                cmdExe.CommandText = "insert into [user.cash] ([userid],[orderno],[amount],[date],[datets],[amountNow],[amountPrev],[amountTotal],[type],[info]) values (@userid,@orderno,@amount,@date,@datets,@amountNow,@amountPrev,@amountTotal,@type,@info) select @@identity";

                cmdExe.Parameters.Add(dbh.CreateParameter("@userid", pid));
                cmdExe.Parameters.Add(dbh.CreateParameter("@orderno", order.orderno));
                cmdExe.Parameters.Add(dbh.CreateParameter("@amount", percentamt));
                cmdExe.Parameters.Add(dbh.CreateParameter("@date", now));
                cmdExe.Parameters.Add(dbh.CreateParameter("@datets", Common.Helpers.TimeHelper.GetTimeStamp(now, 10)));

                //amountNext, amountNow, amountTotal + percentamt
                cmdExe.Parameters.Add(dbh.CreateParameter("@amountNow", amountNext));
                cmdExe.Parameters.Add(dbh.CreateParameter("@amountPrev", amountNow));
                cmdExe.Parameters.Add(dbh.CreateParameter("@amountTotal", amountTotal + percentamt));
                cmdExe.Parameters.Add(dbh.CreateParameter("@type", "give"));
                cmdExe.Parameters.Add(dbh.CreateParameter("@info", "好友" + user.name + "到店消费"));
                object idobj = cmdExe.ExecuteScalar();

                int cashid = 0;

                if (idobj != null && idobj != DBNull.Value)
                {
                    cashid = Convert.ToInt32(idobj);
                }


                var cmdUpdate = dbh.CreateCommand();
                cmdUpdate.Transaction = tran;
                cmdUpdate.Connection  = conn;
                cmdUpdate.CommandText = "update [user.cashnow] set amountNow=@amountNow,amountPrev=@amountPrev,amountTotal=@amountTotal,[date]=@date where userid=@userid";

                cmdUpdate.Parameters.Add(dbh.CreateParameter("@userid", pid));
                cmdUpdate.Parameters.Add(dbh.CreateParameter("@amountNow", amountNext));
                cmdUpdate.Parameters.Add(dbh.CreateParameter("@amountPrev", amountNow));
                cmdUpdate.Parameters.Add(dbh.CreateParameter("@amountTotal", amountTotal + percentamt));
                cmdUpdate.Parameters.Add(dbh.CreateParameter("@date", now));

                int cmdUN = cmdUpdate.ExecuteNonQuery();
                if (cmdUN == 0)
                {
                    var cmdInsert = dbh.CreateCommand();
                    cmdInsert.Transaction = tran;
                    cmdInsert.Connection  = conn;
                    cmdInsert.CommandText = "insert into [user.cashnow] (userid,amountNow,amountPrev,amountTotal,[date]) values (@userid,@amountNow,@amountPrev,@amountTotal,@date)";

                    cmdInsert.Parameters.Add(dbh.CreateParameter("@userid", pid));
                    cmdInsert.Parameters.Add(dbh.CreateParameter("@amountNow", amountNext));
                    cmdInsert.Parameters.Add(dbh.CreateParameter("@amountPrev", amountNow));
                    cmdInsert.Parameters.Add(dbh.CreateParameter("@amountTotal", amountTotal + percentamt));
                    cmdInsert.Parameters.Add(dbh.CreateParameter("@date", now));

                    cmdInsert.ExecuteNonQuery();
                }


                tran.Commit();


                new Thread(() =>
                {
                    SendCashMessage(pid, cashid, percentamt, amountNow);
                }).Start();
            }
            catch (Exception e)
            {
                tran.Rollback();

                throw e;
            }
            finally
            {
                if (tran != null)
                {
                    tran.Dispose();
                }

                if (conn != null)
                {
                    if (conn.State == System.Data.ConnectionState.Open)
                    {
                        conn.Close();
                    }

                    conn.Dispose();
                }
            }



            //var cash = dbh.GetData("select top 1 amountNow,amountTotal from [user.cashnow] where userid=@0", pid);
            //if (cash != null)
            //{
            //    amountNow = Convert.ToInt32(cash["amountNow"]);
            //    amountTotal = Convert.ToInt32(cash["amountTotal"]);
            //}



            //var cashid = dbh.ExecuteScalar<int>("insert into [user.cash] ([userid],[orderno],[amount],[date],[datets],[amountNow],[amountPrev],[amountTotal],[type],[info]) values (@0,@1,@2,@3,@4,@5,@6,@7,@8,@9) select @@identity", pid, order.orderno, percentamt, DateTime.Now, Common.Helpers.TimeHelper.GetTimeStamp(DateTime.Now, 10), amountNext, amountNow, amountTotal + percentamt, "give", "好友" + user.name + "到店消费");

            //if (dbh.ExecuteNoneQuery("update [user.cashnow] set amountNow=@0,amountPrev=@1,amountTotal=@2,[date]=@3 where userid=@4", amountnext, amountNow, amountTotal + percentamt, DateTime.Now, pid) == 0)
            //{
            //    dbh.ExecuteNoneQuery("insert into [user.cashnow] (userid,amountNow,amountPrev,amountTotal,[date]) values (@0,@1,@2,@3,@4)", pid, amountnext, amountNow, amountTotal + percentamt, DateTime.Now);
            //}
        }
Пример #9
0
        //判断是否给用户赠送代金券
        //本过程应该用事务处理
        void GiveCoupon(Entities.OrderInfo order)
        {
            var dbh = Common.CommonService.Resolve <Common.DB.IDBHelper>();

            //判断是否达到消费金额
            var couponRule = dbh.GetData("select top 1 id,amount,daysBegin,daysEnd from [sys.couponRule] where amountMin<=@0 and amountMax>=@0 and [type]='normal' and [status]=1", order.amount);

            if (couponRule == null)
            {
                return;
            }

            int      ruleid     = ConvertHelper.ToInt32(couponRule["id"]);
            int      ruleAmount = ConvertHelper.ToInt32(couponRule["amount"]);
            int      daysBegin  = ConvertHelper.ToInt32(couponRule["daysBegin"]);
            int      daysEnd    = ConvertHelper.ToInt32(couponRule["daysEnd"]);
            DateTime now        = DateTime.Now;

            var conn = dbh.GetConnection();

            System.Data.Common.DbTransaction tran = null;

            try
            {
                conn.Open();
                tran = conn.BeginTransaction();

                var cmdExists = dbh.CreateCommand();
                cmdExists.Connection  = conn;
                cmdExists.Transaction = tran;
                cmdExists.CommandText = "select top 1 1 from [user.coupon] where orderno=@orderno";
                cmdExists.Parameters.Add(dbh.CreateParameter("@orderno", order.orderno));
                object exo = cmdExists.ExecuteScalar();
                if (exo != null && exo != DBNull.Value)
                {
                    tran.Commit();
                }
                else
                {
                    var cmdInsert = dbh.CreateCommand();
                    cmdInsert.Connection  = conn;
                    cmdInsert.Transaction = tran;
                    cmdInsert.CommandText = "insert into [user.coupon] (userid,ruleid,amount,type,date,dateBegin,dateEnd,status,statusdate,pid,orderno) values (@userid,@ruleid,@amount,@type,@date,@dateBegin,@dateEnd,@status,@statusdate,@pid,@orderno);";

                    cmdInsert.Parameters.Add(dbh.CreateParameter("@userid", order.userid));
                    cmdInsert.Parameters.Add(dbh.CreateParameter("@ruleid", ruleid));
                    cmdInsert.Parameters.Add(dbh.CreateParameter("@amount", ruleAmount));
                    cmdInsert.Parameters.Add(dbh.CreateParameter("@type", Constant.CouponType.Order.GetHashCode()));
                    cmdInsert.Parameters.Add(dbh.CreateParameter("@date", now));

                    cmdInsert.Parameters.Add(dbh.CreateParameter("@dateBegin", now.AddDays(daysBegin)));
                    cmdInsert.Parameters.Add(dbh.CreateParameter("@dateEnd", now.AddDays(daysEnd)));

                    cmdInsert.Parameters.Add(dbh.CreateParameter("@status", Constant.CouponStatus.Enabled.GetHashCode()));
                    cmdInsert.Parameters.Add(dbh.CreateParameter("@statusdate", now));
                    cmdInsert.Parameters.Add(dbh.CreateParameter("@pid", 0));
                    cmdInsert.Parameters.Add(dbh.CreateParameter("@orderno", order.orderno));

                    int rnum = cmdInsert.ExecuteNonQuery();

                    tran.Commit();
                }
            }
            catch (Exception ex)
            {
                tran.Rollback();
                throw ex;
            }
            finally
            {
                if (tran != null)
                {
                    tran.Dispose();
                }

                if (conn != null)
                {
                    if (conn.State == System.Data.ConnectionState.Open)
                    {
                        conn.Close();
                    }

                    conn.Dispose();
                }
            }

            //判断该订单是否赠送过代金券
            //if (Convert.ToInt32(dbh.ExecuteScalar<object>("select top 1 1 from [user.coupon] where orderno=@0", order.orderno)) != 1)
            //{
            //    dbh.ExecuteNoneQuery("insert into [user.coupon] (userid,ruleid,amount,type,date,dateBegin,dateEnd,status,statusdate,pid,orderno) values (@0,@1,@2,@3,@4,@5,@6,@7,@8,@9,@10);", order.userid, couponRule["id"], couponRule["amount"], Constant.CouponType.Order.GetHashCode(), DateTime.Now, DateTime.Now, DateTime.Now.AddDays(30), Constant.CouponStatus.Enabled.GetHashCode(), DateTime.Now, 0, order.orderno);
            //}
        }
        public object GetOrderDetail(long id)
        {
            CheckUserLogin();
            long shopid = CurrentShopBranch.ShopId;
            long sbid   = CurrentUser.ShopBranchId;

            var ordser = ServiceProvider.Instance <IOrderService> .Create;

            Entities.OrderInfo order = ordser.GetOrder(id);
            if (order == null || order.ShopBranchId != sbid)
            {
                throw new HimallApiException("错误的订单编号");
            }
            var bonusService       = ServiceProvider.Instance <IShopBonusService> .Create;
            var orderRefundService = ServiceProvider.Instance <IRefundService> .Create;
            var shopService        = ServiceProvider.Instance <IShopService> .Create;
            var productService     = ServiceProvider.Instance <IProductService> .Create;
            var vshop = ServiceProvider.Instance <IVShopService> .Create.GetVShopByShopId(order.ShopId);

            var  orderitems = OrderApplication.GetOrderItems(order.Id);
            bool isCanApply = false;
            //获取订单商品项数据
            var orderDetail = new
            {
                ShopName   = shopService.GetShop(order.ShopId).ShopName,
                ShopId     = order.ShopId,
                OrderItems = orderitems.Select(item =>
                {
                    var productinfo = productService.GetProduct(item.ProductId);
                    if (order.OrderStatus == Entities.OrderInfo.OrderOperateStatus.WaitDelivery)
                    {
                        isCanApply = orderRefundService.CanApplyRefund(id, item.Id);
                    }
                    else
                    {
                        isCanApply = orderRefundService.CanApplyRefund(id, item.Id, false);
                    }

                    Entities.TypeInfo typeInfo = ServiceProvider.Instance <ITypeService> .Create.GetType(productinfo.TypeId);
                    string colorAlias          = (typeInfo == null || string.IsNullOrEmpty(typeInfo.ColorAlias)) ? SpecificationType.Color.ToDescription() : typeInfo.ColorAlias;
                    string sizeAlias           = (typeInfo == null || string.IsNullOrEmpty(typeInfo.SizeAlias)) ? SpecificationType.Size.ToDescription() : typeInfo.SizeAlias;
                    string versionAlias        = (typeInfo == null || string.IsNullOrEmpty(typeInfo.VersionAlias)) ? SpecificationType.Version.ToDescription() : typeInfo.VersionAlias;
                    if (productinfo != null)
                    {
                        colorAlias   = !string.IsNullOrWhiteSpace(productinfo.ColorAlias) ? productinfo.ColorAlias : colorAlias;
                        sizeAlias    = !string.IsNullOrWhiteSpace(productinfo.SizeAlias) ? productinfo.SizeAlias : sizeAlias;
                        versionAlias = !string.IsNullOrWhiteSpace(productinfo.VersionAlias) ? productinfo.VersionAlias : versionAlias;
                    }
                    return(new
                    {
                        ItemId = item.Id,
                        ProductId = item.ProductId,
                        ProductName = item.ProductName,
                        Count = item.Quantity,
                        Price = item.SalePrice,
                        //ProductImage = "http://" + Url.Request.RequestUri.Host + productService.GetProduct(item.ProductId).GetImage(ProductInfo.ImageSize.Size_100),
                        ProductImage = Core.HimallIO.GetRomoteProductSizeImage(productService.GetProduct(item.ProductId).RelativePath, 1, (int)Himall.CommonModel.ImageSize.Size_100),
                        color = item.Color,
                        size = item.Size,
                        version = item.Version,
                        IsCanRefund = isCanApply,
                        ColorAlias = colorAlias,
                        SizeAlias = sizeAlias,
                        VersionAlias = versionAlias
                    });
                })
            };

            VirtualProductInfo virtualProductInfo = null;
            List <dynamic>     codes = null;
            List <dynamic>     virtualItems = null;
            int validityType = 0; string startDate = string.Empty, endDate = string.Empty;

            if (order.OrderType == OrderInfo.OrderTypes.Virtual && orderDetail.OrderItems != null)
            {
                virtualProductInfo = ProductManagerApplication.GetVirtualProductInfoByProductId(orderDetail.OrderItems.FirstOrDefault().ProductId);
                if (virtualProductInfo != null)
                {
                    validityType = virtualProductInfo.ValidityType ? 1 : 0;
                    if (validityType == 1)
                    {
                        startDate = virtualProductInfo.StartDate.Value.ToString("yyyy-MM-dd");
                        endDate   = virtualProductInfo.EndDate.Value.ToString("yyyy-MM-dd");
                    }
                }
                var verificationCodes = OrderApplication.GetOrderVerificationCodeInfosByOrderIds(new List <long>()
                {
                    order.Id
                });
                if (verificationCodes != null)
                {
                    verificationCodes.ForEach(a =>
                    {
                        if (a.Status == OrderInfo.VerificationCodeStatus.WaitVerification || a.Status == OrderInfo.VerificationCodeStatus.Refund)
                        {
                            a.VerificationCode = System.Text.RegularExpressions.Regex.Replace(a.VerificationCode, "(\\d{4})\\d{4}(\\d{4})", "$1****$2");
                        }
                        a.VerificationCode = System.Text.RegularExpressions.Regex.Replace(a.VerificationCode, @"(\d{4})", "$1 ");
                    });
                }
                codes = verificationCodes.Select(p =>
                {
                    return(new
                    {
                        VerificationCode = p.VerificationCode,
                        Status = p.Status,
                        StatusText = p.Status.ToDescription()
                    });
                }).ToList <dynamic>();

                var virtualOrderItems = OrderApplication.GetVirtualOrderItemInfosByOrderId(order.Id);
                virtualItems = virtualOrderItems.Select(p =>
                {
                    return(new
                    {
                        VirtualProductItemName = p.VirtualProductItemName,
                        VirtualProductItemType = p.VirtualProductItemType,
                        Content = ReplaceImage(p.Content, p.VirtualProductItemType)
                    });
                }).ToList <dynamic>();
            }
            var orderModel = new
            {
                Id                 = order.Id,
                OrderType          = order.OrderType,
                OrderTypeName      = order.OrderType.ToDescription(),
                Status             = order.OrderStatus.ToDescription(),
                ShipTo             = order.ShipTo,
                Phone              = order.CellPhone,
                Address            = order.RegionFullName + " " + order.Address,
                HasExpressStatus   = !string.IsNullOrWhiteSpace(order.ShipOrderNumber),
                ExpressCompanyName = order.ExpressCompanyName,
                Freight            = order.Freight,
                Tax                = order.Tax,
                IntegralDiscount   = order.IntegralDiscount,
                RealTotalAmount    = order.OrderTotalAmount - order.RefundTotalAmount,
                CapitalAmount      = order.CapitalAmount,
                RefundTotalAmount  = order.RefundTotalAmount,
                ProductTotalAmount = order.ProductTotalAmount,
                OrderDate          = order.OrderDate.ToString("yyyy-MM-dd HH:mm:ss"),
                ShopName           = order.ShopName,
                ShopBranchName     = CurrentShopBranch.ShopBranchName,
                VShopId            = vshop == null ? 0 : vshop.Id,
                commentCount       = OrderApplication.GetOrderCommentCount(order.Id),
                ShopId             = order.ShopId,
                orderStatus        = (int)order.OrderStatus,
                //Invoice = order.InvoiceType.ToDescription(),
                //InvoiceValue = (int)order.InvoiceType,
                //InvoiceContext = order.InvoiceContext,
                //InvoiceTitle = order.InvoiceTitle,
                PaymentType      = order.PaymentType.ToDescription(),
                PaymentTypeValue = (int)order.PaymentType,
                PaymentTypeDesc  = order.PaymentTypeDesc,
                OrderPayAmount   = order.OrderPayAmount,
                PaymentTypeName  = PaymentApplication.GetPaymentTypeDescById(order.PaymentTypeGateway) ?? order.PaymentTypeName,
                FullDiscount     = order.FullDiscount,
                DiscountAmount   = order.DiscountAmount,
                OrderRemarks     = order.OrderRemarks,
                DeliveryType     = order.DeliveryType,
                //InvoiceCode = order.InvoiceCode,
                OrderInvoice = OrderApplication.GetOrderInvoiceInfo(order.Id)
            };

            return(new { success = true, Order = orderModel, OrderItem = orderDetail.OrderItems, VerificationCodes = codes, VirtualOrderItems = virtualItems, StartDate = startDate, EndDate = endDate, ValidityType = validityType });
        }