快速开发平台消息通知中心之短信发送

  短信发送一般是用的第三方短信平台,调用第三方短信平台接口即可实现收发信息的服务。


        /// <summary>
        /// 发送短信通知
        /// </summary>
        public static void SendSmsNotice(int number)
        {
            using (var unitOfWork = new UnitOfWork())
            {
                var messageList = unitOfWork.SmsNoticeMessageRepository.GetSmsNoticeMessages(number);
                if (!messageList.Any()) return;
                var duplicate = new List<SmsNoticeMessage>(messageList.ToArray());
                var removeMessageList = new List<SmsNoticeMessage>();
                foreach (var msg in duplicate)
                {
                    var result = messageList.Where(s => s.ReasonType == msg.ReasonType && s.PhoneNumber == msg.PhoneNumber).ToList();
                    var remark = string.Empty;
                    if (result.Any() && result.Count > 1)
                    {
                        remark = result.Where(r => !string.IsNullOrWhiteSpace(r.Remark)).Aggregate(remark, (current, r) => current + (r.Remark + "|"));
                        for (int i = 0; i < result.Count; i++)
                        {
                            removeMessageList.Add(result[i]);
                            messageList.Remove(result[i]);
                        }
                        result[0].Remark = remark;
                        messageList.Add(result[0]);
                    }
                }
                if (removeMessageList.Any())
                {
                    removeMessageList.ForEach(s => { s.IsSended = true; s.IsSendSuccess = true; });
                }
                var messageCollection = new Dictionary<string, string>();
                foreach (var noticeMessage in messageList)
                {
                    var message = GetMessageTemplete(noticeMessage);
                    if (messageCollection.ContainsKey(message))
                    {
                        messageCollection[message] = messageCollection[message] + "," + noticeMessage.PhoneNumber;
                    }
                    else
                    {
                        messageCollection.Add(message, noticeMessage.PhoneNumber);
                    }
                }
                foreach (var msg in messageCollection)
                {
                    var toList = msg.Value.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                    //var isSuccess = Utils.SendSms(toList, msg.Key);
                    Task.Factory.StartNew(() => { Utils.SendSms(toList, msg.Key); }).Start();
                    foreach (var entity in messageList.Where(p=>toList.Contains(p.PhoneNumber)))
                    {
                        entity.IsSended = true;
                        entity.IsSendSuccess = true;
                    }
                }

                unitOfWork.SmsNoticeMessageRepository.UpdateBatch(messageList);
                unitOfWork.SmsNoticeMessageRepository.UpdateBatch(removeMessageList);
            }
        }
        /// <summary>
        /// 发送短信通知
        /// </summary>
        public static void SendSmsNotice(Product product)
        {
            using (var unitOfWork = new UnitOfWork())
            {
                var contact = unitOfWork.ContactInfoRepository.GetFirst(s => s.UserId == product.UserId);
                var reason = string.Empty;
                var message = string.Empty;
                var call = contact.FirstName + (contact.Sex == SexEnum.Woman ? "女士" : "先生");

                if (product.State == ProductStateEnum.CheckFail)
                {
                    reason = "产品审核状态变更为审核失败";
                    message = string.Format("{0},您好!您的产品[{1}]因[{2}]未通过审核,请登录网站修改", call, product.Name, product.CheckRemark);
                }
                else if (product.State == ProductStateEnum.IsConfirmed)
                {
                    reason = "产品审核状态变更为已上架";
                    message = string.Format("{0},您好!您的产品[{1}]已通过审核,请登录网站进行产品操作", call, product.Name);
                }
                var smsMessageNotice = new SmsNoticeMessage
                                         {
                                             IsSended = true,
                                             UserId = product.UserId,
                                             PhoneNumber = contact.MobileTelephone,
                                             Reason = reason,
                                             Gender = contact.Sex == SexEnum.Woman ? Gender.Female : Gender.Male,
                                             FirstName = contact.FirstName,
                                             AddTime = DateTime.Now,
                                             ReasonType = product.State == ProductStateEnum.IsConfirmed ? SmsNoticeReason.N9 : SmsNoticeReason.N10,
                                             Remark = "即时通知"
                                         };
                var sendResult = Utils.InvokeApi<ResponsePackage<SmsNoticeResult>>("SmsNotice/SendSingle", new { To = contact.MobileTelephone, Data = message });
                if (sendResult.Data != null)
                {
                    smsMessageNotice.IsSendSuccess = sendResult.Data.IsSuccess;
                }
                unitOfWork.SmsNoticeMessageRepository.Insert(smsMessageNotice);
                unitOfWork.Save();
            }
        }


快速开发平台消息通知中心之短信发送,短信发送是什么,用什么实现?快速开发平台中我们支持满意通和阿里百川的短信服务,他们的接口都有实现。 

本站文章除注明转载外,均为本站原创或翻译,欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,共创和谐网络环境。
转载请注明:文章转载自:软件开发框架 » 快速开发平台消息通知中心之短信发送
本文标题:快速开发平台消息通知中心之短信发送

原文地址:https://www.cnblogs.com/frfwef/p/14573197.html