/// <summary> /// 添加订单数据 /// </summary> /// <param name="businessId"></param> /// <param name="postData"></param> /// <returns></returns> public bool Add(PostNewOrderData postData) { if (postData.BusinessId == 0 || postData.OrderId == 0) { return(false); } List <PostNewOrderData> list; if (_notifyData.ContainsKey(postData.BusinessId)) { list = _notifyData[postData.BusinessId]; } else { list = new List <PostNewOrderData>(); _notifyData.Add(postData.BusinessId, list); } RemoveTimeoutData(list); var data = list.SingleOrDefault(a => a.OrderId == postData.OrderId); if (data != null) { return(false); } postData.ReceviceTime = DateTime.Now; list.Add(postData); return(true); }
public IActionResult Post([FromBody] PostNewOrderData data, [FromServices] OrderInfoHandler handler) { handler.Add(data); return(Ok("通知成功")); }
public async Task <IActionResult> PaySuccess([FromServices] AppData appData) { using (StreamReader sr = new StreamReader(Request.Body)) { var content = sr.ReadToEnd(); var ret = UtilHelper.ReadXml <WxPaySuccess>(content); if (string.IsNullOrEmpty(ret.transaction_id)) { return(BadRequest("支付不成功")); } // 判断付款 //var order = Service.GetOrderByCode(ret.out_trade_no); //if (order == null) return BadRequest("订单异常"); //if (order.Status != OrderStatus.NotPay) //{ // return Content("SUCCESS"); //} if (orderHandler.ContainsKey(ret.out_trade_no)) { if (orderHandler[ret.out_trade_no] == 1) { return(BadRequest("正在处理")); } } else { orderHandler.Add(ret.out_trade_no, 1); } orderHandler[ret.out_trade_no] = 1; // 订单处理中,设置为1 var order = await Service.PaySuccessAsync(ret); if (order != null) { try { await Service.Print(order, business : order.Business); // 打印小票 } catch (Exception e) { Log.Error("自动打印失败", e); } await Service.AutoReceipt(order); // 自动接单 using (var hc = new HttpClient()) { await hc.GetAsync($"{appData.OrderUrl}/api/notify/{order.BusinessId}?code={order.OrderCode}&state={(int)order.Status}"); } var util = HttpContext.RequestServices.GetService <IUtilRepository>(); //await util.SendPaySuccessMsgAsync(order); // 不再发送小程序通知 await util.SendNewOrderMsgAsync(order); // 公众号通知 // (旧)订单提醒:将数据存储在通知服务中,等待客户端来取 try { using (var hc = new HttpClient()) { var setMeals = order.Products.Where(a => a.Feature == ProductFeature.SetMeal); if (setMeals.Count() > 0) { Service.QuarySetMealProduct(setMeals); } order.Business = null; order.User = null; order.DadaCallBacks = null; order.DadaReturn = null; var body = new PostNewOrderData { BusinessId = order.BusinessId.Value, Content = JsonConvert.SerializeObject(order, AppData.JsonSetting), OrderId = order.ID }; var postData = new StringContent(JsonConvert.SerializeObject(body)); postData.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var res = await hc.PostAsync($"{appData.OrderUrl}/api/notify", postData); res.EnsureSuccessStatusCode(); } } catch (Exception e) { Log.Error("新订单消息通知错误:" + e.Message); } finally { orderHandler[ret.out_trade_no] = 2; // 订单处理完成,设置为2 } // 新:订单通知(将订单存放在redis中,等待客户端来取) await Service.AddOrderNotifyAsync(order); } else { orderHandler[ret.out_trade_no] = 2; // 未找到订单,设置为2 return(BadRequest("简单猫订单参数错误")); } } return(Content("SUCCESS")); }