/// <summary> /// 处理已经发送过的wait_mt /// </summary> /// <param name="model"></param> public void CompleteMt(SmsBatchWaitInfo model, float sendPrice, int count) { mrg.UpdatePrice(model.EnterPriseID, sendPrice * count); mrg.UpdateSuccessCount(model.BatchID.Value, count); foreach (SendingBatchModel batchmodel in AppContent.SendingBatchs) { if (batchmodel.ID == model.BatchID) { try { //sendingmodel = batchmodel; batchmodel.SendCount++; if (batchmodel.SendCount == batchmodel.MtCount) { Print("发送完成:" + batchmodel.ID + ""); //更新状态为完成 mrg.UpdateBatchState(BatchState.Complete, batchmodel.ID); AppContent.SendingBatchs.Remove(batchmodel); } } catch (Exception ex) { Print(ex.Message); } break; } } mrg.RemoveToMt(model); }
public override void WorkHandle() { Thread.Sleep(base.SleepSpan); while (SendingMtCount < AppContent.SendMtCount) { if (AppContent.SendingMts.Count == 0) { break; } SmsBatchWaitInfo model = AppContent.SendingMts.Dequeue(); Print("发送:" + model.BatchID + ""); ThreadPool.QueueUserWorkItem(new WaitCallback(Sendmt), model); Thread.Sleep(base.SleepSpan / AppContent.SendMtCount); lock (lockobj) SendingMtCount++; } }
public void RemoveToMt(SmsBatchWaitInfo model) { SmsBatchManage.Instance.deleteMt(model.ID); }
public void SendPool(object sender) { SendInfo info = sender as SendInfo; SmsBatchInfo batchInfo = new SmsBatchInfo(); batchInfo.AccountID = info.AccountID; batchInfo.EnterPriseID = info.EnterpriseID; batchInfo.BatchName = info.BatchName; batchInfo.Remark = info.BatchRemark; batchInfo.SmsContent = info.Content; batchInfo.CommitTime = DateTime.Now; List<SmsTelesegInfo> telesegInfos = SmsTelesegManage.Instance.FindList(0, -1); List<SmsBlackphoneInfo> blackphoneInfos = SmsBlackPhoneManage.Instance.GetList(0, -1, info.EnterpriseID); List<SmsContentfilterkeyInfo> contentfilterkeyInfos = SmsContentfilterkeyManage.Instance.GetList(0, -1, info .EnterpriseID); batchInfo.MsgType = 1; batchInfo.CreateTime = DateTime.Now.AddSeconds(-5); batchInfo.MessageState = 0; batchInfo.BatchState = 1; int batchId = SmsBatchManage.Instance.AddBatch(batchInfo); int mtpackLength = 100; int readCount = 0; int totalCount = 0; List<SmsBatchWaitInfo> waitInfos = new List<SmsBatchWaitInfo>(); SmsBatchWaitInfo[] waitinfoarray = new SmsBatchWaitInfo[3]; waitinfoarray[0] = new SmsBatchWaitInfo(); waitinfoarray[1] = new SmsBatchWaitInfo(); waitinfoarray[2] = new SmsBatchWaitInfo(); List<string> allPhones = new List<string>(); if (info.IsFileSend) { DataTable dt = new DataTable(); /* 文件发送*/ String dirPath = Path.Combine(Path.Combine(Request.PhysicalApplicationPath, "uplpod"), info.FileName); if (File.Exists(dirPath)) { dt = FileUtily.ReadDataTable(dirPath, 0, info.spilter, info.IsHeader); } totalCount = dt.Rows.Count; bool isGroup = info.Content.IndexOf("@") > -1; if (isGroup) { SMSGroupInfo[] groupInfo = new SMSGroupInfo[3]; groupInfo[0] = new SMSGroupInfo(); groupInfo[0].groupInfos = new List<GroupInfo>(); groupInfo[1] = new SMSGroupInfo(); groupInfo[1].groupInfos = new List<GroupInfo>(); groupInfo[2] = new SMSGroupInfo(); groupInfo[2].groupInfos = new List<GroupInfo>(); for (int i = 0; i < dt.Rows.Count; i++) { if (!AppContent.isPhone(dt.Rows[i][0].ToString())) continue; if (info.FBlack && blackphoneInfos.Count > 0) { if (filterBlack(dt.Rows[i][0].ToString(), blackphoneInfos)) continue; } string content = ComparContent(info.Content, dt.Columns, dt.Rows[i]); if (info.FKeyword && contentfilterkeyInfos.Count > 0) { if (filterContent(content, contentfilterkeyInfos)) continue; } if (info.FRepeat && allPhones.Contains(dt.Rows[i][0].ToString())) continue; allPhones.Add(dt.Rows[i][0].ToString()); int phonetel = getPhone(dt.Rows[i][0].ToString(), telesegInfos); groupInfo[phonetel].groupInfos.Add(new GroupInfo() { Content = content, Phone = dt.Rows[i][0].ToString() }); readCount++; } for (int i = 0; i < 3; i++) { if (groupInfo[i].groupInfos.Count > 0) { waitinfoarray[i].AccountID = info.AccountID; waitinfoarray[i].EnterPriseID = info.EnterpriseID; waitinfoarray[i].CreateTime = DateTime.Now; waitinfoarray[i].MsgCount = mtpackLength; waitinfoarray[i].MsgType = 0; waitinfoarray[i].MsgCarrier = i; waitinfoarray[i].BatchID = batchId; waitinfoarray[i].MsgPack = JsonHelper.SerializeObject(groupInfo[i]); waitInfos.Add(waitinfoarray[i]); groupInfo[i] = new SMSGroupInfo(); groupInfo[i].groupInfos = new List<GroupInfo>(); waitinfoarray[i] = new SmsBatchWaitInfo(); } } } else { bool isFContent = false; if (info.FKeyword && contentfilterkeyInfos.Count > 0) { if (filterContent(info.Content, contentfilterkeyInfos)) isFContent = true; } if (!isFContent) { SMSMassInfo[] massInfo = new SMSMassInfo[3]; massInfo[0] = new SMSMassInfo(); massInfo[0].Content = info.Content; massInfo[0].Phones = new List<string>(); massInfo[1] = new SMSMassInfo(); massInfo[1].Content = info.Content; massInfo[1].Phones = new List<string>(); massInfo[2] = new SMSMassInfo(); massInfo[2].Content = info.Content; massInfo[2].Phones = new List<string>(); for (int i = 0; i < dt.Rows.Count; i++) { if (!AppContent.isPhone(dt.Rows[i][0].ToString())) continue; if (info.FBlack && blackphoneInfos.Count > 0) { if (filterBlack(dt.Rows[i][0].ToString(), blackphoneInfos)) continue; } if (info.FRepeat && allPhones.Contains(dt.Rows[i][0].ToString())) continue; allPhones.Add(dt.Rows[i][0].ToString()); int phonetel = getPhone(dt.Rows[i][0].ToString(), telesegInfos); massInfo[phonetel].Phones.Add( dt.Rows[i][0].ToString() ); readCount++; } for (int i = 0; i < 3; i++) { if (massInfo[i].Phones.Count > 0) { waitinfoarray[i].AccountID = info.AccountID; waitinfoarray[i].EnterPriseID = info.EnterpriseID; waitinfoarray[i].CreateTime = DateTime.Now; waitinfoarray[i].MsgCount = mtpackLength; waitinfoarray[i].MsgType = 1; waitinfoarray[i].BatchID = batchId; waitinfoarray[i].MsgCarrier = i; waitinfoarray[i].MsgPack = JsonHelper.SerializeObject(massInfo[i]); waitInfos.Add(waitinfoarray[i]); massInfo[i] = new SMSMassInfo(); massInfo[i].Content = info.Content; massInfo[i].Phones = new List<string>(); waitinfoarray[i] = new SmsBatchWaitInfo(); } } } } } else { List<string> cids = new List<string>(); List<SmsContactInfo> smsContactInfos = new List<SmsContactInfo>(); /*联系人发送*/ for (int i = 0; i < info.Mobiles.Length; i++) { string mobile = info.Mobiles[i]; string submobile = mobile.Substring(0, 1); switch (submobile) { case "c": /*直接联系人*/ string cid = mobile.TrimStart('c').TrimStart('0'); cids.Add(cid); break; case "g": string[] contions = mobile.TrimStart('g').Split('|'); int gid = 0; if (int.TryParse(contions[0], out gid)) smsContactInfos.AddRange(SmsContactManage.Instance.getList(0, -1, int.Parse(contions[0]), contions[1], contions[2], info.EnterpriseID)); break; case "1": if (AppContent.isPhone(mobile)) smsContactInfos.Add(new SmsContactInfo() { Mobile = mobile, Birthday = DateTime.Parse("1910-1-1") }); break; } } List<SmsContactInfo> contacts = SmsContactManage.Instance.GetContacts(cids, info.EnterpriseID); smsContactInfos.AddRange(contacts); bool isGroup = info.Content.IndexOf("@") > -1; totalCount = smsContactInfos.Count; if (isGroup) { SMSGroupInfo[] groupInfo = new SMSGroupInfo[3]; groupInfo[0] = new SMSGroupInfo(); groupInfo[0].groupInfos = new List<GroupInfo>(); groupInfo[1] = new SMSGroupInfo(); groupInfo[1].groupInfos = new List<GroupInfo>(); groupInfo[2] = new SMSGroupInfo(); groupInfo[2].groupInfos = new List<GroupInfo>(); for (int i = 0; i < smsContactInfos.Count; i++) { SmsContactInfo contactInfo = smsContactInfos[i]; if (!AppContent.isPhone(contactInfo.Mobile)) continue; if (info.FBlack && blackphoneInfos.Count > 0) { if (filterBlack(contactInfo.Mobile, blackphoneInfos)) continue; } string content = ComparContent(info.Content, contactInfo); if (info.FKeyword && contentfilterkeyInfos.Count > 0) { if (filterContent(content, contentfilterkeyInfos)) continue; } if (info.FRepeat && allPhones.Contains(contactInfo.Mobile)) continue; allPhones.Add(contactInfo.Mobile); int phonetel = getPhone(contactInfo.Mobile, telesegInfos); groupInfo[phonetel].groupInfos.Add(new GroupInfo() { Content = ComparContent(info.Content, contactInfo), Phone = contactInfo.Mobile }); readCount++; } for (int i = 0; i < 3; i++) { if (groupInfo[i].groupInfos.Count > 0) { waitinfoarray[i].AccountID = info.AccountID; waitinfoarray[i].EnterPriseID = info.EnterpriseID; waitinfoarray[i].CreateTime = DateTime.Now; waitinfoarray[i].MsgCount = mtpackLength; waitinfoarray[i].MsgType = 0; waitinfoarray[i].MsgCarrier = i; waitinfoarray[i].BatchID = batchId; waitinfoarray[i].MsgPack = JsonHelper.SerializeObject(groupInfo[i]); waitInfos.Add(waitinfoarray[i]); groupInfo[i] = new SMSGroupInfo(); groupInfo[i].groupInfos = new List<GroupInfo>(); waitinfoarray[i] = new SmsBatchWaitInfo(); } } } else { bool isFContent = false; if (info.FKeyword && contentfilterkeyInfos.Count > 0) { if (filterContent(info.Content, contentfilterkeyInfos)) isFContent = true; } if (!isFContent) { SMSMassInfo[] massInfo = new SMSMassInfo[3]; massInfo[0] = new SMSMassInfo(); massInfo[0].Content = info.Content; massInfo[0].Phones = new List<string>(); massInfo[1] = new SMSMassInfo(); massInfo[1].Content = info.Content; massInfo[1].Phones = new List<string>(); massInfo[2] = new SMSMassInfo(); massInfo[2].Content = info.Content; massInfo[2].Phones = new List<string>(); for (int i = 0; i < smsContactInfos.Count; i++) { SmsContactInfo contactInfo = smsContactInfos[i]; if (!AppContent.isPhone(contactInfo.Mobile)) continue; if (info.FBlack && blackphoneInfos.Count > 0) { if (filterBlack(contactInfo.Mobile, blackphoneInfos)) continue; } if (info.FRepeat && allPhones.Contains(contactInfo.Mobile)) continue; allPhones.Add(contactInfo.Mobile); int phonetel = getPhone(contactInfo.Mobile, telesegInfos); massInfo[phonetel].Phones.Add( contactInfo.Mobile ); readCount++; } for (int i = 0; i < 3; i++) { if (massInfo[i].Phones.Count > 0) { waitinfoarray[i].AccountID = info.AccountID; waitinfoarray[i].EnterPriseID = info.EnterpriseID; waitinfoarray[i].CreateTime = DateTime.Now; waitinfoarray[i].MsgCount = mtpackLength; waitinfoarray[i].MsgType = 1; waitinfoarray[i].BatchID = batchId; waitinfoarray[i].MsgCarrier = i; waitinfoarray[i].MsgPack = JsonHelper.SerializeObject(massInfo[i]); waitInfos.Add(waitinfoarray[i]); massInfo[i] = new SMSMassInfo(); massInfo[i].Content = info.Content; massInfo[i].Phones = new List<string>(); waitinfoarray[i] = new SmsBatchWaitInfo(); } } } } } SmsBatchAmountInfo amountInfo = new SmsBatchAmountInfo(); amountInfo.BatchID = batchId; amountInfo.SendAmount = readCount; amountInfo.PlanSendCount = totalCount; amountInfo.RealAmount = readCount; amountInfo.SuccessAmount = 0; amountInfo.CreateTime = DateTime.Now; SmsBatchManage.Instance.AddBatchAmount(amountInfo); SmsBatchManage.Instance.AddBatchWait(waitInfos); if (readCount > 0) SmsBatchManage.Instance.UpdateState(batchId, BatchState.Waiting, waitInfos.Count); else SmsBatchManage.Instance.UpdateState(batchId, BatchState.Complete, waitInfos.Count); }
public void SendPool(object sender) { SendInfo info = sender as SendInfo; SmsBatchInfo batchInfo = new SmsBatchInfo(); batchInfo.AccountID = info.AccountID; batchInfo.EnterPriseID = info.EnterpriseID; batchInfo.BatchName = info.BatchName; batchInfo.Remark = info.BatchRemark; batchInfo.SmsContent = info.Content; batchInfo.CommitTime = DateTime.Now; List <SmsTelesegInfo> telesegInfos = SmsTelesegManage.Instance.FindList(0, -1); List <SmsBlackphoneInfo> blackphoneInfos = SmsBlackPhoneManage.Instance.GetList(0, -1, info.EnterpriseID); List <SmsContentfilterkeyInfo> contentfilterkeyInfos = SmsContentfilterkeyManage.Instance.GetList(0, -1, info .EnterpriseID); batchInfo.MsgType = 1; batchInfo.CreateTime = DateTime.Now.AddSeconds(-5); batchInfo.MessageState = 0; batchInfo.BatchState = 1; int batchId = SmsBatchManage.Instance.AddBatch(batchInfo); int mtpackLength = 100; int readCount = 0; int totalCount = 0; List <SmsBatchWaitInfo> waitInfos = new List <SmsBatchWaitInfo>(); SmsBatchWaitInfo[] waitinfoarray = new SmsBatchWaitInfo[3]; waitinfoarray[0] = new SmsBatchWaitInfo(); waitinfoarray[1] = new SmsBatchWaitInfo(); waitinfoarray[2] = new SmsBatchWaitInfo(); List <string> allPhones = new List <string>(); if (info.IsFileSend) { DataTable dt = new DataTable(); /* 文件发送*/ String dirPath = Path.Combine(Path.Combine(Request.PhysicalApplicationPath, "uplpod"), info.FileName); if (File.Exists(dirPath)) { dt = FileUtily.ReadDataTable(dirPath, 0, info.spilter, info.IsHeader); } totalCount = dt.Rows.Count; bool isGroup = info.Content.IndexOf("@") > -1; if (isGroup) { SMSGroupInfo[] groupInfo = new SMSGroupInfo[3]; groupInfo[0] = new SMSGroupInfo(); groupInfo[0].groupInfos = new List <GroupInfo>(); groupInfo[1] = new SMSGroupInfo(); groupInfo[1].groupInfos = new List <GroupInfo>(); groupInfo[2] = new SMSGroupInfo(); groupInfo[2].groupInfos = new List <GroupInfo>(); for (int i = 0; i < dt.Rows.Count; i++) { if (!AppContent.isPhone(dt.Rows[i][0].ToString())) { continue; } if (info.FBlack && blackphoneInfos.Count > 0) { if (filterBlack(dt.Rows[i][0].ToString(), blackphoneInfos)) { continue; } } string content = ComparContent(info.Content, dt.Columns, dt.Rows[i]); if (info.FKeyword && contentfilterkeyInfos.Count > 0) { if (filterContent(content, contentfilterkeyInfos)) { continue; } } if (info.FRepeat && allPhones.Contains(dt.Rows[i][0].ToString())) { continue; } allPhones.Add(dt.Rows[i][0].ToString()); int phonetel = getPhone(dt.Rows[i][0].ToString(), telesegInfos); groupInfo[phonetel].groupInfos.Add(new GroupInfo() { Content = content, Phone = dt.Rows[i][0].ToString() }); readCount++; } for (int i = 0; i < 3; i++) { if (groupInfo[i].groupInfos.Count > 0) { waitinfoarray[i].AccountID = info.AccountID; waitinfoarray[i].EnterPriseID = info.EnterpriseID; waitinfoarray[i].CreateTime = DateTime.Now; waitinfoarray[i].MsgCount = mtpackLength; waitinfoarray[i].MsgType = 0; waitinfoarray[i].MsgCarrier = i; waitinfoarray[i].BatchID = batchId; waitinfoarray[i].MsgPack = JsonHelper.SerializeObject(groupInfo[i]); waitInfos.Add(waitinfoarray[i]); groupInfo[i] = new SMSGroupInfo(); groupInfo[i].groupInfos = new List <GroupInfo>(); waitinfoarray[i] = new SmsBatchWaitInfo(); } } } else { bool isFContent = false; if (info.FKeyword && contentfilterkeyInfos.Count > 0) { if (filterContent(info.Content, contentfilterkeyInfos)) { isFContent = true; } } if (!isFContent) { SMSMassInfo[] massInfo = new SMSMassInfo[3]; massInfo[0] = new SMSMassInfo(); massInfo[0].Content = info.Content; massInfo[0].Phones = new List <string>(); massInfo[1] = new SMSMassInfo(); massInfo[1].Content = info.Content; massInfo[1].Phones = new List <string>(); massInfo[2] = new SMSMassInfo(); massInfo[2].Content = info.Content; massInfo[2].Phones = new List <string>(); for (int i = 0; i < dt.Rows.Count; i++) { if (!AppContent.isPhone(dt.Rows[i][0].ToString())) { continue; } if (info.FBlack && blackphoneInfos.Count > 0) { if (filterBlack(dt.Rows[i][0].ToString(), blackphoneInfos)) { continue; } } if (info.FRepeat && allPhones.Contains(dt.Rows[i][0].ToString())) { continue; } allPhones.Add(dt.Rows[i][0].ToString()); int phonetel = getPhone(dt.Rows[i][0].ToString(), telesegInfos); massInfo[phonetel].Phones.Add( dt.Rows[i][0].ToString() ); readCount++; } for (int i = 0; i < 3; i++) { if (massInfo[i].Phones.Count > 0) { waitinfoarray[i].AccountID = info.AccountID; waitinfoarray[i].EnterPriseID = info.EnterpriseID; waitinfoarray[i].CreateTime = DateTime.Now; waitinfoarray[i].MsgCount = mtpackLength; waitinfoarray[i].MsgType = 1; waitinfoarray[i].BatchID = batchId; waitinfoarray[i].MsgCarrier = i; waitinfoarray[i].MsgPack = JsonHelper.SerializeObject(massInfo[i]); waitInfos.Add(waitinfoarray[i]); massInfo[i] = new SMSMassInfo(); massInfo[i].Content = info.Content; massInfo[i].Phones = new List <string>(); waitinfoarray[i] = new SmsBatchWaitInfo(); } } } } } else { List <string> cids = new List <string>(); List <SmsContactInfo> smsContactInfos = new List <SmsContactInfo>(); /*联系人发送*/ for (int i = 0; i < info.Mobiles.Length; i++) { string mobile = info.Mobiles[i]; string submobile = mobile.Substring(0, 1); switch (submobile) { case "c": /*直接联系人*/ string cid = mobile.TrimStart('c').TrimStart('0'); cids.Add(cid); break; case "g": string[] contions = mobile.TrimStart('g').Split('|'); int gid = 0; if (int.TryParse(contions[0], out gid)) { smsContactInfos.AddRange(SmsContactManage.Instance.getList(0, -1, int.Parse(contions[0]), contions[1], contions[2], info.EnterpriseID)); } break; case "1": if (AppContent.isPhone(mobile)) { smsContactInfos.Add(new SmsContactInfo() { Mobile = mobile, Birthday = DateTime.Parse("1910-1-1") }); } break; } } List <SmsContactInfo> contacts = SmsContactManage.Instance.GetContacts(cids, info.EnterpriseID); smsContactInfos.AddRange(contacts); bool isGroup = info.Content.IndexOf("@") > -1; totalCount = smsContactInfos.Count; if (isGroup) { SMSGroupInfo[] groupInfo = new SMSGroupInfo[3]; groupInfo[0] = new SMSGroupInfo(); groupInfo[0].groupInfos = new List <GroupInfo>(); groupInfo[1] = new SMSGroupInfo(); groupInfo[1].groupInfos = new List <GroupInfo>(); groupInfo[2] = new SMSGroupInfo(); groupInfo[2].groupInfos = new List <GroupInfo>(); for (int i = 0; i < smsContactInfos.Count; i++) { SmsContactInfo contactInfo = smsContactInfos[i]; if (!AppContent.isPhone(contactInfo.Mobile)) { continue; } if (info.FBlack && blackphoneInfos.Count > 0) { if (filterBlack(contactInfo.Mobile, blackphoneInfos)) { continue; } } string content = ComparContent(info.Content, contactInfo); if (info.FKeyword && contentfilterkeyInfos.Count > 0) { if (filterContent(content, contentfilterkeyInfos)) { continue; } } if (info.FRepeat && allPhones.Contains(contactInfo.Mobile)) { continue; } allPhones.Add(contactInfo.Mobile); int phonetel = getPhone(contactInfo.Mobile, telesegInfos); groupInfo[phonetel].groupInfos.Add(new GroupInfo() { Content = ComparContent(info.Content, contactInfo), Phone = contactInfo.Mobile }); readCount++; } for (int i = 0; i < 3; i++) { if (groupInfo[i].groupInfos.Count > 0) { waitinfoarray[i].AccountID = info.AccountID; waitinfoarray[i].EnterPriseID = info.EnterpriseID; waitinfoarray[i].CreateTime = DateTime.Now; waitinfoarray[i].MsgCount = mtpackLength; waitinfoarray[i].MsgType = 0; waitinfoarray[i].MsgCarrier = i; waitinfoarray[i].BatchID = batchId; waitinfoarray[i].MsgPack = JsonHelper.SerializeObject(groupInfo[i]); waitInfos.Add(waitinfoarray[i]); groupInfo[i] = new SMSGroupInfo(); groupInfo[i].groupInfos = new List <GroupInfo>(); waitinfoarray[i] = new SmsBatchWaitInfo(); } } } else { bool isFContent = false; if (info.FKeyword && contentfilterkeyInfos.Count > 0) { if (filterContent(info.Content, contentfilterkeyInfos)) { isFContent = true; } } if (!isFContent) { SMSMassInfo[] massInfo = new SMSMassInfo[3]; massInfo[0] = new SMSMassInfo(); massInfo[0].Content = info.Content; massInfo[0].Phones = new List <string>(); massInfo[1] = new SMSMassInfo(); massInfo[1].Content = info.Content; massInfo[1].Phones = new List <string>(); massInfo[2] = new SMSMassInfo(); massInfo[2].Content = info.Content; massInfo[2].Phones = new List <string>(); for (int i = 0; i < smsContactInfos.Count; i++) { SmsContactInfo contactInfo = smsContactInfos[i]; if (!AppContent.isPhone(contactInfo.Mobile)) { continue; } if (info.FBlack && blackphoneInfos.Count > 0) { if (filterBlack(contactInfo.Mobile, blackphoneInfos)) { continue; } } if (info.FRepeat && allPhones.Contains(contactInfo.Mobile)) { continue; } allPhones.Add(contactInfo.Mobile); int phonetel = getPhone(contactInfo.Mobile, telesegInfos); massInfo[phonetel].Phones.Add( contactInfo.Mobile ); readCount++; } for (int i = 0; i < 3; i++) { if (massInfo[i].Phones.Count > 0) { waitinfoarray[i].AccountID = info.AccountID; waitinfoarray[i].EnterPriseID = info.EnterpriseID; waitinfoarray[i].CreateTime = DateTime.Now; waitinfoarray[i].MsgCount = mtpackLength; waitinfoarray[i].MsgType = 1; waitinfoarray[i].BatchID = batchId; waitinfoarray[i].MsgCarrier = i; waitinfoarray[i].MsgPack = JsonHelper.SerializeObject(massInfo[i]); waitInfos.Add(waitinfoarray[i]); massInfo[i] = new SMSMassInfo(); massInfo[i].Content = info.Content; massInfo[i].Phones = new List <string>(); waitinfoarray[i] = new SmsBatchWaitInfo(); } } } } } SmsBatchAmountInfo amountInfo = new SmsBatchAmountInfo(); amountInfo.BatchID = batchId; amountInfo.SendAmount = readCount; amountInfo.PlanSendCount = totalCount; amountInfo.RealAmount = readCount; amountInfo.SuccessAmount = 0; amountInfo.CreateTime = DateTime.Now; SmsBatchManage.Instance.AddBatchAmount(amountInfo); SmsBatchManage.Instance.AddBatchWait(waitInfos); if (readCount > 0) { SmsBatchManage.Instance.UpdateState(batchId, BatchState.Waiting, waitInfos.Count); } else { SmsBatchManage.Instance.UpdateState(batchId, BatchState.Complete, waitInfos.Count); } }
void Sendmt(object sender) { SmsBatchWaitInfo model = sender as SmsBatchWaitInfo; if (model != null) { if (model.Channels.Length == 0) { CompleteMt(model, 0, 0); return; } SmsEnterpriseCfgInfo configmodel = config.GetModelWithKey("smsprice", model.EnterPriseID); SmsEnterpriseInfo info = config.GetEnterpriseInfo(model.EnterPriseID); model.ExtendNum = info.ExtendNum; float smsprice = float.Parse(configmodel.CfgValue); int result = 3; int sendCount = 0; if ((SMSEnum)model.MsgType == SMSEnum.Group) {//群发 SMSGroupInfo gGroup = JsonConvert.DeserializeObject <SMSGroupInfo>(model.MsgPack); bool hasMoney = !(info.Capital * 1000 - smsprice * 10 * gGroup.groupInfos.Count < 0); foreach (string chanelid in model.Channels) { BaseService service = ServicesFactory.Execute(int.Parse(chanelid)); int count = service.MassCount(); for (int i = 0; i < (gGroup.groupInfos.Count / count + (gGroup.groupInfos.Count % count > 0 ? 1 : 0)); i++) { SMSSDKGroupInfo smssdkGroupInfo = new SMSSDKGroupInfo(); smssdkGroupInfo.groupInfos = new List <SDKGroupInfo>(); if (gGroup.groupInfos.Count - i * count >= count) { List <GroupInfo> groupInfos = gGroup.groupInfos.GetRange(i * count, count); foreach (GroupInfo smsDetial in groupInfos) { smssdkGroupInfo.groupInfos.Add(new SDKGroupInfo() { Phone = smsDetial.Phone, Content = smsDetial.Content }); } } else { List <GroupInfo> groupInfos = gGroup.groupInfos.GetRange(i * count, gGroup.groupInfos.Count - i * count); foreach (GroupInfo smsDetial in groupInfos) { smssdkGroupInfo.groupInfos.Add(new SDKGroupInfo() { Phone = smsDetial.Phone, Content = smsDetial.Content }); } } if (hasMoney) { result = service.SendSMS(smssdkGroupInfo.groupInfos, model.ExtendNum); if (result == 1) { sendCount += smssdkGroupInfo.groupInfos.Count; } } WriteBatchDetial(smssdkGroupInfo.groupInfos, (SendResultEnum)Enum.ToObject(typeof(SendResultEnum), result), model, chanelid); } } } else {//组发 SMSMassInfo mMass = JsonConvert.DeserializeObject <SMSMassInfo>(model.MsgPack); bool hasMoney = !(info.Capital * 1000 - smsprice * 10 * mMass.Phones.Count < 0); foreach (string chanelid in model.Channels) { BaseService service = ServicesFactory.Execute(int.Parse(chanelid)); int count = service.MassCount(); for (int i = 0; i < (mMass.Phones.Count / count + (mMass.Phones.Count % count > 0 ? 1 : 0)); i++) { List <string> readyphones = new List <string>(); if (mMass.Phones.Count - i * count >= count) { readyphones = mMass.Phones.GetRange(i * count, count); } else { readyphones = mMass.Phones.GetRange(i * count, mMass.Phones.Count - i * count); } if (hasMoney) { result = service.SendSMS(GetFromDetails(readyphones, mMass.Content), model.ExtendNum); if (result == 1) { sendCount += readyphones.Count; } } WriteBatchDetial(readyphones, mMass.Content, (SendResultEnum)Enum.ToObject(typeof(SendResultEnum), result), model, chanelid); } } } CompleteMt(model, smsprice, sendCount); lock (lockobj) SendingMtCount--; } }
/// <summary> /// 写入号码详情表 /// </summary> /// <param name="phones"></param> /// <param name="content"></param> public void WriteBatchDetial(List <string> phones, string content, SendResultEnum eEnum, SmsBatchWaitInfo info, string channelId) { List <SmsBatchDetailsInfo> infos = new List <SmsBatchDetailsInfo>(); foreach (string phone in phones) { infos.Add(new SmsBatchDetailsInfo() { AccountID = info.AccountID, BatchID = info.BatchID.Value, ChannelID = int.Parse(channelId), Content = content, Phone = phone, SmsType = info.MsgType, State = (int)eEnum, SubmitTime = DateTime.Now }); } mrg.WriteBatchDetial(infos); }