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); }
public ActionResult List() { var shopList = Bak365Service.GetAreaShopList(); shopList = QueryMapped(shopList); return(View(shopList)); }
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); }
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)); }
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); }
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 })); }
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())); }
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 })); } }
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); }
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); }
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)); }
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); }
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); } }
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); }
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); }
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); //} }
public FoodMapController() { _serviceFood = new EleFoodApiService(); _prodList = Bak365Service.GetProdList(); }