From cedd42df6f518e9683533d54b2aac91d43e064ba Mon Sep 17 00:00:00 2001 From: "446052889@qq.com" <446052889@qq.com> Date: Thu, 15 Sep 2022 17:40:53 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A8=E5=8D=95=E6=89=8B=E5=86=8C=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...om.awspaas.user.apps.coe.pal.output.bd.jar | Bin 63091 -> 37510 bytes .../pal/output/bd/report1/Report1Gener.java | 8 +- .../pal/output/bd/report2/Report2Gener.java | 393 -- .../bd/report2/Report2WizardOption.java | 32 - .../pal/output/bd/report3/Report3Gener.java | 247 -- .../bd/report3/Report3WizardOption.java | 32 - .../pal/output/bd/report4/Report4Gener.java | 364 -- .../bd/report4/Report4WizardOption.java | 26 - .../pal/output/bd/report5/Report5Gener.java | 33 - .../bd/report5/Report5WizardOption.java | 27 - .../表单-手册2.doc | Bin 0 -> 49664 bytes .../表单-手册2.xml | 3563 +++++++++++++++++ 12 files changed, 3567 insertions(+), 1158 deletions(-) delete mode 100644 com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report2/Report2Gener.java delete mode 100644 com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report2/Report2WizardOption.java delete mode 100644 com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report3/Report3Gener.java delete mode 100644 com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report3/Report3WizardOption.java delete mode 100644 com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report4/Report4Gener.java delete mode 100644 com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report4/Report4WizardOption.java delete mode 100644 com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report5/Report5Gener.java delete mode 100644 com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report5/Report5WizardOption.java create mode 100644 com.awspaas.user.apps.coe.pal.output.bd/表单-手册2.doc create mode 100644 com.awspaas.user.apps.coe.pal.output.bd/表单-手册2.xml diff --git a/com.awspaas.user.apps.coe.pal.output.bd/lib/com.awspaas.user.apps.coe.pal.output.bd.jar b/com.awspaas.user.apps.coe.pal.output.bd/lib/com.awspaas.user.apps.coe.pal.output.bd.jar index 0097fd63b11be0f3bfc063c48de6064d9e54b203..8697ce511a12774fecabe82bba60937db0212fdc 100644 GIT binary patch delta 10975 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 z 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 diff --git a/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report1/Report1Gener.java b/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report1/Report1Gener.java index d1873b5a..b4bf09e5 100644 --- a/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report1/Report1Gener.java +++ b/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report1/Report1Gener.java @@ -89,7 +89,7 @@ public class Report1Gener { OutputAppProfile appModel = OutputAppManager.getProfile(model.getProfileId()); String tempPath = appModel.getAppContext().getPath(); //String tempName = "步骤横表-流程手册.xml"; - String tempName = "表单-手册(修订版).xml"; + String tempName = "表单-手册2.xml"; log.info("begin..."); log.info("-------------------"); // ----文件处理----- @@ -306,10 +306,10 @@ public class Report1Gener { e.printStackTrace(); } JSONObject object = new JSONObject(); - object.put("shape_file_name", fileIndex+"."+upfileModel.getFileName()); + object.put("file_name", fileIndex+"."+upfileModel.getFileName()); String link = fileName + File.separator + upfileModel.getFileName(); - object.put("shape_file_link", link); - shapeFileTable.add(object); + object.put("link", link); + fileTable.add(object); fileIndex++; } } diff --git a/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report2/Report2Gener.java b/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report2/Report2Gener.java deleted file mode 100644 index 95dcd632..00000000 --- a/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report2/Report2Gener.java +++ /dev/null @@ -1,393 +0,0 @@ -package com.awspaas.apps.coe.pal.output.bd.report2; - -import java.util.*; - -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.cache.PALRepositoryCache; -import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryPropertyCache; -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.system.property.CoePropertyUtil; -import com.actionsoft.sdk.local.SDK; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.actionsoft.bpms.commons.mvc.view.ResponseObject; -import com.actionsoft.bpms.server.fs.DCContext; -import com.actionsoft.sdk.local.api.internal.PlatformAPIImpl; -import com.awspaas.apps.coe.pal.output.bd.util.PrReportComment; -import org.apache.commons.lang.StringUtils; - -import javax.wsdl.Output; - -import static com.actionsoft.apps.coe.pal.pal.output.util.OutputWordUtil.specialCharTransfer; - -/** - * 生成流程手册-步骤竖表的入口 - * - * @author zhangming - */ -public class Report2Gener { - // 防止生成过程中,停用或卸载该app - public static boolean isRunning = false; - public static final Object _lock = new Object(); - GenerLogExd log = new GenerLogExd(); - public Report2Gener() { - } - - /** - * 生成文件 - * - * @param model OutputTaskModel对象 - * @param wizardJsonData 向导收集的Json参数(targetFiles、relationFiles、options...) - * @param dcContext 要生成报告的DC目录对象,已准备好 - * @return 将文件生成到output目录下,返回状态 - * - * @see PlatformAPIImpl#getDefaultLanguage() - * @see PlatformAPIImpl#getlanguages() - */ - public ResponseObject execute(OutputTaskModel model, String wizardJsonData, DCContext dcContext) { - try { - synchronized (_lock) { - isRunning = true; - String teamId = model.getTeamId(); - String wsId = model.getWsId(); - log.info("execute ready..."); - log.info("-------------------"); - log.info("TeamId=" + teamId); - log.info("wsId=" + wsId); - JSONObject jsonObj = JSONObject.parseObject(wizardJsonData); - log.info("dcPath=" + dcContext.getPath()); - // ----预处理、校验---- - OutputAppProfile appModel = OutputAppManager.getProfile(model.getProfileId()); - String tempPath = appModel.getAppContext().getPath(); - //String tempName = "步骤竖表-流程手册.xml"; - String tempName = "表单-手册.xml"; - log.info("begin..."); - log.info("-------------------"); - // ----文件处理----- - genarateWord(tempPath, tempName, dcContext.getPath(), jsonObj); - log.info("end"); - } - } finally { - isRunning = false; - } - return ResponseObject.newOkResponse().put("logs", log.logs()); - } - - private void genarateWord(String tempPath, String tempName, String docPath, JSONObject wizardJsonData) { - String[] repositoryIds = wizardJsonData.getString("targetFileId").split(","); - - String reportName = wizardJsonData.getString("reportNameIsItName"); //页面上设计的文件命名规则 - Map indexMap = new HashMap(); - for (String repositoryId : repositoryIds) { - if (repositoryId == null || "".equals(repositoryId)) { - continue; - } - PALRepositoryModel model = PALRepositoryCache.getCache().get(repositoryId); - if (model != null) { - //获取文件扩展属性 - String json = CoePropertyUtil.getPropertyValue(model.getId() + "_attr"); - JSONObject extendAttr = new JSONObject(); - if (json != null && !"".equals(json) && !"null".equals(json)) { - JSONArray jsonArray = JSONArray.parseArray(json); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject object = jsonArray.getJSONObject(i); - extendAttr.put(object.getString("id"), object.get("value")); - } - } - //文件的扩展属性 - List repositoryPropertyList = PALRepositoryPropertyCache.getPropertyByPlId(model.getId()); - if (repositoryPropertyList != null && repositoryPropertyList.size() > 0) { - for (PALRepositoryPropertyModel repositoryPropertyModel : repositoryPropertyList) { - extendAttr.put(repositoryPropertyModel.getPropertyId(), repositoryPropertyModel.getPropertyValue()); - } - } - List reportNameLabels = OutputExcelUtil.string2label(reportName); - String reportNameValue = reportName; - if (reportNameLabels.size() > 0) { - reportNameValue = OutputExcelUtil.label2value(model, extendAttr, null, reportName); - - } - reportNameValue = reportNameValue.replaceAll(OutputExcelUtil.FILENAMEREGX, ""); - if (reportNameValue.length() > 255) { - reportNameValue = reportNameValue.substring(0, 255); - } - String docName = ""; - if (indexMap.containsKey(reportNameValue)) { - int index = indexMap.get(reportNameValue); - index++; - log.info("得到word名称为:" + reportNameValue + "(" + index + ")"); - docName = docPath + reportNameValue + "(" + index + ")" + ".doc"; - indexMap.put(reportNameValue, index); - } else { - log.info("得到word名称为:" + reportNameValue); - docName = docPath + reportNameValue + ".doc"; - indexMap.put(reportNameValue, 1); - } - JSONObject dataMap = getData(repositoryId, wizardJsonData); - if (dataMap != null) { - OutputWordUtil.createDoc(dataMap, tempPath, tempName, docName); - } - } - } - } - - private JSONObject getData(String repositoryId, JSONObject wizardJsonData) { - JSONObject dataMap = new JSONObject(); - boolean raciRelationType = SDK.getAppAPI().getPropertyBooleanValue("com.awspaas.user.apps.coe.pal.output.bd", "DETY_POSITION_ROLE_RELATION_TYPE", false); - - dataMap.put("organizationType1", "涉及部门"); - dataMap.put("organizationType2", "涉及岗位\\角色"); - PrReportComment prReportComment = new PrReportComment(); - PALRepositoryModel repositoryModel = PALRepositoryCache.getCache().get(repositoryId); - if (repositoryModel == null) { - return null; - } - prReportComment.getCommentContent(dataMap, repositoryModel); // 获取一些公共的数据(手册首页的手册岗位名称、部门、时间等) - - JSONArray repositoryShapeTable = new JSONArray(); // 流程步骤table - JSONArray shapeDangerTable = new JSONArray(); // 流程步骤的风控要求table - JSONArray shapeKPITable = new JSONArray(); // 流程步骤的量化指标table - - Set dangerSet = new HashSet();// 风险 - Set kpiSet = new HashSet<>();// kpi - Map> relationFileMap = new HashMap<>(); - - List> repositoryFileElements = CoeDesignerUtil.getShapeMessageJson4(repositoryId); //流程文件内容 - if (wizardJsonData.getBoolean("orderNuberFirst")) { // 根据页面选择进行排序 - OutputWordUtil.orderByNumber(repositoryFileElements); - } - if (repositoryFileElements != null) { - int index = 1;// 流程步骤序号 - int dangerIndex = 1;// 风险序号 - int kpiIndex = 1;// 指标序号 - for (Map shape : repositoryFileElements) { - //如果图形元素不是流程步骤,不导出该元素 - if (PrReportComment.PROCESS_STEP.indexOf((String) shape.get("type")) == -1) { - continue; - } - boolean containDangerAttribute = false; - boolean containKPIAttribute = false; - 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)); //步骤名称 - 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 ("danger".equals(attrId)) { - JSONArray dangerTable = new JSONArray(); - dangerIndex = setTableValueOfRiskAndKPI(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; - } - } - } - _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); - - return dataMap; - } - - /** - * 设置风险控制表格 - * @param attrId - * @param fileId - * @param shapeId - * @param table - * @param index - * @param relationFileMap - * @return - */ - public int setTableValueOfRiskAndKPI(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 ("kpi".equals(attrId)) {// 控制 - filterShapeName = "kpi"; - } - 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; - - } - - /** - * 部门、岗位、角色、人员数据 - * @param map - * @param orgList - * @param roleList - */ - private void raciRelationAwsOrg(Map> map, String attrId, List orgList, List roleList) { - if (map.containsKey(attrId)) { - for (DesignerShapeRelationModel model : map.get(attrId)) { - JSONObject orgObj = JSONObject.parseObject(model.getRelationShapeText()); - String orgType = orgObj.getString("type"); - String orgName = orgObj.getString("name"); - if ("department".equals(orgType) || "user".equals(orgType)) {// 部门人员 - orgList.add(orgName); - } else if ("position".equals(orgType) || "role".equals(orgType)) {// 岗位角色 - roleList.add(orgName); - } - } - } - } - - /** - * 部门、岗位、角色、人员数据 - * @param map - * @param orgList - * @param roleList - */ - private void raciRelationPalOrg(Map> map, String attrId, List orgList, List roleList) { - if (map.containsKey(attrId)) { - for (DesignerShapeRelationModel model : map.get(attrId)) { - String relationFileId = model.getRelationFileId(); - String relationShapeId = model.getRelationShapeId(); - List> relationFileElements = CoeDesignerUtil.getShapeMessageJson4(relationFileId); // 关联流程文件内容 - if (relationFileElements != null) { - for (Map element : relationFileElements) { - String id = (String) element.get("id"); - if (id.equals(relationShapeId)) { - String type = element.get("type").toString(); - if ("organization".equals(type)) { - orgList.add(element.get("text").toString().replace("\n", OutputWordUtil.WRAPSTRING)); - } else if ("position".equals(type) || "role".equals(type)) { - roleList.add(element.get("text").toString().replace("\n", OutputWordUtil.WRAPSTRING)); - } - } - } - } - } - } - } - -} diff --git a/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report2/Report2WizardOption.java b/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report2/Report2WizardOption.java deleted file mode 100644 index 5f7dec06..00000000 --- a/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report2/Report2WizardOption.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.awspaas.apps.coe.pal.output.bd.report2; - -import com.actionsoft.bpms.commons.mvc.view.ActionWeb; -import com.actionsoft.bpms.server.UserContext; -import com.actionsoft.sdk.local.api.internal.PlatformAPIImpl; - -/** - * 向导收集该报告的特定选项 - * - */ -public class Report2WizardOption extends ActionWeb { - - public Report2WizardOption(UserContext userContext) { - super(userContext); - } - - public Report2WizardOption() { - } - - /** - * 实现约定的getOption方法 - * - * @param teamId 小组Id - * @param wsId 资产库Id - * @param lang 语言 - * @param wizardJsonData 向导收集的Json参数(targetFiles、relationFiles...) - * @return 含有回调js的html片段 - */ - public String getOption(String teamId, String wsId, String lang, String wizardJsonData) { - return "hi! BD"; - } -} diff --git a/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report3/Report3Gener.java b/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report3/Report3Gener.java deleted file mode 100644 index 4a631adc..00000000 --- a/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report3/Report3Gener.java +++ /dev/null @@ -1,247 +0,0 @@ -package com.awspaas.apps.coe.pal.output.bd.report3; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import com.actionsoft.apps.coe.pal.pal.method.cache.PALMethodCache; -import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodAttributeModel; -import com.actionsoft.apps.coe.pal.pal.method.model.PALMethodModel; -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.cache.PALRepositoryCache; -import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryPropertyCache; -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.system.property.CoePropertyUtil; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.actionsoft.bpms.commons.mvc.view.ResponseObject; -import com.actionsoft.bpms.server.fs.DCContext; -import com.actionsoft.sdk.local.api.internal.PlatformAPIImpl; -import com.awspaas.apps.coe.pal.output.bd.util.PrReportComment; - -/** - * 生成流程手册-单步骤表的入口 - * - * @author zhangming - */ -public class Report3Gener { - // 防止生成过程中,停用或卸载该app - public static boolean isRunning = false; - public static final Object _lock = new Object(); - GenerLogExd log = new GenerLogExd(); - public Report3Gener() { - } - - /** - * 生成文件 - * - * @param model OutputTaskModel对象 - * @param wizardJsonData 向导收集的Json参数(targetFiles、relationFiles、options...) - * @param dcContext 要生成报告的DC目录对象,已准备好 - * @return 将文件生成到output目录下,返回状态 - * - * @see PlatformAPIImpl#getDefaultLanguage() - * @see PlatformAPIImpl#getlanguages() - */ - public ResponseObject execute(OutputTaskModel model, String wizardJsonData, DCContext dcContext) { - try { - synchronized (_lock) { - isRunning = true; - String teamId = model.getTeamId(); - String wsId = model.getWsId(); - log.info("execute ready..."); - log.info("-------------------"); - log.info("TeamId=" + teamId); - log.info("wsId=" + wsId); - JSONObject jsonObj = JSONObject.parseObject(wizardJsonData); - log.info("dcPath=" + dcContext.getPath()); - // ----预处理、校验---- - OutputAppProfile appModel = OutputAppManager.getProfile(model.getProfileId()); - String tempPath = appModel.getAppContext().getPath(); - //String tempName = "单步骤单表-流程手册.xml"; - String tempName = "表单-手册.xml"; - log.info("begin..."); - log.info("-------------------"); - // ----文件处理----- - genarateWord(tempPath, tempName, dcContext.getPath(), jsonObj); - log.info("end"); - } - } finally { - isRunning = false; - } - return ResponseObject.newOkResponse().put("logs", log.logs()); - } - - private void genarateWord(String tempPath, String tempName, String docPath, JSONObject wizardJsonData) { - String[] repositoryIds = wizardJsonData.getString("targetFileId").split(","); - - String reportName = wizardJsonData.getString("reportNameIsItName"); //页面上设计的文件命名规则 - Map indexMap = new HashMap(); - for (String repositoryId : repositoryIds) { - if (repositoryId == null || "".equals(repositoryId)) { - continue; - } - PALRepositoryModel model = PALRepositoryCache.getCache().get(repositoryId); - if (model != null) { - //获取文件扩展属性 - String json = CoePropertyUtil.getPropertyValue(model.getId() + "_attr"); - JSONObject extendAttr = new JSONObject(); - if (json != null && !"".equals(json) && !"null".equals(json)) { - JSONArray jsonArray = JSONArray.parseArray(json); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject object = jsonArray.getJSONObject(i); - extendAttr.put(object.getString("id"), object.get("value")); - } - } - //文件的扩展属性 - List repositoryPropertyList = PALRepositoryPropertyCache.getPropertyByPlId(model.getId()); - if (repositoryPropertyList != null && repositoryPropertyList.size() > 0) { - for (PALRepositoryPropertyModel repositoryPropertyModel : repositoryPropertyList) { - extendAttr.put(repositoryPropertyModel.getPropertyId(), repositoryPropertyModel.getPropertyValue()); - } - } - List reportNameLabels = OutputExcelUtil.string2label(reportName); - String reportNameValue = reportName; - if (reportNameLabels.size() > 0) { - reportNameValue = OutputExcelUtil.label2value(model, extendAttr, null, reportName); - - } - reportNameValue = reportNameValue.replaceAll(OutputExcelUtil.FILENAMEREGX, ""); - if (reportNameValue.length() > 255) { - reportNameValue = reportNameValue.substring(0, 255); - } - String docName = ""; - if (indexMap.containsKey(reportNameValue)) { - int index = indexMap.get(reportNameValue); - index++; - log.info("得到word名称为:" + reportNameValue + "(" + index + ")"); - docName = docPath + reportNameValue + "(" + index + ")" + ".doc"; - indexMap.put(reportNameValue, index); - } else { - log.info("得到word名称为:" + reportNameValue); - docName = docPath + reportNameValue + ".doc"; - indexMap.put(reportNameValue, 1); - } - JSONObject dataMap = getData(repositoryId, wizardJsonData); - if (dataMap != null) { - OutputWordUtil.createDoc(dataMap, tempPath, tempName, docName); - } - } - } - } - - private JSONObject getData(String repositoryId, JSONObject wizardJsonData) { - JSONObject dataMap = new JSONObject(); - - PrReportComment prReportComment = new PrReportComment(); - PALRepositoryModel repositoryModel = PALRepositoryCache.getCache().get(repositoryId); - if (repositoryModel == null) { - return null; - } - prReportComment.getCommentContent(dataMap, repositoryModel); // 获取一些公共的数据(手册首页的手册岗位名称、部门、时间等) - - JSONArray repositoryShapeTable = new JSONArray(); // 流程步骤table - - List> repositoryFileElements = CoeDesignerUtil.getShapeMessageJson(repositoryId); // 流程文件内容 - if (wizardJsonData.getBoolean("orderNuberFirst")) { - OutputWordUtil.orderByNumber(repositoryFileElements); - } - if (repositoryFileElements != null) { - int index = 1; - for (Map shape : repositoryFileElements) { - boolean containDangerAttribute = false; - boolean containKPIAttribute = false; - // 如果图形元素不是流程步骤,不导出该元素 - if (PrReportComment.PROCESS_STEP.indexOf((String) shape.get("type")) == -1) { - continue; - } - JSONObject _tr = new JSONObject(); - OutputWordUtil.setShapeDefaultValue(repositoryId, _tr); - _tr.put(OutputWordUtil.SERIAL_NUMBER, index); // 序号 - _tr.put(OutputWordUtil.REPOSITORY_NAME, repositoryModel.getName().replace("\n", "")); // 流程名称 - _tr.put(OutputWordUtil.SHAPE_NAME, shape.get("text").toString().replace("\n", OutputWordUtil.WRAPSTRING)); // 步骤名称 - - JSONObject dataAttributes = (JSONObject) shape.get("attributes"); - if (dataAttributes != null) { - _tr.put(OutputWordUtil.SHAPE_DESC, dataAttributes.get("shapeDesc")); // 工作详细描述 - JSONArray dataAttributesJsonArray = dataAttributes.getJSONArray("attributesJsonArray"); - - Map shapeModelMap = OutputWordUtil.getShapeRelationMap((String) shape.get("id")); - for (int i = 0; i < dataAttributesJsonArray.size(); i++) { - JSONObject dataAttribute = dataAttributesJsonArray.getJSONObject(i); - if (dataAttribute.containsKey("value")) { - // 获取关联属性的属性值 - OutputWordUtil.setShapeValue(_tr, dataAttribute, shapeModelMap); - // 判断是否包含风险属性或KPI属性 - String attributeValue = dataAttribute.getString("value"); - String attributeKey = dataAttribute.getString("key"); - if (!"".equals(attributeValue)) { - if ("danger".equals(attributeKey)) { - containDangerAttribute = true; - JSONArray danger = new JSONArray(); - JSONObject danger_tr = new JSONObject(); - JSONArray dangerTable = new JSONArray(); - OutputWordUtil.setTableValue(dangerTable, attributeValue); - danger_tr.put(OutputWordUtil.TABLE_DANGER, dangerTable); - danger.add(danger_tr); - _tr.put(OutputWordUtil.TABLE_DANGER, danger); - } else if ("kpi".equals(attributeKey)) { - containKPIAttribute = true; - JSONArray kpi = new JSONArray(); - JSONObject kpi_tr = new JSONObject(); - JSONArray kpiTable = new JSONArray(); - OutputWordUtil.setTableValue(kpiTable, attributeValue); - kpi_tr.put(OutputWordUtil.TABLE_KPI, kpiTable); - kpi.add(kpi_tr); - _tr.put(OutputWordUtil.TABLE_KPI, kpi); - } else if ("organization".equals(dataAttribute.getString("groupPath"))) { - OutputWordUtil.setTrValue(_tr, attributeValue, "shape_" + attributeKey, shapeModelMap); - } - } - } - } - } - - if (!containDangerAttribute) { - _tr.put(OutputWordUtil.TABLE_DANGER, new JSONArray()); - } - if (!containKPIAttribute) { - _tr.put(OutputWordUtil.TABLE_KPI, new JSONArray()); - } - - repositoryShapeTable.add(_tr); - index++; - } - } - - dataMap.put(OutputWordUtil.TABLE_REPOSITORY_SHAPE, repositoryShapeTable); - - return dataMap; - } - - - private JSONArray getEmptyTable(String methodId) { - JSONArray table = new JSONArray(); - JSONObject _tr = new JSONObject(); - PALMethodModel palMethodModel = PALMethodCache.getPALMethodModelById(methodId); - _tr.put(OutputWordUtil.SHAPE_NAME, ""); - _tr.put(OutputWordUtil.SHAPE_NUMBER, ""); - List attributes = palMethodModel.getAttributes(); - if (attributes != null) { - for (PALMethodAttributeModel attribute : attributes) { - String scope = attribute.getScope(); - if (!"%".equals(scope)) { - _tr.put("shape_" + attribute.getKey(), ""); - } - } - } - table.add(_tr); - return table; - } -} diff --git a/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report3/Report3WizardOption.java b/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report3/Report3WizardOption.java deleted file mode 100644 index 291afff2..00000000 --- a/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report3/Report3WizardOption.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.awspaas.apps.coe.pal.output.bd.report3; - -import com.actionsoft.bpms.commons.mvc.view.ActionWeb; -import com.actionsoft.bpms.server.UserContext; -import com.actionsoft.sdk.local.api.internal.PlatformAPIImpl; - -/** - * 向导收集该报告的特定选项 - * - */ -public class Report3WizardOption extends ActionWeb { - - public Report3WizardOption(UserContext userContext) { - super(userContext); - } - - public Report3WizardOption() { - } - - /** - * 实现约定的getOption方法 - * - * @param teamId 小组Id - * @param wsId 资产库Id - * @param lang 语言 - * @param wizardJsonData 向导收集的Json参数(targetFiles、relationFiles...) - * @return 含有回调js的html片段 - */ - public String getOption(String teamId, String wsId, String lang, String wizardJsonData) { - return "hi! BD"; - } -} diff --git a/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report4/Report4Gener.java b/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report4/Report4Gener.java deleted file mode 100644 index ba969d98..00000000 --- a/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report4/Report4Gener.java +++ /dev/null @@ -1,364 +0,0 @@ -package com.awspaas.apps.coe.pal.output.bd.report4; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import com.actionsoft.apps.coe.pal.constant.CoEConstant; -import com.actionsoft.apps.coe.pal.pal.output.extend.GenerLogExd; -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.cache.PALRepositoryCache; -import com.actionsoft.apps.coe.pal.pal.repository.cache.PALRepositoryPropertyCache; -import com.actionsoft.apps.coe.pal.pal.repository.dao.PALRepository; -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.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; -import com.actionsoft.apps.AppsConst; -import com.actionsoft.apps.resource.plugin.profile.DCPluginProfile; -import com.actionsoft.bpms.commons.mvc.view.ResponseObject; -import com.actionsoft.bpms.server.UserContext; -import com.actionsoft.bpms.server.fs.DCContext; -import com.actionsoft.bpms.server.fs.dc.DCProfileManager; -import com.actionsoft.bpms.util.UtilString; -import com.actionsoft.sdk.local.SDK; -import com.actionsoft.sdk.local.api.AppAPI; -import com.actionsoft.sdk.local.api.internal.PlatformAPIImpl; - -public class Report4Gener { - // 防止生成过程中,停用或卸载该app - public static boolean isRunning = false; - public static final Object _lock = new Object(); - GenerLogExd log = new GenerLogExd(); - public Report4Gener() { - } - - /** - * 生成文件 - * - * @param model OutputTaskModel对象 - * @param wizardJsonData 向导收集的Json参数(targetFiles、relationFiles、options...) - * @param dcContext 要生成报告的DC目录对象,已准备好 - * @return 将文件生成到output目录下,返回状态 - * - * @see PlatformAPIImpl#getDefaultLanguage() - * @see PlatformAPIImpl#getlanguages() - */ - public ResponseObject execute(OutputTaskModel model, String wizardJsonData, DCContext dcContext) { - try { - synchronized (_lock) { - isRunning = true; - String teamId = model.getTeamId(); - String wsId = model.getWsId(); - log.info("execute ready..."); - log.info("-------------------"); - log.info("TeamId=" + teamId); - log.info("wsId=" + wsId); - JSONObject jsonObj = JSONObject.parseObject(wizardJsonData); - log.info("dcPath=" + dcContext.getPath()); - // ----预处理、校验---- - String tempId = "6a2435a5-9da1-45e5-8060-84a683041844"; - log.info("begin..."); - log.info("-------------------"); - // ----文件处理----- - genarateWord(tempId, dcContext, jsonObj); - log.info("end"); - } - } finally { - isRunning = false; - } - return ResponseObject.newOkResponse().put("logs", log.logs()); - } - - private void genarateWord(String tempId, DCContext dcContext, JSONObject wizardJsonData) { - String[] repositoryIds = wizardJsonData.getString("targetFileId").split(","); - - String reportName = wizardJsonData.getString("reportNameIsItName"); //页面上设计的文件命名规则 - Map indexMap = new HashMap(); - for (String repositoryId : repositoryIds) { - if (repositoryId == null || "".equals(repositoryId)) { - continue; - } - PALRepositoryModel model = PALRepositoryCache.getCache().get(repositoryId); - if (model == null) { - continue; - } - - //图形关联信息 - DesignerShapeRelationDao dao = new DesignerShapeRelationDao(); - List relationModels = dao.query(model.getId(), null, null, null, null); - Map relationValue = new HashMap(); - if (relationModels != null && relationModels.size() > 0) { - for (DesignerShapeRelationModel relationModel : relationModels) { - relationValue.put(relationModel.getRelationShapeId(), relationModel.getRelationShapeText()); - } - } - //获取文件属性 - JSONArray dataParams = new JSONArray(); //标签数据 - JSONObject labelData1 = new JSONObject(); - labelData1.put("type", "string"); - JSONObject stringData = new JSONObject(); - int level = model.getLevel(); - if (level > 2) { - level = level - 2; - stringData.put("PLNAMEL" + level, model.getName()); - stringData.put("PLNO" + level, model.getNo()); - String plrp = model.getOwnerUser(); - if (!UtilString.isEmpty(plrp)) { - plrp = relationValue.containsKey(plrp) ? relationValue.get(plrp) : ""; - } - stringData.put("PLRP" + level, plrp); - PALRepositoryModel parentModel = PALRepositoryCache.getCache().get(model.getParentId()); - while (level > 1 && parentModel != null) { - level --; - stringData.put("PLNAMEL" + level, parentModel.getName()); - stringData.put("PLNOL" + level, parentModel.getNo()); - String parentPlrp = parentModel.getOwnerUser(); - if (!UtilString.isEmpty(plrp)) { - parentPlrp = relationValue.containsKey(parentPlrp) ? relationValue.get(parentPlrp) : ""; - } - stringData.put("PLRPL" + level, parentPlrp); - parentModel = PALRepositoryCache.getCache().get(parentModel.getParentId()); - } - } - for (int i = 0; i <= 4; i++) { - if (!stringData.containsKey("PLNAMEL" + i)) { - stringData.put("PLNAMEL" + i, ""); - } - if (!stringData.containsKey("PLNO" + i)) { - stringData.put("PLNOL" + i, ""); - } - if (!stringData.containsKey("PLRP" + i)) { - stringData.put("PLRPL" + i, ""); - } - } - - stringData.put("VERSION", model.getVersion()); - stringData.put("PLDESC", model.getDesc()); - //模型和节点的关联属性 - - String plrd = model.getOwnerDept(); - if (!UtilString.isEmpty(plrd)) { - plrd = relationValue.containsKey(plrd) ? relationValue.get(plrd) : ""; - } - stringData.put("PLRD", plrd); - String plrp = model.getOwnerUser(); - if (!UtilString.isEmpty(plrp)) { - plrp = relationValue.containsKey(plrp) ? relationValue.get(plrp) : ""; - } - stringData.put("PLRP", plrp); - stringData.put("PLINPUT", model.getInput()); - stringData.put("PLOUTPUT", model.getOutput()); - //文件扩展属性 - String json = CoePropertyUtil.getPropertyValue(model.getId() + "_attr"); - JSONObject extendAttr = new JSONObject(); - if (json != null && !"".equals(json) && !"null".equals(json)) { - JSONArray jsonArray = JSONArray.parseArray(json); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject object = jsonArray.getJSONObject(i); - extendAttr.put(object.getString("id"), object.get("value")); - String attributeValue = object.containsKey("value") ? object.get("value").toString() : ""; - if (attributeValue.startsWith("{")) { - attributeValue = JSONObject.parseObject(attributeValue).getString("relationShapeText"); - } - stringData.put(object.getString("id").toUpperCase(), attributeValue); - } - } - //文件的扩展属性 - List repositoryPropertyList = PALRepositoryPropertyCache.getPropertyByPlId(model.getId()); - if (repositoryPropertyList != null && repositoryPropertyList.size() > 0) { - for (PALRepositoryPropertyModel repositoryPropertyModel : repositoryPropertyList) { - extendAttr.put(repositoryPropertyModel.getPropertyId(), repositoryPropertyModel.getPropertyValue()); - String attributeValue = repositoryPropertyModel.getPropertyValue(); - if (attributeValue.startsWith("{")) { - attributeValue = JSONObject.parseObject(attributeValue).getString("relationShapeText"); - } - stringData.put(repositoryPropertyModel.getPropertyId().toUpperCase(), attributeValue); - } - } - List reportNameLabels = OutputExcelUtil.string2label(reportName); - String reportNameValue = reportName; - if (reportNameLabels.size() > 0) { - reportNameValue = OutputExcelUtil.label2value(model, extendAttr, null, reportName); - - } - reportNameValue = reportNameValue.replaceAll(OutputExcelUtil.FILENAMEREGX, ""); - if (reportNameValue.length() > 255) { - reportNameValue = reportNameValue.substring(0, 255); - } - String fileName = ""; //生成的文件名 - if (indexMap.containsKey(reportNameValue)) { - int index = indexMap.get(reportNameValue); - index++; - log.info("得到word名称为:" + reportNameValue + "(" + index + ")"); - fileName = reportNameValue + "(" + index + ")"; - indexMap.put(reportNameValue, index); - } else { - log.info("得到word名称为:" + reportNameValue); - fileName = reportNameValue; - indexMap.put(reportNameValue, 1); - } - - labelData1.put("data", stringData); - dataParams.add(labelData1); - - //获取流程模型中的节点以及节点属性(只取有编号的) - List> repositoryFileElements = CoeDesignerUtil.getShapeMessageJson(repositoryId); //流程文件内容 - if (repositoryFileElements != null) { - JSONObject labelData2 = new JSONObject(); - labelData2.put("type", "table"); - JSONArray tableData = new JSONArray(); - - //获取节点的number属性 - for (Map shape : repositoryFileElements) { - if (!shape.containsKey("number")) { - JSONObject dataAttributes = (JSONObject)shape.get("attributes"); - if (dataAttributes != null && dataAttributes.containsKey("attributesJsonArray")) { - JSONArray privateAttributes = dataAttributes.getJSONArray("attributesJsonArray"); - for (int index = 0; index < privateAttributes.size(); index++) { - JSONObject privateAttribute = privateAttributes.getJSONObject(index); - if (privateAttribute.containsKey("id") && privateAttribute.getString("id").equals("number")) { - shape.put("number", privateAttribute.getString("value")); - } - } - } - } - } - OutputWordUtil.orderByNumber(repositoryFileElements); - - for (Map shape : repositoryFileElements) { - String number = shape.containsKey("number") ? shape.get("number").toString() : ""; - if (UtilString.isEmpty(number)) { - continue; - } - - JSONObject object = new JSONObject(); - object.put("T-NUMBER", number); - object.put("T-NAME", shape.get("text").toString()); - - JSONObject dataAttributes = (JSONObject)shape.get("attributes"); - if (dataAttributes != null && dataAttributes.containsKey("attributesJsonArray")) { - object.put("T-DESC", dataAttributes.getString("shapeDesc")); - JSONArray privateAttributes = dataAttributes.getJSONArray("attributesJsonArray"); - for (int index = 0; index < privateAttributes.size(); index++) { - JSONObject privateAttribute = privateAttributes.getJSONObject(index); - if (!privateAttribute.containsKey("value")) { - continue; - } - String value = privateAttribute.getString("value"); - if (value.startsWith("[")) { - value = value.replace("[", "").replace("]", ""); - String[] values = value.split(","); - StringBuilder stmp = new StringBuilder(); - for (String tmp : values) { - if (relationValue.containsKey(tmp)) { - stmp.append(relationValue.get(tmp)).append(","); - } else { - stmp.append(tmp).append(","); - } - } - value = stmp.toString(); - if (value.endsWith(",")) { - value = value.substring(0, value.length() - 1); - } - } - object.put("T-" + privateAttribute.getString("id").toUpperCase(), value); - } - } - tableData.add(object); - } - labelData2.put("data", tableData); - dataParams.add(labelData2); - } - - //流程图 - JSONObject labelData3 = new JSONObject(); - labelData3.put("type", "image"); - JSONObject image = new JSONObject(); - image.put("PL_DIAGRAM", model.getFilePath() + model.getId() + ".png"); - labelData3.put("data", image); - dataParams.add(labelData3); - - //版本table - List versionList = new PALRepository().getAllRepositoryByVersionId(model.getVersionId()); - JSONObject labelData4 = new JSONObject(); - labelData4.put("type", "table"); - JSONArray tableData4 = new JSONArray(); - for (PALRepositoryModel versionModel : versionList) { - JSONObject labelData4Object = new JSONObject(); - String attrjson = CoePropertyUtil.getPropertyValue(versionModel.getId() + "_attr"); - labelData4Object.put("T-VERSION", versionModel.getVersion()); - if (!UtilString.isEmpty(attrjson)) { - JSONArray jsonArray = JSONArray.parseArray(attrjson); - for (int i = 0; i < jsonArray.size(); i++) { - JSONObject object = jsonArray.getJSONObject(i); - extendAttr.put(object.getString("id"), object.get("value")); - String attributeValue = object.containsKey("value") ? object.get("value").toString() : ""; - if (attributeValue.startsWith("{")) { - attributeValue = JSONObject.parseObject(attributeValue).getString("relationShapeText"); - } - labelData4Object.put("T-" + object.getString("id").toUpperCase(), attributeValue); - } - } - tableData4.add(labelData4Object); - } - labelData4.put("data", tableData4); - dataParams.add(labelData4); - - String aslp = "aslp://com.actionsoft.apps.addons.docgenerator/documentGenerate"; - Map params = new HashMap(); - params.put("sid", dcContext.getSession().getSessionId()); - params.put("gtype", "word"); - params.put("repositoryName", dcContext.getRepositoryName()); - params.put("groupValue", dcContext.getGroupValue()); - params.put("fileValue", dcContext.getFileValue()); - params.put("fileName", fileName); - params.put("tempId", tempId); - params.put("labelData", dataParams); - - //流程附件信息 - StringBuilder upfileString = new StringBuilder(); - List upfiles = new UpFileDao().searchByRepositoryId(model.getId(), "f"); - if (upfiles != null && upfiles.size() > 0) { - for (UpfileModel upfile : upfiles) { - DCContext dcContextFile = getDCContext( UserContext.fromSessionId(dcContext.getSession().getSessionId()), upfile); - if (dcContextFile != null) { - upfileString.append(dcContextFile.getPath() + upfile.getFileName()).append(","); - } - } - } - if (upfileString.length() > 0) { - String upfilesData = upfileString.toString(); - if (upfilesData.endsWith(",")) { - upfilesData = upfilesData.substring(0, upfilesData.length() - 1); - } - params.put("upfiles", upfilesData); - } - - AppAPI appAPI = SDK.getAppAPI(); - ResponseObject ro = SDK.getAppAPI().callASLP(appAPI.getAppContext("com.awspaas.user.apps.coe.pal.output.bd"), aslp, params); - } - } - - private DCContext getDCContext(UserContext context, UpfileModel model) { - DCContext dcContext = null; - DCPluginProfile dcProfile = DCProfileManager.getDCProfile(CoEConstant.APP_ID, CoeFileConstant.COE_UPFILE); - if (dcProfile != null) { - if ("f".equals(model.getType())) {// 文件 - dcContext = new DCContext(context, dcProfile, CoEConstant.APP_ID,"file", model.getPl_uuid(), model.getFileName()); - } else {// 图形 - dcContext = new DCContext(context, dcProfile, CoEConstant.APP_ID, model.getPl_uuid(), model.getShape_uuid(), model.getFileName()); - } - } - return dcContext; - } -} diff --git a/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report4/Report4WizardOption.java b/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report4/Report4WizardOption.java deleted file mode 100644 index 1f06903c..00000000 --- a/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report4/Report4WizardOption.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.awspaas.apps.coe.pal.output.bd.report4; - -import com.actionsoft.bpms.commons.mvc.view.ActionWeb; -import com.actionsoft.bpms.server.UserContext; - -public class Report4WizardOption extends ActionWeb { - public Report4WizardOption(UserContext userContext) { - super(userContext); - } - - public Report4WizardOption() { - } - - /** - * 实现约定的getOption方法 - * - * @param teamId 小组Id - * @param wsId 资产库Id - * @param lang 语言 - * @param wizardJsonData 向导收集的Json参数(targetFiles、relationFiles...) - * @return 含有回调js的html片段 - */ - public String getOption(String teamId, String wsId, String lang, String wizardJsonData) { - return "hi! BD"; - } -} diff --git a/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report5/Report5Gener.java b/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report5/Report5Gener.java deleted file mode 100644 index d284871b..00000000 --- a/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report5/Report5Gener.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.awspaas.apps.coe.pal.output.bd.report5; - -import com.actionsoft.apps.coe.pal.pal.output.extend.GenerLogExd; -import com.actionsoft.apps.coe.pal.pal.output.model.OutputTaskModel; -import com.actionsoft.bpms.commons.mvc.view.ResponseObject; -import com.actionsoft.bpms.server.fs.DCContext; -import com.actionsoft.sdk.local.api.internal.PlatformAPIImpl; - -public class Report5Gener { - // 防止生成过程中,停用或卸载该app - public static boolean isRunning = false; - public static final Object _lock = new Object(); - GenerLogExd log = new GenerLogExd(); - public Report5Gener() { - } - - /** - * 生成文件 - * - * @param model OutputTaskModel对象 - * @param wizardJsonData 向导收集的Json参数(targetFiles、relationFiles、options...) - * @param dcContext 要生成报告的DC目录对象,已准备好 - * @return 将文件生成到output目录下,返回状态 - * - * @see PlatformAPIImpl#getDefaultLanguage() - * @see PlatformAPIImpl#getlanguages() - */ - public ResponseObject execute(OutputTaskModel model, String wizardJsonData, DCContext dcContext) { - - return ResponseObject.newOkResponse().put("logs", log.logs()); - } - -} diff --git a/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report5/Report5WizardOption.java b/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report5/Report5WizardOption.java deleted file mode 100644 index 75f6a243..00000000 --- a/com.awspaas.user.apps.coe.pal.output.bd/src/com/awspaas/apps/coe/pal/output/bd/report5/Report5WizardOption.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.awspaas.apps.coe.pal.output.bd.report5; - -import com.actionsoft.bpms.commons.mvc.view.ActionWeb; -import com.actionsoft.bpms.server.UserContext; - -public class Report5WizardOption extends ActionWeb { - public Report5WizardOption(UserContext userContext) { - super(userContext); - } - - public Report5WizardOption() { - } - - /** - * 实现约定的getOption方法 - * - * @param teamId 小组Id - * @param wsId 资产库Id - * @param lang 语言 - * @param wizardJsonData 向导收集的Json参数(targetFiles、relationFiles...) - * @return 含有回调js的html片段 - */ - public String getOption(String teamId, String wsId, String lang, String wizardJsonData) { - return "hi! BD"; - } -} - diff --git a/com.awspaas.user.apps.coe.pal.output.bd/表单-手册2.doc b/com.awspaas.user.apps.coe.pal.output.bd/表单-手册2.doc new file mode 100644 index 0000000000000000000000000000000000000000..67df07b903422da2c859d6ddc38791005c36f230 GIT binary patch literal 49664 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 literal 0 HcmV?d00001 diff --git a/com.awspaas.user.apps.coe.pal.output.bd/表单-手册2.xml b/com.awspaas.user.apps.coe.pal.output.bd/表单-手册2.xml new file mode 100644 index 00000000..ce33138d --- /dev/null +++ b/com.awspaas.user.apps.coe.pal.output.bd/表单-手册2.xml @@ -0,0 +1,3563 @@ + + + + + + 洪继程 + Microsoft Office User + 2 + 0 + 2022-09-15T09:28:00Z + 2022-09-15T09:28:00Z + 3 + 130 + 743 + 6 + 1 + 872 + 16 + + + 2052-11.8.2.8053 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 内蒙古伊利实业集团股份有限公司 + + + + + + + + + + + + + + + 流程 + + + + + + + + + + 制度 + + + + + + + + + + 类文件 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 文件编码: + + + + + + + + + + ${pl_form_number} + + + + + + + + + + + + ─────────────────────────────────────────────────── + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${repository_name} + + + + + + + + + + 表单文件 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 内蒙古伊利实业集团股份有限公司 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 +y7fdOgAAAABJRU5ErkJggk== + + + + + + + + + + + + + + + + + + + + ─────────────────────────────────────────────────── + + + + + + + + + + ─────────────────────────────────────────────────── + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 以上信息为伊利公司所有,未经允许不得外传 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PAGE + + + + + + + + + + + + + + + + + + + + 9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 基本信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 文件名称 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${repository_name} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 文件编码 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${pl_form_number} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 流程架构 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + L1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${pl_Process_Architecture_L1} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 版 本 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${pl_P_versions} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + L2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${pl_Process_Architecture_L2} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 生效日期 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${pl_Drafted_and_revised_date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + L3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${pl_Process_Architecture_L3} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 适用范围 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${pl_form_Scope_application} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + L4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${repository_name} + + + + + + + + + + + + + + + + + + + + + 修订记录 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 版本 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 拟制/修订单位 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 拟制/修订人 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 拟制/修订日期 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 审核人 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 复核人 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 审批人 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 修订内容及理由 + + + + + <#list version_history_table as table6> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${table6.P_versions} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${table6.Issuing_department} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${table6.Drafted_and_revised_by} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${table6.Drafted_and_revised_date} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${table6.auditor} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${table6.reviewer} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${table6.approver} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${table6.Contents_and_reasons_for_revision} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 附件 + + + + <#if (file_table_count ==0 )> + + + + + + + + + + + + + <#else> + <#list file_table as table4> + + + + + + + + + + + + + + + + ${table4.file_name} + + + + + + + + + + + + + + + \ No newline at end of file