@simitgroup/simpleapp-generator 1.1.14 → 1.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/framework.js +5 -5
- package/dist/framework.js.map +1 -1
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +20 -7
- package/dist/generate.js.map +1 -1
- package/dist/processors/bpmnbuilder.d.ts +2 -0
- package/dist/processors/bpmnbuilder.d.ts.map +1 -0
- package/dist/processors/bpmnbuilder.js +165 -0
- package/dist/processors/bpmnbuilder.js.map +1 -0
- package/dist/resource/camunda-moodle.d.ts +27 -0
- package/dist/resource/camunda-moodle.d.ts.map +1 -0
- package/dist/resource/camunda-moodle.js +91 -0
- package/dist/resource/camunda-moodle.js.map +1 -0
- package/package.json +3 -1
- package/src/framework.ts +5 -5
- package/src/generate.ts +25 -7
- package/src/processors/bpmnbuilder.ts +166 -0
- package/src/resource/camunda-moodle.ts +87 -0
- package/templates/basic/nest/controller.ts.eta +2 -1
- package/templates/basic/nest/service.ts.eta +1 -1
- package/templates/basic/nuxt/pages.[id].vue.eta +4 -3
- package/templates/basic/nuxt/pages.form.vue.eta +0 -1
- package/templates/basic/nuxt/pages.landing.vue.eta +11 -11
- package/templates/basic/nuxt/pages.new.vue.eta +4 -3
- package/templates/basic/nuxt/pages.viewer.vue.eta +4 -7
- package/templates/nest/.env._eta +1 -1
- package/templates/nest/src/app.module.ts.eta +1 -3
- package/templates/nest/src/simpleapp/.gitignore.eta +2 -1
- package/templates/nest/src/simpleapp/generate/processors/simpleapp.processor.ts.eta +1 -1
- package/templates/nest/src/simpleapp/generate/workflow/formschema/SimpleApproveReject.ts.eta +8 -0
- package/templates/nest/src/simpleapp/generate/workflow/formschema/index.ts.eta +1 -0
- package/templates/nest/src/simpleapp/generate/workflow/workflow.config.ts.eta +73 -0
- package/templates/nest/src/{workflow → simpleapp/generate/workflow}/workflow.controller.ts.eta +4 -4
- package/templates/nest/src/simpleapp/generate/workflow/workflow.delegate.ts.eta +190 -0
- package/templates/nest/src/{workflow → simpleapp/generate/workflow}/workflow.service.ts.eta +92 -43
- package/templates/nest/src/{workflow → simpleapp/generate/workflow}/workflow.type.ts.eta +30 -0
- package/templates/nest/src/simpleapp/generate/workflow/workflow.userservice.ts.eta +77 -0
- package/templates/nest/src/simpleapp/simpleapp.module.ts.eta +18 -4
- package/templates/nest/src/simpleapp/workflows/bpmn/readme.md._eta +1 -0
- package/templates/nest/src/simpleapp/workflows/listeners/simpleapp.listener.ts._eta +27 -0
- package/templates/nest/src/simpleapp/workflows/readme.md._eta +1 -0
- package/templates/nuxt/.gitignore.eta +5 -4
- package/templates/nuxt/components/header/button/task/HeaderButtonTaskList.vue.eta +47 -72
- package/templates/nuxt/components/simpleApp/SimpleAppForm.vue.eta +1 -1
- package/templates/nuxt/components/simpleApp/SimpleAppJsonSchemaForm.vue.eta +5 -6
- package/templates/nuxt/components/workflow/forms/dynamicfield.vue._eta +85 -0
- package/templates/nuxt/components/workflow/forms/index.ts._eta +10 -0
- package/templates/nuxt/components/workflow/forms/simpleapprove.vue._eta +43 -0
- package/templates/nuxt/lang/{df.ts.eta → df.ts._eta} +4 -1
- package/templates/nuxt/nuxt.config.ts.eta +1 -1
- package/templates/nuxt/simpleapp/workflows/bpmn/readme.md._eta +1 -0
- package/templates/nuxt/simpleapp/workflows/forms/readme.md._eta +1 -0
- package/templates/project/workflows/bpmn/suspendcustomer.bpmn._eta +72 -0
- package/templates/project/workflows/forms/index.ts.eta +2 -0
- package/templates/project/workflows/forms/simpleapprove.jsonschema.ts.eta +8 -0
- package/templates/workflow/next/listener.ts.eta +76 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/src/processors/jsonschemabuilder.ts-old +0 -383
- package/templates/nest/src/workflow/bpmn/suspendcustomer.bpmn.eta +0 -66
- package/templates/nest/src/workflow/delegates/customer.ts._eta +0 -8
- package/templates/nest/src/workflow/delegates/hello.ts._eta +0 -5
- package/templates/nest/src/workflow/delegates/index.ts._eta +0 -5
- package/templates/nest/src/workflow/delegates/invoice.delegates.ts._eta +0 -9
- package/templates/nest/src/workflow/delegates/usertask.ts._eta +0 -3
- package/templates/nest/src/workflow/formschema/SimpleApproveReject.ts._eta +0 -8
- package/templates/nest/src/workflow/formschema/index.ts._eta +0 -1
- package/templates/nest/src/workflow/workflow.config.ts.eta +0 -57
- package/templates/nest/src/workflow/workflow.delegate.ts.eta +0 -104
- package/templates/nest/src/workflow/workflow.delegateservice.ts._eta +0 -46
- package/templates/nest/src/workflow/workflow.module.ts.eta +0 -21
- /package/templates/nest/src/{workflow → simpleapp/generate/workflow}/workflow.apischema.ts.eta +0 -0
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<button class="text-center border-none cursor-pointer p-1" @click="visible=true" >
|
|
3
|
-
<i class="pi pi-bell"
|
|
3
|
+
<i class="pi pi-bell">
|
|
4
|
+
<Badge :value="taskqty" severity="danger"></Badge>
|
|
5
|
+
</i>
|
|
6
|
+
|
|
4
7
|
<Sidebar v-model:visible="visible" position="right" :modal="false" :dismissable="false">
|
|
5
8
|
<template #header>
|
|
6
9
|
<div class="text text-lg font-bold">{{ t('mytasks') }}</div>
|
|
@@ -14,52 +17,44 @@
|
|
|
14
17
|
:close-on-escape="false" >
|
|
15
18
|
<template #header>
|
|
16
19
|
<div class="text text-lg font-bold">
|
|
17
|
-
{{ selectedtask
|
|
20
|
+
{{ selectedtask?.processName }} / {{ selectedtask?.name }}
|
|
18
21
|
</div>
|
|
19
22
|
</template>
|
|
20
23
|
<template #default>
|
|
21
|
-
<div >
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
<template #content>
|
|
31
|
-
<div >
|
|
32
|
-
<div v-for="field in Object.keys(formSchema.properties)" class="border p-2">
|
|
33
|
-
<SimpleAppInput :setting="o.getField(`#/properties/${field}`)"
|
|
34
|
-
:input-type="autoPickInput(formSchema.properties[field])"
|
|
35
|
-
v-model="data[field]" />
|
|
36
|
-
</div>
|
|
37
|
-
</div>
|
|
38
|
-
</template>
|
|
39
|
-
<template #footer>
|
|
40
|
-
<Button class="btn-primary" @click="o.validate(validateCallBack)">{{ t('submit') }}</Button>
|
|
41
|
-
|
|
42
|
-
</template>
|
|
43
|
-
</Card>
|
|
44
|
-
</SimpleAppJsonSchemaForm>
|
|
45
|
-
|
|
46
|
-
</div>
|
|
24
|
+
<div v-if="componentresolver && formSchema" >
|
|
25
|
+
<component :is="componentresolver"
|
|
26
|
+
:processName="selectedtask?.processName ?? ''"
|
|
27
|
+
:taskName="selectedtask?.name??''"
|
|
28
|
+
:instanceData="instanceData"
|
|
29
|
+
:jsonschema="formSchema"
|
|
30
|
+
v-model="data"
|
|
31
|
+
@submit="invokeTask"
|
|
32
|
+
/>
|
|
47
33
|
</div>
|
|
48
34
|
</template>
|
|
49
35
|
</Dialog>
|
|
50
36
|
</button>
|
|
51
37
|
</template>
|
|
52
38
|
<script setup lang="ts">
|
|
53
|
-
import {UserTaskType,
|
|
39
|
+
import {UserTaskType,NotificationStatus} from '~/types'
|
|
54
40
|
import { useDialog } from 'primevue/usedialog';
|
|
41
|
+
import * as forms from '~/simpleapp/workflows/forms'
|
|
42
|
+
import {getFormComponent} from '~/components/workflow/forms'
|
|
55
43
|
const dialog = useDialog()
|
|
56
44
|
const dialogvisible = ref(false)
|
|
57
45
|
const visible = ref(false)
|
|
58
|
-
const selectedtask = ref()
|
|
46
|
+
const selectedtask = ref<UserTaskType>()
|
|
59
47
|
const tasklist = ref<UserTaskType[]>([])
|
|
60
48
|
const formSchema = ref()
|
|
49
|
+
const formkey = ref<string>('')
|
|
61
50
|
const data = ref<any>({})
|
|
62
|
-
|
|
51
|
+
const instanceData = ref<any>({})
|
|
52
|
+
const componentresolver = computed(()=>{
|
|
53
|
+
const workflowform = getFormComponent(formkey.value as string)
|
|
54
|
+
console.log("workflowformworkflowformworkflowform",workflowform)
|
|
55
|
+
return workflowform
|
|
56
|
+
})
|
|
57
|
+
const taskqty = computed(()=>tasklist.value.length)
|
|
63
58
|
|
|
64
59
|
onMounted(async ()=> syncTask())
|
|
65
60
|
watch(visible,(newvalue)=>{
|
|
@@ -78,56 +73,36 @@ const closeDialog = ()=>{
|
|
|
78
73
|
}
|
|
79
74
|
|
|
80
75
|
const invokeTask = async ()=>{
|
|
81
|
-
const res = await invokeUserTask(selectedtask.value
|
|
76
|
+
const res = await invokeUserTask(selectedtask.value?.taskId,data)
|
|
82
77
|
syncTask()
|
|
83
78
|
dialogvisible.value=false
|
|
84
79
|
}
|
|
85
80
|
const viewTask = async (task:UserTaskType)=>{
|
|
81
|
+
|
|
86
82
|
selectedtask.value=task
|
|
87
|
-
|
|
83
|
+
instanceData.value=task.data
|
|
84
|
+
|
|
88
85
|
const formsettings:any = await getTaskForm(task.processName, task.elementId)
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
86
|
+
formkey.value = formsettings.schema
|
|
87
|
+
console.log("viewTask formsettings",formsettings)
|
|
88
|
+
formSchema.value = forms[formkey.value as keyof typeof forms]
|
|
89
|
+
if(formSchema.value){
|
|
90
|
+
Object.keys(formSchema.value.properties).forEach((key)=>{
|
|
91
|
+
data.value[key]=''
|
|
92
|
+
})
|
|
95
93
|
|
|
96
|
-
|
|
97
|
-
if(setting.type=='boolean'){
|
|
98
|
-
return SimpleAppInputType.checkbox
|
|
99
|
-
}if(setting.type=='number'){
|
|
100
|
-
return SimpleAppInputType.number
|
|
101
|
-
}
|
|
102
|
-
else if(setting.enum){
|
|
103
|
-
return SimpleAppInputType.select
|
|
104
|
-
}
|
|
105
|
-
else if(setting.type=='string'){
|
|
106
|
-
return pickStringInput(setting)
|
|
94
|
+
dialogvisible.value=true
|
|
107
95
|
}else{
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
return SimpleAppInputType.date
|
|
116
|
-
break;
|
|
117
|
-
case 'textarea':
|
|
118
|
-
return SimpleAppInputType.textarea
|
|
119
|
-
break;
|
|
120
|
-
case 'text':
|
|
121
|
-
default:
|
|
122
|
-
return SimpleAppInputType.text
|
|
123
|
-
break;
|
|
96
|
+
useNuxtApp().$event('Notification',{
|
|
97
|
+
documentName:task.processName,
|
|
98
|
+
summary:t('formKeyNotFound',{formKey:formkey.value}),
|
|
99
|
+
status:NotificationStatus.error,
|
|
100
|
+
message:t('formKeyNotFound',{formKey:formkey.value}),
|
|
101
|
+
|
|
102
|
+
})
|
|
124
103
|
}
|
|
104
|
+
|
|
125
105
|
}
|
|
126
106
|
|
|
127
|
-
|
|
128
|
-
// console.log("After validate",result)
|
|
129
|
-
if(!errors){
|
|
130
|
-
await invokeTask()
|
|
131
|
-
}
|
|
132
|
-
}
|
|
107
|
+
onMounted(()=>syncTask())
|
|
133
108
|
</script>
|
|
@@ -21,7 +21,7 @@ import _ from 'lodash'
|
|
|
21
21
|
const getField = (path:string)=>{
|
|
22
22
|
// console.log("simpleform topath",path)
|
|
23
23
|
const data = props.document.getData()
|
|
24
|
-
const schema = props.document.getSchema()
|
|
24
|
+
const schema = props.document.getSchema() as JSONSchema7 //force type for compatibility
|
|
25
25
|
const fieldsetting = getPathObject(schema,path)
|
|
26
26
|
// console.log("setting",fieldsetting)
|
|
27
27
|
|
|
@@ -10,11 +10,11 @@ import Ajv from 'ajv';
|
|
|
10
10
|
import addFormats from 'ajv-formats';
|
|
11
11
|
import addErrors from 'ajv-errors';
|
|
12
12
|
import _ from 'lodash'
|
|
13
|
-
|
|
13
|
+
|
|
14
14
|
const props = defineProps<{
|
|
15
15
|
title?:string,
|
|
16
16
|
schema:JSONSchema7,
|
|
17
|
-
|
|
17
|
+
data:any,
|
|
18
18
|
// document: SimpleAppClient<any,any>
|
|
19
19
|
readonly?:boolean
|
|
20
20
|
}>()
|
|
@@ -37,9 +37,7 @@ const modelValue = defineModel()
|
|
|
37
37
|
} //as SimpleAppFieldSetting
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
40
|
+
|
|
43
41
|
const getIsRequired=(schema:any,path:string)=>{
|
|
44
42
|
if(!path){
|
|
45
43
|
console.error('unknown path')
|
|
@@ -142,7 +140,8 @@ const modelValue = defineModel()
|
|
|
142
140
|
// this.errorlist.value = {};
|
|
143
141
|
// this.hook('pre-validation', this.data.value);
|
|
144
142
|
const validate = ajv.compile(props.schema);
|
|
145
|
-
|
|
143
|
+
console.log("validate data",props.data)
|
|
144
|
+
const valid = validate(props.data);
|
|
146
145
|
if (!valid) {
|
|
147
146
|
const errors = validate.errors;
|
|
148
147
|
const tmp: { [key: string]: any } = {};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div >
|
|
3
|
+
<div>
|
|
4
|
+
<pre>{{ data}}dynamic</pre>
|
|
5
|
+
</div>
|
|
6
|
+
<div class="border " v-if="jsonschema">
|
|
7
|
+
<SimpleAppJsonSchemaForm :schema="jsonschema" :data="data" #default="o" >
|
|
8
|
+
<Card>
|
|
9
|
+
<template #header>Response</template>
|
|
10
|
+
<template #content>
|
|
11
|
+
<div >
|
|
12
|
+
<div v-for="field in Object.keys(jsonschema.properties ?? {} )" class="border p-2">
|
|
13
|
+
<SimpleAppInput :setting="o.getField(`#/properties/${field}`)"
|
|
14
|
+
:input-type="autoPickInput( field )"
|
|
15
|
+
v-model="data[field]" />
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
</template>
|
|
19
|
+
<template #footer>
|
|
20
|
+
<Button class="btn-primary" @click="o.validate(validateCallBack)">{{ t('submit') }}</Button>
|
|
21
|
+
|
|
22
|
+
</template>
|
|
23
|
+
</Card>
|
|
24
|
+
</SimpleAppJsonSchemaForm>
|
|
25
|
+
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
</template>
|
|
29
|
+
<script lang="ts" setup>
|
|
30
|
+
import {UserTaskType,SimpleAppInputType} from '~/types'
|
|
31
|
+
import type { JSONSchema7 } from 'json-schema'
|
|
32
|
+
const props = defineProps<{
|
|
33
|
+
processName:string
|
|
34
|
+
taskName:string
|
|
35
|
+
jsonschema:JSONSchema7
|
|
36
|
+
instanceData:any
|
|
37
|
+
}>()
|
|
38
|
+
// props.jsonschema.properties
|
|
39
|
+
const modelValue = defineModel<any>({})
|
|
40
|
+
const emit = defineEmits(['submit'])
|
|
41
|
+
const validateCallBack = async (errors:any)=>{
|
|
42
|
+
// console.log("After validate",result)
|
|
43
|
+
if(!errors){
|
|
44
|
+
emit('submit',modelValue)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const autoPickInput = (field:string) =>{
|
|
49
|
+
let setting :JSONSchema7= {type:'string'}
|
|
50
|
+
|
|
51
|
+
if(props.jsonschema.properties && props.jsonschema.properties[field]){
|
|
52
|
+
setting = props.jsonschema.properties[field] as JSONSchema7 //force type
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
if(setting.type=='boolean'){
|
|
57
|
+
return SimpleAppInputType.checkbox
|
|
58
|
+
}if(setting.type=='number'){
|
|
59
|
+
return SimpleAppInputType.number
|
|
60
|
+
}
|
|
61
|
+
else if(setting.enum){
|
|
62
|
+
return SimpleAppInputType.select
|
|
63
|
+
}
|
|
64
|
+
else if(setting.type=='string'){
|
|
65
|
+
return pickStringInput(setting)
|
|
66
|
+
}else{
|
|
67
|
+
return SimpleAppInputType.text
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const pickStringInput = (setting:any) =>{
|
|
72
|
+
switch(setting.format){
|
|
73
|
+
case 'date':
|
|
74
|
+
return SimpleAppInputType.date
|
|
75
|
+
break;
|
|
76
|
+
case 'textarea':
|
|
77
|
+
return SimpleAppInputType.textarea
|
|
78
|
+
break;
|
|
79
|
+
case 'text':
|
|
80
|
+
default:
|
|
81
|
+
return SimpleAppInputType.text
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
</script>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import dynamicfield from './dynamicfield.vue'
|
|
2
|
+
import simpleapprove from './simpleapprove.vue'
|
|
3
|
+
|
|
4
|
+
const forms: {[key:string]:Component}={
|
|
5
|
+
dynamicfield:dynamicfield,
|
|
6
|
+
simpleapprove:simpleapprove
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const getFormComponent =(formkey:string)=> forms[formkey] ?? forms['dynamicfield']
|
|
10
|
+
export {dynamicfield,simpleapprove}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<SimpleAppJsonSchemaForm :schema="jsonschema" :data="modelValue" #default="o" >
|
|
3
|
+
<Card>
|
|
4
|
+
<template #content>
|
|
5
|
+
<div>
|
|
6
|
+
<h1>{{t('simpleApproveMessage')}}</h1>
|
|
7
|
+
</div>
|
|
8
|
+
<div >
|
|
9
|
+
<SimpleAppInput :setting="o.getField(`#/properties/decision`)"
|
|
10
|
+
:input-type="SimpleAppInputType.select"
|
|
11
|
+
v-model="modelValue.decision"
|
|
12
|
+
/>
|
|
13
|
+
<SimpleAppInput :setting="o.getField(`#/properties/description`)"
|
|
14
|
+
:input-type="SimpleAppInputType.textarea"
|
|
15
|
+
v-model="modelValue.description"
|
|
16
|
+
/>
|
|
17
|
+
</div>
|
|
18
|
+
</template>
|
|
19
|
+
<template #footer>
|
|
20
|
+
<Button class="btn-primary" @click="o.validate(validateCallBack)">{{ t('submit') }}</Button>
|
|
21
|
+
</template>
|
|
22
|
+
</Card>
|
|
23
|
+
</SimpleAppJsonSchemaForm>
|
|
24
|
+
</template>
|
|
25
|
+
<script lang="ts" setup>
|
|
26
|
+
import {UserTaskType,SimpleAppInputType} from '~/types'
|
|
27
|
+
import type { JSONSchema7 } from 'json-schema'
|
|
28
|
+
const props = defineProps<{
|
|
29
|
+
processName:string
|
|
30
|
+
taskName:string
|
|
31
|
+
jsonschema:JSONSchema7
|
|
32
|
+
instanceData:any
|
|
33
|
+
}>()
|
|
34
|
+
const modelValue = defineModel<{decision:string,description:string}>()
|
|
35
|
+
|
|
36
|
+
const emit = defineEmits(['submit'])
|
|
37
|
+
const validateCallBack = async (errors:any)=>{
|
|
38
|
+
// console.log("After validate",result)
|
|
39
|
+
if(!errors){
|
|
40
|
+
emit('submit',modelValue)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
</script>
|
|
@@ -24,7 +24,10 @@ export default {
|
|
|
24
24
|
suspend: 'Suspend',
|
|
25
25
|
submit: 'Submit',
|
|
26
26
|
decision: 'Decision',
|
|
27
|
-
|
|
27
|
+
simpleApproveMessage: 'Approve or reject',
|
|
28
|
+
suspendcustomer:"Suspend Customer",
|
|
29
|
+
formKeyNotFound:'Formkey not found "{formKey}"',
|
|
30
|
+
|
|
28
31
|
//auto generate from schema
|
|
29
32
|
<% for(let i=0; i< it.allfields.length; i++){ %>
|
|
30
33
|
<% let f = it.allfields[i] %>
|
|
@@ -83,7 +83,7 @@ tailwindcss: {
|
|
|
83
83
|
exclude: ['chart']
|
|
84
84
|
},
|
|
85
85
|
directives: {
|
|
86
|
-
include: ['Ripple', 'Tooltip']
|
|
86
|
+
include: ['Ripple', 'Tooltip','BadgeDirective']
|
|
87
87
|
},
|
|
88
88
|
cssLayerOrder: 'tailwind-base, primevue, tailwind-utilities',
|
|
89
89
|
importPT: { as: 'SimpleAppPT', from: path.resolve(__dirname,'./assets/primevue/passthrough.ts') },
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
put bpmn files here
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
all form for user task obtain from here
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<bpmn:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn">
|
|
3
|
+
<bpmn:process id="process1" name="Suspend Customer" isExecutable="false">
|
|
4
|
+
<bpmn:extensionElements />
|
|
5
|
+
<bpmn:startEvent id="StartEvent_1">
|
|
6
|
+
<bpmn:outgoing>Flow_1a63g0z</bpmn:outgoing>
|
|
7
|
+
</bpmn:startEvent>
|
|
8
|
+
<bpmn:endEvent id="Event_0qpgd23">
|
|
9
|
+
<bpmn:incoming>Flow_1oty8vq</bpmn:incoming>
|
|
10
|
+
</bpmn:endEvent>
|
|
11
|
+
<bpmn:sequenceFlow id="Flow_1a63g0z" sourceRef="StartEvent_1" targetRef="hello1" />
|
|
12
|
+
<bpmn:sequenceFlow id="Flow_1rspxq4" sourceRef="hello1" targetRef="approve1" />
|
|
13
|
+
<bpmn:serviceTask id="hello1" name="hello1">
|
|
14
|
+
<bpmn:documentation>hello1 doc
|
|
15
|
+
bbb</bpmn:documentation>
|
|
16
|
+
<bpmn:incoming>Flow_1a63g0z</bpmn:incoming>
|
|
17
|
+
<bpmn:outgoing>Flow_1rspxq4</bpmn:outgoing>
|
|
18
|
+
</bpmn:serviceTask>
|
|
19
|
+
<bpmn:sequenceFlow id="Flow_1khvymz" sourceRef="approve1" targetRef="hello2" />
|
|
20
|
+
<bpmn:userTask id="approve1" name="approve1" camunda:formKey="simpleapprove" camunda:assignee="kstan">
|
|
21
|
+
<bpmn:documentation>approve1 doc
|
|
22
|
+
abc</bpmn:documentation>
|
|
23
|
+
<bpmn:incoming>Flow_1rspxq4</bpmn:incoming>
|
|
24
|
+
<bpmn:outgoing>Flow_1khvymz</bpmn:outgoing>
|
|
25
|
+
</bpmn:userTask>
|
|
26
|
+
<bpmn:sequenceFlow id="Flow_1oty8vq" sourceRef="hello2" targetRef="Event_0qpgd23" />
|
|
27
|
+
<bpmn:serviceTask id="hello2" name="hello2">
|
|
28
|
+
<bpmn:documentation>hello2 doc
|
|
29
|
+
ccc</bpmn:documentation>
|
|
30
|
+
<bpmn:incoming>Flow_1khvymz</bpmn:incoming>
|
|
31
|
+
<bpmn:outgoing>Flow_1oty8vq</bpmn:outgoing>
|
|
32
|
+
</bpmn:serviceTask>
|
|
33
|
+
</bpmn:process>
|
|
34
|
+
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
|
|
35
|
+
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="process1">
|
|
36
|
+
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
|
|
37
|
+
<dc:Bounds x="122" y="202" width="36" height="36" />
|
|
38
|
+
</bpmndi:BPMNShape>
|
|
39
|
+
<bpmndi:BPMNShape id="Event_0qpgd23_di" bpmnElement="Event_0qpgd23">
|
|
40
|
+
<dc:Bounds x="672" y="202" width="36" height="36" />
|
|
41
|
+
</bpmndi:BPMNShape>
|
|
42
|
+
<bpmndi:BPMNShape id="Activity_1trhs2m_di" bpmnElement="hello1">
|
|
43
|
+
<dc:Bounds x="200" y="180" width="100" height="80" />
|
|
44
|
+
<bpmndi:BPMNLabel />
|
|
45
|
+
</bpmndi:BPMNShape>
|
|
46
|
+
<bpmndi:BPMNShape id="Activity_0l36sc9_di" bpmnElement="approve1">
|
|
47
|
+
<dc:Bounds x="370" y="180" width="100" height="80" />
|
|
48
|
+
<bpmndi:BPMNLabel />
|
|
49
|
+
</bpmndi:BPMNShape>
|
|
50
|
+
<bpmndi:BPMNShape id="Activity_1mg3y6c_di" bpmnElement="hello2">
|
|
51
|
+
<dc:Bounds x="510" y="180" width="100" height="80" />
|
|
52
|
+
<bpmndi:BPMNLabel />
|
|
53
|
+
</bpmndi:BPMNShape>
|
|
54
|
+
<bpmndi:BPMNEdge id="Flow_1a63g0z_di" bpmnElement="Flow_1a63g0z">
|
|
55
|
+
<di:waypoint x="158" y="220" />
|
|
56
|
+
<di:waypoint x="200" y="220" />
|
|
57
|
+
</bpmndi:BPMNEdge>
|
|
58
|
+
<bpmndi:BPMNEdge id="Flow_1rspxq4_di" bpmnElement="Flow_1rspxq4">
|
|
59
|
+
<di:waypoint x="300" y="220" />
|
|
60
|
+
<di:waypoint x="370" y="220" />
|
|
61
|
+
</bpmndi:BPMNEdge>
|
|
62
|
+
<bpmndi:BPMNEdge id="Flow_1khvymz_di" bpmnElement="Flow_1khvymz">
|
|
63
|
+
<di:waypoint x="470" y="220" />
|
|
64
|
+
<di:waypoint x="510" y="220" />
|
|
65
|
+
</bpmndi:BPMNEdge>
|
|
66
|
+
<bpmndi:BPMNEdge id="Flow_1oty8vq_di" bpmnElement="Flow_1oty8vq">
|
|
67
|
+
<di:waypoint x="610" y="220" />
|
|
68
|
+
<di:waypoint x="672" y="220" />
|
|
69
|
+
</bpmndi:BPMNEdge>
|
|
70
|
+
</bpmndi:BPMNPlane>
|
|
71
|
+
</bpmndi:BPMNDiagram>
|
|
72
|
+
</bpmn:definitions>
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file was automatically generated by simpleapp generator.
|
|
3
|
+
* --remove-this-line-to-prevent-override--
|
|
4
|
+
* last change 2023-09-23
|
|
5
|
+
* Author: Ks Tan
|
|
6
|
+
*/
|
|
7
|
+
import { Injectable,Logger } from "@nestjs/common";
|
|
8
|
+
import { EventEmitter2, OnEvent } from '@nestjs/event-emitter';
|
|
9
|
+
import { InjectModel } from "@nestjs/mongoose";
|
|
10
|
+
import { Model } from "mongoose";
|
|
11
|
+
import { UserContext } from "../../generate/commons/user.context";
|
|
12
|
+
import { User } from "../../services/user.service";
|
|
13
|
+
import { Permission } from "../../services/perm.service";
|
|
14
|
+
import {SimpleAppListenerService} from './simpleapp.listener'
|
|
15
|
+
import {
|
|
16
|
+
WorkflowSettingApiSchema,
|
|
17
|
+
WorkflowDataApiSchema,
|
|
18
|
+
WorkflowProcess,
|
|
19
|
+
WorkflowTask,
|
|
20
|
+
UserTaskActors,
|
|
21
|
+
UserTaskType,
|
|
22
|
+
ServiceTaskData,
|
|
23
|
+
UserTaskData,
|
|
24
|
+
UserTaskEventType,
|
|
25
|
+
ServiceTaskEventType
|
|
26
|
+
} from '../../generate/workflow/workflow.type';
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@Injectable()
|
|
30
|
+
export class <%=it.processName%>ListenerService extends SimpleAppListenerService{
|
|
31
|
+
logger = new Logger()
|
|
32
|
+
constructor(){
|
|
33
|
+
super()
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
<%for(let i=0; i<it.elements.length;i++){%>
|
|
37
|
+
<%let e=it.elements[i]%>
|
|
38
|
+
<%let datatype = e.type == "bpmn:UserTask" ? "UserTaskData" : "ServiceTaskData" %>
|
|
39
|
+
|
|
40
|
+
<%if(datatype=='UserTaskData'){%>
|
|
41
|
+
/**
|
|
42
|
+
* Execute while user task <%= e.name%> invoked (triggered by actor to next step)
|
|
43
|
+
* bpmn: <%=it.name%>, elementId: <%= e.id%>, taskName: <%= e.name%>, event: invoke
|
|
44
|
+
* documentation: <%~e.documentation%>
|
|
45
|
+
* @param props
|
|
46
|
+
*/
|
|
47
|
+
@OnEvent('<%=it.name%>.<%= e.id%>.invoke')
|
|
48
|
+
async <%=`watch_${e.id}_invoke`%>(props:<%=datatype%>){
|
|
49
|
+
console.log("Running listener <%=it.name%>.<%= e.id%>.invoke",props)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Execute while user task <%= e.name%> reach wait stage (pending actor input)
|
|
54
|
+
* bpmn: <%=it.name%>, elementId: <%= e.id%>, taskName: <%= e.name%>, event: wait
|
|
55
|
+
* documentation: <%= e.documentation %>
|
|
56
|
+
* @param props
|
|
57
|
+
*/
|
|
58
|
+
@OnEvent('<%=it.name%>.<%= e.id%>.wait')
|
|
59
|
+
async <%=`watch_${e.id}_wait`%>(props:<%=datatype%>){
|
|
60
|
+
console.log("Running listener <%=it.name%>.<%= e.id%>.wait",props)
|
|
61
|
+
}
|
|
62
|
+
<%}else if( datatype=='ServiceTaskData'){ %>
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Execute ServiceTask event <%= e.name%> (start)
|
|
66
|
+
* bpmn: <%=it.name%>, elementId: <%= e.id%>, taskName: <%= e.name%>, event: start
|
|
67
|
+
* documentation: <%=e.documentation%>
|
|
68
|
+
* @param props
|
|
69
|
+
*/
|
|
70
|
+
@OnEvent('<%=it.name%>.<%= e.id%>.start')
|
|
71
|
+
async <%=`watch_${e.id}_start`%>(props:<%=datatype%>){
|
|
72
|
+
console.log("Running listener <%=it.name%>.<%= e.id%>.start",props)
|
|
73
|
+
}
|
|
74
|
+
<%}%>
|
|
75
|
+
<%}%>
|
|
76
|
+
}
|