Browse Source

Merge remote-tracking branch 'origin/master'

LLL 1 year ago
parent
commit
f503350fd0
22 changed files with 1076 additions and 0 deletions
  1. 5 0
      jeecg-boot-base-core/pom.xml
  2. 197 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeCollectData/controller/IotedgeCollectDataController.java
  3. 24 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeCollectData/entity/IoTEdgeDevices.java
  4. 79 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeCollectData/entity/IotedgeCollectData.java
  5. 24 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeCollectData/entity/IotedgeTag.java
  6. 17 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeCollectData/mapper/IotedgeCollectDataMapper.java
  7. 5 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeCollectData/mapper/xml/IotedgeCollectDataMapper.xml
  8. 19 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeCollectData/service/IIotedgeCollectDataService.java
  9. 81 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeCollectData/service/RestClientService.java
  10. 90 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeCollectData/service/impl/IotedgeCollectDataServiceImpl.java
  11. 177 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeConfig/controller/IotedgeConfigController.java
  12. 71 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeConfig/entity/IotedgeConfig.java
  13. 17 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeConfig/mapper/IotedgeConfigMapper.java
  14. 5 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeConfig/mapper/xml/IotedgeConfigMapper.xml
  15. 16 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeConfig/service/IIotedgeConfigService.java
  16. 32 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeConfig/service/impl/IotedgeConfigServiceImpl.java
  17. 26 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeConfig/util/ConfigInfo.java
  18. 75 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/kafka/consumer/TestConsumer.java
  19. 27 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/kafka/controller/TestController.java
  20. 44 0
      jeecg-module-interlock/src/main/java/org/jeecg/modules/kafka/producer/TestProducer.java
  21. 6 0
      jeecg-module-system/jeecg-system-start/pom.xml
  22. 39 0
      jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml

+ 5 - 0
jeecg-boot-base-core/pom.xml

@@ -11,6 +11,11 @@
 	<artifactId>jeecg-boot-base-core</artifactId>
 
 	<dependencies>
+		<dependency>
+			<groupId>org.springframework.kafka</groupId>
+			<artifactId>spring-kafka</artifactId>
+			<version>2.8.0</version>
+		</dependency>
 		<!--jeecg-tools-->
 		<dependency>
 			<groupId>org.jeecgframework.boot</groupId>

+ 197 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeCollectData/controller/IotedgeCollectDataController.java

@@ -0,0 +1,197 @@
+package org.jeecg.modules.iotedgeCollectData.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import com.alibaba.fastjson.JSONObject;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.iotedgeCollectData.entity.IoTEdgeDevices;
+import org.jeecg.modules.iotedgeCollectData.entity.IotedgeCollectData;
+import org.jeecg.modules.iotedgeCollectData.service.IIotedgeCollectDataService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecg.modules.iotedgeCollectData.service.RestClientService;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: iotedge_collect_data
+ * @Author: jeecg-boot
+ * @Date:   2024-05-22
+ * @Version: V1.0
+ */
+@Api(tags="采集数据")
+@RestController
+@RequestMapping("/iotedgeCollectData/iotedgeCollectData")
+@Slf4j
+public class IotedgeCollectDataController extends JeecgController<IotedgeCollectData, IIotedgeCollectDataService> {
+	@Autowired
+	private IIotedgeCollectDataService iotedgeCollectDataService;
+
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param iotedgeCollectData
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "iotedge_collect_data-分页列表查询")
+	@ApiOperation(value="采集数据-分页列表查询", notes="采集数据-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<IotedgeCollectData>> queryPageList(IotedgeCollectData iotedgeCollectData,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<IotedgeCollectData> queryWrapper = QueryGenerator.initQueryWrapper(iotedgeCollectData, req.getParameterMap());
+		Page<IotedgeCollectData> page = new Page<IotedgeCollectData>(pageNo, pageSize);
+		IPage<IotedgeCollectData> pageList = iotedgeCollectDataService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param iotedgeCollectData
+	 * @return
+	 */
+	@AutoLog(value = "采集数据-添加")
+	@ApiOperation(value="采集数据-添加", notes="采集数据-添加")
+	//@RequiresPermissions("org.jeecg.modules:iotedge_collect_data:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody IotedgeCollectData iotedgeCollectData) {
+		iotedgeCollectDataService.save(iotedgeCollectData);
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param iotedgeCollectData
+	 * @return
+	 */
+	@AutoLog(value = "采集数据-编辑")
+	@ApiOperation(value="采集数据-编辑", notes="采集数据-编辑")
+	//@RequiresPermissions("org.jeecg.modules:iotedge_collect_data:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody IotedgeCollectData iotedgeCollectData) {
+		iotedgeCollectDataService.updateById(iotedgeCollectData);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "采集数据-通过id删除")
+	@ApiOperation(value="采集数据-通过id删除", notes="采集数据-通过id删除")
+	//@RequiresPermissions("org.jeecg.modules:iotedge_collect_data:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		iotedgeCollectDataService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "采集数据-批量删除")
+	@ApiOperation(value="采集数据-批量删除", notes="采集数据-批量删除")
+	//@RequiresPermissions("org.jeecg.modules:iotedge_collect_data:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.iotedgeCollectDataService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "iotedge_collect_data-通过id查询")
+	@ApiOperation(value="采集数据-通过id查询", notes="采集数据-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<IotedgeCollectData> queryById(@RequestParam(name="id",required=true) String id) {
+		IotedgeCollectData iotedgeCollectData = iotedgeCollectDataService.getById(id);
+		if(iotedgeCollectData==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(iotedgeCollectData);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param iotedgeCollectData
+    */
+    //@RequiresPermissions("org.jeecg.modules:iotedge_collect_data:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, IotedgeCollectData iotedgeCollectData) {
+        return super.exportXls(request, iotedgeCollectData, IotedgeCollectData.class, "iotedge_collect_data");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("iotedge_collect_data:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, IotedgeCollectData.class);
+    }
+
+	 @AutoLog(value = "采集数据-获取点位")
+	 @ApiOperation(value="采集数据-获取点位", notes="采集数据-获取点位")
+	 @PostMapping(value = "/getTagInfo")
+	 public Result<List<IoTEdgeDevices>> getTagInfo() {
+		 return  Result.OK(iotedgeCollectDataService.getDevicesInfoById());
+	 }
+
+
+	 @AutoLog(value = "采集数据-调用接口测试")
+	 @ApiOperation(value="采集数据-调用接口测试", notes="采集数据-调用接口测试")
+	 @PostMapping(value = "/test")
+	 public Result<List<IoTEdgeDevices>> test(@RequestParam(name = "deviceId") String deviceId) {
+		 return  Result.OK(iotedgeCollectDataService.getDevicesInfoById());
+	 }
+
+}

+ 24 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeCollectData/entity/IoTEdgeDevices.java

@@ -0,0 +1,24 @@
+package org.jeecg.modules.iotedgeCollectData.entity;
+
+import lombok.Data;
+import org.apache.poi.ss.formula.functions.T;
+
+import java.util.List;
+
+/**
+ * @author dzc
+ * @date 2024/5/23 15:36
+ * @package org.jeecg.modules.iotedgeCollectData.entity
+ * @project interlock_server
+ * @des
+ */
+@Data
+public class IoTEdgeDevices<T> {
+
+    private String id;
+    private String name;
+    private String info;
+    private List<T> children;
+
+
+}

+ 79 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeCollectData/entity/IotedgeCollectData.java

@@ -0,0 +1,79 @@
+package org.jeecg.modules.iotedgeCollectData.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: iotedge_collect_data
+ * @Author: jeecg-boot
+ * @Date:   2024-05-22
+ * @Version: V1.0
+ */
+@Data
+@TableName("iotedge_collect_data")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="iotedge_collect_data对象", description="iotedge_collect_data")
+public class IotedgeCollectData implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**groupid*/
+	@Excel(name = "groupid", width = 15)
+    @ApiModelProperty(value = "groupid")
+    private java.lang.String groupid;
+    /**pid*/
+    @Excel(name = "pid", width = 15)
+    @ApiModelProperty(value = "pid")
+    private java.lang.String pid;
+	/**device*/
+	@Excel(name = "device", width = 15)
+    @ApiModelProperty(value = "device")
+    private java.lang.String device;
+	/**service*/
+	@Excel(name = "service", width = 15)
+    @ApiModelProperty(value = "service")
+    private java.lang.String service;
+	/**property*/
+	@Excel(name = "property", width = 15)
+    @ApiModelProperty(value = "property")
+    private java.lang.String property;
+	/**value*/
+	@Excel(name = "value", width = 15)
+    @ApiModelProperty(value = "value")
+    private java.lang.String value;
+	/**time*/
+	@Excel(name = "time", width = 15)
+    @ApiModelProperty(value = "time")
+    private java.lang.String time;
+	/**rksj*/
+	@Excel(name = "rksj", width = 15)
+    @ApiModelProperty(value = "rksj")
+    private java.lang.String rksj;
+	/**datatime*/
+	@Excel(name = "datatime", width = 15)
+    @ApiModelProperty(value = "datatime")
+    private java.lang.String datatime;
+	/**year*/
+	@Excel(name = "year", width = 15)
+    @ApiModelProperty(value = "year")
+    private java.lang.Integer year;
+	/**yearmonth*/
+	@Excel(name = "yearmonth", width = 15)
+    @ApiModelProperty(value = "yearmonth")
+    private java.lang.String yearmonth;
+}

+ 24 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeCollectData/entity/IotedgeTag.java

@@ -0,0 +1,24 @@
+package org.jeecg.modules.iotedgeCollectData.entity;
+
+import lombok.Data;
+
+/**
+ * @author dzc
+ * @date 2024/5/28 9:16
+ * @package org.jeecg.modules.iotedgeCollectData.entity
+ * @project interlock_server
+ * @des
+ */
+@Data
+public class IotedgeTag {
+
+    /** 点位名称 */
+    private String name;
+
+    /** 点位值 */
+    private String value;
+
+
+    private String info;
+
+}

+ 17 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeCollectData/mapper/IotedgeCollectDataMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.iotedgeCollectData.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.iotedgeCollectData.entity.IotedgeCollectData;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: iotedge_collect_data
+ * @Author: jeecg-boot
+ * @Date:   2024-05-22
+ * @Version: V1.0
+ */
+public interface IotedgeCollectDataMapper extends BaseMapper<IotedgeCollectData> {
+
+}

+ 5 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeCollectData/mapper/xml/IotedgeCollectDataMapper.xml

@@ -0,0 +1,5 @@
+<?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">
+<mapper namespace="org.jeecg.modules.iotedgeCollectData.mapper.IotedgeCollectDataMapper">
+
+</mapper>

+ 19 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeCollectData/service/IIotedgeCollectDataService.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.iotedgeCollectData.service;
+
+import com.alibaba.fastjson.JSONObject;
+import org.jeecg.modules.iotedgeCollectData.entity.IoTEdgeDevices;
+import org.jeecg.modules.iotedgeCollectData.entity.IotedgeCollectData;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * @Description: iotedge_collect_data
+ * @Author: jeecg-boot
+ * @Date:   2024-05-22
+ * @Version: V1.0
+ */
+public interface IIotedgeCollectDataService extends IService<IotedgeCollectData> {
+
+    List<IoTEdgeDevices> getDevicesInfoById();
+}

+ 81 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeCollectData/service/RestClientService.java

@@ -0,0 +1,81 @@
+package org.jeecg.modules.iotedgeCollectData.service;
+
+import com.alibaba.fastjson.JSONObject;
+import org.jeecg.modules.iotedgeConfig.service.IIotedgeConfigService;
+import org.jeecg.modules.iotedgeConfig.util.ConfigInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.*;
+import org.springframework.stereotype.Service;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+/**
+ * @author dzc
+ * @date 2024/5/22 15:14
+ * @package org.jeecg.modules.iotedgeCollectData.service
+ * @project interlock_server
+ * @des 调用IoTEdge接口
+ */
+@Service
+public class RestClientService {
+
+    @Autowired
+    @SuppressWarnings("all")
+    private RestTemplate restTemplate;
+    @Autowired
+    @SuppressWarnings("all")
+    private IIotedgeConfigService configService;
+
+
+    /**
+     * author: dzc
+     * version: 1.0
+     * des: 调用IoTEdge接口 获取Token
+     * date: 2024/5/22
+     */
+    private String getAccessToken() {
+        //String url = "http://127.0.0.1:8082/v1/auth";
+        String url = configService.getConfigValue(ConfigInfo.GETTOKEN);
+        String username = configService.getConfigValue(ConfigInfo.USERNAME);
+        String password = configService.getConfigValue(ConfigInfo.PASSWORD);
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("username",username);
+        jsonObject.put("password",password);
+        HttpHeaders headers = new HttpHeaders();
+        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
+        headers.setContentType(type);
+        HttpEntity<String> httpEntity = new HttpEntity<String>(jsonObject.toString(), headers);
+        ResponseEntity<JSONObject> response = restTemplate.postForEntity(url, httpEntity, JSONObject.class);
+        String accessToken = (String) response.getBody().get("accessToken");
+        return accessToken;
+    }
+
+    public JSONObject getAllDevicesInfo(){
+        //String url = "http://127.0.0.1:8082/v1/devices?deviceType=&projectID=all&productID=all";
+        String url = configService.getConfigValue(ConfigInfo.GETALLDEVICESINFO);
+        String accessToken = getAccessToken();
+        HttpHeaders headers = new HttpHeaders();
+        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
+        headers.setContentType(type);
+        headers.add("Authorization", "Bearer " + accessToken);
+        HttpEntity<String> httpEntity = new HttpEntity<String>(null, headers);
+        ResponseEntity<JSONObject> response = restTemplate.exchange(url, HttpMethod.GET,httpEntity, JSONObject.class);
+        return response.getBody();
+    }
+
+
+    public JSONObject getAllDevicesInfoById(String deviceId){
+        //String url = "http://127.0.0.1:8082/v1/devices/"+deviceId+"/deviceshadow";
+        String url = configService.getConfigValue(ConfigInfo.GETALLDEVICESINFOBYID)+"/"+deviceId+"/deviceshadow";
+        String accessToken = getAccessToken();
+        HttpHeaders headers = new HttpHeaders();
+        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
+        headers.setContentType(type);
+        headers.add("Authorization", "Bearer " + accessToken);
+        HttpEntity<String> httpEntity = new HttpEntity<String>(null, headers);
+        ResponseEntity<JSONObject> response = restTemplate.exchange(url, HttpMethod.GET,httpEntity, JSONObject.class);
+        return response.getBody();
+    }
+
+}

+ 90 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeCollectData/service/impl/IotedgeCollectDataServiceImpl.java

@@ -0,0 +1,90 @@
+package org.jeecg.modules.iotedgeCollectData.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+
+import com.alibaba.fastjson.TypeReference;
+import net.sf.saxon.expr.Component;
+import org.jeecg.modules.iotedgeCollectData.entity.IoTEdgeDevices;
+import org.jeecg.modules.iotedgeCollectData.entity.IotedgeCollectData;
+import org.jeecg.modules.iotedgeCollectData.entity.IotedgeTag;
+import org.jeecg.modules.iotedgeCollectData.mapper.IotedgeCollectDataMapper;
+import org.jeecg.modules.iotedgeCollectData.service.IIotedgeCollectDataService;
+import org.jeecg.modules.iotedgeCollectData.service.RestClientService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: iotedge_collect_data
+ * @Author: jeecg-boot
+ * @Date:   2024-05-22
+ * @Version: V1.0
+ */
+@Service
+public class IotedgeCollectDataServiceImpl extends ServiceImpl<IotedgeCollectDataMapper, IotedgeCollectData> implements IIotedgeCollectDataService {
+
+    @Autowired
+    @SuppressWarnings("all")
+    private RestClientService restClientService;
+
+    @Override
+    public List<IoTEdgeDevices> getDevicesInfoById() {
+        Map<String, String> devicesMap = new HashMap<>();
+        JSONObject message1 = restClientService.getAllDevicesInfo();
+        ArrayList<Map<String,Object>> maps = (ArrayList<Map<String, Object>>) message1.get("items");
+        for (Map<String,Object> device : maps) {
+            devicesMap.put(device.get("deviceName").toString(),device.get("deviceId").toString());
+        }
+        List<IoTEdgeDevices> list = this.getDevicesList(devicesMap);
+        return list;
+    }
+
+    /**
+    *   author: dzc
+    *   version: 1.0
+    *   des: 获取每台设备下的点位信息
+    *   date: 2024/5/28
+    */
+    private List<IoTEdgeDevices> getDevicesList(Map<String, String> devicesMap) {
+        ArrayList<IoTEdgeDevices> devicesList = new ArrayList<>();
+        for (String key : devicesMap.keySet()) {
+            ArrayList<IoTEdgeDevices> list = new ArrayList<>();
+            IoTEdgeDevices ioTEdgeDevices = new IoTEdgeDevices();
+            ioTEdgeDevices.setId(devicesMap.get(key)); // 设备id
+            ioTEdgeDevices.setName(key); // 设备名称
+            ioTEdgeDevices.setInfo(devicesMap.get(key)); // 设备id
+            JSONObject message2 = restClientService.getAllDevicesInfoById(devicesMap.get(key));
+            List<Map<String,Object>> items2 = (List<Map<String,Object>>) message2.get("items");
+            HashMap<String, List<IotedgeTag>> serviceMap = new HashMap<>();
+            for (Map<String,Object> item : items2) {
+                IotedgeTag iotedgeTag = new IotedgeTag();
+                iotedgeTag.setName(item.get("devicePropertyName").toString()); // 点位名称
+                iotedgeTag.setValue(item.get("reportValue").toString()); // 点位值
+                iotedgeTag.setInfo(item.get("devicePropertyName").toString()+"&"+item.get("reportValue").toString()); // 点位名称 & 点位值
+                if (serviceMap.containsKey(item.get("deviceServiceName").toString())){
+                    serviceMap.get(item.get("deviceServiceName").toString()).add(iotedgeTag);
+                }else {
+                    ArrayList<IotedgeTag> tagList = new ArrayList<>();
+                    tagList.add(iotedgeTag);
+                    serviceMap.put(item.get("deviceServiceName").toString(),tagList);
+                }
+            }
+            for (String serviceKey:serviceMap.keySet()) {
+                IoTEdgeDevices ioTEdgeDevices1 = new IoTEdgeDevices();
+                ioTEdgeDevices1.setName(serviceKey);  // 模块名称
+                ioTEdgeDevices1.setInfo(serviceKey);  // 模块名称
+                ioTEdgeDevices1.setChildren(serviceMap.get(serviceKey));
+                list.add(ioTEdgeDevices1);
+            }
+            ioTEdgeDevices.setChildren(list);
+            devicesList.add(ioTEdgeDevices);
+        }
+        return devicesList;
+    }
+}

+ 177 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeConfig/controller/IotedgeConfigController.java

@@ -0,0 +1,177 @@
+package org.jeecg.modules.iotedgeConfig.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.iotedgeConfig.entity.IotedgeConfig;
+import org.jeecg.modules.iotedgeConfig.service.IIotedgeConfigService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: iotedge_config
+ * @Author: jeecg-boot
+ * @Date:   2024-05-23
+ * @Version: V1.0
+ */
+@Api(tags="IoTedge配置")
+@RestController
+@RequestMapping("/iotedgeConfig/iotedgeConfig")
+@Slf4j
+public class IotedgeConfigController extends JeecgController<IotedgeConfig, IIotedgeConfigService> {
+	@Autowired
+	private IIotedgeConfigService iotedgeConfigService;
+	
+	/**
+	 * 分页列表查询
+	 *
+	 * @param iotedgeConfig
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "iotedge_config-分页列表查询")
+	@ApiOperation(value="IoTedge配置-分页列表查询", notes="IoTedge配置-分页列表查询")
+	@GetMapping(value = "/list")
+	public Result<IPage<IotedgeConfig>> queryPageList(IotedgeConfig iotedgeConfig,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<IotedgeConfig> queryWrapper = QueryGenerator.initQueryWrapper(iotedgeConfig, req.getParameterMap());
+		Page<IotedgeConfig> page = new Page<IotedgeConfig>(pageNo, pageSize);
+		IPage<IotedgeConfig> pageList = iotedgeConfigService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+	
+	/**
+	 *   添加
+	 *
+	 * @param iotedgeConfig
+	 * @return
+	 */
+	@AutoLog(value = "IoTedge配置-添加")
+	@ApiOperation(value="IoTedge配置-添加", notes="IoTedge配置-添加")
+	//@RequiresPermissions("org.jeecg.modules:iotedge_config:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody IotedgeConfig iotedgeConfig) {
+		iotedgeConfigService.save(iotedgeConfig);
+		return Result.OK("添加成功!");
+	}
+	
+	/**
+	 *  编辑
+	 *
+	 * @param iotedgeConfig
+	 * @return
+	 */
+	@AutoLog(value = "IoTedge配置-编辑")
+	@ApiOperation(value="IoTedge配置-编辑", notes="IoTedge配置-编辑")
+	//@RequiresPermissions("org.jeecg.modules:iotedge_config:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody IotedgeConfig iotedgeConfig) {
+		iotedgeConfigService.updateById(iotedgeConfig);
+		return Result.OK("编辑成功!");
+	}
+	
+	/**
+	 *   通过id删除
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "IoTedge配置-通过id删除")
+	@ApiOperation(value="IoTedge配置-通过id删除", notes="IoTedge配置-通过id删除")
+	//@RequiresPermissions("org.jeecg.modules:iotedge_config:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		iotedgeConfigService.removeById(id);
+		return Result.OK("删除成功!");
+	}
+	
+	/**
+	 *  批量删除
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "IoTedge配置-批量删除")
+	@ApiOperation(value="IoTedge配置-批量删除", notes="IoTedge配置-批量删除")
+	//@RequiresPermissions("org.jeecg.modules:iotedge_config:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.iotedgeConfigService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("批量删除成功!");
+	}
+	
+	/**
+	 * 通过id查询
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "IoTedge配置-通过id查询")
+	@ApiOperation(value="IoTedge配置-通过id查询", notes="IoTedge配置-通过id查询")
+	@GetMapping(value = "/queryById")
+	public Result<IotedgeConfig> queryById(@RequestParam(name="id",required=true) String id) {
+		IotedgeConfig iotedgeConfig = iotedgeConfigService.getById(id);
+		if(iotedgeConfig==null) {
+			return Result.error("未找到对应数据");
+		}
+		return Result.OK(iotedgeConfig);
+	}
+
+    /**
+    * 导出excel
+    *
+    * @param request
+    * @param iotedgeConfig
+    */
+    //@RequiresPermissions("org.jeecg.modules:iotedge_config:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, IotedgeConfig iotedgeConfig) {
+        return super.exportXls(request, iotedgeConfig, IotedgeConfig.class, "iotedge_config");
+    }
+
+    /**
+      * 通过excel导入数据
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("iotedge_config:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, IotedgeConfig.class);
+    }
+
+}

+ 71 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeConfig/entity/IotedgeConfig.java

@@ -0,0 +1,71 @@
+package org.jeecg.modules.iotedgeConfig.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: iotedge_config
+ * @Author: jeecg-boot
+ * @Date:   2024-05-23
+ * @Version: V1.0
+ */
+@Data
+@TableName("iotedge_config")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="iotedge_config对象", description="iotedge_config")
+public class IotedgeConfig implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "id")
+    private java.lang.String id;
+	/**参数名称*/
+	@Excel(name = "参数名称", width = 15)
+    @ApiModelProperty(value = "参数名称")
+    private java.lang.String configname;
+	/**参数键名*/
+	@Excel(name = "参数键名", width = 15)
+    @ApiModelProperty(value = "参数键名")
+    private java.lang.String configkey;
+	/**参数键值*/
+	@Excel(name = "参数键值", width = 15)
+    @ApiModelProperty(value = "参数键值")
+    private java.lang.String configvalue;
+	/**创建者*/
+    @ApiModelProperty(value = "创建者")
+    private java.lang.String createBy;
+	/**创建时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "创建时间")
+    private java.util.Date createTime;
+	/**更新者*/
+    @ApiModelProperty(value = "更新者")
+    private java.lang.String updateBy;
+	/**更新时间*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @ApiModelProperty(value = "更新时间")
+    private java.util.Date updateTime;
+	/**备注*/
+	@Excel(name = "备注", width = 15)
+    @ApiModelProperty(value = "备注")
+    private java.lang.String remark;
+}

+ 17 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeConfig/mapper/IotedgeConfigMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.iotedgeConfig.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.iotedgeConfig.entity.IotedgeConfig;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: iotedge_config
+ * @Author: jeecg-boot
+ * @Date:   2024-05-23
+ * @Version: V1.0
+ */
+public interface IotedgeConfigMapper extends BaseMapper<IotedgeConfig> {
+
+}

+ 5 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeConfig/mapper/xml/IotedgeConfigMapper.xml

@@ -0,0 +1,5 @@
+<?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">
+<mapper namespace="org.jeecg.modules.iotedgeConfig.mapper.IotedgeConfigMapper">
+
+</mapper>

+ 16 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeConfig/service/IIotedgeConfigService.java

@@ -0,0 +1,16 @@
+package org.jeecg.modules.iotedgeConfig.service;
+
+import org.jeecg.modules.iotedgeConfig.entity.IotedgeConfig;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: iotedge_config
+ * @Author: jeecg-boot
+ * @Date:   2024-05-23
+ * @Version: V1.0
+ */
+public interface IIotedgeConfigService extends IService<IotedgeConfig> {
+
+    public String getConfigValue(String configkey);
+
+}

+ 32 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeConfig/service/impl/IotedgeConfigServiceImpl.java

@@ -0,0 +1,32 @@
+package org.jeecg.modules.iotedgeConfig.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import org.jeecg.modules.iotedgeConfig.entity.IotedgeConfig;
+import org.jeecg.modules.iotedgeConfig.mapper.IotedgeConfigMapper;
+import org.jeecg.modules.iotedgeConfig.service.IIotedgeConfigService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: iotedge_config
+ * @Author: jeecg-boot
+ * @Date:   2024-05-23
+ * @Version: V1.0
+ */
+@Service
+public class IotedgeConfigServiceImpl extends ServiceImpl<IotedgeConfigMapper, IotedgeConfig> implements IIotedgeConfigService {
+
+    @Autowired
+    @SuppressWarnings("all")
+    private IotedgeConfigMapper mapper;
+
+    @Override
+    public String getConfigValue(String configkey) {
+        QueryWrapper<IotedgeConfig> query = new QueryWrapper<>();
+        query.eq("configkey",configkey);
+        IotedgeConfig iotedgeConfig = mapper.selectOne(query);
+        return iotedgeConfig.getConfigvalue();
+    }
+}

+ 26 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/iotedgeConfig/util/ConfigInfo.java

@@ -0,0 +1,26 @@
+package org.jeecg.modules.iotedgeConfig.util;
+
+/**
+ * @author dzc
+ * @date 2024/5/23 14:53
+ * @package org.jeecg.modules.iotedgeConfig.util
+ * @project interlock_server
+ * @des
+ */
+public class ConfigInfo {
+
+    /** 用户名 */
+    public static String USERNAME = "IoTEdge.UserName";
+
+    /** 密码 */
+    public static String PASSWORD = "IoTEdge.PassWord";
+
+    /** 获取Token */
+    public static String GETTOKEN = "IoTEdge.GetAccessToken";
+
+    /** 获取设备信息 */
+    public static String GETALLDEVICESINFO = "IoTEdge.GetAllDevicesInfo";
+
+    /** 根据设备id获取点位信息 */
+    public static String GETALLDEVICESINFOBYID = "IoTEdge.GetDevicesInfoById";
+}

+ 75 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/kafka/consumer/TestConsumer.java

@@ -0,0 +1,75 @@
+package org.jeecg.modules.kafka.consumer;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.kafka.clients.consumer.ConsumerRecord;
+import org.jeecg.modules.iotedgeCollectData.entity.IotedgeCollectData;
+import org.jeecg.modules.iotedgeCollectData.service.IIotedgeCollectDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.kafka.annotation.KafkaListener;
+import org.springframework.kafka.support.Acknowledgment;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+
+@Component
+@Slf4j
+public class TestConsumer {
+
+    @Autowired
+    @SuppressWarnings("all")
+    private IIotedgeCollectDataService dataService;
+
+    /**
+     * 指定一个消费者组,一个主题主题。
+     * topicPattern有个问题,如果在本程序运行过程中新增了topic,则监听不到,需要重新启动本程序才可以
+     */
+//    @KafkaListener(topicPattern = "thing___.*.___property")
+    @KafkaListener(topicPattern = "#{'${spring.kafka.topic-patterns}'}")
+    public void simpleConsumer(ConsumerRecord<?, ?> record, Acknowledgment ack) {
+        // 提交(用来标记一条消息已经消费完成,即将从消息队列里移除。)
+        ack.acknowledge();
+        saveDataR(record);
+    }
+
+
+    /**
+     * 保存数据
+     * @param record kafka记录
+     */
+    private void saveDataR(ConsumerRecord<?, ?> record) {
+        System.out.println(record);
+        System.out.println(record.value());
+        ArrayList<IotedgeCollectData> list = new ArrayList<>();
+        String value = (String) record.value();
+        JSONObject jsonObject = JSONObject.parseObject(value);
+        Map<String,Object> services = (Map<String, Object>) jsonObject.get("services");
+        for (String key:services.keySet()) {
+            Map<String,Object> tag = (Map<String,Object>) services.get(key);
+            Map<String,Object> tagmap = (Map<String, Object>) tag.get("properties");
+            for (String item:tagmap.keySet()) {
+                Map<String,Object> valuemap = (Map<String, Object>) tagmap.get(item);
+                String value1;
+                if (valuemap.get("value") instanceof Integer){
+                    value1 = String.valueOf(valuemap.get("value"));
+                }else {
+                    value1 =  (String) valuemap.get("value");
+                }
+
+                IotedgeCollectData iotedgeCollectData = new IotedgeCollectData();
+                iotedgeCollectData.setGroupid(jsonObject.get("g_id").toString());
+                iotedgeCollectData.setPid(jsonObject.get("p_id").toString());
+                iotedgeCollectData.setDevice(jsonObject.get("d_id").toString());
+                iotedgeCollectData.setTime(jsonObject.get("ts").toString());
+                iotedgeCollectData.setService(key);
+                iotedgeCollectData.setProperty(item);
+                iotedgeCollectData.setValue(value1);
+
+                list.add(iotedgeCollectData);
+            }
+        }
+        dataService.saveBatch(list);
+    }
+}

+ 27 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/kafka/controller/TestController.java

@@ -0,0 +1,27 @@
+package org.jeecg.modules.kafka.controller;
+
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+import org.jeecg.modules.kafka.producer.TestProducer;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@Api(tags="kafka")
+@RestController
+@RequestMapping("/kafka/test")
+public class TestController {
+
+    @Resource
+    private TestProducer testProducer;
+
+    @ApiOperation(value="发送消息", notes="发送消息")
+    @GetMapping("/send")
+    public void sendMsg(String topicname, String obj){
+        testProducer.send(topicname, obj);
+    }
+}

+ 44 - 0
jeecg-module-interlock/src/main/java/org/jeecg/modules/kafka/producer/TestProducer.java

@@ -0,0 +1,44 @@
+package org.jeecg.modules.kafka.producer;
+
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.kafka.core.KafkaTemplate;
+import org.springframework.kafka.support.SendResult;
+import org.springframework.stereotype.Component;
+import org.springframework.util.concurrent.ListenableFuture;
+import org.springframework.util.concurrent.ListenableFutureCallback;
+
+import javax.annotation.Resource;
+
+@Component
+@Slf4j
+public class TestProducer {
+
+    @Resource
+    private KafkaTemplate<String, Object> kafkaTemplate;
+
+    //自定义topic
+//    public static final String TOPIC_TEST = "visible";
+//    public static final String GROUP_TEST = "grout.test";
+//
+    public void send(String topicname, Object obj) {
+        String obj2String = JSON.toJSONString(obj);
+        log.info("准备发送消息为:{}", obj2String);
+        //发送消息
+        ListenableFuture<SendResult<String, Object>> future = kafkaTemplate.send(topicname, obj);
+        future.addCallback(new ListenableFutureCallback<SendResult<String, Object>>() {
+            @Override
+            public void onFailure(@NotNull Throwable throwable) {
+                //发送失败的处理
+                log.info(topicname + " - 生产者 发送消息失败:" + throwable.getMessage());
+            }
+
+            @Override
+            public void onSuccess(SendResult<String, Object> stringObjectSendResult) {
+                //成功的处理
+                log.info(topicname + " - 生产者 发送消息成功:" + stringObjectSendResult.toString());
+            }
+        });
+    }
+}

+ 6 - 0
jeecg-module-system/jeecg-system-start/pom.xml

@@ -19,6 +19,12 @@
             <version>${jeecgboot.version}</version>
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework.kafka</groupId>
+            <artifactId>spring-kafka</artifactId>
+            <version>2.8.0</version>
+        </dependency>
+
         <!-- SYSTEM 系统管理模块 -->
         <dependency>
             <groupId>org.jeecgframework.boot</groupId>

+ 39 - 0
jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml

@@ -35,6 +35,45 @@ spring:
           starttls:
             enable: true
             required: true
+  ## kafka配置
+  kafka:
+    bootstrap-servers: 127.0.0.1:9092
+    producer:
+      # 发生错误后,消息重发的次数。
+      retries: 1
+      #当有多个消息需要被发送到同一个分区时,生产者会把它们放在同一个批次里。该参数指定了一个批次可以使用的内存大小,按照字节数计算。
+      batch-size: 16384
+      # 设置生产者内存缓冲区的大小。
+      buffer-memory: 33554432
+      # 键的序列化方式
+      key-serializer: org.apache.kafka.common.serialization.StringSerializer
+      # 值的序列化方式
+      value-serializer: org.apache.kafka.common.serialization.StringSerializer
+      # acks=0 : 生产者在成功写入消息之前不会等待任何来自服务器的响应。
+      # acks=1 : 只要集群的首领节点收到消息,生产者就会收到一个来自服务器成功响应。
+      # acks=all :只有当所有参与复制的节点全部收到消息时,生产者才会收到一个来自服务器的成功响应。
+      acks: 0
+    consumer:
+      group-id: thing___property
+      # 自动提交的时间间隔 在spring boot 2.X 版本中这里采用的是值的类型为Duration 需要符合特定的格式,如1S,1M,2H,5D
+      auto-commit-interval: 1S
+      # 该属性指定了消费者在读取一个没有偏移量的分区或者偏移量无效的情况下该作何处理:
+      # latest(默认值)在偏移量无效的情况下,消费者将从最新的记录开始读取数据(在消费者启动之后生成的记录)
+      # earliest :在偏移量无效的情况下,消费者将从起始位置读取分区的记录
+      auto-offset-reset: latest
+      # 是否自动提交偏移量,默认值是true,为了避免出现重复数据和数据丢失,可以把它设置为false,然后手动提交偏移量
+      enable-auto-commit: false
+      # 键的反序列化方式
+      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
+      # 值的反序列化方式
+      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
+    listener:
+      # 在侦听器容器中运行的线程数。
+      concurrency: 5
+      #listner负责ack,每调用一次,就立即commit
+      ack-mode: manual_immediate
+      missing-topics-fatal: false
+    topic-patterns: ".*."  # 这里使用通配符来匹配多个主题
   ## quartz定时任务,采用数据库方式
   quartz:
     job-store-type: jdbc