예제 #1
0
        private void CreateOrder(string userId, OrderModel model)
        {
            if (_orderService.IsExist(model.order_id))
            {
                return;
            }

            var entity = new OrderEntity()
            {
                UserId         = userId,
                ShopNo         = model.app_poi_code,
                TakeType       = 0,
                OrderId        = model.order_id,
                TtlPrice       = model.original_price,
                Consume        = model.total,
                UserName       = model.recipient_name,
                UserMobile     = model.recipient_phone,
                DeliverTime    = model.delivery_time.ToDateTime(),
                DeliverAddress = model.recipient_address,
                DeliverFee     = model.shipping_fee,
                MemoStr        = model.caution,
                OptTime        = model.ctime.ToDateTime(),
                PayType        = model.pay_type,
                State          = ((MeituanEnum.State)model.status).GetOrder(),
                DaySeq         = model.day_seq
            };
            var detailModelList = JsonConvert.DeserializeObject <List <DetailModel> >(model.detail);

            var dtls = new List <OrderDtlEntity>();

            foreach (var detailModel in detailModelList)
            {
                //如果商品未映射,且价格为0,则忽略,排除广告
                if (string.IsNullOrWhiteSpace(detailModel.sku_id) && detailModel.price == 0)
                {
                    continue;
                }

                var prodCountList = detailModel.sku_id.Trim('X').Split('X').
                                    GroupBy(a => a).
                                    Select(b => new
                {
                    ProdNo = b.Key,
                    Count  = b.Count()
                });

                foreach (var prodCount in prodCountList)
                {
                    //dtls.Add(new OrderDtlEntity()
                    //{
                    //    ProdNo = prodCount.ProdNo,
                    //    ProdName = detailModel.food_name + detailModel.food_property + detailModel.spec,
                    //    ProdUnit = detailModel.unit,
                    //    Price = detailModel.price / prodCount.Count,
                    //    ItemCnt = detailModel.quantity * prodCount.Count,
                    //    ItemSum = detailModel.price * detailModel.quantity
                    //});

                    //改为取365商品信息,如果未匹配上365商品,则取美团商品信息
                    var prod = Bak365Service.GetProd(userId, prodCount.ProdNo);

                    dtls.Add(new OrderDtlEntity()
                    {
                        ProdNo   = prod.ProdNo ?? "",
                        ProdName = (prod.ProdName ?? detailModel.food_name) + " " + detailModel.food_property + detailModel.spec,
                        ProdUnit = prod.ProdUnit ?? detailModel.unit,
                        Price    = double.Parse(prod.Price ?? detailModel.price.ToString()),
                        ItemCnt  = detailModel.quantity * prodCount.Count,
                        ItemSum  = double.Parse(prod.Price ?? detailModel.price.ToString()) * detailModel.quantity * prodCount.Count
                    });
                }
            }

            entity.OrderDtls = dtls;

            try
            {
                //判断商品中是否有预订商品
                if (_preProdService.hasPreProd(userId, dtls.Select(a => a.ProdNo).ToArray()))
                {
                    entity.OrderType = 1;
                    entity.BuyState  = 2; //0未生成现购单 1已生成现购单 2已生成预定单 3已提货 4已预定作废

                    Bak365Service.CreateBakOrder(entity, "Pre");
                }
            }
            catch (Exception ex)
            {
                _log.DebugFormat("【系统错误】类型:CreateOrder 信息:{0} 错误:{1}", JsonConvert.SerializeObject(model), ex.Message);
            }
            finally
            {
                _orderService.Add(entity);
                //发送通知
                Bak365Service.SendBakNotice(entity.UserId, entity.OrderId, entity.ShopNo);
            }
        }
예제 #2
0
        public void OrderNew(MessageModel message)
        {
            IEleShopService shopservice  = new EleShopService();
            IOrderService   orderService = new OrderService();

            var shop = shopservice.GetByShopId(message.shopId);

            if (shop is null)
            {
                return;
            }

            var model = JsonConvert.DeserializeObject <OrderModel>(message.message);

            //if (orderService.IsExist(model.id)) return;
            if (orderService.IsExist(model.orderId))
            {
                return;
            }


            var entity = new OrderEntity()
            {
                UserId         = shop.UserId,
                ShopNo         = shop.ShopNo,
                TakeType       = 1,
                OrderId        = model.orderId ?? model.id,
                TtlPrice       = model.originalPrice,
                Consume        = model.totalPrice,
                UserName       = model.consignee,
                UserMobile     = string.Join(",", model.phoneList),
                DeliverTime    = model.deliverTime == null ? new DateTime(1970, 1, 1) : DateTime.Parse(model.deliverTime.ToString()),
                DeliverAddress = model.address,
                DeliverFee     = model.deliverFee,
                MemoStr        = model.description,
                OptTime        = model.activeAt,
                //PayType = 0,
                State    = model.status.GetOrder(),
                DaySeq   = model.daySn,
                Greeting = model.userExtraInfo.greeting  //祝福语(饿了么)
            };

            var list = new List <OrderDtlEntity>();

            foreach (var group in model.groups)
            {
                if (group.type != "normal")
                {
                    continue;                         //type:normal extra ,排除其他
                }
                foreach (var item in group.items)
                {
                    var prodNo = item.extendCode ?? "";

                    //如果商品未映射,且价格为0,则忽略,排除广告
                    if (string.IsNullOrWhiteSpace(prodNo) && item.price == 0)
                    {
                        continue;
                    }

                    var prodCountList = prodNo.Trim('X').Split('X').GroupBy(a => a).Select(a => new { ProdNo = a.Key, Count = a.Count() });

                    foreach (var prodCount in prodCountList)
                    {
                        //list.Add(new OrderDtlEntity()
                        //{
                        //    ProdNo = prodCount.ProdNo,
                        //    ProdName = item.name,
                        //    ProdUnit = "",
                        //    Price = item.price / prodCount.Count,
                        //    ItemCnt = item.quantity * prodCount.Count,
                        //    ItemSum = item.price * item.quantity
                        //});

                        //改为取365商品信息,如果未匹配上365商品,则取饿了么商品信息
                        var prod = Bak365Service.GetProd(entity.UserId, prodCount.ProdNo);

                        list.Add(new OrderDtlEntity()
                        {
                            ProdNo   = prod.ProdNo ?? "",
                            ProdName = string.IsNullOrWhiteSpace(prod.ProdName) ? item.name : prod.ProdName + item.attributes?.Aggregate(" ", (x, y) => x + (y.value + ",")).TrimEnd(','),  //咖啡 热,不需要
                            ProdUnit = prod.ProdUnit ?? "",
                            Price    = double.Parse(prod.Price ?? item.price.ToString()),
                            ItemCnt  = item.quantity * prodCount.Count,
                            ItemSum  = double.Parse(prod.Price ?? item.price.ToString()) * item.quantity * prodCount.Count
                        });
                    }
                }
            }
            entity.OrderDtls = list;

            try
            {
                //判断商品中是否有预订商品
                if (_preProdService.hasPreProd(shop.UserId, list.Select(a => a.ProdNo).ToArray()))
                {
                    entity.OrderType = 1;
                    entity.BuyState  = 2; //0未生成现购单 1已生成现购单 2已生成预定单 3已提货 4已预定作废

                    Bak365Service.CreateBakOrder(entity, "Pre");

                    ////处理远程创建订单死锁的问题,循环5次
                    //var times = 0;
                    //int[] seconds = { 2000, 5000, 10000, 30000, 60000 };
                    //while (times < 5)
                    //{
                    //     Bak365Service.CreateBakOrder(entity, "Pre");
                    //    //如果生成预订单成功,则更改生成状态
                    //    if (string.IsNullOrWhiteSpace(""))
                    //    {

                    //        break;
                    //    }

                    //    await Task.Delay(seconds[times]);
                    //    times++;
                    //}
                }
            }
            catch (Exception e)
            {
                _log.DebugFormat("【系统错误】类型:CreateOrder 信息:{0} 错误:{1}", JsonConvert.SerializeObject(model), e.Message);
            }
            finally
            {
                orderService.Add(entity);
                //发送通知
                Bak365Service.SendBakNotice(entity.UserId, entity.OrderId, entity.ShopNo, 0);
            }

            //是否自动接单
            //var shopConfig = _shopConfigService.GetAsync(shop.UserId, shop.ShopNo).Result;
            //if (shopConfig.EleAutoConfirm == 0)
            //{
            //    //var controller = new OrderController();
            //    //controller.Confirm(shop.UserId, shop.ShopNo, 1, model.orderId);
            //    var service = new EleOrderApiService();
            //    var res = service.ConfirmOrderLite(shop.AccessToken, model.orderId);
            //}
        }