From c3cb8a6ad58160f3f4bc5a8e7670b4c62ceca920 Mon Sep 17 00:00:00 2001 From: ludc Date: 星期三, 18 十月 2023 21:32:17 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java | 35 +++-- Source/UBCS-WEB/src/api/system/statistic.js | 16 ++ Source/UBCS-WEB/src/views/wel/Statistic.vue | 256 ++++++++++++++++++++++++++++-------------- Source/UBCS-WEB/src/views/docking/info.vue | 1 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java | 12 + Source/UBCS-WEB/src/views/wel/index.vue | 2 Source/UBCS-WEB/src/views/system/user.vue | 2 7 files changed, 219 insertions(+), 105 deletions(-) diff --git a/Source/UBCS-WEB/src/api/system/statistic.js b/Source/UBCS-WEB/src/api/system/statistic.js index fc60966..b01e586 100644 --- a/Source/UBCS-WEB/src/api/system/statistic.js +++ b/Source/UBCS-WEB/src/api/system/statistic.js @@ -1,11 +1,23 @@ import request from '@/router/axios'; -export const getList = (url, params) => { +//娓叉煋 +export const getList = (params) => { return request({ - url: url, + url: '/api/ubcs-code/mdmCount/getMdmCounts', method: 'get', params: { ...params } }) } + +export const save = (userId, mdmNameList) => { + return request({ + url: '/api/ubcs-system/mdmCountConfig/save', + method: 'post', + data: { + userId, + mdmNameList + } + }) +} diff --git a/Source/UBCS-WEB/src/views/docking/info.vue b/Source/UBCS-WEB/src/views/docking/info.vue index eaf994b..02ba409 100644 --- a/Source/UBCS-WEB/src/views/docking/info.vue +++ b/Source/UBCS-WEB/src/views/docking/info.vue @@ -110,7 +110,6 @@ addBtn: false, editBtn: false, delBtn: false, - columnBtn: false, column: [ { label: '鏄惁鍚敤', prop: 'usedFlag', diff --git a/Source/UBCS-WEB/src/views/system/user.vue b/Source/UBCS-WEB/src/views/system/user.vue index 9b3f3a2..c13bff2 100644 --- a/Source/UBCS-WEB/src/views/system/user.vue +++ b/Source/UBCS-WEB/src/views/system/user.vue @@ -178,7 +178,7 @@ updatePlatform, add, grant, - resetPassword, + resetPassword, unlock, updateUserStatus } from "@/api/system/user"; diff --git a/Source/UBCS-WEB/src/views/wel/Statistic.vue b/Source/UBCS-WEB/src/views/wel/Statistic.vue index 918d584..e94e248 100644 --- a/Source/UBCS-WEB/src/views/wel/Statistic.vue +++ b/Source/UBCS-WEB/src/views/wel/Statistic.vue @@ -1,106 +1,188 @@ <template> - <div> - <avue-data-box :option="option" :animation="true"></avue-data-box> + <div class="App" v-loading="this.loading"> + <div style="display: flex; justify-content: flex-end;margin-bottom: 10px"> + <el-button icon="el-icon-more" plain size="small" type="primary" @click="MoreHandler">鏇村</el-button> + </div> + <avue-data-box ref="dataBox" :animation="true" :option="option" ></avue-data-box> + <el-dialog :visible.sync="dialogTableVisible" append-to-body class="avue-dialog avue-dialog--top" title="涓绘暟鎹厤缃�" + top="0"> + <avue-crud ref="crud" + v-model="Crud.form" + :data="Crud.data" + :option="Crud.option" + @selection-change="selectionChange"> + </avue-crud> + <div slot="footer" class="dialog-footer"> + <el-button plain type="primary" @click="SaveHandler">淇濆瓨</el-button> + </div> + </el-dialog> </div> </template> <script> -import {validatenull} from "@/util/validate"; -import {getList} from "@/api/system/statistic"; -import {flowRoute} from "@/util/flow"; - +import {getList, save} from "@/api/system/statistic"; export default { -name: "Statistic", - data(){ - return { - userId:'', - countByServer:true, - // listMyTask:[] - option: { - span:6, - data: [ - { - click: this.handleItemAClick, - title: '鐗╁搧涓绘暟鎹�', - count: 1723, - icon: 'iconfont iconicon_doc', - color: 'rgb(49, 180, 141)', - uiUrl: "/MasterData/items?id=wupin@name=鐗╁搧涓绘暟鎹�", - countUrl:'priceIndexController/countNeedConfirmPlan' - }, - { - click: this.handleItemBClick, - title: '浜哄憳涓绘暟鎹�', - count: 1225, - icon: 'iconfont iconicon_dispose', - color: 'rgb(56, 161, 242)', - uiUrl:'/MasterData/items?id=renyuan@@name=浜哄憳涓绘暟鎹�', - countUrl:'priceIndexController/countPricingPlan' - }, - { - click: this.handleItemCClick, - title: 'Part', - count: 523, - icon: 'el-icon-setting', - color: 'rgb(117, 56, 199)', - uiUrl:'/MasterData/items?id=10@@name=Part', - countUrl:'priceIndexController/countNeedFeedbackPlan' - }, - { - click: this.handleItemDClick, - title: '渚涘簲鍟嗕富鏁版嵁', - count: 0, - icon: 'iconfont iconicon_work', - color: 'rgb(255, 102, 51)', - uiUrl:'/MasterData/items?id=gongyingshang@@name=渚涘簲鍟嗕富鏁版嵁', - countUrl:'priceIndexController/countMyUnCreatePricePlan' - }, - ] - }, - } + name: "Statistic", + data() { + return { + loading:true, + Crud: { + form: '', + data: [], + option: { + calcHeight: 80, + tip: false, + searchShow: false, + addBtn: false, + columnBtn: false, + header: false, + menu: false, + border: true, + index: true, + selection: true, + column: [ + { + label: "涓绘暟鎹悕绉�", + prop: "menuName", + }, + { + label: "寰呭姙鏁版嵁", + prop: "mdmCount", + }, + { + label: "icon鍥炬爣", + prop: "icon", + overHidden: true, + }, + { + label: "璺敱鍦板潃", + prop: "menuRoute", + overHidden: true, + }, + { + label: "code", + prop: "code", + overHidden: true, + }, + ] + } + }, + userId: '', + hexColor: '', + newData: [], + SelectRow: [], + countByServer: true, + dialogTableVisible: false, + // listMyTask:[] + option: { + span: 6, + data: [] + }, + } }, created() { - this.userId=sessionStorage.userId - getList('/api/ubcs-code/mdmCount/getMdmCounts',{id:this.userId}).then(res=>{ - console.log(res) - }) + this.MasterGetList(); }, - computed(){ + mounted() { + this.FontInfo() + }, + computed() { }, methods: { - handleItemAClick() { - this.$router.push({ path: "/MasterData/items?id=wupin@name=鐗╁搧涓绘暟鎹�"} ); + FontInfo(){ + this.$nextTick(() => { + const dataFatherBox = this.$refs.dataBox.$el; + console.log(dataFatherBox); + this.$nextTick(() => { + setTimeout(() => { + //瀛椾綋 + const info = dataFatherBox.querySelectorAll('.item-info .info'); + //杈规 + const items = dataFatherBox.querySelectorAll('.item'); + // console.log('info', info); + info.forEach((info) => { + info.style.fontSize = '16px'; + }); + items.forEach((item) => { + item.style.border = '1px solid rgb(200, 200, 200, 1)'; + }); + this.loading=false; + }, 1000); // 寤惰繜1绉掓煡鎵緄nfo鍏冪礌 + }); + }); }, - handleItemBClick() { - this.$router.push({ path: '/MasterData/items?id=renyuan@@name=浜哄憳涓绘暟鎹�'} ); + selectionChange(row) { + // console.log(row) + this.SelectRow = row; }, - handleItemCClick() { - this.$router.push({ path: '/MasterData/items?id=10@@name=Part'} ); + SaveHandler() { + if (this.SelectRow.length <= 0) { + this.$message.warning('璇烽�夋嫨涓�鏉℃暟鎹紒') + return + } + let mdmNameList = []; + mdmNameList = this.SelectRow.map(item => { + return item.code + }) + console.log(mdmNameList) + save(this.userId, mdmNameList).then(res => { + console.log(res) + if (res.data.code === 200) { + this.$message.success('淇濆瓨鎴愬姛锛�') + //娓呴櫎宸叉湁鏁扮粍涓璸ush鏁版嵁 + this.option.data = []; + this.newData=[]; + + this.MasterGetList() + this.dialogTableVisible = false; + //瀛椾綋鍜岃竟妗嗛噸鏂板姞杞� + this.loading=true; + this.FontInfo() + } + }) }, - handleItemDClick() { - this.$router.push({ path: '/MasterData/items?id=gongyingshang@@name=渚涘簲鍟嗕富鏁版嵁'} ); + MoreHandler() { + this.dialogTableVisible = true; }, - // getList() { - // // debugger - // Object.values(this.option.data).map(record => { - // record.count = record.count || 0; - // if (!this.countByServer) { - // // 鏄墠绔煡璇� - // getList(record.countUrl, {}).then(res => { - // // console.log('res',res) - // if (res.data.data.success) { - // record.count = res.data.data.obj; - // } else { - // record.count = 0; - // } - // }); - // } - // return { - // ...record - // }; - // }); - // }, + // 闅忔満鑹� + randomColor() { + const r = Math.floor(Math.random() * 256); // 鐢熸垚 0 鍒� 255 涔嬮棿鐨勯殢鏈烘暟 + const g = Math.floor(Math.random() * 256); + const b = Math.floor(Math.random() * 256); + // 灏� RGB 鍊艰浆鎹负鍗佸叚杩涘埗琛ㄧず褰㈠紡 + const hexColor = "#" + r.toString(16).padStart(2, '0') + g.toString(16).padStart(2, '0') + b.toString(16).padStart(2, '0'); + return hexColor; + }, + MasterGetList() { + this.userId = localStorage.getItem('userId'); + getList({userId: this.userId}).then(res => { + res.data.data.filter(item => { + // console.log(item.icon) + if (item.isDefault === 1) { + this.hexColor = this.randomColor(); + this.option.data.push({ + click: (item) => { + this.$router.push({path: item.uiUrl}); + }, + title: item.menuName, + count: parseInt(item.mdmCount), + icon: item.icon, + code: item.code, + isDefault: item.isDefault, + color: this.hexColor, + uiUrl: item.menuRoute, + id: 'custom-title' + }); + } else if (item.isDefault === 0) { + this.newData.push(item); + this.Crud.data = this.newData; + } + }); + // console.log(this.option.data); + // console.log(this.newData); + }); + } } } </script> diff --git a/Source/UBCS-WEB/src/views/wel/index.vue b/Source/UBCS-WEB/src/views/wel/index.vue index a085ad3..bf872e5 100644 --- a/Source/UBCS-WEB/src/views/wel/index.vue +++ b/Source/UBCS-WEB/src/views/wel/index.vue @@ -86,7 +86,7 @@ todoData: [], // 浠e姙娴佺▼浠诲姟option todoOption: { - height:650, + height:500, addBtn: false, header: false, align: 'center', diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java index 4696e02..abbb1be 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java @@ -65,6 +65,7 @@ import java.io.File; import java.io.IOException; import java.text.MessageFormat; +import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; @@ -2364,6 +2365,7 @@ String dataStatus=cbo.getLcStatus(); RowDatas rowData=codeDataMap.get(code); String status=rowData.getStatus(); + String lastModifier= rowData.getEditor(); String operation=rowData.getOperation(); if (cbo.getTs().compareTo(orderDTO.getTs())==0?false:true) { // throw new VciBaseException("鏁版嵁涓嶆槸鏈�鏂扮殑锛屽彲鑳戒粬浜哄凡缁忎慨鏀癸紝璇峰埛鏂板悗鍐嶈瘯"); @@ -2394,12 +2396,20 @@ cbo.setName(orderDTO.getName()); try { cbo.setAttributeValueWithNoCheck("description", orderDTO.getDescription()); - cbo.setAttributeValue("name", orderDTO.getName()); + // cbo.setAttributeValue("name", orderDTO.getName()); // if(finalIsProcess){//鍦ㄦ祦绋嬩腑涓嶅厑璁告洿鏀� // errorMap.put(code,errorMap.getOrDefault(code, errorMap.getOrDefault(code,"")+";鏁版嵁"+code+"鍦ㄦ祦绋嬩腑锛屼笉鍏佽鏇存敼!")); // }else{ + Date date=new Date(); cbo.setLcStatus(status); cbo.setAttributeValue("lcstatus",status); + cbo.setLastModifyTime(date); + cbo.setLastModifier(lastModifier); + cbo.setLastModifyTime(date); + cbo.setAttributeValue("lastmodifier",lastModifier); + cbo.setAttributeValue("lastmodifytime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(date)); + cbo.setTs(date); + cbo.setAttributeValue("ts",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(date)); // } } catch (VciBaseException e) { e.printStackTrace(); diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java index 6b9ab8e..d6a3859 100644 --- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java +++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java @@ -54,6 +54,7 @@ import com.vci.ubcs.system.vo.DeptVO; import com.vci.ubcs.system.vo.RoleVO; import lombok.extern.slf4j.Slf4j; +import org.apache.http.auth.AuthenticationException; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; @@ -235,7 +236,9 @@ systemId = interParameterVO.getData().getSystemId(); UserVO userVo = interParameterVO.getData().getUser(); //鍏嶅瘑鐧诲綍鐢宠token锛宺equest涓坊鍔犵敤鎴蜂俊鎭� - passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(),this.getRequest()); + + //passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(),this.getRequest()); + passwordFreeLoginService.pwdFreeLoginByBoolean(systemId.toLowerCase(Locale.ROOT),this.getRequest()); AuthUtil.getUser(); List<ClassfyVO> classVOList = classfysVO.getClassify(); InterParameterVO finalInterParameterVO = interParameterVO; @@ -412,6 +415,7 @@ if(personData==null){ throw new Throwable("浼犲叆鍙傛暟涓簄ull"); } + passwordFreeLoginService.pwdFreeLoginByBoolean(systemCode.toLowerCase(Locale.ROOT),this.getRequest()); masterDataList = personData.getMasterData(); String personLibrary = personAndDeptConfig.getPersonLibrary(); if (StringUtils.isBlank(personLibrary)) { @@ -684,6 +688,8 @@ throw new Throwable("浼犲叆鍙傛暟涓簄ull"); } systemCode=orgData.getSystemCode(); + passwordFreeLoginService.pwdFreeLoginByBoolean(systemCode.toLowerCase(),this.getRequest()); + orgMasterDataList = orgData.getMasterData(); String personLibrary = personAndDeptConfig.getPersonLibrary(); if (StringUtils.isBlank(personLibrary)) { @@ -973,7 +979,8 @@ systemId = interParameterVO.getData().getSystemId(); UserVO userVo = interParameterVO.getData().getUser(); //鍏嶅瘑鐧诲綍鐢宠token锛宺equest涓坊鍔犵敤鎴蜂俊鎭� - passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(),this.getRequest()); + //passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(),this.getRequest()); + passwordFreeLoginService.pwdFreeLoginByBoolean(systemId.toLowerCase(Locale.ROOT),this.getRequest()); List<ClassfyVO> classVOList = classfysVO.getClassify(); InterParameterVO finalInterParameterVO = interParameterVO; //杩欐槸璐﹀彿淇℃伅 @@ -1146,7 +1153,8 @@ QueryData queryData=queryClassifyVO.getData(); UserVO userVo=queryData.getUser(); //鍏嶅瘑鐧诲綍鐢宠token锛宺equest涓坊鍔犵敤鎴蜂俊鎭� - passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(),this.getRequest()); + //passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(),this.getRequest()); + passwordFreeLoginService.pwdFreeLoginByBoolean(systemId.toLowerCase(),this.getRequest()); systemId=queryData.getSystemId(); QueryLibraryVO libraryVO= queryData.getLibrary(); String libId= libraryVO.getId(); @@ -1306,7 +1314,8 @@ systemId=condtionsVO.getSystemId(); UserVO userVo=condtionsVO.getUser(); //鍏嶅瘑鐧诲綍鐢宠token锛宺equest涓坊鍔犵敤鎴蜂俊鎭� - passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(),this.getRequest()); + //passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(),this.getRequest()); + passwordFreeLoginService.pwdFreeLoginByBoolean(systemId.toLowerCase(),this.getRequest()); CondtionVO condtionVO= condtionsVO.getCondtion(); SessionInfo sessionInfo = new SessionInfo(); sessionInfo.setUserId(userVo.getUserName()); @@ -1521,7 +1530,8 @@ QueryData queryData=queryClassifyVO.getData(); UserVO userVo=queryData.getUser(); //鍏嶅瘑鐧诲綍鐢宠token锛宺equest涓坊鍔犵敤鎴蜂俊鎭� - passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(),this.getRequest()); + //passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(),this.getRequest()); + passwordFreeLoginService.pwdFreeLoginByBoolean(systemId.toLowerCase(),this.getRequest()); systemId=queryData.getSystemId(); QueryLibraryVO libraryVO= queryData.getLibrary(); String libId= libraryVO.getId(); @@ -1978,7 +1988,8 @@ systemId = applyBZParamVO.getData().getSystemId(); UserVO userVo = applyBZParamVO.getData().getUser(); //鍏嶅瘑鐧诲綍鐢宠token锛宺equest涓坊鍔犵敤鎴蜂俊鎭� - passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(), this.getRequest()); + //passwordFreeLoginService.pwdFreeLoginByBoolean(userVo.getUserName(), this.getRequest()); + passwordFreeLoginService.pwdFreeLoginByBoolean(systemId.toLowerCase(),this.getRequest()); AuthUtil.getUser(); //杩欐槸璐﹀彿淇℃伅 SessionInfo sessionInfo = new SessionInfo(); @@ -2135,7 +2146,7 @@ if (!CollectionUtils.isEmpty(codeClassifyList)) { codeClassifyList.stream().forEach(codeClassify -> { CodeClassifyVO codeClassifyVO= classifyService.getTopClassifyVO(codeClassify.getOid()); - if(codeClassifyVO.getId().toLowerCase(Locale.ROOT).equals(libray.toLowerCase(Locale.ROOT))){ + if(codeClassifyVO.getId().toUpperCase(Locale.ROOT).equals(libray.toUpperCase(Locale.ROOT))){ newCodeClassify[0] =codeClassify; } }); @@ -2177,7 +2188,7 @@ if (!CollectionUtils.isEmpty(codeClassifyList)) { codeClassifyList.stream().forEach(codeClassify -> { CodeClassifyVO codeClassifyVO= classifyService.getTopClassifyVO(codeClassify.getOid()); - if(codeClassifyVO.getId().toLowerCase(Locale.ROOT).equals(libray.toLowerCase(Locale.ROOT))){ + if(codeClassifyVO.getId().toUpperCase(Locale.ROOT).equals(libray.toUpperCase(Locale.ROOT))){ newCodeClassify[0] =codeClassify; } }); @@ -2312,9 +2323,9 @@ Map<String, List<ClsfAttrMappingDO>> libPropMaps = libraryClsfDOList.stream().collect(Collectors.toMap(LibraryClsfDO::getLibrary, LibraryClsfDO::getProp, (key1, key2) -> key2)); log.info("鏍规嵁鍙傛暟锛歭ibray锛�-銆�" + libray + "浠庨厤缃枃浠朵腑鎵惧搴斿睘鎬ф槧灏勯厤缃�"); String path=stringStringMap.get(systemId); - if (libPropMaps.containsKey(libray)) { + if (libPropMaps.containsKey(libray.toUpperCase(Locale.ROOT))) { log.info("鏍规嵁鍙傛暟锛歭ibray锛�-銆�" + libray + "鍖归厤鍒扮浉搴旂殑灞炴�ф槧灏勪俊鎭�"); - List<ClsfAttrMappingDO> clsfAttrMappingDOList = libPropMaps.get(libray); + List<ClsfAttrMappingDO> clsfAttrMappingDOList = libPropMaps.get(libray.toUpperCase(Locale.ROOT)); propMaps = clsfAttrMappingDOList.stream().collect(Collectors.toMap(ClsfAttrMappingDO::getSourceKey, ClsfAttrMappingDO::getTargetKey, (key1, key2) -> key2)); log.info("鏍规嵁鍙傛暟锛歭ibray锛�-銆�" + libray + "鍖归厤鍒扮浉搴旂殑灞炴�ф槧灏勪俊鎭�,灞炴�ф槧灏勬潯鐩暟+" + clsfAttrMappingDOList.size()); }else{ @@ -2423,9 +2434,9 @@ Map<String, List<ClsfAttrMappingDO>> libPropMaps = libraryClsfDOList.stream().collect(Collectors.toMap(LibraryClsfDO::getLibrary, LibraryClsfDO::getProp, (key1, key2) -> key2)); log.info("鏍规嵁鍙傛暟锛歭ibray锛�-銆�" + libray + "浠庨厤缃枃浠朵腑鎵惧搴斿睘鎬ф槧灏勯厤缃�"); String path=stringStringMap.get(systemId); - if (libPropMaps.containsKey(libray)) { + if (libPropMaps.containsKey(libray.toUpperCase(Locale.ROOT))) { log.info("鏍规嵁鍙傛暟锛歭ibray锛�-銆�" + libray + "鍖归厤鍒扮浉搴旂殑灞炴�ф槧灏勪俊鎭�"); - List<ClsfAttrMappingDO> clsfAttrMappingDOList = libPropMaps.get(libray); + List<ClsfAttrMappingDO> clsfAttrMappingDOList = libPropMaps.get(libray.toUpperCase(Locale.ROOT)); propMaps = clsfAttrMappingDOList.stream().collect(Collectors.toMap(ClsfAttrMappingDO::getSourceKey, ClsfAttrMappingDO::getTargetKey, (key1, key2) -> key2)); log.info("鏍规嵁鍙傛暟锛歭ibray锛�-銆�" + libray + "鍖归厤鍒扮浉搴旂殑灞炴�ф槧灏勪俊鎭�,灞炴�ф槧灏勬潯鐩暟+" + clsfAttrMappingDOList.size()); }else{ -- Gitblit v1.9.3