Explorar o código

1.wbs代码 2.项目合同段分配人员 3.改造角色岗位接口

liuyc %!s(int64=3) %!d(string=hai) anos
pai
achega
971d02f779
Modificáronse 26 ficheiros con 1079 adicións e 635 borrados
  1. 43 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormElementDTO.java
  2. 34 8
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/SaveUserInfoByProjectDTO.java
  3. 1 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsFormElement.java
  4. 130 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/TreeNodeVO.java
  5. 6 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsNodeTableVO.java
  6. 8 0
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Role.java
  7. 53 6
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java
  8. 46 37
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsFormElementController.java
  9. 196 156
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java
  10. 17 16
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.java
  11. 26 14
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml
  12. 5 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/SaveUserInfoByProjectMapper.xml
  13. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsFormElementMapper.java
  14. 4 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.java
  15. 10 5
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml
  16. 3 8
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IContractInfoService.java
  17. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsFormElementService.java
  18. 3 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeService.java
  19. 13 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java
  20. 36 13
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java
  21. 110 95
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java
  22. 101 97
      blade-service/blade-system/src/main/java/org/springblade/system/controller/RoleController.java
  23. 5 0
      blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.java
  24. 6 0
      blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.xml
  25. 1 1
      blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleService.java
  26. 215 166
      blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java

+ 43 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/FormElementDTO.java

@@ -1,6 +1,7 @@
 package org.springblade.manager.dto;
 
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -21,6 +22,48 @@ import java.util.List;
 @NoArgsConstructor
 public class FormElementDTO extends WbsTree {
     private static final long serialVersionUID = 1L;
+    /**
+     * wbs库id
+     */
+    @ApiModelProperty(value = "wbs库id",required = true)
+    private String wbsId;
+    /**
+     * 租户id
+     */
+    @ApiModelProperty(value = "租户id",required = true)
+    private String tenantId;
 
+    /**
+     * 父主键
+     */
+    @ApiModelProperty(value = "父主键id",required = true)
+    private Long parentId;
+
+    /**
+     * 部门类型
+     */
+    @ApiModelProperty(value = "节点类型",required = true)
+    private Integer deptCategory;
+
+    /**
+     * 部门名
+     */
+    @ApiModelProperty(value = "节点名称",required = true)
+    private String deptName;
+    /**
+     * 表单类型
+     */
+    @ApiModelProperty(value = "表单类型",required = true)
+    private Integer tableType;
+
+    /**
+     * 排序
+     */
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
+    /**
+     * 元素集合
+     */
     private List<WbsFormElement> elementList;
 }

+ 34 - 8
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/SaveUserInfoByProjectDTO.java

@@ -2,6 +2,7 @@ package org.springblade.manager.dto;
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -10,7 +11,7 @@ import org.springblade.core.mp.base.BaseEntity;
 import java.io.Serializable;
 
 /**
- * 项目合同人员保存传输对象实体类
+ * 项目合同人员分配传输对象实体类
  *
  * @author liuyc
  * @since 2022-05-09
@@ -18,20 +19,45 @@ import java.io.Serializable;
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
-@TableName("m_contract_user")
+@TableName("m_project_assignment_user")
 public class SaveUserInfoByProjectDTO extends BaseEntity implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
-     * cId
+     * 项目id
      */
-    @JsonProperty(value = "cId")
-    private String cId;
+    @JsonProperty(value = "projectId")
+    @ApiModelProperty(value = "projectId",required = true)
+    private String projectId;
 
     /**
-     * uId
+     * 合同id
      */
-    @JsonProperty(value = "uId")
-    private String uId;
+    @JsonProperty(value = "contractId")
+    @ApiModelProperty(value = "contractId",required = true)
+    private String contractId;
+
+    /**
+     * 角色id
+     */
+    @JsonProperty(value = "roleId")
+    @ApiModelProperty(value = "roleId",required = true)
+    private String roleId;
+
+    /**
+     * 岗位id
+     */
+    @JsonProperty(value = "postId")
+    @ApiModelProperty(value = "postId",required = true)
+    private String postId;
+
+    /**
+     * 用户id
+     */
+    @JsonProperty(value = "userId")
+    @ApiModelProperty(value = "userId",required = true)
+    private String userId;
+
+
 
 }

+ 1 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsFormElement.java

@@ -24,7 +24,7 @@ public class WbsFormElement extends BaseEntity {
 	/**
 	 *表单id
 	 */
-	@ApiModelProperty(value = "父id",required = true)
+	@ApiModelProperty(value = "父id",required = false)
 	@JsonProperty(value = "fId")
 	private String fId;
 

+ 130 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/TreeNodeVO.java

@@ -0,0 +1,130 @@
+package org.springblade.manager.vo;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import org.springblade.core.tool.node.BaseNode;
+import org.springblade.core.tool.node.TreeNode;
+
+
+/**
+ * 重写了TreeNode实体,增加了type字段用于返回给前端
+ */
+public class TreeNodeVO extends BaseNode<TreeNode> {
+    private static final long serialVersionUID = 1L;
+    private String title;
+    @JsonSerialize(
+            using = ToStringSerializer.class
+    )
+    private Long key;
+    @JsonSerialize(
+            using = ToStringSerializer.class
+    )
+    private Long value;
+
+    //新增字段
+    private Integer type;
+
+    public TreeNodeVO() {
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public String getTitle() {
+        return this.title;
+    }
+
+    public Long getKey() {
+        return this.key;
+    }
+
+    public Long getValue() {
+        return this.value;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public void setTitle(final String title) {
+        this.title = title;
+    }
+
+    public void setKey(final Long key) {
+        this.key = key;
+    }
+
+    public void setValue(final Long value) {
+        this.value = value;
+    }
+
+    public String toString() {
+        return "TreeNode(type="+ this.getType()+", title=" + this.getTitle() + ", key=" + this.getKey() + ", value=" + this.getValue() + ")";
+    }
+
+    public boolean equals(final Object o) {
+        if (o == this) {
+            return true;
+        } else if (!(o instanceof TreeNode)) {
+            return false;
+        } else {
+            TreeNodeVO other = (TreeNodeVO)o;
+            if (!other.canEqual(this)) {
+                return false;
+            } else {
+                label47: {
+                    Object this$key = this.getKey();
+                    Object other$key = other.getKey();
+                    if (this$key == null) {
+                        if (other$key == null) {
+                            break label47;
+                        }
+                    } else if (this$key.equals(other$key)) {
+                        break label47;
+                    }
+
+                    return false;
+                }
+
+                Object this$value = this.getValue();
+                Object other$value = other.getValue();
+                if (this$value == null) {
+                    if (other$value != null) {
+                        return false;
+                    }
+                } else if (!this$value.equals(other$value)) {
+                    return false;
+                }
+
+                Object this$title = this.getTitle();
+                Object other$title = other.getTitle();
+                if (this$title == null) {
+                    if (other$title != null) {
+                        return false;
+                    }
+                } else if (!this$title.equals(other$title)) {
+                    return false;
+                }
+
+                return true;
+            }
+        }
+    }
+
+    protected boolean canEqual(final Object other) {
+        return other instanceof TreeNode;
+    }
+
+    public int hashCode() {
+        boolean PRIME = true;
+        int result = 1;
+        Object $key = this.getKey();
+        result = result * 59 + ($key == null ? 43 : $key.hashCode());
+        Object $value = this.getValue();
+        result = result * 59 + ($value == null ? 43 : $value.hashCode());
+        Object $title = this.getTitle();
+        result = result * 59 + ($title == null ? 43 : $title.hashCode());
+        return result;
+    }
+}

+ 6 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsNodeTableVO.java

@@ -40,5 +40,11 @@ public class WbsNodeTableVO implements Serializable {
 	 */
 	private Boolean isCreateTable = true;
 
+	/**
+	 * 所属方
+	 */
+	private String tableOwner;
+
+
 
 }

+ 8 - 0
blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Role.java

@@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModel;
@@ -87,4 +88,11 @@ public class Role implements Serializable {
 	private Integer isDeleted;
 
 
+	/*//**
+	 * 岗位id
+	 *//*
+	@ApiModelProperty(value = "岗位id")
+	@JsonProperty(value = "pId")
+	private String pId;*/
+
 }

+ 53 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java

@@ -25,6 +25,7 @@ import lombok.AllArgsConstructor;
 
 import javax.validation.Valid;
 
+import org.apache.commons.lang.StringUtils;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
@@ -171,11 +172,11 @@ public class ContractInfoController extends BladeController {
     }
 
     /**
-     * 根据项目id、合同id、角色id、岗位id查询当前用户
+     * 根据项目id、合同id、角色id、岗位id查询当前分配的用户
      */
     @PostMapping("/findAllUserByCondition")
     @ApiOperationSupport(order = 9)
-    @ApiOperation(value = "查询当前项目合同角色岗位的用户", notes = "传入目id、合同id、角色id、岗位id")
+    @ApiOperation(value = "查询当前项目合同角色岗位的用户", notes = "传入目id、合同id、角色id、岗位id")
     public R<List<User>> findAllUserByCondition(@RequestBody FindAllUserByConditionDTO values) {
         List<User> users = contractInfoService.findAllUserByCondition(values);
         if (users.size() > 0) {
@@ -185,8 +186,22 @@ public class ContractInfoController extends BladeController {
     }
 
     /**
-     * 查询当前岗位下所有用户信息
+     * 根据姓名查询用户
      */
+    @GetMapping("/findUserByName")
+    @ApiOperationSupport(order = 14)
+    @ApiOperation(value = "根据姓名模糊查询用户", notes = "传入用户姓名")
+    public R<List<User>> findUserByName(@RequestParam("name") String name){
+        List<User> userByName = contractInfoService.findUserByName(name);
+        if (userByName.size() >0){
+            return R.data(userByName);
+        }
+        return R.success("未查询到信息");
+    }
+
+    /**
+     * 查询当前岗位下所有用户信息
+     *//*
     @GetMapping("/findUserInfoByCondition")
     @ApiOperationSupport(order = 10)
     @ApiOperation(value = "查询当前角色岗位下的用户信息", notes = "传入角色id、岗位id")
@@ -198,14 +213,14 @@ public class ContractInfoController extends BladeController {
             return R.data(users);
         }
         return R.fail("未查询到数据");
-    }
+    }*/
 
     /**
-     * 项目分配用户保存
+     * 项目分配用户批量保存
      */
     @PostMapping("/saveUserInfoByProject")
     @ApiOperationSupport(order = 11)
-    @ApiOperation(value = "保存当前用户与合同段关联信息", notes = "传入cid、uid")
+    @ApiOperation(value = "保存当前用户与合同段关联信息", notes = "传入项目id、合同id、角色id、岗位id、用户id List集合")
     public R saveUserInfoByProject(@RequestBody List<SaveUserInfoByProjectDTO> list) {
 //        list.stream().forEach(System.out::print);
         if (list.size()>0){
@@ -217,5 +232,37 @@ public class ContractInfoController extends BladeController {
         return R.fail("保存失败");
     }
 
+    /**
+     * 项目分配用户逻辑删除
+     */
+    @PostMapping("/removeUsersByIds")
+    @ApiOperationSupport(order = 12)
+    @ApiOperation(value = "逻辑删除", notes = "传入当前列表用户的记录ids")
+    public R removeUsersByIds(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+        return R.status(saveUserInfoByProject.deleteLogic(Func.toLongList(ids)));
+    }
+
+    /**
+     * 重置密码
+     */
+    @PostMapping("/updatePasswordByUserId")
+    @ApiOperationSupport(order = 13)
+    @ApiOperation(value = "重置密码", notes = "传入当前用户的userId,新password")
+    public R updatePasswordByUserId(String userId,String password){
+        if (StringUtils.isNotEmpty(userId)){
+            //todo 密码重置后未加密
+            Boolean b = contractInfoService.updatePasswordByUserId(userId,password);
+            if (b){
+                return R.success("重置密码成功");
+            }
+        }return R.fail("重置密码失败");
+    }
+
+
+
+
+
+
+
 
 }

+ 46 - 37
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsFormElementController.java

@@ -19,9 +19,11 @@ package org.springblade.manager.controller;
 import io.swagger.annotations.*;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
+
 import javax.validation.Valid;
 
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.support.Kv;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.WbsFormElementDTO;
 import org.springblade.manager.entity.WbsFormElement;
@@ -30,6 +32,8 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springblade.manager.service.IWbsFormElementService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.Map;
+
 /**
  * wbs表单元素 控制器
  *
@@ -42,49 +46,54 @@ import org.springblade.core.boot.ctrl.BladeController;
 @Api(value = "wbs表单元素", tags = "wbs表单元素接口")
 public class WbsFormElementController extends BladeController {
 
-	private final IWbsFormElementService wbsFormElementService;
+    private final IWbsFormElementService wbsFormElementService;
 
-	/**
-	 * 新增 wbs表单元素
-	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "新增", notes = "传入wbsFormElement")
-	public R save(@Valid @RequestBody WbsFormElementDTO wbsFormElement) {
-		return R.status(wbsFormElementService.save(wbsFormElement));
-	}
+    /**
+     * 新增 wbs表单元素
+     */
+    @PostMapping("/save")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "新增", notes = "传入wbsFormElement")
+    public R save(@Valid @RequestBody WbsFormElement wbsFormElement) {
+        boolean result = wbsFormElementService.save(wbsFormElement);
+        Long id = wbsFormElement.getId();
+        if (result) {
+            return R.data(id, "新增成功");
+        }
+        return R.fail("新增失败");
+    }
 
 
-	/**
-	 * 修改 wbs表单元素
-	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "修改", notes = "传入wbsFormElement")
-	public R update(@Valid @RequestBody WbsFormElement wbsFormElement) {
-		return R.status(wbsFormElementService.updateById(wbsFormElement));
-	}
+    /**
+     * 修改 wbs表单元素
+     */
+    @PostMapping("/update")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "修改", notes = "传入wbsFormElement")
+    public R update(@Valid @RequestBody WbsFormElement wbsFormElement) {
+        return R.status(wbsFormElementService.updateById(wbsFormElement));
+    }
 
 
-	/**
-	 * 新增或修改 wbs表单元素
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "新增或修改", notes = "传入wbsFormElement")
-	public R submit(@Valid @RequestBody WbsFormElement wbsFormElement) {
-		return R.status(wbsFormElementService.saveOrUpdate(wbsFormElement));
-	}
+    /**
+     * 新增或修改 wbs表单元素
+     */
+    @PostMapping("/submit")
+    @ApiOperationSupport(order = 3)
+    @ApiOperation(value = "新增或修改", notes = "传入wbsFormElement")
+    public R submit(@Valid @RequestBody WbsFormElement wbsFormElement) {
+        return R.status(wbsFormElementService.saveOrUpdate(wbsFormElement));
+    }
 
-	/**
-	 * 删除 wbs表单元素
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		return R.status(wbsFormElementService.deleteLogic(Func.toLongList(ids)));
-	}
+    /**
+     * 删除 wbs表单元素
+     */
+    @PostMapping("/remove")
+    @ApiOperationSupport(order = 4)
+    @ApiOperation(value = "逻辑删除", notes = "传入ids")
+    public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+        return R.status(wbsFormElementService.deleteLogic(Func.toLongList(ids)));
+    }
 
 
 }

+ 196 - 156
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java

@@ -21,13 +21,17 @@ import io.swagger.annotations.*;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
 import oracle.jdbc.proxy.annotation.Post;
+import org.apache.commons.lang.StringUtils;
+import org.bouncycastle.crypto.tls.MACAlgorithm;
 import org.springblade.core.cache.utils.CacheUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.support.Kv;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.manager.dto.FormElementDTO;
+import org.springblade.manager.dto.WbsFormElementDTO;
 import org.springblade.manager.dto.WbsTreeDTO;
 import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.entity.WbsTree;
@@ -44,7 +48,10 @@ import org.springblade.manager.wrapper.WbsTreeWrapper;
 import org.springblade.manager.service.IWbsTreeService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
 
@@ -60,162 +67,195 @@ import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
 @Api(value = "wbs动态库节点", tags = "wbs动态库节点接口")
 public class WbsTreeController extends BladeController {
 
-	private final IWbsTreeService wbsTreeService;
-	private final IWbsFormElementService wbsFormElementService;
-
-	/**
-	 * 详情
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "详情", notes = "传入WbsTreeId,请求头token")
-	@ApiImplicitParam(name = "id", value = "id", required = true)
-	public R<WbsTreeVO> detail(WbsTree wbsTree) {
-		WbsTree detail = wbsTreeService.getOne(Condition.getQueryWrapper(wbsTree));
-		if (detail != null) {
-			return R.data(WbsTreeWrapper.build().entityVO(detail));
-		}
-		return R.fail(200, "未查询到信息");
-	}
-
-	/**
-	 * 懒加载获取项目节点树形结构
-	 */
-	@GetMapping("/lazy-tree")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "懒加载节点树形结构", notes = "传入wbsId,parentId,请求头token")
-	@ApiImplicitParams(value = {
-		@ApiImplicitParam(name = "wbsId", value = "wbsId", required = true),
-		@ApiImplicitParam(name = "parentId", value = "父级id", required = true),
-	})
-	public R<List<WbsTreeVO>> lazyTree(String wbsId, Long parentId, BladeUser bladeUser) {
-		List<WbsTreeVO> tree = wbsTreeService.lazyTree(Func.toStrWithEmpty(wbsId, bladeUser.getTenantId()), parentId);
-		if (tree != null && tree.size() > 0) {
-			return R.data(tree);
-		}
-		return R.fail(200, "未查询到信息");
-	}
-
-	/**
-	 * 获取项目节点树形结构 (新增、修改加载)
-	 *
-	 * @return
-	 */
-	@GetMapping("/tree")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "节点树形结构", notes = "传入tenantId,请求头token")
-	@ApiImplicitParams(value = {
-		@ApiImplicitParam(name = "tenantId", value = "租户id", required = true),
-	})
-	public R<List<WbsTreeVO>> tree(String tenantId, BladeUser bladeUser) {
-		List<WbsTreeVO> tree = wbsTreeService.tree(Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()));
-		if (tree != null && tree.size() > 0) {
-			return R.data(tree);
-		}
-		return R.fail(200, "未查询到信息");
-	}
-
-	/**
-	 * 新增或修改
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "新增或修改", notes = "WbsTreeDTO")
-	public R submit(@RequestBody WbsTreeDTO WbsTreeDTO) {
-		if (wbsTreeService.submit(WbsTreeDTO)) {
-			CacheUtil.clear(SYS_CACHE);
-			// 返回懒加载树更新节点所需字段
-			Kv kv = Kv.create().set("id", String.valueOf(WbsTreeDTO.getId())).set("tenantId", WbsTreeDTO.getTenantId())
-				.set("deptCategoryName", DictCache.getValue(DictEnum.ORG_CATEGORY, WbsTreeDTO.getDeptCategory()));
-			return R.data(kv);
-		}
-		return R.fail("操作失败");
-	}
-
-
-
-	/**
-	 * 逻辑删除
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		return R.status(wbsTreeService.deleteLogic(Func.toLongList(ids)));
-	}
-
-
-	/**
-	 * 表单查询(根据节点ID查询当前表单)
-	 */
-	@GetMapping("/selectByNodeTable")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "表单查询", notes = "传入父节点id")
-	public R<List<WbsNodeTableVO>> selectByNodeTable(@ApiParam(value = "父节点id", required = true) @RequestParam String id) {
-		List<WbsNodeTableVO> rs = wbsTreeService.selectByNodeTable(id);
-		if (!("").equals(rs) && rs.size() > 0) {
-			return R.data(rs);
-		}
-		return R.fail(200, "未查询到数据");
-	}
-
-	/**
-	 * 删除表单
-	 */
-	@GetMapping("/removeTableById")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "表单删除", notes = "传入id")
-	@ApiImplicitParam(name = "id",value = "表单id",required = true)
-	public R removeTableById(@RequestParam("id") String id) {
-		//todo 先查询表单下是否有元素,有元素则无法删除
-		boolean restul = wbsTreeService.removeTableById(id);
-		if (restul){
-			return R.success("删除成功");
-		}
-		return R.fail("删除失败");
-	}
-
-	/**
-	 * 表单元素列表
-	 */
-	@GetMapping("/selectFormElements")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "表单元素列表", notes = "传入表单id")
-	@ApiImplicitParam(name = "id",value = "表单id",required = true)
-	public R<List<WbsFormElement>> selectFormElements(@RequestParam("id") String id) {
-		List<WbsFormElement> wbsFormElements = wbsTreeService.selectFormElements(id);
-		if (wbsFormElements.size()>0 && !"".equals(wbsFormElements)){
-			return R.data(wbsFormElements);
-		}
-		return R.data(wbsFormElements,"未查询到元素");
-	}
-
-
-	/**
-	 * 新增表单,元素
-	 */
-	@PostMapping("/saveFormAndElement")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "表单、元素新增", notes = "传入WbsTree、WbsFormElement")
-	@ApiImplicitParams(value = {
-			@ApiImplicitParam(name = "deptName",value = "表单名称",required = true),
-			@ApiImplicitParam(name = "wbsId",value = "wbs库id",required = true),
-			@ApiImplicitParam(name = "tenantId",value = "租户id",required = true),
-			@ApiImplicitParam(name = "parentId",value = "父主键id",required = true),
-			@ApiImplicitParam(name = "deptCategory",value = "节点类型",required = true),
-			@ApiImplicitParam(name = "sort",value = "排序"),
-			@ApiImplicitParam(name = "ElementList",value = "元素集合")
-	})
-	@Transactional(rollbackFor = Exception.class)
-	public R saveFormElement(@RequestBody FormElementDTO elementDTO){
-		//创建表单
-		boolean b1 = wbsTreeService.submit2(elementDTO);
-		//批量新增元素
-		boolean b2 = wbsFormElementService.saveBatch(elementDTO.getElementList());
-		if (b1 && b2){
-			return R.success("新增成功");
-		}return R.fail("新增失败");
-	}
+    private final IWbsTreeService wbsTreeService;
+    private final IWbsFormElementService wbsFormElementService;
+
+    /**
+     * 详情
+     */
+    @GetMapping("/detail")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "详情", notes = "传入WbsTreeId,请求头token")
+    @ApiImplicitParam(name = "id", value = "id", required = true)
+    public R<WbsTreeVO> detail(WbsTree wbsTree) {
+        WbsTree detail = wbsTreeService.getOne(Condition.getQueryWrapper(wbsTree));
+        if (detail != null) {
+            return R.data(WbsTreeWrapper.build().entityVO(detail));
+        }
+        return R.fail(200, "未查询到信息");
+    }
+
+    /**
+     * 懒加载获取项目节点树形结构
+     */
+    @GetMapping("/lazy-tree")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "懒加载节点树形结构", notes = "传入wbsId,parentId,请求头token")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "wbsId", value = "wbsId", required = true),
+            @ApiImplicitParam(name = "parentId", value = "父级id", required = true),
+    })
+    public R<List<WbsTreeVO>> lazyTree(String wbsId, Long parentId, BladeUser bladeUser,String tenantId) {
+        List<WbsTreeVO> tree = wbsTreeService.lazyTree(wbsId, Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()), parentId);
+        if (tree != null && tree.size() > 0) {
+            return R.data(tree);
+        }
+        return R.fail(200, "未查询到信息");
+    }
+
+    /**
+     * 获取项目节点树形结构 (新增、修改加载)
+     *
+     * @return
+     */
+    @GetMapping("/tree")
+    @ApiOperationSupport(order = 3)
+    @ApiOperation(value = "节点树形结构", notes = "传入tenantId,请求头token")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "tenantId", value = "租户id", required = true),
+    })
+    public R<List<WbsTreeVO>> tree(String tenantId, BladeUser bladeUser) {
+        List<WbsTreeVO> tree = wbsTreeService.tree(Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()));
+        if (tree != null && tree.size() > 0) {
+            return R.data(tree);
+        }
+        return R.fail(200, "未查询到信息");
+    }
+
+    /**
+     * 新增或修改
+     */
+    @PostMapping("/submit")
+    @ApiOperationSupport(order = 4)
+    @ApiOperation(value = "新增或修改", notes = "WbsTreeDTO")
+    public R submit(@RequestBody WbsTreeDTO WbsTreeDTO) {
+        if (wbsTreeService.submit(WbsTreeDTO)) {
+            CacheUtil.clear(SYS_CACHE);
+            // 返回懒加载树更新节点所需字段
+            Kv kv = Kv.create().set("id", String.valueOf(WbsTreeDTO.getId())).set("tenantId", WbsTreeDTO.getTenantId())
+                    .set("deptCategoryName", DictCache.getValue(DictEnum.ORG_CATEGORY, WbsTreeDTO.getDeptCategory()));
+            return R.data(kv);
+        }
+        return R.fail("操作失败");
+    }
+
+
+    /**
+     * 逻辑删除
+     */
+    @PostMapping("/remove")
+    @ApiOperationSupport(order = 5)
+    @ApiOperation(value = "逻辑删除", notes = "传入ids")
+    public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+        return R.status(wbsTreeService.deleteLogic(Func.toLongList(ids)));
+    }
+
+
+    /**
+     * 表单查询(根据节点ID查询当前表单)
+     */
+    @GetMapping("/selectByNodeTable")
+    @ApiOperationSupport(order = 6)
+    @ApiOperation(value = "表单查询", notes = "传入父节点id")
+    public R<List<WbsNodeTableVO>> selectByNodeTable(@ApiParam(value = "父节点id", required = true) @RequestParam String id) {
+        List<WbsNodeTableVO> rs = wbsTreeService.selectByNodeTable(id);
+        if (!("").equals(rs) && rs.size() > 0) {
+            return R.data(rs);
+        }
+        return R.fail(200, "未查询到数据");
+    }
+
+    /**
+     * 删除表单
+     */
+    @GetMapping("/removeTableById")
+    @ApiOperationSupport(order = 7)
+    @ApiOperation(value = "表单删除", notes = "传入id")
+    @ApiImplicitParam(name = "id", value = "表单id", required = true)
+    public R removeTableById(@RequestParam("id") String id) {
+        if (StringUtils.isNotEmpty(id)) {
+            // 先查询表单下是否有元素,有元素则无法删除
+            List<WbsFormElement> wbsFormElements = wbsTreeService.selectFormElements(id);
+            if (wbsFormElements.size() > 0) {
+                return R.fail("删除失败,请先移除表单中的元素!");
+            }
+            // 删除表单
+            boolean restul = wbsTreeService.removeTableById(id);
+            if (restul) {
+                return R.success("删除成功");
+            }
+        }
+        return R.fail("删除失败");
+    }
+
+    /**
+     * 表单元素列表
+     */
+    @GetMapping("/selectFormElements")
+    @ApiOperationSupport(order = 7)
+    @ApiOperation(value = "表单元素列表", notes = "传入表单id")
+    @ApiImplicitParam(name = "id", value = "表单id", required = true)
+    public R<List<WbsFormElement>> selectFormElements(@RequestParam("id") String id) {
+        List<WbsFormElement> wbsFormElements = null;
+        if (StringUtils.isNotEmpty(id)) {
+            wbsFormElements = wbsTreeService.selectFormElements(id);
+            if (wbsFormElements.size() > 0 && !"".equals(wbsFormElements)) {
+                return R.data(wbsFormElements);
+            }
+        }
+        return R.data(wbsFormElements, "未查询到元素");
+    }
+
+
+    /**
+     * 新增表单与元素
+     */
+    @PostMapping("/saveFormAndElement")
+    @ApiOperationSupport(order = 8)
+    @ApiOperation(value = "表单与元素新增", notes = "传入FormElementDTO")
+    @Transactional(rollbackFor = Exception.class)
+    public R saveFormElement(@RequestBody FormElementDTO formElementDTO) {
+        //创建表单
+        boolean b1 = wbsTreeService.submit2(formElementDTO);
+        //查询当前新建表单的id //todo 通过表单名字查询 表单名不是唯一 待商榷
+        String tableId = wbsTreeService.selectTableIdByTableName(formElementDTO.getDeptName());
+
+        if (tableId.equals("-1")){
+            return R.fail("表单名已经存在,请重新填写表单名");
+        }
+
+        List<WbsFormElement> elementList = formElementDTO.getElementList();
+
+        for (WbsFormElement wbsFormElement : elementList) {
+            wbsFormElement.setFId(tableId);
+        }
+
+        //批量新增元素
+        boolean b2 = wbsFormElementService.saveBatch(elementList);
+        if (b1) {
+            if (b2) {
+                return R.success("新增表单,元素成功");
+            }
+            return R.success("新增表单成功");
+        }
+        return R.fail("新增失败");
+    }
+
+    /**
+     * 编辑表单元素批量修改
+     */
+    @PostMapping("/updateBatchElements")
+    @ApiOperationSupport(order = 9)
+    @ApiOperation(value = "编辑表单元素批量修改", notes = "传入WbsFormElement")
+    @ApiImplicitParam(name = "ids", value = "元素的id集合", required = true)
+    public R updateBatchElements(@RequestBody List<WbsFormElement> wbsFormElementList) {
+//      Boolean b1 = wbsFormElementService.selectElementsById(wbsFormElementList);
+        boolean b = wbsFormElementService.updateBatchById(wbsFormElementList);
+        if (b) {
+            return R.success("修改成功");
+        }
+        return R.fail("修改失败");
+    }
 
 }
 

+ 17 - 16
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.java

@@ -37,27 +37,28 @@ import java.util.List;
  */
 public interface ContractInfoMapper extends BaseMapper<ContractInfo> {
 
-	/**
-	 * 自定义分页
-	 *
-	 * @param page
-	 * @param contractInfo
-	 * @return
-	 */
-	List<ContractInfoVO> selectContractInfoPage(IPage page, ContractInfoVO contractInfo);
+    /**
+     * 自定义分页
+     *
+     * @param page
+     * @param contractInfo
+     * @return
+     */
+    List<ContractInfoVO> selectContractInfoPage(IPage page, ContractInfoVO contractInfo);
 
-	List<ContractlnfoCountVO> selectContractInfoCount();
+    List<ContractlnfoCountVO> selectContractInfoCount();
 
-	List<ContractInfo> selectContractInfoPageByPid(@Param("pid") String pid);
+    List<ContractInfo> selectContractInfoPageByPid(@Param("pid") String pid);
 
     List<CRolePostVO> findJobByRoleId(@Param("id") String id);
 
-	List<User> findAllUserByCondition(@Param("Values") FindAllUserByConditionDTO values);
+    List<User> findAllUserByCondition(@Param("Values") FindAllUserByConditionDTO values);
 
-	List<User> findUserInfoByCondition(@Param("rId") String rId,
-									   @Param("pId") String pId,
-									   @Param("userName") String userName);
+    List<User> findUserInfoByCondition(@Param("rId") String rId,
+                                       @Param("pId") String pId,
+                                       @Param("userName") String userName);
 
-	Integer insertProjectAndContractAndUser(@Param("cId") String cId ,
-											@Param("uId") String uId);
+    List<User> findUserByName(@Param("name") String name);
+
+    Integer updatePasswordByUserId(@Param("userId") String userId, @Param("password") String password);
 }

+ 26 - 14
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ContractInfoMapper.xml

@@ -38,10 +38,12 @@
         <result column="contract_name" property="contractName"/>
         <result column="contract_counts" property="contractCounts"/>
     </resultMap>
+    <update id="updatePasswordByUserId">
+
+        update blade_user set password = #{password} where id = #{userId}
+
+    </update>
 
-    <insert id="insertProjectAndContractAndUser">
-        insert into m_contract_user (c_id,u_id) values (#{cId,jdbcType=VARCHAR},#{uId,jdbcType=VARCHAR})
-    </insert>
 
     <select id="selectContractInfoPage" resultMap="contractInfoResultMap">
         select c.* ,p.project_name as project_name from m_contract_info c INNER JOIN m_project_info p on c.p_id=p.id where c.is_deleted = 0
@@ -56,25 +58,30 @@
     </select>
 
     <select id="findJobByRoleId" resultType="org.springblade.manager.vo.CRolePostVO">
-        select p.id,p.post_name from blade_post p INNER JOIN m_role_post m ON p.id = m.pid
-        INNER JOIN blade_role r ON r.id = m.rid WHERE p.is_deleted = 0 and p.`status`= 1
+        select p.id,p.post_name from blade_post p INNER JOIN m_role_post m ON p.id = m.p_id
+        INNER JOIN blade_role r ON r.id = m.r_id WHERE p.is_deleted = 0 and p.`status`= 1
         and r.id = #{id}
     </select>
 
     <select id="findAllUserByCondition" resultType="org.springblade.system.user.entity.User">
         SELECT
-        pi.project_name,ci.contract_name,u.`name`,u.account,u.`password`
-        FROM blade_user u INNER JOIN blade_role r ON u.role_id=r.id
-        INNER JOIN blade_post p ON p.id= u.post_id
-        INNER JOIN m_contract_user cu ON u.id = cu.u_id
-        INNER JOIN m_contract_info ci ON ci.id = cu.c_id
-        INNER JOIN m_project_info pi ON ci.p_id = pi.id
-        WHERE u.is_deleted = 0 AND u.`status` = 1
+        mpau.id,pi.project_name,ci.contract_name,u.id as uid,u.`name`,u.account,u.`password`,u.`phone`
+        FROM
+        blade_user u
+        INNER JOIN m_project_assignment_user mpau ON u.id = mpau.user_id
+        INNER JOIN blade_post p ON p.id = mpau.post_id
+        INNER JOIN blade_role r ON r.id = mpau.role_id
+        INNER JOIN m_contract_info ci ON ci.id = mpau.contract_id
+        INNER JOIN m_project_info pi ON pi.id = mpau.project_id
+        WHERE mpau.is_deleted = '0' AND mpau.`status` = '1'
+        AND pi.id = #{Values.pId}
+        <if test="Values.cId != null and Values.cId != '' ">
+            AND ci.id = #{Values.cId}
+        </if>
         AND r.id = #{Values.rId}
         AND p.id = #{Values.postId}
-        AND ci.id = #{Values.cId}
-        AND pi.id = #{Values.pId}
     </select>
+
     <select id="findUserInfoByCondition" resultType="org.springblade.system.user.entity.User">
 
         SELECT `name`,`account`,`password` FROM blade_user
@@ -86,5 +93,10 @@
         </if>
     </select>
 
+    <select id="findUserByName" resultType="org.springblade.system.user.entity.User">
+        select `name`,account,`password` from blade_user WHERE `name` like concat('%',#{name},'%')
+        and is_deleted = 0 and `status`	= 1
+    </select>
+
 
 </mapper>

+ 5 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/SaveUserInfoByProjectMapper.xml

@@ -6,8 +6,11 @@
     <!-- 通用查询映射结果 -->
     <resultMap id="contractInfoResultMap" type="org.springblade.manager.dto.SaveUserInfoByProjectDTO">
         <result column="id" property="id"/>
-        <result column="c_id" property="cId"/>
-        <result column="u_id" property="uId"/>
+        <result column="project_id" property="projectId"/>
+        <result column="contract_id" property="contractId"/>
+        <result column="role_id" property="roleId"/>
+        <result column="post_id" property="postId"/>
+        <result column="user_id" property="userId"/>
         <result column="create_time" property="createTime"/>
         <result column="create_user" property="createUser"/>
         <result column="create_dept" property="createDept"/>

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsFormElementMapper.java

@@ -19,6 +19,7 @@ package org.springblade.manager.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.manager.dto.WbsFormElementDTO;
 import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.vo.WbsFormElementVO;
 
@@ -41,4 +42,5 @@ public interface WbsFormElementMapper extends BaseMapper<WbsFormElement> {
 	 */
 	List<WbsFormElementVO> selectWbsFormElementPage(IPage page, WbsFormElementVO wbsFormElement);
 
+
 }

+ 4 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.java

@@ -23,6 +23,7 @@ import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.vo.WbsNodeTableVO;
 import org.springblade.manager.vo.WbsTreeVO;
+import org.springframework.web.bind.annotation.PostMapping;
 
 import java.util.List;
 
@@ -51,7 +52,9 @@ public interface WbsTreeMapper extends BaseMapper<WbsTree> {
 	 * @param parentId
 	 * @return
 	 */
-	List<WbsTreeVO> lazyTree(String tenantId, Long parentId);
+	List<WbsTreeVO> lazyTree(@Param("wbsId") String wbsId,
+							 @Param("tenantId") String tenantId,
+							 @Param("parentId") Long parentId);
 
 	/**
 	 * 获取树形节点

+ 10 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml

@@ -31,13 +31,14 @@
         <result column="major_data_type" property="majorDataType"/>
     </resultMap>
 
-    <resultMap id="treeNodeResultMap" type="org.springblade.core.tool.node.TreeNode">
+    <resultMap id="treeNodeResultMap" type="org.springblade.manager.vo.TreeNodeVO">
         <id column="id" property="id"/>
         <result column="parent_id" property="parentId"/>
         <result column="title" property="title"/>
         <result column="value" property="value"/>
         <result column="key" property="key"/>
         <result column="has_children" property="hasChildren"/>
+        <result column="type" property="type" />
     </resultMap>
 
     <resultMap id="selectByNodeTableMap" type="org.springblade.manager.vo.WbsNodeTableVO">
@@ -46,6 +47,7 @@
         <result column="tableType" property="tableType"/>
         <result column="isCreateTable" property="isCreateTable"/>
         <result column="elementTotal" property="elementTotal"/>
+        <result column="tableOwner" property="tableOwner"/>
     </resultMap>
 
     <resultMap id="wbsFormElementMap" type="org.springblade.manager.entity.WbsFormElement">
@@ -84,9 +86,10 @@
         ORDER BY sort
     </select>
 
+
     <select id="lazyTree" resultMap="treeNodeResultMap">
         SELECT
-        dept.type,
+        dept.type AS "type",
         dept.table_type,
         dept.id,
         dept.parent_id,
@@ -104,10 +107,11 @@
         FROM
         m_wbs_tree dept
         WHERE
-        dept.parent_id = #{param2} AND dept.is_deleted = 0
-        <if test="param1!=null and param1!=''">
-            and dept.tenant_id = #{param1}
+        dept.parent_id = #{parentId} AND dept.is_deleted = 0
+        <if test="tenantId!=null and tenantId!=''">
+            and dept.tenant_id = #{tenantId}
         </if>
+        AND dept.wbs_id = #{wbsId}
         ORDER BY dept.sort
     </select>
 
@@ -117,6 +121,7 @@
             wt.dept_name AS tableName,
             wt.table_type AS tableType,
             wt.`status` AS isCreateTable ,
+            wt.table_owner as tableOwner,
             (SELECT count(*) FROM m_wbs_form_element AS wfe WHERE wfe.f_id=wt.id) AS elementTotal
         FROM
             m_wbs_tree AS wt

+ 3 - 8
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IContractInfoService.java

@@ -35,13 +35,6 @@ import java.util.List;
  */
 public interface IContractInfoService extends BaseService<ContractInfo> {
 
-	/**
-	 * 自定义分页
-	 *
-	 * @param page
-	 * @param contractInfo
-	 * @return
-	 */
 	IPage<ContractInfoVO> selectContractInfoPage(IPage<ContractInfoVO> page, ContractInfoVO contractInfo);
 
 	List<ContractInfo> selectContractInfoPageByPid(String pid);
@@ -52,5 +45,7 @@ public interface IContractInfoService extends BaseService<ContractInfo> {
 
 	List<User> findUserInfoByCondition(String rId ,String pId,String userName);
 
-	Boolean saveUserInfoByProject(String cId , String uId);
+	List<User> findUserByName(String name);
+
+    Boolean updatePasswordByUserId(String userId,String password);
 }

+ 5 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsFormElementService.java

@@ -19,9 +19,12 @@ package org.springblade.manager.service;
 
 import org.springblade.core.mp.base.BaseService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.manager.dto.WbsFormElementDTO;
 import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.vo.WbsFormElementVO;
 
+import java.util.List;
+
 /**
  * wbs表单元素 服务类
  *
@@ -44,4 +47,6 @@ public interface IWbsFormElementService extends BaseService<WbsFormElement> {
 	 */
 	boolean addFormElement (WbsFormElement wbsFormElement);
 
+	Boolean selectElementsById(List<WbsFormElement> wbsFormElementList);
+
 }

+ 3 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeService.java

@@ -50,7 +50,7 @@ public interface IWbsTreeService extends BaseService<WbsTree> {
 	 * @param parentId
 	 * @return
 	 */
-	List<WbsTreeVO> lazyTree(String tenantId, Long parentId);
+	List<WbsTreeVO> lazyTree(String wbsId, String tenantId, Long parentId);
 
 	/**
 	 * 树形结构
@@ -76,7 +76,6 @@ public interface IWbsTreeService extends BaseService<WbsTree> {
 	 */
 	List<WbsNodeTableVO> selectByNodeTable(String id);
 
-
 	/**
 	 * 删除表单
 	 */
@@ -89,4 +88,6 @@ public interface IWbsTreeService extends BaseService<WbsTree> {
 
 
     Boolean saveFormElement(WbsTree wbsTree);
+
+	String selectTableIdByTableName(String deptName);
 }

+ 13 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

@@ -72,13 +72,19 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
         return contractInfoMapper.findUserInfoByCondition(rId, pId, userName);
     }
 
+
     @Override
-    public Boolean saveUserInfoByProject(String cId , String uId) {
-            //新增项目、合同段与用户关联
-           Integer row =  contractInfoMapper.insertProjectAndContractAndUser(cId,uId);
-           if (row>0){
-               return true;
-           }
-            return false;
+    public List<User> findUserByName(String name) {
+        List<User> userByName = contractInfoMapper.findUserByName(name);
+        return userByName;
+    }
+
+    @Override
+    public Boolean updatePasswordByUserId(String userId,String password) {
+        Integer row = contractInfoMapper.updatePasswordByUserId(userId,password);
+        if (row > 0){
+            return true;
+        }
+        return false;
     }
 }

+ 36 - 13
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.manager.service.impl;
 
+import org.springblade.manager.dto.WbsFormElementDTO;
 import org.springblade.manager.mapper.WbsFormElementMapper;
 import org.springblade.manager.service.IWbsFormElementService;
 import org.springblade.core.mp.base.BaseServiceImpl;
@@ -24,6 +25,9 @@ import org.springblade.manager.vo.WbsFormElementVO;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * wbs表单元素 服务实现类
  *
@@ -33,17 +37,36 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 @Service
 public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMapper, WbsFormElement> implements IWbsFormElementService {
 
-	@Override
-	public IPage<WbsFormElementVO> selectWbsFormElementPage(IPage<WbsFormElementVO> page, WbsFormElementVO wbsFormElement) {
-		return page.setRecords(baseMapper.selectWbsFormElementPage(page, wbsFormElement));
-	}
-
-	@Override
-	public boolean addFormElement(WbsFormElement wbsFormElement) {
-		int insert1 = baseMapper.insert(wbsFormElement);
-		if (insert1 > 0) {
-			return true;
-		}
-		return false;
-	}
+    @Override
+    public IPage<WbsFormElementVO> selectWbsFormElementPage(IPage<WbsFormElementVO> page, WbsFormElementVO wbsFormElement) {
+        return page.setRecords(baseMapper.selectWbsFormElementPage(page, wbsFormElement));
+    }
+
+    @Override
+    public boolean addFormElement(WbsFormElement wbsFormElement) {
+        int insert1 = baseMapper.insert(wbsFormElement);
+        if (insert1 > 0) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public Boolean selectElementsById(List<WbsFormElement> wbsFormElementList) {
+
+        List<Long> ids = new ArrayList<>();
+        for (WbsFormElement wbsFormElement : wbsFormElementList) {
+            Long id = wbsFormElement.getId();
+            ids.add(id);
+        }
+        List<WbsFormElement> wbsFormElements = baseMapper.selectBatchIds(ids);
+
+        if ((wbsFormElements).equals(wbsFormElementList)) {
+            return false;
+        }
+
+        return true;
+    }
+
+
 }

+ 110 - 95
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.manager.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.constant.BladeConstant;
@@ -37,83 +38,83 @@ import javax.annotation.Resource;
 import java.util.*;
 
 /**
- *  服务实现类
+ * 服务实现类
  *
  * @author liuyc
  * @since 2022-04-25
  */
 @Service
-public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper,WbsTree> implements IWbsTreeService {
-
-	@Resource
-	private WbsTreeMapper wbsTreeMapper;
-
-	@Override
-	public IPage<WbsTreeVO> selectWbsTreePage(IPage<WbsTreeVO> page, WbsTreeVO wbsTree) {
-		return page.setRecords(baseMapper.selectWbsTreePage(page, wbsTree));
-	}
-
-	@Override
-	public List<WbsTreeVO> lazyTree(String tenantId, Long parentId) {
-		if (AuthUtil.isAdministrator()) {
-			tenantId = StringPool.EMPTY;
-		}
-		return ForestNodeMerger.merge(baseMapper.lazyTree(tenantId, parentId));
-	}
-
-	@Override
-	public List<WbsTreeVO> tree(String tenantId) {
-		return ForestNodeMerger.merge(baseMapper.tree(tenantId));
-	}
-
-	@Override
-	public boolean submit(WbsTree dept) {
-		if (Func.isEmpty(dept.getParentId())) {
-			dept.setTenantId(AuthUtil.getTenantId());
-			dept.setParentId(BladeConstant.TOP_PARENT_ID);
-			dept.setAncestors(String.valueOf(BladeConstant.TOP_PARENT_ID));
-		}
-		if (dept.getParentId() > 0) {
-			WbsTree parent = getById(dept.getParentId());
-			if (Func.toLong(dept.getParentId()) == Func.toLong(dept.getId())) {
-				throw new ServiceException("父节点不可选择自身!");
-			}
-			dept.setTenantId(parent.getTenantId());
-			String ancestors = parent.getAncestors() + StringPool.COMMA + dept.getParentId();
-			dept.setAncestors(ancestors);
-		}
-		dept.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-		return saveOrUpdate(dept);
-	}
-
-	@Override
-	public boolean submit2(FormElementDTO dept) {
-		if (Func.isEmpty(dept.getParentId())) {
-			dept.setTenantId(AuthUtil.getTenantId());
-			dept.setParentId(BladeConstant.TOP_PARENT_ID);
-			dept.setAncestors(String.valueOf(BladeConstant.TOP_PARENT_ID));
-		}
-		if (dept.getParentId() > 0) {
-			WbsTree parent = getById(dept.getParentId());
-			if (Func.toLong(dept.getParentId()) == Func.toLong(dept.getId())) {
-				throw new ServiceException("父节点不可选择自身!");
-			}
-			dept.setTenantId(parent.getTenantId());
-			String ancestors = parent.getAncestors() + StringPool.COMMA + dept.getParentId();
-			dept.setAncestors(ancestors);
-		}
-		//设置类型默认值为 '2' 表单
-		dept.setType(2);
-
-		dept.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-
-		return saveOrUpdate(dept);
-	}
-
-	@Override
-	public List<WbsNodeTableVO> selectByNodeTable(String id) {
-		//查询节点下的所有表单
-		List<WbsNodeTableVO> wbsNodeTableVOS = wbsTreeMapper.selectByNodeTable(id);
+public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree> implements IWbsTreeService {
+
+    @Resource
+    private WbsTreeMapper wbsTreeMapper;
+
+    @Override
+    public IPage<WbsTreeVO> selectWbsTreePage(IPage<WbsTreeVO> page, WbsTreeVO wbsTree) {
+        return page.setRecords(baseMapper.selectWbsTreePage(page, wbsTree));
+    }
+
+    @Override
+    public List<WbsTreeVO> lazyTree(String wbsId, String tenantId, Long parentId) {
+        if (AuthUtil.isAdministrator()) {
+            tenantId = StringPool.EMPTY;
+        }
+        return ForestNodeMerger.merge(baseMapper.lazyTree(wbsId, tenantId, parentId));
+    }
+
+    @Override
+    public List<WbsTreeVO> tree(String tenantId) {
+        return ForestNodeMerger.merge(baseMapper.tree(tenantId));
+    }
+
+    @Override
+    public boolean submit(WbsTree dept) {
+        if (Func.isEmpty(dept.getParentId())) {
+            dept.setTenantId(AuthUtil.getTenantId());
+            dept.setParentId(BladeConstant.TOP_PARENT_ID);
+            dept.setAncestors(String.valueOf(BladeConstant.TOP_PARENT_ID));
+        }
+        if (dept.getParentId() > 0) {
+            WbsTree parent = getById(dept.getParentId());
+            if (Func.toLong(dept.getParentId()) == Func.toLong(dept.getId())) {
+                throw new ServiceException("父节点不可选择自身!");
+            }
+            dept.setTenantId(parent.getTenantId());
+            String ancestors = parent.getAncestors() + StringPool.COMMA + dept.getParentId();
+            dept.setAncestors(ancestors);
+        }
+        dept.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+        return saveOrUpdate(dept);
+    }
+
+    @Override
+    public boolean submit2(FormElementDTO dept) {
+        if (Func.isEmpty(dept.getParentId())) {
+            dept.setTenantId(AuthUtil.getTenantId());
+            dept.setParentId(BladeConstant.TOP_PARENT_ID);
+            dept.setAncestors(String.valueOf(BladeConstant.TOP_PARENT_ID));
+        }
+        if (dept.getParentId() > 0) {
+            WbsTree parent = getById(dept.getParentId());
+            if (Func.toLong(dept.getParentId()) == Func.toLong(dept.getId())) {
+                throw new ServiceException("父节点不可选择自身!");
+            }
+            dept.setTenantId(parent.getTenantId());
+            String ancestors = parent.getAncestors() + StringPool.COMMA + dept.getParentId();
+            dept.setAncestors(ancestors);
+        }
+        //设置类型默认值为 '2' 表单
+        dept.setType(2);
+
+        dept.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+
+        return saveOrUpdate(dept);
+    }
+
+    @Override
+    public List<WbsNodeTableVO> selectByNodeTable(String id) {
+        //查询节点下的所有表单
+        List<WbsNodeTableVO> wbsNodeTableVOS = wbsTreeMapper.selectByNodeTable(id);
 		/*List<String> ids = new ArrayList<>();
 		for (int i = 0; i < wbsNodeTableVOS.size(); i++) {
 			String id1 = wbsNodeTableVOS.get(i).getId();
@@ -124,29 +125,43 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper,WbsTree> i
 		}
 		//根据ID查询元素
 		List<String> strings = wbsTreeMapper.selectByElementsTotal(ids);*/
-		return wbsNodeTableVOS;
-	}
-
-	@Override
-	public boolean removeTableById(String id) {
-		Integer integer = wbsTreeMapper.removeTableById(id);
-		if (integer > 0){
-			return true;
-		}
-		return false;
-	}
-
-	@Override
-	public List<WbsFormElement> selectFormElements(String id) {
-		List<WbsFormElement> wbsFormElements = wbsTreeMapper.selectFormElements(id);
-		return wbsFormElements;
-	}
-
-	@Override
-	public Boolean saveFormElement(WbsTree wbsTree) {
-		wbsTreeMapper.insertForm(wbsTree);
-		return null;
-	}
+        return wbsNodeTableVOS;
+    }
+
+    @Override
+    public boolean removeTableById(String id) {
+        Integer integer = wbsTreeMapper.removeTableById(id);
+        if (integer > 0) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public List<WbsFormElement> selectFormElements(String id) {
+        List<WbsFormElement> wbsFormElements = wbsTreeMapper.selectFormElements(id);
+        return wbsFormElements;
+    }
+
+    @Override
+    public Boolean saveFormElement(WbsTree wbsTree) {
+        Integer integer = wbsTreeMapper.insertForm(wbsTree);
+        if (integer > 0) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public String selectTableIdByTableName(String deptName) {
+        QueryWrapper<WbsTree> queryWrapper = new QueryWrapper<>();
+        queryWrapper.in("dept_name", deptName);
+        WbsTree wbsTree = wbsTreeMapper.selectOne(queryWrapper);
+        if (!("").equals(wbsTree) && wbsTree == null) {
+            return "-1";
+        }
+        return String.valueOf(wbsTree.getId());
+    }
 
 
 }

+ 101 - 97
blade-service/blade-system/src/main/java/org/springblade/system/controller/RoleController.java

@@ -17,6 +17,7 @@
 package org.springblade.system.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.*;
@@ -62,110 +63,113 @@ import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
 @PreAuth(RoleConstant.HAS_ROLE_ADMIN)
 public class RoleController extends BladeController {
 
-	private final IRoleService roleService;
+    private final IRoleService roleService;
 
-	/**
-	 * 详情
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "详情", notes = "传入role")
-	public R<RoleVO> detail(Role role) {
-		Role detail = roleService.getOne(Condition.getQueryWrapper(role));
-		return R.data(RoleWrapper.build().entityVO(detail));
-	}
+    /**
+     * 详情
+     */
+    @GetMapping("/detail")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "详情", notes = "传入role")
+    public R<RoleVO> detail(Role role) {
+        Role detail = roleService.getOne(Condition.getQueryWrapper(role));
+        return R.data(RoleWrapper.build().entityVO(detail));
+    }
 
-	/**
-	 * 列表
-	 */
-	@GetMapping("/list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "roleName", value = "参数名称", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "roleAlias", value = "角色别名", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "列表", notes = "传入role")
-	public R<List<RoleVO>> list(@ApiIgnore @RequestParam Map<String, Object> role, BladeUser bladeUser) {
-		QueryWrapper<Role> queryWrapper = Condition.getQueryWrapper(role, Role.class);
-		List<Role> list = roleService.list((!bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID)) ? queryWrapper.lambda().eq(Role::getTenantId, bladeUser.getTenantId()) : queryWrapper);
-		return R.data(RoleWrapper.build().listNodeVO(list));
-	}
+    /**
+     * 列表
+     */
+    @GetMapping("/list")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "roleName", value = "参数名称", paramType = "query", dataType = "string"),
+            @ApiImplicitParam(name = "roleAlias", value = "角色别名", paramType = "query", dataType = "string")
+    })
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "列表", notes = "传入role")
+    public R<List<RoleVO>> list(@ApiIgnore @RequestParam Map<String, Object> role, BladeUser bladeUser) {
+        QueryWrapper<Role> queryWrapper = Condition.getQueryWrapper(role, Role.class);
+        List<Role> list = roleService.list((!bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID)) ? queryWrapper.lambda().eq(Role::getTenantId, bladeUser.getTenantId()) : queryWrapper);
+        return R.data(RoleWrapper.build().listNodeVO(list));
+    }
 
-	/**
-	 * 获取角色树形结构
-	 */
-	@GetMapping("/tree")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "树形结构", notes = "树形结构")
-	public R<List<RoleVO>> tree(String tenantId, BladeUser bladeUser) {
-		List<RoleVO> tree = roleService.tree(Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()));
-		return R.data(tree);
-	}
+    /**
+     * 获取角色树形结构
+     */
+    @GetMapping("/tree")
+    @ApiOperationSupport(order = 3)
+    @ApiOperation(value = "树形结构", notes = "树形结构")
+    public R<List<RoleVO>> tree(String tenantId, BladeUser bladeUser) {
+        List<RoleVO> tree = roleService.tree(Func.toStrWithEmpty(tenantId, bladeUser.getTenantId()));
+        return R.data(tree);
+    }
 
-	/**
-	 * 获取指定角色树形结构
-	 */
-	@GetMapping("/tree-by-id")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "树形结构", notes = "树形结构")
-	public R<List<RoleVO>> treeById(Long roleId, BladeUser bladeUser) {
-		Role role = SysCache.getRole(roleId);
-		List<RoleVO> tree = roleService.tree(Func.notNull(role) ? role.getTenantId() : bladeUser.getTenantId());
-		return R.data(tree);
-	}
+    /**
+     * 获取指定角色树形结构
+     */
+    @GetMapping("/tree-by-id")
+    @ApiOperationSupport(order = 4)
+    @ApiOperation(value = "树形结构", notes = "树形结构")
+    public R<List<RoleVO>> treeById(Long roleId, BladeUser bladeUser) {
+        Role role = SysCache.getRole(roleId);
+        List<RoleVO> tree = roleService.tree(Func.notNull(role) ? role.getTenantId() : bladeUser.getTenantId());
+        return R.data(tree);
+    }
 
-	/**
-	 * 新增或修改
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "新增或修改", notes = "传入role")
-	public R submit(@Valid @RequestBody Role role) {
-		CacheUtil.clear(SYS_CACHE);
-		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-		return R.status(roleService.submit(role));
-	}
+    /**
+     * 新增或修改
+     * @author liuyc
+     * @since  2022-05-11
+     */
+    @PostMapping("/submit")
+    @ApiOperationSupport(order = 5)
+    @ApiOperation(value = "新增或修改", notes = "传入role,角色pid")
+    public R submit(@Valid @RequestBody Role role, @RequestParam("pId") String pId) {
+        CacheUtil.clear(SYS_CACHE);
+        CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+        return R.status(roleService.submit(role, pId));
+    }
 
+    /**
+     * 删除
+     * @author liuyc
+     * @since  2022-05-11
+     */
+    @PostMapping("/remove")
+    @ApiOperationSupport(order = 6)
+    @ApiOperation(value = "删除", notes = "传入ids")
+    public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+        CacheUtil.clear(SYS_CACHE);
+        CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+        return R.status(roleService.removeRole(ids));
+    }
 
-	/**
-	 * 删除
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "删除", notes = "传入ids")
-	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		CacheUtil.clear(SYS_CACHE);
-		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-		return R.status(roleService.removeRole(ids));
-	}
+    /**
+     * 设置角色权限
+     */
+    @PostMapping("/grant")
+    @ApiOperationSupport(order = 7)
+    @ApiOperation(value = "权限设置", notes = "传入roleId集合以及menuId集合")
+    public R grant(@RequestBody GrantVO grantVO) {
+        CacheUtil.clear(SYS_CACHE);
+        CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
+        boolean temp = roleService.grant(grantVO.getRoleIds(), grantVO.getMenuIds(), grantVO.getDataScopeIds(), grantVO.getApiScopeIds());
+        return R.status(temp);
+    }
 
-	/**
-	 * 设置角色权限
-	 */
-	@PostMapping("/grant")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "权限设置", notes = "传入roleId集合以及menuId集合")
-	public R grant(@RequestBody GrantVO grantVO) {
-		CacheUtil.clear(SYS_CACHE);
-		CacheUtil.clear(SYS_CACHE, Boolean.FALSE);
-		boolean temp = roleService.grant(grantVO.getRoleIds(), grantVO.getMenuIds(), grantVO.getDataScopeIds(), grantVO.getApiScopeIds());
-		return R.status(temp);
-	}
-
-	/**
-	 * 下拉数据源
-	 */
-	@PreAuth(AuthConstant.PERMIT_ALL)
-	@GetMapping("/select")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "下拉数据源", notes = "传入id集合")
-	public R<List<Role>> select(Long userId, String roleId) {
-		if (Func.isNotEmpty(userId)) {
-			User user = UserCache.getUser(userId);
-			roleId = user.getRoleId();
-		}
-		List<Role> list = roleService.list(Wrappers.<Role>lambdaQuery().in(Role::getId, Func.toLongList(roleId)));
-		return R.data(list);
-	}
+    /**
+     * 下拉数据源
+     */
+    @PreAuth(AuthConstant.PERMIT_ALL)
+    @GetMapping("/select")
+    @ApiOperationSupport(order = 8)
+    @ApiOperation(value = "下拉数据源", notes = "传入id集合")
+    public R<List<Role>> select(Long userId, String roleId) {
+        if (Func.isNotEmpty(userId)) {
+            User user = UserCache.getUser(userId);
+            roleId = user.getRoleId();
+        }
+        List<Role> list = roleService.list(Wrappers.<Role>lambdaQuery().in(Role::getId, Func.toLongList(roleId)));
+        return R.data(list);
+    }
 
 }

+ 5 - 0
blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.java

@@ -18,6 +18,7 @@ package org.springblade.system.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
 import org.springblade.system.entity.Role;
 import org.springblade.system.vo.RoleVO;
 
@@ -64,4 +65,8 @@ public interface RoleMapper extends BaseMapper<Role> {
 	 */
 	List<String> getRoleAliases(Long[] ids);
 
+    Integer bindRoleAndPost(@Param("rId") Long rId,@Param("pId") Long pId);
+
+    Integer deleteRoleAndPostByRid(@Param("rId") String ids);
+
 }

+ 6 - 0
blade-service/blade-system/src/main/java/org/springblade/system/mapper/RoleMapper.xml

@@ -19,6 +19,12 @@
         <result column="value" property="value"/>
         <result column="key" property="key"/>
     </resultMap>
+    <insert id="bindRoleAndPost">
+        insert into m_role_post (r_id,p_id) values (#{rId},#{pId})
+    </insert>
+    <delete id="deleteRoleAndPostByRid">
+        delete from m_role_post where r_id = #{rId}
+    </delete>
 
     <select id="selectRolePage" resultMap="roleResultMap">
         select * from blade_role where is_deleted = 0

+ 1 - 1
blade-service/blade-system/src/main/java/org/springblade/system/service/IRoleService.java

@@ -90,7 +90,7 @@ public interface IRoleService extends IService<Role> {
 	 * @param role
 	 * @return
 	 */
-	boolean submit(Role role);
+	boolean submit(Role role,String pId);
 
 	/**
 	 * 角色信息查询

+ 215 - 166
blade-service/blade-system/src/main/java/org/springblade/system/service/impl/RoleServiceImpl.java

@@ -17,12 +17,15 @@
 package org.springblade.system.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.constant.BladeConstant;
 import org.springblade.core.tool.constant.RoleConstant;
 import org.springblade.core.tool.node.ForestNodeMerger;
@@ -60,171 +63,217 @@ import static org.springblade.common.constant.CommonConstant.DATA_SCOPE_CATEGORY
 @AllArgsConstructor
 public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IRoleService {
 
-	private final IRoleMenuService roleMenuService;
-	private final IRoleScopeService roleScopeService;
-
-	@Override
-	public IPage<RoleVO> selectRolePage(IPage<RoleVO> page, RoleVO role) {
-		return page.setRecords(baseMapper.selectRolePage(page, role));
-	}
-
-	@Override
-	public List<RoleVO> tree(String tenantId) {
-		String userRole = AuthUtil.getUserRole();
-		String excludeRole = null;
-		if (!CollectionUtil.contains(Func.toStrArray(userRole), RoleConstant.ADMIN) && !CollectionUtil.contains(Func.toStrArray(userRole), RoleConstant.ADMINISTRATOR)) {
-			excludeRole = RoleConstant.ADMINISTRATOR;
-		}
-		return ForestNodeMerger.merge(baseMapper.tree(tenantId, excludeRole));
-	}
-
-	@Override
-	@Transactional(rollbackFor = Exception.class)
-	public boolean grant(@NotEmpty List<Long> roleIds, List<Long> menuIds, List<Long> dataScopeIds, List<Long> apiScopeIds) {
-		return grantRoleMenu(roleIds, menuIds) && grantDataScope(roleIds, dataScopeIds) && grantApiScope(roleIds, apiScopeIds);
-	}
-
-	private boolean grantRoleMenu(List<Long> roleIds, List<Long> menuIds) {
-		// 防止越权配置超管角色
-		Long administratorCount = baseMapper.selectCount(Wrappers.<Role>query().lambda().eq(Role::getRoleAlias, RoleConstant.ADMINISTRATOR).in(Role::getId, roleIds));
-		if (!AuthUtil.isAdministrator() && administratorCount > 0L) {
-			throw new ServiceException("无权配置超管角色!");
-		}
-		// 防止越权配置管理员角色
-		Long adminCount = baseMapper.selectCount(Wrappers.<Role>query().lambda().eq(Role::getRoleAlias, RoleConstant.ADMIN).in(Role::getId, roleIds));
-		if (!AuthUtil.isAdmin() && adminCount > 0L) {
-			throw new ServiceException("无权配置管理员角色!");
-		}
-		// 删除角色配置的菜单集合
-		roleMenuService.remove(Wrappers.<RoleMenu>update().lambda().in(RoleMenu::getRoleId, roleIds));
-		// 组装配置
-		List<RoleMenu> roleMenus = new ArrayList<>();
-		roleIds.forEach(roleId -> menuIds.forEach(menuId -> {
-			RoleMenu roleMenu = new RoleMenu();
-			roleMenu.setRoleId(roleId);
-			roleMenu.setMenuId(menuId);
-			roleMenus.add(roleMenu);
-		}));
-		// 新增配置
-		roleMenuService.saveBatch(roleMenus);
-		// 递归设置下属角色菜单集合
-		recursionRoleMenu(roleIds, menuIds);
-		return true;
-	}
-
-	private void recursionRoleMenu(List<Long> roleIds, List<Long> menuIds) {
-		roleIds.forEach(roleId -> baseMapper.selectList(Wrappers.<Role>query().lambda().eq(Role::getParentId, roleId)).forEach(role -> {
-			List<RoleMenu> roleMenuList = roleMenuService.list(Wrappers.<RoleMenu>query().lambda().eq(RoleMenu::getRoleId, role.getId()));
-			// 子节点过滤出父节点删除的菜单集合
-			List<Long> collectRoleMenuIds = roleMenuList.stream().map(RoleMenu::getMenuId).filter(menuId -> !menuIds.contains(menuId)).collect(Collectors.toList());
-			if (collectRoleMenuIds.size() > 0) {
-				// 删除子节点权限外的菜单集合
-				roleMenuService.remove(Wrappers.<RoleMenu>update().lambda().eq(RoleMenu::getRoleId, role.getId()).in(RoleMenu::getMenuId, collectRoleMenuIds));
-				// 递归设置下属角色菜单集合
-				recursionRoleMenu(Collections.singletonList(role.getId()), menuIds);
-			}
-		}));
-	}
-
-	private boolean grantDataScope(List<Long> roleIds, List<Long> dataScopeIds) {
-		// 删除角色配置的数据权限集合
-		roleScopeService.remove(Wrappers.<RoleScope>update().lambda().eq(RoleScope::getScopeCategory, DATA_SCOPE_CATEGORY).in(RoleScope::getRoleId, roleIds));
-		// 组装配置
-		List<RoleScope> roleDataScopes = new ArrayList<>();
-		roleIds.forEach(roleId -> dataScopeIds.forEach(scopeId -> {
-			RoleScope roleScope = new RoleScope();
-			roleScope.setScopeCategory(DATA_SCOPE_CATEGORY);
-			roleScope.setRoleId(roleId);
-			roleScope.setScopeId(scopeId);
-			roleDataScopes.add(roleScope);
-		}));
-		// 新增配置
-		roleScopeService.saveBatch(roleDataScopes);
-		return true;
-	}
-
-	private boolean grantApiScope(List<Long> roleIds, List<Long> apiScopeIds) {
-		// 删除角色配置的接口权限集合
-		roleScopeService.remove(Wrappers.<RoleScope>update().lambda().eq(RoleScope::getScopeCategory, API_SCOPE_CATEGORY).in(RoleScope::getRoleId, roleIds));
-		// 组装配置
-		List<RoleScope> roleApiScopes = new ArrayList<>();
-		roleIds.forEach(roleId -> apiScopeIds.forEach(scopeId -> {
-			RoleScope roleScope = new RoleScope();
-			roleScope.setScopeCategory(API_SCOPE_CATEGORY);
-			roleScope.setScopeId(scopeId);
-			roleScope.setRoleId(roleId);
-			roleApiScopes.add(roleScope);
-		}));
-		// 新增配置
-		roleScopeService.saveBatch(roleApiScopes);
-		return true;
-	}
-
-	@Override
-	public String getRoleIds(String tenantId, String roleNames) {
-		List<Role> roleList = baseMapper.selectList(Wrappers.<Role>query().lambda().eq(Role::getTenantId, tenantId).in(Role::getRoleName, Func.toStrList(roleNames)));
-		if (roleList != null && roleList.size() > 0) {
-			return roleList.stream().map(role -> Func.toStr(role.getId())).distinct().collect(Collectors.joining(","));
-		}
-		return null;
-	}
-
-	@Override
-	public List<String> getRoleNames(String roleIds) {
-		return baseMapper.getRoleNames(Func.toLongArray(roleIds));
-	}
-
-	@Override
-	public List<String> getRoleAliases(String roleIds) {
-		return baseMapper.getRoleAliases(Func.toLongArray(roleIds));
-	}
-
-	@Override
-	public boolean submit(Role role) {
-		if (!AuthUtil.isAdministrator()) {
-			if (Func.toStr(role.getRoleAlias()).equals(RoleConstant.ADMINISTRATOR)) {
-				throw new ServiceException("无权限创建超管角色!");
-			}
-		}
-		if (Func.isEmpty(role.getParentId())) {
-			role.setTenantId(AuthUtil.getTenantId());
-			role.setParentId(BladeConstant.TOP_PARENT_ID);
-		}
-		if (role.getParentId() > 0) {
-			Role parent = getById(role.getParentId());
-			if (Func.toLong(role.getParentId()) == Func.toLong(role.getId())) {
-				throw new ServiceException("父节点不可选择自身!");
-			}
-			role.setTenantId(parent.getTenantId());
-		}
-		role.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-		return saveOrUpdate(role);
-	}
-
-	@Override
-	public List<RoleVO> search(String roleName, Long parentId) {
-		String tenantId = AuthUtil.getTenantId();
-		LambdaQueryWrapper<Role> queryWrapper = Wrappers.<Role>query().lambda();
-		if (Func.isNotEmpty(roleName)) {
-			queryWrapper.like(Role::getRoleName, roleName);
-		}
-		if (Func.isNotEmpty(parentId) && parentId > 0L) {
-			queryWrapper.eq(Role::getParentId, parentId);
-		}
-		if (Func.isNotEmpty(tenantId)) {
-			queryWrapper.eq(Role::getTenantId, tenantId);
-		}
-		List<Role> roleList = baseMapper.selectList(queryWrapper);
-		return RoleWrapper.build().listNodeVO(roleList);
-	}
-
-	@Override
-	public boolean removeRole(String ids) {
-		Long cnt = baseMapper.selectCount(Wrappers.<Role>query().lambda().in(Role::getParentId, Func.toLongList(ids)));
-		if (cnt > 0L) {
-			throw new ServiceException("请先删除子节点!");
-		}
-		return removeByIds(Func.toLongList(ids));
-	}
+    private final IRoleMenuService roleMenuService;
+    private final IRoleScopeService roleScopeService;
+    private final RoleMapper roleMapper;
+
+    @Override
+    public IPage<RoleVO> selectRolePage(IPage<RoleVO> page, RoleVO role) {
+        return page.setRecords(baseMapper.selectRolePage(page, role));
+    }
+
+    @Override
+    public List<RoleVO> tree(String tenantId) {
+        String userRole = AuthUtil.getUserRole();
+        String excludeRole = null;
+        if (!CollectionUtil.contains(Func.toStrArray(userRole), RoleConstant.ADMIN) && !CollectionUtil.contains(Func.toStrArray(userRole), RoleConstant.ADMINISTRATOR)) {
+            excludeRole = RoleConstant.ADMINISTRATOR;
+        }
+        return ForestNodeMerger.merge(baseMapper.tree(tenantId, excludeRole));
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean grant(@NotEmpty List<Long> roleIds, List<Long> menuIds, List<Long> dataScopeIds, List<Long> apiScopeIds) {
+        return grantRoleMenu(roleIds, menuIds) && grantDataScope(roleIds, dataScopeIds) && grantApiScope(roleIds, apiScopeIds);
+    }
+
+    private boolean grantRoleMenu(List<Long> roleIds, List<Long> menuIds) {
+        // 防止越权配置超管角色
+        Long administratorCount = baseMapper.selectCount(Wrappers.<Role>query().lambda().eq(Role::getRoleAlias, RoleConstant.ADMINISTRATOR).in(Role::getId, roleIds));
+        if (!AuthUtil.isAdministrator() && administratorCount > 0L) {
+            throw new ServiceException("无权配置超管角色!");
+        }
+        // 防止越权配置管理员角色
+        Long adminCount = baseMapper.selectCount(Wrappers.<Role>query().lambda().eq(Role::getRoleAlias, RoleConstant.ADMIN).in(Role::getId, roleIds));
+        if (!AuthUtil.isAdmin() && adminCount > 0L) {
+            throw new ServiceException("无权配置管理员角色!");
+        }
+        // 删除角色配置的菜单集合
+        roleMenuService.remove(Wrappers.<RoleMenu>update().lambda().in(RoleMenu::getRoleId, roleIds));
+        // 组装配置
+        List<RoleMenu> roleMenus = new ArrayList<>();
+        roleIds.forEach(roleId -> menuIds.forEach(menuId -> {
+            RoleMenu roleMenu = new RoleMenu();
+            roleMenu.setRoleId(roleId);
+            roleMenu.setMenuId(menuId);
+            roleMenus.add(roleMenu);
+        }));
+        // 新增配置
+        roleMenuService.saveBatch(roleMenus);
+        // 递归设置下属角色菜单集合
+        recursionRoleMenu(roleIds, menuIds);
+        return true;
+    }
+
+    private void recursionRoleMenu(List<Long> roleIds, List<Long> menuIds) {
+        roleIds.forEach(roleId -> baseMapper.selectList(Wrappers.<Role>query().lambda().eq(Role::getParentId, roleId)).forEach(role -> {
+            List<RoleMenu> roleMenuList = roleMenuService.list(Wrappers.<RoleMenu>query().lambda().eq(RoleMenu::getRoleId, role.getId()));
+            // 子节点过滤出父节点删除的菜单集合
+            List<Long> collectRoleMenuIds = roleMenuList.stream().map(RoleMenu::getMenuId).filter(menuId -> !menuIds.contains(menuId)).collect(Collectors.toList());
+            if (collectRoleMenuIds.size() > 0) {
+                // 删除子节点权限外的菜单集合
+                roleMenuService.remove(Wrappers.<RoleMenu>update().lambda().eq(RoleMenu::getRoleId, role.getId()).in(RoleMenu::getMenuId, collectRoleMenuIds));
+                // 递归设置下属角色菜单集合
+                recursionRoleMenu(Collections.singletonList(role.getId()), menuIds);
+            }
+        }));
+    }
+
+    private boolean grantDataScope(List<Long> roleIds, List<Long> dataScopeIds) {
+        // 删除角色配置的数据权限集合
+        roleScopeService.remove(Wrappers.<RoleScope>update().lambda().eq(RoleScope::getScopeCategory, DATA_SCOPE_CATEGORY).in(RoleScope::getRoleId, roleIds));
+        // 组装配置
+        List<RoleScope> roleDataScopes = new ArrayList<>();
+        roleIds.forEach(roleId -> dataScopeIds.forEach(scopeId -> {
+            RoleScope roleScope = new RoleScope();
+            roleScope.setScopeCategory(DATA_SCOPE_CATEGORY);
+            roleScope.setRoleId(roleId);
+            roleScope.setScopeId(scopeId);
+            roleDataScopes.add(roleScope);
+        }));
+        // 新增配置
+        roleScopeService.saveBatch(roleDataScopes);
+        return true;
+    }
+
+    private boolean grantApiScope(List<Long> roleIds, List<Long> apiScopeIds) {
+        // 删除角色配置的接口权限集合
+        roleScopeService.remove(Wrappers.<RoleScope>update().lambda().eq(RoleScope::getScopeCategory, API_SCOPE_CATEGORY).in(RoleScope::getRoleId, roleIds));
+        // 组装配置
+        List<RoleScope> roleApiScopes = new ArrayList<>();
+        roleIds.forEach(roleId -> apiScopeIds.forEach(scopeId -> {
+            RoleScope roleScope = new RoleScope();
+            roleScope.setScopeCategory(API_SCOPE_CATEGORY);
+            roleScope.setScopeId(scopeId);
+            roleScope.setRoleId(roleId);
+            roleApiScopes.add(roleScope);
+        }));
+        // 新增配置
+        roleScopeService.saveBatch(roleApiScopes);
+        return true;
+    }
+
+    @Override
+    public String getRoleIds(String tenantId, String roleNames) {
+        List<Role> roleList = baseMapper.selectList(Wrappers.<Role>query().lambda().eq(Role::getTenantId, tenantId).in(Role::getRoleName, Func.toStrList(roleNames)));
+        if (roleList != null && roleList.size() > 0) {
+            return roleList.stream().map(role -> Func.toStr(role.getId())).distinct().collect(Collectors.joining(","));
+        }
+        return null;
+    }
+
+    @Override
+    public List<String> getRoleNames(String roleIds) {
+        return baseMapper.getRoleNames(Func.toLongArray(roleIds));
+    }
+
+    @Override
+    public List<String> getRoleAliases(String roleIds) {
+        return baseMapper.getRoleAliases(Func.toLongArray(roleIds));
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean submit(Role role, String pId) {
+        if (!AuthUtil.isAdministrator()) {
+            if (Func.toStr(role.getRoleAlias()).equals(RoleConstant.ADMINISTRATOR)) {
+                throw new ServiceException("无权限创建超管角色!");
+            }
+        }
+        if (Func.isEmpty(role.getParentId())) {
+            role.setTenantId(AuthUtil.getTenantId());
+            role.setParentId(BladeConstant.TOP_PARENT_ID);
+        }
+        if (role.getParentId() > 0) {
+            Role parent = getById(role.getParentId());
+            if (Func.toLong(role.getParentId()) == Func.toLong(role.getId())) {
+                throw new ServiceException("父节点不可选择自身!");
+            }
+            role.setTenantId(parent.getTenantId());
+        }
+        role.setIsDeleted(BladeConstant.DB_NOT_DELETED);
+
+        //新增前判重
+        Long aLong = baseMapper.selectCount(new QueryWrapper<Role>()
+                .eq("parent_id", role.getParentId())
+                .eq("role_name", role.getRoleName()));
+        if (aLong > 0) {
+            return false;
+        }
+
+        //新增角色Role
+        boolean b = saveOrUpdate(role);
+
+        //获取新增角色id
+        Role role1 = null;
+        if (b) {
+            QueryWrapper<Role> wrapper = new QueryWrapper<Role>();
+            wrapper.eq("parent_id", role.getParentId())
+                    .eq("role_name", role.getRoleName());
+            role1 = roleMapper.selectOne(wrapper);
+        }
+//		System.out.println("role1: *************** + "+role1);
+        //新增或修改角色时与岗位进行关联绑定
+        if (StringUtils.isNotEmpty(pId) && role1 != null) {
+            Integer row = roleMapper.bindRoleAndPost(role1.getId(), Long.parseLong(pId));
+            if (row > 0) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+
+    @Override
+    public List<RoleVO> search(String roleName, Long parentId) {
+        String tenantId = AuthUtil.getTenantId();
+        LambdaQueryWrapper<Role> queryWrapper = Wrappers.<Role>query().lambda();
+        if (Func.isNotEmpty(roleName)) {
+            queryWrapper.like(Role::getRoleName, roleName);
+        }
+        if (Func.isNotEmpty(parentId) && parentId > 0L) {
+            queryWrapper.eq(Role::getParentId, parentId);
+        }
+        if (Func.isNotEmpty(tenantId)) {
+            queryWrapper.eq(Role::getTenantId, tenantId);
+        }
+        List<Role> roleList = baseMapper.selectList(queryWrapper);
+        return RoleWrapper.build().listNodeVO(roleList);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean removeRole(String ids) {
+        Long cnt = baseMapper.selectCount(Wrappers.<Role>query().lambda().in(Role::getParentId, Func.toLongList(ids)));
+        if (cnt > 0L) {
+            throw new ServiceException("请先删除子节点!");
+        }
+        //删除角色与岗位关联
+        Boolean aBoolean = removeRoleAndPostByRid(ids);
+        if (aBoolean) {
+            return removeByIds(Func.toLongList(ids));
+        }
+        return false;
+    }
+
+    private Boolean removeRoleAndPostByRid(String ids) {
+        Integer row = roleMapper.deleteRoleAndPostByRid(ids);
+        if (row > 0) {
+            return true;
+        }
+        return false;
+    }
+
 
 }