Ejemplo n.º 1
0
        public ResponseInfo <CreateOrderOrderResult> CreateMallOrder(MallOrderInfos orderinfos)
        {
            _log.Debug("order data:" + JsonConvert.SerializeObject(orderinfos));
            var config   = new ApiSetting(null);
            var response = SecurityHttpClient.Post <MallOrderInfos, CreateOrderOrderResult>(config.JavaOrder_Uri + "generateOrder", orderinfos);

            if (response.respCode != "0")
            {
                throw new ApplicationException(response.respMsg);
            }
            return(response);
        }
Ejemplo n.º 2
0
        public CreateOrderResponse CreateMallOrder(MallOrderInfos orderinfos)
        {
            _log.Debug("order data:" + JsonConvert.SerializeObject(orderinfos));

            //orderinfo.memberId = "LM00013564";

            if (string.IsNullOrWhiteSpace(orderinfos.memberId))
            {
                orderinfos.memberId = DefaultMemberId;
            }
            var password = GetPassword(orderinfos.memberId);

            var datetime = DateTime.Now;

            var request = new CreateOrderMallRequest
            {
                dataMap = orderinfos,
                sign    = BuildSign(orderinfos, datetime, password),
                reqTime = datetime.ToString(DateTimeFormat)
            };

            var jSetting = new JsonSerializerSettings();

            jSetting.NullValueHandling = NullValueHandling.Ignore;
            var content = JsonConvert.SerializeObject(request, jSetting);

            _log.Debug("Post data:" + content);
            var config = new CommonConfig(null);

            var req = (HttpWebRequest)WebRequest.Create(config.JavaOrder_Uri + "generateOrder");

            req.Method      = "POST";
            req.ContentType = "Application/Json";
            req.Credentials = CredentialCache.DefaultCredentials;
            req.Timeout     = 300000;
            // 如果服务器返回错误,他还会继续再去请求,不会使用之前的错误数据,做返回数据
            //req.ServicePoint.Expect100Continue = false;
            WriteRequestData(req, content);
            var response = req.GetResponse();

            if (response == null)
            {
                throw new Exception("请求失败!");
            }
            var stream = response.GetResponseStream();

            if (stream == null)
            {
                throw new Exception("请求Stream为空!");
            }
            var sr     = new StreamReader(stream, Encoding.UTF8);
            var retXml = sr.ReadToEnd();

            sr.Close();
            _log.Debug(retXml);
            var obj = JsonConvert.DeserializeObject <CreateOrderResponse>(retXml);

            if (obj.respCode != "0")
            {
                throw new ApplicationException(obj.respMsg);
            }
            return(obj);
        }
Ejemplo n.º 3
0
        /// <summary>
        ///     创建订单组列表
        /// </summary>
        /// <param name="orders">订单明细项</param>
        /// <returns>订单组实体表列</returns>
        private List <PUB_ORDERS_GROUP> CreateOrderGroupList(List <OrderItem> orderItems)
        {
            //TODO:: will be remove
            //java 主订单服务同步
            if (orderItems.Count == 0)
            {
                throw new Exception("不存在订单明细项(订单项为0),无法创建订单");
            }

            var result = new List <PUB_ORDERS_GROUP>();

            //为方便取得本次业务各订单的会员和ETM等公共信息
            var orderFirst = orderItems.FirstOrDefault().OrderCommon;
            //按店铺分一个订单组, 对应一个java订单
            var orderList = new Dictionary <OrderItem, List <OrderItem> >();

            orderItems.Select(o => o.OrderCommon.StoreInfo.StoreId).Distinct().ToList().ForEach(storeId =>
            {
                //某一店铺的订单明细
                var storeItems = orderItems.Where(o => o.OrderCommon.StoreInfo.StoreId == storeId).ToList();
                //单头,明细
                orderList.Add(storeItems[0], storeItems);
            });

            if (OrderType > 0 && orderList.Count > 1)
            {
                throw new Exception("便民只能一次创建一个订单组");
            }

            //接收java接口返回的订单号列表
            var javaOrderIds = new Dictionary <string, string>();
            //if (!string.IsNullOrWhiteSpace(orderFirst.OrderETMID))
            //{
            //    orderFirst.OrderFrom = 1;
            //}
            //判断是否来源于ETM下单
            var isFromETM = orderFirst.OrderFrom == 1;

            //处理同步
            if (SyncToJava && (isFromETM || this.OrderType == 2 || this.OrderType == 16 || this.OrderType == 17 || this.OrderType == 18 || this.OrderType == 21 || this.OrderType == 6))
            {
                //订单同步处理器
                var orderManager = new OrderManager();
                //接收java接口的返回结果
                CreateOrderResponse createOrderResponse = null;

                //ETM库的商城订单类型OrderType=0;便民订单类型OrderType=n
                if (OrderType != 0)
                {
                    try
                    {
                        _logger.Info("开始向Java同步订单!");
                        // java接口要接收的"订单"数据结构(便民)
                        OrderInfo javaOrder = MapOrderForJave(orderItems);

                        // 提交到java接口
                        createOrderResponse = orderManager.CreateOrder(javaOrder);
                        javaOrderIds.Add(javaOrder.storeId, createOrderResponse.dataMap.orderId);
                    }
                    catch (Exception exception)
                    {
                        _logger.Error("创建订单同步到JAVA失败", exception);
                        throw exception;
                    }
                }
                else
                {
                    MallOrderInfos javaOrders = new MallOrderInfos()
                    {
                        orderList = new MallOrderInfo[] { }
                    };
                    javaOrders.memberId = orderFirst.MemberId.ToLower() == "etong_common_user" ? null : orderFirst.MemberId;

                    //为方便组织出javaOrders.orderList
                    var javaOrderList = new List <MallOrderInfo>();
                    foreach (var order in orderList)
                    {
                        //java接口要接收的"订单"数据结构(商城)
                        MallOrderInfo javaOrder = MapOrderForJave(order.Value);

                        //java接口要接收的"订单明细"数据结构
                        var javaOrderItems = new List <CreateOrderMallOrderitemlist>();
                        order.Value.ForEach(item =>
                        {
                            javaOrderItems.Add(MapOrderItemForJava(item));
                        });
                        //java接口要接收的"订单"数据结构
                        javaOrder.orderItemList = javaOrderItems.ToArray();

                        //记住java接口要接收的"订单列表"
                        javaOrderList.Add(javaOrder);
                    }
                    //java接口要接收的"订单列表"数据结构
                    javaOrders.orderList = javaOrderList.ToArray();
                    _logger.Info("开始向Java同步订单!");
                    //提交到java接口, 将整个订单组列表一次性提交到java接口, 这样能使用到java的数据库事务处理
                    createOrderResponse = orderManager.CreateMallOrder(javaOrders);
                    javaOrderIds        = createOrderResponse.dataMap.orderIds;
                }
            }

            //生成本地"订单组"列表.
            foreach (var g in orderList)
            {
                var javaOrderId = javaOrderIds.Where(o => o.Key == g.Key.OrderCommon.StoreInfo.StoreId).FirstOrDefault().Value;
                var groupId     = string.IsNullOrWhiteSpace(javaOrderId) ? OrderCodeGen.GetOrderGroupId() : javaOrderId;
                var orderCount  = OrderType == 0 ? orderList.Values.Count : 1;
                var totalAmount = g.Value.Sum(o => o.OrderCommon.TotalAmount);

                //生成本地订单组
                dynamic group = new PUB_ORDERS_GROUP();
                group.ORDER_GROUP_ID = groupId;
                group.IS_CREDIT      = 0;
                group.ORDER_TYPE     = OrderType;
                group.TOTAL_ORDERS   = orderCount;
                group.TOTAL_AMOUNT   = totalAmount;
                group.MEMBER_ID      = g.Key.OrderCommon.MemberId;
                group.STORE_ID       = g.Key.OrderCommon.StoreInfo.StoreId;
                group.STORE_NAME     = g.Key.OrderCommon.StoreInfo.StoreName;
                group.ORDER_DATE     = DateTime.Now;

                //本地订单组列表
                result.Add(group);
            }

            return(result);
        }