Пример #1
0
        /// <summary>
        /// 创建公共订单部分
        /// </summary>
        /// <param name="order">公共订单信息</param>
        /// <returns></returns>
        private PUB_ORDERS_COMMON CreateOrderCommon(OrderItem orderitem, dynamic groupDB)
        {
            dynamic commonorder = new PUB_ORDERS_COMMON();

            commonorder.ORDER_ID        = OrderCodeGen.GetOrderId();
            commonorder.ORDER_GROUP_ID  = groupDB.ORDER_GROUP_ID;
            commonorder.IS_DELETE       = (Int16)0;                 //是否删除:未删除:0,已删除:1
            commonorder.IS_CREDIT       = (Int16)groupDB.IS_CREDIT; //订单类别: 0:原生订单;1:信用订单
            commonorder.ORDER_STATUS    = (Int16)0;                 //订单状态:待处理=0,已通过审核=1 ,未通过审核=20,等待备货=4,等待买家确认收货=5 ,交易关闭=10(系统自动),客户作废=11,客户拒收=12,异常订单=13, 无人签收=3, 客户拒收=12, 已签收=2, 已完成=9, 订单作废=18, 处理中=19
            commonorder.SHIPPING_STATUS = (Int16)0;                 //发货状态:未发货=0,部分发货=1,已发货=2
            // commonorder.REFUND_MONEY_STATUS = "";//仅退款状态:退款协议等待商家确认=0,商家不同意协议=1, 商家同意退款=2,商家同意部分退款=3,客服介入=6,退款关闭=7,退款成功=8,商家准备退款=9, 买家同意取消退款申请=10
            // commonorder.REFUND_GOODSMONEY_STATUS = "";//退货退款状态:退货退款协议等待商家确认=0、商家不同意协议=1、等待买家退货=2、买家已发货等待商家确认=3、商家确认收货拒绝退款=4、商家确认收货准备退款=5、客服介入=6、退货退款关闭=7、退款成功=8、商家准备退款=9、等待买家发货=10、买家同意取消退款退货=11
            // commonorder.REFUND_CHANGGOODS_STATUS = "";//换货状态:换货协议等待商家确认=0、商家不同意协议=1、换货处理中=2、客服介入=6、换货关闭=7、换货成功=8、买家同意取消换货=9、等待买家发货=10、换货处理中=11
            // commonorder.REFUND_REPAIR_STATUS = "";//维修状态:维修协议等待商家确认=0、商家不同意协议=1、维修处理中=2、客服介入=6、维修关闭=7、维修成功=8、买家同意取消返修=9、等待买家发货=10
            // commonorder.TRANSFOR_STATUS = "";//分配状态:待转发=0;已转发=1;驳回=2;回收=3

            commonorder.ORDER_FROM     = (Int16)orderitem.OrderFrom; //订单来源:商城=0,ETM=1,进销存=2,B2C=3,APP=4
            commonorder.ORDER_TYPE     = (Int16)this.OrderType;      //订单类型:商城订单=0,彩票订单=1,机票订单=2,报刊订单=3,充值订单=4,火车票订单=5,交通违章订单=6,景点门票订单=7,旅游酒店订单=8,汽车票订单=9,就医助手订单=10,幸运大转盘=11,酒店预订=12,东莞通=13,信用卡=14,银行转账=15,水费订单=16 ,电费订单=17,煤气费订单=18,流量充值=19,电影票订单=20
            commonorder.ORDER_CLASSIFY = (Int16)this.GetOrderClassify(orderitem);

            #region 设置产品信息
            var productinfo = this.GetProductInfo(orderitem);
            if (productinfo == null)
            {
                throw new Exception("产品信息为空,无法创建订单!");
            }
            commonorder.ITEM_TYPE = (Int16)productinfo.ItemType; //实体商品标志:实体商品=1,虚拟商品=0
            // commonorder.OPERATE_STATUS = "";//操作状态:用与虚拟订单类的扩展
            commonorder.PRODUCT_ID = productinfo.ProductID;      //货品ID
            if (string.IsNullOrWhiteSpace(productinfo.ProductName))
            {
                throw new Exception("订单的货品ProductName名称不能为空!");
            }
            commonorder.PRODUCT_NAME  = productinfo.ProductName;  //货品名称
            commonorder.PRODUCT_PRICE = productinfo.ProductPrice; //货品价格
            commonorder.GOODS_ID      = productinfo.GoodsID;      //商品ID
            if (string.IsNullOrWhiteSpace(productinfo.GoodsName))
            {
                throw new Exception("订单的商品GoodsName名称不能为空!");
            }
            commonorder.GOODS_NAME          = productinfo.GoodsName;;                     //商品名称
            commonorder.GOODSCATEGORYSET_ID = productinfo.GoodsCategroySetID;             //商品类目ID
            commonorder.BRAND_NAME          = productinfo.BrandName;                      //品牌名称
            commonorder.IMGURL = productinfo.ImgUrl;                                      //商品图片URl
            commonorder.PRODUCT_DESCRIPTION = this.GenerateProductDescription(orderitem); //商品规格描述
            #endregion
            if (orderitem.Quantity == 0)
            {
                throw new Exception("不能添加数量为零的订单项!");
            }
            commonorder.PRODUCT_QUANTITY = orderitem.Quantity;    //货品总数
            commonorder.TOTAL_AMOUNT     = orderitem.TotalAmount; //订单金额
            commonorder.PAYMENT_STATUS   = (Int16)0;              //支付状态:未支付=0,部分支付=1,已支付=2,部分退款=3,全额退款=4,联合支付=5,无需支付=6
            // commonorder.PAYMENT_DATE = "";//支付时间
            commonorder.ORDER_ETM = orderitem.OrderETMID;         //下订单时ETM机编号
            // commonorder.PAY_ETM = "";//订单支付时ETM机编号
            commonorder.MEMBER_ID   = orderitem.MemberId;         //订单购买会员ID
            commonorder.CREATOR     = orderitem.MemberName;       //下单会员名称
            commonorder.CREATOR_IP  = orderitem.CreateIP;         //下单会员IP地址
            commonorder.CREATE_DATE = groupDB.ORDER_DATE;         //创建时间
            commonorder.MODIFY_DATE = groupDB.ORDER_DATE;         //修改时间

            var storeinfo = this.GetStoreInfo(orderitem);
            if (string.IsNullOrWhiteSpace(storeinfo.StoreId))
            {
                throw new Exception("商家编号不能为空。");
            }
            commonorder.STORE_ID   = storeinfo.StoreId;   //商家ID
            commonorder.STORE_NAME = storeinfo.StoreName; //商家名称
            // commonorder.DELIVERY_SN = "";//物流编号
            // commonorder.DELIVERY_NAME = "";//物流名称

            var deliveryInfo = this.GetDeliveryInfo(orderitem);
            if (deliveryInfo != null)
            {
                commonorder.SHIP_PROVINCES = deliveryInfo.ShipProvince;       //收货省
                commonorder.SHIP_CITY      = deliveryInfo.ShipCity;           //收货市
                commonorder.SHIP_REGION    = deliveryInfo.ShipRegion;         //收货区
                commonorder.SHIP_ADDR      = deliveryInfo.ShipAddress;        //收货详细地址
                //commonorder.VERIFY_DELIVERY_DATE = "";//订单确认完成时间
                commonorder.DELIVERYTYPE_ID  = deliveryInfo.DeliveryTypeId;   //配送方式ID
                commonorder.DELIVERYTYPENAME = deliveryInfo.DeliveryTypeName; //配送方式名称
            }
            //commonorder.ISCOMMENTED = "";//该订单是否已评价(-1:订单交易完成但没评价 0:买家已评价 1:双方已评价  -8:无)
            commonorder.TOTAL_COST        = 0;        //订单总成本,默认值为0
            commonorder.ALLOCATION_STATUS = (Int16)0; //分润标志,0:未分,1:待分,2:已分
            return(commonorder);
        }
Пример #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);
        }