From 93cfe891a02766e0c56c5781eb6ca8a5cc5fb16f Mon Sep 17 00:00:00 2001 From: 田源 <lastanimals@163.com> Date: 星期三, 31 七月 2024 11:43:13 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLinkTypeServiceImpl.java | 234 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 234 insertions(+), 0 deletions(-) diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLinkTypeServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLinkTypeServiceImpl.java index d785735..8b2cf40 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLinkTypeServiceImpl.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLinkTypeServiceImpl.java @@ -1,7 +1,10 @@ package com.vci.web.service.impl; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import com.vci.corba.common.PLException; import com.vci.corba.omd.atm.AttributeDef; +import com.vci.corba.omd.btm.BizType; import com.vci.corba.omd.data.BusinessObject; import com.vci.corba.omd.ltm.LinkType; import com.vci.omd.utils.ObjectTool; @@ -26,6 +29,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.io.IOException; import java.util.*; import java.util.stream.Collectors; @@ -369,6 +373,236 @@ platformClientUtil.getLinkTypeService().modifyLinkType(linkType); return BaseResult.success(null,"淇濆瓨鎴愬姛锛�"); } + /** + * 閾炬帴绫诲瀷鍒犻櫎 + * linkType 閾炬帴绫诲瀷瀵硅薄 + * @return 鍒犻櫎缁撴灉 + */ + @Override + public BaseResult deleteLink(LinkType linkType) throws PLException { + if(platformClientUtil.getLinkTypeService().hasData(linkType.name)){ + throw new PLException("500",new String[] {"绫诲瀷宸叉湁瀹炰緥, 涓嶈繘琛屽垹闄ゆ搷浣�"}); + } + boolean flag = platformClientUtil.getLinkTypeService().deleteLinkType(linkType); + if(!flag){ + throw new PLException("500",new String[] {"鍒犻櫎澶辫触"}); + }else{ + return BaseResult.success(); + } + } + /** + * 涓�鑷存�ф鏌� + * @return 鍒犻櫎缁撴灉 + */ + @Override + public BaseResult checkLinkType() throws PLException { + String[] result = platformClientUtil.getLinkTypeService().linkTypeConsistencyCheck(); + Map<String, String> dbCheckMap = new HashMap<String, String>(); + for(int i = 0; i < result.length; i++){ + String info = result[i]; + if(info.equals("")){ + continue; + } + String[] infos = info.split("/DML"); + String typeName = infos[0]; + String dml = infos[1]; + dbCheckMap.put(typeName, dml); + } + Map<String, List<String>> btmCheckMap = usedBtmCheck(); + if(dbCheckMap.size() < 1 && (btmCheckMap == null || btmCheckMap.size() < 1)){ + return BaseResult.successMsg("鏁版嵁搴撲腑鐨勮〃缁撴瀯涓庣被鍨嬩竴鑷�, 閾炬帴绫诲瀷寮曠敤鐨勪笟鍔$被鍨嬪叏閮ㄦ纭瓨鍦�,鏃犻渶淇!!"); + }else{ + Map<String,Object> returnData = new HashMap<>(); + returnData.put("dbCheckMap",dbCheckMap); + returnData.put("btmCheckMap",btmCheckMap); + List<Map> list = new ArrayList<>(); + list.add(returnData); + return BaseResult.dataList(500,list,"闇�瑕佽繘琛屽垪鐨勪慨澶嶏紒锛�"); + } + } + + /** + * 涓�鑷存�ф鏌ヤ慨澶嶆暟鎹簱琛� + * repairData 闇�瑕佷慨澶嶇殑鏁版嵁 + * @return 淇缁撴灉 + */ + @Override + public BaseResult repairTable(String repairData) throws PLException, IOException { + Map<String, Object> map = new ObjectMapper().readValue(repairData, new TypeReference<Map<String,Object>>(){}); + HashMap<String,Object> dbCheckMap = (HashMap<String, Object>) map.get("dbCheckMap"); + HashMap<String,List<String>> btmCheckMap = (HashMap<String, List<String>>) map.get("btmCheckMap"); + List returnList = new ArrayList<>(); + Map returnMap = new HashMap(); + if(dbCheckMap.size() > 0){ + List<String> list = getRepairDML(dbCheckMap); + if(list.size() < 1){ + return BaseResult.success(); + } + String[] result = platformClientUtil.getLinkTypeService().executeRepair(list.toArray(new String[0])); + List<String> resultList = Arrays.asList(result); + for (String typeName : resultList) { + if(dbCheckMap.containsKey(typeName)){ + dbCheckMap.remove(typeName); + }else if(dbCheckMap.containsKey(typeName + "_ADD")){ + String sql = String.valueOf(dbCheckMap.get(typeName)); + sql = sql.substring(sql.indexOf(";") + 1, sql.length()); + dbCheckMap.put(typeName, sql); + }else if(dbCheckMap.containsKey(typeName + "_DROP")){ + String sql = String.valueOf(dbCheckMap.get(typeName)); + sql = sql.substring(0, sql.indexOf(";")); + dbCheckMap.put(typeName, sql); + } + } + if(!dbCheckMap.isEmpty()){ + returnMap.put("dbCheckMap",dbCheckMap); + } + } + + if(btmCheckMap.size() > 0){ + List<String> result = repairXml(btmCheckMap); + for(int i = 0; i < result.size(); i++){ + String typeName = result.get(i); + if(btmCheckMap.containsKey(typeName)){ + btmCheckMap.remove(typeName); + } + } + if(!btmCheckMap.isEmpty()){ + returnMap.put("btmCheckMap",btmCheckMap); + } + } + returnList.add(returnMap); + return BaseResult.success(returnList); + } + /** + * 鍒涘缓瑙嗗浘 + * @return 鍒涘缓缁撴灉 + */ + @Override + public BaseResult createView() throws PLException { + boolean f = platformClientUtil.getLinkTypeService().createView(); + if(f){ + return BaseResult.success("鍒涘缓瑙嗗浘鎴愬姛"); + }else{ + return BaseResult.success("鍒涘缓瑙嗗浘澶辫触"); + } + } + + + /** + * 淇閾炬帴绫诲瀷鐨剎ml鏂囦欢 + * @return + */ + private List<String> repairXml(HashMap<String, List<String>> btmCheckMap){ + List<String> result = new ArrayList<String>(); + for(Iterator<String> ite = btmCheckMap.keySet().iterator(); ite.hasNext();){ + String linkName = ite.next(); + List<String> list = btmCheckMap.get(linkName); + LinkType link = null; + try { + link = platformClientUtil.getLinkTypeService().getLinkType(linkName); + } catch (PLException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + continue; + } + //灏唋ist涓寘鍚殑F_btm绉婚櫎, 閲嶆柊璁剧疆btmItemsFrom + String[] btms_ = link.btmItemsFrom; + List<String> btms = new ArrayList<String>(); + for(int i = 0; i < btms_.length; i++){ + if(!list.contains("F_" + btms_[i])){ + btms.add(btms_[i]); + }else{ + if(link.primitivesFrom.equals(btms_[i])){ + link.primitivesFrom = ""; + } + } + } + link.btmItemsFrom = btms.toArray(new String[0]); + + //灏唋ist涓寘鍚殑T_btm绉婚櫎, 閲嶆柊璁剧疆btmItemsTo + btms_ = link.btmItemsTo; + btms = new ArrayList<String>(); + for(int i = 0; i < btms_.length; i++){ + if(!list.contains("T_" + btms_[i])){ + btms.add(btms_[i]); + }else{ + if(link.primitivesTo.equals(btms_[i])){ + link.primitivesTo = ""; + } + } + } + link.btmItemsTo = btms.toArray(new String[0]); + link.id = link.name; + try { + if(platformClientUtil.getLinkTypeService().modifyLinkType(link)){ + result.add(linkName); + } + } catch (PLException e) { + e.printStackTrace(); + } + } + return result; + } + /** + * 鑾峰彇闇�瑕佷慨澶嶇殑浼猻ql + * @return + */ + private List<String> getRepairDML(HashMap<String, Object> dbCheckMap) { + List<String> list = new ArrayList<String>(); + for(Iterator<String> ite = dbCheckMap.keySet().iterator(); ite.hasNext();){ + String type = ite.next(); + String dml = String.valueOf(dbCheckMap.get(type)); + list.add(type + "/DML" + dml); + } + return list; + } + /** + * 妫�鏌ユ墍鏈夌殑閾炬帴绫诲瀷, 褰撻摼鎺ョ被鍨嬩腑寮曠敤鐨勪笟鍔$被鍨嬪凡缁忎笉瀛樺湪鏃�, 鍒犻櫎璇ラ摼鎺ョ被鍨嬩腑瀵逛笟鍔$被鍨嬬殑寮曠敤 + * @return + */ + private Map<String, List<String>> usedBtmCheck(){ + try { + Map<String, List<String>> map = new HashMap<String, List<String>>(); + LinkType[] links = platformClientUtil.getLinkTypeService().getLinkTypes(); + for(int i = 0; i < links.length; i++){ + LinkType link = links[i]; + String[] btms = link.btmItemsFrom; + for(int k = 0; k < btms.length; k++){ + String btmName = btms[k]; + BizType btm = platformClientUtil.getBtmService().getBizTypeByName(btmName); + if(btm == null || btm.name.equals("")){ + List<String> list = map.get(link.name); + if(list == null){ + list = new ArrayList<String>(); + list.add("F_" + btmName); + }else{ + list.add("F_" + btmName); + } + map.put(link.name, list); + } + } + btms = link.btmItemsTo; + for(int k = 0; k < btms.length; k++){ + String btmName = btms[k]; + BizType btm = platformClientUtil.getBtmService().getBizTypeByName(btmName); + if(btm == null || btm.name.equals("")){ + List<String> list = map.get(link.name); + if(list == null){ + list = new ArrayList<String>(); + list.add("T_" + btmName); + }else{ + list.add("T_" + btmName); + } + map.put(link.name, list); + } + } + } + return map; + } catch (PLException e) { + e.printStackTrace(); + } + return null; + } /** -- Gitblit v1.9.3