From f0b8a8d9966d0ccbb23ee8baaedf4ff8ba6060ed Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期四, 08 八月 2024 18:15:42 +0800
Subject: [PATCH] 业务类型新增、修改、删除、查看使用范围、创建视图、一致性检查、一致性检查修复、删除数据、删除数据界面查询、删除全部类型接口上传。

---
 Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsBtmServiceImpl.java |  797 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 794 insertions(+), 3 deletions(-)

diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsBtmServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsBtmServiceImpl.java
index 0d90146..22c0296 100644
--- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsBtmServiceImpl.java
+++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsBtmServiceImpl.java
@@ -1,11 +1,23 @@
 package com.vci.web.service.impl;
 
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.vci.client.common.providers.ClientServiceProvider;
+import com.vci.client.mw.ClientSessionUtility;
 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.etm.EnumType;
+import com.vci.corba.omd.lcm.Bound;
+import com.vci.corba.omd.lcm.LifeCycle;
 import com.vci.corba.omd.ltm.LinkType;
-import com.vci.corba.omd.qtm.QTD;
+import com.vci.corba.omd.stm.StatePool;
+import com.vci.corba.omd.vrm.VersionRule;
+import com.vci.dto.OsBtmTypeDTO;
+import com.vci.dto.OsBtmTypeLinkAttributesDTO;
 import com.vci.omd.constants.AttributeConstants;
+import com.vci.omd.constants.FileObjectType;
+import com.vci.omd.objects.OtherInfo;
 import com.vci.pagemodel.*;
 import com.vci.starter.web.annotation.log.VciUnLog;
 import com.vci.starter.web.enumpck.BooleanEnum;
@@ -17,6 +29,7 @@
 import com.vci.starter.web.util.BeanUtil;
 import com.vci.starter.web.util.VciBaseUtil;
 import com.vci.starter.web.util.VciDateUtil;
+import com.vci.starter.web.util.WebThreadLocalUtil;
 import com.vci.web.service.*;
 import com.vci.web.util.ConcurrentDateFormat;
 import com.vci.web.util.Func;
@@ -30,6 +43,8 @@
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import javax.swing.*;
+import java.io.IOException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -85,6 +100,31 @@
     @Autowired(required = false)
     @Lazy
     private OsBtmServiceI self;
+
+    /**
+     * 涓�浜涢粯璁ょ殑琛�
+     */
+    private final List<String> tableList = Arrays.asList("pl_qtemplate", "PL_QTEMPLATEDEF",
+            "pl_typeright", "plcommandparameter", "plpagedefination",
+            "pluilayout", "pltabbutton", "pltabpage", "plportalvi",
+            "plreleasedobj");
+
+    /**
+     * workFlowTables 涓殑琛ㄦ湁涓诲閿叧绯�,褰撹〃涓婚敭鎴栧敮涓�閿寮曠敤涓哄閿椂,
+     * 灏辩畻寮曠敤鏂规病鏈夋暟鎹�, truncate杩樹笉鏄笉鑳藉垹闄よ〃涓暟鎹�, 鑰� delete鍙互.
+     */
+    private final List<String> workFlowTableList = Arrays.asList(
+            //娴佺▼(鑷畾涔夎〃)
+            "PLPROCESSTEMPLATE", "PLPROCESSCATEGORY", "PLPROCESSTASK",//"PLRMTEMPLATEPROCESS",
+            "PLPROCESSTASKPROPERTY", "PLFLOWAPPROVEOPINION", "PLFLOWOBJECT", "PLFLOWINSTANCE",
+            "WORKFLOW_TASK_CC_TABLE", "PLTASKDESC", "PLTASKSASSIGNED", "JBPM_SUBPROCESSTEM",
+            "JBPM4_TASKANDUSERCONFIG", "PLREVOKEPOLICY", "JBPM4_TASKANDUSERCONFIGEX",
+            //娴佺▼(JBPM绯荤粺琛�)
+            "JBPM4_DEPLOYPROP", "JBPM4_HIST_DETAIL", "JBPM4_ID_MEMBERSHIP", "JBPM4_JOB",
+            "JBPM4_PARTICIPATION", "JBPM4_VARIABLE", "JBPM4_HIST_ACTINST", "JBPM4_HIST_VAR",
+            "JBPM4_ID_GROUP", "JBPM4_ID_USER", "JBPM4_LOB", "JBPM4_DEPLOYMENT",
+            "JBPM4_HIST_PROCINST", "JBPM4_HIST_TASK", "JBPM4_TASK", "JBPM4_SWIMLANE",
+            "JBPM4_EXECUTION", "JBPM4_PROPERTY");
 
     /**
      * 鏌ヨ鎵�鏈夌殑涓氬姟绫诲瀷
@@ -157,9 +197,11 @@
             vo.setAbstractFlag(btmItem.isAbstract);
             vo.setImplClass(btmItem.implClass);
             vo.setShape(btmItem.shape);
+            vo.setRevLevel(btmItem.revLevel);
             vo.setRevisionRuleId(btmItem.revRuleName);
             vo.setTableName(VciBaseUtil.getTableName(vo.getId()));
             vo.setInputRevisionFlag(btmItem.revInput);
+            vo.setDelimiter(btmItem.delimiter);
             if(StringUtils.isNotBlank(vo.getRevisionRuleId()) || vo.isInputRevisionFlag()){
                 vo.setRevisionFlag(true);
             }
@@ -529,12 +571,13 @@
         ervo.setTabRelViewList(relationVOList);
         return ervo;
     }
+
     /**
      * 鑾峰彇鎵�鏈変笟鍔$被鍨嬶紙鏍戝舰缁撴瀯锛�
      * @return 鏌ヨ缁撴灉
      */
     @Override
-    public BaseResult<List<Tree>> getTreeBizTypes() throws PLException {
+    public List<Tree> getTreeBizTypes() throws PLException {
         List<Tree> rootTreeList = new ArrayList<>();
         BizType[] bizTypes = getBizTypes("");
         BizType btItem = null;
@@ -553,8 +596,22 @@
             }
         }
 
-        return BaseResult.success(rootTreeList);
+        return rootTreeList;
     }
+
+    /**
+     * 鑾峰彇鎵�鏈変笟鍔$被鍨嬪悕绉伴泦鍚�
+     * @return
+     */
+    @Override
+    public List<String> getAllBtmName() throws PLException {
+        BizType[] bizTypes = platformClientUtil.getBtmService().getBizTypes("");
+        if(null != bizTypes && bizTypes.length > 0){
+            return Arrays.stream(bizTypes).map(bizType -> bizType.name).collect(Collectors.toList());
+        }
+        return null;
+    }
+
     /**
      * 鑾峰彇涓氬姟鍏ㄩ儴灞炴�х被鍨�
      * @param btmName 涓氬姟绫诲瀷鍚嶇О
@@ -610,6 +667,523 @@
             osBtms.add(vo);
         }
         return osBtms;
+    }
+
+    /**
+     * dto杞琩o瀵硅薄
+     * @return
+     */
+    private BizType dto2BizType(OsBtmTypeDTO dto){
+        BizType bizType = new BizType();
+        bizType.name =dto.getId();
+        bizType.isAbstract = dto.isAbstractFlag();
+        bizType.label = dto.getName();
+        bizType.fName = dto.getfName();
+        bizType.implClass = dto.getImplClass();
+        bizType.shape = "";
+        bizType.lifeCycle = dto.getLifeCycleId();
+        List<String> lcList = Arrays.asList(dto.getSubLifeCycleId().split(","));
+        if (lcList != null) {
+            bizType.lifeCycles = lcList.toArray(new String[0]);
+        } else {
+            bizType.lifeCycles = new String[0];
+        }
+        bizType.description = dto.getDescription();
+        bizType.revLevel = dto.getRevLevel();
+
+        bizType.revRuleName = dto.getRevisionRuleName();
+        bizType.revInput = dto.isInputRevisionFlag();
+
+        bizType.delimiter = (dto.getDelimiter() == null ? "" : dto.getDelimiter());
+
+        bizType.verRuleName = Short.parseShort(dto.getRevisionRuleName());
+
+        //bizType.imageName = dto.get;
+        //List<String> attrIdList = dto.getAttributesDTOList().stream().map(OsBtmTypeLinkAttributesDTO::getId).collect(Collectors.toList());
+
+        bizType.apNameArray = dto.getApNameArray();//attrIdList.toArray(new String[attrIdList.size()]);
+        String userId = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
+        long timeMillis = System.currentTimeMillis();
+        bizType.creator = Func.isBlank(dto.getCreator()) ? userId:dto.getCreator();
+        bizType.createTime = Func.isEmpty(dto.getCreateTime()) ? timeMillis:dto.getCreateTime().getTime();
+        bizType.modifier = userId;
+        bizType.modifyTime = timeMillis;
+        return bizType;
+    }
+
+    /**
+     * 鍒涘缓鏂扮殑涓氬姟绫诲瀷
+     * @return
+     * @throws PLException
+     */
+    @Override
+    public boolean addBtmType(OsBtmTypeDTO btmTypeDTO) throws PLException {
+        VciBaseUtil.alertNotNull(btmTypeDTO,"鍒涘缓鐨勪笟鍔$被鍨嬪璞�");
+        //涓氬姟绫诲瀷鍚嶇О妫�鏌�
+        checkName(btmTypeDTO.getId());
+        //鐢熷懡鍛ㄦ湡妫�鏌�
+        checkLifeCycle(btmTypeDTO);
+        //鐗堟湰瑙勫垯妫�鏌�
+        checkVersionInfo(btmTypeDTO);
+        BizType bizType = this.dto2BizType(btmTypeDTO);
+        return platformClientUtil.getBtmService().addBizType(bizType);
+    }
+
+    /**
+     * 鎵归噺鏂板涓氬姟绫诲瀷
+     * @param bizTypes
+     * @return
+     */
+    @Override
+    public boolean addBtmTypes(List<BizType> bizTypes) {
+        VciBaseUtil.alertNotNull(bizTypes,"鍒涘缓鐨勪笟鍔$被鍨嬪璞″垪琛�");
+        bizTypes.stream().forEach(bizType->{
+            try {
+                platformClientUtil.getBtmService().addBizType(bizType);
+            } catch (PLException e) {
+                e.printStackTrace();
+                String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
+                logger.error(exceptionMessage);
+                throw new VciBaseException(exceptionMessage);
+            }
+        });
+
+        return true;
+    }
+
+    /**
+     * 妫�鏌ヤ笟鍔$被鍨嬪悕绉版槸鍚﹀悎瑙�
+     * @param btmName
+     * @throws PLException
+     */
+    private void checkName(String btmName) throws PLException {
+        if (Func.isBlank(btmName)) {
+            throw new PLException("500",new String[]{"涓氬姟绫诲瀷鍚嶄笉鑳戒负绌�!"});
+        }
+
+        if (!btmName.matches("[a-z A-Z]*")) {
+            throw new PLException("500",new String[]{"涓氬姟绫诲瀷鍚嶅彧鑳戒负鑻辨枃瀛楁瘝!"});
+        }
+
+        int maxLength = platformClientUtil.getBtmService().getBTNameMaxLength();
+
+        if (btmName.length() > maxLength) {
+            throw new PLException("500",new String[]{"涓氬姟绫诲瀷鍚嶉暱搴︿笉鑳借秴杩�" + maxLength});
+        }
+
+        if (platformClientUtil.getBtmService().checkRowIsExists(btmName)) {
+            throw new PLException("500",new String[]{"涓氬姟绫诲瀷鍚嶅凡缁忓瓨鍦�"});
+        }
+    }
+
+    /**
+     * 鏄惁閫夋嫨鐢熷懡鍛ㄦ湡
+     *
+     * @return
+     */
+    private void checkLifeCycle(OsBtmTypeDTO btmTypeDTO) throws PLException {
+        if (Func.isBlank(btmTypeDTO.getLifeCycleId())) {
+            throw new PLException("500",new String[]{"鐢熷懡鍛ㄦ湡涓嶈兘涓虹┖"});
+        }
+    }
+
+    /**
+     * 閫夋嫨涓�绾х増鏈細蹇呴』閫夋嫨鎴栨墜宸ヨ緭鍏ョ増鏈彿瑙勫垯; 閫夋嫨浜岀骇鐗堟湰锛氬繀椤婚�夋嫨鎴栨墜宸ヨ緭鍏ョ増鏈彿瑙勫垯, (鐗堟鍙峰凡缁忛粯璁ら�夋嫨).
+     * @return
+     */
+    private void checkVersionInfo(OsBtmTypeDTO dto) throws PLException {
+        //闇�瑕佹墜鍔ㄨ緭鍏ョ増鏈椂revisionRuleName涓嶈兘涓虹┖
+        if (dto.isInputRevisionFlag() && Func.isBlank(dto.getRevisionRuleName())) {
+            throw new PLException("500",new String[]{"鐗堟湰鍙疯鍒欎笉鑳戒负绌�"});
+        }
+    }
+
+    /**
+     * 鐗堟湰鏈哄埗淇敼: 浠呭厑璁哥被鍨嬩粠"涓嶅彲淇"鍙樻洿鑷�"涓�绾х増鏈鐞嗘満鍒�","浜岀骇鐗堟湰绠$悊鏈哄埗杩涜璋冩暣"; "涓�绾х増鏈鐞嗘満鍒�"鍙樻洿鑷�"浜岀骇鐗堟湰绠$悊鏈哄埗";
+     * 涓ょ鏂瑰紡.
+     * @param dbBizType 褰撳墠淇敼鍓嶇殑涓氬姟绫诲瀷锛堝簱涓瓨鍌ㄧ殑锛�
+     * @param dto 褰撳墠淇敼涓氬姟绫诲瀷
+     * @throws PLException
+     */
+    private void checkRevLevel(BizType dbBizType,OsBtmTypeDTO dto) throws PLException {
+        if (dbBizType.revLevel == 1 && dto.getRevLevel()==0) {
+            throw new PLException("500",new String[]{"鐗堟湰鍙樻洿閿欒锛氫笉鑳戒粠涓�绾у彉涓轰笉鍙慨璁�"});
+        }
+
+        if (dbBizType.revLevel == 2 && (dto.getRevLevel() == 1 || dto.getRevLevel() == 0)) {
+            throw new PLException("500",new String[]{"鐗堟湰鍙樻洿閿欒锛氫笉鑳戒粠浜岀骇鍙樹负涓�绾ф垨涓嶅彲淇"});
+        }
+    }
+
+    /**
+     * 淇敼涓氬姟绫诲瀷
+     * @param btmTypeDTO
+     * @return
+     * @throws PLException
+     */
+    @Override
+    public boolean updateBtmType(OsBtmTypeDTO btmTypeDTO) throws PLException {
+        VciBaseUtil.alertNotNull(btmTypeDTO,"淇敼鐨勪笟鍔$被鍨嬪璞�");
+        //妫�鏌ョ敓鍛藉懆鏈熸槸鍚﹀悎瑙�
+        checkLifeCycle(btmTypeDTO);
+        //鏌ヨ鏁版嵁搴撲腑鐨勪笟鍔$被鍨�
+        String id = btmTypeDTO.getId();
+        BizType dbBizType = platformClientUtil.getBtmService().getBizTypeByName(id);
+        if(Func.isEmpty(dbBizType) || Func.isBlank(dbBizType.oid)){
+            throw new PLException("500",new String[]{"褰撳墠淇敼鐨勪笟鍔$被鍨嬩笉瀛樺湪锛�"});
+        }
+        //妫�鏌ョ増鏈鍒欎慨鏀规槸鍚﹀悎瑙�
+        checkRevLevel(dbBizType,btmTypeDTO);
+        checkVersionInfo(btmTypeDTO);
+        //澶勭悊涓氬姟绫诲瀷涓嬬殑灞炴��
+        List<String> lastAttrList = new ArrayList<>(Arrays.asList(btmTypeDTO.getApNameArray()));
+        //涓嶈兘绉婚櫎鐨勫睘鎬�
+        String[] unRemovableFields = null;
+        List<String> unRemovableFields_ = null;
+        //闇�瑕佺Щ闄ょ殑灞炴��
+        List<String> removableFields = null;
+        //淇敼鍓嶄笟鍔$被鍨嬪湪鏁版嵁搴撲腑宸插瓨鍦ㄧ殑鎵�鏈夊睘鎬�
+        String[] apNameArray = btmTypeDTO.getApNameArray();
+        Set<String> dbApNameArray = Arrays.stream(dbBizType.apNameArray)
+                .collect(Collectors.toSet());
+        //杩囨护鍑洪渶瑕佺Щ闄ょ殑灞炴��
+        removableFields = Arrays.stream(apNameArray)
+                .filter(ap -> !dbApNameArray.contains(ap))   // 杩囨护涓嶅湪 dbApSet 涓殑鍏冪礌
+                .collect(Collectors.toList());
+        // 褰撲笟鍔$被鍨嬭〃涓煇灞炴�у凡缁忔湁鍊�, 涓嶅垹闄よ灞炴��, 灏嗗凡缁忕Щ闄ょ殑灞炴�ф坊鍔犲洖鏉�
+        unRemovableFields = platformClientUtil.getBtmService().getUnRemovableFields(id, removableFields.toArray(new String[0]));
+        if (removableFields.size() > 0) {
+            //妫�鏌ヤ笟鍔$被鍨嬫槸鍚﹀叿鏈夊疄渚�
+            if (this.hasInstanceByBtmName(id)) {
+                //涓氬姟绫诲瀷宸叉湁瀹炰緥, 鍙兘鍒犻櫎娌℃湁鏁版嵁鐨勫垪
+                if (unRemovableFields != null && unRemovableFields.length > 0) {
+                    unRemovableFields_ = Arrays.asList(unRemovableFields);
+                    for (int i = 0; i < removableFields.size(); i++) {
+                        String abName = removableFields.get(i);
+                        if (unRemovableFields_.contains(abName)) {
+                            if (!lastAttrList.contains(abName)) {
+                                lastAttrList.add(abName);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        BizType bizType = dto2BizType(btmTypeDTO);
+        bizType.apNameArray = lastAttrList.toArray(new String[lastAttrList.size()]);
+        return platformClientUtil.getBtmService().updateBizType(bizType);
+    }
+
+    /**
+     * 鍒犻櫎涓氬姟绫诲瀷
+     * @param btmTypeDTO
+     * @return
+     * @throws PLException
+     */
+    @Override
+    public boolean deleteBtmType(OsBtmTypeDTO btmTypeDTO) throws PLException {
+        VciBaseUtil.alertNotNull(btmTypeDTO,"鍒犻櫎鐨勪笟鍔$被鍨�");
+        String btmName = btmTypeDTO.getId();
+        //鍙兘鍒犻櫎鍙跺瓙鑺傜偣
+        if(Func.isNotBlank(btmTypeDTO.getfName())){
+            throw new PLException("500",new String[]{"鍙兘鍒犻櫎鍙跺瓙鑺傜偣"});
+        }
+        // 涓氬姟绫诲瀷琚摼鎺ョ被鍨嬩娇鐢�, 涓嶈兘鍒犻櫎
+        List<String> usedNameList = linkTypeService.getUsedBtmLinkList(btmName);
+        if (usedNameList != null && usedNameList.size() > 0) {
+            throw new PLException("500",new String[]{"璇ョ被鍨嬪凡琚摼鎺ョ被鍨嬩娇鐢紝绂佹鍒犻櫎"});
+        }
+        // 涓氬姟绫诲瀷宸茬粡鐢熸垚浜嗕笟鍔″璞�, 涓嶈兘鍒犻櫎
+        if (hasInstanceByBtmName(btmName)) {
+            throw new PLException("500",new String[]{"璇ョ被鍨嬪凡鏈夊疄渚嬶紝绂佹鍒犻櫎"});
+        }
+        
+        BizType bizType = new BizType();
+        bizType.ts = btmTypeDTO.getTs().getTime();
+        bizType.oid = btmTypeDTO.getOid();
+        bizType.name = btmTypeDTO.getId();
+        return platformClientUtil.getBtmService().deleteBizType(bizType);
+    }
+
+    /**
+     * 涓�鑷存�ф鏌�
+     * @return
+     * @throws PLException
+     */
+    @Override
+    public BaseResult checkBtmConsistency() throws PLException {
+        String[] result = platformClientUtil.getBtmService().btmConsistencyCheck();
+        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);
+        }
+        if(dbCheckMap.size() < 1){
+            return BaseResult.successMsg("鏁版嵁搴撲腑鐨勮〃缁撴瀯涓庣被鍨嬩竴鑷�,鏃犻渶淇!!");
+        }else{
+            //闇�瑕佷慨澶嶆椂灏遍渶瑕佺晫闈㈠敜璧峰璇濇杩涜澶勭悊
+            List<Map> list = new ArrayList<>();
+            list.add(dbCheckMap);
+            BaseResult<List<Map>> listBaseResult = BaseResult.dataList(200, list, "闇�瑕佽繘琛屽垪鐨勪慨澶嶏紒锛�");
+            listBaseResult.setSuccess(false);
+            return listBaseResult;
+        }
+    }
+
+    /**
+     * 涓�鑷存�ф鏌ヤ慨澶嶅姛鑳�
+     * @param repairData
+     * @return
+     */
+    @Override
+    public BaseResult executeRepair(String repairData) throws Exception {
+        Map<String, String> dbCheckMap = new ObjectMapper().readValue(repairData, new TypeReference<Map<String,String>>(){});
+        List<String> list = this.getRepairDML(dbCheckMap);
+        if(list.size() < 1){
+            return BaseResult.success();
+        }
+        try {
+            String[] result = platformClientUtil.getBtmService().executeRepair(list.toArray(new String[0]));
+            return BaseResult.success(result);
+        }catch (PLException e){
+            return BaseResult.fail("涓氬姟绫诲瀷淇澶辫触锛屽師鍥狅細"+VciBaseUtil.getExceptionMessage(e));
+        }
+    }
+
+    /**
+     * 鍒涘缓瑙嗗浘
+     * @return
+     * @throws PLException
+     */
+    @Override
+    public boolean createView() throws PLException {
+        return platformClientUtil.getBtmService().createView();
+    }
+
+    /**
+     * 鍒犻櫎鏁版嵁鐣岄潰鐨勬煡璇�
+     * @return 涓氬姟绫诲瀷锛岄摼鎺ョ被鍨�
+     */
+    @Override
+    public BaseResult getObjectData() throws PLException {
+        //鑾峰彇涓氬姟绫诲瀷鍚嶇О闆嗗悎
+        List<String> allBtmName = this.getAllBtmName();
+        //鑾峰彇閾炬帴绫诲瀷鍚嶇О闆嗗悎
+        List<String> allLinkType = linkTypeService.getAllLtName();
+        Map<String,List> map = new HashMap<>();
+        map.put("btmType",allBtmName);
+        map.put("linkType",allLinkType);
+        map.put("table",tableList);
+        map.put("workFlow",workFlowTableList);
+        List<Map> list = new ArrayList<>();
+        list.add(map);
+        return BaseResult.dataList(list);
+    }
+
+    /**
+     * 鍒犻櫎鏁版嵁
+     * @param btmNames 涓氬姟绫诲瀷鍚�
+     * @param linkNames 閾炬帴绫诲瀷鍚�
+     * @return
+     * @throws PLException
+     */
+    @Override
+    public List<Map> truncateTable(String[] btmNames,String[] linkNames) throws PLException {
+        List<Map> returnMapList = new ArrayList<>();
+        Map<String, List<String>> map = new HashMap<>();
+        map.put("btmSuccess",new ArrayList<>());
+        map.put("btmFail",new ArrayList<>());
+        map.put("linkSuccess",new ArrayList<>());
+        map.put("linkFail",new ArrayList<>());
+        if(Func.isNotEmpty(btmNames)){
+            for(int i = 0; i < btmNames.length; i++){
+                String btName = btmNames[i];
+                try {
+                    if(platformClientUtil.getBtmService().truncateTable(btName)){
+                        //淇敼鎴愬姛璁板綍涓嬫垚鍔熺殑涓氬姟绫诲瀷鍚�
+                        map.get("btmSuccess").add(btName);
+                    }
+                } catch (PLException e1) {
+                    e1.printStackTrace();
+                    logger.error(VciBaseUtil.getExceptionMessage(e1));
+                    //淇敼澶辫触璁板綍涓嬪け璐ョ殑涓氬姟绫诲瀷鍚�
+                    map.get("btmFail").add(btName);
+                }
+            }
+        }
+        if(Func.isNotEmpty(linkNames)){
+            //truncate閾炬帴绫诲瀷鏁版嵁
+            for(int i = 0; i < linkNames.length; i++){
+                String ltName = linkNames[i];
+                try {
+                    if(platformClientUtil.getLinkTypeService().truncateTable(ltName)){
+                        map.get("linkSuccess").add(ltName);
+                    }
+                } catch (PLException e1) {
+                    e1.printStackTrace();
+                    logger.error(VciBaseUtil.getExceptionMessage(e1));
+                    map.get("linkFail").add(ltName);
+                }
+            }
+        }
+        returnMapList.add(map);
+        return returnMapList;
+    }
+
+    /**
+     * 鍒犻櫎鍏ㄩ儴绫诲瀷
+     * @return
+     * @throws PLException
+     */
+    @Override
+    public BaseResult deleteAllType() throws PLException {
+        DeleteType deleteType = new DeleteType();
+        //鑾峰彇寰呭垹闄ょ殑涓氬姟绫诲瀷
+        List<BizType> delBtList =  deleteType.getDelBtList();
+        //鑾峰彇寰呭垹闄ょ殑閾炬帴绫诲瀷
+        List<LinkType> ltNames = deleteType.getDelLtList();
+        //鑾峰彇寰呭垹闄ょ殑灞炴��
+        List<String> delAbList = deleteType.getDelAbList();
+        //鑾峰彇寰呭垹闄ょ殑鏋氫妇绫诲瀷
+        List<EnumType> delEnumList = deleteType.getDelEnumList();
+        //鑾峰彇寰呭垹闄ょ殑鐢熷懡鍛ㄦ湡
+        List<LifeCycle> delLCList = deleteType.getDelLCList();
+        //鑾峰彇寰呭垹闄ょ殑鐘舵��
+        List<StatePool> delStateList = deleteType.getDelSPList();
+        //鑾峰彇寰呭垹闄ょ殑鐗堟湰瑙勫垯
+        List<VersionRule> delVRList = deleteType.getDelVRList();
+        try {
+            platformClientUtil.getBtmService().deleteBtsAndTables(delBtList.toArray(new BizType[0]));
+        } catch (PLException e) {
+            e.printStackTrace();
+            String exceptionMessage = "娓呴櫎涓氬姟绫诲瀷鍜屽搴旇〃鏍兼椂鍑虹幇寮傚父锛屽師鍥狅細"+VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+        try {
+            ClientServiceProvider.getOMDService().getLinkTypeService().deleteLtsAndTables(ltNames.toArray(new LinkType[0]));
+        } catch (PLException e) {
+            e.printStackTrace();
+            String exceptionMessage = "娓呴櫎閾炬帴绫诲瀷鏃跺嚭鐜板紓甯革紝鍘熷洜锛�"+VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+        try {
+            AttributeDef[] abs = platformClientUtil.getAttributeService().getAttributeDefsByNames(delAbList.toArray(new String[0]));
+            platformClientUtil.getAttributeService().deleteAttributeDefs(abs);
+        } catch (PLException e) {
+            e.printStackTrace();
+            String exceptionMessage = "娓呴櫎灞炴�ф睜灞炴�ф椂鍑虹幇寮傚父锛屽師鍥狅細"+VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+        try {
+            platformClientUtil.getEnumService().deleteEnumTypes(delEnumList.toArray(new EnumType[0]));
+        } catch (PLException e) {
+            e.printStackTrace();
+            String exceptionMessage = "娓呴櫎鏋氫妇绫诲瀷鏃跺嚭鐜板紓甯革紝鍘熷洜锛�"+VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+        try {
+            platformClientUtil.getLifeCycleService().deleteLifeCycles(delLCList.toArray(new LifeCycle[0]));
+        } catch (PLException e) {
+            e.printStackTrace();
+            String exceptionMessage = "娓呴櫎鐢熷懡鍛ㄦ湡鏃跺嚭鐜板紓甯革紝鍘熷洜锛�"+VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+        try {
+            platformClientUtil.getStatePoolService().deleteStatePools(delStateList.toArray(new StatePool[0]));
+        } catch (PLException e) {
+            e.printStackTrace();
+            String exceptionMessage = "娓呴櫎鐘舵�佹睜鐘舵�佹椂鍑虹幇寮傚父锛屽師鍥狅細"+VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+        try {
+            platformClientUtil.getVersionService().deleteVersionRules(delVRList.toArray(new VersionRule[0]));
+        } catch (PLException e) {
+            e.printStackTrace();
+            String exceptionMessage = "娓呴櫎鐗堟湰瑙勫垯鏃跺嚭鐜板紓甯革紝鍘熷洜锛�"+VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            return BaseResult.fail(exceptionMessage);
+        }
+        return BaseResult.success("娓呴櫎鏁版嵁瀹屾垚!");
+    }
+
+    /**
+     * 鏍规嵁涓氬姟绫诲瀷鍚嶇О鍜屽叾涓嬬殑灞炴�у悕绉拌幏鍙栦篃鏈夌殑绱㈠紩
+     * @param btmName
+     * @param attrName
+     * @return
+     */
+    @Override
+    public List<String> getIndexByBtmAndAttrName(String btmName, String attrName) {
+        return null;
+    }
+
+    /**
+     * 鏍规嵁涓氬姟绫诲瀷鍚嶇О鍜屽叾涓嬬殑灞炴�у悕绉板垹闄ょ储寮�
+     * @param btmName
+     * @param attrName
+     * @return
+     */
+    @Override
+    public boolean delIndexByBtmAndAttrName(String btmName, String attrName) {
+        return false;
+    }
+
+    /**
+     * 缁欎笟鍔$被鍨嬩笅鐨勬寚瀹氬睘鎬ф柊澧炵储寮�
+     * @param addMap 濡傦細(btmName:part  attrName:name  indexName: PARTNAMEINDEX)
+     * @return
+     */
+    @Override
+    public boolean addIndex(Map<String, String> addMap) {
+        return false;
+    }
+
+    /**
+     * 鑾峰彇闇�瑕佷慨澶嶇殑浼猻ql
+     * @param dbCheckMap
+     * @return
+     */
+    private List<String> getRepairDML(Map<String, String> dbCheckMap) {
+        List<String> list = new ArrayList<String>();
+        for(Iterator<String> ite = dbCheckMap.keySet().iterator(); ite.hasNext();){
+            String type = ite.next();
+            String dml = dbCheckMap.get(type);
+            list.add(type + "/DML" + dml);
+        }
+        return list;
+    }
+
+    /**
+     * 鏈夊疄渚嬶細true 鏃犲疄渚嬶細false
+     *
+     * @return
+     */
+    private boolean hasInstanceByBtmName(String btmName) throws PLException {
+        //String tableName = OmdTools.getBTMTableName(btmName);
+        //boolean flag = DDLToolClient.getService().hasInstanceOralce(tableName);
+        boolean flag = false;
+        try {
+            flag = ClientServiceProvider.getOMDService().getBTMService().hasData(btmName);
+        } catch (PLException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+            String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
+            logger.error(exceptionMessage);
+            throw new PLException("500",new String[]{exceptionMessage});
+        }
+        return flag;
     }
 
     private List<Tree> getChildren(BizType[] bizTypes,BizType parentBIzType){
@@ -864,4 +1438,221 @@
         }
     }
 
+    /**
+     * 灏佽鍒犻櫎鍏ㄩ儴绫诲瀷鐩稿叧鐨勬煡璇㈡柟娉曠殑鍐呴儴绫�
+     */
+    private class DeleteType{
+
+        private List<String> exceptBts, exceptAbs, exceptEnums, exceptRev, exceptLCs, exceptStates;
+
+        {
+            exceptBts.add("workitem");
+            exceptBts.add(FileObjectType.FILE_DATA_TABLE);
+        }
+
+        /**
+         * 鑾峰彇闇�瑕佸垹闄ょ殑涓氬姟绫诲瀷
+         * @return
+         */
+        public List<BizType> getDelBtList() throws PLException {
+            List<BizType> list = new ArrayList<>();
+            BizType[] bts = platformClientUtil.getBtmService().getBizTypes("");
+            for(BizType bt : bts){
+                boolean exceptFlag = false;
+                for(String except : exceptBts){
+                    if(except.equalsIgnoreCase(bt.name)){
+                        exceptFlag = true;
+                        break;
+                    }
+                }
+                if(!exceptFlag){
+                    list.add(bt);
+                }
+            }
+            return list;
+        }
+
+        /**
+         * 鑾峰彇闇�瑕佸垹闄ょ殑閾炬帴绫诲瀷
+         * @return
+         */
+        public List<LinkType> getDelLtList() throws PLException {
+            LinkType[] linkTypes = platformClientUtil.getLinkTypeService().getLinkTypes();
+            return Arrays.asList(linkTypes);
+        }
+
+        /**
+         * 鑾峰彇寰呭垹闄ょ殑灞炴��
+         * @return
+         */
+        public List<String> getDelAbList() {
+            List<String> list = new ArrayList<String>();
+            AttributeDef[] attribItems = null;
+            try {
+                attribItems = platformClientUtil.getAttributeService().getAttributeDefs("", 0, 0);
+            } catch (PLException e) {
+                e.printStackTrace();
+            }
+            //渚濇嵁淇濈暀鐨勭被鍨嬫瀯閫犱繚鐣欑殑灞炴��
+            exceptAbs = new ArrayList<String>();
+            for(String except : exceptBts){
+                String[] btmApNameArray = null;
+                try {
+                    btmApNameArray = platformClientUtil.getBtmService().getAttributeNames(except);
+                } catch (PLException e) {
+                    e.printStackTrace();
+                }
+                if(btmApNameArray != null){
+                    for(String abName : btmApNameArray){
+                        if(!exceptAbs.contains(abName)){
+                            exceptAbs.add(abName);
+                        }
+                    }
+                }
+            }
+            //鏋勯�犲彲鍒犻櫎鐨勫睘鎬�
+            if(attribItems != null){
+                for(AttributeDef ab : attribItems){
+                    String abName = ab.name;
+                    if(!exceptAbs.contains(abName)){
+                        list.add(abName);
+                    }
+                }
+            }
+            return list;
+        }
+
+        /**
+         * 鑾峰彇寰呭垹闄ょ殑鏋氫妇绫诲瀷
+         * @return
+         */
+        public List<EnumType> getDelEnumList() {
+            List<EnumType> list = new ArrayList<EnumType>();
+            try {
+                //渚濇嵁淇濈暀鐨勭被鍨嬫瀯閫犱繚鐣欑殑灞炴��
+                exceptEnums = new ArrayList<String>();
+                EnumType[] emItems = ClientServiceProvider.getOMDService().getEnumService().getEnumTypes("", 0, 0);
+                AttributeDef[] abs = platformClientUtil.getAttributeService().getAttributeDefsByNames(exceptAbs.toArray(new String[0]));
+                for(AttributeDef ab : abs){
+                    OtherInfo otherInfo = OtherInfo.getOtherInfoByText(ab.other);
+                    String enumName = otherInfo.getEnumName();
+                    if(enumName != null && !enumName.equals("") && !exceptEnums.contains(enumName)){
+                        exceptEnums.add(enumName);
+                    }
+                }
+                for(EnumType em : emItems){
+                    if(!exceptEnums.contains(em.name)){
+                        list.add(em);
+                    }
+                }
+            } catch (PLException e) {
+                e.printStackTrace();
+            }
+            return list;
+        }
+
+        /**
+         * 鑾峰彇寰呭垹闄ょ殑鐢熷懡鍛ㄦ湡
+         * @return
+         */
+        public List<LifeCycle> getDelLCList(){
+            List<LifeCycle> list = new ArrayList<LifeCycle>();
+            exceptLCs = new ArrayList<String>();
+            exceptStates = new ArrayList<String>();
+            for(String btName : exceptBts){
+                try {
+                    BizType bt = platformClientUtil.getBtmService().getBizTypeByName(btName);
+                    String lcName = bt.lifeCycle;
+                    if(lcName != null && !lcName.equals("") && !exceptLCs.contains(lcName)){
+                        exceptLCs.add(lcName);
+                    }
+                } catch (PLException e) {
+                    e.printStackTrace();
+                }
+            }
+
+            LifeCycle[] lcs = null;
+            try {
+                lcs = platformClientUtil.getLifeCycleService().getLifeCycles();
+            } catch (PLException e) {
+                e.printStackTrace();
+            }
+            if(lcs != null){
+                for(LifeCycle lc : lcs){
+                    String name = lc.name;
+                    if(name != null && !name.equals("") && !exceptLCs.contains(name)){
+                        list.add(lc);
+                    }else{
+                        //淇濈暀鐨勭姸鎬佹睜
+                        Bound[] bounds = lc.bounds;
+                        for(Bound bound : bounds){
+                            String sName = bound.name;
+                            exceptStates.add(sName);
+                        }
+                    }
+                }
+            }
+            return list;
+        }
+
+        /**
+         * 鑾峰彇寰呭垹闄ょ殑鐘舵��
+         * @return
+         */
+        public List<StatePool> getDelSPList(){
+            List<StatePool> list = new ArrayList<StatePool>();
+            StatePool[] states = null;
+            try {
+                states = platformClientUtil.getStatePoolService().getStatePools();
+            } catch (PLException e) {
+                e.printStackTrace();
+            }
+            if(states != null){
+                for(StatePool state : states){
+                    String name = state.name;
+                    if(name != null && !name.equals("") && !exceptStates.contains(name)){
+                        list.add(state);
+                    }
+                }
+            }
+            return list;
+        }
+
+        /**
+         * 鑾峰彇寰呭垹闄ょ殑鐗堟湰瑙勫垯
+         * @return
+         */
+        public List<VersionRule> getDelVRList(){
+            List<VersionRule> list = new ArrayList<VersionRule>();
+            exceptRev = new ArrayList<String>();
+            for(String btName : exceptBts){
+                try {
+                    BizType bt = platformClientUtil.getBtmService().getBizTypeByName(btName);
+                    String revName = bt.revRuleName;
+                    if(revName != null && !revName.equals("") && !exceptRev.contains(revName)){
+                        exceptRev.add(revName);
+                    }
+                } catch (PLException e) {
+                    e.printStackTrace();
+                }
+            }
+            VersionRule[] revs = null;
+            try {
+                revs = platformClientUtil.getVersionService().getVersionRules();
+            } catch (PLException e) {
+                e.printStackTrace();
+            }
+            if(revs != null){
+                for(VersionRule rev : revs){
+                    String name = rev.name;
+                    if(name != null && !name.equals("") && !exceptRev.contains(name)){
+                        list.add(rev);
+                    }
+                }
+            }
+            return list;
+        }
+
+    }
+
 }

--
Gitblit v1.9.3