break60 4 years ago
parent
commit
6dbc2fc0dc
  1. 42
      dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
  2. 2
      dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java
  3. 12
      dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/localParams.vue
  4. 52
      dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/start.vue

42
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java

@ -221,9 +221,8 @@ public class ProcessDefinitionServiceImpl extends BaseService implements
processDefineMapper.updateVersionByProcessDefinitionId(processDefine.getId(), version); processDefineMapper.updateVersionByProcessDefinitionId(processDefine.getId(), version);
// return processDefinition object with ID // return processDefinition object with ID
result.put(Constants.DATA_LIST, processDefineMapper.selectById(processDefine.getId())); result.put(Constants.DATA_LIST, processDefine.getId());
putMsg(result, Status.SUCCESS); putMsg(result, Status.SUCCESS);
result.put(PROCESSDEFINITIONID, processDefine.getId());
return result; return result;
} }
@ -888,8 +887,8 @@ public class ProcessDefinitionServiceImpl extends BaseService implements
//create process definition //create process definition
Integer processDefinitionId = Integer processDefinitionId =
Objects.isNull(createProcessResult.get(PROCESSDEFINITIONID)) Objects.isNull(createProcessResult.get(Constants.DATA_LIST))
? null : Integer.parseInt(createProcessResult.get(PROCESSDEFINITIONID).toString()); ? null : Integer.parseInt(createProcessResult.get(Constants.DATA_LIST).toString());
//scheduler param //scheduler param
return getImportProcessScheduleResult(loginUser, return getImportProcessScheduleResult(loginUser,
@ -1516,41 +1515,6 @@ public class ProcessDefinitionServiceImpl extends BaseService implements
} }
} }
/**
* copy process definition
*
* @param loginUser login user
* @param projectName project name
* @param processId process definition id
* @return copy result code
*/
public Map<String, Object> copyProcessDefinition(User loginUser, String projectName, Integer processId) {
Map<String, Object> result = new HashMap<>(5);
Project project = projectMapper.queryByName(projectName);
Map<String, Object> checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName);
Status resultStatus = (Status) checkResult.get(Constants.STATUS);
if (resultStatus != Status.SUCCESS) {
return checkResult;
}
ProcessDefinition processDefinition = processDefineMapper.selectById(processId);
if (processDefinition == null) {
putMsg(result, Status.PROCESS_DEFINE_NOT_EXIST, processId);
return result;
} else {
return createProcessDefinition(
loginUser,
projectName,
processDefinition.getName() + "_copy_" + System.currentTimeMillis(),
processDefinition.getProcessDefinitionJson(),
processDefinition.getDescription(),
processDefinition.getLocations(),
processDefinition.getConnects());
}
}
/** /**
* batch copy process definition * batch copy process definition
* *

2
dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java

@ -94,7 +94,7 @@ public class ProcessDefinitionControllerTest {
String connects = "[]"; String connects = "[]";
Map<String, Object> result = new HashMap<>(); Map<String, Object> result = new HashMap<>();
putMsg(result, Status.SUCCESS); putMsg(result, Status.SUCCESS);
result.put("processDefinitionId", 1); result.put(Constants.DATA_LIST, 1);
Mockito.when(processDefinitionService.createProcessDefinition(user, projectName, name, json, Mockito.when(processDefinitionService.createProcessDefinition(user, projectName, name, json,
description, locations, connects)).thenReturn(result); description, locations, connects)).thenReturn(result);

12
dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/localParams.vue

@ -59,7 +59,7 @@
</el-select> </el-select>
</template> </template>
<el-input <el-input
:disabled="isDetails" :disabled="isDetails && !isStartProcess"
type="text" type="text"
size="small" size="small"
v-model="localParamsList[$index].value" v-model="localParamsList[$index].value"
@ -68,18 +68,18 @@
@blur="_handleValue()" @blur="_handleValue()"
:style="inputStyle"> :style="inputStyle">
</el-input> </el-input>
<span class="lt-add"> <span class="lt-add" v-show="!isStartProcess">
<a href="javascript:" style="color:red;" @click="!isDetails && _removeUdp($index)" > <a href="javascript:" style="color:red;" @click="!isDetails && _removeUdp($index)" >
<em class="el-icon-delete" :class="_isDetails" data-toggle="tooltip" :title="$t('delete')" ></em> <em class="el-icon-delete" :class="_isDetails" data-toggle="tooltip" :title="$t('delete')" ></em>
</a> </a>
</span> </span>
<span class="add" v-if="$index === (localParamsList.length - 1)"> <span class="add" v-if="$index === (localParamsList.length - 1)" v-show="!isStartProcess">
<a href="javascript:" @click="!isDetails && _addUdp()" > <a href="javascript:" @click="!isDetails && _addUdp()" >
<em class="el-icon-circle-plus-outline" :class="_isDetails" data-toggle="tooltip" :title="$t('Add')"></em> <em class="el-icon-circle-plus-outline" :class="_isDetails" data-toggle="tooltip" :title="$t('Add')"></em>
</a> </a>
</span> </span>
</div> </div>
<span class="add-dp" v-if="!localParamsList.length"> <span class="add-dp" v-if="!localParamsList.length" v-show="!isStartProcess">
<a href="javascript:" @click="!isDetails && _addUdp()" > <a href="javascript:" @click="!isDetails && _addUdp()" >
<em class="iconfont el-icon-circle-plus-outline" :class="_isDetails" data-toggle="tooltip" :title="$t('Add')"></em> <em class="iconfont el-icon-circle-plus-outline" :class="_isDetails" data-toggle="tooltip" :title="$t('Add')"></em>
</a> </a>
@ -112,6 +112,10 @@
hide: { hide: {
type: Boolean, type: Boolean,
default: true default: true
},
isStartProcess: {
type: Boolean,
default: false
} }
}, },
methods: { methods: {

52
dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/start.vue

@ -109,6 +109,22 @@
</div> </div>
</div> </div>
</div> </div>
<div class="clearfix list">
<div class="text">
<span>{{$t('Startup parameter')}}</span>
</div>
<div class="cont" style="width: 688px;">
<div style="padding-top: 6px;">
<m-local-params
ref="refLocalParams"
@on-local-params="_onLocalParams"
:udp-list="udpList"
:hide="false"
:isStartProcess="true">
</m-local-params>
</div>
</div>
</div>
<template v-if="execType"> <template v-if="execType">
<div class="clearfix list" style="margin:-6px 0 16px 0"> <div class="clearfix list" style="margin:-6px 0 16px 0">
<div class="text"> <div class="text">
@ -147,11 +163,15 @@
</div> </div>
</template> </template>
<script> <script>
import _ from 'lodash'
import dayjs from 'dayjs' import dayjs from 'dayjs'
import store from '@/conf/home/store' import store from '@/conf/home/store'
import { warningTypeList } from './util' import { warningTypeList } from './util'
import mPriority from '@/module/components/priority/priority' import mPriority from '@/module/components/priority/priority'
import mWorkerGroups from '@/conf/home/pages/dag/_source/formModel/_source/workerGroups' import mWorkerGroups from '@/conf/home/pages/dag/_source/formModel/_source/workerGroups'
import mLocalParams from '@/conf/home/pages/dag/_source/formModel/tasks/_source/localParams'
import disabledState from '@/module/mixin/disabledState'
import { mapMutations } from 'vuex'
export default { export default {
name: 'start-process', name: 'start-process',
@ -171,10 +191,13 @@
taskDependType: 'TASK_POST', taskDependType: 'TASK_POST',
runMode: 'RUN_MODE_SERIAL', runMode: 'RUN_MODE_SERIAL',
processInstancePriority: 'MEDIUM', processInstancePriority: 'MEDIUM',
workerGroup: 'default' workerGroup: 'default',
// Global custom parameters
definitionGlobalParams: [],
udpList: []
} }
}, },
mixins: [disabledState],
props: { props: {
startData: Object, startData: Object,
startNodeList: { startNodeList: {
@ -184,11 +207,21 @@
sourceType: String sourceType: String
}, },
methods: { methods: {
...mapMutations('dag', ['setIsDetails', 'resetParams']),
_onLocalParams (a) {
this.udpList = a
},
_datepicker (val) { _datepicker (val) {
this.scheduleTime = val this.scheduleTime = val
}, },
_start () { _start () {
this.spinnerLoading = true this.spinnerLoading = true
let startParams = {}
for (const item of this.udpList) {
if (item.value !== '') {
startParams[item.prop] = item.value
}
}
let param = { let param = {
processDefinitionId: this.startData.id, processDefinitionId: this.startData.id,
scheduleTime: this.scheduleTime.length && this.scheduleTime.join(',') || '', scheduleTime: this.scheduleTime.length && this.scheduleTime.join(',') || '',
@ -200,7 +233,8 @@
taskDependType: this.taskDependType, taskDependType: this.taskDependType,
runMode: this.runMode, runMode: this.runMode,
processInstancePriority: this.processInstancePriority, processInstancePriority: this.processInstancePriority,
workerGroup: this.workerGroup workerGroup: this.workerGroup,
startParams: !_.isEmpty(startParams) ? JSON.stringify(startParams) : ''
} }
// Executed from the specified node // Executed from the specified node
if (this.sourceType === 'contextmenu') { if (this.sourceType === 'contextmenu') {
@ -209,6 +243,8 @@
this.store.dispatch('dag/processStart', param).then(res => { this.store.dispatch('dag/processStart', param).then(res => {
this.$message.success(res.msg) this.$message.success(res.msg)
this.$emit('onUpdateStart') this.$emit('onUpdateStart')
// recovery
this.udpList = _.cloneDeep(this.definitionGlobalParams)
setTimeout(() => { setTimeout(() => {
this.spinnerLoading = false this.spinnerLoading = false
this.close() this.close()
@ -226,6 +262,13 @@
}) })
}) })
}, },
_getGlobalParams () {
this.setIsDetails(true)
this.store.dispatch('dag/getProcessDetails', this.startData.id).then(res => {
this.definitionGlobalParams = _.cloneDeep(this.store.state.dag.globalParams)
this.udpList = _.cloneDeep(this.store.state.dag.globalParams)
})
},
ok () { ok () {
this._start() this._start()
}, },
@ -241,6 +284,7 @@
created () { created () {
this.warningType = this.warningTypeList[0].id this.warningType = this.warningTypeList[0].id
this.workflowName = this.startData.name this.workflowName = this.startData.name
this._getGlobalParams()
let stateWorkerGroupsList = this.store.state.security.workerGroupsListAll || [] let stateWorkerGroupsList = this.store.state.security.workerGroupsListAll || []
if (stateWorkerGroupsList.length) { if (stateWorkerGroupsList.length) {
this.workerGroup = stateWorkerGroupsList[0].id this.workerGroup = stateWorkerGroupsList[0].id
@ -263,7 +307,7 @@
this.workflowName = this.startData.name this.workflowName = this.startData.name
}, },
computed: {}, computed: {},
components: { mPriority, mWorkerGroups } components: { mPriority, mWorkerGroups, mLocalParams }
} }
</script> </script>

Loading…
Cancel
Save