Пример #1
0
        public ActionResult GetDetailByDay(PushMessageCondition con)
        {
            List <StatisticPushMessageModel> list = m_diffBus.GetDetailByTime(con);
            var json = JsonConvert.SerializeObject(new
            {
                rows  = list,
                total = 0
            }, JsonConvertHelper.IsoDateTimeConverter);

            return(Content(json));
        }
Пример #2
0
        /// <summary>
        /// 消息列表条件
        /// </summary>
        /// <param name="con"></param>
        /// <returns></returns>
        private List <string> GetPushMessageConditionList(PushMessageCondition con)
        {
            List <string> list = new List <string>();

            list.Add(" 1=1 ");
            if (con != null)
            {
                if (!Null.IsNull(con.MessagePriority))
                {
                    list.Add(" MessagePriority = @MessagePriority ");
                }
                if (!Null.IsNull(con.SNextPushTime))
                {
                    list.Add(" NextPushTime >= @SNextPushTime ");
                }
                if (!Null.IsNull(con.ENextPushTime))
                {
                    list.Add(" NextPushTime <= @ENextPushTime ");
                }
                if (!Null.IsNull(con.MessageId))
                {
                    list.Add(" MessageId = @MessageId ");
                }
                if (!string.IsNullOrWhiteSpace(con.MessageKey))
                {
                    if (con.MessageKey.Length <= 20)
                    {
                        list.Add(" MessageKey = @MessageKey ");
                    }
                    else
                    {
                        list.Add(" MessageKey LIKE CONCAT(@MessageKey, '%') ");
                    }
                }

                if (con.PushIds != null && con.PushIds.Where(t => !string.IsNullOrEmpty(t)).Count() > 0)
                {
                    list.Add(string.Format(" PushId IN ('{0}') ", string.Join("', '", con.PushIds.ToArray())));
                }
                if (!Null.IsNull(con.PushStatus))
                {
                    list.Add(" PushStatus & @PushStatus = PushStatus ");
                }
                if (!Null.IsNull(con.PushId))
                {
                    list.Add(" PushId = @PushId ");
                }
                if (con.MessageType != null && con.MessageType.Where(t => !string.IsNullOrEmpty(t)).Count() > 0)
                {
                    list.Add(string.Format(" MessageType IN ('{0}') ", string.Join("', '", con.MessageType.ToArray())));
                }
            }
            return(list);
        }
Пример #3
0
        public List <StatisticPushMessageModel> GetDetailByTime(PushMessageCondition con)
        {
            List <StatisticPushMessageEntity> entityList = JinRiNotifyFacade.Instance.GetDetailByTime(con);
            List <StatisticPushMessageModel>  list       = new List <StatisticPushMessageModel>();

            if (entityList.Any())
            {
                entityList.ForEach(x => list.Add(MappingHelper.From <StatisticPushMessageModel, StatisticPushMessageEntity>(x)));
            }
            return(list);
        }
Пример #4
0
        public List <PushMessageModel> GetPushMessageList(PushMessageCondition con)
        {
            List <PushMessageEntity> pushMessageEntList = JinRiNotifyFacade.Instance.GetPushMessageList(con);
            List <PushMessageModel>  pushMessageModList = new List <PushMessageModel>();

            pushMessageEntList.ForEach(x =>
            {
                pushMessageModList.Add(MappingHelper.From <PushMessageModel, PushMessageEntity>(x));
            });
            return(pushMessageModList);
        }
Пример #5
0
        public List <PushMessage> GetList(PushMessageCondition con)
        {
            List <PushMessageModel> pushMessageModList = GetPushMessageList(con);
            List <PushMessage>      list = new List <PushMessage>();

            foreach (PushMessageModel m in pushMessageModList)
            {
                list.Add(MappingHelper.From <PushMessage, PushMessageModel>(m));
            }

            return(list);
        }
Пример #6
0
        public List <PushMessageEntity> GetDetailByTime2(PushMessageCondition con)
        {
            const string      strSql = @"SELECT  PushId, MessageId,  SettingId, MessagePriority,MessageKey,  MessageType, PushData, PushData, NextPushTime, LastModifyTime, MessageCreateTime, PushCount
 FROM PushMessage WHERE LastModifyTime BETWEEN @StartTime AND  @EndTime ";
            DynamicParameters param  = new DynamicParameters();

            param.Add("StartTime", con.SNextPushTime);
            param.Add("EndTime", con.ENextPushTime);
            using (IDbConnection conn = ConnectionFactory.JinRiNotify_SELECT)
            {
                return(conn.Query <PushMessageEntity>(strSql, param).ToList());
            }
        }
Пример #7
0
        public ActionResult Save(PushMessageModel model, string pushIds)
        {
            var message = new ReturnMessage {
                Success = false, Msg = "操作失败!"
            };

            try
            {
                PushMessageBusiness business = new PushMessageBusiness();
                if (string.IsNullOrEmpty(pushIds))       //单条编辑
                {
                    var pushMessage = business.GetFromCache(model.PushId);
                    if (pushMessage == null)
                    {
                        message.Msg = "推送消息不存在!";
                        return(Content(JsonConvert.SerializeObject(message)));
                    }
                    pushMessage.MessagePriority = model.MessagePriority;
                    pushMessage.MessageType     = model.MessageType;
                    pushMessage.PushData        = model.PushData;
                    pushMessage.PushStatus      = model.PushStatus;
                    pushMessage.NextPushTime    = model.NextPushTime;
                    pushMessage.PushCount       = model.PushCount;
                    pushMessage.Memo            = string.Empty;
                    message.Success             = business.Edit(pushMessage);
                }
                else
                {
                    //批量编辑
                    PushMessageCondition condition = new PushMessageCondition();
                    condition.PushIds = new List <string>(pushIds.Split(','));
                    var data = business.GetPushMessageList(condition);
                    data.ForEach(t =>
                    {
                        t.NextPushTime   = model.NextPushTime;
                        t.PushCount      = model.PushCount;
                        t.LastModifyTime = DateTime.Now;
                        t.PushStatus     = PushStatusEnum.UnPush;
                    });
                    if (data.Count > 0)
                    {
                        message.Success = business.EditPushMessage(data);
                    }
                }
            }
            catch (Exception)
            {
            }
            return(Content(JsonConvert.SerializeObject(message)));
        }
Пример #8
0
        public ActionResult HistoryList(PushMessageCondition condition)
        {
            PushMessageBusiness business = new PushMessageBusiness();

            condition.QuerySource = 2;
            var rows = business.GetPageList(condition);
            var json = JsonConvert.SerializeObject(new
            {
                rows  = rows,
                total = condition.RecordCount
            }, JsonConvertHelper.IsoDateTimeConverter);

            return(Content(json));
        }
Пример #9
0
        public List <PushMessageEntity> GetPushMessageList(PushMessageCondition con)
        {
            using (IDbConnection conn = ConnectionFactory.JinRiNotify_SELECT)
            {
                const string sql =
                    @"SELECT PushId, MessageId, SettingId, MessagePriority, MessageKey, MessageType, PushData, PushStatus, NextPushTime, LastModifyTime, MessageCreateTime, CreateTime, PushCount
FROM PushMessage 
WHERE {2}
ORDER BY {0} {1}
LIMIT @PageSize";
                string condition = string.Join(" AND ", GetPushMessageConditionList(con).ToArray());
                string trueSql   = string.Format(sql, con.OrderBy, con.OrderDirection, condition);
                DBLog.Process("", con.MessagePriority, "", "GetPushMessageList", "", "获取重推数据列表", trueSql);

                return(conn.Query <PushMessageEntity>(trueSql, con).ToList());
            }
        }
Пример #10
0
        public List <StatisticPushMessageEntity> GetDetailByTime(PushMessageCondition con)
        {
            const string strSql =
                @"SELECT  ''  NextPushTime,''  LastModifyTime,avg(TIMEDIFF(LastModifyTime,MessageCreateTime)) AvgPushTime   
FROM PushMessage 
WHERE PushCount=1
AND PushStatus=2
AND LastModifyTime>MessageCreateTime
AND LastModifyTime BETWEEN @StartTime AND  @EndTime ";
            DynamicParameters param = new DynamicParameters();

            param.Add("StartTime", con.SNextPushTime);
            param.Add("EndTime", con.ENextPushTime);
            using (IDbConnection conn = ConnectionFactory.JinRiNotify_SELECT)
            {
                return(conn.Query <StatisticPushMessageEntity>(strSql, param).ToList());
            }
        }
Пример #11
0
        /// <summary>
        /// 获取推送消息列表(分页)
        /// </summary>
        /// <param name="con"></param>
        /// <returns></returns>
        public List <PushMessageEntity> GetPushMessagePageList(PushMessageCondition con)
        {
            using (IDbConnection conn = ConnectionFactory.JinRiNotify_SELECT)
            {
                const string sql =
                    @"SELECT * FROM
(SELECT PushId, MessageId, SettingId, MessagePriority, MessageKey, MessageType, PushData, PushStatus, NextPushTime, LastModifyTime, MessageCreateTime, CreateTime, PushCount, Memo 
FROM {3}  
WHERE {2} 
ORDER BY {0} {1} 
LIMIT @Offset, @PageSize) AS TMP ";
                string table     = con.QuerySource == 2 ? "PushMessage_backup" : "PushMessage";
                string condition = string.Join(" AND ", GetPushMessageConditionList(con).ToArray());
                string _sql      = string.Format("SELECT COUNT(0) FROM {1} WHERE {0}", condition, table);
                con.RecordCount = conn.Query <int>(_sql, con).FirstOrDefault();  //总记录数
                string trueSql = string.Format(sql, con.OrderBy, con.OrderDirection, condition, table);
                return(conn.Query <PushMessageEntity>(trueSql, con).ToList());
            }
        }
Пример #12
0
        /// <summary>
        /// 获取推送消息列表(分页)
        /// </summary>
        /// <param name="con"></param>
        /// <returns></returns>
        public List <PushMessageModel> GetPageList(PushMessageCondition con)
        {
            NotifyMessageBusiness business      = new NotifyMessageBusiness();
            var messageTypeList                 = business.GetNotifyMessageTypeList(new NotifyMessageTypeCondition());
            List <PushMessageEntity> entityList = JinRiNotifyFacade.Instance.GetPushMessagePageList(con);
            List <PushMessageModel>  list       = new List <PushMessageModel>();

            entityList.ForEach(x =>
            {
                var model       = MappingHelper.From <PushMessageModel, PushMessageEntity>(x);
                var messageType = messageTypeList.Where(t => t.MessageType == model.MessageType).FirstOrDefault();
                if (messageType != null)
                {
                    model.MessageTypeCName = messageType.Remark;
                }
                model.MessagePriorityName = x.MessagePriority.ToString();
                model.PushStatusName      = Enum.GetName(typeof(PushStatusEnum), x.PushStatus);
                model.MessageTypeEName    = x.MessageType.ToString();
                list.Add(model);
            });
            return(list);
        }
Пример #13
0
        private void GetPushMessageList(object setting)
        {
            RedoServiceSetting.ScanSetting scanSetting = (RedoServiceSetting.ScanSetting)setting;
            int scanStartTimes       = scanSetting.PrevScanTimes * scanSetting.InternalTime * (-1);
            int scanEndTimes         = scanSetting.NextScanTimes * scanSetting.InternalTime;
            int aheadTime            = RedoServiceSetting.PushAheadTime;
            PushMessageCondition con = new PushMessageCondition();

            con.PushStatus      = scanSetting.PushStatus;
            con.PageSize        = scanSetting.LimitCount;
            con.MessagePriority = Null.NullString;
            con.OrderDirection  = OrderDirectionEnum.ASC;
            con.OrderBy         = "NextPushTime";
            if (!string.IsNullOrWhiteSpace(scanSetting.MessagePriority))
            {
                con.MessagePriority = scanSetting.MessagePriority;
            }
            if (scanSetting.MessageType != null && scanSetting.MessageType.Count > 0)
            {
                con.MessageType = scanSetting.MessageType;
            }
            else
            {
                con.MessageType = null;
            }
            con.ENextPushTime = DateTime.Now;
            List <PushMessageModel> pushMessageList;

            try
            {
                int i = 0;
                while (true)
                {
                    MetricsKeys.RedoService.MeterMark();
                    DateTime dtNow = DateTime.Now;
                    con.SNextPushTime = con.ENextPushTime.AddSeconds(scanStartTimes);
                    con.ENextPushTime = con.ENextPushTime.AddSeconds(scanEndTimes);

                    pushMessageList = m_pushMessageBus.GetPushMessageList(con);
                    StringBuilder builder    = new StringBuilder();
                    int           canSendNum = 0;
                    int           sendedNum  = 0;
                    if (pushMessageList != null && pushMessageList.Count > 0)
                    {
                        int count = pushMessageList.Count;
                        foreach (PushMessageModel msgMod in pushMessageList)
                        {
                            if (msgMod.NextPushTime <= DateTime.Now.AddSeconds(aheadTime))
                            {
                                canSendNum++;
                                PushMessage pushMsg  = MappingHelper.From <PushMessage, PushMessageModel>(msgMod);
                                bool        isSended = false;
                                m_pushMessageBus.SendPushMessage(pushMsg, RedoServiceSetting.IsOpenBatchSendPushMessage, out isSended);
                                if (isSended)
                                {
                                    sendedNum++;
                                }
                                builder.AppendFormat("消息编号:{0},消息类型:{1},是否推送:{2};", msgMod.PushId, msgMod.MessageType, isSended);
                            }

                            Thread.Sleep(100);
                        }
                        //while (count > num)
                        //{
                        //    PushMessageModel msgMod = pushMessageList[idx];
                        //    if (!"1".Equals(msgMod.Memo) && msgMod.NextPushTime <= DateTime.Now.AddSeconds(aheadTime))
                        //    {
                        //        num++;
                        //        PushMessage pushMsg = MappingHelper.From<PushMessage, PushMessageModel>(msgMod);
                        //        bool isSended = false;
                        //        m_pushMessageBus.SendPushMessage(pushMsg, RedoServiceSetting.IsOpenBatchSendPushMessage, out isSended);
                        //        msgMod.Memo = "1";
                        //        builder.AppendFormat("消息编号:{0},消息类型:{1},是否推送:{2};", msgMod.PushId, msgMod.MessageType, isSended);
                        //    }
                        //    idx++;
                        //    if (idx == count) idx = 0;
                        //}
                    }
                    else
                    {
                        Thread.Sleep(scanSetting.IdleSleepTime);
                    }
                    Process.Debug("消息重扫记录", "GetPushMessageList", string.Format("扫描次数【{0}】,优先级:【{1}】,推送开始时间:【{2}】,推送截止时间:【{3}】,扫描条数【{4}】,执行时间【{5}】,查询条件:【{6}】,可推送条数:【{7}】,实际推送条数:【{8}】,消息:【{9}】", ++i, con.MessagePriority.ToString(), con.SNextPushTime.ToString("yyyy-MM-dd HH:mm:ss"), con.ENextPushTime.ToString("yyyy-MM-dd HH:mm:ss"), pushMessageList.Count, (DateTime.Now - dtNow).TotalMilliseconds, JsonConvert.SerializeObject(con), canSendNum, sendedNum, builder.ToString()), pushMessageList.Count.ToString());

                    TimeSpan timeSpan  = con.ENextPushTime - DateTime.Now;
                    double   sleepTime = timeSpan.TotalMilliseconds;
                    if (sleepTime > 0)
                    {
                        Thread.Sleep((int)sleepTime);
                        Process.Debug("消息重扫记录", "Thread.Sleep", string.Format("扫描次数【{0}】,线程休眠【{1}】,优先级:【{2}】,推送开始时间:【{3}】,推送截止时间:【{4}】", ++i, sleepTime, con.MessagePriority.ToString(), con.SNextPushTime.ToString("yyyy-MM-dd HH:mm:ss"), con.ENextPushTime.ToString("yyyy-MM-dd HH:mm:ss")), "");
                    }
                }
            }
            catch (Exception ex)
            {
                Process.Fatal("消息重扫记录", "GetPushMessageList", string.Format("重扫线程异常结束ex【{3}】,优先级:【{0}】,推送开始时间:【{1}】,推送截止时间:【{2}】", con.MessagePriority.ToString(), con.SNextPushTime.ToString("yyyy-MM-dd HH:mm:ss"), con.ENextPushTime.ToString("yyyy-MM-dd HH:mm:ss"), ex.GetString()), "");
            }
        }
Пример #14
0
 /// <summary>
 /// 获取推送消息列表(分页)
 /// </summary>
 /// <param name="con"></param>
 /// <returns></returns>
 public List <PushMessageEntity> GetPushMessagePageList(PushMessageCondition con)
 {
     return(JinRiNotifyQuery.Instance.GetPushMessagePageList(con));
 }
Пример #15
0
 public List <StatisticPushMessageEntity> GetDetailByTime(PushMessageCondition con)
 {
     return(JinRiNotifyQuery.Instance.GetDetailByTime(con));
 }