开发获取待阅已阅权限的sql片段公式
This commit is contained in:
parent
54f23fe492
commit
48eee9a867
@ -7,7 +7,9 @@ import com.actionsoft.apps.listener.PluginListener;
|
|||||||
import com.actionsoft.apps.resource.AppContext;
|
import com.actionsoft.apps.resource.AppContext;
|
||||||
import com.actionsoft.apps.resource.plugin.profile.ASLPPluginProfile;
|
import com.actionsoft.apps.resource.plugin.profile.ASLPPluginProfile;
|
||||||
import com.actionsoft.apps.resource.plugin.profile.AWSPluginProfile;
|
import com.actionsoft.apps.resource.plugin.profile.AWSPluginProfile;
|
||||||
|
import com.actionsoft.apps.resource.plugin.profile.AtFormulaPluginProfile;
|
||||||
import com.awspaas.user.apps.docview.CreateFileRecord;
|
import com.awspaas.user.apps.docview.CreateFileRecord;
|
||||||
|
import com.awspaas.user.apps.docview_plugin.at.QueryUserFileSql;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author LHY
|
* @author LHY
|
||||||
@ -18,6 +20,7 @@ public class Plugins implements PluginListener {
|
|||||||
public List<AWSPluginProfile> register(AppContext context) {
|
public List<AWSPluginProfile> register(AppContext context) {
|
||||||
List<AWSPluginProfile> list = new ArrayList<>();
|
List<AWSPluginProfile> list = new ArrayList<>();
|
||||||
//注册监听器
|
//注册监听器
|
||||||
|
list.add(new AtFormulaPluginProfile("模型阅览", "@queryUserFileSql(*uid)", QueryUserFileSql.class.getName(), "模型预览权限sql片段", "根据用户信息,通过文件阅览表(BO_EU_PAL_DOC_VIEW)中,该用户有权阅读的sql片段。针对待阅文件列表、已阅文件列表使用"));
|
||||||
list.add(new ASLPPluginProfile("PushFileToXpage", CreateFileRecord.class.getName(),"推送待阅文件到xpage门户", null));
|
list.add(new ASLPPluginProfile("PushFileToXpage", CreateFileRecord.class.getName(),"推送待阅文件到xpage门户", null));
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,140 @@
|
|||||||
|
package com.awspaas.user.apps.docview_plugin.at;
|
||||||
|
|
||||||
|
import com.actionsoft.bpms.commons.at.AbstExpression;
|
||||||
|
import com.actionsoft.bpms.commons.at.ExpressionContext;
|
||||||
|
import com.actionsoft.bpms.org.cache.DepartmentCache;
|
||||||
|
import com.actionsoft.bpms.org.cache.UserCache;
|
||||||
|
import com.actionsoft.bpms.org.cache.UserMapCache;
|
||||||
|
import com.actionsoft.bpms.org.model.DepartmentModel;
|
||||||
|
import com.actionsoft.bpms.org.model.UserMapModel;
|
||||||
|
import com.actionsoft.bpms.org.model.UserModel;
|
||||||
|
import com.actionsoft.bpms.util.UtilString;
|
||||||
|
import com.actionsoft.exception.AWSExpressionException;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created with IntelliJ IDEA.
|
||||||
|
*
|
||||||
|
* @Author: yuandongqiang
|
||||||
|
* @Date: 2025/7/26
|
||||||
|
* @Description:
|
||||||
|
*/
|
||||||
|
public class QueryUserFileSql extends AbstExpression {
|
||||||
|
public QueryUserFileSql(ExpressionContext atContext, String expressionValue) {
|
||||||
|
super(atContext, expressionValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String execute(String s) throws AWSExpressionException {
|
||||||
|
String uid = getParameter(s, 1);
|
||||||
|
if (uid == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
UserModel userModel = UserCache.getModel(uid);
|
||||||
|
if (userModel == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
String level = userModel.getExt2(); // 职级
|
||||||
|
String positionNo = userModel.getPositionNo(); // 岗位
|
||||||
|
|
||||||
|
// 校验关键字段
|
||||||
|
if (level == null || positionNo == null) {
|
||||||
|
// 记录日志并返回空字符串
|
||||||
|
System.err.println("用户职级或岗位为空");
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
Set<String> deptIdSet = new HashSet<>();
|
||||||
|
|
||||||
|
try {
|
||||||
|
String mainDeptId = userModel.getDepartmentId();
|
||||||
|
if (mainDeptId != null) {
|
||||||
|
deptIdSet.addAll(getParentDeptList(mainDeptId));
|
||||||
|
}
|
||||||
|
|
||||||
|
List<UserMapModel> userMapModels = UserMapCache.getMapListOfUser(userModel.getUID());
|
||||||
|
if (userMapModels != null) {
|
||||||
|
for (UserMapModel userMapModel : userMapModels) {
|
||||||
|
String deptId = userMapModel.getDepartmentId();
|
||||||
|
if (deptId != null) {
|
||||||
|
deptIdSet.addAll(getParentDeptList(deptId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println("获取用户部门失败");
|
||||||
|
e.printStackTrace();
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构造 SQL 模板中的条件部分
|
||||||
|
String orgInClause = String.join("%' OR READINGSCOPE_ORG LIKE '%", deptIdSet);
|
||||||
|
String orgsql = "(READINGSCOPE_ORG LIKE '%" + orgInClause + "%')";
|
||||||
|
String postsql = "READINGSCOPE_POST LIKE '%" + positionNo + "%'";
|
||||||
|
String levelsql = "READINGSCOPE_LEVEL ='" + level + "'";
|
||||||
|
|
||||||
|
String sql = "ISFULLCOMPANY = '1'\n" +
|
||||||
|
" OR (\n" +
|
||||||
|
" READINGSCOPE_ORG IS NOT NULL AND READINGSCOPE_POST IS NOT NULL AND READINGSCOPE_LEVEL IS NOT NULL\n" +
|
||||||
|
" AND (\n" +
|
||||||
|
" ({ORGSQL} AND {LEVELSQL} ) OR {POSTSQL}\n" +
|
||||||
|
" )\n" +
|
||||||
|
" )\n" +
|
||||||
|
" OR (\n" +
|
||||||
|
" READINGSCOPE_ORG IS NOT NULL AND READINGSCOPE_POST IS NOT NULL AND READINGSCOPE_LEVEL IS NULL\n" +
|
||||||
|
" AND ({ORGSQL} OR {POSTSQL})\n" +
|
||||||
|
" )\n" +
|
||||||
|
" OR (\n" +
|
||||||
|
" READINGSCOPE_ORG IS NOT NULL AND READINGSCOPE_POST IS NULL AND READINGSCOPE_LEVEL IS NOT NULL\n" +
|
||||||
|
" AND ({ORGSQL} AND {LEVELSQL})\n" +
|
||||||
|
" )\n" +
|
||||||
|
" OR (\n" +
|
||||||
|
" READINGSCOPE_ORG IS NULL AND READINGSCOPE_POST IS NOT NULL AND READINGSCOPE_LEVEL IS NOT NULL\n" +
|
||||||
|
" AND ({POSTSQL} OR {LEVELSQL})\n" +
|
||||||
|
" )\n" +
|
||||||
|
" OR (\n" +
|
||||||
|
" READINGSCOPE_ORG IS NULL AND READINGSCOPE_POST IS NULL AND READINGSCOPE_LEVEL IS NOT NULL\n" +
|
||||||
|
" AND {LEVELSQL}\n" +
|
||||||
|
" )\n" +
|
||||||
|
" OR (\n" +
|
||||||
|
" READINGSCOPE_ORG IS NULL AND READINGSCOPE_POST IS NOT NULL AND READINGSCOPE_LEVEL IS NULL\n" +
|
||||||
|
" AND {POSTSQL}\n" +
|
||||||
|
" )\n" +
|
||||||
|
" OR (\n" +
|
||||||
|
" READINGSCOPE_ORG IS NOT NULL AND READINGSCOPE_POST IS NULL AND READINGSCOPE_LEVEL IS NULL\n" +
|
||||||
|
" AND {ORGSQL}\n" +
|
||||||
|
" )";
|
||||||
|
|
||||||
|
sql = sql.replace("{ORGSQL}", orgsql)
|
||||||
|
.replace("{POSTSQL}", postsql)
|
||||||
|
.replace("{LEVELSQL}", levelsql);
|
||||||
|
|
||||||
|
return sql;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前部门和所有上级部门的集合
|
||||||
|
*
|
||||||
|
* @param deptId 部门ID
|
||||||
|
* @return 部门集合
|
||||||
|
*/
|
||||||
|
public Set<String> getParentDeptList(String deptId) {
|
||||||
|
Set<String> deptIdSet = new HashSet<>();
|
||||||
|
DepartmentModel deptModel = DepartmentCache.getModel(deptId);
|
||||||
|
if (deptModel == null) {
|
||||||
|
return deptIdSet;
|
||||||
|
}
|
||||||
|
deptIdSet.add(deptId);
|
||||||
|
String parentDeptId = deptModel.getPathIdOfCache();
|
||||||
|
String[] ids = parentDeptId.split("/");
|
||||||
|
for (int i = 0; i < ids.length; i++) {
|
||||||
|
if (UtilString.isNotEmpty(ids[i])) {
|
||||||
|
deptIdSet.add(ids[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return deptIdSet;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user