Commit d12cd6c4 authored by 周昊's avatar 周昊

1、开发场景启停关联flink接口

parent 872b625a
......@@ -61,14 +61,6 @@
<artifactId>ruoyi-generator</artifactId>
</dependency>
<!-- lombok工具 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
......
......@@ -90,4 +90,15 @@ public class AlgorithmSceneBaseController extends BaseController
{
return toAjax(algorithmSceneBaseService.deleteAlgorithmSceneBaseByIds(ids));
}
/**
* 算法场景启用禁用
*/
@PreAuthorize("@ss.hasPermi('system:algorithmScene:editStatus')")
@Log(title = "算法场景启用禁用", businessType = BusinessType.UPDATE)
@PutMapping("/editStatus")
public AjaxResult editStatus(@RequestBody AlgorithmSceneBase algorithmSceneBase)
{
return toAjax(algorithmSceneBaseService.editStatus(algorithmSceneBase));
}
}
......@@ -51,6 +51,9 @@ public class AlgorithmSceneBase extends BaseEntity
/** 删除标志(0代表存在 */
private String delFlag;
/** Flink jobId */
private String jobId;
public Long getId() {
return id;
}
......@@ -122,4 +125,12 @@ public class AlgorithmSceneBase extends BaseEntity
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
public String getJobId() {
return jobId;
}
public void setJobId(String jobId) {
this.jobId = jobId;
}
}
......@@ -61,4 +61,6 @@ public interface IAlgorithmSceneBaseService
public int deleteAlgorithmSceneBaseById(Long id);
List<AlgorithmSceneListDto> selectAlgorithmSceneListDto(AlgorithmSceneBase algorithmSceneBase);
int editStatus(AlgorithmSceneBase algorithmSceneBase);
}
......@@ -2,7 +2,13 @@ package com.ruoyi.algorithm.service.impl;
import java.util.List;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.ruoyi.algorithm.domain.dto.AlgorithmSceneListDto;
import com.ruoyi.algorithm.utils.FlinkRestApiUtil;
import com.ruoyi.common.config.FlinkConfig;
import com.ruoyi.common.exception.ServiceException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.algorithm.mapper.AlgorithmSceneBaseMapper;
......@@ -11,85 +17,78 @@ import com.ruoyi.algorithm.service.IAlgorithmSceneBaseService;
/**
* 算法场景Service业务层处理
*
*
* @author ruoyi
* @date 2023-04-26
*/
@Service
public class AlgorithmSceneBaseServiceImpl implements IAlgorithmSceneBaseService
{
public class AlgorithmSceneBaseServiceImpl implements IAlgorithmSceneBaseService {
@Autowired
private AlgorithmSceneBaseMapper algorithmSceneBaseMapper;
/**
* 查询算法场景
*
*
* @param id 算法场景主键
* @return 算法场景
*/
@Override
public AlgorithmSceneBase selectAlgorithmSceneBaseById(Long id)
{
public AlgorithmSceneBase selectAlgorithmSceneBaseById(Long id) {
return algorithmSceneBaseMapper.selectAlgorithmSceneBaseById(id);
}
/**
* 查询算法场景列表
*
*
* @param algorithmSceneBase 算法场景
* @return 算法场景
*/
@Override
public List<AlgorithmSceneBase> selectAlgorithmSceneBaseList(AlgorithmSceneBase algorithmSceneBase)
{
public List<AlgorithmSceneBase> selectAlgorithmSceneBaseList(AlgorithmSceneBase algorithmSceneBase) {
return algorithmSceneBaseMapper.selectAlgorithmSceneBaseList(algorithmSceneBase);
}
/**
* 新增算法场景
*
*
* @param algorithmSceneBase 算法场景
* @return 结果
*/
@Override
public int insertAlgorithmSceneBase(AlgorithmSceneBase algorithmSceneBase)
{
public int insertAlgorithmSceneBase(AlgorithmSceneBase algorithmSceneBase) {
return algorithmSceneBaseMapper.insertAlgorithmSceneBase(algorithmSceneBase);
}
/**
* 修改算法场景
*
*
* @param algorithmSceneBase 算法场景
* @return 结果
*/
@Override
public int updateAlgorithmSceneBase(AlgorithmSceneBase algorithmSceneBase)
{
public int updateAlgorithmSceneBase(AlgorithmSceneBase algorithmSceneBase) {
return algorithmSceneBaseMapper.updateAlgorithmSceneBase(algorithmSceneBase);
}
/**
* 批量删除算法场景
*
*
* @param ids 需要删除的算法场景主键
* @return 结果
*/
@Override
public int deleteAlgorithmSceneBaseByIds(Long[] ids)
{
public int deleteAlgorithmSceneBaseByIds(Long[] ids) {
return algorithmSceneBaseMapper.deleteAlgorithmSceneBaseByIds(ids);
}
/**
* 删除算法场景信息
*
*
* @param id 算法场景主键
* @return 结果
*/
@Override
public int deleteAlgorithmSceneBaseById(Long id)
{
public int deleteAlgorithmSceneBaseById(Long id) {
return algorithmSceneBaseMapper.deleteAlgorithmSceneBaseById(id);
}
......@@ -97,4 +96,31 @@ public class AlgorithmSceneBaseServiceImpl implements IAlgorithmSceneBaseService
public List<AlgorithmSceneListDto> selectAlgorithmSceneListDto(AlgorithmSceneBase algorithmSceneBase) {
return algorithmSceneBaseMapper.selectAlgorithmSceneListDto(algorithmSceneBase);
}
@Override
public int editStatus(AlgorithmSceneBase algorithmSceneBase) {
//判断状态是否正确
AlgorithmSceneBase sceneBase = selectAlgorithmSceneBaseById(algorithmSceneBase.getId());
if (sceneBase.getStatus().equals(algorithmSceneBase.getStatus())) {
throw new ServiceException("场景状态错误,请刷新后再试!");
}
AlgorithmSceneBase newSceneBase = new AlgorithmSceneBase();
newSceneBase.setId(algorithmSceneBase.getId());
newSceneBase.setStatus(algorithmSceneBase.getStatus());
newSceneBase.setJobId("");
if ("0".equals(algorithmSceneBase.getStatus())) {
// flink 启动job
String result = FlinkRestApiUtil.runJar(FlinkConfig.getJarId(), FlinkConfig.getEntryClass()
, StrUtil.format(FlinkConfig.getProgramArgs(), algorithmSceneBase.getId()));
JSONObject jsonObject = JSONUtil.parseObj(result);
String jobId = jsonObject.getStr("job");
newSceneBase.setJobId(jobId);
}else {
// flink 取消job
String s = FlinkRestApiUtil.cancelJob(sceneBase.getJobId());
}
//修改场景状态
updateAlgorithmSceneBase(newSceneBase);
return 1;
}
}
package com.ruoyi.algorithm.utils;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.ruoyi.common.config.FlinkConfig;
import java.util.HashMap;
/**
* @author 周昊
* @desc ...
* @date 2023-05-09 09:36:34
*/
public class FlinkRestApiUtil {
public static String runJar(String jarId, String entryClass, String programArgs) {
String url = "http://{}:{}/jars/{}/run?entry-class={}&program-args={}";
url = StrUtil.format(url, FlinkConfig.getHost(), FlinkConfig.getPort(), jarId, entryClass, programArgs);
return HttpUtil.post(url, new HashMap<>());
}
public static String cancelJob(String jobId) {
String url = "http://{}:{}/jobs/{}/yarn-cancel";
url = StrUtil.format(url, FlinkConfig.getHost(), FlinkConfig.getPort(), jobId);
return HttpUtil.get(url);
}
}
......@@ -129,3 +129,17 @@ xss:
excludes: /system/notice
# 匹配链接
urlPatterns: /system/*,/monitor/*,/tool/*
# flink配置
flink:
#地址
host: localhost
# 端口,默认为8081
port: 8081
# jarId
jarId: 896604ca-fe49-4bdc-ac3e-cb68710659b9_my-flink-project-0.1.jar
# flink启动类
entryClass: com.censoft.flink.StreamingJob
# 启动参数
programArgs: --sceneId {}
......@@ -140,7 +140,7 @@
<delete id="deleteAlgorithmPieceBaseById" parameterType="Long">
update algorithm_piece_base
set del_flag = '1'
where id
where id = #{id}
</delete>
<delete id="deleteAlgorithmPieceBaseByIds" parameterType="String">
......
......@@ -5,12 +5,21 @@
<mapper namespace="com.ruoyi.algorithm.mapper.AlgorithmSceneBaseMapper">
<resultMap type="com.ruoyi.algorithm.domain.AlgorithmSceneBase" id="AlgorithmSceneBaseResult">
<result property="id" column="id"/>
<result property="sceneName" column="scene_name"/>
<result property="algorithmId" column="algorithm_id"/>
<result property="alarmTypes" column="alarm_types"/>
<result property="frameSecond" column="frame_second"/>
<result property="cameraIdList" column="camera_id_list"/>
<result property="id" column="id" />
<result property="sceneName" column="scene_name" />
<result property="algorithmId" column="algorithm_id" />
<result property="alarmTypes" column="alarm_types" />
<result property="frameSecond" column="frame_second" />
<result property="cameraIdList" column="camera_id_list" />
<result property="live" column="live" />
<result property="status" column="status" />
<result property="jobId" column="job_id" />
<result property="delFlag" column="del_flag" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
<result property="remark" column="remark" />
</resultMap>
<resultMap type="com.ruoyi.algorithm.domain.dto.AlgorithmSceneListDto" id="AlgorithmSceneListDtoResult">
......@@ -31,8 +40,7 @@
</resultMap>
<sql id="selectAlgorithmSceneBaseVo">
select id, scene_name, algorithm_id, alarm_types, frame_second, camera_id_list
from algorithm_scene_base
select id, scene_name, algorithm_id, alarm_types, frame_second, camera_id_list, live, status, job_id, del_flag, create_by, create_time, update_by, update_time, remark from algorithm_scene_base
</sql>
<select id="selectAlgorithmSceneBaseList" parameterType="AlgorithmSceneBase" resultMap="AlgorithmSceneBaseResult">
......@@ -113,6 +121,15 @@
<if test="alarmTypes != null">alarm_types,</if>
<if test="frameSecond != null">frame_second,</if>
<if test="cameraIdList != null">camera_id_list,</if>
<if test="live != null">live,</if>
<if test="status != null">status,</if>
<if test="jobId != null">job_id,</if>
<if test="delFlag != null">del_flag,</if>
<if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if>
<if test="updateTime != null">update_time,</if>
<if test="remark != null">remark,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">#{id},</if>
......@@ -121,6 +138,15 @@
<if test="alarmTypes != null">#{alarmTypes},</if>
<if test="frameSecond != null">#{frameSecond},</if>
<if test="cameraIdList != null">#{cameraIdList},</if>
<if test="live != null">#{live},</if>
<if test="status != null">#{status},</if>
<if test="jobId != null">#{jobId},</if>
<if test="delFlag != null">#{delFlag},</if>
<if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="remark != null">#{remark},</if>
</trim>
</insert>
......@@ -132,18 +158,27 @@
<if test="alarmTypes != null">alarm_types = #{alarmTypes},</if>
<if test="frameSecond != null">frame_second = #{frameSecond},</if>
<if test="cameraIdList != null">camera_id_list = #{cameraIdList},</if>
<if test="live != null">live = #{live},</if>
<if test="status != null">status = #{status},</if>
<if test="jobId != null">job_id = #{jobId},</if>
<if test="delFlag != null">del_flag = #{delFlag},</if>
<if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="remark != null">remark = #{remark},</if>
</trim>
where id = #{id}
</update>
<delete id="deleteAlgorithmSceneBaseById" parameterType="Long">
delete
from algorithm_scene_base
update algorithm_scene_base
set del_flag = '1'
where id = #{id}
</delete>
<delete id="deleteAlgorithmSceneBaseByIds" parameterType="String">
delete from algorithm_scene_base where id in
update algorithm_scene_base set del_flag = '1' where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
......
......@@ -126,6 +126,20 @@
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.16</version>
</dependency>
<!-- lombok工具 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.ruoyi.common.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* flink相关配置
*
* @author ruoyi
*/
@Component
@ConfigurationProperties(prefix = "flink")
public class FlinkConfig
{
/** 地址 */
private static String host;
/** 端口 */
private static String port;
/** jarId */
private static String jarId;
/** flink启动类 */
private static String entryClass;
/** 启动参数 */
private static String programArgs;
public static String getHost() {
return host;
}
public void setHost(String host) {
FlinkConfig.host = host;
}
public static String getPort() {
return port;
}
public void setPort(String port) {
FlinkConfig.port = port;
}
public static String getJarId() {
return jarId;
}
public void setJarId(String jarId) {
FlinkConfig.jarId = jarId;
}
public static String getEntryClass() {
return entryClass;
}
public void setEntryClass(String entryClass) {
FlinkConfig.entryClass = entryClass;
}
public static String getProgramArgs() {
return programArgs;
}
public void setProgramArgs(String programArgs) {
FlinkConfig.programArgs = programArgs;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment