using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using GasolineBlend.Entity;
|
using RiskControl.NewService.ViewModel;
|
|
namespace RiskControl.NewService.Service
|
{
|
public class AlarmService:DbContext
|
{
|
/// <summary>
|
/// 获取事件预警数
|
/// </summary>
|
/// <param name="startTime"></param>
|
/// <param name="endTime"></param>
|
/// <param name="companyNames"></param>
|
/// <returns></returns>
|
public List<WarnEventTypeCountResult> GetRiskMonitorEventTypeCountResult(DateTime? startTime, DateTime? endTime, string[] companyNames)
|
{
|
var sqlTemp = $@"SELECT EventType,COUNT(1) num INTO #temp FROM dbo.ComDynamic WHERE CompanyName IN ('{string.Join("','", companyNames)}')
|
{(startTime == null ? "" : $" AND ContentTime>='{startTime:yyyy-MM-dd HH:mm:ss}'")}
|
{(endTime == null ? "" : $" AND ContentTime<='{endTime:yyyy-MM-dd HH:mm:ss}'")}
|
GROUP BY EventType;";
|
|
var eventTypeSql = @"
|
SELECT '经营预警类' level1,EventType level2,SUM(num) num FROM #temp
|
WHERE EventType LIKE '深度信息-经营预警-%'
|
GROUP BY EventType
|
UNION ALL
|
SELECT '司法涉诉类' level1,EventType level2,SUM(num) num FROM #temp
|
WHERE EventType LIKE '深度信息-司法涉诉%' OR EventType ='深度信息-诉法涉诉-限制高消费'
|
GROUP BY EventType
|
UNION ALL
|
SELECT '租赁融资类' level1,EventType level2,SUM(num) num FROM #temp
|
WHERE EventType IN ('租赁融资','应收账款质押','应收账款转让(保理)','动产抵质押','其他动产权利登记')
|
GROUP BY EventType
|
UNION ALL
|
SELECT '新闻类' level1,EventType level2,SUM(num) num FROM #temp
|
WHERE EventType IN ('深度信息-经营信息-招投标','深度信息-经营信息-购地信息','深度信息-经营信息-招聘信息','深度信息-经营信息-新闻舆论','深度信息-经营信息-商标信息','深度信息-经营信息-专利信息')
|
GROUP BY EventType
|
UNION ALL
|
SELECT '公告类' level1,EventType level2,SUM(num) num FROM #temp
|
WHERE EventType IN ('深度信息-上市信息-公司公告-业绩预告','深度信息-上市信息-公司公告-公司公告','深度信息-新三板上市信息-公司公告')
|
GROUP BY EventType";
|
|
var sql = sqlTemp + eventTypeSql;
|
var res = alarmDb.Ado.SqlQuery<dynamic>(sql);
|
var levelArr = new[] { "经营预警类", "司法涉诉类", "租赁融资类", "新闻类", "公告类" };
|
var list = new List<WarnEventTypeCountResult>();
|
foreach (var level in levelArr)
|
{
|
var items = res.Where(a => (string)a.level1 == level).ToList();
|
var listItem = new List<WarnEventTypeCountResult>();
|
foreach (dynamic o in items)
|
{
|
var level2 = (string)o.level2;
|
var name = level2.Substring(level2.LastIndexOf('-') + 1, level2.Length - level2.LastIndexOf('-') - 1);
|
listItem.Add(new WarnEventTypeCountResult()
|
{
|
Name = name,
|
Count = (int)o.num
|
});
|
}
|
list.Add(new WarnEventTypeCountResult()
|
{
|
Name = level,
|
Count = listItem.Sum(a => a.Count),
|
Children = listItem
|
});
|
}
|
|
return list;
|
}
|
|
/// <summary>
|
/// 获取风险、新闻、公告检测的预警数
|
/// </summary>
|
/// <param name="startTime"></param>
|
/// <param name="endTime"></param>
|
/// <param name="companyNames"></param>
|
/// <returns></returns>
|
public RiskMonitorWarnCountResult GetRiskMonitorWarnCountResult(DateTime? startTime, DateTime? endTime, string[] companyNames)
|
{
|
var rateTypeArr = new string[]
|
{
|
"深度信息-经营预警-非正常户", "深度信息-经营预警-公示催告", "深度信息-经营预警-黑名单", "深度信息-经营预警-环保处罚", "深度信息-经营预警-简易注销",
|
"深度信息-经营预警-经营异常", "深度信息-经营预警-破产重整", "深度信息-经营预警-欠税公告", "深度信息-经营预警-税收违法", "深度信息-经营预警-行政处罚",
|
"深度信息-经营预警-询价评估", "深度信息-经营预警-注销备案", "深度信息-司法涉诉-被执行人", "深度信息-司法涉诉-裁判文书", "深度信息-司法涉诉-法院公告",
|
"深度信息-司法涉诉-股权冻结", "深度信息-司法涉诉-开庭公告", "深度信息-司法涉诉-立案信息", "深度信息-司法涉诉-失信被执行", "深度信息-司法涉诉-司法拍卖",
|
"深度信息-司法涉诉-司法协助", "深度信息-司法涉诉-送达公告", "深度信息-司法涉诉-终本案件", "深度信息-诉法涉诉-限制高消费", "动产抵质押", "其他动产权利登记", "应收账款质押",
|
"应收账款转让(保理)", "租赁融资",
|
};
|
var newsTypeArr = new[]
|
{
|
"深度信息-经营信息-招投标", "深度信息-经营信息-购地信息", "深度信息-经营信息-招聘信息", "深度信息-经营信息-新闻舆论", "深度信息-经营信息-商标信息",
|
"深度信息-经营信息-专利信息"
|
};
|
var anTypeArr = new[] {"深度信息-上市信息-公司公告-业绩预告", "深度信息-上市信息-公司公告-公司公告", "深度信息-新三板上市信息-公司公告"};
|
|
|
var sqlTemp = $@"SELECT EventType,WarnLevel,COUNT(1) Num FROM dbo.ComDynamic WHERE CompanyName IN ('{string.Join("','", companyNames)}')
|
{(startTime == null ? "" : $" AND ContentTime>='{startTime:yyyy-MM-dd HH:mm:ss}'")}
|
{(endTime == null ? "" : $" AND ContentTime<='{endTime:yyyy-MM-dd HH:mm:ss}'")}
|
GROUP BY EventType,WarnLevel;";
|
var data = alarmDb.Ado.SqlQuery<dynamic>(sqlTemp);
|
var result = new RiskMonitorWarnCountResult();
|
foreach (dynamic o in data)
|
{
|
if (rateTypeArr.Contains((string) o.EventType))
|
result.Risk = AddWarnLevelCount(result.Risk, (int)o.WarnLevel, (int)o.Num);
|
else if (newsTypeArr.Contains((string)o.EventType))
|
result.News = AddWarnLevelCount(result.News, (int)o.WarnLevel, (int)o.Num);
|
else if (anTypeArr.Contains((string)o.EventType))
|
result.Announcement = AddWarnLevelCount(result.Announcement, (int)o.WarnLevel, (int)o.Num);
|
}
|
|
return result;
|
|
RiskMonitorWarnCountResult.WarnLevelInfo AddWarnLevelCount(RiskMonitorWarnCountResult.WarnLevelInfo warnLevelInfo,int warnLevel,int num)
|
{
|
switch (warnLevel)
|
{
|
case 0:
|
warnLevelInfo.WarnLevel0 += num;
|
break;
|
case 1:
|
warnLevelInfo.WarnLevel1 += num;
|
break;
|
case 2:
|
warnLevelInfo.WarnLevel2 += num;
|
break;
|
case 3:
|
warnLevelInfo.WarnLevel3 += num;
|
break;
|
}
|
return warnLevelInfo;
|
}
|
}
|
|
/// <summary>
|
/// 根据风险、新闻、公告检测获取预警详情
|
/// </summary>
|
/// <param name="startTime">开始时间</param>
|
/// <param name="endTime">结束时间</param>
|
/// <param name="companyNames">公司名称</param>
|
/// <param name="type">类型(风险/新闻/公告)</param>
|
/// <param name="level">预警等级(0/1/2/3)</param>
|
/// <returns></returns>
|
public List<ComDynamic> GetDynamicByWarnLevel(DateTime? startTime, DateTime? endTime, string[] companyNames, string type,
|
int? level = null)
|
{
|
var rateTypeArr = new string[]
|
{
|
"深度信息-经营预警-非正常户", "深度信息-经营预警-公示催告", "深度信息-经营预警-黑名单", "深度信息-经营预警-环保处罚", "深度信息-经营预警-简易注销",
|
"深度信息-经营预警-经营异常", "深度信息-经营预警-破产重整", "深度信息-经营预警-欠税公告", "深度信息-经营预警-税收违法", "深度信息-经营预警-行政处罚",
|
"深度信息-经营预警-询价评估", "深度信息-经营预警-注销备案", "深度信息-司法涉诉-被执行人", "深度信息-司法涉诉-裁判文书", "深度信息-司法涉诉-法院公告",
|
"深度信息-司法涉诉-股权冻结", "深度信息-司法涉诉-开庭公告", "深度信息-司法涉诉-立案信息", "深度信息-司法涉诉-失信被执行", "深度信息-司法涉诉-司法拍卖",
|
"深度信息-司法涉诉-司法协助", "深度信息-司法涉诉-送达公告", "深度信息-司法涉诉-终本案件", "深度信息-诉法涉诉-限制高消费", "动产抵质押", "其他动产权利登记", "应收账款质押",
|
"应收账款转让(保理)", "租赁融资",
|
};
|
var newsTypeArr = new[]
|
{
|
"深度信息-经营信息-招投标", "深度信息-经营信息-购地信息", "深度信息-经营信息-招聘信息", "深度信息-经营信息-新闻舆论", "深度信息-经营信息-商标信息",
|
"深度信息-经营信息-专利信息"
|
};
|
var anTypeArr = new[] { "深度信息-上市信息-公司公告-业绩预告", "深度信息-上市信息-公司公告-公司公告", "深度信息-新三板上市信息-公司公告" };
|
var result = alarmDb.Queryable<ComDynamic>()
|
.WhereIF(startTime != null, a => a.ContentTime >= startTime)
|
.WhereIF(endTime != null, a => a.ContentTime <= endTime)
|
.Where(a => companyNames.Contains(a.CompanyName))
|
.WhereIF(type == "风险", a => rateTypeArr.Contains(a.EventType))
|
.WhereIF(type == "新闻", a => newsTypeArr.Contains(a.EventType))
|
.WhereIF(type == "公告", a => anTypeArr.Contains(a.EventType))
|
.WhereIF(level != null, a => a.WarnLevel == level)
|
.ToList();
|
return result;
|
}
|
|
/// <summary>
|
/// 根据风险、新闻、公告检测获取预警详情
|
/// </summary>
|
/// <param name="startTime">开始时间</param>
|
/// <param name="endTime">结束时间</param>
|
/// <param name="companyNames">公司名称</param>
|
/// <param name="eventType1">一级事件名称(经营预警类/司法涉诉类/租赁融资类/新闻类/公告类/“全部”传"")</param>
|
/// <param name="eventType2">二级事件名称(“全部”传"")</param>
|
/// <param name="warnLevel">预警等级(0/1/2/3)</param>
|
/// <returns></returns>
|
public List<ComDynamic> GetDynamicByEventType(DateTime? startTime, DateTime? endTime, string[] companyNames, string eventType1, string eventType2,int? warnLevel=null)
|
{
|
var rateTypeArr = new[] { "动产抵质押", "其他动产权利登记", "应收账款质押", "应收账款转让(保理)", "租赁融资", };
|
var newsTypeArr = new[]
|
{
|
"深度信息-经营信息-招投标", "深度信息-经营信息-购地信息", "深度信息-经营信息-招聘信息", "深度信息-经营信息-新闻舆论", "深度信息-经营信息-商标信息",
|
"深度信息-经营信息-专利信息"
|
};
|
var anTypeArr = new[] { "深度信息-上市信息-公司公告-业绩预告", "深度信息-上市信息-公司公告-公司公告", "深度信息-新三板上市信息-公司公告" };
|
var result = alarmDb.Queryable<ComDynamic>()
|
.WhereIF(startTime != null, a => a.ContentTime >= startTime)
|
.WhereIF(endTime != null, a => a.ContentTime <= endTime)
|
.Where(a => companyNames.Contains(a.CompanyName))
|
.WhereIF(eventType1 == "经营预警类", a => a.EventType.StartsWith("深度信息-经营预警-"))
|
.WhereIF(eventType1 == "司法涉诉类", a => a.EventType.StartsWith("深度信息-司法涉诉-") || a.EventType == "深度信息-诉法涉诉-限制高消费")
|
.WhereIF(eventType1 == "租赁融资类", a => rateTypeArr.Contains(a.EventType))
|
.WhereIF(eventType1 == "新闻类", a => newsTypeArr.Contains(a.EventType))
|
.WhereIF(eventType1 == "公告类", a => anTypeArr.Contains(a.EventType))
|
.WhereIF(!string.IsNullOrWhiteSpace(eventType2), a => a.EventType.EndsWith(eventType2))
|
.WhereIF(warnLevel!=null,a=>a.WarnLevel == warnLevel)
|
.ToList();
|
return result;
|
}
|
|
|
}
|
}
|