private static void WorkProcessor()
        {
            try
            {
                TimeSpan tsTimeout = TimeSpan.FromSeconds(Convert.ToDouble(transactionTimeout * batchSize));
                SmsSend  smsBll    = new SmsSend();

                while (true)
                {
                    TimeSpan datetimeStarting = new TimeSpan(DateTime.Now.Ticks);
                    double   elapsedTime      = 0;
                    int      processedItems   = 0;

                    List <SmsSendInfo> smsList = new List <Model.SmsSendInfo>();
                    SmsTemplate        smstBll = new SmsTemplate();
                    Order oBll = new Order();

                    for (int j = 0; j < batchSize; j++)
                    {
                        try
                        {
                            if ((elapsedTime + queueTimeout + transactionTimeout) < tsTimeout.TotalSeconds)
                            {
                                smsList.Add(smsBll.ReceiveFromQueue(queueTimeout));
                            }
                            else
                            {
                                j = batchSize;   // exit loop
                            }

                            //update elapsed time
                            elapsedTime = new TimeSpan(DateTime.Now.Ticks).TotalSeconds - datetimeStarting.TotalSeconds;
                        }
                        catch (TimeoutException)
                        {
                            //exit loop because no more messages are waiting
                            j = batchSize;
                        }
                    }

                    if (smsList.Count > 0)
                    {
                        foreach (var smsModel in smsList)
                        {
                            try
                            {
                                if (!string.IsNullOrEmpty(smsModel.MobilePhone))
                                {
                                    string sendContent = "";

                                    Guid templateId = Guid.Empty;
                                    if (smsModel.SmsTemplateId != null)
                                    {
                                        Guid.TryParse(smsModel.SmsTemplateId.ToString(), out templateId);
                                    }
                                    if (!templateId.Equals(Guid.Empty))
                                    {
                                        #region 使用模板发送

                                        sendContent = smstBll.GetTemplateContent(templateId, "");

                                        if (sendContent == "")
                                        {
                                            WriteLog log = new WriteLog();
                                            log.Write("手机号:“" + smsModel.MobilePhone + "”,使用了模板(ID:" + templateId + "),但是模板不存在或已被删除,无法发送短信");
                                            continue;
                                        }

                                        #endregion
                                    }
                                    else if (!string.IsNullOrEmpty(smsModel.SmsContent))
                                    {
                                        sendContent = smsModel.SmsContent;
                                    }

                                    if (string.IsNullOrEmpty(sendContent))
                                    {
                                        WriteLog log = new WriteLog();
                                        log.Write("手机号:“" + smsModel.MobilePhone + "”,短信内容为空,无法发送短信");
                                        continue;
                                    }

                                    //发送短信并写入数据库
                                    smsModel.SmsContent = sendContent;
                                    SmsSendAndInsert(smsModel, null);
                                }

                                else if (!string.IsNullOrEmpty(smsModel.OrderCode))
                                {
                                    DataTable dt         = null;
                                    string    sendMobile = "";

                                    smsBll.GetSmsSendMobile(smsModel.OrderCode, smsModel.TranNode, out sendMobile, out dt);

                                    if (string.IsNullOrEmpty(sendMobile))
                                    {
                                        WriteLog log = new WriteLog();
                                        log.Write("订单号:" + smsModel.OrderCode + ",运输环节:" + smsModel.TranNodeText + ",异常:发货方或收货方手机号为空值或无效,无法发送短信");
                                        continue;
                                    }

                                    string[]      mobiles     = sendMobile.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                                    List <string> contentList = GetSmsContent(smsModel, dt);
                                    if (contentList.Count != mobiles.Length)
                                    {
                                        WriteLog log = new WriteLog();
                                        log.Write("订单号:" + smsModel.OrderCode + ",运输环节:" + smsModel.TranNodeText + ",异常:发货方或收货方短信模板找不到或已被删除,无法发送短信");
                                        continue;
                                    }

                                    for (var i = 0; i < mobiles.Length; i++)
                                    {
                                        smsModel.MobilePhone = mobiles[i];
                                        smsModel.SmsContent  = contentList[i];

                                        SmsSendAndInsert(smsModel, dt);
                                    }
                                }
                                else if (!string.IsNullOrEmpty(smsModel.CarScanCode))
                                {
                                    string[] orders = oBll.GetOrderByCarcode(smsModel.CarScanCode);
                                    if (orders.Length == 0)
                                    {
                                        WriteLog log = new WriteLog();
                                        log.Write("派车单号:" + smsModel.CarScanCode + ",没有任何订单号,无法发送短信");
                                        continue;
                                    }
                                    foreach (string orderCode in orders)
                                    {
                                        DataTable dt         = null;
                                        string    sendMobile = "";

                                        smsBll.GetSmsSendMobile(orderCode, smsModel.TranNode == null ? "" : smsModel.TranNode, out sendMobile, out dt);

                                        if (string.IsNullOrEmpty(sendMobile))
                                        {
                                            WriteLog log = new WriteLog();
                                            log.Write("派车单号:“" + smsModel.CarScanCode + "”,订单号:" + orderCode + ",异常:发货方或收货方手机号为空值或无效,无法发送短信");
                                            continue;
                                        }

                                        string[]      mobiles     = sendMobile.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                                        List <string> contentList = GetSmsContent(smsModel, dt);
                                        if (contentList.Count != mobiles.Length)
                                        {
                                            WriteLog log = new WriteLog();
                                            log.Write("订单号:" + smsModel.OrderCode + ",运输环节:" + smsModel.TranNodeText + ",异常:发货方或收货方短信模板找不到或已被删除,无法发送短信");
                                            continue;
                                        }

                                        for (var i = 0; i < mobiles.Length; i++)
                                        {
                                            smsModel.MobilePhone = mobiles[i];
                                            smsModel.SmsContent  = contentList[i];

                                            SmsSendAndInsert(smsModel, dt);
                                        }
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                WriteLog log         = new WriteLog();
                                string   errorAppend = "";
                                if (!string.IsNullOrEmpty(smsModel.MobilePhone))
                                {
                                    errorAppend += "手机号:" + smsModel.MobilePhone + "";
                                }
                                if (!string.IsNullOrEmpty(smsModel.OrderCode))
                                {
                                    errorAppend += "订单号:" + smsModel.OrderCode + "";
                                }
                                if (!string.IsNullOrEmpty(smsModel.CarScanCode))
                                {
                                    errorAppend += "派车单号:" + smsModel.CarScanCode + "";
                                }
                                log.Write("异常:" + ex.Message + "," + errorAppend + "");
                            }

                            processedItems++;
                        }
                    }

                    Thread.Sleep(2000);
                }
            }
            catch (Exception ex)
            {
                WriteLog log = new WriteLog();
                log.Write(ex.Message);
            }
        }
        private static void WorkProcessor()
        {
            Random   rnd         = new Random();
            bool     isPassNight = false;             //是否已到深夜0点
            DateTime startTime   = DateTime.MinValue; //开始时间
            DateTime endTime     = DateTime.MinValue; //结束时间

            try
            {
                TyUser  bll   = new TyUser();
                SysEnum seBll = new SysEnum();

                while (true)
                {
                    if (!isPassNight)
                    {
                        if (DateTime.Now.Hour == 0)
                        {
                            isPassNight = true;
                        }
                    }

                    List <SysEnumInfo> seList     = seBll.GetList("and t2.EnumCode = 'UserProcessor'");
                    double             runTimeout = 0;
                    double.TryParse(seList.Find(m => m.EnumCode == "RunTimeout").EnumValue.Trim(), out runTimeout);
                    bool isOff = seList.Find(m => m.EnumCode == "On/Off").EnumValue.Trim().ToLower() == "off" ? true : false;
                    if (isOff)
                    {
                        Thread.Sleep(5000);
                        continue;
                    }

                    string sStartTime = seList.Find(m => m.EnumCode.Trim() == "StartTime").EnumValue;
                    string sEndTime   = seList.Find(m => m.EnumCode.Trim() == "EndTime").EnumValue;

                    if ((sStartTime.IndexOf(':') != -1) && (sEndTime.IndexOf(':') != -1))
                    {
                        DateTime currTime = DateTime.Now;
                        sStartTime = string.Format("{0} {1}", currTime.ToString("yyyy-MM-dd"), sStartTime);
                        sEndTime   = string.Format("{0} {1}", currTime.ToString("yyyy-MM-dd"), sEndTime);

                        DateTime.TryParse(sStartTime, out startTime);
                        DateTime.TryParse(sEndTime, out endTime);
                        DateTime maxTime = DateTime.Parse(string.Format("{0} {1}", currTime.ToString("yyyy-MM-dd"), "23:59:59"));

                        if ((startTime != DateTime.MinValue) && (endTime != DateTime.MinValue))
                        {
                            if (currTime >= endTime || currTime <= startTime)
                            {
                                Thread.Sleep(5000);
                                continue;
                            }
                        }
                    }

                    #region  步用户表开始

                    TyUser tyuserBll = new TyUser();

                    List <string>     newUsers = new List <string>();
                    string[]          oldUsers = tyuserBll.GetTyUsers();
                    List <TyUserInfo> userList = tyuserBll.GetList();

                    foreach (string userName in oldUsers)
                    {
                        if (!userList.Exists(m => m.UserName == userName))
                        {
                            newUsers.Add(userName);
                        }
                    }

                    if (newUsers.Count > 0)
                    {
                        using (TransactionScope scope = new TransactionScope())
                        {
                            foreach (string userName in newUsers)
                            {
                                string psw = (rnd.NextDouble() * Int32.MaxValue).ToString().PadLeft(6, '0').Substring(0, 6);
                                Membership.CreateUser(userName, psw, "" + userName + "@tygaweb.com");
                                Roles.AddUserToRole(userName, "Users");
                                tyuserBll.Insert(new TyUserInfo {
                                    UserName = userName, Password = psw, IsEnable = true, LastUpdatedDate = DateTime.Now
                                });
                            }

                            scope.Complete();
                        }
                    }

                    #endregion

                    if (runTimeout > 0)
                    {
                        TimeSpan ts = DateTime.Now.AddMinutes(runTimeout) - DateTime.Now;
                        Thread.Sleep(ts);
                    }
                    else
                    {
                        Thread.Sleep(5000);
                    }
                }
            }
            catch (Exception ex)
            {
                WriteLog log = new WriteLog();
                log.Write(ex.Message);
            }
        }
        private static List <string> GetSmsContent(SmsSendInfo smsModel, DataTable dt)
        {
            List <string> list    = new List <string>();
            string        content = "";

            try
            {
                Guid templateId = Guid.Empty;
                if (smsModel.SmsTemplateId != null)
                {
                    Guid.TryParse(smsModel.SmsTemplateId.ToString(), out templateId);
                }
                if (!templateId.Equals(Guid.Empty))
                {
                    SmsTemplate smstBll = new SmsTemplate();
                    content = smstBll.GetTemplateContent(templateId, dt);
                    list.Add(content);
                }
                else if (!string.IsNullOrEmpty(smsModel.TemplateType))
                {
                    if (smsModel.TemplateType == "auto")
                    {
                        DataRow dr = dt.Rows[0];
                        DataColumnCollection dcc = dt.Columns;

                        string[] paramsCodeArr = smsModel.ParamsCode.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                        string[] tParmsValues  = new string[paramsCodeArr.Length];
                        for (int i = 0; i < paramsCodeArr.Length; i++)
                        {
                            if (dcc.Contains(paramsCodeArr[i]))
                            {
                                if (dr[paramsCodeArr[i]] != DBNull.Value)
                                {
                                    tParmsValues[i] = dr[paramsCodeArr[i]].ToString();
                                }
                                else
                                {
                                    tParmsValues[i] = "";
                                }
                            }
                            else
                            {
                                tParmsValues[i] = "";
                            }
                        }

                        content = string.Format(smsModel.SmsContent, tParmsValues);
                        list.Add(content);
                    }
                    else if (smsModel.TemplateType == "custom")
                    {
                        content = string.Format(smsModel.SmsContent, smsModel.ParamsValue.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries));
                        list.Add(content);
                    }
                }
                else if (!string.IsNullOrEmpty(smsModel.SmsContent))
                {
                    content = smsModel.SmsContent;
                    list.Add(content);
                }
                else
                {
                    SmsTemplate smstBll = new SmsTemplate();
                    return(smstBll.GetTemplateContentByTranNode(dt, smsModel.TranNode));
                }
            }
            catch (Exception ex)
            {
                string error = "";
                error += "手机号:" + smsModel.MobilePhone == null ? "无" : smsModel.MobilePhone + ",";
                error += "订单号:" + smsModel.OrderCode == null ? "无" : smsModel.OrderCode + ",";
                error += "运输节点:" + smsModel.TranNodeText == null ? "无" : smsModel.TranNodeText + ",";
                error += "派车单号:" + smsModel.CarScanCode == null ? "无" : smsModel.CarScanCode + ",";
                error += "模板ID:" + smsModel.SmsTemplateId == null ? "无" : smsModel.SmsTemplateId.ToString() + ",";
                error += "参数代码:" + smsModel.ParamsCode == null ? "无" : smsModel.ParamsCode + ",";
                error += "参数名称:" + smsModel.ParamsName == null ? "无" : smsModel.ParamsName + ",";
                error += "参数值:" + smsModel.ParamsValue == null ? "无" : smsModel.ParamsValue + ",";
                error += "短信内容:" + smsModel.SmsContent == null ? "无" : smsModel.SmsContent;
                WriteLog log = new WriteLog();
                log.Write("执行获取短信内容时异常(" + ex.Message + "),详情:" + error + "");
            }

            return(list);
        }