上传部门视图应用初版代码

This commit is contained in:
袁东强 2025-09-16 16:11:52 +08:00
parent 4dd940387c
commit 0a3aee0684
4 changed files with 331 additions and 0 deletions

View File

@ -0,0 +1,13 @@
package com.awspaas.user.apps.nqms.portal.view.department.constant;
/**
* Created with IntelliJ IDEA.
*
* @Author: yuandongqiang
* @Date: 2025/9/9
* @Description:
*/
public class Constant {
public static final String APP_ID = "com.awspaas.user.apps.nqms.portal.view.department";
public static final String COMPANY_ID = "8911e732-b42a-4556-853f-ad32761bcbee";
}

View File

@ -0,0 +1,63 @@
package com.awspaas.user.apps.nqms.portal.view.department.controller;
import com.actionsoft.bpms.commons.htmlframework.HtmlPageTemplate;
import com.actionsoft.bpms.server.UserContext;
import com.actionsoft.bpms.server.bind.annotation.Controller;
import com.actionsoft.bpms.server.bind.annotation.Mapping;
import com.alibaba.fastjson.JSON;
import com.awspaas.user.apps.nqms.portal.view.department.service.DeptViewService;
import java.util.HashMap;
import java.util.List;
/**
* Created with IntelliJ IDEA.
*
* @Author: yuandongqiang
* @Date: 2025/9/8
* @Description:
*/
@Controller
public class DeptController {
/**
* 主页面跳转
*
* @return
*/
@Mapping("com.awspaas.user.apps.nqms.portal.view.department_toPage")
public String toViewPage(UserContext ux) {
HashMap<String, Object> macroLibraries = new HashMap<>();
macroLibraries.put("sid", ux.getSessionId());
macroLibraries.put("uid", ux.getUID());
macroLibraries.put("userDeptId", ux.getDepartmentModel().getId());
macroLibraries.put("settingParam", JSON.toJSON(macroLibraries));
return HtmlPageTemplate.merge("com.awspaas.user.apps.nqms.portal.view.department", "main.html", macroLibraries);
}
/**
* 获取部门树
*
* @param ux 用户上下文
* @param parentId 父级部门ID
* @param keyword 关键字
* @param isFrist 是否是第一次加载
* @return 部门树
*/
@Mapping("com.awspaas.user.apps.nqms.portal.view.department_treeInitData")
public String getTreeInitData(UserContext ux, String parentId, String keyword, boolean isFrist) {
return DeptViewService.getInstance().getTreeInitData(ux, parentId, keyword, isFrist);
}
/**
* 根据部门ID获取所有子部门ID包含当前部门
*
* @param ux 用户上下文
* @param deptIds 部门集合
* @return 子部门ID集合
*/
@Mapping("com.awspaas.user.apps.nqms.portal.view.department_getAllDeptIds")
public String getAllDeptIds(UserContext ux, List<String> deptIds) {
return DeptViewService.getInstance().getAllDeptIds(ux, deptIds);
}
}

View File

@ -0,0 +1,182 @@
package com.awspaas.user.apps.nqms.portal.view.department.service;
import com.actionsoft.bpms.commons.mvc.view.ResponseObject;
import com.actionsoft.bpms.org.cache.DepartmentCache;
import com.actionsoft.bpms.org.model.DepartmentModel;
import com.actionsoft.bpms.server.UserContext;
import com.actionsoft.sdk.local.SDK;
import com.awspaas.user.apps.nqms.portal.view.department.constant.Constant;
import com.awspaas.user.apps.nqms.portal.view.department.treeUtil.TreeNode;
import jodd.util.StringUtil;
import org.apache.commons.collections.CollectionUtils;
import java.util.*;
/**
* Created with IntelliJ IDEA.
*
* @Author: yuandongqiang
* @Date: 2025/9/8
* @Description:
*/
public class DeptViewService {
private DeptViewService() {
}
private static class DeptInstance {
static DeptViewService instance = new DeptViewService();
}
public static DeptViewService getInstance() {
return DeptInstance.instance;
}
/**
* 获取部门树
*
* @param ux 用户上下文
* @param parentId 父级部门ID
* @param keyword 关键字
* @param isFrist 是否是第一次加载
* @return 部门树
*/
public String getTreeInitData(UserContext ux, String parentId, String keyword, boolean isFrist) {
ResponseObject ro = ResponseObject.newOkResponse();
List<DepartmentModel> departmentModels = DepartmentCache.getListOfParentDepartment(Constant.COMPANY_ID, parentId);
String property = SDK.getAppAPI().getProperty(Constant.APP_ID, "RemoveDeptIds");
List<String> removeDept = new ArrayList<>();
if (StringUtil.isNotBlank(property)) {
removeDept = Arrays.asList(property.split(","));
}
List<TreeNode> deptTree = new ArrayList<>();
for (DepartmentModel dept : departmentModels) {
if (dept.isClosed()) {
continue;
}
if (removeDept.contains(dept.getId())) {
continue;
}
TreeNode node = new TreeNode();
node.setId(dept.getId());
node.setLabel(dept.getName());
node.setParentId(dept.getParentDepartmentId());
String name = dept.getName();
boolean haskey = false;
if (StringUtil.isBlank(keyword)) {
haskey = true;
} else {
if (name.contains(keyword)) {
haskey = true;
} else {
haskey = isSubDeptHasKeyWord(dept.getId(), keyword, removeDept);
}
}
if (haskey) {
List<DepartmentModel> sub = DepartmentCache.getSubDepartments(dept.getId());
node.setHasChild(false);
if (sub != null && sub.size() > 0) {
node.setHasChild(true);
}
deptTree.add(node);
}
}
if (isFrist) {
DepartmentModel departmentModel = ux.getDepartmentModel();
String pathIdOfCache = departmentModel.getPathIdOfCache();
List<String> pathList = Arrays.asList(pathIdOfCache.split("/"));
ro.put("openNode", pathList);
ro.put("checkedKeys", Arrays.asList(departmentModel.getId()));
}
ro.put("deptTree", deptTree);
return ro.toString();
}
/**
* 判断自部门是否包含特定关键字
*
* @param parentId 父部门id
* @param keyword 关键字
* @param removeDept 取消查询部门
* @return 是否包含关键字
*/
public boolean isSubDeptHasKeyWord(String parentId, String keyword, List<String> removeDept) {
List<DepartmentModel> subDepartments = DepartmentCache.getListOfParentDepartment(Constant.COMPANY_ID, parentId);
List<String> ids = new ArrayList<>();
for (DepartmentModel dept : subDepartments) {
if (dept.isClosed()) {
continue;
}
if (removeDept.contains(dept.getId())) {
continue;
}
String name = dept.getName();
if (name.contains(keyword)) {
return true;
}
ids.add(dept.getId());
}
for (String id : ids) {
boolean subDeptHasKeyWord = isSubDeptHasKeyWord(id, keyword, removeDept);
if (subDeptHasKeyWord) {
return true;
}
}
return false;
}
/**
* 根据部门ID获取所有子部门ID包含当前部门
*
* @param ux 用户上下文
* @param deptIds 部门集合
* @return 子部门ID集合
*/
public String getAllDeptIds(UserContext ux, List<String> deptIds) {
ResponseObject ro = ResponseObject.newOkResponse();
if (CollectionUtils.isEmpty(deptIds)) {
return ro.toString();
}
Set<String> allDeptIds = new HashSet<>(deptIds);
Set<String> visitedDepts = new HashSet<>(); // 防止重复访问和循环引用
for (String deptId : deptIds) {
if (deptId == null) continue;
try {
subDepts(deptId, allDeptIds, visitedDepts);
} catch (Exception e) {
System.err.println("获取子部门失败部门ID" + deptId + ",异常信息:" + e.getMessage());
}
}
ro.setData(allDeptIds);
return ro.toString();
}
/**
* 获取子部门
* @param id 部门id
* @param allDeptIds 所有部门id
* @param visitedDepts 已访问部门id
*/
public void subDepts(String id, Set<String> allDeptIds, Set<String> visitedDepts) {
if (visitedDepts.contains(id)) {
return;
} // 防止循环引用和重复处理
visitedDepts.add(id);
List<DepartmentModel> subDepartments = DepartmentCache.getSubDepartments(id);
if (subDepartments == null) {
return;
}
for (DepartmentModel dept : subDepartments) {
if (dept == null || dept.getId() == null) {
continue;
}
allDeptIds.add(dept.getId());
subDepts(dept.getId(), allDeptIds, visitedDepts);
}
}
}

View File

@ -0,0 +1,73 @@
package com.awspaas.user.apps.nqms.portal.view.department.treeUtil;
import java.util.List;
/**
* @author ZHULIMIN
*/
public class TreeNode {
/**
* 节点id
*/
private String id;
/**
* 节点名称
*/
private String label;
/**
* 父节点 默认0为根节点
*/
private String parentId;
/**
* 是否有子节点
*/
private boolean hasChild;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
public boolean isHasChild() {
return hasChild;
}
public void setHasChild(boolean hasChild) {
this.hasChild = hasChild;
}
public TreeNode() {
}
public TreeNode(String id, String label, String parentId, boolean hasChild) {
this.id = id;
this.label = label;
this.parentId = parentId;
this.hasChild = hasChild;
}
}