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); }
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); }
/// <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); }