Esempio n. 1
0
        public void OrderRefund(string res)
        {
            var obj = StringAnaly(res, true);

            if (obj.Count <= 1)
            {
                return;
            }

            CacheHelper.Set(obj["order_id"]?.ToString() + "_" + obj["notify_type"]?.ToString(), "");
            var entity = _orderService.GetByOrderId(obj["order_id"].ToString());

            if (entity == null)
            {
                return;
            }

            entity.RefundCode   = obj["notify_type"].ToString();
            entity.RefundReason = obj["reason"].ToString();
            var refund = (MeituanEnum.Refund)Enum.Parse(typeof(MeituanEnum.Refund), obj["notify_type"].ToString());

            entity.State = refund.GetOrder();

            if (refund == MeituanEnum.Refund.apply && CacheHelper.GetContainsKeyCount(obj["order_id"]?.ToString()) > 1)
            {
                return;
            }

            _orderService.Update(entity);
            Bak365Service.SendBakNotice(obj["userId"].ToString(), obj["order_id"]?.ToString(), entity.ShopNo, 1);
        }
Esempio n. 2
0
        public ActionResult List()
        {
            var shopList = Bak365Service.GetAreaShopList();

            shopList = QueryMapped(shopList);

            return(View(shopList));
        }
Esempio n. 3
0
        public void OrderRefundPart(string res)
        {
            var obj = StringAnaly(res, true);

            if (obj.Count <= 1)
            {
                return;
            }

            CacheHelper.Set(obj["order_id"] + "_" + obj["notify_type"], "");

            var entity = _orderService.GetByOrderId(obj["order_id"].ToString());

            if (entity == null)
            {
                return;
            }

            entity.RefundCode   = obj["notify_type"].ToString();
            entity.RefundReason = obj["reason"].ToString();
            var refund = (MeituanEnum.Refund)Enum.Parse(typeof(MeituanEnum.Refund), obj["notify_type"].ToString());

            entity.State = refund.GetOrder();

            //缓存中存在订单的后续推送信息,则不处理
            if (refund == MeituanEnum.Refund.part && CacheHelper.GetContainsKeyCount(obj["order_id"]?.ToString()) > 1)
            {
                return;
            }

            if (refund == MeituanEnum.Refund.agree)
            {
                entity.State         = 4;
                entity.RefundPartAmt = double.Parse(obj["money"].ToString());

                var refundDtls = JsonConvert.DeserializeObject <List <RefundPartDetailModel> >(obj["food"].ToString());

                foreach (var dtl in refundDtls)
                {
                    var orderDtlEntity = entity.OrderDtls.FirstOrDefault(a => a.ProdNo == dtl.sku_id);
                    if (orderDtlEntity != null)
                    {
                        orderDtlEntity.RefundPartCnt = dtl.count;
                    }
                }
            }

            _orderService.Update(entity);
            _orderService.UpdateDtl(entity.OrderDtls);
            Bak365Service.SendBakNotice(obj["userId"].ToString(), obj["order_id"]?.ToString(), entity.ShopNo, 1);
        }
Esempio n. 4
0
        public async Task <ActionResult> ShopList(Guid id)
        {
            ViewData["StockRuleId"] = id;

            var list = await _stockRuleService.GetListShopAsync(id);

            var shopList = Bak365Service.GetShopList();

            foreach (var item in list)
            {
                item.ShopName = shopList[item.ShopNo];
            }

            return(View(list));
        }
Esempio n. 5
0
        public string Tree()
        {
            var cateProdList = Bak365Service.GetCateProdList();

            var cateList = cateProdList.GroupBy(a => new { a.PareNo, a.CateNo, a.CateName }, (a, b) => a);

            var nodes = new ConcurrentBag <ZTreeNode>();

            foreach (var cate in cateList)
            {
                nodes.Add(new ZTreeNode()
                {
                    id       = cate.CateNo,
                    name     = cate.CateName,
                    pId      = cate.PareNo,
                    isParent = true
                });
            }

            var preProdList = _preProdService.Get(Global.USER_ID);

            Parallel.ForEach(cateList, cate =>
            {
                var prodList = cateProdList.Where(a => a.CateNo == cate.CateNo && !string.IsNullOrWhiteSpace(a.ProdNo));

                foreach (var prod in prodList)
                {
                    var node = new ZTreeNode();

                    node.id   = prod.ProdNo;
                    node.name = prod.ProdName;
                    node.pId  = prod.CateNo;
                    if (preProdList.Exists(a => a.ProdNo == prod.ProdNo))
                    {
                        node.@checked = true;
                    }

                    nodes.Add(node);
                }
            });

            var sortNodes = nodes.OrderBy(a => a.id);

            //将获取的节点集合转换为json格式字符串,并返回
            string json = JsonConvert.SerializeObject(sortNodes);

            return(json);
        }
Esempio n. 6
0
        public async Task <ActionResult> GetShop(string shopNo)
        {
            var shop = await Task.FromResult(Bak365Service.GetShopInfo(shopNo));

            if (shop == null)
            {
                return(Json(new AjaxResult()
                {
                    state = "err", msg = "找不到此门店"
                }));
            }

            return(Json(new AjaxResult()
            {
                state = "ok", data = shop
            }));
        }
Esempio n. 7
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()));
 }
Esempio n. 8
0
        public ActionResult GetShop(string shopNo)
        {
            var shop = Bak365Service.GetShopInfo(shopNo);

            if (shop == null)
            {
                return(Json(new AjaxResult()
                {
                    state = "no", msg = "无此门店"
                }));
            }
            else
            {
                return(Json(new AjaxResult()
                {
                    state = "ok", data = shop
                }));
            }
        }
Esempio n. 9
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);
        }
Esempio n. 10
0
        public void OrderRefund(MessageModel message)
        {
            IOrderService orderService = new OrderService();
            var           cancelModel  = JsonConvert.DeserializeObject <CancelModel>(message.message);
            var           byShopId     = new EleShopService().GetByShopId(cancelModel.shopId);

            if (byShopId == null)
            {
                return;
            }

            Bak365Service.SendBakNotice(byShopId.UserId, cancelModel.orderId, byShopId.ShopNo, 1);
            var byOrderId = orderService.GetByOrderId(cancelModel.orderId);

            if (byOrderId == null)
            {
                return;
            }

            byOrderId.State        = cancelModel.refundStatus.GetOrder();
            byOrderId.RefundCode   = cancelModel.refundStatus.ToString();
            byOrderId.RefundReason = cancelModel.reason;

            if (cancelModel.refundType == "part" && cancelModel.refundStatus == ElemeEnum.Refund.successful)
            {
                byOrderId.State         = 4;
                byOrderId.RefundPartAmt = cancelModel.totalPrice;
                foreach (var goods in cancelModel.goodsList)
                {
                    var good           = goods;
                    var orderDtlEntity = byOrderId.OrderDtls.FirstOrDefault(a => a.ProdName == good.name);
                    if (orderDtlEntity != null)
                    {
                        orderDtlEntity.RefundPartCnt = good.quantity;
                    }
                }
            }
            orderService.Update(byOrderId);
            orderService.UpdateDtl(byOrderId.OrderDtls);
        }
Esempio n. 11
0
        public async Task <ActionResult> List()
        {
            //获取账户
            var bakShopList = Bak365Service.GetShopList();

            var list = await _shopConfigService.GetListAsync(Global.USER_ID);

            var data = from a in bakShopList
                       join b in list on a.Key equals b.ShopNo into temp
                       from x in temp.DefaultIfEmpty()
                       select new ShopConfigDTO()
            {
                ShopNo         = a.Key,
                ShopName       = a.Value,
                MtAutoConfirm  = x?.MtAutoConfirm ?? 0,
                EleAutoConfirm = x?.EleAutoConfirm ?? 0,
                AutoSale       = x?.AutoSale ?? 0,
                MtAutoSync     = x?.MtAutoSync ?? 0,
                EleAutoSync    = x?.EleAutoSync ?? 0
            };

            return(View(data));
        }
Esempio n. 12
0
        public void OrderCancel(MessageModel message)
        {
            IOrderService orderService = new OrderService();
            var           cancelModel  = JsonConvert.DeserializeObject <CancelModel>(message.message);
            var           byShopId     = new EleShopService().GetByShopId(cancelModel.shopId);

            if (byShopId == null)
            {
                return;
            }

            Bak365Service.SendBakNotice(byShopId.UserId, cancelModel.orderId, byShopId.ShopNo, 1);
            var order = orderService.GetByOrderId(cancelModel.orderId);

            if (order == null)
            {
                return;
            }

            order.State        = cancelModel.refundStatus.GetOrder();
            order.CancelCode   = cancelModel.refundStatus.ToString();
            order.CancelReason = cancelModel.reason;
            orderService.Update(order);
        }
Esempio n. 13
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);
            }
        }
Esempio n. 14
0
        public List <ShopMap> GetList(string type = "")
        {
            var list = new List <ShopMap>();

            //获取账户
            var accounts = _serviceAccount.GetAccounts(Global.USER_ID);

            //已经映射过的门店
            var listMapped = _serviceShop.GetByUserId(Global.USER_ID);

            //获取365门店
            var listShop365 = Bak365Service.GetShopList();

            //根据账户获取门店
            foreach (var account in accounts)
            {
                EleUserApiService serviceUser = new EleUserApiService();
                var res = serviceUser.GetUser(account.AccessToken);
                if (res.error != null)
                {
                    continue;
                }

                JObject jObject = JObject.Parse(res.result.ToString());
                JArray  shops   = JArray.Parse(jObject["authorizedShops"].ToString());

                foreach (var shop in shops)
                {
                    ShopMap shopMap = new ShopMap();
                    shopMap.AccountId   = account.Id;
                    shopMap.AccountNo   = account.AccountNo;
                    shopMap.AccountName = account.AccountName;
                    shopMap.AccessToken = account.AccessToken;
                    shopMap.ShopId      = (long)shop["id"];
                    shopMap.ShopNameEle = shop["name"].ToString();

                    if (type.ToUpper() == "MATCH")
                    {
                        foreach (var shop365 in listShop365)
                        {
                            if (shop["name"].ToString().Contains(shop365.Value))
                            {
                                shopMap.ShopNo   = shop365.Key;
                                shopMap.ShopName = shop365.Value;
                                break;
                            }
                        }
                    }
                    else
                    {
                        var dd = listMapped.Find(a => a.ShopId.ToString() == shop["id"].ToString());
                        if (dd != null)
                        {
                            shopMap.ShopNo   = dd.ShopNo;
                            shopMap.ShopName = listShop365[dd.ShopNo];
                        }
                    }

                    list.Add(shopMap);
                }
            }

            return(list);
        }
Esempio n. 15
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);
        }
Esempio n. 16
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);
            //}
        }
Esempio n. 17
0
 public FoodMapController()
 {
     _serviceFood = new EleFoodApiService();
     _prodList    = Bak365Service.GetProdList();
 }