Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
R
RuoYi-Vue-master
Project
Project
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
AI算法平台
RuoYi-Vue-master
Commits
0da50031
Commit
0da50031
authored
May 10, 2023
by
周昊
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1、开发对接ai算法启停接口
parent
d12cd6c4
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
165 additions
and
147 deletions
+165
-147
ruoyi-admin/src/main/java/com/ruoyi/algorithm/domain/AlgorithmSceneStatus.java
...java/com/ruoyi/algorithm/domain/AlgorithmSceneStatus.java
+4
-4
ruoyi-admin/src/main/java/com/ruoyi/algorithm/domain/dto/AlgorithmSceneStatusCameraListDto.java
...gorithm/domain/dto/AlgorithmSceneStatusCameraListDto.java
+21
-0
ruoyi-admin/src/main/java/com/ruoyi/algorithm/mapper/AlgorithmSceneStatusMapper.java
...om/ruoyi/algorithm/mapper/AlgorithmSceneStatusMapper.java
+9
-9
ruoyi-admin/src/main/java/com/ruoyi/algorithm/service/IAlgorithmSceneStatusService.java
...ruoyi/algorithm/service/IAlgorithmSceneStatusService.java
+4
-50
ruoyi-admin/src/main/java/com/ruoyi/algorithm/service/impl/AlgorithmSceneBaseServiceImpl.java
...algorithm/service/impl/AlgorithmSceneBaseServiceImpl.java
+35
-1
ruoyi-admin/src/main/java/com/ruoyi/algorithm/service/impl/AlgorithmSceneStatusServiceImpl.java
...gorithm/service/impl/AlgorithmSceneStatusServiceImpl.java
+24
-72
ruoyi-admin/src/main/resources/application.yml
ruoyi-admin/src/main/resources/application.yml
+7
-0
ruoyi-admin/src/main/resources/mapper/system/AlgorithmSceneStatusMapper.xml
...in/resources/mapper/system/AlgorithmSceneStatusMapper.xml
+25
-11
ruoyi-common/src/main/java/com/ruoyi/common/config/AiRestApiConfig.java
...rc/main/java/com/ruoyi/common/config/AiRestApiConfig.java
+36
-0
No files found.
ruoyi-admin/src/main/java/com/ruoyi/algorithm/domain/AlgorithmSceneStatus.java
View file @
0da50031
...
...
@@ -15,12 +15,12 @@ public class AlgorithmSceneStatus extends BaseEntity
{
private
static
final
long
serialVersionUID
=
1L
;
/** 算法key值 */
private
String
algorithmKey
;
/** 场景id */
private
Long
sceneId
;
/** 算法key值 */
private
String
algorithmKey
;
/** 摄像头列表json */
@Excel
(
name
=
"摄像头列表json"
)
private
String
cameraList
;
...
...
@@ -69,8 +69,8 @@ public class AlgorithmSceneStatus extends BaseEntity
@Override
public
String
toString
()
{
return
new
ToStringBuilder
(
this
,
ToStringStyle
.
MULTI_LINE_STYLE
)
.
append
(
"algorithmKey"
,
getAlgorithmKey
())
.
append
(
"sceneId"
,
getSceneId
())
.
append
(
"algorithmKey"
,
getAlgorithmKey
())
.
append
(
"cameraList"
,
getCameraList
())
.
append
(
"frameSecond"
,
getFrameSecond
())
.
toString
();
...
...
ruoyi-admin/src/main/java/com/ruoyi/algorithm/domain/dto/AlgorithmSceneStatusCameraListDto.java
0 → 100644
View file @
0da50031
package
com
.
ruoyi
.
algorithm
.
domain
.
dto
;
import
lombok.Data
;
/**
* @author 周昊
* @desc ...
* @date 2023-05-10 14:36:40
*/
@Data
public
class
AlgorithmSceneStatusCameraListDto
{
//摄像头rtsp地址
private
String
rtsp
;
//摄像头第几个 从0开始
private
Integer
sort
;
//阈值
private
Integer
threshold
;
}
ruoyi-admin/src/main/java/com/ruoyi/algorithm/mapper/AlgorithmSceneStatusMapper.java
View file @
0da50031
package
com
.
ruoyi
.
algorithm
.
mapper
;
import
java.util.List
;
import
com.ruoyi.algorithm.domain.AlgorithmSceneBase
;
import
com.ruoyi.algorithm.domain.AlgorithmSceneStatus
;
import
com.ruoyi.algorithm.domain.dto.AlgorithmSceneStatusCameraListDto
;
import
org.apache.ibatis.annotations.Param
;
/**
* 算法启动摄像头配置Mapper接口
...
...
@@ -46,16 +50,12 @@ public interface AlgorithmSceneStatusMapper
/**
* 删除算法启动摄像头配置
*
* @param
algorithmKey 算法启动摄像头配置主键
* @param
sceneId 场景id
* @return 结果
*/
public
int
deleteAlgorithmSceneStatusBy
AlgorithmKey
(
String
algorithmKey
);
public
int
deleteAlgorithmSceneStatusBy
SceneId
(
@Param
(
"sceneId"
)
Long
sceneId
);
/**
* 批量删除算法启动摄像头配置
*
* @param algorithmKeys 需要删除的数据主键集合
* @return 结果
*/
public
int
deleteAlgorithmSceneStatusByAlgorithmKeys
(
String
[]
algorithmKeys
);
public
AlgorithmSceneStatus
selectAlgorithmSceneBase
(
@Param
(
"sceneId"
)
Long
sceneId
);
public
List
<
AlgorithmSceneStatusCameraListDto
>
selectCameraList
(
@Param
(
"sceneId"
)
Long
sceneId
);
}
ruoyi-admin/src/main/java/com/ruoyi/algorithm/service/IAlgorithmSceneStatusService.java
View file @
0da50031
package
com
.
ruoyi
.
algorithm
.
service
;
import
java.util.List
;
import
com.ruoyi.algorithm.domain.AlgorithmSceneStatus
;
/**
* 算法启动摄像头配置Service接口
*
*
* @author ruoyi
* @date 2023-04-26
*/
public
interface
IAlgorithmSceneStatusService
{
/**
* 查询算法启动摄像头配置
*
* @param algorithmKey 算法启动摄像头配置主键
* @return 算法启动摄像头配置
*/
public
AlgorithmSceneStatus
selectAlgorithmSceneStatusByAlgorithmKey
(
String
algorithmKey
);
public
interface
IAlgorithmSceneStatusService
{
public
AlgorithmSceneStatus
createBySceneId
(
Long
sceneId
);
/**
* 查询算法启动摄像头配置列表
*
* @param algorithmSceneStatus 算法启动摄像头配置
* @return 算法启动摄像头配置集合
*/
public
List
<
AlgorithmSceneStatus
>
selectAlgorithmSceneStatusList
(
AlgorithmSceneStatus
algorithmSceneStatus
);
/**
* 新增算法启动摄像头配置
*
* @param algorithmSceneStatus 算法启动摄像头配置
* @return 结果
*/
public
int
insertAlgorithmSceneStatus
(
AlgorithmSceneStatus
algorithmSceneStatus
);
/**
* 修改算法启动摄像头配置
*
* @param algorithmSceneStatus 算法启动摄像头配置
* @return 结果
*/
public
int
updateAlgorithmSceneStatus
(
AlgorithmSceneStatus
algorithmSceneStatus
);
/**
* 批量删除算法启动摄像头配置
*
* @param algorithmKeys 需要删除的算法启动摄像头配置主键集合
* @return 结果
*/
public
int
deleteAlgorithmSceneStatusByAlgorithmKeys
(
String
[]
algorithmKeys
);
/**
* 删除算法启动摄像头配置信息
*
* @param algorithmKey 算法启动摄像头配置主键
* @return 结果
*/
public
int
deleteAlgorithmSceneStatusByAlgorithmKey
(
String
algorithmKey
);
public
int
deleteBySceneId
(
Long
sceneId
);
}
ruoyi-admin/src/main/java/com/ruoyi/algorithm/service/impl/AlgorithmSceneBaseServiceImpl.java
View file @
0da50031
package
com
.
ruoyi
.
algorithm
.
service
.
impl
;
import
java.util.HashMap
;
import
java.util.List
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.http.HttpUtil
;
import
cn.hutool.json.JSONObject
;
import
cn.hutool.json.JSONUtil
;
import
com.ruoyi.algorithm.domain.dto.AlgorithmSceneListDto
;
import
com.ruoyi.algorithm.service.IAlgorithmSceneStatusService
;
import
com.ruoyi.algorithm.utils.FlinkRestApiUtil
;
import
com.ruoyi.common.config.AiRestApiConfig
;
import
com.ruoyi.common.config.FlinkConfig
;
import
com.ruoyi.common.exception.ServiceException
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -15,6 +19,8 @@ import com.ruoyi.algorithm.mapper.AlgorithmSceneBaseMapper;
import
com.ruoyi.algorithm.domain.AlgorithmSceneBase
;
import
com.ruoyi.algorithm.service.IAlgorithmSceneBaseService
;
import
javax.annotation.Resource
;
/**
* 算法场景Service业务层处理
*
...
...
@@ -26,6 +32,9 @@ public class AlgorithmSceneBaseServiceImpl implements IAlgorithmSceneBaseService
@Autowired
private
AlgorithmSceneBaseMapper
algorithmSceneBaseMapper
;
@Resource
private
IAlgorithmSceneStatusService
algorithmSceneStatusService
;
/**
* 查询算法场景
*
...
...
@@ -104,6 +113,11 @@ public class AlgorithmSceneBaseServiceImpl implements IAlgorithmSceneBaseService
if
(
sceneBase
.
getStatus
().
equals
(
algorithmSceneBase
.
getStatus
()))
{
throw
new
ServiceException
(
"场景状态错误,请刷新后再试!"
);
}
//通知算法启动停止
sendAi
(
algorithmSceneBase
.
getId
(),
algorithmSceneBase
.
getStatus
());
//启动、取消flink流处理
AlgorithmSceneBase
newSceneBase
=
new
AlgorithmSceneBase
();
newSceneBase
.
setId
(
algorithmSceneBase
.
getId
());
newSceneBase
.
setStatus
(
algorithmSceneBase
.
getStatus
());
...
...
@@ -115,7 +129,7 @@ public class AlgorithmSceneBaseServiceImpl implements IAlgorithmSceneBaseService
JSONObject
jsonObject
=
JSONUtil
.
parseObj
(
result
);
String
jobId
=
jsonObject
.
getStr
(
"job"
);
newSceneBase
.
setJobId
(
jobId
);
}
else
{
}
else
{
// flink 取消job
String
s
=
FlinkRestApiUtil
.
cancelJob
(
sceneBase
.
getJobId
());
}
...
...
@@ -123,4 +137,24 @@ public class AlgorithmSceneBaseServiceImpl implements IAlgorithmSceneBaseService
updateAlgorithmSceneBase
(
newSceneBase
);
return
1
;
}
private
void
sendAi
(
Long
sceneId
,
String
status
)
{
String
statusKey
;
//启动
if
(
"0"
.
equals
(
status
))
{
//生成ai表数据
algorithmSceneStatusService
.
createBySceneId
(
sceneId
);
statusKey
=
"run"
;
}
else
{
//停止,删除ai表数据
algorithmSceneStatusService
.
deleteBySceneId
(
sceneId
);
statusKey
=
"stop"
;
}
//通知ai算法
String
url
=
"http://{}:{}/{}?sceneId={}"
;
url
=
StrUtil
.
format
(
url
,
AiRestApiConfig
.
getHost
(),
AiRestApiConfig
.
getPort
(),
statusKey
,
sceneId
);
HttpUtil
.
post
(
url
,
new
HashMap
<>());
return
;
}
}
ruoyi-admin/src/main/java/com/ruoyi/algorithm/service/impl/AlgorithmSceneStatusServiceImpl.java
View file @
0da50031
package
com
.
ruoyi
.
algorithm
.
service
.
impl
;
import
java.util.List
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
com.ruoyi.algorithm.mapper.AlgorithmSceneStatusMapper
;
import
cn.hutool.json.JSONUtil
;
import
com.ruoyi.algorithm.domain.AlgorithmSceneStatus
;
import
com.ruoyi.algorithm.domain.dto.AlgorithmSceneStatusCameraListDto
;
import
com.ruoyi.algorithm.mapper.AlgorithmSceneStatusMapper
;
import
com.ruoyi.algorithm.service.IAlgorithmSceneStatusService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
/**
* 算法启动摄像头配置Service业务层处理
*
*
* @author ruoyi
* @date 2023-04-26
*/
@Service
public
class
AlgorithmSceneStatusServiceImpl
implements
IAlgorithmSceneStatusService
{
public
class
AlgorithmSceneStatusServiceImpl
implements
IAlgorithmSceneStatusService
{
@Autowired
private
AlgorithmSceneStatusMapper
algorithmSceneStatusMapper
;
/**
* 查询算法启动摄像头配置
*
* @param algorithmKey 算法启动摄像头配置主键
* @return 算法启动摄像头配置
*/
@Override
public
AlgorithmSceneStatus
selectAlgorithmSceneStatusByAlgorithmKey
(
String
algorithmKey
)
{
return
algorithmSceneStatusMapper
.
selectAlgorithmSceneStatusByAlgorithmKey
(
algorithmKey
);
}
/**
* 查询算法启动摄像头配置列表
*
* @param algorithmSceneStatus 算法启动摄像头配置
* @return 算法启动摄像头配置
*/
@Override
public
List
<
AlgorithmSceneStatus
>
selectAlgorithmSceneStatusList
(
AlgorithmSceneStatus
algorithmSceneStatus
)
{
return
algorithmSceneStatusMapper
.
selectAlgorithmSceneStatusList
(
algorithmSceneStatus
);
}
/**
* 新增算法启动摄像头配置
*
* @param algorithmSceneStatus 算法启动摄像头配置
* @return 结果
*/
@Override
public
int
insertAlgorithmSceneStatus
(
AlgorithmSceneStatus
algorithmSceneStatus
)
{
return
algorithmSceneStatusMapper
.
insertAlgorithmSceneStatus
(
algorithmSceneStatus
);
}
/**
* 修改算法启动摄像头配置
*
* @param algorithmSceneStatus 算法启动摄像头配置
* @return 结果
*/
@Override
public
int
updateAlgorithmSceneStatus
(
AlgorithmSceneStatus
algorithmSceneStatus
)
{
return
algorithmSceneStatusMapper
.
updateAlgorithmSceneStatus
(
algorithmSceneStatus
);
}
/**
* 批量删除算法启动摄像头配置
*
* @param algorithmKeys 需要删除的算法启动摄像头配置主键
* @return 结果
*/
@Override
public
int
deleteAlgorithmSceneStatusByAlgorithmKeys
(
String
[]
algorithmKeys
)
{
return
algorithmSceneStatusMapper
.
deleteAlgorithmSceneStatusByAlgorithmKeys
(
algorithmKeys
);
public
AlgorithmSceneStatus
createBySceneId
(
Long
sceneId
)
{
//清空当前sceneId数据
algorithmSceneStatusMapper
.
deleteAlgorithmSceneStatusBySceneId
(
sceneId
);
//生成全新的数据并插入
AlgorithmSceneStatus
algorithmSceneStatus
=
algorithmSceneStatusMapper
.
selectAlgorithmSceneBase
(
sceneId
);
List
<
AlgorithmSceneStatusCameraListDto
>
cameraList
=
algorithmSceneStatusMapper
.
selectCameraList
(
sceneId
);
for
(
int
i
=
0
;
i
<
cameraList
.
size
();
i
++)
{
cameraList
.
get
(
i
).
setSort
(
i
);
}
algorithmSceneStatus
.
setCameraList
(
JSONUtil
.
toJsonStr
(
cameraList
));
algorithmSceneStatusMapper
.
insertAlgorithmSceneStatus
(
algorithmSceneStatus
);
return
algorithmSceneStatus
;
}
/**
* 删除算法启动摄像头配置信息
*
* @param algorithmKey 算法启动摄像头配置主键
* @return 结果
*/
@Override
public
int
deleteAlgorithmSceneStatusByAlgorithmKey
(
String
algorithmKey
)
{
return
algorithmSceneStatusMapper
.
deleteAlgorithmSceneStatusByAlgorithmKey
(
algorithmKey
);
public
int
deleteBySceneId
(
Long
sceneId
)
{
return
algorithmSceneStatusMapper
.
deleteAlgorithmSceneStatusBySceneId
(
sceneId
);
}
}
ruoyi-admin/src/main/resources/application.yml
View file @
0da50031
...
...
@@ -143,3 +143,10 @@ flink:
# 启动参数
programArgs
:
--sceneId {}
# ai平台发送接口设置
airestapi
:
#地址
host
:
localhost
# 端口,默认为8081
port
:
8081
ruoyi-admin/src/main/resources/mapper/system/AlgorithmSceneStatusMapper.xml
View file @
0da50031
...
...
@@ -4,7 +4,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.ruoyi.algorithm.mapper.AlgorithmSceneStatusMapper"
>
<resultMap
type=
"AlgorithmSceneStatus"
id=
"AlgorithmSceneStatusResult"
>
<resultMap
type=
"
com.ruoyi.algorithm.domain.
AlgorithmSceneStatus"
id=
"AlgorithmSceneStatusResult"
>
<result
property=
"algorithmKey"
column=
"algorithm_key"
/>
<result
property=
"sceneId"
column=
"scene_id"
/>
<result
property=
"cameraList"
column=
"camera_list"
/>
...
...
@@ -27,7 +27,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include
refid=
"selectAlgorithmSceneStatusVo"
/>
where algorithm_key = #{algorithmKey}
</select>
<select
id=
"selectAlgorithmSceneBase"
resultType=
"com.ruoyi.algorithm.domain.AlgorithmSceneStatus"
>
SELECT
asb.id AS sceneId,
ab.algorithm_key AS algorithmKey,
asb.frame_second AS frameSecond
FROM
algorithm_scene_base asb
LEFT JOIN algorithm_base ab ON ab.id = asb.algorithm_id
WHERE
asb.id = #{sceneId}
</select>
<select
id=
"selectCameraList"
resultType=
"com.ruoyi.algorithm.domain.dto.AlgorithmSceneStatusCameraListDto"
>
SELECT
acb.rtsp AS rtsp,
60 AS threshold
FROM
algorithm_scene_base asb
LEFT JOIN algorithm_camera_base acb ON FIND_IN_SET( acb.id, asb.camera_id_list )
WHERE
asb.id = #{sceneId}
</select>
<insert
id=
"insertAlgorithmSceneStatus"
parameterType=
"AlgorithmSceneStatus"
>
insert into algorithm_scene_status
<trim
prefix=
"("
suffix=
")"
suffixOverrides=
","
>
...
...
@@ -54,14 +75,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where algorithm_key = #{algorithmKey}
</update>
<delete
id=
"deleteAlgorithmSceneStatusByAlgorithmKey"
parameterType=
"String"
>
delete from algorithm_scene_status where algorithm_key = #{algorithmKey}
</delete>
<delete
id=
"deleteAlgorithmSceneStatusByAlgorithmKeys"
parameterType=
"String"
>
delete from algorithm_scene_status where algorithm_key in
<foreach
item=
"algorithmKey"
collection=
"array"
open=
"("
separator=
","
close=
")"
>
#{algorithmKey}
</foreach>
<delete
id=
"deleteAlgorithmSceneStatusBySceneId"
parameterType=
"Long"
>
delete from algorithm_scene_status where scene_id = #{sceneId}
</delete>
</mapper>
\ No newline at end of file
ruoyi-common/src/main/java/com/ruoyi/common/config/AiRestApiConfig.java
0 → 100644
View file @
0da50031
package
com
.
ruoyi
.
common
.
config
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.stereotype.Component
;
/**
* flink相关配置
*
* @author ruoyi
*/
@Component
@ConfigurationProperties
(
prefix
=
"airestapi"
)
public
class
AiRestApiConfig
{
/** 地址 */
private
static
String
host
;
/** 端口 */
private
static
String
port
;
public
static
String
getHost
()
{
return
host
;
}
public
void
setHost
(
String
host
)
{
AiRestApiConfig
.
host
=
host
;
}
public
static
String
getPort
()
{
return
port
;
}
public
void
setPort
(
String
port
)
{
AiRestApiConfig
.
port
=
port
;
}
}
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