|
@@ -563,14 +563,18 @@ public class ProcessDefinitionService extends BaseDAGService {
|
|
|
}
|
|
|
|
|
|
|
|
|
- * export process definition by id
|
|
|
- *
|
|
|
- * @param loginUser login user
|
|
|
- * @param projectName project name
|
|
|
- * @param processDefinitionId process definition id
|
|
|
- * @param response response
|
|
|
+ * batch export process definition by ids
|
|
|
+ * @param loginUser
|
|
|
+ * @param projectName
|
|
|
+ * @param processDefinitionIds
|
|
|
+ * @param response
|
|
|
*/
|
|
|
- public void exportProcessDefinitionById(User loginUser, String projectName, Integer processDefinitionId, HttpServletResponse response) {
|
|
|
+ public void batchExportProcessDefinitionByIds(User loginUser, String projectName, String processDefinitionIds, HttpServletResponse response){
|
|
|
+
|
|
|
+ if(StringUtils.isEmpty(processDefinitionIds)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
Project project = projectMapper.queryByName(projectName);
|
|
|
|
|
@@ -578,39 +582,68 @@ public class ProcessDefinitionService extends BaseDAGService {
|
|
|
Map<String, Object> checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName);
|
|
|
Status resultStatus = (Status) checkResult.get(Constants.STATUS);
|
|
|
|
|
|
- if (resultStatus == Status.SUCCESS) {
|
|
|
+ if(resultStatus != Status.SUCCESS){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<ProcessMeta> processDefinitionList =
|
|
|
+ getProcessDefinitionList(processDefinitionIds);
|
|
|
+
|
|
|
+ if(CollectionUtils.isNotEmpty(processDefinitionList)){
|
|
|
+ downloadProcessDefinitionFile(response, processDefinitionList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * get process definition list by ids
|
|
|
+ * @param processDefinitionIds
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private List<ProcessMeta> getProcessDefinitionList(String processDefinitionIds){
|
|
|
+ List<ProcessMeta> processDefinitionList = new ArrayList<>();
|
|
|
+ String[] processDefinitionIdArray = processDefinitionIds.split(",");
|
|
|
+ for (String strProcessDefinitionId : processDefinitionIdArray) {
|
|
|
|
|
|
+ int processDefinitionId = Integer.parseInt(strProcessDefinitionId);
|
|
|
ProcessDefinition processDefinition = processDefineMapper.queryByDefineId(processDefinitionId);
|
|
|
-
|
|
|
if (null != processDefinition) {
|
|
|
- String exportProcessJson = exportProcessMetaDataStr(processDefinitionId, processDefinition);
|
|
|
- response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
|
|
|
- response.setHeader("Content-Disposition", "attachment;filename="+processDefinition.getName()+".json");
|
|
|
- BufferedOutputStream buff = null;
|
|
|
- ServletOutputStream out = null;
|
|
|
+ processDefinitionList.add(exportProcessMetaData(processDefinitionId, processDefinition));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return processDefinitionList;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * download the process definition file
|
|
|
+ * @param response
|
|
|
+ * @param processDefinitionList
|
|
|
+ */
|
|
|
+ private void downloadProcessDefinitionFile(HttpServletResponse response, List<ProcessMeta> processDefinitionList) {
|
|
|
+ response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
|
|
|
+ BufferedOutputStream buff = null;
|
|
|
+ ServletOutputStream out = null;
|
|
|
+ try {
|
|
|
+ out = response.getOutputStream();
|
|
|
+ buff = new BufferedOutputStream(out);
|
|
|
+ buff.write(JSON.toJSONString(processDefinitionList).getBytes(StandardCharsets.UTF_8));
|
|
|
+ buff.flush();
|
|
|
+ buff.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ logger.warn("export process fail", e);
|
|
|
+ }finally {
|
|
|
+ if (null != buff) {
|
|
|
try {
|
|
|
- out = response.getOutputStream();
|
|
|
- buff = new BufferedOutputStream(out);
|
|
|
- buff.write(exportProcessJson.getBytes(StandardCharsets.UTF_8));
|
|
|
- buff.flush();
|
|
|
buff.close();
|
|
|
- } catch (IOException e) {
|
|
|
- logger.warn("export process fail", e);
|
|
|
- }finally {
|
|
|
- if (null != buff) {
|
|
|
- try {
|
|
|
- buff.close();
|
|
|
- } catch (Exception e) {
|
|
|
- logger.warn("export process buffer not close", e);
|
|
|
- }
|
|
|
- }
|
|
|
- if (null != out) {
|
|
|
- try {
|
|
|
- out.close();
|
|
|
- } catch (Exception e) {
|
|
|
- logger.warn("export process output stream not close", e);
|
|
|
- }
|
|
|
- }
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.warn("export process buffer not close", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (null != out) {
|
|
|
+ try {
|
|
|
+ out.close();
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.warn("export process output stream not close", e);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -623,6 +656,17 @@ public class ProcessDefinitionService extends BaseDAGService {
|
|
|
* @return export process metadata string
|
|
|
*/
|
|
|
public String exportProcessMetaDataStr(Integer processDefinitionId, ProcessDefinition processDefinition) {
|
|
|
+
|
|
|
+ return JSONUtils.toJsonString(exportProcessMetaData(processDefinitionId,processDefinition));
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * get export process metadata string
|
|
|
+ * @param processDefinitionId process definition id
|
|
|
+ * @param processDefinition process definition
|
|
|
+ * @return export process metadata string
|
|
|
+ */
|
|
|
+ public ProcessMeta exportProcessMetaData(Integer processDefinitionId, ProcessDefinition processDefinition) {
|
|
|
|
|
|
String correctProcessDefinitionJson = addExportTaskNodeSpecialParam(processDefinition.getProcessDefinitionJson());
|
|
|
processDefinition.setProcessDefinitionJson(correctProcessDefinitionJson);
|
|
@@ -639,14 +683,6 @@ public class ProcessDefinitionService extends BaseDAGService {
|
|
|
List<Schedule> schedules = scheduleMapper.queryByProcessDefinitionId(processDefinitionId);
|
|
|
if (!schedules.isEmpty()) {
|
|
|
Schedule schedule = schedules.get(0);
|
|
|
-
|
|
|
-
|
|
|
- if (null == workerGroup && schedule.getWorkerGroupId() == -1) {
|
|
|
- workerGroup = new WorkerGroup();
|
|
|
- workerGroup.setId(-1);
|
|
|
- workerGroup.setName("");
|
|
|
- }*/
|
|
|
-
|
|
|
exportProcessMeta.setScheduleWarningType(schedule.getWarningType().toString());
|
|
|
exportProcessMeta.setScheduleWarningGroupId(schedule.getWarningGroupId());
|
|
|
exportProcessMeta.setScheduleStartTime(DateUtils.dateToString(schedule.getStartTime()));
|
|
@@ -658,7 +694,7 @@ public class ProcessDefinitionService extends BaseDAGService {
|
|
|
exportProcessMeta.setScheduleWorkerGroupName(schedule.getWorkerGroup());
|
|
|
}
|
|
|
|
|
|
- return JSONUtils.toJsonString(exportProcessMeta);
|
|
|
+ return exportProcessMeta;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -705,24 +741,36 @@ public class ProcessDefinitionService extends BaseDAGService {
|
|
|
public Map<String, Object> importProcessDefinition(User loginUser, MultipartFile file, String currentProjectName) {
|
|
|
Map<String, Object> result = new HashMap<>(5);
|
|
|
String processMetaJson = FileUtils.file2String(file);
|
|
|
- ProcessMeta processMeta = JSONUtils.parseObject(processMetaJson, ProcessMeta.class);
|
|
|
+ List<ProcessMeta> processMetaList = JSON.parseArray(processMetaJson,ProcessMeta.class);
|
|
|
|
|
|
|
|
|
- if (null == processMeta) {
|
|
|
+ if (CollectionUtils.isEmpty(processMetaList)) {
|
|
|
putMsg(result, Status.DATA_IS_NULL, "fileContent");
|
|
|
return result;
|
|
|
}
|
|
|
- if (StringUtils.isEmpty(processMeta.getProjectName())) {
|
|
|
- putMsg(result, Status.DATA_IS_NULL, "projectName");
|
|
|
- return result;
|
|
|
- }
|
|
|
- if (StringUtils.isEmpty(processMeta.getProcessDefinitionName())) {
|
|
|
- putMsg(result, Status.DATA_IS_NULL, "processDefinitionName");
|
|
|
- return result;
|
|
|
+
|
|
|
+ for(ProcessMeta processMeta:processMetaList){
|
|
|
+
|
|
|
+ if (!checkAndImportProcessDefinition(loginUser, currentProjectName, result, processMeta)){
|
|
|
+ return result;
|
|
|
+ }
|
|
|
}
|
|
|
- if (StringUtils.isEmpty(processMeta.getProcessDefinitionJson())) {
|
|
|
- putMsg(result, Status.DATA_IS_NULL, "processDefinitionJson");
|
|
|
- return result;
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * check and import process definition
|
|
|
+ * @param loginUser
|
|
|
+ * @param currentProjectName
|
|
|
+ * @param result
|
|
|
+ * @param processMeta
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private boolean checkAndImportProcessDefinition(User loginUser, String currentProjectName, Map<String, Object> result, ProcessMeta processMeta) {
|
|
|
+
|
|
|
+ if(!checkImportanceParams(processMeta,result)){
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -734,31 +782,84 @@ public class ProcessDefinitionService extends BaseDAGService {
|
|
|
processDefinitionName, 1);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- String importProcessParam = addImportTaskNodeParam(loginUser, processMeta.getProcessDefinitionJson(), targetProject);
|
|
|
+
|
|
|
+ Map<String, Object> createProcessResult =
|
|
|
+ getCreateProcessResult(loginUser,
|
|
|
+ currentProjectName,
|
|
|
+ result,
|
|
|
+ processMeta,
|
|
|
+ processDefinitionName,
|
|
|
+ addImportTaskNodeParam(loginUser, processMeta.getProcessDefinitionJson(), targetProject));
|
|
|
+
|
|
|
+ if(createProcessResult == null){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ Integer processDefinitionId =
|
|
|
+ Objects.isNull(createProcessResult.get("processDefinitionId"))?
|
|
|
+ null:Integer.parseInt(createProcessResult.get("processDefinitionId").toString());
|
|
|
+
|
|
|
+
|
|
|
+ return getImportProcessScheduleResult(loginUser,
|
|
|
+ currentProjectName,
|
|
|
+ result,
|
|
|
+ processMeta,
|
|
|
+ processDefinitionName,
|
|
|
+ processDefinitionId);
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
- Map<String, Object> createProcessResult;
|
|
|
+
|
|
|
+ * get create process result
|
|
|
+ * @param loginUser
|
|
|
+ * @param currentProjectName
|
|
|
+ * @param result
|
|
|
+ * @param processMeta
|
|
|
+ * @param processDefinitionName
|
|
|
+ * @param importProcessParam
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private Map<String, Object> getCreateProcessResult(User loginUser,
|
|
|
+ String currentProjectName,
|
|
|
+ Map<String, Object> result,
|
|
|
+ ProcessMeta processMeta,
|
|
|
+ String processDefinitionName,
|
|
|
+ String importProcessParam){
|
|
|
+ Map<String, Object> createProcessResult = null;
|
|
|
try {
|
|
|
createProcessResult = createProcessDefinition(loginUser
|
|
|
,currentProjectName,
|
|
|
- processDefinitionName,
|
|
|
+ processDefinitionName+"_import_"+System.currentTimeMillis(),
|
|
|
importProcessParam,
|
|
|
processMeta.getProcessDefinitionDescription(),
|
|
|
processMeta.getProcessDefinitionLocations(),
|
|
|
processMeta.getProcessDefinitionConnects());
|
|
|
+ putMsg(result, Status.SUCCESS);
|
|
|
} catch (JsonProcessingException e) {
|
|
|
logger.error("import process meta json data: {}", e.getMessage(), e);
|
|
|
putMsg(result, Status.IMPORT_PROCESS_DEFINE_ERROR);
|
|
|
- return result;
|
|
|
}
|
|
|
|
|
|
- putMsg(result, Status.SUCCESS);
|
|
|
-
|
|
|
- Integer processDefinitionId = null;
|
|
|
- if (null != createProcessResult && Objects.nonNull(createProcessResult.get("processDefinitionId"))) {
|
|
|
- processDefinitionId = Integer.parseInt(createProcessResult.get("processDefinitionId").toString());
|
|
|
- }
|
|
|
-
|
|
|
+ return createProcessResult;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * get import process schedule result
|
|
|
+ * @param loginUser
|
|
|
+ * @param currentProjectName
|
|
|
+ * @param result
|
|
|
+ * @param processMeta
|
|
|
+ * @param processDefinitionName
|
|
|
+ * @param processDefinitionId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private boolean getImportProcessScheduleResult(User loginUser,
|
|
|
+ String currentProjectName,
|
|
|
+ Map<String, Object> result,
|
|
|
+ ProcessMeta processMeta,
|
|
|
+ String processDefinitionName,
|
|
|
+ Integer processDefinitionId) {
|
|
|
if (null != processMeta.getScheduleCrontab() && null != processDefinitionId) {
|
|
|
int scheduleInsert = importProcessSchedule(loginUser,
|
|
|
currentProjectName,
|
|
@@ -768,11 +869,33 @@ public class ProcessDefinitionService extends BaseDAGService {
|
|
|
|
|
|
if (0 == scheduleInsert) {
|
|
|
putMsg(result, Status.IMPORT_PROCESS_DEFINE_ERROR);
|
|
|
- return result;
|
|
|
+ return false;
|
|
|
}
|
|
|
}
|
|
|
+ return true;
|
|
|
+ }
|
|
|
|
|
|
- return result;
|
|
|
+
|
|
|
+ * check importance params
|
|
|
+ * @param processMeta
|
|
|
+ * @param result
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private boolean checkImportanceParams(ProcessMeta processMeta,Map<String, Object> result){
|
|
|
+ if (StringUtils.isEmpty(processMeta.getProjectName())) {
|
|
|
+ putMsg(result, Status.DATA_IS_NULL, "projectName");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(processMeta.getProcessDefinitionName())) {
|
|
|
+ putMsg(result, Status.DATA_IS_NULL, "processDefinitionName");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(processMeta.getProcessDefinitionJson())) {
|
|
|
+ putMsg(result, Status.DATA_IS_NULL, "processDefinitionJson");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
|