Merge branch 'apps_dev_ydq_portal_process' into apps_4_test

This commit is contained in:
袁东强 2025-09-23 14:25:33 +08:00
commit c2540118d3
20 changed files with 2196 additions and 2 deletions

View File

@ -1280,7 +1280,7 @@
if(mrStatus == undefined || mrStatus == 0){//生效
//先弹出二次确认框
var options = {
title : "当前管理办法未生效,是否更新管理办法的生效状态?",
title : "是否确定在流程文件中添加管理要求?(确认后,内容显示位置可以在“管理要求位置”属性中修改)",
content:"确认生效",
onConfirm: function(){
$.ajax({

View File

@ -21,7 +21,7 @@ import java.util.Map;
@Controller
public class GPTController {
@Mapping(value = "com.awspaas.user.apps.gpt_interface.openRepositoryHome",
session = false,
session = false,
noSessionEvaluate = "无安全隐患",
noSessionReason = "用于打开相关文件地址")
public String openRepositoryHome(String repositoryId){

View File

@ -0,0 +1,15 @@
package com.awspaas.user.apps.nqms.portal.view.process.constant;
/**
* Created with IntelliJ IDEA.
*
* @Author: yuandongqiang
* @Date: 2025/9/16
* @Description:
*/
public class Constant {
public static final String APP_ID = "com.awspaas.user.apps.nqms.portal.view.process";
public static final String APP_ACT_COE_PAL_REPOSITORY = "APP_ACT_COE_PAL_REPOSITORY";
public static final String PAL_PROP = "APP_ACT_COE_PAL_PROP";
}

View File

@ -0,0 +1,131 @@
package com.awspaas.user.apps.nqms.portal.view.process.constant;
import com.actionsoft.sdk.local.SDK;
/**
* @author wym
* @date 2023-04-17 11:00
* @description
*/
public class Constants {
// 此初始化可废弃已改为应用启动事件中进行初始化
public Constants(){
defaultName = SDK.getAppAPI().getProperty("com.awspaas.user.apps.nqms.portal.util", "defaultName");
processCheckType = SDK.getAppAPI().getProperty("com.awspaas.user.apps.nqms.portal.util", "processCheckType");
factorCheckType = SDK.getAppAPI().getProperty("com.awspaas.user.apps.nqms.portal.util", "factorCheckType");
openCmd = SDK.getAppAPI().getProperty("com.awspaas.user.apps.nqms.portal.util", "openType");
}
/**
* 门户相关应用id及应用参数
*/
public static final String app_util = "com.awspaas.user.apps.nqms.portal.util";
public static final String app_util_defaultName = "defaultName";
public static final String app_util_processCheckType = "processCheckType";
public static final String app_util_factorCheckType = "factorCheckType";
public static final String app_util_openType = "openType";
public static final String app_process = "com.awspaas.user.apps.nqms.portal.view.process";
public static final String app_org = "com.awspaas.user.apps.nqms.portal.view.org";
public static final String app_indexpage = "com.awspaas.user.apps.nqms.portal.indexpage";
public static final String app_factorstore = "com.awspaas.user.apps.nqms.portal.factorstore";
public static final String app_compliance = "com.awspaas.user.apps.nqms.portal.view.compliance";
public static final String app_person = "com.awspaas.user.apps.nqms.portal.view.person";
public static final String app_strategy = "com.awspaas.user.apps.nqms.portal.view.strategy";
/**
* 空值时的默认显示内容
*/
public static String defaultName= "";
// public static String defaultName="";
/**
* 1:已发布 2适用中
*/
// public static String processCheckType= SDK.getAppAPI().getProperty("com.awspaas.user.apps.nqms.portal.util", "processCheckType");
public static String processCheckType="";
/**
* 1:已发布 2适用中
*/
// public static String factorCheckType= SDK.getAppAPI().getProperty("com.awspaas.user.apps.nqms.portal.util", "factorCheckType");
public static String factorCheckType="";
public static String openCmd="";
public static String APP_ID="com.awspaas.user.apps.nqms.portal.util";
/**
* 模型文件表
*/
public static final String APP_ACT_COE_PAL_REPOSITORY="APP_ACT_COE_PAL_REPOSITORY";
/**
* 模型文件表
*/
public static final String STRUCTURED_R="APP_EU_PAL_STRUCT_R";
/**
* 模型属性表
*/
public static final String STRUCT_R_P="APP_EU_PAL_STRUCT_R_PROP";
/**
*模型关联属性表
*/
public static final String STRUCT_R_P_REL="APP_EU_PAL_STRUCT_R_P_REL";
/**
* 形状表
*/
public static final String STRUCT_S="APP_EU_PAL_STRUCT_SHAPE";
/**
* 形状属性表
*/
public static final String STRUCT_S_P="APP_EU_PAL_STRUCT_S_PROP";
/**
* 形状关联属性信息表
*/
public static final String STRUCT_S_P_REL="APP_EU_PAL_STRUCT_S_P_REL";
/**
* 形状联系连线表
*/
public static final String STRUCT_S_LINE="APP_EU_PAL_STRUCT_S_LINE";
public static final String number="number";
public static final String desc="desc";
public static final String dutyDept="dept";
public static final String dutyPerson="person";
public static final String control_icon ="el-icon-tickets";//制度文件图标
public static final String process_icon ="el-icon-share";//末阶流程文件图标
public static final String highProcess_icon ="el-icon-notebook-1";//高阶流程文件图标
/**
* 图形关联业务域的标识
*/
public static final String SHAPE_BUSINESS = "shape_business";
/**
* 被识别为末级流程图的类型多个用逗号隔开
*/
public static final String processTypeArr = "process.bpmn2,nqms.procEpc";
/**
* 高阶流程图id
*/
public static final String highProcessType = "nqms.busiProcessLink";
public static final Integer businessLevel = 1;
public static final Integer processGroupLevel = 2;
}

View File

@ -0,0 +1,66 @@
package com.awspaas.user.apps.nqms.portal.view.process.constant;
public enum PalAttrEnum {
//通用属性
NUMBER("number","编号"),
DESC("desc","描述"),
DUTY_PERSON("bpm_person","责任人"),
DUTY_DEPT( "department","责任部门"),
//流程文件的属性
POSITION("position","岗位"),
FORM("form","表单"),
KPI("kpi","绩效"),
REGIME("institution","制度"),
COMPLIANCEFILE("Compliance","合规文件"),
COMPLIANCE("compliance","合规条款"),
RISK("danger","风险"),
CONTROL("regulate","控制"),
SYSTEM("itsystem","应用系统"),
TERM("term","术语"),
//组织图(文件)属性
dutyPerson("nqmsDepartmentHead","负责人"),
manager("nqmsCompetentLeader","主管领导"),
deptType("nqmsDepartmentType","部门类型"),
target("nqmsWorkTarget","工作目标"),
dutyDesc("nqmsFunctionDesc","职能说明"),
postDuty("nqms_responsibility","职责"),
mission("nqmsMission","使命"),
//角色清单
relPost("relPost","关联岗位"),
//合规文件
comLevel("level","文件级别"),
comType("nqmsComplianceType","文件类型"),
//合规条款(形状的属性)
applicability("nqmsApplicable","适用性"),
termLevel("nqmsRequirementDegree","要求程度"),
termRiskLevel("nqmsRiskLevel","风险等级"),
termCount("nqmsClauseContent","要求内容");
private String key;
private String value;
PalAttrEnum(String key , String value){
this.key = key;
this.value = value;
}
public String getKey() {
return this.key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return this.value;
}
public void setValue(String value) {
this.value = value;
}
}

View File

@ -0,0 +1,68 @@
package com.awspaas.user.apps.nqms.portal.view.process.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.actionsoft.sdk.local.SDK;
import com.alibaba.fastjson.JSON;
import com.awspaas.user.apps.nqms.portal.view.process.constant.Constant;
import com.awspaas.user.apps.nqms.portal.view.process.service.PortalProcessService;
import java.util.HashMap;
/**
* Created with IntelliJ IDEA.
*
* @Author: yuandongqiang
* @Date: 2025/9/16
* @Description:
*/
@Controller
public class PortalProcessController {
/**
* 页面入口
*
* @param me
* @return
*/
@Mapping("com.awspaas.user.apps.nqms.portal.view.process_toPage")
public String getListHomePage(UserContext me) {
HashMap<String, Object> macroLibraries = new HashMap<>(1);
String processMapId = SDK.getAppAPI().getProperty(Constant.APP_ID, "processMapId");
macroLibraries.put("sid", me.getSessionId());
macroLibraries.put("uuid", processMapId);
macroLibraries.put("settingParam", JSON.toJSON(macroLibraries));
return HtmlPageTemplate.merge(Constant.APP_ID, "main.html", macroLibraries);
}
/**
* 页面初始化数据 获取流程树
*
* @param ux 用户上下文
* @param parentId 父级节点
* @param queryName 查询条件
* @return
*/
@Mapping("com.awspaas.user.apps.nqms.portal.view.process_list_initData")
public String getInitData(UserContext ux, String parentId, String queryName) {
SDK.getLogAPI().consoleInfo("接口:[com.awspaas.user.apps.nqms.portal.view.process_list_initData] 查询人:" + ux.getUID() + ",parentId:" + parentId + ",queryName:" + queryName);
return PortalProcessService.getInstance().getTreeData(ux, parentId, queryName);
}
/**
* 查询指定节点下的流程情况
*
* @param ux
* @param id 指定的根节点
* @param page
* @param size
* @return
*/
@Mapping("com.awspaas.user.apps.nqms.portal.view.process_list_getFileData")
public String queryFileData(UserContext ux, String id, int page, int size, String queryParams) {
SDK.getLogAPI().consoleInfo("接口:[com.awspaas.user.apps.nqms.portal.view.process_list_getFileData] 查询人:" + ux.getUID() + ",查询条件为 id:" + id + ",page:" + page + "size:" + size + ",queryParams:" + queryParams);
return PortalProcessService.getInstance().getFileData(ux, id, page, size, true, null, queryParams);
}
}

View File

@ -0,0 +1,76 @@
package com.awspaas.user.apps.nqms.portal.view.process.dao;
import com.actionsoft.bpms.commons.database.RowMapper;
import com.actionsoft.bpms.commons.mvc.dao.DaoObject;
import com.actionsoft.bpms.util.DBSql;
import com.actionsoft.exception.AWSDataAccessException;
import com.awspaas.user.apps.nqms.portal.view.process.constant.Constant;
import com.awspaas.user.apps.nqms.portal.view.process.entity.FileBasicAttrEntity;
import com.awspaas.user.apps.nqms.portal.view.process.util.ViewUtil;
import org.apache.commons.lang.StringUtils;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
* @author wym
* @date 2023-05-22 17:21
* @description
*/
public class FileBasicAttrDao extends DaoObject<FileBasicAttrEntity> {
@Override
public int insert(FileBasicAttrEntity fileBasicAttrEntity) throws AWSDataAccessException {
return 0;
}
@Override
public int update(FileBasicAttrEntity fileBasicAttrEntity) throws AWSDataAccessException {
return 0;
}
@Override
public String entityName() {
return Constant.PAL_PROP;
}
@Override
public RowMapper<FileBasicAttrEntity> rowMapper() {
return new FileBasicAttrDao.Mapper();
}
private static class Mapper implements RowMapper<FileBasicAttrEntity> {
@Override
public FileBasicAttrEntity mapRow(ResultSet rset, int i) throws SQLException {
FileBasicAttrEntity entity = new FileBasicAttrEntity();
entity.setID(rset.getString("ID"));
entity.setPLID(rset.getString("PLID"));
entity.setPROPERTYID(rset.getString("PROPERTYID"));
entity.setPROPERTYNAME(rset.getString("PROPERTYNAME"));
entity.setPROPERTYVALUE(rset.getString("PROPERTYVALUE"));
entity.setORDERINDEX(rset.getString("ORDERINDEX"));
return entity;
}
}
/**
* 根据pal模型id进行查询
*
* @return
*/
public List<FileBasicAttrEntity> selectBasicAttrByFileIds(List<String> fileIdList) {
String fileIds = ViewUtil.listToSqlStr(fileIdList);
String query = "";
if (StringUtils.isNotEmpty(fileIds)) {
query += " AND PLID IN " + fileIds;
} else {
return new ArrayList<>();
}
String sql = "SELECT * FROM " + entityName() + " WHERE 1=1 " + query;
List<FileBasicAttrEntity> list = DBSql.query(sql, new Mapper());
return list;
}
}

View File

@ -0,0 +1,23 @@
package com.awspaas.user.apps.nqms.portal.view.process.dao;
import com.actionsoft.bpms.commons.database.RowMap;
import com.actionsoft.bpms.util.DBSql;
import com.awspaas.user.apps.nqms.portal.view.process.constant.Constant;
/**
* @author ydq
* @date 2025/08/15
* @description
*/
public class RepositoryDao {
public String getWsId(String wsName) {
String sql = "SELECT ID FROM APP_ACT_COE_PAL_WORKSPACE WHERE WSNAME=?";
String wsId = DBSql.getString(sql, new Object[]{wsName});
return wsId;
}
public RowMap selectById(String id){
String sql = "SELECT * FROM "+ Constant.APP_ACT_COE_PAL_REPOSITORY +" WHERE ID = ?";
RowMap map = DBSql.getMap(sql, id);
return map;
}
}

View File

@ -0,0 +1,109 @@
package com.awspaas.user.apps.nqms.portal.view.process.dao;
import com.actionsoft.bpms.commons.database.RowMapper;
import com.actionsoft.bpms.commons.mvc.dao.DaoObject;
import com.actionsoft.bpms.util.DBSql;
import com.actionsoft.exception.AWSDataAccessException;
import com.alibaba.fastjson.JSONObject;
import com.awspaas.user.apps.nqms.portal.view.process.entity.RlatBpmnModel;
import com.awspaas.user.apps.nqms.portal.view.process.entity.RlatEntity;
import com.awspaas.user.apps.nqms.portal.view.process.util.StructUtil;
import org.apache.commons.lang.StringUtils;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
/**
* @author wym
* @date 2023-05-22 16:02
* @description
*/
public class RlatDao extends DaoObject<RlatEntity> {
@Override
public int insert(RlatEntity rlatEntity) throws AWSDataAccessException {
return 0;
}
@Override
public int update(RlatEntity rlatEntity) throws AWSDataAccessException {
return 0;
}
@Override
public String entityName() {
return "APP_ACT_COE_PAL_SHAPE_RLAT";
}
@Override
public RowMapper rowMapper() {
return new Mapper();
}
/**
* 根据文件id批量查询形状关联属性
*
* @param fileIds
* @return
*/
public List<RlatEntity> selectShapeRlatById(List<String> fileIds) {
String query = "";
String str = StructUtil.listToSqlStr(fileIds);
if (StringUtils.isNotEmpty(str)) {
query += " AND FILEID IN " + str;
}
String sql = "SELECT E.*, (SELECT PLNAME FROM APP_ACT_COE_PAL_REPOSITORY WHERE ID =E.RELATIONFILEID) AS PLNAME FROM " + entityName() + " E WHERE 1=1 " + query;
List<RlatEntity> list = DBSql.query(sql, new Mapper());
return list;
}
private static class Mapper implements RowMapper<RlatEntity> {
@Override
public RlatEntity mapRow(ResultSet rset, int i) throws SQLException {
String plname = "";
try {
plname = rset.getString("PLNAME");
} catch (SQLException sqlException) {
}
String relationshapetext = rset.getString("RELATIONSHAPETEXT");
String relationshapeid = rset.getString("RELATIONSHAPEID");
String relationfileid = rset.getString("RELATIONFILEID");
if (StringUtils.isEmpty(relationshapeid)) {
relationshapetext = plname;
}
RlatEntity entity = new RlatEntity();
entity.setID(rset.getString("ID"));
entity.setATTRID(rset.getString("ATTRID"));
entity.setFILEID(rset.getString("FILEID"));
entity.setRELATIONFILEID(rset.getString("RELATIONFILEID"));
entity.setRELATIONSHAPEID(rset.getString("RELATIONSHAPEID"));
entity.setSHAPEID(rset.getString("SHAPEID"));
entity.setSHAPETEXT(rset.getString("SHAPETEXT"));
try {
String plmethodid = rset.getString("PLMETHODID");
String plcategory = rset.getString("PLCATEGORY");
entity.setPLMETHODID(plmethodid);
entity.setPLCATEGORY(plcategory);
} catch (Exception e) {
}
if (StringUtils.isNotEmpty(relationfileid) && relationfileid.equals("00000000-0000-0000-0000-000000000000")) {
RlatBpmnModel model = JSONObject.parseObject(relationshapetext, RlatBpmnModel.class);
entity.setRELATIONSHAPETEXT(model);
} else {
entity.setRELATIONSHAPETEXT(relationshapetext);
}
return entity;
}
}
}

View File

@ -0,0 +1,93 @@
package com.awspaas.user.apps.nqms.portal.view.process.entity;
/**
* @author wym
* @date 2023-05-22 17:08
* @description
*/
public class FileBasicAttrEntity {
/**
*
*/
private String ID;
/**
*PAL模型ID
*/
private String PLID;
/**
*属性Key
*/
private String PROPERTYID;
/**
*属性名称
*/
private String PROPERTYNAME;
/**
*属性值
*/
private String PROPERTYVALUE;
/**
*
*/
private String ORDERINDEX;
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getPLID() {
return PLID;
}
public void setPLID(String PLID) {
this.PLID = PLID;
}
public String getPROPERTYID() {
return PROPERTYID;
}
public void setPROPERTYID(String PROPERTYID) {
this.PROPERTYID = PROPERTYID;
}
public String getPROPERTYNAME() {
return PROPERTYNAME;
}
public void setPROPERTYNAME(String PROPERTYNAME) {
this.PROPERTYNAME = PROPERTYNAME;
}
public String getPROPERTYVALUE() {
return PROPERTYVALUE;
}
public void setPROPERTYVALUE(String PROPERTYVALUE) {
this.PROPERTYVALUE = PROPERTYVALUE;
}
public String getORDERINDEX() {
return ORDERINDEX;
}
public void setORDERINDEX(String ORDERINDEX) {
this.ORDERINDEX = ORDERINDEX;
}
@Override
public String toString() {
return "FileBasicAttrEntity{" +
"ID='" + ID + '\'' +
", PLID='" + PLID + '\'' +
", PROPERTYID='" + PROPERTYID + '\'' +
", PROPERTYNAME='" + PROPERTYNAME + '\'' +
", PROPERTYVALUE='" + PROPERTYVALUE + '\'' +
", ORDERINDEX='" + ORDERINDEX + '\'' +
'}';
}
}

View File

@ -0,0 +1,45 @@
package com.awspaas.user.apps.nqms.portal.view.process.entity;
/**
* @author wym
* @date 2023-05-22 16:08
* @description 关联的bpmn组织模型
*/
public class RlatBpmnModel {
private String ID;
private String NAME;
private String TYPE;
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getNAME() {
return NAME;
}
public void setNAME(String NAME) {
this.NAME = NAME;
}
public String getTYPE() {
return TYPE;
}
public void setTYPE(String TYPE) {
this.TYPE = TYPE;
}
@Override
public String toString() {
return "RlatBpmnModel{" +
"ID='" + ID + '\'' +
", NAME='" + NAME + '\'' +
", TYPE='" + TYPE + '\'' +
'}';
}
}

View File

@ -0,0 +1,154 @@
package com.awspaas.user.apps.nqms.portal.view.process.entity;
/**
* @author wym
* @date 2023-05-22 15:58
* @description 关联属性存储表
*/
public class RlatEntity {
/**
*
*/
private String ID;
/**
*PAL模型ID
*/
private String FILEID;
/**
*PAL模型形状ID
*/
private String SHAPEID;
/**
*PAL模型形状名称
*/
private String SHAPETEXT;
/**
*属性Key
*/
private String ATTRID;
/**
*关联的PAL模型ID
*/
private String RELATIONFILEID;
/**
*关联的PAL模型形状ID
*/
private String RELATIONSHAPEID;
/**
*关联的PAL模型形状名称
*/
private Object RELATIONSHAPETEXT;
/**
* 主动关联文件的类型
*/
private String PLMETHODID;
/**
*主动关联文件的分类
*/
private String PLCATEGORY;
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getFILEID() {
return FILEID;
}
public void setFILEID(String FILEID) {
this.FILEID = FILEID;
}
public String getSHAPEID() {
return SHAPEID;
}
public void setSHAPEID(String SHAPEID) {
this.SHAPEID = SHAPEID;
}
public String getSHAPETEXT() {
return SHAPETEXT;
}
public void setSHAPETEXT(String SHAPETEXT) {
this.SHAPETEXT = SHAPETEXT;
}
public String getATTRID() {
return ATTRID;
}
public void setATTRID(String ATTRID) {
this.ATTRID = ATTRID;
}
public String getRELATIONFILEID() {
return RELATIONFILEID;
}
public void setRELATIONFILEID(String RELATIONFILEID) {
this.RELATIONFILEID = RELATIONFILEID;
}
public String getRELATIONSHAPEID() {
return RELATIONSHAPEID;
}
public void setRELATIONSHAPEID(String RELATIONSHAPEID) {
this.RELATIONSHAPEID = RELATIONSHAPEID;
}
public Object getRELATIONSHAPETEXT() {
return RELATIONSHAPETEXT;
}
public void setRELATIONSHAPETEXT(Object RELATIONSHAPETEXT) {
// if (StringUtils.isNotEmpty(this.RELATIONFILEID)&&this.RELATIONFILEID.equals("00000000-0000-0000-0000-000000000000") ){
// RlatBpmnModel model = new RlatBpmnModel();
// if (StringUtils.isNotEmpty(RELATIONSHAPETEXT)){
// model= JSONObject.parseObject(RELATIONSHAPETEXT, RlatBpmnModel.class);
// }
// this.RELATIONSHAPETEXT = model;
//
// }else {
// this.RELATIONSHAPETEXT = RELATIONSHAPETEXT;
// }
this.RELATIONSHAPETEXT = RELATIONSHAPETEXT;
}
public String getPLMETHODID() {
return PLMETHODID;
}
public void setPLMETHODID(String PLMETHODID) {
this.PLMETHODID = PLMETHODID;
}
public String getPLCATEGORY() {
return PLCATEGORY;
}
public void setPLCATEGORY(String PLCATEGORY) {
this.PLCATEGORY = PLCATEGORY;
}
@Override
public String toString() {
return "RlatEntity{" +
"ID='" + ID + '\'' +
", FILEID='" + FILEID + '\'' +
", SHAPEID='" + SHAPEID + '\'' +
", SHAPETEXT='" + SHAPETEXT + '\'' +
", ATTRID='" + ATTRID + '\'' +
", RELATIONFILEID='" + RELATIONFILEID + '\'' +
", RELATIONSHAPEID='" + RELATIONSHAPEID + '\'' +
", RELATIONSHAPETEXT=" + RELATIONSHAPETEXT +
'}';
}
}

View File

@ -0,0 +1,333 @@
package com.awspaas.user.apps.nqms.portal.view.process.service;
import com.actionsoft.bpms.commons.database.RowMap;
import com.actionsoft.bpms.commons.mvc.view.ResponseObject;
import com.actionsoft.bpms.form.engine.FormEngine;
import com.actionsoft.bpms.server.UserContext;
import com.actionsoft.sdk.local.SDK;
import com.alibaba.fastjson.JSONObject;
import com.awspaas.user.apps.nqms.portal.view.process.constant.Constants;
import com.awspaas.user.apps.nqms.portal.view.process.constant.PalAttrEnum;
import com.awspaas.user.apps.nqms.portal.view.process.dao.FileBasicAttrDao;
import com.awspaas.user.apps.nqms.portal.view.process.dao.RepositoryDao;
import com.awspaas.user.apps.nqms.portal.view.process.dao.RlatDao;
import com.awspaas.user.apps.nqms.portal.view.process.entity.FileBasicAttrEntity;
import com.awspaas.user.apps.nqms.portal.view.process.entity.RlatBpmnModel;
import com.awspaas.user.apps.nqms.portal.view.process.entity.RlatEntity;
import com.awspaas.user.apps.nqms.portal.view.process.util.OrgUtil;
import com.awspaas.user.apps.nqms.portal.view.process.util.TreeNode;
import com.awspaas.user.apps.nqms.portal.view.process.util.TreeUtil;
import com.awspaas.user.apps.nqms.portal.view.process.util.ViewUtil;
import com.awspaas.user.apps.nqms.portal.view.process.vo.ProcessFileVO;
import jodd.util.StringUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
* Created with IntelliJ IDEA.
*
* @Author: yuandongqiang
* @Date: 2025/9/17
* @Description:
*/
public class PortalProcessService {
private PortalProcessService() {
}
private static class PortalProcessInstance {
public static PortalProcessService instance = new PortalProcessService();
}
public static PortalProcessService getInstance() {
return PortalProcessInstance.instance;
}
/**
* 获取流程清单页面左侧树结构初始化数据
*
* @param ux 用户上下文
* @param parentId 父级ID
* @param queryName 查询条件
* @return
*/
public String getTreeData(UserContext ux, String parentId, String queryName) {
if (StringUtils.isBlank(parentId)) {
parentId = "process";
}
UtilService service = UtilService.getInstance();
String wsId = service.getDefaultWsId();
if (StringUtils.isEmpty(wsId)) {
return service.getWsIdWarnMsg();
}
List<JSONObject> files = SDK.getPALRepositoryQueryAPI().getPalRepositoryModelsByPid(wsId, parentId);
List<TreeNode> treeNodes = new ArrayList<>();
for (JSONObject row : files) {
Boolean use = row.getBoolean("use");
if (!use) {
continue;
}
if ("process".equals(parentId)) {
String name = row.getString("name");
int index = row.getIntValue("orderIndex");
if (!name.startsWith(String.valueOf(index))) {
continue;
}
}
if (StringUtil.isNotBlank(queryName)) {
if (!row.getString("name").contains(queryName)) {
boolean hasQUery = false;
String id = row.getString("id");
List<JSONObject> list = SDK.getPALRepositoryQueryAPI().getAllPublishedPalRepositoryModelsByPid(wsId, id);
for (JSONObject jsonObject : list) {
if (jsonObject.getString("name").contains(queryName)) {
hasQUery = true;
break;
}
}
if (!hasQUery) {
continue;
}
}
}
TreeNode node = new TreeNode(row.getString("id"), row.getString("name"), row.getString("newParentId"));
treeNodes.add(node);
}
List<TreeNode> processTree = TreeUtil.treeMenu(treeNodes, parentId);
ResponseObject ro = ResponseObject.newOkResponse();
ro.put("treeData", processTree);
return ro.toString();
}
/**
* 查询指定节点下的流程文件数据
*
* @param ux
* @param parentId 当前点击的节点
* @param page
* @param size
* @param flag 是否添加当前点击节点的信息
* @return
*/
public String getFileData(UserContext ux, String parentId, int page, int size, boolean flag, List<String> myFiles, String params) {
JSONObject paramsMap = null;
if (StringUtils.isNotEmpty(params)) {
paramsMap = JSONObject.parseObject(params);
}
UtilService service = UtilService.getInstance();
String rootId = "process";
String wsId = service.getDefaultWsId();
if (StringUtils.isEmpty(wsId)) {
return service.getWsIdWarnMsg();
}
JSONObject rootFile = null;
if (StringUtils.isEmpty(parentId)) {
parentId = rootId;
} else {
RepositoryDao RepositoryDao = new RepositoryDao();
RowMap rowMap = RepositoryDao.selectById(parentId);
rootFile = ViewUtil.toJsonObject(rowMap);
}
List<JSONObject> allFiles = service.getAllDirAndProcessPalByPid(wsId, rootId);
List<JSONObject> files = service.getAllProcessPalByPid(wsId, parentId);
Map<String, List<JSONObject>> allCollect = allFiles.stream().collect(Collectors.groupingBy(el -> el.getString("id")));
if (rootFile != null && flag) {
files.add(rootFile);
}
List<JSONObject> collect = files.stream().sorted(Comparator.comparing(el -> el.getString("orderIndex"))).filter(el ->
CollectionUtils.isEmpty(myFiles) || myFiles.contains(el.getString("versionId"))
).sorted(Comparator.comparing(el -> el.getString("name"))).collect(Collectors.toList());
List data = new ArrayList();
if (null == paramsMap) {
data = ViewUtil.pageUtil(collect, page, size);
data = setProcessAttr(ux, data, allCollect, paramsMap);
} else {
collect = setProcessAttr(ux, collect, allCollect, paramsMap);
data = ViewUtil.pageUtil(collect, page, size);
}
ResponseObject ro = ResponseObject.newOkResponse();
ro.put("fileData", data);
ro.put("count", collect.size());
ro.put("processCount", collect.size());
return ro.toString();
}
/**
* 构建文件的相关属性信息
*
* @param ux
* @param files
* @param allFileMap
* @return
*/
public List setProcessAttr(UserContext ux, List<JSONObject> files, Map<String, List<JSONObject>> allFileMap, JSONObject paramsMap) {
String queryName = "";
String queryDept = "";
if (null != paramsMap) {
queryName = paramsMap.getString("name");
queryDept = paramsMap.getString("dept");
}
List<ProcessFileVO> data = new ArrayList<>();
String sid = ux.getSessionId();
List<String> fileIdList = new ArrayList<>();
for (JSONObject file : files) {
String id = file.getString("id");
fileIdList.add(id);
}
Map<String, List<RlatEntity>> relAttr = queryRelAttr(fileIdList);
Map<String, List<FileBasicAttrEntity>> basicAttr = queryBasicAttr(fileIdList);
for (JSONObject row : files) {
String id = row.getString("id");
List<FileBasicAttrEntity> basic = basicAttr.get(id);
String number = "";
if (CollectionUtils.isNotEmpty(basic)) {
for (FileBasicAttrEntity fileBasic : basic) {
if (fileBasic.getPROPERTYID().equals("number")) {
number = fileBasic.getPROPERTYVALUE();
break;
}
}
}
// 业务域与流程组
List<JSONObject> fileLink = findFileLink(allFileMap, id);
String businessName = "";
String proGroupName = "";
if (fileLink != null && fileLink.size() > 1) {
JSONObject firstLevel = fileLink.get(1);
businessName = firstLevel == null ? "" : firstLevel.getString("name");
}
if (fileLink != null && fileLink.size() > 2) {
JSONObject secondLevel = fileLink.get(2);
proGroupName = secondLevel == null ? "" : secondLevel.getString("name");
}
//发布时间
Date date = row.getDate("publishDate");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String publishDate = date == null ? "" : format.format(date);
//跳转链接
String url = "./w?sid=" + sid + "&cmd=" + Constants.openCmd + "&uuid=" + id + "&taskId=";
//关联文件
List<String> compIds = new ArrayList<>();//关联合规文件
List<String> regimeIds = new ArrayList<>();//关联制度文件
List<String> formIds = new ArrayList<>();//关联表单文件
String duty_dept = "";
String duty_person = "";
List<RlatEntity> list = relAttr.get(id);
if (list != null && !list.isEmpty()) {
Map<String, List<RlatEntity>> collect = list.stream().collect(Collectors.groupingBy(RlatEntity::getATTRID));
//责任人
List<RlatEntity> duty_p = collect.get(PalAttrEnum.DUTY_PERSON.getKey());
if (duty_p != null && !duty_p.isEmpty()) {
try {
RlatBpmnModel model = (RlatBpmnModel) duty_p.get(0).getRELATIONSHAPETEXT();
duty_person = model.getNAME();
} catch (Exception e) {
e.printStackTrace();
SDK.getLogAPI().consoleErr("流程的【责任人】查询异常,其属性【" + PalAttrEnum.DUTY_PERSON.getKey() + "】不是关联的aws组织结构");
}
}
if (StringUtils.isNotEmpty(queryName) && !duty_person.contains(queryName)) continue;
//责任部门
duty_dept = OrgUtil.getRelAttr(collect, PalAttrEnum.DUTY_DEPT.getKey());
if (StringUtils.isNotEmpty(queryDept) && !duty_dept.contains(queryDept)) continue;
//表单
List<RlatEntity> formList = collect.get(PalAttrEnum.FORM.getKey()) == null ? new ArrayList<>() : collect.get(PalAttrEnum.FORM.getKey());
for (RlatEntity form : formList) {
if (!formIds.contains(form.getRELATIONFILEID())) {
formIds.add(form.getRELATIONFILEID());
}
}
//合规文件
List<RlatEntity> complianceList = collect.get(PalAttrEnum.COMPLIANCE.getKey()) == null ? new ArrayList<>() : collect.get(PalAttrEnum.COMPLIANCE.getKey());
for (RlatEntity comp : complianceList) {
if (!compIds.contains(comp.getRELATIONSHAPEID())) {
compIds.add(comp.getRELATIONSHAPEID());
}
}
//制度
List<RlatEntity> regimeList = collect.get(PalAttrEnum.REGIME.getKey()) == null ? new ArrayList<>() : collect.get(PalAttrEnum.REGIME.getKey());
regimeList = regimeList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(el -> el.getFILEID() + "-" + el.getRELATIONFILEID() +
"-" + el.getRELATIONSHAPEID()))), ArrayList::new));
for (RlatEntity regime : regimeList) {
regimeIds.add(regime.getRELATIONSHAPEID());
}
}
if (null != paramsMap && CollectionUtils.isEmpty(list)) {
continue;
}
ProcessFileVO fileVO = new ProcessFileVO(url, id, businessName, proGroupName, number, row.getString("name"), "", publishDate, compIds, regimeIds, formIds, duty_dept, duty_person);
data.add(fileVO);
}
// List<ProcessFileVO> fileData = TestData.getFileData();
return data;
}
/**
* 查询文件的关联属性
*
* @param fileIdList
* @return
*/
public Map<String, List<RlatEntity>> queryRelAttr(List<String> fileIdList) {
RlatDao dao = new RlatDao();
List<RlatEntity> list = dao.selectShapeRlatById(fileIdList);
Map<String, List<RlatEntity>> collect = list.stream().collect(Collectors.groupingBy(el -> el.getFILEID()));
return collect;
}
/**
* 查询文件的基础属性
*
* @param fileIdList
* @return
*/
public Map<String, List<FileBasicAttrEntity>> queryBasicAttr(List<String> fileIdList) {
FileBasicAttrDao dao = new FileBasicAttrDao();
List<FileBasicAttrEntity> list = dao.selectBasicAttrByFileIds(fileIdList);
Map<String, List<FileBasicAttrEntity>> collect = list.stream().collect(Collectors.groupingBy(el -> el.getPLID()));
return collect;
}
/**
* 从最底层向上查询出文件链
*
* @param collect
* @param id
* @return list的index即为从下往上的层数
*/
public List<JSONObject> findFileLink(Map<String, List<JSONObject>> collect, String id) {
List<JSONObject> fileModels = collect.get(id);
List<JSONObject> list = new ArrayList<>();
// SDK.getLogAPI().consoleInfo(id+":开始寻找流程链");
while (fileModels != null && !fileModels.isEmpty()) {
JSONObject file = fileModels.get(0);
id = file.getString("newParentId");
fileModels = collect.get(id);
list.add(file);
}
// SDK.getLogAPI().consoleInfo(id+":结束寻找流程链");
Collections.reverse(list);
return list;
}
}

View File

@ -0,0 +1,87 @@
package com.awspaas.user.apps.nqms.portal.view.process.service;
import com.actionsoft.bpms.commons.mvc.view.ResponseObject;
import com.actionsoft.sdk.local.SDK;
import com.alibaba.fastjson.JSONObject;
import com.awspaas.user.apps.nqms.portal.view.process.constant.Constants;
import com.awspaas.user.apps.nqms.portal.view.process.dao.RepositoryDao;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author wym
* @date 2023-05-24 10:49
* @description
*/
public class UtilService {
private UtilService() {
}
private static class FactorInstance {
private static UtilService instance = new UtilService();
}
public static UtilService getInstance() {
return FactorInstance.instance;
}
/**
* 查询默认访问的资产库id
*
* @return
*/
public String getDefaultWsId() {
String wsName = SDK.getAppAPI().getProperty("com.awspaas.user.apps.nqms.portal.indexpage", "wsName");
RepositoryDao repositoryDao = new RepositoryDao();
return repositoryDao.getWsId(wsName);
}
public String getWsIdWarnMsg() {
ResponseObject ro = ResponseObject.newWarnResponse("请检查【门户首页】应用中参数[默认资产库名称]是否配置正确");
return ro.toString();
}
/**
* 根据根id获取下面的全部数据(流程类)
* 包含文件夹
*
* @param wsId
* @param pid
* @return
*/
public List<JSONObject> getAllDirAndProcessPalByPid(String wsId, String pid) {
//查找使用中状态下的文件可以查出来文件夹发布状态的无法查出来文件夹
List<JSONObject> list;
if (new Constants().processCheckType.equals("1")) {
List<JSONObject> useList = SDK.getPALRepositoryQueryAPI().getAllUsedPalRepositoryModelsByPid(wsId, pid);
useList = useList.stream().filter(el -> "default".equals(el.getString("methodId"))).collect(Collectors.toList());
list = SDK.getPALRepositoryQueryAPI().getAllPublishedPalRepositoryModelsByPid(wsId, pid);
list.addAll(useList);
} else {
list = SDK.getPALRepositoryQueryAPI().getAllUsedPalRepositoryModelsByPid(wsId, pid);
}
return list;
}
/**
* 根据根id获取下面的全部数据(流程类)
* 不包含文件夹
*
* @param wsId
* @param pid
* @return
*/
public List<JSONObject> getAllProcessPalByPid(String wsId, String pid) {
List<JSONObject> list;
if (new Constants().processCheckType.equals("1")) {
list = SDK.getPALRepositoryQueryAPI().getAllPublishedPalRepositoryModelsByPid(wsId, pid);
} else {
list = SDK.getPALRepositoryQueryAPI().getAllUsedPalRepositoryModelsByPid(wsId, pid);
list = list.stream().filter(el -> !"default".equals(el.getString("methodId"))).collect(Collectors.toList());
}
return list;
}
}

View File

@ -0,0 +1,32 @@
package com.awspaas.user.apps.nqms.portal.view.process.util;
import com.awspaas.user.apps.nqms.portal.view.process.entity.RlatBpmnModel;
import com.awspaas.user.apps.nqms.portal.view.process.entity.RlatEntity;
import java.util.List;
import java.util.Map;
/**
* @author wym
* @date 2023-05-25 17:01
* @description 组织数据相关
*/
public class OrgUtil {
public static String getRelAttr(Map<String, List<RlatEntity>> relAttr , String attrId){
String attrVal = "";
List<RlatEntity> attr = relAttr.get(attrId);
if (attr!=null&&!attr.isEmpty()){
RlatEntity entity = attr.get(0);
if ( entity.getRELATIONFILEID().equals("00000000-0000-0000-0000-000000000000")) {
RlatBpmnModel bpmnModel = (RlatBpmnModel) entity.getRELATIONSHAPETEXT();
return bpmnModel.getNAME();
}else {
return (String) entity.getRELATIONSHAPETEXT();
}
}else {
return "";
}
}
}

View File

@ -0,0 +1,361 @@
package com.awspaas.user.apps.nqms.portal.view.process.util;
import org.apache.commons.lang.StringUtils;
import java.util.List;
/**
* @author wym
* @date 2023-04-17 14:08
* @description
*/
public class StructUtil {
/**
* @param list
* @return
*/
public static String listToSqlStr(List<String> list) {
if (list == null || list.isEmpty()) return "";
StringBuilder sqlStr = new StringBuilder("(");
for (String el : list) {
if (StringUtils.isEmpty(el)) continue;
String str = "'" + el + "',";
sqlStr.append(str);
}
sqlStr.append(")");
int i = sqlStr.lastIndexOf(",");
if (i>=0){
sqlStr.deleteCharAt(i);
}
String str = sqlStr.toString();
return str.equals("()")?"":str;
}
/*
*/
/**
* 转为basemodel
*
* @param list
* @return
*//*
public static List<FileModel> toFileModel(List<RowMap> list) {
Map<String, List<RowMap>> processFile = list.stream().collect(Collectors.groupingBy(el -> el.getString("ID")));
List<FileModel> data = new ArrayList<>();
for (String key : processFile.keySet()) {
FileModel model = new FileModel();
model = setFileModel(model, processFile.get(key).get(0));
updateFileModel(processFile.get(key), model);
data.add(model);
}
return data;
}
public static List<FileModel> setFileAttr(List<RowMap> list, List<FileModel> fileModels) {
Map<String, List<RowMap>> rel = list.stream().collect(Collectors.groupingBy(el -> el.getString("PL_ID")));
for (FileModel file : fileModels) {
String plId = file.getID();
List<RowMap> rowMaps = rel.get(plId);
updateFileModel(rowMaps, file);
}
return fileModels;
}
*/
/**
* 根据结果集更新文件模型里形状的属性
* @param list
* @param fileModels
* @return
*//*
public static List<FileModel> setShapeAttr(List<RowMap> list, List<FileModel> fileModels) {
Map<String, List<RowMap>> rel = list.stream().collect(Collectors.groupingBy(el -> el.getString("PL_ID")));
for (FileModel file : fileModels) {
String plId = file.getID();
List<RowMap> rowMaps = rel.get(plId);
updateShapeModelAttr(rowMaps, file);
}
return fileModels;
}
*/
/**
* 更新文件模型的属性
*
* @param rowMaps
* @param model
*//*
public static void updateFileModel(List<RowMap> rowMaps, FileModel model) {
AttrModel attrModel = model.getAttrModel() == null ? new AttrModel() : model.getAttrModel();
for (RowMap map : rowMaps) {
// String parentId = map.getString("PL_ID");
// //被哪个文件使用
// if (StringUtils.isNotEmpty(parentId) && !parentId.equals(model.getID())) {
// List<Map<String,String>> relationId = attrModel.getRelationList() == null ? new ArrayList<>() : attrModel.getRelationList();
// HashMap<String, String> rel = new HashMap<>();
// if (!relationId.contains(parentId)) {
// relationId.add(parentId);
// attrModel.setRelationId(relationId);
// }
// }
setBasicAttr(map, attrModel);
setAwsRelAttr(map, attrModel);
setRelAttr(map, attrModel);
}
model.setAttrModel(attrModel);
}
*/
/**
* 更新形状模型的属性
* @param rowMaps
* @param model
*//*
public static void updateShapeModelAttr(List<RowMap> rowMaps, FileModel model){
Map<String, List<RowMap>> attrs = rowMaps.stream().collect(Collectors.groupingBy(el -> el.getString("SHAPE_ID")));
// List<ShapeModel> shapes = model.getAttrModel().getShapes();
List<ShapeModel> shapes = model.getShapes();
for (ShapeModel shape:shapes) {
ShapeAttrModel shapeAttrModel = shape.getShapeAttrModel()==null?new ShapeAttrModel(): shape.getShapeAttrModel();
List<RowMap> shapeAttrs = attrs.get(shape.getID());
for (RowMap shapeAttr:shapeAttrs) {
setBasicAttr(shapeAttr,shapeAttrModel);
setRelAttr(shapeAttr,shapeAttrModel);
setAwsRelAttr(shapeAttr,shapeAttrModel);
}
}
}
public static void setAttrModel(RowMap map, AttrModel attrModel) {
setBasicAttr(map,attrModel);
setAwsRelAttr(map,attrModel);
setRelAttr(map,attrModel);
}
*/
/**
* 设置基础属性
*
* @param map
* @param attrModel
*//*
public static void setBasicAttr(RowMap map, AttrModel attrModel) {
String attr_id = map.getString("ATTR_ID");
String attr_name = map.getString("ATTR_NAME");
String attr_value = map.getString("ATTR_VALUE");
if (attr_value != null) {
if (Constants.number.equals(attr_id)) {
attrModel.setNumber(attr_value);
} else if (Constants.desc.equals(attr_id)) {
attrModel.setDesc(attr_value);
} else {
List<BasicAttrModel> basicAttr = attrModel.getBasicAttr() == null ? new ArrayList<>() : attrModel.getBasicAttr();
BasicAttrModel basicAttrModel = new BasicAttrModel();
basicAttrModel.setID(attr_id);
basicAttrModel.setNAME(attr_name);
basicAttrModel.setVALUE(attr_value);
basicAttr.add(basicAttrModel);
attrModel.setBasicAttr(basicAttr);
}
}
}
*/
/**
* 设置关联aws组织的属性
*
* @param map
* @param attrModel
*//*
public static void setAwsRelAttr(RowMap map, AttrModel attrModel) {
String attr_id = map.getString("ATTR_ID");
String fileId = map.getString("RELATION_FILE_ID");
String textId = map.getString("RELATION_TEXT_ID");
String textName = map.getString("RELATION_TEXT_NAME");
String textType = map.getString("RELATION_TEXT_TYPE");
List<AwsOrgModel> dutyDept=attrModel.getDuty_dept()==null?new ArrayList<>():attrModel.getDuty_dept();
List<AwsOrgModel> dutyPerson=attrModel.getDuty_person()==null?new ArrayList<>():attrModel.getDuty_person();
AwsOrgModel dutyDeptMap = new AwsOrgModel();
AwsOrgModel dutyPersonMap = new AwsOrgModel();
if ("00000000-0000-0000-0000-000000000000".equals(fileId)) {
if (Constants.dutyDept.equals(attr_id)) {
dutyDeptMap.setID(textId);
dutyDeptMap.setNAME(textName);
dutyDeptMap.setTYPE(textType);
dutyDept.add(dutyDeptMap);
} else if (Constants.dutyPerson.equals(attr_id)) {
dutyPersonMap.setID(textId);
dutyPersonMap.setNAME(textName);
dutyPersonMap.setTYPE(textType);
dutyPerson.add(dutyPersonMap);
}
attrModel.setDuty_dept(dutyDept);
attrModel.setDuty_person(dutyPerson);
}
}
*/
/**
* 设置关联pal文件的属性
*
* @param map
* @param attrModel
*//*
public static void setRelAttr(RowMap map, AttrModel attrModel) {
String fileId = map.getString("RELATION_FILE_ID");
String shapeId = map.getString("RELATION_SHAPE_ID");
String shapeText = map.getString("RELATION_SHAPE_TEXT");
if (StringUtils.isEmpty(shapeId)) {
List<FileModel> relationFile = attrModel.getRelationFile() == null ? new ArrayList<>() : attrModel.getRelationFile();
FileModel relation = new FileModel();
relation.setID(fileId);
relationFile.add(relation);
attrModel.setRelationFile(relationFile);
} else if (StringUtils.isNotEmpty(shapeId)) {
List<ShapeModel> relationShape = attrModel.getRelationShape() == null ? new ArrayList<>() : attrModel.getRelationShape();
ShapeModel relation = new ShapeModel();
relation.setID(fileId);
relationShape.add(relation);
attrModel.setRelationShape(relationShape);
}
}
*/
/**
* 将查询结果转为shape对象
*
* @param rowMaps
* @param files
* @return
*//*
public static List<FileModel> toShapeModel(List<RowMap> rowMaps, List<FileModel> files) {
Map<String, List<RowMap>> shapeMap = rowMaps.stream().collect(Collectors.groupingBy(el -> el.getString("PL_ID")));
for (FileModel file : files) {
String fileId = file.getID();
// AttrModel attrModel = file.getAttrModel() == null ? new AttrModel() : file.getAttrModel();
List<ShapeModel> shapeModels = file.getShapes() == null ? new ArrayList<>() : file.getShapes();
List<RowMap> shapes = shapeMap.get(fileId);
for (RowMap row : shapes) {
ShapeModel shapeModel = new ShapeModel();
shapeModels.add(setShapeModel(shapeModel, row));
}
file.setShapes(shapeModels);
// file.setAttrModel(attrModel);
}
return files;
}
*/
/**
* 转为形状模型
* @param rowMaps
* @return
*//*
public static List<ShapeModel> toShapeModel(List<RowMap> rowMaps) {
ArrayList<ShapeModel> list = new ArrayList<>();
for (RowMap map:rowMaps
) {
ShapeModel shapeModel = new ShapeModel();
StructUtil.setShapeModel(shapeModel, map);
list.add(shapeModel);
}
return list;
}
*/
/**
* @param model
* @param map
*//*
public static FileModel setFileModel(FileModel model, RowMap map) {
model.setID(map.getString("ID")); // 唯一标识
model.setWS_ID(map.getString("WS_ID"));
model.setMODEL_NAME(map.getString("MODEL_NAME"));
model.setMODEL_PARENT_ID(map.getString("MODEL_PARENT_ID"));
model.setMODEL_PARENT_NAME(map.getString("MODEL_PARENT_NAME"));
model.setREPO_LEVEL(map.getString("REPO_LEVEL"));
model.setIS_USE(map.getString("IS_USE"));
model.setIS_APPROVAL(map.getString("IS_APPROVAL"));
model.setIS_PUBLISH(map.getString("IS_PUBLISH"));
model.setIS_STOP(map.getString("IS_STOP"));
model.setPUBLISH_USER(map.getString("PUBLISH_USER"));
model.setPUBLISH_DATE(map.getString("PUBLISH_DATE"));
model.setCATEGORY_ID(map.getString("CATEGORY_ID"));
model.setCATEGORY_NAME(map.getString("CATEGORY_NAME"));
model.setMETHOD_ID(map.getString("METHOD_ID"));
model.setMETHOD_NAME(map.getString("METHOD_NAME"));
model.setVERSION_NUM(map.getString("VERSION_NUM"));
model.setVERSION_ID(map.getString("VERSION_ID"));
model.setPROCESSINST_ID(map.getString("PROCESSINST_ID"));
model.setIS_CORRELATE(map.getString("IS_CORRELATE"));
model.setCORRELATE_TYPE(map.getString("CORRELATE_TYPE"));
model.setCORRELATE_AWS_ID(map.getString("CORRELATE_AWS_ID"));
return model;
}
*/
/**
* 转换形状模型
* @param model
* @param map
* @return
*//*
public static ShapeModel setShapeModel(ShapeModel model, RowMap map) {
model.setID(map.getString("ID"));
model.setDEFAULT_NAME(map.getString("DEFAULT_NAME"));
model.setPL_ID(map.getString("PL_ID"));
model.setSHAPE_CATEGORY(map.getString("SHAPE_CATEGORY"));
model.setSHAPE_ID(map.getString("SHAPE_ID"));
model.setSHAPE_NAME(map.getString("SHAPE_NAME"));
model.setSHAPE_TYPE(map.getString("SHAPE_TYPE"));
model.setWS_ID(map.getString("WS_ID"));
return model;
}
*/
/**
* 从文件模型集合中获取文件ID的集合
* @param files
* @return
*//*
public static List<String> getFileIds(List<FileModel> files) {
List<String> ids = new ArrayList<>();
for (FileModel model : files
) {
ids.add(model.getID());
}
// return listToSqlStr(ids);
return ids;
}
*/
/**
* 从形状模型中获取形状id的集合
* @param shapes
* @return
*//*
public static List<String> getShapeIds(List<ShapeModel> shapes){
List<String> ids = new ArrayList<>();
for (ShapeModel model : shapes
) {
ids.add(model.getID());
}
return ids;
}
*/
}

View File

@ -0,0 +1,148 @@
package com.awspaas.user.apps.nqms.portal.view.process.util;
import java.util.List;
/**
* @author ZHULIMIN
*/
public class TreeNode {
/**
* 节点id
*/
private String id;
/**
* 节点名称
*/
private String label;
/**
* 父节点 默认0为根节点
*/
private String parentId;
/**
* 是否显示 true false
*/
private Boolean disabled;
/**
* 是否有子节点
*/
private boolean hasChild;
/**
* 是否有子节点
*/
private String isPublish;
/**
* 子节点
*/
private List<TreeNode> children;
/**
* 图标
*/
private String icon;
/**
* 文件类型
*/
private String methodId = "";
public TreeNode() {
}
public TreeNode(String id, String label, String parentId) {
this.id = id;
this.label = label;
this.parentId = parentId;
}
public TreeNode(String id, String label, String parentId, Boolean disabled, boolean hasChild, String isPublish, List<TreeNode> children, String icon, String methodId) {
this.id = id;
this.label = label;
this.parentId = parentId;
this.disabled = disabled;
this.hasChild = hasChild;
this.isPublish = isPublish;
this.children = children;
this.icon = icon;
this.methodId = methodId;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getMethodId() {
return methodId;
}
public void setMethodId(String methodId) {
this.methodId = methodId;
}
public String getIsPublish() {
return isPublish;
}
public void setIsPublish(String isPublish) {
this.isPublish = isPublish;
}
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 getDisabled() {
return disabled;
}
public void setDisabled(Boolean disabled) {
this.disabled = disabled;
}
public boolean isHasChild() {
return hasChild;
}
public void setHasChild(boolean hasChild) {
this.hasChild = hasChild;
}
public List<TreeNode> getChildren() {
return children;
}
public void setChildren(List<TreeNode> children) {
this.children = children;
}
}

View File

@ -0,0 +1,177 @@
package com.awspaas.user.apps.nqms.portal.view.process.util;
import com.actionsoft.bpms.commons.database.RowMap;
import java.util.*;
/**
* 树形结构工具类
*
* @author ZHULIMIN
* @version 1.0
* @date 2023-02-28 14:57:00
*/
public final class TreeUtil {
/**
* 树形结构工具类
* <p>
* 将一组list对象转成树形结构
* 该list需符合设定的字段类型
*/
static List<TreeNode> menuCommon = null;
private static List list;
/**
* 转为树结构
*
* @param menu
* @return
*/
public static List<TreeNode> treeMenu(final List<TreeNode> menu) {
menuCommon = menu;
list = new ArrayList<>();
for (TreeNode treeNode : menu) {
Map mapArr = Collections.synchronizedMap(new LinkedHashMap<>());
if ("0".equals(treeNode.getParentId())) {
setTreeMap(mapArr, treeNode);
list.add(mapArr);
}
}
return list;
}
public static List<TreeNode> treeMenu(final List<TreeNode> menu, List<String> parentList) {
menuCommon = menu;
list = new ArrayList<>();
for (TreeNode treeNode : menu) {
Map mapArr = Collections.synchronizedMap(new LinkedHashMap<>());
if (parentList.contains(treeNode.getParentId())) {
setTreeMap(mapArr, treeNode);
list.add(mapArr);
}
}
return list;
}
public static List<TreeNode> treeMenu(final List<TreeNode> menu, String parentId) {
menuCommon = menu;
list = new ArrayList<>();
for (TreeNode treeNode : menu) {
Map mapArr = Collections.synchronizedMap(new LinkedHashMap<>());
if (parentId.equals(treeNode.getParentId())) {
setTreeMap(mapArr, treeNode);
list.add(mapArr);
}
}
return list;
}
public static List menuChild(String id) {
List lists = new ArrayList();
for (TreeNode a : menuCommon) {
Map childArray = Collections.synchronizedMap(new LinkedHashMap());
if (a.getParentId().equals(id)) {
setTreeMap(childArray, a);
lists.add(childArray);
}
}
return lists;
}
private static void setTreeMap(Map mapArr, TreeNode treeNode) {
mapArr.put("id", treeNode.getId());
mapArr.put("label", treeNode.getLabel());
mapArr.put("parentId", treeNode.getParentId());
mapArr.put("methodId", treeNode.getMethodId());
mapArr.put("icon", treeNode.getIcon());
List childrens = menuChild(treeNode.getId());
if (childrens.size() > 0) {
mapArr.put("hasChild", true);
} else {
mapArr.put("hasChild", false);
}
mapArr.put("children", menuChild(treeNode.getId()));
}
/**
* 根据父节点寻找对应的node
*
* @param list
* @param parentId
* @return
*/
public static List<TreeNode> findTreeByNode(List<TreeNode> list, String parentId) {
for (TreeNode node : list) {
String id = node.getId();
List<TreeNode> data = new ArrayList<>();
data.add(node);
if (id.equals(parentId)) {
return data;
} else {
if (node.isHasChild()) {
List<TreeNode> treeByNode = findTreeByNode(data, parentId);
if (treeByNode == null) continue;
return treeByNode;
} else {
return null;
}
}
}
return null;
}
/**
* 根据父节点寻找对应的node
*
* @param list
* @param parentId
* @return
*/
public static List<Map> findTreeByParentId(List<RowMap> list, String parentId, List<Map> treeData) {
if (null == list || list.isEmpty()) {
return treeData;
}
;
//// Map<String, List<Map>> parentIdList = list.stream().collect(Collectors.groupingBy(el -> el.get("parentId").toString()));
// List<RowMap> newList = new ArrayList<>();
// newList.addAll(list);
for (Map map : list) {
String id = map.get("ID").toString();
String pid = map.get("PLPARENTID").toString();
if (id.equals(parentId)) {
if (!treeData.contains(map)) {
treeData.add(map);
continue;
}
}
if (pid.equals(parentId)) {
if (!treeData.contains(map)) {
treeData.add(map);
treeData = findTreeByParentId(list, id, treeData);
}
}
}
return treeData;
}
public static List<TreeNode> toTreeNode(List<RowMap> list) {
ArrayList<TreeNode> nodes = new ArrayList<>();
for (Map map : list) {
TreeNode node = new TreeNode();
node.setId( map.get("ID")==null?"":(String) map.get("ID"));
node.setLabel( map.get("MODEL_NAME")==null?"":(String) map.get("MODEL_NAME"));
node.setParentId( map.get("MODEL_PARENT_ID")==null?"":(String) map.get("MODEL_PARENT_ID"));
node.setIsPublish( map.get("IS_PUBLISH")==null?"":(String) map.get("IS_PUBLISH"));
node.setMethodId( map.get("METHOD_ID")==null?"":(String) map.get("METHOD_ID"));
nodes.add(node);
}
return nodes;
}
}

View File

@ -0,0 +1,50 @@
package com.awspaas.user.apps.nqms.portal.view.process.util;
import com.actionsoft.bpms.commons.database.RowMap;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang.StringUtils;
import java.util.ArrayList;
import java.util.List;
/**
* @author wym
* @date 2023-04-24 10:52
* @description
*/
public class ViewUtil {
public static List pageUtil(List list, int page, int size) {
if (page==0&&size==0){
return list;
}
List data = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
if (size * (page - 1) <= i && i < (size * page)) {
data.add(list.get(i));
}
}
return data;
}
public static String listToSqlStr(List<String> list) {
if (list == null || list.isEmpty()) return "";
StringBuilder sqlStr = new StringBuilder("(");
for (String el : list) {
if (StringUtils.isEmpty(el)) continue;
String str = "'" + el + "',";
sqlStr.append(str);
}
sqlStr.append(")");
sqlStr.deleteCharAt(sqlStr.lastIndexOf(","));
return sqlStr.toString();
}
public static JSONObject toJsonObject(RowMap map){
JSONObject object = new JSONObject();
object.put("id",map.getString("ID"));
object.put("publish",map.getString("ISPUBLISH").equals("1"));
object.put("publishDate",map.getDate("PUBLISHDATE"));
object.put("name",map.getString("PLNAME"));
object.put("orderIndex",map.getString("PLORDERINDEX"));
object.put("methodId",map.getString("PLMETHODID"));
return object;
}
}

View File

@ -0,0 +1,226 @@
package com.awspaas.user.apps.nqms.portal.view.process.vo;
import com.alipay.remoting.util.StringUtils;
import java.util.List;
/**
* @author wym
* @date 2023-04-23 15:34
* @description
*/
public class ProcessFileVO {
/**
*
*/
private String url;
/**
*
*/
private String id;
/**
*业务域
*/
private String businessAreas;
/**
*流程组
*/
private String processGroup;
/**
*流程编号
*/
private String processNO;
/**
*业务流程
*/
private String processName;
/**
*活动步骤
*/
private String activeName;
/**
*发布时间
*/
private String publishDate;
/**
*责任部门
*/
private String dutyDept;
/**
*责任人
*/
private String dutyPerson;
private List<String> compFiles;
private List<String> regimeFiles;
private List<String> formFiles;
public ProcessFileVO() {
}
public ProcessFileVO(String id, String businessAreas, String processGroup, String processNO, String processName, String activeName, String publishDate) {
this.id = id;
this.businessAreas = businessAreas;
this.processGroup = processGroup;
this.processNO = processNO;
this.processName = processName;
this.activeName = activeName;
this.publishDate = publishDate;
}
public ProcessFileVO(String id, String businessAreas, String processGroup, String processNO, String processName, String activeName, String publishDate, List<String> compFiles, List<String> regimeFiles, List<String> formFiles, String dutyDept, String dutyPerson) {
this.id = id;
this.businessAreas = businessAreas;
this.processGroup = processGroup;
this.processNO = processNO;
this.processName = processName;
this.activeName = activeName;
this.publishDate = publishDate;
this.compFiles = compFiles;
this.regimeFiles = regimeFiles;
this.formFiles = formFiles;
this.dutyDept = dutyDept;
this.dutyPerson = dutyPerson;
}
public ProcessFileVO(String url, String id, String businessAreas, String processGroup, String processNO, String processName, String activeName, String publishDate, List<String> compFiles, List<String> regimeFiles, List<String> formFiles, String dutyDept, String dutyPerson) {
this.url = url;
this.id = id;
this.businessAreas = businessAreas;
this.processGroup = processGroup;
this.processNO = processNO;
this.processName = processName;
this.activeName = activeName;
this.publishDate = publishDate;
this.compFiles = compFiles;
this.regimeFiles = regimeFiles;
this.formFiles = formFiles;
this.dutyDept = dutyDept;
this.dutyPerson = dutyPerson;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getBusinessAreas() {
return businessAreas;
}
public void setBusinessAreas(String businessAreas) {
this.businessAreas = businessAreas;
}
public String getProcessGroup() {
return processGroup;
}
public void setProcessGroup(String processGroup) {
this.processGroup = processGroup;
}
public String getProcessNO() {
return processNO;
}
public void setProcessNO(String processNO) {
this.processNO = processNO;
}
public String getProcessName() {
return processName;
}
public void setProcessName(String processName) {
this.processName = processName;
}
public String getActiveName() {
return activeName;
}
public void setActiveName(String activeName) {
this.activeName = activeName;
}
public String getPublishDate() {
return publishDate;
}
public void setPublishDate(String publishDate) {
this.publishDate = publishDate;
}
public List<String> getCompFiles() {
return compFiles;
}
public void setCompFiles(List<String> compFiles) {
this.compFiles = compFiles;
}
public List<String> getRegimeFiles() {
return regimeFiles;
}
public void setRegimeFiles(List<String> regimeFiles) {
this.regimeFiles = regimeFiles;
}
public List<String> getFormFiles() {
return formFiles;
}
public void setFormFiles(List<String> formFiles) {
this.formFiles = formFiles;
}
public String getDutyDept() {
return dutyDept;
}
public void setDutyDept(String dutyDept) {
this.dutyDept = dutyDept;
}
public String getDutyPerson() {
return dutyPerson;
}
public void setDutyPerson(String dutyPerson) {
this.dutyPerson = dutyPerson;
}
@Override
public String toString() {
return "ProcessFileVO{" +
"url='" + url + '\'' +
", id='" + id + '\'' +
", businessAreas='" + businessAreas + '\'' +
", processGroup='" + processGroup + '\'' +
", processNO='" + processNO + '\'' +
", processName='" + processName + '\'' +
", activeName='" + activeName + '\'' +
", publishDate='" + publishDate + '\'' +
", dutyDept='" + dutyDept + '\'' +
", dutyPerson='" + dutyPerson + '\'' +
", compFiles=" + compFiles +
", regimeFiles=" + regimeFiles +
", formFiles=" + formFiles +
'}';
}
}