Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        /// <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());
        }
Esempio n. 5
0
        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());
        }
Esempio n. 8
0
        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());
        }
Esempio n. 10
0
        /// <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));
        }
Esempio n. 12
0
        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));
        }
Esempio n. 14
0
        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));
        }
Esempio n. 15
0
        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));
        }
Esempio n. 16
0
        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);
        }