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 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 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); }
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 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); //} }