Przeglądaj źródła

feat(modelComponent):模型组件相关接口实现

HMY 9 miesięcy temu
rodzic
commit
2b9a3f73d8

+ 11 - 0
admin/src/main/java/com/dcs/hnyz/controller/ConfigurationPageController.java

@@ -38,4 +38,15 @@ public class ConfigurationPageController extends BaseController {
         return success();
     }
 
+    /**
+     * 获取页面渲染数据
+     * @param flowId
+     * @return
+     */
+    @GetMapping("/getPageConfig/{flowId}")
+    public AjaxResult getPageConfig(@ApiParam("流程id") @PathVariable  String flowId) {
+        Map<String, Object> config = configurationPageService.getPageConfigByFlowId(flowId);
+        return AjaxResult.success(config);
+    }
+
 }

+ 112 - 0
admin/src/main/java/com/dcs/hnyz/controller/ModelComponentController.java

@@ -0,0 +1,112 @@
+package com.dcs.hnyz.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.dcs.common.annotation.Log;
+import com.dcs.common.core.controller.BaseController;
+import com.dcs.common.core.domain.AjaxResult;
+import com.dcs.common.enums.BusinessType;
+import com.dcs.hnyz.domain.ModelComponent;
+import com.dcs.hnyz.service.IModelComponentService;
+import com.dcs.common.utils.poi.ExcelUtil;
+import com.dcs.common.core.page.TableDataInfo;
+
+/**
+ * 模型组件管理Controller
+ * 
+ * @author hmy
+ * @date 2025-07-04
+ */
+@RestController
+@RequestMapping("/hnyz/modelComponent")
+public class ModelComponentController extends BaseController
+{
+    @Autowired
+    private IModelComponentService modelComponentService;
+
+    /**
+     * 查询模型组件管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:modelComponent:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ModelComponent modelComponent)
+    {
+        startPage();
+        List<ModelComponent> list = modelComponentService.selectModelComponentList(modelComponent);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出模型组件管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:modelComponent:export')")
+    @Log(title = "模型组件管理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ModelComponent modelComponent)
+    {
+        List<ModelComponent> list = modelComponentService.selectModelComponentList(modelComponent);
+        ExcelUtil<ModelComponent> util = new ExcelUtil<ModelComponent>(ModelComponent.class);
+        util.exportExcel(response, list, "模型组件管理数据");
+    }
+
+    /**
+     * 获取模型组件管理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:modelComponent:query')")
+    @GetMapping(value = "/{modelId}")
+    public AjaxResult getInfo(@PathVariable("modelId") Long modelId)
+    {
+        return success(modelComponentService.selectModelComponentByModelId(modelId));
+    }
+
+    /**
+     * 新增模型组件管理
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:modelComponent:add')")
+    @Log(title = "模型组件管理", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ModelComponent modelComponent)
+    {
+        return toAjax(modelComponentService.insertModelComponent(modelComponent));
+    }
+
+    /**
+     * 修改模型组件管理
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:modelComponent:edit')")
+    @Log(title = "模型组件管理", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ModelComponent modelComponent)
+    {
+        return toAjax(modelComponentService.updateModelComponent(modelComponent));
+    }
+
+    /**
+     * 删除模型组件管理
+     */
+    @PreAuthorize("@ss.hasPermi('hnyz:modelComponent:remove')")
+    @Log(title = "模型组件管理", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{modelIds}")
+    public AjaxResult remove(@PathVariable Long[] modelIds)
+    {
+        return toAjax(modelComponentService.deleteModelComponentByModelIds(modelIds));
+    }
+
+    /**
+     * 获取模型select选择列表
+     */
+    @GetMapping("/getModelSelectList")
+    public AjaxResult getSelectList(){
+        return success(modelComponentService.getModelComponentSelectList());
+    }
+}

+ 5 - 0
admin/src/main/java/com/dcs/hnyz/domain/Equipment.java

@@ -47,6 +47,11 @@ public class Equipment extends BaseEntity
     @ApiModelProperty(value = "设备种类")
     private String equipmentType;
 
+    /** 设备标题,组态页面可用 */
+    @Excel(name = "设备标题,组态页面可用")
+    @ApiModelProperty(value = "设备标题,组态页面可用")
+    private String title;
+
     /** 对应plc的id */
     @Excel(name = "对应plc的id")
     @ApiModelProperty(value = "对应plc的id")

+ 21 - 0
admin/src/main/java/com/dcs/hnyz/domain/EquipmentExtension.java

@@ -77,6 +77,27 @@ public class EquipmentExtension extends BaseEntity {
     @Excel(name = "高")
     private Integer height;
 
+    /**
+     * 模型组件id
+     */
+    @ApiModelProperty(value = "模型组件id")
+    @Excel(name = "模型组件id")
+    private Integer modelId;
+
+    /**
+     * 旋转角度
+     */
+    @ApiModelProperty(value = "旋转角度")
+    @Excel(name = "旋转角度")
+    private Integer rotate;
+
+    /**
+     * 是否反转
+     */
+    @ApiModelProperty(value = "是否反转")
+    @Excel(name = "是否反转")
+    private Boolean isReverse;
+
     /** 状态 0-启用,1-禁用*/
     @Excel(name = "状态")
     @ApiModelProperty(value = "状态 0-启用,1-禁用")

+ 87 - 0
admin/src/main/java/com/dcs/hnyz/domain/ModelComponent.java

@@ -0,0 +1,87 @@
+package com.dcs.hnyz.domain;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.dcs.common.annotation.Excel;
+import com.dcs.common.core.domain.BaseEntity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.IdType;
+
+/**
+ * 模型组件管理对象 model_component
+ *
+ * @author hmy
+ * @date 2025-07-04
+ */
+
+@Data
+@TableName("model_component")
+public class ModelComponent extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 模型唯一 ID
+     */
+    @TableId(value = "model_id", type = IdType.AUTO)
+    private Long modelId;
+
+    /**
+     * 模型名称(如 储罐A、管道X)
+     */
+    @Excel(name = "模型名称")
+    @TableField(value = "model_name")
+    private String modelName;
+
+    /**
+     * 模型类型(如 tank、pipeline、sensor)
+     */
+    @Excel(name = "模型类型", readConverterExp = "tank、pipeline、sensor")
+    @TableField(value = "model_type")
+    private String modelType;
+
+    /**
+     * 前端组件名(如 M1Tank)
+     */
+    @Excel(name = "前端组件名")
+    @TableField(value = "component_name")
+    private String componentName;
+
+    /**
+     * 组件类型(如 icon、component)
+     */
+    @Excel(name = "组件类型", readConverterExp = "icon、component")
+    @TableField(value = "component_type")
+    private String componentType;
+
+    /**
+     * 组件层级
+     */
+    @JsonProperty("zIndex")
+    @Excel(name = "组件层级")
+    @TableField(value = "z_index")
+    private Integer zIndex;
+
+    /**
+     * icon 类型模型对应 class 名
+     */
+    @Excel(name = "icon 类型模型对应 class 名")
+    @TableField(value = "icon_class")
+    private String iconClass;
+
+    /**
+     * 启用状态(0启用,1禁用)
+     */
+    @Excel(name = "启用状态", readConverterExp = "0=启用,1禁用")
+    private String status;
+
+
+}

+ 34 - 0
admin/src/main/java/com/dcs/hnyz/domain/vo/ConfigurationPageEquipmentVO.java

@@ -0,0 +1,34 @@
+package com.dcs.hnyz.domain.vo;
+
+import com.dcs.hnyz.domain.EquipmentExtension;
+import lombok.Data;
+
+/**
+ * ConfigurationPageEquipmentVO
+ *
+ * @author: hmy
+ * @date: 2025/7/5 14:51
+ */
+@Data
+public class ConfigurationPageEquipmentVO extends EquipmentExtension {
+    /**
+     * 设备名称
+     */
+    private String equipmentName;
+    /**
+     * 设备标识
+     */
+    private String code;
+    /**
+     * 设备模型分组
+     */
+    private String modelGroup;
+    /**
+     * 设备标题
+     */
+    private String title;
+    /**
+     * 层级
+     */
+
+}

+ 63 - 0
admin/src/main/java/com/dcs/hnyz/mapper/ModelComponentMapper.java

@@ -0,0 +1,63 @@
+package com.dcs.hnyz.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.dcs.hnyz.domain.ModelComponent;
+
+/**
+ * 模型组件管理Mapper接口
+ * 
+ * @author hmy
+ * @date 2025-07-04
+ */
+public interface ModelComponentMapper extends BaseMapper<ModelComponent>
+{
+    /**
+     * 查询模型组件管理
+     * 
+     * @param modelId 模型组件管理主键
+     * @return 模型组件管理
+     */
+    public ModelComponent selectModelComponentByModelId(Long modelId);
+
+    /**
+     * 查询模型组件管理列表
+     * 
+     * @param modelComponent 模型组件管理
+     * @return 模型组件管理集合
+     */
+    public List<ModelComponent> selectModelComponentList(ModelComponent modelComponent);
+
+    /**
+     * 新增模型组件管理
+     * 
+     * @param modelComponent 模型组件管理
+     * @return 结果
+     */
+    public int insertModelComponent(ModelComponent modelComponent);
+
+    /**
+     * 修改模型组件管理
+     * 
+     * @param modelComponent 模型组件管理
+     * @return 结果
+     */
+    public int updateModelComponent(ModelComponent modelComponent);
+
+    /**
+     * 删除模型组件管理
+     * 
+     * @param modelId 模型组件管理主键
+     * @return 结果
+     */
+    public int deleteModelComponentByModelId(Long modelId);
+
+    /**
+     * 批量删除模型组件管理
+     * 
+     * @param modelIds 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteModelComponentByModelIds(Long[] modelIds);
+}

+ 7 - 0
admin/src/main/java/com/dcs/hnyz/service/IConfigurationPageService.java

@@ -19,4 +19,11 @@ public interface IConfigurationPageService {
     void updateZTPageDeviceConfig(String pageCode, Map<String, List<String>> configMap);
 
     Map<String, List<Map<String, Object>>> getZTPageDeviceRealtimeData(String pageCode);
+
+    /**
+     * 获取页面相关组件配置信息
+     * @param flowId
+     * @return
+     */
+    Map<String, Object> getPageConfigByFlowId(String flowId);
 }

+ 7 - 0
admin/src/main/java/com/dcs/hnyz/service/IEquipmentExtensionService.java

@@ -76,4 +76,11 @@ public interface IEquipmentExtensionService
     int changeStatus(EquipmentExtension equipmentExtension);
 
     List<EquipmentLayoutVO> getLayout(Integer flowId);
+
+    /**
+     * 根据流程id获取设备参数列表
+     * @param flowId
+     * @return
+     */
+    List<EquipmentExtension> getListByFlowId(String flowId);
 }

+ 8 - 0
admin/src/main/java/com/dcs/hnyz/service/IEquipmentService.java

@@ -2,6 +2,7 @@ package com.dcs.hnyz.service;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import com.dcs.hnyz.domain.Equipment;
 import com.dcs.hnyz.domain.vo.EquipmentFormVO;
@@ -88,4 +89,11 @@ public interface IEquipmentService
      * @return
      */
     Map<String,Object> getDashboardStats();
+
+    /**
+     * 根据设备id集合获取设备信息
+     * @param equipmentIds
+     * @return
+     */
+    Map<Long, Equipment> getByIds(Set<Long> equipmentIds);
 }

+ 78 - 0
admin/src/main/java/com/dcs/hnyz/service/IModelComponentService.java

@@ -0,0 +1,78 @@
+package com.dcs.hnyz.service;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import com.dcs.hnyz.domain.EquipmentExtension;
+import com.dcs.hnyz.domain.ModelComponent;
+
+/**
+ * 模型组件管理Service接口
+ * 
+ * @author hmy
+ * @date 2025-07-04
+ */
+public interface IModelComponentService 
+{
+    /**
+     * 查询模型组件管理
+     * 
+     * @param modelId 模型组件管理主键
+     * @return 模型组件管理
+     */
+    public ModelComponent selectModelComponentByModelId(Long modelId);
+
+    /**
+     * 查询模型组件管理列表
+     * 
+     * @param modelComponent 模型组件管理
+     * @return 模型组件管理集合
+     */
+    public List<ModelComponent> selectModelComponentList(ModelComponent modelComponent);
+
+    /**
+     * 新增模型组件管理
+     * 
+     * @param modelComponent 模型组件管理
+     * @return 结果
+     */
+    public int insertModelComponent(ModelComponent modelComponent);
+
+    /**
+     * 修改模型组件管理
+     * 
+     * @param modelComponent 模型组件管理
+     * @return 结果
+     */
+    public int updateModelComponent(ModelComponent modelComponent);
+
+    /**
+     * 批量删除模型组件管理
+     * 
+     * @param modelIds 需要删除的模型组件管理主键集合
+     * @return 结果
+     */
+    public int deleteModelComponentByModelIds(Long[] modelIds);
+
+    /**
+     * 删除模型组件管理信息
+     * 
+     * @param modelId 模型组件管理主键
+     * @return 结果
+     */
+    public int deleteModelComponentByModelId(Long modelId);
+
+    /**
+     * 获取模型Map
+     * @param modelIds
+     * @return
+     */
+    Map<Long, ModelComponent> getModelMapByIds(Set<Integer> modelIds);
+
+    /**
+     * 获取模型下拉列表
+     * @return
+     */
+    List<ModelComponent> getModelComponentSelectList();
+}

+ 77 - 6
admin/src/main/java/com/dcs/hnyz/service/impl/ConfigurationPageServiceImpl.java

@@ -1,14 +1,20 @@
 package com.dcs.hnyz.service.impl;
 
+import com.dcs.common.exception.CustomException;
+import com.dcs.common.utils.bean.BeanUtils;
 import com.dcs.hnyz.cache.CacheCenter;
+import com.dcs.hnyz.domain.Equipment;
+import com.dcs.hnyz.domain.EquipmentExtension;
+import com.dcs.hnyz.domain.ModelComponent;
+import com.dcs.hnyz.domain.vo.ConfigurationPageEquipmentVO;
 import com.dcs.hnyz.domain.vo.EquipmentParamFormVO;
-import com.dcs.hnyz.service.IConfigurationPageService;
+import com.dcs.hnyz.enums.DeviceTypeEnum;
+import com.dcs.hnyz.service.*;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * ConfigurationPageServiceImpl
@@ -19,9 +25,18 @@ import java.util.Map;
 @Service
 public class ConfigurationPageServiceImpl implements IConfigurationPageService {
 
+    @Resource
+    private IModelComponentService modelComponentService;
+
+    @Resource
+    private IEquipmentExtensionService extensionService;
+
+    @Resource
+    private IEquipmentService equipmentService;
+
     @Override
     public void updateZTPageDeviceConfig(String pageCode, Map<String, List<String>> configMap) {
-        CacheCenter.pageDeviceGroupMap.put(pageCode,configMap);
+        CacheCenter.pageDeviceGroupMap.put(pageCode, configMap);
     }
 
     @Override
@@ -58,7 +73,63 @@ public class ConfigurationPageServiceImpl implements IConfigurationPageService {
 
             result.put(groupKey, deviceList);
         }
+        return result;
+    }
+
+    @Override
+    public Map<String, Object> getPageConfigByFlowId(String flowId) {
+        List<EquipmentExtension> extensionList = extensionService.getListByFlowId(flowId);
+        // 获取设备 ID 列表
+        Set<Long> equipmentIds = extensionList.stream()
+                .map(EquipmentExtension::getEquipmentId)
+                .collect(Collectors.toSet());
+
+        // 查询设备基本信息
+        Map<Long, Equipment> equipmentMap = equipmentService.getByIds(equipmentIds);
+
+        // 提取 modelId
+        Set<Integer> modelIds = extensionList.stream()
+                .map(EquipmentExtension::getModelId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+        if(modelIds.isEmpty()){
+            throw new CustomException("未获取设备模型");
+        }
+        // modelMap模型组件
+        Map<Long, ModelComponent> modelMap = modelComponentService.getModelMapByIds(modelIds);
+
+        // 构建 VO 列表
+        List<ConfigurationPageEquipmentVO> voList = extensionList.stream().map(ext -> {
+            ConfigurationPageEquipmentVO vo = new ConfigurationPageEquipmentVO();
+            BeanUtils.copyProperties(ext, vo);
+            Equipment eq = equipmentMap.get(ext.getEquipmentId());
+            //设备模型分组依据
+            ModelComponent modelComponent = modelMap.get(ext.getModelId().longValue());
+            vo.setModelGroup(modelComponent.getModelType());
+
+            if (eq != null) {
+                vo.setEquipmentName(eq.getEquipmentName());
+                vo.setCode(eq.getCode());
+                vo.setTitle(eq.getTitle());
+            }
+            else {//说明不是设备库里的数据,仅存在模型组件库
+                vo.setEquipmentName(ext.getRemark());
+                vo.setTitle(modelComponent.getRemark());
+            }
+            return vo;
+        }).collect(Collectors.toList());
+
+        // 按设备类型分组
+        Map<String, List<ConfigurationPageEquipmentVO>> equipmentGroup = new HashMap<>();
+        for (ConfigurationPageEquipmentVO vo : voList) {
+            //设备分组
+            equipmentGroup.computeIfAbsent(vo.getModelGroup(), k -> new ArrayList<>()).add(vo);
+        }
 
+        // 返回结果
+        Map<String, Object> result = new HashMap<>();
+        result.put("modelMap", modelMap);//模型组件
+        result.put("deviceConfigGroup", equipmentGroup);//设备配置分组
         return result;
     }
 }

+ 54 - 47
admin/src/main/java/com/dcs/hnyz/service/impl/EquipmentExtensionServiceImpl.java

@@ -21,63 +21,60 @@ import javax.annotation.Resource;
 
 /**
  * 设备拓展管理Service业务层处理
- * 
+ *
  * @author hmy
  * @date 2025-04-23
  */
 @Service
-public class EquipmentExtensionServiceImpl implements IEquipmentExtensionService 
-{
+public class EquipmentExtensionServiceImpl implements IEquipmentExtensionService {
     @Resource
     private EquipmentExtensionMapper equipmentExtensionMapper;
     @Autowired
     private IEquipmentService equipmentService;
+
     /**
      * 查询设备拓展管理
-     * 
+     *
      * @param id 设备拓展管理主键
      * @return 设备拓展管理
      */
     @Override
-    public EquipmentExtension selectEquipmentExtensionById(Long id)
-    {
+    public EquipmentExtension selectEquipmentExtensionById(Long id) {
         return equipmentExtensionMapper.selectById(id);
     }
 
     /**
      * 查询设备拓展管理列表
-     * 
+     *
      * @param equipmentExtension 设备拓展管理
      * @return 设备拓展管理
      */
     @Override
-    public List<EquipmentExtension> selectEquipmentExtensionList(EquipmentExtension equipmentExtension)
-    {
+    public List<EquipmentExtension> selectEquipmentExtensionList(EquipmentExtension equipmentExtension) {
         return equipmentExtensionMapper.selectEquipmentExtensionList(equipmentExtension);
     }
 
     /**
      * 新增设备拓展管理
-     * 
+     *
      * @param equipmentExtension 设备拓展管理
      * @return 结果
      */
     @Override
-    public int insertEquipmentExtension(EquipmentExtension equipmentExtension)
-    {
+    public int insertEquipmentExtension(EquipmentExtension equipmentExtension) {
         //新增数据时的校验
-        Equipment e=new Equipment();
+        Equipment e = new Equipment();
         e.setEquipmentId(equipmentExtension.getEquipmentId());
         e.setFlowIds(String.valueOf(equipmentExtension.getFlowId()));
         List<Equipment> equipmentList = equipmentService.selectEquipmentList(e);
-        if(equipmentList.size()==0){
+        if (equipmentList.size() == 0) {
             throw new CustomException("设备与该流程不匹配");
         }
-        LambdaQueryWrapper<EquipmentExtension> wrapper=new LambdaQueryWrapper<>();
-        wrapper.eq(EquipmentExtension::getEquipmentId,equipmentExtension.getEquipmentId());
-        wrapper.eq(EquipmentExtension::getFlowId,equipmentExtension.getFlowId());
-        EquipmentExtension ee=equipmentExtensionMapper.selectOne(wrapper);
-        if(ee!=null) {
+        LambdaQueryWrapper<EquipmentExtension> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(EquipmentExtension::getEquipmentId, equipmentExtension.getEquipmentId());
+        wrapper.eq(EquipmentExtension::getFlowId, equipmentExtension.getFlowId());
+        EquipmentExtension ee = equipmentExtensionMapper.selectOne(wrapper);
+        if (ee != null) {
             throw new CustomException("该设备对应流程已配置");
         }
         return equipmentExtensionMapper.insert(equipmentExtension);
@@ -85,27 +82,26 @@ public class EquipmentExtensionServiceImpl implements IEquipmentExtensionService
 
     /**
      * 修改设备拓展管理
-     * 
+     *
      * @param equipmentExtension 设备拓展管理
      * @return 结果
      */
     @Override
-    public int updateEquipmentExtension(EquipmentExtension equipmentExtension)
-    {
+    public int updateEquipmentExtension(EquipmentExtension equipmentExtension) {
         //修改数据时的校验
-        Equipment e=new Equipment();
+        Equipment e = new Equipment();
         e.setEquipmentId(equipmentExtension.getEquipmentId());
         e.setFlowIds(String.valueOf(equipmentExtension.getFlowId()));
         List<Equipment> equipmentList = equipmentService.selectEquipmentList(e);
-        if(equipmentList.size()==0){
+        if (equipmentList.size() == 0) {
             throw new CustomException("设备与该流程不匹配");
         }
-        LambdaQueryWrapper<EquipmentExtension> wrapper=new LambdaQueryWrapper<>();
-        wrapper.ne(EquipmentExtension::getId,equipmentExtension.getId());
-        wrapper.eq(EquipmentExtension::getEquipmentId,equipmentExtension.getEquipmentId());
-        wrapper.eq(EquipmentExtension::getFlowId,equipmentExtension.getFlowId());
-        EquipmentExtension ee=equipmentExtensionMapper.selectOne(wrapper);
-        if(ee!=null) {
+        LambdaQueryWrapper<EquipmentExtension> wrapper = new LambdaQueryWrapper<>();
+        wrapper.ne(EquipmentExtension::getId, equipmentExtension.getId());
+        wrapper.eq(EquipmentExtension::getEquipmentId, equipmentExtension.getEquipmentId());
+        wrapper.eq(EquipmentExtension::getFlowId, equipmentExtension.getFlowId());
+        EquipmentExtension ee = equipmentExtensionMapper.selectOne(wrapper);
+        if (ee != null) {
             throw new CustomException("该设备对应流程已配置");
         }
         return equipmentExtensionMapper.updateById(equipmentExtension);
@@ -113,25 +109,23 @@ public class EquipmentExtensionServiceImpl implements IEquipmentExtensionService
 
     /**
      * 批量删除设备拓展管理
-     * 
+     *
      * @param ids 需要删除的设备拓展管理主键
      * @return 结果
      */
     @Override
-    public int deleteEquipmentExtensionByIds(Long[] ids)
-    {
+    public int deleteEquipmentExtensionByIds(Long[] ids) {
         return equipmentExtensionMapper.deleteBatchIds(Arrays.asList(ids));
     }
 
     /**
      * 删除设备拓展管理信息
-     * 
+     *
      * @param id 设备拓展管理主键
      * @return 结果
      */
     @Override
-    public int deleteEquipmentExtensionById(Long id)
-    {
+    public int deleteEquipmentExtensionById(Long id) {
         return equipmentExtensionMapper.deleteById(id);
     }
 
@@ -147,23 +141,36 @@ public class EquipmentExtensionServiceImpl implements IEquipmentExtensionService
 
     /**
      * 获取该组态流程页面相关设备的布局参数
+     *
      * @param flowId
      * @return
      */
     @Override
     public List<EquipmentLayoutVO> getLayout(Integer flowId) {
-        LambdaQueryWrapper<EquipmentExtension> wrapper=new LambdaQueryWrapper<>();
-        wrapper.eq(EquipmentExtension::getFlowId,flowId);
+        LambdaQueryWrapper<EquipmentExtension> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(EquipmentExtension::getFlowId, flowId);
         wrapper.eq(EquipmentExtension::getStatus, GeneralStatus.ENABLE.getCode());
         List<EquipmentExtension> equipmentExtensions = equipmentExtensionMapper.selectList(wrapper);
-        return equipmentExtensions.stream().map(e->{
-            String code=equipmentService.selectEquipmentByEquipmentId(e.getEquipmentId()).getCode();
-            EquipmentLayoutVO vo=new EquipmentLayoutVO();
-            vo.setCode(code);
-            vo.setLeft(e.getX());
-            vo.setTop(e.getY());
-            vo.setSize(e.getSize());
-            return vo;
-        }).collect(Collectors.toList());
+        return equipmentExtensions.stream()
+                .filter(e -> e.getEquipmentId() != null)
+                .map(e -> {
+                    Equipment equipment = equipmentService.selectEquipmentByEquipmentId(e.getEquipmentId());
+                    String code = equipment != null ? equipment.getCode() : "";
+                    EquipmentLayoutVO vo = new EquipmentLayoutVO();
+                    vo.setCode(code);
+                    vo.setLeft(e.getX());
+                    vo.setTop(e.getY());
+                    vo.setSize(e.getSize());
+                    return vo;
+                })
+                .collect(Collectors.toList());
+
+    }
+
+    @Override
+    public List<EquipmentExtension> getListByFlowId(String flowId) {
+        LambdaQueryWrapper<EquipmentExtension> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(EquipmentExtension::getFlowId, flowId);
+        return equipmentExtensionMapper.selectList(wrapper);
     }
 }

+ 15 - 0
admin/src/main/java/com/dcs/hnyz/service/impl/EquipmentServiceImpl.java

@@ -6,6 +6,7 @@ import java.util.*;
 import java.util.stream.Collectors;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.dcs.common.enums.GeneralStatus;
 import com.dcs.common.exception.CustomException;
 import com.dcs.hnyz.domain.EquipmentParam;
@@ -209,6 +210,20 @@ public class EquipmentServiceImpl implements IEquipmentService
         return data;
     }
 
+    @Override
+    public Map<Long, Equipment> getByIds(Set<Long> equipmentIds) {
+        if(CollectionUtils.isEmpty(equipmentIds)){
+            return null;
+        }
+        LambdaQueryWrapper<Equipment> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(Equipment::getEquipmentId,equipmentIds);
+        List<Equipment> equipmentList = equipmentMapper.selectList(wrapper);
+        if(CollectionUtils.isEmpty(equipmentList)){
+            return null;
+        }
+        return equipmentList.stream().collect(Collectors.toMap(Equipment::getEquipmentId, e -> e));
+    }
+
     private Map<String, Object> getEquipmentQuantity() {
         Map<String, Object> map = new HashMap<>();
         //目前设备数量

+ 115 - 0
admin/src/main/java/com/dcs/hnyz/service/impl/ModelComponentServiceImpl.java

@@ -0,0 +1,115 @@
+package com.dcs.hnyz.service.impl;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+import com.dcs.common.utils.DateUtils;
+import com.dcs.hnyz.domain.EquipmentExtension;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.dcs.hnyz.mapper.ModelComponentMapper;
+import com.dcs.hnyz.domain.ModelComponent;
+import com.dcs.hnyz.service.IModelComponentService;
+
+import javax.annotation.Resource;
+
+/**
+ * 模型组件管理Service业务层处理
+ * 
+ * @author hmy
+ * @date 2025-07-04
+ */
+@Service
+public class ModelComponentServiceImpl implements IModelComponentService 
+{
+    @Resource
+    private ModelComponentMapper modelComponentMapper;
+
+    /**
+     * 查询模型组件管理
+     * 
+     * @param modelId 模型组件管理主键
+     * @return 模型组件管理
+     */
+    @Override
+    public ModelComponent selectModelComponentByModelId(Long modelId)
+    {
+        return modelComponentMapper.selectById(modelId);
+    }
+
+    /**
+     * 查询模型组件管理列表
+     * 
+     * @param modelComponent 模型组件管理
+     * @return 模型组件管理
+     */
+    @Override
+    public List<ModelComponent> selectModelComponentList(ModelComponent modelComponent)
+    {
+        return modelComponentMapper.selectModelComponentList(modelComponent);
+    }
+
+    /**
+     * 新增模型组件管理
+     * 
+     * @param modelComponent 模型组件管理
+     * @return 结果
+     */
+    @Override
+    public int insertModelComponent(ModelComponent modelComponent)
+    {
+//        modelComponent.setCreateTime(DateUtils.getNowDate());
+        return modelComponentMapper.insert(modelComponent);
+    }
+
+    /**
+     * 修改模型组件管理
+     * 
+     * @param modelComponent 模型组件管理
+     * @return 结果
+     */
+    @Override
+    public int updateModelComponent(ModelComponent modelComponent)
+    {
+//        modelComponent.setUpdateTime(DateUtils.getNowDate());
+        return modelComponentMapper.updateById(modelComponent);
+    }
+
+    /**
+     * 批量删除模型组件管理
+     * 
+     * @param modelIds 需要删除的模型组件管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteModelComponentByModelIds(Long[] modelIds)
+    {
+        return modelComponentMapper.deleteBatchIds(Arrays.asList(modelIds));
+    }
+
+    /**
+     * 删除模型组件管理信息
+     * 
+     * @param modelId 模型组件管理主键
+     * @return 结果
+     */
+    @Override
+    public int deleteModelComponentByModelId(Long modelId)
+    {
+        return modelComponentMapper.deleteById(modelId);
+    }
+
+
+    @Override
+    public Map<Long, ModelComponent> getModelMapByIds(Set<Integer> modelIds) {
+        if (modelIds == null || modelIds.isEmpty()) {
+            return Collections.emptyMap();
+        }
+        return modelComponentMapper.selectBatchIds(modelIds).stream().collect(Collectors.toMap(ModelComponent::getModelId, modelComponent -> modelComponent));
+    }
+
+    @Override
+    public List<ModelComponent> getModelComponentSelectList() {
+        return modelComponentMapper.selectList(null);
+    }
+}

+ 2 - 8
admin/src/main/resources/mapper/hnyzdcs/EquipmentExtensionMapper.xml

@@ -37,14 +37,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         c.flow_name
         FROM
         equipment_extension AS a
-        INNER JOIN
-        equipment AS b
-        ON
-        a.equipment_id = b.equipment_id
-        INNER JOIN
-        flow AS c
-        ON
-        a.flow_id = c.flow_id
+        LEFT JOIN equipment AS b ON a.equipment_id = b.equipment_id
+        INNER JOIN flow AS c ON a.flow_id = c.flow_id
         <where>
             <if test="flowId != null">
                 AND a.flow_id = #{flowId}

+ 117 - 0
admin/src/main/resources/mapper/hnyzdcs/ModelComponentMapper.xml

@@ -0,0 +1,117 @@
+<?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.dcs.hnyz.mapper.ModelComponentMapper">
+
+    <resultMap type="ModelComponent" id="ModelComponentResult">
+        <result property="modelId" column="model_id"/>
+        <result property="modelName" column="model_name"/>
+        <result property="modelType" column="model_type"/>
+        <result property="componentName" column="component_name"/>
+        <result property="componentType" column="component_type"/>
+        <result property="iconClass" column="icon_class"/>
+        <result property="zIndex" column="z_index"/>
+        <result property="status" column="status"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="remark" column="remark"/>
+    </resultMap>
+
+    <sql id="selectModelComponentVo">
+        select model_id,
+               model_name,
+               model_type,
+               component_name,
+               component_type,
+               icon_class,
+               z_index,
+               status,
+               create_by,
+               create_time,
+               update_by,
+               update_time,
+               remark
+        from model_component
+    </sql>
+
+    <select id="selectModelComponentList" parameterType="ModelComponent" resultMap="ModelComponentResult">
+        <include refid="selectModelComponentVo"/>
+        <where>
+            <if test="modelName != null  and modelName != ''">and model_name like concat('%', #{modelName}, '%')</if>
+            <if test="modelType != null  and modelType != ''">and model_type = #{modelType}</if>
+            <if test="componentName != null  and componentName != ''">and component_name like concat('%',
+                #{componentName}, '%')
+            </if>
+            <if test="status != null  and status != ''">and status = #{status}</if>
+        </where>
+    </select>
+
+    <select id="selectModelComponentByModelId" parameterType="Long" resultMap="ModelComponentResult">
+        <include refid="selectModelComponentVo"/>
+        where model_id = #{modelId}
+    </select>
+
+    <insert id="insertModelComponent" parameterType="ModelComponent" useGeneratedKeys="true" keyProperty="modelId">
+        insert into model_component
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="modelName != null and modelName != ''">model_name,</if>
+            <if test="modelType != null and modelType != ''">model_type,</if>
+            <if test="componentName != null and componentName != ''">component_name,</if>
+            <if test="componentType != null">component_type,</if>
+            <if test="iconClass != null">icon_class,</if>
+            <if test="status != null">status,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="modelName != null and modelName != ''">#{modelName},</if>
+            <if test="modelType != null and modelType != ''">#{modelType},</if>
+            <if test="componentName != null and componentName != ''">#{componentName},</if>
+            <if test="componentType != null">#{componentType},</if>
+            <if test="iconClass != null">#{iconClass},</if>
+            <if test="status != null">#{status},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+        </trim>
+    </insert>
+
+    <update id="updateModelComponent" parameterType="ModelComponent">
+        update model_component
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="modelName != null and modelName != ''">model_name = #{modelName},</if>
+            <if test="modelType != null and modelType != ''">model_type = #{modelType},</if>
+            <if test="componentName != null and componentName != ''">component_name = #{componentName},</if>
+            <if test="componentType != null">component_type = #{componentType},</if>
+            <if test="iconClass != null">icon_class = #{iconClass},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where model_id = #{modelId}
+    </update>
+
+    <delete id="deleteModelComponentByModelId" parameterType="Long">
+        delete
+        from model_component
+        where model_id = #{modelId}
+    </delete>
+
+    <delete id="deleteModelComponentByModelIds" parameterType="String">
+        delete from model_component where model_id in
+        <foreach item="modelId" collection="array" open="(" separator="," close=")">
+            #{modelId}
+        </foreach>
+    </delete>
+</mapper>