From 41323bbb4fdd02bd60dfa627cf55a763079b3aba Mon Sep 17 00:00:00 2001 From: ludc Date: 星期四, 21 九月 2023 08:48:39 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/Tree.java | 27 ++ Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeApplyWebManagementService.java | 14 + Source/UBCS-WEB/src/router/page/index.js | 11 Source/UBCS-WEB/src/components/Theme/ThemeAttrCrud.vue | 65 ++-- Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/SystemClassifyRoleMapper.xml | 82 ++++++ Source/UBCS-WEB/src/api/system/user.js | 13 + Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/RevisionModelUtil.java | 105 ++++++++ Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue | 8 Source/UBCS-WEB/src/store/modules/user.js | 5 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/SystemClassifyRoleMapper.java | 10 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeApplyWebManagementServiceImpl.java | 81 ++++++ Source/UBCS-WEB/src/page/login/userlogin.vue | 218 ++++++++++++---- Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplyWebManagementController.java | 20 + Source/UBCS-WEB/src/page/login/sso.vue | 69 +++++ 14 files changed, 637 insertions(+), 91 deletions(-) diff --git a/Source/UBCS-WEB/src/api/system/user.js b/Source/UBCS-WEB/src/api/system/user.js index c539aec..ed42c7e 100644 --- a/Source/UBCS-WEB/src/api/system/user.js +++ b/Source/UBCS-WEB/src/api/system/user.js @@ -159,4 +159,17 @@ } }) } +//鍗曠偣鐧诲綍鎺ュ彛 +export const oaSsos =(userName) => { + return request({ + url: '/api/ubcs-code/passwordFree/oaSsos', + method: 'post', + params:{ + userName + }, + headers: { + 'empCode': 'ZVKcWmOH1JvFYaM7BuNVm1BWbaw6OcMi04aAT2H+X3Y=' + }, + }) +} diff --git a/Source/UBCS-WEB/src/components/Theme/ThemeAttrCrud.vue b/Source/UBCS-WEB/src/components/Theme/ThemeAttrCrud.vue index fcec976..8b5bc4c 100644 --- a/Source/UBCS-WEB/src/components/Theme/ThemeAttrCrud.vue +++ b/Source/UBCS-WEB/src/components/Theme/ThemeAttrCrud.vue @@ -23,7 +23,8 @@ </el-button-group> <el-button-group> <!-- 淇濆瓨--> - <el-button v-if="(!checkStatus|| crudLCStatus=='Editing') && editOpenFlag" icon="el-icon-check" plain size="small" + <el-button v-if="(!checkStatus|| crudLCStatus=='Editing') && editOpenFlag" icon="el-icon-check" plain + size="small" type="success" @click.prevent="addsHandler">淇濆瓨 </el-button> <!-- 棰勮鎺掑簭--> @@ -67,11 +68,14 @@ </el-button-group> <!-- 鏄惁寮�鍚紪杈� --> <el-button-group> - <el-button v-if="(!checkStatus|| crudLCStatus=='Editing') && !editOpenFlag && attrEditVisible == false && attrFlagChiledren==false" icon="el-icon-view" plain - size="small" - @click="editOpen">寮�鍚紪杈� + <el-button + v-if="(!checkStatus|| crudLCStatus=='Editing') && !editOpenFlag && attrEditVisible == false && attrFlagChiledren==false" + icon="el-icon-view" plain + size="small" + @click="editOpen">寮�鍚紪杈� </el-button> - <el-select v-if="(!checkStatus || crudLCStatus=='Editing') && editOpenFlag" v-model="selectvalue" placeholder="璇烽�夋嫨" + <el-select v-if="(!checkStatus || crudLCStatus=='Editing') && editOpenFlag" v-model="selectvalue" + placeholder="璇烽�夋嫨" size="small"> <el-option v-for="item in selectoptions" @@ -325,17 +329,20 @@ align="center" > <template slot-scope="{ row }"> - <el-input v-if="editingRows === row && editShows== item.prop && item.prop != 'codeDateFormat' && (item.edit == 'text' ||item.edit == 'refer' )" - :ref="'input' + row.oid" - v-show="!AddCellFlag" - v-model="row[item.prop]" - @blur="saveRows(row)" - ></el-input> - <el-input-number v-if="editingRows === row && editShows== item.prop && item.edit == 'number'" v-model="row[item.prop]" + <el-input + v-if="editingRows === row && editShows== item.prop && item.prop != 'codeDateFormat' && (item.edit == 'text' ||item.edit == 'refer' )" + v-show="!AddCellFlag" + :ref="'input' + row.oid" + v-model="row[item.prop]" + @blur="saveRows(row)" + ></el-input> + <el-input-number v-if="editingRows === row && editShows== item.prop && item.edit == 'number'" + v-model="row[item.prop]" :style="{width:(item.width-10)+'px'}" controls-position="right" size="small" @blur="saveRows"></el-input-number> - <el-select v-if="editingRows === row && editShows== item.prop && item.edit == 'select' " slot="prepend" v-model="row[item.prop]" allow-create default-first-option + <el-select v-if="editingRows === row && editShows== item.prop && item.edit == 'select' " slot="prepend" + v-model="row[item.prop]" allow-create default-first-option filterable @blur="selectChangeHandler(item.editConfig,index)"> <el-option @@ -455,16 +462,6 @@ } } }, - // editingRows:{ - // handler(newval,oldval){ - // if(newval){ - // const inputElement = document.querySelector(`#inputRef${newval.oid}`); - // if (inputElement) { - // inputElement.focus(); - // }; - // } - // } - // }, ProData: { handler(newval, oldval) { if (newval) { @@ -495,7 +492,7 @@ data() { return { // 淇濆瓨鍗曞厓鏍肩姸鎬� - AddCellFlag:false, + AddCellFlag: false, //鍏ㄥ睆缂栬緫楂樺害鐘舵�� editStyleFlag: false, loading: false, @@ -1091,12 +1088,12 @@ { label: "灞炴�ц嫳鏂囧悕绉�", prop: "id", - width:100, + width: 100, }, { label: "灞炴�т腑鏂囧悕绉�", prop: "name", - width:100, + width: 100, }, { label: "闀垮害", @@ -1802,7 +1799,7 @@ this.editOpenFlag = false; // 璋冪敤鐖剁粍浠朵慨鏀规寜閽姸鎬� this.$emit('editCloseChildren') - this.AddCellFlag=true; + this.AddCellFlag = true; }).catch(() => { this.$message.warning('淇濆瓨澶辫触锛岃鏌ョ湅鎺у埗鍙拌緭鍑猴紒') }); @@ -2024,7 +2021,13 @@ }, //鍒嗙被娉ㄥ叆淇濆瓨 injectAddHandle() { - const { classifyInvokeAttr, classifyInvokeAttrName, classifyInvokeLevel, classifyInvokeEditFlag, classifyNumber } = this.injectOption; + const { + classifyInvokeAttr, + classifyInvokeAttrName, + classifyInvokeLevel, + classifyInvokeEditFlag, + classifyNumber + } = this.injectOption; const data = { "娉ㄥ叆绫诲瀷": classifyInvokeAttr, @@ -2112,7 +2115,7 @@ this.editStyleFlag = true; this.attrEditVisible = true; this.attrFlag = true; - this.AddCellFlag=true; + this.AddCellFlag = true; } }, @@ -2126,7 +2129,7 @@ updataFormlaContent(val) { if (this.CurrentCell) { this.$set(this.CurrentCell, 'componentRule', val.replace(/"/g, '')) - this.componentRuleText= this.CurrentCell.componentRule + this.componentRuleText = this.CurrentCell.componentRule } else { this.$set(this.attrRow, 'componentRule', val.replace(/"/g, '')) } @@ -2148,7 +2151,7 @@ //寮�鍚紪杈� editOpen() { this.editOpenFlag = true; - this.AddCellFlag=false; + this.AddCellFlag = false; }, //瀹氫箟涓�涓叧闂紪杈戠殑鏂规硶渚涘瓙缁勪欢浣跨敤 editClose() { diff --git a/Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue b/Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue index 222c3c0..c088933 100644 --- a/Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue +++ b/Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue @@ -286,8 +286,12 @@ text.push(itemText); } }) - - let mapFields =Object.assign(this.referConfig.fieldMap,JSON.parse(this.options.mapFields)) ; + let mapFields; + if (this.options.mapFields == "") { + mapFields = this.referConfig.fieldMap; + } else { + mapFields = Object.assign(this.referConfig.fieldMap, JSON.parse(this.options.mapFields)); + } this.value=value.join(','); this.text=text.join(',') this.$emit("setValue", {field:this.referConfig.field,showField:this.referConfig.showField,value:this.value,text:this.text,rawData:this.selectionList,fieldMap:mapFields}); diff --git a/Source/UBCS-WEB/src/page/login/sso.vue b/Source/UBCS-WEB/src/page/login/sso.vue new file mode 100644 index 0000000..5521ac4 --- /dev/null +++ b/Source/UBCS-WEB/src/page/login/sso.vue @@ -0,0 +1,69 @@ +<template> + <p>娴嬭瘯</p> +</template> + +<script> +import {oaSsos} from "@/api/system/user.js" +import {mapGetters} from "vuex"; +import {setStore} from "@/util/store"; + +export default { + name: "sso", + data() { + return { + loginForm:{ + //绉熸埛ID + tenantId: "", + //閮ㄩ棬ID + deptId: "", + //瑙掕壊ID + roleId: "", + //鐢ㄦ埛鍚� + username: "", + //瀵嗙爜 + password: "", + selectInput: '', + //涓嬫媺input鏁版嵁 + value: '绠$悊缁�', + //涓嬫媺鑿滃崟 + region: [], + //璐﹀彿绫诲瀷 + type: "account", + //楠岃瘉鐮佺殑绱㈠紩 + key: "", + //棰勫姞杞界櫧鑹茶儗鏅� + image: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7", + + }, + } + }, + computed: { + ...mapGetters(["tagWel", "userInfo"]) + }, + created() { + + }, + methods: { + // Onload() { + // let name = 'pwdfree' + // oaSsos(name).then(res=>{ + // console.log(res) + // if(res.status === 200){ + // // this.loginForm.tenantId=res.data.tenant_id; + // // this.loginForm.username=res.data.user_name; + // this.$store.dispatch("LoginBySso").then((res) => { + // console.log('res',res) + // this.$router.push({path: this.tagWel.value}); + // }) + // // console.log(this.tagWel) + // // this.$router.push({path: this.tagWel.value}); + // } + // }) + // } + } +} +</script> + +<style scoped> + +</style> diff --git a/Source/UBCS-WEB/src/page/login/userlogin.vue b/Source/UBCS-WEB/src/page/login/userlogin.vue index a8877c8..15c1296 100644 --- a/Source/UBCS-WEB/src/page/login/userlogin.vue +++ b/Source/UBCS-WEB/src/page/login/userlogin.vue @@ -49,15 +49,16 @@ </el-form-item> <!--瀵嗙爜淇敼寮瑰嚭妗�--> </el-form> - <el-dialog title="淇敼瀵嗙爜" :visible.sync="dialogFormVisible" append-to-body @closed="closehandle" :close-on-press-escape="false" > - <el-form :model="form" :rules="rules"> - <el-form-item label="鍘熷瘑鐮�" :label-width="formLabelWidth" prop="oldPassword"> + <el-dialog :close-on-press-escape="false" :visible.sync="dialogFormVisible" append-to-body title="淇敼瀵嗙爜" + @closed="closehandle"> + <el-form :model="form" :rules="rules"> + <el-form-item :label-width="formLabelWidth" label="鍘熷瘑鐮�" prop="oldPassword"> <el-input v-model="form.oldPassword" autocomplete="off"></el-input> </el-form-item> - <el-form-item label="鏂板瘑鐮�" :label-width="formLabelWidth" prop="newPassword"> + <el-form-item :label-width="formLabelWidth" label="鏂板瘑鐮�" prop="newPassword"> <el-input v-model="form.newPassword" autocomplete="off"></el-input> </el-form-item> - <el-form-item label="纭瀵嗙爜" :label-width="formLabelWidth" prop="newPassword1"> + <el-form-item :label-width="formLabelWidth" label="纭瀵嗙爜" prop="newPassword1"> <el-input v-model="form.newPassword1" autocomplete="off"></el-input> </el-form-item> </el-form> @@ -74,38 +75,39 @@ import {mapGetters} from "vuex"; import {info} from "@/api/system/tenant"; import {getTopUrl} from "@/util/util"; -import {updatePassword} from "@/api/system/user.js" +import {oaSsos, updatePassword} from "@/api/system/user.js" import {removeToken} from "@/util/auth"; import md5 from "js-md5"; + export default { name: "userlogin", data() { return { tenantMode: this.website.tenantMode, ButtonList: [], - dialogFormVisible:false, + dialogFormVisible: false, form: { oldPassword: '', newPassword: '', newPassword1: '', }, - loginRules:{ - username:[ - { required: true, message: '璇疯緭鍏ヨ处鍙�', trigger: 'blur' } + loginRules: { + username: [ + {required: true, message: '璇疯緭鍏ヨ处鍙�', trigger: 'blur'} ], password: [ - { required: true, message: '璇疯緭鍏ュ瘑鐮�', trigger: 'blur' } + {required: true, message: '璇疯緭鍏ュ瘑鐮�', trigger: 'blur'} ], }, rules: { oldPassword: [ - { required: true, message: '璇疯緭鍏ュ師瀵嗙爜', trigger: 'blur' } + {required: true, message: '璇疯緭鍏ュ師瀵嗙爜', trigger: 'blur'} ], - newPassword:[ - { required: true, message: '璇疯緭鍏ユ柊瀵嗙爜', trigger: 'blur' } + newPassword: [ + {required: true, message: '璇疯緭鍏ユ柊瀵嗙爜', trigger: 'blur'} ], - newPassword1:[ - { required: true, message: '璇疯緭纭瀵嗙爜', trigger: 'blur' } + newPassword1: [ + {required: true, message: '璇疯緭纭瀵嗙爜', trigger: 'blur'} ] }, loginForm: { @@ -156,11 +158,115 @@ created() { this.getTenant(); //杩欓噷鏄祻瑙堝櫒鐨勪竴涓猙ug锛岀獊鐒跺嚭鐜扮殑鐩墠鎵句笉鍒板師鍥狅紝鏂扮殑娴忚鍣ㄦ墦寮�姝ら」鐩�俵ocalStorage浼氬皯瀛樺偍涓�涓悕涓簊aber-permission鐨勬暟鎹紝灏戜簡杩欐潯鏁版嵁绉熸埛绠$悊鐣岄潰浼氱己灏戝嚑涓寜閽拰鏍峰紡 - //杩樻湁涓�绉嶆儏鍐碉紝褰撴垜浠墜鍔ㄥ垹闄よ繖鏉℃暟鎹垨鑰呮竻绌簂ocalStorage鍚庯紝鍐嶅埛鏂拌繘鍏ラ〉闈㈠畠涔熶笉瀛樺偍杩欎釜鍙橀噺锛屾墍浠ユ垜灏卞湪杩欏啓姝讳簡瀛樺偍锛岀洰鍓嶆晥鏋滄病鏈夐棶棰� - localStorage.setItem("saber-permission",JSON.stringify({"dataType":"object","content":{"flow_model_create":true,"flow_model_update":true,"flow_model_deploy":true,"flow_model_download":true,"flow_model_delete":true,"work_start_flow":true,"work_start_image":true,"oss_add":true,"oss_edit":true,"oss_delete":true,"oss_view":true,"oss_enable":true,"role_add":true,"role_edit":true,"role_delete":true,"role_view":true,"notice_add":true,"notice_edit":true,"notice_delete":true,"notice_view":true,"user_add":true,"user_edit":true,"user_delete":true,"user_role":true,"user_reset":true,"user_view":true,"log_usual_view":true,"code_add":true,"code_edit":true,"code_delete":true,"code_view":true,"region_add":true,"region_delete":true,"region_import":true,"region_export":true,"region_debug":true,"work_claim_sign":true,"work_claim_detail":true,"work_claim_follow":true,"work_todo_handle":true,"work_todo_detail":true,"work_todo_follow":true,"data_scope_setting":true,"datasource_add":true,"datasource_edit":true,"datasource_delete":true,"datasource_view":true,"attach_upload":true,"attach_download":true,"attach_delete":true,"dept_add":true,"dept_edit":true,"dept_delete":true,"dept_view":true,"log_api_view":true,"flow_manager_state":true,"flow_manager_image":true,"flow_manager_remove":true,"work_send_detail":true,"work_send_follow":true,"sms_add":true,"sms_edit":true,"sms_delete":true,"sms_view":true,"sms_enable":true,"api_scope_setting":true,"log_error_view":true,"post_add":true,"post_edit":true,"post_delete":true,"post_view":true,"flow_follow_delete":true,"work_done_detail":true,"work_done_follow":true,"dict_add":true,"dict_edit":true,"dict_delete":true,"dict_view":true,"dictbiz_add":true,"dictbiz_edit":true,"dictbiz_delete":true,"dictbiz_view":true,"menu_add":true,"menu_edit":true,"menu_delete":true,"menu_view":true,"topmenu_add":true,"topmenu_edit":true,"topmenu_delete":true,"topmenu_view":true,"topmenu_setting":true,"param_add":true,"param_edit":true,"param_delete":true,"param_view":true,"tenant_add":true,"tenant_edit":true,"tenant_delete":true,"tenant_view":true,"client_add":true,"client_edit":true,"client_delete":true,"client_view":true},"datetime":1678352291697})) + localStorage.setItem("saber-permission", JSON.stringify({ + "dataType": "object", "content": { + "flow_model_create": true, + "flow_model_update": true, + "flow_model_deploy": true, + "flow_model_download": true, + "flow_model_delete": true, + "work_start_flow": true, + "work_start_image": true, + "oss_add": true, + "oss_edit": true, + "oss_delete": true, + "oss_view": true, + "oss_enable": true, + "role_add": true, + "role_edit": true, + "role_delete": true, + "role_view": true, + "notice_add": true, + "notice_edit": true, + "notice_delete": true, + "notice_view": true, + "user_add": true, + "user_edit": true, + "user_delete": true, + "user_role": true, + "user_reset": true, + "user_view": true, + "log_usual_view": true, + "code_add": true, + "code_edit": true, + "code_delete": true, + "code_view": true, + "region_add": true, + "region_delete": true, + "region_import": true, + "region_export": true, + "region_debug": true, + "work_claim_sign": true, + "work_claim_detail": true, + "work_claim_follow": true, + "work_todo_handle": true, + "work_todo_detail": true, + "work_todo_follow": true, + "data_scope_setting": true, + "datasource_add": true, + "datasource_edit": true, + "datasource_delete": true, + "datasource_view": true, + "attach_upload": true, + "attach_download": true, + "attach_delete": true, + "dept_add": true, + "dept_edit": true, + "dept_delete": true, + "dept_view": true, + "log_api_view": true, + "flow_manager_state": true, + "flow_manager_image": true, + "flow_manager_remove": true, + "work_send_detail": true, + "work_send_follow": true, + "sms_add": true, + "sms_edit": true, + "sms_delete": true, + "sms_view": true, + "sms_enable": true, + "api_scope_setting": true, + "log_error_view": true, + "post_add": true, + "post_edit": true, + "post_delete": true, + "post_view": true, + "flow_follow_delete": true, + "work_done_detail": true, + "work_done_follow": true, + "dict_add": true, + "dict_edit": true, + "dict_delete": true, + "dict_view": true, + "dictbiz_add": true, + "dictbiz_edit": true, + "dictbiz_delete": true, + "dictbiz_view": true, + "menu_add": true, + "menu_edit": true, + "menu_delete": true, + "menu_view": true, + "topmenu_add": true, + "topmenu_edit": true, + "topmenu_delete": true, + "topmenu_view": true, + "topmenu_setting": true, + "param_add": true, + "param_edit": true, + "param_delete": true, + "param_view": true, + "tenant_add": true, + "tenant_edit": true, + "tenant_delete": true, + "tenant_view": true, + "client_add": true, + "client_edit": true, + "client_delete": true, + "client_view": true + }, "datetime": 1678352291697 + })) }, mounted() { - //鍦╩ounted鑾峰彇棣栭〉涓嬫媺鑿滃崟鏁版嵁 this.$axios.get('/api/ubcs-system/tenant/tenant-map').then(res => { if (res.data.code == 200) { this.loginForm.tenantId = res.data.data[0].TENANT_ID; @@ -193,26 +299,29 @@ }, props: [], methods: { - ChandleLogin(){ - + ChandleLogin() { + this.$store.dispatch("LoginBySso").then((res) => { + console.log('res', res) + this.$router.push({path: this.tagWel.value}); + }) }, - closehandle(){ + closehandle() { removeToken() }, - delok(){ + delok() { //鐐瑰嚮鍙栨秷鎴栬�厁 娓呴櫎token鍏抽棴寮圭獥 娓呴櫎token鍚庝細鑷姩閲嶆柊鑾峰彇鐢ㄦ埛淇℃伅 杩欓噷娌℃湁閲嶆柊璋冪敤鏂规硶锛屽洜涓轰笅闈㈤�昏緫鏈夌偣缁曪紝鎬曢噸鏂版帀鏈塨ug鐩存帴娓呴櫎token閲嶆柊鑾峰彇鐢ㄦ埛淇℃伅 this.dialogFormVisible = false; removeToken() }, // 鐐瑰嚮纭畾淇敼瀵嗙爜 - addHandler(){ + addHandler() { this.dialogFormVisible = false - updatePassword(md5(this.form.oldPassword), this.form.newPassword, this.form.newPassword1).then(res=>{ + updatePassword(md5(this.form.oldPassword), this.form.newPassword, this.form.newPassword1).then(res => { console.log(res) - if(res.data.code==200){ + if (res.data.code == 200) { this.$message({ - type:"success", - message:"淇敼鎴愬姛锛�" + type: "success", + message: "淇敼鎴愬姛锛�" }) this.$router.push({path: this.tagWel.value}) } @@ -239,8 +348,9 @@ }, handleLogin: function () { + debugger this.userInfo = this.$store.state.upadatastatus - localStorage.setItem('username',this.loginForm.username) + localStorage.setItem('username', this.loginForm.username) this.$refs.loginForm.validate(valid => { if (valid) { const loading = this.$loading({ @@ -251,37 +361,37 @@ this.$store.dispatch("LoginByUsername", this.loginForm).then(() => { //涓婇潰鍙堝姞浜嗕竴灞傚垽鏂殑鎰忔�濇槸濡傛灉鏄秴绠′笉杩涜鍒ゆ柇 鏆傛椂鍔犱笂杩欎釜鍒ゆ柇鐨勮瘽锛岀櫥褰曚細鏈塨ug锛岀偣鍑荤櫥褰曞埛鏂板悗鎵嶈繘鍏ワ紝鍏堢畝鍗曞湪涓嬮潰鍒ゆ柇鏄惁涓虹┖锛屽彧鏈夎秴绠$殑strategyUpdateStatus涓虹┖ // if(this.userInfo.user_id != '0' && this.userInfo.tenant_id !== '000000'){ - //鍒ゆ柇濡傛灉涓嶇瓑浜�0灏辨槸绛栫暐瀵嗙爜娌℃湁淇敼璧颁笅闈㈤�昏緫 - if (this.userInfo.strategyUpdateStatus == 0 || this.userInfo.strategyUpdateStatus==null) { - if (this.website.switchMode) { - const deptId = this.userInfo.dept_id; - const roleId = this.userInfo.role_id; - if (deptId.includes(",") || roleId.includes(",")) { - this.loginForm.deptId = deptId; - this.loginForm.roleId = roleId; - this.userBox = true; - this.$store.dispatch("LogOut").then(() => { - loading.close(); - }); - } + //鍒ゆ柇濡傛灉涓嶇瓑浜�0灏辨槸绛栫暐瀵嗙爜娌℃湁淇敼璧颁笅闈㈤�昏緫 + if (this.userInfo.strategyUpdateStatus == 0 || this.userInfo.strategyUpdateStatus == null) { + if (this.website.switchMode) { + const deptId = this.userInfo.dept_id; + const roleId = this.userInfo.role_id; + if (deptId.includes(",") || roleId.includes(",")) { + this.loginForm.deptId = deptId; + this.loginForm.roleId = roleId; + this.userBox = true; + this.$store.dispatch("LogOut").then(() => { + loading.close(); + }); } - this.$router.push({path: this.tagWel.value}); - } else { - //绛変簬0璇存槑瀵嗙爜绛栫暐琚慨鏀癸紝鎻愮ず鐢ㄦ埛淇敼瀵嗙爜锛岀粰涓�涓慨鏀瑰脊妗� - this.$message({ - type: "warning", - message: "瀵嗙爜绛栫暐宸茶淇敼锛岃閲嶆柊淇敼瀵嗙爜锛�" - }) - setTimeout(()=>{ - this.dialogFormVisible=true - },1500) } + this.$router.push({path: this.tagWel.value}); + } else { + //绛変簬0璇存槑瀵嗙爜绛栫暐琚慨鏀癸紝鎻愮ず鐢ㄦ埛淇敼瀵嗙爜锛岀粰涓�涓慨鏀瑰脊妗� + this.$message({ + type: "warning", + message: "瀵嗙爜绛栫暐宸茶淇敼锛岃閲嶆柊淇敼瀵嗙爜锛�" + }) + setTimeout(() => { + this.dialogFormVisible = true + }, 1500) + } // } //鎶婂垽鏂瘑鐮佺瓥鐣ヤ慨鏀圭殑鍊煎瓨杩涙湰鍦帮紝鐒跺悗鍐嶈矾鐢辨潈闄恓s鏂囦欢閲岄潰鑾峰彇鍐嶅仛鍒ゆ柇锛屼笉鐒跺埛鏂颁細杩涘叆棣栭〉锛堝洜涓哄湪鏈塱d鍜宼oken鐨勬儏鍐典笅锛屽埛鏂伴〉闈㈡垨鑰呰繘鍏ョ櫥褰曢〉浼氳嚜鍔ㄨ繘鍏ラ椤碉級 //index椤甸潰涔熷彲浠ョ敤鍒拌繖涓�兼潵鍒ゆ柇鏄惁鏄秴绠¤韩浠界櫥褰曟潵鍒ゆ柇鏄惁鎻愰啋杩囨湡鏃堕棿绛� - localStorage.setItem("updataid",JSON.stringify(this.userInfo)) - localStorage.setItem("userId",this.userInfo.user_id) + localStorage.setItem("updataid", JSON.stringify(this.userInfo)) + localStorage.setItem("userId", this.userInfo.user_id) loading.close(); }).catch(() => { loading.close(); diff --git a/Source/UBCS-WEB/src/router/page/index.js b/Source/UBCS-WEB/src/router/page/index.js index 1136402..b795a56 100644 --- a/Source/UBCS-WEB/src/router/page/index.js +++ b/Source/UBCS-WEB/src/router/page/index.js @@ -12,6 +12,17 @@ } }, { + path: '/sso', + name: '鍗曠偣娴嬭瘯椤�', + component: () => + import( /* webpackChunkName: "page" */ '@/page/login/sso'), + meta: { + keepAlive: true, + isTab: false, + isAuth: false + } + }, + { path: '/lock', name: '閿佸睆椤�', component: () => diff --git a/Source/UBCS-WEB/src/store/modules/user.js b/Source/UBCS-WEB/src/store/modules/user.js index eb2859a..8227677 100644 --- a/Source/UBCS-WEB/src/store/modules/user.js +++ b/Source/UBCS-WEB/src/store/modules/user.js @@ -5,6 +5,7 @@ import {deepClone} from '@/util/util' import website from '@/config/website' import {loginByUsername, loginBySocial, loginBySso, getUserInfo, logout, refreshToken, getButtons} from '@/api/user' +import {oaSsos} from "@/api/system/user.js" import {getTopMenu, getRoutes} from '@/api/system/menu' import md5 from 'js-md5' @@ -109,9 +110,9 @@ }) }, //鏍规嵁鍗曠偣淇℃伅鐧诲綍 - LoginBySso({commit}, userInfo) { + LoginBySso({commit}) { return new Promise((resolve) => { - loginBySso(userInfo.state,).then(res => { + oaSsos().then(res => { const data = res.data; if (data.error_description) { Message({ diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/RevisionModelUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/RevisionModelUtil.java index a982c88..4eaffc8 100644 --- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/RevisionModelUtil.java +++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/service/RevisionModelUtil.java @@ -9,6 +9,7 @@ import com.vci.ubcs.starter.web.util.VciBaseUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springblade.core.tool.utils.StringUtil; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; @@ -107,4 +108,108 @@ } } + public <T, R> List<Tree> doListSystemClassTrees(List<T> doList, TreeWrapperOptions wrapperOptions, Function<T, R> f) { + if (CollectionUtils.isEmpty(doList)) { + return new ArrayList(); + } else { + List<Tree> allTree = new ArrayList(); + List<Tree> children = new ArrayList(); + Iterator var6 = doList.iterator(); + + while(true) { + while(var6.hasNext()) { + T doObject = (T) var6.next(); + Tree tree = new Tree(); + List<String> oidFieldNames = VciBaseUtil.str2List(wrapperOptions.getOidFieldName()); + List<String> oidValues = new LinkedList(); + oidFieldNames.stream().forEach((s) -> { + oidValues.add(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField("oid", doObject))); + }); + tree.setOid((String)oidValues.stream().collect(Collectors.joining(wrapperOptions.getOidValueSep()))); + tree.setName((String) VciBaseUtil.getValueFromField("name", doObject)); + if (f != null) { + tree.setText((String)f.apply(doObject)); + } else { + List<String> textFieldNames = VciBaseUtil.str2List(wrapperOptions.getTextFieldName()); + List<String> textValues = new LinkedList(); + textFieldNames.stream().forEach((s) -> { + textValues.add(VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField(s, doObject))); + }); + tree.setText((String)textValues.stream().collect(Collectors.joining(wrapperOptions.getTextValueSep()))); + } + + if (StringUtils.isNotBlank(wrapperOptions.getParentFieldName())) { + String stringValueFromObject = VciBaseUtil.getStringValueFromObject(VciBaseUtil.getValueFromField(wrapperOptions.getParentFieldName(), doObject)); + tree.setParentId(stringValueFromObject); + } + + if (wrapperOptions.isAllAttributes()) { + try { + tree.setAttributes(VciBaseUtil.objectToMapString(doObject)); + } catch (Exception var13) { + if (this.logger.isErrorEnabled()) { + this.logger.error("鎶婂璞¤浆鎹负map鏃跺嚭鐜颁簡閿欒锛屼絾鏄笉褰卞搷鏍戠殑灞曠ず锛屽涓氬姟鍙兘鏈夊奖鍝�"); + } + } + } + + if (wrapperOptions.isMultipleSelect() || wrapperOptions.isShowCheckBox()) { + tree.setShowCheckbox(true); + } + + if (wrapperOptions.getParentOid() == null) { + wrapperOptions.setParentOid(""); + } + + if (!StringUtils.isBlank(tree.getParentId()) && (!StringUtils.isNotBlank(wrapperOptions.getParentOid()) || !wrapperOptions.getParentOid().equalsIgnoreCase(tree.getParentId()))) { + children.add(tree); + } else { + allTree.add(tree); + } + } + + (new Tree()).findSystemClassChild(allTree, children); + if (allTree.size() <= 0) { + allTree.addAll(children); + } + + return allTree; + } + } + } +// +// public void findSystemClassChild(List<Tree> treenode, List<Tree> children) { +// Tree node; +// for(Iterator var3 = treenode.iterator(); var3.hasNext(); { +// if (var3 == null) { +// var3.next(); +// } else { +// ((Tree) var3.next()).getChildren().add(node); +// } +// }) { +// node = (Tree)var3.next(); +// Iterator var5 = children.iterator(); +// +// while(var5.hasNext()) { +// Tree childnode = (Tree)var5.next(); +// if (node.getAttributes().get("classifyOid").equalsIgnoreCase(childnode.getParentId())) { +// childnode.setParentName(node.getText()); +// if (StringUtil.isBlank(childnode.getParentBtmName())) { +// childnode.setParentBtmName((String)node.getAttributes().getOrDefault("btmname", "")); +// } +// +// node.getChildren().add(childnode); +// } +// } +// +// if (node.getChildren().size() > 0) { +// this.findSystemClassChild(node.getChildren(), children); +// node.setLeaf(false); +// } else { +// node.setLeaf(true); +// } +// } +// +// } + } diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/Tree.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/Tree.java index 61d8b70..4b8fb68 100644 --- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/Tree.java +++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/pagemodel/Tree.java @@ -207,6 +207,33 @@ } + public void findSystemClassChild(List<Tree> treenode, List<Tree> children) { + Tree node; + for(Iterator var3 = treenode.iterator(); var3.hasNext(); this.getChildren().add(node)) { + node = (Tree)var3.next(); + Iterator var5 = children.iterator(); + + while(var5.hasNext()) { + Tree childnode = (Tree)var5.next(); + if (node.getAttributes().get("classifyOid").equalsIgnoreCase(childnode.getParentId())) { + childnode.setParentName(node.getText()); + if (StringUtil.isBlank(childnode.getParentBtmName())) { + childnode.setParentBtmName((String)node.getAttributes().getOrDefault("btmname", "")); + } + + node.getChildren().add(childnode); + } + } + + if (node.getChildren().size() > 0) { + this.findSystemClassChild(node.getChildren(), children); + node.setLeaf(false); + } else { + node.setLeaf(true); + } + } + + } @Override public String toString() { return "Tree{oid='" + this.oid + '\'' + ", text='" + this.text + '\'' + ", leaf=" + this.leaf + ", showCheckbox=" + this.showCheckbox + ", checked=" + this.checked + ", children=" + this.children + ", icon='" + this.icon + '\'' + ", iconCls='" + this.iconCls + '\'' + ", parentId='" + this.parentId + '\'' + ", parentName='" + this.parentName + '\'' + ", parentBtmName='" + this.parentBtmName + '\'' + ", expanded=" + this.expanded + ", href='" + this.href + '\'' + ", index='" + this.index + '\'' + ", attributes=" + this.attributes + '}'; diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplyWebManagementController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplyWebManagementController.java index 805c7de..046eac1 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplyWebManagementController.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeApplyWebManagementController.java @@ -1,11 +1,16 @@ package com.vci.ubcs.code.controller; +import com.vci.ubcs.code.dto.CodeClassifyTemplateAttrDTO; +import com.vci.ubcs.code.entity.SystemClassifyRole; +import com.vci.ubcs.code.service.ICodeApplyWebManagementService; import com.vci.ubcs.code.service.ICodeClassifyService; +import com.vci.ubcs.starter.web.pagemodel.Tree; import lombok.AllArgsConstructor; import org.springblade.core.tool.api.R; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * 涓婚搴撳畾涔夎〃 鎺у埗鍣� @@ -21,6 +26,8 @@ * 鍒嗙被鏈嶅姟瀵硅薄 */ private final ICodeClassifyService codeClassifyService; + + private final ICodeApplyWebManagementService codeApplyWebManagementService; /*** * 鏍规嵁鍓嶇閫夋嫨鐨勫垎绫绘潈闄愭巿鏉冩巿鏉� @@ -45,5 +52,14 @@ return R.success("鏌ヨ鎴愬姛"); } + @PostMapping( "/batchAddSave") + public R batchAddSave(@RequestBody List<SystemClassifyRole> list,String systemOid,String systemId){ + return codeApplyWebManagementService.batchAddSave(list,systemOid,systemId); + } + + @GetMapping("/getSystemClassifyRoleTree") + public List<Tree> getSystemClassifyRoleTree(String systemOid,String systemId){ + return codeApplyWebManagementService.getSystemClassifyRoleTree(systemOid,systemId); + } } diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/SystemClassifyRoleMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/SystemClassifyRoleMapper.java new file mode 100644 index 0000000..6bd0191 --- /dev/null +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/SystemClassifyRoleMapper.java @@ -0,0 +1,10 @@ +package com.vci.ubcs.code.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.vci.ubcs.code.entity.SystemClassifyRole; + +import java.util.List; + +public interface SystemClassifyRoleMapper extends BaseMapper<SystemClassifyRole> { + public List<SystemClassifyRole> getListSystemClassifyRole(String systemOid, String systemId); +} diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeApplyWebManagementService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeApplyWebManagementService.java new file mode 100644 index 0000000..3ea2f51 --- /dev/null +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeApplyWebManagementService.java @@ -0,0 +1,14 @@ +package com.vci.ubcs.code.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.vci.ubcs.code.entity.SystemClassifyRole; +import com.vci.ubcs.starter.web.pagemodel.Tree; +import org.springblade.core.tool.api.R; + +import java.util.List; + +public interface ICodeApplyWebManagementService extends IService<SystemClassifyRole> { + R batchAddSave(List<SystemClassifyRole> list,String systemOid,String systemId); + + List<Tree> getSystemClassifyRoleTree(String systemOid, String systemId); +} diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeApplyWebManagementServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeApplyWebManagementServiceImpl.java new file mode 100644 index 0000000..fd899e0 --- /dev/null +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeApplyWebManagementServiceImpl.java @@ -0,0 +1,81 @@ +package com.vci.ubcs.code.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.vci.ubcs.code.entity.SystemClassifyRole; +import com.vci.ubcs.code.enumpack.FrameworkDataLCStatus; +import com.vci.ubcs.code.mapper.SystemClassifyRoleMapper; +import com.vci.ubcs.code.service.ICodeApplyWebManagementService; +import com.vci.ubcs.code.vo.pagemodel.CodeClassifyVO; +import com.vci.ubcs.starter.revision.model.TreeWrapperOptions; +import com.vci.ubcs.starter.revision.service.RevisionModelUtil; +import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil; +import com.vci.ubcs.starter.web.pagemodel.Tree; +import jodd.util.StringUtil; +import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tool.api.R; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.Iterator; +import java.util.List; + +@Service +public class CodeApplyWebManagementServiceImpl extends ServiceImpl<SystemClassifyRoleMapper, SystemClassifyRole> implements ICodeApplyWebManagementService { + + /** + * 涓婄骇鑺傜偣鐨勫睘鎬у悕绉� + */ + public static final String PARENT_FIELD_NAME = "classParentOid"; + + /** + * 瀵硅薄鐨勬搷浣� + */ + @Resource + private RevisionModelUtil revisionModelUtil; + + + @Override + public R batchAddSave(List<SystemClassifyRole> roleList,String systemOid,String systemId) { + if(roleList.size() == 0){ + return R.fail("浼犲叆鏁版嵁涓虹┖锛岃纭锛侊紒"); + } + //鍏堝垹闄わ紝鍐嶄繚瀛� + QueryWrapper<SystemClassifyRole> wrapper = new QueryWrapper<>(); + wrapper.eq("systemOid",systemOid); + wrapper.eq("systemId",systemId); + this.remove(wrapper); + //鏁版嵁澶勭悊 + roleList.stream().forEach(systemClassifyRole -> { + if(StringUtil.isBlank(systemClassifyRole.getOid())){ + DefaultAttrAssimtUtil.addDefaultAttrAssimt(systemClassifyRole,"systemClassifyRole"); + systemClassifyRole.setSystemId(systemId); + systemClassifyRole.setSystemOid(systemOid); + }else{ + systemClassifyRole.setCreator(String.valueOf(AuthUtil.getUser().getUserId())); + systemClassifyRole.setCreateTime(new Date()); + systemClassifyRole.setLastModifier(String.valueOf(AuthUtil.getUser().getUserId())); + systemClassifyRole.setLastModifyTime(new Date()); + systemClassifyRole.setTs(new Date()); + } + systemClassifyRole.setTenantId(AuthUtil.getTenantId()); + }); + //淇濆瓨 + this.saveBatch(roleList); + return R.success("鎿嶄綔鎴愬姛"); + } + + @Override + public List<Tree> getSystemClassifyRoleTree(String systemOid, String systemId) { + List<SystemClassifyRole> listSystemClassifyRole = baseMapper.getListSystemClassifyRole(systemOid, systemId); + TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_FIELD_NAME); + treeWrapperOptions.setOidFieldName("CLASSIFYOID"); + List<Tree> tree= revisionModelUtil.doListSystemClassTrees(listSystemClassifyRole,treeWrapperOptions,(SystemClassifyRole s) ->{ + //鍙互鍦ㄨ繖閲屽鐞嗘爲鑺傜偣鐨勬樉绀� + return s.getClassifyId() + " " + s.getName() + (FrameworkDataLCStatus.DISABLED.getValue().equalsIgnoreCase(s + .getLcStatus()) ? (" 銆愬仠鐢ㄣ�� ") : ""); + }); + return tree; + } +} diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/SystemClassifyRoleMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/SystemClassifyRoleMapper.xml new file mode 100644 index 0000000..d21813b --- /dev/null +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/SystemClassifyRoleMapper.xml @@ -0,0 +1,82 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.vci.ubcs.code.mapper.SystemClassifyRoleMapper"> + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="plSystemClassifyRoleMap" type="com.vci.ubcs.code.entity.SystemClassifyRole"> + <result column="OID" property="oid"/> + <result column="REVISIONOID" property="revisionOid"/> + <result column="NAMEOID" property="nameOid"/> + <result column="BTMNAME" property="btmname"/> + <result column="LASTR" property="lastR"/> + <result column="FIRSTR" property="firstR"/> + <result column="LASTV" property="lastV"/> + <result column="FIRSTV" property="firstV"/> + <result column="CREATOR" property="creator"/> + <result column="CREATETIME" property="createTime"/> + <result column="LASTMODIFIER" property="lastModifier"/> + <result column="LASTMODIFYTIME" property="lastModifyTime"/> + <result column="REVISIONRULE" property="revisionRule"/> + <result column="VERSIONRULE" property="versionRule"/> + <result column="REVISIONSEQ" property="revisionSeq"/> + <result column="REVISIONVALUE" property="revisionValue"/> + <result column="VERSIONSEQ" property="versionSeq"/> + <result column="VERSIONVALUE" property="versionValue"/> + <result column="LCTID" property="lctid"/> + <result column="LCSTATUS" property="lcStatus"/> + <result column="TS" property="ts"/> + <result column="ID" property="id"/> + <result column="NAME" property="name"/> + <result column="DESCRIPTION" property="description"/> + <result column="OWNER" property="owner"/> + <result column="COPYFROMVERSION" property="copyFromVersion"/> + <result column="TENANT_ID" property="tenantId"/> + <result column="SYSTEMOID" property="systemOid"/> + <result column="SYSTEMID" property="systemId"/> + <result column="CLASSIFYOID" property="classifyOid"/> + <result column="CLASSIFYID" property="classifyId"/> + <result column="SELECTED" property="selected"/> + <result column="CLASSPARENTOID" property="classParentOid"/> + </resultMap> + <select id="getListSystemClassifyRole" resultType="com.vci.ubcs.code.entity.SystemClassifyRole"> + select pc.OID, + pc.REVISIONOID, + pc.NAMEOID, + pc.BTMNAME, + pc.LASTR, + pc.FIRSTR, + pc.LASTV, + pc.FIRSTV, + pc.CREATOR, + pc.CREATETIME, + pc.LASTMODIFIER, + pc.LASTMODIFYTIME, + pc.REVISIONRULE, + pc.VERSIONRULE, + pc.REVISIONSEQ, + pc.REVISIONVALUE, + pc.VERSIONSEQ, + pc.VERSIONVALUE, + pc.LCTID, + pc.LCSTATUS, + pc.TS, + pc.ID, + p.NAME, + pc.DESCRIPTION, + pc.OWNER, + pc.COPYFROMVERSION, + pc.GROUPCODE, + pc.TENANT_ID, + pc.SYSTEMOID, + pc.SYSTEMID, + p.oid CLASSIFYOID, + p.id CLASSIFYID, + case when pc.selected is null then 'false' else pc.SELECTED end SELECTED, + p.PARENTCODECLASSIFYOID CLASSPARENTOID + from PL_CODE_CLASSIFY p , + PL_CODE_SYSTEM_CLASSIFY_ROLE pc + where p.oid = pc.CLASSIFYOID(+) + and '${systemOid}' = pc.SYSTEMOID(+) + and '${systemId}' = pc.SYSTEMID(+) + </select> + +</mapper> -- Gitblit v1.9.3