165 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			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;
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
}
 |