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