From f879ddd80a2bd267a0a575ef03f76d3ec2ae1504 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期四, 04 一月 2024 11:42:22 +0800
Subject: [PATCH] bug列表269:集成日志查询bug修改。 270:关键属性校验,去掉多线程之后请求响应非常慢(之前报错线程阻塞的bug改成单线程导致非常慢,现在又改回ForJoinPool方式限制线程生成数量实现多线程并行,提升执行效率)。
---
Source/UBCS-WEB/src/views/docking/loge.vue | 6 +-
Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/log/service/impl/LogLocalServiceImpl.java | 4
Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/controller/DockingPreApplyCodeController.java | 2
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java | 4 +
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ClassifyAuthServiceImpl.java | 2
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingSystemConfigServiceImpl.java | 1
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmIOServiceImpl.java | 106 +++++++++++++++++++----------------
Source/UBCS-WEB/src/views/monitor/log/localLog.vue | 4
Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ClassifyAuthController.java | 8 +-
Source/UBCS-WEB/src/components/dockingSearch/VciDockingSearch.vue | 4
Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feign/MdmApplyGroupCodeProvider.java | 1
11 files changed, 77 insertions(+), 65 deletions(-)
diff --git a/Source/UBCS-WEB/src/components/dockingSearch/VciDockingSearch.vue b/Source/UBCS-WEB/src/components/dockingSearch/VciDockingSearch.vue
index c56b682..bfb2231 100644
--- a/Source/UBCS-WEB/src/components/dockingSearch/VciDockingSearch.vue
+++ b/Source/UBCS-WEB/src/components/dockingSearch/VciDockingSearch.vue
@@ -121,7 +121,7 @@
SaveHandler(){
let name = this.SearchObject.searchData[this.formInline.type].prop;
const requestApi = (api) => {
- api(this.page.currentPage, this.page.pageSize, { [`conditionMap[${name}_like]`]: this.formInline.text}).then(res => {
+ api(this.page.currentPage, this.page.pageSize,'createTime','desc',{[`conditionMap[${name}_like]`]: this.formInline.text}).then(res => {
if(!res.data.data.records){
this.$message.error('鏆傛湭鏌ュ埌鏁版嵁锛�')
}else {
@@ -149,7 +149,7 @@
const { cut, state, stateTask, Date, lastDate, taskCut } = this.formInline;
const requestParams = {};
const requestApi = (api) => {
- api(currentPage, pageSize, requestParams).then(res => {
+ api(currentPage, pageSize,'createTime','desc',requestParams).then(res => {
if(!res.data.data.records){
this.$message.error('鏆傛湭鏌ュ埌鏁版嵁锛�');
} else {
diff --git a/Source/UBCS-WEB/src/views/docking/loge.vue b/Source/UBCS-WEB/src/views/docking/loge.vue
index 2ae4333..bb5f6d3 100644
--- a/Source/UBCS-WEB/src/views/docking/loge.vue
+++ b/Source/UBCS-WEB/src/views/docking/loge.vue
@@ -315,13 +315,13 @@
},
onLoad(page, params={}) {
this.loading = true;
- var query={}
+ var queryCondition={}
if (this.query) {
for (var key in this.query) {
- query['conditionMap["' + key + '"]'] = this.query[key];
+ queryCondition['conditionMap["' + key + '"]'] = this.query[key];
}
}
- getLogoList(page.currentPage, page.pageSize,'createTime','desc',Object.assign(params,this.params, query,this.query),).then(res => {
+ getLogoList(page.currentPage, page.pageSize,'createTime','desc',Object.assign(params,this.params, queryCondition,this.query),).then(res => {
const data = res.data.data;
this.page.total = data.total;
this.data = data.records;
diff --git a/Source/UBCS-WEB/src/views/monitor/log/localLog.vue b/Source/UBCS-WEB/src/views/monitor/log/localLog.vue
index f294431..54b02e2 100644
--- a/Source/UBCS-WEB/src/views/monitor/log/localLog.vue
+++ b/Source/UBCS-WEB/src/views/monitor/log/localLog.vue
@@ -97,11 +97,11 @@
prop: "logType",
width:'160'
},
- {
+ /*{
label: "鍒涘缓鏃堕棿",
prop: "createTime",
width:'160'
- },
+ },*/
{
label: "鏈�鍚庝慨鏀规椂闂�",
prop: "lastModifier",
diff --git a/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/log/service/impl/LogLocalServiceImpl.java b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/log/service/impl/LogLocalServiceImpl.java
index 1533da2..becbc97 100644
--- a/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/log/service/impl/LogLocalServiceImpl.java
+++ b/Source/UBCS/ubcs-ops/ubcs-log/src/main/java/com/vci/ubcs/log/service/impl/LogLocalServiceImpl.java
@@ -118,8 +118,8 @@
File file = new File(fullPath);
if(file.exists()){
LocalLogVO localLogVO = new LocalLogVO();
- localLogVO.setLastModifier(getLastModifiedOrCreatTime(true,fullPath));
- localLogVO.setCreateTime(getLastModifiedOrCreatTime(false,fullPath));
+ localLogVO.setLastModifier(getLastModifiedOrCreatTime(true,file.getPath()));
+ localLogVO.setCreateTime(getLastModifiedOrCreatTime(false,file.getPath()));
localLogVO.setLogPath(fullPath);
String serviceId = getServiceId(file.getPath());
localLogVO.setServiceId(serviceId);
diff --git a/Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feign/MdmApplyGroupCodeProvider.java b/Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feign/MdmApplyGroupCodeProvider.java
index 95e6e73..2570c9a 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feign/MdmApplyGroupCodeProvider.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-applyjtcodeservice-api/src/main/java/com/vci/ubcs/code/applyjtcodeservice/feign/MdmApplyGroupCodeProvider.java
@@ -35,7 +35,6 @@
* @param dockingGroupDataVO AO/TO鐨勪俊鎭�
* @return 鎵ц缁撴灉
*/
-
@PostMapping("/externalMainData/receiveAddApply")
DockingResultVO receiveEditApply(@NotNull @RequestBody DockingGroupDataVO dockingGroupDataVO)throws VciBaseException;
diff --git a/Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/controller/DockingPreApplyCodeController.java b/Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/controller/DockingPreApplyCodeController.java
index 6970d64..5da8b84 100644
--- a/Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/controller/DockingPreApplyCodeController.java
+++ b/Source/UBCS/ubcs-service/ubcs-applyjtcodeservice/src/main/java/com/vci/ubcs/code/applyjtcodeservice/controller/DockingPreApplyCodeController.java
@@ -183,7 +183,7 @@
@ApiOperationSupport(order = 2)
@ApiOperation(value = "闆嗗洟鐮佺敵璇�", notes = "dockingPreAttrMappingVOList")
public R applyGroupCode(String oids,String btmName){
- List<BaseModelVO> BaseModelVOs=new ArrayList<>();
+ List<BaseModelVO> BaseModelVOS=new ArrayList<>();
try {
return groupMdmInterService.applyGroupCode(oids,btmName);
}catch (Throwable e){
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingSystemConfigServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingSystemConfigServiceImpl.java
index e0ac426..cd69a4d 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingSystemConfigServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/DockingSystemConfigServiceImpl.java
@@ -671,6 +671,7 @@
dockingLog.setClassifyName(dockingSystemConfigDTO.getClassifyName());
dockingLog.setId(dockingSystemConfigDTO.getId());
dockingLog.setUniqueCode("");
+ dockingLog.setCreateTime(new Date());
dockingLog.setInterfaceStatus(isSend?"true":"false");
dockingLog.setParamString(paramString);
dockingLog.setType(DATA_LOGE_OUT);
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 e910019..67fe60b 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
@@ -87,6 +87,7 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
@@ -201,6 +202,11 @@
* 瀹㈡埛鐜板満excel涓鸿�佺増鏈紝瀵煎嚭鐨勬�绘暟闄愬埗涓�65535
*/
public static final int EXPORT_LIMIT = 65535;
+
+ /**
+ * 鑷畾涔夊苟鍙慒orkJoinPool
+ */
+ private static final ForkJoinPool customForkJoinPool = new ForkJoinPool(Runtime.getRuntime().availableProcessors()-1);
/**
* 鎵归噺鐢宠锛氶�夊彇閫変腑鍒嗙被涓嬬殑鎵�鏈夋ā鏉垮叧閿睘鎬э紝鐩镐技灞炴�э紝蹇呭~灞炴�э紝鍐欏叆execl涓�
@@ -4393,56 +4399,60 @@
// 鏌ヨ涓嶉渶瑕佸弬涓庡叧閿睘鎬ф牎楠岀殑闄よ嚜宸变互澶栫殑鎵�鏈夊垎绫籵id
final String isParticipateCheckOids = classifyService.selectLeafByParentClassifyOid(classifyFullInfo.getTopClassifyVO().getOid(), classifyFullInfo.getCurrentClassifyVO().getOid());
final BladeUser user = AuthUtil.getUser();
- //cboList = new CopyOnWriteArrayList<>(cboList);
- // TODO:Thread limit exceeded replacing blocked 寮傚父鏄繖閮ㄥ垎浠g爜鎶涘嚭鐨�,鎵�浠ユ殏鏃跺皢parallelStream鏀规垚浜唖tream
- List<ClientBusinessObject> repeatDataMap = cboList.stream().filter(cbo -> {
- //姣忚閮藉緱鏌ヨ.濡傛灉鍏朵腑鍑虹幇浜嗛敊璇紝鎴戜滑灏辩洿鎺ユ姏鍑哄紓甯革紝鍏朵綑鐨勬樉绀�
- //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
- Map<String, String> conditionMap = new HashMap<>();
- ketAttrMap.forEach((attrId, attrVO) -> {
- String value =cbo.getAttributeValue(attrId.toLowerCase(Locale.ROOT));
- if (value == null) {
- value = "";
- }
- value= value.replace(REQUIRED_CHAR,SPECIAL_CHAR);
- engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
- });
- if (!CollectionUtils.isEmpty(ketAttrMap)) {
- // 娣诲姞涓嶅弬涓庡叧閿睘鎬ф牎楠岀殑鍒嗙被oid鍒ゆ柇
- if(Func.isNotBlank(isParticipateCheckOids)){
- conditionMap.put("t.codeclsfid",QueryOptionConstant.NOTIN+isParticipateCheckOids);
- }
- if(isEdit){//濡傛灉鏄洿鏀瑰垯闇�鎺掗櫎绯荤粺鏈韩
- conditionMap.put("t.id",QueryOptionConstant.NOTEQUAL+cbo.getId());
- }
- conditionMap.put("t.lastr", "1");
- conditionMap.put("t.lastv", "1");
-
- CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), templateVO, conditionMap, null);
- List<String> repeatData = commonsMapper.selectList(sqlBO.getSqlId());
- if(!repeatData.isEmpty()){
- final List<Map<String,String>> newDataList = commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage());
- DefaultAttrAssimtUtil.mapToLowerCase(newDataList,true);
- //List<ClientBusinessObject> newCboList=ChangeMapTOClientBusinessObjects(newDataList);
- List<BaseModel> newCboList = new ArrayList<>();
- newDataList.stream().forEach(stringStringMap -> {
- BaseModel baseModel=new BaseModel();
- DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap,baseModel,false,user);
- baseModel.setData(stringStringMap);
- newCboList.add(baseModel);
- });
- // 娣诲姞閿欒鍊�
- String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
- errorMap.put(rowIndex, "閲嶅鐨勮褰曠紪鍙蜂负:"+repeatData.stream().collect(Collectors.joining(",")));
- if(!CollectionUtils.isEmpty(newCboList)) {
- indexTODataMap.put(cbo.getAttributeValue(IMPORT_ROW_INDEX), newCboList);
+ // TODO:Thread limit exceeded replacing blocked 寮傚父鏄繖閮ㄥ垎浠g爜鎶涘嚭鐨�
+ // ,鎵�浠ユ殏鏃跺皢parallelStream鏀规垚浜唖tream锛屾敼鎴愪簡stream涔嬪悗鍙戠幇宸ㄦ參
+ // customForkJoinPool鎺у埗骞跺彂搴�
+ List<ClientBusinessObject> finalCboList = cboList;
+ List<ClientBusinessObject> repeatDataMap = (List<ClientBusinessObject>) customForkJoinPool.submit(()->{
+ finalCboList.parallelStream().filter(cbo -> {
+ //姣忚閮藉緱鏌ヨ.濡傛灉鍏朵腑鍑虹幇浜嗛敊璇紝鎴戜滑灏辩洿鎺ユ姏鍑哄紓甯革紝鍏朵綑鐨勬樉绀�
+ //VciBaseUtil.setCurrentUserSessionInfo(sessionInfo);
+ Map<String, String> conditionMap = new HashMap<>();
+ ketAttrMap.forEach((attrId, attrVO) -> {
+ String value =cbo.getAttributeValue(attrId.toLowerCase(Locale.ROOT));
+ if (value == null) {
+ value = "";
}
+ value= value.replace(REQUIRED_CHAR,SPECIAL_CHAR);
+ engineService.wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap);
+ });
+ if (!CollectionUtils.isEmpty(ketAttrMap)) {
+ // 娣诲姞涓嶅弬涓庡叧閿睘鎬ф牎楠岀殑鍒嗙被oid鍒ゆ柇
+ if(Func.isNotBlank(isParticipateCheckOids)){
+ conditionMap.put("t.codeclsfid",QueryOptionConstant.NOTIN+isParticipateCheckOids);
+ }
+ if(isEdit){//濡傛灉鏄洿鏀瑰垯闇�鎺掗櫎绯荤粺鏈韩
+ conditionMap.put("t.id",QueryOptionConstant.NOTEQUAL+cbo.getId());
+ }
+ conditionMap.put("t.lastr", "1");
+ conditionMap.put("t.lastv", "1");
+
+ CodeTemplateAttrSqlBO sqlBO = engineService.getSqlByTemplateVO(classifyFullInfo.getTopClassifyVO().getBtmTypeId(), templateVO, conditionMap, null);
+ List<String> repeatData = commonsMapper.selectList(sqlBO.getSqlId());
+ if(!repeatData.isEmpty()){
+ final List<Map<String,String>> newDataList = commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlUnPage());
+ DefaultAttrAssimtUtil.mapToLowerCase(newDataList,true);
+ //List<ClientBusinessObject> newCboList=ChangeMapTOClientBusinessObjects(newDataList);
+ List<BaseModel> newCboList = new ArrayList<>();
+ newDataList.stream().forEach(stringStringMap -> {
+ BaseModel baseModel=new BaseModel();
+ DefaultAttrAssimtUtil.copplyDefaultAttrAssimt(stringStringMap,baseModel,false,user);
+ baseModel.setData(stringStringMap);
+ newCboList.add(baseModel);
+ });
+ // 娣诲姞閿欒鍊�
+ String rowIndex = cbo.getAttributeValue(IMPORT_ROW_INDEX);
+ errorMap.put(rowIndex, "閲嶅鐨勮褰曠紪鍙蜂负:"+repeatData.stream().collect(Collectors.joining(",")));
+ if(!CollectionUtils.isEmpty(newCboList)) {
+ indexTODataMap.put(cbo.getAttributeValue(IMPORT_ROW_INDEX), newCboList);
+ }
+ }
+ return !repeatData.isEmpty();
+ }else{
+ return false;
}
- return !repeatData.isEmpty();
- }else{
- return false;
- }
- }).collect(Collectors.toList());
+ }).collect(Collectors.toList());
+ }).join();
if(!CollectionUtils.isEmpty(repeatDataMap)){
resultVO.setKeyAttrRepeatRowIndexList(repeatDataMap.stream().map(s->s.getAttributeValue(IMPORT_ROW_INDEX)).collect(Collectors.toSet()));
}
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 c0545a5..59d595a 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
@@ -372,7 +372,6 @@
resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO);
});
}else{
-
XMLResultDataObjectDetailDO xmlResultDataObjectDetailDO = new XMLResultDataObjectDetailDO();
xmlResultDataObjectDetailDO.setCode("");
xmlResultDataObjectDetailDO.setId("");
@@ -381,6 +380,7 @@
resultDataObjectDetailDOs.add(xmlResultDataObjectDetailDO);
}
e.printStackTrace();
+ log.error(e.getMessage());
}finally {
XMLResultClassfyVO resultClassfyVO = new XMLResultClassfyVO();
resultClassfyVO.setClassCode(classVO.getClassCode());
@@ -399,6 +399,7 @@
}catch (Throwable e){
e.printStackTrace();
msg="鐢宠缂栫爜澶辫触:"+e.getMessage();
+ log.error(msg);
/* XMLResultSystemVO XMLResultSystemVO=new XMLResultSystemVO();
XMLResultSystemVO.setErrorid(errorid);
XMLResultSystemVO.setMsg("鐢宠缂栫爜澶辫触锛�->"+e.getMessage());
@@ -434,6 +435,7 @@
this.saveLogs(systemId, systemId, data, resultStr, issucess[0], msg, "applyCode");
}catch (Throwable e){
e.printStackTrace();
+ log.error(e.getMessage());
}
}
log.info("杩斿洖鍙傛暟:"+resultStr);
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ClassifyAuthController.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ClassifyAuthController.java
index 5efa76f..9c232f7 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ClassifyAuthController.java
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/controller/ClassifyAuthController.java
@@ -34,7 +34,7 @@
* @param classifyAuthList
* @return
*/
- @PostMapping("saveOrUpdate")
+ @PostMapping("/saveOrUpdate")
public R saveOrUpdate(@RequestBody List<ClassifyAuth> classifyAuthList) {
return classifyAuthService.submit(classifyAuthList);
}
@@ -44,7 +44,7 @@
* @param classifyAuthVO
* @return
*/
- @GetMapping("list")
+ @GetMapping("/list")
public R<List<ClassifyAuthVO>> getClassifyAuthList(ClassifyAuthVO classifyAuthVO) {
return R.data(classifyAuthService.getClassifyAuthList(classifyAuthVO));
}
@@ -54,8 +54,8 @@
* @param classifyId
* @return
*/
- @GetMapping("getAuthButtonList")
- public R<Map<String,Boolean>> getAuthButtonList(String classifyId){
+ @GetMapping("/getAuthButtonList")
+ public R<Map<String,Boolean>> getAuthButtonList(@RequestParam("classifyId") String classifyId){
return R.data(classifyAuthService.getAuthButtonList(classifyId));
}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ClassifyAuthServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ClassifyAuthServiceImpl.java
index b9350dc..72cf41b 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ClassifyAuthServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/ClassifyAuthServiceImpl.java
@@ -102,7 +102,7 @@
*/
public Map<String,Boolean> getAuthButtonList(String classifyId){
if(Func.isBlank(classifyId)){
- return new HashMap<>();
+ throw new ServiceException("蹇呬紶鍙傛暟鍒嗙被oid涓嶈兘涓虹┖锛�");
}
//鏌ヨ鍒嗙被鑺傜偣鐨勬墍鏈夌埗绾ц妭鐐�
R<List<String>> listR = codeClassifyClient.selectAllParentOid(classifyId);
--
Gitblit v1.9.3