|
1 | 1 | package com.codingapi.flow.context; |
2 | 2 |
|
| 3 | +import com.codingapi.flow.context.service.FlowRecordSaveService; |
3 | 4 | import com.codingapi.flow.domain.DelayTask; |
4 | 5 | import com.codingapi.flow.exception.FlowStateException; |
5 | 6 | import com.codingapi.flow.gateway.FlowOperatorGateway; |
6 | 7 | import com.codingapi.flow.operator.IFlowOperator; |
7 | 8 | import com.codingapi.flow.record.FlowRecord; |
8 | | -import com.codingapi.flow.record.FlowTodoRecord; |
9 | | -import com.codingapi.flow.record.FlowTodoMerge; |
10 | 9 | import com.codingapi.flow.repository.*; |
11 | 10 | import com.codingapi.flow.service.FlowService; |
12 | 11 | import com.codingapi.flow.service.impl.FlowActionService; |
13 | 12 | import com.codingapi.flow.service.impl.FlowDelayTriggerService; |
14 | 13 | import com.codingapi.flow.session.FlowSession; |
15 | 14 | import lombok.Getter; |
16 | 15 |
|
17 | | -import java.util.ArrayList; |
18 | 16 | import java.util.List; |
19 | 17 |
|
| 18 | +/** |
| 19 | + * 流程引擎仓库持有者上下文,负责持有流程引擎相关的仓库实例,并提供相关服务的构建方法 |
| 20 | + */ |
20 | 21 | public class RepositoryHolderContext { |
21 | 22 |
|
22 | 23 | @Getter |
@@ -156,13 +157,13 @@ public void deleteDelayTask(DelayTask delayTask) { |
156 | 157 |
|
157 | 158 |
|
158 | 159 | public void saveRecords(List<FlowRecord> flowRecords) { |
159 | | - FlowRecordRepositoryService flowRecordRepositoryService = new FlowRecordRepositoryService(flowRecords); |
160 | | - flowRecordRepositoryService.saveAll(); |
| 160 | + FlowRecordSaveService flowRecordSaveService = new FlowRecordSaveService(flowRecords); |
| 161 | + flowRecordSaveService.saveAll(); |
161 | 162 | } |
162 | 163 |
|
163 | 164 | public void saveRecord(FlowRecord flowRecord) { |
164 | | - FlowRecordRepositoryService flowRecordRepositoryService = new FlowRecordRepositoryService(flowRecord); |
165 | | - flowRecordRepositoryService.saveAll(); |
| 165 | + FlowRecordSaveService flowRecordSaveService = new FlowRecordSaveService(flowRecord); |
| 166 | + flowRecordSaveService.saveAll(); |
166 | 167 | } |
167 | 168 |
|
168 | 169 | public List<FlowRecord> findCurrentNodeRecords(long fromId, String nodeId) { |
@@ -194,106 +195,4 @@ public List<DelayTask> findDelayTasks() { |
194 | 195 | } |
195 | 196 |
|
196 | 197 |
|
197 | | - private static class FlowRecordRepositoryService { |
198 | | - |
199 | | - private final List<FlowRecord> flowRecords; |
200 | | - private final FlowTodoRecordRepository flowTodoRecordRepository; |
201 | | - private final FlowTodoMergeRepository flowTodoMergeRepository; |
202 | | - private final FlowRecordRepository flowRecordRepository; |
203 | | - |
204 | | - |
205 | | - public FlowRecordRepositoryService(List<FlowRecord> flowRecords) { |
206 | | - this.flowTodoRecordRepository = RepositoryHolderContext.getInstance().getFlowTodoRecordRepository(); |
207 | | - this.flowTodoMergeRepository = RepositoryHolderContext.getInstance().getFlowTodoMergeRepository(); |
208 | | - this.flowRecordRepository = RepositoryHolderContext.getInstance().getFlowRecordRepository(); |
209 | | - this.flowRecords = flowRecords; |
210 | | - } |
211 | | - |
212 | | - public FlowRecordRepositoryService(FlowRecord flowRecord) { |
213 | | - this.flowTodoRecordRepository = RepositoryHolderContext.getInstance().getFlowTodoRecordRepository(); |
214 | | - this.flowTodoMergeRepository = RepositoryHolderContext.getInstance().getFlowTodoMergeRepository(); |
215 | | - this.flowRecordRepository = RepositoryHolderContext.getInstance().getFlowRecordRepository(); |
216 | | - this.flowRecords = new ArrayList<>(); |
217 | | - this.flowRecords.add(flowRecord); |
218 | | - } |
219 | | - |
220 | | - |
221 | | - private void saveTodoMargeRecords() { |
222 | | - List<FlowTodoRecord> flowTodoRecords = new ArrayList<>(); |
223 | | - for (FlowRecord flowRecord : flowRecords) { |
224 | | - if (flowRecord.isTodo()) { |
225 | | - FlowTodoRecord todoMargeRecord = flowTodoRecordRepository.getByMergeKey(flowRecord.getMergeKey()); |
226 | | - if (todoMargeRecord == null) { |
227 | | - todoMargeRecord = new FlowTodoRecord(flowRecord); |
228 | | - } else { |
229 | | - todoMargeRecord.update(flowRecord); |
230 | | - if (flowRecord.isMergeable()) { |
231 | | - todoMargeRecord.addMergeCount(); |
232 | | - } |
233 | | - } |
234 | | - flowTodoRecords.add(todoMargeRecord); |
235 | | - } |
236 | | - } |
237 | | - if (!flowTodoRecords.isEmpty()) { |
238 | | - flowTodoRecordRepository.saveAll(flowTodoRecords); |
239 | | - } |
240 | | - |
241 | | - if (!flowTodoRecords.isEmpty()) { |
242 | | - List<FlowTodoMerge> relationList = new ArrayList<>(); |
243 | | - for (FlowTodoRecord margeRecord : flowTodoRecords) { |
244 | | - if(margeRecord.isMergeable()) { |
245 | | - relationList.add(new FlowTodoMerge(margeRecord)); |
246 | | - } |
247 | | - } |
248 | | - flowTodoMergeRepository.saveAll(relationList); |
249 | | - } |
250 | | - } |
251 | | - |
252 | | - private void saveRecords() { |
253 | | - if (!flowRecords.isEmpty()) { |
254 | | - flowRecordRepository.saveAll(flowRecords); |
255 | | - } |
256 | | - } |
257 | | - |
258 | | - |
259 | | - private void removeTodoMergeRecords() { |
260 | | - for (FlowRecord flowRecord : flowRecords) { |
261 | | - if (flowRecord.isDone()) { |
262 | | - if (flowRecord.isMergeable()) { |
263 | | - FlowTodoRecord todoMargeRecord = flowTodoRecordRepository.getByMergeKey(flowRecord.getMergeKey()); |
264 | | - if(todoMargeRecord!=null) { |
265 | | - List<FlowTodoMerge> margeRelations = flowTodoMergeRepository.findByTodoId(todoMargeRecord.getId()); |
266 | | - if(margeRelations!=null && !margeRelations.isEmpty()) { |
267 | | - for (FlowTodoMerge margeRelation : margeRelations) { |
268 | | - if (margeRelation.isRecord(flowRecord.getId())) { |
269 | | - flowTodoMergeRepository.remove(margeRelation); |
270 | | - todoMargeRecord.divMergeCount(); |
271 | | - if (todoMargeRecord.hasMergeCount()) { |
272 | | - flowTodoRecordRepository.save(todoMargeRecord); |
273 | | - } else { |
274 | | - flowTodoRecordRepository.remove(todoMargeRecord); |
275 | | - } |
276 | | - } |
277 | | - } |
278 | | - } |
279 | | - } |
280 | | - } else { |
281 | | - FlowTodoRecord todoMargeRecord = flowTodoRecordRepository.getByMergeKey(flowRecord.getMergeKey()); |
282 | | - if (todoMargeRecord != null) { |
283 | | - flowTodoRecordRepository.remove(todoMargeRecord); |
284 | | - } |
285 | | - } |
286 | | - } |
287 | | - } |
288 | | - } |
289 | | - |
290 | | - public void saveAll() { |
291 | | - this.saveRecords(); |
292 | | - this.saveTodoMargeRecords(); |
293 | | - this.removeTodoMergeRecords(); |
294 | | - } |
295 | | - |
296 | | - |
297 | | - } |
298 | | - |
299 | 198 | } |
0 commit comments