Просмотр исходного кода

Merge branch 'feature/#305' into 'develop'

splitValueList

See merge request o2oa/o2oa!1447
o2null 5 лет назад
Родитель
Сommit
9f0f19a72d

+ 8 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/ListTools.java

@@ -598,4 +598,12 @@ public class ListTools {
 		return list.subList(start, end);
 	}
 
+	public static <E> void set(List<E> list, int index, E element) {
+		if (index < 0) {
+			list.set(list.size() + index, element);
+		} else {
+			list.set(index, element);
+		}
+	}
+
 }

+ 23 - 17
o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/content/Work.java

@@ -19,8 +19,18 @@ import javax.persistence.PostLoad;
 import javax.persistence.Table;
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
+import javax.persistence.Transient;
 import javax.persistence.UniqueConstraint;
 
+import org.apache.commons.lang3.StringUtils;
+import org.apache.openjpa.persistence.Persistent;
+import org.apache.openjpa.persistence.PersistentCollection;
+import org.apache.openjpa.persistence.jdbc.ContainerTable;
+import org.apache.openjpa.persistence.jdbc.ElementColumn;
+import org.apache.openjpa.persistence.jdbc.ElementIndex;
+import org.apache.openjpa.persistence.jdbc.Index;
+import org.apache.openjpa.persistence.jdbc.Strategy;
+
 import com.x.base.core.entity.JpaObject;
 import com.x.base.core.entity.SliceJpaObject;
 import com.x.base.core.entity.annotation.CheckPersist;
@@ -34,15 +44,6 @@ import com.x.base.core.project.tools.StringTools;
 import com.x.processplatform.core.entity.PersistenceProperties;
 import com.x.processplatform.core.entity.element.ActivityType;
 
-import org.apache.commons.lang3.StringUtils;
-import org.apache.openjpa.persistence.Persistent;
-import org.apache.openjpa.persistence.PersistentCollection;
-import org.apache.openjpa.persistence.jdbc.ContainerTable;
-import org.apache.openjpa.persistence.jdbc.ElementColumn;
-import org.apache.openjpa.persistence.jdbc.ElementIndex;
-import org.apache.openjpa.persistence.jdbc.Index;
-import org.apache.openjpa.persistence.jdbc.Strategy;
-
 @Entity
 @ContainerEntity(dumpSize = 1000, type = ContainerEntity.Type.content, reference = ContainerEntity.Reference.strong)
 @Table(name = PersistenceProperties.Content.Work.table, uniqueConstraints = {
@@ -96,6 +97,7 @@ public class Work extends SliceJpaObject implements ProjectionInterface {
 	public void postLoad() {
 		if ((null != this.properties) && StringUtils.isNotEmpty(this.getProperties().getTitle())) {
 			this.title = this.getProperties().getTitle();
+			this.splitValueList = this.getProperties().getSplitValueList();
 		}
 	}
 
@@ -145,8 +147,20 @@ public class Work extends SliceJpaObject implements ProjectionInterface {
 				: WORKCREATETYPE_SURFACE;
 	}
 
+	public List<String> getSplitValueList() {
+		return this.splitValueList;
+	}
+
+	public void setSplitValueList(List<String> splitValueList) {
+		this.splitValueList = splitValueList;
+		this.getProperties().setSplitValueList(splitValueList);
+	}
+
 	/* 修改过的Set Get 方法 */
 
+	@Transient
+	private List<String> splitValueList;
+
 	public static final String job_FIELDNAME = "job";
 	@FieldDescribe("工作")
 	@Column(length = JpaObject.length_id, name = ColumnNamePrefix + job_FIELDNAME)
@@ -161,14 +175,6 @@ public class Work extends SliceJpaObject implements ProjectionInterface {
 	@CheckPersist(allowEmpty = true)
 	private String title;
 
-	// public static final String titleLob_FIELDNAME = "titleLob";
-	// @FieldDescribe("标题,长文本")
-	// @Lob
-	// @Basic(fetch = FetchType.EAGER)
-	// @Column(length = JpaObject.length_1M, name = ColumnNamePrefix +
-	// titleLob_FIELDNAME)
-	// private String titleLob;
-
 	public static final String startTime_FIELDNAME = "startTime";
 	@FieldDescribe("工作开始时间")
 	@Temporal(TemporalType.TIMESTAMP)

+ 5 - 3
o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/content/WorkLogProperties.java

@@ -7,9 +7,11 @@ import com.x.base.core.entity.JsonProperties;
 
 public class WorkLogProperties extends JsonProperties {
 
+	private static final long serialVersionUID = -4149341123576111783L;
+
 	private List<String> splitTokenList;
 
-	private List<String> splitValueList;
+	private List<String> splitValueList = new ArrayList<>();
 
 	private String splitToken;
 
@@ -17,14 +19,14 @@ public class WorkLogProperties extends JsonProperties {
 
 	public List<String> getSplitTokenList() {
 		if (null == splitTokenList) {
-			this.splitTokenList = new ArrayList<String>();
+			this.splitTokenList = new ArrayList<>();
 		}
 		return splitTokenList;
 	}
 
 	public List<String> getSplitValueList() {
 		if (null == splitValueList) {
-			this.splitValueList = new ArrayList<String>();
+			this.splitValueList = new ArrayList<>();
 		}
 		return splitValueList;
 	}

+ 26 - 9
o2server/x_processplatform_core_entity/src/main/java/com/x/processplatform/core/entity/content/WorkProperties.java

@@ -3,27 +3,33 @@ package com.x.processplatform.core.entity.content;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 import com.x.base.core.entity.JsonProperties;
 import com.x.base.core.project.annotation.FieldDescribe;
 
 public class WorkProperties extends JsonProperties {
 
+	private static final long serialVersionUID = -62236689373222398L;
+
 	@FieldDescribe("强制待办处理人")
 	private List<String> manualForceTaskIdentityList = new ArrayList<>();
 
 	@FieldDescribe("授权对象")
-	private LinkedHashMap<String, String> manualEmpowerMap = new LinkedHashMap<>();
+	private Map<String, String> manualEmpowerMap = new LinkedHashMap<>();
 
 	@FieldDescribe("服务回调值")
-	private LinkedHashMap<String, Object> serviceValue = new LinkedHashMap<>();
+	private Map<String, Object> serviceValue = new LinkedHashMap<>();
 
 	@FieldDescribe("标题")
 	private String title;
 
+	@FieldDescribe("拆分值列表")
+	private List<String> splitValueList = new ArrayList<>();
+
 	public List<String> getManualForceTaskIdentityList() {
 		if (this.manualForceTaskIdentityList == null) {
-			this.manualForceTaskIdentityList = new ArrayList<String>();
+			this.manualForceTaskIdentityList = new ArrayList<>();
 		}
 		return this.manualForceTaskIdentityList;
 	}
@@ -32,25 +38,25 @@ public class WorkProperties extends JsonProperties {
 		this.manualForceTaskIdentityList = manualForceTaskIdentityList;
 	}
 
-	public LinkedHashMap<String, String> getManualEmpowerMap() {
+	public Map<String, String> getManualEmpowerMap() {
 		if (this.manualEmpowerMap == null) {
-			this.manualEmpowerMap = new LinkedHashMap<String, String>();
+			this.manualEmpowerMap = new LinkedHashMap<>();
 		}
 		return this.manualEmpowerMap;
 	}
 
-	public void setManualEmpowerMap(LinkedHashMap<String, String> manualEmpowerMap) {
+	public void setManualEmpowerMap(Map<String, String> manualEmpowerMap) {
 		this.manualEmpowerMap = manualEmpowerMap;
 	}
 
-	public LinkedHashMap<String, Object> getServiceValue() {
+	public Map<String, Object> getServiceValue() {
 		if (this.serviceValue == null) {
-			this.serviceValue = new LinkedHashMap<String, Object>();
+			this.serviceValue = new LinkedHashMap<>();
 		}
 		return this.serviceValue;
 	}
 
-	public void setServiceValue(LinkedHashMap<String, Object> serviceValue) {
+	public void setServiceValue(Map<String, Object> serviceValue) {
 		this.serviceValue = serviceValue;
 	}
 
@@ -62,4 +68,15 @@ public class WorkProperties extends JsonProperties {
 		this.title = title;
 	}
 
+	public List<String> getSplitValueList() {
+		if (null == this.splitValueList) {
+			this.splitValueList = new ArrayList<>();
+		}
+		return this.splitValueList;
+	}
+
+	public void setSplitValueList(List<String> splitValueList) {
+		this.splitValueList = splitValueList;
+	}
+
 }

+ 3 - 2
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/merge/MergeProcessor.java

@@ -58,7 +58,6 @@ public class MergeProcessor extends AbstractMergeProcessor {
 						aeiObjects.getDeleteWorkLogs().add(obj);
 					});
 		} else {
-			/* 完全找不到合并的文档,唯一一份 */
 			Work branch = this.findWorkBranch(aeiObjects);
 			if (null != branch) {
 				aeiObjects.getWork().setSplitting(true);
@@ -69,10 +68,12 @@ public class MergeProcessor extends AbstractMergeProcessor {
 				aeiObjects.getWork().setSplitValue("");
 				results.add(aeiObjects.getWork());
 			} else {
+				// 完全找不到合并的文档,唯一一份
 				aeiObjects.getWork().setSplitting(false);
-				aeiObjects.getWork().setSplitTokenList(new ArrayList<String>());
 				aeiObjects.getWork().setSplitToken("");
+				aeiObjects.getWork().setSplitTokenList(new ArrayList<>());
 				aeiObjects.getWork().setSplitValue("");
+				aeiObjects.getWork().setSplitValueList(new ArrayList<>());
 				results.add(aeiObjects.getWork());
 			}
 		}

+ 30 - 21
o2server/x_processplatform_service_processing/src/main/java/com/x/processplatform/service/processing/processor/split/SplitProcessor.java

@@ -2,6 +2,7 @@ package com.x.processplatform.service.processing.processor.split;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.commons.lang3.StringUtils;
 
@@ -43,35 +44,43 @@ public class SplitProcessor extends AbstractSplitProcessor {
 		aeiObjects.getWork().setSplitting(true);
 		aeiObjects.getWork().setSplitToken(StringTools.uniqueToken());
 		aeiObjects.getWork().getSplitTokenList().add(aeiObjects.getWork().getSplitToken());
-		aeiObjects.getWork().setSplitValue("");
 		List<String> splitValues = this.splitWithPath(aeiObjects, split);
 		if (splitValues.isEmpty()) {
 			throw new ExceptionSplitEmptySplitValue(split.getName(), aeiObjects.getWork().getTitle(),
 					aeiObjects.getWork().getId(), aeiObjects.getWork().getJob());
 		}
-		/* 先将当前文档标志拆分值 */
+		// 先将当前文档标志拆分值
 		aeiObjects.getWork().setSplitValue(splitValues.get(0));
+		aeiObjects.getWork().getSplitValueList().add(splitValues.get(0));
 		results.add(aeiObjects.getWork());
-		WorkLog mainWorkLog = aeiObjects.getWorkLogs().stream()
+		Optional<WorkLog> optionalWorkLog = aeiObjects.getWorkLogs().stream()
 				.filter(o -> StringUtils.equals(aeiObjects.getWork().getActivityToken(), o.getFromActivityToken()))
-				.findFirst().orElse(null);
-		mainWorkLog.setSplitting(true);
-		mainWorkLog.setSplitToken(aeiObjects.getWork().getSplitToken());
-		mainWorkLog.getProperties().getSplitTokenList().add(aeiObjects.getWork().getSplitToken());
-		mainWorkLog.setSplitValue(splitValues.get(0));
-		aeiObjects.getUpdateWorkLogs().add(mainWorkLog);
-		/* 产生后续的拆分文档并标记拆分值 */
-		for (int i = 1; i < splitValues.size(); i++) {
-			Work splitWork = new Work(aeiObjects.getWork());
-			/* 将文档存放在一起 */
-			splitWork.setSplitValue(splitValues.get(i));
-			aeiObjects.getCreateWorks().add(splitWork);
-			WorkLog splitWorkLog = new WorkLog(mainWorkLog);
-			splitWorkLog.setSplitWork(aeiObjects.getWork().getId());
-			splitWorkLog.setWork(splitWork.getId());
-			splitWorkLog.setSplitValue(splitValues.get(i));
-			aeiObjects.getCreateWorkLogs().add(splitWorkLog);
-			results.add(splitWork);
+				.findFirst();
+		if (optionalWorkLog.isPresent()) {
+			WorkLog mainWorkLog = optionalWorkLog.get();
+			mainWorkLog.setSplitting(true);
+			mainWorkLog.setSplitToken(aeiObjects.getWork().getSplitToken());
+			mainWorkLog.getProperties().getSplitTokenList().add(aeiObjects.getWork().getSplitToken());
+			mainWorkLog.setSplitValue(splitValues.get(0));
+			mainWorkLog.getProperties().getSplitValueList().add(aeiObjects.getWork().getSplitValue());
+			aeiObjects.getUpdateWorkLogs().add(mainWorkLog);
+			// 产生后续的拆分文档并标记拆分值
+			for (int i = 1; i < splitValues.size(); i++) {
+				// 将文档存放在一起
+				Work splitWork = new Work(aeiObjects.getWork());
+				// 替work换拆分值
+				splitWork.setSplitValue(splitValues.get(i));
+				ListTools.set(splitWork.getSplitValueList(), -1, splitValues.get(i));
+				aeiObjects.getCreateWorks().add(splitWork);
+				WorkLog splitWorkLog = new WorkLog(mainWorkLog);
+				splitWorkLog.setSplitWork(aeiObjects.getWork().getId());
+				splitWorkLog.setWork(splitWork.getId());
+				// 替workLog换拆分值
+				splitWorkLog.setSplitValue(splitValues.get(i));
+				ListTools.set(splitWorkLog.getProperties().getSplitValueList(), -1, splitValues.get(i));
+				aeiObjects.getCreateWorkLogs().add(splitWorkLog);
+				results.add(splitWork);
+			}
 		}
 		return results;
 	}