public static bool PushMessage(PushMessageViewModel message, IList <string> phones) { var result = false; var pushMessage = ConverToMessageModel(message); pushMessage.Type = MessageType.AppNotification; pushMessage.PhoneNumbers = phones; try { using (var client = new PushClient()) { var pushResult = client.PushMessages(pushMessage); if (pushResult != null) { if (!string.IsNullOrEmpty(pushResult.ErrorMessage)) { logger.Log(Level.Error, pushResult.ErrorMessage, "Error occurred in PushMessage"); } else { result = pushResult.Result; } } } } catch (Exception ex) { logger.Log(Level.Error, ex, "Error occurred in PushMessage"); } return(result); }
/// <summary> /// 填充推播API ViewModel /// </summary> /// <param name="Title"></param> /// <param name="Body"></param> /// <param name="SenderId"></param> /// <param name="ReaderId"></param> /// <param name="Category"></param> /// <param name="MessageId"></param> /// <returns></returns> public PushMessageViewModel RunPushApi( string Title, string Body, string SenderId, string ReaderId, int Category, string MessageId ) { PushMessageViewModel pushMsg = new PushMessageViewModel(); pushMsg.title = Title; pushMsg.body = Body; var queryMobilePushKey = _mobilePushKeyService.GetByUserID(ReaderId); if (queryMobilePushKey != null) { pushMsg.KeyNumber = queryMobilePushKey.KeyNumber; pushMsg.MobileType = queryMobilePushKey.MobileType.Trim(); } pushMsg.category = Category; pushMsg.messageid = MessageId; pushMsg.senderid = SenderId; pushMsg.readerid = ReaderId; pushMsg.pushtime = DateTime.UtcNow; return(pushMsg); }
public IActionResult SendNotification([FromBody] PushMessageViewModel message) { _pushNotificationsQueue.Enqueue(new PushMessage(message.Notification) { Topic = message.Topic, Urgency = message.Urgency }); return(NoContent()); }
public async Task <IActionResult> SendNotification(PushMessageViewModel pushMessageViewModel) { var message = _mapper.Map <PushMessage>(pushMessageViewModel); await _pushSubscriptionApp.ForEachSubscriptionAsync((subscription) => { _pushServiceClient.RequestPushMessageDeliveryAsync(subscription, message); }); return(NoContent()); }
public async Task <IActionResult> SendNotification([FromBody] PushMessageViewModel messageVM) { var message = new PushMessage(messageVM.Notification) { Topic = messageVM.Topic, Urgency = messageVM.Urgency }; await _pushService.SendNotificationAsync(message); return(NoContent()); }
public async Task <IActionResult> SendNotification([FromBody] PushMessageViewModel message) { PushMessage pushMessage = new PushMessage(message.Notification) { Topic = message.Topic, Urgency = message.Urgency }; // TODO: This should be scheduled in background await _subscriptionStore.ForEachSubscriptionAsync((PushSubscription subscription) => _notificationService.SendNotification(subscription, pushMessage)); return(NoContent()); }
public IActionResult SendNotification([FromBody] PushMessageViewModel message) { PushMessageEx msg = new PushMessageEx(); msg.pushmessage = new PushMessage(message.Notification) { Topic = message.Topic, Urgency = message.Urgency }; msg.MemberID = 1;// test _pushNotificationsQueue.Enqueue(msg); return(NoContent()); }
public async Task <IActionResult> SendNotification([FromBody] PushMessageViewModel messageVM) { var message = new PushMessage(messageVM.Notification) { Topic = messageVM.Topic, Urgency = messageVM.Urgency }; await _subscriptionStore.ForEachSubscriptionAsync((PushSubscription subscription) => { _pushClient.RequestPushMessageDeliveryAsync(subscription, message); }); return(NoContent()); }
public async Task <IActionResult> SendNotification([FromBody] PushMessageViewModel message) { _logger.LogInformation($"Sending targeted push for: {message.Target} - {message.Notification}"); var pushMessage = new WP.PushMessage(message.Notification) { Topic = message.Topic, Urgency = message.Urgency }; // TODO: This should be scheduled in background await _subscriptionStore.ForEachSubscriptionAsync(message.Target, (WP.PushSubscription subscription) => { _logger.LogInformation($"Found subscription: {subscription}"); _notificationService.SendNotificationAsync(subscription, pushMessage, message.Target); }); return(NoContent()); }
/// <summary> /// 非同步執行推播API /// </summary> /// <param name="PushMsg"></param> /// <returns></returns> public async Task <Uri> RunPushApiAsync(PushMessageViewModel PushMsg) { _logger.Information("RunPushApiAsync model: " + JsonConvert.SerializeObject(PushMsg)); HttpClient httpClient = new HttpClient(); httpClient.BaseAddress = new Uri(PushAPIUrl); httpClient.DefaultRequestHeaders.Accept.Clear(); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); try { #region 新增手機推播訊息紀錄 VerityResult result = new VerityResult(); PhonePushMessageLog log = new PhonePushMessageLog(); log.MessageId = PushMsg.messageid; log.PushTime = BsonDateTime.Create(DateTime.Now); log.Title = PushMsg.title; log.Body = PushMsg.body; log.SenderId = PushMsg.senderid; log.ReaderId = PushMsg.readerid; log.KeyNumber = PushMsg.KeyNumber; log.MobileType = PushMsg.MobileType; log.Category = PushMsg.category; log.IsRead = false; log.IsDelete = false; result = await _phonePushMessageService.Create(log); #endregion HttpResponseMessage response = await httpClient.PostAsJsonAsync( "api/Push/PushNoticeMessage", PushMsg); response.EnsureSuccessStatusCode(); // return URI of the created resource. return(response.Headers.Location); } catch (Exception ex) { _logger.Information("RunPushApiAsync model: " + JsonConvert.SerializeObject(ex)); throw ex; } }
/// <summary> /// 修改報價 /// </summary> /// <param name="Model"></param> /// <returns></returns> public async Task <JsonResult> ModifyQuote(DriverQuotePriceViewModel Model) { _logger.Information($"ModifyQuote : { JsonConvert.SerializeObject(Model)}"); ResponseViewModel responseResult = new ResponseViewModel(); try { var user = _aspNetUsersService.GetUserModelByName(User.Identity.Name); responseResult = await _bookingService.UpdateOrDeleteQuotedRecordsByCreater(Model, user.Id, "Update"); if (responseResult.IsOk) { #region 修改報價推播通知 var queryDriver = _aspNetUsersService.GetUserModel(Model.DriverId); string appellationDriver = string.Empty; if (!string.IsNullOrEmpty(queryDriver.Sex)) { appellationDriver = StringExt.AppellationName(queryDriver.RealName, queryDriver.Sex.Trim()); } else { appellationDriver = queryDriver.RealName; } string title = Resource.Driver + appellationDriver + string.Format(Resource.QuotedPrice, Model.QuotedPrice); string body = string.Empty; string goodsOwnerId = _bookingService.GetBooking(Model.MessageId).GoodOwnerId; PushMessageViewModel pushMsg = RunPushApi(title, body, user.Id, goodsOwnerId, 10, Model.MessageId.ToString()); await RunPushApiAsync(pushMsg); #endregion } } catch (Exception ex) { _logger.Information($"Quote exception: { JsonConvert.SerializeObject(ex)}"); responseResult.IsOk = false; responseResult.Message = ex.ToString(); throw ex; } return(Json(responseResult, JsonRequestBehavior.DenyGet)); }
public static bool PushTaskMessage(PushMessageViewModel message) { var result = false; var pushMessage = ConverToMessageModel(message); pushMessage.Type = message.PushType == Push_Groupcast ? MessageType.AppGroupcast : MessageType.AppBroadcast; if (message.PushType == Push_Groupcast) // 组播,添加tag的逻辑 { pushMessage.Tags = message.Tags?.Split(';').ToList(); } try { using (var client = new PushClient()) { var pushResult = client.PushTaskMessage(pushMessage); if (pushResult != null) { if (!string.IsNullOrEmpty(pushResult.ErrorMessage)) { logger.Log(Level.Error, pushResult.ErrorMessage, "Error occurred in PushTaskMessage"); } else { result = pushResult.Result; } } } } catch (Exception ex) { logger.Log(Level.Error, ex, "Error occurred in PushTaskMessage"); } return(result); }
public async Task <ActionResult> Save(BookingViewModel model, HttpPostedFileBase[] goodsPhotoUpload) { VerityBookingResult result = new VerityBookingResult(); if (ModelState.IsValid) { try { var user = _aspNetUsersService.GetUserModelByName(User.Identity.Name); result = await _bookingService.CreateOrUpdateBooking(model, user.Id, user.CompanyId); if (result.IsOk) { int count = 1; foreach (HttpPostedFileBase file in goodsPhotoUpload) { VerityResult uploadResult = new VerityResult(); bool isUpload = FileUploadVerify(file); if (isUpload) { uploadResult = await UploadImageFile(file, result.GoodOwnerId, result.MessageId, count); } count++; } TempData["SaveResult"] = result.Message; #region 推播 if (!string.IsNullOrEmpty(model.DriverId)) { string appellationGoodsOwner = string.Empty; if (!string.IsNullOrEmpty(user.Sex)) { appellationGoodsOwner = StringExt.AppellationName(user.RealName, user.Sex.Trim()); } else { appellationGoodsOwner = user.RealName; } string title = Resource.GoodsOwner + appellationGoodsOwner + Resource.ConfirmTransaction; string body = model.BookingDate + " " + model.StartAddress + Resource.GoToward + model.TargetAddress; PushMessageViewModel pushMsg = RunPushApi(title, body, user.Id, model.DriverId, 3, result.MessageId.ToString()); await RunPushApiAsync(pushMsg); } #endregion return(RedirectToAction("Index")); } else { TempData["SaveResult"] = result.Message; } } catch (Exception ex) { TempData["SaveResult"] = result.Message; _logger.Information($"Save BookingViewModel error : { JsonConvert.SerializeObject(ex)}"); throw ex; } } return(View("Create", model)); }
public async Task <ActionResult> Save(BookingQuoteCollection model, HttpPostedFileBase[] goodsPhotoUpload) { VerityBookingResult result = new VerityBookingResult(); if (ModelState.IsValid) { try { var user = _aspNetUsersService.GetUserModelByName(User.Identity.Name); result = await _bookingService.UpdateBookingQuote(model, user.Id, user.CompanyId); if (result.IsOk) { int count = 1; if (goodsPhotoUpload != null) { foreach (HttpPostedFileBase file in goodsPhotoUpload) { VerityResult uploadResult = new VerityResult(); bool isUpload = FileUploadVerify(file); if (isUpload) { uploadResult = await UploadImageFile(file, result.GoodOwnerId, result.MessageId, count); } count++; } } TempData["SaveResult"] = result.Message; #region 推播通知原車主取消、新車主新任務 //原車主 var queryOriginDriver = _aspNetUsersService.GetUserModel(model.DriverQuotePrice.OldDriverId); string originDriver = string.Empty; if (!string.IsNullOrEmpty(queryOriginDriver.Sex)) { originDriver = StringExt.AppellationName(queryOriginDriver.RealName, queryOriginDriver.Sex.Trim()); } else { originDriver = queryOriginDriver.RealName; } string title = "原" + Resource.Driver + originDriver + MessageResource.CancelMission; string body = string.Empty; PushMessageViewModel pushMsg = RunPushApi(title, body, user.Id, model.DriverQuotePrice.OldDriverId, 10, model.Booking.MessageId.ToString()); await RunPushApiAsync(pushMsg); //新車主 var queryNewDriver = _aspNetUsersService.GetUserModel(model.DriverQuotePrice.DriverId); string newDriver = string.Empty; if (!string.IsNullOrEmpty(queryNewDriver.Sex)) { newDriver = StringExt.AppellationName(queryNewDriver.RealName, queryNewDriver.Sex.Trim()); } else { newDriver = queryNewDriver.RealName; } string newTitle = "新" + Resource.Driver + newDriver + MessageResource.HadNewMission; string newBody = string.Empty; PushMessageViewModel newPushMsg = RunPushApi(newTitle, newBody, user.Id, model.DriverQuotePrice.DriverId, 10, model.Booking.MessageId.ToString()); await RunPushApiAsync(newPushMsg); #endregion #region 推播通知貨主變更司機 //貨主 var queryGoodsOwner = _aspNetUsersService.GetUserModel(model.Booking.GoodOwnerId); string goodsOwner = string.Empty; if (!string.IsNullOrEmpty(queryGoodsOwner.Sex)) { goodsOwner = StringExt.AppellationName(queryGoodsOwner.RealName, queryGoodsOwner.Sex.Trim()); } else { goodsOwner = queryNewDriver.RealName; } string forgoodsOwnerTitle = "原" + Resource.Driver + originDriver + "變更為新" + Resource.Driver + newDriver; PushMessageViewModel goodsOwnerPushMsg = RunPushApi(forgoodsOwnerTitle, null, user.Id, model.Booking.GoodOwnerId, 10, model.Booking.MessageId.ToString()); await RunPushApiAsync(goodsOwnerPushMsg); #endregion return(RedirectToAction("Index")); } else { TempData["SaveResult"] = result.Message; } } catch (Exception ex) { TempData["SaveResult"] = result.Message; _logger.Information($"Save BookingViewModel error : { JsonConvert.SerializeObject(ex)}"); throw ex; } } return(View("Create", model)); }
public JsonResult SubmitPushMessage(PushMessageViewModel message) { var count = -1; if (message != null && !string.IsNullOrWhiteSpace(message.Description) && !string.IsNullOrWhiteSpace(message.Title) && !string.IsNullOrWhiteSpace(message.Content)) { if (message.ExpireTime.HasValue) { message.SendTime = message.SendTime ?? DateTime.Now; if (message.ExpireTime < DateTime.Now || message.ExpireTime < message.SendTime.Value.AddMinutes(30)) { return(Json(-2)); } } if (message.APPExpireTime.HasValue) { message.SendTime = message.SendTime ?? DateTime.Now; if (message.APPExpireTime < DateTime.Now || message.APPExpireTime < message.SendTime.Value.AddMinutes(30)) { return(Json(-2)); } } if (message.AfterOpen == "1" && string.IsNullOrWhiteSpace(message.AppActivity)) { return(Json(-3)); } if (!string.IsNullOrWhiteSpace(message.IOSValue1)) { message.IOSValue1 = message.IOSValue1.Replace("“", "\""); message.IOSValue1 = message.IOSValue1.Replace("”", "\""); } if (!string.IsNullOrWhiteSpace(message.IOSValue2)) { message.IOSValue2 = message.IOSValue2.Replace("“", "\""); message.IOSValue2 = message.IOSValue2.Replace("”", "\""); } if (!string.IsNullOrWhiteSpace(message.IOSValue3)) { message.IOSValue3 = message.IOSValue3.Replace("“", "\""); message.IOSValue3 = message.IOSValue3.Replace("”", "\""); } if (!string.IsNullOrWhiteSpace(message.AndriodValue1)) { message.AndriodValue1 = message.AndriodValue1.Replace("“", "\""); message.AndriodValue1 = message.AndriodValue1.Replace("”", "\""); } if (!string.IsNullOrWhiteSpace(message.AndriodValue2)) { message.AndriodValue2 = message.AndriodValue2.Replace("“", "\""); message.AndriodValue2 = message.AndriodValue2.Replace("”", "\""); } if (User == null || User.Identity == null) { return(Json(10)); } message.OperUser = User.Identity.Name; if (message.PushType == Push_Broadcast) // 广播 { var result = PushHandler.PushTaskMessage(message); count = result ? 1 : -10; } else if (message.PushType == Push_Groupcast) // 组播 { if (string.IsNullOrEmpty(message.Tags)) { return(Json(-6)); } var result = PushHandler.PushTaskMessage(message); count = result ? 1 : -10; } else if (message.PushType == Push_Single) // 单播 { #region Get phone numbers var cellphones = new List <string>(10000); var cellphonesFile = Request.Files.Count > 0 ? Request.Files[0] : null; if (cellphonesFile == null || cellphonesFile.ContentLength < 11) { return(Json(-5)); } try { using (var stream = new StreamReader(cellphonesFile.InputStream, Encoding.UTF8)) { foreach (var item in Regex.Split(stream.ReadToEnd(), @"\D") .Where( cellphone => !string.IsNullOrEmpty(cellphone) && Regex.IsMatch(cellphone, @"^1\d{10}$")) .Distinct()) { cellphones.Add(item); } } //var preList = new PushManager().GetPushMsgPersonConfig(); //if (preList != null) //// 添加预配置的手机号 //{ // cellphones.AddRange(preList); // cellphones = cellphones.Select(x => x).Distinct().ToList(); //} if (cellphones.Count < 1) { return(Json(0)); } var result = PushHandler.PushMessage(message, cellphones); count = result ? cellphones.Count : -10; } catch (Exception) { return(Json(-10)); } #endregion } } return(Json(count)); }
private static PushMessageModel ConverToMessageModel(PushMessageViewModel message) { PushMessageModel pushMessage = new PushMessageModel(); if (message != null) { pushMessage.Description = message.Description; pushMessage.Title = message.Title; pushMessage.Content = message.Content; pushMessage.BeginSendTime = message.SendTime.HasValue ? message.SendTime : DateTime.Now; pushMessage.ExpireTime = message.ExpireTime.HasValue ? message.ExpireTime : pushMessage.BeginSendTime.Value.AddDays(2); pushMessage.AppExpireTime = message.APPExpireTime.HasValue ? message.APPExpireTime : pushMessage.BeginSendTime.Value.AddDays(7); pushMessage.RichTextImage = message.RichTextImage?.Replace("http://image.tuhu.cn", "https://img1.tuhu.org"); pushMessage.AndriodModel = new AndriodModel { AfterOpen = message.AfterOpen == "0" ? AfterOpenEnum.GoApp : AfterOpenEnum.GoActivity, AppActivity = message.AppActivity, ExKey1 = message.AndriodKey1, ExValue1 = message.AndriodValue1, ExKey2 = message.AndriodKey2, ExValue2 = message.AndriodValue2 }; switch (message.AppMsgType) { case "activity": pushMessage.CenterMsgType = Constants.MessageType_Broadcast; pushMessage.HeadImageUrl = "http://image.tuhu.cn/news/activity.png"; break; case "discovery": pushMessage.CenterMsgType = Constants.MessageType_Message; pushMessage.HeadImageUrl = "http://image.tuhu.cn/news/faxian.png"; break; case "system": pushMessage.CenterMsgType = Constants.MessageType_Common; pushMessage.HeadImageUrl = "http://image.tuhu.cn/news/wuliu.png"; break; case "logistics": pushMessage.CenterMsgType = Constants.MessageType_Logistics; pushMessage.HeadImageUrl = "http://image.tuhu.cn/news/logistics.png"; break; default: pushMessage.CenterMsgType = Constants.MessageType_Broadcast; pushMessage.HeadImageUrl = "http://image.tuhu.cn/news/activity.png"; break; } pushMessage.BigImagePath = message.BigImagePath; pushMessage.IOSModel = new IOSModel() { ExKey1 = message.IOSKey1, ExValue1 = message.IOSValue1, ExKey2 = message.IOSKey2, ExValue2 = message.IOSValue2, ExKey3 = message.IOSKey3, ExValue3 = message.IOSValue3, ShowBadge = message.IOSShowBadge, IOSMainTitle = message.IOSMainTitle, IOSTitle = message.IOSTitle }; pushMessage.SourceName = PushSourceName; pushMessage.OperUser = message.OperUser; } return(pushMessage); }