Переглянути джерело

[0820] 优化通道模块 关联协议id、通信展示id 改为关联协议模块、通信模块交互展示

taosj 2 місяців тому
батько
коміт
4dc2be214a
18 змінених файлів з 1138 додано та 9 видалено
  1. 59 1
      forecast-backend-server/src/main/java/com/ufo/project/config/controller/ConfigChannelController.java
  2. 107 0
      forecast-backend-server/src/main/java/com/ufo/project/config/controller/ConfigProtocolController.java
  3. 108 0
      forecast-backend-server/src/main/java/com/ufo/project/config/controller/ConfigTransmitController.java
  4. 19 2
      forecast-backend-server/src/main/java/com/ufo/project/config/domain/ConfigChannel.java
  5. 82 0
      forecast-backend-server/src/main/java/com/ufo/project/config/domain/ConfigProtocol.java
  6. 83 0
      forecast-backend-server/src/main/java/com/ufo/project/config/domain/ConfigTransmit.java
  7. 70 0
      forecast-backend-server/src/main/java/com/ufo/project/config/mapper/ConfigProtocolMapper.java
  8. 70 0
      forecast-backend-server/src/main/java/com/ufo/project/config/mapper/ConfigTransmitMapper.java
  9. 70 0
      forecast-backend-server/src/main/java/com/ufo/project/config/service/IConfigProtocolService.java
  10. 70 0
      forecast-backend-server/src/main/java/com/ufo/project/config/service/IConfigTransmitService.java
  11. 106 0
      forecast-backend-server/src/main/java/com/ufo/project/config/service/impl/ConfigProtocolServiceImpl.java
  12. 106 0
      forecast-backend-server/src/main/java/com/ufo/project/config/service/impl/ConfigTransmitServiceImpl.java
  13. 73 0
      forecast-backend-server/src/main/resources/mybatis/config/ConfigProtocolMapper.xml
  14. 73 0
      forecast-backend-server/src/main/resources/mybatis/config/ConfigTransmitMapper.xml
  15. 5 0
      forecast-backend-vue/src/api/config/protocol.js
  16. 5 0
      forecast-backend-vue/src/api/config/transmit.js
  17. 26 0
      forecast-backend-vue/src/views/ufo/config/station/StationConfigCrud.vue
  18. 6 6
      forecast-backend-vue/src/views/ufo/config/station/moduleConfig.js

+ 59 - 1
forecast-backend-server/src/main/java/com/ufo/project/config/controller/ConfigChannelController.java

@@ -1,6 +1,12 @@
 package com.ufo.project.config.controller;
 
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletResponse;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,7 +21,11 @@ import org.springframework.web.bind.annotation.RestController;
 import com.ufo.base.framework.aspectj.lang.annotation.Log;
 import com.ufo.base.framework.aspectj.lang.enums.BusinessType;
 import com.ufo.project.config.domain.ConfigChannel;
+import com.ufo.project.config.domain.ConfigProtocol;
+import com.ufo.project.config.domain.ConfigTransmit;
 import com.ufo.project.config.service.IConfigChannelService;
+import com.ufo.project.config.service.IConfigProtocolService;
+import com.ufo.project.config.service.IConfigTransmitService;
 import com.ufo.base.framework.web.controller.BaseController;
 import com.ufo.base.framework.web.domain.AjaxResult;
 import com.ufo.base.common.utils.poi.ExcelUtil;
@@ -34,12 +44,19 @@ public class ConfigChannelController extends BaseController
     @Autowired
     private IConfigChannelService configChannelService;
 
+    @Autowired
+    private IConfigProtocolService configProtocolService;
+
+    @Autowired
+    private IConfigTransmitService configTransmitService;
+
     @PreAuthorize("@ss.hasPermi('config:stationChannel:list')")
     @GetMapping("/list")
     public TableDataInfo list(ConfigChannel configChannel)
     {
         startPage();
         List<ConfigChannel> list = configChannelService.selectConfigChannelList(configChannel);
+        fillNames(list);
         return getDataTable(list);
     }
 
@@ -49,6 +66,7 @@ public class ConfigChannelController extends BaseController
     public void export(HttpServletResponse response, ConfigChannel configChannel)
     {
         List<ConfigChannel> list = configChannelService.selectConfigChannelList(configChannel);
+        fillNames(list);
         ExcelUtil<ConfigChannel> util = new ExcelUtil<ConfigChannel>(ConfigChannel.class);
         util.exportExcel(response, list, "通道配置");
     }
@@ -57,7 +75,47 @@ public class ConfigChannelController extends BaseController
     @GetMapping(value = "/{id}")
     public AjaxResult getInfo(@PathVariable("id") Long id)
     {
-        return success(configChannelService.selectConfigChannelById(id));
+        ConfigChannel configChannel = configChannelService.selectConfigChannelById(id);
+        if (configChannel != null)
+        {
+            fillNames(Arrays.asList(configChannel));
+        }
+        return success(configChannel);
+    }
+
+    /**
+     * 根据通道中的通信模块ID、协议模块ID,通过ids批量查询并补充对应的名称
+     */
+    private void fillNames(List<ConfigChannel> list)
+    {
+        if (list == null || list.isEmpty())
+        {
+            return;
+        }
+        Set<Long> transmitIds = new HashSet<>();
+        Set<Long> protocolIds = new HashSet<>();
+        for (ConfigChannel channel : list)
+        {
+            if (channel.getConfigTransmitId() != null)
+            {
+                transmitIds.add(channel.getConfigTransmitId());
+            }
+            if (channel.getConfigProtocalId() != null)
+            {
+                protocolIds.add(channel.getConfigProtocalId());
+            }
+        }
+        Map<Long, String> transmitNameMap = transmitIds.isEmpty() ? Collections.emptyMap()
+                : configTransmitService.selectConfigTransmitByIds(transmitIds.toArray(new Long[0])).stream()
+                        .collect(Collectors.toMap(ConfigTransmit::getId, ConfigTransmit::getName, (v1, v2) -> v1));
+        Map<Long, String> protocolNameMap = protocolIds.isEmpty() ? Collections.emptyMap()
+                : configProtocolService.selectConfigProtocolByIds(protocolIds.toArray(new Long[0])).stream()
+                        .collect(Collectors.toMap(ConfigProtocol::getId, ConfigProtocol::getName, (v1, v2) -> v1));
+        for (ConfigChannel channel : list)
+        {
+            channel.setConfigTransmitName(transmitNameMap.get(channel.getConfigTransmitId()));
+            channel.setConfigProtocalName(protocolNameMap.get(channel.getConfigProtocalId()));
+        }
     }
 
     @PreAuthorize("@ss.hasPermi('config:stationChannel:add')")

+ 107 - 0
forecast-backend-server/src/main/java/com/ufo/project/config/controller/ConfigProtocolController.java

@@ -0,0 +1,107 @@
+package com.ufo.project.config.controller;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.ufo.base.common.utils.poi.ExcelUtil;
+import com.ufo.base.framework.aspectj.lang.annotation.Log;
+import com.ufo.base.framework.aspectj.lang.enums.BusinessType;
+import com.ufo.base.framework.web.controller.BaseController;
+import com.ufo.base.framework.web.domain.AjaxResult;
+import com.ufo.base.framework.web.page.TableDataInfo;
+import com.ufo.project.config.domain.ConfigProtocol;
+import com.ufo.project.config.service.IConfigProtocolService;
+
+/**
+ * 协议Controller
+ * 
+ * @author oleauto
+ * @date
+ */
+@RestController
+@RequestMapping("/dev/protocol")
+public class ConfigProtocolController extends BaseController
+{
+    @Autowired
+    private IConfigProtocolService configProtocolService;
+
+    /**
+     * 查询协议列表
+     */
+    @PreAuthorize("@ss.hasPermi('dev:protocol:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ConfigProtocol configProtocol)
+    {
+        startPage();
+        List<ConfigProtocol> list = configProtocolService.selectConfigProtocolList(configProtocol);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出协议列表
+     */
+    @PreAuthorize("@ss.hasPermi('dev:protocol:export')")
+    @Log(title = "协议", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ConfigProtocol configProtocol)
+    {
+        List<ConfigProtocol> list = configProtocolService.selectConfigProtocolList(configProtocol);
+        ExcelUtil<ConfigProtocol> util = new ExcelUtil<ConfigProtocol>(ConfigProtocol.class);
+        util.exportExcel(response, list, "协议数据");
+    }
+
+    /**
+     * 获取协议详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('dev:protocol:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(configProtocolService.selectConfigProtocolById(id));
+    }
+
+    /**
+     * 新增协议
+     */
+    @PreAuthorize("@ss.hasPermi('dev:protocol:add')")
+    @Log(title = "协议", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ConfigProtocol configProtocol)
+    {
+        return toAjax(configProtocolService.insertConfigProtocol(configProtocol));
+    }
+
+    /**
+     * 修改协议
+     */
+    @PreAuthorize("@ss.hasPermi('dev:protocol:edit')")
+    @Log(title = "协议", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ConfigProtocol configProtocol)
+    {
+        return toAjax(configProtocolService.updateConfigProtocol(configProtocol));
+    }
+
+    /**
+     * 删除协议
+     */
+    @PreAuthorize("@ss.hasPermi('dev:protocol:remove')")
+    @Log(title = "协议", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(configProtocolService.deleteConfigProtocolByIds(ids));
+    }
+}

+ 108 - 0
forecast-backend-server/src/main/java/com/ufo/project/config/controller/ConfigTransmitController.java

@@ -0,0 +1,108 @@
+package com.ufo.project.config.controller;
+
+import java.util.List;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.ufo.base.common.utils.poi.ExcelUtil;
+import com.ufo.base.framework.aspectj.lang.annotation.Log;
+import com.ufo.base.framework.aspectj.lang.enums.BusinessType;
+import com.ufo.base.framework.web.controller.BaseController;
+import com.ufo.base.framework.web.domain.AjaxResult;
+import com.ufo.base.framework.web.page.TableDataInfo;
+import com.ufo.project.config.service.IConfigTransmitService;
+import com.ufo.project.config.domain.ConfigTransmit;
+
+
+/**
+ * 通信Controller
+ * 
+ * @author oleauto
+ * @date
+ */
+@RestController
+@RequestMapping("/dev/transmit")
+public class ConfigTransmitController extends BaseController
+{
+    @Autowired
+    private IConfigTransmitService configTransmitService;
+
+    /**
+     * 查询通信列表
+     */
+    @PreAuthorize("@ss.hasPermi('dev:transmit:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ConfigTransmit configTransmit)
+    {
+        startPage();
+        List<ConfigTransmit> list = configTransmitService.selectConfigTransmitList(configTransmit);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出通信列表
+     */
+    @PreAuthorize("@ss.hasPermi('dev:transmit:export')")
+    @Log(title = "通信", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ConfigTransmit configTransmit)
+    {
+        List<ConfigTransmit> list = configTransmitService.selectConfigTransmitList(configTransmit);
+        ExcelUtil<ConfigTransmit> util = new ExcelUtil<ConfigTransmit>(ConfigTransmit.class);
+        util.exportExcel(response, list, "通信数据");
+    }
+
+    /**
+     * 获取通信详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('dev:transmit:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(configTransmitService.selectConfigTransmitById(id));
+    }
+
+    /**
+     * 新增通信
+     */
+    @PreAuthorize("@ss.hasPermi('dev:transmit:add')")
+    @Log(title = "通信", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ConfigTransmit configTransmit)
+    {
+        return toAjax(configTransmitService.insertConfigTransmit(configTransmit));
+    }
+
+    /**
+     * 修改通信
+     */
+    @PreAuthorize("@ss.hasPermi('dev:transmit:edit')")
+    @Log(title = "通信", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ConfigTransmit configTransmit)
+    {
+        return toAjax(configTransmitService.updateConfigTransmit(configTransmit));
+    }
+
+    /**
+     * 删除通信
+     */
+    @PreAuthorize("@ss.hasPermi('dev:transmit:remove')")
+    @Log(title = "通信", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(configTransmitService.deleteConfigTransmitByIds(ids));
+    }
+}

+ 19 - 2
forecast-backend-server/src/main/java/com/ufo/project/config/domain/ConfigChannel.java

@@ -32,17 +32,21 @@ public class ConfigChannel extends BaseEntity
     private String disabled;
 
     /** 通信模块ID */
-    @Excel(name = "通信模块ID")
     private Long configTransmitId;
 
+    @Excel(name = "通信模块名称")
+    private String configTransmitName;
+
     /** 通信配置 */
     @Excel(name = "通信配置")
     private String transmitConfig;
 
     /** 协议模块ID */
-    @Excel(name = "协议模块ID")
     private Long configProtocalId;
 
+    @Excel(name = "协议模块名称")
+    private String configProtocalName;
+
     /** 协议配置 */
     @Excel(name = "协议配置")
     private String protocolConfig;
@@ -143,8 +147,21 @@ public class ConfigChannel extends BaseEntity
 		this.protocolConfig = protocolConfig;
 	}
 
+	public String getConfigTransmitName() {
+		return configTransmitName;
+	}
 
+	public void setConfigTransmitName(String configTransmitName) {
+		this.configTransmitName = configTransmitName;
+	}
 
+	public String getConfigProtocalName() {
+		return configProtocalName;
+	}
+
+	public void setConfigProtocalName(String configProtocalName) {
+		this.configProtocalName = configProtocalName;
+	}
 	@Override
     public String toString() {
         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)

+ 82 - 0
forecast-backend-server/src/main/java/com/ufo/project/config/domain/ConfigProtocol.java

@@ -0,0 +1,82 @@
+package com.ufo.project.config.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import com.ufo.base.framework.aspectj.lang.annotation.Excel;
+import com.ufo.base.framework.web.domain.BaseEntity;
+
+/**
+ * 
+ * @author oleauto
+ * @date
+ */
+public class ConfigProtocol extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private Long id;
+
+    /** 名称 */
+    @Excel(name = "名称")
+    private String name;
+
+    /** 全类名 */
+    @Excel(name = "全类名")
+    private String protocolClass;
+
+    /** $column.columnComment */
+    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
+    private String configExample;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+
+    public void setName(String name) 
+    {
+        this.name = name;
+    }
+
+    public String getName() 
+    {
+        return name;
+    }
+
+    public void setProtocolClass(String protocolClass) 
+    {
+        this.protocolClass = protocolClass;
+    }
+
+    public String getProtocolClass() 
+    {
+        return protocolClass;
+    }
+
+    public void setConfigExample(String configExample) 
+    {
+        this.configExample = configExample;
+    }
+
+    public String getConfigExample() 
+    {
+        return configExample;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("name", getName())
+            .append("protocolClass", getProtocolClass())
+            .append("configExample", getConfigExample())
+            .toString();
+    }
+}

+ 83 - 0
forecast-backend-server/src/main/java/com/ufo/project/config/domain/ConfigTransmit.java

@@ -0,0 +1,83 @@
+package com.ufo.project.config.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import com.ufo.base.framework.aspectj.lang.annotation.Excel;
+import com.ufo.base.framework.web.domain.BaseEntity;
+
+/**
+ * 通信对象 config_transmit
+ * 
+ * @author oleauto
+ * @date
+ */
+public class ConfigTransmit extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private Long id;
+
+    /** 名称 */
+    @Excel(name = "名称")
+    private String name;
+
+    /** 类全名 */
+    @Excel(name = "类全名")
+    private String transmitClass;
+
+    /** 配置示例 */
+    @Excel(name = "配置示例")
+    private String configExample;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+
+    public void setName(String name) 
+    {
+        this.name = name;
+    }
+
+    public String getName() 
+    {
+        return name;
+    }
+
+    public void setTransmitClass(String transmitClass) 
+    {
+        this.transmitClass = transmitClass;
+    }
+
+    public String getTransmitClass() 
+    {
+        return transmitClass;
+    }
+
+    public void setConfigExample(String configExample) 
+    {
+        this.configExample = configExample;
+    }
+
+    public String getConfigExample() 
+    {
+        return configExample;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("name", getName())
+            .append("transmitClass", getTransmitClass())
+            .append("configExample", getConfigExample())
+            .toString();
+    }
+}

+ 70 - 0
forecast-backend-server/src/main/java/com/ufo/project/config/mapper/ConfigProtocolMapper.java

@@ -0,0 +1,70 @@
+package com.ufo.project.config.mapper;
+
+import java.util.List;
+
+import com.ufo.project.config.domain.ConfigProtocol;
+
+/**
+ * 协议Mapper接口
+ * 
+ * @author oleauto
+ * @date
+ */
+public interface ConfigProtocolMapper
+{
+    /**
+     * 查询协议
+     * 
+     * @param id 协议主键
+     * @return 协议
+     */
+    public ConfigProtocol selectConfigProtocolById(Long id);
+
+    /**
+     * 查询协议列表
+     * 
+     * @param configProtocol 协议
+     * @return 协议集合
+     */
+    public List<ConfigProtocol> selectConfigProtocolList(ConfigProtocol configProtocol);
+
+    /**
+     * 根据主键批量查询协议
+     *
+     * @param ids 协议主键集合
+     * @return 协议集合
+     */
+    public List<ConfigProtocol> selectConfigProtocolByIds(Long[] ids);
+
+    /**
+     * 新增协议
+     *
+     * @param configProtocol 协议
+     * @return 结果
+     */
+    public int insertConfigProtocol(ConfigProtocol configProtocol);
+
+    /**
+     * 修改协议
+     * 
+     * @param configProtocol 协议
+     * @return 结果
+     */
+    public int updateConfigProtocol(ConfigProtocol configProtocol);
+
+    /**
+     * 删除协议
+     * 
+     * @param id 协议主键
+     * @return 结果
+     */
+    public int deleteConfigProtocolById(Long id);
+
+    /**
+     * 批量删除协议
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteConfigProtocolByIds(Long[] ids);
+}

+ 70 - 0
forecast-backend-server/src/main/java/com/ufo/project/config/mapper/ConfigTransmitMapper.java

@@ -0,0 +1,70 @@
+package com.ufo.project.config.mapper;
+
+import java.util.List;
+
+import com.ufo.project.config.domain.ConfigTransmit;
+
+/**
+ * 通信Mapper接口
+ * 
+ * @author oleauto
+ * @date
+ */
+public interface ConfigTransmitMapper 
+{
+    /**
+     * 查询通信
+     * 
+     * @param id 通信主键
+     * @return 通信
+     */
+    public ConfigTransmit selectConfigTransmitById(Long id);
+
+    /**
+     * 查询通信列表
+     * 
+     * @param configTransmit 通信
+     * @return 通信集合
+     */
+    public List<ConfigTransmit> selectConfigTransmitList(ConfigTransmit configTransmit);
+
+    /**
+     * 根据主键批量查询通信
+     *
+     * @param ids 通信主键集合
+     * @return 通信集合
+     */
+    public List<ConfigTransmit> selectConfigTransmitByIds(Long[] ids);
+
+    /**
+     * 新增通信
+     *
+     * @param configTransmit 通信
+     * @return 结果
+     */
+    public int insertConfigTransmit(ConfigTransmit configTransmit);
+
+    /**
+     * 修改通信
+     * 
+     * @param configTransmit 通信
+     * @return 结果
+     */
+    public int updateConfigTransmit(ConfigTransmit configTransmit);
+
+    /**
+     * 删除通信
+     * 
+     * @param id 通信主键
+     * @return 结果
+     */
+    public int deleteConfigTransmitById(Long id);
+
+    /**
+     * 批量删除通信
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteConfigTransmitByIds(Long[] ids);
+}

+ 70 - 0
forecast-backend-server/src/main/java/com/ufo/project/config/service/IConfigProtocolService.java

@@ -0,0 +1,70 @@
+package com.ufo.project.config.service;
+
+import java.util.List;
+
+import com.ufo.project.config.domain.ConfigProtocol;
+
+/**
+ * 协议Service接口
+ * 
+ * @author oleauto
+ * @date
+ */
+public interface IConfigProtocolService 
+{
+    /**
+     * 查询协议
+     * 
+     * @param id 协议主键
+     * @return 协议
+     */
+    public ConfigProtocol selectConfigProtocolById(Long id);
+
+    /**
+     * 查询协议列表
+     * 
+     * @param configProtocol 协议
+     * @return 协议集合
+     */
+    public List<ConfigProtocol> selectConfigProtocolList(ConfigProtocol configProtocol);
+
+    /**
+     * 根据主键批量查询协议
+     *
+     * @param ids 协议主键集合
+     * @return 协议集合
+     */
+    public List<ConfigProtocol> selectConfigProtocolByIds(Long[] ids);
+
+    /**
+     * 新增协议
+     *
+     * @param configProtocol 协议
+     * @return 结果
+     */
+    public int insertConfigProtocol(ConfigProtocol configProtocol);
+
+    /**
+     * 修改协议
+     * 
+     * @param configProtocol 协议
+     * @return 结果
+     */
+    public int updateConfigProtocol(ConfigProtocol configProtocol);
+
+    /**
+     * 批量删除协议
+     * 
+     * @param ids 需要删除的协议主键集合
+     * @return 结果
+     */
+    public int deleteConfigProtocolByIds(Long[] ids);
+
+    /**
+     * 删除协议信息
+     * 
+     * @param id 协议主键
+     * @return 结果
+     */
+    public int deleteConfigProtocolById(Long id);
+}

+ 70 - 0
forecast-backend-server/src/main/java/com/ufo/project/config/service/IConfigTransmitService.java

@@ -0,0 +1,70 @@
+package com.ufo.project.config.service;
+
+import java.util.List;
+
+import com.ufo.project.config.domain.ConfigTransmit;
+
+/**
+ * 通信Service接口
+ * 
+ * @author oleauto
+ * @date
+ */
+public interface IConfigTransmitService 
+{
+    /**
+     * 查询通信
+     * 
+     * @param id 通信主键
+     * @return 通信
+     */
+    public ConfigTransmit selectConfigTransmitById(Long id);
+
+    /**
+     * 查询通信列表
+     * 
+     * @param configTransmit 通信
+     * @return 通信集合
+     */
+    public List<ConfigTransmit> selectConfigTransmitList(ConfigTransmit configTransmit);
+
+    /**
+     * 根据主键批量查询通信
+     *
+     * @param ids 通信主键集合
+     * @return 通信集合
+     */
+    public List<ConfigTransmit> selectConfigTransmitByIds(Long[] ids);
+
+    /**
+     * 新增通信
+     *
+     * @param configTransmit 通信
+     * @return 结果
+     */
+    public int insertConfigTransmit(ConfigTransmit configTransmit);
+
+    /**
+     * 修改通信
+     * 
+     * @param configTransmit 通信
+     * @return 结果
+     */
+    public int updateConfigTransmit(ConfigTransmit configTransmit);
+
+    /**
+     * 批量删除通信
+     * 
+     * @param ids 需要删除的通信主键集合
+     * @return 结果
+     */
+    public int deleteConfigTransmitByIds(Long[] ids);
+
+    /**
+     * 删除通信信息
+     * 
+     * @param id 通信主键
+     * @return 结果
+     */
+    public int deleteConfigTransmitById(Long id);
+}

+ 106 - 0
forecast-backend-server/src/main/java/com/ufo/project/config/service/impl/ConfigProtocolServiceImpl.java

@@ -0,0 +1,106 @@
+package com.ufo.project.config.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.ufo.project.config.domain.ConfigProtocol;
+import com.ufo.project.config.mapper.ConfigProtocolMapper;
+import com.ufo.project.config.service.IConfigProtocolService;
+
+/**
+ * 协议Service业务层处理
+ * 
+ * @author oleauto
+ * @date
+ */
+@Service
+public class ConfigProtocolServiceImpl implements IConfigProtocolService 
+{
+    @Autowired
+    private ConfigProtocolMapper configProtocolMapper;
+
+    /**
+     * 查询协议
+     * 
+     * @param id 协议主键
+     * @return 协议
+     */
+    @Override
+    public ConfigProtocol selectConfigProtocolById(Long id)
+    {
+        return configProtocolMapper.selectConfigProtocolById(id);
+    }
+
+    /**
+     * 查询协议列表
+     * 
+     * @param configProtocol 协议
+     * @return 协议
+     */
+    @Override
+    public List<ConfigProtocol> selectConfigProtocolList(ConfigProtocol configProtocol)
+    {
+        return configProtocolMapper.selectConfigProtocolList(configProtocol);
+    }
+
+    /**
+     * 根据主键批量查询协议
+     *
+     * @param ids 协议主键集合
+     * @return 协议集合
+     */
+    @Override
+    public List<ConfigProtocol> selectConfigProtocolByIds(Long[] ids)
+    {
+        return configProtocolMapper.selectConfigProtocolByIds(ids);
+    }
+
+    /**
+     * 新增协议
+     *
+     * @param configProtocol 协议
+     * @return 结果
+     */
+    @Override
+    public int insertConfigProtocol(ConfigProtocol configProtocol)
+    {
+        return configProtocolMapper.insertConfigProtocol(configProtocol);
+    }
+
+    /**
+     * 修改协议
+     * 
+     * @param configProtocol 协议
+     * @return 结果
+     */
+    @Override
+    public int updateConfigProtocol(ConfigProtocol configProtocol)
+    {
+        return configProtocolMapper.updateConfigProtocol(configProtocol);
+    }
+
+    /**
+     * 批量删除协议
+     * 
+     * @param ids 需要删除的协议主键
+     * @return 结果
+     */
+    @Override
+    public int deleteConfigProtocolByIds(Long[] ids)
+    {
+        return configProtocolMapper.deleteConfigProtocolByIds(ids);
+    }
+
+    /**
+     * 删除协议信息
+     * 
+     * @param id 协议主键
+     * @return 结果
+     */
+    @Override
+    public int deleteConfigProtocolById(Long id)
+    {
+        return configProtocolMapper.deleteConfigProtocolById(id);
+    }
+}

+ 106 - 0
forecast-backend-server/src/main/java/com/ufo/project/config/service/impl/ConfigTransmitServiceImpl.java

@@ -0,0 +1,106 @@
+package com.ufo.project.config.service.impl;
+
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.ufo.project.config.domain.ConfigTransmit;
+import com.ufo.project.config.mapper.ConfigTransmitMapper;
+import com.ufo.project.config.service.IConfigTransmitService;
+
+/**
+ * 通信Service业务层处理
+ * 
+ * @author oleauto
+ * @date
+ */
+@Service
+public class ConfigTransmitServiceImpl implements IConfigTransmitService 
+{
+    @Autowired
+    private ConfigTransmitMapper configTransmitMapper;
+
+    /**
+     * 查询通信
+     * 
+     * @param id 通信主键
+     * @return 通信
+     */
+    @Override
+    public ConfigTransmit selectConfigTransmitById(Long id)
+    {
+        return configTransmitMapper.selectConfigTransmitById(id);
+    }
+
+    /**
+     * 查询通信列表
+     * 
+     * @param configTransmit 通信
+     * @return 通信
+     */
+    @Override
+    public List<ConfigTransmit> selectConfigTransmitList(ConfigTransmit configTransmit)
+    {
+        return configTransmitMapper.selectConfigTransmitList(configTransmit);
+    }
+
+    /**
+     * 根据主键批量查询通信
+     *
+     * @param ids 通信主键集合
+     * @return 通信集合
+     */
+    @Override
+    public List<ConfigTransmit> selectConfigTransmitByIds(Long[] ids)
+    {
+        return configTransmitMapper.selectConfigTransmitByIds(ids);
+    }
+
+    /**
+     * 新增通信
+     *
+     * @param configTransmit 通信
+     * @return 结果
+     */
+    @Override
+    public int insertConfigTransmit(ConfigTransmit configTransmit)
+    {
+        return configTransmitMapper.insertConfigTransmit(configTransmit);
+    }
+
+    /**
+     * 修改通信
+     * 
+     * @param configTransmit 通信
+     * @return 结果
+     */
+    @Override
+    public int updateConfigTransmit(ConfigTransmit configTransmit)
+    {
+        return configTransmitMapper.updateConfigTransmit(configTransmit);
+    }
+
+    /**
+     * 批量删除通信
+     * 
+     * @param ids 需要删除的通信主键
+     * @return 结果
+     */
+    @Override
+    public int deleteConfigTransmitByIds(Long[] ids)
+    {
+        return configTransmitMapper.deleteConfigTransmitByIds(ids);
+    }
+
+    /**
+     * 删除通信信息
+     * 
+     * @param id 通信主键
+     * @return 结果
+     */
+    @Override
+    public int deleteConfigTransmitById(Long id)
+    {
+        return configTransmitMapper.deleteConfigTransmitById(id);
+    }
+}

+ 73 - 0
forecast-backend-server/src/main/resources/mybatis/config/ConfigProtocolMapper.xml

@@ -0,0 +1,73 @@
+<?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="com.ufo.project.config.mapper.ConfigProtocolMapper">
+    
+    <resultMap type="ConfigProtocol" id="ConfigProtocolResult">
+        <result property="id"    column="id"    />
+        <result property="name"    column="name"    />
+        <result property="protocolClass"    column="protocol_class"    />
+        <result property="configExample"    column="config_example"    />
+    </resultMap>
+
+    <sql id="selectConfigProtocolVo">
+        select id, name, protocol_class, config_example from config_protocol
+    </sql>
+
+    <select id="selectConfigProtocolList" parameterType="ConfigProtocol" resultMap="ConfigProtocolResult">
+        <include refid="selectConfigProtocolVo"/>
+        <where>  
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="protocolClass != null  and protocolClass != ''"> and protocol_class = #{protocolClass}</if>
+            <if test="configExample != null  and configExample != ''"> and config_example = #{configExample}</if>
+        </where>
+    </select>
+    
+    <select id="selectConfigProtocolById" parameterType="Long" resultMap="ConfigProtocolResult">
+        <include refid="selectConfigProtocolVo"/>
+        where id = #{id}
+    </select>
+
+    <select id="selectConfigProtocolByIds" parameterType="Long" resultMap="ConfigProtocolResult">
+        select id, name from config_protocol where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+
+    <insert id="insertConfigProtocol" parameterType="ConfigProtocol" useGeneratedKeys="true" keyProperty="id">
+        insert into config_protocol
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="name != null and name != ''">name,</if>
+            <if test="protocolClass != null and protocolClass != ''">protocol_class,</if>
+            <if test="configExample != null and configExample != ''">config_example,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="name != null and name != ''">#{name},</if>
+            <if test="protocolClass != null and protocolClass != ''">#{protocolClass},</if>
+            <if test="configExample != null and configExample != ''">#{configExample},</if>
+         </trim>
+    </insert>
+
+    <update id="updateConfigProtocol" parameterType="ConfigProtocol">
+        update config_protocol
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="name != null and name != ''">name = #{name},</if>
+            <if test="protocolClass != null and protocolClass != ''">protocol_class = #{protocolClass},</if>
+            <if test="configExample != null and configExample != ''">config_example = #{configExample},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteConfigProtocolById" parameterType="Long">
+        delete from config_protocol where id = #{id}
+    </delete>
+
+    <delete id="deleteConfigProtocolByIds" parameterType="String">
+        delete from config_protocol where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 73 - 0
forecast-backend-server/src/main/resources/mybatis/config/ConfigTransmitMapper.xml

@@ -0,0 +1,73 @@
+<?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="com.ufo.project.config.mapper.ConfigTransmitMapper">
+    
+    <resultMap type="ConfigTransmit" id="ConfigTransmitResult">
+        <result property="id"    column="id"    />
+        <result property="name"    column="name"    />
+        <result property="transmitClass"    column="transmit_class"    />
+        <result property="configExample"    column="config_example"    />
+    </resultMap>
+
+    <sql id="selectConfigTransmitVo">
+        select id, name, transmit_class, config_example from config_transmit
+    </sql>
+
+    <select id="selectConfigTransmitList" parameterType="ConfigTransmit" resultMap="ConfigTransmitResult">
+        <include refid="selectConfigTransmitVo"/>
+        <where>  
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="transmitClass != null  and transmitClass != ''"> and transmit_class = #{transmitClass}</if>
+            <if test="configExample != null  and configExample != ''"> and config_example = #{configExample}</if>
+        </where>
+    </select>
+    
+    <select id="selectConfigTransmitById" parameterType="Long" resultMap="ConfigTransmitResult">
+        <include refid="selectConfigTransmitVo"/>
+        where id = #{id}
+    </select>
+
+    <select id="selectConfigTransmitByIds" parameterType="Long" resultMap="ConfigTransmitResult">
+        select id, name from config_transmit where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+
+    <insert id="insertConfigTransmit" parameterType="ConfigTransmit" useGeneratedKeys="true" keyProperty="id">
+        insert into config_transmit
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="name != null and name != ''">name,</if>
+            <if test="transmitClass != null and transmitClass != ''">transmit_class,</if>
+            <if test="configExample != null and configExample != ''">config_example,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="name != null and name != ''">#{name},</if>
+            <if test="transmitClass != null and transmitClass != ''">#{transmitClass},</if>
+            <if test="configExample != null and configExample != ''">#{configExample},</if>
+         </trim>
+    </insert>
+
+    <update id="updateConfigTransmit" parameterType="ConfigTransmit">
+        update config_transmit
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="name != null and name != ''">name = #{name},</if>
+            <if test="transmitClass != null and transmitClass != ''">transmit_class = #{transmitClass},</if>
+            <if test="configExample != null and configExample != ''">config_example = #{configExample},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteConfigTransmitById" parameterType="Long">
+        delete from config_transmit where id = #{id}
+    </delete>
+
+    <delete id="deleteConfigTransmitByIds" parameterType="String">
+        delete from config_transmit where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 5 - 0
forecast-backend-vue/src/api/config/protocol.js

@@ -0,0 +1,5 @@
+import request from '@/utils/request'
+
+export function listProtocol(query) {
+  return request({ url: '/dev/protocol/list', method: 'get', params: query })
+}

+ 5 - 0
forecast-backend-vue/src/api/config/transmit.js

@@ -0,0 +1,5 @@
+import request from '@/utils/request'
+
+export function listTransmit(query) {
+  return request({ url: '/dev/transmit/list', method: 'get', params: query })
+}

+ 26 - 0
forecast-backend-vue/src/views/ufo/config/station/StationConfigCrud.vue

@@ -67,6 +67,8 @@
               <a-select v-if="item[2] === 'select'" v-model:value="form[item[0]]" allow-clear :options="toOptions(item[4])" />
               <a-select v-else-if="item[2] === 'device'" v-model:value="form[deviceFieldName]" allow-clear show-search :options="deviceOptions" :filter-option="filterOption" @change="handleDeviceChange" />
               <a-select v-else-if="item[2] === 'channel'" v-model:value="form[channelFieldName]" allow-clear show-search :options="channelOptions" :filter-option="filterOption" />
+              <a-select v-else-if="item[2] === 'transmit'" v-model:value="form[item[0]]" allow-clear show-search :options="transmitOptions" :filter-option="filterOption" />
+              <a-select v-else-if="item[2] === 'protocol'" v-model:value="form[item[0]]" allow-clear show-search :options="protocolOptions" :filter-option="filterOption" />
               <a-switch v-else-if="item[2] === 'switch'" v-model:checked="form[item[0]]" :checked-value="item[4]?.[0]?.[1] ?? true" :un-checked-value="item[4]?.[1]?.[1] ?? false" />
               <a-input-number v-else-if="item[2] === 'number'" v-model:value="form[item[0]]" class="full-input" />
               <a-date-picker v-else-if="item[2] === 'date'" v-model:value="form[item[0]]" value-format="YYYY-MM-DD" class="full-input" />
@@ -86,6 +88,8 @@ import BearJiaUtil from '@/utils/BearJiaUtil';
 import { listStation } from '@/api/config/station';
 import { listStationDevice } from '@/api/config/stationDevice';
 import { listChannel } from '@/api/config/channel';
+import { listProtocol } from '@/api/config/protocol';
+import { listTransmit } from '@/api/config/transmit';
 import TableActionBar from '@/components/TableActionBar/index.vue';
 import TableToolbar from '@/components/BearJiaProTable/TableToolbar.vue';
 import { useTableConfigStore } from '@/stores/tableConfig';
@@ -98,6 +102,8 @@ const rows = ref([]);
 const stationOptions = ref([]);
 const allDevices = ref([]);
 const allChannels = ref([]);
+const allTransmits = ref([]);
+const allProtocols = ref([]);
 const formOpen = ref(false);
 const formRef = ref();
 const selectedRowKeys = ref([]);
@@ -112,11 +118,15 @@ const form = reactive({});
 const hasStation = computed(() => props.moduleConfig.hasStation !== false);
 const deviceFieldName = computed(() => props.moduleConfig.fields.find((item) => item[2] === 'device')?.[0]);
 const channelFieldName = computed(() => props.moduleConfig.fields.find((item) => item[2] === 'channel')?.[0]);
+const transmitFieldName = computed(() => props.moduleConfig.fields.find((item) => item[2] === 'transmit')?.[0]);
+const protocolFieldName = computed(() => props.moduleConfig.fields.find((item) => item[2] === 'protocol')?.[0]);
 const fieldMap = computed(() => new Map(props.moduleConfig.fields.map((item) => [item[0], item])));
 const searchFields = computed(() => props.moduleConfig.search.filter((name) => name !== stationField.value).map((name) => ({ name, label: fieldMap.value.get(name)?.[1] || name, type: fieldMap.value.get(name)?.[2], options: toOptions(fieldMap.value.get(name)?.[4]) })));
 const columnTitle = (name) => {
   if (name === 'stationName') return '场站';
   if (name === 'channelName') return '通道';
+  if (name === 'configTransmitName') return '通信模块';
+  if (name === 'configProtocalName') return '协议模块';
   return fieldMap.value.get(name)?.[1] || name;
 };
 const columns = computed(() => [
@@ -147,6 +157,8 @@ const deviceOptions = computed(() => allDevices.value
   .filter((item) => !form[stationField.value] || String(item.stationId) === String(form[stationField.value]))
   .map((item) => ({ label: item.deviceName || item.name || item.id, value: item.id, raw: item })));
 const channelOptions = computed(() => allChannels.value.map((item) => ({ label: item.name || item.id, value: item.id })));
+const transmitOptions = computed(() => allTransmits.value.map((item) => ({ label: item.name || item.id, value: item.id })));
+const protocolOptions = computed(() => allProtocols.value.map((item) => ({ label: item.name || item.id, value: item.id })));
 const rowSelection = computed(() => ({
   selectedRowKeys: selectedRowKeys.value,
   onChange: (keys) => { selectedRowKeys.value = keys; }
@@ -174,6 +186,16 @@ const loadChannels = async () => {
   const res = await listChannel({ pageNum: 1, pageSize: 500 });
   allChannels.value = res?.rows || res?.data || [];
 };
+const loadTransmits = async () => {
+  if (!transmitFieldName.value) return;
+  const res = await listTransmit({ pageNum: 1, pageSize: 500 });
+  allTransmits.value = res?.rows || res?.data || [];
+};
+const loadProtocols = async () => {
+  if (!protocolFieldName.value) return;
+  const res = await listProtocol({ pageNum: 1, pageSize: 500 });
+  allProtocols.value = res?.rows || res?.data || [];
+};
 const handleQuery = async () => {
   loading.value = true;
   try {
@@ -199,6 +221,8 @@ const handleTableChange = (page) => {
 const openForm = async (record) => {
   await loadDevices();
   await loadChannels();
+  await loadTransmits();
+  await loadProtocols();
   if (record?.id) {
     const res = await props.api.get(record.id);
     resetObject(form, { ...res.data });
@@ -274,6 +298,8 @@ const handleTableReset = () => {
 loadStations();
 loadDevices();
 loadChannels();
+loadTransmits();
+loadProtocols();
 handleQuery();
 </script>
 

+ 6 - 6
forecast-backend-vue/src/views/ufo/config/station/moduleConfig.js

@@ -257,8 +257,8 @@ export const stationConfigModules = [
       ],
       [
         "configTransmitId",
-        "通信模块ID",
-        "number"
+        "通信模块",
+        "transmit"
       ],
       [
         "transmitConfig",
@@ -267,8 +267,8 @@ export const stationConfigModules = [
       ],
       [
         "configProtocalId",
-        "协议模块ID",
-        "number"
+        "协议模块",
+        "protocol"
       ],
       [
         "protocolConfig",
@@ -280,9 +280,9 @@ export const stationConfigModules = [
       "code",
       "name",
       "disabled",
-      "configTransmitId",
+      "configTransmitName",
       "transmitConfig",
-      "configProtocalId",
+      "configProtocalName",
       "protocolConfig"
     ],
     "search": [