Esempio n. 1
0
 /// <summary>
 /// 添加, 这里可以人工干预,提高程序的性能
 /// </summary>
 /// <param name="entity">实体</param>
 /// <param name="identity">自增量方式,表主键是否采用自增的策略</param>
 /// <param name="returnId">返回主键,不返回程序允许速度会快,主要是为了主细表批量插入数据优化用的</param>
 /// <returns>主键</returns>
 public string Add(BaseMessageQueueEntity entity, bool identity = true, bool returnId = true)
 {
     Identity  = identity;
     ReturnId  = returnId;
     entity.Id = AddEntity(entity).ToInt();
     return(entity.Id.ToString());
 }
Esempio n. 2
0
 /// <summary>
 /// 设置实体
 /// </summary>
 /// <param name="sqlBuilder">Sql语句生成器</param>
 /// <param name="entity">实体</param>
 private void SetEntity(SqlBuilder sqlBuilder, BaseMessageQueueEntity entity)
 {
     SetEntityExtend(sqlBuilder, entity);
     sqlBuilder.SetValue(BaseMessageQueueEntity.FieldSource, entity.Source);
     sqlBuilder.SetValue(BaseMessageQueueEntity.FieldMessageType, entity.MessageType);
     sqlBuilder.SetValue(BaseMessageQueueEntity.FieldRecipient, entity.Recipient);
     sqlBuilder.SetValue(BaseMessageQueueEntity.FieldSubject, entity.Subject);
     sqlBuilder.SetValue(BaseMessageQueueEntity.FieldBody, entity.Body);
     sqlBuilder.SetValue(BaseMessageQueueEntity.FieldFailCount, entity.FailCount);
     sqlBuilder.SetValue(BaseMessageQueueEntity.FieldSortCode, entity.SortCode);
     sqlBuilder.SetValue(BaseMessageQueueEntity.FieldDeleted, entity.Deleted);
     sqlBuilder.SetValue(BaseMessageQueueEntity.FieldEnabled, entity.Enabled);
 }
Esempio n. 3
0
 /// <summary>
 /// 添加或更新(主键是否为0)
 /// </summary>
 /// <param name="entity">实体</param>
 /// <param name="identity">自增量方式,表主键是否采用自增的策略</param>
 /// <param name="returnId">返回主键,不返回程序允许速度会快,主要是为了主细表批量插入数据优化用的</param>
 /// <returns>主键</returns>
 public string AddOrUpdate(BaseMessageQueueEntity entity, bool identity = true, bool returnId = true)
 {
     Identity = identity;
     ReturnId = returnId;
     if (entity.Id == 0)
     {
         entity.Id = AddEntity(entity).ToInt();
         return(entity.Id.ToString());
     }
     else
     {
         return(UpdateEntity(entity) > 0 ? entity.Id.ToString() : string.Empty);
     }
 }
        /// <summary>
        /// 应用启动邮件
        /// </summary>
        /// <returns>是否成功</returns>
        public bool ApplicationRestart()
        {
            var result = false;

#if NET40_OR_GREATER
            //发送邮件,写入数据库
            var entity = new BaseMessageQueueEntity
            {
                Source    = BaseSystemInfo.ApplicationId,
                Recipient = BaseSystemInfo.MailBcc,
                Subject   = "Web服务重新启动了 - " + System.Web.Hosting.HostingEnvironment.SiteName + " - " + BaseSystemInfo.SoftFullName,
                Body      = "主人:<br>运行于<b>" + System.Web.Hosting.HostingEnvironment.SiteName + "</b>的<b>" + BaseSystemInfo.SoftFullName +
                            "</b>于<b>" + DateTime.Now.AddSeconds(-1) + "</b>重新启动了。" + Environment.NewLine
                            + "<br>ApplicationID:" + BaseSystemInfo.ApplicationId + "<br>ApplicationPhysicalPath:" + System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + "<br>ApplicationVirtualPath:" + System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath + "<br><br>" + Environment.NewLine + BaseSystemInfo.SoftFullName + "<br>自动发送" + "<br>" + DateTime.Now,
                SortCode = 1
            };
            if (!string.IsNullOrEmpty(Add(entity)))
            {
                result = true;
            }
#endif
            return(result);
        }
Esempio n. 5
0
        /// <summary>
        /// 更新实体
        /// </summary>
        /// <param name="entity">实体</param>
        public int UpdateEntity(BaseMessageQueueEntity entity)
        {
            var sqlBuilder = new SqlBuilder(DbHelper);

            sqlBuilder.BeginUpdate(CurrentTableName);
            SetEntity(sqlBuilder, entity);
            if (UserInfo != null)
            {
                sqlBuilder.SetValue(BaseMessageQueueEntity.FieldUpdateUserId, UserInfo.UserId);
                sqlBuilder.SetValue(BaseMessageQueueEntity.FieldUpdateUserName, UserInfo.UserName);
                sqlBuilder.SetValue(BaseMessageQueueEntity.FieldUpdateBy, UserInfo.RealName);
            }
            sqlBuilder.SetDbNow(BaseMessageQueueEntity.FieldUpdateTime);
            sqlBuilder.SetValue(BaseMessageQueueEntity.FieldUpdateIp, Utils.GetIp());
            sqlBuilder.SetWhere(PrimaryKey, entity.Id);
            //return sqlBuilder.EndUpdate();
            var result = sqlBuilder.EndUpdate();

            if (result > 0)
            {
                RemoveCache(entity.Id);
            }
            return(result);
        }
Esempio n. 6
0
 // 这个是声明扩展方法
 partial void SetEntityExtend(SqlBuilder sqlBuilder, BaseMessageQueueEntity entity);
Esempio n. 7
0
        /// <summary>
        /// 添加实体
        /// </summary>
        /// <param name="entity">实体</param>
        public string AddEntity(BaseMessageQueueEntity entity)
        {
            var key = string.Empty;

            if (entity.SortCode == 0)
            {
                var managerSequence = new BaseSequenceManager(DbHelper, Identity);
                if (DbHelper.CurrentDbType == CurrentDbType.Oracle || DbHelper.CurrentDbType == CurrentDbType.Db2)
                {
                    key = managerSequence.Increment($"SC_{CurrentTableName}_SEQ");
                }
                else
                {
                    key = managerSequence.Increment(CurrentTableName);
                }
                entity.SortCode = key.ToInt();
            }
            var sqlBuilder = new SqlBuilder(DbHelper, Identity, ReturnId);

            sqlBuilder.BeginInsert(CurrentTableName, PrimaryKey);
            if (!Identity)
            {
                // 这里已经是指定了主键了,所以不需要返回主键了
                sqlBuilder.ReturnId = false;
                sqlBuilder.SetValue(PrimaryKey, entity.Id);
            }
            else
            {
                if (!ReturnId && (DbHelper.CurrentDbType == CurrentDbType.Oracle || DbHelper.CurrentDbType == CurrentDbType.Db2))
                {
                    if (DbHelper.CurrentDbType == CurrentDbType.Oracle)
                    {
                        sqlBuilder.SetFormula(PrimaryKey, $"{CurrentTableName}_SEQ.NEXTVAL");
                    }
                    if (DbHelper.CurrentDbType == CurrentDbType.Db2)
                    {
                        sqlBuilder.SetFormula(PrimaryKey, $"NEXT VALUE FOR {CurrentTableName}_SEQ");
                    }
                }
                else
                {
                    if (Identity && (DbHelper.CurrentDbType == CurrentDbType.Oracle || DbHelper.CurrentDbType == CurrentDbType.Db2))
                    {
                        var managerSequence = new BaseSequenceManager(DbHelper);
                        entity.Id = managerSequence.Increment($"{CurrentTableName}_SEQ").ToInt();
                        sqlBuilder.SetValue(PrimaryKey, entity.Id);
                    }
                }
            }
            SetEntity(sqlBuilder, entity);
            //设置默认的Source为站点的
            if (string.IsNullOrWhiteSpace(entity.Source))
            {
                entity.Source = BaseSystemInfo.ApplicationId;
            }

            if (UserInfo != null)
            {
                sqlBuilder.SetValue(BaseMessageQueueEntity.FieldUserCompanyId, UserInfo.CompanyId);
                sqlBuilder.SetValue(BaseMessageQueueEntity.FieldUserSubCompanyId, UserInfo.SubCompanyId);
                sqlBuilder.SetValue(BaseMessageQueueEntity.FieldCreateUserId, UserInfo.UserId);
                sqlBuilder.SetValue(BaseMessageQueueEntity.FieldCreateUserName, UserInfo.UserName);
                sqlBuilder.SetValue(BaseMessageQueueEntity.FieldCreateBy, UserInfo.RealName);
            }
            else
            {
                sqlBuilder.SetValue(BaseMessageQueueEntity.FieldCreateBy, entity.CreateBy);
                sqlBuilder.SetValue(BaseMessageQueueEntity.FieldCreateUserName, entity.CreateUserName);
            }
            sqlBuilder.SetDbNow(BaseMessageQueueEntity.FieldCreateTime);
            sqlBuilder.SetValue(BaseMessageQueueEntity.FieldCreateIp, Utils.GetIp());
            if (UserInfo != null)
            {
                sqlBuilder.SetValue(BaseMessageQueueEntity.FieldUpdateUserId, UserInfo.UserId);
                sqlBuilder.SetValue(BaseMessageQueueEntity.FieldUpdateUserName, UserInfo.UserName);
                sqlBuilder.SetValue(BaseMessageQueueEntity.FieldUpdateBy, UserInfo.RealName);
            }
            sqlBuilder.SetDbNow(BaseMessageQueueEntity.FieldUpdateTime);
            sqlBuilder.SetValue(BaseMessageQueueEntity.FieldUpdateIp, Utils.GetIp());
            if (Identity && (DbHelper.CurrentDbType == CurrentDbType.SqlServer || DbHelper.CurrentDbType == CurrentDbType.Access))
            {
                key = sqlBuilder.EndInsert().ToString();
            }
            else
            {
                sqlBuilder.EndInsert();
            }
            if (Identity && (DbHelper.CurrentDbType == CurrentDbType.Oracle || DbHelper.CurrentDbType == CurrentDbType.Db2))
            {
                key = entity.Id.ToString();
            }
            if (!string.IsNullOrWhiteSpace(key))
            {
                RemoveCache();
            }
            return(key);
        }
Esempio n. 8
0
 /// <summary>
 /// 更新
 /// </summary>
 /// <param name="entity">实体</param>
 public int Update(BaseMessageQueueEntity entity)
 {
     return(UpdateEntity(entity));
 }
        /// <summary>
        /// 重新发送消息
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="maxFailCount"></param>
        /// <returns>是否成功</returns>
        private bool ResendEmail(BaseMessageQueueEntity entity, int maxFailCount = 5)
        {
            var result = false;

            if (entity.MessageType.Equals("Email", StringComparison.OrdinalIgnoreCase))
            {
                if (entity.FailCount >= maxFailCount)
                {
                    //发送失败超过5次,移动数据到MessageFailed表
                    var entityFailed = new BaseMessageFailedEntity
                    {
                        Source      = entity.Source,
                        MessageType = entity.MessageType,
                        Recipient   = entity.Recipient,
                        Subject     = entity.Subject,
                        Body        = entity.Body,
                        FailCount   = entity.FailCount,
                        CreateTime  = entity.CreateTime,
                        SortCode    = 1
                    };
                    //entityFailed.Error = "";
                    if (!string.IsNullOrWhiteSpace(new BaseMessageFailedManager(UserInfo).Add(entityFailed)))
                    {
                        //删除MessageQueue表中的数据
                        Delete(entity.Id);
                        RemoveCache();
                    }
                    result = false;
                }
                else
                {
                    if (MailUtil.Send(entity.Recipient, entity.Subject, entity.Body))
                    {
                        //发送成功,移动数据到MessageSucceed表
                        var entitySucceed = new BaseMessageSucceedEntity
                        {
                            Source      = entity.Source,
                            MessageType = entity.MessageType,
                            Recipient   = entity.Recipient,
                            Subject     = entity.Subject,
                            Body        = entity.Body,
                            CreateTime  = entity.CreateTime,
                            SortCode    = 1
                        };
                        if (!string.IsNullOrWhiteSpace(new BaseMessageSucceedManager(UserInfo).Add(entitySucceed)))
                        {
                            //删除MessageQueue表中的数据
                            Delete(entity.Id);
                            RemoveCache();
                            result = true;
                        }
                    }
                    else
                    {
                        //更新MessageQueue表中的失败次数
                        entity.FailCount = entity.FailCount + 1;
                        UpdateEntity(entity);
                    }
                }
            }
            return(result);
        }