예제 #1
0
 public IHttpActionResult CreatePreOrder(string orderId)
 {
     try
     {
         //预定漏单补单,解决“未找到预订单”的问题
         var entity = _orderService.GetByOrderId(orderId);
         if (entity.OrderType == 1)
         {
             Bak365Service.CreateBakOrder(entity, "Pre");
         }
     }
     catch (Exception ex)
     {
         return(Json(Tools.ResultErr(ex.Message)));
     }
     return(Json(Tools.ResultOk()));
 }
예제 #2
0
        public void OrderDelivering(MessageModel message)
        {
            IOrderService orderService = new OrderService();

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

            var entity = orderService.GetByOrderId(model.orderId);

            if (entity == null)
            {
                return;
            }

            if (string.IsNullOrWhiteSpace(model.phone))
            {
                return;
            }
            entity.DispatcherName   = model.name;
            entity.DispatcherMobile = model.phone;

            //骑手已经取餐&开启自动生成销售单
            if (message.type == 55)
            {
                var shopConfig = _shopConfigService.GetAsync(entity.UserId, entity.ShopNo).Result;
                if (shopConfig.AutoSale == 1)
                {
                    if (entity.OrderType == 0) //现购
                    {
                        Bak365Service.CreateBakOrder(entity, "Sale");
                        entity.BuyState = 1;
                    }
                    else if (entity.OrderType == 1) //预定
                    {
                        Bak365Service.FinPreOrder(entity.UserId, entity.OrderId);
                        entity.BuyState = 3;
                    }
                }
            }

            orderService.Update(entity);
        }
예제 #3
0
        public void HandlePush(string type, string userId, string res)
        {
            if (string.IsNullOrEmpty(res))
            {
                return;
            }

            var isSpecial = type == "OrderCanceled";

            var obj = StringAnaly(res, isSpecial);

            if (obj == null || obj.Count <= 1)
            {
                return;                                //处理心跳
            }
            var order = _orderService.GetByOrderId(obj["order_id"].ToString());

            var fields = new List <string>();

            switch (type)
            {
            case "OrderFinished":
                if (order is null)
                {
                    OrderPayed(userId, res);
                    return;
                }
                fields.Add("State");
                order.State = 4;
                break;

            case "OrderCanceled":
                if (order is null)
                {
                    return;
                }
                order.CancelCode   = obj["reason_code"].ToString();
                order.CancelReason = obj["reason"].ToString();
                order.State        = 2;
                fields.Add("CancelCode");
                fields.Add("CancelReason");
                fields.Add("State");
                Bak365Service.SendBakNotice(obj[nameof(userId)].ToString(), obj["order_id"]?.ToString(), order.ShopNo, 1);
                break;

            case "OrderDeliveringStatus":
                if (order is null)
                {
                    return;
                }
                var logisticsStatus = (MeituanEnum.LogisticsStatus)Enum.Parse(typeof(MeituanEnum.LogisticsStatus), obj["logistics_status"].ToString());
                if (logisticsStatus != MeituanEnum.LogisticsStatus.F)
                {
                    order.State = logisticsStatus.GetOrder();
                    fields.Add("State");
                    if (!string.IsNullOrWhiteSpace(obj["dispatcher_mobile"].ToString()))
                    {
                        order.DispatcherName   = obj["dispatcher_name"].ToString();
                        order.DispatcherMobile = obj["dispatcher_mobile"].ToString();
                        fields.Add("DispatcherName");
                        fields.Add("DispatcherMobile");
                    }
                }
                //骑手已经取餐&开启自动生成销售单
                if (logisticsStatus == MeituanEnum.LogisticsStatus.D)
                {
                    var shopConfig = _shopConfigService.GetAsync(order.UserId, order.ShopNo).Result;
                    if (shopConfig.AutoSale == 1)
                    {
                        if (order.OrderType == 0)     //现购
                        {
                            Bak365Service.CreateBakOrder(order, "Sale");
                            order.BuyState = 1;
                            fields.Add("BuyState");
                        }
                        else if (order.OrderType == 1)     //预定
                        {
                            Bak365Service.FinPreOrder(order.UserId, order.OrderId);
                            order.BuyState = 3;
                            fields.Add("BuyState");
                        }
                    }
                }
                break;
            }
            _orderService.UpdateEntityFields(order, fields);
        }
예제 #4
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);
            }
        }
예제 #5
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);
            //}
        }