protected virtual MallOrderInfo MapOrderForJave(List <OrderItem> orders) { var order = orders[0]; var memberId = (String.IsNullOrEmpty(order.OrderCommon.MemberId) || order.OrderCommon.MemberId.ToLower() == "etong_common_user") ? null : order.OrderCommon.MemberId; var memberName = (String.IsNullOrEmpty(order.OrderCommon.MemberName) || order.OrderCommon.MemberName.ToLower() == "etong_anonymous") ? null : order.OrderCommon.MemberName; var orderInfo = new MallOrderInfo { //orderId = orderItemResult.OrderId, memberId = memberId, memberName = memberName, message = null, orderAmount = (orders.Sum(o => o.OrderCommon.TotalAmount)).ToString(),//订单本身金额,不包括运费等 orderDescribe = order.OrderCommon.ProductInfo.ProductDescription, orderFrom = order.OrderCommon.OrderFrom.ToString(), orderType = OrderType == 0 ? "31" : OrderType.ToString(),//商城订单类型在ETM库是0, 在java新库是31 storeId = order.OrderCommon.StoreInfo.StoreId, storeName = order.OrderCommon.StoreInfo.StoreName, totalAmount = (orders.Sum(o => o.OrderCommon.TotalAmount)).ToString(), //订单总金额,包括订单金额和运费等 orderEtm = order.OrderCommon.OrderETMID, freightTemplateId = order.OrderCommon.DeliveryInfo.DeliveryId, //运费模板Id freightTypeId = order.OrderCommon.DeliveryInfo.DeliveryTypeId //运送方式Id }; return(orderInfo); }
/// <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); }