作者 钟来

添加服务器运维管理和iot平台数据权限

正在显示 26 个修改的文件 包含 786 行增加43 行删除
package com.ruoyi.system.domain.sys;
import com.ruoyi.common.tool.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ApiModel("服务器状态监控")
public class SysMonitorServer extends BaseEntity {
@ApiModelProperty("主键ip")
private String ip;
@ApiModelProperty("CPU使用率(%%)")
private Integer cpu_usage;
@ApiModelProperty("内存使用率(%%)")
private Integer memory_usage;
@ApiModelProperty("磁盘使用率(%%)")
private Integer disk_usage;
@ApiModelProperty("系统连接数(%%)")
private Integer connection_count;
@ApiModelProperty("创建时间")
private Long create_time;
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public Integer getCpu_usage() {
return cpu_usage;
}
public void setCpu_usage(Integer cpu_usage) {
this.cpu_usage = cpu_usage;
}
public Integer getMemory_usage() {
return memory_usage;
}
public void setMemory_usage(Integer memory_usage) {
this.memory_usage = memory_usage;
}
public Integer getDisk_usage() {
return disk_usage;
}
public void setDisk_usage(Integer disk_usage) {
this.disk_usage = disk_usage;
}
public Integer getConnection_count() {
return connection_count;
}
public void setConnection_count(Integer connection_count) {
this.connection_count = connection_count;
}
public Long getCreate_time() {
return create_time;
}
public void setCreate_time(Long create_time) {
this.create_time = create_time;
}
}
... ...
package com.ruoyi.system.domain.sys;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ApiModel("服务器状态监控")
public class SysMonitorServerLog {
@ApiModelProperty("主键")
private Integer id;
@ApiModelProperty("ip")
private String ip;
@ApiModelProperty("CPU使用率(%%)")
private Integer cpu_usage;
@ApiModelProperty("内存使用率(%%)")
private Integer memory_usage;
@ApiModelProperty("磁盘使用率(%%)")
private Integer disk_usage;
@ApiModelProperty("系统连接数")
private Integer connection_count;
@ApiModelProperty("创建时间")
private Long create_time;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public Integer getCpu_usage() {
return cpu_usage;
}
public void setCpu_usage(Integer cpu_usage) {
this.cpu_usage = cpu_usage;
}
public Integer getMemory_usage() {
return memory_usage;
}
public void setMemory_usage(Integer memory_usage) {
this.memory_usage = memory_usage;
}
public Integer getDisk_usage() {
return disk_usage;
}
public void setDisk_usage(Integer disk_usage) {
this.disk_usage = disk_usage;
}
public Integer getConnection_count() {
return connection_count;
}
public void setConnection_count(Integer connection_count) {
this.connection_count = connection_count;
}
public Long getCreate_time() {
return create_time;
}
public void setCreate_time(Long create_time) {
this.create_time = create_time;
}
}
... ...
... ... @@ -103,7 +103,7 @@ public class PublicSQL {
values.append( ",");
}
stringBuffer.append( "`"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"`");
values.append( "'"+ escapeSql(value+"")+"'");
values.append("#{"+ field.getName()+"}");
}
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
... ... @@ -166,7 +166,7 @@ public class PublicSQL {
values += ",";
}
sql.append("`"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"`");
values += "'"+escapeSql(value+"")+"'";
values += "#{"+field.getName()+"}";
}
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
... ... @@ -365,7 +365,7 @@ public class PublicSQL {
sql += tableName + " where 1=1 ";
for(String key:map.keySet())
{
sql += " and "+"`"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(key)+"`"+"='"+escapeSql(map.get(key)+"")+"'";
sql += " and "+"`"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(key)+"`"+"=#{map."+key+"}";
}
return sql;
}
... ... @@ -391,7 +391,7 @@ public class PublicSQL {
}
String sql = "delete from ";
sql += tableName + " where 1=1 ";
sql += " and "+"`id`"+"='"+escapeSql(id)+"'";
sql += " and "+"`id`"+"=#{id}";
return sql;
}
... ... @@ -402,7 +402,7 @@ public class PublicSQL {
{
Object object = para.get("object");
@SuppressWarnings("unchecked")
Map<String,String> whereMap = (Map<String, String>) para.get("whereMap");
Map<String,Object> whereMap = (Map<String, Object>) para.get("whereMap");
String tableName = changTableNameFromObject(object);
String sql = "select count(*) from "+tableName;
... ... @@ -430,27 +430,35 @@ public class PublicSQL {
String s = "=";
if(null != whereMap && null != whereMap.get(field.getName()))
{
s = whereMap.get(field.getName());
s = (String) whereMap.get(field.getName());
if("like".equals(s))
{
value = "%"+value+"%";
like += " or " + "`"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"`"+s+" '"+escapeSql(value+"")+"'"+orther ;
continue;
Method setmethod = object.getClass().getMethod("set"+ com.ruoyi.common.utils.StringUtils.getName(field.getName()),String.class);
if(null != setmethod)
{
setmethod.invoke(object,value);
like += " or " + "`"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"` like #{object."+field.getName()+"}"+orther ;
continue;
}
}
if("time".equals(s))
{
s = ">";
orther = " and `"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"`< '"+whereMap.get("end_"+field.getName())+"'";
orther = " and `"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"` < #{whereMap.end_"+field.getName()+"}";
}
if("time=".equals(s))
{
s = ">=";
orther = " and `"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"` <= #{whereMap.end_"+field.getName()+"}" ;
}
if("in".equals(s))
{
s = "in";
value = (value+"").replace(",","','");
where += " and `"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"`"+s+" ("+"'"+value+"'"+")"+orther;
where += " and `"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"` in (whereMap."+field.getName()+"s)"+orther;
continue;
}
}
where += " and `"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"`"+s+" '"+escapeSql(value+"")+"'"+orther;
where += " and `"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"`"+s+" #{object."+field.getName()+"}"+orther;
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
... ... @@ -485,7 +493,7 @@ public class PublicSQL {
{
Object object = para.get("object");
@SuppressWarnings("unchecked")
Map<String,String> whereMap = (Map<String, String>) para.get("whereMap");
Map<String,Object> whereMap = (Map<String, Object>) para.get("whereMap");
String selectStr = " * ";
String order = "";
if(para.containsKey("order") && null != para.get("order"))
... ... @@ -533,33 +541,41 @@ public class PublicSQL {
Method method;
method = object.getClass().getMethod("get"+ com.ruoyi.common.utils.StringUtils.getName(field.getName()));
Object value = method.invoke(object);
if(!(null == value))
if(null != value)
{
String orther = "";
String s = "=";
if(!(null == whereMap || null == whereMap.get(field.getName())))
if(null != whereMap && null != whereMap.get(field.getName()))
{
s = whereMap.get(field.getName());
s = (String) whereMap.get(field.getName());
if("like".equals(s))
{
value = "%"+value+"%";
like += " or " + "`"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"`"+s+" '"+escapeSql(value+"")+"'"+orther ;
continue;
Method setmethod = object.getClass().getMethod("set"+ com.ruoyi.common.utils.StringUtils.getName(field.getName()),String.class);
if(null != setmethod)
{
setmethod.invoke(object,value);
like += " or " + "`"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"` like #{object."+field.getName()+"}"+orther ;
continue;
}
}
if("time".equals(s))
{
s = ">";
orther = " and `"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"`< '"+whereMap.get("end_"+field.getName())+"'";
orther = " and `"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"` < #{whereMap.end_"+field.getName()+"}";
}
if("time=".equals(s))
{
s = ">=";
orther = " and `"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"` <= #{whereMap.end_"+field.getName()+"}" ;
}
if("in".equals(s))
{
s = "in";
value = (value+"").replace(",","','");
where += " and `"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"`"+s+" ("+"'"+value+"'"+")"+orther;
where += " and `"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"` in (whereMap."+field.getName()+"s)"+orther;
continue;
}
}
where += " and `"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"`"+s+" '"+escapeSql(value+"")+"'"+orther;
where += " and `"+com.ruoyi.common.utils.StringUtils.toUnderScoreCase(field.getName())+"`"+s+" #{object."+field.getName()+"}"+orther;
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
... ... @@ -718,7 +734,7 @@ public class PublicSQL {
}else{
sb.append("(");
}
sb.append("'"+ escapeSql(value+"")+"'");
sb.append("#{"+ field.getName()+"}");
if(j==fields.length-1)
{
sb.append(")");
... ...
... ... @@ -99,7 +99,7 @@ public interface PublicMapper {
* @return
*/
@SelectProvider(type = PublicSQL.class, method = "getObjectList")
List<Map<String,Object>> getObjectList(@Param("object") Object object, @Param("selectStr") String selectStr, @Param("whereMap") Map<String, String> whereMap, @Param("order") String order, @Param("pageSize") Integer pagetSize, @Param("pageNo") Integer pageNo);
List<Map<String,Object>> getObjectList(@Param("object") Object object, @Param("selectStr") String selectStr, @Param("whereMap") Map<String, Object> whereMap, @Param("order") String order, @Param("pageSize") Integer pagetSize, @Param("pageNo") Integer pageNo);
/**
* 查詢totle
... ...
... ... @@ -79,7 +79,7 @@ public interface PublicService {
* @param pageNo
* @return
*/
List<Map<String,Object>> getObjectList(Object object,String selectStr,Map<String, String> whereMap, String order, Integer pagetSize,Integer pageNo);
List<Map<String,Object>> getObjectList(Object object,String selectStr,Map<String, Object> whereMap, String order, Integer pagetSize,Integer pageNo);
/**
* 查詢totle
... ...
... ... @@ -139,7 +139,7 @@ public class PublicServiceImpl implements PublicService {
* @param pageNo
* @return
*/
public List<Map<String,Object>> getObjectList(Object object, String selectStr, Map<String, String> whereMap, String order, Integer pagetSize, Integer pageNo)
public List<Map<String,Object>> getObjectList(Object object, String selectStr, Map<String, Object> whereMap, String order, Integer pagetSize, Integer pageNo)
{
return publicMapper.getObjectList(object,selectStr,whereMap,order,pagetSize,pageNo);
}
... ...
package com.ruoyi.common.tool;
import org.springframework.data.annotation.Transient;
import java.io.Serializable;
import java.util.Map;
public class MyBaseEntity implements Serializable {
/** 搜索值 */
@Transient
private String searchValue;
/** 请求参数 */
private Map<String, Object> params;
public String getSearchValue() {
return searchValue;
}
public void setSearchValue(String searchValue) {
this.searchValue = searchValue;
}
public Map<String, Object> getParams() {
return params;
}
public void setParams(Map<String, Object> params) {
this.params = params;
}
}
... ...
package com.zhonglai.luhui.config.requestbodymiss;
import com.ruoyi.common.utils.GsonConstructor;
import com.zhonglai.luhui.config.TokenConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StreamUtils;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
/**
* 实现 Filter
*
* 我们上面重写的 MyHttpServletRequestWrapper 什么时候生效呢?
*
* 我们可以自己实现一个 Filter,对原有的请求进行替换:
*/
@Component
@WebFilter(filterName="httpServletRequestReplacedFilter",urlPatterns="/*")
public class HttpServletRequestReplacedFilter implements Filter {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public void init(FilterConfig arg0) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
RequestReaderHttpServletRequestWrapper requestWrapper = null;
if (request instanceof HttpServletRequest) {
requestWrapper = new RequestReaderHttpServletRequestWrapper((HttpServletRequest) request);
printLog((HttpServletRequest)request,requestWrapper.getBody());
}
//获取请求中的流如何,将取出来的字符串,再次转换成流,然后把它放入到新request对象中。
// 在chain.doFiler方法中传递新的request对象
if (requestWrapper == null) {
chain.doFilter(request, response);
} else {
chain.doFilter(requestWrapper, response);
}
}
@Override
public void destroy() {
}
private void printLog(HttpServletRequest httpServletRequest,byte[] bodyBytes) throws UnsupportedEncodingException {
logger.info("---------------------开始进入"+httpServletRequest.getRequestURL().toString()+"登录拦截----------------------------");
Map<String,Object> map = new HashMap<>();
map.put("parameterValue",httpServletRequest.getParameterMap());
// 打印请求头信息
Map<String,Object> headermap = new HashMap<>();
Enumeration<String> headerNames = httpServletRequest.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
String headerValue = httpServletRequest.getHeader(headerName);
headermap.put(headerName, headerValue);
}
map.put("header",headermap);
//获取请求body
String body = new String(bodyBytes, httpServletRequest.getCharacterEncoding());
map.put("body",body);
logger.info("---------------------参数:"+ GsonConstructor.get().toJson(map)+"----------------------------");
}
}
... ...
package com.zhonglai.luhui.config.requestbodymiss;
import com.ruoyi.common.utils.ByteUtil;
import com.zhonglai.luhui.config.TokenConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StreamUtils;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
/**
* 首先重写 HttpServletRequestWrapper,把每次读取的流信息保存起来,便于重复读取。
*/
public class RequestReaderHttpServletRequestWrapper extends HttpServletRequestWrapper {
private final byte[] body;
public RequestReaderHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
super(request);
body = StreamUtils.copyToByteArray(request.getInputStream());
}
@Override
public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(getInputStream()));
}
@Override
public ServletInputStream getInputStream() throws IOException {
final ByteArrayInputStream bais = new ByteArrayInputStream(body);
return new ServletInputStream() {
@Override
public int read() throws IOException {
return bais.read();
}
@Override
public boolean isFinished() {
return false;
}
@Override
public boolean isReady() {
return false;
}
@Override
public void setReadListener(ReadListener readListener) {
}
};
}
public byte[] getBody()
{
return body;
}
}
... ...
... ... @@ -2,6 +2,7 @@ package com.zhonglai.luhui.device.domain;
import com.ruoyi.common.annotation.PublicSQLConfig;
import com.ruoyi.common.tool.BaseEntity;
import com.ruoyi.common.tool.MyBaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
... ... @@ -14,7 +15,7 @@ import java.io.Serializable;
* @date 2022-08-26
*/
@ApiModel("主机/网关")
public class IotDevice extends BaseEntity implements Serializable
public class IotDevice extends MyBaseEntity implements Serializable
{
@PublicSQLConfig(isSelect=false)
private static final long serialVersionUID = 1L;
... ...
... ... @@ -2,6 +2,7 @@ package com.zhonglai.luhui.device.domain;
import com.ruoyi.common.annotation.PublicSQLConfig;
import com.ruoyi.common.tool.BaseEntity;
import com.ruoyi.common.tool.MyBaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import io.swagger.annotations.ApiModel;
... ... @@ -16,7 +17,7 @@ import java.io.Serializable;
* @date 2022-08-26
*/
@ApiModel("产品")
public class IotProduct extends BaseEntity implements Serializable
public class IotProduct extends MyBaseEntity implements Serializable
{
@PublicSQLConfig(isSelect=false)
private static final long serialVersionUID = 1L;
... ...
... ... @@ -2,6 +2,7 @@ package com.zhonglai.luhui.device.domain;
import com.ruoyi.common.tool.BaseEntity;
import com.ruoyi.common.annotation.PublicSQLConfig;
import com.ruoyi.common.tool.MyBaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.builder.ToStringBuilder;
... ... @@ -14,7 +15,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
* @date 2022-11-04
*/
@ApiModel("产品指标翻译")
public class IotProductTranslate extends BaseEntity
public class IotProductTranslate extends MyBaseEntity
{
@PublicSQLConfig(isSelect=false)
private static final long serialVersionUID = 1L;
... ...
package com.zhonglai.luhui.device.domain;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.tool.MyBaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.ruoyi.common.annotation.PublicSQLConfig;
... ... @@ -15,7 +16,7 @@ import org.apache.commons.lang3.builder.ToStringStyle;
* @date 2024-06-13
*/
@ApiModel("产品解析插件包")
public class IotProtocolClass extends BaseEntity
public class IotProtocolClass extends MyBaseEntity
{
@PublicSQLConfig(isSelect=false)
private static final long serialVersionUID = 1L;
... ...
... ... @@ -2,6 +2,7 @@ package com.zhonglai.luhui.device.domain;
import com.ruoyi.common.annotation.PublicSQLConfig;
import com.ruoyi.common.tool.BaseEntity;
import com.ruoyi.common.tool.MyBaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import io.swagger.annotations.ApiModel;
... ... @@ -16,7 +17,7 @@ import java.io.Serializable;
* @date 2022-08-26
*/
@ApiModel("公司")
public class IotRole extends BaseEntity implements Serializable
public class IotRole extends MyBaseEntity implements Serializable
{
@PublicSQLConfig(isSelect=false)
private static final long serialVersionUID = 1L;
... ...
package com.zhonglai.luhui.device.domain;
import com.ruoyi.common.tool.BaseEntity;
import com.ruoyi.common.tool.MyBaseEntity;
import com.ruoyi.system.domain.user.UserTerminalGroupRelation;
import com.ruoyi.common.annotation.PublicSQLConfig;
import org.apache.commons.lang3.builder.ToStringBuilder;
... ... @@ -17,7 +18,7 @@ import java.io.Serializable;
* @date 2022-08-26
*/
@ApiModel("终端")
public class IotTerminal extends BaseEntity implements Serializable
public class IotTerminal extends MyBaseEntity implements Serializable
{
@PublicSQLConfig(isSelect=false)
private static final long serialVersionUID = 1L;
... ...
... ... @@ -2,6 +2,7 @@ package com.zhonglai.luhui.device.domain;
import com.ruoyi.common.annotation.PublicSQLConfig;
import com.ruoyi.common.tool.BaseEntity;
import com.ruoyi.common.tool.MyBaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import io.swagger.annotations.ApiModel;
... ... @@ -16,7 +17,7 @@ import java.io.Serializable;
* @date 2022-08-26
*/
@ApiModel("物模型模板")
public class IotThingsModel extends BaseEntity implements Serializable
public class IotThingsModel extends MyBaseEntity implements Serializable
{
@PublicSQLConfig(isSelect=false)
private static final long serialVersionUID = 1L;
... ...
... ... @@ -43,7 +43,7 @@ public class IotAlertNoticeChannelController extends BaseController {
public TableDataInfo list(IotAlertNoticeChannel iotAlertNoticeChannel)
{
startPage();
Map<String, String> whereMap = new HashMap<>();
Map<String, Object> whereMap = new HashMap<>();
whereMap.put("name","like");
List<Map<String,Object>> list = publicService.getObjectList(iotAlertNoticeChannel,"*",whereMap,"id desc",0,0);
return getDataTable(list);
... ...
package com.zhonglai.luhui.admin.controller.iot;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.utils.DateUtils;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.dao.service.PublicService;
import com.zhonglai.luhui.device.domain.IotProduct;
import com.zhonglai.luhui.device.domain.IotProtocolClass;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import io.swagger.annotations.Api;
... ... @@ -138,4 +142,52 @@ public class IotDeviceController extends BaseController
int i = publicService.updateBySql("UPDATE `iot_device` SET label='"+label+"' WHERE client_id='"+client_id+"'");
return toAjax(i);
}
@ApiOperation("查看订阅信息")
@PreAuthorize("@ss.hasPermi('iot:IotProduct:getProductSubTopic')")
@GetMapping("/getProductSubTopic/{client_id}")
public AjaxResult getProductSubTopic(@PathVariable String client_id)
{
Map<String,Object> map = new HashMap<>();
IotDevice iotDevice = publicService.getObject(IotDevice.class,"client_id",client_id+"");
if(null == iotDevice )
{
return AjaxResult.error("主机不存在");
}
IotProduct iotProduct = publicService.getObject(IotProduct.class,"id",iotDevice.getProduct_id()+"");
if(null == iotProduct )
{
return AjaxResult.error("产品不存在");
}
IotProtocolClass iotProductClass = publicService.getObject(IotProtocolClass.class,"id",iotProduct.getAnalysis_clas()+"");
if(null == iotProductClass)
{
return AjaxResult.error("解析插件不存在");
}
if(null == iotProductClass.getSub_topics())
{
return AjaxResult.error("解析插件订阅主题为空");
}
String[] sts = iotProductClass.getSub_topics().split(",");
if(iotDevice.getCompletion_auth()==1)
{
for (int i=0;i<sts.length;i++)
{
sts[i] = "/"+iotProduct.getRole_id()+"/"+iotProduct.getMqtt_username()+"/"+iotDevice.getClient_id()+"/"+iotDevice.getPayload_type()+"/"+sts[i];
}
}
map.put("address","mqtt2.proxy.yu2le.com");
map.put("port",1883);
map.put("mqtt_username",iotProduct.getMqtt_username());
map.put("mqtt_password",iotProduct.getMqtt_password());
map.put("topics",sts);
return AjaxResult.success(map);
}
}
... ...
package com.zhonglai.luhui.admin.controller.iot;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import com.google.gson.JsonObject;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.dao.service.PublicService;
import com.zhonglai.luhui.security.utils.SecurityUtils;
import com.zhonglai.luhui.sys.utils.ExcelUtil;
import io.swagger.annotations.Api;
... ... @@ -38,7 +42,6 @@ public class IotProductController extends BaseController
{
@Autowired
private IIotProductService IotProductService;
/**
* 查询产品列表
*/
... ... @@ -113,4 +116,5 @@ public class IotProductController extends BaseController
{
return toAjax(IotProductService.deleteIotProductByIds(ids));
}
}
... ...
package com.zhonglai.luhui.admin.controller.monitor;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.framework.web.domain.Server;
import com.ruoyi.system.domain.sys.SysMonitorServer;
import com.ruoyi.system.domain.sys.SysMonitorServerLog;
import com.zhonglai.luhui.action.BaseController;
import com.zhonglai.luhui.admin.dto.MonitorServerUploadDto;
import com.zhonglai.luhui.dao.service.PublicService;
import com.zhonglai.luhui.device.domain.IotAlertLog;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.stream.Collectors;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;
import java.util.Arrays;
import java.util.stream.Collectors;
/**
* 服务器监控
... ... @@ -17,8 +48,10 @@ import org.springframework.web.bind.annotation.RestController;
@Api(tags = "服务器监控")
@RestController
@RequestMapping("/monitor/server")
public class ServerController
public class ServerController extends BaseController
{
@Autowired
private PublicService publicService;
@ApiOperation("获取详情")
@PreAuthorize("@ss.hasPermi('monitor:server:list')")
@GetMapping()
... ... @@ -28,4 +61,158 @@ public class ServerController
server.copyTo();
return AjaxResult.success(server);
}
@ApiOperation("上传状态")
@PostMapping("/upload")
public AjaxResult upload(@RequestBody MonitorServerUploadDto monitorServerUploadDto)
{
String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
SysMonitorServer sysMonitorServer = new SysMonitorServer();
sysMonitorServer.setIp(ip);
Long st = publicService.getObjectListTotle(sysMonitorServer, null);
sysMonitorServer.setCpu_usage(new Double(monitorServerUploadDto.getCpu_usage()*100).intValue());
sysMonitorServer.setConnection_count(monitorServerUploadDto.getConnection_count());
sysMonitorServer.setMemory_usage(new Double(monitorServerUploadDto.getMemory_usage()*100).intValue());
sysMonitorServer.setDisk_usage(new Double(monitorServerUploadDto.getDisk_usage()*100).intValue());
if(st==0)
{
sysMonitorServer.setCreate_time(System.currentTimeMillis());
publicService.insert(sysMonitorServer);
}else {
publicService.updateObject(sysMonitorServer,"ip");
}
SysMonitorServerLog sysMonitorServerLog = new SysMonitorServerLog();
sysMonitorServerLog.setIp(ip);
sysMonitorServerLog.setCpu_usage(sysMonitorServer.getCpu_usage());
sysMonitorServerLog.setConnection_count(sysMonitorServer.getConnection_count());
sysMonitorServerLog.setMemory_usage(sysMonitorServer.getMemory_usage());
sysMonitorServerLog.setDisk_usage(sysMonitorServer.getDisk_usage());
sysMonitorServerLog.setCreate_time(System.currentTimeMillis());
publicService.insert(sysMonitorServerLog);
return AjaxResult.success();
}
@ApiOperation("企业微信消息")
@RequestMapping("/uploadWxMessage/{agentId}")
public AjaxResult uploadWxMessage(@PathVariable String agentId)
{
return AjaxResult.success();
}
public static void main(String[] args) throws UnsupportedEncodingException {
String TOKEN = "DDbVb3cSiTAbCSgI4UndPlvy"; // 替换为你的token
String ENCODING_AES_KEY = "FH1CDpqZhNkcXCWEYJOyAO4HLG2mxYrE1c4j83mXruB";
String msgSignature = "6cfbf56d42c00a182a6da650023ef5ba407cb203";
String timestamp = "1724921459";
String nonce = "1725665565";
String echoStr = "FQYmaDL0vzQPBz5rRVYYGVLx62EmD8krbPYO6RzVaAtsIuFz+n8nPZ8fPtnNTbMCiGaRrjZCYgbsaeDcqPqvNQ\u003d\u003d";
// URL解码
String decodedEchoStr = decodeEchoStr(echoStr);
// 校验msg_signature
boolean isValid = validateMsgSignature(TOKEN, timestamp, nonce, decodedEchoStr, msgSignature);
if (isValid) {
System.out.println("请求合法");
} else {
System.out.println("请求不合法");
}
// 解密echostr
String messageContent = decryptEchoStr(decodedEchoStr,ENCODING_AES_KEY);
System.out.println("消息内容: " + messageContent);
}
private static String decodeEchoStr(String echoStr) throws UnsupportedEncodingException {
// 假设echoStr已经被Base64编码过,这里直接返回
return URLDecoder.decode(echoStr, "UTF-8"); // 实际上需要根据情况解码
}
private static boolean validateMsgSignature(String token, String timestamp, String nonce, String msgEncrypt, String msgSignature) {
try {
String signature = sha1(Arrays.asList(token, timestamp, nonce, msgEncrypt).stream().sorted().collect(Collectors.joining()));
return msgSignature.equals(signature);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return false;
}
}
private static String sha1(String input) throws NoSuchAlgorithmException {
MessageDigest mDigest = MessageDigest.getInstance("SHA1");
byte[] result = mDigest.digest(input.getBytes());
StringBuilder sb = new StringBuilder();
for (byte aResult : result) {
sb.append(Integer.toString((aResult & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
}
private static final String CORPID = "wx5823bf96d3bd56c7";
private static String decryptEchoStr(String encryptedMsg,String ENCODING_AES_KEY) {
// 这里需要实现具体的解密逻辑
try {
// 1. BASE64解码
byte[] base64Decoded = Base64.getDecoder().decode(encryptedMsg);
// 2. AES解密
byte[] keyBytes = Base64.getDecoder().decode(ENCODING_AES_KEY + "=");
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(keyBytes, 0, 16); // 使用前16个字节作为IV
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
byte[] decrypted = cipher.doFinal(base64Decoded);
// 3. 去除随机字节和msg_len
byte[] content = Arrays.copyOfRange(decrypted, 16, decrypted.length);
int msgLen = ((content[0] & 0xFF) << 24) |
((content[1] & 0xFF) << 16) |
((content[2] & 0xFF) << 8) |
(content[3] & 0xFF);
byte[] msg = Arrays.copyOfRange(content, 4, 4 + msgLen);
byte[] receiveId = Arrays.copyOfRange(content, 4 + msgLen, content.length);
// 4. 转换为字符串
String msgStr = new String(msg, "UTF-8");
String receiveIdStr = new String(receiveId, "UTF-8");
// 5. 验证receiveId
if (receiveIdStr.equals(CORPID)) {
return msgStr;
} else {
throw new IllegalArgumentException("ReceiveId 不匹配");
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@ApiOperation("获取状态列表")
@GetMapping("/getSysMonitorServerList")
public TableDataInfo getSysMonitorServerList(SysMonitorServer sysMonitorServer) throws Exception
{
startPage();
startOrderBy();
List<Map<String,Object>> list = publicService.getObjectList(sysMonitorServer,"*",null,null,0,0);
return getDataTable(list);
}
@ApiOperation("获取服务器状态曲线")
@GetMapping("/getSysMonitorServerLogList")
public TableDataInfo getSysMonitorServerLogList(String ip,Long startTime,Long endTime) throws Exception
{
SysMonitorServerLog sysMonitorServerLog = new SysMonitorServerLog();
sysMonitorServerLog.setIp(ip);
Map<String, Object> whereMap = new HashMap<>();
whereMap.put("create_time","time=");
sysMonitorServerLog.setCreate_time(startTime);
whereMap.put("end_create_time",endTime);
List<Map<String,Object>> list = publicService.getObjectList(sysMonitorServerLog,"*",whereMap,"create_time asc",0,0);
return getDataTable(list);
}
}
... ...
package com.zhonglai.luhui.admin.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ApiModel("服务器状态监控")
public class MonitorServerUploadDto {
@ApiModelProperty("CPU使用率(%%)")
private Double cpu_usage;
@ApiModelProperty("内存使用率(%%)")
private Double memory_usage;
@ApiModelProperty("磁盘使用率(%%)")
private Double disk_usage;
@ApiModelProperty("系统连接数(%%)")
private Integer connection_count;
public Double getCpu_usage() {
return cpu_usage;
}
public void setCpu_usage(Double cpu_usage) {
this.cpu_usage = cpu_usage;
}
public Double getMemory_usage() {
return memory_usage;
}
public void setMemory_usage(Double memory_usage) {
this.memory_usage = memory_usage;
}
public Double getDisk_usage() {
return disk_usage;
}
public void setDisk_usage(Double disk_usage) {
this.disk_usage = disk_usage;
}
public Integer getConnection_count() {
return connection_count;
}
public void setConnection_count(Integer connection_count) {
this.connection_count = connection_count;
}
}
... ...
# 项目相关配置 jhlt: # 名称 name: zhonglai # 版本 version: 3.8.2 # 版权年份 copyrightYear: 2022 # 实例演示开关 demoEnabled: true # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) profile: D:/ruoyi/uploadPath # 获取ip地址开关 addressEnabled: false # 验证码类型 math 数组计算 char 字符验证 captchaType: math # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 port: 8080 servlet: # 应用的访问路径 context-path: / tomcat: # tomcat的URI编码 uri-encoding: UTF-8 # 连接数满后的排队数,默认为100 accept-count: 1000 threads: # tomcat最大线程数,默认为200 max: 800 # Tomcat启动初始化的线程数,默认值10 min-spare: 100 # 日志配置 logging: level: com.ruoyi: debug org.springframework: warn com.zhonglai.luhui: debug # Spring配置 spring: # 资源信息 messages: # 国际化资源文件路径 basename: i18n/messages profiles: active: druid # 文件上传 servlet: multipart: # 单个文件大小 max-file-size: 10MB # 设置总上传的文件大小 max-request-size: 20MB # 服务模块 devtools: restart: # 热部署开关 enabled: true # redis 配置 redis: # 地址 host: 47.112.163.61 # 端口,默认为6379 port: 9527 # 数据库索引 database: 1 # 密码 password: Luhui586 # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms # token配置 token: # 令牌自定义标识 header: Authorization # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) expireTime: 1440 rediskey: lh-admin # MyBatis配置 mybatis: # 搜索指定包别名 typeAliasesPackage: com.ruoyi.**.domain,com.zhonglai.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapperLocations: classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml # PageHelper分页插件 pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql # Swagger配置 swagger: # 是否开启swagger enabled: true # 请求前缀 pathMapping: /dev-api # 防止XSS攻击 xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/* mqtt: client: device_life: 180 sys: ## // 对于登录login 注册register 验证码captchaImage 允许匿名访问 antMatchers: /login,/register,/captchaImage,/getCacheObject,/v2/api-docs,/tool/gen/generatorCodeFromDb,/data/** # NameServer地址 rocketmq: name-server: 47.115.144.179:9876 # 默认的消息组 producer: group: deviceCommand send-message-timeout: 30000 send-topic: lh-mqtt-service-deviceCommand-test send-tags: 1
\ No newline at end of file
# 项目相关配置 jhlt: # 名称 name: zhonglai # 版本 version: 3.8.2 # 版权年份 copyrightYear: 2022 # 实例演示开关 demoEnabled: true # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) profile: D:/ruoyi/uploadPath # 获取ip地址开关 addressEnabled: false # 验证码类型 math 数组计算 char 字符验证 captchaType: math # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 port: 8080 servlet: # 应用的访问路径 context-path: / tomcat: # tomcat的URI编码 uri-encoding: UTF-8 # 连接数满后的排队数,默认为100 accept-count: 1000 threads: # tomcat最大线程数,默认为200 max: 800 # Tomcat启动初始化的线程数,默认值10 min-spare: 100 # 日志配置 logging: level: com.ruoyi: debug org.springframework: warn com.zhonglai.luhui: debug # Spring配置 spring: # 资源信息 messages: # 国际化资源文件路径 basename: i18n/messages profiles: active: druid # 文件上传 servlet: multipart: # 单个文件大小 max-file-size: 10MB # 设置总上传的文件大小 max-request-size: 20MB # 服务模块 devtools: restart: # 热部署开关 enabled: true # redis 配置 redis: # 地址 host: 47.112.163.61 # 端口,默认为6379 port: 9527 # 数据库索引 database: 1 # 密码 password: Luhui586 # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms # token配置 token: # 令牌自定义标识 header: Authorization # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) expireTime: 1440 rediskey: lh-admin # MyBatis配置 mybatis: # 搜索指定包别名 typeAliasesPackage: com.ruoyi.**.domain,com.zhonglai.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapperLocations: classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml # PageHelper分页插件 pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql # Swagger配置 swagger: # 是否开启swagger enabled: true # 请求前缀 pathMapping: /dev-api # 防止XSS攻击 xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/* mqtt: client: device_life: 180 sys: ## // 对于登录login 注册register 验证码captchaImage 允许匿名访问 antMatchers: /login,/register,/captchaImage,/getCacheObject,/v2/api-docs,/tool/gen/generatorCodeFromDb,/data/**,/monitor/server/upload,/monitor/server/getSysMonitorServerList,/monitor/server/getSysMonitorServerLogList # NameServer地址 rocketmq: name-server: 47.115.144.179:9876 # 默认的消息组 producer: group: deviceCommand send-message-timeout: 30000 send-topic: lh-mqtt-service-deviceCommand-test send-tags: 1
\ No newline at end of file
... ...
#!/bin/bash
# 定义API的URL
API_URL="https://lh.admin.yu2le.com/api/monitor/server/upload"
# 获取系统性能信息的函数
get_system_performance() {
# 获取CPU使用率
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
# 获取内存使用率
MEMORY_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
# 获取磁盘使用率
DISK_USAGE=$(df -h | grep '^/dev/' | grep -v 'boot' | awk '{print $5}' | tr -d '%' | paste -sd+ | bc)
# 获取系统连接数
CONNECTION_COUNT=$(netstat -an | grep ESTABLISHED | wc -l)
# 返回JSON格式的数据
echo "{\"cpu_usage\": \"$CPU_USAGE\", \"memory_usage\": \"$MEMORY_USAGE\", \"disk_usage\": \"$DISK_USAGE\", \"connection_count\": \"$CONNECTION_COUNT\"}"
}
# 获取当前系统性能数据
DATA=$(get_system_performance)
echo $DATA
# 使用curl将数据上传到指定的API
curl -X POST -H "Content-Type: application/json" -d "$DATA" "$API_URL"
\ No newline at end of file
... ...
#!/bin/bash
# 定义脚本路径
SCRIPT_PATH="/opt/monitor.sh"
CRON_LOG="/var/log/monitor.log"
# 创建 monitor.sh 文件
(
cat <<EOF
#!/bin/bash
# 定义API的URL
API_URL="https://lh.admin.yu2le.com/api/monitor/server/upload"
# 获取系统性能信息的函数
get_system_performance() {
# 获取CPU使用率
CPU_USAGE=\$(top -bn1 | grep "Cpu(s)" | awk '{print \$2 + \$4}')
# 获取内存使用率
MEMORY_USAGE=\$(free | grep Mem | awk '{print \$3/\$2 * 100.0}')
# 获取磁盘使用率
DISK_USAGE=\$(df -h | grep '^/dev/' | grep -v 'boot' | awk '{print \$5}' | tr -d '%' | paste -sd+ | bc)
# 获取系统连接数
CONNECTION_COUNT=\$(netstat -an | grep ESTABLISHED | wc -l)
# 返回JSON格式的数据
echo "{\"cpu_usage\": \"\${CPU_USAGE}\", \"memory_usage\": \"\${MEMORY_USAGE}\", \"disk_usage\": \"\${DISK_USAGE}\", \"connection_count\": \"\${CONNECTION_COUNT}\"}"
}
# 获取当前系统性能数据
DATA=\$(get_system_performance)
echo \$DATA
# 使用curl将数据上传到指定的API
curl -X POST -H "Content-Type: application/json" -d "\$DATA" --insecure "\$API_URL"
EOF
) > $SCRIPT_PATH
# 设置脚本执行权限
chmod +x $SCRIPT_PATH
# 添加定时任务
(crontab -l ; echo "*/1 * * * * $SCRIPT_PATH >> $CRON_LOG 2>&1") | crontab -
# 重启 cron 服务
systemctl restart crond
$SCRIPT_PATH
echo "Monitor setup completed."
# 解决:curl: (35) Peer reports incompatible or unsupported protocol version. 方法: yum update -y nss curl libcurl
... ...
... ... @@ -53,6 +53,16 @@ public class IotTerminalController extends BaseController
return getDataTable(list);
}
@ApiOperation("根据deviceId查询终端列表")
@GetMapping("/listByDeviceId/{deviceId}")
public AjaxResult listByDeviceId(@PathVariable String deviceId)
{
IotTerminal iotTerminal = new IotTerminal();
iotTerminal.setDevice_id(deviceId);
List<IotTerminal> list = iotTerminalService.selectIotTerminalListByUserId(iotTerminal);
return AjaxResult.success(list);
}
@ApiOperation("测试")
@GetMapping("/t1")
public TestDto t1()
... ...
# 项目相关配置 jhlt: # 名称 name: zhonglai # 版本 version: 3.8.2 # 版权年份 copyrightYear: 2022 # 实例演示开关 demoEnabled: true # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) profile: D:/ruoyi/uploadPath # 获取ip地址开关 addressEnabled: false # 验证码类型 math 数组计算 char 字符验证 captchaType: math # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 port: 18080 servlet: # 应用的访问路径 context-path: / tomcat: # tomcat的URI编码 uri-encoding: UTF-8 # 连接数满后的排队数,默认为100 accept-count: 1000 threads: # tomcat最大线程数,默认为200 max: 800 # Tomcat启动初始化的线程数,默认值10 min-spare: 100 # 日志配置 logging: level: com.ruoyi: debug org.springframework: warn com.zhonglai.luhui: debug # Spring配置 spring: # 资源信息 messages: # 国际化资源文件路径 basename: i18n/messages profiles: active: druid # 文件上传 servlet: multipart: # 单个文件大小 max-file-size: 10MB # 设置总上传的文件大小 max-request-size: 20MB # 服务模块 devtools: restart: # 热部署开关 enabled: true # redis 配置 redis: # 地址 host: 47.112.163.61 # 端口,默认为6379 port: 9527 # 数据库索引 database: 1 # 密码 password: Luhui586 # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms # token配置 token: # 令牌自定义标识 header: Authorization # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) expireTime: 1440 rediskey: lh-api # MyBatis配置 mybatis: # 搜索指定包别名 typeAliasesPackage: com.ruoyi.**.domain,com.zhonglai.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapperLocations: classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml # PageHelper分页插件 pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql # Swagger配置 swagger: # 是否开启swagger enabled: true # 请求前缀 pathMapping: /dev-api # 防止XSS攻击 xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/* mqtt: client: device_life: 180 sys: ## // 对于登录login 注册register 验证码captchaImage 允许匿名访问 antMatchers: /login/ApiLogin/*,/content/**,/test/**,/fish/FishPriceCollection/* # NameServer地址 rocketmq: name-server: 47.115.144.179:9876 # 默认的消息组 producer: group: deviceCommand send-message-timeout: 30000 send-topic: lh-mqtt-service-deviceCommand-test send-tags: 1
\ No newline at end of file
# 项目相关配置 jhlt: # 名称 name: zhonglai # 版本 version: 3.8.2 # 版权年份 copyrightYear: 2022 # 实例演示开关 demoEnabled: true # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath) profile: D:/ruoyi/uploadPath # 获取ip地址开关 addressEnabled: false # 验证码类型 math 数组计算 char 字符验证 captchaType: math # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 port: 18080 servlet: # 应用的访问路径 context-path: / tomcat: # tomcat的URI编码 uri-encoding: UTF-8 # 连接数满后的排队数,默认为100 accept-count: 1000 threads: # tomcat最大线程数,默认为200 max: 800 # Tomcat启动初始化的线程数,默认值10 min-spare: 100 # 日志配置 logging: level: com.ruoyi: debug org.springframework: warn com.zhonglai.luhui: debug # Spring配置 spring: # 资源信息 messages: # 国际化资源文件路径 basename: i18n/messages profiles: active: druid # 文件上传 servlet: multipart: # 单个文件大小 max-file-size: 10MB # 设置总上传的文件大小 max-request-size: 20MB # 服务模块 devtools: restart: # 热部署开关 enabled: true # redis 配置 redis: # 地址 host: 47.112.163.61 # 端口,默认为6379 port: 9527 # 数据库索引 database: 1 # 密码 password: Luhui586 # 连接超时时间 timeout: 10s lettuce: pool: # 连接池中的最小空闲连接 min-idle: 0 # 连接池中的最大空闲连接 max-idle: 8 # 连接池的最大数据库连接数 max-active: 8 # #连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1ms # token配置 token: # 令牌自定义标识 header: Authorization # 令牌密钥 secret: abcdefghijklmnopqrstuvwxyz # 令牌有效期(默认30分钟) expireTime: 1440 rediskey: lh-api # MyBatis配置 mybatis: # 搜索指定包别名 typeAliasesPackage: com.ruoyi.**.domain,com.zhonglai.**.domain # 配置mapper的扫描,找到所有的mapper.xml映射文件 mapperLocations: classpath*:mapper/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml # PageHelper分页插件 pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql # Swagger配置 swagger: # 是否开启swagger enabled: true # 请求前缀 pathMapping: /dev-api # 防止XSS攻击 xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/* mqtt: client: device_life: 180 sys: ## // 对于登录login 注册register 验证码captchaImage 允许匿名访问 antMatchers: /login/ApiLogin/*,/content/**,/test/**,/fish/FishPriceCollection/*,/iot/IotTerminal/listByDeviceId/* # NameServer地址 rocketmq: name-server: 47.115.144.179:9876 # 默认的消息组 producer: group: deviceCommand send-message-timeout: 30000 send-topic: lh-mqtt-service-deviceCommand-test send-tags: 1
\ No newline at end of file
... ...