diff --git a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/web/CoeProcessLevelWeb.java b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/web/CoeProcessLevelWeb.java index cc3ebe9b..fd3393ae 100755 --- a/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/web/CoeProcessLevelWeb.java +++ b/com.actionsoft.apps.coe.pal/src/com/actionsoft/apps/coe/pal/pal/repository/web/CoeProcessLevelWeb.java @@ -14,7 +14,6 @@ import java.text.Collator; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Arrays; import java.util.Calendar; import java.util.Collection; import java.util.Collections; @@ -186,7 +185,6 @@ import com.actionsoft.sdk.local.api.PortalAPI; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Joiner; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -2611,6 +2609,9 @@ public class CoeProcessLevelWeb extends ActionWeb { plLevel = plModel.getLevel(); plOrderIndex = plModel.getOrderIndex(); methodId = plModel.getMethodId(); + if ("freedom.allmethod".equals(methodId)){ + macroLibraries.put("classification", I18nRes.findValue(CoEConstant.APP_ID, methodId)); + } for (int i = 0, methodSize = methodModels.size(); i < methodSize; i++) { PALMethodModel palMethodModel = methodModels.get(i); String appId = palMethodModel.getId(); @@ -3798,32 +3799,6 @@ public class CoeProcessLevelWeb extends ActionWeb { String parentVersionId = model.getParentId(); List list = dao.getAllRepositoryByVersionId(model.getVersionId()); // versionId相同的流程 PALRepositoryQueryAPIManager.getInstance().getAllPalRepositoryModelsByPid(model.getWsId(), model.getId(), list); - // 同时将相关的角色图、绩效图也放入回收站 - List tmpList= new ArrayList<>(); - List allList = PALRepositoryCache.getListByWsId(model.getWsId()); - Map> mapByExt2 = allList.stream() - .filter(m -> "org.role".equals(m.getMethodId()) || "control.kpi".equals(m.getMethodId())) - .collect(Collectors.groupingBy( - m -> m.getExt2() != null ? m.getExt2() : "DEFAULT_KEY" - )); - for (PALRepositoryModel removeModel : list) { - if ("process.bpmn2,process.epc,process.flowchart".contains(removeModel.getMethodId())) { - List data1 = new ArrayList(); - data1.add(0, "org.role"); - data1.add(1, removeModel.getId().trim()); - List data2 = new ArrayList(); - data2.add(0, "control.kpi"); - data2.add(1, removeModel.getId().trim()); - if (mapByExt2.containsKey(data1.toString())) { - tmpList.addAll(mapByExt2.get(data1.toString())); - } - if (mapByExt2.containsKey(data2.toString())) { - tmpList.addAll(mapByExt2.get(data2.toString())); - } - } - } - list.addAll(tmpList); - Map palMap = new HashMap(); List removeList = new ArrayList(); for (PALRepositoryModel obj : list) { @@ -5468,7 +5443,7 @@ public class CoeProcessLevelWeb extends ActionWeb { private String copyAllFile(String wsId, String teamId, String sourceUUID, String targetUUID, int index) { ResponseObject ro = ResponseObject.newOkResponse(); PALRepositoryModel sourceModel = PALRepositoryCache.getCache().get(sourceUUID); - String rostr = copyCurrentFile(wsId, teamId, sourceUUID, targetUUID, 0); + String rostr = copyCurrentFile(wsId, teamId, sourceUUID, targetUUID, index++); List subModelList = CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeProcessLevelByPid(sourceUUID, sourceModel.getWsId()); if (subModelList != null && subModelList.size() > 0) { for (PALRepositoryModel model : subModelList) { @@ -5575,11 +5550,15 @@ public class CoeProcessLevelWeb extends ActionWeb { int orderIndex = -1; Map mapNewUUID = new HashMap(); boolean isCorrelate = PALRepositoryQueryAPIManager.getInstance().isCorrelateBpms(sourceModel.getId(), true); - List sourceModels = CoeProcessLevelUtil.queryPalRepositoryModelsByPalId(sourceModel.getId()); - Collections.sort(sourceModels, (o1, o2) -> VersionUtil.compareVersionNo(o1.getVersion(), o2.getVersion(), false)); - Map repositoryOldNewMap = new HashMap();// 记录原来的流程版本与新的流程版本 - // int version = 1; - for (PALRepositoryModel sourceVerModel : sourceModels) { + List models = CoeProcessLevelUtil.queryPalRepositoryModelsByPalId(sourceModel.getId()); + Collections.sort(models, new Comparator() { + @Override + public int compare(PALRepositoryModel o1, PALRepositoryModel o2) { + return VersionUtil.compareVersionNo(o1.getVersion(), o2.getVersion(), true); + } + }); + int version = 1; + for (PALRepositoryModel oldModel : models) { PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); PALRepositoryModelImpl newModel = new PALRepositoryModelImpl(); @@ -5609,53 +5588,53 @@ public class CoeProcessLevelWeb extends ActionWeb { newModel.setVersionId(versionId); newModel.setPlRid(plRid); - newModel.setVersion(sourceVerModel.getVersion()); + newModel.setVersion(version); newModel.setHistoryMaxVersion("0"); - if (sourceVerModel.getId().equals(sourceVerModel.getVersionId())) { + if (version == 1) { newModel.setId(versionId); + newModel.setUse(true); } else { newModel.setId(UUIDGener.getUUID()); + newModel.setUse(false); } - newModel.setUse(sourceVerModel.isUse()); //如果为绩效图则复制文本到相应文件夹中 if (targetUUID.equals("control")) { targetUUID = sourceModel.getParentId(); } newModel.setParentId(targetUUID); newModel.setNo(plNo); - newModel.setMethodId(sourceVerModel.getMethodId()); - newModel.setMethodCategory(sourceVerModel.getMethodCategory()); - newModel.setMilestone(sourceVerModel.getMilestone()); + newModel.setMethodId(oldModel.getMethodId()); + newModel.setMethodCategory(oldModel.getMethodCategory()); + newModel.setMilestone(oldModel.getMilestone()); if (orderIndex == -1) { orderIndex = coeProcessLevel.getChildrenMaxOrderIndexByPidAndWsId(targetUUID, wsId); } newModel.setOrderIndex(orderIndex + 1); - newModel.setName(sourceVerModel.getName() + (index == 0 ? "(副本)" : "")); + newModel.setName(oldModel.getName() + (index == 0 ? "(副本)" : "")); String uid = super.getContext().getUID(); Timestamp nowTime = new Timestamp(System.currentTimeMillis()); newModel.setCreateUser(uid); newModel.setCreateDate(nowTime); newModel.setModifyUser(uid); newModel.setModifyDate(nowTime); - newModel.setBottomLevel(sourceVerModel.isBottomLevel()); - newModel.setDesc(sourceVerModel.getDesc()); - newModel.setInput(sourceVerModel.getInput()); - newModel.setOutput(sourceVerModel.getOutput()); - newModel.setExecType(sourceVerModel.getExecType()); + newModel.setBottomLevel(oldModel.isBottomLevel()); + newModel.setDesc(oldModel.getDesc()); + newModel.setInput(oldModel.getInput()); + newModel.setOutput(oldModel.getOutput()); + newModel.setExecType(oldModel.getExecType()); newModel.setSystemFile(false); - newModel.setSystemName(sourceVerModel.getSystemName()); + newModel.setSystemName(oldModel.getSystemName()); newModel.setPublish(false); newModel.setStop(false); newModel.setApproval(false); - newModel.setDutyDept(sourceVerModel.getDutyDept()); - newModel.setDutyUser(sourceVerModel.getDutyUser()); - newModel.setExt1(sourceVerModel.getExt1()); - newModel.setExt2(sourceVerModel.getExt2()); - newModel.setExt3(sourceVerModel.getExt3()); + newModel.setDutyDept(oldModel.getDutyDept()); + newModel.setDutyUser(oldModel.getDutyUser()); + newModel.setExt1(oldModel.getExt1()); + newModel.setExt2(oldModel.getExt2()); + newModel.setExt3(oldModel.getExt3()); //设置ext4不进行复制 newModel.setExt4(""); - // version++; - repositoryOldNewMap.put(sourceVerModel.getId(), newModel.getId()); + version++; // 创建 try { coeProcessLevel.insert(newModel); @@ -5671,13 +5650,13 @@ public class CoeProcessLevelWeb extends ActionWeb { } CoeProcessLevelNoCache.getInstance().reloadInBackground(targetWsId); // 重新装载编号 if (!isCorrelate) {// PAL流程 - if (!UtilString.isEmpty(newModel.getFilePath()) && !UtilString.isEmpty(sourceVerModel.getFilePath())) { + if (!UtilString.isEmpty(newModel.getFilePath()) && !UtilString.isEmpty(oldModel.getFilePath())) { CoeFile fileUtil = new CoeFile(); - fileUtil.copyDefaultVersion(sourceVerModel.getFilePath(), sourceVerModel.getId(), newModel.getFilePath(), newModel.getId()); + fileUtil.copyDefaultVersion(oldModel.getFilePath(), oldModel.getId(), newModel.getFilePath(), newModel.getId()); CoeDesignerImageCache.getCache().put(newModel.getId(), newModel.getId());// 图片更新记录缓存 } } else {// PAL与BPMS关联流程,从BPMS端获取数据 - CoeProcessLevelCorrelateModel model = CoeProcessLevelCorrelateCache.getCache().get(sourceVerModel.getId()); + CoeProcessLevelCorrelateModel model = CoeProcessLevelCorrelateCache.getCache().get(oldModel.getId()); if (model != null && model.isCorrelate()) { ProcessDefinition processDefinition = ProcessDefCache.getInstance().get(model.getPlAwsId()); if (processDefinition != null) { @@ -5699,12 +5678,12 @@ public class CoeProcessLevelWeb extends ActionWeb { } } - mapNewUUID = createShapeIdRelation(sourceVerModel, mapNewUUID, true); + mapNewUUID = createShapeIdRelation(oldModel, mapNewUUID, true); // 更新流程文件中节点id等信息 updateDefineShape(newModel, mapNewUUID, ""); //CoeProcessLevelUtil.copyRepositoryProperty(oldModel, newModel, mapNewUUID, _uc); //ydq 修改 - CoeProcessLevelUtil.copyRepositoryProperty(sourceVerModel, newModel, mapNewUUID, _uc,true); + CoeProcessLevelUtil.copyRepositoryProperty(oldModel, newModel, mapNewUUID, _uc,true); //ydq 修改结束 } catch (Exception e) { @@ -5714,265 +5693,8 @@ public class CoeProcessLevelWeb extends ActionWeb { String finalTargetUUID = targetUUID; // 创建的副本进行权限处理 CoeCooperationAPIManager.getInstance().updateCooperationPerm(_uc, "复制", teamId, finalTargetUUID, versionId); - List newVerModels = PALRepositoryCache.getByVersionId(versionId); - String useId = null; - for (PALRepositoryModel model : newVerModels) { - if (model.isUse()) { - useId = model.getId(); - break; - } - } - if (useId == null) {// 若没有使用中模型,例如流程有3个版本,角色图有2个版本,如果恰好使用中的流程版本没有角色图,则2个角色图都是非使用中 - useId = newVerModels.get(0).getId(); - } ro.put("mapNewUUID", mapNewUUID); - ro.put("repositoryOldNewMap", repositoryOldNewMap); - ro.put("useId", useId); - System.out.println("模型复制结果:" + repositoryOldNewMap); - // 对流程涉及到的角色图、绩效图进行复制处理 - // 看是否有用角色图、绩效图 - if (existingModels(new ArrayList(repositoryOldNewMap.keySet()), "org.role")) {// 有角色图 - System.out.println("复制流程图[" + sourceModel.getName() + "]时检测到有相关角色图,开始进行角色图复制..."); - copyPalProcessLevelRoleCorrelationModelRepository(repositoryOldNewMap, mapNewUUID); - System.out.println("复制流程图[" + sourceModel.getName() + "]时检测到有相关角色图,角色图复制完成!"); - } - if (existingModels(new ArrayList(repositoryOldNewMap.keySet()), "control.kpi")) {// 有绩效图 - System.out.println("复制流程图[" + sourceModel.getName() + "]时检测到有相关绩效图,开始进行绩效图复制..."); - copyPalProcessLevelPerformanceCorrelationModelRepository(repositoryOldNewMap, mapNewUUID); - System.out.println("复制流程图[" + sourceModel.getName() + "]时检测到有相关绩效图,绩效图复制完成!"); - } - } - - /** - * 绩效图复制 - * @param repositoryOldNewMap – 复制的流程图旧新id关系 - * @param mapNewUUID – 复制的流程图的节点旧新id关系 - */ - private String copyPalProcessLevelPerformanceCorrelationModelRepository(Map repositoryOldNewMap, Map mapNewUUID) { - ResponseObject ro = ResponseObject.newOkResponse(); - PALRepository repositoryDao = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); - DesignerShapeRelationDao relationDao = new DesignerShapeRelationDao(); - // 找出对应的角色图使用版本 - String performanceId = null; - PALRepositoryModel usePerformanceModel = null; - for (String uuid : repositoryOldNewMap.keySet()) { - performanceId = getExistingModel(uuid, "control.kpi"); - if (UtilString.isNotEmpty(performanceId)) { - System.out.println("找到了流程与之关联的任一绩效图[" + performanceId + "]"); - break; - } - } - if (UtilString.isEmpty(performanceId)) { - System.out.println("没有找到流程与之关联的绩效图"); - return ro.toString(); - } - PALRepositoryModel performanceModel = PALRepositoryCache.getCache().get(performanceId); - List performanceModels = PALRepositoryCache.getCache().getByVersionId(performanceModel.getVersionId()); - for (PALRepositoryModel r : performanceModels) { - if (r.isUse()) { - usePerformanceModel = r; - break; - } - } - if (usePerformanceModel == null) { - System.out.println("没有找到流程与之关联的绩效图使用版本,默认使用最小版本号的绩效版本开始进行角色复制"); - Collections.sort(performanceModels, (o1, o2) -> VersionUtil.compareVersionNo(o1.getVersion(), o2.getVersion(), false)); - usePerformanceModel = performanceModels.get(0); - } - // 对绩效图使用版本进行复制 - String copyRoleResult = copyFile(usePerformanceModel.getWsId(), null, usePerformanceModel.getId(), usePerformanceModel.getParentId(), "self"); - if (!JSONObject.parseObject(copyRoleResult).get("result").equals("ok")) { - System.out.println("复制绩效图[" + performanceModel.getName() + "]时出现错误,请检查!"); - return copyRoleResult; - } - Map performanceRepositoryOldNewMap = (Map) JSONObject.parseObject(copyRoleResult).getJSONObject("data").get("repositoryOldNewMap"); - Map performanceMapNewUUID = (Map) JSONObject.parseObject(copyRoleResult).getJSONObject("data").get("mapNewUUID"); - // 建立新的关联关系 - for (Map.Entry entry : performanceRepositoryOldNewMap.entrySet()) { - List insertRelationList = new ArrayList<>(); - String oldPerformanceId = entry.getKey(); - String newPerformanceId = entry.getValue(); - PALRepositoryModel newPerformanceModel = PALRepositoryCache.getCache().get(newPerformanceId); - String ext2 = newPerformanceModel.getExt2(); - // 1. 去除方括号 - String content = ext2.substring(1, ext2.length() - 1); - // 2. 分割字符串并处理空格 - List ext2List = Arrays.stream(content.split(",")).map(String::trim).collect(Collectors.toList()); - String oldProcessId = ext2List.get(1); - if (repositoryOldNewMap.containsKey(oldProcessId)) { - List dataList = new ArrayList(); - dataList.add(0, "control.kpi"); - dataList.add(1, repositoryOldNewMap.get(oldProcessId)); - // 更新模型关系 - repositoryDao.updateRepositoryExt2(newPerformanceId, dataList.toString()); - System.out.println("更新绩效图[" + newPerformanceModel.getName() + "]的关联关系,新的绩效图[" + newPerformanceId + "]关联的新流程图[" + repositoryOldNewMap.get(oldProcessId) + "]"); - List oldRelationModels = DesignerShapeRelationCache.getListByFileIdAndAttrIdAndRelationFileId(oldProcessId, "Process_performance_metrics", oldPerformanceId); - for (DesignerShapeRelationModel relationModel : oldRelationModels) { - String processShapeId = relationModel.getShapeId(); - String performanceShapeId = relationModel.getRelationShapeId(); - if (performanceMapNewUUID.containsKey(performanceShapeId)) { - // 创建新的关联关系 - DesignerShapeRelationModel newRelationModel = new DesignerShapeRelationModel(); - newRelationModel.setId(UUIDGener.getUUID()); - newRelationModel.setFileId(repositoryOldNewMap.get(oldProcessId)); - newRelationModel.setShapeId(""); - newRelationModel.setShapeText(relationModel.getShapeText()); - newRelationModel.setAttrId(relationModel.getAttrId()); - newRelationModel.setRelationFileId(newPerformanceId); - newRelationModel.setRelationShapeId(performanceMapNewUUID.get(performanceShapeId)); - newRelationModel.setRelationShapeText(relationModel.getRelationShapeText()); - insertRelationList.add(newRelationModel); - } - } - } - if (insertRelationList.size() > 0) { - relationDao.barchInsert(insertRelationList); - System.out.println("绩效图[" + newPerformanceModel.getName() + "]关联的流程图[" + repositoryOldNewMap.get(oldProcessId) + "]节点关系复制完成!"); - System.out.println("复制的节点关系:" + insertRelationList.toString()); - } - } - return ro.toString(); - } - - /** - * 角色图复制 - * @param repositoryOldNewMap 复制的流程图旧新id关系 - * @param mapNewUUID 复制的流程图的节点旧新id关系 - */ - private String copyPalProcessLevelRoleCorrelationModelRepository(Map repositoryOldNewMap, Map mapNewUUID) { - ResponseObject ro = ResponseObject.newOkResponse(); - PALRepository repositoryDao = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); - DesignerShapeRelationDao relationDao = new DesignerShapeRelationDao(); - // 找出对应的角色图使用版本 - String roleId = null; - PALRepositoryModel useRoleModel = null; - for (String uuid : repositoryOldNewMap.keySet()) { - roleId = getExistingModel(uuid, "org.role"); - if (UtilString.isNotEmpty(roleId)) { - System.out.println("找到了流程与之关联的任一角色图[" + roleId + "]"); - break; - } - } - if (UtilString.isEmpty(roleId)) { - System.out.println("没有找到流程与之关联的角色图"); - return ro.toString(); - } - PALRepositoryModel roleModel = PALRepositoryCache.getCache().get(roleId); - List roleModels = PALRepositoryCache.getCache().getByVersionId(roleModel.getVersionId()); - for (PALRepositoryModel r : roleModels) { - if (r.isUse()) { - useRoleModel = r; - break; - } - } - if (useRoleModel == null) { - System.out.println("没有找到流程与之关联的角色图使用版本,默认使用最小版本号的角色版本开始进行角色复制"); - Collections.sort(roleModels, (o1, o2) -> VersionUtil.compareVersionNo(o1.getVersion(), o2.getVersion(), false)); - useRoleModel = roleModels.get(0); - } - // 对角色图使用版本进行复制 - String copyRoleResult = copyFile(useRoleModel.getWsId(), null, useRoleModel.getId(), useRoleModel.getParentId(), "self"); - if (!JSONObject.parseObject(copyRoleResult).get("result").equals("ok")) { - System.out.println("复制角色图[" + roleModel.getName() + "]时出现错误,请检查!"); - return copyRoleResult; - } - Map roleRepositoryOldNewMap = (Map) JSONObject.parseObject(copyRoleResult).getJSONObject("data").get("repositoryOldNewMap"); - Map roleMapNewUUID = (Map) JSONObject.parseObject(copyRoleResult).getJSONObject("data").get("mapNewUUID"); - // 建立新的关联关系 - for (Map.Entry entry : roleRepositoryOldNewMap.entrySet()) { - List insertRelationList = new ArrayList<>(); - String oldRoleId = entry.getKey(); - String newRoleId = entry.getValue(); - PALRepositoryModel newRoleModel = PALRepositoryCache.getCache().get(newRoleId); - String ext2 = newRoleModel.getExt2(); - // 1. 去除方括号 - String content = ext2.substring(1, ext2.length() - 1); - // 2. 分割字符串并处理空格 - List ext2List = Arrays.stream(content.split(",")).map(String::trim).collect(Collectors.toList()); - String oldProcessId = ext2List.get(1); - if (repositoryOldNewMap.containsKey(oldProcessId)) { - List dataList = new ArrayList(); - dataList.add(0, "org.role"); - dataList.add(1, repositoryOldNewMap.get(oldProcessId)); - // 更新模型关系 - repositoryDao.updateRepositoryExt2(newRoleId, dataList.toString()); - System.out.println("更新角色图[" + newRoleModel.getName() + "]的关联关系,新的角色图[" + newRoleId + "]关联的新流程图[" + repositoryOldNewMap.get(oldProcessId) + "]"); - List oldRelationModels = DesignerShapeRelationCache.getListByFileIdAndAttrIdAndRelationFileId(oldProcessId, "role", oldRoleId); - for (DesignerShapeRelationModel relationModel : oldRelationModels) { - String processShapeId = relationModel.getShapeId(); - String roleShapeId = relationModel.getRelationShapeId(); - if (mapNewUUID.containsKey(processShapeId) && roleMapNewUUID.containsKey(roleShapeId)) { - // 创建新的关联关系 - DesignerShapeRelationModel newRelationModel = new DesignerShapeRelationModel(); - newRelationModel.setId(UUIDGener.getUUID()); - newRelationModel.setFileId(repositoryOldNewMap.get(oldProcessId)); - newRelationModel.setShapeId(mapNewUUID.get(processShapeId)); - newRelationModel.setShapeText(relationModel.getShapeText()); - newRelationModel.setAttrId(relationModel.getAttrId()); - newRelationModel.setRelationFileId(newRoleId); - newRelationModel.setRelationShapeId(roleMapNewUUID.get(roleShapeId)); - newRelationModel.setRelationShapeText(relationModel.getRelationShapeText()); - insertRelationList.add(newRelationModel); - } - } - } - if (insertRelationList.size() > 0) { - relationDao.barchInsert(insertRelationList); - System.out.println("角色图[" + newRoleModel.getName() + "]关联的流程图[" + repositoryOldNewMap.get(oldProcessId) + "]节点关系复制完成!"); - System.out.println("复制的节点关系:" + insertRelationList.toString()); - } - } - return ro.toString(); - } - - /** - * 判断是否存在相关的角色图、绩效图 - * @param uuidList - * @param methodId - * @return - */ - private boolean existingModels(List uuidList, String methodId) { - for (String uuid : uuidList) { - if (getExistingModel(uuid, methodId) != null) { - return true; - } - } - return false; - } - - /** - * 获取已经存在的流程相关联的模型,例如流程关联的角色图 - * @param uuid 流程Id - * @param methodId 对应的建模方法ID - * @return - */ - private String getExistingModel(String uuid, String methodId) { - PALRepositoryModel model = PALRepositoryCache.getCache().get(uuid); - if (model == null) { - return null; - } - // 1.查询有关联的methodId模型 - List paramList = new ArrayList<>(); - List data = new ArrayList(); - data.add(0, methodId.trim()); - data.add(1, model.getId().trim()); - String param = data.toString();// 查询参数 - paramList.add(param); - // 2.查询符合的methodId模型列表并排序(理论上只会有一个) - PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); - List list = coeProcessLevel.searchRepositoryByMethodIdAndExt2(methodId, paramList); - if (CollectionUtils.isNotEmpty(list)) { - list.sort((m1,m2) -> { - if (m1.getVersion() == m2.getVersion()) { - return m1.getCreateDate().compareTo(m2.getCreateDate()); - } - return m1.getVersion() > m2.getVersion() ? 1 : -1; - }); - // 3.取排在首位的角色模型的模型ID - return list.get(0).getId(); - } - return null; - + ro.put("useId", CoeProcessLevelDaoFacotory.createCoeProcessLevel().getCoeUseProcessLevelByRid(plRid).get(0).getId()); } private void updateDefineShape(PALRepositoryModelImpl newModel, Map mapNewUUID, String define) { @@ -8623,12 +8345,7 @@ public class CoeProcessLevelWeb extends ActionWeb { * @param methodId * @return */ - public String getPalProcessLevelCreateMethodList(String category, String methodId) { - if(!"process.framework".equals(methodId) && !"default".equals(methodId)){//不是架构,或者文件夹 - ResponseObject ro = ResponseObject.newErrResponse(); - ro.msg("methodId:"+methodId+"当前所选择目录不是文件夹或者流程架构,请选择正确的目录!"); - return ro.toString(); - } + public String getPalProcessLevelCreateMethodList(String category, String methodId, String fileId) { ResponseObject ro = ResponseObject.newOkResponse(); JSONArray fileArr = new JSONArray();// 文件类模型,可以画图 JSONArray folderArr = new JSONArray();// 文件夹类模型,作为文件夹 @@ -8664,18 +8381,29 @@ public class CoeProcessLevelWeb extends ActionWeb { methodObj.put("categoryName", I18nRes.findValue(CoEConstant.APP_ID, c)); methodObj.put("method", model.getId()); methodObj.put("methodName", I18nRes.findValue(CoEConstant.APP_ID, model.getId())); - if (model.getSchema().contains("架构KPI图")) { - methodObj.put("methodName", "架构KPI图"); - } - if (model.getSchema().contains("角色图")) { - methodObj.put("methodName", "角色图"); + if (!"process.yilifreedommodel".equals(model.getId())){ + if (model.getSchema().contains("架构KPI图")){ + methodObj.put("methodName", "架构KPI图"); + } + if (model.getSchema().contains("角色图")){ + methodObj.put("methodName", "角色图"); + } } // System.out.println(c+"对应的"+ PALMethodManager.getInstance().havingCreateMethodPerm(category, methodId, "process", model.getId())); //流程入口允许新建表单图和制度图 by金鹏 - if (category.equals("process") && model.getSchema().contains("表单图")) { - methodObj.put("havingCreatePerm", true); - } else if (category.equals("process") && model.getSchema().contains("制度")) { + if (model.getId().equals("process.yilifreedommodel")) { + if (StringUtils.isBlank(fileId)){ + methodObj.put("havingCreatePerm", false); + }else { + String property = SDK.getAppAPI().getProperty(CoEConstant.APP_ID, "freedom.file"); + if (StringUtils.isNotBlank(property)&&property.contains(fileId)){ + methodObj.put("havingCreatePerm", true); + }else { + methodObj.put("havingCreatePerm", false); + } + } + }else if (category.equals("process") && model.getSchema().contains("表单图")) { methodObj.put("havingCreatePerm", true); } else if (category.equals("process") && model.getSchema().contains("制度")) { methodObj.put("havingCreatePerm", true); @@ -11658,6 +11386,8 @@ public class CoeProcessLevelWeb extends ActionWeb { SDK.getLogAPI().consoleErr("复制文件[" + model.getName() + "][" + model.getId() + "]失败," + moveRo.getString("msg")); return ResponseObject.newErrResponse(moveRo.getString("msg")).toString(); } + copyPalProcessLevelRoleCorrelationModelRepository(wsId, teamId, sourceId, result); + copyPalProcessLevelPerformanceCorrelationModelRepository(wsId, teamId, sourceId, result); } // 操作行为日志记录 if (SDK.getAppAPI().getPropertyBooleanValue(CoEConstant.APP_ID, "IS_RECORD_OP_LOG", false)) { @@ -11667,6 +11397,186 @@ public class CoeProcessLevelWeb extends ActionWeb { return ro.toString(); } + /** + * 同步复制数据模型角色模型 + * + * @param wsId + * @param teamId + * @param sourceIds + * @param targetId + * @return + */ + public String copyPalProcessLevelRoleCorrelationModelRepository(String wsId, String teamId, String sourceId, String resultmsg) { + ResponseObject ro = ResponseObject.newOkResponse(); + + CoeDesignerWeb coe = new CoeDesignerWeb(_uc); + Map mapNewUUID = new HashMap(); + String useId = null; + String roleuseId = null; + //获取数据属性同步创建角色模型 + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + PALRepositoryCache.getCache().get(sourceId); + + List oldModelList = dao.getModelListByFileId(sourceId); + for (DesignerShapeRelationModel oldModel : oldModelList) { + + //如果关联角色图,则同步复制角色图关联关系,由于角色图规定为本流程使用,所以获取一次 + String methodIds = ""; + if (oldModel.getAttrId().equals("role")) { + PALRepository coeProcessLevel = CoeProcessLevelDaoFacotory.createCoeProcessLevel(); + String targetId = checkAndCreatePalRoleFolderModel(coeProcessLevel, wsId); + PALRepositoryModel model = PALRepositoryCache.getCache().get(oldModel.getRelationFileId()); + String result = copyFile(wsId, teamId, oldModel.getRelationFileId(), targetId, "all"); + + if (JSONObject.parseObject(resultmsg).get("result").equals("ok")) { + + useId = JSONObject.parseObject(resultmsg).getJSONObject("data").getJSONObject("msg").getJSONObject("data").get("useId").toString(); + + if (UtilString.isNotEmpty(useId)) { + if (JSONObject.parseObject(result).get("result").equals("ok")) { + roleuseId = JSONObject.parseObject(result).getJSONObject("data").getJSONObject("msg").getJSONObject("data").get("useId").toString(); + + if (UtilString.isNotEmpty(roleuseId)) { + //插入关联模型数据 + List dataList = new ArrayList(); + dataList.add(0, "org.role"); + dataList.add(1, useId); + int r = DBSql.update("update APP_ACT_COE_PAL_REPOSITORY set EXT2=? where ID=?", new Object[] { dataList.toString(), roleuseId }); + } + + } + } + + } + + JSONObject moveRo = JSONObject.parseObject(result); + if (!"ok".equals(moveRo.getString("result"))) { + SDK.getLogAPI().consoleErr("复制文件[" + model.getName() + "][" + model.getId() + "]失败," + moveRo.getString("msg")); + return ResponseObject.newErrResponse(moveRo.getString("msg")).toString(); + } + break; + + } + + } + + List models = CoeProcessLevelUtil.queryPalRepositoryModelsByPalId(sourceId); + + PALRepositoryModel model = PALRepositoryCache.getCache().get(sourceId); + // 获取新旧节点关联关系 + mapNewUUID = (Map) JSONObject.parseObject(resultmsg).getJSONObject("data").getJSONObject("msg").getJSONObject("data").get("mapNewUUID"); + + for (DesignerShapeRelationModel oldModel : oldModelList) { + //重新设置修订关联关系 + DesignerShapeRelationModel newModel1 = new DesignerShapeRelationModel(); + newModel1.setId(UUIDGener.getUUID()); + newModel1.setFileId(useId); + newModel1.setShapeId(mapNewUUID.get(oldModel.getShapeId())); + newModel1.setShapeText(oldModel.getShapeText()); + newModel1.setAttrId(oldModel.getAttrId()); + newModel1.setRelationFileId(roleuseId); + newModel1.setRelationShapeId(oldModel.getRelationShapeId()); + newModel1.setRelationShapeText(oldModel.getRelationShapeText()); + dao.insert(newModel1); + } + return ro.toString(); + } + + /** + * 同步复制文件属性绩效属性数据 + * + * @param wsId + * @param teamId + * @param sourceIds + * @param targetId + * @return + */ + public String copyPalProcessLevelPerformanceCorrelationModelRepository(String wsId, String teamId, String sourceId, String resultmodel) { + + ResponseObject ro = ResponseObject.newOkResponse(); + String perforId = perforId = JSONObject.parseObject(resultmodel).getJSONObject("data").getJSONObject("msg").getJSONObject("data").get("useId").toString(); + PALRepositoryPropertyDao repositoryPropertyDao = new PALRepositoryPropertyDao(); + List oldPropertyList = repositoryPropertyDao.getPropertysByPlid(sourceId, ""); + List newPropertyList = new ArrayList(); + if (oldPropertyList != null && oldPropertyList.size() > 0) { + for (PALRepositoryPropertyModel propertyModel : oldPropertyList) { + + //文件属性存在流程绩效,则同步创建关联关系 + if (propertyModel.getPropertyId().equals("Process_performance_metrics")) { + String relationFileId = JSONObject.parseObject(propertyModel.getPropertyValue()).getString("relationFileId"); + String[] splitRelationFileId; + PALRepositoryModel model; + + if (UtilString.isNotEmpty(relationFileId)) { + if (relationFileId.contains(",")) { + splitRelationFileId = relationFileId.split(","); + relationFileId = splitRelationFileId[0]; + } else { + relationFileId = relationFileId; + } + + model = PALRepositoryCache.getCache().get(relationFileId); + + String result = copyFile(wsId, teamId, relationFileId, "control", "all"); + + JSONObject moveRo = JSONObject.parseObject(result); + if (!"ok".equals(moveRo.getString("result"))) { + SDK.getLogAPI().consoleErr("复制文件[" + model.getName() + "][" + model.getId() + "]失败," + moveRo.getString("msg")); + return ResponseObject.newErrResponse(moveRo.getString("msg")).toString(); + } + + CoeDesignerWeb coe = new CoeDesignerWeb(_uc); + // 处理流程属性 + String property = CoePropertyUtil.getPropertyValue(relationFileId + "_attr"); + if (!UtilString.isEmpty(property)) { + CoePropertyUtil.createProperty(moveRo.getString("result") + "_attr", property); + } + + Map mapNewUUID = (Map) JSONObject.parseObject(result).getJSONObject("data").getJSONObject("msg").getJSONObject("data").get("mapNewUUID"); + String newuuid = JSONObject.parseObject(result).getJSONObject("data").getJSONObject("msg").getJSONObject("data").get("useId").toString(); + + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + List oldModelList = dao.getModelListByFileId(sourceId); + + oldModelList.sort(Comparator.comparing(DesignerShapeRelationModel::getShapeText)); + + for (DesignerShapeRelationModel oldModel : oldModelList) { + + if (oldModel.getAttrId().equals("Process_performance_metrics")) { + //重新设置修订关联关系 + DesignerShapeRelationModel newModel1 = new DesignerShapeRelationModel(); + newModel1.setId(UUIDGener.getUUID()); + newModel1.setFileId(perforId); + newModel1.setShapeId(mapNewUUID.get(oldModel.getShapeId())); + newModel1.setShapeText(oldModel.getShapeText()); + newModel1.setAttrId(oldModel.getAttrId()); + newModel1.setRelationFileId(newuuid); + newModel1.setRelationShapeId(oldModel.getRelationShapeId()); + newModel1.setRelationShapeText(oldModel.getRelationShapeText()); + dao.insert(newModel1); + } + + } + + if (UtilString.isNotEmpty(newuuid)) { + //插入关联模型数据 + List dataList = new ArrayList(); + dataList.add(0, "control.kpi"); + dataList.add(1, perforId); + int r = DBSql.update("update APP_ACT_COE_PAL_REPOSITORY set EXT2=? where ID=?", new Object[] { dataList.toString(), newuuid }); + + } + + break; + + } + } + + } + } + return ro.toString(); + } + /** * 校验和创建角色模型文件夹 * @@ -11716,10 +11626,9 @@ public class CoeProcessLevelWeb extends ActionWeb { PALRepositoryCache.getAllChildrenModelsByPid(model.getWsId(), model.getId(), childList, ids); removeList.addAll(childList); for (PALRepositoryModel removeModel : removeList) { - //校验禁止删除逻辑 - String errorResponse = checkRemovalPermission(removeModel, _uc); - if (errorResponse != null) { - return errorResponse; + //普通用户不允许删除已发布的文件 + if (removeModel.isPublish() && !"admin".equals(_uc.getUID())) { + return ResponseObject.newErrResponse("已发布文件["+ removeModel.getName() + VersionUtil.getVersionStrV(removeModel.getVersion()) + "]不允许删除,请联系系统管理员!").toString(); } } @@ -13218,18 +13127,6 @@ public class CoeProcessLevelWeb extends ActionWeb { return ro.toString(); } - // 提取重复的错误判断逻辑到一个方法中 - private String checkRemovalPermission(PALRepositoryModel model, UserContext _uc) { - if ("admin".equals(_uc.getUID())) { - return null; - } - //非设计状态(即草稿)不允许删除 - if (model.isPublish() || model.isStop() || model.isApproval()) { - return ResponseObject.newErrResponse("文件[" + model.getName() + VersionUtil.getVersionStrV(model.getVersion()) + "]非草稿状态不允许删除,请联系系统管理员!").toString(); - } - return null; - } - class ComparatorMap implements Comparator { @Override @@ -13241,6 +13138,4 @@ public class CoeProcessLevelWeb extends ActionWeb { } - - } diff --git a/com.awspaas.user.apps.coe.method.process.freedom/src/com/awspaas/user/apps/coe/method/process/freedom/listener/StartListener.java b/com.awspaas.user.apps.coe.method.process.freedom/src/com/awspaas/user/apps/coe/method/process/freedom/listener/StartListener.java index faa39636..954de5dc 100644 --- a/com.awspaas.user.apps.coe.method.process.freedom/src/com/awspaas/user/apps/coe/method/process/freedom/listener/StartListener.java +++ b/com.awspaas.user.apps.coe.method.process.freedom/src/com/awspaas/user/apps/coe/method/process/freedom/listener/StartListener.java @@ -22,6 +22,6 @@ public class StartListener implements AppListener { this.initMethod(appContext); } private void initMethod(AppContext appContext){ - MethodAppManager.register("freedom.allmethod", appContext, "freedom.allmethod", "自由流程建模方法"); + MethodAppManager.register("process.yilifreedommodel", appContext, "process.yilifreedommodel", "自由流程建模方法"); } } diff --git a/com.awspaas.user.apps.coe.method.process.freedom/src/com/awspaas/user/apps/coe/method/process/freedom/plugin/Plugins.java b/com.awspaas.user.apps.coe.method.process.freedom/src/com/awspaas/user/apps/coe/method/process/freedom/plugin/Plugins.java index 059e889d..1273ac6d 100644 --- a/com.awspaas.user.apps.coe.method.process.freedom/src/com/awspaas/user/apps/coe/method/process/freedom/plugin/Plugins.java +++ b/com.awspaas.user.apps.coe.method.process.freedom/src/com/awspaas/user/apps/coe/method/process/freedom/plugin/Plugins.java @@ -26,7 +26,7 @@ public class Plugins implements PluginListener { params1.put("title", "自由模型建模方法"); params1.put("icon", ""); params1.put("desc", "自由模型建模方法"); - params1.put("methodId", "freedom.allmethod"); + params1.put("methodId", "process.yilifreedommodel"); params1.put("deletedClass", ""); list.add(new AppExtensionProfile("PAL流程资产库->自由模型建模方法", "aslp://com.actionsoft.apps.coe.pal/registerMethodApp", params1)); return list;