using APT.BaseData.Domain.ApiModel.Platform; using APT.BaseData.Domain.Entities; using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.Enums; using APT.BaseData.Domain.IServices.FM; using APT.Infrastructure.Api.Redis; using APT.Infrastructure.Core; using APT.Utility; using Microsoft.AspNetCore.Mvc; using System; using System.Data.Common; namespace APT.PF.WebApiControllers.Api.PF { /// /// 系统日志 /// [Route("api/PF/Connect")] public partial class ConnectController : AuthorizeApiController { public int UnConnectTime = 30;//30分钟断线通知 public int NoticTime = 30;//通知间隔时间 public int NoticCount = 3;//通知次数 /// /// 判断是否链接 /// /// [HttpPost, Route("Judge")] public JsonActionResult Judge([FromBody] KeywordFilter filter) { return base.SafeExecute(() => { var lastTimeStr = CsRedisManager.StringGet(RedisCacheKey.LastConnetTime); if (string.IsNullOrEmpty(lastTimeStr)) return false; var lastTime = DateTime.Parse(lastTimeStr); if (lastTime != null) { if (lastTime.AddMinutes(UnConnectTime) < DateTime.Now) { var noticeTimeStr = CsRedisManager.StringGet(RedisCacheKey.LastNoticeTime); if (string.IsNullOrEmpty(noticeTimeStr)) return false; var noticeTime = DateTime.Parse(noticeTimeStr); if (noticeTime == null || noticeTime.AddMinutes(NoticTime) < DateTime.Now) { var noticeCount = CsRedisManager.StringGet(RedisCacheKey.LastNoticeCount); if (noticeCount == null || noticeCount < NoticCount) { //短信通知 CsRedisManager.StringSet(RedisCacheKey.LastNoticeTime, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); if (noticeCount == null) noticeCount = 1; else noticeCount++; CsRedisManager.StringSet(RedisCacheKey.LastNoticeCount, noticeCount); var config = this.GetEntity(i => i.ORG_ID == filter.OrgId); //插入到表 if (!string.IsNullOrEmpty(config.TEL)) { T_FM_NOTICE notice = new T_FM_NOTICE() { ID = Guid.NewGuid(), MESSAGE = "[" + config.SYS_NAME + "]系统数据采集已中断,中断时间:" + lastTime.ToString("yyyy-MM-dd HH:mm:ss"), NOTICE_TYPE = (int)FMNoticeType.短信, ORG_ID = config.ORG_ID, TRYCOUNT = 3, TEL = config.TEL, NOTICE_STATUS = (int)FMNoticeStatus.等待发送, Message_TYPE = (int)FMMessageType.数据中断 }; this.AddEntity(notice); } } } } } return true; }); } /// /// 联合添加 /// /// /// 实体 /// /// [HttpGet, Route("JobDelete")] public JsonActionResult JobDelete(string id) { return base.SafeExecute(() => { var data = this.GetEntity(id); if (data == null) this.ThrowError("20002"); var extConnConfigService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService(); var connParam = extConnConfigService.GetConfigParam(data.ORG_ID ?? Guid.Empty, "D001"); if (connParam == null) this.ThrowError("20002"); var conn = connParam["Conn"]; if (string.IsNullOrEmpty(conn)) this.ThrowError("20002"); var dbConn = this.InitDbConnection(DataBaseType.Postgresql, conn); var clientEnable = data.ENABLE_STATUS == (int)(FMEnableStatusEnum.启用) ? true : false; var sql = $"SELECT \"Id\", \"Enabled\", \"ClientId\", \"ClientName\" FROM public.\"Clients\" where \"ClientId\"='{data.APP_ID}'"; bool isUpdate; int clientId; QueryClient(dbConn, sql, out isUpdate, out clientId); if (isUpdate) { var commitSql = $"delete from \"Clients\" where \"Id\"='{clientId}'"; //查询scops var deleteScops = $"DELETE FROM \"ClientScopes\" WHERE \"ClientId\"='{clientId}'"; var commitSecret = $"delete from \"ClientSecrets\" where \"ClientId\"='{clientId}'"; var clientGrantSql = $"delete from \"ClientGrantTypes\" where \"ClientId\"='{clientId}'"; //2.scop表 this.ExecuteNonQueryByConn(DataBaseType.Postgresql, dbConn, System.Data.CommandType.Text, deleteScops, null, false); //3.Secret表 this.ExecuteNonQueryByConn(DataBaseType.Postgresql, dbConn, System.Data.CommandType.Text, commitSecret, null, false); //4.grantType表 this.ExecuteNonQueryByConn(DataBaseType.Postgresql, dbConn, System.Data.CommandType.Text, clientGrantSql, null, false); //1.client表 this.ExecuteNonQueryByConn(DataBaseType.Postgresql, dbConn, System.Data.CommandType.Text, commitSql, null, true); } //4.内部数据 this.UnifiedCommit(() => { this.DeleteEntityNoCommit(i => i.DATA_CHANNEL_ID == data.ID); this.DeleteEntityNoCommit(id); }); return true; }); } private void QueryClient(DbConnection dbConn, string sql, out bool isUpdate, out int clientId) { var update = false; var id = 0; this.ExecuteReaderPageByConn(DataBaseType.Postgresql, dbConn, System.Data.CommandType.Text, sql, null, 0, 1, (reader) => { while (reader.Read()) { update = true; id = Convert.ToInt32(reader.GetValue(0)); } }, false); isUpdate = update; clientId = id; } } }