Browse Source

1.wbs节点、表单排序
2.创建项目限制登陆
3.修改BUG

liuyc 3 năm trước cách đây
mục cha
commit
3c7cb2d784
27 tập tin đã thay đổi với 605 bổ sung211 xóa
  1. 162 153
      blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
  2. 1 0
      blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java
  3. 31 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/WbsFormElementDTO2.java
  4. 38 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/WbsTreeDTO2.java
  5. 25 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/WbsTreePrivateDTO2.java
  6. 52 42
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsNodeTableVO.java
  7. 6 0
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
  8. 23 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsFormElementController.java
  9. 24 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java
  10. 39 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java
  11. 9 9
      blade-service/blade-manager/src/main/java/org/springblade/manager/excel/WbsExcelUtil.java
  12. 4 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsFormElementMapper.java
  13. 19 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsFormElementMapper.xml
  14. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.java
  15. 21 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml
  16. 7 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.java
  17. 34 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml
  18. 5 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsFormElementService.java
  19. 9 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreePrivateService.java
  20. 4 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeService.java
  21. 20 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java
  22. 33 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java
  23. 20 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java
  24. 2 2
      blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java
  25. 5 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java
  26. 2 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java
  27. 5 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

+ 162 - 153
blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java

@@ -54,159 +54,168 @@ import java.util.List;
 @AllArgsConstructor
 public class BladeUserDetailsServiceImpl implements UserDetailsService {
 
-	public static final Integer FAIL_COUNT = 5;
-	public static final String FAIL_COUNT_VALUE = "account.failCount";
-
-	private final IUserClient userClient;
-	private final ISysClient sysClient;
-
-	private final BladeRedis bladeRedis;
-	private final JwtProperties jwtProperties;
-
-	@Override
-	@SneakyThrows
-	public BladeUserDetails loadUserByUsername(String username) {
-		HttpServletRequest request = WebUtil.getRequest();
-		// 获取用户绑定ID
-		String headerDept = request.getHeader(TokenUtil.DEPT_HEADER_KEY);
-		String headerRole = request.getHeader(TokenUtil.ROLE_HEADER_KEY);
-		// 获取租户ID
-		String headerTenant = request.getHeader(TokenUtil.TENANT_HEADER_KEY);
-		String paramTenant = request.getParameter(TokenUtil.TENANT_PARAM_KEY);
-		String password = request.getParameter(TokenUtil.PASSWORD_KEY);
-		String grantType = request.getParameter(TokenUtil.GRANT_TYPE_KEY);
-		// 判断租户请求头
-		if (StringUtil.isAllBlank(headerTenant, paramTenant)) {
-			throw new UserDeniedAuthorizationException(TokenUtil.TENANT_NOT_FOUND);
-		}
-		// 判断令牌合法性
-		if (!judgeRefreshToken(grantType, request)) {
-			throw new UserDeniedAuthorizationException(TokenUtil.TOKEN_NOT_PERMISSION);
-		}
-
-		// 指定租户ID
-		String tenantId = StringUtils.isBlank(headerTenant) ? paramTenant : headerTenant;
-		// 判断登录是否锁定
-		int count = getFailCount(tenantId, username);
-		int failCount = Func.toInt(ParamCache.getValue(FAIL_COUNT_VALUE), FAIL_COUNT);
-		if (count >= failCount) {
-			throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_TOO_MANY_FAILS);
-		}
-
-		// 获取租户信息
-		R<Tenant> tenant = sysClient.getTenant(tenantId);
-		if (tenant.isSuccess()) {
-			if (TokenUtil.judgeTenant(tenant.getData())) {
-				throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_TENANT_PERMISSION);
-			}
-		} else {
-			throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_TENANT);
-		}
-
-		// 获取用户类型
-		String userType = Func.toStr(request.getHeader(TokenUtil.USER_TYPE_HEADER_KEY), TokenUtil.DEFAULT_USER_TYPE);
-
-		// 远程调用返回数据
-		R<UserInfo> result;
-		// 根据不同用户类型调用对应的接口返回数据,用户可自行拓展
-		if (userType.equals(UserEnum.WEB.getName())) {
-			result = userClient.userInfo(tenantId, username, UserEnum.WEB.getName());
-		} else if (userType.equals(UserEnum.APP.getName())) {
-			result = userClient.userInfo(tenantId, username, UserEnum.APP.getName());
-		} else {
-			result = userClient.userInfo(tenantId, username, UserEnum.OTHER.getName());
-		}
-
-		// 判断返回信息
-		if (result.isSuccess()) {
-			UserInfo userInfo = result.getData();
-			User user = userInfo.getUser();
-			// 用户不存在,但提示用户名与密码错误并锁定账号
-			if (user == null || user.getId() == null) {
-				setFailCount(tenantId, username, count);
-				throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
-			}
-			// 用户存在但密码错误,超过次数则锁定账号
-			if (grantType != null && !grantType.equals(TokenUtil.REFRESH_TOKEN_KEY) && !user.getPassword().equals(DigestUtil.hex(password))) {
-				setFailCount(tenantId, username, count);
-				throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
-			}
-			// 用户角色不存在
-			if (Func.isEmpty(userInfo.getRoles())) {
-				throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_ROLE);
-			}
-			// 多部门情况下指定单部门
-			if (Func.isNotEmpty(headerDept) && user.getDeptId().contains(headerDept)) {
-				user.setDeptId(headerDept);
-			}
-			// 多角色情况下指定单角色
-			if (Func.isNotEmpty(headerRole) && user.getRoleId().contains(headerRole)) {
-				R<List<String>> roleResult = sysClient.getRoleAliases(headerRole);
-				if (roleResult.isSuccess()) {
-					userInfo.setRoles(roleResult.getData());
-				}
-				user.setRoleId(headerRole);
-			}
-			// 成功则清除登录错误次数
-			delFailCount(tenantId, username);
-			return new BladeUserDetails(user.getId(),
-				user.getTenantId(), StringPool.EMPTY, user.getName(), user.getRealName(), user.getDeptId(), user.getPostId(), user.getRoleId(), Func.join(userInfo.getRoles()), Func.toStr(user.getAvatar(), TokenUtil.DEFAULT_AVATAR),
-				username, AuthConstant.ENCRYPT + user.getPassword(), userInfo.getDetail(), true, true, true, true,
-				AuthorityUtils.commaSeparatedStringToAuthorityList(Func.join(result.getData().getRoles())));
-		} else {
-			throw new UsernameNotFoundException(result.getMsg());
-		}
-	}
-
-	/**
-	 * 获取账号错误次数
-	 *
-	 * @param tenantId 租户id
-	 * @param username 账号
-	 * @return int
-	 */
-	private int getFailCount(String tenantId, String username) {
-		return Func.toInt(bladeRedis.get(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username)), 0);
-	}
-
-	/**
-	 * 设置账号错误次数
-	 *
-	 * @param tenantId 租户id
-	 * @param username 账号
-	 * @param count    次数
-	 */
-	private void setFailCount(String tenantId, String username, int count) {
-		bladeRedis.setEx(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username), count + 1, Duration.ofMinutes(30));
-	}
-
-	/**
-	 * 清空账号错误次数
-	 *
-	 * @param tenantId 租户id
-	 * @param username 账号
-	 */
-	private void delFailCount(String tenantId, String username) {
-		bladeRedis.del(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username));
-	}
-
-	/**
-	 * 校验refreshToken合法性
-	 *
-	 * @param grantType 认证类型
-	 * @param request   请求
-	 */
-	private boolean judgeRefreshToken(String grantType, HttpServletRequest request) {
-		if (jwtProperties.getState() && jwtProperties.getSingle() && StringUtil.equals(grantType, TokenUtil.REFRESH_TOKEN_KEY)) {
-			String refreshToken = request.getParameter(TokenUtil.REFRESH_TOKEN_KEY);
-			Claims claims = JwtUtil.parseJWT(refreshToken);
-			String tenantId = String.valueOf(claims.get("tenant_id"));
-			String userId = String.valueOf(claims.get("user_id"));
-			String token = JwtUtil.getRefreshToken(tenantId, userId, refreshToken);
-			return StringUtil.equalsIgnoreCase(token, refreshToken);
-		}
-		return true;
-	}
+    public static final Integer FAIL_COUNT = 5;
+    public static final String FAIL_COUNT_VALUE = "account.failCount";
+
+    private final IUserClient userClient;
+    private final ISysClient sysClient;
+
+    private final BladeRedis bladeRedis;
+    private final JwtProperties jwtProperties;
+
+    @Override
+    @SneakyThrows
+    public BladeUserDetails loadUserByUsername(String username) {
+        HttpServletRequest request = WebUtil.getRequest();
+        // 获取用户绑定ID
+        String headerDept = request.getHeader(TokenUtil.DEPT_HEADER_KEY);
+        String headerRole = request.getHeader(TokenUtil.ROLE_HEADER_KEY);
+        // 获取租户ID
+        String headerTenant = request.getHeader(TokenUtil.TENANT_HEADER_KEY);
+        String paramTenant = request.getParameter(TokenUtil.TENANT_PARAM_KEY);
+        String password = request.getParameter(TokenUtil.PASSWORD_KEY);
+        String grantType = request.getParameter(TokenUtil.GRANT_TYPE_KEY);
+        // 判断租户请求头
+        if (StringUtil.isAllBlank(headerTenant, paramTenant)) {
+            throw new UserDeniedAuthorizationException(TokenUtil.TENANT_NOT_FOUND);
+        }
+        // 判断令牌合法性
+        if (!judgeRefreshToken(grantType, request)) {
+            throw new UserDeniedAuthorizationException(TokenUtil.TOKEN_NOT_PERMISSION);
+        }
+
+        // 指定租户ID
+        String tenantId = StringUtils.isBlank(headerTenant) ? paramTenant : headerTenant;
+        // 判断登录是否锁定
+        int count = getFailCount(tenantId, username);
+        int failCount = Func.toInt(ParamCache.getValue(FAIL_COUNT_VALUE), FAIL_COUNT);
+        if (count >= failCount) {
+            throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_TOO_MANY_FAILS);
+        }
+
+        // 获取租户信息
+        R<Tenant> tenant = sysClient.getTenant(tenantId);
+        if (tenant.isSuccess()) {
+            if (TokenUtil.judgeTenant(tenant.getData())) {
+                throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_TENANT_PERMISSION);
+            }
+        } else {
+            throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_TENANT);
+        }
+
+        // 获取用户类型
+        String userType = Func.toStr(request.getHeader(TokenUtil.USER_TYPE_HEADER_KEY), TokenUtil.DEFAULT_USER_TYPE);
+
+        // 远程调用返回数据
+        R<UserInfo> result;
+        // 根据不同用户类型调用对应的接口返回数据,用户可自行拓展
+        if (userType.equals(UserEnum.WEB.getName())) {
+            result = userClient.userInfo(tenantId, username, UserEnum.WEB.getName());
+        } else if (userType.equals(UserEnum.APP.getName())) {
+            result = userClient.userInfo(tenantId, username, UserEnum.APP.getName());
+        } else {
+            result = userClient.userInfo(tenantId, username, UserEnum.OTHER.getName());
+        }
+
+        // 判断返回信息
+        if (result.isSuccess()) {
+            UserInfo userInfo = result.getData();
+            User user = userInfo.getUser();
+            // 用户不存在,但提示用户名与密码错误并锁定账号
+            if (user == null || user.getId() == null) {
+                setFailCount(tenantId, username, count);
+                throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
+            }
+            /**
+             *	用户存在但为封禁状态status=0,禁止登陆
+             *  @since 2022-06-08
+             *  @author liuyc
+             */
+            if (user.getStatus() == 0) {
+                throw new UserDeniedAuthorizationException(TokenUtil.USER_STATUS_BAN);
+            }
+
+            // 用户存在但密码错误,超过次数则锁定账号
+            if (grantType != null && !grantType.equals(TokenUtil.REFRESH_TOKEN_KEY) && !user.getPassword().equals(DigestUtil.hex(password))) {
+                setFailCount(tenantId, username, count);
+                throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
+            }
+            // 用户角色不存在
+            if (Func.isEmpty(userInfo.getRoles())) {
+                throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_ROLE);
+            }
+            // 多部门情况下指定单部门
+            if (Func.isNotEmpty(headerDept) && user.getDeptId().contains(headerDept)) {
+                user.setDeptId(headerDept);
+            }
+            // 多角色情况下指定单角色
+            if (Func.isNotEmpty(headerRole) && user.getRoleId().contains(headerRole)) {
+                R<List<String>> roleResult = sysClient.getRoleAliases(headerRole);
+                if (roleResult.isSuccess()) {
+                    userInfo.setRoles(roleResult.getData());
+                }
+                user.setRoleId(headerRole);
+            }
+            // 成功则清除登录错误次数
+            delFailCount(tenantId, username);
+            return new BladeUserDetails(user.getId(),
+                    user.getTenantId(), StringPool.EMPTY, user.getName(), user.getRealName(), user.getDeptId(), user.getPostId(), user.getRoleId(), Func.join(userInfo.getRoles()), Func.toStr(user.getAvatar(), TokenUtil.DEFAULT_AVATAR),
+                    username, AuthConstant.ENCRYPT + user.getPassword(), userInfo.getDetail(), true, true, true, true,
+                    AuthorityUtils.commaSeparatedStringToAuthorityList(Func.join(result.getData().getRoles())));
+        } else {
+            throw new UsernameNotFoundException(result.getMsg());
+        }
+    }
+
+    /**
+     * 获取账号错误次数
+     *
+     * @param tenantId 租户id
+     * @param username 账号
+     * @return int
+     */
+    private int getFailCount(String tenantId, String username) {
+        return Func.toInt(bladeRedis.get(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username)), 0);
+    }
+
+    /**
+     * 设置账号错误次数
+     *
+     * @param tenantId 租户id
+     * @param username 账号
+     * @param count    次数
+     */
+    private void setFailCount(String tenantId, String username, int count) {
+        bladeRedis.setEx(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username), count + 1, Duration.ofMinutes(30));
+    }
+
+    /**
+     * 清空账号错误次数
+     *
+     * @param tenantId 租户id
+     * @param username 账号
+     */
+    private void delFailCount(String tenantId, String username) {
+        bladeRedis.del(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username));
+    }
+
+    /**
+     * 校验refreshToken合法性
+     *
+     * @param grantType 认证类型
+     * @param request   请求
+     */
+    private boolean judgeRefreshToken(String grantType, HttpServletRequest request) {
+        if (jwtProperties.getState() && jwtProperties.getSingle() && StringUtil.equals(grantType, TokenUtil.REFRESH_TOKEN_KEY)) {
+            String refreshToken = request.getParameter(TokenUtil.REFRESH_TOKEN_KEY);
+            Claims claims = JwtUtil.parseJWT(refreshToken);
+            String tenantId = String.valueOf(claims.get("tenant_id"));
+            String userId = String.valueOf(claims.get("user_id"));
+            String token = JwtUtil.getRefreshToken(tenantId, userId, refreshToken);
+            return StringUtil.equalsIgnoreCase(token, refreshToken);
+        }
+        return true;
+    }
 
 
 }

+ 1 - 0
blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java

@@ -79,6 +79,7 @@ public class TokenUtil {
 	public final static String PASSWORD_KEY = "password";
 	public final static String GRANT_TYPE_KEY = "grant_type";
 	public final static String REFRESH_TOKEN_KEY = "refresh_token";
+	public final static String USER_STATUS_BAN = "该用户被封禁,请联系管理员";
 
 	private static BladeTenantProperties tenantProperties;
 

+ 31 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/WbsFormElementDTO2.java

@@ -0,0 +1,31 @@
+package org.springblade.manager.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class WbsFormElementDTO2 implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * wbs表单节点id
+     */
+    @JsonProperty(value = "id")
+    private String id;
+
+    /**
+     * wbs表单名
+     */
+    @JsonProperty(value = "deptName")
+    private String deptName;
+
+    /**
+     * wbs表单sort
+     */
+    @JsonProperty(value = "sort")
+    private Integer sort;
+
+}

+ 38 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/WbsTreeDTO2.java

@@ -0,0 +1,38 @@
+package org.springblade.manager.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * wbs节点排序dto
+ *
+ * @author liuyc
+ * @since 2022-06-08
+ */
+@Data
+public class WbsTreeDTO2 implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * wbs节点树id
+     */
+    @JsonProperty(value = "id")
+    private String id;
+
+    /**
+     * 节点名
+     */
+    @JsonProperty(value = "deptName")
+    private String deptName;
+
+    /**
+     * wbs节点sort
+     */
+    @JsonProperty(value = "sort")
+    private Integer sort;
+
+
+}

+ 25 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/WbsTreePrivateDTO2.java

@@ -0,0 +1,25 @@
+package org.springblade.manager.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class WbsTreePrivateDTO2 implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * p_key_id 主键id
+     */
+    private Long pKeyId;
+
+    /**
+     * 节点名称
+     */
+    private String deptName;
+
+    /**
+     * 排序
+     */
+    private Integer sort;
+}

+ 52 - 42
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsNodeTableVO.java

@@ -14,47 +14,57 @@ import java.io.Serializable;
 @Data
 public class WbsNodeTableVO implements Serializable {
 
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * id
-	 */
-	private String id;
-
-	/**
-	 * 表单名称
-	 */
-	private String tableName;
-
-	/**
-	 * 表单类型
-	 */
-	private String tableType;
-
-	/**
-	 * 元素总数
-	 */
-	private Integer elementTotal;
-
-	/**
-	 * 是否创建表
-	 */
-	private Boolean isCreateTable = true;
-
-	/**
-	 * 所属方
-	 */
-	private String tableOwner;
-
-	/**
-	 *是否关联清表 '1'否 '2'是
-	 */
-	@ApiModelProperty(value = "是否关联清表 '1'否 '2'是")
-	private Integer isLinkTable;
-
-	/**
-	 * 初始化实体表名
-	 */
-	private String initTableName;
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * pKeyId 主键id
+     */
+    private Long pKeyId;
+
+    /**
+     * id
+     */
+    private String id;
+
+    /**
+     * 表单名称
+     */
+    private String tableName;
+
+    /**
+     * 排序
+     */
+    private Integer sort;
+
+    /**
+     * 表单类型
+     */
+    private String tableType;
+
+    /**
+     * 元素总数
+     */
+    private Integer elementTotal;
+
+    /**
+     * 是否创建表
+     */
+    private Boolean isCreateTable = true;
+
+    /**
+     * 所属方
+     */
+    private String tableOwner;
+
+    /**
+     * 是否关联清表 '1'否 '2'是
+     */
+    @ApiModelProperty(value = "是否关联清表 '1'否 '2'是")
+    private Integer isLinkTable;
+
+    /**
+     * 初始化实体表名
+     */
+    private String initTableName;
 
 }

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

@@ -50,6 +50,7 @@ public interface IUserClient {
 	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";
 
 	/**
 	 * 获取用户信息
@@ -125,5 +126,10 @@ public interface IUserClient {
 	@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);
 
 }

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

@@ -28,6 +28,8 @@ 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.dto.WbsFormElementDTO2;
+import org.springblade.manager.dto.WbsTreeDTO2;
 import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.excel.WbsExcelUtil;
 import org.springblade.manager.excel.WbsFormElementExcel;
@@ -142,5 +144,26 @@ public class WbsFormElementController extends BladeController {
         return R.data(list, "操作成功");
     }
 
+    /**
+     * 查询当前节点下所有表单
+     */
+    @ApiOperationSupport(order = 7)
+    @ApiOperation(value = "查询当前节点下所有表单", notes = "传入该节点id")
+    @RequestMapping(value = "/findWbsTreeTableSameLevel", method = RequestMethod.GET)
+    public R<List<WbsFormElementDTO2>> findWbsTreeTableSameLevel(@RequestParam("id") String id) {
+        List<WbsFormElementDTO2> trees = wbsFormElementService.findWbsTreeTableSameLevel(id);
+        return R.data(trees);
+    }
+
+    /**
+     * wbs树节点手动排序
+     */
+    @ApiOperationSupport(order = 8)
+    @ApiOperation(value = "wbs树节点手动排序", notes = "WbsFormElementDTO2集合,id=表单id")
+    @RequestMapping(value = "/wbsTreeTableSort", method = RequestMethod.POST)
+    public R wbsTreeTableSort(@RequestBody List<WbsFormElementDTO2> wbsTreeDTO) {
+        boolean b = wbsFormElementService.wbsTreeTableSort(wbsTreeDTO);
+        return R.status(b);
+    }
 
 }

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

@@ -34,6 +34,7 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.manager.dto.FormElementDTO;
 import org.springblade.manager.dto.WbsFormElementDTO;
 import org.springblade.manager.dto.WbsTreeDTO;
+import org.springblade.manager.dto.WbsTreeDTO2;
 import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.excel.WbsExcelUtil;
@@ -296,6 +297,29 @@ public class WbsTreeController extends BladeController {
         }
     }
 
+    /**
+     * 查询当前节点所有同级节点
+     */
+    @ApiOperationSupport(order = 14)
+    @ApiOperation(value = "查询当前节点所有同级节点", notes = "传入该节点parentId")
+    @RequestMapping(value = "/findWbsTreeSameLevel", method = RequestMethod.GET)
+    public R<List<WbsTreeDTO2>> findWbsTreeSameLevel(@RequestParam("parentId") String parentId) {
+        List<WbsTreeDTO2> trees = wbsTreeService.findWbsTreeSameLevel(parentId);
+        return R.data(trees);
+    }
+
+    /**
+     * wbs树节点手动排序
+     */
+    @ApiOperationSupport(order = 15)
+    @ApiOperation(value = "wbs树节点手动排序", notes = "WbsTreeDTO2集合,id=节点id,sort=节点顺序")
+    @RequestMapping(value = "/wbsTreeSort", method = RequestMethod.POST)
+    public R wbsTreeSort(@RequestBody List<WbsTreeDTO2> wbsTreeDTO) {
+        boolean b = wbsTreeService.wbsTreeSort(wbsTreeDTO);
+        return R.status(b);
+    }
+
+
 }
 
 

+ 39 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java

@@ -13,6 +13,8 @@ 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.manager.dto.WbsTreeDTO2;
+import org.springblade.manager.dto.WbsTreePrivateDTO2;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.service.IWbsTreePrivateService;
@@ -127,4 +129,41 @@ public class WbsTreePrivateController extends BladeController {
     }
 
 
+    /**
+     * 查询当前节点所有同级节点
+     */
+    @ApiOperationSupport(order = 14)
+    @ApiOperation(value = "查询当前节点所有同级节点", notes = "传入项目id、当前节点parentId")
+    @RequestMapping(value = "/findWbsTreePrivateSameLevel", method = RequestMethod.GET)
+    public R<List<WbsTreePrivateDTO2>> findWbsTreePrivateSameLevel(@RequestParam("projectId") String projectId,
+                                                                   @RequestParam("parentId") String parentId,
+                                                                   @RequestParam("wbsId") String wbsId) {
+        List<WbsTreePrivateDTO2> trees = wbsTreePrivateService.findWbsTreePrivateSameLevel(projectId, parentId, wbsId);
+        return R.data(trees);
+    }
+
+    /**
+     * wbs树节点手动排序
+     */
+    @ApiOperationSupport(order = 15)
+    @ApiOperation(value = "wbs私有树节点手动排序", notes = "WbsTreeDTO2集合,pKeyId=节点pKeyId")
+    @RequestMapping(value = "/wbsTreePrivateSort", method = RequestMethod.POST)
+    public R wbsTreePrivateSort(@RequestBody List<WbsTreePrivateDTO2> wbsTreeDTO) {
+        boolean b = wbsTreePrivateService.wbsTreePrivateSort(wbsTreeDTO);
+        return R.status(b);
+    }
+
+
+    /**
+     * wbs树节点下表单手动排序
+     */
+    @ApiOperationSupport(order = 15)
+    @ApiOperation(value = "wbs私有树表单手动排序", notes = "WbsTreeDTO2集合,pKeyId=表单pKeyId")
+    @RequestMapping(value = "/wbsTreePrivateTableSort", method = RequestMethod.POST)
+    public R wbsTreePrivateTableSort(@RequestBody List<WbsTreePrivateDTO2> wbsTreeDTO) {
+        boolean b = wbsTreePrivateService.wbsTreePrivateTableSort(wbsTreeDTO);
+        return R.status(b);
+    }
+
+
 }

+ 9 - 9
blade-service/blade-manager/src/main/java/org/springblade/manager/excel/WbsExcelUtil.java

@@ -14,14 +14,14 @@ import java.io.*;
 import java.util.*;
 
 public class WbsExcelUtil {
-//    public static void main(String[] args) throws IOException {
-//        WbsExcelUtil excelUtil = new WbsExcelUtil();
-//        //读取excel数据
-//        ArrayList<Map<String, String>> result = excelUtil.readExcelToObj("D:\\Download\\WBS划分模板1.xls");
-//        for (Map<String, String> map : result) {
-//            System.out.println("输出:" + map);
-//        }
-//    }
+    public static void main(String[] args) throws IOException {
+        WbsExcelUtil excelUtil = new WbsExcelUtil();
+        //读取excel数据
+        ArrayList<Map<String, String>> result = excelUtil.readExcelToObj("D:\\Download\\WBS划分模板1.xls");
+        for (Map<String, String> map : result) {
+            System.out.println("输出:" + map);
+        }
+    }
 
     /**
      * 读取excel数据
@@ -38,7 +38,7 @@ public class WbsExcelUtil {
             e.printStackTrace();
         } catch (IOException e) {
             e.printStackTrace();
-        }finally {
+        } finally {
             wb.close();
         }
         return result;

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

@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 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.vo.WbsFormElementVO;
 
@@ -54,4 +55,7 @@ public interface WbsFormElementMapper extends BaseMapper<WbsFormElement> {
 
     int judgeFiled(String eKey, String tableName);
 
+    List<WbsFormElementDTO2> selectWbsTreeTableListByParentId(String parentId);
+
+    void updateSortById(String id, Integer sort);
 }

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

@@ -41,6 +41,15 @@
         ALTER TABLE ${initTableName} MODIFY ${eKey} ${eType}(${eLength})
     </update>
 
+    <update id="updateSortById">
+        UPDATE m_wbs_tree
+        SET sort = #{sort}
+        WHERE id = #{id}
+        AND type = 2
+        AND status = 1
+        AND is_deleted = 0
+    </update>
+
 
     <select id="selectWbsFormElementPage" resultMap="wbsFormElementResultMap">
         select * from m_wbs_form_element where is_deleted = 0
@@ -49,4 +58,14 @@
      select count(*) from information_schema.columns where table_name = &quot;${tableName}&quot; and column_name = &quot;${eKey}&quot;
     </select>
 
+    <select id="selectWbsTreeTableListByParentId" resultType="org.springblade.manager.dto.WbsFormElementDTO2">
+        SELECT id,dept_name AS "deptName",sort
+        FROM m_wbs_tree
+        WHERE parent_id = #{parentId}
+        AND status = 1
+        AND is_deleted = 0
+        AND type = 2
+        ORDER BY sort
+    </select>
+
 </mapper>

+ 5 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.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.apache.ibatis.annotations.Param;
+import org.springblade.manager.dto.WbsTreeDTO2;
 import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.vo.SaveUserInfoByProjectVO;
@@ -119,4 +120,8 @@ public interface WbsTreeMapper extends BaseMapper<WbsTree> {
     int updateByCondition(@Param("id") Long id, @Param("wbsName") String wbsName, @Param("status") Integer status);
 
     List<SaveUserInfoByProjectVO> selectListByUserId(Long userId);
+
+    List<WbsTreeDTO2> selectWbsTreeListByParentId(String parentId);
+
+    void updateSortById(String id, Integer sort);
 }

+ 21 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml

@@ -52,6 +52,7 @@
         <result column="elementTotal" property="elementTotal"/>
         <result column="tableOwner" property="tableOwner"/>
         <result column="initTableName" property="initTableName"/>
+        <result column="sort" property="sort"/>
     </resultMap>
 
     <resultMap id="wbsFormElementMap" type="org.springblade.manager.entity.WbsFormElement">
@@ -128,6 +129,15 @@
         AND is_deleted = 0
     </update>
 
+    <update id="updateSortById">
+        UPDATE m_wbs_tree
+        SET sort = #{sort}
+        WHERE id = #{id}
+        AND type = 1
+        AND status = 1
+        AND is_deleted = 0
+    </update>
+
     <delete id="deleteBatchProjectNodeId">
         delete from m_wbs_tree where project_node_id = #{projectNodeId} and id &lt;&gt; #{projectNodeId}
     </delete>
@@ -188,6 +198,7 @@
         SELECT
             wt.id AS id,
             wt.dept_name AS tableName,
+            wt.sort AS sort,
             wt.table_type AS tableType,
             wt.`status` AS isCreateTable ,
             wt.table_owner as tableOwner,
@@ -200,6 +211,7 @@
             wt.type = 2
         AND wt.is_deleted = 0
         AND wt.parent_id = #{id}
+        ORDER BY wt.sort
     </select>
 
     <select id="selectByElementsTotal" resultType="java.lang.String">
@@ -265,6 +277,15 @@
         WHERE mpau.is_deleted = 0 AND mpau.`status` = 1
         AND mpau.user_id = #{userId}
     </select>
+    <select id="selectWbsTreeListByParentId" resultType="org.springblade.manager.dto.WbsTreeDTO2">
+        SELECT id,dept_name AS "deptName",sort
+        FROM m_wbs_tree
+        WHERE parent_id = #{parentId}
+        AND status = 1
+        AND is_deleted = 0
+        AND type = 1
+        ORDER BY sort
+    </select>
 
 
 </mapper>

+ 7 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.java

@@ -2,6 +2,7 @@ package org.springblade.manager.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
+import org.springblade.manager.dto.WbsTreePrivateDTO2;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.vo.WbsNodeTableVO;
@@ -64,7 +65,7 @@ public interface WbsTreePrivateMapper extends BaseMapper<WbsTreePrivate> {
 
     int updateByPKeyId(@Param("pKeyId") Long pKeyId, @Param("wbsTP") WbsTreePrivate wbsTP);
 
-    WbsTreePrivate getByCondition(Long parentId, String projectId);
+    WbsTreePrivate getByCondition(Long parentId, String projectId, String wbsId);
 
     WbsTreePrivate getByPKeyId(Long pKeyId);
 
@@ -72,4 +73,9 @@ public interface WbsTreePrivateMapper extends BaseMapper<WbsTreePrivate> {
 
     WbsTreePrivate selectByPKeyId(Long referenceWbsTemplateId);
 
+    List<WbsTreePrivateDTO2> selectNodeListByCondition(String projectId, String parentId, String wbsId);
+
+    void updateSortById(Long pKeyId, Integer sort);
+
+    void updateSortById2(Long pKeyId, Integer sort);
 }

+ 34 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml

@@ -141,6 +141,23 @@
     where p_key_id = #{pKeyId}
     </update>
 
+    <update id="updateSortById">
+        UPDATE m_wbs_tree_private
+        SET sort = #{sort}
+        WHERE p_key_id = #{pKeyId}
+        AND type = 1
+        AND status = 1
+        AND is_deleted = 0
+    </update>
+    <update id="updateSortById2">
+        UPDATE m_wbs_tree_private
+        SET sort = #{sort}
+        WHERE p_key_id = #{pKeyId}
+        AND type = 2
+        AND status = 1
+        AND is_deleted = 0
+    </update>
+
 
     <select id="lazyTree" resultMap="treeNodeResultMap">
         SELECT
@@ -255,13 +272,15 @@
     </select>
     <select id="selectByNodeTable" resultType="org.springblade.manager.vo.WbsNodeTableVO">
         SELECT
+            wt.p_key_id AS "pKeyId",
             wt.id AS id,
             wt.dept_name AS tableName,
             wt.table_type AS tableType,
             wt.`status` AS isCreateTable ,
             wt.table_owner as tableOwner,
             wt.is_link_table,
-            wt.init_table_name
+            wt.init_table_name,
+            wt.sort
         FROM
             m_wbs_tree_private AS wt
         WHERE
@@ -270,11 +289,13 @@
         AND wt.parent_id = #{id}
         AND wt.wbs_id = #{wbsId}
         AND wt.project_id = #{projectId}
+        ORDER BY wt.sort
     </select>
     <select id="getByCondition" resultType="org.springblade.manager.entity.WbsTreePrivate">
         SELECT * FROM m_wbs_tree_private
         WHERE project_id = #{projectId}
         AND id = #{parentId}
+        AND wbs_id = #{wbsId}
         AND is_deleted = 0
         AND status = 1
         AND type = 1
@@ -302,4 +323,16 @@
         SELECT * FROM m_wbs_tree_private WHERE p_key_id = #{referenceWbsTemplateId}
     </select>
 
+    <select id="selectNodeListByCondition" resultType="org.springblade.manager.dto.WbsTreePrivateDTO2">
+        SELECT p_key_id as "pKeyId",dept_name AS "deptName",sort
+        FROM m_wbs_tree_private
+        WHERE project_id = #{projectId}
+        AND parent_id = #{parentId}
+        AND wbs_id = #{wbsId}
+        AND status = 1
+        AND is_deleted = 0
+        AND type = 1
+        ORDER BY sort
+    </select>
+
 </mapper>

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

@@ -21,6 +21,7 @@ import org.springblade.core.mp.base.BaseService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.tool.api.R;
 import org.springblade.manager.dto.WbsFormElementDTO;
+import org.springblade.manager.dto.WbsFormElementDTO2;
 import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.excel.WbsFormElementExcel;
 import org.springblade.manager.vo.WbsFormElementVO;
@@ -53,4 +54,8 @@ public interface IWbsFormElementService extends BaseService<WbsFormElement> {
 
     String updateAndSyn(List<WbsFormElement> wbsFormElementList,String initTableName);
 
+    List<WbsFormElementDTO2> findWbsTreeTableSameLevel(String parentId);
+
+    boolean wbsTreeTableSort(List<WbsFormElementDTO2> wbsTreeDTO);
+
 }

+ 9 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreePrivateService.java

@@ -1,6 +1,7 @@
 package org.springblade.manager.service;
 
 import org.springblade.core.mp.base.BaseService;
+import org.springblade.manager.dto.WbsTreePrivateDTO2;
 import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.vo.WbsNodeTableVO;
 import org.springblade.manager.vo.WbsTreePrivateVO;
@@ -15,14 +16,20 @@ import java.util.List;
  * @since 2022-05-24
  */
 public interface IWbsTreePrivateService extends BaseService<WbsTreePrivate> {
-    List<WbsTreePrivateVO> tree(String wbsId,String projectId);
+    List<WbsTreePrivateVO> tree(String wbsId, String projectId);
 
     boolean submit(WbsTreePrivate wbsTreePrivate);
 
     List<WbsNodeTableVO> selectByNodeTable(String id, String wbsId, String projectId);
 
-
     boolean removeTableByCondition(String id, String wbsId, String projectId);
 
     List<WbsTreePrivateVO> lazyTree(String wbsId, String tenantId, Long parentId, String projectId);
+
+    List<WbsTreePrivateDTO2> findWbsTreePrivateSameLevel(String projectId, String parentId, String wbsId);
+
+    boolean wbsTreePrivateSort(List<WbsTreePrivateDTO2> wbsTreeDTO);
+
+    boolean wbsTreePrivateTableSort(List<WbsTreePrivateDTO2> wbsTreeDTO);
+
 }

+ 4 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeService.java

@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.tool.api.R;
 import org.springblade.manager.dto.FormElementDTO;
 import org.springblade.manager.dto.WbsTreeContractDTO;
+import org.springblade.manager.dto.WbsTreeDTO2;
 import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.vo.SaveUserInfoByProjectVO;
@@ -105,4 +106,7 @@ public interface IWbsTreeService extends BaseService<WbsTree> {
 
     List<SaveUserInfoByProjectVO> findProjectAndContractList(Long userId);
 
+    List<WbsTreeDTO2> findWbsTreeSameLevel(String parentId);
+
+    boolean wbsTreeSort(List<WbsTreeDTO2> wbsTreeList);
 }

+ 20 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java

@@ -22,6 +22,8 @@ import org.apache.commons.lang.StringUtils;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.manager.dto.WbsFormElementDTO2;
+import org.springblade.manager.dto.WbsTreeDTO2;
 import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.excel.WbsFormElementExcel;
 import org.springblade.manager.mapper.WbsFormElementMapper;
@@ -267,4 +269,22 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
         }
         return "0";
     }
+
+    @Override
+    public List<WbsFormElementDTO2> findWbsTreeTableSameLevel(String parentId) {
+        List<WbsFormElementDTO2> trees = baseMapper.selectWbsTreeTableListByParentId(parentId);
+        return trees;
+    }
+
+    @Override
+    public boolean wbsTreeTableSort(List<WbsFormElementDTO2> wbsTreeDTO) {
+        int number = 1;
+        for (WbsFormElementDTO2 wbsTree : wbsTreeDTO) {
+            wbsTree.setSort(number);
+            //修改sort
+            baseMapper.updateSortById(wbsTree.getId(), wbsTree.getSort());
+            number++;
+        }
+        return true;
+    }
 }

+ 33 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -2,6 +2,7 @@ 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 org.apache.commons.lang.StringUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
@@ -12,6 +13,8 @@ import org.springblade.core.tool.constant.BladeConstant;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringPool;
+import org.springblade.manager.dto.WbsTreeDTO2;
+import org.springblade.manager.dto.WbsTreePrivateDTO2;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.entity.WbsInfo;
 import org.springblade.manager.entity.WbsTree;
@@ -62,7 +65,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             Long pKeyId = SnowFlakeUtil.getId();
             wbsTreePrivate.setPKeyId(pKeyId);
             wbsTreePrivate.setWbsType(String.valueOf(1)); //默认质检
-            WbsTreePrivate parent = baseMapper.getByCondition(wbsTreePrivate.getParentId(), wbsTreePrivate.getProjectId());
+            WbsTreePrivate parent = baseMapper.getByCondition(wbsTreePrivate.getParentId(), wbsTreePrivate.getProjectId(), wbsTreePrivate.getWbsId());
             if (parent != null) {
                 String ancestors = parent.getAncestors() + "," + wbsTreePrivate.getParentId();
                 wbsTreePrivate.setAncestors(ancestors);
@@ -111,6 +114,35 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         return ForestNodeMerger.merge(baseMapper.lazyTree(wbsId, tenantId, parentId, projectId));
     }
 
+    @Override
+    public List<WbsTreePrivateDTO2> findWbsTreePrivateSameLevel(String projectId, String parentId, String wbsId) {
+        return baseMapper.selectNodeListByCondition(projectId, parentId, wbsId);
+    }
+
+    @Override
+    public boolean wbsTreePrivateSort(List<WbsTreePrivateDTO2> wbsTreeDTO) {
+        int number = 1;
+        for (WbsTreePrivateDTO2 wbsTree : wbsTreeDTO) {
+            wbsTree.setSort(number);
+            //修改sort
+            baseMapper.updateSortById(wbsTree.getPKeyId(), wbsTree.getSort());
+            number++;
+        }
+        return true;
+    }
+
+    @Override
+    public boolean wbsTreePrivateTableSort(List<WbsTreePrivateDTO2> wbsTreeDTO) {
+        int number = 1;
+        for (WbsTreePrivateDTO2 wbsTree : wbsTreeDTO) {
+            wbsTree.setSort(number);
+            //修改sort
+            baseMapper.updateSortById2(wbsTree.getPKeyId(), wbsTree.getSort());
+            number++;
+        }
+        return true;
+    }
+
 
     public List<WbsTreePrivate> findAllNodeList(String wbsTreeIds, String projectId, String wbsId) {
         String[] ids = wbsTreeIds.split(",");

+ 20 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -17,6 +17,7 @@
 package org.springblade.manager.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import net.sourceforge.pinyin4j.PinyinHelper;
 import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
@@ -38,6 +39,7 @@ import org.springblade.core.tool.utils.StringPool;
 import org.springblade.manager.dto.FormElementDTO;
 import org.springblade.manager.dto.WbsFormElementDTO;
 import org.springblade.manager.dto.WbsTreeContractDTO;
+import org.springblade.manager.dto.WbsTreeDTO2;
 import org.springblade.manager.entity.*;
 import org.springblade.manager.excel.WbsExcelUtil;
 import org.springblade.manager.mapper.*;
@@ -285,6 +287,24 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         return list;
     }
 
+    @Override
+    public List<WbsTreeDTO2> findWbsTreeSameLevel(String parentId) {
+        List<WbsTreeDTO2> trees = baseMapper.selectWbsTreeListByParentId(parentId);
+        return trees;
+    }
+
+    @Override
+    public boolean wbsTreeSort(List<WbsTreeDTO2> wbsTreeList) {
+        int number = 1;
+        for (WbsTreeDTO2 wbsTree : wbsTreeList) {
+            wbsTree.setSort(number);
+            //修改sort
+            baseMapper.updateSortById(wbsTree.getId(), wbsTree.getSort());
+            number++;
+        }
+        return true;
+    }
+
 
     private boolean updateData(String ancestors, Long id) {
         Integer row = baseMapper.updateById2(ancestors, id);

+ 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")
     @ApiOperationSupport(order = 4)
@@ -173,7 +173,7 @@ public class UserController {
      */
     @PostMapping("/updateTow")
     @ApiOperationSupport(order = 5)
-    @ApiOperation(value = "修改", notes = "传入User")
+    @ApiOperation(value = "修改2", notes = "传入User")
     public R updateTow(@Valid @RequestBody User user) {
         CacheUtil.clear(USER_CACHE);
         return R.status(userService.updateUser2(user));

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

@@ -92,4 +92,9 @@ public class UserClient implements IUserClient {
         return R.status(service.resetPassword(userIds));
     }
 
+    @Override
+    public User getUserStatus(String userName) {
+        return service.selectUserByUserName(userName);
+    }
+
 }

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

@@ -226,4 +226,6 @@ public interface IUserService extends BaseService<User> {
     UserVO platformDetail(User user);
 
 
+    User selectUserByUserName(String userName);
+
 }

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

@@ -511,4 +511,9 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
         return userVO;
     }
 
+    @Override
+    public User selectUserByUserName(String userName) {
+        return baseMapper.selectOne(Wrappers.<User>query().lambda().eq(User::getAccount, userName));
+    }
+
 }