Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
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);
        }