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.date.LocalDateTimeUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.db.sql.SqlUtil; 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.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.jeelowcode.module.biz.entity.AlibabaWorkOrder; import com.jeelowcode.module.biz.entity.AlibabaWorkOrder;
import com.jeelowcode.module.biz.service.IAlibabaWorkOrderService; import com.jeelowcode.module.biz.service.IAlibabaWorkOrderService;
@@ -18,12 +21,9 @@ import java.sql.Connection;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.*;
import java.util.List; import java.util.stream.Collectors;
import java.util.Map; import java.util.stream.Stream;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static com.jeelowcode.tool.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; 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.setCheckPersonName(resultSet.getString("checkPersonName"));
workOrder.setCheckTime(resultSet.getObject("checkTime", LocalDateTime.class)); workOrder.setCheckTime(resultSet.getObject("checkTime", LocalDateTime.class));
workOrder.setCheckQuestion(resultSet.getString("checkQuestion")); workOrder.setCheckQuestion(resultSet.getString("checkQuestion"));
workOrder.setCorrectAction(handleActionContent(resultSet.getString("correctAction"))); workOrder.setCorrectAction(resultSet.getString("correctAction"));
workOrder.setCorrectPersonId(resultSet.getString("correctPersonId")); workOrder.setCorrectPersonId(resultSet.getString("correctPersonId"));
workOrder.setCorrectPersonName(resultSet.getString("correctPersonName")); workOrder.setCorrectPersonName(resultSet.getString("correctPersonName"));
workOrder.setWorkOrderLevel(resultSet.getString("workOrderLevel")); workOrder.setWorkOrderLevel(resultSet.getString("workOrderLevel"));
@@ -98,6 +98,28 @@ public class AlibabaWorkOrderJob implements JobHandler {
workOrder.setGmtSubModified(resultSet.getObject("gmtSubModified", LocalDateTime.class)); workOrder.setGmtSubModified(resultSet.getObject("gmtSubModified", LocalDateTime.class));
workOrder.setGmtRelateModified(resultSet.getObject("gmtRelateModified", LocalDateTime.class)); workOrder.setGmtRelateModified(resultSet.getObject("gmtRelateModified", LocalDateTime.class));
workOrder.setGmtRelateSubModified(resultSet.getObject("gmtRelateSubModified", 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); workOrderList.add(workOrder);
} }
@@ -122,313 +144,308 @@ public class AlibabaWorkOrderJob implements JobHandler {
*/ */
public static String buildSql(String params, LocalDateTime startTime, LocalDateTime endTime) { public static String buildSql(String params, LocalDateTime startTime, LocalDateTime endTime) {
StringBuilder sqlBuilder = new StringBuilder(); StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.append("SELECT " + sqlBuilder.append("select " +
" mwoe.ID AS \"id\", " + " mwoe.\"ID\" as \"id\", " +
" mwoe.WORK_ORDER_ID AS \"workOrderId\", " + " mwoe.\"WORK_ORDER_ID\" as \"workOrderId\", " +
" mwoe.CAMPUS_ID AS \"campusId\", " + " mwoe.\"CAMPUS_ID\" as \"campusId\", " +
" mwoe.CAMPUS_NAME AS \"campusName\", " + " mwoe.\"CAMPUS_NAME\" as \"campusName\", " +
" mwoe.REMARK AS \"checkArea\", " + " mwoe.\"REMARK\" as \"checkArea\", " +
" mwoe.OBJ_NAME AS \"checkItem\", " + " mwoe.\"OBJ_NAME\" as \"checkItem\", " +
" mwoe.SUB_SOP_SCHEMA AS \"checkContent\", " + " mwoe.\"SUB_SOP_SCHEMA\" as \"checkContent\", " +
" mwoe.CREATOR_ID AS \"checkPersonId\", " + " mwoe.\"SUB_PROCESS_CONTENT\" as \"processContent\", " +
" mwoe.CREATOR_NAME AS \"checkPersonName\", " + " mwoe.\"CREATOR_ID\" as \"checkPersonId\", " +
" mwoe.GMT_CREATE AS \"checkTime\", " + " mwoe.\"CREATOR_NAME\" as \"checkPersonName\", " +
" mwoe.PROCESS_CONTENT AS \"checkQuestion\", " + " mwoe.\"GMT_CREATE\" as \"checkTime\", " +
" CONCAT_WS(',', rwoa.PROCESS_CONTENT, rwoa.SUB_SOP_SCHEMA) AS \"correctAction\", " + " mwoe.\"PROCESS_CONTENT\" as \"checkQuestion\", " +
" rwoa.PROCESSOR_ID AS \"correctPersonId\", " + " mwoe.\"LEVEL\" as \"workOrderLevel\", " +
" rwoa.PROCESSOR_NAME AS \"correctPersonName\", " + " concat_ws(',', rwoa.\"RELATE_PROCESS_CONTENT\") as \"correctAction\", " +
" mwoe.\"LEVEL\" AS \"workOrderLevel\", " + " rwoa.\"RELATE_PROCESSOR_ID\" as \"correctPersonId\", " +
" rwoa.RESERVED_TIME3 AS \"correctDeadLine\", " + " rwoa.\"RELATE_PROCESSOR_NAME\" as \"correctPersonName\", " +
" rwoa.CONFIRM_PERSON_ID AS \"confirmPersonId\", " + " rwoa.\"RELATE_CONFIRM_PERSON_ID\" as \"confirmPersonId\", " +
" rwoa.CONFIRM_PERSON_NAME AS \"confirmPersonName\", " + " rwoa.\"RELATE_CONFIRM_PERSON_NAME\" as \"confirmPersonName\", " +
" mwoe.GMT_MODIFIED AS \"gmtModified\", " + " rwoa.\"RELATE_RESERVED_TIME3\" as \"correctDeadLine\", " +
" mwoe.SUB_GMT_MODIFIED AS \"gmtSubModified\", " + " rwoa.\"RELATE_SUB_SOP_SCHEMA\" as \"relateSubSopSchema\", " +
" rwoa.GMT_MODIFIED AS \"gmtRelateModified\", " + " rwoa.\"RELATE_SUB_PROCESS_CONTENT\" as \"relateSubProcessContent\", " +
" rwoa.SUB_GMT_MODIFIED AS \"gmtRelateSubModified\" " + " mwoe.\"GMT_MODIFIED\" as \"gmtModified\", " +
"FROM " + " mwoe.\"SUB_GMT_MODIFIED\" as \"gmtSubModified\", " +
" rwoa.\"RELATE_GMT_MODIFIED\" as \"gmtRelateModified\", " +
" rwoa.\"RELATE_SUB_GMT_MODIFIED\" as \"gmtRelateSubModified\" " +
"from " +
" ( " + " ( " +
" SELECT " + " select " +
" mwo.*, " + " mwo.*, " +
" swo.SOP_SCHEMA AS SUB_SOP_SCHEMA, " + " swo.\"SUB_SOP_SCHEMA\", " +
" swo.PROCESS_CONTENT AS SUB_PROCESS_CONTENT, " + " swo.\"SUB_PROCESS_CONTENT\", " +
" swo.GMT_MODIFIED AS SUB_GMT_MODIFIED, " + " swo.\"OBJ_NAME\", " +
" swo.OBJ_NAME AS OBJ_NAME " + " swo.\"SUB_GMT_MODIFIED\" " +
" FROM " + " from " +
" ( " + " ( " +
" SELECT " + " select " +
" wo.ID, " + " wo.\"ID\", " +
" wo.WORK_ORDER_ID, " + " wo.\"WORK_ORDER_ID\", " +
" wo.CAMPUS_ID, " + " wo.\"CAMPUS_ID\", " +
" c.NAME AS CAMPUS_NAME, " + " c.\"NAME\" as \"CAMPUS_NAME\", " +
" wo.REMARK, " + " wo.\"REMARK\", " +
" wo.CREATOR_ID, " + " wo.\"CREATOR_ID\", " +
" wo.CREATOR_NAME, " + " wo.\"CREATOR_NAME\", " +
" wo.GMT_CREATE, " + " wo.\"GMT_CREATE\", " +
" wo.GMT_MODIFIED, " + " wo.\"GMT_MODIFIED\", " +
" wo.RESERVED_TIME3, " + " wo.\"RESERVED_TIME3\", " +
" CASE " + " case " +
" WHEN wo.\"LEVEL\" = 'P0' THEN '重大' " + " when wo.\"LEVEL\" = 'P0' then '重大' " +
" ELSE '一般' " + " else '一般' " +
" END AS \"LEVEL\", " + " end as \"LEVEL\", " +
" wo.CONFIRM_PERSON_ID, " + " wo.\"CONFIRM_PERSON_ID\", " +
" wo.CONFIRM_PERSON_NAME, " + " wo.\"CONFIRM_PERSON_NAME\", " +
" wo.TENANT, " + " wo.\"TENANT\", " +
" ml.PROCESSOR_ID, " + " ml.\"PROCESSOR_ID\", " +
" ml.PROCESSOR_NAME, " + " ml.\"PROCESSOR_NAME\", " +
" JSON_VALUE(ml.CONTENT, '$.processContent') AS PROCESS_CONTENT " + " json_value(ml.\"CONTENT\", '$.processedContent') as \"PROCESS_CONTENT\" " +
" FROM " + " from " +
" \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" wo " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" wo " +
" LEFT JOIN ( " + " left join ( " +
" SELECT " + " select " +
" * " + " * " +
" FROM " + " from " +
" \"XCAMPUS_WORKORDER\".\"WORK_ORDER_LOG\" wol " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER_LOG\" wol " +
" WHERE " + " where " +
" wol.OPERATE_NAME = '完成' " + " wol.\"OPERATE_NAME\" = '完成' " +
" ) ml ON wo.WORK_ORDER_ID = ml.WORK_ORDER_ID " + " ) ml on wo.\"WORK_ORDER_ID\" = ml.\"WORK_ORDER_ID\" " +
" LEFT JOIN \"XCAMPUS_SPACECENTER\".\"CAMPUS\" c ON c.UUID = wo.CAMPUS_ID " + " left join \"XCAMPUS_SPACECENTER\".\"CAMPUS\" c on c.\"UUID\" = wo.\"CAMPUS_ID\" " +
" WHERE " + " where " +
" wo.PARENT_ID IS NULL " + " wo.\"PARENT_ID\" is null " +
" AND wo.ORDER_TYPE_PATH_NAME = '风险隐患' " + " AND wo.\"ORDER_TYPE_PATH_NAME\" = '风险隐患' " +
" AND wo.TENANT = '1821414781587267584' " + " and wo.\"TENANT\" = '1821414781587267584' " +
" AND EXISTS ( " + " and exists ( " +
" SELECT " + " select " +
" 1 " + " 1 " +
" FROM " + " from " +
" \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" wo2 " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" wo2 " +
" WHERE " + " where " +
" wo.WORK_ORDER_ID = wo2.WORK_ORDER_ID " + " wo.\"WORK_ORDER_ID\" = wo2.\"WORK_ORDER_ID\" " +
" AND wo2.RELATE_WORK_ORDER_ID IS NULL " + " and wo2.\"RELATE_WORK_ORDER_ID\" is null " +
" ) " + " ) " +
" ) mwo " + " ) mwo " +
" LEFT JOIN ( " + " left join ( " +
" SELECT " + " select " +
" wo.PARENT_ID, " + " wo.\"PARENT_ID\", " +
" LISTAGG( " + " concat( " +
" REPLACE( " +
" REPLACE( " +
" JSON_QUERY( " +
" wos.SOP_SCHEMA, " +
" '$[0].sopSchema.componentsTree[0].children[0].children[0].children[*].props.label' WITH CONDITIONAL WRAPPER " +
" ), " +
" '[', " + " '[', " +
" '' " + " listagg( " +
" ), " + " json_query( " +
" ']', " + " wos.\"SOP_SCHEMA\", " +
" '' " + " '$[0].sopSchema.componentsTree[0].children[0].children[0].children[*].props' returning varchar(10000) with conditional wrapper " +
" ), " + " ), " +
" ',' " + " ',' " +
" ) WITHIN GROUP ( " + " ) within group ( " +
" ORDER BY " + " order by " +
" wo.WORK_ORDER_ID " + " wo.\"WORK_ORDER_ID\" " +
" ) AS SOP_SCHEMA, " + " ), " +
" LISTAGG( " + " ']' " +
" REPLACE( " + " ) as \"SUB_SOP_SCHEMA\", " +
" REPLACE( " + " concat( " +
" JSON_QUERY(sl.CONTENT, '$.sopInfo.*' WITH CONDITIONAL WRAPPER), " +
" '[', " + " '[', " +
" '' " + " listagg( " +
" ), " + " json_query(sl.\"CONTENT\", '$.sopInfo' with conditional wrapper), " +
" ']', " +
" '' " +
" ), " +
" ',' " + " ',' " +
" ) WITHIN GROUP ( " + " ) within group ( " +
" ORDER BY " + " order by " +
" wo.WORK_ORDER_ID " + " wo.\"WORK_ORDER_ID\" " +
" ) AS PROCESS_CONTENT, " + " ), " +
" LISTAGG(OBJ_NAME, ',') WITHIN GROUP ( " + " ']' " +
" ORDER BY " + " ) as \"SUB_PROCESS_CONTENT\", " +
" wo.WORK_ORDER_ID " + " listagg(wo.\"OBJ_NAME\", ',') within group ( " +
" ) AS OBJ_NAME, " + " order by " +
" MAX(wo.GMT_MODIFIED) AS GMT_MODIFIED " + " wo.\"WORK_ORDER_ID\" " +
" FROM " + " ) as \"OBJ_NAME\", " +
" max(wo.\"GMT_MODIFIED\") as \"SUB_GMT_MODIFIED\" " +
" from " +
" \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" wo " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" wo " +
" LEFT JOIN ( " + " left join ( " +
" SELECT " + " select " +
" * " + " * " +
" FROM " + " from " +
" \"XCAMPUS_WORKORDER\".\"WORK_ORDER_LOG\" wol " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER_LOG\" wol " +
" WHERE " + " where " +
" wol.OPERATE_NAME = '处理' " + " wol.\"OPERATE_NAME\" = '处理' " +
" ) sl ON wo.WORK_ORDER_ID = sl.WORK_ORDER_ID " + " ) 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 " + " left join \"XCAMPUS_WORKORDER\".\"WORK_ORDER_SCHEMA\" wos on wo.\"WORK_ORDER_ID\" = wos.\"WORK_ORDER_ID\" " +
" WHERE " + " where " +
" wo.PARENT_ID IN ( " + " wo.\"PARENT_ID\" in ( " +
" SELECT " + " select " +
" WORK_ORDER_ID " + " \"WORK_ORDER_ID\" " +
" FROM " + " from " +
" \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" " +
" WHERE " + " where " +
" ORDER_TYPE_PATH_NAME = '风险隐患' " + " \"ORDER_TYPE_PATH_NAME\" = '风险隐患' " +
" ) " + " ) " +
" AND wo.ORDER_TYPE_PATH_NAME = '系统默认子单类型' " + " and wo.\"ORDER_TYPE_PATH_NAME\" = '系统默认子单类型' " +
" AND wo.TENANT = '1821414781587267584' " + " and wo.\"TENANT\" = '1821414781587267584' " +
" GROUP BY " + " group by " +
" wo.PARENT_ID " + " wo.\"PARENT_ID\" " +
" ) swo ON mwo.WORK_ORDER_ID = swo.PARENT_ID " + " ) swo on mwo.\"WORK_ORDER_ID\" = swo.\"PARENT_ID\" " +
" ) mwoe " + " ) mwoe " +
" LEFT JOIN ( " + " left join ( " +
" SELECT " + " select " +
" rwoe.RELATE_WORK_ORDER_ID, " + " rwoe.\"RELATE_WORK_ORDER_ID\", " +
" LISTAGG(rwoe.PROCESS_CONTENT, ',') WITHIN GROUP ( " + " listagg(rwoe.\"PROCESS_CONTENT\", ',') within group ( " +
" ORDER BY " + " order by " +
" rwoe.WORK_ORDER_ID " + " rwoe.\"WORK_ORDER_ID\" " +
" ) AS PROCESS_CONTENT, " + " ) as \"RELATE_PROCESS_CONTENT\", " +
" LISTAGG(rwoe.SUB_PROCESS_CONTENT, ',') WITHIN GROUP ( " + " concat( " +
" ORDER BY " + " '[', " +
" rwoe.WORK_ORDER_ID " + " listagg(rwoe.\"SUB_PROCESS_CONTENT\", ',') within group ( " +
" ) AS SUB_PROCESS_CONTENT, " + " order by " +
" LISTAGG(rwoe.SUB_SOP_SCHEMA, ',') WITHIN GROUP ( " + " rwoe.\"WORK_ORDER_ID\" " +
" ORDER BY " + " ), " +
" rwoe.WORK_ORDER_ID " + " ']' " +
" ) AS SUB_SOP_SCHEMA, " + " ) as \"RELATE_SUB_PROCESS_CONTENT\", " +
" LISTAGG(rwoe.PROCESSOR_ID, ',') WITHIN GROUP ( " + " concat( " +
" ORDER BY " + " '[', " +
" rwoe.WORK_ORDER_ID " + " listagg(rwoe.\"SUB_SOP_SCHEMA\", ',') within group ( " +
" ) AS PROCESSOR_ID, " + " order by " +
" LISTAGG(rwoe.PROCESSOR_NAME, ',') WITHIN GROUP ( " + " rwoe.\"WORK_ORDER_ID\" " +
" ORDER BY " + " ), " +
" rwoe.WORK_ORDER_ID " + " ']' " +
" ) AS PROCESSOR_NAME, " + " ) as \"RELATE_SUB_SOP_SCHEMA\", " +
" LISTAGG(rwoe.CONFIRM_PERSON_ID, ',') WITHIN GROUP ( " + " listagg(rwoe.\"PROCESSOR_ID\", ',') within group ( " +
" ORDER BY " + " order by " +
" rwoe.WORK_ORDER_ID " + " rwoe.\"WORK_ORDER_ID\" " +
" ) AS CONFIRM_PERSON_ID, " + " ) as \"RELATE_PROCESSOR_ID\", " +
" LISTAGG(rwoe.CONFIRM_PERSON_NAME, ',') WITHIN GROUP ( " + " listagg(rwoe.\"PROCESSOR_NAME\", ',') within group ( " +
" ORDER BY " + " order by " +
" rwoe.WORK_ORDER_ID " + " rwoe.\"WORK_ORDER_ID\" " +
" ) AS CONFIRM_PERSON_NAME, " + " ) as \"RELATE_PROCESSOR_NAME\", " +
" MAX(rwoe.RESERVED_TIME3) AS RESERVED_TIME3, " + " listagg(rwoe.\"CONFIRM_PERSON_ID\", ',') within group ( " +
" MAX(rwoe.GMT_MODIFIED) AS GMT_MODIFIED, " + " order by " +
" MAX(rwoe.SUB_GMT_MODIFIED) AS SUB_GMT_MODIFIED " + " rwoe.\"WORK_ORDER_ID\" " +
" FROM " + " ) 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.*, " + " rwo.*, " +
" swo.SOP_SCHEMA AS SUB_SOP_SCHEMA, " + " swo.\"SUB_SOP_SCHEMA\", " +
" swo.PROCESS_CONTENT AS SUB_PROCESS_CONTENT, " + " swo.\"SUB_PROCESS_CONTENT\", " +
" swo.GMT_MODIFIED AS SUB_GMT_MODIFIED, " + " swo.\"OBJ_NAME\", " +
" swo.OBJ_NAME AS OBJ_NAME " + " swo.\"SUB_GMT_MODIFIED\" " +
" FROM " + " from " +
" ( " + " ( " +
" SELECT " + " select " +
" wo.ID, " + " wo.\"ID\", " +
" wo.WORK_ORDER_ID, " + " wo.\"WORK_ORDER_ID\", " +
" wo.CAMPUS_ID, " + " wo.\"RELATE_WORK_ORDER_ID\", " +
" c.NAME AS CAMPUS_NAME, " + " wo.\"CAMPUS_ID\", " +
" wo.REMARK, " + " c.\"NAME\" as \"CAMPUS_NAME\", " +
" wo.CREATOR_ID, " + " wo.\"REMARK\", " +
" wo.CREATOR_NAME, " + " wo.\"CREATOR_ID\", " +
" wo.GMT_CREATE, " + " wo.\"CREATOR_NAME\", " +
" wo.GMT_MODIFIED, " + " wo.\"GMT_CREATE\", " +
" wo.RESERVED_TIME3, " + " wo.\"GMT_MODIFIED\", " +
" CASE " + " wo.\"RESERVED_TIME3\", " +
" WHEN wo.\"LEVEL\" = 'P0' THEN '重大' " + " case " +
" ELSE '一般' " + " when wo.\"LEVEL\" = 'P0' then '重大' " +
" END AS \"LEVEL\", " + " else '一般' " +
" wo.CONFIRM_PERSON_ID, " + " end as \"LEVEL\", " +
" wo.CONFIRM_PERSON_NAME, " + " wo.\"CONFIRM_PERSON_ID\", " +
" wo.TENANT, " + " wo.\"CONFIRM_PERSON_NAME\", " +
" wo.RELATE_WORK_ORDER_ID, " + " wo.\"TENANT\", " +
" ml.PROCESSOR_ID, " + " ml.\"PROCESSOR_ID\", " +
" ml.PROCESSOR_NAME, " + " ml.\"PROCESSOR_NAME\", " +
" JSON_VALUE(ml.CONTENT, '$.processContent') AS PROCESS_CONTENT " + " json_value(ml.\"CONTENT\", '$.processedContent') as \"PROCESS_CONTENT\" " +
" FROM " + " from " +
" \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" wo " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" wo " +
" LEFT JOIN ( " + " left join ( " +
" SELECT " + " select " +
" * " + " * " +
" FROM " + " from " +
" \"XCAMPUS_WORKORDER\".\"WORK_ORDER_LOG\" wol " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER_LOG\" wol " +
" WHERE " + " where " +
" wol.OPERATE_NAME = '完成' " + " wol.\"OPERATE_NAME\" = '完成' " +
" ) ml ON wo.WORK_ORDER_ID = ml.WORK_ORDER_ID " + " ) ml on wo.\"WORK_ORDER_ID\" = ml.\"WORK_ORDER_ID\" " +
" LEFT JOIN \"XCAMPUS_SPACECENTER\".\"CAMPUS\" c ON c.UUID = wo.CAMPUS_ID " + " left join \"XCAMPUS_SPACECENTER\".\"CAMPUS\" c on c.\"UUID\" = wo.\"CAMPUS_ID\" " +
" WHERE " + " where " +
" wo.PARENT_ID IS NULL " + " wo.\"PARENT_ID\" IS NULL " +
" AND wo.ORDER_TYPE_PATH_NAME = '风险隐患' " + " AND wo.\"ORDER_TYPE_PATH_NAME\" = '风险隐患' " +
" AND wo.TENANT = '1821414781587267584' " + " and wo.\"TENANT\" = '1821414781587267584' " +
" AND EXISTS ( " + " and exists ( " +
" SELECT " + " select " +
" 1 " + " 1 " +
" FROM " + " from " +
" \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" wo2 " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" wo2 " +
" WHERE " + " where " +
" wo.WORK_ORDER_ID = wo2.WORK_ORDER_ID " + " wo.\"WORK_ORDER_ID\" = wo2.\"WORK_ORDER_ID\" " +
" AND wo2.RELATE_WORK_ORDER_ID IS NOT NULL " + " and wo2.\"RELATE_WORK_ORDER_ID\" is not null " +
" ) " + " ) " +
" ) rwo " + " ) rwo " +
" LEFT JOIN ( " + " left join ( " +
" SELECT " + " select " +
" wo.PARENT_ID, " + " wo.\"PARENT_ID\", " +
" LISTAGG( " + " concat( " +
" REPLACE( " +
" REPLACE( " +
" JSON_QUERY( " +
" wos.SOP_SCHEMA, " +
" '$[0].sopSchema.componentsTree[0].children[0].children[0].children[*].props.label' WITH CONDITIONAL WRAPPER " +
" ), " +
" '[', " + " '[', " +
" '' " + " listagg( " +
" ), " + " json_query( " +
" ']', " + " wos.\"SOP_SCHEMA\", " +
" '' " + " '$[0].sopSchema.componentsTree[0].children[0].children[0].children[*].props' returning varchar(10000) with conditional wrapper " +
" ), " + " ), " +
" ',' " + " ',' " +
" ) WITHIN GROUP ( " + " ) within group ( " +
" ORDER BY " + " order by " +
" wo.WORK_ORDER_ID " + " wo.\"WORK_ORDER_ID\" " +
" ) AS SOP_SCHEMA, " + " ), " +
" LISTAGG( " + " ']' " +
" REPLACE( " + " ) as \"SUB_SOP_SCHEMA\", " +
" REPLACE( " + " concat( " +
" JSON_QUERY(sl.CONTENT, '$.sopInfo.*' WITH CONDITIONAL WRAPPER), " +
" '[', " + " '[', " +
" '' " + " listagg( " +
" ), " + " json_query(sl.\"CONTENT\", '$.sopInfo' with conditional wrapper), " +
" ']', " +
" '' " +
" ), " +
" ',' " + " ',' " +
" ) WITHIN GROUP ( " + " ) within group ( " +
" ORDER BY " + " order by " +
" wo.WORK_ORDER_ID " + " wo.\"WORK_ORDER_ID\" " +
" ) AS PROCESS_CONTENT, " + " ), " +
" LISTAGG(OBJ_NAME, ',') WITHIN GROUP ( " + " ']' " +
" ORDER BY " + " ) as \"SUB_PROCESS_CONTENT\", " +
" wo.WORK_ORDER_ID " + " listagg(wo.\"OBJ_NAME\", ',') within group ( " +
" ) AS OBJ_NAME, " + " order by " +
" MAX(wo.GMT_MODIFIED) AS GMT_MODIFIED " + " wo.\"WORK_ORDER_ID\" " +
" FROM " + " ) as \"OBJ_NAME\", " +
" max(wo.\"GMT_MODIFIED\") as \"SUB_GMT_MODIFIED\" " +
" from " +
" \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" wo " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" wo " +
" LEFT JOIN ( " + " left join ( " +
" SELECT " + " select " +
" * " + " * " +
" FROM " + " from " +
" \"XCAMPUS_WORKORDER\".\"WORK_ORDER_LOG\" wol " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER_LOG\" wol " +
" WHERE " + " where " +
" wol.OPERATE_NAME = '处理' " + " wol.\"OPERATE_NAME\" = '处理' " +
" ) sl ON wo.WORK_ORDER_ID = sl.WORK_ORDER_ID " + " ) 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 " + " left join \"XCAMPUS_WORKORDER\".\"WORK_ORDER_SCHEMA\" wos on wo.\"WORK_ORDER_ID\" = wos.\"WORK_ORDER_ID\" " +
" WHERE " + " where " +
" wo.PARENT_ID IN ( " + " wo.\"PARENT_ID\" in ( " +
" SELECT " + " select " +
" WORK_ORDER_ID " + " \"WORK_ORDER_ID\" " +
" FROM " + " from " +
" \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" " + " \"XCAMPUS_WORKORDER\".\"WORK_ORDER\" " +
" WHERE " + " where " +
" ORDER_TYPE_PATH_NAME = '风险隐患' " + " \"ORDER_TYPE_PATH_NAME\" = '风险隐患' " +
" ) " + " ) " +
" AND wo.ORDER_TYPE_PATH_NAME = '系统默认子单类型' " + " and wo.\"ORDER_TYPE_PATH_NAME\" = '系统默认子单类型' " +
" AND wo.TENANT = '1821414781587267584' " + " and wo.\"TENANT\" = '1821414781587267584' " +
" GROUP BY " + " group by " +
" wo.PARENT_ID " + " wo.\"PARENT_ID\" " +
" ) swo ON rwo.WORK_ORDER_ID = swo.PARENT_ID " + " ) swo on rwo.\"WORK_ORDER_ID\" = swo.\"PARENT_ID\" " +
" ) rwoe " + " ) rwoe " +
" GROUP BY " + " group by " +
" rwoe.RELATE_WORK_ORDER_ID " + " rwoe.\"RELATE_WORK_ORDER_ID\" " +
" ) rwoa ON mwoe.WORK_ORDER_ID = rwoa.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)) { 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); String formattedStart = LocalDateTimeUtil.format(startTime, FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
@@ -510,44 +527,82 @@ public class AlibabaWorkOrderJob implements JobHandler {
* @param content 待处理的内容字符串 * @param content 待处理的内容字符串
* @return 提取并格式化后的内容,每项占一行 * @return 提取并格式化后的内容,每项占一行
*/ */
private String handleCheckContent(String content) { private static String handleCheckContent(String content) {
if (StrUtil.isEmpty(content)) return StringUtils.EMPTY; if (JSONUtil.isTypeJSONArray(content)) {
return extractQuotedContent(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 待处理的内容字符串 * @param sopSchema SOP模式字符串应为合法的JSON数组格式
* @return 提取并格式化后的内容,每项占一行 * @return 解析并处理后的JSONArray对象
*/ */
private String extractQuotedContent(String content) { private static JSONArray handleSopSchema(String sopSchema) {
// 使用正则表达式将双引号中的内容提取出来 return new JSONArray(sopSchema).stream().flatMap(item -> {
Pattern pattern = Pattern.compile(REGEX_EXTRACT_CONTENT); JSONArray itemArray = new JSONArray(item);
Matcher matcher = pattern.matcher(content); return Stream.of(itemArray);
List<String> extractedContents = new ArrayList<>(); }).collect(Collectors.toCollection(JSONArray::new));
while (matcher.find()) {
String extractedContent = matcher.group();
extractedContents.add(extractedContent);
} }
// extractedContents每个元素作为一行将所有行拼接成字符串
StringBuilder sb = new StringBuilder(); /**
for (String extractedContent : extractedContents) { * 处理流程内容字符串将其转换为JSONArray格式
sb.append(extractedContent).append("\n"); * <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());
} }
} }