dongxin 1 год назад
Родитель
Сommit
edfcb23f82
18 измененных файлов с 591 добавлено и 64 удалено
  1. 33 0
      commons/src/main/java/com/jzg/commons/entity/enums/CodedEnum.java
  2. 47 0
      commons/src/main/java/com/jzg/commons/entity/enums/YesNoEnum.java
  3. 21 0
      commons/src/main/java/com/jzg/commons/entity/vo/UpAndDownVo.java
  4. 13 0
      commons/src/main/java/com/jzg/commons/util/tree/INode.java
  5. 21 0
      commons/src/main/java/com/jzg/commons/util/tree/IRecursionTree.java
  6. 60 0
      commons/src/main/java/com/jzg/commons/util/tree/TreeTool.java
  7. 13 11
      platform/src/main/java/com/jzg/controller/SysSystemController.java
  8. 69 0
      platform/src/main/java/com/jzg/controller/SysUserController.java
  9. 40 0
      platform/src/main/java/com/jzg/entity/vo/SysUserVo.java
  10. 20 7
      platform/src/main/java/com/jzg/service/SysSystemService.java
  11. 51 1
      platform/src/main/java/com/jzg/service/SysUserService.java
  12. 30 7
      platform/src/main/java/com/jzg/service/impl/SysSystemServiceImpl.java
  13. 112 2
      platform/src/main/java/com/jzg/service/impl/SysUserServiceImpl.java
  14. 17 5
      tenant/organization/src/main/java/com/jzg/organization/controller/DeptController.java
  15. 15 1
      tenant/organization/src/main/java/com/jzg/organization/entity/po/SysDept.java
  16. 20 0
      tenant/organization/src/main/java/com/jzg/organization/entity/vo/DeptVo.java
  17. 3 10
      tenant/organization/src/main/java/com/jzg/organization/service/SysDeptService.java
  18. 6 20
      tenant/organization/src/main/java/com/jzg/organization/service/impl/SysDeptServiceImpl.java

+ 33 - 0
commons/src/main/java/com/jzg/commons/entity/enums/CodedEnum.java

@@ -0,0 +1,33 @@
+package com.jzg.commons.entity.enums;
+
+import cn.hutool.core.convert.Convert;
+
+import java.util.Arrays;
+import java.util.Optional;
+
+public interface CodedEnum {
+
+    Integer getCode();
+
+    String getMessage();
+    public static <E extends Enum<?> & CodedEnum> Optional<E> codeOf(Class<E> enumClass, Object code) {
+        try {
+            return Arrays.stream(enumClass.getEnumConstants()).filter(e ->
+                    e.getCode().equals(Convert.toInt(code))
+                    || e.name().equalsIgnoreCase(Convert.toStr(code))
+                    || e.getMessage().equalsIgnoreCase(Convert.toStr(code))
+            ).findAny();
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    /**
+     * 获取数据类型,用于转换String或Integer
+     * @return
+     */
+    default Class<?> getDataType() {
+        return Integer.class;
+    }
+}
+

+ 47 - 0
commons/src/main/java/com/jzg/commons/entity/enums/YesNoEnum.java

@@ -0,0 +1,47 @@
+package com.jzg.commons.entity.enums;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * yes_no
+ * @author dongxin
+ *
+ */
+public enum YesNoEnum implements CodedEnum {
+	/**
+	 * 是
+	 */
+	YES(1, "是"),
+	/**
+	 * 否
+	 */
+	NO(0,"否")
+	;
+	private Integer code;
+	private String message;
+	/**
+	 * 未删除
+	 */
+	public final static int Y=1;
+	/**
+	 * 已删除
+	 */
+	public final static int N=0;
+	@JsonCreator
+    public static YesNoEnum forValue(Object value) {
+        return CodedEnum.codeOf(YesNoEnum.class, value).get();
+    }
+	YesNoEnum(int value, String name) {
+		this.code = value;
+		this.message = name;
+	}
+	@JsonValue
+	public Integer getCode() {
+		return code;
+	}
+	public String getMessage() {
+		return message;
+	}
+
+}

+ 21 - 0
commons/src/main/java/com/jzg/commons/entity/vo/UpAndDownVo.java

@@ -0,0 +1,21 @@
+package com.jzg.commons.entity.vo;
+
+import com.jzg.commons.entity.enums.YesNoEnum;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 启用/禁用实体
+ * dongxin
+ */
+@Data
+@Schema(description = "启用/禁用实体")
+public class UpAndDownVo {
+
+    @Schema(description = "id集合")
+    private List<Object> ids;
+    @Schema(description = "操作类型")
+    private YesNoEnum opType;
+}

+ 13 - 0
commons/src/main/java/com/jzg/commons/util/tree/INode.java

@@ -0,0 +1,13 @@
+package com.jzg.commons.util.tree;
+
+import java.util.List;
+/**
+ * 树型节点
+ * @author dongxin
+ */
+public interface INode  {
+    public Object getId();
+    public Object getParentId();
+    public String getName();
+    public List<INode> getChildren();
+}

+ 21 - 0
commons/src/main/java/com/jzg/commons/util/tree/IRecursionTree.java

@@ -0,0 +1,21 @@
+package com.jzg.commons.util.tree;
+
+/**
+ * 树型递归接口
+ * @author dongxin
+ */
+public interface IRecursionTree<T,R> {
+    /**
+     * 先序处理
+     * @param t
+     * @param res
+     */
+    void rowHandleBefore(T t, R res);
+
+    /**
+     * 后序处理
+     * @param t
+     * @param res
+     */
+    void rowHandleAfter(T t,R res);
+}

+ 60 - 0
commons/src/main/java/com/jzg/commons/util/tree/TreeTool.java

@@ -0,0 +1,60 @@
+package com.jzg.commons.util.tree;
+
+import cn.hutool.core.collection.CollectionUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+/**
+ * 树型工具
+ * @author dongxin
+ */
+public class TreeTool {
+    /**
+     * 列表转树
+     * @param list
+     * @param parentId
+     * @return
+     */
+    public static List<INode> listToTree(List<INode> list, Object parentId){
+        return listToTree(list, parentId, INode.class);
+    }
+    /**
+     * 列表转树
+     * @param list
+     * @param parentId
+     * @return
+     */
+    public static <T extends INode> List<T> listToTree(List<T> list, Object parentId, Class<T> clazz){
+        if(list == null || list.isEmpty()){
+            return new ArrayList<>();
+        }
+        List<T> res = list.stream().filter(item->{
+            return item.getParentId()!=null&&parentId!=null&&item.getParentId().equals(parentId);
+        }).collect(Collectors.toList());
+        if(!res.isEmpty()) {
+            res.forEach(item->{
+                item.getChildren().addAll(listToTree(list, item.getId(),clazz));
+            });
+        }
+        return res;
+    }
+
+    /**
+     * 递归树
+     * @param treeData 树型结构数据
+     * @param recursionTree 递归处理接口
+     * @param res 递归返回值
+     * @param <T>
+     * @param <R>
+     */
+    public static <T extends INode,R> void recursion(List<T> treeData, IRecursionTree<T,R> recursionTree, R res) {
+        if(CollectionUtil.isNotEmpty(treeData)) {
+            treeData.forEach(data->{
+                recursionTree.rowHandleBefore(data,res);
+                recursion((List<T>) data.getChildren(),recursionTree,res);
+                recursionTree.rowHandleAfter(data, res);
+            });
+        }
+    }
+}

+ 13 - 11
platform/src/main/java/com/jzg/controller/SysSystemController.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jzg.commons.annotation.Log;
 import com.jzg.commons.annotation.Log;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.entity.enums.BusinessType;
 import com.jzg.commons.entity.enums.BusinessType;
+import com.jzg.commons.entity.vo.UpAndDownVo;
 import com.jzg.entity.vo.SysSystemPermsVo;
 import com.jzg.entity.vo.SysSystemPermsVo;
 import com.jzg.entity.vo.SysSystemVo;
 import com.jzg.entity.vo.SysSystemVo;
 import com.jzg.service.SysSystemService;
 import com.jzg.service.SysSystemService;
@@ -105,17 +106,6 @@ public class SysSystemController {
         return HttpResult.ok("修改成功");
         return HttpResult.ok("修改成功");
     }
     }
 
 
-    /**
-     * 批量启用
-     */
-    @Log(title = "租户管理", businessType = BusinessType.UPDATE)
-    @Operation(summary = "状态修改 0-停用 1-在用")
-    @PutMapping("/changeStatus")
-    public HttpResult changeStatus(@RequestBody SysSystemVo sysSystemVo) {
-        AssertionUtils.isFail(StringUtils.isNull(sysSystemVo.getId()),"租户id不能为空!");
-        return HttpResult.ok(sysSystemService.changeStatus(sysSystemVo));
-    }
-
     /**
     /**
      * 删除租户
      * 删除租户
      *
      *
@@ -129,4 +119,16 @@ public class SysSystemController {
         return HttpResult.ok(sysSystemService.deleteWithValidByIds(List.of(ids)));
         return HttpResult.ok(sysSystemService.deleteWithValidByIds(List.of(ids)));
     }
     }
 
 
+    /**
+     * 启用/禁用租户
+     * @param upAndDownVo
+     * @return
+     */
+    @PostMapping("/upAndDown/")
+    @Operation(summary = "启用/禁用租户")
+    public HttpResult upAndDown(@RequestBody UpAndDownVo upAndDownVo) {
+        sysSystemService.upAndDown(upAndDownVo);
+        return HttpResult.ok();
+    }
+
 }
 }

+ 69 - 0
platform/src/main/java/com/jzg/controller/SysUserController.java

@@ -1,15 +1,25 @@
 package com.jzg.controller;
 package com.jzg.controller;
 
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jzg.commons.annotation.Log;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.enums.BusinessType;
+import com.jzg.commons.entity.vo.UpAndDownVo;
+import com.jzg.commons.util.AssertionUtils;
+import com.jzg.commons.util.StringUtils;
+import com.jzg.entity.vo.SysSystemVo;
 import com.jzg.entity.vo.SysUserVo;
 import com.jzg.entity.vo.SysUserVo;
 import com.jzg.service.SysUserService;
 import com.jzg.service.SysUserService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.constraints.NotEmpty;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
+import java.util.List;
+
 
 
 /**
 /**
  * 系统用户管理
  * 系统用户管理
@@ -47,4 +57,63 @@ public class SysUserController extends BaseController {
     }
     }
 
 
 
 
+    /**
+     * 平台用户添加
+     * @param sysUserVo
+     * @return
+     */
+    @Log(title = "平台用户管理", businessType = BusinessType.INSERT)
+    @Operation(summary = "平台用户添加")
+    @PostMapping("/userAdd")
+    public HttpResult userAdd(@Validated @RequestBody SysUserVo sysUserVo) {
+        // 手机号不允许重复
+        boolean mobileExists = sysUserService.isExistsMobile(sysUserVo.getMobile(), null);
+        AssertionUtils.isFail(mobileExists,"手机号重复!");
+        sysUserService.userAdd(sysUserVo);
+        return HttpResult.ok("新增成功");
+    }
+
+    /**
+     * 平台用户修改
+     * @param sysUserVo
+     * @return
+     */
+    @Log(title = "平台用户管理", businessType = BusinessType.UPDATE)
+    @Operation(summary = "平台用户修改")
+    @PutMapping("/userEdit")
+    public HttpResult userEdit(@Validated @RequestBody SysUserVo sysUserVo) {
+        AssertionUtils.isFail(StringUtils.isNull(sysUserVo.getId()),"平台用户id不能为空!");
+        // 手机号不允许重复
+        boolean mobileExists = sysUserService.isExistsMobile(sysUserVo.getMobile(), sysUserVo.getId());
+        AssertionUtils.isFail(mobileExists,"手机号重复!");
+        sysUserService.userEdit(sysUserVo);
+        return HttpResult.ok("修改成功");
+    }
+
+    /**
+     * 批量删除平台用户
+     *
+     * @param ids 主键串
+     */
+    @Log(title = "平台用户管理", businessType = BusinessType.DELETE)
+    @Operation(summary = "批量删除平台用户")
+    @DeleteMapping("/{ids}")
+    public HttpResult remove(@NotEmpty(message = "主键不能为空")
+                             @PathVariable String[] ids) {
+        // 校验用户是不是管理员
+
+        return HttpResult.ok(sysUserService.deleteWithValidByIds(List.of(ids)));
+    }
+
+    /**
+     * 启用/禁用平台用户
+     * @param upAndDownVo
+     * @return
+     */
+    @PostMapping("/upAndDown/")
+    @Operation(summary = "启用/禁用平台用户")
+    public HttpResult upAndDown(@RequestBody UpAndDownVo upAndDownVo) {
+        sysUserService.upAndDown(upAndDownVo);
+        return HttpResult.ok();
+    }
 }
 }

+ 40 - 0
platform/src/main/java/com/jzg/entity/vo/SysUserVo.java

@@ -2,7 +2,15 @@ package com.jzg.entity.vo;
 
 
 import com.jzg.commons.core.base.PageRequest;
 import com.jzg.commons.core.base.PageRequest;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Pattern;
+import jakarta.validation.constraints.Size;
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
 
 
 @Schema(description = "平台用户表VO")
 @Schema(description = "平台用户表VO")
 @Data
 @Data
@@ -19,4 +27,36 @@ public class SysUserVo extends PageRequest {
     @Schema(description = "用户信息搜索值")
     @Schema(description = "用户信息搜索值")
     private String searchValue;
     private String searchValue;
 
 
+    /** 用户名 */
+    @Schema(description = "用户名")
+    @Size(min=1,max=20,message = "用户名长度不能大于20")
+    @NotNull(message = "用户名不能为空")
+    private String username;
+
+    /** 密码 */
+    @Size(min=8,max=20,message = "密码长度不能大于20,不能小于8")
+    @Schema(description = "密码")
+    @NotNull(message = "登录密码不能为空")
+    private String password;
+
+    /** 手机号 */
+    @Schema(description = "手机号")
+    @Size(min=1,max=11,message = "手机号长度不能大于11")
+    @NotNull(message = "手机号不能为空")
+    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
+    private String mobile;
+
+    @NotEmpty(message = "角色列表不能为空")
+    @Schema(description = "角色列表")
+    private List<SysRoleVo> roleVoList;
+
+    @Data
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class SysRoleVo{
+
+        @Schema(description = "角色id")
+        private String id;
+    }
+
 }
 }

+ 20 - 7
platform/src/main/java/com/jzg/service/SysSystemService.java

@@ -1,6 +1,7 @@
 package com.jzg.service;
 package com.jzg.service;
 
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jzg.commons.entity.vo.UpAndDownVo;
 import com.jzg.entity.po.SysSystem;
 import com.jzg.entity.po.SysSystem;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.jzg.entity.po.SysSystemPerms;
 import com.jzg.entity.po.SysSystemPerms;
@@ -84,16 +85,28 @@ public interface SysSystemService extends IService<SysSystem> {
     public void sysEdit(SysSystemVo sysSystemVo);
     public void sysEdit(SysSystemVo sysSystemVo);
 
 
     /**
     /**
-     * 租户状态修改 (0-停用 1-在用)
-     * @param sysSystemVo
+     * 批量删除租户信息
+     * @param ids
      * @return
      * @return
      */
      */
-    public boolean changeStatus(SysSystemVo sysSystemVo);
+    public boolean deleteWithValidByIds(List<Long> ids);
 
 
     /**
     /**
-     * 批量删除租户信息
-     * @param ids
-     * @return
+     * 启用/禁用租户
+     * @param upAndDownVo
      */
      */
-    public boolean deleteWithValidByIds(List<@NotEmpty(message = "主键不能为空") Long> ids);
+    void upAndDown(UpAndDownVo upAndDownVo);
+
+    /**
+     * 禁用租户
+     * @param id
+     */
+    void unDeploy(String id);
+
+    /**
+     * 启用租户
+     * @param id
+     */
+    void reDeploy(String id);
+
 }
 }

+ 51 - 1
platform/src/main/java/com/jzg/service/SysUserService.java

@@ -1,9 +1,14 @@
 package com.jzg.service;
 package com.jzg.service;
 
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jzg.commons.entity.vo.UpAndDownVo;
 import com.jzg.entity.po.SysUser;
 import com.jzg.entity.po.SysUser;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.jzg.entity.vo.SysUserVo;
 import com.jzg.entity.vo.SysUserVo;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Pattern;
+import jakarta.validation.constraints.Size;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -27,5 +32,50 @@ public interface SysUserService extends IService<SysUser> {
      * @param id
      * @param id
      * @return
      * @return
      */
      */
-    public List<SysUser> queryById(String id);
+    public SysUser queryById(String id);
+
+    /**
+     * 平台用户手机号重复校验
+     * @param mobile
+     * @param id
+     * @return
+     */
+    boolean isExistsMobile(String mobile, String id);
+
+    /**
+     * 平台用户新增
+     * @param sysUserVo
+     */
+    void userAdd(SysUserVo sysUserVo);
+
+    /**
+     * 平台用户修改
+     * @param sysUserVo
+     */
+    void userEdit(SysUserVo sysUserVo);
+
+    /**
+     * 批量删除租户信息
+     * @param ids
+     * @return
+     */
+    boolean deleteWithValidByIds(List<String> ids);
+
+    /**
+     * 禁用平台用户
+     * @param id
+     */
+    void unDeploy(String id);
+
+    /**
+     * 启用平台用户
+     * @param id
+     */
+    void reDeploy(String id);
+
+    /**
+     * 启用/禁用平台用户
+     * @param upAndDownVo
+     */
+    void upAndDown(UpAndDownVo upAndDownVo);
 }
 }

+ 30 - 7
platform/src/main/java/com/jzg/service/impl/SysSystemServiceImpl.java

@@ -1,13 +1,15 @@
 package com.jzg.service.impl;
 package com.jzg.service.impl;
 
 
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.convert.Convert;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jzg.commons.entity.enums.YesNoEnum;
+import com.jzg.commons.entity.vo.UpAndDownVo;
 import com.jzg.entity.po.*;
 import com.jzg.entity.po.*;
 import com.jzg.entity.vo.SysSystemPermsVo;
 import com.jzg.entity.vo.SysSystemPermsVo;
 import com.jzg.entity.vo.SysSystemVo;
 import com.jzg.entity.vo.SysSystemVo;
-import com.jzg.commons.exception.SystemException;
 import com.jzg.mapper.*;
 import com.jzg.mapper.*;
 import com.jzg.service.SysSystemService;
 import com.jzg.service.SysSystemService;
 import com.jzg.util.PasswordUtils;
 import com.jzg.util.PasswordUtils;
@@ -195,16 +197,37 @@ public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem
     }
     }
 
 
     @Override
     @Override
-    public boolean changeStatus(SysSystemVo sysSystemVo) {
+    public boolean deleteWithValidByIds(List<Long> ids) {
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+
+    @Override
+    public void upAndDown(UpAndDownVo upAndDownVo) {
+        if(YesNoEnum.YES.equals(upAndDownVo.getOpType())) {
+            upAndDownVo.getIds().forEach(id->{
+                reDeploy(Convert.toStr(id));
+            });
+        } else {
+            upAndDownVo.getIds().forEach(id->{
+                unDeploy(Convert.toStr(id));
+            });
+        }
+    }
+
+    @Override
+    public void unDeploy(String id) {
         SysSystem sysSystem = new SysSystem();
         SysSystem sysSystem = new SysSystem();
-        sysSystem.setId(sysSystemVo.getId());
-        sysSystem.setAvailable(sysSystemVo.getAvailable());
-        return updateById(sysSystem);
+        sysSystem.setId(id);
+        sysSystem.setAvailable(YesNoEnum.NO.getCode());
+        baseMapper.updateById(sysSystem);
     }
     }
 
 
     @Override
     @Override
-    public boolean deleteWithValidByIds(List<Long> ids) {
-        return baseMapper.deleteByIds(ids) > 0;
+    public void reDeploy(String id) {
+        SysSystem sysSystem = new SysSystem();
+        sysSystem.setId(id);
+        sysSystem.setAvailable(YesNoEnum.YES.getCode());
+        baseMapper.updateById(sysSystem);
     }
     }
 
 
 }
 }

+ 112 - 2
platform/src/main/java/com/jzg/service/impl/SysUserServiceImpl.java

@@ -1,18 +1,30 @@
 package com.jzg.service.impl;
 package com.jzg.service.impl;
 
 
+import cn.hutool.core.convert.Convert;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jzg.commons.entity.enums.YesNoEnum;
+import com.jzg.commons.entity.vo.UpAndDownVo;
 import com.jzg.entity.po.SysRole;
 import com.jzg.entity.po.SysRole;
+import com.jzg.entity.po.SysSystem;
 import com.jzg.entity.po.SysUser;
 import com.jzg.entity.po.SysUser;
+import com.jzg.entity.po.SysUserRole;
 import com.jzg.entity.vo.SysUserVo;
 import com.jzg.entity.vo.SysUserVo;
 import com.jzg.mapper.SysRoleMapper;
 import com.jzg.mapper.SysRoleMapper;
 import com.jzg.mapper.SysUserMapper;
 import com.jzg.mapper.SysUserMapper;
+import com.jzg.mapper.SysUserRoleMapper;
 import com.jzg.service.SysUserService;
 import com.jzg.service.SysUserService;
 import com.jzg.commons.util.StringUtils;
 import com.jzg.commons.util.StringUtils;
+import com.jzg.util.PasswordUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -28,6 +40,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser>
 
 
     @Autowired
     @Autowired
     private SysRoleMapper sysRoleMapper;
     private SysRoleMapper sysRoleMapper;
+    @Autowired
+    private SysUserRoleMapper sysUserRoleMapper;
 
 
     @Override
     @Override
     public Page<SysUser> queryPage(Page page, SysUserVo sysUserVo) {
     public Page<SysUser> queryPage(Page page, SysUserVo sysUserVo) {
@@ -56,10 +70,106 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser>
     }
     }
 
 
     @Override
     @Override
-    public List<SysUser> queryById(String id) {
+    public SysUser queryById(String id) {
         SysUser user = this.baseMapper.selectById(id);
         SysUser user = this.baseMapper.selectById(id);
 
 
-        return List.of();
+        return user;
+    }
+
+    @Override
+    public boolean isExistsMobile(String mobile, String id) {
+        long count = this.count(new LambdaQueryWrapper<SysUser>()
+                .eq(SysUser::getMobile, mobile)
+                .ne(StringUtils.isNotNull(id),SysUser::getId, id)
+        );
+        return count > 0;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void userAdd(SysUserVo sysUserVo) {
+        SysUser user = new SysUser();
+        BeanUtils.copyProperties(sysUserVo, user);
+        user.setAccountStatus(1);
+        String salt = PasswordUtils.getSalt();
+        String encryptedPassword = PasswordUtils.encode(sysUserVo.getPassword(),salt);
+        user.setSalt(salt);
+        user.setPassword(encryptedPassword);
+        this.save(user);
+        // 角色信息关联
+        List<SysUserVo.SysRoleVo> roleList = sysUserVo.getRoleVoList();
+        List<SysUserRole> userRoles = new ArrayList<>();
+        roleList.forEach(role -> {
+            SysUserRole sysUserRole = new SysUserRole();
+            sysUserRole.setUserId(user.getId());
+            sysUserRole.setRoleId(role.getId());
+            userRoles.add(sysUserRole);
+        });
+        sysUserRoleMapper.insert(userRoles);
+    }
+
+    @Override
+    public void userEdit(SysUserVo sysUserVo) {
+        SysUser user = new SysUser();
+        BeanUtils.copyProperties(sysUserVo, user);
+        SysUser sysUser = this.getById(user.getId());
+        String encryptedPassword = PasswordUtils.encode(sysUserVo.getPassword(),sysUser.getSalt());
+        user.setPassword(encryptedPassword);
+        this.updateById(user);
+
+        // 删除当前用户与角色的关联信息
+        LambdaUpdateWrapper<SysUserRole> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.eq(SysUserRole::getUserId, user.getId());
+        sysUserRoleMapper.delete(updateWrapper);
+
+        // 角色信息关联
+        List<SysUserVo.SysRoleVo> roleList = sysUserVo.getRoleVoList();
+        List<SysUserRole> userRoles = new ArrayList<>();
+        roleList.forEach(role -> {
+            SysUserRole sysUserRole = new SysUserRole();
+            sysUserRole.setUserId(user.getId());
+            sysUserRole.setRoleId(role.getId());
+            userRoles.add(sysUserRole);
+        });
+        sysUserRoleMapper.insert(userRoles);
+    }
+
+    @Override
+    public boolean deleteWithValidByIds(List<String> ids) {
+        // 删除当前用户与角色的关联信息
+        LambdaUpdateWrapper<SysUserRole> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.in(SysUserRole::getUserId, ids);
+        sysUserRoleMapper.delete(updateWrapper);
+        return baseMapper.deleteByIds(ids) > 0;
+    }
+
+    @Override
+    public void unDeploy(String id) {
+        SysUser user = new SysUser();
+        user.setId(id);
+        user.setAccountStatus(YesNoEnum.NO.getCode());
+        baseMapper.updateById(user);
+    }
+
+    @Override
+    public void reDeploy(String id) {
+        SysUser user = new SysUser();
+        user.setId(id);
+        user.setAccountStatus(YesNoEnum.YES.getCode());
+        baseMapper.updateById(user);
+    }
+
+    @Override
+    public void upAndDown(UpAndDownVo upAndDownVo) {
+        if(YesNoEnum.YES.equals(upAndDownVo.getOpType())) {
+            upAndDownVo.getIds().forEach(id->{
+                reDeploy(Convert.toStr(id));
+            });
+        } else {
+            upAndDownVo.getIds().forEach(id->{
+                unDeploy(Convert.toStr(id));
+            });
+        }
     }
     }
 }
 }
 
 

+ 17 - 5
tenant/organization/src/main/java/com/jzg/organization/controller/DeptController.java

@@ -3,6 +3,7 @@ package com.jzg.organization.controller;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.organization.entity.po.SysDept;
 import com.jzg.organization.entity.po.SysDept;
+import com.jzg.organization.entity.vo.DeptVo;
 import com.jzg.organization.entity.vo.SysDeptVo;
 import com.jzg.organization.entity.vo.SysDeptVo;
 import com.jzg.organization.service.SysDeptService;
 import com.jzg.organization.service.SysDeptService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
@@ -65,13 +66,24 @@ public class DeptController extends BaseController {
     }
     }
 
 
 
 
+//    /**
+//     * 获取租户机构树列表
+//     */
+//    @Operation(summary = "租户机构树形查询")
+//    @GetMapping("/deptTree")
+//    public HttpResult deptTree(String systemCode) {
+//        return HttpResult.ok(sysDeptService.selectDeptTreeList(systemCode));
+//    }
+
     /**
     /**
-     * 获取租户机构树列表
+     * 查询租户机构树
+     * @param systemCode
+     * @return
      */
      */
-    @Operation(summary = "租户机构树形查询")
-    @GetMapping("/deptTree")
-    public HttpResult deptTree(String systemCode) {
-        return HttpResult.ok(sysDeptService.selectDeptTreeList(systemCode));
+    @PostMapping("/tree")
+    @Operation(summary = "查询租户机构树")
+    public HttpResult<List<DeptVo>> tree(String systemCode) {
+        return HttpResult.ok(sysDeptService.tree(systemCode));
     }
     }
 
 
 }
 }

+ 15 - 1
tenant/organization/src/main/java/com/jzg/organization/entity/po/SysDept.java

@@ -3,17 +3,20 @@ package com.jzg.organization.entity.po;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.jzg.commons.util.tree.INode;
 import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.Data;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
 
 
 @TableName(value = "sys_dept")
 @TableName(value = "sys_dept")
 @Data
 @Data
 @Schema(description = "机构管理")
 @Schema(description = "机构管理")
-public class SysDept implements Serializable {
+public class SysDept implements Serializable ,INode {
     @TableId(value = "id")
     @TableId(value = "id")
     @Schema(description = "主键")
     @Schema(description = "主键")
     private String id;
     private String id;
@@ -109,4 +112,15 @@ public class SysDept implements Serializable {
     @Schema(description = "子机构")
     @Schema(description = "子机构")
     private List<SysDept> children;
     private List<SysDept> children;
 
 
+    @TableField(exist = false)
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private List<INode> childrenNode;
+    @Override
+    public List<INode> getChildren() {
+        if(childrenNode == null) {
+            childrenNode = new ArrayList<>();
+        }
+        return childrenNode;
+    }
+
 }
 }

+ 20 - 0
tenant/organization/src/main/java/com/jzg/organization/entity/vo/DeptVo.java

@@ -0,0 +1,20 @@
+package com.jzg.organization.entity.vo;
+
+import com.jzg.organization.entity.po.SysDept;
+import com.mldong.modules.sys.entity.Dept;
+import io.swagger.annotations.ApiModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * <p>
+ * 部门
+ * </p>
+ *
+ * @author mldong
+ * @since 2023-09-20
+ */
+@Data
+@Schema(description = "部门VO")
+public class DeptVo extends SysDept {
+}

+ 3 - 10
tenant/organization/src/main/java/com/jzg/organization/service/SysDeptService.java

@@ -4,6 +4,7 @@ import cn.hutool.core.lang.tree.Tree;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.organization.entity.po.SysDept;
 import com.jzg.organization.entity.po.SysDept;
+import com.jzg.organization.entity.vo.DeptVo;
 import com.jzg.organization.entity.vo.SysDeptVo;
 import com.jzg.organization.entity.vo.SysDeptVo;
 
 
 import java.util.List;
 import java.util.List;
@@ -42,17 +43,9 @@ public interface SysDeptService extends IService<SysDept> {
     List<SysDept> getDeptTree(String deptId);
     List<SysDept> getDeptTree(String deptId);
 
 
     /**
     /**
-     * 查询租户部门树结构信息
+     * 查询租户机构树
      * @param systemCode
      * @param systemCode
      * @return
      * @return
      */
      */
-    List<Tree<String>> selectDeptTreeList(String systemCode);
-
-    /**
-     * 构建前端所需要下拉树结构
-     *
-     * @param depts 机构列表
-     * @return 下拉树结构列表
-     */
-    List<Tree<String>> buildDeptTreeSelect(List<SysDept> depts);
+    List<DeptVo> tree(String systemCode);
 }
 }

+ 6 - 20
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysDeptServiceImpl.java

@@ -1,5 +1,6 @@
 package com.jzg.organization.service.impl;
 package com.jzg.organization.service.impl;
 
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.lang.tree.Tree;
 import cn.hutool.core.lang.tree.Tree;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -7,7 +8,9 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.exception.SystemException;
 import com.jzg.commons.exception.SystemException;
+import com.jzg.commons.util.tree.TreeTool;
 import com.jzg.organization.entity.po.SysDept;
 import com.jzg.organization.entity.po.SysDept;
+import com.jzg.organization.entity.vo.DeptVo;
 import com.jzg.organization.entity.vo.SysDeptVo;
 import com.jzg.organization.entity.vo.SysDeptVo;
 import com.jzg.organization.mapper.SysDeptMapper;
 import com.jzg.organization.mapper.SysDeptMapper;
 import com.jzg.organization.service.SysDeptService;
 import com.jzg.organization.service.SysDeptService;
@@ -267,28 +270,11 @@ public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> impl
     }
     }
 
 
     @Override
     @Override
-    public List<Tree<String>> selectDeptTreeList(String systemCode) {
+    public List<DeptVo> tree(String systemCode) {
         LambdaQueryWrapper<SysDept> lqw = buildQueryWrapper(systemCode);
         LambdaQueryWrapper<SysDept> lqw = buildQueryWrapper(systemCode);
         List<SysDept> depts = sysDeptMapper.selectDeptList(lqw);
         List<SysDept> depts = sysDeptMapper.selectDeptList(lqw);
-        return buildDeptTreeSelect(depts);
-    }
-
-    /**
-     * 构建前端所需要下拉树结构
-     *
-     * @param depts 机构列表
-     * @return 下拉树结构列表
-     */
-    @Override
-    public List<Tree<String>> buildDeptTreeSelect(List<SysDept> depts) {
-        if (CollUtil.isEmpty(depts)) {
-            return CollUtil.newArrayList();
-        }
-        return TreeBuildUtils.build(depts, (dept, tree) ->
-                tree.setId(dept.getId())
-                        .setParentId(dept.getParentId())
-                        .setName(dept.getName())
-                        .setWeight(dept.getOrderNum()));
+        List<DeptVo> treeData = TreeTool.listToTree(BeanUtil.copyToList(depts, DeptVo.class),0L,DeptVo.class);
+        return treeData;
     }
     }
 
 
     private LambdaQueryWrapper<SysDept> buildQueryWrapper(String systemCode) {
     private LambdaQueryWrapper<SysDept> buildQueryWrapper(String systemCode) {