|
@@ -5,6 +5,8 @@ import org.flowable.task.api.history.HistoricTaskInstance;
|
|
|
|
|
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
+import java.util.regex.Matcher;
|
|
|
|
|
+import java.util.regex.Pattern;
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
|
历史任务节点
|
|
历史任务节点
|
|
@@ -34,6 +36,7 @@ public class HisTaskVo {
|
|
|
private String belongProject; // 所属系统
|
|
private String belongProject; // 所属系统
|
|
|
private String processDefKey; // 流程key
|
|
private String processDefKey; // 流程key
|
|
|
private String businessId; // 数据详情id
|
|
private String businessId; // 数据详情id
|
|
|
|
|
+ private String relatedNo; // 关联业务编号(从标题提取)
|
|
|
|
|
|
|
|
public HisTaskVo(HistoricTaskInstance task) {
|
|
public HisTaskVo(HistoricTaskInstance task) {
|
|
|
this.id = task.getId ( );
|
|
this.id = task.getId ( );
|
|
@@ -49,4 +52,43 @@ public class HisTaskVo {
|
|
|
this.processInstanceId = task.getProcessInstanceId ( );
|
|
this.processInstanceId = task.getProcessInstanceId ( );
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 从流程标题中提取业务关联编号
|
|
|
|
|
+ * 新标题格式(统一包含方括号编号):
|
|
|
|
|
+ * A类报销:张三 在 2026-11-09 09:48 发起了 [BX2024001] [评估-报销审批]
|
|
|
|
|
+ * B类合同:张三 在 2026-11-09 09:48 发起了 [HT2024001] - XX合同 [评估-合同登记]
|
|
|
|
|
+ * C类有报告号:张三 在 2026-11-09 09:48 发起了 苏兴评字[2026]001号 - XX项目 [评估-项目归档]
|
|
|
|
|
+ * C类无报告号:张三 在 2026-11-09 09:48 发起了 - XX项目 [评估-项目归档]
|
|
|
|
|
+ * 旧格式兼容:张三 发起了 [BX2024001] - [评估-报销审批]
|
|
|
|
|
+ *
|
|
|
|
|
+ * 提取策略:最后一个方括号是流程名称,之前的内容中提取编号
|
|
|
|
|
+ */
|
|
|
|
|
+ public static String extractRelatedNo(String title) {
|
|
|
|
|
+ if (title == null || title.isEmpty()) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 策略:匹配 "发起了" 之后、最后一个 "[流程名]" 之前的内容
|
|
|
|
|
+ Pattern pattern = Pattern.compile("发起了\\s*(.+?)\\s*\\[(?:评估|会计|项目|财务|咨询|中审|苏州)[^\\]]*\\]\\s*$");
|
|
|
|
|
+ Matcher matcher = pattern.matcher(title);
|
|
|
|
|
+ if (matcher.find()) {
|
|
|
|
|
+ String middle = matcher.group(1).trim();
|
|
|
|
|
+ if (middle.isEmpty() || middle.equals("-")) {
|
|
|
|
|
+ return null; // C类无报告号的情况
|
|
|
|
|
+ }
|
|
|
|
|
+ // 去除尾部的 " - 项目名称" 部分
|
|
|
|
|
+ int dashIdx = middle.lastIndexOf(" - ");
|
|
|
|
|
+ if (dashIdx > 0) {
|
|
|
|
|
+ middle = middle.substring(0, dashIdx).trim();
|
|
|
|
|
+ }
|
|
|
|
|
+ // 如果中间部分本身被方括号包裹(如 [BX2024001]),提取内部内容
|
|
|
|
|
+ Pattern innerBracket = Pattern.compile("^\\[(.+)]$");
|
|
|
|
|
+ Matcher innerMatcher = innerBracket.matcher(middle);
|
|
|
|
|
+ if (innerMatcher.matches()) {
|
|
|
|
|
+ return innerMatcher.group(1);
|
|
|
|
|
+ }
|
|
|
|
|
+ return middle;
|
|
|
|
|
+ }
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
}
|
|
}
|