Browse Source

update

main
wangshaoping 9 months ago
parent
commit
6be7eff363
  1. 4
      erm/src/main/java/erm/kpi/service/impl/IndicatorServiceImpl.java
  2. 2
      erm/src/main/java/erm/kpi/service/impl/LibServiceImpl.java
  3. 4
      gradle.properties
  4. 2
      io.sc.platform.app/build.gradle
  5. 2
      io.sc.platform.core.frontend/package.json
  6. 1
      io.sc.platform.core.frontend/src/platform/components/form/WForm.vue
  7. 239
      io.sc.platform.core.frontend/src/platform/components/form/elements/WTreeSelect.vue
  8. 18
      io.sc.platform.core.frontend/src/views/testcase/form/form.vue
  9. 4
      io.sc.platform.core.frontend/template-project/package.json
  10. 132
      io.sc.platform.core.frontend/template-project/src/views/testcase/form/form.vue
  11. 2
      io.sc.platform.core.frontend/template-project/src/views/testcase/form/shared/SelectApplicationDialog.vue
  12. 2
      io.sc.platform.core.frontend/template-project/src/views/testcase/form/shared/SelectApplicationGrid.vue
  13. 2
      io.sc.platform.core.frontend/template-project/src/views/testcase/form/shared/SelectOrgTreeGrid.vue
  14. 2
      io.sc.platform.core.frontend/template-project/src/views/testcase/form/shared/SelectRoleDialog.vue
  15. 2
      io.sc.platform.core.frontend/template-project/src/views/testcase/form/shared/SelectRoleGrid.vue
  16. 2
      io.sc.platform.core.frontend/template-project/src/views/testcase/form/shared/SelectUserDialog.vue
  17. 2
      io.sc.platform.core.frontend/template-project/src/views/testcase/form/shared/SelectUserGrid.vue
  18. 2
      io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/FlowableModelerEditorWebController.java
  19. 2
      io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/impl/AgentServiceImpl.java
  20. 54
      io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/controller/support/RestCrudController.java
  21. 1
      io.sc.platform.orm/build.gradle
  22. 18
      io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/DaoService.java
  23. 191
      io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/impl/DaoServiceImpl.java
  24. 18
      io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/QueryParameter.java
  25. 124
      io.sc.platform.security/src/main/java/io/sc/platform/security/initializer/CorporationInitializer.java
  26. 3
      io.sc.platform.security/src/main/resources/META-INF/platform/plugins/liquibase.json
  27. 1
      io.sc.platform.security/src/main/resources/META-INF/services/io.sc.platform.core.initializer.ApplicationInitializer
  28. 41
      io.sc.platform.security/src/main/resources/io/sc/platform/security/liquibase/data/sys_corporation.csv
  29. 19
      io.sc.platform.security/src/main/resources/liquibase/io.sc.platform.security_8.0.0_20220606__Security Data.xml
  30. 1
      io.sc.platform.security/src/main/resources/liquibase/io.sc.platform.security_8.0.0_20220606__Security Database Schema DDL.xml
  31. 9
      io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/corporation/CorporationVo.java
  32. 2
      io.sc.platform.system.frontend/package.json
  33. 6
      io.sc.platform.system.frontend/public/configure.js
  34. 4
      io.sc.platform.system.frontend/src/views/corporation/Corporation.vue
  35. 48
      io.sc.platform.system.frontend/src/views/role/Role.vue
  36. 42
      io.sc.platform.system.frontend/src/views/user/User.vue
  37. 6
      io.sc.platform.system/src/main/java/io/sc/platform/system/application/service/impl/ApplicationServiceImpl.java
  38. 13
      io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/jpa/entity/CorporationEntity.java
  39. 4
      io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/jpa/repository/CorporationRepository.java
  40. 13
      io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/service/impl/CorporationServiceImpl.java
  41. 2
      io.sc.platform.system/src/main/java/io/sc/platform/system/department/service/impl/DepartmentServiceImpl.java
  42. 6
      io.sc.platform.system/src/main/java/io/sc/platform/system/menu/service/impl/MenuServiceImpl.java
  43. 4
      io.sc.platform.system/src/main/java/io/sc/platform/system/org/service/impl/OrgServiceImpl.java
  44. 13
      io.sc.platform.system/src/main/java/io/sc/platform/system/role/service/impl/RoleServiceImpl.java
  45. 16
      io.sc.platform.system/src/main/java/io/sc/platform/system/user/service/impl/UserServiceImpl.java

4
erm/src/main/java/erm/kpi/service/impl/IndicatorServiceImpl.java

@ -44,7 +44,7 @@ public class IndicatorServiceImpl extends DaoServiceImpl<IndicatorEntity, String
return criteriaBuilder.exists(subquery);
};
return this.query(specification, queryParameter);
return this.query(queryParameter,specification);
}
return QueryResult.emptyPage();
}
@ -62,7 +62,7 @@ public class IndicatorServiceImpl extends DaoServiceImpl<IndicatorEntity, String
return criteriaBuilder.not(criteriaBuilder.exists(subquery));
};
Specification<IndicatorEntity> specification =buildSpecification(queryParameter);
return this.query(baseSpecification.and(specification), queryParameter);
return this.query(queryParameter,baseSpecification.and(specification));
}
return QueryResult.emptyPage();
}

2
erm/src/main/java/erm/kpi/service/impl/LibServiceImpl.java

@ -64,7 +64,7 @@ public class LibServiceImpl extends DaoServiceImpl<LibEntity, String, LibReposit
return criteriaBuilder.exists(subquery);
};
return this.list(specification, queryParameter);
return this.list(queryParameter,specification);
}
return QueryResult.emptyList();
}

4
gradle.properties

@ -36,9 +36,9 @@ application_version=1.0.0
# platform
###########################################################
platform_group=io.sc
platform_version=8.1.43
platform_version=8.1.44
platform_plugin_version=8.1.13
platform_core_frontend_version=8.1.228
platform_core_frontend_version=8.1.229
###########################################################
# dependencies version

2
io.sc.platform.app/build.gradle

@ -2,7 +2,7 @@ dependencies {
api(
project(":io.sc.platform.communication"),
project(":io.sc.platform.csv"),
//project(":io.sc.platform.flowable"),
project(":io.sc.platform.flowable"),
project(":io.sc.platform.groovy"),
project(":io.sc.platform.jdbc.liquibase"),
project(":io.sc.platform.jdbc.schemacrawler"),

2
io.sc.platform.core.frontend/package.json

@ -1,6 +1,6 @@
{
"name": "platform-core",
"version": "8.1.228",
"version": "8.1.229",
"description": "前端核心包,用于快速构建前端的脚手架",
"//main": "库的主文件",
"main": "dist/platform-core.js",

1
io.sc.platform.core.frontend/src/platform/components/form/WForm.vue

@ -90,6 +90,7 @@ const fiedType = {
number: 'w-number',
select: 'w-select',
treeSelect: 'w-tree-select',
'tree-select': 'w-tree-select',
text: 'w-text',
textarea: 'w-textarea',
'text-btn': 'w-text-btn',

239
io.sc.platform.core.frontend/src/platform/components/form/elements/WTreeSelect.vue

@ -1,79 +1,49 @@
<template>
<div v-show="showIfComputed">
<q-field
ref="fieldRef"
v-model="codeMirrorValue"
<q-select
ref="selectRef"
v-model="selectValue"
emit-value
map-options
:hide-bottom-space="true"
:hide-hint="true"
:outlined="true"
:dense="true"
v-bind="attrs"
:stack-label="stackLabelRef"
:rules="rulesComputed"
:readonly="readonlyIfComputed"
:disable="disableIfComputed"
style="position: relative"
@focus.stop.prevent="focus"
@blur.stop.prevent="blur"
@update:model-value="updateModelValue"
@change="changeValue"
>
<template #label> <span v-if="requiredIfComputed" style="color: red">*</span> {{ attrs.label }}</template>
<template #control>
<q-btn label="sdfds"></q-btn>
<template #option="scope">
<q-item v-bind="scope.itemProps">
<q-item-section avatar style="width: 30px">
<q-icon name="folder" color="amber" />
</q-item-section>
<q-item-section>
<q-item-label>{{ scope.opt.label }}</q-item-label>
</q-item-section>
</q-item>
</template>
<template v-if="!Tools.isEmpty(codeMirrorValue) && attrs.button" #append>
<q-btn
round
dense
flat
v-bind="attrs.button"
:style="{
content: '',
position: 'absolute',
bottom: '5px',
right: '5px',
}"
@click.stop.prevent="buttonClick(attrs.button)"
/>
</template>
</q-field>
</q-select>
</div>
</template>
<script setup lang="ts">
import { ref, useAttrs, onMounted, onUnmounted, watch, computed, toRaw } from 'vue';
import { Tools } from '@/platform';
import { ref, computed, defineProps, useAttrs, watch } from 'vue';
import { FormValidators } from '@/platform/components';
import { EditorView } from '@codemirror/view';
import { EditorState, StateEffect, Compartment } from '@codemirror/state';
import * as view from '@codemirror/view';
import * as language from '@codemirror/language';
import * as commands from '@codemirror/commands';
import * as search from '@codemirror/search';
import * as autocomplete from '@codemirror/autocomplete';
import { LanguageSupport } from '@codemirror/language';
import { html } from '@codemirror/lang-html';
import { java } from '@codemirror/lang-java';
import { javascript } from '@codemirror/lang-javascript';
import { json } from '@codemirror/lang-json';
import { sql } from '@codemirror/lang-sql';
import { xml } from '@codemirror/lang-xml';
const selectRef = ref();
const attrs = useAttrs();
const rules = attrs.rules;
const fieldRef = ref();
const props = defineProps({
onChange: {
type: Function,
default: () => {},
},
modelValue: { type: String, default: '' },
lang: { type: String, default: 'json' },
width: { type: [Number, String], default: '100%' },
height: { type: [Number, String], default: undefined },
rows: { type: Number, default: 4 },
tabSize: { type: Number, default: 4 },
modelValue: { type: [String, Number, Boolean, Array], default: '' },
showIf: {
type: Function,
default: () => {
@ -105,12 +75,12 @@ const props = defineProps({
default: undefined,
},
});
const emits = defineEmits(['update:modelValue', 'change']);
const codeMirrorValue = ref(props.modelValue);
const emit = defineEmits(['update:modelValue', 'change']);
const selectValue = ref(props.modelValue);
watch(
() => props.modelValue,
(newVal, oldVal) => {
codeMirrorValue.value = newVal;
selectValue.value = newVal;
},
);
@ -121,15 +91,15 @@ const rulesComputed = computed(() => {
} else if (!showIfComputed.value) {
result = [];
}
if (fieldRef?.value) {
fieldRef.value.resetValidation();
if (selectRef?.value) {
selectRef.value.resetValidation();
}
return result;
});
const showIfComputed = computed(() => {
return props.showIf({
value: codeMirrorValue.value,
value: selectValue.value,
form: props.form,
});
});
@ -137,7 +107,7 @@ const requiredIfComputed = computed(() => {
if (props.requiredIf) {
return (
props.requiredIf({
value: codeMirrorValue.value,
value: selectValue.value,
form: props.form,
}) || false
);
@ -151,173 +121,26 @@ const readonlyIfComputed = computed(() => {
return true;
}
return props.readOnlyIf({
value: codeMirrorValue.value,
value: selectValue.value,
form: props.form,
});
});
const disableIfComputed = computed(() => {
return props.disableIf({
value: codeMirrorValue.value,
value: selectValue.value,
form: props.form,
});
});
const basicSetup = [
EditorState.allowMultipleSelections.of(true),
//view.lineNumbers(),
//view.highlightActiveLine(),
view.highlightActiveLineGutter(),
view.highlightSpecialChars(),
view.drawSelection(),
view.dropCursor(),
view.rectangularSelection(),
view.crosshairCursor(),
commands.history(),
//language.foldGutter(),
language.indentOnInput(),
language.syntaxHighlighting(language.defaultHighlightStyle, { fallback: true }),
language.bracketMatching(),
autocomplete.closeBrackets(),
autocomplete.autocompletion(),
search.highlightSelectionMatches(),
view.keymap.of([
...commands.defaultKeymap,
...commands.historyKeymap,
...language.foldKeymap,
...autocomplete.completionKeymap,
...autocomplete.closeBracketsKeymap,
...search.searchKeymap,
//commands.indentWithTab,
]),
];
const getLanguage = (lang: string): LanguageSupport => {
lang = lang || 'json';
switch (lang.toLowerCase()) {
case 'html':
return html();
case 'java':
return java();
case 'javascript':
return javascript();
case 'json':
return json();
case 'sql':
return sql();
case 'xml':
return xml();
default:
return json();
}
};
const codemirrorRef = ref();
// q-field stack-label field label
// field , label
// field , field label , label
const stackLabelRef = ref(!Tools.isUndefinedOrNull(codeMirrorValue.value));
let editorView;
let isFocus = false;
onMounted(() => {
if (codemirrorRef.value) {
let language = new Compartment();
let tabSize = new Compartment();
editorView = new EditorView({
extensions: [
basicSetup,
language.of(getLanguage(props.lang)),
tabSize.of(EditorState.tabSize.of(props.tabSize)),
EditorState.readOnly.of(props.readOnlyIf(props.form)),
EditorView.theme({
'&': {
outline: 'none !important',
width: Tools.px(props.width),
height: props.height ? Tools.px(props.height) : props.rows * 22 + 'px',
},
}),
// , , blur
EditorView.updateListener.of(function (e) {
// emits('update:modelValue', e.state.doc.toString());
updateModelValue(e.state.doc.toString());
}),
],
parent: codemirrorRef.value,
doc: codeMirrorValue.value,
});
watch(
() => codeMirrorValue.value,
() => {
// ,,
if (!isFocus) {
editorView.dispatch({ changes: { from: 0, to: editorView.state.doc.length, insert: codeMirrorValue.value } });
}
},
);
}
});
onUnmounted(() => {
editorView.destroy();
});
const focus = () => {
isFocus = true;
stackLabelRef.value = true;
};
const blur = () => {
isFocus = false;
const content = editorView.state.doc.toString();
//emits('update:modelValue', content);
if (content) {
stackLabelRef.value = true;
} else {
stackLabelRef.value = false;
}
};
const getValue = () => {
return editorView.state.doc.toString();
};
const setValue = (value: string) => {
editorView.dispatch({ changes: { from: 0, to: editorView.state.doc.length, insert: value } });
};
const configure = (values) => {
editorView.dispatch({ effects: StateEffect.reconfigure.of(values) });
};
const updateModelValue = (value) => {
emits('update:modelValue', value, props.form);
emit('update:modelValue', value, props.form);
changeValue(value);
};
const changeValue = (value) => {
emits('change', {
emit('change', {
value: value,
form: props.form,
});
};
const buttonClick = (button) => {
if (button.click) {
button.click({
value: codeMirrorValue.value,
form: props.form,
});
}
};
defineExpose({
getValue,
setValue,
configure,
});
</script>

18
io.sc.platform.core.frontend/src/views/testcase/form/form.vue

@ -2,7 +2,6 @@
<q-splitter :model-value="60" class="w-full" style="height: 100%">
<template #before>
<div class="pr-1" style="height: 100%">
<w-tree-select></w-tree-select>
<w-grid
ref="roleGridRef"
:title="$t('system.role.grid.title')"
@ -45,6 +44,8 @@
name: 'corporationCode',
label: $t('corporation'),
type: 'tree-select',
options: optionRef,
required: true,
},
],
},
@ -123,6 +124,7 @@ import { ref } from 'vue';
import { Environment, SessionManager, axios, Options, Formater } from '@/platform';
import SelectUserGrid from './shared/SelectUserGrid.vue';
import SelectMenuTreeGrid from './shared/SelectMenuTreeGrid.vue';
import { onMounted } from 'vue';
const roleGridRef = ref();
const userGridRef = ref();
@ -131,6 +133,8 @@ const menuTreeGridRef = ref();
const selectedTabRef = ref('menu');
const currentSelectedRoleId = ref('');
const optionRef = ref([]);
const refreshRelationshipComponents = (id) => {
currentSelectedRoleId.value = id;
menuTreeGridRef.value?.refresh();
@ -192,4 +196,16 @@ const update = (ids, gridComponent) => {
gridComponent.refresh();
});
};
onMounted(() => {
axios.get(Environment.apiContextPath('/api/system/corporation')).then((response) => {
const options = [];
if (response.data?.content && response.data?.content.length > 0) {
for (const item of response.data.content) {
options.push({ label: item.name, value: item.code });
}
}
optionRef.value = options;
});
});
</script>

4
io.sc.platform.core.frontend/template-project/package.json

@ -1,6 +1,6 @@
{
"name": "platform-core",
"version": "8.1.228",
"version": "8.1.229",
"description": "前端核心包,用于快速构建前端的脚手架",
"private": false,
"keywords": [],
@ -104,7 +104,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
"platform-core": "8.1.228",
"platform-core": "8.1.229",
"quasar": "2.15.3",
"tailwindcss": "3.4.3",
"vue": "3.4.24",

132
io.sc.platform.core.frontend/template-project/src/views/testcase/form/form.vue

@ -3,13 +3,16 @@
<template #before>
<div class="pr-1" style="height: 100%">
<w-grid
ref="applicationGridRef"
:title="$t('system.application.grid.title')"
ref="roleGridRef"
:title="$t('system.role.grid.title')"
:config-button="true"
selection="multiple"
:checkbox-selection="true"
:data-url="Environment.apiContextPath('/api/system/application')"
:sort-by="['order']"
:data-url="Environment.apiContextPath('/api/system/role')"
:pagination="{
sortBy: 'name',
descending: false,
}"
:query-form-cols-num="3"
:query-form-fields="[
{ name: 'code', label: $t('code'), type: 'text' },
@ -19,17 +22,16 @@
:toolbar-configure="{ noIcon: false }"
:toolbar-actions="['query', 'refresh', 'separator', 'add', 'clone', 'edit', 'remove', 'separator', 'view', 'separator', 'export']"
:columns="[
{ width: 60, name: 'order', label: $t('order') },
{ width: 100, name: 'code', label: $t('code') },
{ width: 150, name: 'code', label: $t('code') },
{ width: '100%', name: 'name', label: $t('name') },
{ width: 80, name: 'enable', label: $t('status'), format: Formater.enableTag() },
{ width: 100, name: 'corporationCode', label: $t('corporation'), hidden: !SessionManager.isPrimaryCorporation() },
{ width: 120, name: 'lastModifier', label: $t('lastModifier') },
{ width: 120, name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.dateOnly() },
]"
:editor="{
dialog: {
width: '600px',
height: '300px',
},
form: {
colsNum: 1,
@ -37,8 +39,14 @@
{ name: 'code', label: $t('code'), type: 'text', required: true },
{ name: 'name', label: $t('name'), type: 'text', required: true },
{ name: 'description', label: $t('description'), type: 'textarea', rows: 1 },
{ name: 'order', label: $t('order'), type: 'number' },
{ name: 'enable', label: $t('enable'), type: 'checkbox', defaultValue: true },
{
name: 'corporationCode',
label: $t('corporation'),
type: 'tree-select',
options: optionRef,
required: true,
},
],
},
}"
@ -51,7 +59,6 @@
{ name: 'name', label: $t('name') },
{ name: 'description', label: $t('description') },
{ name: 'enable', label: $t('enable'), format: Formater.none() },
{ name: 'order', label: $t('order') },
{ name: 'dataComeFrom', label: $t('dataComeFrom') },
{ name: 'creator', label: $t('creator') },
{ name: 'createDate', label: $t('createDate') },
@ -63,16 +70,12 @@
}"
@row-click="
(evt, row, index) => {
currentSelectedApplicationId = row.id;
menuTreeGridRef?.refresh();
userGridRef?.refresh();
refreshRelationshipComponents(row.id);
}
"
@before-request-data="
() => {
currentSelectedApplicationId = '';
menuTreeGridRef?.refresh();
userGridRef?.refresh();
refreshRelationshipComponents('');
}
"
>
@ -83,18 +86,34 @@
<div class="pl-1" style="height: 100%">
<q-tabs v-model="selectedTabRef" inline-label align="left" :breakpoint="0" no-caps>
<q-tab name="menu" icon="bi-menu-app" :label="$t('menu')" />
<q-tab name="user" icon="bi-person" :label="$t('user')" />
</q-tabs>
<q-tab-panels v-model="selectedTabRef" animated swipeable keep-alive style="height: calc(100% - 48px)">
<q-tab-panel name="menu" class="px-0 pb-0" style="height: 100%; padding-left: 0px; padding-right: 0px; padding-bottom: 0px">
<SelectMenuTreeGrid
ref="menuTreeGridRef"
:fetch-data-url="Environment.apiContextPath('/api/system/menu/listAllMenusWithSelectedStatusByApplication')"
foreign-key="applicationId"
:foreign-value="currentSelectedApplicationId"
:fetch-data-url="Environment.apiContextPath('/api/system/menu/listAllMenusWithSelectedStatusByRole')"
foreign-key="roleId"
:foreign-value="currentSelectedRoleId"
@update="update"
></SelectMenuTreeGrid>
</q-tab-panel>
<q-tab-panel name="user" class="px-0 pb-0" style="height: 100%; padding-left: 0px; padding-right: 0px; padding-bottom: 0px">
<SelectUserGrid
ref="userGridRef"
:fetch-data-url="Environment.apiContextPath('/api/system/user/queryUsersByRole')"
:fetch-other-data-url="Environment.apiContextPath('/api/system/user/queryOtherUsersByRole')"
foreign-key="roleId"
:foreign-value="currentSelectedRoleId"
@select-in="selectIn"
@select-out="selectOut"
@select-all-in="selectAllIn"
@select-all-out="selectAllOut"
>
</SelectUserGrid>
</q-tab-panel>
</q-tab-panels>
</div>
</template>
@ -102,24 +121,91 @@
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { Environment, axios, EnumTools, Options, Formater } from '@/platform';
import { Environment, SessionManager, axios, Options, Formater } from '@/platform';
import SelectUserGrid from './shared/SelectUserGrid.vue';
import SelectMenuTreeGrid from './shared/SelectMenuTreeGrid.vue';
import { onMounted } from 'vue';
const applicationGridRef = ref();
const roleGridRef = ref();
const userGridRef = ref();
const menuTreeGridRef = ref();
const selectedTabRef = ref('menu');
const currentSelectedApplicationId = ref('');
const currentSelectedRoleId = ref('');
const optionRef = ref([]);
const refreshRelationshipComponents = (id) => {
currentSelectedRoleId.value = id;
menuTreeGridRef.value?.refresh();
userGridRef.value?.refresh();
};
const selectIn = (ids: string[], gridComponent, dialogComponent) => {
axios
.post(Environment.apiContextPath('/api/system/role/addUsers'), {
one: roleGridRef.value.getSelectedRows()[0].id,
many: ids,
})
.then(() => {
gridComponent?.refresh();
dialogComponent?.close();
});
};
const selectOut = (ids, gridComponent) => {
axios
.post(Environment.apiContextPath('/api/system/role/removeUsers'), {
one: roleGridRef.value.getSelectedRows()[0].id,
many: ids,
})
.then(() => {
gridComponent?.refresh();
});
};
const selectAllIn = (gridComponent) => {
axios
.post(Environment.apiContextPath('/api/system/role/addAllUsers'), {
one: roleGridRef.value.getSelectedRows()[0].id,
many: [],
})
.then(() => {
gridComponent?.refresh();
});
};
const selectAllOut = (gridComponent) => {
axios
.post(Environment.apiContextPath('/api/system/role/removeAllUsers'), {
one: roleGridRef.value.getSelectedRows()[0].id,
many: [],
})
.then(() => {
gridComponent?.refresh();
});
};
const update = (ids, gridComponent) => {
axios
.post(Environment.apiContextPath('/api/system/application/updateMenus'), {
one: applicationGridRef.value.getSelectedRows()[0].id,
.post(Environment.apiContextPath('/api/system/role/updateMenus'), {
one: roleGridRef.value.getSelectedRows()[0].id,
many: ids,
})
.then(() => {
gridComponent.refresh();
});
};
onMounted(() => {
axios.get(Environment.apiContextPath('/api/system/corporation')).then((response) => {
const options = [];
if (response.data?.content && response.data?.content.length > 0) {
for (const item of response.data.content) {
options.push({ label: item.name, value: item.code });
}
}
optionRef.value = options;
});
});
</script>

2
io.sc.platform.core.frontend/template-project/src/views/testcase/form/shared/SelectApplicationDialog.vue

@ -61,7 +61,7 @@
<script setup lang="ts">
import { ref, nextTick } from 'vue';
import { useI18n } from 'vue-i18n';
import { Environment, Tools, EnumTools, Options, Formater } from 'platform-core';
import { Environment, Tools, EnumTools, Options, Formater } from '@/platform';
const props = defineProps({
opener: { type: Object, default: undefined },

2
io.sc.platform.core.frontend/template-project/src/views/testcase/form/shared/SelectApplicationGrid.vue

@ -107,7 +107,7 @@
<script setup lang="ts">
import { ref, onUpdated } from 'vue';
import { EnumTools, DialogManager, Formater, Tools } from 'platform-core';
import { EnumTools, DialogManager, Formater, Tools } from '@/platform';
import SelectApplicationDialog from './SelectApplicationDialog.vue';
const props = defineProps({

2
io.sc.platform.core.frontend/template-project/src/views/testcase/form/shared/SelectOrgTreeGrid.vue

@ -69,7 +69,7 @@
</template>
<script setup lang="ts">
import { ref, onUpdated } from 'vue';
import { Environment, DialogManager, Formater, Tools } from 'platform-core';
import { Environment, DialogManager, Formater, Tools } from '@/platform';
const props = defineProps({
fetchDataUrl: { type: String, default: '' },

2
io.sc.platform.core.frontend/template-project/src/views/testcase/form/shared/SelectRoleDialog.vue

@ -61,7 +61,7 @@
<script setup lang="ts">
import { ref, nextTick } from 'vue';
import { useI18n } from 'vue-i18n';
import { Environment, Tools, EnumTools, Options, Formater } from 'platform-core';
import { Environment, Tools, EnumTools, Options, Formater } from '@/platform';
const props = defineProps({
opener: { type: Object, default: undefined },

2
io.sc.platform.core.frontend/template-project/src/views/testcase/form/shared/SelectRoleGrid.vue

@ -107,7 +107,7 @@
<script setup lang="ts">
import { ref, onUpdated } from 'vue';
import { EnumTools, DialogManager, Formater, Tools } from 'platform-core';
import { EnumTools, DialogManager, Formater, Tools } from '@/platform';
import SelectRoleDialog from './SelectRoleDialog.vue';
const props = defineProps({

2
io.sc.platform.core.frontend/template-project/src/views/testcase/form/shared/SelectUserDialog.vue

@ -64,7 +64,7 @@
<script setup lang="ts">
import { ref, nextTick } from 'vue';
import { useI18n } from 'vue-i18n';
import { Environment, Tools, EnumTools, Options, Formater } from 'platform-core';
import { Environment, Tools, EnumTools, Options, Formater } from '@/platform';
import UserStatusTag from './UserStatusTag.vue';
const props = defineProps({

2
io.sc.platform.core.frontend/template-project/src/views/testcase/form/shared/SelectUserGrid.vue

@ -125,7 +125,7 @@
</template>
<script setup lang="ts">
import { ref, onUpdated } from 'vue';
import { DialogManager, Tools } from 'platform-core';
import { DialogManager, Tools } from '@/platform';
import SelectUserDialog from './SelectUserDialog.vue';
import UserStatusTag from './UserStatusTag.vue';

2
io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/controller/FlowableModelerEditorWebController.java

@ -115,7 +115,7 @@ public class FlowableModelerEditorWebController {
Specification<UserEntity> specification = (root, query, criteriaBuilder) -> {
return criteriaBuilder.like(root.get("loginName"),filter);
};
Page<UserEntity> userEntities =userService.query(specification,queryParameter);
Page<UserEntity> userEntities =userService.query(queryParameter,specification);
return FlowableUserList.fromUsers(EntityVoUtil.toVo(userEntities));
}

2
io.sc.platform.flowable/src/main/java/io/sc/platform/flowable/service/impl/AgentServiceImpl.java

@ -43,7 +43,7 @@ public class AgentServiceImpl extends DaoServiceImpl<AgentEntity, String, AgentR
Join<RoleEntity,UserEntity> join = root.join("roles");
return join.get("id").in(roleIds);
};
List<UserEntity> userEntities =userService.list(specification);
List<UserEntity> userEntities =userService.list(specification,null);
if(userEntities!=null && !userEntities.isEmpty()){
List<UserEntity> result =new ArrayList<>();
for(UserEntity userEntity : userEntities){

54
io.sc.platform.mvc/src/main/java/io/sc/platform/mvc/controller/support/RestCrudController.java

@ -8,22 +8,28 @@ import io.sc.platform.orm.api.vo.BaseVo;
import io.sc.platform.orm.entity.BaseEntity;
import io.sc.platform.orm.repository.DaoRepository;
import io.sc.platform.orm.service.DaoService;
import io.sc.platform.orm.service.support.ManagedTypeAttributes;
import io.sc.platform.orm.service.support.QueryParameter;
import io.sc.platform.orm.service.support.QueryResult;
import io.sc.platform.orm.service.support.criteria.Criteria;
import io.sc.platform.orm.service.support.criteria.impl.Equals;
import io.sc.platform.orm.service.support.criteria.impl.IContains;
import io.sc.platform.security.util.SecurityUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.util.DirectFieldAccessFallbackBeanWrapper;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.persistence.metamodel.SingularAttribute;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.lang.reflect.Modifier;
import java.util.*;
public abstract class RestCrudController<V extends BaseVo, E extends BaseEntity<V>, ID extends Serializable, R extends DaoRepository<E,ID>, S extends DaoService<E,ID,R>> {
@Autowired protected S service;
@ -158,7 +164,7 @@ public abstract class RestCrudController<V extends BaseVo, E extends BaseEntity<
@GetMapping("")
@ResponseBody
public Page<V> _query(HttpServletRequest request,HttpServletResponse response,E entity,QueryParameter queryParameter) throws Exception{
List<Criteria> criterias =service.buildCriteriaFromEntity(request.getParameterNames(),entity);
List<Criteria> criterias =buildCriteriaFromEntity(request.getParameterNames(),entity);
if(criterias!=null && !criterias.isEmpty()){
queryParameter.addCriterias(criterias);
}
@ -190,4 +196,46 @@ public abstract class RestCrudController<V extends BaseVo, E extends BaseEntity<
public void resetDefaultValues(HttpServletRequest request,HttpServletResponse response) throws Exception{
service.resetDefaultValues();
}
protected List<Criteria> buildCriteriaFromEntity(Enumeration<String> parameterNames, E entity) throws Exception {
if(entity==null){
return Collections.emptyList();
}
if(Modifier.isAbstract(entity.getClass().getModifiers())){
return Collections.emptyList();
}
List<Criteria> result =new ArrayList<>();
ManagedTypeAttributes managedTypeAttributes =service.getRepository().getManagedTypeAttributes(entity.getClass());
if(managedTypeAttributes==null){ return result; }
DirectFieldAccessFallbackBeanWrapper wrapper = new DirectFieldAccessFallbackBeanWrapper(entity);
Map<String, SingularAttribute<?,?>> singularAttributes =managedTypeAttributes.getSingularAttributes();
singularAttributes.putAll(managedTypeAttributes.getSingularAssociationAttributes());
if(parameterNames!=null){
while(parameterNames.hasMoreElements()){
String parameterName =parameterNames.nextElement();
SingularAttribute<?,?> singularAttribute =singularAttributes.get(parameterName);
if(singularAttribute!=null){
Object value =wrapper.getPropertyValue(parameterName);
if(value!=null){
if (value instanceof String) {
IContains icontains = new IContains();
icontains.setFieldName(parameterName);
icontains.setValue(value.toString());
result.add(icontains);
} else {
Equals equals = new Equals();
equals.setFieldName(parameterName);
equals.setValue(value.toString());
result.add(equals);
}
}
}
}
}
return result;
}
}

1
io.sc.platform.orm/build.gradle

@ -1,6 +1,7 @@
dependencies {
api(
project(":io.sc.platform.jdbc"),
project(":io.sc.platform.security"),
project(":io.sc.platform.orm.api"),
"org.springframework.boot:spring-boot-starter-data-jpa",

18
io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/DaoService.java

@ -11,6 +11,8 @@ import org.springframework.data.domain.Page;
import io.sc.platform.orm.repository.DaoRepository;
import io.sc.platform.orm.service.support.DaoExceptionProvider;
import io.sc.platform.orm.service.support.QueryParameter;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
public interface DaoService<E,ID extends Serializable,R extends DaoRepository<E,ID>>{
@ -33,13 +35,17 @@ public interface DaoService<E,ID extends Serializable,R extends DaoRepository<E,
public E update(ID id, E entity) throws Exception;
public List<E> update(Map<ID, E> entities) throws Exception;
public List<E> getDefaultValues() throws Exception;
public void resetDefaultValues() throws Exception;
public Specification<E> buildSpecification(QueryParameter queryParameter);
public List<E> list(Specification<E> specification) throws Exception;
public List<E> list(QueryParameter queryParameter) throws Exception;
public List<E> list(Specification<E> specification, QueryParameter queryParameter) throws Exception;
public List<E> list(QueryParameter queryParameter,Specification<E> specification) throws Exception;
public List<E> list(Specification<E> specification, Sort sort) throws Exception;
public Page<E> query(QueryParameter queryParameter) throws Exception;
public Page<E> query(Specification<E> specification, QueryParameter queryParameter) throws Exception;
public List<Criteria> buildCriteriaFromEntity(Enumeration<String> parameterNames, E entity) throws Exception;
public List<E> getDefaultValues() throws Exception;
public void resetDefaultValues() throws Exception;
public Page<E> query(QueryParameter queryParameter, Specification<E> specification) throws Exception;
public Page<E> query(Specification<E> specification, Pageable pageable,Sort sort) throws Exception;
}

191
io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/impl/DaoServiceImpl.java

@ -1,12 +1,14 @@
package io.sc.platform.orm.service.impl;
import io.sc.platform.core.Environment;
import io.sc.platform.orm.entity.CorporationAuditorEntity;
import io.sc.platform.orm.repository.DaoRepository;
import io.sc.platform.orm.service.DaoService;
import io.sc.platform.orm.service.support.*;
import io.sc.platform.orm.service.support.criteria.Criteria;
import io.sc.platform.orm.service.support.criteria.impl.Contains;
import io.sc.platform.orm.service.support.criteria.impl.Equals;
import io.sc.platform.orm.service.support.criteria.impl.IContains;
import io.sc.platform.security.util.SecurityUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.core.convert.ConversionService;
@ -289,6 +291,22 @@ public abstract class DaoServiceImpl<E,ID extends Serializable,R extends DaoRepo
return updated;
}
@Override
public List<E> getDefaultValues() throws Exception{
return null;
}
@Override
@Transactional
public void resetDefaultValues() throws Exception {
List<E> values =getDefaultValues();
if(values!=null && values.size()>0){
repository.deleteAll();
repository.flush();
repository.saveAll(values);
}
}
@Override
public Specification<E> buildSpecification(QueryParameter queryParameter) {
return (root, query, criteriaBuilder) -> {
@ -336,7 +354,7 @@ public abstract class DaoServiceImpl<E,ID extends Serializable,R extends DaoRepo
}
}
if(!predicates.isEmpty()) {
return criteriaBuilder.and(predicates.toArray(new Predicate[]{}));
return criteriaBuilder.not(criteriaBuilder.and(predicates.toArray(new Predicate[]{})));
}
}
return null;
@ -344,27 +362,33 @@ public abstract class DaoServiceImpl<E,ID extends Serializable,R extends DaoRepo
}
@Override
public List<E> list(Specification<E> specification) throws Exception {
if(specification!=null) {
return repository.findAll(specification);
public List<E> list(QueryParameter queryParameter) throws Exception {
if(queryParameter!=null) {
buildDefaultSortBy(queryParameter);
Specification<E> specification =buildSpecification(queryParameter);
specification =andCorporationSpecification(specification);
return list(specification,queryParameter.getSort());
}else{
buildDefaultSortBy(queryParameter);
Specification<E> specification =andCorporationSpecification(null);
return list(specification,null);
}
return Collections.emptyList();
}
@Override
public List<E> list(QueryParameter queryParameter) throws Exception {
public List<E> list(QueryParameter queryParameter,Specification<E> specification) throws Exception {
if(queryParameter!=null) {
Specification<E> specification =buildSpecification(queryParameter);
return list(specification,queryParameter);
buildDefaultSortBy(queryParameter);
specification =andCorporationSpecification(specification);
return list(specification,queryParameter.getSort());
}else{
specification =andCorporationSpecification(specification);
return list(specification,null);
}
return QueryResult.emptyList();
}
@Override
public List<E> list(Specification<E> specification, QueryParameter queryParameter) throws Exception {
if(queryParameter!=null) {
setDefaultSortBy(queryParameter);
Sort sort=queryParameter.getSort();
public List<E> list(Specification<E> specification, Sort sort) throws Exception {
if(sort!=null){
if(specification!=null) {
return repository.findAll(specification, sort);
@ -379,31 +403,42 @@ public abstract class DaoServiceImpl<E,ID extends Serializable,R extends DaoRepo
}
}
}
return QueryResult.emptyList();
}
@Override
public Page<E> query(QueryParameter queryParameter) throws Exception {
if(queryParameter!=null) {
buildDefaultSortBy(queryParameter);
Specification<E> specification =buildSpecification(queryParameter);
return query(specification,queryParameter);
specification =andCorporationSpecification(specification);
return query(specification,queryParameter.getJpaPageable(),queryParameter.getSort());
}else{
buildDefaultSortBy(queryParameter);
Specification<E> specification =andCorporationSpecification(null);
return query(specification,null,null);
}
return QueryResult.emptyPage();
}
@Override
public Page<E> query(Specification<E> specification, QueryParameter queryParameter) throws Exception {
public Page<E> query(QueryParameter queryParameter,Specification<E> specification) throws Exception {
if(queryParameter!=null) {
setDefaultSortBy(queryParameter);
if(queryParameter.getPageable()){
Pageable pageable =queryParameter.getJpaPageable();
buildDefaultSortBy(queryParameter);
specification =andCorporationSpecification(specification);
return query(specification,queryParameter.getJpaPageable(),queryParameter.getSort());
}else{
specification =andCorporationSpecification(specification);
return query(specification,null,null);
}
}
@Override
public Page<E> query(Specification<E> specification, Pageable pageable, Sort sort) throws Exception {
if(pageable!=null){
if(specification!=null) {
return repository.findAll(specification, pageable);
}else{
return repository.findAll(pageable);
}
}else{
Sort sort=queryParameter.getSort();
}
if(sort!=null){
if(specification!=null) {
return QueryResult.page(repository.findAll(specification, sort));
@ -418,101 +453,23 @@ public abstract class DaoServiceImpl<E,ID extends Serializable,R extends DaoRepo
}
}
}
}
return QueryResult.emptyPage();
}
@Override
public List<Criteria> buildCriteriaFromEntity(Enumeration<String> parameterNames,E entity) throws Exception {
if(entity==null){
return Collections.emptyList();
}
if(Modifier.isAbstract(entity.getClass().getModifiers())){
return Collections.emptyList();
}
List<Criteria> result =new ArrayList<>();
ManagedTypeAttributes managedTypeAttributes =repository.getManagedTypeAttributes(entity.getClass());
if(managedTypeAttributes==null){ return result; }
DirectFieldAccessFallbackBeanWrapper wrapper = new DirectFieldAccessFallbackBeanWrapper(entity);
Map<String, SingularAttribute<?,?>> singularAttributes =managedTypeAttributes.getSingularAttributes();
singularAttributes.putAll(managedTypeAttributes.getSingularAssociationAttributes());
if(parameterNames!=null){
while(parameterNames.hasMoreElements()){
String parameterName =parameterNames.nextElement();
SingularAttribute<?,?> singularAttribute =singularAttributes.get(parameterName);
if(singularAttribute!=null){
Object value =wrapper.getPropertyValue(parameterName);
if(value!=null){
if (value instanceof String) {
IContains icontains = new IContains();
icontains.setFieldName(parameterName);
icontains.setValue(value.toString());
result.add(icontains);
} else {
Equals equals = new Equals();
equals.setFieldName(parameterName);
equals.setValue(value.toString());
result.add(equals);
}
}
}
}
}
// attributes.keySet().forEach(fieldName ->{
// JavaTypeAndValue javaTypeAndValue =attributes.get(fieldName);
// Object value =javaTypeAndValue.getValue();
// if(value!=null) {
// if (value instanceof String) {
// IContains icontains = new IContains();
// icontains.setFieldName(fieldName);
// icontains.setValue(value.toString());
// result.add(icontains);
// } else {
// Equals equals = new Equals();
// equals.setFieldName(fieldName);
// equals.setValue(value.toString());
// result.add(equals);
// }
// }
// });
/*
if(attributes==null || attributes.isEmpty()){ return result;}
attributes.keySet().forEach(fieldName ->{
Object value =wrapper.getPropertyValue(fieldName);
if(value!=null){
Class<?> javaType =attributes.get(fieldName).getJavaType();
EntityInformation<Object, ?> entityInformation =repositories.getEntityInformationFor(javaType);
Object id =entityInformation.getId(value);
if(id!=null){
Equals equals =new Equals();
equals.setFieldName(fieldName);
equals.setValue(id.toString());
result.add(equals);
}
}
});
/**
* 添加法人条件
* @param specification Specification
* @return 带法人查询条件的 Specification
*/
return result;
public Specification<E> andCorporationSpecification(Specification<E> specification){
Specification<E> _specification =(root, query, criteriaBuilder) -> {
if (Environment.getInstance().isMultiCorportationMode() && !"_PRIMARY_".equals(SecurityUtil.getCorporationCode()) && CorporationAuditorEntity.class.isAssignableFrom(root.getModel().getJavaType())) {
return criteriaBuilder.and(criteriaBuilder.equal(root.get("corporationCode"), SecurityUtil.getCorporationCode()));
}
@Override
public List<E> getDefaultValues() throws Exception{
return null;
};
if(_specification!=null) {
return _specification.and(specification);
}
@Override
@Transactional
public void resetDefaultValues() throws Exception {
List<E> values =getDefaultValues();
if(values!=null && values.size()>0){
repository.deleteAll();
repository.flush();
repository.saveAll(values);
}
return specification;
}
/**
@ -531,7 +488,11 @@ public abstract class DaoServiceImpl<E,ID extends Serializable,R extends DaoRepo
return obj;
}
private void setDefaultSortBy(QueryParameter queryParameter){
/**
* 添加默认排序
* @param queryParameter 查询参数
*/
private void buildDefaultSortBy(QueryParameter queryParameter){
if (!queryParameter.existsSortBy()) { // 没有指定的排序器才使用默认排序器
String[] defaultSortBys = this.getDefaultSortBy();
if (defaultSortBys != null && defaultSortBys.length > 0) {

18
io.sc.platform.orm/src/main/java/io/sc/platform/orm/service/support/QueryParameter.java

@ -1,12 +1,13 @@
package io.sc.platform.orm.service.support;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.*;
import io.sc.platform.core.Environment;
import io.sc.platform.jdbc.SqlWhere;
import io.sc.platform.orm.entity.BaseEntity;
import io.sc.platform.orm.entity.CorporationAuditorEntity;
import io.sc.platform.orm.service.support.criteria.Criteria;
import io.sc.platform.orm.service.support.criteria.impl.Equals;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
@ -25,6 +26,15 @@ public class QueryParameter {
protected List<Criteria> criterias =new ArrayList<Criteria>(); //criteria 对象列表(将 json 串转成对象后的列表)
protected String exportFilename; //导出文件名
public void addCorporationCondition(String corporationCode){
if(Environment.getInstance().isMultiCorportationMode()) {
Equals equals = new Equals();
equals.setFieldName("corporationCode");
equals.setValue(corporationCode);
criterias.add(equals);
}
}
public Criteria getCriteriaByFieldName(String fieldName){
if(StringUtils.hasText(fieldName)){
for(Criteria criteria : criterias){

124
io.sc.platform.security/src/main/java/io/sc/platform/security/initializer/CorporationInitializer.java

@ -1,124 +0,0 @@
package io.sc.platform.security.initializer;
import io.sc.platform.core.initializer.ApplicationInitializer;
import io.sc.platform.core.initializer.ApplicationInitializerExecuteException;
import io.sc.platform.core.util.DateUtil;
import io.sc.platform.jdbc.sql.builder.SqlBuilder;
import io.sc.platform.security.service.support.Corporation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.Date;
import java.util.UUID;
public class CorporationInitializer implements ApplicationInitializer {
private static final Logger log =LoggerFactory.getLogger(CorporationInitializer.class);
private Boolean isInitialized =null;
private JdbcTemplate jdbcTemplate;
@Override
public int getOrder() {
return 100;
}
@Override
public void init(ApplicationContext applicationContext) {
this.jdbcTemplate =applicationContext.getBean(JdbcTemplate.class);
}
@Override
public synchronized boolean isInitialized() {
if(isInitialized!=null) {
return isInitialized;
}
try {
Corporation corporation =findRootCorporation();
if(corporation==null) {
isInitialized =false;
return isInitialized;
}
} catch (Exception e) {
log.error("",e);
}
isInitialized =true;
return isInitialized;
}
@Override
public void execute() throws ApplicationInitializerExecuteException {
String[] childNames =new String[]{
"上海崇明沪农商村镇银行",
"北京房山沪农商村镇银行",
"深圳光明沪农商村镇银行",
"济南槐荫沪农商村镇银行",
"济南长清沪农商村镇银行",
"聊城沪农商村镇银行",
"茌平沪农商村镇银行",
"阳谷沪农商村镇银行",
"临清沪农商村镇银行",
"泰安沪农商村镇银行",
"宁阳沪农商村镇银行",
"东平沪农商村镇银行",
"日照沪农商村镇银行",
"长沙星沙沪农商村镇银行",
"宁乡沪农商村镇银行",
"醴陵沪农商村镇银行",
"双峰沪农商村镇银行",
"涟源沪农商村镇银行",
"衡阳县沪农商村镇银行",
"桂阳沪农商村镇银行",
"永兴沪农商村镇银行",
"澧县沪农商村镇银行",
"临澧沪农商村镇银行",
"石门沪农商村镇银行",
"慈利沪农商村镇银行",
"昆明官渡沪农商村镇银行",
"嵩明沪农商村镇银行",
"蒙自沪农商村镇银行",
"弥勒沪农商村镇银行",
"开远沪农商村镇银行",
"个旧沪农商村镇银行",
"保山隆阳沪农商村镇银行",
"瑞丽沪农商村镇银行",
"建水沪农商村镇银行",
"临沧临翔沪农商村镇银行",
};
SqlBuilder.getInsertIntoSqlBuilder()
.table("SYS_CORPORATION")
.field("ID_","_PRIMARY_")
.field("CODE_","_PRIMARY_")
.field("NAME_","沪衣商村镇银行")
.field("DESCRIPTION_","")
.field("ENABLE_",1)
.field("PARENT_ID_",null)
.field("CREATOR_","platform")
.field("CREATE_DATE_", DateUtil.sqlDate())
.field("LAST_MODIFIER_","platform")
.field("LAST_MODIFYDATE_",DateUtil.sqlDate())
.insert(jdbcTemplate);
for(int i=0;i<childNames.length;i++) {
SqlBuilder.getInsertIntoSqlBuilder()
.table("SYS_CORPORATION")
.field("ID_","000" + i)
.field("CODE_","000" + i)
.field("NAME_",childNames[i])
.field("DESCRIPTION_","")
.field("ENABLE_",1)
.field("PARENT_ID_","_PRIMARY_")
.field("CREATOR_","platform")
.field("CREATE_DATE_", DateUtil.sqlDate())
.field("LAST_MODIFIER_","platform")
.field("LAST_MODIFYDATE_",DateUtil.sqlDate())
.insert(jdbcTemplate);
}
}
private Corporation findRootCorporation(){
return jdbcTemplate.query("select * from SYS_CORPORATION where CODE_='_PRIMARY_'", Corporation.getResultSetExtractor());
}
}

3
io.sc.platform.security/src/main/resources/META-INF/platform/plugins/liquibase.json

@ -4,7 +4,8 @@
"order" : 100,
"description":"授权与认证",
"locations":[
"liquibase/io.sc.platform.security_8.0.0_20220606__Security Database Schema DDL.xml"
"liquibase/io.sc.platform.security_8.0.0_20220606__Security Database Schema DDL.xml",
"liquibase/io.sc.platform.security_8.0.0_20220606__Security Data.xml"
]
}
]

1
io.sc.platform.security/src/main/resources/META-INF/services/io.sc.platform.core.initializer.ApplicationInitializer

@ -1,2 +1 @@
io.sc.platform.security.initializer.CorporationInitializer
io.sc.platform.security.initializer.RoleAndUserInitializer

41
io.sc.platform.security/src/main/resources/io/sc/platform/security/liquibase/data/sys_corporation.csv

@ -0,0 +1,41 @@
"SYS_CORPORATION","SELF_REFERENCE",,,,,,,,,,,
"ID_","CODE_","NAME_","DESCRIPTION_","ENABLE_","ORDER_","PARENT_ID_","JPA_VERSION_","DATA_COME_FROM_","CREATOR_","CREATE_DATE_","LAST_MODIFIER_","LAST_MODIFYDATE_"
"ID","","","描述","","顺序","父法人ID","JPA乐观锁版本","","创建人","创建日期","最后修改人","最后修改日期"
"VARCHAR","VARCHAR","VARCHAR","VARCHAR","SMALLINT","INTEGER","VARCHAR","INTEGER","VARCHAR","VARCHAR","TIMESTAMP","VARCHAR","TIMESTAMP"
"java.lang.String","java.lang.String","java.lang.String","java.lang.String","java.lang.Integer","java.lang.Integer","java.lang.String","java.lang.Integer","java.lang.String","java.lang.String","java.sql.Timestamp","java.lang.String","java.sql.Timestamp"
"_PRIMARY_","_PRIMARY_","沪衣商村镇银行","","1","0",,,"INPUT","platform","2024-06-11 00:00:00","platform","2024-06-11 00:00:00"
"0000","0000","上海崇明沪农商村镇银行","","1","28","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 17:01:52"
"0001","0001","北京房山沪农商村镇银行","","1","2","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 16:55:58"
"00010","00010","宁阳沪农商村镇银行","","1","25","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 17:01:18"
"00011","00011","东平沪农商村镇银行","","1","6","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 16:57:14"
"00012","00012","日照沪农商村镇银行","","1","26","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 17:01:31"
"00013","00013","长沙星沙沪农商村镇银行","","1","3","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 16:56:17"
"00014","00014","宁乡沪农商村镇银行","","1","24","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 17:01:05"
"00015","00015","醴陵沪农商村镇银行","","1","16","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 16:59:13"
"00016","00016","双峰沪农商村镇银行","","1","31","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 17:02:19"
"00017","00017","涟源沪农商村镇银行","","1","17","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 16:59:32"
"00018","00018","衡阳县沪农商村镇银行","","1","9","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 16:57:49"
"00019","00019","桂阳沪农商村镇银行","","1","8","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 16:57:40"
"0002","0002","深圳光明沪农商村镇银行","","1","29","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 17:02:01"
"00020","00020","永兴沪农商村镇银行","","1","35","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 17:03:28"
"00021","00021","澧县沪农商村镇银行","","1","15","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 16:59:03"
"00022","00022","临澧沪农商村镇银行","","1","20","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 17:00:12"
"00023","00023","石门沪农商村镇银行","","1","30","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 17:02:09"
"00024","00024","慈利沪农商村镇银行","","1","5","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 16:56:47"
"00025","00025","昆明官渡沪农商村镇银行","","1","14","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 16:58:51"
"00026","00026","嵩明沪农商村镇银行","","1","32","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 17:02:28"
"00027","00027","蒙自沪农商村镇银行","","1","22","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 17:00:40"
"00028","00028","弥勒沪农商村镇银行","","1","23","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 17:00:54"
"00029","00029","开远沪农商村镇银行","","1","13","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 16:58:42"
"0003","0003","济南槐荫沪农商村镇银行","","1","11","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 16:58:24"
"00030","00030","个旧沪农商村镇银行","","1","7","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 16:57:24"
"00031","00031","保山隆阳沪农商村镇银行","","1","1","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 16:55:35"
"00032","00032","瑞丽沪农商村镇银行","","1","27","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 17:01:38"
"00033","00033","建水沪农商村镇银行","","1","12","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 16:58:34"
"00034","00034","临沧临翔沪农商村镇银行","","1","19","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 17:00:04"
"0004","0004","济南长清沪农商村镇银行","","1","10","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 16:58:08"
"0005","0005","聊城沪农商村镇银行","","1","18","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 16:59:46"
"0006","0006","茌平沪农商村镇银行","","1","4","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 16:56:31"
"0007","0007","阳谷沪农商村镇银行","","1","34","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 17:03:23"
"0008","0008","临清沪农商村镇银行","","1","21","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 17:00:27"
"0009","0009","泰安沪农商村镇银行","","1","33","_PRIMARY_",,"INPUT","platform","2024-06-11 00:00:00","admin","2024-06-11 17:03:19"
1 SYS_CORPORATION SELF_REFERENCE
2 ID_ CODE_ NAME_ DESCRIPTION_ ENABLE_ ORDER_ PARENT_ID_ JPA_VERSION_ DATA_COME_FROM_ CREATOR_ CREATE_DATE_ LAST_MODIFIER_ LAST_MODIFYDATE_
3 ID 描述 顺序 父法人ID JPA乐观锁版本 创建人 创建日期 最后修改人 最后修改日期
4 VARCHAR VARCHAR VARCHAR VARCHAR SMALLINT INTEGER VARCHAR INTEGER VARCHAR VARCHAR TIMESTAMP VARCHAR TIMESTAMP
5 java.lang.String java.lang.String java.lang.String java.lang.String java.lang.Integer java.lang.Integer java.lang.String java.lang.Integer java.lang.String java.lang.String java.sql.Timestamp java.lang.String java.sql.Timestamp
6 _PRIMARY_ _PRIMARY_ 沪衣商村镇银行 1 0 INPUT platform 2024-06-11 00:00:00 platform 2024-06-11 00:00:00
7 0000 0000 上海崇明沪农商村镇银行 1 28 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 17:01:52
8 0001 0001 北京房山沪农商村镇银行 1 2 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 16:55:58
9 00010 00010 宁阳沪农商村镇银行 1 25 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 17:01:18
10 00011 00011 东平沪农商村镇银行 1 6 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 16:57:14
11 00012 00012 日照沪农商村镇银行 1 26 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 17:01:31
12 00013 00013 长沙星沙沪农商村镇银行 1 3 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 16:56:17
13 00014 00014 宁乡沪农商村镇银行 1 24 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 17:01:05
14 00015 00015 醴陵沪农商村镇银行 1 16 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 16:59:13
15 00016 00016 双峰沪农商村镇银行 1 31 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 17:02:19
16 00017 00017 涟源沪农商村镇银行 1 17 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 16:59:32
17 00018 00018 衡阳县沪农商村镇银行 1 9 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 16:57:49
18 00019 00019 桂阳沪农商村镇银行 1 8 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 16:57:40
19 0002 0002 深圳光明沪农商村镇银行 1 29 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 17:02:01
20 00020 00020 永兴沪农商村镇银行 1 35 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 17:03:28
21 00021 00021 澧县沪农商村镇银行 1 15 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 16:59:03
22 00022 00022 临澧沪农商村镇银行 1 20 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 17:00:12
23 00023 00023 石门沪农商村镇银行 1 30 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 17:02:09
24 00024 00024 慈利沪农商村镇银行 1 5 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 16:56:47
25 00025 00025 昆明官渡沪农商村镇银行 1 14 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 16:58:51
26 00026 00026 嵩明沪农商村镇银行 1 32 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 17:02:28
27 00027 00027 蒙自沪农商村镇银行 1 22 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 17:00:40
28 00028 00028 弥勒沪农商村镇银行 1 23 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 17:00:54
29 00029 00029 开远沪农商村镇银行 1 13 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 16:58:42
30 0003 0003 济南槐荫沪农商村镇银行 1 11 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 16:58:24
31 00030 00030 个旧沪农商村镇银行 1 7 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 16:57:24
32 00031 00031 保山隆阳沪农商村镇银行 1 1 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 16:55:35
33 00032 00032 瑞丽沪农商村镇银行 1 27 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 17:01:38
34 00033 00033 建水沪农商村镇银行 1 12 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 16:58:34
35 00034 00034 临沧临翔沪农商村镇银行 1 19 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 17:00:04
36 0004 0004 济南长清沪农商村镇银行 1 10 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 16:58:08
37 0005 0005 聊城沪农商村镇银行 1 18 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 16:59:46
38 0006 0006 茌平沪农商村镇银行 1 4 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 16:56:31
39 0007 0007 阳谷沪农商村镇银行 1 34 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 17:03:23
40 0008 0008 临清沪农商村镇银行 1 21 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 17:00:27
41 0009 0009 泰安沪农商村镇银行 1 33 _PRIMARY_ INPUT platform 2024-06-11 00:00:00 admin 2024-06-11 17:03:19

19
io.sc.platform.security/src/main/resources/liquibase/io.sc.platform.security_8.0.0_20220606__Security Data.xml

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xsi:schemaLocation="
http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.1.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd
"
>
<changeSet id="io.sc.platform.security_8.0.0_20220606__Security Data" author="platform">
<!-- 法人信息表 -->
<customChange class="io.sc.platform.jdbc.liquibase.task.CsvImportTaskChange">
<param name="dataFile" value="classpath:/io/sc/platform/security/liquibase/data/sys_corporation.csv"/>
</customChange>
</changeSet>
</databaseChangeLog>

1
io.sc.platform.security/src/main/resources/liquibase/io.sc.platform.security_8.0.0_20220606__Security Database Schema DDL.xml

@ -20,6 +20,7 @@
<column name="NAME_" type="NVARCHAR(255)" remarks="法人名称"></column>
<column name="DESCRIPTION_" type="NVARCHAR(255)" remarks="描述"></column>
<column name="ENABLE_" type="SMALLINT" remarks="是否可用(0:不可用,1:可用)"></column>
<column name="ORDER_" type="INTEGER" remarks="顺序"></column>
<column name="PARENT_ID_" type="NVARCHAR(255)" remarks="父法人ID"></column>
<column name="JPA_VERSION_" type="INTEGER" remarks="JPA乐观锁版本"/>
<column name="DATA_COME_FROM_" type="NVARCHAR(10)" remarks="数据来源(INPUT:手工录入,IMPORT:系统自动导入)"/>

9
io.sc.platform.system.api/src/main/java/io/sc/platform/system/api/corporation/CorporationVo.java

@ -9,6 +9,7 @@ public class CorporationVo extends AuditorVo {
private String name;
private String description;
private Boolean enable;
private Integer order;
private String parent;
public String getId() {
@ -83,6 +84,14 @@ public class CorporationVo extends AuditorVo {
this.enable = enable;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
public String getParent() {
return parent;
}

2
io.sc.platform.system.frontend/package.json

@ -92,7 +92,7 @@
"luckyexcel": "1.0.1",
"mockjs": "1.1.0",
"pinia": "2.1.7",
"platform-core": "8.1.228",
"platform-core": "8.1.229",
"quasar": "2.15.3",
"tailwindcss": "3.4.3",
"vue": "3.4.24",

6
io.sc.platform.system.frontend/public/configure.js

@ -23,8 +23,10 @@ window.APP.configure ={
crossdomain: true,
basicAuth: {
enable: true,
username: 'admin',
password: 'admin',
username: 'admin_jn_cq',
password: 'password',
// username: 'admin',
// password: 'admin',
}
}
}

4
io.sc.platform.system.frontend/src/views/corporation/Corporation.vue

@ -36,9 +36,10 @@
:columns="[
{ width: '100%', name: 'name', label: $t('name') },
{ width: 150, name: 'code', label: $t('code') },
{ width: 60, name: 'order', label: $t('order') },
{ width: 80, name: 'enable', label: $t('status'), format: Formater.enableTag() },
{ width: 100, name: 'lastModifier', label: $t('lastModifier') },
{ width: 110, name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.dateOnly() },
{ width: 80, name: 'enable', label: $t('status'), format: Formater.enableTag() },
]"
:editor="{
dialog: {
@ -51,6 +52,7 @@
{ name: 'code', label: $t('code'), type: 'text', required: true },
{ name: 'name', label: $t('name'), type: 'text', required: true },
{ name: 'description', label: $t('description'), type: 'textarea', rows: 1 },
{ name: 'order', label: $t('order'), type: 'number' },
{ name: 'enable', label: $t('enable'), type: 'checkbox', defaultValue: true },
],
},

48
io.sc.platform.system.frontend/src/views/role/Role.vue

@ -23,11 +23,19 @@
:toolbar-actions="['query', 'refresh', 'separator', 'add', 'clone', 'edit', 'remove', 'separator', 'view', 'separator', 'export']"
:columns="[
{ width: 150, name: 'code', label: $t('code') },
{ width: '100%', name: 'name', label: $t('name') },
{ width: 80, name: 'enable', label: $t('status'), format: Formater.enableTag() },
{ width: 100, name: 'corporation', label: $t('corporation'), hidden: !Environment.getConfigure().setting.isMultiCorporationMode },
{ width: 120, name: 'lastModifier', label: $t('lastModifier') },
{ width: 120, name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.dateOnly() },
{ width: 200, name: 'name', label: $t('name') },
{ width: 70, name: 'enable', label: $t('status'), align: 'center', format: Formater.enableTag() },
{
width: 200,
name: 'corporationCode',
label: $t('corporation'),
hidden: !SessionManager.isPrimaryCorporation(),
format: (value) => {
return corporationMapRef[value];
},
},
{ width: 100, name: 'lastModifier', label: $t('lastModifier') },
{ width: 110, name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.dateOnly() },
]"
:editor="{
dialog: {
@ -39,6 +47,15 @@
{ name: 'code', label: $t('code'), type: 'text', required: true },
{ name: 'name', label: $t('name'), type: 'text', required: true },
{ name: 'description', label: $t('description'), type: 'textarea', rows: 1 },
{
name: 'corporationCode',
label: $t('corporation'),
type: 'select',
options: corporationOptionRef,
showIf: () => {
return SessionManager.isPrimaryCorporation();
},
},
{ name: 'enable', label: $t('enable'), type: 'checkbox', defaultValue: true },
],
},
@ -113,11 +130,13 @@
</q-splitter>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { Environment, axios, Options, Formater } from 'platform-core';
import { ref, onMounted } from 'vue';
import { Environment, axios, Options, Formater, SessionManager } from 'platform-core';
import SelectUserGrid from '../shared/SelectUserGrid.vue';
import SelectMenuTreeGrid from '../shared/SelectMenuTreeGrid.vue';
const corporationMapRef = ref({});
const corporationOptionRef = ref([]);
const roleGridRef = ref();
const userGridRef = ref();
const menuTreeGridRef = ref();
@ -186,4 +205,19 @@ const update = (ids, gridComponent) => {
gridComponent.refresh();
});
};
onMounted(() => {
axios.get(Environment.apiContextPath('/api/system/corporation?pageable=false')).then((response) => {
const options = [];
const corporationMap = {};
if (response.data?.content && response.data?.content.length > 0) {
for (const item of response.data.content) {
options.push({ label: item.name, value: item.code });
corporationMap[item.code] = item.name;
}
}
corporationOptionRef.value = options;
corporationMapRef.value = corporationMap;
});
});
</script>

42
io.sc.platform.system.frontend/src/views/user/User.vue

@ -98,6 +98,15 @@
};
},
},
{
width: 200,
name: 'corporationCode',
label: $t('corporation'),
hidden: !SessionManager.isPrimaryCorporation(),
format: (value) => {
return corporationMapRef[value];
},
},
{ width: 100, name: 'lastModifier', label: $t('lastModifier') },
{ width: 110, name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.dateOnly() },
]"
@ -110,7 +119,17 @@
fields: [
{ name: 'loginName', label: $t('loginName'), type: 'text', required: true, colSpan: 2 },
{ name: 'userName', label: $t('userName'), type: 'text', required: true, colSpan: 2 },
{ name: 'description', label: $t('description'), type: 'textarea', rows: 1, colSpan: 4 },
{ name: 'description', label: $t('description'), type: 'textarea', rows: 1, colSpan: 2 },
{
name: 'corporationCode',
label: $t('corporation'),
type: 'select',
options: corporationOptionRef,
showIf: () => {
return SessionManager.isPrimaryCorporation();
},
colSpan: 2,
},
{ name: 'password', label: $t('password'), type: 'password', colSpan: 2 },
{
name: 'confirmPassword',
@ -213,13 +232,15 @@
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { Environment, axios, NotifyManager, DialogManager, Formater, Options, Tools } from 'platform-core';
import { ref, onMounted } from 'vue';
import { Environment, axios, SessionManager, NotifyManager, DialogManager, Formater, Options, Tools } from 'platform-core';
import SelectRoleGrid from '../shared/SelectRoleGrid.vue';
import SelectOrgTreeGrid from '../shared/SelectOrgTreeGrid.vue';
import UserStatusTag from '../shared/UserStatusTag.vue';
import SetPasswordDialog from './SetPasswordDialog.vue';
const corporationMapRef = ref({});
const corporationOptionRef = ref([]);
const userGridRef = ref();
const roleGridRef = ref();
const orgTreeGridRef = ref();
@ -289,4 +310,19 @@ const update = (ids, gridComponent) => {
gridComponent.refresh();
});
};
onMounted(() => {
axios.get(Environment.apiContextPath('/api/system/corporation?pageable=false')).then((response) => {
const options = [];
const corporationMap = {};
if (response.data?.content && response.data?.content.length > 0) {
for (const item of response.data.content) {
options.push({ label: item.name, value: item.code });
corporationMap[item.code] = item.name;
}
}
corporationOptionRef.value = options;
corporationMapRef.value = corporationMap;
});
});
</script>

6
io.sc.platform.system/src/main/java/io/sc/platform/system/application/service/impl/ApplicationServiceImpl.java

@ -46,7 +46,7 @@ public class ApplicationServiceImpl extends DaoServiceImpl<ApplicationEntity, St
criteriaBuilder.like(root.get("name"),filter)
);
};
return this.query(specification, queryParameter);
return this.query(queryParameter,specification);
}
return QueryResult.emptyPage();
}
@ -63,7 +63,7 @@ public class ApplicationServiceImpl extends DaoServiceImpl<ApplicationEntity, St
return criteriaBuilder.exists(subquery);
};
return this.query(specification, queryParameter);
return this.query(queryParameter,specification);
}
return QueryResult.emptyPage();
}
@ -82,7 +82,7 @@ public class ApplicationServiceImpl extends DaoServiceImpl<ApplicationEntity, St
};
Specification<ApplicationEntity> specification =buildSpecification(queryParameter);
return this.query(baseSpecification.and(specification), queryParameter);
return this.query(queryParameter,baseSpecification.and(specification));
}
return QueryResult.emptyPage();
}

13
io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/jpa/entity/CorporationEntity.java

@ -42,6 +42,10 @@ public class CorporationEntity extends AuditorEntity<CorporationVo> {
@Convert(converter= NumericBooleanConverter.class)
private Boolean enable;
//顺序
@Column(name="ORDER_")
private Integer order;
// 父法人
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="PARENT_ID_")
@ -62,6 +66,7 @@ public class CorporationEntity extends AuditorEntity<CorporationVo> {
vo.setName(this.getName());
vo.setDescription(this.getDescription());
vo.setEnable(this.getEnable());
vo.setOrder(this.getOrder());
vo.setParent(this.getParent()==null?null:this.getParent().getId());
return vo;
}
@ -106,6 +111,14 @@ public class CorporationEntity extends AuditorEntity<CorporationVo> {
this.enable = enable;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
public CorporationEntity getParent() {
return parent;
}

4
io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/jpa/repository/CorporationRepository.java

@ -2,7 +2,9 @@ package io.sc.platform.system.corporation.jpa.repository;
import io.sc.platform.orm.repository.DaoRepository;
import io.sc.platform.system.corporation.jpa.entity.CorporationEntity;
import org.springframework.data.jpa.repository.Query;
public interface CorporationRepository extends DaoRepository<CorporationEntity,String> {
@Query("select max(e.order)+1 from io.sc.platform.system.corporation.jpa.entity.CorporationEntity e")
public Integer getNextOrder();
}

13
io.sc.platform.system/src/main/java/io/sc/platform/system/corporation/service/impl/CorporationServiceImpl.java

@ -2,6 +2,7 @@ package io.sc.platform.system.corporation.service.impl;
import io.sc.platform.orm.api.vo.CorporationAuditorVo;
import io.sc.platform.orm.service.impl.DaoServiceImpl;
import io.sc.platform.system.application.jpa.entity.ApplicationEntity;
import io.sc.platform.system.corporation.jpa.entity.CorporationEntity;
import io.sc.platform.system.corporation.jpa.repository.CorporationRepository;
import io.sc.platform.system.corporation.service.CorporationService;
@ -18,6 +19,18 @@ import java.util.Set;
public class CorporationServiceImpl extends DaoServiceImpl<CorporationEntity, String, CorporationRepository> implements CorporationService {
@Autowired private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@Override
public String[] getDefaultSortBy() {
return new String[]{"order"};
}
@Override
public CorporationEntity add(CorporationEntity entity) throws Exception {
Integer nextOrder =repository.getNextOrder();
entity.setOrder(nextOrder==null?1:nextOrder);
return super.add(entity);
}
@Override
public void addUsers(String corporationCode, Set<String> userIds) throws Exception {
if(StringUtils.hasText(corporationCode) && userIds!=null && !userIds.isEmpty()){

2
io.sc.platform.system/src/main/java/io/sc/platform/system/department/service/impl/DepartmentServiceImpl.java

@ -64,7 +64,7 @@ public class DepartmentServiceImpl extends DaoServiceImpl<DepartmentEntity, Stri
return criteriaBuilder.exists(subquery);
};
return this.list(specification, queryParameter);
return this.list(queryParameter,specification);
}
return QueryResult.emptyList();
}

6
io.sc.platform.system/src/main/java/io/sc/platform/system/menu/service/impl/MenuServiceImpl.java

@ -225,7 +225,7 @@ public class MenuServiceImpl extends DaoServiceImpl<MenuEntity, String, MenuRepo
Join<RoleEntity,MenuEntity> join = root.join("roles");
return criteriaBuilder.equal(join.get("id"), roleId);
};
return this.list(specification, queryParameter);
return this.list(queryParameter,specification);
}
return QueryResult.emptyList();
}
@ -237,7 +237,7 @@ public class MenuServiceImpl extends DaoServiceImpl<MenuEntity, String, MenuRepo
Join<RoleEntity,MenuEntity> join = root.join("orgs");
return criteriaBuilder.equal(join.get("id"), orgId);
};
return this.list(specification, queryParameter);
return this.list(queryParameter,specification);
}
return QueryResult.emptyList();
}
@ -249,7 +249,7 @@ public class MenuServiceImpl extends DaoServiceImpl<MenuEntity, String, MenuRepo
Join<ApplicationEntity,MenuEntity> join = root.join("applications");
return criteriaBuilder.equal(join.get("id"), applicationId);
};
return this.list(specification, queryParameter);
return this.list(queryParameter,specification);
}
return QueryResult.emptyList();
}

4
io.sc.platform.system/src/main/java/io/sc/platform/system/org/service/impl/OrgServiceImpl.java

@ -66,7 +66,7 @@ public class OrgServiceImpl extends DaoServiceImpl<OrgEntity, String, OrgReposit
return criteriaBuilder.exists(subquery);
};
return this.list(specification, queryParameter);
return this.list(queryParameter,specification);
}
return QueryResult.emptyList();
}
@ -105,7 +105,7 @@ public class OrgServiceImpl extends DaoServiceImpl<OrgEntity, String, OrgReposit
return criteriaBuilder.exists(subquery);
};
return this.list(specification, queryParameter);
return this.list(queryParameter,specification);
}
return QueryResult.emptyList();
}

13
io.sc.platform.system/src/main/java/io/sc/platform/system/role/service/impl/RoleServiceImpl.java

@ -46,7 +46,7 @@ public class RoleServiceImpl extends DaoServiceImpl<RoleEntity, String, RoleRepo
criteriaBuilder.like(root.get("name"),filter)
);
};
return this.query(specification, queryParameter);
return this.query(queryParameter,specification);
}
return QueryResult.emptyPage();
}
@ -58,7 +58,7 @@ public class RoleServiceImpl extends DaoServiceImpl<RoleEntity, String, RoleRepo
Join<RoleEntity,UserEntity> join = root.join("users");
return criteriaBuilder.equal(join.get("id"), userId);
};
return this.list(specification);
return this.list(specification,null);
}
return QueryResult.emptyList();
}
@ -81,10 +81,9 @@ public class RoleServiceImpl extends DaoServiceImpl<RoleEntity, String, RoleRepo
subquery.select(criteriaBuilder.literal(1));
subquery.where(criteriaBuilder.equal(join.get("id"), userId));
return criteriaBuilder.exists(subquery);
};
return this.query(specification, queryParameter);
return this.query(queryParameter,specification);
}
return QueryResult.emptyPage();
}
@ -112,7 +111,7 @@ public class RoleServiceImpl extends DaoServiceImpl<RoleEntity, String, RoleRepo
};
Specification<RoleEntity> specification =buildSpecification(queryParameter);
return this.query(baseSpecification.and(specification), queryParameter);
return this.query(queryParameter,baseSpecification.and(specification));
}
return QueryResult.emptyPage();
}
@ -129,7 +128,7 @@ public class RoleServiceImpl extends DaoServiceImpl<RoleEntity, String, RoleRepo
return criteriaBuilder.exists(subquery);
};
return this.query(specification, queryParameter);
return this.query(queryParameter,specification);
}
return QueryResult.emptyPage();
}
@ -148,7 +147,7 @@ public class RoleServiceImpl extends DaoServiceImpl<RoleEntity, String, RoleRepo
};
Specification<RoleEntity> specification =buildSpecification(queryParameter);
return this.query(baseSpecification.and(specification), queryParameter);
return this.query(queryParameter,baseSpecification.and(specification));
}
return QueryResult.emptyPage();
}

16
io.sc.platform.system/src/main/java/io/sc/platform/system/user/service/impl/UserServiceImpl.java

@ -219,7 +219,7 @@ public class UserServiceImpl extends DaoServiceImpl<UserEntity, String, UserRepo
return criteriaBuilder.exists(subquery);
};
return this.query(specification, queryParameter);
return this.query(queryParameter,specification);
}
return QueryResult.emptyPage();
}
@ -237,7 +237,7 @@ public class UserServiceImpl extends DaoServiceImpl<UserEntity, String, UserRepo
return criteriaBuilder.not(criteriaBuilder.exists(subquery));
};
Specification<UserEntity> specification =buildSpecification(queryParameter);
return this.query(baseSpecification.and(specification), queryParameter);
return this.query(queryParameter,baseSpecification.and(specification));
}
return QueryResult.emptyPage();
}
@ -254,7 +254,7 @@ public class UserServiceImpl extends DaoServiceImpl<UserEntity, String, UserRepo
return criteriaBuilder.exists(subquery);
};
return this.query(specification, queryParameter);
return this.query(queryParameter,specification);
}
return QueryResult.emptyPage();
}
@ -272,7 +272,7 @@ public class UserServiceImpl extends DaoServiceImpl<UserEntity, String, UserRepo
return criteriaBuilder.not(criteriaBuilder.exists(subquery));
};
Specification<UserEntity> specification =buildSpecification(queryParameter);
return this.query(baseSpecification.and(specification), queryParameter);
return this.query(queryParameter,baseSpecification.and(specification));
}
return QueryResult.emptyPage();
}
@ -289,7 +289,7 @@ public class UserServiceImpl extends DaoServiceImpl<UserEntity, String, UserRepo
return criteriaBuilder.exists(subquery);
};
return this.query(specification, queryParameter);
return this.query(queryParameter,specification);
}
return QueryResult.emptyPage();
}
@ -307,7 +307,7 @@ public class UserServiceImpl extends DaoServiceImpl<UserEntity, String, UserRepo
return criteriaBuilder.not(criteriaBuilder.exists(subquery));
};
Specification<UserEntity> specification =buildSpecification(queryParameter);
return this.query(baseSpecification.and(specification), queryParameter);
return this.query(queryParameter,baseSpecification.and(specification));
}
return QueryResult.emptyPage();
}
@ -491,7 +491,7 @@ public class UserServiceImpl extends DaoServiceImpl<UserEntity, String, UserRepo
Join<RoleEntity, UserEntity> join = root.join("roles");
return join.get("id").in(roleIds);
};
return this.list(specification);
return this.list(specification,null);
}
return Collections.emptyList();
}
@ -503,7 +503,7 @@ public class UserServiceImpl extends DaoServiceImpl<UserEntity, String, UserRepo
Join<OrgEntity, UserEntity> join = root.join("orgs");
return join.get("id").in(orgIds);
};
return this.list(specification);
return this.list(specification,null);
}
return Collections.emptyList();
}

Loading…
Cancel
Save