@@ -158,126 +158,4 @@ public Map<String, String> getNextNodeNamesByPreviousNodeName(BpmnModel bpmnMode
158158 return nextNodes ;
159159 }
160160
161- /**
162- * 获取流程定义列表信息
163- * 未来节点的审批人信息只能根据当前变量获取。若后续节点对变量有变化,当前节点无法获取到未来信息。
164- *
165- * @param taskId 任务ID
166- * @return 流程信息
167- */
168- @ ReconfirmAuthorization
169- public List <Element > getProcInstGraphByTaskId (String taskId ) {
170- Optional <CWHistoricTaskInstance > optional = this .taskInstanceService .getHistoricTaskInstanceById (taskId );
171- if (!optional .isPresent ()) {
172- log .warn ("Task does not exist!" );
173- throw new ProcessExtCommonException ("Task does not exist!" );
174- } else {
175- return this .getProcInstGraphByProcInstId (optional .get ().getProcessInstanceId ());
176- }
177- }
178-
179- /**
180- * 获取流程定义列表信息
181- * 未来节点的审批人信息只能根据当前变量获取。若后续节点对变量有变化,当前节点无法获取到未来信息。
182- *
183- * @param procInstId
184- * @return 流程信息
185- */
186- @ ReconfirmAuthorization
187- public List <Element > getProcInstGraphByProcInstId (String procInstId ) {
188- try {
189- CWProcInstGraphModel cwProcInstGraphModel = processGraphService .getProcInstGraphModelByProcessInstanceId (procInstId );
190- //未完成节点获取编辑态设置的审批人信息
191- cwProcInstGraphModel .getElements ().stream ()
192- .filter (element -> !element .getType ().equals (com .netease .lowcode .lib .util .ProcessConstant .ELEMENT_EVENT_END ))
193- .filter (element -> !element .getType ().equals (com .netease .lowcode .lib .util .ProcessConstant .ELEMENT_EVENT_Start ))
194- .filter (element -> !element .getType ().equals (com .netease .lowcode .lib .util .ProcessConstant .ELEMENT_EVENT_InclusiveGateway ))
195- .filter (element -> !element .getType ().equals (com .netease .lowcode .lib .util .ProcessConstant .ELEMENT_EVENT_ExclusiveGateway ))
196- .filter (element -> !element .isCompleted ())
197- .filter (element -> element .getCompleteInfos () == null || element .getCompleteInfos ().isEmpty ())
198- .forEach (element -> {
199- List <CWCompleteInfoModel > getCompleteInfos = new ArrayList <>();
200- CWCompleteInfoModel cwCompleteInfoModel = new CWCompleteInfoModel ();
201- cwCompleteInfoModel .setCompleted (false );
202- cwCompleteInfoModel .setCandidates (getAssigneeList (procInstId , element .getName ()));
203- getCompleteInfos .add (cwCompleteInfoModel );
204- element .setCompleteInfos (getCompleteInfos );
205- });
206- //固定end节点最后
207- CWElementModel end = cwProcInstGraphModel .getElements ().stream ().filter (element -> element .getType ().equals (com .netease .lowcode .lib .util .ProcessConstant .ELEMENT_EVENT_END )).findFirst ().get ();
208- cwProcInstGraphModel .getElements ().remove (end );
209- List <CWElementModel > cwElementModelList = ElementSort .sortElements (cwProcInstGraphModel .getElements (), cwProcInstGraphModel .getFlows ());
210- cwElementModelList .add (end );
211- cwElementModelList = cwElementModelList .stream ().filter (Objects ::nonNull ).collect (Collectors .toList ());
212- return toElement (cwElementModelList );
213- } catch (Exception e ) {
214- log .error ("Process graph sort error!" , e );
215- throw e ;
216- }
217- }
218-
219- private List <Element > toElement (List <CWElementModel > cwElementModelList ) {
220- List <Element > elements = new ArrayList <>();
221- for (CWElementModel cwElementModel : cwElementModelList ) {
222- Element element = new Element ();
223- element .setName (cwElementModel .getName ());
224- element .setTitle (cwElementModel .getTitle ());
225- element .setType (cwElementModel .getType ());
226- element .setCurrent (cwElementModel .isCurrent ());
227- element .setCompleted (cwElementModel .isCompleted ());
228- if (cwElementModel .getCompleteInfos () != null && !cwElementModel .getCompleteInfos ().isEmpty ()) {
229- List <CompleteInfo > completeInfos = cwElementModel .getCompleteInfos ().stream ().map (cwCompleteInfoModel -> {
230- CompleteInfo completeInfo = new CompleteInfo ();
231- completeInfo .setCompleteTime (cwCompleteInfoModel .getCompleteTime ());
232- completeInfo .setCompleted (cwCompleteInfoModel .isCompleted ());
233- if (StringUtils .isNoneBlank (cwCompleteInfoModel .getAssignee ())) {
234- com .netease .codewave .process .open .domain .structure .ProcessUser processUserAssignee = processUserIdentityService .getUsersByUserName (cwCompleteInfoModel .getAssignee ());
235- completeInfo .setAssignee (ProcessUserUtil .toProcessUserFront (processUserAssignee ));
236- }
237- if (com .netease .lowcode .core .util .CollectionUtils .isNotEmpty (cwCompleteInfoModel .getCandidates ())) {
238- completeInfo .setCandidates (cwCompleteInfoModel .getCandidates ().stream ()
239- .map (processUserIdentityService ::getUsersByUserName )
240- .map (ProcessUserUtil ::toProcessUserFront ).collect (Collectors .toList ()));
241- }
242- completeInfo .setAddSignTag (cwCompleteInfoModel .getAddSignTag ());
243- return completeInfo ;
244- }).collect (Collectors .toList ());
245- element .setCompleteInfos (completeInfos );
246- }
247- elements .add (element );
248- }
249- return elements ;
250- }
251-
252- private List <String > getAssigneeList (String procInstId , String currentUserTaskNodeKey ) {
253- BpmnModel bpmnModel = repositoryService .getBpmnModel (getProcessDefinitionId (procInstId ));
254- if (bpmnModel != null ) {
255- String version = bpmnModel .getMainProcess ().getAttributeValue (ProcessConstant .EXTENSION_NAMESPACE , ProcessConstant .KEY_NASL_VERSION );
256- try {
257- String taskAssigneeServiceName = String .format (TASK_ASSIGNEE_SERVICE_NAME , bpmnModel .getMainProcess ().getId (), version , currentUserTaskNodeKey );
258- Object service = applicationContext .getBean (taskAssigneeServiceName );
259- if (service == null ) {
260- return null ;
261- }
262- Method method = service .getClass ().getMethod ("getAssigneeList" , Map .class );
263- Map <String , Object > variables = runtimeService .getVariables (procInstId );
264- return (List <String >) method .invoke (service , variables );
265- } catch (Exception e ) {
266- log .error ("getAssigneeList error" , e );
267- }
268- }
269- return null ;
270- }
271-
272- public String getProcessDefinitionId (String processInstanceId ) {
273- // 根据流程实例ID查询流程实例
274- HistoricProcessInstance historicProcessInstance = historyService .createHistoricProcessInstanceQuery ()
275- .processInstanceId (processInstanceId )
276- .singleResult ();
277-
278- if (historicProcessInstance != null ) {
279- return historicProcessInstance .getProcessDefinitionId ();
280- }
281- return null ;
282- }
283161}
0 commit comments