Beispiel #1
0
        // 載入大量名單
        public void Example01()
        {
            var model = new SendMessageRuleModel();

            model.SendTitle = string.Empty;
            model.SendBody  = "I_AM_SendBody";

            model.RecipientFromType       = RecipientFromType.FileUpload;
            model.RecipientFromFileUpload = new RecipientFromFileUploadModel
            {
                UploadedFileId = 123
            };
            model.RecipientFromCommonContact = new RecipientFromCommonContactModel
            {
                ContactIds = "1,2,3,4,5"
            };
            model.RecipientFromGroupContact = new RecipientFromGroupContactModel
            {
                ContactIds = "1,2,3,4,5"
            };
            model.RecipientFromManualInput = new RecipientFromManualInputModel
            {
                PhoneNumbers = "886921855554"
            };

            model.SendTimeType = SendTimeType.Immediately;
            model.SendDeliver  = new SendDeliverModel {
                SendTime = DateTime.UtcNow,
            };
            model.SendCycleEveryDay = new SendCycleEveryDayModel {
                SendTime  = DateTime.UtcNow,
                StartDate = DateTime.UtcNow,
                EndDate   = DateTime.UtcNow,
            };
            model.SendCycleEveryWeek = new SendCycleEveryWeekModel {
                SendTime   = DateTime.UtcNow,
                DayOfWeeks = "1111111",
                StartDate  = DateTime.UtcNow,
                EndDate    = DateTime.UtcNow,
            };
            model.SendCycleEveryMonth = new SendCycleEveryMonthModel {
                SendTime  = DateTime.UtcNow,
                StartDate = DateTime.UtcNow,
                EndDate   = DateTime.UtcNow,
            };
            model.SendCycleEveryYear = new SendCycleEveryYearModel {
                SendTime  = DateTime.UtcNow,
                StartDate = DateTime.UtcNow,
                EndDate   = DateTime.UtcNow,
            };

            model.SendCustType    = SendCustType.OneWay;
            model.UseParam        = false;
            model.SendMessageType = SendMessageType.SmsMessage;
            //model.CreatedUser = null;

            string output = JsonConvert.SerializeObject(model, Formatting.Indented);

            System.IO.File.WriteAllText(GetFilePath("載入大量名單"), output);
        }
 public static DateTime?GetStartDate(SendMessageRuleModel model)
 {
     if (model.SendTimeType == SendTimeType.Cycle)
     {
         if (model.SendCycleEveryDay != null)
         {
             return(model.SendCycleEveryDay.StartDate);
         }
         else if (model.SendCycleEveryWeek != null)
         {
             return(model.SendCycleEveryWeek.StartDate);
         }
         else if (model.SendCycleEveryMonth != null)
         {
             return(model.SendCycleEveryMonth.StartDate);
         }
         else if (model.SendCycleEveryYear != null)
         {
             return(model.SendCycleEveryYear.StartDate);
         }
         else
         {
             return(null);
         }
     }
     else
     {
         return(null);
     }
 }
        public static SendMessageRuleModel ConvertModel(SendMessageRuleModel model)
        {
            model.SendTime    = GetSendTime(model);
            model.StartDate   = GetStartDate(model);
            model.EndDate     = GetEndDate(model);
            model.CycleString = GetCycleString(model);

            return(model);
        }
        public static DateTime?GetSendTime(SendMessageRuleModel model)
        {
            if (model.SendTimeType == SendTimeType.Deliver)
            {
                var rule = AutoMapper.Mapper.Map <SendMessageRuleModel, SendMessageRule>(model);

                return(rule.GetSendTime());
            }
            else
            {
                return(null);
            }
        }
        public static string GetCycleString(SendMessageRuleModel model)
        {
            DateTime utcNow = DateTime.UtcNow;

            if (model.SendTimeType == SendTimeType.Cycle)
            {
                if (model.SendCycleEveryDay != null)
                {
                    DateTime cycleDate = Converter.ToLocalTime(
                        model.SendCycleEveryDay.SendTime,
                        model.SendCycleEveryDay.ClientTimezoneOffset);

                    return(string.Format("每天的{0}點{1}分",
                                         cycleDate.ToString("HH"),
                                         cycleDate.ToString("mm")));
                }
                else if (model.SendCycleEveryWeek != null)
                {
                    DateTime cycleDate = Converter.ToLocalTime(
                        model.SendCycleEveryWeek.SendTime,
                        model.SendCycleEveryWeek.ClientTimezoneOffset);

                    List <DayOfWeek> dayOfWeeks = Converter.ToLocalDayOfWeeks(
                        model.SendCycleEveryWeek.SendTime,
                        model.SendCycleEveryWeek.GetDayOfWeeks(),
                        model.SendCycleEveryWeek.ClientTimezoneOffset);

                    // http://254698001.blog.51cto.com/2521548/711940
                    //return string.Format("每周({0})的{1}",
                    //    // 取得 DayOfWeek 的中文名稱(C#)
                    //    // http://zip.nvp.com.tw/forum.php?mod=viewthread&tid=1150
                    //    string.Join("、", dayOfWeeks.Select(p => System.Globalization.DateTimeFormatInfo.CurrentInfo.DayNames[(int)p])),
                    //    cycleDate.ToString("HH:mm"));

                    return(string.Format("{0}的{1}點{2}分",
                                         // 取得 DayOfWeek 的中文名稱(C#)
                                         // http://zip.nvp.com.tw/forum.php?mod=viewthread&tid=1150
                                         string.Join("、", dayOfWeeks.Select(p => GetDayOfWeekString(p))),
                                         cycleDate.ToString("HH"),
                                         cycleDate.ToString("mm")));
                }
                else if (model.SendCycleEveryMonth != null)
                {
                    DateTime cycleDate = Converter.ToLocalTime(
                        model.SendCycleEveryMonth.SendTime,
                        model.SendCycleEveryMonth.ClientTimezoneOffset);

                    return(string.Format("每月的{0}號{1}點{2}分",
                                         cycleDate.ToString("dd"),
                                         cycleDate.ToString("HH"),
                                         cycleDate.ToString("mm")));
                }
                else if (model.SendCycleEveryYear != null)
                {
                    DateTime cycleDate = Converter.ToLocalTime(
                        model.SendCycleEveryYear.SendTime,
                        model.SendCycleEveryYear.ClientTimezoneOffset);

                    return(string.Format("每年的{0}月{1}號{2}點{3}分",
                                         cycleDate.ToString("MM"),
                                         cycleDate.ToString("dd"),
                                         cycleDate.ToString("HH"),
                                         cycleDate.ToString("mm")));
                }
                else
                {
                    return(string.Empty);
                }
            }
            else
            {
                return(string.Empty);
            }
        }
        public HttpResponseMessage Post([FromBody] SendSMSModel sendSMSModel)
        //public HttpResponseMessage Post([FromBody] SendSMSModel sendSMSModel)
        {
            try
            {
                this.logService.Debug("BasicAuthApi::SendSMSController,Post({0})", JsonConvert.SerializeObject(sendSMSModel));

                DateTime?sendTime = sendSMSModel.sendTime;
                string   subject  = sendSMSModel.subject;
                string   content  = sendSMSModel.content;
                string[] mobiles  = sendSMSModel.mobiles;

                HttpResponseMessage returnVal = null;

                using (TransactionScope scope = context.CreateTransactionScope())
                {
                    bool isImmediately = !sendTime.HasValue;

                    var model = new SendMessageRuleModel();

                    model.SendTitle                = subject;
                    model.SendBody                 = content;
                    model.RecipientFromType        = RecipientFromType.ManualInput;
                    model.RecipientFromManualInput = new RecipientFromManualInputModel
                    {
                        PhoneNumbers = string.Join(",", mobiles)
                    };
                    model.SendTimeType = isImmediately ? SendTimeType.Immediately : SendTimeType.Deliver;
                    model.SendDeliver  = isImmediately
                        ? null
                        : new SendDeliverModel
                    {
                        SendTime             = sendTime.Value,
                        ClientTimezoneOffset = ClientTimezoneOffset,
                    };
                    model.SendCycleEveryDay   = null;
                    model.SendCycleEveryWeek  = null;
                    model.SendCycleEveryMonth = null;
                    model.SendCycleEveryYear  = null;
                    model.SendCustType        = SendCustType.OneWay;
                    model.UseParam            = false;
                    model.SendMessageType     = SendMessageType.SmsMessage;
                    model.TotalReceiverCount  = 0;
                    model.TotalMessageCost    = 0;
                    model.RemainingSmsBalance = 0;
                    model.CreatedTime         = DateTime.UtcNow;

                    model.UpdateClientTimezoneOffset(ClientTimezoneOffset);

                    var rules = this.sendMessageRuleService.CreateSendMessageRuleFromWeb(CurrentUser, model);

                    var result = rules.Select(p => new
                    {
                        balance  = p.RemainingSmsBalance, // 發送後剩餘點數
                        smsCount = p.TotalReceiverCount,  // 發送通數
                        price    = p.TotalMessageCost,    // 本次發送扣除點數
                        bulkId   = p.Id,                  // 發送識別碼
                    });

                    returnVal = this.Request.CreateResponse(HttpStatusCode.OK, result);

                    scope.Complete();
                }

                return(returnVal);
            }
            catch (Exception ex)
            {
                this.logService.Error(ex);

                return(this.Request.CreateResponse(HttpStatusCode.InternalServerError, new
                {
                    ErrorMessage = ex.Message,
                }));
            }
        }
Beispiel #7
0
        public HttpResponseMessage Post([FromBody] SendParamSMSModel sendParamSMSModel)
        //public HttpResponseMessage Post([FromBody] SendParamSMSModel sendParamSMSModel)
        {
            try
            {
                this.logService.Debug("BasicAuthApi::SendParamSMSController,Post({0})", JsonConvert.SerializeObject(sendParamSMSModel));

                DateTime?sendTime = sendParamSMSModel.sendTime;
                string   subject  = sendParamSMSModel.subject;
                string   content  = sendParamSMSModel.content;
                List <UploadedMessageReceiverModel> messageReceivers = sendParamSMSModel.messageReceivers;

                HttpResponseMessage returnVal = null;

                var ErrorMessages = new List <string>();

                using (TransactionScope scope = context.CreateTransactionScope())
                {
                    bool isImmediately = !sendTime.HasValue;

                    // Simulate SaveUploadedFile

                    var entityUploadedFile = new UploadedFile();
                    entityUploadedFile.FileName         = "FakeFileName";
                    entityUploadedFile.FilePath         = "FakeFilePath";
                    entityUploadedFile.UploadedFileType = UploadedFileType.SendParamMessage;
                    entityUploadedFile.CreatedUser      = CurrentUser;
                    entityUploadedFile.CreatedTime      = DateTime.UtcNow;
                    entityUploadedFile = AsyncHelper.RunSync(() => context.InsertAsync(entityUploadedFile));

                    // Simulate Insert UploadedMessageReceivers

                    var blacklists = context.Set <Blacklist>().Where(p => p.CreatedUserId == CurrentUserId).ToList();

                    for (int i = 0; i < messageReceivers.Count; i++)
                    {
                        var _model = messageReceivers[i];

                        if (string.IsNullOrEmpty(_model.Mobile))
                        {
                            continue;
                        }

                        var entity = new UploadedMessageReceiver();
                        entity.RowNo  = i + 1;
                        entity.Name   = _model.Name;
                        entity.Mobile = _model.Mobile;
                        entity.Email  = _model.Email;

                        if (_model.SendTime.HasValue)
                        {
                            entity.SendTime = Converter.ToUniversalTime(_model.SendTime.Value, ClientTimezoneOffset);
                        }
                        else
                        {
                            entity.SendTime = null;
                        }

                        entity.ClientTimezoneOffset = ClientTimezoneOffset;
                        entity.UseParam             = true;
                        entity.Param1            = _model.Param1;
                        entity.Param2            = _model.Param2;
                        entity.Param3            = _model.Param3;
                        entity.Param4            = _model.Param4;
                        entity.Param5            = _model.Param5;
                        entity.CreatedUserId     = CurrentUserId;
                        entity.CreatedTime       = entityUploadedFile.CreatedTime;
                        entity.UploadedFile      = entityUploadedFile;
                        entity.UploadedSessionId = entityUploadedFile.Id;

                        var error   = string.Empty;
                        var isValid = this.validationService.Validate(entity, blacklists, out error);

                        if (!isValid)
                        {
                            ErrorMessages.Add(string.Format("{0}: {1}", entity.Mobile, error));
                        }

                        // 目前就算驗證不過也沒關係,仍然可以存檔
                        entity = AsyncHelper.RunSync(() => context.InsertAsync(entity));
                    }

                    var model = new SendMessageRuleModel();

                    model.SendTitle               = subject;
                    model.SendBody                = content;
                    model.RecipientFromType       = RecipientFromType.FileUpload;
                    model.RecipientFromFileUpload = new RecipientFromFileUploadModel
                    {
                        UploadedFileId = entityUploadedFile.Id,
                        AddSelfToMessageReceiverList = false,
                    };

                    model.SendTimeType = isImmediately ? SendTimeType.Immediately : SendTimeType.Deliver;
                    model.SendDeliver  = isImmediately
                        ? null
                        : new SendDeliverModel
                    {
                        SendTime             = sendTime.Value,
                        ClientTimezoneOffset = ClientTimezoneOffset,
                    };
                    model.SendCycleEveryDay   = null;
                    model.SendCycleEveryWeek  = null;
                    model.SendCycleEveryMonth = null;
                    model.SendCycleEveryYear  = null;
                    model.SendCustType        = SendCustType.OneWay;
                    model.UseParam            = true;
                    model.SendMessageType     = SendMessageType.SmsMessage;
                    model.TotalReceiverCount  = 0;
                    model.TotalMessageCost    = 0;
                    model.RemainingSmsBalance = 0;
                    model.CreatedTime         = DateTime.UtcNow;

                    model.UpdateClientTimezoneOffset(ClientTimezoneOffset);

                    var rules = this.sendMessageRuleService.CreateSendMessageRuleFromWeb(CurrentUser, model);

                    var result = rules.Select(p => new
                    {
                        balance  = p.RemainingSmsBalance, // 發送後剩餘點數
                        smsCount = p.TotalReceiverCount,  // 發送通數
                        price    = p.TotalMessageCost,    // 本次發送扣除點數
                        bulkId   = p.Id,                  // 發送識別碼
                    });

                    returnVal = this.Request.CreateResponse(HttpStatusCode.OK, new {
                        result = result,
                        errors = ErrorMessages,
                    });

                    scope.Complete();
                }

                return(returnVal);
            }
            catch (Exception ex)
            {
                this.logService.Error(ex);

                return(this.Request.CreateResponse(HttpStatusCode.InternalServerError, new
                {
                    ErrorMessage = ex.Message,
                }));
            }
        }