Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
 public IActionResult Post([FromBody] PostNewOrderData data, [FromServices] OrderInfoHandler handler)
 {
     handler.Add(data);
     return(Ok("通知成功"));
 }
Beispiel #3
0
        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"));
        }