ludc
2024-09-13 8c9f15cc8a3c3e6f4a4404574d39732b624289a6
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java
@@ -11,8 +11,10 @@
import com.vci.corba.portal.data.*;
import com.vci.dto.RoleRightDTO;
import com.vci.dto.UIAuthorDTO;
import com.vci.frameworkcore.compatibility.SmRoleQueryServiceI;
import com.vci.model.PLDefination;
import com.vci.pagemodel.*;
import com.vci.starter.poi.bo.SheetDataSet;
import com.vci.starter.poi.bo.WriteExcelData;
import com.vci.starter.poi.bo.WriteExcelOption;
import com.vci.starter.poi.util.ExcelUtil;
@@ -33,13 +35,21 @@
import com.vci.web.util.UITools;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.swing.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@@ -509,13 +519,358 @@
    /**
     * 导入UI上下文
     * @param file
     * @param isCovered 是否覆盖
     * @param selectBtm 选择的业务类型
     * @return
     */
    @Override
    public BaseResult impUIContextData(MultipartFile file) {
    public BaseResult impUIContextData(File file,boolean isCovered,String selectBtm) {
        /*VciBaseUtil.alertNotNull(file,"excel文件");
        if(!file.exists()){
            throw new VciBaseException("导入的excel文件不存在,{0}",new String[]{file.getPath()});
        }
        //读取excel表
        List<SheetDataSet> sheetDataSets = ExcelUtil.readDataObjectFromExcel(file);
        try {
            PLUILayout[] plpagelayoutdefinations = null;
            try {
                SheetDataSet plpagelayoutdefnationsheet = sheetDataSets.get(0);
                SheetDataSet pltabpagesheet = sheetDataSets.get(1);
                SheetDataSet plpagedefinationsheet = sheetDataSets.get(2);
                SheetDataSet pltabbuttonsheet = sheetDataSets.get(3);
                SheetDataSet plcommondparamsheet = sheetDataSets.get(4);
                *//*HSSFSheet plpagelayoutdefnationsheet = readworkbook.getSheet("PlpageLayoutDefnation");
                HSSFSheet pltabpagesheet = readworkbook.getSheet("Pltabpage");
                HSSFSheet plpagedefinationsheet = readworkbook.getSheet("Plpagedefination");
                HSSFSheet pltabbuttonsheet = readworkbook.getSheet("Pltabbutton");
                HSSFSheet plcommondparamsheet = readworkbook.getSheet("PlcommondParam");*//*
                SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
                Map<PLUILayout,List<PLTabPage>> pdMap = new HashMap<>();
                Map<PLTabPage,List<PLPageDefination>> tdMap = new HashMap<>();
                Map<PLPageDefination,List<PLTabButton>> dbMap = new HashMap<>();
                Map<PLTabButton,List<PLCommandParameter>> bcMap = new HashMap<>();
                List<PLUILayout> plpagelayoutdefinationList = new ArrayList<PLUILayout>();
                List<PLTabPage> pltabpagelist = new ArrayList<PLTabPage>();
                List<PLPageDefination> plpagedefinationlist = new ArrayList<PLPageDefination>();
                List<PLTabButton> pltabbuttonlist = new ArrayList<PLTabButton>();
                List<PLCommandParameter> plcommandparameterlist = new ArrayList<PLCommandParameter>();
                StringBuffer checkplpagelayoutdefination = new StringBuffer();
                StringBuffer checkplpagelayoutdefinationPlcode = new StringBuffer();
                StringBuffer plActionIDNulls = new StringBuffer();
                //add by caill start 初始化标记
                int count=0;
                int preCount=0;
                String preOID="";
                String doublePreOID="";
                //add by caill end
                PLAction[] allPLAction = platformClientUtil.getUIService().getAllPLAction();
                Map<String,String> relation = null;
                for(int i=0;i<=plpagelayoutdefnationsheet.getLastRowNum();i++){
                    pltabpagelist = new ArrayList<PLTabPage>();
                    PLUILayout p = new PLUILayout();
                    HSSFRow readrow = plpagelayoutdefnationsheet.getRow(i);
                    if(readrow==null){
                        break;
                    }
                    plpagelayoutdefinations = platformClientUtil.getUIService().getPLUILayoutsByRelatedType(btmName);
                    p.plOId = ObjectUtility.getNewObjectID36();
                    HSSFCell readcell = readrow.getCell(0);
                    p.plName = readcell.getStringCellValue();
                    readcell = readrow.getCell(1);
                    p.plCode = readcell.getStringCellValue();
                    //add by caill start
                    //遍历UI名称
                    for(PLUILayout pd : plpagelayoutdefinations){
                        if(pd.plName.equals(p.plName) && isCovered){
                            throw new VciBaseException(pd.plName+"名称已经存在,是否覆盖?");
                        }
                        //根据UI上下文做判断
                        if(pd.plCode.equals(p.plCode)){
                            count=1;
                            preOID=pd.plOId;  //如果UI上下文相同,就把系统中的id赋值给新导入的id
                            p.plOId=pd.plOId;
                        }
                    }
                    //add by caill end
                    readcell = readrow.getCell(2);
                    plpageLayoutDefinationId = readcell.getStringCellValue();
                    readcell = readrow.getCell(3);
                    String name = readcell.getStringCellValue();
                    readcell = readrow.getCell(4);
                    p.plRelatedType = readcell.getStringCellValue();
                    readcell = readrow.getCell(5);
                    p.plIsShowNavigator = (short) readcell.getNumericCellValue();
                    readcell = readrow.getCell(6);
                    p.plIsShowTab = (short) readcell.getNumericCellValue();
                    readcell = readrow.getCell(7);
                    p.plIsShowForm = (short) readcell.getNumericCellValue();
                    //选择的和导入的业务类型节点不一致
                    if(!selectBtm.equals(name)){
                        throw new VciBaseException("请选择要导入的类型节点名称!");
                    }
                    plpagelayoutdefinationList.add(p);
                    for(int j=0;j<=pltabpagesheet.getLastRowNum();j++){
                        plpagedefinationlist = new ArrayList<PLPageDefination>();
                        PLTabPage pt = new PLTabPage();
                        HSSFRow readrow1 = pltabpagesheet.getRow(j);
                        if(readrow1==null){
                            break;
                        }
                        pt.plOId = ObjectUtility.getNewObjectID36();
                        HSSFCell readcell1 = readrow1.getCell(0);
                        pt.plName = readcell1.getStringCellValue();
                        readcell1 = readrow1.getCell(1);
                        pt.plCode = readcell1.getStringCellValue();
                        //add by caill start
                        if(count==1) {
                            PLTabPage[] PLTabPages = platformClientUtil.getUIService().getPLTabPagesByPageDefinationOId(preOID);
                            //遍历控制区表格
                            for(PLTabPage pl : PLTabPages){
                                if(pl.plCode.equals(pt.plCode)){
                                    pt.plOId=pl.plOId; //如果控制区表格的编码和导入的编码一样,就把控制区id赋值给新导入的id
                                    preCount=1;
                                    doublePreOID=pl.plOId;
                                }
                            }
                        }
                        //add by caill end
                        readcell1 = readrow1.getCell(2);
                        pt.plSeq = (short) readcell1.getNumericCellValue();
                        readcell1 = readrow1.getCell(3);
                        pt.plContextOId = readcell1.getStringCellValue();
                        readcell1 = readrow1.getCell(4);
                        pt.plDesc = readcell1.getStringCellValue();
                        readcell1 = readrow1.getCell(5);
                        pt.plIsOpen = (short) readcell1.getNumericCellValue();
                        readcell1 = readrow1.getCell(6);
                        pt.plAreaType = (short) readcell1.getNumericCellValue();
                        readcell1 = readrow1.getCell(7);
                        pt.plOpenExpression = readcell1.getStringCellValue();
                        readcell1 = readrow1.getCell(8);
                        pt.plLicensOrs = readcell1.getStringCellValue();
                        readcell1 = readrow1.getCell(9);
                        pt.plLabel = readcell1.getStringCellValue();
                        readcell1 = readrow1.getCell(10);
                        String plPageContextOId = readcell1.getStringCellValue();
                        if(pt.plContextOId.equals(plpageLayoutDefinationId)){
                            pt.plContextOId = p.plOId;
                            pltabpagelist.add(pt);
                            for(int k=0;k<=plpagedefinationsheet.getLastRowNum();k++){
                                pltabbuttonlist = new ArrayList<PLTabButton>();
                                PLPageDefination plpagedefination  = new PLPageDefination();
                                HSSFRow readrow2 = plpagedefinationsheet.getRow(k);
                                if(readrow2==null){
                                    break;
                                }
                                plpagedefination.plOId = ObjectUtility.getNewObjectID36();
                                HSSFCell readcell2 = readrow2.getCell(0);
                                plpagedefination.name = readcell2.getStringCellValue();
                                //add by caill start
                                //最后一级的判断
                                if(preCount==1) {
                                    PLPageDefination[] PLPageDefinations = platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(doublePreOID);
                                    for(PLPageDefination plp : PLPageDefinations) {
                                        if(plp.name.equals(plpagedefination.name)) {
                                            plpagedefination.plOId=plp.plOId;
                                        }
                                    }
                                }
                                //add by caill end
                                readcell2 = readrow2.getCell(1);
                                plpagedefination.plDefination = readcell2.getStringCellValue();
                                readcell2 = readrow2.getCell(2);
                                plpagedefination.seq = (short) readcell2.getNumericCellValue();
                                readcell2 = readrow2.getCell(3);
                                plpagedefination.plTabPageOId = readcell2.getStringCellValue();
                                readcell2 = readrow2.getCell(4);
                                plpagedefination.desc = readcell2.getStringCellValue();
                                readcell2 = readrow2.getCell(5);
                                plpagedefination.plType = (short) readcell2.getNumericCellValue();
                                readcell2 = readrow2.getCell(6);
                                plTableOId = readcell2.getStringCellValue();
                                if(plpagedefination.plTabPageOId.equals(plPageContextOId)){
                                    plpagedefination.plTabPageOId = pt.plOId;
                                    plpagedefinationlist.add(plpagedefination);
                                    //保存新旧oid的关系,在确定层级关系时使用
                                    relation = new HashMap<String,String>();
                                    for(int a=0;a<=pltabbuttonsheet.getLastRowNum();a++){
                                        HSSFRow readrow3 = pltabbuttonsheet.getRow(a);
                                        if(readrow3!=null){
                                            HSSFCell readcell3 = readrow3.getCell(7);
                                            plCommandOId = readcell3.getStringCellValue();
                                            String newOId = ObjectUtility.getNewObjectID36();
                                            relation.put(plCommandOId, newOId);
                                        }
                                    }
                                    for(int a=0;a<=pltabbuttonsheet.getLastRowNum();a++){
                                        plcommandparameterlist = new ArrayList<PLCommandParameter>();
                                        PLTabButton plTabButton = new PLTabButton();
                                        HSSFRow readrow3 = pltabbuttonsheet.getRow(a);
                                        if(readrow3==null){
                                            break;
                                        }
                                        plTabButton.plOId = ObjectUtility.getNewObjectID36();
                                        HSSFCell readcell3 = readrow3.getCell(0);
                                        plTabButton.plLabel = readcell3.getStringCellValue();
                                        readcell3 = readrow3.getCell(1);
                                        plTabButton.plAreaType = readcell3.getStringCellValue();
                                        readcell3 = readrow3.getCell(2);
                                        plTabButton.plTableOId = readcell3.getStringCellValue();
                                        readcell3 = readrow3.getCell(3);
                                        plTabButton.plSeq = (short) readcell3.getNumericCellValue();
                                        String plActionId = "";
                                        //PLAction[] allPLAction = Tool.getService().getAllPLAction();
                                        for(PLAction action : allPLAction){
                                            if((readrow3.getCell(4).getStringCellValue()!=null&&!"".equals(readrow3.getCell(4).getStringCellValue())
                                            )&&(readrow3.getCell(4).getStringCellValue().trim().equals(action.plCode.trim()))
                                            ){
                                                plActionId = action.plOId;
                                                break;
                                            }
                                        }
                                        if(plActionId==null||"".equals(plActionId)){
                                            if(!plActionIDNulls.toString().contains(readrow3.getCell(4).getStringCellValue())){
                                                plActionIDNulls.append("\n\tAction编号:"+readrow3.getCell(4).getStringCellValue());
                                            }
                                        }
                                        plTabButton.plActionOId = plActionId;
                                        readcell3 = readrow3.getCell(5);
                                        plTabButton.plAreaType = readcell3.getStringCellValue();
                                        readcell3 = readrow3.getCell(6);
                                        plTabButton.plDesc = readcell3.getStringCellValue();
                                        readcell3 = readrow3.getCell(8);
                                        String parentOid = readcell3.getStringCellValue();//父oid
                                        readcell3 = readrow3.getCell(7);
                                        plCommandOId = readcell3.getStringCellValue();
                                        readcell3 = readrow3.getCell(9);
                                        if(readcell3 != null) {
                                            plTabButton.displayMode = readcell3.getStringCellValue();
                                        }
                                        readcell3 = readrow3.getCell(10);
                                        if(readcell3 != null) {
                                            plTabButton.iconPath = readcell3.getStringCellValue();
                                        }
                                        readcell3 = readrow3.getCell(11);
                                        if(readcell3 != null) {
                                            plTabButton.authorization = readcell3.getStringCellValue();
                                        }
                                        readcell3 = readrow3.getCell(12);
                                        if(readcell3 != null) {
                                            plTabButton.show = readcell3.getStringCellValue();
                                        }
                                        //赋予保存好的值,来保证层级关系不会丢失
                                        plTabButton.plOId = relation.get(plCommandOId);
                                        if(parentOid != null && parentOid.length() > 0) {
                                            plTabButton.plParentOid =
                                                    relation.get(parentOid) == null ? "" : relation.get(parentOid);
                                        }
                                        if(plTabButton.plTableOId.equals(plTableOId)){
                                            plTabButton.plTableOId = plpagedefination.plOId;
                                            pltabbuttonlist.add(plTabButton);
                                            for(int b=0;b<=plcommondparamsheet.getLastRowNum();b++){
                                                PLCommandParameter plCommandParameter = new PLCommandParameter();
                                                HSSFRow readrow4 = plcommondparamsheet.getRow(b);
                                                if(readrow4==null){
                                                    break;
                                                }
                                                plCommandParameter.plOId = ObjectUtility.getNewObjectID36();
                                                HSSFCell readcell4 = readrow4.getCell(0);
                                                plCommandParameter.plCommandOId = readcell4.getStringCellValue();
                                                readcell4 = readrow4.getCell(1);
                                                plCommandParameter.plKey = readcell4.getStringCellValue();
                                                readcell4 = readrow4.getCell(2);
                                                plCommandParameter.plValue = readcell4.getStringCellValue();
                                                if(plCommandParameter.plCommandOId.equals(plCommandOId)){
                                                    plCommandParameter.plCommandOId = plTabButton.plOId;
                                                    plcommandparameterlist.add(plCommandParameter);
                                                }
                                            }
                                            bcMap.put(plTabButton, plcommandparameterlist);
                                        }
                                    }
                                    dbMap.put(plpagedefination, pltabbuttonlist);
                                }
                            }
                            tdMap.put(pt, plpagedefinationlist);
                        }
                    }
                    pdMap.put(p, pltabpagelist);
                }
                if(plActionIDNulls.length()>0){
                    VCIOptionPane.showMessage(PLTApplication.frame, plActionIDNulls.toString()+"不存在!");
                    return false;
                }
                //删除原有button数据
                if(tdMap.size() > 0) {
                    for(List<PLPageDefination> list : tdMap.values()) {
                        for(PLPageDefination ppd : list) {
                            if(ppd.plOId != null && ppd.plOId.length() > 0) {
                                PLTabButton[] buttons = platformClientUtil.getUIService().getPLTabButtonsByTableOId(ppd.plOId);
                                if(buttons != null && buttons.length > 0) {
                                    for(PLTabButton ptb : buttons) {
                                        platformClientUtil.getUIService().deletePLTabButtonByID(ptb.plOId);
                                    }
                                }
                            }
                        }
                    }
                }
                for(PLUILayout plPageLayoutDefination : plpagelayoutdefinationList){
                    List<PLTabPage> pltabpagelists = pdMap.get(plPageLayoutDefination);
                    for(PLTabPage pltabpage:pltabpagelists){
                        List<PLPageDefination> plpagedefinationlists = tdMap.get(pltabpage);
                        for(PLPageDefination plpagedefination : plpagedefinationlists){
                            List<PLTabButton> pltabbuttons = dbMap.get(plpagedefination);
                            for(PLTabButton pltabbutton : pltabbuttons){
                                List<PLCommandParameter> plcommandParams = bcMap.get(pltabbutton);
                                for(PLCommandParameter plcommandparameter : plcommandParams){
                                    plcommandparameter.plCreateUser = sessionInfo.getUserId();
                                    plcommandparameter.plModifyUser = sessionInfo.getUserId();
                                    platformClientUtil.getUIService().savePLCommandParameter(plcommandparameter);
                                }
                                pltabbutton.plCreateUser = sessionInfo.getUserId();
                                pltabbutton.plModifyUser = sessionInfo.getUserId();
                                platformClientUtil.getUIService().savePLTabButton(pltabbutton);
                            }
                            platformClientUtil.getUIService().savePLPageDefination(plpagedefination);
                        }
                        pltabpage.plCreateUser = sessionInfo.getUserId();
                        pltabpage.plModifyUser = sessionInfo.getUserId();
                        platformClientUtil.getUIService().savePLTabPage(pltabpage);
                    }
                    plPageLayoutDefination.plCreateUser = sessionInfo.getUserId();
                    plPageLayoutDefination.plModifyUser = sessionInfo.getUserId();
                    platformClientUtil.getUIService().savePLUILayout(plPageLayoutDefination);
                }
                return true;
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            } catch (PLException e) {
                e.printStackTrace();
                return false;
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return false;
        }
*/
        return null;
    }
@@ -2588,7 +2943,7 @@
                }
            } else {
                // 链接类型为空时,只需要检查业务类型下的查询模板是否有效
                if(!(super.checkQTNameTxtIsOk("查询模板", queryTemplateName, btmType))){
                if(!(super.checkQTNameTxtIsOk("查询模板", queryTemplateName, btmType,true))){
                    res = false;
                    return res;
                }