Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
V
VideoAIBatchTaskConsumerService
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
VideoAIService
VideoAIBatchTaskConsumerService
Commits
36f0e3d1
Commit
36f0e3d1
authored
May 26, 2021
by
yzm
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更改实现方式为推送给第三方
parent
a7fc5f1b
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
777 additions
and
163 deletions
+777
-163
src/main/java/com/cx/cn/cxquartz/controller/ExtController.java
...ain/java/com/cx/cn/cxquartz/controller/ExtController.java
+164
-136
src/main/java/com/cx/cn/cxquartz/controller/IndexController.java
...n/java/com/cx/cn/cxquartz/controller/IndexController.java
+88
-0
src/main/java/com/cx/cn/cxquartz/dao/TraffPictureMapper.java
src/main/java/com/cx/cn/cxquartz/dao/TraffPictureMapper.java
+1
-0
src/main/java/com/cx/cn/cxquartz/service/quartz/impl/EventWriteService.java
...cx/cn/cxquartz/service/quartz/impl/EventWriteService.java
+105
-0
src/main/java/com/cx/cn/cxquartz/service/quartz/impl/TokenCacheService.java
...cx/cn/cxquartz/service/quartz/impl/TokenCacheService.java
+108
-0
src/main/java/com/cx/cn/cxquartz/vo/ResponseEnum.java
src/main/java/com/cx/cn/cxquartz/vo/ResponseEnum.java
+38
-0
src/main/java/com/cx/cn/cxquartz/vo/ResultObj.java
src/main/java/com/cx/cn/cxquartz/vo/ResultObj.java
+152
-23
src/main/java/com/cx/cn/cxquartz/vo/TraffrecordData.java
src/main/java/com/cx/cn/cxquartz/vo/TraffrecordData.java
+104
-0
src/main/resources/application.yml
src/main/resources/application.yml
+4
-4
src/main/resources/file.properties
src/main/resources/file.properties
+9
-0
src/main/resources/mapper/SbtdspsrMapper.xml
src/main/resources/mapper/SbtdspsrMapper.xml
+1
-0
src/main/resources/mapper/TraffPictureMapper.xml
src/main/resources/mapper/TraffPictureMapper.xml
+3
-0
No files found.
src/main/java/com/cx/cn/cxquartz/controller/ExtController.java
View file @
36f0e3d1
...
@@ -7,13 +7,11 @@ import com.alibaba.fastjson.JSONObject;
...
@@ -7,13 +7,11 @@ import com.alibaba.fastjson.JSONObject;
import
com.cx.cn.cxquartz.bean.PatrolCtrlAlarm
;
import
com.cx.cn.cxquartz.bean.PatrolCtrlAlarm
;
import
com.cx.cn.cxquartz.bean.PatrolCtrlRecord
;
import
com.cx.cn.cxquartz.bean.PatrolCtrlRecord
;
import
com.cx.cn.cxquartz.bean.PictureTime
;
import
com.cx.cn.cxquartz.bean.PictureTime
;
import
com.cx.cn.cxquartz.bean.QuartzTaskInformations
;
import
com.cx.cn.cxquartz.job.WebSocket
;
import
com.cx.cn.cxquartz.job.WebSocket
;
import
com.cx.cn.cxquartz.service.quartz.*
;
import
com.cx.cn.cxquartz.service.quartz.*
;
import
com.cx.cn.cxquartz.service.quartz.impl.EventWriteService
;
import
com.cx.cn.cxquartz.util.*
;
import
com.cx.cn.cxquartz.util.*
;
import
com.cx.cn.cxquartz.vo.*
;
import
com.cx.cn.cxquartz.vo.*
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.tomcat.util.http.fileupload.IOUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -27,6 +25,7 @@ import sun.misc.BASE64Encoder;
...
@@ -27,6 +25,7 @@ import sun.misc.BASE64Encoder;
import
sun.net.www.protocol.ftp.FtpURLConnection
;
import
sun.net.www.protocol.ftp.FtpURLConnection
;
import
javax.imageio.ImageIO
;
import
javax.imageio.ImageIO
;
import
javax.jws.Oneway
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpSession
;
import
javax.servlet.http.HttpSession
;
...
@@ -72,6 +71,10 @@ public class ExtController {
...
@@ -72,6 +71,10 @@ public class ExtController {
@Value
(
"${file.getrtspbyurl}"
)
@Value
(
"${file.getrtspbyurl}"
)
private
String
getrtspbyurl
;
private
String
getrtspbyurl
;
@Value
(
"${file.publicpictureurl}"
)
private
String
publicpictureurl
;
@Autowired
@Autowired
private
RestTemplate
restTemplate
;
private
RestTemplate
restTemplate
;
...
@@ -109,6 +112,9 @@ public class ExtController {
...
@@ -109,6 +112,9 @@ public class ExtController {
@Autowired
@Autowired
CodeService
codeservice
;
CodeService
codeservice
;
@Autowired
EventWriteService
eventWriteService
;
private
static
CompletionService
<
PictureResult
>
threadService
=
new
ExecutorCompletionService
<
PictureResult
>(
ThreadPoolUtil
.
getPool
());
private
static
CompletionService
<
PictureResult
>
threadService
=
new
ExecutorCompletionService
<
PictureResult
>(
ThreadPoolUtil
.
getPool
());
@RequestMapping
(
value
=
"/patrolCtrlRecord"
,
method
=
RequestMethod
.
POST
)
@RequestMapping
(
value
=
"/patrolCtrlRecord"
,
method
=
RequestMethod
.
POST
)
...
@@ -212,7 +218,7 @@ public class ExtController {
...
@@ -212,7 +218,7 @@ public class ExtController {
//根据videoID查询 rtsp 值
//根据videoID查询 rtsp 值
List
<
Sbtdspsr
>
sbtdspsrlist
=
sbtdspsrService
.
selectByRtsp
(
videoid
);
List
<
Sbtdspsr
>
sbtdspsrlist
=
sbtdspsrService
.
selectByRtsp
(
videoid
);
if
(
sbtdspsrlist
.
size
()
==
0
)
{
if
(
sbtdspsrlist
.
size
()
==
0
)
{
logger
.
info
(
"设备不存在"
);
logger
.
info
(
videoid
+
"设备不存在"
);
return
ResultUtil
.
success
();
return
ResultUtil
.
success
();
}
}
Sbtdspsr
sbtdspsr
=
sbtdspsrlist
.
get
(
0
);
Sbtdspsr
sbtdspsr
=
sbtdspsrlist
.
get
(
0
);
...
@@ -360,7 +366,7 @@ public String getnewRtspVlue(String devicecode ){
...
@@ -360,7 +366,7 @@ public String getnewRtspVlue(String devicecode ){
String
recordtype
=
"1"
;
String
recordtype
=
"1"
;
//图片框选出来的范围
//图片框选出来的范围
Long
[]
roiarray
=
new
Long
[
4
];
Long
[]
roiarray
=
new
Long
[
4
];
String
videoid
=
""
;
String
videoid
=
""
,
tdmc
=
""
;
if
(
null
!=
mapList
&&
!
mapList
.
equals
(
""
)
&&
mapList
.
size
()>
0
)
{
if
(
null
!=
mapList
&&
!
mapList
.
equals
(
""
)
&&
mapList
.
size
()>
0
)
{
//获得该监控的检测业务与检测范围
//获得该监控的检测业务与检测范围
...
@@ -388,6 +394,9 @@ public String getnewRtspVlue(String devicecode ){
...
@@ -388,6 +394,9 @@ public String getnewRtspVlue(String devicecode ){
else
if
(
"objecth"
.
equals
(
maps
.
getKey
())){
else
if
(
"objecth"
.
equals
(
maps
.
getKey
())){
roiarray
[
3
]=
new
Long
(
String
.
valueOf
(
maps
.
getValue
()));
roiarray
[
3
]=
new
Long
(
String
.
valueOf
(
maps
.
getValue
()));
}
}
else
if
(
"tdmc"
.
equals
(
maps
.
getKey
())){
tdmc
=
String
.
valueOf
(
maps
.
getValue
());
}
}
}
}
}
//查询该监控下面还没有经过分析的数据
//查询该监控下面还没有经过分析的数据
...
@@ -396,7 +405,7 @@ public String getnewRtspVlue(String devicecode ){
...
@@ -396,7 +405,7 @@ public String getnewRtspVlue(String devicecode ){
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
if
(
videoid
.
split
(
"_"
).
length
<
2
){
if
(
videoid
.
split
(
"_"
).
length
<
2
){
logger
.
info
(
"监控不存在"
);
logger
.
info
(
"监控不存在"
+
videoid
);
return
ResultUtil
.
success
();
return
ResultUtil
.
success
();
}
}
...
@@ -440,6 +449,8 @@ public String getnewRtspVlue(String devicecode ){
...
@@ -440,6 +449,8 @@ public String getnewRtspVlue(String devicecode ){
logger
.
info
(
" no picturedata "
);
logger
.
info
(
" no picturedata "
);
continue
;
continue
;
}
}
TraffrecordData
sendtozhiui
=
new
TraffrecordData
();
//根据结构化统计查询是否超过密度,超过则预警
//根据结构化统计查询是否超过密度,超过则预警
Code
code
=
codeservice
.
selectalarmNum
(
recordtype
);
Code
code
=
codeservice
.
selectalarmNum
(
recordtype
);
roiarray
[
0
]
=
roiarray
[
0
]
-
30
;
roiarray
[
0
]
=
roiarray
[
0
]
-
30
;
...
@@ -457,15 +468,20 @@ public String getnewRtspVlue(String devicecode ){
...
@@ -457,15 +468,20 @@ public String getnewRtspVlue(String devicecode ){
traffpictureParamresult
.
setRecordtype
(
recordtype
);
traffpictureParamresult
.
setRecordtype
(
recordtype
);
traffPictureService
.
updateTraffpicture
(
traffpictureParamresult
);
traffPictureService
.
updateTraffpicture
(
traffpictureParamresult
);
}
}
else
{
return
ResultUtil
.
success
();
}
}
}
if
(((
"6"
.
equals
(
recordtype
)
||
"2"
.
equals
(
recordtype
))
//
if ((("6".equals(recordtype) || "2".equals(recordtype))
&&
(
null
!=
code
&&
null
!=
code
.
getAlarmnum
()
&&
code
.
getAlarmnum
()
<
objectList
.
size
()))
//
&& (null != code && null != code.getAlarmnum() && code.getAlarmnum() < objectList.size()))
&&
(!
"6"
.
equals
(
recordtype
)
&&
!
"2"
.
equals
(
recordtype
)))
{
//
&& (!"6".equals(recordtype) && !"2".equals(recordtype))) {
List
<
ObjectBoundingBox
>
list
=
new
ArrayList
<>();
List
<
ObjectBoundingBox
>
list
=
new
ArrayList
<>();
for
(
TraffpictureParam
traffpictureParam
:
objectList
)
{
for
(
TraffpictureParam
traffpictureParam
:
objectList
)
{
//根据imageid 获得 base64图片
//根据imageid 获得 base64图片
JSONObject
metadata
=
JSONObject
.
parseObject
(
String
.
valueOf
(
traffpictureParam
.
getMetadata
()));
JSONObject
metadata
=
JSONObject
.
parseObject
(
String
.
valueOf
(
traffpictureParam
.
getMetadata
()));
JSONObject
ObjectBoundingBox
=
metadata
.
getJSONObject
(
"ObjectBoundingBox"
);
JSONObject
ObjectBoundingBox
=
metadata
.
getJSONObject
(
"ObjectBoundingBox"
);
//获得物体特征值
if
(
null
==
ObjectBoundingBox
)
{
if
(
null
==
ObjectBoundingBox
)
{
list
.
add
(
new
ObjectBoundingBox
(
metadata
.
getIntValue
(
"LeftTopX"
)
+
roiarray
[
0
].
intValue
(),
list
.
add
(
new
ObjectBoundingBox
(
metadata
.
getIntValue
(
"LeftTopX"
)
+
roiarray
[
0
].
intValue
(),
metadata
.
getIntValue
(
"LeftTopY"
)
+
roiarray
[
1
].
intValue
(),
metadata
.
getIntValue
(
"LeftTopY"
)
+
roiarray
[
1
].
intValue
(),
...
@@ -473,146 +489,29 @@ public String getnewRtspVlue(String devicecode ){
...
@@ -473,146 +489,29 @@ public String getnewRtspVlue(String devicecode ){
metadata
.
getIntValue
(
"RightBtmY"
)
-
metadata
.
getIntValue
(
"LeftTopY"
)
metadata
.
getIntValue
(
"RightBtmY"
)
-
metadata
.
getIntValue
(
"LeftTopY"
)
));
));
}
else
{
}
else
{
list
.
add
(
new
ObjectBoundingBox
(
ObjectBoundingBox
.
getIntValue
(
"X"
)
+
roiarray
[
0
].
intValue
(),
list
.
add
(
new
ObjectBoundingBox
(
ObjectBoundingBox
.
getIntValue
(
"X"
)
+
roiarray
[
0
].
intValue
(),
ObjectBoundingBox
.
getIntValue
(
"Y"
)
+
roiarray
[
1
].
intValue
(),
ObjectBoundingBox
.
getIntValue
(
"Y"
)
+
roiarray
[
1
].
intValue
(),
ObjectBoundingBox
.
getIntValue
(
"W"
),
ObjectBoundingBox
.
getIntValue
(
"W"
),
ObjectBoundingBox
.
getIntValue
(
"H"
)
ObjectBoundingBox
.
getIntValue
(
"H"
)
));
));
}
}
if
(
null
!=
metadata
)
{
//根据对应的解析结果获得相应的数据,存放到对应的表中
traffpictureParam
.
setMetatype
(
String
.
valueOf
(
metadata
.
get
(
"Type"
)));
getMetaData
(
recordtype
,
roiarray
,
base64Encoder
,
transferRecord
,
traffpictureParamresult
,
list
,
traffpictureParam
,
metadata
);
//规定区域内出现告警对象
//setTraffpictureParam(recordtype, base64Encoder, transferRecord, traffpictureParam);
if
(
"1"
.
equals
(
metadata
.
get
(
"Type"
)))
{
//规定范围内检测到人
Pedestrian
meta
=
JSON
.
toJavaObject
(
metadata
,
Pedestrian
.
class
);
meta
.
setId
(
traffpictureParamresult
.
getId
());
pedestrianService
.
insertpedestrian
(
meta
);
if
(
null
!=
meta
.
getFaceBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getFaceBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getFaceBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getFaceBoundingBox
().
getW
(),
meta
.
getFaceBoundingBox
().
getH
()
));
}
if
(
null
!=
meta
.
getObjectBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getObjectBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getObjectBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getObjectBoundingBox
().
getW
(),
meta
.
getObjectBoundingBox
().
getH
()
));
}
if
(
null
!=
meta
.
getHeadBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getHeadBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getHeadBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getHeadBoundingBox
().
getW
(),
meta
.
getHeadBoundingBox
().
getH
()
));
}
if
(
null
!=
meta
.
getUpperBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getUpperBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getUpperBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getUpperBoundingBox
().
getW
(),
meta
.
getUpperBoundingBox
().
getH
()
));
}
if
(
null
!=
meta
.
getLowerBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getLowerBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getLowerBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getLowerBoundingBox
().
getW
(),
meta
.
getLowerBoundingBox
().
getH
()
));
}
}
else
if
(
null
!=
metadata
&&
"2"
.
equals
(
metadata
.
get
(
"Type"
)))
{
//车辆
Traffic
meta
=
JSON
.
toJavaObject
(
metadata
,
Traffic
.
class
);
meta
.
setId
(
traffpictureParamresult
.
getId
());
//新增到车辆详情表
trafficService
.
insertTraffic
(
meta
);
if
(
null
!=
meta
.
getObjectBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getObjectBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getObjectBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getObjectBoundingBox
().
getW
(),
meta
.
getObjectBoundingBox
().
getH
()
));
}
}
else
if
(
null
!=
metadata
&&
"3"
.
equals
(
metadata
.
get
(
"Type"
)))
{
Face
meta
=
JSON
.
toJavaObject
(
metadata
,
Face
.
class
);
meta
.
setId
(
traffpictureParamresult
.
getId
());
faceService
.
insertFace
(
meta
);
if
(
null
!=
meta
.
getFaceBoundingBox
())
{
traffpictureParam
.
setObjx
(
meta
.
getFaceBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
());
traffpictureParam
.
setObjy
(
meta
.
getFaceBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
());
traffpictureParam
.
setObjw
(
meta
.
getFaceBoundingBox
().
getW
());
traffpictureParam
.
setObjh
(
meta
.
getFaceBoundingBox
().
getH
());
}
if
(
null
!=
meta
.
getFaceBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getFaceBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getFaceBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getFaceBoundingBox
().
getW
(),
meta
.
getFaceBoundingBox
().
getH
()
));
}
if
(
null
!=
meta
.
getHeadBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getHeadBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getHeadBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getHeadBoundingBox
().
getW
(),
meta
.
getHeadBoundingBox
().
getH
()
));
}
//人骑车
}
else
if
(
null
!=
metadata
&&
"4"
.
equals
(
metadata
.
get
(
"Type"
)))
{
PeopleRideBicyc
meta
=
JSON
.
toJavaObject
(
metadata
,
PeopleRideBicyc
.
class
);
meta
.
setId
(
traffpictureParamresult
.
getId
());
peopleridebicycService
.
insertPeopleRideBicyc
(
meta
);
if
(
null
!=
meta
.
getFaceBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getFaceBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getFaceBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getFaceBoundingBox
().
getW
(),
meta
.
getFaceBoundingBox
().
getH
()
));
}
if
(
null
!=
meta
.
getObjectBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getObjectBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getObjectBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getObjectBoundingBox
().
getW
(),
meta
.
getObjectBoundingBox
().
getH
()
));
}
}
}
}
}
//更新 traffpicture特征值
//更新 traffpicture特征值
try
{
try
{
byte
[]
Img
=
FTPUtil
.
getFtpPicBytes
(
traffpictureParamresult
.
getImagedata
());
byte
[]
Img
=
FTPUtil
.
getFtpPicBytes
(
traffpictureParamresult
.
getImagedata
());
if
(
null
!=
Img
)
{
if
(
null
!=
Img
)
{
ByteArrayInputStream
bais
=
new
ByteArrayInputStream
(
Img
);
ByteArrayInputStream
bais
=
new
ByteArrayInputStream
(
Img
);
BufferedImage
image
=
ImageIO
.
read
(
bais
);
BufferedImage
image
=
ImageIO
.
read
(
bais
);
Graphics
g
=
image
.
getGraphics
();
Graphics
g
=
image
.
getGraphics
();
g
.
setColor
(
Color
.
RED
);
g
.
setColor
(
Color
.
RED
);
//遍历所有特征值,画到图片上
for
(
ObjectBoundingBox
box
:
list
)
{
for
(
ObjectBoundingBox
box
:
list
)
{
//if (null != box.getX() && null != traffpictureParam.getObjy() && null != traffpictureParam.getObjw() && null != traffpictureParam.getObjh())
if
(
null
!=
box
)
{
if
(
null
!=
box
)
g
.
drawRect
(
box
.
getX
(),
box
.
getY
(),
box
.
getW
(),
box
.
getH
());
g
.
drawRect
(
box
.
getX
(),
}
box
.
getY
(),
box
.
getW
(),
box
.
getH
());
}
}
ByteArrayOutputStream
stream
=
new
ByteArrayOutputStream
();
ByteArrayOutputStream
stream
=
new
ByteArrayOutputStream
();
...
@@ -622,16 +521,29 @@ public String getnewRtspVlue(String devicecode ){
...
@@ -622,16 +521,29 @@ public String getnewRtspVlue(String devicecode ){
String
filename
=
DateUtils
.
formatCurrDateNoSign
()
+
"imgdata.png"
;
String
filename
=
DateUtils
.
formatCurrDateNoSign
()
+
"imgdata.png"
;
String
ftputl
=
FTPUtil
.
getFtpUrl
(
ftp
)
+
basepath
+
"/"
+
traffpictureParamresult
.
getId
()
+
"/"
+
filename
;
String
ftputl
=
FTPUtil
.
getFtpUrl
(
ftp
)
+
basepath
+
"/"
+
traffpictureParamresult
.
getId
()
+
"/"
+
filename
;
traffpictureParamresult
.
setImagedata
(
ftputl
);
traffpictureParamresult
.
setImagedata
(
ftputl
);
FTPUtil
.
uploadFile
(
ftp
,
basepath
+
"/"
+
traffpictureParamresult
.
getId
(),
filename
,
base64Encoder
.
encode
(
stream
.
toByteArray
()));
//base 64 图片
String
png_base64
=
base64Encoder
.
encode
(
stream
.
toByteArray
()).
trim
();
FTPUtil
.
uploadFile
(
ftp
,
basepath
+
"/"
+
traffpictureParamresult
.
getId
(),
filename
,
png_base64
);
}
}
}
catch
(
Exception
ex
)
{
}
catch
(
Exception
ex
)
{
logger
.
info
(
"base64画框异常:"
+
ex
.
toString
());
logger
.
info
(
"base64画框异常:"
+
ex
.
toString
());
}
}
traffPictureService
.
updateTraffpicture
(
traffpictureParamresult
);
traffPictureService
.
updateTraffpicture
(
traffpictureParamresult
);
//推送告警
//推送给第三方的base64
WebSocket
.
GroupSending
(
JSONObject
.
toJSONString
(
traffpictureParamresult
));
sendtozhiui
.
setImagedata
(
publicpictureurl
+
"/fielagent?ftpPath="
+
traffpictureParamresult
.
getImagedata
());
//赋值推送第三方数据
sendtozhiui
.
setRecordlevel
(
code
.
getAlarmlevel
());
sendtozhiui
.
setTargetnum
(
code
.
getMaxnum
());
sendtozhiui
.
setRecordname
(
code
.
getName
());
sendtozhiui
.
setTdmc
(
tdmc
);
//推送给第三方
eventWriteService
.
sendEvent
(
traffpictureParamresult
,
sendtozhiui
);
//推送告警到前端
webSocket
.
GroupSending
(
JSONObject
.
toJSONString
(
traffpictureParamresult
));
}
}
}
}
catch
(
Exception
ex
)
{
}
catch
(
Exception
ex
)
{
//推送失败
//推送失败
transferRecord
.
setProcessstatus
(
"-3"
);
transferRecord
.
setProcessstatus
(
"-3"
);
...
@@ -648,6 +560,122 @@ public String getnewRtspVlue(String devicecode ){
...
@@ -648,6 +560,122 @@ public String getnewRtspVlue(String devicecode ){
return
ResultUtil
.
fail
();
return
ResultUtil
.
fail
();
}
}
private
void
getMetaData
(
String
recordtype
,
Long
[]
roiarray
,
BASE64Encoder
base64Encoder
,
TraffAlarmRecord
transferRecord
,
TraffpictureParam
traffpictureParamresult
,
List
<
ObjectBoundingBox
>
list
,
TraffpictureParam
traffpictureParam
,
JSONObject
metadata
)
{
if
(
null
!=
metadata
)
{
traffpictureParamresult
.
setMetatype
(
String
.
valueOf
(
metadata
.
get
(
"Type"
)));
//规定区域内出现告警对象
setTraffpictureParam
(
recordtype
,
base64Encoder
,
transferRecord
,
traffpictureParamresult
);
if
(
"1"
.
equals
(
metadata
.
get
(
"Type"
)))
{
//规定范围内检测到人
Pedestrian
meta
=
JSON
.
toJavaObject
(
metadata
,
Pedestrian
.
class
);
meta
.
setId
(
traffpictureParamresult
.
getId
());
pedestrianService
.
insertpedestrian
(
meta
);
if
(
null
!=
meta
.
getFaceBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getFaceBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getFaceBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getFaceBoundingBox
().
getW
(),
meta
.
getFaceBoundingBox
().
getH
()
));
}
if
(
null
!=
meta
.
getObjectBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getObjectBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getObjectBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getObjectBoundingBox
().
getW
(),
meta
.
getObjectBoundingBox
().
getH
()
));
}
if
(
null
!=
meta
.
getHeadBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getHeadBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getHeadBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getHeadBoundingBox
().
getW
(),
meta
.
getHeadBoundingBox
().
getH
()
));
}
if
(
null
!=
meta
.
getUpperBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getUpperBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getUpperBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getUpperBoundingBox
().
getW
(),
meta
.
getUpperBoundingBox
().
getH
()
));
}
if
(
null
!=
meta
.
getLowerBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getLowerBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getLowerBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getLowerBoundingBox
().
getW
(),
meta
.
getLowerBoundingBox
().
getH
()
));
}
}
else
if
(
null
!=
metadata
&&
"2"
.
equals
(
metadata
.
get
(
"Type"
)))
{
//车辆
Traffic
meta
=
JSON
.
toJavaObject
(
metadata
,
Traffic
.
class
);
meta
.
setId
(
traffpictureParamresult
.
getId
());
//新增到车辆详情表
trafficService
.
insertTraffic
(
meta
);
if
(
null
!=
meta
.
getObjectBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getObjectBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getObjectBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getObjectBoundingBox
().
getW
(),
meta
.
getObjectBoundingBox
().
getH
()
));
}
}
else
if
(
null
!=
metadata
&&
"3"
.
equals
(
metadata
.
get
(
"Type"
)))
{
Face
meta
=
JSON
.
toJavaObject
(
metadata
,
Face
.
class
);
meta
.
setId
(
traffpictureParamresult
.
getId
());
faceService
.
insertFace
(
meta
);
if
(
null
!=
meta
.
getFaceBoundingBox
())
{
traffpictureParam
.
setObjx
(
meta
.
getFaceBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
());
traffpictureParam
.
setObjy
(
meta
.
getFaceBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
());
traffpictureParam
.
setObjw
(
meta
.
getFaceBoundingBox
().
getW
());
traffpictureParam
.
setObjh
(
meta
.
getFaceBoundingBox
().
getH
());
}
if
(
null
!=
meta
.
getFaceBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getFaceBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getFaceBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getFaceBoundingBox
().
getW
(),
meta
.
getFaceBoundingBox
().
getH
()
));
}
if
(
null
!=
meta
.
getHeadBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getHeadBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getHeadBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getHeadBoundingBox
().
getW
(),
meta
.
getHeadBoundingBox
().
getH
()
));
}
//人骑车
}
else
if
(
null
!=
metadata
&&
"4"
.
equals
(
metadata
.
get
(
"Type"
)))
{
PeopleRideBicyc
meta
=
JSON
.
toJavaObject
(
metadata
,
PeopleRideBicyc
.
class
);
meta
.
setId
(
traffpictureParamresult
.
getId
());
peopleridebicycService
.
insertPeopleRideBicyc
(
meta
);
if
(
null
!=
meta
.
getFaceBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getFaceBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getFaceBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getFaceBoundingBox
().
getW
(),
meta
.
getFaceBoundingBox
().
getH
()
));
}
if
(
null
!=
meta
.
getObjectBoundingBox
())
{
list
.
add
(
new
ObjectBoundingBox
(
meta
.
getObjectBoundingBox
().
getX
()
+
roiarray
[
0
].
intValue
(),
meta
.
getObjectBoundingBox
().
getY
()
+
roiarray
[
1
].
intValue
(),
meta
.
getObjectBoundingBox
().
getW
(),
meta
.
getObjectBoundingBox
().
getH
()
));
}
}
}
}
/***
/***
* 原来推送
* 原来推送
* @param recordtype
* @param recordtype
...
...
src/main/java/com/cx/cn/cxquartz/controller/IndexController.java
View file @
36f0e3d1
...
@@ -4,6 +4,8 @@ import com.cx.cn.cxquartz.bean.QuartzTaskInformations;
...
@@ -4,6 +4,8 @@ import com.cx.cn.cxquartz.bean.QuartzTaskInformations;
import
com.cx.cn.cxquartz.service.quartz.QuartzService
;
import
com.cx.cn.cxquartz.service.quartz.QuartzService
;
import
com.cx.cn.cxquartz.util.Page
;
import
com.cx.cn.cxquartz.util.Page
;
import
com.cx.cn.cxquartz.vo.GoalStructureParam
;
import
com.cx.cn.cxquartz.vo.GoalStructureParam
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.tomcat.util.http.fileupload.IOUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -11,8 +13,13 @@ import org.springframework.stereotype.Controller;
...
@@ -11,8 +13,13 @@ import org.springframework.stereotype.Controller;
import
org.springframework.ui.Model
;
import
org.springframework.ui.Model
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.client.RestTemplate
;
import
org.springframework.web.client.RestTemplate
;
import
sun.net.www.protocol.ftp.FtpURLConnection
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.*
;
import
java.net.HttpURLConnection
;
import
java.net.URL
;
import
java.util.List
;
import
java.util.List
;
@Controller
@Controller
...
@@ -67,5 +74,86 @@ public class IndexController {
...
@@ -67,5 +74,86 @@ public class IndexController {
public
String
images
(
@RequestBody
GoalStructureParam
param
)
{
public
String
images
(
@RequestBody
GoalStructureParam
param
)
{
return
"{\"ret\":\"200\",\"error_msg\":\"OK\",\"ObjectList\":[{\"ImageID\":\"1\",\"ObjectID\":1,\"Metadata\":{\"Gender\":\"1\",\"Age\":\"32\",\"Angle\":\"128\",\"HeadBoundingBox\":{\"x\":96,\"y\":16,\"w\":107,\"h\":136},\"FaceBoundingBox\":{\"x\":115,\"y\":61,\"w\":57,\"h\":77},\"UpperBoundingBox\":{\"x\":34,\"y\":123,\"w\":232,\"h\":263},\"LowerBoundingBox\":{\"x\":74,\"y\":309,\"w\":176,\"h\":408},\"CoatLength\":\"2\",\"CoatTexture\":\"1\",\"CoatColor\":[\"2\"],\"CoatColorNums\":\"1\",\"TrousersLength\":\"1\",\"TrousersTexture\":\"1\",\"TrousersColor\":[\"5\"],\"TrousersColorNums\":\"1\",\"HairStyle\":\"2\",\"HasHat\":\"1\",\"HasGlasses\":\"0\",\"HasMask\":\"0\",\"HasBackpack\":\"0\",\"HasCarrybag\":\"0\",\"HasUmbrella\":\"0\",\"HasTrolley\":\"-1\",\"HasLuggage\":\"-1\",\"LuggageColor\":[],\"LuggageColorNums\":\"0\",\"HasKnife\":\"-1\",\"ObjectBoundingBox\":{\"x\":26,\"y\":13,\"w\":256,\"h\":708},\"TrafficViolation\":\"-1\",\"Type\":\"6\"},\"Feature\":\"UVNURgUA//0BCP4BAQcAAwQBBvsCB/v8Af4A+wD5+AcBAgL9AgIEAgH4AQQA+f77+P77AAAIA/8A+QQJ/fz8AgACBfsAAgAC/AcIAQD++fgCAAUB/gb//AEAAf4B/QP+AQD0/QMDAfkD+f//A/7+/AD6B/f7/AH7/gAFAAMBAPb/AAP//wAIBQD7Af0FAAD9AAgC/gYF/f/8DAAC//4BAP/6AgECAgADAPz++v0A/wD//fz5AAIB/f0IBAQA/v8CBwP//wYE+/sCCP0BBAMD/gQA/QH/AgL6AgX/BP7/+AD5A/75/QH+A/8H/QAACP//AQT7+QICAfv/Afj9A/0D/wAA/f/8/wYL/wACAQYAAAAD/ggAAQMABv/6BAIADPv+A/wEAQAA/AD5AwT///4BAPz8CgUCDf78AwEA/f4AA/8C/wQB/P8A/wEA/gsAAwEF/v0AAf7/+QQECAcGAP0AAgH//AAHBwD3/fwB+/7/AQj//wUFAP/+/gYBAgYD+fv/BwH8Af0EBAD+AP3++gIH+v8CAPQEAAT//gDzAP0A+AL6BP4I9wMJAP0CAPX6APz9/gALAP7/BgQD+wIDBPn+CwIH/fz7A/3+9wAJ/QD9AP/++wME/v/+Avv+APoFAAAB+gD5APn//gEGBAME/wX5/AD/CAL+9QD8BAD2/wMCCf38+/oB+f0C/f39AQL+AAEAAgAE/wEIA///AP8HAQT+8fn7AP4AAAMA+QQDAwIB//j+/QEAAAIAAgj/A/n8AAP9AQD8AQYF+PgAA/4B+gEE+QYA/wYAB/0BAQD+/P/+BQf5BwIAAPsBBAEGAP4JAwEE////AAEF/wL4AAAFAQYA/vz+/AACAv8CAwIA+wIAAAUJAP0C/wIHAAEABgQF/QAEAAL7BP0A//wC+vr+/AIGAwAEAP0A/P/8BAD//AD5+wQEAAEHAv/8AP77+vQEBP4BAAAAAAr7/wD5AgD7BAEA/gT7AAAEAAMABPkLAQYABff+/wEDAP8EA/4AAf8A/gX9+wACAv3//f7/BAH+Bf/+AAH/AAAE9wAHAP/+/P8DAQD7/QQB/P3/AwAAAQAB/wD+BwAB/vwAAAL/AAYAAAf/Af76+fj6AP4F/gD9AgIB/Qr59f8CAAMCBgQHAf0FAP34AAQH/P79/wQGBA4D+f4AA/v+AAAA+wIE/gIH+QP2AQQGAwAE/vwI/P4GBwD/AAX4AAP+/f0A/Af/AgEBA/v9BPgDBwAC/wD8Bv36A/gBAAH+AAX+BP/9AAIF+AD8Av4B/wT/AQAAAQL/BPwA/PsA/AMDBfb/+AEBCAL+//36APz//wEHBv3/BQAA/QP9+wABAQL6//4CAAH/CP/+AAMBAf0CAAD9+g==\",\"BucketID\":32,\"BucketIDList\":[32,87,20,68,45,78,10,6,52,65,1,94,79,16,61,38,55,89,43,51,60,27,54,25,17,83,9,40,14,22,50,44,18,66,82,4,48,31,69,77,90,63,92,73,70,84,67,23,12,3,74,47,21,41,28,96,36,97,5,85,39,95,64,26,80,53,91,37,34,57,46,15,2,93,11,98,75,81,56,0,24,62,86,13,19,71,72,7,58,29,59,49,88,76,35,99,33,30,42,8],\"FaceFeature\":\"AwQF+foK/vcCAAD4/wD7CQH39vP7/gz/CAAB/AX++AAI/v8D+gQAAP0G/wAA+/oAAAP+Af79CwEAAgAA+/oFBe/3AgIFAgP0/vr8Cf4C+AMHBPn5Afr5AQQGBQD58gMG+wQTAgTzAPr9BQYEA/j//gT8+wXx9wMC+gcH/wAC8v0A+gD7+wkE/gAA7wL78gX/AgIGBvr8AAgD/woEAvkEAwv5CP/8/fz+/fwMAvr7AgD4APcEAA0F//kAAAAG+gADAQEB/wD+AQgCBg35+QQC/vv//vcAAPgEAwAAAgD9Af32/wMLAwD8B/75AQIB+/z/+v4AA/n//gL8+/0BAPv//PgIAAD0CQALAAUF/fwA/wYBAQf9+/f++Af49gMB/AMABwAA9vr5//sE/PoD+QP6+wsA/wEB+QIC+/8B/wD88QkACAIAAPn5AAUD/QL++P4H/f3+A/gG/f8G/QkA8wD0BAMBBwD59AAB+QUA//v2/wEJAQD8DAL5CPoA+/b+/Qr5AwcA/AD+CAEDBgEH/Qb+AQUHAAQK/fUA+/sI9/0I+QcKBQP6/gX0+QgI9gIBAAMFAAAA/vcD/vYI9wj9+v76C/gAAgIH+gMHBP8IAAT6BgAI+vsJ/v7/DAUABgIA+gAHBf0D+/oDAwEABv359QAB+AEG8w7+//0ABf78CPr8Afs=\",\"FaceBucketID\":91,\"FaceBucketIDList\":[91,12,50,84,52,13,57,54,4,53,70,36,64,58,81,10,78,63,35,75,34,16,86,3,99,40,26,42,48,30,25,23,11,62,72,51,18,17,46,27,97,61,49,43,66,37,89,19,24,1,98,76,32,83,44,96,87,31,8,20,33,21,6,56,41,88,82,47,69,93,14,79,38,29,80,85,90,94,55,60,67,95,9,2,71,65,68,77,7,74,59,28,92,73,15,39,22,0,45,5],\"FaceQuality\":\"0.379721\",\"FaceYaw\":\"-0.135311\",\"FacePitch\":\"0.508456\",\"FaceRoll\":\"0.000000\",\"FaceBlurry\":\"0.555109\",\"ObjectImageData\":\"\",\"FaceImageData\":\"\",\"Index\":1},{\"ImageID\":\"3\",\"ObjectID\":1,\"Metadata\":{\"Angle\":\"128\",\"VehicleClass\":\"1\",\"VehicleColor\":[\"9\"],\"VehicleColorNums\":\"1\",\"VehicleBrand\":\"\\u96ea\\u4f5b\\u5170-\\u79d1\\u9c81\\u5179-2009_2013\",\"VehicleMainBrandName\":\"\\u96ea\\u4f5b\\u5170\",\"VehicleSubBrandName\":\"\\u79d1\\u9c81\\u5179\",\"VehicleYearName\":\"2009_2013\",\"HasPlate\":\"1\",\"PlateClass\":\"1\",\"PlateColor\":\"2\",\"PlateNo\":\"\\u6d59AJ079B\",\"PlateNeatness\":\"2\",\"Sunvisor\":\"0\",\"Paper\":\"0\",\"Decoration\":\"0\",\"Drop\":\"1\",\"Tag\":\"1\",\"SafetyBelt\":{\"MainDriver\":\"-1\",\"CoDriver\":\"-1\"},\"HasCall\":\"-1\",\"HasSkylight\":\"0\",\"HasBaggage\":\"0\",\"HasAerial\":\"0\",\"HasCrash\":\"-1\",\"HasDanger\":\"0\",\"HighwayTollVehicles\":\"1\",\"ObjectBoundingBox\":{\"x\":41,\"y\":40,\"w\":894,\"h\":717},\"TrafficViolation\":\"-1\",\"Type\":\"6\"},\"Feature\":\"AAAAAAAAAAAAAAAPAAAAAAAKABQAAAAAAAAAAAAAAAAhAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAAAAAAAAAAAEwELAAAAAAAAAAAAAAAAAAAAAAAFCQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAABIAAAAAABMAAAEAAAAAAAAAAAAAAAAAABAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAHgAAAAAAAAAAAAAAAgAAAAAHAAATAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAAAAAAAAAcAAAAAB8AAAAAAAAAAAAAAAAAAAAAABoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAMDgAAAAAAAB0AAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAA=\",\"BucketID\":76,\"BucketIDList\":[76,91,82,57,36,51,75,55,71,43,84,63,8,98,83,65,90,60,35,3,37,39,74,2,12,9,1,20,79,32,95,49,33,58,42,66,38,69,45,56,59,0,87,19,41,34,21,14,13,6,4,26,68,96,72,7,85,29,48,40,88,99,23,46,27,18,77,78,11,97,17,50,15,61,16,31,80,44,52,25,10,86,92,5,54,53,73,89,94,93,70,62,30,47,64,22,28,67,81,24],\"FaceFeature\":\"\",\"FaceBucketID\":-1,\"FaceBucketIDList\":[],\"FaceQuality\":\"0.000000\",\"FaceYaw\":\"0.000000\",\"FacePitch\":\"0.000000\",\"FaceRoll\":\"0.000000\",\"FaceBlurry\":\"0.000000\",\"ObjectImageData\":\"\",\"FaceImageData\":\"\",\"Index\":1},{\"ImageID\":\"4\",\"ObjectID\":1,\"Metadata\":{\"Gender\":\"1\",\"Age\":\"16\",\"Angle\":\"128\",\"BikeClass\":\"1\",\"SocialAttribute\":\"1\",\"Enterprise\":\"-1\",\"FaceBoundingBox\":{\"x\":145,\"y\":65,\"w\":54,\"h\":66},\"CoatLength\":\"2\",\"CoatTexture\":\"5\",\"CoatColor\":[\"2\"],\"CoatColorNums\":\"1\",\"HelmetColor\":\"-1\",\"HasHelmet\":\"0\",\"HasGlasses\":\"1\",\"HasMask\":\"0\",\"HasBackpack\":\"0\",\"HasCarrybag\":\"-1\",\"HasUmbrella\":\"0\",\"HasPlate\":\"-1\",\"PlateNo\":\"-1\",\"HasPassenger\":\"1\",\"ObjectBoundingBox\":{\"x\":54,\"y\":16,\"w\":276,\"h\":635},\"TrafficViolation\":\"-1\",\"Type\":\"6\"},\"Feature\":\"UVNURgUA/wACAf/3AfwEA/kC/AMAAwAEAQACAPv+AAAB/wMHAgEA/wAGAAj/+AD7APwCAwkD9wsAAP4CBvn7/wz5A/wBBP8D/QICCAUCBv/7AgABAv7+AAH9AAUC/AX/AvsC/P4CAv39BAMA/gAAAAIA/wT6/v77A/YEAPoB//sG//7+/wD+/QAA/AMAAAQCAvz8/P3/AAH9+gX8/wD8/fr7AQAD//oA+AECAAAFAAH+/QH7/gIHAgYA/vz+AwADAgQCAgAL+wD9BgMGBv8E+/oF/P4H/wMD/gQC/wQH/v/4Agn9BQAC/wAE/P37BP/7AgIA/gj8APv7CAL9/vkABgL7/fz9/AD1BwD7AwAAAwH7AAb7+v4AAwX6/PsDBwMA/wH9AQD8AQP8APz7/vb8APoDAAT8AP0FAwYG/P39/P4B/vkA/f8AAgQBB/0D+wAFBwX4Aff+Bvz2/wEEBAIABQQD/wABAAMA//0AAP/+/wAC9/4AAfz+AAEF/f/6CAD9Bfn/APn9CwP3BAABBAAIAfr8/wP/CQn9BgL+Bf38A/z89gf6AAf9//wABAP9AgT19/4DAQMCAQQDAAABBf76+gEC/Pv9//4E//76AAAACQAA//kE//sDCfsGA/z7AAD7BAMAAAIAAgMA/P0D/wIE/v36//wAAgX8/voCAAT8BAkCAgEBAfwG+gEA/vr++AYAAQL7AAcAAP8BAAH9Af8A+QD+Agj7+wID/AAB+QcD//4ACQMEAvv+AvwBB/r7/gL/+AL7A/78+/4AAP39/QEFAwEA/QECCfz6AfwE/QMAAwD/Av4HAPz/AP4F/ggD+gMH+/UH+wID/wQGBPr2BP8KBAP/+/7//AP2/QT6//4CBAAFBgAFBf4E//v9BgADAAH9/gb4BAQHAAEA/QIB/vsE+/8GAPb7Av79AAD4AP4B+wf+/P4ABf79/wD/+QQA+fkB/voAA/oDAQUDAP79BAkGAAn/AQMB//76APz8BQD9AgEB/Pf6/wcAAwcHAgEA/QH/AP/6A/75BP8E/QD+AgT+AwEF+PkC//37/f79/gAAAQUA+AEEAAX9/wL8AgAFAwAA+v8G+wQA/QEF/wD+BAAGAwABAf0JAgMD+wUGAf39APoA/gQHAAID/AAF//8GA//8/QUC/gEC/vwGAv0BAAD9/ggCAAYBAwL/AQD9/fYD/wIE/f/4BP4AAAD8+wH5Bwb7AAQF+v/0//j9+/v/AP4CAgAA/v4AAP7+Bfv/CwECAQD7CgH5AQEAAQQAAP76APkABQIBBv0JAwABBwD++wD+//35+QPy/v0FAAYC+QD9Avr5CgQIA/35/AADAQH6+AEIAwEEAAMA/AMD+wADAAP///kFBAEBAA==\",\"BucketID\":5,\"BucketIDList\":[5,3,83,30,43,82,55,80,46,51,61,79,97,67,21,91,88,90,99,12,23,0,1,36,47,54,37,27,14,50,16,8,53,25,52,29,18,60,38,98,62,4,15,2,20,22,17,96,65,44,75,59,93,66,31,10,45,48,13,7,57,76,72,77,56,94,81,87,95,6,92,69,74,39,35,26,34,71,41,85,64,49,24,42,73,78,58,63,89,11,86,68,32,28,19,9,40,33,70,84],\"FaceFeature\":\"BQD5+Af/BP4I/AD7AP/9AAcC/QT6/P4HAfr9B/sIBf8O/AD8BwYKCA0AAv77/gAE+gAL/wMA/QD9AAAG/vv8AAP7BvwBAAn4AAf/AQAOAP8A7wIBAv8EAwAFAf/5CPoABQEDBwEFBQb5/fb+AO4G+AAB/wML9PsAA/oHBwYF/Pz7/gUK9QUABgEE+wH8AgL6+gb3AwEAAxL7CwD/DPcFAf30AAPz/QAE/QAABvn9AwD2/wQCAwACAQAKBAUD/v0A/voE//0B+Ab//vkC+vj/AAH7+AL7A/sDAPj7Bvn+/QoGAwEA/v//AP4D+wQDAf8K/QP2BgD5/QD//gEKA/v+BwAAAf3xAf/+/gT9AwP8DADzBw4AAvn//wAE+QH5AQv3C+38/Pf9/QII8gID9wMFCggFAv/9AvsEBvkACP8G9/z9AP/7/fwE+v39DPgAAAAB/fr5A/n8/wIDAAQK/wH+AwAAAvwADQoKAgAFAfsF+vsE//35C/3zCAD9BPsB/wMGB/n5/Pv0+Pb+BPn5/wMKAQAB8fT9Awf++/YAAAICAwUG+wD0+fkBB/0AAAQIBfgEBPkG/wcJAgD7CAv1Avf9AQYAAAEDAPYC+foJ+/78APwD8f4A/gUBB/7///oLAwD/AAUD+/39+PsH+QIF9gMEA/oGAQsMBQkHA/wB+PwCAgA=\",\"FaceBucketID\":82,\"FaceBucketIDList\":[82,45,63,31,16,1,7,98,40,24,65,19,62,48,94,72,92,17,91,52,77,76,85,87,81,21,93,64,37,42,30,78,25,61,9,12,22,2,13,34,4,15,46,3,14,99,90,28,66,29,75,68,80,59,60,88,69,83,36,55,11,44,96,89,10,26,49,50,73,6,53,20,47,86,58,84,27,8,70,43,57,71,97,79,0,67,54,33,23,95,56,5,41,38,51,32,74,39,35,18],\"FaceQuality\":\"0.365118\",\"FaceYaw\":\"0.257412\",\"FacePitch\":\"0.390233\",\"FaceRoll\":\"0.000000\",\"FaceBlurry\":\"0.475882\",\"ObjectImageData\":\"\",\"FaceImageData\":\"\",\"Index\":1},{\"ImageID\":\"2\",\"ObjectID\":1,\"Metadata\":{\"Gender\":\"1\",\"Age\":\"32\",\"HeadBoundingBox\":{\"x\":96,\"y\":16,\"w\":107,\"h\":136},\"FaceBoundingBox\":{\"x\":115,\"y\":61,\"w\":57,\"h\":77},\"HairStyle\":\"2\",\"HasHat\":\"1\",\"HasMask\":\"1\",\"HasGlasses\":\"0\",\"Type\":\"6\"},\"Feature\":\"UVNURgUA//0BCP4BAQcAAwQBBvsCB/v8Af4A+wD5+AcBAgL9AgIEAgH4AQQA+f77+P77AAAIA/8A+QQJ/fz8AgACBfsAAgAC/AcIAQD++fgCAAUB/gb//AEAAf4B/QP+AQD0/QMDAfkD+f//A/7+/AD6B/f7/AH7/gAFAAMBAPb/AAP//wAIBQD7Af0FAAD9AAgC/gYF/f/8DAAC//4BAP/6AgECAgADAPz++v0A/wD//fz5AAIB/f0IBAQA/v8CBwP//wYE+/sCCP0BBAMD/gQA/QH/AgL6AgX/BP7/+AD5A/75/QH+A/8H/QAACP//AQT7+QICAfv/Afj9A/0D/wAA/f/8/wYL/wACAQYAAAAD/ggAAQMABv/6BAIADPv+A/wEAQAA/AD5AwT///4BAPz8CgUCDf78AwEA/f4AA/8C/wQB/P8A/wEA/gsAAwEF/v0AAf7/+QQECAcGAP0AAgH//AAHBwD3/fwB+/7/AQj//wUFAP/+/gYBAgYD+fv/BwH8Af0EBAD+AP3++gIH+v8CAPQEAAT//gDzAP0A+AL6BP4I9wMJAP0CAPX6APz9/gALAP7/BgQD+wIDBPn+CwIH/fz7A/3+9wAJ/QD9AP/++wME/v/+Avv+APoFAAAB+gD5APn//gEGBAME/wX5/AD/CAL+9QD8BAD2/wMCCf38+/oB+f0C/f39AQL+AAEAAgAE/wEIA///AP8HAQT+8fn7AP4AAAMA+QQDAwIB//j+/QEAAAIAAgj/A/n8AAP9AQD8AQYF+PgAA/4B+gEE+QYA/wYAB/0BAQD+/P/+BQf5BwIAAPsBBAEGAP4JAwEE////AAEF/wL4AAAFAQYA/vz+/AACAv8CAwIA+wIAAAUJAP0C/wIHAAEABgQF/QAEAAL7BP0A//wC+vr+/AIGAwAEAP0A/P/8BAD//AD5+wQEAAEHAv/8AP77+vQEBP4BAAAAAAr7/wD5AgD7BAEA/gT7AAAEAAMABPkLAQYABff+/wEDAP8EA/4AAf8A/gX9+wACAv3//f7/BAH+Bf/+AAH/AAAE9wAHAP/+/P8DAQD7/QQB/P3/AwAAAQAB/wD+BwAB/vwAAAL/AAYAAAf/Af76+fj6AP4F/gD9AgIB/Qr59f8CAAMCBgQHAf0FAP34AAQH/P79/wQGBA4D+f4AA/v+AAAA+wIE/gIH+QP2AQQGAwAE/vwI/P4GBwD/AAX4AAP+/f0A/Af/AgEBA/v9BPgDBwAC/wD8Bv36A/gBAAH+AAX+BP/9AAIF+AD8Av4B/wT/AQAAAQL/BPwA/PsA/AMDBfb/+AEBCAL+//36APz//wEHBv3/BQAA/QP9+wABAQL6//4CAAH/CP/+AAMBAf0CAAD9+g==\",\"BucketID\":32,\"BucketIDList\":[32,87,20,68,45,78,10,6,52,65,1,94,79,16,61,38,55,89,43,51,60,27,54,25,17,83,9,40,14,22,50,44,18,66,82,4,48,31,69,77,90,63,92,73,70,84,67,23,12,3,74,47,21,41,28,96,36,97,5,85,39,95,64,26,80,53,91,37,34,57,46,15,2,93,11,98,75,81,56,0,24,62,86,13,19,71,72,7,58,29,59,49,88,76,35,99,33,30,42,8],\"FaceFeature\":\"AwQF+foK/vcCAAD4/wD7CQH39vP7/gz/CAAB/AX++AAI/v8D+gQAAP0G/wAA+/oAAAP+Af79CwEAAgAA+/oFBe/3AgIFAgP0/vr8Cf4C+AMHBPn5Afr5AQQGBQD58gMG+wQTAgTzAPr9BQYEA/j//gT8+wXx9wMC+gcH/wAC8v0A+gD7+wkE/gAA7wL78gX/AgIGBvr8AAgD/woEAvkEAwv5CP/8/fz+/fwMAvr7AgD4APcEAA0F//kAAAAG+gADAQEB/wD+AQgCBg35+QQC/vv//vcAAPgEAwAAAgD9Af32/wMLAwD8B/75AQIB+/z/+v4AA/n//gL8+/0BAPv//PgIAAD0CQALAAUF/fwA/wYBAQf9+/f++Af49gMB/AMABwAA9vr5//sE/PoD+QP6+wsA/wEB+QIC+/8B/wD88QkACAIAAPn5AAUD/QL++P4H/f3+A/gG/f8G/QkA8wD0BAMBBwD59AAB+QUA//v2/wEJAQD8DAL5CPoA+/b+/Qr5AwcA/AD+CAEDBgEH/Qb+AQUHAAQK/fUA+/sI9/0I+QcKBQP6/gX0+QgI9gIBAAMFAAAA/vcD/vYI9wj9+v76C/gAAgIH+gMHBP8IAAT6BgAI+vsJ/v7/DAUABgIA+gAHBf0D+/oDAwEABv359QAB+AEG8w7+//0ABf78CPr8Afs=\",\"FaceBucketID\":91,\"FaceBucketIDList\":[91,12,50,84,52,13,57,54,4,53,70,36,64,58,81,10,78,63,35,75,34,16,86,3,99,40,26,42,48,30,25,23,11,62,72,51,18,17,46,27,97,61,49,43,66,37,89,19,24,1,98,76,32,83,44,96,87,31,8,20,33,21,6,56,41,88,82,47,69,93,14,79,38,29,80,85,90,94,55,60,67,95,9,2,71,65,68,77,7,74,59,28,92,73,15,39,22,0,45,5],\"FaceQuality\":\"0.379721\",\"FaceYaw\":\"-0.135311\",\"FacePitch\":\"0.508456\",\"FaceRoll\":\"0.000000\",\"FaceBlurry\":\"0.555109\",\"ObjectImageData\":\"\",\"FaceImageData\":\"\",\"Index\":1}]}"
;}
return
"{\"ret\":\"200\",\"error_msg\":\"OK\",\"ObjectList\":[{\"ImageID\":\"1\",\"ObjectID\":1,\"Metadata\":{\"Gender\":\"1\",\"Age\":\"32\",\"Angle\":\"128\",\"HeadBoundingBox\":{\"x\":96,\"y\":16,\"w\":107,\"h\":136},\"FaceBoundingBox\":{\"x\":115,\"y\":61,\"w\":57,\"h\":77},\"UpperBoundingBox\":{\"x\":34,\"y\":123,\"w\":232,\"h\":263},\"LowerBoundingBox\":{\"x\":74,\"y\":309,\"w\":176,\"h\":408},\"CoatLength\":\"2\",\"CoatTexture\":\"1\",\"CoatColor\":[\"2\"],\"CoatColorNums\":\"1\",\"TrousersLength\":\"1\",\"TrousersTexture\":\"1\",\"TrousersColor\":[\"5\"],\"TrousersColorNums\":\"1\",\"HairStyle\":\"2\",\"HasHat\":\"1\",\"HasGlasses\":\"0\",\"HasMask\":\"0\",\"HasBackpack\":\"0\",\"HasCarrybag\":\"0\",\"HasUmbrella\":\"0\",\"HasTrolley\":\"-1\",\"HasLuggage\":\"-1\",\"LuggageColor\":[],\"LuggageColorNums\":\"0\",\"HasKnife\":\"-1\",\"ObjectBoundingBox\":{\"x\":26,\"y\":13,\"w\":256,\"h\":708},\"TrafficViolation\":\"-1\",\"Type\":\"6\"},\"Feature\":\"UVNURgUA//0BCP4BAQcAAwQBBvsCB/v8Af4A+wD5+AcBAgL9AgIEAgH4AQQA+f77+P77AAAIA/8A+QQJ/fz8AgACBfsAAgAC/AcIAQD++fgCAAUB/gb//AEAAf4B/QP+AQD0/QMDAfkD+f//A/7+/AD6B/f7/AH7/gAFAAMBAPb/AAP//wAIBQD7Af0FAAD9AAgC/gYF/f/8DAAC//4BAP/6AgECAgADAPz++v0A/wD//fz5AAIB/f0IBAQA/v8CBwP//wYE+/sCCP0BBAMD/gQA/QH/AgL6AgX/BP7/+AD5A/75/QH+A/8H/QAACP//AQT7+QICAfv/Afj9A/0D/wAA/f/8/wYL/wACAQYAAAAD/ggAAQMABv/6BAIADPv+A/wEAQAA/AD5AwT///4BAPz8CgUCDf78AwEA/f4AA/8C/wQB/P8A/wEA/gsAAwEF/v0AAf7/+QQECAcGAP0AAgH//AAHBwD3/fwB+/7/AQj//wUFAP/+/gYBAgYD+fv/BwH8Af0EBAD+AP3++gIH+v8CAPQEAAT//gDzAP0A+AL6BP4I9wMJAP0CAPX6APz9/gALAP7/BgQD+wIDBPn+CwIH/fz7A/3+9wAJ/QD9AP/++wME/v/+Avv+APoFAAAB+gD5APn//gEGBAME/wX5/AD/CAL+9QD8BAD2/wMCCf38+/oB+f0C/f39AQL+AAEAAgAE/wEIA///AP8HAQT+8fn7AP4AAAMA+QQDAwIB//j+/QEAAAIAAgj/A/n8AAP9AQD8AQYF+PgAA/4B+gEE+QYA/wYAB/0BAQD+/P/+BQf5BwIAAPsBBAEGAP4JAwEE////AAEF/wL4AAAFAQYA/vz+/AACAv8CAwIA+wIAAAUJAP0C/wIHAAEABgQF/QAEAAL7BP0A//wC+vr+/AIGAwAEAP0A/P/8BAD//AD5+wQEAAEHAv/8AP77+vQEBP4BAAAAAAr7/wD5AgD7BAEA/gT7AAAEAAMABPkLAQYABff+/wEDAP8EA/4AAf8A/gX9+wACAv3//f7/BAH+Bf/+AAH/AAAE9wAHAP/+/P8DAQD7/QQB/P3/AwAAAQAB/wD+BwAB/vwAAAL/AAYAAAf/Af76+fj6AP4F/gD9AgIB/Qr59f8CAAMCBgQHAf0FAP34AAQH/P79/wQGBA4D+f4AA/v+AAAA+wIE/gIH+QP2AQQGAwAE/vwI/P4GBwD/AAX4AAP+/f0A/Af/AgEBA/v9BPgDBwAC/wD8Bv36A/gBAAH+AAX+BP/9AAIF+AD8Av4B/wT/AQAAAQL/BPwA/PsA/AMDBfb/+AEBCAL+//36APz//wEHBv3/BQAA/QP9+wABAQL6//4CAAH/CP/+AAMBAf0CAAD9+g==\",\"BucketID\":32,\"BucketIDList\":[32,87,20,68,45,78,10,6,52,65,1,94,79,16,61,38,55,89,43,51,60,27,54,25,17,83,9,40,14,22,50,44,18,66,82,4,48,31,69,77,90,63,92,73,70,84,67,23,12,3,74,47,21,41,28,96,36,97,5,85,39,95,64,26,80,53,91,37,34,57,46,15,2,93,11,98,75,81,56,0,24,62,86,13,19,71,72,7,58,29,59,49,88,76,35,99,33,30,42,8],\"FaceFeature\":\"AwQF+foK/vcCAAD4/wD7CQH39vP7/gz/CAAB/AX++AAI/v8D+gQAAP0G/wAA+/oAAAP+Af79CwEAAgAA+/oFBe/3AgIFAgP0/vr8Cf4C+AMHBPn5Afr5AQQGBQD58gMG+wQTAgTzAPr9BQYEA/j//gT8+wXx9wMC+gcH/wAC8v0A+gD7+wkE/gAA7wL78gX/AgIGBvr8AAgD/woEAvkEAwv5CP/8/fz+/fwMAvr7AgD4APcEAA0F//kAAAAG+gADAQEB/wD+AQgCBg35+QQC/vv//vcAAPgEAwAAAgD9Af32/wMLAwD8B/75AQIB+/z/+v4AA/n//gL8+/0BAPv//PgIAAD0CQALAAUF/fwA/wYBAQf9+/f++Af49gMB/AMABwAA9vr5//sE/PoD+QP6+wsA/wEB+QIC+/8B/wD88QkACAIAAPn5AAUD/QL++P4H/f3+A/gG/f8G/QkA8wD0BAMBBwD59AAB+QUA//v2/wEJAQD8DAL5CPoA+/b+/Qr5AwcA/AD+CAEDBgEH/Qb+AQUHAAQK/fUA+/sI9/0I+QcKBQP6/gX0+QgI9gIBAAMFAAAA/vcD/vYI9wj9+v76C/gAAgIH+gMHBP8IAAT6BgAI+vsJ/v7/DAUABgIA+gAHBf0D+/oDAwEABv359QAB+AEG8w7+//0ABf78CPr8Afs=\",\"FaceBucketID\":91,\"FaceBucketIDList\":[91,12,50,84,52,13,57,54,4,53,70,36,64,58,81,10,78,63,35,75,34,16,86,3,99,40,26,42,48,30,25,23,11,62,72,51,18,17,46,27,97,61,49,43,66,37,89,19,24,1,98,76,32,83,44,96,87,31,8,20,33,21,6,56,41,88,82,47,69,93,14,79,38,29,80,85,90,94,55,60,67,95,9,2,71,65,68,77,7,74,59,28,92,73,15,39,22,0,45,5],\"FaceQuality\":\"0.379721\",\"FaceYaw\":\"-0.135311\",\"FacePitch\":\"0.508456\",\"FaceRoll\":\"0.000000\",\"FaceBlurry\":\"0.555109\",\"ObjectImageData\":\"\",\"FaceImageData\":\"\",\"Index\":1},{\"ImageID\":\"3\",\"ObjectID\":1,\"Metadata\":{\"Angle\":\"128\",\"VehicleClass\":\"1\",\"VehicleColor\":[\"9\"],\"VehicleColorNums\":\"1\",\"VehicleBrand\":\"\\u96ea\\u4f5b\\u5170-\\u79d1\\u9c81\\u5179-2009_2013\",\"VehicleMainBrandName\":\"\\u96ea\\u4f5b\\u5170\",\"VehicleSubBrandName\":\"\\u79d1\\u9c81\\u5179\",\"VehicleYearName\":\"2009_2013\",\"HasPlate\":\"1\",\"PlateClass\":\"1\",\"PlateColor\":\"2\",\"PlateNo\":\"\\u6d59AJ079B\",\"PlateNeatness\":\"2\",\"Sunvisor\":\"0\",\"Paper\":\"0\",\"Decoration\":\"0\",\"Drop\":\"1\",\"Tag\":\"1\",\"SafetyBelt\":{\"MainDriver\":\"-1\",\"CoDriver\":\"-1\"},\"HasCall\":\"-1\",\"HasSkylight\":\"0\",\"HasBaggage\":\"0\",\"HasAerial\":\"0\",\"HasCrash\":\"-1\",\"HasDanger\":\"0\",\"HighwayTollVehicles\":\"1\",\"ObjectBoundingBox\":{\"x\":41,\"y\":40,\"w\":894,\"h\":717},\"TrafficViolation\":\"-1\",\"Type\":\"6\"},\"Feature\":\"AAAAAAAAAAAAAAAPAAAAAAAKABQAAAAAAAAAAAAAAAAhAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAAAAAAAAAAAEwELAAAAAAAAAAAAAAAAAAAAAAAFCQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAAABIAAAAAABMAAAEAAAAAAAAAAAAAAAAAABAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAHgAAAAAAAAAAAAAAAgAAAAAHAAATAAAAAAAAAAAAAAAsAAAAAAAAAAAAAAAAAAAAAAAcAAAAAB8AAAAAAAAAAAAAAAAAAAAAABoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAMDgAAAAAAAB0AAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAA=\",\"BucketID\":76,\"BucketIDList\":[76,91,82,57,36,51,75,55,71,43,84,63,8,98,83,65,90,60,35,3,37,39,74,2,12,9,1,20,79,32,95,49,33,58,42,66,38,69,45,56,59,0,87,19,41,34,21,14,13,6,4,26,68,96,72,7,85,29,48,40,88,99,23,46,27,18,77,78,11,97,17,50,15,61,16,31,80,44,52,25,10,86,92,5,54,53,73,89,94,93,70,62,30,47,64,22,28,67,81,24],\"FaceFeature\":\"\",\"FaceBucketID\":-1,\"FaceBucketIDList\":[],\"FaceQuality\":\"0.000000\",\"FaceYaw\":\"0.000000\",\"FacePitch\":\"0.000000\",\"FaceRoll\":\"0.000000\",\"FaceBlurry\":\"0.000000\",\"ObjectImageData\":\"\",\"FaceImageData\":\"\",\"Index\":1},{\"ImageID\":\"4\",\"ObjectID\":1,\"Metadata\":{\"Gender\":\"1\",\"Age\":\"16\",\"Angle\":\"128\",\"BikeClass\":\"1\",\"SocialAttribute\":\"1\",\"Enterprise\":\"-1\",\"FaceBoundingBox\":{\"x\":145,\"y\":65,\"w\":54,\"h\":66},\"CoatLength\":\"2\",\"CoatTexture\":\"5\",\"CoatColor\":[\"2\"],\"CoatColorNums\":\"1\",\"HelmetColor\":\"-1\",\"HasHelmet\":\"0\",\"HasGlasses\":\"1\",\"HasMask\":\"0\",\"HasBackpack\":\"0\",\"HasCarrybag\":\"-1\",\"HasUmbrella\":\"0\",\"HasPlate\":\"-1\",\"PlateNo\":\"-1\",\"HasPassenger\":\"1\",\"ObjectBoundingBox\":{\"x\":54,\"y\":16,\"w\":276,\"h\":635},\"TrafficViolation\":\"-1\",\"Type\":\"6\"},\"Feature\":\"UVNURgUA/wACAf/3AfwEA/kC/AMAAwAEAQACAPv+AAAB/wMHAgEA/wAGAAj/+AD7APwCAwkD9wsAAP4CBvn7/wz5A/wBBP8D/QICCAUCBv/7AgABAv7+AAH9AAUC/AX/AvsC/P4CAv39BAMA/gAAAAIA/wT6/v77A/YEAPoB//sG//7+/wD+/QAA/AMAAAQCAvz8/P3/AAH9+gX8/wD8/fr7AQAD//oA+AECAAAFAAH+/QH7/gIHAgYA/vz+AwADAgQCAgAL+wD9BgMGBv8E+/oF/P4H/wMD/gQC/wQH/v/4Agn9BQAC/wAE/P37BP/7AgIA/gj8APv7CAL9/vkABgL7/fz9/AD1BwD7AwAAAwH7AAb7+v4AAwX6/PsDBwMA/wH9AQD8AQP8APz7/vb8APoDAAT8AP0FAwYG/P39/P4B/vkA/f8AAgQBB/0D+wAFBwX4Aff+Bvz2/wEEBAIABQQD/wABAAMA//0AAP/+/wAC9/4AAfz+AAEF/f/6CAD9Bfn/APn9CwP3BAABBAAIAfr8/wP/CQn9BgL+Bf38A/z89gf6AAf9//wABAP9AgT19/4DAQMCAQQDAAABBf76+gEC/Pv9//4E//76AAAACQAA//kE//sDCfsGA/z7AAD7BAMAAAIAAgMA/P0D/wIE/v36//wAAgX8/voCAAT8BAkCAgEBAfwG+gEA/vr++AYAAQL7AAcAAP8BAAH9Af8A+QD+Agj7+wID/AAB+QcD//4ACQMEAvv+AvwBB/r7/gL/+AL7A/78+/4AAP39/QEFAwEA/QECCfz6AfwE/QMAAwD/Av4HAPz/AP4F/ggD+gMH+/UH+wID/wQGBPr2BP8KBAP/+/7//AP2/QT6//4CBAAFBgAFBf4E//v9BgADAAH9/gb4BAQHAAEA/QIB/vsE+/8GAPb7Av79AAD4AP4B+wf+/P4ABf79/wD/+QQA+fkB/voAA/oDAQUDAP79BAkGAAn/AQMB//76APz8BQD9AgEB/Pf6/wcAAwcHAgEA/QH/AP/6A/75BP8E/QD+AgT+AwEF+PkC//37/f79/gAAAQUA+AEEAAX9/wL8AgAFAwAA+v8G+wQA/QEF/wD+BAAGAwABAf0JAgMD+wUGAf39APoA/gQHAAID/AAF//8GA//8/QUC/gEC/vwGAv0BAAD9/ggCAAYBAwL/AQD9/fYD/wIE/f/4BP4AAAD8+wH5Bwb7AAQF+v/0//j9+/v/AP4CAgAA/v4AAP7+Bfv/CwECAQD7CgH5AQEAAQQAAP76APkABQIBBv0JAwABBwD++wD+//35+QPy/v0FAAYC+QD9Avr5CgQIA/35/AADAQH6+AEIAwEEAAMA/AMD+wADAAP///kFBAEBAA==\",\"BucketID\":5,\"BucketIDList\":[5,3,83,30,43,82,55,80,46,51,61,79,97,67,21,91,88,90,99,12,23,0,1,36,47,54,37,27,14,50,16,8,53,25,52,29,18,60,38,98,62,4,15,2,20,22,17,96,65,44,75,59,93,66,31,10,45,48,13,7,57,76,72,77,56,94,81,87,95,6,92,69,74,39,35,26,34,71,41,85,64,49,24,42,73,78,58,63,89,11,86,68,32,28,19,9,40,33,70,84],\"FaceFeature\":\"BQD5+Af/BP4I/AD7AP/9AAcC/QT6/P4HAfr9B/sIBf8O/AD8BwYKCA0AAv77/gAE+gAL/wMA/QD9AAAG/vv8AAP7BvwBAAn4AAf/AQAOAP8A7wIBAv8EAwAFAf/5CPoABQEDBwEFBQb5/fb+AO4G+AAB/wML9PsAA/oHBwYF/Pz7/gUK9QUABgEE+wH8AgL6+gb3AwEAAxL7CwD/DPcFAf30AAPz/QAE/QAABvn9AwD2/wQCAwACAQAKBAUD/v0A/voE//0B+Ab//vkC+vj/AAH7+AL7A/sDAPj7Bvn+/QoGAwEA/v//AP4D+wQDAf8K/QP2BgD5/QD//gEKA/v+BwAAAf3xAf/+/gT9AwP8DADzBw4AAvn//wAE+QH5AQv3C+38/Pf9/QII8gID9wMFCggFAv/9AvsEBvkACP8G9/z9AP/7/fwE+v39DPgAAAAB/fr5A/n8/wIDAAQK/wH+AwAAAvwADQoKAgAFAfsF+vsE//35C/3zCAD9BPsB/wMGB/n5/Pv0+Pb+BPn5/wMKAQAB8fT9Awf++/YAAAICAwUG+wD0+fkBB/0AAAQIBfgEBPkG/wcJAgD7CAv1Avf9AQYAAAEDAPYC+foJ+/78APwD8f4A/gUBB/7///oLAwD/AAUD+/39+PsH+QIF9gMEA/oGAQsMBQkHA/wB+PwCAgA=\",\"FaceBucketID\":82,\"FaceBucketIDList\":[82,45,63,31,16,1,7,98,40,24,65,19,62,48,94,72,92,17,91,52,77,76,85,87,81,21,93,64,37,42,30,78,25,61,9,12,22,2,13,34,4,15,46,3,14,99,90,28,66,29,75,68,80,59,60,88,69,83,36,55,11,44,96,89,10,26,49,50,73,6,53,20,47,86,58,84,27,8,70,43,57,71,97,79,0,67,54,33,23,95,56,5,41,38,51,32,74,39,35,18],\"FaceQuality\":\"0.365118\",\"FaceYaw\":\"0.257412\",\"FacePitch\":\"0.390233\",\"FaceRoll\":\"0.000000\",\"FaceBlurry\":\"0.475882\",\"ObjectImageData\":\"\",\"FaceImageData\":\"\",\"Index\":1},{\"ImageID\":\"2\",\"ObjectID\":1,\"Metadata\":{\"Gender\":\"1\",\"Age\":\"32\",\"HeadBoundingBox\":{\"x\":96,\"y\":16,\"w\":107,\"h\":136},\"FaceBoundingBox\":{\"x\":115,\"y\":61,\"w\":57,\"h\":77},\"HairStyle\":\"2\",\"HasHat\":\"1\",\"HasMask\":\"1\",\"HasGlasses\":\"0\",\"Type\":\"6\"},\"Feature\":\"UVNURgUA//0BCP4BAQcAAwQBBvsCB/v8Af4A+wD5+AcBAgL9AgIEAgH4AQQA+f77+P77AAAIA/8A+QQJ/fz8AgACBfsAAgAC/AcIAQD++fgCAAUB/gb//AEAAf4B/QP+AQD0/QMDAfkD+f//A/7+/AD6B/f7/AH7/gAFAAMBAPb/AAP//wAIBQD7Af0FAAD9AAgC/gYF/f/8DAAC//4BAP/6AgECAgADAPz++v0A/wD//fz5AAIB/f0IBAQA/v8CBwP//wYE+/sCCP0BBAMD/gQA/QH/AgL6AgX/BP7/+AD5A/75/QH+A/8H/QAACP//AQT7+QICAfv/Afj9A/0D/wAA/f/8/wYL/wACAQYAAAAD/ggAAQMABv/6BAIADPv+A/wEAQAA/AD5AwT///4BAPz8CgUCDf78AwEA/f4AA/8C/wQB/P8A/wEA/gsAAwEF/v0AAf7/+QQECAcGAP0AAgH//AAHBwD3/fwB+/7/AQj//wUFAP/+/gYBAgYD+fv/BwH8Af0EBAD+AP3++gIH+v8CAPQEAAT//gDzAP0A+AL6BP4I9wMJAP0CAPX6APz9/gALAP7/BgQD+wIDBPn+CwIH/fz7A/3+9wAJ/QD9AP/++wME/v/+Avv+APoFAAAB+gD5APn//gEGBAME/wX5/AD/CAL+9QD8BAD2/wMCCf38+/oB+f0C/f39AQL+AAEAAgAE/wEIA///AP8HAQT+8fn7AP4AAAMA+QQDAwIB//j+/QEAAAIAAgj/A/n8AAP9AQD8AQYF+PgAA/4B+gEE+QYA/wYAB/0BAQD+/P/+BQf5BwIAAPsBBAEGAP4JAwEE////AAEF/wL4AAAFAQYA/vz+/AACAv8CAwIA+wIAAAUJAP0C/wIHAAEABgQF/QAEAAL7BP0A//wC+vr+/AIGAwAEAP0A/P/8BAD//AD5+wQEAAEHAv/8AP77+vQEBP4BAAAAAAr7/wD5AgD7BAEA/gT7AAAEAAMABPkLAQYABff+/wEDAP8EA/4AAf8A/gX9+wACAv3//f7/BAH+Bf/+AAH/AAAE9wAHAP/+/P8DAQD7/QQB/P3/AwAAAQAB/wD+BwAB/vwAAAL/AAYAAAf/Af76+fj6AP4F/gD9AgIB/Qr59f8CAAMCBgQHAf0FAP34AAQH/P79/wQGBA4D+f4AA/v+AAAA+wIE/gIH+QP2AQQGAwAE/vwI/P4GBwD/AAX4AAP+/f0A/Af/AgEBA/v9BPgDBwAC/wD8Bv36A/gBAAH+AAX+BP/9AAIF+AD8Av4B/wT/AQAAAQL/BPwA/PsA/AMDBfb/+AEBCAL+//36APz//wEHBv3/BQAA/QP9+wABAQL6//4CAAH/CP/+AAMBAf0CAAD9+g==\",\"BucketID\":32,\"BucketIDList\":[32,87,20,68,45,78,10,6,52,65,1,94,79,16,61,38,55,89,43,51,60,27,54,25,17,83,9,40,14,22,50,44,18,66,82,4,48,31,69,77,90,63,92,73,70,84,67,23,12,3,74,47,21,41,28,96,36,97,5,85,39,95,64,26,80,53,91,37,34,57,46,15,2,93,11,98,75,81,56,0,24,62,86,13,19,71,72,7,58,29,59,49,88,76,35,99,33,30,42,8],\"FaceFeature\":\"AwQF+foK/vcCAAD4/wD7CQH39vP7/gz/CAAB/AX++AAI/v8D+gQAAP0G/wAA+/oAAAP+Af79CwEAAgAA+/oFBe/3AgIFAgP0/vr8Cf4C+AMHBPn5Afr5AQQGBQD58gMG+wQTAgTzAPr9BQYEA/j//gT8+wXx9wMC+gcH/wAC8v0A+gD7+wkE/gAA7wL78gX/AgIGBvr8AAgD/woEAvkEAwv5CP/8/fz+/fwMAvr7AgD4APcEAA0F//kAAAAG+gADAQEB/wD+AQgCBg35+QQC/vv//vcAAPgEAwAAAgD9Af32/wMLAwD8B/75AQIB+/z/+v4AA/n//gL8+/0BAPv//PgIAAD0CQALAAUF/fwA/wYBAQf9+/f++Af49gMB/AMABwAA9vr5//sE/PoD+QP6+wsA/wEB+QIC+/8B/wD88QkACAIAAPn5AAUD/QL++P4H/f3+A/gG/f8G/QkA8wD0BAMBBwD59AAB+QUA//v2/wEJAQD8DAL5CPoA+/b+/Qr5AwcA/AD+CAEDBgEH/Qb+AQUHAAQK/fUA+/sI9/0I+QcKBQP6/gX0+QgI9gIBAAMFAAAA/vcD/vYI9wj9+v76C/gAAgIH+gMHBP8IAAT6BgAI+vsJ/v7/DAUABgIA+gAHBf0D+/oDAwEABv359QAB+AEG8w7+//0ABf78CPr8Afs=\",\"FaceBucketID\":91,\"FaceBucketIDList\":[91,12,50,84,52,13,57,54,4,53,70,36,64,58,81,10,78,63,35,75,34,16,86,3,99,40,26,42,48,30,25,23,11,62,72,51,18,17,46,27,97,61,49,43,66,37,89,19,24,1,98,76,32,83,44,96,87,31,8,20,33,21,6,56,41,88,82,47,69,93,14,79,38,29,80,85,90,94,55,60,67,95,9,2,71,65,68,77,7,74,59,28,92,73,15,39,22,0,45,5],\"FaceQuality\":\"0.379721\",\"FaceYaw\":\"-0.135311\",\"FacePitch\":\"0.508456\",\"FaceRoll\":\"0.000000\",\"FaceBlurry\":\"0.555109\",\"ObjectImageData\":\"\",\"FaceImageData\":\"\",\"Index\":1}]}"
;}
@GetMapping
(
"/fielagent"
)
@ResponseBody
protected
void
fielagent
(
@RequestParam
(
"ftpPath"
)
String
ftpPath
,
HttpServletRequest
request
,
HttpServletResponse
response
)
{
long
startTime
=
System
.
currentTimeMillis
();
FileInputStream
hFile
=
null
;
OutputStream
toClient
=
null
;
InputStream
inputStream
=
null
;
BufferedInputStream
bis
=
null
;
try
{
response
.
reset
();
response
.
setHeader
(
"Expires"
,
"Sat, 10 May 2059 12:00:00 GMT"
);
response
.
setHeader
(
"Cache-Control"
,
"max-age=315360000"
);
if
(
StringUtils
.
isNotBlank
(
ftpPath
))
{
if
(
ftpPath
.
endsWith
(
".jpg"
)
||
ftpPath
.
endsWith
(
".JPG"
)
||
ftpPath
.
endsWith
(
".png"
)
||
ftpPath
.
endsWith
(
".PNG"
)
||
ftpPath
.
endsWith
(
".gif"
)
||
ftpPath
.
endsWith
(
".GIF"
))
{
response
.
setContentType
(
"image/"
+
ftpPath
.
substring
(
ftpPath
.
lastIndexOf
(
"."
)
+
1
)
+
"; charset=utf-8"
);
}
else
if
(
ftpPath
.
endsWith
(
".mp4"
)
||
ftpPath
.
endsWith
(
".MP4"
))
{
response
.
setContentType
(
"video/mpeg4; charset=utf-8"
);
String
mp4file
=
ftpPath
.
substring
(
ftpPath
.
lastIndexOf
(
"/"
)
+
1
);
response
.
setHeader
(
"Content-Disposition"
,
"attachment;fileName="
+
mp4file
);
}
String
destUrl
=
ftpPath
;
destUrl
=
new
String
(
destUrl
.
getBytes
(
"ISO8859-1"
),
"GBK"
);
String
[]
arr
=
destUrl
.
split
(
";"
);
FtpURLConnection
ftpUrl
=
null
;
HttpURLConnection
httpUrl
=
null
;
for
(
int
i
=
0
;
i
<
arr
.
length
;
i
++)
{
try
{
URL
url
=
new
URL
(
arr
[
i
]);
if
(
arr
[
i
].
toUpperCase
().
indexOf
(
"FTP"
)
!=
-
1
)
{
// ftp
ftpUrl
=
(
FtpURLConnection
)
url
.
openConnection
();
ftpUrl
.
setConnectTimeout
(
5000
);
ftpUrl
.
setReadTimeout
(
5000
);
bis
=
new
BufferedInputStream
(
ftpUrl
.
getInputStream
());
response
.
setContentLength
(
ftpUrl
.
getContentLength
());
}
else
{
// http
httpUrl
=
(
HttpURLConnection
)
url
.
openConnection
();
httpUrl
.
setConnectTimeout
(
5000
);
httpUrl
.
setReadTimeout
(
5000
);
bis
=
new
BufferedInputStream
(
httpUrl
.
getInputStream
());
response
.
setContentLength
(
httpUrl
.
getContentLength
());
}
toClient
=
response
.
getOutputStream
();
IOUtils
.
copy
(
bis
,
toClient
);
}
catch
(
Exception
e
)
{
response
.
setContentType
(
"text/html;charset=GBK"
);
response
.
setCharacterEncoding
(
"GBK"
);
PrintWriter
out
=
response
.
getWriter
();
out
.
write
(
"无法打开图片!"
);
out
.
flush
();
}
finally
{
if
(
bis
!=
null
)
{
bis
.
close
();
}
if
(
bis
!=
null
)
{
bis
.
close
();
}
if
(
httpUrl
!=
null
)
{
httpUrl
.
disconnect
();
}
if
(
ftpUrl
!=
null
)
{
ftpUrl
.
close
();
}
if
(
toClient
!=
null
)
{
toClient
.
close
();
}
}
}
return
;
}
}
catch
(
Exception
e
)
{
}
finally
{
IOUtils
.
closeQuietly
(
bis
);
IOUtils
.
closeQuietly
(
toClient
);
IOUtils
.
closeQuietly
(
hFile
);
IOUtils
.
closeQuietly
(
inputStream
);
}
}
}
}
\ No newline at end of file
src/main/java/com/cx/cn/cxquartz/dao/TraffPictureMapper.java
View file @
36f0e3d1
...
@@ -9,4 +9,5 @@ public interface TraffPictureMapper {
...
@@ -9,4 +9,5 @@ public interface TraffPictureMapper {
int
inserTraffpicture
(
TraffpictureParam
traffalarmrecord
);
int
inserTraffpicture
(
TraffpictureParam
traffalarmrecord
);
int
updateTraffpicture
(
TraffpictureParam
traffalarmrecord
);
int
updateTraffpicture
(
TraffpictureParam
traffalarmrecord
);
String
queryimgpath
(
TraffpictureParam
traffpicture
);
String
queryimgpath
(
TraffpictureParam
traffpicture
);
int
updateTraffpicturePushStatus
(
TraffpictureParam
traffpicture
);
}
}
\ No newline at end of file
src/main/java/com/cx/cn/cxquartz/service/quartz/impl/EventWriteService.java
0 → 100644
View file @
36f0e3d1
package
com
.
cx
.
cn
.
cxquartz
.
service
.
quartz
.
impl
;
import
com.cx.cn.cxquartz.dao.TraffPictureMapper
;
import
com.cx.cn.cxquartz.util.DateUtils
;
import
com.cx.cn.cxquartz.util.ThreadPoolUtil
;
import
com.cx.cn.cxquartz.vo.ResponseEnum
;
import
com.cx.cn.cxquartz.vo.ResultObj
;
import
com.cx.cn.cxquartz.vo.TraffpictureParam
;
import
com.cx.cn.cxquartz.vo.TraffrecordData
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.http.HttpEntity
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.MediaType
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.client.RestTemplate
;
import
java.util.concurrent.*
;
/**
* <p>
* 服务类
* </p>
*
* @author wjj
* @since 2021-04-29
*/
@Service
public
class
EventWriteService
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
EventWriteService
.
class
);
@Autowired
private
RestTemplate
restTemplate
;
@Autowired
private
TraffPictureMapper
traffPictureMapper
;
@Value
(
"${eventwrite.url}"
)
private
String
url
;
@Value
(
"${eventwrite.timeout}"
)
private
Integer
timeout
;
@Value
(
"${eventwrite.token}"
)
private
String
qztoken
;
@Autowired
private
StringRedisTemplate
stringRedisTemplate
;
@Autowired
TokenCacheService
tokensertvice
;
private
static
CompletionService
<
ResultObj
>
completionService
=
new
ExecutorCompletionService
<
ResultObj
>(
ThreadPoolUtil
.
getPool
());
public
void
sendEvent
(
TraffpictureParam
traffpictureParamresult
,
TraffrecordData
sendtozhiui
)
{
sendtozhiui
.
setAlarmnum
(
traffpictureParamresult
.
getTargetnum
());
sendtozhiui
.
setFdid
(
traffpictureParamresult
.
getFdid
());
sendtozhiui
.
setRecordtype
(
traffpictureParamresult
.
getRecordtype
());
sendtozhiui
.
setRecordtime
(
traffpictureParamresult
.
getCreatetime
()==
null
?
""
:
DateUtils
.
formatDate
(
traffpictureParamresult
.
getCreatetime
()));
ResultObj
resultObj
;
try
{
resultObj
=
sendMessage
(
sendtozhiui
);
// boolean successFlag = resultObj.getCode() == ResponseEnum.SUCCESS.getCode();
traffpictureParamresult
.
setPushdesc
(
resultObj
.
getMsg
());
/* 成功 */
if
(
"0"
.
equals
(
resultObj
.
getCode
()))
{
traffpictureParamresult
.
setPushstatus
(
0
);
traffpictureParamresult
.
setPushdesc
(
"推送成功"
);
traffPictureMapper
.
updateTraffpicturePushStatus
(
traffpictureParamresult
);
return
;
}
/* 其他失败 */
}
catch
(
TimeoutException
e
)
{
traffpictureParamresult
.
setPushdesc
(
"请求超时"
);
log
.
error
(
"eventwrite - sendEvent 请求超时:"
+
e
.
toString
());
//return ResultObj.error(ResponseEnum.E_1008.getCode(), ResponseEnum.E_1008.getMsg());
}
catch
(
Exception
e
)
{
traffpictureParamresult
.
setPushdesc
(
"请求失败"
);
log
.
error
(
"eventwrite - sendEvent 异常:"
+
e
.
toString
());
//return ResultObj.error(ResponseEnum.E_9999.getCode(), e.toString());
}
traffpictureParamresult
.
setPushstatus
(-
1
);
traffPictureMapper
.
updateTraffpicturePushStatus
(
traffpictureParamresult
);
}
private
ResultObj
sendMessage
(
TraffrecordData
traffalarmrecord
)
throws
InterruptedException
,
ExecutionException
,
TimeoutException
{
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON_UTF8
);
String
token
=
stringRedisTemplate
.
opsForValue
().
get
(
qztoken
);
if
(
null
==
token
){
token
=
tokensertvice
.
keepAlive
();
}
headers
.
add
(
"accessToken"
,
token
);
HttpEntity
<
TraffrecordData
>
requestEntity
=
new
HttpEntity
<>(
traffalarmrecord
,
headers
);
return
CompletableFuture
.
supplyAsync
(()
->
restTemplate
.
postForObject
(
url
,
requestEntity
,
ResultObj
.
class
)).
get
(
timeout
,
TimeUnit
.
SECONDS
);
}
}
src/main/java/com/cx/cn/cxquartz/service/quartz/impl/TokenCacheService.java
0 → 100644
View file @
36f0e3d1
package
com
.
cx
.
cn
.
cxquartz
.
service
.
quartz
.
impl
;
import
com.alibaba.fastjson.JSONObject
;
import
com.cx.cn.cxquartz.util.DateUtils
;
import
com.google.gson.Gson
;
import
com.google.gson.reflect.TypeToken
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.http.*
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.client.RestTemplate
;
import
javax.annotation.PostConstruct
;
import
java.lang.reflect.Type
;
import
java.util.Date
;
import
java.util.Map
;
import
java.util.concurrent.TimeUnit
;
@Service
public
class
TokenCacheService
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
TokenCacheService
.
class
);
@Autowired
private
StringRedisTemplate
stringRedisTemplate
;
@Value
(
"${eventwrite.token}"
)
private
String
qztoken
;
@Value
(
"${eventwrite.expiretoken}"
)
private
String
expiretoken
;
@Value
(
"${countryside.appid}"
)
private
String
appid
;
@Value
(
"${countryside.appsecret}"
)
private
String
appsecret
;
@Value
(
"${countryside.tokenurl}"
)
private
String
tokenurl
;
public
String
keepAlive
()
{
try
{
String
tokencache
=
stringRedisTemplate
.
opsForValue
().
get
(
qztoken
);
if
(
tokencache
!=
null
)
{
//判断是否过期
String
datetime
=
stringRedisTemplate
.
opsForValue
().
get
(
expiretoken
);
if
(
null
!=
datetime
){
//预留1分钟过期时间
Long
expireminiseconds
=
Long
.
parseLong
(
datetime
);
if
(
new
Date
().
getTime
()<
expireminiseconds
)
{
return
tokencache
;
}
}
return
loginServer
();
}
else
{
return
loginServer
();
}
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
e
.
toString
());
}
return
null
;
}
private
String
loginServer
()
{
HttpHeaders
headers
=
getHttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON_UTF8
);
RestTemplate
client
=
new
RestTemplate
();
ResponseEntity
<
String
>
response
=
client
.
getForEntity
((
tokenurl
+
"?appid="
+
appid
+
"&appsecret="
+
appsecret
),
String
.
class
);
return
getTokenData
(
response
);
}
private
HttpHeaders
getHttpHeaders
()
{
HttpHeaders
headers
=
new
HttpHeaders
();
headers
.
setContentType
(
MediaType
.
APPLICATION_JSON_UTF8
);
return
headers
;
}
private
String
getTokenData
(
ResponseEntity
<
String
>
response
){
try
{
if
(
response
!=
null
&&
response
.
getBody
()
!=
null
&&
response
.
getBody
().
contains
(
"code"
))
{
String
ret
=
response
.
getBody
();
JSONObject
map
=
JSONObject
.
parseObject
(
ret
);
if
(
null
!=
map
&&
null
!=
map
.
get
(
"obj"
)
&&(
"0"
).
equals
(
map
.
getString
(
"code"
)))
{
JSONObject
object
=
JSONObject
.
parseObject
(
map
.
getString
(
"obj"
));
if
(
null
!=
object
&&
null
!=
object
.
getString
(
"accessToken"
))
{
Long
time
=
object
.
getLong
(
"expire"
)-
new
Date
().
getTime
();
stringRedisTemplate
.
opsForValue
().
set
(
expiretoken
,
time
.
toString
(),
time
,
TimeUnit
.
MILLISECONDS
);
stringRedisTemplate
.
opsForValue
().
set
(
qztoken
,
object
.
getString
(
"accessToken"
),
time
,
TimeUnit
.
MILLISECONDS
);
return
object
.
getString
(
"accessToken"
);
}
}
else
{
log
.
error
(
"getTokenData error :"
+
response
.
getBody
());
}
}
else
{
log
.
error
(
"getTokenData empty..."
);
}
}
catch
(
Exception
e
){
System
.
out
.
println
(
e
.
toString
());
log
.
error
(
e
.
getMessage
());
}
return
null
;
}
}
src/main/java/com/cx/cn/cxquartz/vo/ResponseEnum.java
0 → 100644
View file @
36f0e3d1
package
com
.
cx
.
cn
.
cxquartz
.
vo
;
public
enum
ResponseEnum
{
/* 错误信息 */
E_1000
(
1000
,
"返回值必须为PageResult"
),
E_1001
(
1001
,
"必须传递分页参数"
),
E_1002
(
1002
,
"参数值异常"
),
E_1003
(
1003
,
"参数值转换异常"
),
E_1004
(
1004
,
"参数值为空"
),
/* 保存 更新 重置 删除 等 */
E_1005
(
1005
,
"更新失败"
),
E_1006
(
1006
,
"无结果"
),
E_1007
(
1007
,
"未登录"
),
E_1008
(
1008
,
"请求超时"
),
E_1009
(
1009
,
"请求下游服务异常"
),
E_1010
(
1010
,
"数据保存失败"
),
E_1011
(
1011
,
"数据重复"
),
E_9999
(
9999
,
"系统异常"
),
SUCCESS
(
0
,
"请求成功"
);
private
int
code
;
private
String
msg
;
ResponseEnum
(
int
code
,
String
msg
)
{
this
.
code
=
code
;
this
.
msg
=
msg
;
}
public
int
getCode
()
{
return
code
;
}
public
String
getMsg
()
{
return
msg
;
}
}
src/main/java/com/cx/cn/cxquartz/vo/ResultObj.java
View file @
36f0e3d1
...
@@ -2,32 +2,161 @@
...
@@ -2,32 +2,161 @@
* Copyright 2021 json.cn
* Copyright 2021 json.cn
*/
*/
package
com
.
cx
.
cn
.
cxquartz
.
vo
;
package
com
.
cx
.
cn
.
cxquartz
.
vo
;
import
com.fasterxml.jackson.databind.JsonNode
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
java.util.List
;
import
java.util.List
;
public
class
ResultObj
{
public
class
ResultObj
{
private
static
final
ObjectMapper
MAPPER
=
new
ObjectMapper
();
/**
* 响应业务状态
* 200 成功
* 201 错误
* 400 参数错误
*/
private
String
code
;
/**
* 响应消息
*/
private
String
msg
;
/**
* 响应中的数据
*/
private
Object
obj
;
public
static
ResultObj
error
(
String
status
,
String
msg
,
Object
data
)
{
return
new
ResultObj
(
status
,
msg
,
data
);
}
public
static
ResultObj
ok
(
Object
data
)
{
return
new
ResultObj
(
data
);
}
public
static
ResultObj
ok
()
{
return
ok
(
null
);
}
private
ResultObj
()
{
}
public
static
ResultObj
error
(
String
status
,
String
msg
)
{
return
new
ResultObj
(
status
,
msg
,
null
);
}
private
ResultObj
(
String
status
,
String
msg
,
Object
data
)
{
this
.
code
=
status
;
this
.
msg
=
msg
;
this
.
obj
=
data
;
}
private
ResultObj
(
Object
data
)
{
this
.
code
=
"200"
;
this
.
msg
=
"OK"
;
this
.
obj
=
data
;
}
public
String
getCode
()
{
return
code
;
}
public
void
setCode
(
String
code
)
{
this
.
code
=
code
;
}
public
String
getMsg
()
{
return
msg
;
}
public
void
setMsg
(
String
msg
)
{
this
.
msg
=
msg
;
}
public
Object
getObj
()
{
return
obj
;
}
public
void
setObj
(
Object
obj
)
{
this
.
obj
=
obj
;
}
/**
* 将json结果集转化为SysResult对象
*
* @param jsonData json数据
* @param clazz SysResult中的object类型
* @return SysResult对象
*/
public
static
ResultObj
formatToPojo
(
String
jsonData
,
Class
<?>
clazz
)
{
try
{
if
(
clazz
==
null
)
{
return
MAPPER
.
readValue
(
jsonData
,
ResultObj
.
class
);
}
JsonNode
jsonNode
=
MAPPER
.
readTree
(
jsonData
);
JsonNode
data
=
jsonNode
.
get
(
"data"
);
Object
obj
=
null
;
if
(
data
.
isObject
())
{
obj
=
MAPPER
.
readValue
(
data
.
traverse
(),
clazz
);
}
else
if
(
data
.
isTextual
())
{
obj
=
MAPPER
.
readValue
(
data
.
asText
(),
clazz
);
}
return
error
(
jsonNode
.
get
(
"status"
).
toString
(),
jsonNode
.
get
(
"msg"
).
asText
(),
obj
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
/**
* 没有object对象的转化
*
* @param json 字符串
* @return SysResult对象
*/
public
static
ResultObj
format
(
String
json
)
{
try
{
return
MAPPER
.
readValue
(
json
,
ResultObj
.
class
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
/**
* Object是集合转化
*
* @param jsonData json数据
* @param clazz 集合中的类型
* @return SysResult对象
*/
public
static
ResultObj
formatToList
(
String
jsonData
,
Class
<?>
clazz
)
{
try
{
JsonNode
jsonNode
=
MAPPER
.
readTree
(
jsonData
);
JsonNode
data
=
jsonNode
.
get
(
"data"
);
Object
obj
=
null
;
if
(
data
.
isArray
()
&&
data
.
size
()
>
0
)
{
obj
=
MAPPER
.
readValue
(
data
.
traverse
(),
MAPPER
.
getTypeFactory
().
constructCollectionType
(
List
.
class
,
clazz
));
}
return
error
(
jsonNode
.
get
(
"status"
).
toString
(),
jsonNode
.
get
(
"msg"
).
asText
(),
obj
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
null
;
}
}
@Override
public
String
toString
()
{
return
"ResultObj{"
+
"code="
+
code
+
", msg='"
+
msg
+
'\''
+
", obj="
+
obj
+
'}'
;
}
private
String
ret
;
private
String
error_msg
;
private
List
<
ObjectList
>
ObjectList
;
public
void
setRet
(
String
ret
)
{
this
.
ret
=
ret
;
}
public
String
getRet
()
{
return
ret
;
}
public
void
setError_msg
(
String
error_msg
)
{
this
.
error_msg
=
error_msg
;
}
public
String
getError_msg
()
{
return
error_msg
;
}
public
void
setObjectList
(
List
<
ObjectList
>
ObjectList
)
{
this
.
ObjectList
=
ObjectList
;
}
public
List
<
ObjectList
>
getObjectList
()
{
return
ObjectList
;
}
}
}
\ No newline at end of file
src/main/java/com/cx/cn/cxquartz/vo/TraffrecordData.java
0 → 100644
View file @
36f0e3d1
package
com
.
cx
.
cn
.
cxquartz
.
vo
;
/**
* <p>
*
* </p>
*
* @author wjj
* @since 2021-04-29
*/
public
class
TraffrecordData
{
private
Integer
alarmnum
;
private
String
fdid
;
private
String
imagedata
;
private
String
recordlevel
;
private
String
recordname
;
private
String
recordtime
;
private
String
recordtype
;
private
Integer
targetnum
;
private
String
tdmc
;
private
String
xzmc
;
public
Integer
getAlarmnum
()
{
return
alarmnum
;
}
public
void
setAlarmnum
(
Integer
alarmnum
)
{
this
.
alarmnum
=
alarmnum
;
}
public
String
getFdid
()
{
return
fdid
;
}
public
void
setFdid
(
String
fdid
)
{
this
.
fdid
=
fdid
;
}
public
String
getImagedata
()
{
return
imagedata
;
}
public
void
setImagedata
(
String
imagedata
)
{
this
.
imagedata
=
imagedata
;
}
public
String
getRecordlevel
()
{
return
recordlevel
;
}
public
void
setRecordlevel
(
String
recordlevel
)
{
this
.
recordlevel
=
recordlevel
;
}
public
String
getRecordname
()
{
return
recordname
;
}
public
void
setRecordname
(
String
recordname
)
{
this
.
recordname
=
recordname
;
}
public
String
getRecordtime
()
{
return
recordtime
;
}
public
void
setRecordtime
(
String
recordtime
)
{
this
.
recordtime
=
recordtime
;
}
public
String
getRecordtype
()
{
return
recordtype
;
}
public
void
setRecordtype
(
String
recordtype
)
{
this
.
recordtype
=
recordtype
;
}
public
Integer
getTargetnum
()
{
return
targetnum
;
}
public
void
setTargetnum
(
Integer
targetnum
)
{
this
.
targetnum
=
targetnum
;
}
public
String
getTdmc
()
{
return
tdmc
;
}
public
void
setTdmc
(
String
tdmc
)
{
this
.
tdmc
=
tdmc
;
}
public
String
getXzmc
()
{
return
xzmc
;
}
public
void
setXzmc
(
String
xzmc
)
{
this
.
xzmc
=
xzmc
;
}
}
src/main/resources/application.yml
View file @
36f0e3d1
...
@@ -48,9 +48,9 @@ spring:
...
@@ -48,9 +48,9 @@ spring:
# root:
# root:
# info
# info
#
logging:
logging
:
#
level:
level
:
#
com.cx.cn.cxquartz.dao:
com.cx.cn.cxquartz.dao
:
#
debug
debug
src/main/resources/file.properties
View file @
36f0e3d1
...
@@ -12,4 +12,13 @@ file.rtspurl=http://172.16.24.29:8081/getrealcamerasnapshot.php
...
@@ -12,4 +12,13 @@ file.rtspurl=http://172.16.24.29:8081/getrealcamerasnapshot.php
file.recogurl
=
http://172.16.24.29:9098/images/recog
file.recogurl
=
http://172.16.24.29:9098/images/recog
redis.cachekey.ftplist
=
gs:traff:global:cache:ftplist
redis.cachekey.ftplist
=
gs:traff:global:cache:ftplist
file.getrtspbyurl
=
http://212.129.142.17:8281/gh/device/test
file.getrtspbyurl
=
http://212.129.142.17:8281/gh/device/test
countryside.url
=
http://countryside.51iwifi.com/gw/hesc-mq/hesc/mq/receive/cameraalarm
eventwrite.timeout
=
5000
eventwrite.token
=
countrysidetoken
eventwrite.expiretoken
=
countrysideexpiretime
eventwrite.url
=
http://countryside.51iwifi.com/gw/hesc-mq/hesc/mq/receive/cameraalarm
countryside.appid
=
05744e80b2c211ebe32a8e271066b19e
countryside.appsecret
=
a55a8870b2e911ebe32a8e271066b19e
countryside.tokenurl
=
http://countryside.51iwifi.com/gw/getAccessToken
file.publicpictureurl
=
http://zjh189.ncpoi.cc:10001
src/main/resources/mapper/SbtdspsrMapper.xml
View file @
36f0e3d1
...
@@ -20,6 +20,7 @@
...
@@ -20,6 +20,7 @@
<select
id=
"selectRecogByRtsp"
parameterType=
"java.lang.String"
resultType=
"java.util.HashMap"
>
<select
id=
"selectRecogByRtsp"
parameterType=
"java.lang.String"
resultType=
"java.util.HashMap"
>
SELECT DISTINCT
SELECT DISTINCT
(select concat(sbbh,"_",tdbh) from sbtdspsr where sbbh=b.videoid or squrllj=b.videoid limit 1) videoid,
(select concat(sbbh,"_",tdbh) from sbtdspsr where sbbh=b.videoid or squrllj=b.videoid limit 1) videoid,
(select tdmc from sbtdspsr where sbbh=b.videoid or squrllj=b.videoid limit 1) tdmc,
metatype,
metatype,
recordtype,
recordtype,
objectx,
objectx,
...
...
src/main/resources/mapper/TraffPictureMapper.xml
View file @
36f0e3d1
...
@@ -114,5 +114,8 @@
...
@@ -114,5 +114,8 @@
</update>
</update>
<update
id=
"updateTraffpicturePushStatus"
>
update traffpicture set pushdesc=#{pushdesc} , pushstatus=#{pushstatus} where id=#{id}
</update>
</mapper>
</mapper>
\ No newline at end of file
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