Browse Source

重构用户关联项目合同角色需求

liuyc 3 years ago
parent
commit
8f3cdc2c8d
24 changed files with 527 additions and 260 deletions
  1. 25 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/SaveUserInfoByProjectClient.java
  2. 12 2
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/TreeNodeVO.java
  3. 5 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsFormElementVO.java
  4. 41 36
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/DeptVO.java
  5. 108 91
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
  6. 19 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java
  7. 12 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsFormElementController.java
  8. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java
  9. 19 11
      blade-service/blade-manager/src/main/java/org/springblade/manager/excel/WbsExcelBatchUtil.java
  10. 25 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/SaveUserInfoByProjectClientImpl.java
  11. 3 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsFormElementMapper.java
  12. 4 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsFormElementMapper.xml
  13. 4 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml
  14. 3 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsFormElementService.java
  15. 11 12
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java
  16. 42 44
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java
  17. 29 27
      blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml
  18. 1 0
      blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java
  19. 2 2
      blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java
  20. 13 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java
  21. 33 27
      blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.java
  22. 11 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml
  23. 5 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java
  24. 98 2
      blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

+ 25 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/SaveUserInfoByProjectClient.java

@@ -0,0 +1,25 @@
+package org.springblade.manager.feign;
+
+import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+import static org.springblade.core.launch.constant.AppConstant.APPLICATION_NAME_PREFIX;
+
+@FeignClient(value = APPLICATION_NAME_PREFIX + "manager")
+public interface SaveUserInfoByProjectClient {
+
+    /**
+     * URL常量
+     */
+    String SEARCH_USER_INFO_AND_PROJECT = "/api/manager/searchUserInfoAndProject";
+
+    /**
+     * 获取用户引用项目合同角色信息
+     */
+    @GetMapping(SEARCH_USER_INFO_AND_PROJECT)
+    List<SaveUserInfoByProjectDTO> searchUserInfoAndProject(@RequestParam("userId") String userId, @RequestParam("roleId") String roleId);
+}

+ 12 - 2
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/TreeNodeVO.java

@@ -8,7 +8,7 @@ import org.springblade.core.tool.node.TreeNode;
 
 
 /**
- * 重写了TreeNode实体,增加了type、primaryKeyId字段用于返回给前端
+ * 重写了TreeNode实体,增加了字段
  */
 public class TreeNodeVO extends BaseNode<TreeNode> {
     private static final long serialVersionUID = 1L;
@@ -32,9 +32,19 @@ public class TreeNodeVO extends BaseNode<TreeNode> {
 
     private Integer isExistForm;
 
+    private String tenantId;
+
     public TreeNodeVO() {
     }
 
+    public String getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(String tenantId) {
+        this.tenantId = tenantId;
+    }
+
     public Integer getIsExistForm() {
         return isExistForm;
     }
@@ -100,7 +110,7 @@ public class TreeNodeVO extends BaseNode<TreeNode> {
     }
 
     public String toString() {
-        return "TreeNode(deptCategory=" + this.getDeptCategory() + ",isExistForm" + this.getIsExistForm() + ",wbsType=" + this.getWbsType() + ", primaryKeyId=" + this.getPrimaryKeyId() + ", type=" + this.getType() + ", title=" + this.getTitle() + ", key=" + this.getKey() + ", value=" + this.getValue() + ")";
+        return "TreeNode(deptCategory=" + this.getDeptCategory() + ",tenantId" + this.getTenantId() + ",isExistForm" + this.getIsExistForm() + ",wbsType=" + this.getWbsType() + ", primaryKeyId=" + this.getPrimaryKeyId() + ", type=" + this.getType() + ", title=" + this.getTitle() + ", key=" + this.getKey() + ", value=" + this.getValue() + ")";
     }
 
     public boolean equals(final Object o) {

+ 5 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsFormElementVO.java

@@ -37,4 +37,9 @@ public class WbsFormElementVO extends WbsFormElement {
      */
     private String tableElementKey;
 
+    /**
+     * 实体表名
+     */
+    private String initTableName;
+
 }

+ 41 - 36
blade-service-api/blade-system-api/src/main/java/org/springblade/system/vo/DeptVO.java

@@ -37,48 +37,53 @@ import java.util.List;
 @EqualsAndHashCode(callSuper = true)
 @ApiModel(value = "DeptVO对象", description = "DeptVO对象")
 public class DeptVO extends Dept implements INode<DeptVO> {
-	private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1L;
 
-	/**
-	 * 主键ID
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long id;
+    /**
+     * 主键ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
 
-	/**
-	 * 父节点ID
-	 */
-	@JsonSerialize(using = ToStringSerializer.class)
-	private Long parentId;
+    /**
+     * 父节点ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long parentId;
 
-	/**
-	 * 子孙节点
-	 */
-	@JsonInclude(JsonInclude.Include.NON_EMPTY)
-	private List<DeptVO> children;
+    /**
+     * 子孙节点
+     */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private List<DeptVO> children;
 
-	/**
-	 * 是否有子孙节点
-	 */
-	@JsonInclude(JsonInclude.Include.NON_EMPTY)
-	private Boolean hasChildren;
+    /**
+     * 是否有子孙节点
+     */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private Boolean hasChildren;
 
-	@Override
-	public List<DeptVO> getChildren() {
-		if (this.children == null) {
-			this.children = new ArrayList<>();
-		}
-		return this.children;
-	}
+    @Override
+    public List<DeptVO> getChildren() {
+        if (this.children == null) {
+            this.children = new ArrayList<>();
+        }
+        return this.children;
+    }
 
-	/**
-	 * 上级机构
-	 */
-	private String parentName;
+    /**
+     * 上级机构
+     */
+    private String parentName;
 
-	/**
-	 * 机构类型名称
-	 */
-	private String deptCategoryName;
+    /**
+     * 机构类型名称
+     */
+    private String deptCategoryName;
+
+    /**
+     * 租户id
+     */
+    private String tenantId;
 
 }

+ 108 - 91
blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java

@@ -22,6 +22,7 @@ import io.swagger.annotations.ApiParam;
 import org.springblade.core.launch.constant.AppConstant;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.constant.RoleConstant;
+import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.entity.UserInfo;
 import org.springblade.system.user.entity.UserOauth;
@@ -31,105 +32,121 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import java.util.List;
+
 /**
  * User Feign接口类
  *
  * @author Chill
  */
 @FeignClient(
-	value = AppConstant.APPLICATION_USER_NAME
+        value = AppConstant.APPLICATION_USER_NAME
 )
 public interface IUserClient {
 
-	String API_PREFIX = "/client";
-	String USER_INFO = API_PREFIX + "/user-info";
-	String USER_INFO_BY_TYPE = API_PREFIX + "/user-info-by-type";
-	String USER_INFO_BY_ID = API_PREFIX + "/user-info-by-id";
-	String USER_INFO_BY_ACCOUNT = API_PREFIX + "/user-info-by-account";
-	String USER_AUTH_INFO = API_PREFIX + "/user-auth-info";
-	String SAVE_USER = API_PREFIX + "/save-user";
-	String REMOVE_USER = API_PREFIX + "/remove-user";
-	String RESET_USER = API_PREFIX + "/reset-password";
-	String USER_STATUS = API_PREFIX + "/user-status";
-
-	/**
-	 * 获取用户信息
-	 *
-	 * @param userId 用户id
-	 * @return
-	 */
-	@GetMapping(USER_INFO_BY_ID)
-	R<User> userInfoById(@RequestParam("userId") Long userId);
-
-
-	/**
-	 * 根据账号获取用户信息
-	 *
-	 * @param tenantId 租户id
-	 * @param account  账号
-	 * @return
-	 */
-	@GetMapping(USER_INFO_BY_ACCOUNT)
-	R<User> userByAccount(@RequestParam("tenantId") String tenantId, @RequestParam("account") String account);
-
-	/**
-	 * 获取用户信息
-	 *
-	 * @param tenantId 租户ID
-	 * @param account  账号
-	 * @return
-	 */
-	@GetMapping(USER_INFO)
-	R<UserInfo> userInfo(@RequestParam("tenantId") String tenantId, @RequestParam("account") String account);
-
-	/**
-	 * 获取用户信息
-	 *
-	 * @param tenantId 租户ID
-	 * @param account  账号
-	 * @param userType 用户平台
-	 * @return
-	 */
-	@GetMapping(USER_INFO_BY_TYPE)
-	R<UserInfo> userInfo(@RequestParam("tenantId") String tenantId, @RequestParam("account") String account, @RequestParam("userType") String userType);
-
-	/**
-	 * 获取第三方平台信息
-	 *
-	 * @param userOauth 第三方授权用户信息
-	 * @return UserInfo
-	 */
-	@PostMapping(USER_AUTH_INFO)
-	R<UserInfo> userAuthInfo(@RequestBody UserOauth userOauth);
-
-	/**
-	 * 新建用户
-	 *
-	 * @param user 用户实体
-	 * @return
-	 */
-	@PostMapping(SAVE_USER)
-	R<Boolean> saveUser(@RequestBody User user);
-
-	/**
-	 * 删除用户
-	 *
-	 * @param tenantIds 租户id集合
-	 * @return
-	 */
-	@PostMapping(REMOVE_USER)
-	R<Boolean> removeUser(@RequestParam("tenantIds") String tenantIds);
-
-	/**
-	 * 重置密码
-	 */
-	@PostMapping(RESET_USER)
-	R resetPassword(@ApiParam(value = "userId集合", required = true) @RequestParam String userIds);
-
-	/**
-	 * 获取用户状态
-	 */
-	@GetMapping(USER_STATUS)
-	User getUserStatus(@ApiParam(value = "userName", required = true) @RequestParam String userName);
+    String API_PREFIX = "/client";
+    String USER_INFO = API_PREFIX + "/user-info";
+    String USER_INFO_BY_TYPE = API_PREFIX + "/user-info-by-type";
+    String USER_INFO_BY_ID = API_PREFIX + "/user-info-by-id";
+    String USER_INFO_BY_ACCOUNT = API_PREFIX + "/user-info-by-account";
+    String USER_AUTH_INFO = API_PREFIX + "/user-auth-info";
+    String SAVE_USER = API_PREFIX + "/save-user";
+    String REMOVE_USER = API_PREFIX + "/remove-user";
+    String RESET_USER = API_PREFIX + "/reset-password";
+    String USER_STATUS = API_PREFIX + "/user-status";
+    String USER_ROLE_ID = API_PREFIX + "/user-roleId-update";
+    String UPDATE_USER_ROLE_ID = API_PREFIX + "/user-roleId-update-two";
+
+    /**
+     * 获取用户信息
+     *
+     * @param userId 用户id
+     * @return
+     */
+    @GetMapping(USER_INFO_BY_ID)
+    R<User> userInfoById(@RequestParam("userId") Long userId);
+
+
+    /**
+     * 根据账号获取用户信息
+     *
+     * @param tenantId 租户id
+     * @param account  账号
+     * @return
+     */
+    @GetMapping(USER_INFO_BY_ACCOUNT)
+    R<User> userByAccount(@RequestParam("tenantId") String tenantId, @RequestParam("account") String account);
+
+    /**
+     * 获取用户信息
+     *
+     * @param tenantId 租户ID
+     * @param account  账号
+     * @return
+     */
+    @GetMapping(USER_INFO)
+    R<UserInfo> userInfo(@RequestParam("tenantId") String tenantId, @RequestParam("account") String account);
+
+    /**
+     * 获取用户信息
+     *
+     * @param tenantId 租户ID
+     * @param account  账号
+     * @param userType 用户平台
+     * @return
+     */
+    @GetMapping(USER_INFO_BY_TYPE)
+    R<UserInfo> userInfo(@RequestParam("tenantId") String tenantId, @RequestParam("account") String account, @RequestParam("userType") String userType);
+
+    /**
+     * 获取第三方平台信息
+     *
+     * @param userOauth 第三方授权用户信息
+     * @return UserInfo
+     */
+    @PostMapping(USER_AUTH_INFO)
+    R<UserInfo> userAuthInfo(@RequestBody UserOauth userOauth);
+
+    /**
+     * 新建用户
+     *
+     * @param user 用户实体
+     * @return
+     */
+    @PostMapping(SAVE_USER)
+    R<Boolean> saveUser(@RequestBody User user);
+
+    /**
+     * 删除用户
+     *
+     * @param tenantIds 租户id集合
+     * @return
+     */
+    @PostMapping(REMOVE_USER)
+    R<Boolean> removeUser(@RequestParam("tenantIds") String tenantIds);
+
+    /**
+     * 重置密码
+     */
+    @PostMapping(RESET_USER)
+    R resetPassword(@ApiParam(value = "userId集合", required = true) @RequestParam String userIds);
+
+    /**
+     * 获取用户状态
+     */
+    @GetMapping(USER_STATUS)
+    User getUserStatus(@ApiParam(value = "userName", required = true) @RequestParam String userName);
+
+    /**
+     * 修改RoleId
+     */
+    @PostMapping(USER_ROLE_ID)
+    boolean updateUserRoleId(@RequestBody List<SaveUserInfoByProjectDTO> list);
+
+    /**
+     * 删除当前用户RoleId
+     */
+    @GetMapping(UPDATE_USER_ROLE_ID)
+    boolean updateUserRoleIdTwo(@RequestParam("userId") String userId, @RequestParam("roleId") String roleId);
 
 }

+ 19 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.manager.controller;
 
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.nacos.common.utils.MD5Utils;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -298,12 +299,14 @@ public class ContractInfoController extends BladeController {
                         Wrappers.<SaveUserInfoByProjectDTO>query().lambda().
                                 eq(SaveUserInfoByProjectDTO::getProjectId, lists.getProjectId()).
                                 eq(SaveUserInfoByProjectDTO::getContractId, lists.getContractId()).
-                                eq(SaveUserInfoByProjectDTO::getRoleId, lists.getRoleId()).
-                                eq(SaveUserInfoByProjectDTO::getUserId, lists.getUserId()));
+                                //eq(SaveUserInfoByProjectDTO::getRoleId, lists.getRoleId()).
+                                        eq(SaveUserInfoByProjectDTO::getUserId, lists.getUserId()));
                 if (row > 0L) {
-                    throw new ServiceException("当前用户角色岗位已存在,请重新选择");
+                    throw new ServiceException("当前用户类型已存在合同段,请重新选择项目合同段添加");
                 }
             });
+            //添加User-roleId字段
+            iUserClient.updateUserRoleId(list);
             boolean result = saveUserInfoByProject.saveBatch(list);
             if (result) {
                 return R.success("保存成功");
@@ -319,7 +322,20 @@ public class ContractInfoController extends BladeController {
     @PostMapping("/removeUsersByIds")
     @ApiOperationSupport(order = 14)
     @ApiOperation(value = "逻辑删除", notes = "传入当前列表用户的记录ids")
+    @Transactional(rollbackFor = Exception.class)
     public R removeUsersByIds(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+        if (StringUtils.isEmpty(ids)) {
+            throw new ServiceException("请选择要删除的数据");
+        } else if (Func.toLongList(ids).size() > 1) {
+            //TODO 未考虑批量删除
+            throw new ServiceException("功能未开放");
+        }
+        //用户关联信息
+        SaveUserInfoByProjectDTO saveUserInfoByProjectDTO = saveUserInfoByProjectMapper.selectById(ids);
+        String userId = saveUserInfoByProjectDTO.getUserId();
+        String roleId = saveUserInfoByProjectDTO.getRoleId();
+        //删除当前用户RoleId
+        iUserClient.updateUserRoleIdTwo(userId, roleId);
         return R.status(saveUserInfoByProject.deleteLogic(Func.toLongList(ids)));
     }
 

+ 12 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsFormElementController.java

@@ -190,4 +190,16 @@ public class WbsFormElementController extends BladeController {
     }
 
 
+    /**
+     * 根据元素码获取元素详情
+     */
+    /*@ApiOperationSupport(order = 9)
+    @ApiOperation(value = "根据元素码获取元素详情", notes = "fId、tableElementKey")
+    @RequestMapping(value = "/searchElementDetailByCondition", method = RequestMethod.GET)
+    public R<WbsFormElement> searchElementDetailByCondition(String fId, String tableElementKey) {
+        WbsFormElement detail = wbsFormElementService.searchElementDetailByTableElementKey(fId, tableElementKey);
+        return R.data(detail);
+    }*/
+
+
 }

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

@@ -348,7 +348,7 @@ public class WbsTreeController extends BladeController {
      * 导出WBS元素批量模板
      */
     @GetMapping("/export-batchTemplate")
-    @ApiOperationSupport(order = 9)
+    @ApiOperationSupport(order = 16)
     @ApiOperation(value = "导出WBS元素批量模板")
     public void exportWbsTreeFormBatch(HttpServletResponse response) {
         List<WbsFormElementBatchExcel> list = new ArrayList<>();
@@ -359,7 +359,7 @@ public class WbsTreeController extends BladeController {
     /**
      * Wbs公有树节点批量导入元素表、元素
      */
-    @ApiOperationSupport(order = 10)
+    @ApiOperationSupport(order = 17)
     @ApiOperation(value = "Wbs公有树节点批量导入元素表与元素", notes = "传入excel文件/wbsTree对象")
     @RequestMapping(value = "/import-wbsTreeFormBatch", method = RequestMethod.POST)
     public R importWbsTreeTableAndForm(@RequestPart("excelFile") MultipartFile excelFile,

+ 19 - 11
blade-service/blade-manager/src/main/java/org/springblade/manager/excel/WbsExcelBatchUtil.java

@@ -11,26 +11,26 @@ import org.springframework.web.multipart.MultipartFile;
 
 import java.io.*;
 import java.util.*;
-import java.util.stream.Collectors;
 
 public class WbsExcelBatchUtil {
-/*    public static void main(String[] args) throws IOException {
+    /*public static void main(String[] args) throws IOException {
         WbsExcelBatchUtil excelUtil = new WbsExcelBatchUtil();
         //读取excel数据
-        ArrayList<Map<String, String>> result = excelUtil.readExcelToObj("C:\\Users\\泓创开发\\Desktop\\隧道总体.xlsx");
+        ArrayList<Map<String, String>> result = excelUtil.readExcelToObj("C:\\Users\\泓创开发\\Desktop\\隧道总体.xls");
         for (Map<String, String> map : result) {
             System.out.println(map);
         }
-        List<Map<String, String>> maps = WbsExcelBatchUtil.removeRepeatMapByKey(result, "表名");
-
+        System.out.println("-----------------");
+        List<Map<String, String>> list = removeRepeatMapByKey(result, "表名");
+        for (Map<String, String> map : list) {
+            System.out.println(map);
+        }
     }*/
 
 
-
-
-
     /**
      * List<Map>去重
+     *
      * @param list
      * @param mapKey
      * @return
@@ -54,9 +54,9 @@ public class WbsExcelBatchUtil {
         return listMap;
     }
 
-
     /**
      * 读取excel数据
+     *
      * @param path
      */
     public ArrayList<Map<String, String>> readExcelToObj(String path) throws IOException {
@@ -77,6 +77,7 @@ public class WbsExcelBatchUtil {
 
     /**
      * 读取excel文件
+     *
      * @param wb
      * @param sheetIndex    sheet页下标:从0开始
      * @param startReadLine 开始读取的行:从0开始
@@ -87,6 +88,7 @@ public class WbsExcelBatchUtil {
         Row row = null;
         ArrayList<Map<String, String>> result = new ArrayList<Map<String, String>>();
         for (int i = startReadLine; i < sheet.getLastRowNum() - tailLine + 1; i++) {
+
             row = sheet.getRow(i);
             Map<String, String> map = new HashMap<String, String>();
             for (Cell c : row) {
@@ -149,7 +151,8 @@ public class WbsExcelBatchUtil {
     }
 
     /**
-     * 判断合并行
+     * 判断合并了行
+     *
      * @param sheet
      * @param row
      * @param column
@@ -174,6 +177,7 @@ public class WbsExcelBatchUtil {
 
     /**
      * 判断指定的单元格是否是合并单元格
+     *
      * @param sheet
      * @param row    行下标
      * @param column 列下标
@@ -198,6 +202,7 @@ public class WbsExcelBatchUtil {
 
     /**
      * 判断sheet页中是否含有合并单元格
+     *
      * @param sheet
      * @return
      */
@@ -207,6 +212,7 @@ public class WbsExcelBatchUtil {
 
     /**
      * 合并单元格
+     *
      * @param sheet
      * @param firstRow 开始行
      * @param lastRow  结束行
@@ -219,6 +225,7 @@ public class WbsExcelBatchUtil {
 
     /**
      * 获取单元格的值
+     *
      * @param cell
      * @return
      */
@@ -297,6 +304,7 @@ public class WbsExcelBatchUtil {
 
     /**
      * 获取path路径
+     *
      * @param file
      * @return
      * @throws IOException
@@ -315,4 +323,4 @@ public class WbsExcelBatchUtil {
         }
         return convFile;
     }
-}
+}

+ 25 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/SaveUserInfoByProjectClientImpl.java

@@ -0,0 +1,25 @@
+package org.springblade.manager.feign;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.AllArgsConstructor;
+import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
+import org.springblade.manager.service.SaveUserInfoByProjectService;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+
+@RestController
+@AllArgsConstructor
+public class SaveUserInfoByProjectClientImpl implements SaveUserInfoByProjectClient {
+
+    private final SaveUserInfoByProjectService saveUserInfoByProjectService;
+
+    @Override
+    public List<SaveUserInfoByProjectDTO> searchUserInfoAndProject(String userId, String roleId) {
+        return saveUserInfoByProjectService.list(
+                Wrappers.<SaveUserInfoByProjectDTO>query().lambda()
+                        .eq(SaveUserInfoByProjectDTO::getUserId, userId)
+                        .eq(SaveUserInfoByProjectDTO::getRoleId, roleId));
+    }
+}

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

@@ -23,6 +23,7 @@ import org.apache.ibatis.annotations.Param;
 import org.springblade.manager.dto.WbsFormElementDTO;
 import org.springblade.manager.dto.WbsFormElementDTO2;
 import org.springblade.manager.entity.WbsFormElement;
+import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.vo.WbsFormElementVO;
 
 import java.util.List;
@@ -60,4 +61,6 @@ public interface WbsFormElementMapper extends BaseMapper<WbsFormElement> {
     void updateSortById(String id, Integer sort);
 
     WbsFormElementVO selectDetailById(Long id);
+
+    WbsTree selectElementInTableByFid(String fId);
 }

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

@@ -75,4 +75,8 @@
         FROM m_wbs_form_element t WHERE t.id = #{id} AND status = 1 AND is_deleted = 0
     </select>
 
+    <select id="selectElementInTableByFid" resultType="org.springblade.manager.entity.WbsTree">
+        SELECT * FROM m_wbs_tree WHERE id = #{fId} AND type = 2 AND is_deleted=0 AND status = 1
+    </select>
+
 </mapper>

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

@@ -68,6 +68,7 @@
         <result column="e_allow_deviation" property="eAllowDeviation"/>
         <result column="e_inspection_method" property="eInspectionMethod"/>
         <result column="tableElementKey" property="tableElementKey"/>
+        <result column="initTableName" property="initTableName"/>
     </resultMap>
 
     <insert id="addFormElement" parameterType="org.springblade.manager.dto.WbsFormElementDTO">
@@ -149,6 +150,7 @@
     <update id="deleteLogicByWbsId">
         update m_wbs_tree set is_deleted = 1 where wbs_id = #{ids} and status = 1
     </update>
+
     <update id="updateIsExistFormById">
         UPDATE m_wbs_tree SET is_exist_form = 1 WHERE id = #{id} AND status = 1 AND is_deleted = 0
     </update>
@@ -248,7 +250,8 @@
     <select id="selectFormElements" resultMap="wbsFormElementMap">
         SELECT
             w.f_id as fId,w.e_key,w.id,w.e_name,e_type,e_length,e_allow_deviation,e_Inspection_method,
-            (select CONCAT(dept_name,'_',w.e_name) from m_wbs_tree where id = #{id}) AS "tableElementKey"
+            (select CONCAT(dept_name,'_',w.e_name) from m_wbs_tree where id = #{id} AND status = 1 AND is_deleted = 0) AS "tableElementKey",
+            (select init_table_name from m_wbs_tree where id = w.f_id AND type = 2 AND status = 1 AND is_deleted = 0 ) AS "initTableName"
         FROM
             m_wbs_form_element w
         WHERE

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

@@ -64,4 +64,7 @@ public interface IWbsFormElementService extends BaseService<WbsFormElement> {
     WbsFormElementVO getDetailById(WbsFormElement wbsFormElement);
 
     void importElement2(List<WbsFormElementBatchExcel> data, Boolean isCovered, String tableId);
+
+    WbsFormElement searchElementDetailByTableElementKey(String fId,String tableElementKey);
+
 }

+ 11 - 12
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java

@@ -18,35 +18,25 @@ package org.springblade.manager.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
-import org.springblade.common.utils.SnowFlakeUtil;
-import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.Func;
-import org.springblade.manager.dto.FormElementDTO;
 import org.springblade.manager.dto.WbsFormElementDTO2;
 import org.springblade.manager.entity.WbsFormElement;
-import org.springblade.manager.excel.WbsExcelBatchUtil;
+import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.excel.WbsFormElementBatchExcel;
 import org.springblade.manager.excel.WbsFormElementExcel;
 import org.springblade.manager.mapper.WbsFormElementMapper;
 import org.springblade.manager.service.IWbsFormElementService;
-import org.springblade.manager.service.IWbsTreeService;
 import org.springblade.manager.vo.WbsFormElementVO;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
 
-import javax.annotation.Resource;
-import java.io.File;
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 
 /**
  * wbs表单元素 服务实现类
@@ -311,5 +301,14 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
         //TODO
     }
 
+    @Override
+    public WbsFormElement searchElementDetailByTableElementKey(String fId, String tableElementKey) {
+        String[] s = tableElementKey.split("_");
+        WbsTree wbsTree = baseMapper.selectElementInTableByFid(fId);
+        return baseMapper.selectOne(Wrappers.<WbsFormElement>query().lambda()
+                .eq(WbsFormElement::getFId, fId)
+                .eq(WbsFormElement::getEName, s[1]));
+    }
+
 
 }

+ 42 - 44
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -17,7 +17,6 @@
 package org.springblade.manager.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import net.sourceforge.pinyin4j.PinyinHelper;
@@ -26,11 +25,9 @@ import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
 import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
 import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
 import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
-import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.commons.lang.StringUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
-import org.springblade.core.log.logger.BladeLogger;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.constant.BladeConstant;
@@ -55,7 +52,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.annotation.Resource;
 import java.io.File;
 import java.io.IOException;
 import java.util.*;
@@ -146,31 +142,17 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
     }
 
     public boolean submit3(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);
             //设置表示该父节点下存在表单
-            baseMapper.updateIsExistFormById(parent.getId());
+            baseMapper.updateIsExistFormById(dept.getParentId());
         }
-        //设置类型默认值为 '2' 表单
-        dept.setType(2);
-        dept.setIsDeleted(BladeConstant.DB_NOT_DELETED);
-        return saveOrUpdate(dept);
+        return save(dept);
 
     }
 
     /**
      * wbs元素表、元素批量导入
+     *
      * @param excelFile
      * @param wbsTree
      * @return
@@ -187,41 +169,55 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
             ArrayList<Map<String, String>> result = excelUtil.readExcelToObj(canonicalPath);
             List<Map<String, String>> maps = WbsExcelBatchUtil.removeRepeatMapByKey(result, "表名");
             assert maps != null;
-            //创建表单,获取Id、deptName、initTableName集合
             List<WbsTreeBatchImportDTO> list = new ArrayList<>();
+            //初始化
+            wbsTree.setTenantId(wbsTree.getTenantId());
+            wbsTree.setDeptCategory(1);
+            wbsTree.setWbsId(wbsTree.getWbsId());
+            wbsTree.setParentId(wbsTree.getId());
+            String ancestors = wbsTree.getAncestors() + StringPool.COMMA + wbsTree.getId();
+            wbsTree.setAncestors(ancestors);
+            wbsTree.setType(2);
+            wbsTree.setIsDeleted(BladeConstant.DB_NOT_DELETED);
             for (Map<String, String> map : maps) {
                 String deptName = map.get("表名");
-                if (deptName.length() > 100 || deptName.length() < 1) {
+                /*if (deptName.length() > 100 || deptName.length() < 1) {
                     throw new ServiceException("表名长度错误,输入范围1-100个字符长度");
-                }
-                wbsTree.setWbsId(wbsTree.getWbsId());
+                }*/
                 wbsTree.setDeptName(deptName);
                 wbsTree.setTableType(getTableType(map.get("表类型")));
-                //初始化实体表名
+                //初始化实体表
                 Long id = SnowFlakeUtil.getId();
-                wbsTree.setId(id);
                 String initTableName = "m_wbs_form_" + DateUtil.time() + "_" + id.toString();
                 wbsTree.setInitTableName(initTableName);
+                wbsTree.setId(id);
                 //创建表单
-                submit3(wbsTree);
-                //创建对应实体表
-                initTable(initTableName);
-                //返回信息
-                WbsTreeBatchImportDTO wbsTreeBatchImportDTO = new WbsTreeBatchImportDTO();
-                wbsTreeBatchImportDTO.setId(id);
-                wbsTreeBatchImportDTO.setTableName(deptName);
-                wbsTreeBatchImportDTO.setInitTableName(initTableName);
-                list.add(wbsTreeBatchImportDTO);
+                boolean b = submit3(wbsTree);
+                if (b) {
+                    //创建对应实体表
+                    initTable(initTableName);
+                    //返回信息
+                    WbsTreeBatchImportDTO wbsTreeBatchImportDTO = new WbsTreeBatchImportDTO();
+                    wbsTreeBatchImportDTO.setId(id);
+                    wbsTreeBatchImportDTO.setTableName(deptName);
+                    wbsTreeBatchImportDTO.setInitTableName(initTableName);
+                    list.add(wbsTreeBatchImportDTO);
+                }
             }
-            //创建元素、修改新增对应实体表字段
+            //创建元素新增对应实体表字段
             list.forEach(i -> {
+                Long elementTableId = i.getId();
+                String tableName = i.getTableName();
+                String initTableName = i.getInitTableName();
+
                 for (Map<String, String> map : result) {
-                    Long elementTableId = i.getId();
-                    String tableName = i.getTableName();
-                    String initTableName = i.getInitTableName();
+                    System.out.println("i:"+i);
+                    System.out.println("map:"+map);
                     int keyNumb = 0;
                     if (tableName.equals(map.get("表名"))) {
-                        keyNumb++;
+                        System.out.println(map);
+                        //TODO
+                        /*keyNumb++;
                         WbsFormElement wbsFormElement = new WbsFormElement();
                         wbsFormElement.setEName(map.get("字段名"));
                         String key = "key_" + keyNumb;
@@ -233,16 +229,18 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                         wbsFormElement.setEAllowDeviation(map.get("允许偏差范围"));
                         wbsFormElement.setRemark(map.get("备注"));
                         wbsFormElementService.save(wbsFormElement);
-                        //初始化实体表字段
+                        //新增实体表字段
                         baseMapper.alterTableFiled(initTableName,
                                 wbsFormElement.getEKey(),
                                 getInitTableFiledType(wbsFormElement.getEType()),
-                                wbsFormElement.getELength());
+                                wbsFormElement.getELength());*/
                     }
                 }
             });
+
             return true;
-        } catch (IOException e) {
+        } catch (
+                IOException e) {
             e.printStackTrace();
         } finally {
             File file2 = new File(canonicalPath);

+ 29 - 27
blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml

@@ -28,28 +28,29 @@
         <result column="has_children" property="hasChildren"/>
     </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="tenantId" property="tenantId"/>
     </resultMap>
 
     <select id="lazyList" resultMap="deptVOResultMap">
         SELECT
-            dept.* ,
-            (
-                SELECT
-                    CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
-                FROM
-                    blade_dept
-                WHERE
-                    parent_id = dept.id and is_deleted = 0
-            ) AS "has_children"
+        dept.* ,
+        (
+        SELECT
+        CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
+        FROM
+        blade_dept
+        WHERE
+        parent_id = dept.id and is_deleted = 0
+        ) AS "has_children"
         FROM
-            blade_dept dept
+        blade_dept dept
         WHERE dept.is_deleted = 0
         <if test="param1!=null and param1!=''">
             and dept.tenant_id = #{param1}
@@ -74,25 +75,26 @@
         ORDER BY sort
     </select>
 
-    <select id="lazyTree" resultMap="treeNodeResultMap" >
+    <select id="lazyTree" resultMap="treeNodeResultMap">
         SELECT
-            dept.id,
-            dept.parent_id,
-            dept.dept_name AS title,
-            dept.id AS "value",
-            dept.id AS "key",
-            (
-                SELECT
-                    CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
-                FROM
-                    blade_dept
-                WHERE
-                    parent_id = dept.id and is_deleted = 0
-            ) AS "has_children"
+        dept.id,
+        dept.parent_id,
+        dept.dept_name AS title,
+        dept.id AS "value",
+        dept.id AS "key",
+        dept.tenant_id AS "tenantId",
+        (
+        SELECT
+        CASE WHEN count(1) > 0 THEN 1 ELSE 0 END
+        FROM
+        blade_dept
+        WHERE
+        parent_id = dept.id and is_deleted = 0
+        ) AS "has_children"
         FROM
-            blade_dept dept
+        blade_dept dept
         WHERE
-            dept.parent_id = #{param2} AND dept.is_deleted = 0
+        dept.parent_id = #{param2} AND dept.is_deleted = 0
         <if test="param1!=null and param1!=''">
             and dept.tenant_id = #{param1}
         </if>

+ 1 - 0
blade-service/blade-system/src/main/java/org/springblade/system/service/impl/DeptServiceImpl.java

@@ -87,6 +87,7 @@ public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements ID
 	public List<DeptVO> lazyTree(String tenantId, Long parentId) {
 		if (AuthUtil.isAdministrator()) {
 			tenantId = StringPool.EMPTY;
+			tenantId = AuthUtil.getTenantId();
 		}
 		return ForestNodeMerger.merge(baseMapper.lazyTree(tenantId, parentId));
 	}

+ 2 - 2
blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java

@@ -145,7 +145,7 @@ public class UserController {
     /**
      * 新增或修改2
      */
-    @PostMapping("/submitTow")
+    @PostMapping("/submit2")
     @ApiOperationSupport(order = 4)
     @ApiOperation(value = "新增2", notes = "传入UserDTO")
     @PreAuth(RoleConstant.HAS_ROLE_ADMIN)
@@ -169,7 +169,7 @@ public class UserController {
     /**
      * 修改2
      */
-    @PostMapping("/updateTow")
+    @PostMapping("/update2")
     @ApiOperationSupport(order = 5)
     @ApiOperation(value = "修改2", notes = "传入User")
     public R updateTow(@Valid @RequestBody User user) {

+ 13 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java

@@ -21,6 +21,7 @@ import lombok.AllArgsConstructor;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.entity.UserInfo;
 import org.springblade.system.user.entity.UserOauth;
@@ -31,6 +32,8 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 /**
  * 用户服务Feign实现类
  *
@@ -97,4 +100,14 @@ public class UserClient implements IUserClient {
         return service.selectUserByUserName(userName);
     }
 
+    @Override
+    public boolean updateUserRoleId(List<SaveUserInfoByProjectDTO> list) {
+        return service.updateUserRoleId(list);
+    }
+
+    @Override
+    public boolean updateUserRoleIdTwo(String userId, String roleId) {
+        return service.updateUserRoleIdTwo(userId, roleId);
+    }
+
 }

+ 33 - 27
blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.java

@@ -32,32 +32,38 @@ import java.util.List;
  */
 public interface UserMapper extends BaseMapper<User> {
 
-	/**
-	 * 自定义分页
-	 *
-	 * @param page
-	 * @param user
-	 * @param deptIdList
-	 * @param tenantId
-	 * @return
-	 */
-	List<User> selectUserPage(IPage<User> page, @Param("user") User user, @Param("deptIdList") List<Long> deptIdList, @Param("tenantId") String tenantId);
-
-	/**
-	 * 获取用户
-	 *
-	 * @param tenantId
-	 * @param account
-	 * @return
-	 */
-	User getUser(String tenantId, String account);
-
-	/**
-	 * 获取导出用户数据
-	 *
-	 * @param queryWrapper
-	 * @return
-	 */
-	List<UserExcel> exportUser(@Param("ew") Wrapper<User> queryWrapper);
+    /**
+     * 自定义分页
+     *
+     * @param page
+     * @param user
+     * @param deptIdList
+     * @param tenantId
+     * @return
+     */
+    List<User> selectUserPage(IPage<User> page, @Param("user") User user, @Param("deptIdList") List<Long> deptIdList, @Param("tenantId") String tenantId);
+
+    /**
+     * 获取用户
+     *
+     * @param tenantId
+     * @param account
+     * @return
+     */
+    User getUser(String tenantId, String account);
+
+    /**
+     * 获取导出用户数据
+     *
+     * @param queryWrapper
+     * @return
+     */
+    List<UserExcel> exportUser(@Param("ew") Wrapper<User> queryWrapper);
+
+    int updateRoleIdById(String id, String roleId1);
+
+    int updateRoleIdByIdTwo(String id, String roleId1);
+
+    int updateRoleId(String id, String roleId1);
 
 }

+ 11 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml

@@ -30,6 +30,17 @@
         <result column="position" property="position"/>
         <result column="company_name" property="companyName"/>
     </resultMap>
+    <update id="updateRoleIdById">
+        UPDATE blade_user SET role_id = CONCAT(role_id,',',#{roleId1}) WHERE id = #{id} AND status = 1 AND is_deleted=0
+    </update>
+
+    <update id="updateRoleIdByIdTwo">
+        UPDATE blade_user SET role_id = #{roleId1} WHERE id = #{id} AND status = 1 AND is_deleted=0
+    </update>
+
+    <update id="updateRoleId">
+        UPDATE blade_user SET role_id = #{roleId1} WHERE id = #{id} AND status = 1 AND is_deleted=0
+    </update>
 
     <select id="selectUserPage" resultMap="userResultMap">
         select * from blade_user where is_deleted = 0

+ 5 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java

@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.core.mp.support.Query;
+import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 import org.springblade.system.user.dto.UserDTO;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.entity.UserInfo;
@@ -228,4 +229,8 @@ public interface IUserService extends BaseService<User> {
 
     User selectUserByUserName(String userName);
 
+    boolean updateUserRoleId(List<SaveUserInfoByProjectDTO> list);
+
+    boolean updateUserRoleIdTwo(String userId, String roleId);
+
 }

+ 98 - 2
blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

@@ -19,6 +19,7 @@ package org.springblade.system.user.service.impl;
 
 import cn.hutool.crypto.SecureUtil;
 import com.alibaba.nacos.common.utils.MD5Utils;
+import com.alibaba.nacos.common.utils.StringUtils;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -39,6 +40,7 @@ import org.springblade.core.tool.support.Kv;
 import org.springblade.core.tool.utils.*;
 import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 import org.springblade.manager.feign.ContractClient;
+import org.springblade.manager.feign.SaveUserInfoByProjectClient;
 import org.springblade.system.cache.DictCache;
 import org.springblade.system.cache.ParamCache;
 import org.springblade.system.cache.SysCache;
@@ -78,6 +80,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
     private final ISysClient sysClient;
     private final BladeTenantProperties tenantProperties;
     private final ContractClient contractClient;
+    private final SaveUserInfoByProjectClient saveUserInfoByProjectClient;
 
 
     @Override
@@ -142,13 +145,28 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
         if (userCount > 0L && Func.isEmpty(user.getId())) {
             throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount()));
         }
+        //获取Role信息
+        if (user.getProjectAndUserList().size() <= 0) {
+            throw new ServiceException("请关联项目合同段用户类型信息");
+        }
 
+        StringBuffer stringBuffer = new StringBuffer();
+        Set<String> set = new TreeSet<>();
+        List<SaveUserInfoByProjectDTO> projectAndUserList = user.getProjectAndUserList();
+        user.getProjectAndUserList().forEach(i -> {
+            String roleId = i.getRoleId();
+            set.add(roleId);
+        });
+        for (String s : set) {
+            stringBuffer.append(s).append(",");
+        }
+        user.setRoleId(String.valueOf(stringBuffer.deleteCharAt(stringBuffer.length() - 1)));
+        user.setUserType(1); //用户平台-WEB
         boolean b1 = save(user);
-
         if (b1) {
             //比较
             if (checkContractId(user.getProjectAndUserList())) {
-                throw new ServiceException("一个合同段只允许分配一个岗位信息,请重新选择");
+                throw new ServiceException("一个合同段只允许分配一个用户类型信息,请重新选择");
             }
             //新增用户绑定项目合同段
             user.getProjectAndUserList().forEach((i) -> {
@@ -157,6 +175,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
             contractClient.saveUserInfoByProjectThree(user.getProjectAndUserList());
             return true;
         }
+
         throw new ServiceException("操作失败");
     }
 
@@ -525,4 +544,81 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
         return baseMapper.selectOne(Wrappers.<User>query().lambda().eq(User::getAccount, userName));
     }
 
+
+    /**
+     * 新增RoleId
+     *
+     * @param list
+     * @return
+     */
+    @Override
+    public boolean updateUserRoleId(List<SaveUserInfoByProjectDTO> list) {
+        String roleId1 = "";
+        String id = "";
+        for (SaveUserInfoByProjectDTO l : list) {
+            roleId1 = l.getRoleId();
+            id = l.getUserId();
+        }
+        //去重
+        User user = baseMapper.selectById(id);
+        String roleId2 = user.getRoleId();
+        boolean b = false;
+        if (roleId2.contains(roleId1)) {
+            //存在
+            b = false;
+        } else {
+            if (StringUtils.isEmpty(roleId2)) {
+                //第一次新增
+                int row = baseMapper.updateRoleId(id, roleId1);
+                if (row > 0) {
+                    b = true;
+                }
+            } else {
+                int row = baseMapper.updateRoleIdById(id, roleId1);
+                if (row > 0) {
+                    b = true;
+                }
+            }
+        }
+        return b;
+    }
+
+    /**
+     * 删除RoleId
+     *
+     * @param id
+     * @param roleId
+     * @return
+     */
+    @Override
+    public boolean updateUserRoleIdTwo(String id, String roleId) {
+        User user = baseMapper.selectById(id);
+        if (user.getRoleId() != null && !user.getRoleId().equals("")) {
+            if (user.getRoleId().contains(roleId)) {
+                String[] split = user.getRoleId().split(",");
+                String replace = "";
+                if (split[0].equals(roleId)) {
+                    replace = user.getRoleId().replace(roleId, "");
+                } else {
+                    replace = user.getRoleId().replace("," + roleId, "");
+                }
+                /*
+                    如果当前用户不同合同段引用相同角色,还存在至少一个正在使用的项目合同段角色,那么就保留User对应的RoleId
+                    例如:一个用户项目合同1、合同2下都使用administrator角色,那么删除合同2的administrator角色,对应UserRoleId字段保留administrator角色
+                */
+                //查询当前项目不同合同段中删除的角色是否存在多条引用同种角色,RoleId相同
+                List<SaveUserInfoByProjectDTO> list = saveUserInfoByProjectClient.searchUserInfoAndProject(id, roleId);
+                if (list.size() >= 2) {
+                    //不删除,还有合同段引用中
+                    return true;
+                } else {
+                    //删除
+                    int i = baseMapper.updateRoleIdByIdTwo(id, replace);
+                    return i > 0;
+                }
+
+            }
+        }
+        return false;
+    }
 }