Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
O
ocrCloudPlatForm
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ocr-cloud-platform
ocrCloudPlatForm
Commits
46345ff5
Commit
46345ff5
authored
Apr 19, 2024
by
黄明步
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
调用页数统计
parent
21e950ad
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
224 additions
and
58 deletions
+224
-58
src/main/java/com/gxmailu/ocrCloudPlatform/config/SwaggerConfiguration.java
+18
-15
src/main/java/com/gxmailu/ocrCloudPlatform/controller/StatController.java
+45
-0
src/main/java/com/gxmailu/ocrCloudPlatform/service/impl/RetransmissionService.java
+1
-1
src/main/java/com/gxmailu/ocrCloudPlatform/service/impl/StatService.java
+156
-0
src/main/java/com/gxmailu/ocrCloudPlatform/vo/BrokenLineData.java
+4
-42
No files found.
src/main/java/com/gxmailu/ocrCloudPlatform/config/SwaggerConfiguration.java
View file @
46345ff5
...
...
@@ -5,28 +5,31 @@ import org.springframework.context.annotation.Configuration;
import
springfox.documentation.builders.ApiInfoBuilder
;
import
springfox.documentation.builders.PathSelectors
;
import
springfox.documentation.builders.RequestHandlerSelectors
;
import
springfox.documentation.service.ApiInfo
;
import
springfox.documentation.spi.DocumentationType
;
import
springfox.documentation.spring.web.plugins.Docket
;
import
springfox.documentation.swagger2.annotations.EnableSwagger2
WebMvc
;
import
springfox.documentation.swagger2.annotations.EnableSwagger2
;
@Configuration
@EnableSwagger2
WebMvc
@EnableSwagger2
public
class
SwaggerConfiguration
{
@Bean
(
value
=
"defaultApi2"
)
public
Docket
defaultApi2
()
{
Docket
docket
=
new
Docket
(
DocumentationType
.
SWAGGER_2
)
.
apiInfo
(
new
ApiInfoBuilder
()
//.title("swagger-bootstrap-ui-demo RESTful APIs")
.
description
(
"#RESTful APIs"
)
.
version
(
"1.0"
)
.
build
())
//分组名称
.
groupName
(
"1.X版本"
)
@Bean
public
Docket
api
()
{
return
new
Docket
(
DocumentationType
.
SWAGGER_2
)
.
groupName
(
"项目"
)
// 生产环境关闭
.
select
()
//这里指定Controller扫描包路径
.
apis
(
RequestHandlerSelectors
.
basePackage
(
"com.gxmailu.message.controller"
))
.
apis
(
RequestHandlerSelectors
.
basePackage
(
"com.gxmailu.ocrCloudPlatform.controller"
))
.
paths
(
PathSelectors
.
any
())
.
build
()
.
apiInfo
(
apiInfo
());
}
private
ApiInfo
apiInfo
()
{
return
new
ApiInfoBuilder
()
.
title
(
"后台接口文档"
)
.
description
(
"查看接口文档"
)
.
build
();
return
docket
;
}
}
src/main/java/com/gxmailu/ocrCloudPlatform/controller/StatController.java
0 → 100644
View file @
46345ff5
package
com
.
gxmailu
.
ocrCloudPlatform
.
controller
;
import
com.gxmailu.ocrCloudPlatform.service.impl.StatService
;
import
com.gxmailu.ocrCloudPlatform.vo.Result
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.annotation.Resource
;
/**
* 统计相关
*
* @author Hmb
* @since 2024/4/9 16:46
*/
@Slf4j
@RestController
@RequestMapping
(
"/stat"
)
@Api
(
tags
=
"统计相关接口"
)
public
class
StatController
{
@Resource
private
StatService
statService
;
@ApiOperation
(
value
=
"获取调用信息数据"
)
@ApiImplicitParams
(
value
=
{
@ApiImplicitParam
(
name
=
"interval"
,
value
=
"时间间隔,可选值[year|month|day|hour|minute|second]"
,
dataType
=
"String"
,
required
=
false
),
@ApiImplicitParam
(
name
=
"displayType"
,
value
=
"展示类型,总体量或各法院使用量可选值[detailed|full]"
,
dataType
=
"String"
,
required
=
false
),
})
@GetMapping
(
"/getBrokenLineData"
)
public
Result
getBrokenLineData
(
@RequestParam
(
value
=
"interval"
,
defaultValue
=
"minute"
)
String
interval
,
@RequestParam
(
value
=
"displayType"
,
defaultValue
=
"full"
)
String
displayType
)
{
return
statService
.
getBrokenLineData
(
interval
,
displayType
);
}
}
src/main/java/com/gxmailu/ocrCloudPlatform/service/impl/RetransmissionService.java
View file @
46345ff5
...
...
@@ -824,7 +824,7 @@ public class RetransmissionService {
log
.
error
(
"请求OCR接口错误{}, fileId={}"
,
result
,
fileId
);
}
}
catch
(
Exception
e
)
{
log
.
error
(
"数据
{}保存发生异常!"
,
result
,
e
);
log
.
error
(
"数据
保存发生异常!"
,
e
);
}
}
...
...
src/main/java/com/gxmailu/ocrCloudPlatform/service/impl/StatService.java
0 → 100644
View file @
46345ff5
package
com
.
gxmailu
.
ocrCloudPlatform
.
service
.
impl
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.util.ObjUtil
;
import
cn.hutool.core.util.StrUtil
;
import
co.elastic.clients.elasticsearch.ElasticsearchClient
;
import
co.elastic.clients.elasticsearch._types.aggregations.CalendarInterval
;
import
co.elastic.clients.elasticsearch._types.aggregations.DateHistogramAggregation
;
import
co.elastic.clients.elasticsearch._types.aggregations.DateHistogramBucket
;
import
co.elastic.clients.elasticsearch._types.aggregations.SumAggregation
;
import
co.elastic.clients.elasticsearch.core.SearchResponse
;
import
co.elastic.clients.json.JsonData
;
import
com.gxmailu.ocrCloudPlatform.entity.Court
;
import
com.gxmailu.ocrCloudPlatform.service.CourtService
;
import
com.gxmailu.ocrCloudPlatform.utils.IpUtils
;
import
com.gxmailu.ocrCloudPlatform.vo.BrokenLineData
;
import
com.gxmailu.ocrCloudPlatform.vo.Result
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.io.IOException
;
import
java.util.*
;
import
java.util.stream.Collectors
;
/**
* @author Hmb
* @since 2024/4/6 17:13
*/
@Slf4j
@Service
public
class
StatService
{
@Resource
private
RedisService
redisService
;
@Resource
private
ElasticSearchService
elasticSearchService
;
@Resource
private
CourtService
courtService
;
@Resource
private
ElasticsearchClient
client
;
private
static
final
String
APP_ABILITY_RECORD_INDEX
=
"app_ability_record"
;
public
Result
getBrokenLineData
(
String
interval
,
String
displayType
)
{
try
{
List
<
BrokenLineData
>
brokenLineData
=
new
ArrayList
<>();
if
(
displayType
.
equals
(
"full"
))
{
return
Result
.
success
(
"获取折线数据成功"
,
getLineData
(
interval
,
null
));
}
else
{
List
<
Court
>
courtList
=
courtService
.
getCourtList
()
.
stream
()
.
filter
(
court
->
StrUtil
.
isNotEmpty
(
court
.
getIpScope
()))
.
collect
(
Collectors
.
toList
());
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
for
(
Court
court
:
courtList
)
{
List
<
BrokenLineData
>
lineData
=
getLineData
(
interval
,
court
);
map
.
put
(
court
.
getForSort
(),
lineData
);
}
return
Result
.
success
(
"成功"
,
map
);
}
// return Result.success("获取折线数据成功", brokenLineData);
}
catch
(
Exception
e
)
{
log
.
error
(
"获取折线数据失败"
,
e
);
return
Result
.
serverError
(
"获取折线数据失败"
,
e
);
}
}
public
List
<
BrokenLineData
>
getLineData
(
String
interval
,
Court
court
)
{
List
<
BrokenLineData
>
resultList
=
new
ArrayList
<>();
// String startTime = DateUtil.beginOfDay(DateUtil.date()).toString("yyyy-MM-dd HH:mm:ss");
// String endTime = DateUtil.beginOfDay(DateUtil.date()).toString("yyyy-MM-dd HH:mm:ss");
String
startTime
=
DateUtil
.
beginOfDay
(
DateUtil
.
parseDate
(
"2024-01-23"
)).
toString
(
"yyyy-MM-dd HH:mm:ss"
);
String
endTime
=
DateUtil
.
endOfDay
(
DateUtil
.
parseDate
(
"2024-01-23"
)).
toString
(
"yyyy-MM-dd HH:mm:ss"
);
CalendarInterval
defaultInterval
=
CalendarInterval
.
Minute
;
switch
(
interval
)
{
case
"year"
:
startTime
=
DateUtil
.
beginOfYear
(
DateUtil
.
date
()).
toString
(
"yyyy-MM-dd HH:mm:ss"
);
endTime
=
DateUtil
.
endOfYear
(
DateUtil
.
date
()).
toString
(
"yyyy-MM-dd HH:mm:ss"
);
defaultInterval
=
CalendarInterval
.
Month
;
break
;
case
"month"
:
// startTime = DateUtil.beginOfMonth(DateUtil.date()).toString("yyyy-MM-dd HH:mm:ss");
// endTime = DateUtil.endOfMonth(DateUtil.date()).toString("yyyy-MM-dd HH:mm:ss");
startTime
=
DateUtil
.
beginOfMonth
(
DateUtil
.
parseDate
(
"2024-01-23"
)).
toString
(
"yyyy-MM-dd HH:mm:ss"
);
endTime
=
DateUtil
.
endOfMonth
(
DateUtil
.
parseDate
(
"2024-01-23"
)).
toString
(
"yyyy-MM-dd HH:mm:ss"
);
defaultInterval
=
CalendarInterval
.
Day
;
break
;
case
"day"
:
defaultInterval
=
CalendarInterval
.
Hour
;
break
;
case
"hour"
:
break
;
case
"minute"
:
break
;
case
"second"
:
defaultInterval
=
CalendarInterval
.
Second
;
break
;
}
try
{
String
finalStartTime
=
startTime
;
String
finalEndTime
=
endTime
;
CalendarInterval
finalDefaultInterval
=
defaultInterval
;
SearchResponse
<
Void
>
search
=
client
.
search
(
srBuilder
->
srBuilder
.
index
(
APP_ABILITY_RECORD_INDEX
).
query
(
queryBuilder
->
queryBuilder
.
bool
(
boolQuery
->
{
// 日期范围查询
boolQuery
.
must
(
q
->
q
.
range
(
rangeQueryBuilder
->
rangeQueryBuilder
.
field
(
"callTime"
)
.
gte
(
JsonData
.
of
(
finalStartTime
))
.
lte
(
JsonData
.
of
(
finalEndTime
))
));
boolQuery
.
must
(
mustQuery
->
mustQuery
.
bool
(
bq
->
{
if
(
ObjUtil
.
isNotNull
(
court
))
{
List
<
String
>
ipScopes
=
StrUtil
.
splitTrim
(
court
.
getIpScope
(),
"-"
);
try
{
List
<
String
>
ipRange
=
ipScopes
.
size
()
!=
2
?
Arrays
.
asList
(
"255.255.255.255"
,
"255.255.255.255"
)
:
IpUtils
.
getIPRange
(
ipScopes
.
get
(
0
),
ipScopes
.
get
(
1
),
3
);
ipRange
.
forEach
(
ip
->
bq
.
should
(
q
->
q
.
prefix
(
pq
->
pq
.
field
(
"ip.keyword"
).
value
(
ip
))));
}
catch
(
Exception
e
)
{
log
.
error
(
"IP段解析错误"
,
e
);
}
}
return
bq
;
}));
return
boolQuery
;
// 聚合查询,按每一分钟为间隔查询每分钟的调用量
})).
aggregations
(
"record"
,
agg
->
agg
.
dateHistogram
(
DateHistogramAggregation
.
of
(
s
->
s
.
field
(
"callTime"
).
calendarInterval
(
finalDefaultInterval
)))
.
aggregations
(
"fileCount"
,
fileCountAgg
->
fileCountAgg
.
sum
(
SumAggregation
.
of
(
s
->
s
.
field
(
"fileCount"
)))))
.
trackTotalHits
(
tb
->
tb
.
enabled
(
true
)),
Void
.
class
);
List
<
DateHistogramBucket
>
recordBcketList
=
search
.
aggregations
().
get
(
"record"
).
dateHistogram
().
buckets
().
array
();
recordBcketList
.
forEach
(
recordBucket
->
{
BrokenLineData
brokenLineData
=
new
BrokenLineData
();
String
time
=
StrUtil
.
isBlank
(
recordBucket
.
keyAsString
())
?
""
:
recordBucket
.
keyAsString
();
brokenLineData
.
setTime
(
time
);
long
value
=
(
long
)
recordBucket
.
aggregations
().
get
(
"fileCount"
).
sum
().
value
();
brokenLineData
.
setValue
(
value
);
resultList
.
add
(
brokenLineData
);
});
return
resultList
;
}
catch
(
IOException
e
)
{
log
.
error
(
"获取折线图数据失败"
,
e
);
return
resultList
;
}
}
}
src/main/java/com/gxmailu/ocrCloudPlatform/vo/BrokenLineData.java
View file @
46345ff5
package
com
.
gxmailu
.
ocrCloudPlatform
.
vo
;
import
lombok.Data
;
@Data
public
class
BrokenLineData
{
private
Long
id
;
private
String
name
;
private
String
time
;
private
Long
value
;
private
String
metric
;
public
Long
getId
()
{
return
id
;
}
public
void
setId
(
Long
id
)
{
this
.
id
=
id
;
}
public
String
getTime
()
{
return
time
;
}
public
void
setTime
(
String
time
)
{
this
.
time
=
time
;
}
public
Long
getValue
()
{
return
value
;
}
public
void
setValue
(
Long
value
)
{
this
.
value
=
value
;
}
public
String
getMetric
()
{
return
metric
;
}
public
void
setMetric
(
String
metric
)
{
this
.
metric
=
metric
;
}
@Override
public
String
toString
()
{
return
"BrokenLineData{"
+
"id="
+
id
+
", time='"
+
time
+
'\''
+
", value="
+
value
+
", metric='"
+
metric
+
'\''
+
'}'
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment