From caaa37d3f59eeb33d97e0f3497bbf5885865f59d Mon Sep 17 00:00:00 2001
From: dangsn <dangsn@chicecm.com>
Date: 星期一, 09 十二月 2024 18:27:17 +0800
Subject: [PATCH] 调整WebBoService中的查询接口。主要是BusinessObject对象属性的赋值,以及BusinessObject和BaseModel之间的属性互相赋值

---
 Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/WebBoServiceImpl.java |  130 +++++++++++++++++++++++++------------------
 1 files changed, 75 insertions(+), 55 deletions(-)

diff --git a/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/WebBoServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/WebBoServiceImpl.java
index ad5ea40..614884d 100644
--- a/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/WebBoServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/WebBoServiceImpl.java
@@ -15,21 +15,23 @@
 import com.vci.omd.utils.ObjectTool;
 import com.vci.pagemodel.*;
 import com.vci.starter.web.annotation.Column;
+import com.vci.starter.web.annotation.VciFieldType;
 import com.vci.starter.web.constant.QueryOptionConstant;
 import com.vci.starter.web.enumpck.BooleanEnum;
+import com.vci.starter.web.enumpck.VciFieldTypeEnum;
 import com.vci.starter.web.exception.VciBaseException;
 import com.vci.starter.web.pagemodel.DataGrid;
 import com.vci.starter.web.pagemodel.PageHelper;
 import com.vci.starter.web.util.BeanUtilForVCI;
 import com.vci.starter.web.util.Lcm.Func;
 import com.vci.starter.web.util.VciBaseUtil;
+import com.vci.starter.web.util.VciDateUtil;
 import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
 import com.vci.web.properties.WebProperties;
 import com.vci.web.service.*;
 import com.vci.web.util.PlatformClientUtil;
 import com.vci.web.util.WebUtil;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.math3.distribution.TDistribution;
 import org.dom4j.DocumentException;
 import org.dom4j.DocumentHelper;
 import org.slf4j.Logger;
@@ -553,7 +555,7 @@
 						// 涓�灞傚弬鐓� a.b
 						// 绗簩涓弬鏁扮粰绌猴紝鏄涓嶅浠庡睘鎬т腑鏌ュ叾鍙傛暟鐨勪笟鍔$被鍨嬶紝鐢变笅涓嬩笓鐢ㄦ帄涓繘琛屽鐞�
 						BtmRefQueryOption refOpt = new BtmRefQueryOption(
-						kvs[0], "", new String[]{kvs[1]}
+								kvs[0], "", new String[]{kvs[1]}
 						);
 						refOpts.add(refOpt);
 					} else if(len == 3){
@@ -563,7 +565,7 @@
 						// 涓夊眰浠ョ殑鍙傜収 a.b.c.d a.b.c.d.e
 						// TODO 闇�瑕佹敮鎸佷笁灞備互鍙婁互涓婄殑鍙傜収
 					}
-				}else if(attrName.indexOf("_")>-1 
+				}else if(attrName.indexOf("_")>-1
 						&& !"lcStatus_text".toLowerCase().equalsIgnoreCase(attrName.toLowerCase())){
 					enumAttrName.add(attrName);
 				}else{
@@ -596,8 +598,6 @@
 			ObjectQueryService.FindBTMObjectsV3Result bos = qtService.findBTMObjectsV3(qt.getId(), OQTool.qtTOXMl(qt).asXML(), refOpts.toArray(new BtmRefQueryOption[refOpts.size()]));
 			if (bos != null && bos.count > 0) {
 				for (BusinessObject bo : bos.returnValue) {
-//					BusinessObject cbo = new BusinessObject();
-//					cbo = bo;
 					queryEnumText(bo,enumAttrName);
 					allCbos.add(bo);
 				}
@@ -700,7 +700,7 @@
 			Map<String, OsStatusVO> statusVOMap = statusService.selectAllStatusMap();
 			cbos.stream().forEach(cbo->{
 				try{
-					ObjectTool.setBOAttributeValue(cbo,"lcStatus_text", statusVOMap.getOrDefault(cbo.lcStatus,new OsStatusVO()).getName());
+					ObjectTool.setBOAttributeValue(cbo,"lcStatus_text".toLowerCase(), statusVOMap.getOrDefault(cbo.lcStatus,new OsStatusVO()).getName());
 				}catch(Exception e){
 					logger.error("鑾峰彇鐢熷懡鍛ㄦ湡涓姸鎬佺殑鏄剧ず鏂囨湰鍑洪敊",e);
 				}
@@ -728,7 +728,7 @@
 	@Override
 	public void queryEnumText(BusinessObject cbo, LinkObject clo, List<String> enumAttrName) throws VciBaseException{
 		if(enumAttrName.size()>0){//鏌ヨ鏋氫妇
-			for(String enumAttr:enumAttrName){//鏍煎紡涓�   code_field  code鏄灇涓剧殑缂栫爜锛宖ield鏄綋鍓嶄笟鍔$被鍨嬪瓨鍌ㄦ灇涓惧�肩殑瀛楁
+			for(String enumAttr : enumAttrName){//鏍煎紡涓�   code_field  code鏄灇涓剧殑缂栫爜锛宖ield鏄綋鍓嶄笟鍔$被鍨嬪瓨鍌ㄦ灇涓惧�肩殑瀛楁
 				if(enumAttr.toLowerCase().equals("creator_name")){
 					//鍒涘缓浜虹殑鍚嶇О
 					String creator = "";
@@ -770,18 +770,20 @@
 					String enumCode = tempArray[0];//鏋氫妇缂栫爜
 					if (tempArray.length > 1) {
 						//浠庢灇涓句腑鑾峰彇鍊�
-						String valueFieldName = tempArray[1];
+						String valueFieldName = tempArray[1];//鏋氫妇鍦ㄤ笟鍔$被鍨嬩笂瀛樻斁鐨勫睘鎬�
 						String comboxField = "";
 						if(valueFieldName.contains("#")){
 							valueFieldName = tempArray[1].split("#")[0];
 							comboxField = tempArray[1].split("#")[1];
 						}
+						//鑾峰彇鏋氫妇椤�
 						String enumKey = "";
 						if (cbo != null) {
 							enumKey = ObjectTool.getBOAttributeValue(cbo,valueFieldName);
 						} else if (clo != null) {
 							enumKey = ObjectTool.getLOAttributeValue(clo,valueFieldName);
 						}
+						//鑾峰彇鏋氫妇椤圭殑涓枃鏄剧ず
 						String enumText = "";
 						if (WebUtil.isNotNull(enumKey)) {
 							enumText = enumService.getValue(enumCode, enumKey);
@@ -994,9 +996,8 @@
 	 * @throws VciBaseException 鏌ヨ鍑洪敊浼氭姏鍑哄紓甯�
 	 */
 	@Override
-	public List<BusinessObject> queryCBOByScheme(String queryScheme,
-			Map<String, String> conditionMap, Map<String, Object> replaceMap,
-			PageHelper ph, List<String> clauseList) throws VciBaseException {
+	public List<BusinessObject> queryCBOByScheme(String queryScheme, Map<String, String> conditionMap, Map<String, Object> replaceMap,
+												 PageHelper ph, List<String> clauseList) throws VciBaseException {
 		QueryTemplate qt = getQtByName(queryScheme,replaceMap);
 		return baseQueryCBO(qt,conditionMap,ph,clauseList);
 	}
@@ -1155,7 +1156,7 @@
 	/**
 	 * 鍙敤sql璇彞鏌ヨ锛岃繖涓拰queryBySqlForMap鍖哄埆鏄紝鐗规畩鐨剆ql(濡傚寘鍚湁鍑芥暟鐨�)鍙互鐢ㄨ繖涓柟娉曪紝浣嗘槸鏈塻ql娉ㄥ叆椋庨櫓
 	 * @param sql sql璇彞锛屾煡璇㈡潯浠跺繀椤昏嚜琛屽湪鍏朵腑澶勭悊瀹屾垚
-	 * @return 鏁版嵁鏄犲皠
+	 * @return 鏁版嵁鏄犲皠銆侻ap涓紝key鍊间负澶у啓銆�
 	 * @throws VciBaseException 鏌ヨ鍑洪敊娲绘姏鍑哄紓甯�
 	 */
 	@Override
@@ -1198,13 +1199,32 @@
 		List<Map> allData = queryByOnlySqlForMap(sql);
 		//闇�瑕佽浆鎹竴涓媍bo鐨勯偅涓睘鎬�
 		Map<String/**涓氬姟绫诲瀷涓殑瀛楁*/, String/**灞炴�ч噷鐨勫瓧娈�**/> fieldNameMap = WebUtil.getFieldNameMap(tClass);
+		Map<String, Field> fieldMap = WebUtil.getFieldMapForObject(tClass);
 		List<T> dataList = new ArrayList<>();
 		if(!CollectionUtils.isEmpty(allData)){
 			allData.stream().forEach(data->{
 				Map thisData = new HashMap();
 				if(!CollectionUtils.isEmpty(data)){
 					data.forEach((key,value)->{
-						thisData.put(fieldNameMap.getOrDefault(((String)key).toLowerCase(Locale.ROOT), (String) key),value);
+						String fieldName = fieldNameMap.getOrDefault(((String)key).toLowerCase(Locale.ROOT), (String) key);
+						String fieldValue = String.valueOf(value);
+						if(fieldMap.containsKey(fieldName)){
+							Field field = fieldMap.get(fieldName);
+							if(field.isAnnotationPresent(VciFieldType.class)){
+								VciFieldType vciFieldType = field.getAnnotation(VciFieldType.class);
+								VciFieldTypeEnum vciFieldTypeEnum = vciFieldType.value();
+								if(VciFieldTypeEnum.VTDateTime.equals(vciFieldTypeEnum) && StringUtils.isNotBlank(fieldValue)){
+									fieldValue = VciDateUtil.date2Str(VciDateUtil.long2Date(Long.parseLong(fieldValue)), VciDateUtil.DateTimeFormat);
+								}
+								if(VciFieldTypeEnum.VTDate.equals(vciFieldTypeEnum) && StringUtils.isNotBlank(fieldValue)){
+									fieldValue = VciDateUtil.date2Str(VciDateUtil.long2Date(Long.parseLong(fieldValue)), VciDateUtil.DateFormat);
+								}
+								if(VciFieldTypeEnum.VTTime.equals(vciFieldTypeEnum) && StringUtils.isNotBlank(fieldValue)){
+									fieldValue = VciDateUtil.date2Str(VciDateUtil.long2Date(Long.parseLong(fieldValue)), VciDateUtil.TimeFormat);
+								}
+							}
+						}
+						thisData.put(fieldName,fieldValue);
 					});
 				}
 				try {
@@ -1224,7 +1244,7 @@
      * 鏍规嵁sql璇彞鏉ユ煡璇㈠唴瀹癸紝杩斿洖Map----sql涓嶈兘鏄痵elect * 鎴栬�� select t.* 
      * @param sql 涓轰簡闃叉SQL娉ㄥ叆锛屽�煎繀椤诲湪sql璇彞閲屼互:xxx鏍煎紡锛屽 id =:idvalue锛岀劧鍚庡湪conditionMap涓坊鍔犲缓涓篿dvalue鐨勬牸寮�
      * @param conditionMap  鏌ヨ鏉′欢锛屽繀椤讳笌sql閲屽搴�
-     * @return 涓氬姟鏁版嵁鐨勬槧灏�
+     * @return 涓氬姟鏁版嵁鐨勬槧灏勩��
      * @throws VciBaseException 鏌ヨ鍑洪敊浼氭姏鍑哄紓甯�
      */
 	@Override
@@ -1234,7 +1254,7 @@
 	}
 
 	/**
-	 * 鍜屼笂涓柟娉曚竴鏍凤紝澶氫紶浜嗘煡璇㈠瓧娈� selectKeys
+	 * 鍜屼笂涓柟娉曚竴鏍凤紝澶氫紶浜嗘煡璇㈠瓧娈� selectKeys銆俿ql涓嶈兘鏄痵elect * 鎴栬�� select t.*
 	 * @param sql sql璇彞
 	 * @param conditionMap 鏌ヨ鏉′欢
 	 * @param selectKeys 鏌ヨ鐨勫瓧娈�
@@ -1272,7 +1292,7 @@
 			ava = new AttributeValue[0];
 		}
 		try {
-			String[][] results =platformClientUtil.getSqlQueryService(sql, ava);
+			String[][] results = platformClientUtil.getSqlQueryService(sql, ava);
 			if(results.length>0){
 				if(selectKeys==null) {
 					String selectSql = sql.substring(sql.toLowerCase(Locale.ROOT).indexOf("select") + 6, sql.toLowerCase(Locale.ROOT).indexOf(" from")).trim();
@@ -1345,35 +1365,32 @@
 		swapConditionMap(c,conditionMap);
 		//鑾峰彇瑕佹煡璇㈢殑鎵�鏈夌殑鍒�
 		Map<String,String> allFieldAttrMap = WebUtil.getFieldNameMap(c);
-		if(!allFieldAttrMap.containsKey("lctid")){
-			allFieldAttrMap.put("lctid","lctid");
+		//淇敼allFieldAttrMap闆嗗悎涓殑key鐨勫ぇ灏忓啓
+		List<String> queryAttr = new ArrayList<String>();
+		Iterator<String> it = allFieldAttrMap.keySet().iterator();
+		while(it.hasNext()){
+			queryAttr.add(it.next());
 		}
-	    List<String> queryAttr = new ArrayList<String>();
-	    Iterator<String> it = allFieldAttrMap.keySet().iterator();
-	    while(it.hasNext()){
-	    	queryAttr.add(it.next());
-	    }
-	    for(String columnName:queryAttr){
-	    	String fieldName = allFieldAttrMap.get(columnName);
-	    	allFieldAttrMap.remove(columnName);
+		for(String columnName : queryAttr){
+			String fieldName = allFieldAttrMap.get(columnName);
+			allFieldAttrMap.remove(columnName);
 			allFieldAttrMap.put(columnName.toLowerCase(),fieldName);
 		}
+
 		List<T> allObject = new ArrayList<T>();
-		List<BusinessObject> allCbos = queryCBO(WebUtil.getBtmTypeByObject(c), conditionMap, ph, allFieldAttrMap.keySet().stream().collect(Collectors.toList()));//鎵ц鏌ヨ
-		List<String> oids = new ArrayList<String>();
-		
-		if(allCbos!=null&&allCbos.size()>0){
+		List<String> clauseList = new ArrayList<>(allFieldAttrMap.keySet());
+
+		List<BusinessObject> allCbos = queryCBO(WebUtil.getBtmTypeByObject(c).toLowerCase(), conditionMap, ph, clauseList);
+		if(!CollectionUtils.isEmpty(allCbos)){
 			for(BusinessObject cbo : allCbos){
 				T obj  = null;
 				try {
 					obj = c.newInstance();
-					WebUtil.copyValueToObjectFromCbos(cbo, obj,allFieldAttrMap);//涓轰簡灏戝幓鏌ヨ涓�娆″瓧娈�
-				} catch (InstantiationException e) {
+					WebUtil.copyValueToObjectFromCbos(cbo, obj, allFieldAttrMap);//涓轰簡灏戝幓鏌ヨ涓�娆″瓧娈�
+				} catch (Exception e) {
 					
-				} catch (IllegalAccessException e) {
 				}
 				if(obj !=null){
-					oids.add(cbo.oid);
 					allObject.add(obj);
 				}
 			}
@@ -1453,6 +1470,7 @@
 		swapConditionMap(c,conditionMap);
 		//鑾峰彇瑕佹煡璇㈢殑鎵�鏈夌殑鍒�
 		Map<String,String> allFieldAttrMap = WebUtil.getFieldNameMap(c);
+		//淇敼allFieldAttrMap闆嗗悎涓殑key鐨勫ぇ灏忓啓
 	    List<String> queryAttr = new ArrayList<String>();
 	    Iterator<String> it = allFieldAttrMap.keySet().iterator();
 	    while(it.hasNext()){
@@ -1463,18 +1481,18 @@
 			allFieldAttrMap.remove(columnName);
 			allFieldAttrMap.put(columnName.toLowerCase(),fieldName);
 		}
+		List<String> clauseList = new ArrayList<>(allFieldAttrMap.keySet());
 		List<T> allObject = new ArrayList<T>();
-		List<BusinessObject> allCbos = queryCBOByScheme(queryScheme, conditionMap, replaceMap,ph, allFieldAttrMap.keySet().stream().collect(Collectors.toList()));
+		List<BusinessObject> allCbos = queryCBOByScheme(queryScheme, conditionMap, replaceMap,ph, clauseList);
 		List<String> oids = new ArrayList<String>();
-		if(allCbos!=null&&allCbos.size()>0){
+		if(allCbos != null && allCbos.size() > 0){
 			for(BusinessObject cbo : allCbos){
 				T obj  = null;
 				try {
 					obj = c.newInstance();
 					WebUtil.copyValueToObjectFromCbos(cbo, obj,allFieldAttrMap);//涓轰簡灏戝幓鏌ヨ涓�娆″瓧娈�
-				} catch (InstantiationException e) {
+				} catch (Exception e) {
 					
-				} catch (IllegalAccessException e) {
 				}
 				if(obj !=null){
 					oids.add(cbo.oid);
@@ -1598,12 +1616,10 @@
     				//缂栬緫鐨勬椂鍊欙紝TS鍜孫ID涓嶈兘璁剧疆.鍥犱负骞冲彴閭f帴鍙h缃簡灏变細鎶ラ敊
 				}else {
 					//闇�瑕佸垽鏂槸鍚﹂粯璁ょ殑灞炴�э紝濡傛灉鏄粯璁ゅ睘鎬э紝鍒欎娇鐢ㄥ璞$殑璧嬪�肩殑鏂瑰紡
-					if (WebUtil.isDefaultField(fieldName) && WebUtil.inArray(new String[]{"id", "name", "description","lcstatus","revisionvalue","versionvalue"}, fieldName.toLowerCase())) {
-						WebUtil.setValueToField(fieldName, cbo, value);
-						ObjectTool.setBOAttributeValue(cbo, attrName.toLowerCase(), value);
-					} else {
-						ObjectTool.setBOAttributeValue(cbo, attrName.toLowerCase(), value);
+					if (WebUtil.isDefaultField(fieldName.toLowerCase()) && WebUtil.inArray(new String[]{"id", "name", "description","lcstatus","revisionvalue","versionvalue"}, fieldName.toLowerCase())) {
+						WebUtil.setValueToCboField(fieldName, cbo, value);
 					}
+					ObjectTool.setBOAttributeValue(cbo, attrName.toLowerCase(), value);
 				}
     		}
     	}
@@ -1752,13 +1768,20 @@
 	public <T> BatchCBO delete(T obj) throws VciBaseException {
 		return delete(obj,true);
 	}
+
+	/**
+	 * 鍒犻櫎鏁版嵁锛屽彲浠ュ湪request閲岃缃笉鎸佷箙鍖�
+	 * @param obj 鍒犻櫎鏁版嵁瀵硅薄
+	 * @param checkRefered 鏄惁鍒犻櫎寮曠敤鐨勬暟鎹�
+	 * @return 闇�瑕佸垱寤虹殑CBO,CLO;闇�瑕佷慨鏀圭殑CBO,CLO;闇�瑕佸垹闄ょ殑CBO,CLO
+	 * @throws VciBaseException
+	 */
 	@Override
 	public <T> BatchCBO delete(T obj,boolean checkRefered) throws VciBaseException{
 		List<T> list = new ArrayList<T>();
 		list.add(obj);
 		return batchDelete(list,checkRefered);
 	}
-
 
 	/**
      * 鎵归噺鍒犻櫎鏁版嵁锛屽彲浠ュ湪request閲岃缃笉鎸佷箙鍖�
@@ -1796,9 +1819,8 @@
 			String btmType = WebUtil.getBtmTypeByObject(obj.getClass());
 			String pkValue = WebUtil.getValueFromFieldForCbo(pkField, obj);
 			//鎵�浠ヨ繖閲屼篃鏄洿鎺ユ煡璇㈢殑鍗曚釜'
-			List<BusinessObject> deleteCbos = queryCBO(btmType, getOneQuery(
-					WebUtil.getCboAttrNameFromField(pkField, obj.getClass()), pkValue));
-			if(deleteCbos!=null){
+			List<BusinessObject> deleteCbos = queryCBO(btmType, getOneQuery(WebUtil.getCboAttrNameFromField(pkField, obj.getClass()), pkValue));
+			if(!CollectionUtils.isEmpty(deleteCbos)){
 				allDeleteCbos.addAll(deleteCbos);
 				if(!btmBos.containsKey(btmType)){
 					btmBos.put(btmType, deleteCbos);
@@ -1894,15 +1916,14 @@
 		conditionMap.put(QUERY_FILTER_SECRET,BooleanEnum.FASLE.getValue());//鏌ヨ鐨勬椂鍊欎笉鑳芥煡璇㈠瘑绾�
 		List<BusinessObject> allCbos = queryCBO(btmType, conditionMap);
 		BatchCBO batchCbo = new BatchCBO();
-		if(allCbos.size()>0){
+		if(!CollectionUtils.isEmpty(allCbos)){
 			Map<String,List<BusinessObject>> btmBos = new HashMap<String, List<BusinessObject>>();
 			btmBos.put(btmType, allCbos);
 			checkCanDelete(btmBos);
-			Set<BusinessObject> allDeleteCbos = new HashSet<BusinessObject>();
-			allDeleteCbos.addAll(allCbos);
+            Set<BusinessObject> allDeleteCbos = new HashSet<BusinessObject>(allCbos);
 			batchCbo.setDeleteCbos(allDeleteCbos);
 		}
-		if(allCbos.size()>0 && WebUtil.isPersistence()){
+		if(!CollectionUtils.isEmpty(allCbos) && WebUtil.isPersistence()){
 			persistenceBatch(batchCbo);
 		}
 		return batchCbo;
@@ -1931,7 +1952,7 @@
 			selectSql += ",btmname ";
 		}
 		sql = selectSql + fromSql;
-		List<BusinessObject> allDelete =queryBySql(sql, conditionMap);
+		List<BusinessObject> allDelete = queryBySql(sql, conditionMap);
 		if(allDelete.size() == 0){
 			return batchCbo;//娌℃湁鍒犻櫎浠讳綍鏁版嵁
 		}
@@ -2002,7 +2023,6 @@
 		return queryGridByBo(btmType,conditionMap,new PageHelper(-1,true));
 	}
 
-	  
 	 /**
      * 鏍规嵁涓氬姟绫诲瀷鏉ユ煡璇㈠垪琛ㄦ暟鎹紱鍙互鍦╬ageHelper涓缃槸鍚︽煡璇㈡�绘暟
      * @param btmType 涓氬姟绫诲瀷鍚嶇О
@@ -2015,7 +2035,7 @@
 	public DataGrid queryGridByBo(String btmType,
 			Map<String, String> conditionMap, PageHelper ph)
 			throws VciBaseException {
-		return queryGridByBo(btmType,conditionMap,ph,null);
+		return queryGridByBo(btmType,conditionMap,ph,new ArrayList<String>());
 	}
 
     /**
@@ -2037,7 +2057,7 @@
 		}
 		List<BusinessObject> allCbos = queryCBO(btmType, conditionMap, ph, clauseList);
 		DataGrid dg = new DataGrid();
-		if(allCbos.size()>0){
+		if(!CollectionUtils.isEmpty(allCbos)){
 			List<Map> mapList = cbos2Map(allCbos);
 			dg.setData(mapList);
 			//鑲畾鏄綋鍓嶅垎椤垫湁鍊硷紝鎵嶄細鏈夋�绘暟

--
Gitblit v1.9.3