SysCompanyService.cs 6.84 KB
using Hh.Mes.Common.log;
using Hh.Mes.POJO.Response;
using Hh.Mes.Service.Repository;
using System.Data;
using Hh.Mes.Common;
using System.Linq;
using Hh.Mes.POJO.Entity;
using Hh.Mes.Pojo.System;
using SqlSugar;
using System;
using System.Linq.Expressions;

namespace Hh.Mes.Service.Configure
{
    /// <summary>
    /// 公司设置
    /// </summary>
    public class SysCompanyService : RepositorySqlSugar<dynamic>
    {

        /// <summary>
        /// 主页面错误信息提示
        /// </summary>
        public dynamic LogTips()
        {
            var response = new Response();
            return ExceptionsHelp.Instance.ExecuteT(() =>
            {
                #region cpu,硬盘,内存
                var tempServerLog = string.Empty;//"cpu 使用率:80%,内存使用率:80%,C盘使用率:80%,"
                var cpu = ComputerHelp.GetCpuUsage();
                if (int.TryParse(cpu.Replace("%", ""), out int cpuUsage) && cpuUsage >= 80)
                {
                    tempServerLog += $"cpu 使用率:{cpu};";
                }
                var memory = ComputerHelp.GetMemery();
                if (int.TryParse(memory.Item4.Replace("%", ""), out int memoryUsage) && memoryUsage >= 80)
                {
                    tempServerLog += $"内存 使用率:{memory.Item4};";
                }
                var disk = ComputerHelp.GetDriveInfos();
                var driveInfos = disk.Where(x => ((x.TotalSize - x.TotalFreeSpace) * 100 / x.TotalSize) >= 80).Select(x => new
                {
                    dirName = x.Name,
                    usage = ((x.TotalSize - x.TotalFreeSpace) * 100 / x.TotalSize).ToString("N1") + "%"
                }).ToList();
                foreach (var item in driveInfos)
                {
                    tempServerLog += $"{item.dirName}盘使用率:{item.usage};";
                }
                #endregion

                #region 日志

                var log = @" --接口
							 select count(1) as total from sys_interface_log t (nolock) 
                             where t.flag is null 
                             and t.response NOT LIKE '%200%'
							 --定时器
                             select count(1) as total from sys_job_log t (nolock) 
                             where t.flag is null 
							 --PDA
                             select count(1) as total from sys_interface_log t (nolock) 
                             where t.flag is null and [system] ='app Android' 
                             and t.response NOT LIKE '%200%'
							 --客户端
                            select * from (
	                             select clientName  ,
			                            seconds = ISNULL(DATEDIFF(second, LastSeenDate, GETDATE()), 130)
		                            from [dbo].[daq_client_status] with(nolock)
                            )t
                            where t.seconds>=120
                             --数据库
                             DECLARE @DriveInfo TABLE (drive VARCHAR(10), freeSpaceMB INT);
                             INSERT INTO @DriveInfo  EXEC xp_fixeddrives;
                             SELECT drive, freeSpaceMB
                             FROM  @DriveInfo 
                             WHERE FreeSpaceMB<30480";

                var ds = Context.Ado.GetDataSetAll(log);
                var interLog = ds.Tables[0].Rows[0]["total"].ToString();
                if (interLog == "0") interLog = "";
                var jobLog = ds.Tables[1].Rows[0]["total"].ToString();
                if (jobLog == "0") jobLog = "";
                var pdaLog = ds.Tables[2].Rows[0]["total"].ToString();
                if (pdaLog == "0") pdaLog = "";

                string currentUser = sysWebUser.Account;
                var temp = Context.Queryable<daq_client_status>().Where(LinqWhere(currentUser)).Select(x => new
                {
                    x.clientName,
                    x.lastSeenDate,
                }).ToList();

                //var clientOnlineInfo = ds.Tables[3];

                #endregion

                response.Result = new
                {
                    interLog,

                    jobLog,

                    pdaLog,

                    clientOnlineInfo = temp.Select(x => new
                    {
                        x.clientName,
                        seconds = (DateTime.Now - x.lastSeenDate).TotalSeconds,
                    }).ToList(),

                    serverLog = string.IsNullOrWhiteSpace(tempServerLog) ? "" : tempServerLog,

                    sqlServerLog = ds.Tables[4].Rows.Count > 0 ? ds.Tables[4] : null
                };
                return response;
            });
        }

        public Expression<Func<daq_client_status, bool>> LinqWhere(string user)
        {
            var exp = Expressionable.Create<daq_client_status>();
            exp.And(x => x.lastSeenDate <= DateTime.Now.AddMinutes(-5));
            if (user != SystemVariable.DefaultCreated)
            {
                var projectKeys = GetProjectInfoKeys(user);
                var projectCodes = Context.Queryable<base_project>().Where(x => projectKeys.Contains(x.keys)).Select(x => x.projectCode).ToList();
                exp.And(x => projectCodes.Contains(x.projectCode));
            }
            return exp.ToExpression();
        }

        public dynamic UpdateLogTips(string flag)
        {
            var response = new Response();
            return ExceptionsHelp.Instance.ExecuteT(() =>
            {
                if (flag == "inter")
                {
                    string sql = "update sys_interface_log set flag=1 where flag is null";
                    var result = base.Context.Ado.ExecuteCommand(sql);
                    return result > 0 ? response.ResponseSuccess() : response.ResponseError();
                }
                else if (flag == "job")
                {
                    string sql = "update sys_job_log set flag=1 where flag is null";
                    var result = base.Context.Ado.ExecuteCommand(sql);
                    return result > 0 ? response.ResponseSuccess() : response.ResponseError();
                }
                else if (flag == "upstream")
                {
                    string sql = "update sys_interface_log set flag=1 where flag is null and [system] ='api' and [type]  like 'API%'";
                    var result = base.Context.Ado.ExecuteCommand(sql);
                    return result > 0 ? response.ResponseSuccess() : response.ResponseError();
                }
                else if (flag == "pda")
                {
                    string sql = "update sys_interface_log set flag=1 where flag is null and [system] ='app Android'";
                    var result = base.Context.Ado.ExecuteCommand(sql);
                    return result > 0 ? response.ResponseSuccess() : response.ResponseError();
                }
                return response;
            });
        }

    }
}