AbstractManualProcessor.java 6.0 KB
Newer Older
R
roo00 已提交
1 2 3 4
package com.x.processplatform.service.processing.processor.manual;

import java.util.List;

R
roo00 已提交
5 6 7
import javax.script.CompiledScript;
import javax.script.ScriptContext;

R
roo00 已提交
8 9 10
import org.apache.commons.lang3.StringUtils;

import com.x.base.core.container.EntityManagerContainer;
R
roo00 已提交
11 12
import com.x.base.core.project.logger.Logger;
import com.x.base.core.project.logger.LoggerFactory;
R
roo00 已提交
13 14 15 16 17
import com.x.base.core.project.tools.ListTools;
import com.x.processplatform.core.entity.content.Work;
import com.x.processplatform.core.entity.element.Activity;
import com.x.processplatform.core.entity.element.Manual;
import com.x.processplatform.core.entity.element.Route;
R
roo00 已提交
18
import com.x.processplatform.service.processing.Business;
R
roo00 已提交
19 20 21 22 23 24 25 26
import com.x.processplatform.service.processing.processor.AbstractProcessor;
import com.x.processplatform.service.processing.processor.AeiObjects;

/***
 * Manual活动基础功能
 */
public abstract class AbstractManualProcessor extends AbstractProcessor {

R
roo00 已提交
27 28
	private static Logger logger = LoggerFactory.getLogger(AbstractManualProcessor.class);

R
roo00 已提交
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
	protected AbstractManualProcessor(EntityManagerContainer entityManagerContainer) throws Exception {
		super(entityManagerContainer);
	}

	@Override
	protected Work arriveProcessing(AeiObjects aeiObjects) throws Exception {
		Manual manual = (Manual) aeiObjects.getActivity();
		/** 更新data中的work和attachment */
		aeiObjects.getData().setWork(aeiObjects.getWork());
		aeiObjects.getData().setAttachmentList(aeiObjects.getAttachments());
		return arriving(aeiObjects, manual);
	}

	@Override
	protected List<Work> executeProcessing(AeiObjects aeiObjects) throws Exception {
		Manual manual = (Manual) aeiObjects.getActivity();
		List<Work> os = executing(aeiObjects, manual);
		if (ListTools.isEmpty(os)) {
			/** Manual Work 还没有处理完 发生了停留,出发了停留事件 */
			if (this.hasManualStayScript(manual)) {
R
roo00 已提交
49 50 51 52 53
				ScriptContext scriptContext = aeiObjects.scriptContext();
				CompiledScript cs = null;
				cs = aeiObjects.business().element().getCompiledScript(aeiObjects.getApplication().getId(),
						aeiObjects.getActivity(), Business.EVENT_MANUALSTAY);
				cs.eval(scriptContext);
R
roo00 已提交
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
			}
		}
		return os;
	}

	@Override
	protected List<Route> inquireProcessing(AeiObjects aeiObjects) throws Exception {
		Manual manual = (Manual) aeiObjects.getActivity();
		return inquiring(aeiObjects, manual);
	}

	protected abstract Work arriving(AeiObjects aeiObjects, Manual manual) throws Exception;

	protected abstract List<Work> executing(AeiObjects aeiObjects, Manual manual) throws Exception;

	protected abstract List<Route> inquiring(AeiObjects aeiObjects, Manual manual) throws Exception;

	@Override
	protected void arriveCommitted(AeiObjects aeiObjects) throws Exception {
		Manual manual = (Manual) aeiObjects.getActivity();
		this.arrivingCommitted(aeiObjects, manual);
	}

	@Override
78
	protected void executeCommitted(AeiObjects aeiObjects, List<Work> works) throws Exception {
R
roo00 已提交
79
		Manual manual = (Manual) aeiObjects.getActivity();
80
		this.executingCommitted(aeiObjects, manual, works);
R
roo00 已提交
81 82 83 84 85 86 87 88 89 90
	}

	@Override
	protected void inquireCommitted(AeiObjects aeiObjects) throws Exception {
		Manual manual = (Manual) aeiObjects.getActivity();
		this.inquiringCommitted(aeiObjects, manual);
	}

	protected abstract void arrivingCommitted(AeiObjects aeiObjects, Manual manual) throws Exception;

91
	protected abstract void executingCommitted(AeiObjects aeiObjects, Manual manual, List<Work> works) throws Exception;
R
roo00 已提交
92 93 94

	protected abstract void inquiringCommitted(AeiObjects aeiObjects, Manual manual) throws Exception;

95
	protected boolean hasManualStayScript(Activity activity) throws Exception {
R
roo00 已提交
96 97 98
		return StringUtils.isNotEmpty(activity.get(Manual.manualStayScript_FIELDNAME, String.class))
				|| StringUtils.isNotEmpty(activity.get(Manual.manualStayScriptText_FIELDNAME, String.class));
	}
R
roo00 已提交
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172

	protected void mergeTaskCompleted(AeiObjects aeiObjects, Work work, Work oldest) {
		try {
			aeiObjects.getTaskCompleteds().stream().filter(o -> StringUtils.equals(o.getWork(), work.getId()))
					.forEach(o -> {
						o.setWork(oldest.getId());
						// o.setActivityToken(oldest.getActivityToken());
						aeiObjects.getUpdateTaskCompleteds().add(o);
					});
		} catch (Exception e) {
			logger.error(e);
		}
	}

	protected void mergeRead(AeiObjects aeiObjects, Work work, Work target) {
		try {
			aeiObjects.getReads().stream().filter(o -> StringUtils.equals(o.getWork(), work.getId())).forEach(o -> {
				o.setWork(target.getId());
				aeiObjects.getUpdateReads().add(o);
			});
		} catch (Exception e) {
			logger.error(e);
		}
	}

	protected void mergeReadCompleted(AeiObjects aeiObjects, Work work, Work target) {
		try {
			aeiObjects.getReadCompleteds().stream().filter(o -> StringUtils.equals(o.getWork(), work.getId()))
					.forEach(o -> {
						o.setWork(target.getId());
						aeiObjects.getUpdateReadCompleteds().add(o);
					});
		} catch (Exception e) {
			logger.error(e);
		}
	}

	protected void mergeReview(AeiObjects aeiObjects, Work work, Work target) {
		try {
			aeiObjects.getReviews().stream().filter(o -> StringUtils.equals(o.getWork(), work.getId())).forEach(o -> {
				o.setWork(target.getId());
				aeiObjects.getUpdateReviews().add(o);
			});
		} catch (Exception e) {
			logger.error(e);
		}
	}

	protected void mergeAttachment(AeiObjects aeiObjects, Work work, Work target) {
		try {
			aeiObjects.getAttachments().stream().filter(o -> StringUtils.equals(o.getWork(), work.getId()))
					.forEach(o -> {
						o.setWork(target.getId());
						aeiObjects.getUpdateAttachments().add(o);
					});
		} catch (Exception e) {
			logger.error(e);
		}
	}

	protected void mergeWorkLog(AeiObjects aeiObjects, Work work, Work target) {
		try {
			aeiObjects.getWorkLogs().stream()
					.filter(o -> StringUtils.equals(work.getActivityToken(), o.getArrivedActivityToken())
							&& StringUtils.equals(o.getWork(), work.getId()))
					.forEach(o -> {
						o.setWork(target.getId());
						// o.setArrivedActivityToken(target.getActivityToken());
						aeiObjects.getUpdateWorkLogs().add(o);
					});
		} catch (Exception e) {
			logger.error(e);
		}
	}
R
roo00 已提交
173
}