Browse Source

system查询部门列表不包含子部门、懒加载部门列表不准确问题优化

liyuan 8 months ago
parent
commit
6e691954f7

+ 23 - 1
blade-service/blade-system/src/main/java/org/springblade/system/controller/DeptController.java

@@ -41,10 +41,12 @@ import org.springblade.system.enums.DictEnum;
 import org.springblade.system.service.IDeptService;
 import org.springblade.system.vo.DeptVO;
 import org.springblade.system.wrapper.DeptWrapper;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
 import javax.validation.Valid;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 
@@ -105,7 +107,27 @@ public class DeptController extends BladeController {
 	@PreAuth(AuthConstant.PERMIT_ALL)
 	public R<List<DeptVO>> lazyList(@ApiIgnore @RequestParam Map<String, Object> dept, Long parentId, BladeUser bladeUser) {
 		List<DeptVO> list = deptService.lazyList(bladeUser.getTenantId(), parentId, dept);
-		return R.data(DeptWrapper.build().listNodeLazyVO(list));
+		if (CollectionUtils.isEmpty(list)) {
+			return R.data(list);
+		}
+		String deptIds = AuthUtil.getDeptId();
+		List<Long> deptIdList = Func.toLongList(deptIds);
+		List<DeptVO> mergeList = DeptWrapper.build().listNodeLazyVO(list);
+		mergeList.sort((o1, o2) -> {
+			boolean o1InB = deptIdList.contains(o1.getId());
+			boolean o2InB = deptIdList.contains(o2.getId());
+			if (o1InB && !o2InB) {
+				// o1在集合B中,但o2不在,o1排前面
+				return -1;
+			} else if (!o1InB && o2InB) {
+				// o2在集合B中,但o1不在,o2排前面
+				return 1;
+			} else {
+				// 都在或都不在,保持原顺序
+				return 0;
+			}
+		});
+		return R.data(mergeList);
 	}
 
 	/**

+ 2 - 1
blade-service/blade-system/src/main/java/org/springblade/system/mapper/DeptMapper.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--suppress ALL -->
 <mapper namespace="org.springblade.system.mapper.DeptMapper">
 
     <!-- 通用查询映射结果 -->
@@ -72,7 +73,7 @@
             and tenant_id = #{tenantId}
         </if>
         <if test="id!=null">
-            and id = #{id}
+            and (parent_id = #{id} or id = #{id})
         </if>
         ORDER BY sort
     </select>