using System; using System.Collections.Generic; using System.Linq; using WX.CRM.CRMServices.SMS.InterfaceModel; namespace WX.CRM.CRMServices.SMS.DataDrive { internal class BatchMsg { static BatchMsgWaitModel WaitInfo = new BatchMsgWaitModel(); /// /// 当前批次剩余的发送数量 /// public static decimal NumberCount { get { return WaitInfo.numberCount; } } /// /// 清除批次 /// public static void ClearBatch() { WaitInfo.batchid = 0; WaitInfo.numberCount = 0; } /// /// 获取一组发送数据 /// /// public static BatchMsgSendModel GetInfo() { try { WX.CRM.IBLL.Sms.ISMS_BATCHMSG_Q dataDriveBiz = new WX.CRM.BLL.Sms.SMS_BATCHMSG_BL(); if (WaitInfo == null || WaitInfo.batchid <= 0 || WaitInfo.numberCount <= 0) { var OO = dataDriveBiz.GetTopInfo(); if (OO == null) { //Common.LogHelper.Error("【批量短信为空GetTopInfo】:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")); WaitInfo.numberCount = 0; WaitInfo.batchid = 0; return null; } WaitInfo.batchid = OO.BATCHID; WaitInfo.numberCount = OO.numberCount; WaitInfo.smsClientCode = OO.CLIENTCODE; WaitInfo.MsgSubTypeId = OO.SUBTYPEID ?? 0; WaitInfo.interfactCode = OO.interfaceCode; WaitInfo.interfaceAccount = OO.interfaceAccount; WaitInfo.interfacePwd = OO.interfacePwd; WaitInfo.msgContent = OO.MESSAGE; } int step_num = StemNum(WaitInfo.interfactCode); //找出对应的接口每次的发送数量 List list; string hasParaSubTypeId = System.Configuration.ConfigurationManager.AppSettings["hasParaSubTypeId"]; if (hasParaSubTypeId.Split(',').Contains(WaitInfo.MsgSubTypeId.ToString())) //如果是带参数的自定义群发,则,一次只能发一条,如短信地址推送与返馈 { step_num = 1; list = dataDriveBiz.GetPopularDetailList(step_num, WaitInfo.batchid); } else { list = dataDriveBiz.GetDetailList(step_num, WaitInfo.batchid); } WaitInfo.numberCount = WaitInfo.numberCount - step_num; if (list == null) { return null; } else { BatchMsgSendModel sendInfo = new BatchMsgSendModel(); sendInfo.msgContent = WaitInfo.msgContent; sendInfo.interfaceAccount = WaitInfo.interfaceAccount; sendInfo.interfaceCode = WaitInfo.interfactCode; sendInfo.interfacePwd = WaitInfo.interfacePwd; sendInfo.clientCode = WaitInfo.smsClientCode; sendInfo.batchId = WaitInfo.batchid; foreach (var dd in list) { sendInfo.msgContent = sendInfo.msgContent.Replace("@@code", dd.numEncry); //替换参数 //Common.LogHelper.Info(sendInfo.msgContent); sendInfo.pkids.Add(dd.PKID); sendInfo.mobiles.Add(dd.mobile); } return sendInfo; } } catch (Exception ex) { WX.CRM.Common.LogHelper.Error("BatchMsg.GetInfo():" + ex.Message + ex.StackTrace); return null; } } public static void ExecLog(List detaisIds, WX.CRM.Model.Entity.SMS_SENDLOG logInfo) { try { WX.CRM.IBLL.Sms.ISMS_BATCHMSG_Q dataDriveBiz = new WX.CRM.BLL.Sms.SMS_BATCHMSG_BL(); dataDriveBiz.ExecLog(detaisIds, logInfo); } catch (Exception ex) { WX.CRM.Common.LogHelper.Error("【BatchMsg.ExecLog()】:" + ex.Message + ex.Source + ex.StackTrace); } } /// /// 根据接口编码获取步长 /// /// /// static int StemNum(string iterfaceCode) { JobModel jobm = new JobModel(); if (string.IsNullOrEmpty(iterfaceCode)) throw new Exception("StemNum(iterfaceCode)中iterfaceCode参数不能为空!"); int result = 0; var acc = InterfaceFactory.GetInterfaceIdByCode(iterfaceCode); switch (acc) { case InterfaceModel.SmsAccountID.HuiZhi: result = jobm.HuiZhiStepNum; break; case InterfaceModel.SmsAccountID.RuiXin: result = jobm.RuiXinStepNum; break; case InterfaceModel.SmsAccountID.QiXinTong: result = jobm.QiXinTongStepNum; break; case InterfaceModel.SmsAccountID.Ent: result = jobm.EntStemNum; break; case InterfaceModel.SmsAccountID.Ent2: result = jobm.EntStemNum; break; case InterfaceModel.SmsAccountID.ENT3: result = jobm.EntStemNum; break; case InterfaceModel.SmsAccountID.SM360: result = jobm.SM360StepNum; break; case InterfaceModel.SmsAccountID.CAT: result = jobm.UpCatStepNum; break; case InterfaceModel.SmsAccountID.LianTong: result = jobm.LianTongStepNum; break; case InterfaceModel.SmsAccountID.TaoBaoTxt: result = jobm.TaoBaoTXTNum; break; case InterfaceModel.SmsAccountID.QQSms: result = jobm.QQSmsNum; break; case InterfaceModel.SmsAccountID.ZJZXSms: result = jobm.ZQZXSmsNum; break; case InterfaceModel.SmsAccountID.QYXS: result = jobm.QYXSStepNum; break; case InterfaceModel.SmsAccountID.YZ: result = jobm.YZSmsNum; break; case InterfaceModel.SmsAccountID.YZ2: result = jobm.YZSms2Num; break; case InterfaceModel.SmsAccountID.TencentSms: result = jobm.TencentNum; break; case InterfaceModel.SmsAccountID.TaoBaoTxtVoice: throw new Exception("【淘宝开放平台短信接口】TaoBaoTxtVoice:不能批量发送!"); //break; } if (result <= 0) throw new Exception(string.Format("短信发送时根据接口编码获取接口【{0}】的发送数量时出现异常!", iterfaceCode)); return result; } } }