yuxc
2024-07-26 613a6c5414c5294c8078cabb1d9d818be62c12e6
新增平台链接类型的删除,一致性检查,修复,创建视图接口
已修改3个文件
330 ■■■■■ 文件已修改
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLinkTypeController.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLinkTypeServiceI.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLinkTypeServiceImpl.java 234 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLinkTypeController.java
@@ -18,8 +18,11 @@
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -155,4 +158,74 @@
            return objectBaseResult;
        }
    }
    /**
     * 链接类型删除
     * linkType 链接类型对象
     * @return 删除结果
     */
    @DeleteMapping("/deleteLink")
    public BaseResult deleteLink(@RequestBody LinkType linkType){
        try {
            return linkTypeService.deleteLink(linkType);
        } catch (PLException e) {
            BaseResult objectBaseResult = new BaseResult<>();
            objectBaseResult.setCode(Integer.parseInt(e.code));
            objectBaseResult.setMsg(Arrays.toString(e.messages));
            return objectBaseResult;
        }
    }
    /**
     * 一致性检查
     * @return 删除结果
     */
    @GetMapping("/checkLinkType")
    public BaseResult checkLinkType(){
        try {
            return linkTypeService.checkLinkType();
        } catch (PLException e) {
            BaseResult objectBaseResult = new BaseResult<>();
            objectBaseResult.setCode(Integer.parseInt(e.code));
            objectBaseResult.setMsg(Arrays.toString(e.messages));
            return objectBaseResult;
        }
    }
    /**
     * 一致性检查修复数据库表
     * repairData 需要修复的数据
     * @return 修复结果
     */
    @PostMapping("/repairTable")
    public BaseResult repairTable(@RequestBody String repairData){
        try {
            return linkTypeService.repairTable(repairData);
        } catch (PLException e) {
            BaseResult objectBaseResult = new BaseResult<>();
            objectBaseResult.setCode(Integer.parseInt(e.code));
            objectBaseResult.setMsg(Arrays.toString(e.messages));
            return objectBaseResult;
        } catch (IOException e) {
            BaseResult objectBaseResult = new BaseResult<>();
            objectBaseResult.setCode(500);
            objectBaseResult.setMsg(e.getMessage());
            return objectBaseResult;
        }
    }
    /**
     * 创建视图
     * @return 创建结果
     */
    @PostMapping("/createView")
    public BaseResult createView(){
        try {
            return linkTypeService.createView();
        } catch (PLException e) {
            BaseResult objectBaseResult = new BaseResult<>();
            objectBaseResult.setCode(Integer.parseInt(e.code));
            objectBaseResult.setMsg(Arrays.toString(e.messages));
            return objectBaseResult;
        }
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLinkTypeServiceI.java
@@ -9,6 +9,7 @@
import com.vci.pagemodel.OsLinkTypeAttributeVO;
import com.vci.pagemodel.OsLinkTypeVO;
import java.io.IOException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -122,4 +123,26 @@
     * @return 保存结果
     */
    BaseResult addAndEditLink(LinkType linkType, Boolean addFlag) throws PLException;
    /**
     * 链接类型删除
     * linkType 链接类型对象
     * @return 删除结果
     */
    BaseResult deleteLink(LinkType linkType) throws PLException;
    /**
     * 一致性检查
     * @return 删除结果
     */
    BaseResult checkLinkType() throws PLException;
    /**
     * 一致性检查修复数据库表
     * repairData 需要修复的数据
     * @return 修复结果
     */
    BaseResult repairTable(String repairData) throws PLException, IOException;
    /**
     * 创建视图
     * @return 创建结果
     */
    BaseResult createView() throws PLException;
}
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("创建视图失败");
        }
    }
    /**
     * 修复链接类型的xml文件
     * @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;
            }
            //将list中包含的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]);
            //将list中包含的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;
    }
    /**
     * 获取需要修复的伪sql
     * @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;
    }
    /**