From 613a6c5414c5294c8078cabb1d9d818be62c12e6 Mon Sep 17 00:00:00 2001
From: yuxc <yuxc@vci-tech.com>
Date: 星期五, 26 七月 2024 16:10:53 +0800
Subject: [PATCH] 新增平台链接类型的删除,一致性检查,修复,创建视图接口

---
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLinkTypeServiceImpl.java |  396 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 396 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 7065900..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,6 +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;
@@ -8,6 +12,7 @@
 import com.vci.starter.web.annotation.log.VciUnLog;
 import com.vci.starter.web.enumpck.VciFieldTypeEnum;
 import com.vci.starter.web.pagemodel.BaseQueryObject;
+import com.vci.starter.web.pagemodel.BaseResult;
 import com.vci.starter.web.pagemodel.DataGrid;
 import com.vci.starter.web.util.BeanUtil;
 import com.vci.starter.web.util.VciBaseUtil;
@@ -24,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;
 
@@ -321,10 +327,400 @@
     }
 
     /**
+     * 閾炬帴绫诲瀷鐨勫垪琛�
+     *
+     * @return 閾炬帴绫诲瀷鐨勬樉绀哄璞�
+     */
+    @Override
+    public BaseResult<List<LinkType>> gridLink() throws PLException {
+
+        LinkType[] linkTypes = platformClientUtil.getLinkTypeService().getLinkTypes();
+        return BaseResult.dataList(Arrays.asList(linkTypes));
+    }
+    /**
+     * 閾炬帴绫诲瀷淇濆瓨
+     * linkType 閾炬帴绫诲瀷鐨勪繚瀛樺璞�
+     * addFlag 鏄惁涓烘柊澧� true鏂板锛宖alse淇敼
+     * @return 淇濆瓨缁撴灉
+     */
+    @Override
+    public BaseResult addAndEditLink(LinkType linkType, Boolean addFlag) throws PLException {
+        VciBaseUtil.alertNotNull(linkType.name,"璇疯緭鍏ラ摼鎺ョ被鍨嬪悕绉�",linkType.btmItemsFrom,"From绔笟鍔$被鍨嬩笉鑳戒负绌�!",
+                linkType.btmItemsTo,"To绔被鍨嬪潎涓嶈兘涓虹┖!");
+        int maxLength = platformClientUtil.getLinkTypeService().getLTNameMaxLength();
+        if(linkType.name.length() > maxLength){
+            throw new PLException("500",new String[] {"閾炬帴绫诲瀷鍚嶉暱搴︿笉鑳借秴杩�" + maxLength});
+        }
+        if(!linkType.name.matches("^[A-Za-z]+$")){
+            throw new PLException("500",new String[] {"閾炬帴绫诲瀷鍚嶇О鍙兘涓鸿嫳鏂囧瓧姣�"});
+        }
+        LinkType historyLink = platformClientUtil.getLinkTypeService().getLinkType(linkType.name);
+        if(historyLink != null && !historyLink.name.equals("") && addFlag){
+            throw new PLException("500",new String[] {"璇ラ摼鎺ョ被鍨嬪悕绉板凡缁忓瓨鍦�"});
+        }
+        linkType.modifier = WebUtil.getCurrentUserId();
+        if(addFlag){
+            linkType.creator = WebUtil.getCurrentUserId();
+            platformClientUtil.getLinkTypeService().addLinkType(linkType);
+            return BaseResult.success(null,"淇濆瓨鎴愬姛锛�");
+        }
+        ArrayList<String> removeAbList = getRemovedApList(historyLink, linkType);
+        if(removeAbList.size() > 0 && platformClientUtil.getLinkTypeService().hasData(linkType.name)){
+            linkType.attributes = historyLink.attributes;
+            platformClientUtil.getLinkTypeService().modifyLinkType(linkType);
+            throw new PLException("500",new String[] {"绫诲瀷宸叉湁瀹炰緥, 涓嶈繘琛岀Щ闄ゆ搷浣�"});
+        }
+        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;
+    }
+
+
+    /**
+     * 鑾峰彇淇敼閾炬帴绫诲瀷鏃� 鍑忓皯鐨勫睘鎬�
+     * @param oldLt
+     * @param newLt
+     * @return
+     */
+    private ArrayList<String> getRemovedApList(LinkType oldLt,
+                                               LinkType newLt) {
+        String[] oldAbInfo = oldLt.attributes;
+        ArrayList<String> oldNameList = new ArrayList<String>();
+        for(int i = 0; i < oldAbInfo.length; i++){
+            oldNameList.add(oldAbInfo[i]);
+        }
+        String[] newAbInfo = newLt.attributes;
+        ArrayList<String> newNameList = new ArrayList<String>();
+        for(int i = 0; i < newAbInfo.length; i++){
+            newNameList.add(newAbInfo[i]);
+        }
+
+        ArrayList<String> removedApList = new ArrayList<String>();
+
+        for(Iterator<String> iterator = oldNameList.iterator(); iterator.hasNext();){
+            String oldName = iterator.next();
+            if(!newNameList.contains(oldName)){
+                removedApList.add(oldName);
+            }
+        }
+        return removedApList;
+    }
+
+    /**
      * 娓呴櫎缂撳瓨
      */
     @Override
     public void clearCache() {
 
     }
+
+    /**
+     * 淇敼閾炬帴绫诲瀷涓搴斿睘鎬у悕鐨勫睘鎬�
+     * @param apName
+     * @return
+     * @throws PLException
+     */
+    @Override
+    public boolean alterAp(String apName) throws PLException {
+        String[] linkNames = null;
+        List<String> linkNameList = new ArrayList<String>();
+        AttributeDef abItem = null;
+        try {
+            abItem = platformClientUtil.getAttributeService().getAttributeDefByName(apName);
+        } catch (PLException e1) {
+            e1.printStackTrace();
+        }
+        if(abItem == null || abItem.equals("")){
+            return true;
+        }
+        try {
+            linkNames = platformClientUtil.getLinkTypeService().getLTNamesByAPName(apName);
+        } catch (PLException e) {
+            e.printStackTrace();
+        }
+        if(linkNames == null || linkNames.length <= 0){
+            return true;
+        }
+
+        linkNameList = Arrays.asList(linkNames);
+        for(Iterator<String> i = linkNameList.iterator(); i.hasNext();){
+            String linkName = i.next();
+            try {
+                platformClientUtil.getLinkTypeService().modifyLTAttribute(linkName, apName);
+            } catch (PLException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+                String erreMsg = "璋冩暣閾炬帴绫诲瀷涓��"+apName+"銆戝睘鎬ф椂鍑虹幇閿欒锛屽師鍥狅細"+e.getMessage();
+                logger.error(erreMsg);
+                throw new PLException("500",new String[]{erreMsg});
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 鍒ゆ柇璇ュ睘鎬ф槸鍚﹀凡缁忓湪閾炬帴绫诲瀷涓骇鐢熶簡鏁版嵁
+     * @param abName
+     * @return
+     * @throws PLException
+     */
+    @Override
+    public boolean hasInstance(String abName) throws PLException {
+        String[] btmNames = platformClientUtil.getLinkTypeService().getLTNamesByAPName(abName);
+        if(btmNames == null || btmNames.length == 0){
+            return false;
+        }
+        for(int i = 0; i < btmNames.length; i++){
+            String btmName = btmNames[i];
+            boolean flag;
+            flag = platformClientUtil.getLinkTypeService().hasData(btmName);
+            if(flag){
+                return flag;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 鑾峰彇杩炴帴绫诲瀷鍚嶇О闆嗗悎
+     * @return
+     */
+    @Override
+    public List<String> getAllLtName() throws PLException {
+        LinkType[] linkTypes = platformClientUtil.getLinkTypeService().getLinkTypes();
+        if(null != linkTypes && linkTypes.length > 0){
+            return Arrays.stream(linkTypes).map(linkType -> linkType.name).collect(Collectors.toList());
+        }
+        return null;
+    }
+
 }

--
Gitblit v1.9.3