From bbe0305cee97428bbf28a3b102e1d2244a739ddf Mon Sep 17 00:00:00 2001 From: anhc <3442943606@qq.com> Date: Mon, 18 Jul 2022 17:19:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AD=A5=E9=AA=A4=E7=AB=96=E8=A1=A8=E6=89=8B?= =?UTF-8?q?=E5=86=8C=E9=A1=B9=E7=9B=AE=E5=86=85=E5=AE=B9=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com.actionsoft.apps.coe.pal.output.pr.jar | Bin 62683 -> 67141 bytes .../pal/output/pr/report2/Report2Gener.java | 578 +++++++++++++++--- 2 files changed, 482 insertions(+), 96 deletions(-) diff --git a/com.actionsoft.apps.coe.pal.output.pr/lib/com.actionsoft.apps.coe.pal.output.pr.jar b/com.actionsoft.apps.coe.pal.output.pr/lib/com.actionsoft.apps.coe.pal.output.pr.jar index e259803ccce91ecd30b0a1e870fd56a49a381048..1d4c147ae312cfc8859c9f4c2982951db9f521b5 100644 GIT binary patch delta 13021 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

?e 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 I<-aQbA45j-w*UYD delta 8509 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 L1Frk*!{75?ga0z8 diff --git a/com.actionsoft.apps.coe.pal.output.pr/src/com/actionsoft/apps/coe/pal/output/pr/report2/Report2Gener.java b/com.actionsoft.apps.coe.pal.output.pr/src/com/actionsoft/apps/coe/pal/output/pr/report2/Report2Gener.java index 35b3af17..52762e35 100644 --- a/com.actionsoft.apps.coe.pal.output.pr/src/com/actionsoft/apps/coe/pal/output/pr/report2/Report2Gener.java +++ b/com.actionsoft.apps.coe.pal.output.pr/src/com/actionsoft/apps/coe/pal/output/pr/report2/Report2Gener.java @@ -1,22 +1,37 @@ package com.actionsoft.apps.coe.pal.output.pr.report2; +import java.io.File; import java.util.*; +import com.actionsoft.apps.coe.pal.constant.CoEConstant; import com.actionsoft.apps.coe.pal.output.pr.util.PrReportComment; +import com.actionsoft.apps.coe.pal.output.pr.util.ReportRepositoryCompare; import com.actionsoft.apps.coe.pal.pal.output.extend.GenerLogExd; import com.actionsoft.apps.coe.pal.pal.output.extend.OutputAppManager; import com.actionsoft.apps.coe.pal.pal.output.extend.OutputAppProfile; import com.actionsoft.apps.coe.pal.pal.output.model.OutputTaskModel; import com.actionsoft.apps.coe.pal.pal.output.util.OutputExcelUtil; import com.actionsoft.apps.coe.pal.pal.output.util.OutputWordUtil; +import com.actionsoft.apps.coe.pal.pal.repository.PALRepositoryQueryAPIManager; import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryCache; import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryPropertyCache; +import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.cache.DesignerShapeRelationCache; import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.dao.DesignerShapeRelationDao; import com.actionsoft.apps.coe.pal.pal.repository.designer.relation.model.DesignerShapeRelationModel; import com.actionsoft.apps.coe.pal.pal.repository.designer.util.CoeDesignerUtil; import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryModel; import com.actionsoft.apps.coe.pal.pal.repository.model.PALRepositoryPropertyModel; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.constant.CoeFileConstant; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.dao.UpFileDao; +import com.actionsoft.apps.coe.pal.pal.repository.upfile.model.UpfileModel; import com.actionsoft.apps.coe.pal.system.property.CoePropertyUtil; +import com.actionsoft.apps.coe.pal.util.HighSecurityUtil; +import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile; +import com.actionsoft.bpms.server.DispatcherRequest; +import com.actionsoft.bpms.server.UserContext; +import com.actionsoft.bpms.server.fs.dc.DCProfileManager; +import com.actionsoft.bpms.util.UtilFile; +import com.actionsoft.bpms.util.UtilString; import com.actionsoft.sdk.local.SDK; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -38,6 +53,7 @@ public class Report2Gener { // 防止生成过程中,停用或卸载该app public static boolean isRunning = false; public static final Object _lock = new Object(); + private UserContext userContext = null; GenerLogExd log = new GenerLogExd(); public Report2Gener() { } @@ -57,6 +73,7 @@ public class Report2Gener { try { synchronized (_lock) { isRunning = true; + userContext = DispatcherRequest.getUserContext(); String teamId = model.getTeamId(); String wsId = model.getWsId(); log.info("execute ready..."); @@ -68,7 +85,7 @@ public class Report2Gener { // ----预处理、校验---- OutputAppProfile appModel = OutputAppManager.getProfile(model.getProfileId()); String tempPath = appModel.getAppContext().getPath(); - String tempName = "步骤竖表-流程手册.xml"; + String tempName = "步骤竖表-流程手册2.xml"; log.info("begin..."); log.info("-------------------"); // ----文件处理----- @@ -120,18 +137,21 @@ public class Report2Gener { reportNameValue = reportNameValue.substring(0, 255); } String docName = ""; + String fileName = ""; if (indexMap.containsKey(reportNameValue)) { int index = indexMap.get(reportNameValue); index++; - log.info("得到word名称为:" + reportNameValue + "(" + index + ")"); - docName = docPath + reportNameValue + "(" + index + ")" + ".doc"; + fileName = reportNameValue + "(" + index + ")"; + log.info("得到word名称为:" + fileName); + docName = docPath + fileName + ".doc"; indexMap.put(reportNameValue, index); } else { - log.info("得到word名称为:" + reportNameValue); - docName = docPath + reportNameValue + ".doc"; - indexMap.put(reportNameValue, 1); + fileName = reportNameValue; + log.info("得到word名称为:" + fileName); + docName = docPath + fileName + ".doc"; + indexMap.put(fileName, 1); } - JSONObject dataMap = getData(repositoryId, wizardJsonData); + JSONObject dataMap = getData(repositoryId, wizardJsonData, docPath, fileName); if (dataMap != null) { OutputWordUtil.createDoc(dataMap, tempPath, tempName, docName); } @@ -139,135 +159,382 @@ public class Report2Gener { } } - private JSONObject getData(String repositoryId, JSONObject wizardJsonData) { + private JSONObject getData(String repositoryId, JSONObject wizardJsonData, String docPath, String fileName) { JSONObject dataMap = new JSONObject(); boolean raciRelationType = SDK.getAppAPI().getPropertyBooleanValue("com.actionsoft.apps.coe.pal.output.pr", "DETY_POSITION_ROLE_RELATION_TYPE", false); - dataMap.put("organizationType1", "涉及部门"); - dataMap.put("organizationType2", "涉及岗位\\角色"); + // 记录关联属性的流程节点,防止多次查询重复文件信息耗费时间 + Set relationFileIds = new HashSet<>(); + Map> relationFileMap = new HashMap<>(); + PrReportComment prReportComment = new PrReportComment(); - PALRepositoryModel repositoryModel = PALRepositoryCache.getCache().get(repositoryId); + PALRepositoryModel repositoryModel = PALRepositoryQueryAPIManager.getInstance().queryPalRepositoryModelByPalId(repositoryId); + + //流程绩效 + dataMap.put("pl_Name_process_performance_indicator", ""); + dataMap.put("pl_set_the_purpose", ""); + dataMap.put("pl_Index_definition", ""); + dataMap.put("pl_computational_formula", ""); + dataMap.put("pl_data_sources", ""); + dataMap.put("pl_unit_measurement", ""); + dataMap.put("pl_statistical_period", ""); + dataMap.put("pl_explain", ""); + List metrics = DesignerShapeRelationCache.getListByAttrId(repositoryModel.getId(), "", "Process_performance_metrics"); + if (metrics.size() != 0) { + for (DesignerShapeRelationModel relation : metrics) { + String relationFileId = relation.getRelationFileId();// 支持或相关文件的ID + String relationShapeId = relation.getRelationShapeId();//实例ID + //System.out.println(relationFileId + "/" + relationShapeId);//输出响应ID + List> relations = CoeDesignerUtil.getShapeMessageJson4(relationFileId); //流程文件内容 + for (Map entry : relations) { + Object attributes = entry.get("attributes"); + String resultJson = attributes.toString(); + JSONArray object= JSONArray.parseArray(resultJson); + for(int i=0; i dangerSet = new HashSet();// 风险 - Set kpiSet = new HashSet<>();// kpi - Map> relationFileMap = new HashMap<>(); - + Set regulateSet = new HashSet();// 控制 + Set KPISet = new HashSet();// kpi List> repositoryFileElements = CoeDesignerUtil.getShapeMessageJson4(repositoryId); //流程文件内容 if (wizardJsonData.getBoolean("orderNuberFirst")) { // 根据页面选择进行排序 OutputWordUtil.orderByNumber(repositoryFileElements); } + + // 流程附件列表 + UpFileDao upFileDao = new UpFileDao(); + StringBuffer sqlWhere = new StringBuffer(); + sqlWhere.append(" and PALREPOSITORYID ='").append(repositoryModel.getId()).append("'"); + List search = upFileDao.search(sqlWhere.toString()); + File file = null; + //三员管理下,用户密级与文件密级过滤显示 + if(HighSecurityUtil.isON()){ + PALRepositoryQueryAPIManager.getInstance().upFileSecurityFilter(this.userContext,search); + } + if (search != null && search.size() > 0) { + //创建附件目录及复制附件 + fileName = fileName + "_file"; + file = new File(docPath, fileName); + if (!file.exists()) { + log.info("创建附件"); + file.mkdir(); + } + } + + //文件属性附件处理 + int fileIndex = 1; + if (search != null && search.size() > 0) { + // 复制附件 + for (UpfileModel upfileModel : search) { + if (!"f".equals(upfileModel.getType())) {// 文件 + continue; + } + // 复制doccenter下的文件 + DCContext dcContext = null; + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.COE_UPFILE); + if (dcProfile != null) { + dcContext = new DCContext(userContext, dcProfile, CoEConstant.APP_ID, "file", upfileModel.getPl_uuid(), upfileModel.getFileName()); + } + File sourceFile = new UtilFile(dcContext.getFilePath()); + File targetFile = new UtilFile(file.toString() + File.separator + dcContext.getFileName()); + try { + UtilFile.copyFile(sourceFile, targetFile); + } catch (Exception e) { + System.out.println(e); + e.printStackTrace(); + } + JSONObject object = new JSONObject(); + object.put("file_name", fileIndex + "." + upfileModel.getFileName()); + String link = fileName + File.separator + upfileModel.getFileName(); + object.put("link", link); + fileTable.add(object); + fileIndex++; + } + } + //流程说明 if (repositoryFileElements != null) { int index = 1;// 流程步骤序号 int dangerIndex = 1;// 风险序号 - int kpiIndex = 1;// 指标序号 + int regulateIndex = 1;// 控制序号 for (Map shape : repositoryFileElements) { //如果图形元素不是流程步骤,不导出该元素 - if (PrReportComment.PROCESS_STEP.indexOf((String) shape.get("type")) == -1) { - continue; - } - boolean containDangerAttribute = false; - boolean containKPIAttribute = false; +// if (PrReportComment.PROCESS_STEP.indexOf((String)shape.get("type")) == -1 && "method_approval_node,method_service_node,method_manual_node".indexOf((String)shape.get("type")) == -1) { +// continue; +// } JSONObject _tr = new JSONObject(); - OutputWordUtil.setShapeDefaultValue2(repositoryId, _tr); //设置默认值 - _tr.put(OutputWordUtil.SERIAL_NUMBER, index); //序号 - _tr.put(OutputWordUtil.REPOSITORY_NAME, specialCharTransfer(repositoryModel.getName().replace("\n", ""))); //流程名称 - _tr.put(OutputWordUtil.SHAPE_NAME, specialCharTransfer(shape.get("text").toString()).replace("\n", OutputWordUtil.WRAPSTRING)); //步骤名称 + OutputWordUtil.setShapeDefaultValue2(repositoryId, _tr); //设置默认值 + _tr.put(OutputWordUtil.SERIAL_NUMBER, index); //序号 + _tr.put(OutputWordUtil.REPOSITORY_NAME, specialCharTransfer(repositoryModel.getName().replace("\n", ""))); //流程名称 + _tr.put(OutputWordUtil.SHAPE_NAME, specialCharTransfer(shape.get("text").toString()).replace("\n", OutputWordUtil.WRAPSTRING)); //步骤名称 + + /**序号改为流程编号**/ + /*_tr.put(OutputWordUtil.SERIAL_NUMBER, ""); //序号置空 + if (shape.containsKey("number")) { + _tr.put(OutputWordUtil.SERIAL_NUMBER, shape.get("number")); + }*/ + /**序号改为流程编号**/ + + // 节点的附件处理 + JSONArray shapeFileTable = new JSONArray(); //流程节点附件Table + if (search != null && search.size() > 0) { + // 复制附件 + for (UpfileModel upfileModel : search) { + if ("f".equals(upfileModel.getType())) { + continue; + } + if (!shape.get("id").equals(upfileModel.getShape_uuid())) { + continue; + } + // 复制doccenter下的文件 + DCContext dcContext = null; + DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.COE_UPFILE); + if (dcProfile != null) { + dcContext = new DCContext(userContext, dcProfile, CoEConstant.APP_ID, upfileModel.getPl_uuid(), upfileModel.getShape_uuid(), upfileModel.getFileName()); + } + File sourceFile = new UtilFile(dcContext.getFilePath()); + File targetFile = new UtilFile(file.toString() + File.separator + dcContext.getFileName()); + try { + UtilFile.copyFile(sourceFile, targetFile); + } catch (Exception e) { + System.out.println(e); + e.printStackTrace(); + } + JSONObject object = new JSONObject(); + object.put("shape_file_name", fileIndex+"."+upfileModel.getFileName()); + String link = fileName + File.separator + upfileModel.getFileName(); + object.put("shape_file_link", link); + shapeFileTable.add(object); + fileIndex++; + } + } + if(shapeFileTable.size() == 0) {// 没有附件时给空值,不然使用office打开会解析错误 + JSONObject object = new JSONObject(); + object.put("shape_file_name", ""); + object.put("shape_file_link", ""); + shapeFileTable.add(object); + } + _tr.put("shape_File_Table", shapeFileTable); + JSONArray dataAttributes = (JSONArray) shape.get("attributes"); - // 组织(部门)、员工 - List dutyROrgList = new ArrayList<>(); - List approvalAOrgAList = new ArrayList<>(); - List counselorCOrgList = new ArrayList<>(); - List notifyIOrgList = new ArrayList<>(); - // 岗位、员工 - List dutyRRoleList = new ArrayList<>(); - List approvalARoleAList = new ArrayList<>(); - List counselorCRoleList = new ArrayList<>(); - List notifyIRoleList = new ArrayList<>(); - Map> map = OutputWordUtil.getShapeRelationAttrMap(repositoryId, shape.get("id").toString()); if (!dataAttributes.isEmpty()) { for (int i = 0; i < dataAttributes.size(); i++) { JSONObject obj = dataAttributes.getJSONObject(i); String attrId = obj.getString("key"); String attrValue = obj.getString("value"); _tr.put("shape_" + attrId, attrValue.replace("\n", OutputWordUtil.WRAPSTRING)); - if ("bpm_duty_r,bpm_approval_a,bpm_counselor_c,bpm_notify_i,duty_r,approval_a,counselor_c,notify_i".contains(attrId)) { - if (raciRelationType) {// 涉及部门、岗位/角色关联的是bpm组织部门、岗位、角色 - dataMap.put("organizationType1", "涉及部门\\人员"); - dataMap.put("organizationType2", "涉及岗位\\角色"); - if ("bpm_duty_r".equals(attrId)) { - raciRelationAwsOrg(map, "bpm_duty_r", dutyROrgList, dutyRRoleList); - } else if ("bpm_approval_a".equals(attrId)) { - raciRelationAwsOrg(map, "bpm_approval_a", approvalAOrgAList, approvalARoleAList); - } else if ("bpm_counselor_c".equals(attrId)) { - raciRelationAwsOrg(map, "bpm_counselor_c", counselorCOrgList, counselorCRoleList); - } else if ("bpm_notify_i".equals(attrId)) { - raciRelationAwsOrg(map, "bpm_notify_i", notifyIOrgList, notifyIRoleList); - } - } else { - if ("duty_r".equals(attrId)) { - raciRelationPalOrg(map, "duty_r", dutyROrgList, dutyRRoleList); - } else if ("approval_a".equals(attrId)) { - raciRelationPalOrg(map, "approval_a", approvalAOrgAList, approvalARoleAList); - } else if ("counselor_c".equals(attrId)) { - raciRelationPalOrg(map, "counselor_c", counselorCOrgList, counselorCRoleList); - } else if ("notify_i".equals(attrId)) { - raciRelationPalOrg(map, "notify_i", notifyIOrgList, notifyIRoleList); - } + if (raciRelationType) {// 涉及部门、岗位/角色关联的是bpm组织部门、岗位、角色 + if ("bpm_duty_r".equals(attrId)) { + _tr.put("shape_duty_r", attrValue.replace("\n", OutputWordUtil.WRAPSTRING)); + } + if ("bpm_approval_a".equals(attrId)) { + _tr.put("shape_approval_a", attrValue.replace("\n", OutputWordUtil.WRAPSTRING)); + } + if ("bpm_counselor_c".equals(attrId)) { + _tr.put("shape_counselor_c", attrValue.replace("\n", OutputWordUtil.WRAPSTRING)); + } + if ("bpm_notify_i".equals(attrId)) { + _tr.put("shape_notify_i", attrValue.replace("\n", OutputWordUtil.WRAPSTRING)); } } - if ("danger".equals(attrId)) { - JSONArray dangerTable = new JSONArray(); - dangerIndex = setTableValueOfRiskAndKPI(attrId, repositoryId, shape.get("id").toString(),dangerTable, dangerIndex, _tr.getString(OutputWordUtil.SHAPE_NAME), relationFileMap); + dangerIndex = setTableValueOfControlAndRisk(attrId, repositoryId, shape.get("id").toString(),dangerTable, dangerIndex, _tr.getString(OutputWordUtil.SHAPE_NAME), relationFileMap); dangerSet.clear(); - _tr.put(OutputWordUtil.TABLE_DANGER, dangerTable); - if (dangerTable.size() > 0) { - containDangerAttribute = true; - } - - } else if ("kpi".equals(attrId)) { - JSONArray kpiTable = new JSONArray(); - kpiIndex = setTableValueOfRiskAndKPI(attrId, repositoryId, shape.get("id").toString(), kpiTable, kpiIndex, _tr.getString(OutputWordUtil.SHAPE_NAME), relationFileMap); - kpiSet.clear(); - _tr.put(OutputWordUtil.TABLE_KPI, kpiTable); - if (kpiTable.size() > 0) { - containKPIAttribute = true; - } + }else if ("regulate".equals(attrId)) { + regulateIndex = setTableValueOfControlAndRisk(attrId, repositoryId, shape.get("id").toString(), regulateTable, regulateIndex, _tr.getString(OutputWordUtil.SHAPE_NAME), relationFileMap); + regulateSet.clear(); } } - _tr.put("shape_duty_r_org", StringUtils.join(dutyROrgList, ",").replace("\n", OutputWordUtil.WRAPSTRING)); - _tr.put("shape_approval_a_org", StringUtils.join(approvalAOrgAList, ",").replace("\n", OutputWordUtil.WRAPSTRING)); - _tr.put("shape_counselor_c_org", StringUtils.join(counselorCOrgList, ",").replace("\n", OutputWordUtil.WRAPSTRING)); - _tr.put("shape_notify_i_org", StringUtils.join(notifyIOrgList, ",").replace("\n", OutputWordUtil.WRAPSTRING)); - _tr.put("shape_duty_r_role", StringUtils.join(dutyRRoleList, ",").replace("\n", OutputWordUtil.WRAPSTRING)); - _tr.put("shape_approval_a_role", StringUtils.join(approvalARoleAList, ",").replace("\n", OutputWordUtil.WRAPSTRING)); - _tr.put("shape_counselor_c_role", StringUtils.join(counselorCRoleList, ",").replace("\n", OutputWordUtil.WRAPSTRING)); - _tr.put("shape_notify_i_role", StringUtils.join(notifyIRoleList, ",").replace("\n", OutputWordUtil.WRAPSTRING)); } repositoryShapeTable.add(_tr); index++; - if (containDangerAttribute) { - shapeDangerTable.add(_tr); - } - if (containKPIAttribute) { - shapeKPITable.add(_tr); - } } - } - dataMap.put(OutputWordUtil.TABLE_REPOSITORY_SHAPE, repositoryShapeTable); - dataMap.put(OutputWordUtil.TABLE_DANGER, shapeDangerTable); - dataMap.put(OutputWordUtil.TABLE_KPI, shapeKPITable); + // 流程步骤的指标表格 + setTableValueOfKPI("kpi", repositoryId, KPITable, relationFileMap); + JSONArray termTable = new JSONArray(); //术语定义Table + // 属性特征 属性代码KEY + PALRepositoryPropertyModel term = PALRepositoryPropertyCache.getPropertyByPropertyId(repositoryModel.getId(),"term"); + if (term != null) { + String termVal = term.getPropertyValue(); + JSONObject termObj = JSONObject.parseObject(termVal); + if (termObj != null && !termObj.isEmpty()) { + JSONArray tableArr = termObj.getJSONArray("table"); + if (tableArr != null && !tableArr.isEmpty()) { + for (Object obj : tableArr) { + JSONObject obj2 = (JSONObject) obj; + if (!"table_head".equals(obj2.getString("id"))) { + String name = obj2.getString("name"); + String desc = obj2.getString("desc"); + JSONObject tmp = new JSONObject(); + tmp.put("name", name); + tmp.put("desc", desc); + termTable.add(tmp); + } + } + } + } + } + + + JSONArray organizationTable = new JSONArray(); //组织职责Table + // 属性特征 属性代码KEY + PALRepositoryPropertyModel Organizational = PALRepositoryPropertyCache.getPropertyByPropertyId(repositoryModel.getId(),"Organizational_role"); + if (Organizational != null){ + String OrganizationalVal = Organizational.getPropertyValue(); + JSONObject OrganizationalObj = JSONObject.parseObject(OrganizationalVal); + if (OrganizationalObj != null && !OrganizationalObj.isEmpty()) { + JSONArray tableArr = OrganizationalObj.getJSONArray("table"); + if (tableArr != null && !tableArr.isEmpty()) { + for (Object obj : tableArr) { + JSONObject obj2 = (JSONObject) obj; + if (!"table_head".equals(obj2.getString("id"))) { + String name = obj2.getString("name"); + String desc = obj2.getString("desc"); + JSONObject tmp = new JSONObject(); + tmp.put("name", name); + tmp.put("desc", desc); + organizationTable.add(tmp); + } + } + } + } + } + + + //支持文件 + JSONArray supportfiles = new JSONArray(); //组织职责Table + List relationList = DesignerShapeRelationCache.getListByAttrId(repositoryModel.getId(), "", "support_files"); + int index = 0; + for (DesignerShapeRelationModel relation : relationList) { + String relationFileId = relation.getRelationFileId();// 支持或相关文件的ID + PALRepositoryModel model = PALRepositoryCache.getCache().get(relationFileId); + if (model != null) { + index++; + String name = model.getName(); + JSONObject tmp = new JSONObject(); + tmp.put("name", name); + tmp.put("desc", index); + + + supportfiles.add(tmp); + } + } + + //相关文件 R_relevant_flies + JSONArray relevant_flies = new JSONArray(); //组织职责Table + List relationList2 = DesignerShapeRelationCache.getListByAttrId(repositoryModel.getId(), "", "R_relevant_flies"); + int count = 0; + for (DesignerShapeRelationModel relation : relationList2) { + String relationFileId = relation.getRelationFileId();// 支持或相关文件的ID + PALRepositoryModel model = PALRepositoryCache.getCache().get(relationFileId); + if (model != null) { + count++; + String name = model.getName(); + JSONObject tmp = new JSONObject(); + tmp.put("name", name); + tmp.put("desc", count); + + relevant_flies.add(tmp); + } + } + + + + //System.out.println(relations+"==========relations"); + /*if (wizardJsonData.getBoolean("orderNuberFirst")) { // 根据页面选择进行排序 + OutputWordUtil.orderByNumber(relations); + }*/ + + + + + + // 2张表 + // 文件属性内容(文本内容)表 + // 文件属性内容关联表 + + // 根据绩效所属模型查询绩效形状的详细信息 + + + + // 流程文件属性术语与定义(表格类型) + + + + // 流程文件属性绩效形状的信息 + + // 流程文件属性相关文件和支持文件 + + //术语 + dataMap.put("term_table", termTable);//table4 + dataMap.put("term_table_count", termTable.size());//table4 + //组织和职责 + dataMap.put("organization_table", organizationTable);//table5 + dataMap.put("organization_table_count",organizationTable.size());//table5 + //支持文件 + dataMap.put("supports_table", supportfiles);//table6 + dataMap.put("supports_table_count", supportfiles.size());//table6 + //相关文件 + dataMap.put("relevant_table", relevant_flies);//table7 + dataMap.put("relevant_table_count", relevant_flies.size());//table7 + //流程绩效 + //dataMap.put("Process_performance_metrics_table",process_performance_metrics);//table8 + dataMap.put("metrics_count", metrics.size());// + + dataMap.put(OutputWordUtil.TABLE_REPOSITORY_SHAPE, repositoryShapeTable); + dataMap.put("TABLE_REPOSITORY_SHAPE_COUNT", repositoryShapeTable.size()); + dataMap.put("file_table", fileTable); + dataMap.put("file_table_count", fileIndex); + dataMap.put(OutputWordUtil.TABLE_DANGER, dangerTable); + dataMap.put(OutputWordUtil.TABLE_REGULATE, regulateTable); + dataMap.put(OutputWordUtil.TABLE_KPI, KPITable); + ReportRepositoryCompare compare = new ReportRepositoryCompare(); + JSONArray historyVersionModify = compare.getModifyVersionHistory(repositoryId); + dataMap.put("history_table", historyVersionModify); return dataMap; } @@ -389,4 +656,123 @@ public class Report2Gener { } } + /** + * 设置流程步骤的KPI表格 + * @param attrId + * @param fileId + * @param table + * @param relationFileMap + * @return + */ + public int setTableValueOfKPI(String attrId, String fileId, JSONArray table, Map> relationFileMap) { + int index = 1; + JSONArray result = new JSONArray(); + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + List list = dao.query(fileId, null, attrId, null, null); + for (DesignerShapeRelationModel model : list) { + String relationFileId = model.getRelationFileId(); + if (!relationFileMap.containsKey(relationFileId) && !UtilString.isEmpty(model.getShapeId())) { + Map shapes = new HashMap<>(); + List> fileElements = CoeDesignerUtil.getShapeMessageJson4(relationFileId); + for (Map shape : fileElements) { + String tempShapeId = shape.get("id").toString(); + shapes.put(tempShapeId, shape); + } + relationFileMap.put(relationFileId, shapes); + } + } + + Set relationShapeIdSet = new HashSet<>(); // 去重 + for (DesignerShapeRelationModel model : list) { + String relationFileId = model.getRelationFileId(); + String relationShapeId = model.getRelationShapeId(); + if (relationFileMap.containsKey(relationFileId)) { + Map elements = relationFileMap.get(relationFileId); + if (elements != null && elements.containsKey(relationShapeId)) { + Map shape = (Map) elements.get(relationShapeId); + if (!relationShapeIdSet.contains(shape.get("id").toString())) { + relationShapeIdSet.add(shape.get("id").toString()); + result.add(shape); + } + } + } + } + + for (int i = 0; i < result.size(); i++) { + Map shape = result.getJSONObject(i); + JSONObject _tr = new JSONObject(); + OutputWordUtil.setShapeDefaultValue2(shape.get("uuid").toString(), _tr); //设置默认值 + String name = specialCharTransfer(shape.get("text").toString()); + _tr.put(OutputWordUtil.SHAPE_NAME, name.replace("\n", OutputWordUtil.WRAPSTRING)); + _tr.put(OutputWordUtil.SERIAL_NUMBER, index); + JSONArray dataAttributes = (JSONArray) shape.get("attributes"); + for (int j = 0; j < dataAttributes.size(); j++) { + _tr.put("shape_" + dataAttributes.getJSONObject(j).getString("key"), specialCharTransfer(dataAttributes.getJSONObject(j).getString("value")).replace("\n", " ")); + } + table.add(_tr); + index++; + } + return index; + + } + + + public int setTableValueOfControlAndRisk(String attrId, String fileId, String shapeId, JSONArray table, int index, String processShapeName, Map> relationFileMap) { + JSONArray result = new JSONArray(); + DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); + List list = dao.query(fileId, shapeId, attrId, null, null); + for (DesignerShapeRelationModel model : list) { + String relationFileId = model.getRelationFileId(); + if (!relationFileMap.containsKey(relationFileId) && PALRepositoryCache.getCache().get(relationFileId) != null) { + Map shapes = new HashMap<>(); + List> fileElements = CoeDesignerUtil.getShapeMessageJson4(relationFileId); + for (Map shape : fileElements) { + String tempShapeId = shape.get("id").toString(); + shapes.put(tempShapeId, shape); + } + relationFileMap.put(relationFileId, shapes); + } + } + + Set relationShapeIdSet = new HashSet<>(); // 去重 + String filterShapeName = ""; + if ("danger".equals(attrId)) {// 风险 + filterShapeName = "risk"; + } else if ("regulate".equals(attrId)) {// 控制 + filterShapeName = "control"; + } + for (DesignerShapeRelationModel model : list) { + String relationFileId = model.getRelationFileId(); + String relationShapeId = model.getRelationShapeId(); + if (relationFileMap.containsKey(relationFileId)) { + Map elements = relationFileMap.get(relationFileId); + if (elements != null && elements.containsKey(relationShapeId)) { + Map shape = (Map) elements.get(relationShapeId); + if (!relationShapeIdSet.contains(shape.get("id").toString()) && filterShapeName.equals(shape.get("type"))) { + relationShapeIdSet.add(shape.get("id").toString()); + result.add(shape); + } + } + } + } + + for (int i = 0; i < result.size(); i++) { + Map shape = result.getJSONObject(i); + JSONObject _tr = new JSONObject(); + OutputWordUtil.setShapeDefaultValue2(shape.get("uuid").toString(), _tr); //设置默认值 + String name = specialCharTransfer(shape.get("text").toString()); + _tr.put("related_" + OutputWordUtil.SHAPE_NAME, processShapeName); + _tr.put(OutputWordUtil.SHAPE_NAME, name.replace("\n", OutputWordUtil.WRAPSTRING)); + _tr.put(OutputWordUtil.SERIAL_NUMBER, index); + JSONArray dataAttributes = (JSONArray) shape.get("attributes"); + for (int j = 0; j < dataAttributes.size(); j++) { + _tr.put("shape_" + dataAttributes.getJSONObject(j).getString("key"), specialCharTransfer(dataAttributes.getJSONObject(j).getString("value")).replace("\n", " ")); + } + table.add(_tr); + index++; + } + return index; + + } + }