脚本管理页面增加字段、执行结果根据失败关键字筛选

优化菜单点击方法、优化心跳处理
This commit is contained in:
gaoyutao
2025-11-13 18:08:05 +08:00
parent 50d817091e
commit d9bd70860c
15 changed files with 213 additions and 167 deletions
@@ -7,9 +7,7 @@ import com.ruoyi.common.core.web.page.TableDataInfo;
import com.ruoyi.system.api.domain.*;
import com.ruoyi.system.api.factory.RemoteRevenueConfigFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -132,5 +130,7 @@ public interface RemoteRevenueConfigService
@PostMapping("/bandwidth/getEpsNodeBandWidthList")
public R<List<EpsNodeBandwidthRemote>> getEpsNodeBandWidthList(@RequestBody EpsNodeBandwidthRemote epsNodeBandwidthRemote, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
@GetMapping("/businessScript/{id}")
public R<EpsBusinessScriptRemote> getBusinessScriptMsgByScriptId(@PathVariable("id") Long id, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
}
@@ -0,0 +1,35 @@
package com.ruoyi.system.api.domain;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
import lombok.Data;
/**
* 业务脚本管理对象 eps_business_script
*
* @author gyt
* @date 2025-10-13
*/
@Data
public class EpsBusinessScriptRemote extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 主键ID */
private Long id;
/** 脚本名称 */
@Excel(name = "脚本名称")
private String scriptName;
/** 脚本文件地址 */
@Excel(name = "脚本文件地址")
private String scriptPath;
/** 脚本默认参数 */
@Excel(name = "脚本默认参数")
private String defaultParams;
/** 结果失败判断关键字 */
@Excel(name = "结果失败判断关键字")
private String failedKeywords;
}
@@ -91,6 +91,11 @@ public class RemoteRevenueConfigFallbackFactory implements FallbackFactory<Remot
public R<List<EpsNodeBandwidthRemote>> getEpsNodeBandWidthList(EpsNodeBandwidthRemote epsNodeBandwidthRemote, String source) {
return R.fail("获取95值列表失败:" + throwable.getMessage());
}
@Override
public R<EpsBusinessScriptRemote> getBusinessScriptMsgByScriptId(Long id, String source) {
return R.fail("获取错误关键词失败:" + throwable.getMessage());
}
};
}
}
@@ -29,10 +29,10 @@ public class SysMenuClickController extends BaseController
* 查询菜单点击计数列表
*/
@RequiresPermissions("system:sysMenuClick:list")
@GetMapping("/list")
public AjaxResult list(SysMenuClick sysMenuClick)
@GetMapping("/getMenuListTopEight")
public AjaxResult list()
{
List<SysMenuClick> list = sysMenuClickService.selectSysMenuClickList(sysMenuClick);
List<SysMenuClick> list = sysMenuClickService.selectSysMenuClickList();
return success(list);
}
/**
@@ -29,4 +29,7 @@ public class EpsBusinessScript extends BaseEntity
/** 脚本默认参数 */
@Excel(name = "脚本默认参数")
private String defaultParams;
/** 结果失败判断关键字 */
@Excel(name = "结果失败判断关键字")
private String failedKeywords;
}
@@ -1,11 +1,11 @@
package com.ruoyi.system.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.annotation.Excel;
import com.ruoyi.common.core.web.domain.BaseEntity;
import lombok.Data;
import java.util.Date;
/**
* 菜单点击计数对象 sys_menu_click
@@ -13,6 +13,7 @@ import com.ruoyi.common.core.web.domain.BaseEntity;
* @author gyt
* @date 2025-11-12
*/
@Data
public class SysMenuClick extends BaseEntity
{
private static final long serialVersionUID = 1L;
@@ -37,69 +38,4 @@ public class SysMenuClick extends BaseEntity
@Excel(name = "最后点击时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date lastClickTime;
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setPageRoute(String pageRoute)
{
this.pageRoute = pageRoute;
}
public String getPageRoute()
{
return pageRoute;
}
public void setPageName(String pageName)
{
this.pageName = pageName;
}
public String getPageName()
{
return pageName;
}
public void setClickCount(Long clickCount)
{
this.clickCount = clickCount;
}
public Long getClickCount()
{
return clickCount;
}
public void setLastClickTime(Date lastClickTime)
{
this.lastClickTime = lastClickTime;
}
public Date getLastClickTime()
{
return lastClickTime;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("id", getId())
.append("pageRoute", getPageRoute())
.append("pageName", getPageName())
.append("clickCount", getClickCount())
.append("lastClickTime", getLastClickTime())
.append("createBy", getCreateBy())
.append("createTime", getCreateTime())
.append("updateBy", getUpdateBy())
.append("updateTime", getUpdateTime())
.append("remark", getRemark())
.toString();
}
}
@@ -1,8 +1,9 @@
package com.ruoyi.system.service;
import java.util.List;
import com.ruoyi.system.domain.SysMenuClick;
import java.util.List;
/**
* 菜单点击计数Service接口
*
@@ -25,7 +26,7 @@ public interface ISysMenuClickService
* @param sysMenuClick 菜单点击计数
* @return 菜单点击计数集合
*/
public List<SysMenuClick> selectSysMenuClickList(SysMenuClick sysMenuClick);
public List<SysMenuClick> selectSysMenuClickList();
/**
* 新增菜单点击计数
@@ -1,11 +1,12 @@
package com.ruoyi.system.service;
import java.util.List;
import java.util.Set;
import com.ruoyi.system.domain.SysMenu;
import com.ruoyi.system.domain.vo.RouterVo;
import com.ruoyi.system.domain.vo.TreeSelect;
import java.util.List;
import java.util.Set;
/**
* 菜单 业务层
*
@@ -141,4 +142,11 @@ public interface ISysMenuService
* @return 结果
*/
public boolean checkMenuNameUnique(SysMenu menu);
/**
* 根据用户查询系统菜单列表--权限控制前
*
* @param userId 用户ID
* @return 菜单列表
*/
public List<SysMenu> getMenuListByWelcome(Long userId);
}
@@ -1,13 +1,19 @@
package com.ruoyi.system.service.impl;
import com.ruoyi.common.core.utils.DateUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.system.domain.SysMenu;
import com.ruoyi.system.domain.SysMenuClick;
import com.ruoyi.system.mapper.SysMenuClickMapper;
import com.ruoyi.system.service.ISysMenuClickService;
import com.ruoyi.system.service.ISysMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 菜单点击计数Service业务层处理
@@ -20,6 +26,8 @@ public class SysMenuClickServiceImpl implements ISysMenuClickService
{
@Autowired
private SysMenuClickMapper sysMenuClickMapper;
@Autowired
private ISysMenuService sysMenuService;
/**
* 查询菜单点击计数
@@ -40,9 +48,34 @@ public class SysMenuClickServiceImpl implements ISysMenuClickService
* @return 菜单点击计数
*/
@Override
public List<SysMenuClick> selectSysMenuClickList(SysMenuClick sysMenuClick)
public List<SysMenuClick> selectSysMenuClickList()
{
return sysMenuClickMapper.selectSysMenuClickList(sysMenuClick);
List<SysMenuClick> menuClickList = sysMenuClickMapper.selectSysMenuClickList(new SysMenuClick());
// 获取当前用户有权限的菜单列表
List<SysMenu> permittedMenus = getPermittedMenusForCurrentUser();
Set<String> permittedMenuIds = permittedMenus.stream()
.map(SysMenu::getMenuName)
.collect(Collectors.toSet());
// 过滤有权限的菜单
List<SysMenuClick> permittedPopularMenus = menuClickList.stream()
.filter(menu -> permittedMenuIds.contains(menu.getPageName()))
.limit(8) // 取前8个
.collect(Collectors.toList());
return permittedPopularMenus;
}
/**
* 获取当前用户有权限的菜单
*/
private List<SysMenu> getPermittedMenusForCurrentUser() {
// 使用Ruoyi的权限服务(推荐)
if (SecurityUtils.getLoginUser() != null) {
Long userId = SecurityUtils.getUserId();
return sysMenuService.getMenuListByWelcome(userId);
}
// 如果是匿名访问,返回空列表
return new ArrayList<>();
}
/**
@@ -1,15 +1,5 @@
package com.ruoyi.system.service.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.core.utils.StringUtils;
@@ -24,6 +14,11 @@ import com.ruoyi.system.mapper.SysMenuMapper;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysRoleMenuMapper;
import com.ruoyi.system.service.ISysMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* 菜单 业务层处理
@@ -540,4 +535,27 @@ public class SysMenuServiceImpl implements ISysMenuService
return StringUtils.replaceEach(path, new String[] { Constants.HTTP, Constants.HTTPS, Constants.WWW, ".", ":" },
new String[] { "", "", "", "/", "/" });
}
/**
* 根据用户查询系统菜单列表--欢迎页
*
* @param userId 用户ID
* @return 菜单列表
*/
@Override
public List<SysMenu> getMenuListByWelcome(Long userId)
{
SysMenu menu = new SysMenu();
List<SysMenu> menuList = null;
// 管理员显示所有菜单信息
if (userId == 1L)
{
menuList = menuMapper.selectMenuList(menu);
}
else
{
menu.getParams().put("userId", userId);
menuList = menuMapper.selectMenuListByUserId(menu);
}
return menuList;
}
}
@@ -1,14 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.EpsBusinessScriptMapper">
<resultMap type="EpsBusinessScript" id="EpsBusinessScriptResult">
<result property="id" column="id" />
<result property="scriptName" column="script_name" />
<result property="scriptPath" column="script_path" />
<result property="defaultParams" column="default_params" />
<result property="failedKeywords" column="failed_keywords" />
<result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" />
<result property="createBy" column="create_by" />
@@ -16,18 +17,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql id="selectEpsBusinessScriptVo">
select id, script_name, script_path, default_params, create_time, update_time, create_by, update_by from eps_business_script
select id, script_name, script_path, default_params, failed_keywords, create_time, update_time, create_by, update_by from eps_business_script
</sql>
<select id="selectEpsBusinessScriptList" parameterType="EpsBusinessScript" resultMap="EpsBusinessScriptResult">
<include refid="selectEpsBusinessScriptVo"/>
<where>
<where>
<if test="scriptName != null and scriptName != ''"> and script_name like concat('%', #{scriptName}, '%')</if>
<if test="scriptPath != null and scriptPath != ''"> and script_path = #{scriptPath}</if>
<if test="defaultParams != null and defaultParams != ''"> and default_params = #{defaultParams}</if>
<if test="failedKeywords != null and failedKeywords != ''"> and failed_keywords = #{failedKeywords}</if>
</where>
</select>
<select id="selectEpsBusinessScriptById" parameterType="Long" resultMap="EpsBusinessScriptResult">
<include refid="selectEpsBusinessScriptVo"/>
where id = #{id}
@@ -39,20 +41,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="scriptName != null">script_name,</if>
<if test="scriptPath != null">script_path,</if>
<if test="defaultParams != null">default_params,</if>
<if test="failedKeywords != null">failed_keywords,</if>
<if test="createTime != null">create_time,</if>
<if test="updateTime != null">update_time,</if>
<if test="createBy != null">create_by,</if>
<if test="updateBy != null">update_by,</if>
</trim>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="scriptName != null">#{scriptName},</if>
<if test="scriptPath != null">#{scriptPath},</if>
<if test="defaultParams != null">#{defaultParams},</if>
<if test="failedKeywords != null">#{failedKeywords},</if>
<if test="createTime != null">#{createTime},</if>
<if test="updateTime != null">#{updateTime},</if>
<if test="createBy != null">#{createBy},</if>
<if test="updateBy != null">#{updateBy},</if>
</trim>
</trim>
</insert>
<update id="updateEpsBusinessScript" parameterType="EpsBusinessScript">
@@ -61,6 +65,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="scriptName != null">script_name = #{scriptName},</if>
<if test="scriptPath != null">script_path = #{scriptPath},</if>
default_params = #{defaultParams},
failed_keywords = #{failedKeywords},
<if test="createTime != null">create_time = #{createTime},</if>
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="createBy != null">create_by = #{createBy},</if>
@@ -74,7 +79,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</delete>
<delete id="deleteEpsBusinessScriptByIds" parameterType="String">
delete from eps_business_script where id in
delete from eps_business_script where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
@@ -30,7 +30,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="lastClickTime != null "> and last_click_time = #{lastClickTime}</if>
</where>
order by click_count desc
limit 8
</select>
<select id="selectSysMenuClickById" parameterType="Long" resultMap="SysMenuClickResult">
@@ -1,5 +1,6 @@
package com.ruoyi.rocketmq.handler;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.constant.SecurityConstants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.enums.MsgEnum;
@@ -896,69 +897,66 @@ public class MessageHandler {
String statusKey = HEARTBEAT_STATUS_PREFIX + clientId;
String timeKey = HEARTBEAT_TIME_PREFIX + clientId;
String recoveryCountKey = HEARTBEAT_RECOVERY_COUNT_PREFIX + clientId;
String heartbeatCountKey = HEARTBEAT_COUNT_PREFIX + clientId; // 新增心跳次数统计key
String heartbeatCountKey = HEARTBEAT_COUNT_PREFIX + clientId;
String alertKey = HEARTBEAT_ALERT_PREFIX + clientId;
try {
// 记录处理前状态(调试用)
String prevStatus = redisTemplate.opsForValue().get(statusKey);
String prevTime = redisTemplate.opsForValue().get(timeKey);
String prevHeartbeatCount = redisTemplate.opsForValue().get(heartbeatCountKey);
log.debug("客户端ID: {} 处理前状态 - status: {}, time: {}, heartbeatCount: {}",
clientId, prevStatus, prevTime, prevHeartbeatCount);
Boolean prevAlertStatus = redisTemplate.hasKey(alertKey);
log.debug("客户端ID: {} 处理前状态 - status: {}, time: {}, heartbeatCount: {}, hasAlert: {}",
clientId, prevStatus, prevTime, prevHeartbeatCount, prevAlertStatus);
// 使用事务确保原子性操作
List<Object> transactionResults = redisTemplate.execute(new SessionCallback<List<Object>>() {
// 原子递增心跳计数(线程安全)
Long newHeartbeatCount = redisTemplate.opsForValue().increment(heartbeatCountKey);
// 使用事务更新状态和时间
redisTemplate.execute(new SessionCallback<Object>() {
@Override
public List<Object> execute(RedisOperations operations) throws DataAccessException {
public Object execute(RedisOperations operations) throws DataAccessException {
operations.multi();
// 获取当前心跳次数
Object currentCountObj = operations.opsForValue().get(heartbeatCountKey);
int currentCount = 0;
if (currentCountObj != null) {
try {
currentCount = Integer.parseInt(currentCountObj.toString());
} catch (NumberFormatException e) {
currentCount = 0;
}
}
// 心跳次数+1
int newHeartbeatCount = currentCount + 1;
// 重置丢失计数为0,设置最后心跳时间
operations.opsForValue().set(statusKey, "0");
operations.opsForValue().set(timeKey, String.valueOf(System.currentTimeMillis()));
operations.opsForValue().set(heartbeatCountKey, String.valueOf(newHeartbeatCount));
return operations.exec();
}
});
// 从事务结果中获取新的心跳次数
int newHeartbeatCount = 0;
if (transactionResults != null && !transactionResults.isEmpty()) {
// 获取set操作的结果,最后一个set的值就是新的心跳次数
try {
Object lastResult = transactionResults.get(transactionResults.size() - 1);
if (lastResult instanceof String) {
newHeartbeatCount = Integer.parseInt((String) lastResult);
}
} catch (Exception e) {
log.warn("获取事务结果失败,使用备用方式获取心跳次数", e);
// 备用方案:直接从Redis获取
String countStr = redisTemplate.opsForValue().get(heartbeatCountKey);
if (countStr != null) {
newHeartbeatCount = Integer.parseInt(countStr);
}
log.debug("客户端ID: {} 心跳处理完成,当前心跳次数: {}", clientId, newHeartbeatCount);
// 检查是否之前有告警状态(心跳恢复检测)
if (Boolean.TRUE.equals(redisTemplate.hasKey(alertKey))) {
log.info("客户端ID: {} 检测到心跳恢复", clientId);
// 原子递增恢复计数
Long recoveryCount = redisTemplate.opsForValue().increment(recoveryCountKey);
log.debug("客户端ID: {} 恢复计数: {}", clientId, recoveryCount);
if (recoveryCount >= 2) {
// 达到2次恢复,清除告警状态
log.warn("客户端ID: {} 心跳恢复达到{}次,清除告警状态", clientId, recoveryCount);
insertHeartbeatLog(clientId, "2", "心跳恢复,设备在线状态改为在线");
// 清理告警相关key
redisTemplate.delete(alertKey);
redisTemplate.delete(recoveryCountKey);
// 修改资源状态为在线
updateResourceStatus(clientId, "1");
log.info("客户端ID: {} 告警状态已清除", clientId);
} else {
// 未达到2次,只记录恢复次数
log.info("客户端ID: {} 心跳恢复第{}次", clientId, recoveryCount);
}
}
log.debug("客户端ID: {} 心跳处理完成,重置状态和时间,当前心跳次数: {}", clientId, newHeartbeatCount);
// 只有达到3次心跳才执行数据库操作
if (newHeartbeatCount >= 3) {
log.debug("客户端ID: {} 达到3次心跳,开始执行数据库操作", clientId);
log.info("客户端ID: {} 达到{}次心跳,开始执行数据库操作", clientId, newHeartbeatCount);
// 添加逻辑节点标识
RmResourceRegistrationRemote updateData = new RmResourceRegistrationRemote();
@@ -985,8 +983,10 @@ public class MessageHandler {
rmAgentManagementService.updateRmAgentManagementByHardwareSn(updateResultData);
}
}
// 交换机在线状态改为在线
// 交换机在线状态改为在线(只在第3次心跳时执行)
if(newHeartbeatCount == 3){
log.info("客户端ID: {} 第3次心跳,更新交换机状态为在线", clientId);
RmSwitchManagementRemote rmSwitchManagementRemote = new RmSwitchManagementRemote();
rmSwitchManagementRemote.setClientId(clientId);
R<List<RmSwitchManagementRemote>> rmSwitchManagementRemoteListR = remoteRevenueConfigService.getSwitchNameByClientId(rmSwitchManagementRemote, SecurityConstants.INNER);
@@ -997,35 +997,23 @@ public class MessageHandler {
switchUpdate.setClientId(clientId);
switchUpdate.setOnlineStatus("1");
remoteRevenueConfigService.updateSwitchMsgByClientId(switchUpdate, SecurityConstants.INNER);
log.info("客户端ID: {} 交换机状态更新完成", clientId);
} else {
log.debug("客户端ID: {} 未找到对应的交换机信息", clientId);
}
}
// 可选:达到3次后重置计数,或者继续累加
// redisTemplate.delete(heartbeatCountKey);
} else {
log.debug("客户端ID: {} 当前心跳次数: {},未达到3次,跳过数据库操作", clientId, newHeartbeatCount);
}
// 检查是否之前有告警状态
if (Boolean.TRUE.equals(redisTemplate.hasKey(HEARTBEAT_ALERT_PREFIX + clientId))) {
// 获取当前恢复次数
String recoveryCountStr = redisTemplate.opsForValue().get(recoveryCountKey);
int recoveryCount = (recoveryCountStr == null) ? 1 : Integer.parseInt(recoveryCountStr) + 1;
// 记录处理后状态(调试用)
String currentStatus = redisTemplate.opsForValue().get(statusKey);
String currentTime = redisTemplate.opsForValue().get(timeKey);
String currentHeartbeatCount = redisTemplate.opsForValue().get(heartbeatCountKey);
Boolean currentAlertStatus = redisTemplate.hasKey(alertKey);
log.debug("客户端ID: {} 处理后状态 - status: {}, time: {}, heartbeatCount: {}, hasAlert: {}",
clientId, currentStatus, currentTime, currentHeartbeatCount, currentAlertStatus);
if (recoveryCount == 2) {
// 达到2次恢复,执行状态修改
log.warn("客户端ID: {} 心跳恢复达到2次,修改设备状态为在线", clientId);
insertHeartbeatLog(clientId, "2", "心跳恢复,设备在线状态改为在线");
redisTemplate.delete(HEARTBEAT_ALERT_PREFIX + clientId);
redisTemplate.delete(recoveryCountKey); // 清除恢复计数器
// 修改资源状态
updateResourceStatus(clientId, "1");
} else {
// 未达到2次,只记录恢复次数
log.info("客户端ID: {} 心跳恢复第{}次", clientId, recoveryCount);
redisTemplate.opsForValue().set(recoveryCountKey, String.valueOf(recoveryCount));
}
}
} catch (Exception e) {
log.error("处理心跳消息异常, clientId: {}", clientId, e);
}
@@ -1243,11 +1231,25 @@ public class MessageHandler {
if(rsp.getResult() != null){
List<RspResultVo> resultVos = JsonDataParser.parseJsonData(rsp.getResult(), RspResultVo.class);
RspResultVo rspResultVo = resultVos.get(0);
JSONObject jsonObject = JSONObject.parseObject(rsp.getResult());
String resOut = jsonObject.getString("resOut");
// 判断失败返回结果是否包含脚本执行失败关键字
R<EpsBusinessScriptRemote> businessScriptMsgR = remoteRevenueConfigService.getBusinessScriptMsgByScriptId(Long.valueOf(rspResultVo.getScriptId()), SecurityConstants.AUTHORIZATION_HEADER);
// 构建脚本执行结果实体类
RmResourceRemote insertData = new RmResourceRemote();
insertData.setClientId(message.getClientId());
insertData.setScriptId(Long.valueOf(rspResultVo.getScriptId()));
insertData.setResultFlag(1);
if(businessScriptMsgR != null && businessScriptMsgR.getData() != null){
EpsBusinessScriptRemote businessScriptMsg = businessScriptMsgR.getData();
String failedKeywords = businessScriptMsg.getFailedKeywords();
if(resOut.contains(failedKeywords)){
insertData.setResultFlag(0);
}else {
insertData.setResultFlag(1);
}
}else{
insertData.setResultFlag(1);
}
insertData.setDescription(rsp.getResult());
insertData.setCreateTime(createTime);
// 执行插入sql
@@ -125,7 +125,7 @@ public class RmResourceRemoteServiceImpl implements IRmResourceRemoteService
String resOut = jsonObject.getString("resOut");
String sucOrFail = (!"".equals(resOut) && !"脚本执行失败".equals(resOut)) ? "\n执行成功,\n":"\n执行失败,\n";
StringBuilder resultSb = new StringBuilder();
resultSb.append("").append(resourceRemote.getResourceName()).append("】脚本执行命令:\n")
resultSb.append("").append(resourceRemote.getClientId()).append("】脚本执行命令:\n")
.append(command).append(sucOrFail).append("执行结果如下:\n").append(resOut);
Map<String,Object> map = new HashMap<>();
Date createTime = resourceRemote.getCreateTime();
@@ -44,6 +44,7 @@
<if test="resultFlag != null "> and result_flag = #{resultFlag}</if>
<if test="scriptId != null "> and script_id = #{scriptId}</if>
</where>
order by result_flag asc,create_time desc
</select>
<select id="selectRmResourceRemoteById" parameterType="Long" resultMap="RmResourceRemoteResult">