wx
2022-09-15 b72b64e3726ed39da485f1f535d9c55c83625491
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
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;
        }
 
 
    }
}