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/controller/OsLinkTypeController.java | 73 ++++++++++++
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLinkTypeServiceI.java | 23 +++
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsLinkTypeServiceImpl.java | 234 +++++++++++++++++++++++++++++++++++++++
3 files changed, 330 insertions(+), 0 deletions(-)
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLinkTypeController.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLinkTypeController.java
index 8b592a7..6400b16 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/OsLinkTypeController.java
+++ b/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;
+ }
+ }
}
diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLinkTypeServiceI.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLinkTypeServiceI.java
index fd64b1b..0fae7cb 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsLinkTypeServiceI.java
+++ b/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;
}
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