Beispiel #1
0
        //进行标记啊啥的,不需要拆66字了
        private void GetFinalList(List <Sev_SendDateDetail> HttpSendList)
        {
            try
            {
                for (int x = 0; x < HttpSendList.Count(); x++)
                {
                    Sev_FinalSendDetail senditem = new Sev_FinalSendDetail();
                    senditem.F_Id            = Guid.NewGuid().ToString();
                    senditem.F_SendId        = HttpSendList[x].F_Id;
                    senditem.F_Level         = HttpSendList[x].F_Level;
                    senditem.F_DealState     = 0;   //默认未发送
                    senditem.F_Report        = "0"; //默认未收到回复报告
                    senditem.F_CreateTime    = DateTime.Now;
                    senditem.F_SendTime      = HttpSendList[x].F_SendTime;
                    senditem.F_Reissue       = 0;                            //初始化补发次数为0;
                    senditem.F_Response      = 0;                            //默认未收到应答
                    senditem.F_SmsContent    = HttpSendList[x].F_SmsContent; //内容直接复制拆大段表的内容,不需要拆分
                    senditem.F_CreatorUserId = HttpSendList[x].F_CreatorUserId;
                    senditem.F_IsCashBack    = false;
                    //decimal SmsCount = Math.Ceiling(Convert.ToDecimal(item.F_SmsContent.Length) / 66);//向上取整获取发送条数
                    //for (int i = 0; i < SmsCount; i++)
                    //{
                    //    senditem.F_Id = Guid.NewGuid().ToString();
                    //    senditem.F_SmsOrderNo = i + 1;
                    //    if ((i + 1) * 66 < item.F_SmsContent.Length)
                    //        senditem.F_SmsContent = item.F_SmsContent.Substring(i * 66, 66);//进行66个字的拆分
                    //    else
                    //        senditem.F_SmsContent = item.F_SmsContent.Substring(i * 66, item.F_SmsContent.Length-66);//避免超过长度

                    //    senditem.F_SmsCount = senditem.F_SmsContent.Length;
                    //    FinalList.Add(senditem);//加入队列
                    //}
                    using (SqlSugarClient db = new SqlSugarClient(connStr))                                             //开启数据库连接
                    {
                        db.Insert(senditem);                                                                            //单个插入,客户要求
                        db.Update <Sev_SendDateDetail>(new { F_DealState = 1 }, it => it.F_Id == HttpSendList[x].F_Id); //更新状态为已拆分状态
                    }
                }
            }
            catch (Exception ex)
            { LogHelper.WriteLog("发送任务出现异常:" + ex); }
        }
Beispiel #2
0
        //批量修改扣量数据的发送状态,有失败和成功
        private void ChangeBuckleSendState(List <Sev_SendDateDetail> BuckleSendList)
        {
            List <Sev_FinalSendDetail> DealedList = new List <Sev_FinalSendDetail>();
            Dictionary <string, List <Sev_FinalSendDetail> > dic = new Dictionary <string, List <Sev_FinalSendDetail> >();//新建字典类,判断发送批次<key:F_SendId;value:EntityList>

            try
            {
                for (int i = 0; i < BuckleSendList.Count; i++)
                {
                    if (!dic.ContainsKey(BuckleSendList[i].SMC_F_Id))                          //添加键值对
                    {
                        dic.Add(BuckleSendList[i].SMC_F_Id, new List <Sev_FinalSendDetail>()); //添加新的键
                        Sev_FinalSendDetail senditem = new Sev_FinalSendDetail();
                        senditem.F_Id            = Guid.NewGuid().ToString();
                        senditem.F_SendId        = BuckleSendList[i].F_Id;
                        senditem.F_Level         = BuckleSendList[i].F_Level;
                        senditem.F_DealState     = 0;                              //默认未发送
                        senditem.F_Report        = "0";                            //默认未收到回复报告
                        senditem.F_CreateTime    = DateTime.Now;
                        senditem.F_Reissue       = 0;                              //初始化补发次数为0;
                        senditem.F_Response      = 0;                              //默认未收到应答
                        senditem.F_SmsContent    = BuckleSendList[i].F_SmsContent; //内容直接复制拆大段表的内容,不需要拆分
                        senditem.F_IsCashBack    = false;
                        senditem.F_SendTime      = BuckleSendList[i].F_SendTime;
                        senditem.F_CreatorUserId = BuckleSendList[i].F_CreatorUserId;
                        dic[BuckleSendList[i].F_Id].Add(senditem);//添加Value值
                    }
                    else
                    {//添加新的元素
                        Sev_FinalSendDetail senditem = new Sev_FinalSendDetail();
                        senditem.F_Id            = Guid.NewGuid().ToString();
                        senditem.F_SendId        = BuckleSendList[i].F_Id;
                        senditem.F_Level         = BuckleSendList[i].F_Level;
                        senditem.F_DealState     = 0;                              //默认未发送
                        senditem.F_Report        = "0";                            //默认未收到回复报告
                        senditem.F_CreateTime    = DateTime.Now;
                        senditem.F_Reissue       = 0;                              //初始化补发次数为0;
                        senditem.F_Response      = 0;                              //默认未收到应答
                        senditem.F_SmsContent    = BuckleSendList[i].F_SmsContent; //内容直接复制拆大段表的内容,不需要拆分
                        senditem.F_SendTime      = BuckleSendList[i].F_SendTime;
                        senditem.F_CreatorUserId = BuckleSendList[i].F_CreatorUserId;
                        senditem.F_IsCashBack    = false;
                        dic[BuckleSendList[i].SMC_F_Id].Add(senditem);
                    }
                    BuckleSendList[i].F_DealState = 1;//更新状态为已拆分状态
                }
                Parallel.ForEach(dic, item =>
                {
                    decimal SuccessRate  = (decimal)GetSendRate(item.Key) / 100;;              //成功率
                    decimal SendFalseNum = Math.Floor(item.Value.Count() * (1 - SuccessRate)); //计算发送的失败条数,向下取整数
                    Random radom         = new Random();
                    List <int> RadomList = new List <int>();                                   //随机数列
                    for (int x = 0; x < SendFalseNum; x++)                                     //获取不重复的随机数
                    {
                        int RadomNum = radom.Next(0, item.Value.Count() - 1);
                        if (!RadomList.Contains(RadomNum))  //集合list不包含num,就把num添加进list。这样保证随机数不重复
                        {
                            RadomList.Add(RadomNum);
                        }
                        else
                        {
                            x--;
                        }
                    }
                    for (int i = 0; i < item.Value.Count(); i++)
                    {
                        if (RadomList.Contains(i))           //在随机数列中,判断为发送失败
                        {
                            item.Value[i].F_Report    = "2"; //失败报告
                            item.Value[i].F_Response  = 2;   //已收到应答
                            item.Value[i].F_DealState = 2;   //已处理已发送,已经收到应答,失败
                        }
                        else
                        {
                            item.Value[i].F_Report    = "3";                    //成功报告,区别于正常的成功。前台1,3都是成功,但是1是正常的3是扣量的
                            item.Value[i].F_Response  = 2;                      //已收到应答
                            item.Value[i].F_DealState = 2;                      //已处理已发送,已经收到应答,成功
                        }
                        using (SqlSugarClient db = new SqlSugarClient(connStr)) //开启数据库连接
                        {
                            db.Insert(item.Value);                              //单个插入,客户要求
                        }
                    }
                });
                using (SqlSugarClient db = new SqlSugarClient(connStr)) //开启数据库连接
                {
                    db.SqlBulkReplace(BuckleSendList);                  //单个插入,客户要求
                }
            }
            catch (Exception ex)
            { LogHelper.WriteLog("发送任务扣量方法出现异常:" + ex); }
        }