From 14fe4798ce3c5ba29884dda3a424b3bfccf59dfd Mon Sep 17 00:00:00 2001 From: yang chen Date: Mon, 8 Dec 2025 17:54:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(biz):=20=E4=BC=98=E5=8C=96=E5=B7=A5?= =?UTF-8?q?=E5=8D=95=E6=95=B0=E6=8D=AE=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 引入Hutool JSON工具类处理JSON数据 - 简化导入语句,使用通配符导入java.util包 - 移除handleActionContent方法,直接使用原始数据 - 新增对relateSubSopSchema和relateSubProcessContent字段的JSON解析逻辑 - 重构SQL查询语句,调整字段映射关系 - 修改handleCheckContent方法支持JSONArray格式数据处理 - 新增handleSopSchema和handleRelateProcessContent方法处理JSON数组 - 实现handleProcessContent方法关联处理检查内容和流程内容 - 优化代码结构,提升数据处理准确性 --- .../module/biz/job/AlibabaWorkOrderJob.java | 673 ++++++++++-------- 1 file changed, 364 insertions(+), 309 deletions(-) diff --git a/jeelowcode-module/jeelowcode-module-biz/src/main/java/com/jeelowcode/module/biz/job/AlibabaWorkOrderJob.java b/jeelowcode-module/jeelowcode-module-biz/src/main/java/com/jeelowcode/module/biz/job/AlibabaWorkOrderJob.java index 190acba..16db8fb 100644 --- a/jeelowcode-module/jeelowcode-module-biz/src/main/java/com/jeelowcode/module/biz/job/AlibabaWorkOrderJob.java +++ b/jeelowcode-module/jeelowcode-module-biz/src/main/java/com/jeelowcode/module/biz/job/AlibabaWorkOrderJob.java @@ -3,6 +3,9 @@ package com.jeelowcode.module.biz.job; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.db.sql.SqlUtil; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.baomidou.dynamic.datasource.DynamicRoutingDataSource; import com.jeelowcode.module.biz.entity.AlibabaWorkOrder; import com.jeelowcode.module.biz.service.IAlibabaWorkOrderService; @@ -18,12 +21,9 @@ import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static com.jeelowcode.tool.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; @@ -87,7 +87,7 @@ public class AlibabaWorkOrderJob implements JobHandler { workOrder.setCheckPersonName(resultSet.getString("checkPersonName")); workOrder.setCheckTime(resultSet.getObject("checkTime", LocalDateTime.class)); workOrder.setCheckQuestion(resultSet.getString("checkQuestion")); - workOrder.setCorrectAction(handleActionContent(resultSet.getString("correctAction"))); + workOrder.setCorrectAction(resultSet.getString("correctAction")); workOrder.setCorrectPersonId(resultSet.getString("correctPersonId")); workOrder.setCorrectPersonName(resultSet.getString("correctPersonName")); workOrder.setWorkOrderLevel(resultSet.getString("workOrderLevel")); @@ -98,6 +98,28 @@ public class AlibabaWorkOrderJob implements JobHandler { workOrder.setGmtSubModified(resultSet.getObject("gmtSubModified", LocalDateTime.class)); workOrder.setGmtRelateModified(resultSet.getObject("gmtRelateModified", LocalDateTime.class)); workOrder.setGmtRelateSubModified(resultSet.getObject("gmtRelateSubModified", LocalDateTime.class)); + // 这两个数据还是json,需要解析到属性里 + String relateSubSopSchema = resultSet.getString("relateSubSopSchema"); + String relateSubProcessContent = resultSet.getString("relateSubProcessContent"); + if (JSONUtil.isTypeJSONArray(relateSubSopSchema) && JSONUtil.isTypeJSONArray(relateSubProcessContent)) { + JSONArray sopSchemaArray = handleSopSchema(relateSubSopSchema); + JSONArray processContentArray = handleRelateProcessContent(relateSubProcessContent); + List correctList = handleProcessContent(sopSchemaArray, processContentArray); + // 将取出来的数据添加到整改措施中 + if (StrUtil.isEmpty(workOrder.getCorrectAction())) { + workOrder.setCorrectAction(StrUtil.join("\n", correctList)); + } else { + workOrder.setCorrectAction(workOrder.getCorrectAction() + "\n" + StrUtil.join("\n", correctList)); + } + } + String checkContent = resultSet.getString("checkContent"); + String processContent = resultSet.getString("processContent"); + if (JSONUtil.isTypeJSONArray(checkContent) && JSONUtil.isTypeJSONArray(processContent)) { + JSONArray checkContentArray = handleSopSchema(checkContent); + JSONArray processContentArray = new JSONArray(processContent); + List checkQuestionList = handleProcessContent(checkContentArray, processContentArray); + workOrder.setCheckQuestion(StrUtil.join("\n", checkQuestionList)); + } workOrderList.add(workOrder); } @@ -122,313 +144,308 @@ public class AlibabaWorkOrderJob implements JobHandler { */ public static String buildSql(String params, LocalDateTime startTime, LocalDateTime endTime) { StringBuilder sqlBuilder = new StringBuilder(); - sqlBuilder.append("SELECT " + - " mwoe.ID AS \"id\", " + - " mwoe.WORK_ORDER_ID AS \"workOrderId\", " + - " mwoe.CAMPUS_ID AS \"campusId\", " + - " mwoe.CAMPUS_NAME AS \"campusName\", " + - " mwoe.REMARK AS \"checkArea\", " + - " mwoe.OBJ_NAME AS \"checkItem\", " + - " mwoe.SUB_SOP_SCHEMA AS \"checkContent\", " + - " mwoe.CREATOR_ID AS \"checkPersonId\", " + - " mwoe.CREATOR_NAME AS \"checkPersonName\", " + - " mwoe.GMT_CREATE AS \"checkTime\", " + - " mwoe.PROCESS_CONTENT AS \"checkQuestion\", " + - " CONCAT_WS(',', rwoa.PROCESS_CONTENT, rwoa.SUB_SOP_SCHEMA) AS \"correctAction\", " + - " rwoa.PROCESSOR_ID AS \"correctPersonId\", " + - " rwoa.PROCESSOR_NAME AS \"correctPersonName\", " + - " mwoe.\"LEVEL\" AS \"workOrderLevel\", " + - " rwoa.RESERVED_TIME3 AS \"correctDeadLine\", " + - " rwoa.CONFIRM_PERSON_ID AS \"confirmPersonId\", " + - " rwoa.CONFIRM_PERSON_NAME AS \"confirmPersonName\", " + - " mwoe.GMT_MODIFIED AS \"gmtModified\", " + - " mwoe.SUB_GMT_MODIFIED AS \"gmtSubModified\", " + - " rwoa.GMT_MODIFIED AS \"gmtRelateModified\", " + - " rwoa.SUB_GMT_MODIFIED AS \"gmtRelateSubModified\" " + - "FROM " + + sqlBuilder.append("select " + + " mwoe.\"ID\" as \"id\", " + + " mwoe.\"WORK_ORDER_ID\" as \"workOrderId\", " + + " mwoe.\"CAMPUS_ID\" as \"campusId\", " + + " mwoe.\"CAMPUS_NAME\" as \"campusName\", " + + " mwoe.\"REMARK\" as \"checkArea\", " + + " mwoe.\"OBJ_NAME\" as \"checkItem\", " + + " mwoe.\"SUB_SOP_SCHEMA\" as \"checkContent\", " + + " mwoe.\"SUB_PROCESS_CONTENT\" as \"processContent\", " + + " mwoe.\"CREATOR_ID\" as \"checkPersonId\", " + + " mwoe.\"CREATOR_NAME\" as \"checkPersonName\", " + + " mwoe.\"GMT_CREATE\" as \"checkTime\", " + + " mwoe.\"PROCESS_CONTENT\" as \"checkQuestion\", " + + " mwoe.\"LEVEL\" as \"workOrderLevel\", " + + " concat_ws(',', rwoa.\"RELATE_PROCESS_CONTENT\") as \"correctAction\", " + + " rwoa.\"RELATE_PROCESSOR_ID\" as \"correctPersonId\", " + + " rwoa.\"RELATE_PROCESSOR_NAME\" as \"correctPersonName\", " + + " rwoa.\"RELATE_CONFIRM_PERSON_ID\" as \"confirmPersonId\", " + + " rwoa.\"RELATE_CONFIRM_PERSON_NAME\" as \"confirmPersonName\", " + + " rwoa.\"RELATE_RESERVED_TIME3\" as \"correctDeadLine\", " + + " rwoa.\"RELATE_SUB_SOP_SCHEMA\" as \"relateSubSopSchema\", " + + " rwoa.\"RELATE_SUB_PROCESS_CONTENT\" as \"relateSubProcessContent\", " + + " mwoe.\"GMT_MODIFIED\" as \"gmtModified\", " + + " mwoe.\"SUB_GMT_MODIFIED\" as \"gmtSubModified\", " + + " rwoa.\"RELATE_GMT_MODIFIED\" as \"gmtRelateModified\", " + + " rwoa.\"RELATE_SUB_GMT_MODIFIED\" as \"gmtRelateSubModified\" " + + "from " + " ( " + - " SELECT " + + " select " + " mwo.*, " + - " swo.SOP_SCHEMA AS SUB_SOP_SCHEMA, " + - " swo.PROCESS_CONTENT AS SUB_PROCESS_CONTENT, " + - " swo.GMT_MODIFIED AS SUB_GMT_MODIFIED, " + - " swo.OBJ_NAME AS OBJ_NAME " + - " FROM " + + " swo.\"SUB_SOP_SCHEMA\", " + + " swo.\"SUB_PROCESS_CONTENT\", " + + " swo.\"OBJ_NAME\", " + + " swo.\"SUB_GMT_MODIFIED\" " + + " from " + " ( " + - " SELECT " + - " wo.ID, " + - " wo.WORK_ORDER_ID, " + - " wo.CAMPUS_ID, " + - " c.NAME AS CAMPUS_NAME, " + - " wo.REMARK, " + - " wo.CREATOR_ID, " + - " wo.CREATOR_NAME, " + - " wo.GMT_CREATE, " + - " wo.GMT_MODIFIED, " + - " wo.RESERVED_TIME3, " + - " CASE " + - " WHEN wo.\"LEVEL\" = 'P0' THEN '重大' " + - " ELSE '一般' " + - " END AS \"LEVEL\", " + - " wo.CONFIRM_PERSON_ID, " + - " wo.CONFIRM_PERSON_NAME, " + - " wo.TENANT, " + - " ml.PROCESSOR_ID, " + - " ml.PROCESSOR_NAME, " + - " JSON_VALUE(ml.CONTENT, '$.processContent') AS PROCESS_CONTENT " + - " FROM " + + " select " + + " wo.\"ID\", " + + " wo.\"WORK_ORDER_ID\", " + + " wo.\"CAMPUS_ID\", " + + " c.\"NAME\" as \"CAMPUS_NAME\", " + + " wo.\"REMARK\", " + + " wo.\"CREATOR_ID\", " + + " wo.\"CREATOR_NAME\", " + + " wo.\"GMT_CREATE\", " + + " wo.\"GMT_MODIFIED\", " + + " wo.\"RESERVED_TIME3\", " + + " case " + + " when wo.\"LEVEL\" = 'P0' then '重大' " + + " else '一般' " + + " end as \"LEVEL\", " + + " wo.\"CONFIRM_PERSON_ID\", " + + " wo.\"CONFIRM_PERSON_NAME\", " + + " wo.\"TENANT\", " + + " ml.\"PROCESSOR_ID\", " + + " ml.\"PROCESSOR_NAME\", " + + " json_value(ml.\"CONTENT\", '$.processedContent') as \"PROCESS_CONTENT\" " + + " from " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" wo " + - " LEFT JOIN ( " + - " SELECT " + + " left join ( " + + " select " + " * " + - " FROM " + + " from " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER_LOG\" wol " + - " WHERE " + - " wol.OPERATE_NAME = '完成' " + - " ) ml ON wo.WORK_ORDER_ID = ml.WORK_ORDER_ID " + - " LEFT JOIN \"XCAMPUS_SPACECENTER\".\"CAMPUS\" c ON c.UUID = wo.CAMPUS_ID " + - " WHERE " + - " wo.PARENT_ID IS NULL " + - " AND wo.ORDER_TYPE_PATH_NAME = '风险隐患' " + - " AND wo.TENANT = '1821414781587267584' " + - " AND EXISTS ( " + - " SELECT " + + " where " + + " wol.\"OPERATE_NAME\" = '完成' " + + " ) ml on wo.\"WORK_ORDER_ID\" = ml.\"WORK_ORDER_ID\" " + + " left join \"XCAMPUS_SPACECENTER\".\"CAMPUS\" c on c.\"UUID\" = wo.\"CAMPUS_ID\" " + + " where " + + " wo.\"PARENT_ID\" is null " + + " AND wo.\"ORDER_TYPE_PATH_NAME\" = '风险隐患' " + + " and wo.\"TENANT\" = '1821414781587267584' " + + " and exists ( " + + " select " + " 1 " + - " FROM " + + " from " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" wo2 " + - " WHERE " + - " wo.WORK_ORDER_ID = wo2.WORK_ORDER_ID " + - " AND wo2.RELATE_WORK_ORDER_ID IS NULL " + + " where " + + " wo.\"WORK_ORDER_ID\" = wo2.\"WORK_ORDER_ID\" " + + " and wo2.\"RELATE_WORK_ORDER_ID\" is null " + " ) " + " ) mwo " + - " LEFT JOIN ( " + - " SELECT " + - " wo.PARENT_ID, " + - " LISTAGG( " + - " REPLACE( " + - " REPLACE( " + - " JSON_QUERY( " + - " wos.SOP_SCHEMA, " + - " '$[0].sopSchema.componentsTree[0].children[0].children[0].children[*].props.label' WITH CONDITIONAL WRAPPER " + - " ), " + - " '[', " + - " '' " + + " left join ( " + + " select " + + " wo.\"PARENT_ID\", " + + " concat( " + + " '[', " + + " listagg( " + + " json_query( " + + " wos.\"SOP_SCHEMA\", " + + " '$[0].sopSchema.componentsTree[0].children[0].children[0].children[*].props' returning varchar(10000) with conditional wrapper " + " ), " + - " ']', " + - " '' " + + " ',' " + + " ) within group ( " + + " order by " + + " wo.\"WORK_ORDER_ID\" " + " ), " + - " ',' " + - " ) WITHIN GROUP ( " + - " ORDER BY " + - " wo.WORK_ORDER_ID " + - " ) AS SOP_SCHEMA, " + - " LISTAGG( " + - " REPLACE( " + - " REPLACE( " + - " JSON_QUERY(sl.CONTENT, '$.sopInfo.*' WITH CONDITIONAL WRAPPER), " + - " '[', " + - " '' " + - " ), " + - " ']', " + - " '' " + + " ']' " + + " ) as \"SUB_SOP_SCHEMA\", " + + " concat( " + + " '[', " + + " listagg( " + + " json_query(sl.\"CONTENT\", '$.sopInfo' with conditional wrapper), " + + " ',' " + + " ) within group ( " + + " order by " + + " wo.\"WORK_ORDER_ID\" " + " ), " + - " ',' " + - " ) WITHIN GROUP ( " + - " ORDER BY " + - " wo.WORK_ORDER_ID " + - " ) AS PROCESS_CONTENT, " + - " LISTAGG(OBJ_NAME, ',') WITHIN GROUP ( " + - " ORDER BY " + - " wo.WORK_ORDER_ID " + - " ) AS OBJ_NAME, " + - " MAX(wo.GMT_MODIFIED) AS GMT_MODIFIED " + - " FROM " + + " ']' " + + " ) as \"SUB_PROCESS_CONTENT\", " + + " listagg(wo.\"OBJ_NAME\", ',') within group ( " + + " order by " + + " wo.\"WORK_ORDER_ID\" " + + " ) as \"OBJ_NAME\", " + + " max(wo.\"GMT_MODIFIED\") as \"SUB_GMT_MODIFIED\" " + + " from " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" wo " + - " LEFT JOIN ( " + - " SELECT " + + " left join ( " + + " select " + " * " + - " FROM " + + " from " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER_LOG\" wol " + - " WHERE " + - " wol.OPERATE_NAME = '处理' " + - " ) sl ON wo.WORK_ORDER_ID = sl.WORK_ORDER_ID " + - " LEFT JOIN \"XCAMPUS_WORKORDER\".\"WORK_ORDER_SCHEMA\" wos ON wo.WORK_ORDER_ID = wos.WORK_ORDER_ID " + - " WHERE " + - " wo.PARENT_ID IN ( " + - " SELECT " + - " WORK_ORDER_ID " + - " FROM " + + " where " + + " wol.\"OPERATE_NAME\" = '处理' " + + " ) sl on wo.\"WORK_ORDER_ID\" = sl.\"WORK_ORDER_ID\" " + + " left join \"XCAMPUS_WORKORDER\".\"WORK_ORDER_SCHEMA\" wos on wo.\"WORK_ORDER_ID\" = wos.\"WORK_ORDER_ID\" " + + " where " + + " wo.\"PARENT_ID\" in ( " + + " select " + + " \"WORK_ORDER_ID\" " + + " from " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" " + - " WHERE " + - " ORDER_TYPE_PATH_NAME = '风险隐患' " + + " where " + + " \"ORDER_TYPE_PATH_NAME\" = '风险隐患' " + " ) " + - " AND wo.ORDER_TYPE_PATH_NAME = '系统默认子单类型' " + - " AND wo.TENANT = '1821414781587267584' " + - " GROUP BY " + - " wo.PARENT_ID " + - " ) swo ON mwo.WORK_ORDER_ID = swo.PARENT_ID " + + " and wo.\"ORDER_TYPE_PATH_NAME\" = '系统默认子单类型' " + + " and wo.\"TENANT\" = '1821414781587267584' " + + " group by " + + " wo.\"PARENT_ID\" " + + " ) swo on mwo.\"WORK_ORDER_ID\" = swo.\"PARENT_ID\" " + " ) mwoe " + - " LEFT JOIN ( " + - " SELECT " + - " rwoe.RELATE_WORK_ORDER_ID, " + - " LISTAGG(rwoe.PROCESS_CONTENT, ',') WITHIN GROUP ( " + - " ORDER BY " + - " rwoe.WORK_ORDER_ID " + - " ) AS PROCESS_CONTENT, " + - " LISTAGG(rwoe.SUB_PROCESS_CONTENT, ',') WITHIN GROUP ( " + - " ORDER BY " + - " rwoe.WORK_ORDER_ID " + - " ) AS SUB_PROCESS_CONTENT, " + - " LISTAGG(rwoe.SUB_SOP_SCHEMA, ',') WITHIN GROUP ( " + - " ORDER BY " + - " rwoe.WORK_ORDER_ID " + - " ) AS SUB_SOP_SCHEMA, " + - " LISTAGG(rwoe.PROCESSOR_ID, ',') WITHIN GROUP ( " + - " ORDER BY " + - " rwoe.WORK_ORDER_ID " + - " ) AS PROCESSOR_ID, " + - " LISTAGG(rwoe.PROCESSOR_NAME, ',') WITHIN GROUP ( " + - " ORDER BY " + - " rwoe.WORK_ORDER_ID " + - " ) AS PROCESSOR_NAME, " + - " LISTAGG(rwoe.CONFIRM_PERSON_ID, ',') WITHIN GROUP ( " + - " ORDER BY " + - " rwoe.WORK_ORDER_ID " + - " ) AS CONFIRM_PERSON_ID, " + - " LISTAGG(rwoe.CONFIRM_PERSON_NAME, ',') WITHIN GROUP ( " + - " ORDER BY " + - " rwoe.WORK_ORDER_ID " + - " ) AS CONFIRM_PERSON_NAME, " + - " MAX(rwoe.RESERVED_TIME3) AS RESERVED_TIME3, " + - " MAX(rwoe.GMT_MODIFIED) AS GMT_MODIFIED, " + - " MAX(rwoe.SUB_GMT_MODIFIED) AS SUB_GMT_MODIFIED " + - " FROM " + + " left join ( " + + " select " + + " rwoe.\"RELATE_WORK_ORDER_ID\", " + + " listagg(rwoe.\"PROCESS_CONTENT\", ',') within group ( " + + " order by " + + " rwoe.\"WORK_ORDER_ID\" " + + " ) as \"RELATE_PROCESS_CONTENT\", " + + " concat( " + + " '[', " + + " listagg(rwoe.\"SUB_PROCESS_CONTENT\", ',') within group ( " + + " order by " + + " rwoe.\"WORK_ORDER_ID\" " + + " ), " + + " ']' " + + " ) as \"RELATE_SUB_PROCESS_CONTENT\", " + + " concat( " + + " '[', " + + " listagg(rwoe.\"SUB_SOP_SCHEMA\", ',') within group ( " + + " order by " + + " rwoe.\"WORK_ORDER_ID\" " + + " ), " + + " ']' " + + " ) as \"RELATE_SUB_SOP_SCHEMA\", " + + " listagg(rwoe.\"PROCESSOR_ID\", ',') within group ( " + + " order by " + + " rwoe.\"WORK_ORDER_ID\" " + + " ) as \"RELATE_PROCESSOR_ID\", " + + " listagg(rwoe.\"PROCESSOR_NAME\", ',') within group ( " + + " order by " + + " rwoe.\"WORK_ORDER_ID\" " + + " ) as \"RELATE_PROCESSOR_NAME\", " + + " listagg(rwoe.\"CONFIRM_PERSON_ID\", ',') within group ( " + + " order by " + + " rwoe.\"WORK_ORDER_ID\" " + + " ) as \"RELATE_CONFIRM_PERSON_ID\", " + + " listagg(rwoe.\"CONFIRM_PERSON_NAME\", ',') within group ( " + + " order by " + + " rwoe.\"WORK_ORDER_ID\" " + + " ) as \"RELATE_CONFIRM_PERSON_NAME\", " + + " max(rwoe.\"RESERVED_TIME3\") as \"RELATE_RESERVED_TIME3\", " + + " max(rwoe.\"GMT_MODIFIED\") as \"RELATE_GMT_MODIFIED\", " + + " max(rwoe.\"SUB_GMT_MODIFIED\") as \"RELATE_SUB_GMT_MODIFIED\" " + + " from " + " ( " + - " SELECT " + + " select " + " rwo.*, " + - " swo.SOP_SCHEMA AS SUB_SOP_SCHEMA, " + - " swo.PROCESS_CONTENT AS SUB_PROCESS_CONTENT, " + - " swo.GMT_MODIFIED AS SUB_GMT_MODIFIED, " + - " swo.OBJ_NAME AS OBJ_NAME " + - " FROM " + + " swo.\"SUB_SOP_SCHEMA\", " + + " swo.\"SUB_PROCESS_CONTENT\", " + + " swo.\"OBJ_NAME\", " + + " swo.\"SUB_GMT_MODIFIED\" " + + " from " + " ( " + - " SELECT " + - " wo.ID, " + - " wo.WORK_ORDER_ID, " + - " wo.CAMPUS_ID, " + - " c.NAME AS CAMPUS_NAME, " + - " wo.REMARK, " + - " wo.CREATOR_ID, " + - " wo.CREATOR_NAME, " + - " wo.GMT_CREATE, " + - " wo.GMT_MODIFIED, " + - " wo.RESERVED_TIME3, " + - " CASE " + - " WHEN wo.\"LEVEL\" = 'P0' THEN '重大' " + - " ELSE '一般' " + - " END AS \"LEVEL\", " + - " wo.CONFIRM_PERSON_ID, " + - " wo.CONFIRM_PERSON_NAME, " + - " wo.TENANT, " + - " wo.RELATE_WORK_ORDER_ID, " + - " ml.PROCESSOR_ID, " + - " ml.PROCESSOR_NAME, " + - " JSON_VALUE(ml.CONTENT, '$.processContent') AS PROCESS_CONTENT " + - " FROM " + + " select " + + " wo.\"ID\", " + + " wo.\"WORK_ORDER_ID\", " + + " wo.\"RELATE_WORK_ORDER_ID\", " + + " wo.\"CAMPUS_ID\", " + + " c.\"NAME\" as \"CAMPUS_NAME\", " + + " wo.\"REMARK\", " + + " wo.\"CREATOR_ID\", " + + " wo.\"CREATOR_NAME\", " + + " wo.\"GMT_CREATE\", " + + " wo.\"GMT_MODIFIED\", " + + " wo.\"RESERVED_TIME3\", " + + " case " + + " when wo.\"LEVEL\" = 'P0' then '重大' " + + " else '一般' " + + " end as \"LEVEL\", " + + " wo.\"CONFIRM_PERSON_ID\", " + + " wo.\"CONFIRM_PERSON_NAME\", " + + " wo.\"TENANT\", " + + " ml.\"PROCESSOR_ID\", " + + " ml.\"PROCESSOR_NAME\", " + + " json_value(ml.\"CONTENT\", '$.processedContent') as \"PROCESS_CONTENT\" " + + " from " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" wo " + - " LEFT JOIN ( " + - " SELECT " + + " left join ( " + + " select " + " * " + - " FROM " + + " from " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER_LOG\" wol " + - " WHERE " + - " wol.OPERATE_NAME = '完成' " + - " ) ml ON wo.WORK_ORDER_ID = ml.WORK_ORDER_ID " + - " LEFT JOIN \"XCAMPUS_SPACECENTER\".\"CAMPUS\" c ON c.UUID = wo.CAMPUS_ID " + - " WHERE " + - " wo.PARENT_ID IS NULL " + - " AND wo.ORDER_TYPE_PATH_NAME = '风险隐患' " + - " AND wo.TENANT = '1821414781587267584' " + - " AND EXISTS ( " + - " SELECT " + + " where " + + " wol.\"OPERATE_NAME\" = '完成' " + + " ) ml on wo.\"WORK_ORDER_ID\" = ml.\"WORK_ORDER_ID\" " + + " left join \"XCAMPUS_SPACECENTER\".\"CAMPUS\" c on c.\"UUID\" = wo.\"CAMPUS_ID\" " + + " where " + + " wo.\"PARENT_ID\" IS NULL " + + " AND wo.\"ORDER_TYPE_PATH_NAME\" = '风险隐患' " + + " and wo.\"TENANT\" = '1821414781587267584' " + + " and exists ( " + + " select " + " 1 " + - " FROM " + + " from " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" wo2 " + - " WHERE " + - " wo.WORK_ORDER_ID = wo2.WORK_ORDER_ID " + - " AND wo2.RELATE_WORK_ORDER_ID IS NOT NULL " + + " where " + + " wo.\"WORK_ORDER_ID\" = wo2.\"WORK_ORDER_ID\" " + + " and wo2.\"RELATE_WORK_ORDER_ID\" is not null " + " ) " + " ) rwo " + - " LEFT JOIN ( " + - " SELECT " + - " wo.PARENT_ID, " + - " LISTAGG( " + - " REPLACE( " + - " REPLACE( " + - " JSON_QUERY( " + - " wos.SOP_SCHEMA, " + - " '$[0].sopSchema.componentsTree[0].children[0].children[0].children[*].props.label' WITH CONDITIONAL WRAPPER " + - " ), " + - " '[', " + - " '' " + + " left join ( " + + " select " + + " wo.\"PARENT_ID\", " + + " concat( " + + " '[', " + + " listagg( " + + " json_query( " + + " wos.\"SOP_SCHEMA\", " + + " '$[0].sopSchema.componentsTree[0].children[0].children[0].children[*].props' returning varchar(10000) with conditional wrapper " + " ), " + - " ']', " + - " '' " + + " ',' " + + " ) within group ( " + + " order by " + + " wo.\"WORK_ORDER_ID\" " + " ), " + - " ',' " + - " ) WITHIN GROUP ( " + - " ORDER BY " + - " wo.WORK_ORDER_ID " + - " ) AS SOP_SCHEMA, " + - " LISTAGG( " + - " REPLACE( " + - " REPLACE( " + - " JSON_QUERY(sl.CONTENT, '$.sopInfo.*' WITH CONDITIONAL WRAPPER), " + - " '[', " + - " '' " + - " ), " + - " ']', " + - " '' " + + " ']' " + + " ) as \"SUB_SOP_SCHEMA\", " + + " concat( " + + " '[', " + + " listagg( " + + " json_query(sl.\"CONTENT\", '$.sopInfo' with conditional wrapper), " + + " ',' " + + " ) within group ( " + + " order by " + + " wo.\"WORK_ORDER_ID\" " + " ), " + - " ',' " + - " ) WITHIN GROUP ( " + - " ORDER BY " + - " wo.WORK_ORDER_ID " + - " ) AS PROCESS_CONTENT, " + - " LISTAGG(OBJ_NAME, ',') WITHIN GROUP ( " + - " ORDER BY " + - " wo.WORK_ORDER_ID " + - " ) AS OBJ_NAME, " + - " MAX(wo.GMT_MODIFIED) AS GMT_MODIFIED " + - " FROM " + + " ']' " + + " ) as \"SUB_PROCESS_CONTENT\", " + + " listagg(wo.\"OBJ_NAME\", ',') within group ( " + + " order by " + + " wo.\"WORK_ORDER_ID\" " + + " ) as \"OBJ_NAME\", " + + " max(wo.\"GMT_MODIFIED\") as \"SUB_GMT_MODIFIED\" " + + " from " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" wo " + - " LEFT JOIN ( " + - " SELECT " + + " left join ( " + + " select " + " * " + - " FROM " + + " from " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER_LOG\" wol " + - " WHERE " + - " wol.OPERATE_NAME = '处理' " + - " ) sl ON wo.WORK_ORDER_ID = sl.WORK_ORDER_ID " + - " LEFT JOIN \"XCAMPUS_WORKORDER\".\"WORK_ORDER_SCHEMA\" wos ON wo.WORK_ORDER_ID = wos.WORK_ORDER_ID " + - " WHERE " + - " wo.PARENT_ID IN ( " + - " SELECT " + - " WORK_ORDER_ID " + - " FROM " + + " where " + + " wol.\"OPERATE_NAME\" = '处理' " + + " ) sl on wo.\"WORK_ORDER_ID\" = sl.\"WORK_ORDER_ID\" " + + " left join \"XCAMPUS_WORKORDER\".\"WORK_ORDER_SCHEMA\" wos on wo.\"WORK_ORDER_ID\" = wos.\"WORK_ORDER_ID\" " + + " where " + + " wo.\"PARENT_ID\" in ( " + + " select " + + " \"WORK_ORDER_ID\" " + + " from " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" " + - " WHERE " + - " ORDER_TYPE_PATH_NAME = '风险隐患' " + + " where " + + " \"ORDER_TYPE_PATH_NAME\" = '风险隐患' " + " ) " + - " AND wo.ORDER_TYPE_PATH_NAME = '系统默认子单类型' " + - " AND wo.TENANT = '1821414781587267584' " + - " GROUP BY " + - " wo.PARENT_ID " + - " ) swo ON rwo.WORK_ORDER_ID = swo.PARENT_ID " + + " and wo.\"ORDER_TYPE_PATH_NAME\" = '系统默认子单类型' " + + " and wo.\"TENANT\" = '1821414781587267584' " + + " group by " + + " wo.\"PARENT_ID\" " + + " ) swo on rwo.\"WORK_ORDER_ID\" = swo.\"PARENT_ID\" " + " ) rwoe " + - " GROUP BY " + - " rwoe.RELATE_WORK_ORDER_ID " + - " ) rwoa ON mwoe.WORK_ORDER_ID = rwoa.RELATE_WORK_ORDER_ID "); + " group by " + + " rwoe.\"RELATE_WORK_ORDER_ID\" " + + " ) rwoa on mwoe.\"WORK_ORDER_ID\" = rwoa.\"RELATE_WORK_ORDER_ID\" "); // 如果时间参数存在并且合法,则添加时间条件 if (StrUtil.equals("1", params) && Objects.nonNull(startTime) && Objects.nonNull(endTime) && startTime.isBefore(endTime)) { String formattedStart = LocalDateTimeUtil.format(startTime, FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND); @@ -510,44 +527,82 @@ public class AlibabaWorkOrderJob implements JobHandler { * @param content 待处理的内容字符串 * @return 提取并格式化后的内容,每项占一行 */ - private String handleCheckContent(String content) { - if (StrUtil.isEmpty(content)) return StringUtils.EMPTY; - return extractQuotedContent(content); - } - - // 封装方法对整改措施也进行提取双引号之间的文本 - - /** - * 处理整改措施,提取双引号中的文本并格式化 - * - * @param content 待处理的内容字符串 - * @return 提取并格式化后的内容,每项占一行 - */ - private String handleActionContent(String content) { - return extractQuotedContent(content); + private static String handleCheckContent(String content) { + if (JSONUtil.isTypeJSONArray(content)) { + JSONArray nodeList = new JSONArray(); + JSONArray jsonArray = JSONUtil.parseArray(content); + jsonArray.forEach(nodeArray -> { + nodeList.addAll(new JSONArray(nodeArray)); + }); + List checkContentList = nodeList.stream() + .map(node -> new JSONObject(node).getStr("label")) + .collect(Collectors.toList()); + return StrUtil.join(" ", checkContentList); + } else { + return StringUtils.EMPTY; + } } /** - * 提取字符串中双引号包含的内容 + * 处理SOP模式字符串,将其转换为JSONArray格式 * - * @param content 待处理的内容字符串 - * @return 提取并格式化后的内容,每项占一行 + * @param sopSchema SOP模式字符串,应为合法的JSON数组格式 + * @return 解析并处理后的JSONArray对象 */ - private String extractQuotedContent(String content) { - // 使用正则表达式将双引号中的内容提取出来 - Pattern pattern = Pattern.compile(REGEX_EXTRACT_CONTENT); - Matcher matcher = pattern.matcher(content); - List extractedContents = new ArrayList<>(); - while (matcher.find()) { - String extractedContent = matcher.group(); - extractedContents.add(extractedContent); - } - // extractedContents每个元素作为一行,将所有行拼接成字符串 - StringBuilder sb = new StringBuilder(); - for (String extractedContent : extractedContents) { - sb.append(extractedContent).append("\n"); - } - return sb.toString().trim(); + private static JSONArray handleSopSchema(String sopSchema) { + return new JSONArray(sopSchema).stream().flatMap(item -> { + JSONArray itemArray = new JSONArray(item); + return Stream.of(itemArray); + }).collect(Collectors.toCollection(JSONArray::new)); + } + + /** + * 处理流程内容字符串,将其转换为JSONArray格式 + *

+ * 该方法会对输入的JSON数组字符串进行两层解析和转换: + * 1. 首先将整个字符串解析为JSONArray + * 2. 对每个元素进行两次展开处理,每次都将元素解析为新的JSONArray + * 3. 最终将所有处理结果收集到一个新的JSONArray中返回 + *

+ * + * @param processContent 流程内容字符串,应为合法的JSON数组格式 + * @return 解析并处理后的JSONArray对象 + */ + private static JSONArray handleRelateProcessContent(String processContent) { + return new JSONArray(processContent).stream().flatMap(item -> { + JSONArray itemArray = new JSONArray(item); + return Stream.of(itemArray); + }).flatMap(item -> { + JSONArray itemArray = new JSONArray(item); + return Stream.of(itemArray); + }).collect(Collectors.toCollection(JSONArray::new)); + } + + /** + * 处理流程内容,根据checkContentArray中的项筛选出在processContentArray中存在的项,并返回对应的标签列表 + *

+ * 该方法主要执行以下操作: + * 1. 从processContentArray中提取所有JSONObject的键集合,构建成一个Set + * 2. 遍历checkContentArray,筛选出"name"字段存在于上述Set中的项 + * 3. 将筛选出的项的"label"字段值收集为List返回 + *

+ * + * @param checkContentArray 检查内容数组,每个元素应为包含"name"和"label"字段的JSONObject + * @param processContentArray 流程内容数组,每个元素应为JSONObject + * @return 匹配项的"label"值列表 + */ + private List handleProcessContent(JSONArray checkContentArray, JSONArray processContentArray) { + Set processContentKeySet = processContentArray.stream().map(item -> { + JSONObject jsonObject = (JSONObject) item; + return jsonObject.keySet(); + }).flatMap(Collection::stream).collect(Collectors.toSet()); + return checkContentArray.stream().filter(item -> { + JSONObject jsonObject = (JSONObject) item; + return processContentKeySet.contains(jsonObject.getStr("name")); + }).map(item -> { + JSONObject jsonObject = (JSONObject) item; + return jsonObject.getStr("label"); + }).collect(Collectors.toList()); } }