瀏覽代碼

[0806] 测点配置table展示“设备id”->“设备名称”、“是否取反”改为switch组件

taosj 2 月之前
父節點
當前提交
94be65376c

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

@@ -1,6 +1,9 @@
 package com.ufo.project.config.controller;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import javax.servlet.http.HttpServletResponse;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,7 +17,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
 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.ConfigDevice;
 import com.ufo.project.config.domain.ConfigPoint;
+import com.ufo.project.config.service.IConfigDeviceService;
 import com.ufo.project.config.service.IConfigPointService;
 import com.ufo.base.framework.web.controller.BaseController;
 import com.ufo.base.framework.web.domain.AjaxResult;
@@ -34,12 +39,37 @@ public class ConfigPointController extends BaseController
     @Autowired
     private IConfigPointService configPointService;
 
+    @Autowired
+    private IConfigDeviceService configDeviceService;
+
     @PreAuthorize("@ss.hasPermi('config:stationPoint:list')")
     @GetMapping("/list")
     public TableDataInfo list(ConfigPoint configPoint)
     {
         startPage();
         List<ConfigPoint> list = configPointService.selectConfigPointList(configPoint);
+        // 收集列表中的设备id,一次性查询config_device设备名称,避免逐条查询
+        List<Long> deviceIds = new ArrayList<>();
+        for (ConfigPoint point : list)
+        {
+            if (point.getConfigDeviceId() != null && !deviceIds.contains(point.getConfigDeviceId()))
+            {
+                deviceIds.add(point.getConfigDeviceId());
+            }
+        }
+        if (!deviceIds.isEmpty())
+        {
+            List<ConfigDevice> deviceList = configDeviceService.selectConfigDeviceByIds(deviceIds.toArray(new Long[deviceIds.size()]));
+            Map<Long, String> deviceNameMap = new HashMap<>();
+            for (ConfigDevice device : deviceList)
+            {
+                deviceNameMap.put(device.getId(), device.getName());
+            }
+            for (ConfigPoint point : list)
+            {
+                point.setConfigDeviceName(deviceNameMap.get(point.getConfigDeviceId()));
+            }
+        }
         return getDataTable(list);
     }
 

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

@@ -0,0 +1,49 @@
+package com.ufo.project.config.domain;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 设备对象 config_device
+ *
+ * @author ufo
+ * @date 2026-08-06
+ */
+public class ConfigDevice
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private Long id;
+
+    /** 名称 */
+    private String name;
+
+    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;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("name", getName())
+            .toString();
+    }
+}

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

@@ -39,6 +39,9 @@ public class ConfigPoint extends BaseEntity
     @Excel(name = "设备号")
     private Long configDeviceId;
 
+    /** 设备名称(关联config_device查询) */
+    private String configDeviceName;
+
     /** 初始值 */
     @Excel(name = "初始值")
     private String initValue;
@@ -155,6 +158,16 @@ public class ConfigPoint extends BaseEntity
         return configDeviceId;
     }
 
+    public void setConfigDeviceName(String configDeviceName)
+    {
+        this.configDeviceName = configDeviceName;
+    }
+
+    public String getConfigDeviceName()
+    {
+        return configDeviceName;
+    }
+
     public void setInitValue(String initValue)
     {
         this.initValue = initValue;
@@ -304,6 +317,7 @@ public class ConfigPoint extends BaseEntity
             .append("addr", getAddr())
             .append("category", getCategory())
             .append("configDeviceId", getConfigDeviceId())
+            .append("configDeviceName", getConfigDeviceName())
             .append("initValue", getInitValue())
             .append("willInverse", getWillInverse())
             .append("kbComposite", getKbComposite())

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

@@ -0,0 +1,15 @@
+package com.ufo.project.config.mapper;
+
+import java.util.List;
+import com.ufo.project.config.domain.ConfigDevice;
+
+/**
+ * 设备Mapper接口
+ *
+ * @author ufo
+ * @date 2026-08-06
+ */
+public interface ConfigDeviceMapper
+{
+    public List<ConfigDevice> selectConfigDeviceByIds(Long[] ids);
+}

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

@@ -0,0 +1,15 @@
+package com.ufo.project.config.service;
+
+import java.util.List;
+import com.ufo.project.config.domain.ConfigDevice;
+
+/**
+ * 设备Service接口
+ *
+ * @author ufo
+ * @date 2026-08-06
+ */
+public interface IConfigDeviceService
+{
+    public List<ConfigDevice> selectConfigDeviceByIds(Long[] ids);
+}

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

@@ -0,0 +1,27 @@
+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.mapper.ConfigDeviceMapper;
+import com.ufo.project.config.domain.ConfigDevice;
+import com.ufo.project.config.service.IConfigDeviceService;
+
+/**
+ * 设备Service业务层处理
+ *
+ * @author ufo
+ * @date 2026-08-06
+ */
+@Service
+public class ConfigDeviceServiceImpl implements IConfigDeviceService
+{
+    @Autowired
+    private ConfigDeviceMapper configDeviceMapper;
+
+    @Override
+    public List<ConfigDevice> selectConfigDeviceByIds(Long[] ids)
+    {
+        return configDeviceMapper.selectConfigDeviceByIds(ids);
+    }
+}

+ 18 - 0
forecast-backend-server/src/main/resources/mybatis/config/ConfigDeviceMapper.xml

@@ -0,0 +1,18 @@
+<?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.ConfigDeviceMapper">
+
+    <resultMap type="ConfigDevice" id="ConfigDeviceResult">
+        <result property="id"    column="id"    />
+        <result property="name"    column="name"    />
+    </resultMap>
+
+    <select id="selectConfigDeviceByIds" parameterType="Long" resultMap="ConfigDeviceResult">
+        select id, name from config_device where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+</mapper>

+ 7 - 2
forecast-backend-vue/src/views/ufo/config/station/StationConfigCrud.vue

@@ -23,7 +23,8 @@
     <a-card :bordered="false" class="section">
       <a-table :columns="columns" :data-source="rows" :loading="loading" :pagination="pagination" row-key="id" :scroll="tableScroll" @change="handleTableChange">
         <template #bodyCell="{ column, record }">
-          <template v-if="column.key === 'operation'">
+          <a-switch v-if="isSwitchColumn(column)" :checked="record[column.dataIndex] === switchCheckedValue(column)" disabled size="small" />
+          <template v-else-if="column.key === 'operation'">
             <a-space>
               <a v-hasPermi="[moduleConfig.perm + ':edit']" @click="openForm(record)">编辑</a>
               <a-popconfirm :title="'确认删除该' + moduleConfig.title + '?'" @confirm="removeRecord(record)">
@@ -47,6 +48,7 @@
             <a-form-item :label="item[1]" :name="item[0]">
               <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-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" />
               <a-input v-else v-model:value="form[item[0]]" allow-clear />
@@ -89,13 +91,15 @@ const columns = computed(() => [
 const tableScroll = computed(() => ({ x: columns.value.reduce((sum, col) => sum + (col.width || 140), 0) }));
 const rules = computed(() => ({
   ...(hasStation.value ? { stationId: [{ required: true, message: '请选择所属场站', trigger: 'change' }] } : {}),
-  ...Object.fromEntries(props.moduleConfig.fields.filter((item) => item[3]).map((item) => [item[0], [{ required: true, message: '请输入' + item[1], trigger: item[2] === 'select' || item[2] === 'device' ? 'change' : 'blur' }]]))
+  ...Object.fromEntries(props.moduleConfig.fields.filter((item) => item[3]).map((item) => [item[0], [{ required: true, message: '请输入' + item[1], trigger: item[2] === 'select' || item[2] === 'device' || item[2] === 'switch' ? 'change' : 'blur' }]]))
 }));
 const deviceOptions = computed(() => allDevices.value
   .filter((item) => !form.stationId || String(item.stationId) === String(form.stationId))
   .map((item) => ({ label: item.deviceName || item.name || item.id, value: item.id, raw: item })));
 
 const toOptions = (items = []) => items.map((item) => ({ label: item[0], value: item[1] }));
+const isSwitchColumn = (column) => fieldMap.value.get(column.dataIndex)?.[2] === 'switch';
+const switchCheckedValue = (column) => fieldMap.value.get(column.dataIndex)?.[4]?.[0]?.[1] ?? true;
 const filterOption = (input, option) => String(option?.label || '').toLowerCase().includes(input.toLowerCase());
 const resetObject = (target, source = {}) => { Object.keys(target).forEach((key) => delete target[key]); Object.assign(target, source); };
 
@@ -140,6 +144,7 @@ const openForm = async (record) => {
   } else {
     resetObject(form, { stationId: queryParams.stationId });
   }
+  props.moduleConfig.fields.filter((item) => item[2] === 'switch').forEach((item) => { if (form[item[0]] === undefined) form[item[0]] = item[4]?.[1]?.[1] ?? false; });
   formOpen.value = true;
 };
 const handleStationChange = () => {

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

@@ -459,8 +459,8 @@ export const stationConfigModules = [
     "hasStation": false,
     "fields": [
       [
-        "configDeviceId",
-        "设备号",
+        "configDeviceName",
+        "设备名称",
         "device",
         true
       ],
@@ -512,7 +512,7 @@ export const stationConfigModules = [
       [
         "willInverse",
         "是否取反",
-        "select",
+        "switch",
         true,
         [
           [
@@ -613,7 +613,7 @@ export const stationConfigModules = [
       "code",
       "addr",
       "category",
-      "configDeviceId",
+      "configDeviceName",
       "initValue",
       "willInverse",
       "kbComposite",