lipenghui 5 månader sedan
förälder
incheckning
85afdc8b1b
15 ändrade filer med 240 tillägg och 70 borttagningar
  1. 31 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/IotDeviceServiceImpl.java
  2. 35 3
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/IotInfoClassifyServiceImpl.java
  3. 1 1
      yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java
  4. 33 25
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/pms/IotTreeController.java
  5. 20 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/pms/vo/IotTreeListReqVO.java
  6. 1 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/pms/vo/IotTreePageReqVO.java
  7. 2 3
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/pms/vo/IotTreeRespVO.java
  8. 2 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/pms/vo/IotTreeSaveReqVO.java
  9. 29 0
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/pms/vo/IotTreeSimpleRespVO.java
  10. 1 4
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/pms/IotTreeDO.java
  11. 17 6
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/pms/IotTreeMapper.java
  12. 35 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java
  13. 10 7
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/pms/IotTreeService.java
  14. 22 16
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/pms/IotTreeServiceImpl.java
  15. 1 0
      yudao-server/src/main/resources/application.yaml

+ 31 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/IotDeviceServiceImpl.java

@@ -1,5 +1,7 @@
 package cn.iocoder.yudao.module.pms.service;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.iocoder.yudao.framework.common.exception.ServiceException;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDevicePageReqVO;
@@ -8,12 +10,19 @@ import cn.iocoder.yudao.module.pms.dal.dataobject.IotDeviceDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.IotInfoClassifyDO;
 import cn.iocoder.yudao.module.pms.dal.mysql.IotDeviceMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.IotInfoClassifyMapper;
+import cn.iocoder.yudao.module.system.dal.dataobject.pms.IotTreeDO;
+import cn.iocoder.yudao.module.system.dal.mysql.pms.IotTreeMapper;
+import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants;
+import com.google.common.collect.ImmutableMap;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 
+import java.util.List;
+import java.util.Objects;
+
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_DEVICE_NOT_EXISTS;
 
@@ -30,6 +39,8 @@ public class IotDeviceServiceImpl implements IotDeviceService {
     private IotDeviceMapper iotDeviceMapper;
     @Resource
     private IotInfoClassifyMapper iotInfoClassifyMapper;
+    @Resource
+    private IotTreeMapper iotTreeMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -45,6 +56,16 @@ public class IotDeviceServiceImpl implements IotDeviceService {
         infoClassifyDO.setParentId(0L);
         infoClassifyDO.setDeviceId(iotDevice.getId());
         iotInfoClassifyMapper.insert(infoClassifyDO);
+        //插入pms树
+        IotTreeDO iotTreeDO = new IotTreeDO();
+        iotTreeDO.setType("device");
+        iotTreeDO.setOriginId(iotDevice.getId());
+        iotTreeDO.setName(iotDevice.getDeviceName());
+        List<IotTreeDO> iotTreeDOS = iotTreeMapper.selectListByOriginId(iotDevice.getOrgId(),"dept");
+        if (CollUtil.isNotEmpty(iotTreeDOS)) {
+            iotTreeDO.setParentId(Objects.nonNull(iotTreeDOS.get(0)) ? iotTreeDOS.get(0).getId() : 0);
+            iotTreeMapper.insert(iotTreeDO);
+        }
         // 返回
         return iotDevice.getId();
     }
@@ -56,6 +77,14 @@ public class IotDeviceServiceImpl implements IotDeviceService {
         // 更新
         IotDeviceDO updateObj = BeanUtils.toBean(updateReqVO, IotDeviceDO.class);
         iotDeviceMapper.updateById(updateObj);
+        //更新pms树
+        List<IotTreeDO> iotTreeDOS = iotTreeMapper.selectListByOriginId(updateObj.getId(), "device");
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(iotTreeDOS)) {
+            throw new ServiceException(ErrorCodeConstants.DEPT_NOT_FOUND.getCode(),"无该部门");
+        }
+        IotTreeDO iotTreeDO = iotTreeDOS.get(0);
+        iotTreeDO.setName(updateObj.getDeviceName());
+        iotTreeMapper.updateById(iotTreeDO);
     }
 
     @Override
@@ -64,6 +93,8 @@ public class IotDeviceServiceImpl implements IotDeviceService {
         validateIotDeviceExists(id);
         // 删除
         iotDeviceMapper.deleteById(id);
+        //删除pms树
+        iotTreeMapper.deleteByMap(ImmutableMap.of("origin_id", id));
     }
 
     private void validateIotDeviceExists(Long id) {

+ 35 - 3
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/IotInfoClassifyServiceImpl.java

@@ -2,19 +2,26 @@ package cn.iocoder.yudao.module.pms.service;
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.iocoder.yudao.framework.common.exception.ServiceException;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotInfoClassifyListReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.vo.IotInfoClassifySaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.IotInfoClassifyDO;
 import cn.iocoder.yudao.module.pms.dal.mysql.IotInfoClassifyMapper;
+import cn.iocoder.yudao.module.supplier.enums.ErrorCodeConstant;
 import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.pms.IotTreeDO;
+import cn.iocoder.yudao.module.system.dal.mysql.pms.IotTreeMapper;
 import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants;
+import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants;
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.ImmutableMap;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
@@ -36,10 +43,13 @@ public class IotInfoClassifyServiceImpl implements IotInfoClassifyService {
 
     @Resource
     private IotInfoClassifyMapper iotInfoClassifyMapper;
+    @Resource
+    private IotTreeMapper iotTreeMapper;
 
     @Override
     @CacheEvict(cacheNames = RedisKeyConstants.IOT_INFO_CHILDREN_ID_LIST,
             allEntries = true)
+    @Transactional(rollbackFor = Exception.class)
     public Long createIotInfoClassify(IotInfoClassifySaveReqVO createReqVO) {
         if (createReqVO.getParentId() == null) {
             createReqVO.setParentId(IotInfoClassifyDO.PARENT_ID_ROOT);
@@ -50,14 +60,25 @@ public class IotInfoClassifyServiceImpl implements IotInfoClassifyService {
         validateInfoClassifyNameUnique(null, createReqVO.getParentId(), createReqVO.getName());
 
         // 插入产品分类
-        IotInfoClassifyDO dept = BeanUtils.toBean(createReqVO, IotInfoClassifyDO.class);
-        iotInfoClassifyMapper.insert(dept);
-        return dept.getId();
+        IotInfoClassifyDO infoClassifyDO = BeanUtils.toBean(createReqVO, IotInfoClassifyDO.class);
+        iotInfoClassifyMapper.insert(infoClassifyDO);
+        //插入pms树
+        IotTreeDO iotTreeDO = new IotTreeDO();
+        iotTreeDO.setType("file");
+        iotTreeDO.setOriginId(infoClassifyDO.getId());
+        iotTreeDO.setName(infoClassifyDO.getName());
+        List<IotTreeDO> iotTreeDOS = iotTreeMapper.selectListByOriginId(infoClassifyDO.getDeviceId(),"device");
+        if (CollUtil.isNotEmpty(iotTreeDOS)) {
+            iotTreeDO.setParentId(Objects.nonNull(iotTreeDOS.get(0)) ? iotTreeDOS.get(0).getId() : 0);
+            iotTreeMapper.insert(iotTreeDO);
+        }
+        return infoClassifyDO.getId();
     }
 
     @Override
     @CacheEvict(cacheNames = RedisKeyConstants.IOT_INFO_CHILDREN_ID_LIST,
             allEntries = true)
+    @Transactional(rollbackFor = Exception.class)
     public void updateIotInfoClassify(IotInfoClassifySaveReqVO updateReqVO) {
         if (updateReqVO.getParentId() == null) {
             updateReqVO.setParentId(IotInfoClassifyDO.PARENT_ID_ROOT);
@@ -72,11 +93,20 @@ public class IotInfoClassifyServiceImpl implements IotInfoClassifyService {
         // 更新产品分类
         IotInfoClassifyDO updateObj = BeanUtils.toBean(updateReqVO, IotInfoClassifyDO.class);
         iotInfoClassifyMapper.updateById(updateObj);
+        //更新pms树
+        List<IotTreeDO> iotTreeDOS = iotTreeMapper.selectListByOriginId(updateObj.getId(), "file");
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(iotTreeDOS)) {
+            throw new ServiceException(ErrorCodeConstants.DEPT_NOT_FOUND.getCode(),"无该部门");
+        }
+        IotTreeDO iotTreeDO = iotTreeDOS.get(0);
+        iotTreeDO.setName(updateObj.getName());
+        iotTreeMapper.updateById(iotTreeDO);
     }
 
     @Override
     @CacheEvict(cacheNames = RedisKeyConstants.IOT_INFO_CHILDREN_ID_LIST,
             allEntries = true)
+    @Transactional(rollbackFor = Exception.class)
     public void deleteIotInfoClassify(Long id) {
         // 校验是否存在
         validateIotInfoClassifyExists(id);
@@ -86,6 +116,8 @@ public class IotInfoClassifyServiceImpl implements IotInfoClassifyService {
         }
         // 删除产品分类
         iotInfoClassifyMapper.deleteById(id);
+        //删除pms树
+        iotTreeMapper.deleteByMap(ImmutableMap.of("origin_id", id));
     }
 
     @VisibleForTesting

+ 1 - 1
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java

@@ -8,7 +8,7 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode;
  * system 系统,使用 1-002-000-000 段
  */
 public interface ErrorCodeConstants {
-
+    ErrorCode IOT_TREE_NOT_EXISTS = new ErrorCode(122, "pms树不存在");
     // ========== AUTH 模块 1-002-000-000 ==========
     ErrorCode AUTH_LOGIN_BAD_CREDENTIALS = new ErrorCode(1_002_000_000, "登录失败,账号密码不正确");
     ErrorCode AUTH_LOGIN_USER_DISABLED = new ErrorCode(1_002_000_001, "登录失败,账号被禁用");

+ 33 - 25
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/IotTreeController.java → yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/pms/IotTreeController.java

@@ -1,34 +1,34 @@
-package cn.iocoder.yudao.module.pms.controller.admin;
-
-import cn.iocoder.yudao.module.pms.controller.admin.vo.IotTreePageReqVO;
-import cn.iocoder.yudao.module.pms.controller.admin.vo.IotTreeRespVO;
-import cn.iocoder.yudao.module.pms.controller.admin.vo.IotTreeSaveReqVO;
-import cn.iocoder.yudao.module.pms.dal.dataobject.IotTreeDO;
-import cn.iocoder.yudao.module.pms.service.IotTreeService;
-import org.springframework.web.bind.annotation.*;
-import javax.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.security.access.prepost.PreAuthorize;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.Operation;
-
-import javax.validation.constraints.*;
-import javax.validation.*;
-import javax.servlet.http.*;
-import java.util.*;
-import java.io.IOException;
+package cn.iocoder.yudao.module.system.controller.pms;
 
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
-
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
+import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO;
+import cn.iocoder.yudao.module.system.controller.pms.vo.*;
+import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.pms.IotTreeDO;
+import cn.iocoder.yudao.module.system.service.pms.IotTreeService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
 
-import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
-import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+import javax.annotation.Resource;
+import javax.annotation.security.PermitAll;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 
 
 @Tag(name = "管理后台 - pms树")
@@ -81,6 +81,14 @@ public class IotTreeController {
         return success(BeanUtils.toBean(pageResult, IotTreeRespVO.class));
     }
 
+    @GetMapping(value = {"/list-all-simple", "/simple-list"})
+    @Operation(summary = "获取部门精简信息列表", description = "只包含被开启的部门,主要用于前端的下拉选项")
+    public CommonResult<List<DeptSimpleRespVO>> getSimpleDeptList() {
+        List<IotTreeDO> list = iotTreeService.getIotTreeList(
+                new IotTreeListReqVO().setStatus(CommonStatusEnum.ENABLE.getStatus()));
+        return success(BeanUtils.toBean(list, DeptSimpleRespVO.class));
+    }
+
     @GetMapping("/export-excel")
     @Operation(summary = "导出pms树 Excel")
     @PreAuthorize("@ss.hasPermission('rq:iot-tree:export')")

+ 20 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/pms/vo/IotTreeListReqVO.java

@@ -0,0 +1,20 @@
+package cn.iocoder.yudao.module.system.controller.pms.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 产品分类列表 Request VO")
+@Data
+public class IotTreeListReqVO {
+
+    @Schema(description = "产品分类名称,模糊匹配", example = "芋道")
+    private String name;
+
+    @Schema(description = "展示状态,参见 CommonStatusEnum 枚举类", example = "1")
+    private Integer status;
+
+    @Schema(description = "原id")
+    private Long originId;
+    @Schema(description = "类型")
+    private String type;
+}

+ 1 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/vo/IotTreePageReqVO.java → yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/pms/vo/IotTreePageReqVO.java

@@ -1,7 +1,6 @@
-package cn.iocoder.yudao.module.pms.controller.admin.vo;
+package cn.iocoder.yudao.module.system.controller.pms.vo;
 
 import lombok.*;
-import java.util.*;
 import io.swagger.v3.oas.annotations.media.Schema;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import org.springframework.format.annotation.DateTimeFormat;

+ 2 - 3
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/vo/IotTreeRespVO.java → yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/pms/vo/IotTreeRespVO.java

@@ -1,9 +1,8 @@
-package cn.iocoder.yudao.module.pms.controller.admin.vo;
+package cn.iocoder.yudao.module.system.controller.pms.vo;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
-import java.util.*;
-import org.springframework.format.annotation.DateTimeFormat;
+
 import java.time.LocalDateTime;
 import com.alibaba.excel.annotation.*;
 

+ 2 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/vo/IotTreeSaveReqVO.java → yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/pms/vo/IotTreeSaveReqVO.java

@@ -1,8 +1,8 @@
-package cn.iocoder.yudao.module.pms.controller.admin.vo;
+package cn.iocoder.yudao.module.system.controller.pms.vo;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
-import java.util.*;
+
 import javax.validation.constraints.*;
 
 @Schema(description = "管理后台 - pms树新增/修改 Request VO")

+ 29 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/pms/vo/IotTreeSimpleRespVO.java

@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.module.system.controller.pms.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Schema(description = "管理后台 - 产品分类精简信息 Response VO")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class IotTreeSimpleRespVO {
+
+    @Schema(description = "产品分类编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+    private Long id;
+
+    @Schema(description = "产品分类名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋道")
+    private String name;
+
+    @Schema(description = "父产品分类 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+    private Long parentId;
+
+    @Schema(description = "排序")
+    private Integer sort;
+    @Schema(description = "原id")
+    private Long originId;
+    @Schema(description = "类型")
+    private String type;
+}

+ 1 - 4
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/IotTreeDO.java → yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/pms/IotTreeDO.java

@@ -1,9 +1,6 @@
-package cn.iocoder.yudao.module.pms.dal.dataobject;
+package cn.iocoder.yudao.module.system.dal.dataobject.pms;
 
 import lombok.*;
-import java.util.*;
-import java.time.LocalDateTime;
-import java.time.LocalDateTime;
 import com.baomidou.mybatisplus.annotation.*;
 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 

+ 17 - 6
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/IotTreeMapper.java → yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/pms/IotTreeMapper.java

@@ -1,14 +1,15 @@
-package cn.iocoder.yudao.module.pms.dal.mysql;
-
-import java.util.*;
+package cn.iocoder.yudao.module.system.dal.mysql.pms;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
-import cn.iocoder.yudao.module.pms.controller.admin.vo.IotTreePageReqVO;
-import cn.iocoder.yudao.module.pms.dal.dataobject.IotTreeDO;
+import cn.iocoder.yudao.module.system.controller.pms.vo.IotTreeListReqVO;
+import cn.iocoder.yudao.module.system.controller.pms.vo.IotTreePageReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.pms.IotTreeDO;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * pms树 Mapper
  *
@@ -16,7 +17,12 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface IotTreeMapper extends BaseMapperX<IotTreeDO> {
+    default List<IotTreeDO> selectList(IotTreeListReqVO reqVO) {
+        return selectList(new LambdaQueryWrapperX<IotTreeDO>()
+                .likeIfPresent(IotTreeDO::getName, reqVO.getName())
 
+                .eqIfPresent(IotTreeDO::getStatus, reqVO.getStatus()));
+    }
     default PageResult<IotTreeDO> selectPage(IotTreePageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<IotTreeDO>()
                 .eqIfPresent(IotTreeDO::getOriginId, reqVO.getOriginId())
@@ -29,5 +35,10 @@ public interface IotTreeMapper extends BaseMapperX<IotTreeDO> {
                 .eqIfPresent(IotTreeDO::getRemark, reqVO.getRemark())
                 .orderByDesc(IotTreeDO::getId));
     }
-
+    default List<IotTreeDO> selectListByOriginId(Long originId, String type) {
+        return selectList(new LambdaQueryWrapperX<IotTreeDO>()
+                .eq(IotTreeDO::getOriginId, originId)
+                .eq(IotTreeDO::getType, type)
+        );
+    }
 }

+ 35 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/dept/DeptServiceImpl.java

@@ -3,18 +3,27 @@ package cn.iocoder.yudao.module.system.service.dept;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.common.exception.ServiceException;
+import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO;
 import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.pms.IotTreeDO;
 import cn.iocoder.yudao.module.system.dal.mysql.dept.DeptMapper;
+import cn.iocoder.yudao.module.system.dal.mysql.pms.IotTreeMapper;
 import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants;
+import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants;
+import cn.iocoder.yudao.module.system.service.pms.IotTreeService;
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
@@ -36,10 +45,13 @@ public class DeptServiceImpl implements DeptService {
 
     @Resource
     private DeptMapper deptMapper;
+    @Resource
+    private IotTreeMapper iotTreeMapper;
 
     @Override
     @CacheEvict(cacheNames = RedisKeyConstants.DEPT_CHILDREN_ID_LIST,
             allEntries = true) // allEntries 清空所有缓存,因为操作一个部门,涉及到多个缓存
+    @Transactional(rollbackFor = Exception.class)
     public Long createDept(DeptSaveReqVO createReqVO) {
         if (createReqVO.getParentId() == null) {
             createReqVO.setParentId(DeptDO.PARENT_ID_ROOT);
@@ -52,12 +64,24 @@ public class DeptServiceImpl implements DeptService {
         // 插入部门
         DeptDO dept = BeanUtils.toBean(createReqVO, DeptDO.class);
         deptMapper.insert(dept);
+        //插入pms树
+        IotTreeDO iotTreeDO = new IotTreeDO();
+        iotTreeDO.setType("dept");
+        iotTreeDO.setOriginId(dept.getId());
+        iotTreeDO.setName(dept.getName());
+        List<IotTreeDO> iotTreeDOS = iotTreeMapper.selectListByOriginId(dept.getParentId(),"dept");
+//        if (CollUtil.isNotEmpty(iotTreeDOS)) {
+            iotTreeDO.setParentId(CollUtil.isNotEmpty(iotTreeDOS) ? iotTreeDOS.get(0).getId() : 0);
+            iotTreeMapper.insert(iotTreeDO);
+//        }
+
         return dept.getId();
     }
 
     @Override
     @CacheEvict(cacheNames = RedisKeyConstants.DEPT_CHILDREN_ID_LIST,
             allEntries = true) // allEntries 清空所有缓存,因为操作一个部门,涉及到多个缓存
+    @Transactional(rollbackFor = Exception.class)
     public void updateDept(DeptSaveReqVO updateReqVO) {
         if (updateReqVO.getParentId() == null) {
             updateReqVO.setParentId(DeptDO.PARENT_ID_ROOT);
@@ -68,15 +92,23 @@ public class DeptServiceImpl implements DeptService {
         validateParentDept(updateReqVO.getId(), updateReqVO.getParentId());
         // 校验部门名的唯一性
         validateDeptNameUnique(updateReqVO.getId(), updateReqVO.getParentId(), updateReqVO.getName());
-
         // 更新部门
         DeptDO updateObj = BeanUtils.toBean(updateReqVO, DeptDO.class);
+        //更新pms树
+        List<IotTreeDO> iotTreeDOS = iotTreeMapper.selectListByOriginId(updateObj.getId(),"dept");
+        if (org.apache.commons.collections4.CollectionUtils.isEmpty(iotTreeDOS)) {
+            throw new ServiceException(ErrorCodeConstants.DEPT_NOT_FOUND.getCode(),"无该部门");
+        }
+        IotTreeDO iotTreeDO = iotTreeDOS.get(0);
+        iotTreeDO.setName(updateObj.getName());
+        iotTreeMapper.updateById(iotTreeDO);
         deptMapper.updateById(updateObj);
     }
 
     @Override
     @CacheEvict(cacheNames = RedisKeyConstants.DEPT_CHILDREN_ID_LIST,
             allEntries = true) // allEntries 清空所有缓存,因为操作一个部门,涉及到多个缓存
+    @Transactional(rollbackFor = Exception.class)
     public void deleteDept(Long id) {
         // 校验是否存在
         validateDeptExists(id);
@@ -86,6 +118,8 @@ public class DeptServiceImpl implements DeptService {
         }
         // 删除部门
         deptMapper.deleteById(id);
+        //删除pms树
+        iotTreeMapper.deleteByMap(ImmutableMap.of("origin_id", id));
     }
 
     @VisibleForTesting

+ 10 - 7
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/IotTreeService.java → yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/pms/IotTreeService.java

@@ -1,12 +1,15 @@
-package cn.iocoder.yudao.module.pms.service;
+package cn.iocoder.yudao.module.system.service.pms;
 
-import java.util.*;
 import javax.validation.*;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-import cn.iocoder.yudao.module.pms.controller.admin.vo.IotTreePageReqVO;
-import cn.iocoder.yudao.module.pms.controller.admin.vo.IotTreeSaveReqVO;
-import cn.iocoder.yudao.module.pms.dal.dataobject.IotTreeDO;
+import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
+import cn.iocoder.yudao.module.system.controller.pms.vo.IotTreeListReqVO;
+import cn.iocoder.yudao.module.system.controller.pms.vo.IotTreePageReqVO;
+import cn.iocoder.yudao.module.system.controller.pms.vo.IotTreeSaveReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.pms.IotTreeDO;
+
+import java.util.List;
 
 /**
  * pms树 Service 接口
@@ -14,7 +17,7 @@ import cn.iocoder.yudao.module.pms.dal.dataobject.IotTreeDO;
  * @author 芋道源码
  */
 public interface IotTreeService {
-
+    List<IotTreeDO> getIotTreeList(IotTreeListReqVO reqVO);
     /**
      * 创建pms树
      *

+ 22 - 16
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/IotTreeServiceImpl.java → yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/pms/IotTreeServiceImpl.java

@@ -1,22 +1,21 @@
-package cn.iocoder.yudao.module.pms.service;
+package cn.iocoder.yudao.module.system.service.pms;
 
-import cn.iocoder.yudao.module.pms.controller.admin.vo.IotTreePageReqVO;
-import cn.iocoder.yudao.module.pms.controller.admin.vo.IotTreeSaveReqVO;
-import cn.iocoder.yudao.module.pms.dal.dataobject.IotTreeDO;
-import cn.iocoder.yudao.module.pms.dal.mysql.IotTreeMapper;
-import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.*;
+import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.system.controller.pms.vo.IotTreeListReqVO;
+import cn.iocoder.yudao.module.system.controller.pms.vo.IotTreePageReqVO;
+import cn.iocoder.yudao.module.system.controller.pms.vo.IotTreeSaveReqVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.pms.IotTreeDO;
+import cn.iocoder.yudao.module.system.dal.mysql.pms.IotTreeMapper;
+import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
 
-
-import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_TREE_NOT_EXISTS;
+import javax.annotation.Resource;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
 
 /**
  * pms树 Service 实现类
@@ -30,6 +29,13 @@ public class IotTreeServiceImpl implements IotTreeService {
     @Resource
     private IotTreeMapper iotTreeMapper;
 
+    @Override
+    public List<IotTreeDO> getIotTreeList(IotTreeListReqVO reqVO) {
+        List<IotTreeDO> list = iotTreeMapper.selectList(reqVO);
+        list.sort(Comparator.comparing(IotTreeDO::getSort));
+        return list;
+    }
+
     @Override
     public Long createIotTree(IotTreeSaveReqVO createReqVO) {
         // 插入
@@ -58,7 +64,7 @@ public class IotTreeServiceImpl implements IotTreeService {
 
     private void validateIotTreeExists(Long id) {
         if (iotTreeMapper.selectById(id) == null) {
-            throw exception(IOT_TREE_NOT_EXISTS);
+            throw ServiceExceptionUtil.exception(ErrorCodeConstants.IOT_TREE_NOT_EXISTS);
         }
     }
 

+ 1 - 0
yudao-server/src/main/resources/application.yaml

@@ -280,6 +280,7 @@ yudao:
       - /admin-api/mp/open/** # 微信公众号开放平台,微信回调接口,无法携带租户编号
       - /admin-api/system/auth/social-login
       - /admin-api/system/dict-data/page
+      - /admin-api/rq/iot-tree/simple-list
       - /system/auth/social-login
     ignore-tables:
       - system_tenant