/// <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()); }
/// <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); }
/// <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); }
/// <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); }
// 这个是声明扩展方法 partial void SetEntityExtend(SqlBuilder sqlBuilder, BaseMessageQueueEntity entity);
/// <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); }
/// <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); }