/// <summary>
        /// 创建运行sql信息
        /// </summary>
        /// <param name="runtimeSqlModel"></param>
        /// <returns></returns>
        private async Task <RuntimeSqlInfo> CreateAsync(RuntimeSqlModel runtimeSqlModel)
        {
            var runtimeSqlInfo = new RuntimeSqlInfo
            {
                FCreateTime   = DateTimeUtil.Now,
                FExecutedTime = runtimeSqlModel.FExecutedTime,
                FIsDeleted    = false,
                FIsSuccess    = runtimeSqlModel.FIsSuccess,
                FProjectName  = runtimeSqlModel.FProjectName,
                FRequestGuid  = runtimeSqlModel.FRequestGuid,
                FServicerMac  = runtimeSqlModel.FServerMac,
                FSqlDbType    = runtimeSqlModel.FSqlDbType,
                FSqlText      = runtimeSqlModel.FSqlText,
                FTimeElapsed  = runtimeSqlModel.FTimeElapsed,
                FMemberName   = runtimeSqlModel.FMemberName,
                FSource       = runtimeSqlModel.FSource,
                FDatabaseName = runtimeSqlModel.FDatabaseName
            };

            if (runtimeSqlInfo.FProjectName.IsNotNullAndNotEmptyWhiteSpace())
            {
                runtimeSqlInfo.FProjectID = await _projectDomainService.GetProjectIDAsync(runtimeSqlInfo.FProjectName);
            }
            if (runtimeSqlInfo.FServicerMac.IsNotNullAndNotEmptyWhiteSpace())
            {
                runtimeSqlInfo.FServicerID = await _servicerDomainService.GetServerIDAsync(runtimeSqlInfo.FServicerMac);
            }
            if (runtimeSqlModel.FDatabaseName.IsNotNullAndNotEmptyWhiteSpace())
            {
                runtimeSqlInfo.FDatabeseID = await _databaseDomainService.GetDatabaseIDAsync(runtimeSqlModel.FDatabaseName, runtimeSqlModel.FSqlDbType);
            }
            return(runtimeSqlInfo);
        }
 /// <summary>
 /// 判断是否需要预警
 /// </summary>
 /// <param name="runtimeSqlInfo"></param>
 /// <returns></returns>
 private async Task <bool> IsNeedWarningAsync(RuntimeSqlInfo runtimeSqlInfo)
 {
     if (runtimeSqlInfo != null)
     {
         if (!runtimeSqlInfo.FIsSuccess)
         {
             return(true);
         }
         var minWarningTimeElapsed = (await _sysConfigCache.GetValueAsync(SysConfigKey.SqlWarningMinTimeElapsed)).ToSafeDouble(2000);
         return(runtimeSqlInfo.FTimeElapsed >= minWarningTimeElapsed);
     }
     return(false);
 }
 /// <summary>
 /// 创建sql的警告信息
 /// </summary>
 /// <param name="runtimeSqlInfo"></param>
 /// <returns></returns>
 public WarningSqlInfo Create(RuntimeSqlInfo runtimeSqlInfo)
 {
     return(new WarningSqlInfo
     {
         FCreateTime = DateTimeUtil.Now,
         FCreateUserID = -1,
         FDealState = Constant.DealState.WaitDeal,
         FIsDeleted = false,
         FNoticeState = Constant.NoticeState.WaitNotice,
         FRuntimeSqlID = runtimeSqlInfo.FID,
         FSqlSign = runtimeSqlInfo.GetSafeHashID()
     });
 }
        /// <summary>
        /// 分析运行的sql信息
        /// </summary>
        /// <param name="runtimeSqlInfo"></param>
        /// <returns></returns>
        public async Task AnalysisRuntimeSqlAsync(RuntimeSqlInfo runtimeSqlInfo)
        {
            await Task.Delay(1);

            if (await IsNeedWarningAsync(runtimeSqlInfo))
            {
                var warningSqlInfo = _warningSqlDomainService.Create(runtimeSqlInfo);
                //判断一小时之内有没有超出五条同样sql标识的记录,假如超出则不发送邮件,
                int waitDealCount = await _warningSqlRepository.QueryCountAsync(m => m.FSqlSign == warningSqlInfo.FSqlSign && m.FCreateTime >= DateTimeUtil.Now.AddHours(-1) && m.FNoticeState == NoticeState.WaitNotice && m.FIsDeleted == false);

                if (waitDealCount <= 5)
                {
                    //发送邮件
                    await _emailSendedRecordDomainService.SendEmailAsync($"你有来自项目【{runtimeSqlInfo.FProjectName}】新的警告邮件", runtimeSqlInfo.FSqlText, runtimeSqlInfo.FProjectID);

                    warningSqlInfo.FNoticeState = NoticeState.Noticed;
                }
                await _warningSqlRepository.InsertOneAsync(warningSqlInfo, keyName : "FID", ignoreFields : FID);
            }
        }