Explorar o código

资产设备表sys_device 同步代码提交

jingyuanchao hai 1 ano
pai
achega
1683d6d451
Modificáronse 16 ficheiros con 394 adicións e 25 borrados
  1. 1 0
      soc-api/soc-api-system/src/main/java/com/xunmei/system/api/domain/SysDevice.java
  2. 83 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/device/domain/SysMultiLayerDictionary.java
  3. 39 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/device/vo/DictionaryTreeVo.java
  4. 3 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/iot/BaseDeviceTypeEnum.java
  5. 1 1
      soc-modules/soc-modules-gen/src/main/java/com/xunmei/gen/util/CodeGenerators.java
  6. 11 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/mapper/SysDeviceMapper.java
  7. 17 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/SysDeviceService.java
  8. 34 9
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/impl/IotDeviceInfoServiceImpl.java
  9. 64 0
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/impl/SysDeviceServiceImpl.java
  10. 1 1
      soc-modules/soc-modules-host/src/main/java/com/xunmei/host/websocket/handler/SocWebSocketHandler.java
  11. 4 0
      soc-modules/soc-modules-host/src/main/resources/mapper/SysDeviceMapper.xml
  12. 13 14
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysDeviceController.java
  13. 36 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysMultiLayerDictionaryController.java
  14. 16 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/mapper/SysMultiLayerDictionaryMapper.java
  15. 22 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysMultiLayerDictionaryService.java
  16. 49 0
      soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysMultiLayerDictionaryServiceImpl.java

+ 1 - 0
soc-api/soc-api-system/src/main/java/com/xunmei/system/api/domain/SysDevice.java

@@ -41,6 +41,7 @@ public class SysDevice extends BaseEntity {
 
     @ApiModelProperty(value = "设备名称")
     private String deviceName;
+
     @ApiModelProperty(value = "资产编号")
     @TableField("asset_no")
     private String assetNo;

+ 83 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/device/domain/SysMultiLayerDictionary.java

@@ -0,0 +1,83 @@
+package com.xunmei.common.core.domain.device.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author jingYuanChao
+ * @since 2024-09-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("sys_multi_layer_dictionary")
+@ApiModel(value="SysMultiLayerDictionary对象", description="")
+public class SysMultiLayerDictionary implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "编号")
+    @TableField("code")
+    private String code;
+
+    @ApiModelProperty(value = "名称")
+    @TableField("name")
+    private String name;
+
+    @ApiModelProperty(value = "上级")
+    @TableField("parent_id")
+    private Long parentId;
+
+    @ApiModelProperty(value = "分类")
+    @TableField("type")
+    private String type;
+
+    @ApiModelProperty(value = "分类名称")
+    @TableField("type_name")
+    private String typeName;
+
+    @ApiModelProperty(value = "层级")
+    @TableField("level")
+    private Integer level;
+
+    @ApiModelProperty(value = "排序")
+    @TableField("sort")
+    private Integer sort;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "修改人名称")
+    @TableField("modified_name")
+    private String modifiedName;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField("update_time")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "最后修改人id")
+    @TableField("modified_id")
+    private Long modifiedId;
+
+    @ApiModelProperty(value = "删除")
+    @TableField("deleted")
+    private Integer deleted;
+
+
+}

+ 39 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/device/vo/DictionaryTreeVo.java

@@ -0,0 +1,39 @@
+package com.xunmei.common.core.domain.device.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author jingyuanchao
+ * @date 2024/9/26 16:02
+ */
+@Data
+public class DictionaryTreeVo {
+    private Long id;
+
+    @ApiModelProperty(value = "编号")
+    private String code;
+
+    @ApiModelProperty(value = "名称")
+    private String name;
+
+    @ApiModelProperty(value = "上级")
+    private Long parentId;
+
+    @ApiModelProperty(value = "分类")
+    private String type;
+
+    @ApiModelProperty(value = "分类名称")
+    private String typeName;
+
+    @ApiModelProperty(value = "层级")
+    private Integer level;
+
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
+    private List<DictionaryTreeVo> children;
+
+}

+ 3 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/enums/iot/BaseDeviceTypeEnum.java

@@ -52,6 +52,9 @@ public enum BaseDeviceTypeEnum {
     AlarmHostInput_IMDualIdentification("IMDualIdentification","红外微波双鉴传感器"),
     AlarmHostInput_Microwave("Microwave","微波传感器"),
     AlarmHostInput_EmergencyButton("EmergencyButton","紧急按钮传感器"),
+
+    Talk("23","对讲主机"),
+    door("24","门禁主机"),
     ;
     private String code;
     private String desc;

+ 1 - 1
soc-modules/soc-modules-gen/src/main/java/com/xunmei/gen/util/CodeGenerators.java

@@ -30,7 +30,7 @@ public class CodeGenerators {
     }*/
 
     public static final String moduleName="com.xunmei.host";
-    public static final String tableNames="iot_server_product";
+    public static final String tableNames="sys_multi_layer_dictionary";
 
     public static void main(String[] args) {
         // 代码生成器

+ 11 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/mapper/SysDeviceMapper.java

@@ -0,0 +1,11 @@
+package com.xunmei.host.iot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xunmei.system.api.domain.SysDevice;
+
+/**
+ * @author jingyuanchao
+ * @date 2024/9/26 11:20
+ */
+public interface SysDeviceMapper extends BaseMapper<SysDevice> {
+}

+ 17 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/SysDeviceService.java

@@ -0,0 +1,17 @@
+package com.xunmei.host.iot.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.system.api.domain.SysDevice;
+import com.xunmei.system.api.domain.iot.IotDeviceInfo;
+
+import java.util.List;
+
+/**
+ * @author jingyuanchao
+ * @date 2024/9/26 11:19
+ */
+public interface SysDeviceService extends IService<SysDevice> {
+
+
+    void addDevice(List<IotDeviceInfo> deviceInfoList);
+}

+ 34 - 9
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/impl/IotDeviceInfoServiceImpl.java

@@ -22,6 +22,7 @@ import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.host.iot.mapper.IotDeviceInfoMapper;
 import com.xunmei.host.iot.service.IIotDeviceInfoExtendService;
 import com.xunmei.host.iot.service.IIotDeviceInfoService;
+import com.xunmei.host.iot.service.SysDeviceService;
 import com.xunmei.host.protection.service.IotAlarmDefenceAreaService;
 import com.xunmei.host.protection.service.IotAlarmSubsystemService;
 import com.xunmei.host.server.service.IotServerInfoService;
@@ -70,6 +71,9 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
     @Autowired
     private IotAlarmSubsystemService iotAlarmSubsystemService;
 
+    @Autowired
+    private SysDeviceService sysDeviceService;
+
     /**
      * 根据设备类型和设备编码,获取设备信息
      *
@@ -329,8 +333,13 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
             case WebSocketConstants.DEVICES_EVENT:
             case WebSocketConstants.GET_DEVICES_SERVICES:
                 List<DvsBaseInfo> dataList = dataArray.toJavaList(DvsBaseInfo.class);
-                handleDvsAndFSUDeviceInfo(dataList, serverInfo);
-                handleAlarmHostDeviceInfo(dataList, serverInfo);
+
+                List<IotDeviceInfo> syncToAssetDeviceList = new ArrayList<>();
+                handleDvsAndFSUDeviceInfo(dataList, serverInfo, syncToAssetDeviceList);
+                handleAlarmHostDeviceInfo(dataList, serverInfo, syncToAssetDeviceList);
+
+                handelAssetDeviceInfo(syncToAssetDeviceList);
+
                 return WebsocketResult.replySuccess(req.getTopic(), req.getId(), req.getProductName(), req.getDeviceName());
             case WebSocketConstants.DEVICES_STATUS_EVENT:
                 List<DeviceStatusInfo> statusInfos = dataArray.toJavaList(DeviceStatusInfo.class);
@@ -342,8 +351,17 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
         return null;
     }
 
+    private void handelAssetDeviceInfo(List<IotDeviceInfo> syncToAssetDeviceList) {
+        if (syncToAssetDeviceList.isEmpty()) {
+            return;
+        }
+        sysDeviceService.addDevice(syncToAssetDeviceList);
+
+
+    }
+
     @Transactional(rollbackFor = Exception.class)
-    public void handleAlarmHostDeviceInfo(List<DvsBaseInfo> dataList, IotServerInfo serverInfo) {
+    public void handleAlarmHostDeviceInfo(List<DvsBaseInfo> dataList, IotServerInfo serverInfo, List<IotDeviceInfo> syncToAssetDeviceList) {
         List<DvsBaseInfo> alarmHostList = dataList.stream().filter(r -> ObjectUtil.equal(r.getType(), BaseDeviceTypeEnum.AlarmHost.name())).collect(Collectors.toList());
         if (ObjectUtil.isEmpty(alarmHostList)) {
             return;
@@ -384,7 +402,7 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
                 updateHostInfo(dvsBaseInfo, hostInfo, BaseDeviceTypeEnum.AlarmHost.getCode());
                 updateHostList.add(hostInfo);
             }
-
+            syncToAssetDeviceList.add(hostInfo);
             //处理报警主机扩展信息
             IotDeviceInfoExtend extend = iIotDeviceInfoExtendService.selectByProductDeviceNameAndToken(serverInfo.getIotCode(), BaseDeviceTypeEnum.AlarmHost.getCode(), dvsBaseInfo.getDeviceCode());
             if (extend == null) {
@@ -422,6 +440,7 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
                         dealDefenceArea(defenceAreaInfo, defenceArea, serverInfo);
                         updateDefenceAreaList.add(defenceArea);
                     }
+                    // syncToAssetDeviceList.add(defenceArea);
                 }
 
             }
@@ -457,7 +476,7 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
     }
 
     @Transactional
-    public void handleDvsAndFSUDeviceInfo(List<DvsBaseInfo> dataList, IotServerInfo serverInfo) {
+    public void handleDvsAndFSUDeviceInfo(List<DvsBaseInfo> dataList, IotServerInfo serverInfo, List<IotDeviceInfo> syncToAssetDeviceList) {
 
         //逻辑删除所有设备
         deleteDeviceByToken(serverInfo.getIotCode());
@@ -495,6 +514,7 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
                 updateHostInfo(dvsBaseInfo, hostInfo, code);
                 updateHostList.add(hostInfo);
             }
+            syncToAssetDeviceList.add(hostInfo);
             if (BaseDeviceTypeEnum.Dvs.name().equals(dvsBaseInfo.getType())) {
                 //处理主机扩展信息
                 IotDeviceInfoExtend extend = iIotDeviceInfoExtendService.selectByProductDeviceNameAndToken(serverInfo.getIotCode(), BaseDeviceTypeEnum.Dvs.getCode(), dvsBaseInfo.getDeviceCode());
@@ -513,16 +533,21 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
             }
             //处理通道或者动环传感器信息
             for (SubDeviceInfo subDeviceInfo : subDeviceList) {
-                String productName = ProductEnums.FSU_GATEWAY.getProductName().contains(dvsBaseInfo.getProductName()) ? subDeviceInfo.getType() : dvsBaseInfo.getProductName();
+                boolean isFusDevice = ProductEnums.FSU_GATEWAY.getProductName().contains(dvsBaseInfo.getProductName());
+                String productName = isFusDevice ? subDeviceInfo.getType() : dvsBaseInfo.getProductName();
                 IotDeviceInfo channelInfo = selectByTypeAndHostAndCode(serverInfo.getIotCode(), subDeviceInfo.getParentCode(), productName, subDeviceInfo.getDeviceCode());
 
                 if (ObjectUtil.isNull(channelInfo)) {
-                    IotDeviceInfo channel = createChannelInfo(subDeviceInfo, serverInfo, hostInfo);
-                    addChnnelList.add(channel);
+                    channelInfo = createChannelInfo(subDeviceInfo, serverInfo, hostInfo);
+                    addChnnelList.add(channelInfo);
                 } else {
                     updateChannelInfo(subDeviceInfo, channelInfo, hostInfo);
                     updateChnnelList.add(channelInfo);
                 }
+                if (isFusDevice) {
+                    syncToAssetDeviceList.add(channelInfo);
+                }
+
             }
         }
 
@@ -766,7 +791,7 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
 
         final IotServerInfo serverInfo = iotServerInfoService.selectByOrgId(eto.getOrgId());
         final String iotCode = serverInfo.getIotCode();
-        final String topic = TopicTypeEnums.formatUrl(TopicTypeEnums.PRODUCT_SERVICE_INVOKE.getUrl(),WebSocketConstants.DETECTION_HOST, WebSocketConstants.DETECTION_HOST_DEVICE);
+        final String topic = TopicTypeEnums.formatUrl(TopicTypeEnums.PRODUCT_SERVICE_INVOKE.getUrl(), WebSocketConstants.DETECTION_HOST, WebSocketConstants.DETECTION_HOST_DEVICE);
         final JSONObject object = new JSONObject();
         object.put("dataType", eto.getDataType());
         final WebsocketResult result = IotServerUtils.invokeHostServer(topic, new JSONObject(), WebSocketConstants.DO_WORK, object);

+ 64 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/impl/SysDeviceServiceImpl.java

@@ -0,0 +1,64 @@
+package com.xunmei.host.iot.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.constant.Constants;
+import com.xunmei.host.iot.mapper.SysDeviceMapper;
+import com.xunmei.host.iot.service.SysDeviceService;
+import com.xunmei.system.api.domain.SysDevice;
+import com.xunmei.system.api.domain.iot.IotDeviceInfo;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author jingyuanchao
+ * @date 2024/9/26 11:19
+ */
+@Service
+public class SysDeviceServiceImpl extends ServiceImpl<SysDeviceMapper, SysDevice> implements SysDeviceService {
+
+    @Override
+    public void addDevice(List<IotDeviceInfo> deviceInfoList) {
+        for (IotDeviceInfo deviceInfo : deviceInfoList) {
+            final SysDevice sysDevice = getByBusinessDeviceId(deviceInfo.getId());
+            if (sysDevice == null) {
+                final SysDevice device = build(deviceInfo);
+                save(device);
+            } else {
+                sysDevice.setDeviceName(deviceInfo.getDeviceName());
+                sysDevice.setUpdateTime(new Date());
+                updateById(sysDevice);
+            }
+        }
+    }
+
+    public SysDevice getByBusinessDeviceId(Long businessDeviceId) {
+        LambdaQueryWrapper<SysDevice> lambdaQuery = new LambdaQueryWrapper<>();
+        lambdaQuery.eq(SysDevice::getBusinessDeviceId, businessDeviceId);
+        //设备状态 != 报废
+        lambdaQuery.ne(SysDevice::getDeviceStatus, 3);
+        lambdaQuery.eq(SysDevice::getDelFlag, 0);
+        lambdaQuery.last(Constants.LIMIT1);
+        return baseMapper.selectOne(lambdaQuery);
+    }
+
+    private SysDevice build(IotDeviceInfo deviceInfo) {
+        final Date now = new Date();
+        SysDevice sysDevice = new SysDevice();
+        sysDevice.setDeviceName(deviceInfo.getDeviceName());
+        sysDevice.setUseTime(now);
+        sysDevice.setDeviceStatus(0);
+        sysDevice.setDelFlag("0");
+        sysDevice.setOrgId(deviceInfo.getOrgId());
+        sysDevice.setOrgName(deviceInfo.getOrgName());
+        sysDevice.setOrgPath(deviceInfo.getOrgPath());
+        sysDevice.setCreateTime(now);
+        sysDevice.setUpdateTime(now);
+        sysDevice.setBusinessDeviceId(deviceInfo.getId());
+        return sysDevice;
+
+
+    }
+}

+ 1 - 1
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/websocket/handler/SocWebSocketHandler.java

@@ -194,7 +194,7 @@ public class SocWebSocketHandler extends AbstractWebSocketHandler {
                     if (routeService == null) {
                         return;
                     }
-                    result = (WebsocketResult) routeService.execute(executeReq);
+                        result = (WebsocketResult) routeService.execute(executeReq);
                     break;
                 default:
                     break;

+ 4 - 0
soc-modules/soc-modules-host/src/main/resources/mapper/SysDeviceMapper.xml

@@ -0,0 +1,4 @@
+<?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.xunmei.host.iot.mapper.SysDeviceMapper">
+</mapper>

+ 13 - 14
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysDeviceController.java

@@ -1,44 +1,43 @@
 package com.xunmei.system.controller;
 
-import java.io.File;
-import java.io.IOException;
-import java.util.*;
-import java.util.stream.Collectors;
-
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.context.AnalysisContext;
 import com.alibaba.excel.event.AnalysisEventListener;
 import com.xunmei.common.core.constant.SecurityConstants;
 import com.xunmei.common.core.domain.R;
 import com.xunmei.common.core.vo.IdNameVo;
+import com.xunmei.common.core.web.controller.BaseController;
+import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.common.log.annotation.Log;
+import com.xunmei.common.log.enums.BusinessType;
 import com.xunmei.common.security.annotation.InnerAuth;
+import com.xunmei.common.security.annotation.RequiresPermissions;
 import com.xunmei.system.api.RemoteProtectionService;
 import com.xunmei.system.api.domain.SysDevice;
 import com.xunmei.system.api.domain.SysDictData;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.dto.ProtectionDTO;
 import com.xunmei.system.api.dto.SysDeviceInnerListDto;
+import com.xunmei.system.service.ISysDeviceService;
 import com.xunmei.system.service.ISysDictDataService;
 import com.xunmei.system.service.ISysDictTypeService;
 import com.xunmei.system.service.ISysOrgService;
 import com.xunmei.system.util.DeviceExport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
-import com.xunmei.common.log.annotation.Log;
-import com.xunmei.common.log.enums.BusinessType;
-import com.xunmei.common.security.annotation.RequiresPermissions;
-import com.xunmei.system.service.ISysDeviceService;
-import com.xunmei.common.core.web.controller.BaseController;
-import com.xunmei.common.core.web.domain.AjaxResult;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import com.xunmei.common.core.web.page.TableDataInfo;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 【请填写功能名称】Controller

+ 36 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/controller/SysMultiLayerDictionaryController.java

@@ -0,0 +1,36 @@
+package com.xunmei.system.controller;
+
+
+import com.xunmei.common.core.domain.device.vo.DictionaryTreeVo;
+import com.xunmei.common.core.web.domain.AjaxResult;
+import com.xunmei.system.service.ISysMultiLayerDictionaryService;
+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;
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author jingYuanChao
+ * @since 2024-09-26
+ */
+@RestController
+@RequestMapping("/dictionary")
+public class SysMultiLayerDictionaryController {
+
+    @Resource
+    private ISysMultiLayerDictionaryService sysMultiLayerDictionaryService;
+
+    @GetMapping("/list")
+    private AjaxResult getDictionaryList(){
+        final List<DictionaryTreeVo> list = sysMultiLayerDictionaryService.getDictionaryTree();
+        return AjaxResult.success(list);
+    }
+}
+

+ 16 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/mapper/SysMultiLayerDictionaryMapper.java

@@ -0,0 +1,16 @@
+package com.xunmei.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xunmei.common.core.domain.device.domain.SysMultiLayerDictionary;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author jingYuanChao
+ * @since 2024-09-26
+ */
+public interface SysMultiLayerDictionaryMapper extends BaseMapper<SysMultiLayerDictionary> {
+
+}

+ 22 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/ISysMultiLayerDictionaryService.java

@@ -0,0 +1,22 @@
+package com.xunmei.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xunmei.common.core.domain.device.domain.SysMultiLayerDictionary;
+import com.xunmei.common.core.domain.device.vo.DictionaryTreeVo;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author jingYuanChao
+ * @since 2024-09-26
+ */
+public interface ISysMultiLayerDictionaryService extends IService<SysMultiLayerDictionary> {
+
+
+    List<DictionaryTreeVo> getDictionaryTree();
+
+}

+ 49 - 0
soc-modules/soc-modules-system/src/main/java/com/xunmei/system/service/impl/SysMultiLayerDictionaryServiceImpl.java

@@ -0,0 +1,49 @@
+package com.xunmei.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xunmei.common.core.domain.device.domain.SysMultiLayerDictionary;
+import com.xunmei.common.core.domain.device.vo.DictionaryTreeVo;
+import com.xunmei.common.core.util.BeanHelper;
+import com.xunmei.system.mapper.SysMultiLayerDictionaryMapper;
+import com.xunmei.system.service.ISysMultiLayerDictionaryService;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author jingYuanChao
+ * @since 2024-09-26
+ */
+@Service
+public class SysMultiLayerDictionaryServiceImpl extends ServiceImpl<SysMultiLayerDictionaryMapper, SysMultiLayerDictionary> implements ISysMultiLayerDictionaryService {
+
+
+    @Override
+    public List<DictionaryTreeVo> getDictionaryTree() {
+        LambdaQueryWrapper<SysMultiLayerDictionary> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SysMultiLayerDictionary::getDeleted, 0);
+        final List<SysMultiLayerDictionary> dictionaryList = baseMapper.selectList(wrapper);
+        final List<DictionaryTreeVo> treeVoList = BeanHelper.copyProperties(dictionaryList, DictionaryTreeVo.class);
+        final List<DictionaryTreeVo> tree = buildTree(treeVoList, -1L);
+        return tree;
+    }
+
+    //递归构建
+    private List<DictionaryTreeVo> buildTree(List<DictionaryTreeVo> treeVoList, Long parentId) {
+        List<DictionaryTreeVo> tree = new ArrayList<>();
+        for (DictionaryTreeVo node : treeVoList) {
+            if (node.getParentId().equals(parentId)) {
+                node.setChildren(buildTree(treeVoList, node.getId()));
+                tree.add(node);
+            }
+        }
+        return tree;
+
+    }
+}