feat(biz): 优化工单数据处理逻辑

- 引入Hutool JSON工具类处理JSON数据
- 简化导入语句,使用通配符导入java.util包
- 移除handleActionContent方法,直接使用原始数据
- 新增对relateSubSopSchema和relateSubProcessContent字段的JSON解析逻辑
- 重构SQL查询语句,调整字段映射关系
- 修改handleCheckContent方法支持JSONArray格式数据处理
- 新增handleSopSchema和handleRelateProcessContent方法处理JSON数组
- 实现handleProcessContent方法关联处理检查内容和流程内容
- 优化代码结构,提升数据处理准确性
This commit is contained in:
2025-12-08 17:54:18 +08:00
parent 8e7e3fb5d8
commit 14fe4798ce

View File

@@ -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<String> 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<String> 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 " +
" ) AS SOP_SCHEMA, " +
" LISTAGG( " +
" REPLACE( " +
" REPLACE( " +
" JSON_QUERY(sl.CONTENT, '$.sopInfo.*' WITH CONDITIONAL WRAPPER), " +
" ) within group ( " +
" order by " +
" wo.\"WORK_ORDER_ID\" " +
" ), " +
" ']' " +
" ) as \"SUB_SOP_SCHEMA\", " +
" concat( " +
" '[', " +
" '' " +
" ), " +
" ']', " +
" '' " +
" ), " +
" listagg( " +
" json_query(sl.\"CONTENT\", '$.sopInfo' with conditional wrapper), " +
" ',' " +
" ) 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 " +
" ) within group ( " +
" order by " +
" wo.\"WORK_ORDER_ID\" " +
" ), " +
" ']' " +
" ) 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 " +
" ) AS SOP_SCHEMA, " +
" LISTAGG( " +
" REPLACE( " +
" REPLACE( " +
" JSON_QUERY(sl.CONTENT, '$.sopInfo.*' WITH CONDITIONAL WRAPPER), " +
" ) within group ( " +
" order by " +
" wo.\"WORK_ORDER_ID\" " +
" ), " +
" ']' " +
" ) as \"SUB_SOP_SCHEMA\", " +
" concat( " +
" '[', " +
" '' " +
" ), " +
" ']', " +
" '' " +
" ), " +
" listagg( " +
" json_query(sl.\"CONTENT\", '$.sopInfo' with conditional wrapper), " +
" ',' " +
" ) 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 " +
" ) within group ( " +
" order by " +
" wo.\"WORK_ORDER_ID\" " +
" ), " +
" ']' " +
" ) 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);
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<String> checkContentList = nodeList.stream()
.map(node -> new JSONObject(node).getStr("label"))
.collect(Collectors.toList());
return StrUtil.join(" ", checkContentList);
} else {
return StringUtils.EMPTY;
}
// 封装方法对整改措施也进行提取双引号之间的文本
/**
* 处理整改措施,提取双引号中的文本并格式化
*
* @param content 待处理的内容字符串
* @return 提取并格式化后的内容,每项占一行
*/
private String handleActionContent(String content) {
return extractQuotedContent(content);
}
/**
* 提取字符串中双引号包含的内容
* 处理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<String> extractedContents = new ArrayList<>();
while (matcher.find()) {
String extractedContent = matcher.group();
extractedContents.add(extractedContent);
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));
}
// extractedContents每个元素作为一行将所有行拼接成字符串
StringBuilder sb = new StringBuilder();
for (String extractedContent : extractedContents) {
sb.append(extractedContent).append("\n");
/**
* 处理流程内容字符串将其转换为JSONArray格式
* <p>
* 该方法会对输入的JSON数组字符串进行两层解析和转换
* 1. 首先将整个字符串解析为JSONArray
* 2. 对每个元素进行两次展开处理每次都将元素解析为新的JSONArray
* 3. 最终将所有处理结果收集到一个新的JSONArray中返回
* </p>
*
* @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));
}
return sb.toString().trim();
/**
* 处理流程内容根据checkContentArray中的项筛选出在processContentArray中存在的项并返回对应的标签列表
* <p>
* 该方法主要执行以下操作:
* 1. 从processContentArray中提取所有JSONObject的键集合构建成一个Set
* 2. 遍历checkContentArray筛选出"name"字段存在于上述Set中的项
* 3. 将筛选出的项的"label"字段值收集为List返回
* </p>
*
* @param checkContentArray 检查内容数组,每个元素应为包含"name"和"label"字段的JSONObject
* @param processContentArray 流程内容数组每个元素应为JSONObject
* @return 匹配项的"label"值列表
*/
private List<String> handleProcessContent(JSONArray checkContentArray, JSONArray processContentArray) {
Set<String> 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());
}
}