d_sms_service/APT.MicroApi/APT.PF.WebApi/Controllers/Api/ConnectController.cs
2024-10-28 13:45:58 +08:00

165 lines
7.3 KiB
C#

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
{
/// <summary>
/// 系统日志
/// </summary>
[Route("api/PF/Connect")]
public partial class ConnectController : AuthorizeApiController<T_PF_DATA_CHANNEL>
{
public int UnConnectTime = 30;//30分钟断线通知
public int NoticTime = 30;//通知间隔时间
public int NoticCount = 3;//通知次数
/// <param name="data">
/// 判断是否链接
/// </param>
/// <returns></returns>
[HttpPost, Route("Judge")]
public JsonActionResult<bool> Judge([FromBody] KeywordFilter filter)
{
return base.SafeExecute(() =>
{
var lastTimeStr = CsRedisManager.StringGet<string>(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<string>(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<int>(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<T_FM_BASE_CONFIG>(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;
});
}
/// <summary>
/// 联合添加
/// </summary>
/// <param name="data">
/// 实体
/// </param>
/// <returns></returns>
[HttpGet, Route("JobDelete")]
public JsonActionResult<bool> JobDelete(string id)
{
return base.SafeExecute(() =>
{
var data = this.GetEntity<T_PF_DATA_CHANNEL>(id);
if (data == null)
this.ThrowError("20002");
var extConnConfigService = APT.Infrastructure.Api.ServiceLocator.Instance.GetService<IExtConnConfigService>();
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<T_PF_CLIENT_SCOPES>(i => i.DATA_CHANNEL_ID == data.ID);
this.DeleteEntityNoCommit<T_PF_DATA_CHANNEL>(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;
}
}
}