package com.vci.web.service.impl;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSON;
|
import com.vci.common.utility.ObjectUtility;
|
import com.vci.corba.common.PLException;
|
import com.vci.corba.common.data.UserEntityInfo;
|
import com.vci.corba.framework.data.RoleRightInfo;
|
import com.vci.corba.omd.btm.BizType;
|
import com.vci.corba.portal.PortalService;
|
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;
|
import com.vci.starter.web.exception.VciBaseException;
|
import com.vci.starter.web.pagemodel.*;
|
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.pagemodel.SessionInfo;
|
import com.vci.starter.web.util.*;
|
import com.vci.web.service.OsBtmServiceI;
|
import com.vci.web.service.UIManagerServiceI;
|
import com.vci.web.util.*;
|
import com.vci.web.util.BeanUtil;
|
import org.apache.commons.lang3.StringUtils;
|
import com.vci.web.util.Func;
|
import com.vci.web.util.PlatformClientUtil;
|
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;
|
import java.util.stream.Collectors;
|
import java.util.regex.Pattern;
|
|
/**
|
* UI定义服务界面相关接口
|
* @author ludc
|
* @date 2024/8/28 17:05
|
*/
|
@Service
|
public class UIManagerServiceImpl implements UIManagerServiceI {
|
|
/**
|
* 平台的调用工具类
|
*/
|
@Resource
|
private PlatformClientUtil platformClientUtil;
|
|
/**
|
* 角色
|
*/
|
@Resource
|
private SmRoleQueryServiceI smRoleQueryServiceI;
|
/***
|
* 是否是管理员
|
*/
|
@Autowired
|
RightControlUtil rightControlUtil;
|
|
/**
|
* 业务类型
|
*/
|
@Resource
|
private OsBtmServiceI osBtmServiceI;
|
|
/**
|
* 日志
|
*/
|
private Logger logger = LoggerFactory.getLogger(getClass());
|
|
/**
|
* 排序比较器
|
*/
|
private Comparator<PLUILayout> pageLayoutComparator = new Comparator<PLUILayout>() {
|
@Override
|
public int compare(PLUILayout o1, PLUILayout o2) {
|
return o1.plCode.compareTo(o2.plCode);
|
}
|
};
|
|
/**
|
* 排序比较器
|
*/
|
private Comparator<PLDefinationVO> pageDefinationComparator = new Comparator<PLDefinationVO>() {
|
@Override
|
public int compare(PLDefinationVO o1, PLDefinationVO o2) {
|
return new Integer(o1.getSeq()).compareTo(new Integer(o2.getSeq()));
|
}
|
};
|
|
/**
|
* 根据业务类型名查询ui上下文数据
|
* @param baseQueryObject
|
* @return
|
* @throws PLException
|
*/
|
@Override
|
public DataGrid gridUIContextData(BaseQueryObject baseQueryObject) throws PLException {
|
VciBaseUtil.alertNotNull(baseQueryObject,"条件对象");
|
int page = baseQueryObject.getPage();
|
int limit = baseQueryObject.getLimit();
|
Map<String, String> conditionMap = baseQueryObject.getConditionMap();
|
String btmName = conditionMap.getOrDefault("btmName","");
|
if(Func.isEmpty(conditionMap) || Func.isBlank(btmName)){
|
throw new PLException("500",new String[]{"未获取到业务类型名称!"});
|
}
|
String txtName = conditionMap.getOrDefault("txtName","").trim();
|
String txtCode = conditionMap.getOrDefault("txtCode","").trim();
|
PortalService.GetPLUILayoutsByRelatedTypeAndQueryInfoResult result = platformClientUtil.getUIService()
|
.getPLUILayoutsByRelatedTypeAndQueryInfo(btmName, txtName, txtCode, page, limit);
|
DataGrid<PLUILayout> dataGrid = new DataGrid<>();
|
int total = (int)result.total;
|
dataGrid.setTotal(total);
|
dataGrid.setLimit(limit);
|
dataGrid.setPage(page);
|
PLUILayout[] res = result.returnValue;
|
Arrays.sort(res,pageLayoutComparator);
|
List<PLUILayout> pluiLayouts = Arrays.asList(res);
|
dataGrid.setData(pluiLayouts);
|
return dataGrid;
|
}
|
|
/**
|
* ton通过业务类型和名称查询
|
* @param btemName
|
* @param context
|
* @return
|
* @throws PLException
|
*/
|
public List<PLUILayout> getUIContextDataByBtName(String btemName,String context) throws PLException {
|
VciBaseUtil.alertNotNull(btemName,"业务类型");
|
List<PLUILayout> pluiLayoutList=new ArrayList<>();
|
List<String> contextList= new ArrayList<>();
|
if(StringUtils.isNotBlank(context)){
|
contextList=VciBaseUtil.str2List(context);
|
}else{
|
contextList.add("");
|
}
|
contextList.stream().forEach(code->{
|
PLUILayout[] pluiLayouts= new PLUILayout[0];
|
try {
|
pluiLayouts = platformClientUtil.getUIService().getPLUILayoutEntityByTypeAndCode(btemName,code);
|
} catch (PLException e) {
|
e.printStackTrace();
|
}
|
if(pluiLayouts!=null&&pluiLayouts.length>0) {
|
pluiLayoutList.addAll(Arrays.stream(pluiLayouts).collect(Collectors.toList()));
|
}
|
});
|
|
return pluiLayoutList;
|
}
|
|
/**
|
* 给业务类型下添加ui上下文
|
* @param pluiLayout
|
* @return
|
* @throws PLException
|
*/
|
@Override
|
public boolean saveUIContextData(PLUILayout pluiLayout) throws VciBaseException {
|
try {
|
//ui上下文对象校验
|
canContinue(pluiLayout);
|
String code = pluiLayout.plCode;
|
String name = pluiLayout.plName;
|
boolean isExist = nameOrCodeIsExist(pluiLayout, false);
|
//是否存在校验
|
if (isExist){
|
throw new VciBaseException("上下文编码或名称已经存在,请检查!");
|
}
|
|
PLUILayout pld = new PLUILayout();
|
pld.plOId = ObjectUtility.getNewObjectID36();
|
pld.plCode = code;
|
pld.plName = name;
|
pld.plRelatedType = pluiLayout.plRelatedType;
|
pld.plDesc = pluiLayout.plDesc;
|
SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
|
pld.plCreateUser = sessionInfo.getUserId();
|
pld.plModifyUser = sessionInfo.getUserId();
|
//导航区
|
pld.plIsShowForm = pluiLayout.plIsShowForm;
|
//控制区
|
pld.plIsShowNavigator = pluiLayout.plIsShowNavigator;
|
//操作区
|
pld.plIsShowTab = pluiLayout.plIsShowTab;
|
//执行保存
|
return platformClientUtil.getUIService().savePLUILayout(pld);
|
} catch (PLException e) {
|
e.printStackTrace();
|
String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
|
logger.error(exceptionMessage);
|
throw new VciBaseException(exceptionMessage);
|
}
|
}
|
|
/**
|
* 修改ui上下文
|
* @param pluiLayout
|
* @return
|
* @throws PLException
|
*/
|
@Override
|
public boolean updateUIContextData(PLUILayout pluiLayout) throws VciBaseException {
|
this.canContinue(pluiLayout);
|
try {
|
String code = pluiLayout.plCode;
|
String name = pluiLayout.plName;
|
boolean isExist = nameOrCodeIsExist(pluiLayout, true);
|
if (isExist){
|
throw new VciBaseException("上下文编码或名称已经存在,请检查!");
|
}
|
|
PLUILayout pld = new PLUILayout();
|
pld.plOId = pluiLayout.plOId;
|
pld.plCode = code;
|
pld.plName = name;
|
pld.plRelatedType = pluiLayout.plRelatedType;
|
pld.plDesc = pluiLayout.plDesc;
|
pld.plCreateUser = pluiLayout.plCreateUser;
|
pld.plModifyUser = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
|
|
//导航区
|
pld.plIsShowForm = pluiLayout.plIsShowForm;
|
//控制区
|
pld.plIsShowNavigator = pluiLayout.plIsShowNavigator;
|
//操作区
|
pld.plIsShowTab = pluiLayout.plIsShowTab;
|
//执行修改
|
return platformClientUtil.getUIService().updatePLUILayout(pld);
|
} catch (PLException e) {
|
e.printStackTrace();
|
String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
|
logger.error(exceptionMessage);
|
throw new VciBaseException(exceptionMessage);
|
}
|
}
|
|
/**
|
* 根据主键和业务类型oid删除ui上下文数据
|
* @return
|
*/
|
@Override
|
public boolean delUIContextData(String[] oids,String plRelatedType) throws PLException {
|
VciBaseUtil.alertNotNull(oids,"待删除的对象列表");
|
//删除方法中有关联数据删除的操作逻辑,但是这个方法存在问题就是删除的数据并没有将缓存的东西清理干净
|
return platformClientUtil.getUIService().deletePLUILayoutByOidsForCascade(oids);
|
}
|
|
/**
|
* 克隆ui上下文(具备关联数据的克隆)
|
* @param pluiLayoutCloneVO
|
* @return
|
*/
|
@Override
|
public boolean cloneUIContextData(PLUILayoutCloneVO pluiLayoutCloneVO) throws PLException {
|
VciBaseUtil.alertNotNull(
|
pluiLayoutCloneVO,"克隆参数对象",
|
pluiLayoutCloneVO.getSourcePLUILayout(),"克隆的源对象信息",
|
pluiLayoutCloneVO.getCloneName(),"克隆的对象名称",
|
pluiLayoutCloneVO.getCloneContextCode(),"克隆的对象上下文编码"
|
);
|
PLUILayout pluiLayout = new PLUILayout();
|
PLUILayout sourcePLUILayout = pluiLayoutCloneVO.getSourcePLUILayout();
|
pluiLayout.plRelatedType = pluiLayoutCloneVO.getCloneTargetName();
|
//如果选择克隆目标,则克隆到选择的类型下,如果没有选择克隆目标,则克隆到当前类型下
|
if(Func.isBlank(pluiLayoutCloneVO.getCloneTargetName())){
|
pluiLayout.plRelatedType = sourcePLUILayout.plRelatedType;
|
}
|
//克隆的名称和ui上下文编号查重
|
String cloneName = pluiLayoutCloneVO.getCloneName();
|
String cloneContextCode = pluiLayoutCloneVO.getCloneContextCode();
|
pluiLayout.plOId = ObjectUtility.getNewObjectID36();
|
pluiLayout.plName = cloneName;
|
pluiLayout.plCode = cloneContextCode;
|
pluiLayout.plIsShowTab = sourcePLUILayout.plIsShowTab;
|
pluiLayout.plIsShowNavigator = sourcePLUILayout.plIsShowNavigator;
|
pluiLayout.plIsShowForm = sourcePLUILayout.plIsShowForm;
|
pluiLayout.plDesc = sourcePLUILayout.plDesc;
|
SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
|
pluiLayout.plCreateUser = sessionInfo.getUserId();
|
pluiLayout.plModifyUser = sessionInfo.getUserId();
|
//克隆目标下ui名称和编号查重
|
this.checkCodeName(pluiLayout);
|
//1、先保存ui上下文
|
boolean res = platformClientUtil.getUIService().savePLUILayout(pluiLayout);
|
if(!res){
|
return res;
|
}
|
//2、再考虑子节点的克隆
|
PLTabPage[] pages = platformClientUtil.getUIService().getPLTabPagesByPageDefinationOId(sourcePLUILayout.plOId); //控制区节点及其子节点的克隆
|
if(pages == null){
|
return true;
|
}
|
try {
|
for (PLTabPage page : pages) {
|
savePlpageLayoutDefinationRelation(page,pluiLayout.plOId);
|
}
|
return true;
|
}catch (Exception e){
|
e.printStackTrace();
|
String exceptionMessage = VciBaseUtil.getExceptionMessage(e);
|
logger.error(exceptionMessage);
|
throw new VciBaseException(exceptionMessage);
|
}
|
}
|
|
/**
|
* 根据勾选的条件获取需要导出的ui上下文树
|
* @param expDatas
|
* @return
|
*/
|
@Override
|
public Tree getExpContextTree(List<String> expDatas) {
|
VciBaseUtil.alertNotNull(expDatas,"导出查询列表");
|
Tree tree = new Tree();
|
String newObjectID36 = ObjectUtility.getNewObjectID36();
|
tree.setOid(newObjectID36);
|
tree.setText("区域");
|
tree.setLevel(0);
|
List<Tree> treeList = new ArrayList<>();
|
expDatas.stream().forEach(oid->{
|
try {
|
PLUILayout pluiLayout = platformClientUtil.getUIService().getPLUILayoutById(oid);
|
if(Func.isNotEmpty(pluiLayout) && Func.isNotBlank(pluiLayout.plOId)){
|
Tree tree1 = new Tree();
|
tree1.setText(pluiLayout.plName);
|
tree1.setOid(pluiLayout.plOId);
|
tree1.setLevel(1);
|
tree1.setParentId(newObjectID36);
|
//查询
|
PLTabPage[] plTabPages = platformClientUtil.getUIService().getPLTabPagesByPageDefinationOId(pluiLayout.plOId);
|
List<Tree> treeChildrens = new ArrayList<>();
|
Arrays.stream(plTabPages).forEach(item->{
|
Tree tree2 = new Tree();
|
tree2.setLeaf(true);
|
tree2.setOid(item.plOId);
|
tree2.setText(item.plName);
|
tree2.setLevel(2);
|
tree2.setParentId(item.plContextOId);
|
treeChildrens.add(tree2);
|
});
|
tree1.setChildren(treeChildrens);
|
treeList.add(tree1);
|
}
|
} catch (PLException e) {
|
e.printStackTrace();
|
}
|
});
|
|
tree.setChildren(treeList);
|
return tree;
|
}
|
|
/**
|
* 导出ui上下文(勾选的要导出的控制区的数据)
|
* oids
|
* @return
|
*/
|
@Override
|
public String expUIContextData(Map<String,String> expConditionMap) throws PLException {
|
if(Func.isEmpty(expConditionMap)){
|
throw new PLException("500",new String[]{"请勾选要导出的UI上下文数据!"});
|
}
|
//界面没传名称,使用默认导出名称
|
String exportFileName = "UI上下文导出_" + Func.format(new Date(),"yyyy-MM-dd HHmmss.sss");
|
//设置列名
|
/*List<String> columns = Arrays.asList(
|
"所属业务类型","名称", "UI上下文", "导航区", "控制区","操作区",
|
"页签序号","区域编码","区域名称","是否启用","显示表达式", "UI解析类",
|
"扩展属性", "描述","页面设计信息","页面下配置的按钮"
|
);*/
|
|
//写excel
|
String excelPath = LocalFileUtil.getDefaultTempFolder() + File.separator + exportFileName + ".xls";
|
try {
|
new File(excelPath).createNewFile();
|
} catch (Throwable e) {
|
throw new VciBaseException(LangBaseUtil.getErrorMsg(e), new String[]{excelPath}, e);
|
}
|
//设置列
|
List<WriteExcelData> pldDataList = new ArrayList<>();
|
List<WriteExcelData> tpDataList = new ArrayList<>();
|
List<WriteExcelData> pdDataList = new ArrayList<>();
|
List<WriteExcelData> tbDataList = new ArrayList<>();
|
List<WriteExcelData> cpDataList = new ArrayList<>();
|
//设置列头
|
/*for (int index = 0; index < columns.size(); index++) {
|
excelDataList.add(new WriteExcelData(0,index, columns.get(index)));
|
}*/
|
AtomicInteger pldRow = new AtomicInteger(0);
|
AtomicInteger tpRow = new AtomicInteger(0);
|
AtomicInteger pdRow = new AtomicInteger(0);
|
AtomicInteger tbRow = new AtomicInteger(0);
|
AtomicInteger cpRow = new AtomicInteger(0);
|
|
expConditionMap.entrySet().stream().forEach(item->{
|
//key存放的ui上下文的id
|
try {
|
PLUILayout pluiLayout = platformClientUtil.getUIService().getPLUILayoutById(item.getKey());
|
pldDataList.add(new WriteExcelData(pldRow.get(),0, pluiLayout.plOId));
|
pldDataList.add(new WriteExcelData(pldRow.get(),1, pluiLayout.plCode));
|
pldDataList.add(new WriteExcelData(pldRow.get(),2, pluiLayout.plName));
|
pldDataList.add(new WriteExcelData(pldRow.get(),3, pluiLayout.plRelatedType));
|
pldDataList.add(new WriteExcelData(pldRow.get(),4, pluiLayout.plIsShowForm));
|
pldDataList.add(new WriteExcelData(pldRow.get(),5, pluiLayout.plIsShowNavigator));
|
pldDataList.add(new WriteExcelData(pldRow.get(),6, pluiLayout.plIsShowTab));
|
pldRow.getAndIncrement();
|
|
//value中存放的多个以逗号间隔的页签id,通过这个id查询出其下的页面设计和按钮配置
|
List<String> plTabPageOIds = Arrays.asList(item.getValue().split(","));
|
if(Func.isNotEmpty(pluiLayout) && Func.isNotBlank(pluiLayout.plOId) && Func.isNotEmpty(plTabPageOIds)){
|
PLTabPage[] plTabPages = platformClientUtil.getUIService().getPLTabPagesByPageDefinationOId(pluiLayout.plOId);
|
List<PLTabPage> filterTabPages = Arrays.stream(plTabPages).filter(plTabPage -> plTabPageOIds.contains(plTabPage.plOId)).collect(Collectors.toList());
|
filterTabPages.stream().forEach(tabPage->{
|
//区域定义
|
tpDataList.add(new WriteExcelData(tpRow.get(),0, tabPage.plOId));
|
tpDataList.add(new WriteExcelData(tpRow.get(),1, tabPage.plSeq));
|
tpDataList.add(new WriteExcelData(tpRow.get(),2, tabPage.plLabel));
|
tpDataList.add(new WriteExcelData(tpRow.get(),3, tabPage.plName));
|
tpDataList.add(new WriteExcelData(tpRow.get(),4, tabPage.plContextOId));
|
tpDataList.add(new WriteExcelData(tpRow.get(),5, tabPage.plIsOpen));
|
tpDataList.add(new WriteExcelData(tpRow.get(),6, tabPage.plOpenExpression));
|
tpDataList.add(new WriteExcelData(tpRow.get(),7, tabPage.plUIParser));
|
tpDataList.add(new WriteExcelData(tpRow.get(),8, tabPage.plExtAttr));
|
tpDataList.add(new WriteExcelData(tpRow.get(),9, tabPage.plDesc));
|
tpRow.getAndIncrement();
|
try {
|
PLPageDefination[] plPageDefinations = platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(tabPage.plOId);
|
if(Func.isNotEmpty(plPageDefinations)){
|
//List<PLTabButtonVO> tabButtonsTotal = new ArrayList<>();
|
Arrays.stream(plPageDefinations).forEach(plPageDefination->{
|
pdDataList.add(new WriteExcelData(pdRow.get(),0, plPageDefination.plOId));
|
pdDataList.add(new WriteExcelData(pdRow.get(),1, plPageDefination.plTabPageOId));
|
pdDataList.add(new WriteExcelData(pdRow.get(),2, plPageDefination.plType));
|
pdDataList.add(new WriteExcelData(pdRow.get(),3, plPageDefination.name));
|
pdDataList.add(new WriteExcelData(pdRow.get(),4, plPageDefination.desc));
|
pdDataList.add(new WriteExcelData(pdRow.get(),5, plPageDefination.seq));
|
pdDataList.add(new WriteExcelData(pdRow.get(),6, plPageDefination.plDefination));
|
pdRow.getAndIncrement();
|
//查询按钮
|
try {
|
PLTabButton[] tabButtons = platformClientUtil.getUIService().getPLTabButtonsByTableOId(plPageDefination.plOId);
|
for (PLTabButton tabButton:tabButtons){
|
tbDataList.add(new WriteExcelData(tbRow.get(),0, tabButton.plOId));
|
tbDataList.add(new WriteExcelData(tbRow.get(),1, tabButton.plTableOId));
|
tbDataList.add(new WriteExcelData(tbRow.get(),2, tabButton.plPageOId));
|
tbDataList.add(new WriteExcelData(tbRow.get(),3, tabButton.plActionOId));
|
tbDataList.add(new WriteExcelData(tbRow.get(),4, tabButton.plLabel));
|
tbDataList.add(new WriteExcelData(tbRow.get(),5, tabButton.plAreaType));
|
tbDataList.add(new WriteExcelData(tbRow.get(),6, tabButton.plDesc));
|
tbDataList.add(new WriteExcelData(tbRow.get(),7, tabButton.plSeq));
|
tbDataList.add(new WriteExcelData(tbRow.get(),8, tabButton.plParentOid));
|
tbDataList.add(new WriteExcelData(tbRow.get(),9, tabButton.displayMode));
|
tbDataList.add(new WriteExcelData(tbRow.get(),10, tabButton.iconPath));
|
tbDataList.add(new WriteExcelData(tbRow.get(),11, tabButton.authorization));
|
tbDataList.add(new WriteExcelData(tbRow.get(),12, tabButton.show));
|
tbRow.getAndIncrement();
|
PLCommandParameter[] parameters = platformClientUtil.getUIService().getPLCommandParametersByCommandOId(tabButton.plOId);
|
if(Func.isNotEmpty(parameters)){
|
Arrays.stream(parameters).forEach(param->{
|
cpDataList.add(new WriteExcelData(cpRow.get(),0, param.plOId));
|
cpDataList.add(new WriteExcelData(cpRow.get(),1, param.plCommandOId));
|
cpDataList.add(new WriteExcelData(cpRow.get(),2, param.plKey));
|
cpDataList.add(new WriteExcelData(cpRow.get(),3, param.plValue));
|
cpRow.getAndIncrement();
|
});
|
}
|
}
|
} catch (PLException e) {
|
e.printStackTrace();
|
}
|
});
|
}
|
} catch (PLException e) {
|
e.printStackTrace();
|
}
|
});
|
}
|
} catch (PLException e) {
|
e.printStackTrace();
|
}
|
});
|
WriteExcelOption excelOption = new WriteExcelOption();
|
excelOption.addSheetDataList("PlpageLayoutDefnation",pldDataList);
|
excelOption.addSheetDataList("Pltabpage",tpDataList);
|
excelOption.addSheetDataList("Plpagedefination",pdDataList);
|
excelOption.addSheetDataList("Pltabbutton",tbDataList);
|
excelOption.addSheetDataList("PlcommondParam",cpDataList);
|
ExcelUtil.writeDataToFile(excelPath, excelOption);
|
return excelPath;
|
}
|
|
/**
|
* 导入UI上下文
|
* @param file
|
* @param isCovered 是否覆盖
|
* @param selectBtm 选择的业务类型
|
* @return
|
*/
|
@Override
|
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;
|
}
|
|
/**
|
* 根据上下文ID和区域类型,按顺序获取当前区域的tab页
|
*/
|
@Override
|
public DataGrid getTabByContextIdAndType(String contextId, int areaType) throws PLException {
|
VciBaseUtil.alertNotNull(contextId,"上下文主键",areaType,"区域类型");
|
PLTabPage[] plTabPages = platformClientUtil.getUIService().getTabPagesByContextIdAndType(contextId, (short) areaType);
|
DataGrid dataGrid = new DataGrid();
|
dataGrid.setTotal(plTabPages.length);
|
dataGrid.setData(Arrays.asList(plTabPages));
|
return dataGrid;
|
}
|
|
/**
|
* 添加区域数据
|
* @param plTabPage
|
* @return
|
*/
|
@Override
|
public boolean addTabData(PLTabPage plTabPage) throws PLException {
|
VciBaseUtil.alertNotNull(plTabPage,"添加区域数据");
|
SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
|
plTabPage.plCreateUser = sessionInfo.getUserId();
|
plTabPage.plModifyUser = sessionInfo.getUserId();
|
plTabPage.plOId = ObjectUtility.getNewObjectID36();
|
//新增和修改前检查,出错直接抛出异常
|
checkEdit(plTabPage);
|
|
return platformClientUtil.getUIService().savePLTabPage(plTabPage);
|
}
|
|
/**
|
* 修改区域数据
|
* @param plTabPage
|
* @return
|
*/
|
@Override
|
public boolean updateTabData(PLTabPage plTabPage) throws PLException {
|
VciBaseUtil.alertNotNull(plTabPage,"添加区域数据");
|
SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
|
plTabPage.plModifyUser = sessionInfo.getUserId();
|
|
//新增和修改前检查,出错直接抛出异常
|
checkEdit(plTabPage);
|
|
return platformClientUtil.getUIService().updatePLTabPage(plTabPage);
|
}
|
|
/**
|
* 删除区域数据
|
* @param oids
|
* @return
|
*/
|
@Override
|
public boolean deleteTabData(String[] oids) throws PLException {
|
VciBaseUtil.alertNotNull(oids,"待删除的主键列表");
|
return platformClientUtil.getUIService().deletePLTabPageByOidsForCascade(oids);
|
}
|
|
/**
|
* 扩展属性合规检测
|
* @param extAttr
|
* @return
|
*/
|
public BaseResult checkTabPageExtAttrIsOk(String extAttr){
|
// 数据格式:ext1:xx;ext2;ext3:xx;ext4:xxx;extn:xxx;
|
boolean res = checkExtValIsOk(extAttr);
|
return res ? BaseResult.success(true,"扩展属性数据格式正确!"):BaseResult.fail("扩展属性数据格式不正确!!");
|
}
|
|
/**
|
* 查询页面设计定义
|
* @param pageContextOId
|
* @return
|
*/
|
@Override
|
public DataGrid getPLPageDefinations(String pageContextOId) throws PLException {
|
DataGrid dataGrid = new DataGrid();
|
if(Func.isBlank(pageContextOId)) return dataGrid;
|
PLPageDefination[] plPageDefinations = platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(pageContextOId);
|
if(Func.isEmpty(plPageDefinations)){
|
return dataGrid;
|
}
|
//DO2VO
|
List<PLDefinationVO> plDefinationVOS = this.pageDefinations2PLDefinationVO(Arrays.asList(plPageDefinations));
|
dataGrid.setTotal(plDefinationVOS.size());
|
Collections.sort(plDefinationVOS, Comparator.comparing(PLDefinationVO::getSeq));
|
//Arrays.sort(plDefinationVOS, pageDefinationComparator);
|
dataGrid.setData(plDefinationVOS);
|
return dataGrid;
|
}
|
|
/**
|
* 页面定义的DO2VO对象
|
* @param plPageDefinations
|
* @return
|
*/
|
private List<PLDefinationVO> pageDefinations2PLDefinationVO(List<PLPageDefination> plPageDefinations){
|
List<PLDefinationVO> plDefinationVOList = new ArrayList<>();
|
plPageDefinations.stream().forEach(item->{
|
try {
|
PLDefinationVO plDefinationVO = new PLDefinationVO();
|
PLDefination plDefination = UITools.getPLDefination(item.plDefination);
|
BeanUtil.copy(plDefination,plDefinationVO);
|
plDefinationVO.setDescription(item.desc);
|
plDefinationVO.setSeq(String.valueOf(item.seq));
|
plDefinationVO.setTabPageOId(item.plTabPageOId);
|
plDefinationVO.setId(item.plOId);
|
plDefinationVO.setName(item.name);
|
plDefinationVO.setType(item.plType);
|
plDefinationVO.setTemplateType(String.valueOf(plDefination.getTemplateType()));
|
plDefinationVOList.add(plDefinationVO);
|
} catch (Throwable e) {
|
e.printStackTrace();
|
logger.error(e.getMessage());
|
throw new VciBaseException("页面定义DO对象转VO对象时出现错误,原因:"+e.getMessage());
|
}
|
});
|
return plDefinationVOList;
|
}
|
|
/**
|
* 添加页面定义
|
* @param pdVO
|
* @return
|
*/
|
@Override
|
public boolean addPageDefination(PLDefinationVO pdVO) throws Throwable {
|
VciBaseUtil.alertNotNull(pdVO,"页面定义对象",pdVO.getSeq(),"编号",pdVO.getName(),"名称");
|
|
PLDefination d = new PLDefination();
|
PLPageDefination pd = new PLPageDefination();
|
pd.plTabPageOId = pdVO.getTabPageOId();
|
pd.plOId = ObjectUtility.getNewObjectID36();
|
//不能为空属性检查
|
/*if(!this.baseInfoIsOk(pd,false)){
|
return false;
|
}*/
|
|
pd.name = pdVO.getName().trim();
|
pd.seq = Short.valueOf(pdVO.getSeq().trim());
|
pd.desc = pdVO.getDescription();
|
pd.plType = (short) pdVO.getType();
|
|
d.setName(pdVO.getName().trim());
|
d.setUiParser(pdVO.getUiParser().trim());
|
d.setExtAttr(pdVO.getExtAttr().trim());
|
d.setTemplateType(pdVO.getTemplateType());
|
|
//名称和编号查重
|
newPLDefinationIsOk(pdVO, false);
|
|
// 检查各个类型下的数据是否输入或有效,一共6种类型按类型检验
|
String templateType = pdVO.getTemplateType();
|
switch (templateType){
|
//Table(表格)
|
case "1":
|
//From(表单)
|
case "4":
|
TableComptCheckInput tci = new TableComptCheckInput(
|
pdVO.getSearchTarger()
|
,pdVO.getShowType()
|
,pdVO.getLinkType()
|
,pdVO.getTemplateId()
|
,pdVO.getQueryTemplateName()
|
);
|
if(!tci.checkInputIsOk()){
|
return false;
|
}
|
d = tci.getNewPLDefination(d);
|
break;
|
//Custom(自定义模板)
|
case "2":
|
//只检查控制路径不能为空,有问题会直接报错
|
CustomComptCheckInput ccci = new CustomComptCheckInput(pdVO.getControlPath());
|
if(!ccci.checkInputIsOk()){
|
return false;
|
}
|
d = ccci.getNewPLDefination(d);
|
break;
|
//TreeTable(树表)
|
case "3":
|
TreeTableComptCheckInput ttcci = new TreeTableComptCheckInput(
|
pdVO.getSearchTarger()
|
,pdVO.getShowType()
|
,pdVO.getLinkType()
|
,pdVO.getTemplateId()
|
,pdVO.getQueryTemplateName()
|
,pdVO.getExpandCols()
|
,pdVO.getExpandMode()
|
);
|
if(!ttcci.checkInputIsOk()){
|
return false;
|
}
|
d = ttcci.getNewPLDefination(d);
|
break;
|
//Tree(树)
|
case "5":
|
TreeComptCheckInput tcci = new TreeComptCheckInput(
|
pdVO.getShowType(),
|
pdVO.getLinkType(),
|
pdVO.getQueryTemplateName(),
|
pdVO.getShowExpressionRoot(),
|
pdVO.getShowExpression(),
|
pdVO.getRefTreeSet(),
|
pdVO.getSeparator(),
|
pdVO.getExpandMode()
|
);
|
if(!tcci.checkInputIsOk()){
|
return false;
|
}
|
d = tcci.getNewPLDefination(d);
|
break;
|
//UILayout(UI定义)
|
case "6":
|
UILayoutComptCheckInput ulci = new UILayoutComptCheckInput(
|
pdVO.getSearchTarger(),
|
pdVO.getShowType(),
|
pdVO.getUiLayout(),
|
pdVO.getQueryTemplateName(),
|
pdVO.getQryType()
|
);
|
if(!ulci.checkInputIsOk()){
|
return false;
|
}
|
d = ulci.getNewPLDefination(d);
|
break;
|
}
|
|
d = setEventDataToPLDefination(d,pdVO);
|
//转xml赋值到plDefination中
|
pd.plDefination = UITools.getPLDefinationText(d);
|
|
//执行保存
|
return platformClientUtil.getUIService().savePLPageDefination(pd);
|
}
|
|
/**
|
* 修改页面定义
|
* @param pdVO
|
* @return
|
*/
|
@Override
|
public boolean updatePageDefination(PLDefinationVO pdVO) throws Throwable {
|
|
VciBaseUtil.alertNotNull(pdVO,"页面定义对象",pdVO.getSeq(),"编号",pdVO.getName(),"名称");
|
PLPageDefination pd = new PLPageDefination();
|
PLDefination d = new PLDefination();
|
BeanUtil.copy(pdVO,d);
|
|
//不能为空属性检查
|
/*if(!this.baseInfoIsOk(pd,true)){
|
return false;
|
}*/
|
pd.plOId = pdVO.getId();
|
pd.plTabPageOId = pdVO.getTabPageOId();
|
pd.name = pdVO.getName().trim();
|
pd.seq = Short.valueOf(pdVO.getSeq().trim());
|
pd.desc = pdVO.getDescription();
|
pd.plType = (short) pdVO.getType();
|
|
d.setId(pdVO.getId());
|
d.setName(pdVO.getName().trim());
|
d.setUiParser(pdVO.getUiParser().trim());
|
d.setExtAttr(pdVO.getExtAttr().trim());
|
d.setTemplateType(pdVO.getTemplateType());
|
|
this.newPLDefinationIsOk(pdVO, true);
|
|
// 检查各个组件内部的数据是否有效
|
String templateType = pdVO.getTemplateType();
|
switch (templateType){
|
//Table(表格)
|
case "1":
|
//From(表单)
|
case "4":
|
TableComptCheckInput tci = new TableComptCheckInput(
|
pdVO.getSearchTarger()
|
,pdVO.getShowType()
|
,pdVO.getLinkType()
|
,pdVO.getTemplateId()
|
,pdVO.getQueryTemplateName()
|
);
|
if(!tci.checkInputIsOk()){
|
return false;
|
}
|
d = tci.getNewPLDefination(d);
|
break;
|
//Custom(自定义模板)
|
case "2":
|
//只检查控制路径不能为空,有问题会直接报错
|
CustomComptCheckInput ccci = new CustomComptCheckInput(pdVO.getControlPath());
|
if(!ccci.checkInputIsOk()){
|
return false;
|
}
|
d = ccci.getNewPLDefination(d);
|
break;
|
//TreeTable(树表)
|
case "3":
|
TreeTableComptCheckInput ttcci = new TreeTableComptCheckInput(
|
pdVO.getSearchTarger()
|
,pdVO.getShowType()
|
,pdVO.getLinkType()
|
,pdVO.getTemplateId()
|
,pdVO.getQueryTemplateName()
|
,pdVO.getExpandCols()
|
,pdVO.getExpandMode()
|
);
|
if(!ttcci.checkInputIsOk()){
|
return false;
|
}
|
d = ttcci.getNewPLDefination(d);
|
break;
|
//Tree(树)
|
case "5":
|
TreeComptCheckInput tcci = new TreeComptCheckInput(
|
pdVO.getShowType(),
|
pdVO.getLinkType(),
|
pdVO.getQueryTemplateName(),
|
pdVO.getShowExpressionRoot(),
|
pdVO.getShowExpression(),
|
pdVO.getRefTreeSet(),
|
pdVO.getSeparator(),
|
pdVO.getExpandMode()
|
);
|
if(!tcci.checkInputIsOk()){
|
return false;
|
}
|
d = tcci.getNewPLDefination(d);
|
break;
|
//UILayout(UI定义)
|
case "6":
|
UILayoutComptCheckInput ulci = new UILayoutComptCheckInput(
|
pdVO.getSearchTarger(),
|
pdVO.getShowType(),
|
pdVO.getUiLayout(),
|
pdVO.getQueryTemplateName(),
|
pdVO.getQryType()
|
);
|
if(!ulci.checkInputIsOk()){
|
return false;
|
}
|
d = ulci.getNewPLDefination(d);
|
break;
|
}
|
|
d = setEventDataToPLDefination(d,pdVO);
|
pd.plDefination = UITools.getPLDefinationText(d);
|
|
return platformClientUtil.getUIService().updatePLPageDefination(pd);
|
}
|
|
/**
|
* 删除页面定义
|
* @param oids
|
* @return
|
*/
|
@Override
|
public boolean delPageDefination(String[] oids) throws PLException {
|
VciBaseUtil.alertNotNull(oids,"删除的页面定义主键");
|
boolean res = platformClientUtil.getUIService().deletePLPageDefinationByOidsForCascade(oids);
|
return res;
|
}
|
|
/**
|
* 获取页签区域按钮配置信息
|
* @param pageDefinationOid
|
* @return
|
*/
|
@Override
|
public List<PLTabButtonVO> getTabButtons(String pageDefinationOid) {
|
VciBaseUtil.alertNotNull(pageDefinationOid,"页面定义主键");
|
List<PLTabButton> buttonList = new ArrayList<>();
|
try {
|
PLTabButton[] plTabButtons = platformClientUtil.getUIService().getPLTabButtonsByTableOId(pageDefinationOid);
|
buttonList = Arrays.asList(plTabButtons);
|
List<PLTabButtonVO> plTabButtonVOList = this.tabButton2TabButtonVOS(buttonList);
|
PLTabButtonVO plTabButtonVO = new PLTabButtonVO();
|
for(int i = 0; i < plTabButtonVOList.size(); i++){
|
plTabButtonVO = plTabButtonVOList.get(i);
|
|
if(plTabButtonVO.getParentOid().equals("")){
|
plTabButtonVO.setChildren(plTabButtonVO2Children(plTabButtonVOList,plTabButtonVO.getOId()));
|
}
|
}
|
return plTabButtonVOList;
|
} catch (Exception e) {
|
e.printStackTrace();
|
throw new VciBaseException("加载页签区域按钮配置信息异常:" + e.getMessage());
|
}
|
}
|
|
/**
|
* 多个按钮配置DO对象转多个VO对象
|
* @param listDO
|
* @return
|
*/
|
private List<PLTabButtonVO> tabButton2TabButtonVOS(List<PLTabButton> listDO){
|
List<PLTabButtonVO> plTabButtonVOList = new ArrayList<PLTabButtonVO>();
|
if(Func.isEmpty(listDO)){
|
return plTabButtonVOList;
|
}
|
listDO.stream().forEach(item->{
|
try {
|
PLTabButtonVO plTabButtonVO = this.tabButton2TabButtonVO(item);
|
plTabButtonVOList.add(plTabButtonVO);
|
} catch (PLException e) {
|
e.printStackTrace();
|
String errorLog = "按钮配置DO TO VO时出现错误,原因:"+VciBaseUtil.getExceptionMessage(e);
|
logger.error(errorLog);
|
throw new VciBaseException(errorLog);
|
}
|
});
|
return plTabButtonVOList;
|
}
|
|
/**
|
* 按钮配置DO对象转VO对象
|
* @param tabButtonDO
|
* @return
|
*/
|
private PLTabButtonVO tabButton2TabButtonVO(PLTabButton tabButtonDO) throws PLException {
|
PLTabButtonVO plTabButtonVO = new PLTabButtonVO();
|
if(Func.isEmpty(tabButtonDO) && Func.isBlank(tabButtonDO.plOId)){
|
return plTabButtonVO;
|
}
|
plTabButtonVO.setOId(tabButtonDO.plOId);
|
plTabButtonVO.setTableOId(tabButtonDO.plTableOId);
|
plTabButtonVO.setPageOId(tabButtonDO.plPageOId);
|
plTabButtonVO.setActionOId(tabButtonDO.plActionOId);
|
plTabButtonVO.setLabel(tabButtonDO.plLabel);
|
plTabButtonVO.setAreaType(tabButtonDO.plAreaType);
|
plTabButtonVO.setDesc(tabButtonDO.plDesc);
|
plTabButtonVO.setSeq(tabButtonDO.plSeq);
|
plTabButtonVO.setCreateUser(tabButtonDO.plCreateUser);
|
plTabButtonVO.setCreateTime(tabButtonDO.plCreateTime);
|
plTabButtonVO.setModifyUser(tabButtonDO.plModifyUser);
|
plTabButtonVO.setModifyTime(tabButtonDO.plModifyTime);
|
plTabButtonVO.setLicensOrs(tabButtonDO.plLicensOrs);
|
plTabButtonVO.setParentOid(tabButtonDO.plParentOid);
|
plTabButtonVO.setDisplayMode(tabButtonDO.displayMode);
|
plTabButtonVO.setIconPath(tabButtonDO.iconPath);
|
plTabButtonVO.setAuthorization(tabButtonDO.authorization);
|
plTabButtonVO.setShow(tabButtonDO.show);
|
//参数信息回填
|
PLCommandParameter[] parameters = platformClientUtil.getUIService().getPLCommandParametersByCommandOId(tabButtonDO.plOId);
|
if(Func.isNotEmpty(parameters)){
|
LinkedHashMap<String, String> parameterMap = Arrays.stream(parameters)
|
.collect(Collectors.toMap(
|
parm -> parm.plKey,
|
parm -> parm.plValue,
|
(existing, replacement) -> existing, // 处理重复键的情况
|
LinkedHashMap::new // 指定使用 LinkedHashMap
|
));
|
plTabButtonVO.setButtonParams(parameterMap);
|
}
|
return plTabButtonVO;
|
}
|
|
/**
|
* 按钮配置子节点查找
|
* @param plOid
|
* @param plTabButtonVOList
|
* @return
|
*/
|
private List<PLTabButtonVO> plTabButtonVO2Children(List<PLTabButtonVO> plTabButtonVOList, String plOid){
|
ArrayList<PLTabButtonVO> plTabButtonVOS = new ArrayList<>();
|
for (PLTabButtonVO plTabButtonVO : plTabButtonVOList) {
|
if(StringUtils.isBlank(plTabButtonVO.getParentOid())){
|
continue;
|
}
|
if(plTabButtonVO.getParentOid().equals(plOid)){
|
plTabButtonVO.setChildren(plTabButtonVO2Children(plTabButtonVOList,plOid));
|
plTabButtonVOS.add(plTabButtonVO);
|
}
|
}
|
return plTabButtonVOS;
|
}
|
|
/**
|
* 按钮配置VO对象转DO对象
|
* @param tabButtonVO
|
* @return
|
* @throws PLException
|
*/
|
private PLTabButton tabButtonVO2TabButton(PLTabButton plTabButton,PLTabButtonVO tabButtonVO) {
|
plTabButton.plOId = tabButtonVO.getOId();
|
plTabButton.plTableOId = tabButtonVO.getTableOId();
|
plTabButton.plPageOId = tabButtonVO.getPageOId();
|
plTabButton.plActionOId = tabButtonVO.getActionOId();
|
plTabButton.plLabel = tabButtonVO.getLabel();
|
plTabButton.plAreaType = tabButtonVO.getAreaType();
|
plTabButton.plDesc = tabButtonVO.getDesc();
|
plTabButton.plSeq = tabButtonVO.getSeq();
|
plTabButton.plCreateUser = tabButtonVO.getCreateUser();
|
plTabButton.plCreateTime = tabButtonVO.getCreateTime();
|
plTabButton.plModifyUser = tabButtonVO.getModifyUser();
|
plTabButton.plModifyTime = tabButtonVO.getModifyTime();
|
plTabButton.plLicensOrs = tabButtonVO.getLicensOrs();
|
plTabButton.plParentOid = tabButtonVO.getParentOid();
|
plTabButton.displayMode = tabButtonVO.getDisplayMode();
|
plTabButton.iconPath = tabButtonVO.getIconPath();
|
plTabButton.authorization = tabButtonVO.getAuthorization();
|
plTabButton.show = tabButtonVO.getShow();
|
return plTabButton;
|
}
|
|
/**
|
* 添加按钮配置信息
|
* @param tabButtonVO
|
* @return
|
*/
|
@Override
|
public BaseResult addTapButton(PLTabButtonVO tabButtonVO) {
|
boolean res = this.saveOrUpdateTapButton(tabButtonVO, true);
|
return res ? BaseResult.success("按钮配置添加成功!"):BaseResult.success("按钮配置添加失败!");
|
}
|
|
/**
|
* 修改按钮配置信息
|
* @param tabButtonVO
|
* @return
|
*/
|
@Override
|
public BaseResult updateTapButton(PLTabButtonVO tabButtonVO) {
|
boolean res = this.saveOrUpdateTapButton(tabButtonVO, false);
|
return res ? BaseResult.success("按钮配置修改成功!"):BaseResult.success("按钮配置修改失败!");
|
}
|
|
/**
|
* 保存或修改按钮配置信息
|
* @param tabButtonVO
|
* @return
|
*/
|
@Override
|
public boolean saveOrUpdateTapButton(PLTabButtonVO tabButtonVO,boolean isAdd){
|
VciBaseUtil.alertNotNull(tabButtonVO,"按钮配置对象",tabButtonVO.getLabel(),"参数名称");
|
//检查当前添加的列表是否重复,但是这儿只支持单条数据保存,所有当前列表判重可以前端来做
|
//String btnParamValidate = this.geCheckRes();
|
|
if (tabButtonVO.getSeq() < 1 || tabButtonVO.getSeq() > 63) {
|
throw new VciBaseException("按序号超出范围,请修改,按钮【编号】只能在【1-63】范围内。");
|
}
|
//当前登录用户的信息
|
SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
|
//VO2DO
|
PLTabButton plTabButton = this.tabButtonVO2TabButton(new PLTabButton(), tabButtonVO);
|
if(isAdd) {
|
//如果是增加操作,直接创建PLTabButton对象
|
plTabButton.plOId = ObjectUtility.getNewObjectID36();
|
plTabButton.plCreateUser = sessionInfo.getUserId();
|
plTabButton.plModifyUser = sessionInfo.getUserId();
|
} else {
|
//修改操作
|
plTabButton.plModifyUser = sessionInfo.getUserId();
|
}
|
|
try {
|
if(isAdd){
|
boolean success = platformClientUtil.getUIService().savePLTabButton(plTabButton);
|
if(success == false) {
|
throw new VciBaseException("编号重复,编号已经在当前页签下存在!");
|
}
|
} else if(!isAdd){
|
platformClientUtil.getUIService().updatePLTabButton(plTabButton);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
String errorLog = "保存按钮信息时发生异常:" + e.getMessage();
|
logger.error(errorLog);
|
throw new VciBaseException(errorLog);
|
}
|
//复用以前的代码,对于参数一条一条删除,一条一条创建
|
//数据量及并发较少,暂时这么处理没有什么问题
|
if(!isAdd) {
|
try {
|
platformClientUtil.getUIService().deletePLCommandParameterByTabButtonId(plTabButton.plOId);
|
} catch (PLException e) {
|
e.printStackTrace();
|
}
|
}
|
|
LinkedHashMap<String, String> buttonParams = tabButtonVO.getButtonParams();
|
if(Func.isNotEmpty(buttonParams)) {
|
Iterator<Map.Entry<String, String>> iterator = buttonParams.entrySet().iterator();
|
while(iterator.hasNext()){
|
Map.Entry<String, String> next = iterator.next();
|
if(StringUtils.isEmpty(next.getKey()) || StringUtils.isEmpty(next.getValue())){
|
iterator.remove();
|
}
|
}
|
Iterator<Map.Entry<String, String>> kvItor = buttonParams.entrySet().iterator();
|
while(kvItor.hasNext()){
|
Map.Entry<String, String> next = kvItor.next();
|
PLCommandParameter plCommandParameter = new PLCommandParameter();
|
plCommandParameter.plOId = ObjectUtility.getNewObjectID36();
|
plCommandParameter.plCommandOId = plTabButton.plOId;
|
plCommandParameter.plKey = next.getKey();
|
plCommandParameter.plValue = next.getValue();
|
plCommandParameter.plCreateUser = sessionInfo.getUserId();
|
plCommandParameter.plModifyUser = sessionInfo.getUserId();
|
try {
|
platformClientUtil.getUIService().savePLCommandParameter(plCommandParameter);
|
} catch (PLException e) {
|
e.printStackTrace();
|
throw new VciBaseException("保存按钮信息时发生异常:"+ e.getMessage());
|
}
|
}
|
}
|
return true;
|
}
|
|
/**
|
* 删除单个按钮配置
|
* @param tabButtonVO
|
* @return
|
*/
|
@Override
|
public boolean deleteTapButton(PLTabButtonVO tabButtonVO) throws PLException {
|
VciBaseUtil.alertNotNull(tabButtonVO,"删除的按钮配置对象");
|
boolean success = platformClientUtil.getUIService().deletePLTabButton(this.tabButtonVO2TabButton(new PLTabButton(),tabButtonVO));
|
if(success == false){
|
throw new VciBaseException("该有子级按钮,不能删除!");
|
}
|
return true;
|
}
|
|
/**
|
* 调整为下级按钮
|
* @param tabButtonVO
|
* @return
|
*/
|
@Override
|
public BaseResult joinBtn(PLTabButtonVO tabButtonVO) throws PLException {
|
VciBaseUtil.alertNotNull(tabButtonVO,"需调整为下级按钮",tabButtonVO.getTableOId(),"当前按钮配置所在的页面主键");
|
//同一页面下的按钮
|
List<PLTabButtonVO> plTabButtons = this.getTabButtons(tabButtonVO.getTableOId());
|
if(Func.isEmpty(plTabButtons)){
|
return BaseResult.fail("未获取到按钮配置信息!");
|
}
|
//获取当前要移动的按钮的下标
|
int index = 0;
|
for (int i = 0; i < plTabButtons.size(); i++) {
|
if (plTabButtons.get(i).getOId().equals(tabButtonVO.getOId())) {
|
index = i; // 找到后记录下标
|
break; // 找到后退出循环
|
}
|
}
|
//当选择的按钮为树的第一个节点的时候,他的兄节点是他自己,导致调整为下级按钮时出错,故作此判断。
|
if(index == 0){
|
return BaseResult.fail("当前节点不存在兄节点,无法调整为下级按钮!");
|
}
|
//设置父id为上一个节点的
|
tabButtonVO.setParentOid(plTabButtons.get(index-1).getOId());
|
PLTabButton plTabButton = this.tabButtonVO2TabButton(new PLTabButton(), tabButtonVO);
|
boolean success = platformClientUtil.getUIService().updatePLTabButton(plTabButton);
|
if(success == false) {
|
return BaseResult.fail("修改失败!");
|
}
|
return BaseResult.fail("修改成功!");
|
}
|
|
/**
|
* 调整为上级按钮
|
* @param tabButtonVO
|
* @return
|
*/
|
@Override
|
public BaseResult exitBtn(PLTabButtonVO tabButtonVO) throws PLException {
|
tabButtonVO.setParentOid("");
|
PLTabButton plTabButton = this.tabButtonVO2TabButton(new PLTabButton(), tabButtonVO);
|
boolean success = platformClientUtil.getUIService().updatePLTabButton(plTabButton);
|
if(success == false) {
|
BaseResult.fail("撤销失败!");
|
}
|
return BaseResult.success("撤销成功!");
|
}
|
|
/**
|
* 处理配置的event事件
|
* @param d
|
* @param pdVO
|
* @return
|
*/
|
private PLDefination setEventDataToPLDefination(PLDefination d,PLDefinationVO pdVO){
|
Map<String, String> eventMap = pdVO.getEventMap();
|
if(Func.isNotEmpty(eventMap)){
|
String eventKey = eventMap.keySet().stream().collect(Collectors.joining(","));
|
d.setEventKey(eventKey);
|
String eventValue = eventMap.values().stream().collect(Collectors.joining(","));
|
d.setEventValue(eventValue);
|
}else{
|
d.setEventKey("");
|
d.setEventValue("");
|
}
|
return d;
|
}
|
|
private boolean baseInfoIsOk(PLPageDefination pd, boolean isEdit) throws PLException{
|
boolean res = false;
|
if(!checkRequiredIsOk("名称", pd.name)){
|
return false;
|
}
|
//short类型的就不用检查了
|
/*else if(!checkRequiredIsOk("编号", pd.seq)){
|
return false;
|
}*/
|
res = true;
|
return res;
|
}
|
|
private boolean checkRequiredIsOk(String tip, String txt) throws PLException {
|
boolean res = false;
|
if(Func.isBlank(txt)){
|
throw new PLException("500", new String[]{tip + " 不能为空!"});
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
/**
|
* 页面定义名称和编号查重
|
* @param pd
|
* @param isEdit
|
* @throws PLException
|
*/
|
private void newPLDefinationIsOk(PLDefinationVO pd, boolean isEdit) throws PLException{
|
boolean nameExist = false;
|
boolean seqExist = false;
|
PLPageDefination[] pds = platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(pd.getTabPageOId());
|
for (PLPageDefination pdGet : pds) {
|
if(!isEdit){
|
if(pd.getName().equals(pdGet.name)){
|
nameExist = true;
|
} else if(Short.parseShort(pd.getSeq()) == pdGet.seq){
|
seqExist = true;
|
}
|
} else {
|
if(!pd.getId().equals(pdGet.plOId)){
|
if(pd.getName().equals(pdGet.name)){
|
nameExist = true;
|
} else if(Short.parseShort(pd.getSeq()) == pdGet.seq){
|
seqExist = true;
|
}
|
}
|
}
|
if(nameExist || seqExist){
|
break;
|
}
|
}
|
if(nameExist){
|
throw new VciBaseException("名称已经存在!");
|
}
|
|
if(seqExist){
|
throw new VciBaseException("编号已经存在!");
|
}
|
}
|
|
/**
|
* 给区域中添加数据前校验
|
* @param plTabPage
|
* @return
|
*/
|
private void checkEdit(PLTabPage plTabPage) throws PLException {
|
/*if(plTabPage.plSeq >= 0){
|
throw new VciBaseException("序号不能为空!");
|
}else if(!isNumber(plseq.getText().trim())){
|
throw new VciBaseException("序号只能是数字,请重新填写!");
|
}*/
|
if(!checkTabPageUIParserIsOk(plTabPage)){
|
throw new VciBaseException("UI解析类格式不正确,请重新填写!");
|
}
|
//独立出来单独做一个接口让前端进行调用
|
/*else if(!checkTabPageExtAttrIsOk(plTabPage)){
|
//给出提示,对于mpm配置可以允许其保存,具体解析mpm自己控制 by liucq
|
int confirm = VCIOptionPane.showConfirmDialog(PLTApplication.frame, "扩展属性数据格式不正确\n是否继续保存?", "系统提示", JOptionPane.YES_NO_OPTION);
|
}*/
|
|
PLTabPage[] tps = platformClientUtil.getUIService().getTabPagesByContextIdAndType(plTabPage.plContextOId, plTabPage.plAreaType);
|
for (PLTabPage tp : tps) {
|
if(tp.plSeq == plTabPage.plSeq && !tp.plOId.equals(plTabPage.plOId)){
|
throw new VciBaseException("序号重复!");
|
}
|
if(tp.plName.equalsIgnoreCase(plTabPage.plName) && !tp.plOId.equals(plTabPage.plOId)){
|
throw new VciBaseException("名称重复!");
|
}
|
if(tp.plCode.equalsIgnoreCase(plTabPage.plCode) && !tp.plOId.equals(plTabPage.plOId)){
|
throw new VciBaseException("页面编码重复!");
|
}
|
}
|
}
|
|
/**
|
* 检查UI解析类是否合规
|
* @param tabPage
|
* @return
|
*/
|
private boolean checkTabPageUIParserIsOk(PLTabPage tabPage){
|
// 数据格式: java_cs:xxx;java_bs:xxx;net_cs:xxx;net_bs:xxx;mobile_cs:xx;mobile_bs:xxx;
|
String uiParser = tabPage.plUIParser;
|
return checkExtValIsOk(uiParser);
|
}
|
|
/**
|
* UI解析类正则检查
|
* @param value
|
* @return
|
*/
|
private boolean checkExtValIsOk(String value){
|
boolean res = true;
|
if(value == null || "".equals(value)){
|
return res;
|
}
|
Pattern ptn = Pattern.compile("([\\w\\.\\_\\-\\+]+:[\\w\\.\\_\\-\\+]+(;)?)+");
|
res = ptn.matcher(value).matches();
|
return res;
|
}
|
|
/**
|
* 获取UI授权树
|
* @param treeQueryObject
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public List<Tree> getUIAuthor(BaseQueryObject treeQueryObject) throws Exception {
|
|
Map<String, String> conditionMap = treeQueryObject.getConditionMap();
|
if (conditionMap == null) {
|
conditionMap = new HashMap<>();
|
}
|
String roleId = StringUtils.isBlank(conditionMap.get("roleId")) ? "" : conditionMap.get("roleId");
|
String type = StringUtils.isBlank(conditionMap.get("type")) ? "" : conditionMap.get("type");
|
String context = StringUtils.isBlank(conditionMap.get("context")) ? "" : conditionMap.get("context");
|
boolean showCheckBox = Boolean.parseBoolean(conditionMap.get("showCheckBox"));
|
Map<String,RoleRightVO> roleRightVOMap=new HashMap<>();
|
if(StringUtils.isNotBlank(roleId)){
|
String userName= WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
|
RoleRightInfo[] rightInfos= platformClientUtil.getFrameworkService().getRoleRightList(roleId,userName);
|
List<RoleRightVO> roleRightVOList=roleRightDOO2VOS(Arrays.asList(rightInfos));
|
roleRightVOMap=roleRightVOList.stream().collect(Collectors.toMap(RoleRightVO::getFuncId,roleRightVO ->roleRightVO,(oldValue,newOldValue)->oldValue));
|
}
|
BizType[] bizTypes=osBtmServiceI.getBizTypes(type);
|
List<Tree> treeList=new ArrayList<>();
|
Tree rootNode =new Tree("root","功能模块","root");
|
rootNode.setLevel(0);
|
rootNode.setShowCheckbox(true);
|
rootNode.setExpanded(true);
|
List<Tree> childList=new ArrayList<>();
|
for (int i = 0; i < bizTypes.length; i++) {
|
Tree bizTypeTree = new Tree(bizTypes[i].oid,bizTypes[i].name,bizTypes[i]);//(btmItems[i].label+" ["+ btmItems[i].name+"]", btmItems[i]);
|
bizTypeTree.setLevel(1);
|
bizTypeTree.setShowCheckbox(true);
|
bizTypeTree.setParentId(rootNode.getOid());
|
bizTypeTree.setParentName(rootNode.getText());
|
bizTypeTree.setShowCheckbox(true);
|
bizTypeTree.setParentBtmName(bizTypes[i].name);
|
childList.add(bizTypeTree);
|
List<PLUILayout>contextList=getUIContextDataByBtName(bizTypes[i].name,context);
|
List<Tree> btmChildList=new ArrayList<>();
|
btmChildList.add(bizTypeTree);
|
setChildNode(btmChildList,contextList,roleRightVOMap,showCheckBox);
|
}
|
rootNode.setChildren(childList);
|
treeList.add(rootNode);
|
return treeList;
|
}
|
|
/***
|
* UI授权
|
* @param uiAuthorDTO
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public boolean authorizedUI(UIAuthorDTO uiAuthorDTO) throws Exception {
|
boolean res=false;
|
if(uiAuthorDTO==null||CollectionUtil.isEmpty(uiAuthorDTO.getSelectTreeList())){
|
throw new VciBaseException("请选择节点进行授权!");
|
}
|
BaseQueryObject treeQueryObject=new BaseQueryObject();
|
Map<String,String> conditionMap = new HashMap<>();
|
conditionMap.put("roleId",uiAuthorDTO.getRoleId());
|
conditionMap.put("type",uiAuthorDTO.getType());
|
conditionMap.put("context",uiAuthorDTO.getContext());
|
conditionMap.put("showCheckBox","true");
|
treeQueryObject.setConditionMap(conditionMap);
|
List<Tree> treeList=this.getUIAuthor(treeQueryObject);
|
HashMap<String,Tree> allTreeMap=new HashMap<>();
|
Map<String,RoleRightDTO> roleRightVOMap=new HashMap<>();
|
if(!CollectionUtil.isEmpty(treeList)){
|
if(StringUtils.isNotBlank(uiAuthorDTO.getRoleId())){
|
String userName= WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId();
|
RoleRightInfo[] rightInfos= platformClientUtil.getFrameworkService().getRoleRightList(uiAuthorDTO.getRoleId(),userName);
|
List<RoleRightVO> roleRightVOList=roleRightDOO2VOS(Arrays.asList(rightInfos));
|
roleRightVOMap=roleRightVOList.stream().collect(Collectors.toMap(RoleRightVO::getFuncId,roleRightVO ->roleRightVOO2DTO(roleRightVO),(oldValue,newValue)->oldValue));
|
}
|
convertTreeDOO2Map(treeList,allTreeMap);
|
List<RoleRightDTO> roleRightDTOList=new ArrayList<>();
|
List<Tree> selectTreeList= uiAuthorDTO.getSelectTreeList();
|
getSelectedRoleRightObjs(uiAuthorDTO.getRoleId(),selectTreeList,allTreeMap,roleRightVOMap,roleRightDTOList);
|
SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
|
String currentUserName = sessionInfo.getUserId();
|
boolean isDeveloper= rightControlUtil.isDeveloper(currentUserName);
|
List<RoleRightInfo> roleRightInfoList= roleRightDTOO2InfoS(roleRightDTOList);
|
UserEntityInfo info=new UserEntityInfo();
|
info.modules="UI授权";
|
info.userName=currentUserName;
|
try {
|
res= platformClientUtil.getFrameworkService().saveRoleRight(roleRightInfoList.toArray(new RoleRightInfo[]{}),uiAuthorDTO.getRoleId(),currentUserName,info);
|
}catch (PLException e){
|
throw new Exception("保存失败:"+e.getMessage());
|
}
|
}
|
return res;
|
}
|
|
/**
|
*根据权限计算上下权限
|
* @param roleOid
|
* @param selectTreeList
|
* @param allTreeMap
|
* @param roleRightDTOList
|
*/
|
private void getSelectedRoleRightObjs(String roleOid,List<Tree> selectTreeList,HashMap<String,Tree> allTreeMap,Map<String,RoleRightDTO> allRoleRightDTOMap, List<RoleRightDTO> roleRightDTOList){
|
Date date=new Date();
|
Map<String,RoleRightDTO> roleRightDTOMap=new HashMap<>();
|
if(!CollectionUtil.isEmpty(selectTreeList)){
|
selectTreeList.stream().forEach(tree -> {
|
String oid=tree.getOid();
|
if(allTreeMap.containsKey(oid)){
|
tree= allTreeMap.get(oid);
|
Object data= tree.getData();
|
if (data instanceof String) {
|
getRightValue(roleOid, tree, allTreeMap, false, roleRightDTOMap);//向下获取所有模块的权限值
|
} else if (!(data instanceof PLTabButton)) {//业务类型
|
getRightValue(roleOid, tree, allTreeMap, true, roleRightDTOMap);//向上处理
|
getRightValue(roleOid, tree, allTreeMap, false, roleRightDTOMap);//向下处理(包含当前节点)
|
} else if (data instanceof PLTabButton) {//按钮
|
String parrentId=tree.getParentId();
|
if(allTreeMap.containsKey(parrentId)){
|
SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
|
String currentUserName = sessionInfo.getUserId();
|
boolean isDeveloper= rightControlUtil.isDeveloper(currentUserName);
|
Tree parentNode= allTreeMap.get(parrentId);
|
String funcId = parentNode.getOid();
|
getRightValue(roleOid,tree, allTreeMap, true, roleRightDTOMap);//向上处理该操作父级的上级模块权限(不包含父节点)
|
if(!roleRightDTOMap.containsKey(funcId)){
|
RoleRightDTO roleRightDTO = new RoleRightDTO();
|
roleRightDTO.setId(ObjectUtility.getNewObjectID36());//主键
|
roleRightDTO.setFuncId(funcId);
|
if(isDeveloper) {
|
roleRightDTO.setRightType((short) 1);//权限类型 权限类型,超级管理员给管理员授权为1,管理员给普通用户授权为2
|
}else{
|
roleRightDTO.setRightType((short) 2);
|
}
|
roleRightDTO.setRightValue(1);// 权限值,没有操作的模块权限值存储为0
|
roleRightDTO.setRoleId(roleOid);//角色ID
|
roleRightDTO.setCreateUser(currentUserName);//创建者
|
roleRightDTO.setCreateTime(VciDateUtil.date2Str(new Date(),""));//创建时间
|
roleRightDTO.setModifyUser(currentUserName);//修改者
|
roleRightDTO.setModifyTime(VciDateUtil.date2Str(new Date(),""));//修改时间
|
roleRightDTO.setLicensor("");
|
if(!roleRightDTOMap.containsKey(funcId)){
|
roleRightDTOMap.put(funcId, roleRightDTO);
|
}
|
roleRightDTOMap.put(funcId, roleRightDTO);
|
}
|
}
|
|
}
|
|
}
|
});
|
/* allRoleRightDTOMap.putAll(roleRightDTOMap.entrySet().stream()
|
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry:: getValue)));*/
|
List<RoleRightDTO> newRoleRightDTOList=Optional.ofNullable(roleRightDTOMap).orElseGet(()->new HashMap<String,RoleRightDTO>()).values().stream().collect(Collectors.toList());
|
roleRightDTOList.addAll(newRoleRightDTOList);
|
}
|
}
|
|
/**
|
* 获取权限
|
* @param isUp 是否是向上获取,如果是向上获取,传进来的必然是模块节点,且上级模块必然是没有选中
|
*/
|
private void getRightValue(String roleId,Tree node,HashMap<String,Tree> allTreeMap,boolean isUp,Map<String,RoleRightDTO> rightMap){
|
SessionInfo sessionInfo = WebThreadLocalUtil.getCurrentUserSessionInfoInThread();
|
String currentUserName = sessionInfo.getUserId();
|
boolean isDeveloper= rightControlUtil.isDeveloper(currentUserName);
|
String id=ObjectUtility.getNewObjectID36();
|
Object data=node.getData();
|
if(isUp) {//向上获取,存储每个上级模块的权限值
|
while (!"root".equals(node.getData())){
|
data=node.getData();
|
String oid=node.getOid();
|
if(allTreeMap.containsKey(oid)){
|
String funcId = "";
|
if (data instanceof BizType) {
|
BizType bizType = (BizType) data;
|
funcId = bizType.name;
|
} else if (data instanceof PLUILayout) {
|
PLUILayout context = (PLUILayout)data;
|
funcId = context.plOId;
|
} else if (data instanceof PLTabPage) {
|
PLTabPage tab = (PLTabPage) data;
|
funcId = tab.plOId;
|
} else if (data instanceof PLPageDefination){
|
PLPageDefination pageDef = (PLPageDefination) data;
|
funcId = pageDef.plOId;
|
} else if (data instanceof PLTabButton) {
|
PLTabButton but = (PLTabButton)data;
|
funcId = but.plOId;
|
}
|
RoleRightDTO roleRightDTO = new RoleRightDTO();
|
roleRightDTO.setId(id);//主键
|
roleRightDTO.setFuncId(funcId);
|
if(isDeveloper) {
|
roleRightDTO.setRightType((short) 1);//权限类型 权限类型,超级管理员给管理员授权为1,管理员给普通用户授权为2
|
}else{
|
roleRightDTO.setRightType((short) 2);
|
}
|
roleRightDTO.setRightValue(1);// 权限值,没有操作的模块权限值存储为0
|
roleRightDTO.setRoleId(roleId);//角色ID
|
roleRightDTO.setCreateUser(currentUserName);//创建者
|
roleRightDTO.setCreateTime(VciDateUtil.date2Str(new Date(),""));//创建时间
|
roleRightDTO.setModifyUser(currentUserName);//修改者
|
roleRightDTO.setModifyTime(VciDateUtil.date2Str(new Date(),""));//修改时间
|
roleRightDTO.setLicensor("");
|
if(!rightMap.containsKey(funcId)){
|
rightMap.put(funcId, roleRightDTO);
|
}
|
oid= node.getParentId();
|
if(allTreeMap.containsKey(oid)) {
|
node=allTreeMap.get(oid);
|
}
|
}
|
}
|
}else {
|
String funcId = "";
|
if (data instanceof String) {
|
funcId = (String) data;
|
} else if (data instanceof BizType) {
|
BizType bizType = (BizType) data;
|
funcId = bizType.name;
|
} else if (data instanceof PLUILayout) {
|
PLUILayout context = (PLUILayout) data;
|
funcId = context.plOId;
|
} else if (data instanceof PLTabPage) {
|
PLTabPage tab = (PLTabPage) data;
|
funcId = tab.plOId;
|
} else if (data instanceof PLPageDefination) {
|
PLPageDefination pageDef = (PLPageDefination) data;
|
funcId = pageDef.plOId;
|
} else if (data instanceof PLTabButton) {
|
PLTabButton but = (PLTabButton) data;
|
funcId = but.plOId;
|
}
|
if (!(data instanceof PLPageDefination)) {//子节点不是操作
|
if (!rightMap.containsKey(funcId) && !funcId.equals("root")) {
|
RoleRightDTO roleRightDTO = new RoleRightDTO();
|
roleRightDTO.setFuncId(funcId);
|
if (isDeveloper) {
|
roleRightDTO.setRightType((short) 1);//权限类型 权限类型,超级管理员给管理员授权为1,管理员给普通用户授权为2
|
} else {
|
roleRightDTO.setRightType((short) 2);
|
}
|
roleRightDTO.setRightValue(0);//没有操作的模块权限值存储为0
|
roleRightDTO.setRoleId(roleId);
|
roleRightDTO.setCreateUser(currentUserName);
|
roleRightDTO.setCreateTime(VciDateUtil.date2Str(new Date(),""));
|
roleRightDTO.setModifyUser(currentUserName);
|
roleRightDTO.setModifyTime(VciDateUtil.date2Str(new Date(),""));
|
roleRightDTO.setLicensor("");
|
rightMap.put(funcId, roleRightDTO);
|
}
|
for (int i = 0; i < node.getChildren().size(); i++) {
|
//对每个子向下递归遍历
|
getRightValue(roleId, node.getChildren().get(i), allTreeMap, false, rightMap);
|
}
|
} else {
|
if (!rightMap.containsKey(funcId)) {
|
RoleRightDTO roleRightDTO = new RoleRightDTO();
|
roleRightDTO.setFuncId(funcId);
|
roleRightDTO.setRightType((short) 2); // 设置UI权限
|
roleRightDTO.setRightValue(countRightValue(node, true));//没有操作的模块权限值存储为0
|
roleRightDTO.setRoleId(roleId);
|
|
roleRightDTO.setCreateUser(currentUserName);
|
roleRightDTO.setCreateTime(VciDateUtil.date2Str(new Date(),""));
|
roleRightDTO.setModifyUser(currentUserName);
|
roleRightDTO.setModifyTime(VciDateUtil.date2Str(new Date(),""));
|
roleRightDTO.setLicensor("");
|
rightMap.put(funcId, roleRightDTO);
|
}
|
}
|
}
|
}
|
|
/**
|
* 传入直接挂接操作的模块的节点,计算该节点的权限值
|
* @param node 模块节点
|
* @param isAll 是否子级全部选中
|
* @return
|
*/
|
private long countRightValue(Tree node,boolean isAll){
|
long value = 0;
|
for(int i = 0;i < node.getChildren().size();i++){
|
Tree childNode = (Tree)node.getChildren().get(i);
|
if(isAll && node.getData() instanceof PLTabButton ){
|
PLTabButton obj = (PLTabButton)node.getData();
|
value += (long)Math.pow(2, obj.plSeq);//累计加上各个操作的权限值
|
}
|
}
|
return value;
|
}
|
|
/**
|
*
|
* @param treeList 树节点
|
* @param allTreeMap,所有的节点
|
*/
|
private void convertTreeDOO2Map(List<Tree> treeList,Map<String,Tree> allTreeMap){
|
Optional.ofNullable(treeList).orElseGet(()->new ArrayList<Tree>()).stream().forEach(tree -> {
|
List<Tree> childTreeList= tree.getChildren();
|
allTreeMap.put(tree.getOid(),tree);
|
if(!CollectionUtil.isEmpty(childTreeList)){
|
convertTreeDOO2Map(childTreeList,allTreeMap);
|
}
|
});
|
}
|
|
/***
|
* 遍历子节点
|
* @param parentTree
|
* @param contextList
|
* @param roleRightVOMap
|
* @param isShowCheckBox
|
*/
|
private void setChildNode(List<Tree> parentTree, List<PLUILayout>contextList,Map<String,RoleRightVO> roleRightVOMap,boolean isShowCheckBox){
|
Optional.ofNullable(parentTree).orElseGet(()->new ArrayList<Tree>()).stream().forEach(pTree -> {
|
Object funcObj= pTree.getData();
|
List<Tree> chiledTreeList=new ArrayList<>();
|
if (funcObj instanceof BizType) {//业务类型
|
BizType bizType = (BizType) funcObj;
|
if(!CollectionUtil.isEmpty(contextList)) {
|
contextList.stream().forEach(context->{
|
Tree childTree=new Tree(context.plOId,context.plName+"("+context.plCode+")",context);
|
childTree.setParentName(pTree.getText());
|
childTree.setParentBtmName(pTree.getParentBtmName());
|
childTree.setParentId(pTree.getOid());
|
childTree.setLevel(pTree.getLevel()+1);
|
childTree.setShowCheckbox(isShowCheckBox);
|
chiledTreeList.add(childTree);
|
});
|
pTree.setChildren(chiledTreeList);
|
}
|
if(!CollectionUtil.isEmpty(chiledTreeList)) {
|
setChildNode(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox);
|
}
|
}else if (funcObj instanceof PLUILayout){//UI
|
PLUILayout context = (PLUILayout) funcObj;
|
PLTabPage[] pages = new PLTabPage[0];
|
try {
|
pages = platformClientUtil.getUIService().getPLTabPagesByPageDefinationOId(context.plOId);
|
} catch (PLException e) {
|
e.printStackTrace();
|
}
|
if(pages!=null&&pages.length>0){
|
List<PLTabPage> plTabPageList= Arrays.stream(pages).collect(Collectors.toList());
|
plTabPageList.stream().forEach(plTabPage -> {
|
Tree childTree=new Tree(plTabPage.plOId,plTabPage.plName,plTabPage);
|
childTree.setParentName(pTree.getText());
|
childTree.setParentId(pTree.getOid());
|
childTree.setParentBtmName(pTree.getParentBtmName());
|
childTree.setLevel(pTree.getLevel()+1);
|
childTree.setShowCheckbox(isShowCheckBox);
|
chiledTreeList.add(childTree);
|
});
|
pTree.setChildren(chiledTreeList);
|
}
|
if(!CollectionUtil.isEmpty(chiledTreeList)) {
|
setChildNode(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox);
|
}
|
|
}else if (funcObj instanceof PLTabPage) {//上下文
|
PLTabPage plTabPage = (PLTabPage) funcObj;
|
List<PLPageDefination>plPageDefinationList=new ArrayList<>();
|
try {
|
PLPageDefination[] pLPageDefinations = platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(plTabPage.plOId);
|
if(pLPageDefinations!=null&&pLPageDefinations.length>0){
|
plPageDefinationList= Arrays.stream(pLPageDefinations).collect(Collectors.toList());
|
plPageDefinationList.stream().forEach(plPageDefination -> {
|
Tree childTree=new Tree(plPageDefination.plOId,plPageDefination.name,plPageDefination);
|
childTree.setParentName(pTree.getText());
|
childTree.setParentId(pTree.getOid());
|
childTree.setParentBtmName(pTree.getParentBtmName());
|
childTree.setLevel(pTree.getLevel()+1);
|
childTree.setShowCheckbox(isShowCheckBox);
|
chiledTreeList.add(childTree);
|
});
|
pTree.setChildren(chiledTreeList);
|
}
|
if(!CollectionUtil.isEmpty(chiledTreeList)) {
|
setChildNode(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox);
|
}
|
} catch (PLException e) {
|
e.printStackTrace();
|
}
|
|
}else if (funcObj instanceof PLPageDefination) {//
|
PLPageDefination plPageDefination = (PLPageDefination) funcObj;
|
try {
|
List<PLTabButton>plTabButtonList=new ArrayList<>();
|
PLTabButton[] pLTabButtons = platformClientUtil.getUIService().getPLTabButtonsByTableOId(plPageDefination.plOId);
|
if(pLTabButtons!=null&&pLTabButtons.length>0){
|
plTabButtonList= Arrays.stream(pLTabButtons).collect(Collectors.toList());
|
plTabButtonList.stream().forEach(plTabButton -> {
|
Tree childTree=new Tree(plTabButton.plOId,plTabButton.plLabel,plTabButton);
|
childTree.setParentName(pTree.getText());
|
childTree.setParentId(pTree.getOid());
|
childTree.setParentBtmName(pTree.getParentBtmName());
|
childTree.setLevel(pTree.getLevel()+1);
|
childTree.setShowCheckbox(isShowCheckBox);
|
childTree.setLeaf(true);
|
chiledTreeList.add(childTree);
|
});
|
pTree.setChildren(chiledTreeList);
|
}
|
if(!CollectionUtil.isEmpty(chiledTreeList)) {
|
setChildNode(chiledTreeList, contextList, roleRightVOMap, isShowCheckBox);
|
}
|
} catch (PLException e) {
|
e.printStackTrace();
|
}
|
|
}else if (funcObj instanceof PLTabButton) {//按钮
|
PLTabButton plTabButton= (PLTabButton) funcObj;
|
String id =plTabButton.plTableOId;
|
if(roleRightVOMap.containsKey(id)){
|
RoleRightVO roleRightVO = roleRightVOMap.get(id);
|
Long rightValue = roleRightVO.getRightValue();
|
int nodeValue = plTabButton.plSeq;
|
if (nodeValue >= 0 && nodeValue <= 63) {
|
long preValue = (rightValue >> nodeValue) & 1;
|
if (preValue == 1) {
|
pTree.setChecked(true);
|
}
|
}
|
}else{
|
pTree.setChecked(false);
|
}
|
}
|
});
|
}
|
|
|
/**
|
* UI角色对象转换
|
* @param vos
|
* @return
|
*/
|
private List<RoleRightDTO> roleRightVOO2DTOS(List<RoleRightVO> vos){
|
List<RoleRightDTO> roleRightVOS=new ArrayList<>();
|
Optional.ofNullable(vos).orElseGet(()->new ArrayList<>()).stream().forEach(vo -> {
|
RoleRightDTO dto=roleRightVOO2DTO(vo);
|
roleRightVOS.add(dto);
|
});
|
|
return roleRightVOS;
|
}
|
|
|
|
/**
|
* UI角色对象转换
|
* @param infos
|
* @return
|
*/
|
private List<RoleRightVO> roleRightDOO2VOS(List<RoleRightInfo> infos){
|
List<RoleRightVO> roleRightVOS=new ArrayList<>();
|
Optional.ofNullable(infos).orElseGet(()->new ArrayList<>()).stream().forEach(info -> {
|
RoleRightVO vo=roleRightDOO2VO(info);
|
roleRightVOS.add(vo);
|
});
|
|
return roleRightVOS;
|
}
|
/**
|
* UI角色对象转换
|
* @param dtos
|
* @return
|
*/
|
private List<RoleRightInfo> roleRightDTOO2InfoS(List<RoleRightDTO> dtos){
|
List<RoleRightInfo> roleRightInfoList=new ArrayList<>();
|
Optional.ofNullable(dtos).orElseGet(()->new ArrayList<>()).stream().forEach(dto -> {
|
RoleRightInfo info= null;
|
try {
|
info = roleRightDTOO2Info(dto);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
roleRightInfoList.add(info);
|
});
|
|
return roleRightInfoList;
|
}
|
/**
|
* UI角色对象转换
|
* @param info
|
* @return
|
*/
|
private RoleRightVO roleRightDOO2VO(RoleRightInfo info){
|
RoleRightVO vo=new RoleRightVO();
|
vo.setId(info.id);
|
vo.setCreateTime(VciDateUtil.date2Str(VciDateUtil.long2Date(info.createTime),""));
|
vo.setCreateUser(info.createUser);
|
vo.setRoleId(info.roleId);
|
vo.setRightType(info.rightType);
|
vo.setLicensor(info.licensor);
|
vo.setRightValue(info.rightValue);
|
vo.setFuncId(info.funcId);
|
vo.setModifyTime(VciDateUtil.date2Str(VciDateUtil.long2Date(info.modifyTime),""));
|
vo.setModifyUser(info.modifyUser);
|
return vo;
|
}
|
/**
|
* UI角色对象转换
|
* @param vo
|
* @return
|
*/
|
private RoleRightDTO roleRightVOO2DTO(RoleRightVO vo){
|
RoleRightDTO dto=new RoleRightDTO();
|
dto.setId(vo.getId());
|
dto.setCreateTime(vo.getCreateTime());
|
dto.setCreateUser(vo.getCreateUser());
|
dto.setRoleId(vo.getRoleId());
|
dto.setRightType(vo.getRightType());
|
dto.setLicensor(vo.getLicensor());
|
dto.setRightValue(vo.getRightValue());
|
dto.setFuncId(vo.getFuncId());
|
dto.setModifyTime(vo.getModifyTime());
|
dto.setModifyUser(vo.getModifyUser());
|
return dto;
|
}
|
|
/**
|
* UI角色对象转换
|
* @param dto
|
* @return
|
*/
|
private RoleRightInfo roleRightDTOO2Info(RoleRightDTO dto) throws Exception {
|
RoleRightInfo info=new RoleRightInfo();
|
info.id=StringUtils.isBlank(dto.getId())?"":dto.getId();
|
info.createTime=StringUtils.isBlank(dto.getCreateTime())?new Date().getTime():VciDateUtil.getTime(VciDateUtil.str2Date(dto.getCreateTime(),""));
|
info.createUser=StringUtils.isBlank(dto.getCreateUser())?"":dto.getCreateUser();
|
info.roleId=StringUtils.isBlank(dto.getRoleId())?"":dto.getRoleId();
|
info.rightType=dto.getRightType();
|
info.licensor =StringUtils.isBlank(dto.getLicensor())?"":dto.getLicensor();
|
info.rightValue=dto.getRightValue();
|
info.funcId=StringUtils.isBlank(dto.getFuncId())?"":dto.getFuncId();
|
info.modifyTime=StringUtils.isBlank(dto.getModifyTime())? new Date().getTime() :VciDateUtil.getTime(VciDateUtil.str2Date(dto.getModifyTime(),""));
|
info.modifyUser=StringUtils.isBlank(dto.getModifyUser())?"":dto.getModifyUser();
|
return info;
|
}
|
|
/**
|
* 控制区节点及其子节点的克隆
|
* @param obj
|
*/
|
private void savePlpageLayoutDefinationRelation(Object obj,String plUILayoutId) {
|
PLTabPage tabPage = (PLTabPage)obj;
|
try {
|
|
PLPageDefination[] pLPageDefinations = platformClientUtil.getUIService().getPLPageDefinationsByPageContextOId(tabPage.plOId);
|
|
tabPage.plOId = ObjectUtility.getNewObjectID36();
|
tabPage.plContextOId = plUILayoutId;
|
//add by caill start 2016.8.15 导航区、控制区、操作区在没有子节点的情况下的克隆
|
if(pLPageDefinations.length==0){
|
platformClientUtil.getUIService().savePLTabPage(tabPage);
|
}
|
//add by caill end
|
for(int j=0;j<pLPageDefinations.length;j++){
|
PLPageDefination plPageDef = pLPageDefinations[j];
|
|
platformClientUtil.getUIService().savePLTabPage(tabPage);
|
PLTabButton[] pLTabButtons = platformClientUtil.getUIService().getPLTabButtonsByTableOId(plPageDef.plOId);
|
|
plPageDef.plOId = ObjectUtility.getNewObjectID36();
|
plPageDef.plTabPageOId = tabPage.plOId;
|
platformClientUtil.getUIService().savePLPageDefination(plPageDef);
|
|
for(int b=0;b<pLTabButtons.length;b++){
|
PLTabButton plTabButton = pLTabButtons[b];
|
PLCommandParameter[] pLCommandParameters = platformClientUtil.getUIService().getPLCommandParametersByCommandOId(plTabButton.plOId);
|
|
plTabButton.plOId = ObjectUtility.getNewObjectID36();
|
plTabButton.plTableOId = plPageDef.plOId;
|
platformClientUtil.getUIService().savePLTabButton(plTabButton);
|
|
for(int c=0;c<pLCommandParameters.length;c++){
|
final PLCommandParameter plCommandParameter = pLCommandParameters[c];
|
plCommandParameter.plOId = ObjectUtility.getNewObjectID36();
|
plCommandParameter.plCommandOId = plTabButton.plOId;
|
platformClientUtil.getUIService().savePLCommandParameter(plCommandParameter);
|
}
|
}
|
}
|
} catch (PLException e) {
|
e.printStackTrace();
|
}
|
}
|
|
/**
|
* 未做判空处理,调用前请保证obj不为空
|
* @param obj
|
* @throws PLException
|
*/
|
public void checkCodeName(PLUILayout obj) throws PLException {
|
PLUILayout[] plUILayouts = platformClientUtil.getUIService().getPLUILayoutsByRelatedType(obj.plRelatedType);
|
int length = plUILayouts.length;
|
String code = obj.plCode;
|
String name = obj.plName;
|
|
if (Func.isNotBlank(name) || Func.isNotBlank(code)){
|
for (int i =0;i<length;i++){//循环节点的UI上文和名称
|
if (plUILayouts[i].plCode.equalsIgnoreCase(code) || plUILayouts[i].plName.equals(name)){
|
throw new VciBaseException("业务类型下UI名称或UI上下文编码已存在!");
|
}
|
}
|
}
|
}
|
|
/**
|
* ui上下文新增修改前检查
|
* @param pluiLayout
|
*/
|
private void canContinue(PLUILayout pluiLayout){
|
String code = pluiLayout.plCode;
|
String name = pluiLayout.plName;
|
if(Func.isBlank(code)){
|
throw new VciBaseException("上下文编码不能为空!");
|
}
|
if(Func.isBlank(name)){
|
throw new VciBaseException("名称不能为空!");
|
}
|
if((pluiLayout.plIsShowNavigator == 0) && (pluiLayout.plIsShowForm == 0) && (pluiLayout.plIsShowTab == 0)){
|
throw new VciBaseException("上下文至少要包含一个区域!");
|
}
|
}
|
|
/**
|
* 检查名称或者编码是否已存在
|
* @param pluiLayout
|
* @param isEdit
|
* @return
|
* @throws VciBaseException
|
*/
|
private boolean nameOrCodeIsExist(PLUILayout pluiLayout, boolean isEdit) throws PLException {
|
boolean res = false;
|
//查询同一业务类型下的ui上下文,然后查重
|
PLUILayout[] plpagelayoutdefinations = platformClientUtil.getUIService().getPLUILayoutsByRelatedType(pluiLayout.plRelatedType);
|
int length = plpagelayoutdefinations.length;
|
for (int i =0; i<length; i++){
|
String code = plpagelayoutdefinations[i].plCode;
|
String name = plpagelayoutdefinations[i].plName;
|
String ids = plpagelayoutdefinations[i].plOId;
|
if(isEdit){
|
if(!ids.equals(pluiLayout.plOId)){
|
if (pluiLayout.plCode.equalsIgnoreCase(code) || pluiLayout.plName.equals(name)){
|
res = true;
|
break;
|
}
|
}
|
}else {
|
if (code.equalsIgnoreCase(pluiLayout.plCode) || name.equals(pluiLayout.plName)){
|
res = true;
|
break;
|
}
|
}
|
}
|
return res;
|
}
|
|
//基础公共检查接口
|
private abstract class BaseComptInter {
|
|
/**
|
* 公共校验方法
|
* @return
|
* @throws PLException
|
*/
|
public abstract boolean checkInputIsOk() throws PLException;
|
|
/**
|
* 根据类型不同设置不同的属性
|
* @param d
|
* @return
|
*/
|
public abstract PLDefination getNewPLDefination(PLDefination d);
|
|
/**
|
* 非空检查
|
* @param tip 提示信息
|
* @param txt 校验的内容
|
* @param isRequired 是否必填
|
* @return
|
*/
|
protected boolean checkRequiredIsOk(String tip, String txt,boolean isRequired/*是否必填*/){
|
boolean res = false;
|
if(Func.isBlank(txt) && isRequired){
|
throw new VciBaseException(tip + " 不能为空!");
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
/**
|
* 检查BtmType输入是否有效
|
* @param tipName 提示的信息
|
* @param btmName 业务类型名
|
* @return
|
*/
|
protected boolean checkBtmTypeTxtIsOk(String tipName, String btmName,boolean isRequired) throws PLException {
|
boolean res = false;
|
if(tipName == null) return true;
|
if(btmName == null) return true;
|
if(!checkRequiredIsOk(tipName, btmName, isRequired)){
|
res = false;
|
} else if(!checkBtmNameIsExist(tipName, btmName)){
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
/**
|
* 检查业务类型是否存在
|
* @param tip
|
* @param btmName
|
* @return
|
*/
|
protected boolean checkBtmNameIsExist(String tip, String btmName) throws PLException {
|
boolean res = false;
|
String sql = "select count(1) count_ from plbtmtype bt where bt.name='" + btmName.trim() + "'";
|
res = checkCountNotEqualZero(sql);
|
if(!res){
|
throw new PLException("500",
|
new String[]{String.format("%s %s 无效!", tip, btmName)});
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
/**
|
* 执行sql,检查是否有返回值
|
* @param sql
|
* @return
|
*/
|
protected boolean checkCountNotEqualZero(String sql){
|
boolean res = false;
|
try{
|
String[][] kvss = platformClientUtil.getQueryService().queryBySqlWithoutKey(sql);
|
res = Integer.valueOf(kvss[0][0]) > 0;
|
}catch(Exception ex){
|
ex.printStackTrace();
|
}
|
return res;
|
}
|
|
/**
|
* 检查表单输入是否有效
|
* @param tip
|
* @param txtVIName
|
* @param btmLinkType
|
* @return
|
*/
|
protected boolean checkPortalVITxtIsOk(String tip, String txtVIName, String btmLinkType, boolean isRequired) throws PLException {
|
boolean res = false;
|
if(tip == null) return true;
|
if(txtVIName == null) return true;
|
if(!checkRequiredIsOk(tip, txtVIName,isRequired)){
|
res = false;
|
} else if(!checkPortalVIIsExist(tip, txtVIName, btmLinkType)){
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
/**
|
* 检查模板
|
* @param tip
|
* @param txtVIName
|
* @param btmLinkType
|
* @return
|
*/
|
protected boolean checkPortalVIIsExist(String tip, String txtVIName, String btmLinkType) throws PLException {
|
boolean res = false;
|
String sql = "select count(1) count_ from plportalvi vi " +
|
"where vi.typename='" + btmLinkType.trim() + "' " +
|
"and vi.viname='" + txtVIName.trim() + "'";
|
res = checkCountNotEqualZero(sql);
|
if(!res){
|
throw new PLException("500",
|
new String[]{String.format("%s %s 无效!", tip, txtVIName)});
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
/**
|
* 检查查询模板输入是否有效
|
* @param tip 输入框的名称,用来提示
|
* @param txtQTName 查询模板
|
* @param btmLinkType
|
* @return
|
*/
|
protected boolean checkQTNameTxtIsOk(String tip, String txtQTName, String btmLinkType, boolean isRequired) throws PLException {
|
boolean res = false;
|
if(tip == null) return true;
|
if(txtQTName == null) return true;
|
if(!checkRequiredIsOk(tip, txtQTName, isRequired)){
|
res = false;
|
} else if(Func.isNotBlank(txtQTName) && !checkQTIsExist(tip, txtQTName, btmLinkType)){
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
/**
|
* 检查表单输入是否有效
|
* @param tip
|
* @param uiName
|
* @param btmLinkType
|
* @return
|
*/
|
protected boolean checkUILayoutTxtIsOk(String tip, String uiName, String btmLinkType, boolean isRequired) throws PLException {
|
boolean res = false;
|
if(tip == null) return true;
|
if(uiName == null) return true;
|
if(!checkRequiredIsOk(tip, uiName,isRequired)){
|
res = false;
|
} else if(!checkUILayoutIsExist(tip, uiName, btmLinkType)){
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
private boolean checkUILayoutIsExist(String tip, String uiName, String txtType) throws PLException {
|
boolean res = false;
|
String sql = "select count(1) count_ from PLUILAYOUT ui " +
|
"where ui.PLRELATEDTYPE='" + txtType.trim() + "' " +
|
"and ui.plcode='" + uiName.trim() + "'";
|
res = checkCountNotEqualZero(sql);
|
if(!res){
|
throw new PLException("500",
|
new String[]{String.format("%s %s 无效!", tip, uiName)});
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
/**
|
* 检查当前输入的查询模板是否存在
|
* @param tip
|
* @param txtQTName
|
* @param txtType
|
* @return
|
*/
|
protected boolean checkQTIsExist(String tip, String txtQTName, String txtType) throws PLException {
|
boolean res = false;
|
|
String sql = "select count(1) count_ from PL_QTEMPLATE qt " +
|
"where qt.btmname ='" + txtType.trim() + "' " +
|
"and qt.qtname='" + txtQTName.trim() + "'";
|
|
if(!res){
|
throw new PLException("500",
|
new String[]{String.format("%s %s 无效!", tip, txtQTName)});
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
/**
|
* 检查LinkType输入是否有效
|
* @param tip
|
* @param linkTypeName
|
* @return
|
*/
|
protected boolean checkLinkTypeTxtIsOk(String tip, String linkTypeName, boolean isRequired) throws PLException {
|
boolean res = false;
|
if(tip == null) return true;
|
if(linkTypeName == null) return true;
|
if(!checkRequiredIsOk(tip, linkTypeName,isRequired)){
|
res = false;
|
} else if(!checkLinkTypeIsExist(tip, linkTypeName)){
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
private boolean checkLinkTypeIsExist(String tip, String linkTypeName) throws PLException {
|
boolean res = false;
|
String sql = "select count(1) count_ from pllinktype lt " +
|
"where lt.name ='" + linkTypeName.trim() + "'";
|
res = checkCountNotEqualZero(sql);
|
if(!res){
|
throw new PLException("500",
|
new String[]{String.format("%s %s 无效!", tip, linkTypeName)});
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
}
|
|
//模板类型为Custom类型时校验输入
|
@AllArgsConstructor
|
@NoArgsConstructor
|
private class CustomComptCheckInput extends BaseComptInter{
|
|
/**
|
* 控制路径
|
*/
|
private String ctrlPath;
|
|
@Override
|
public boolean checkInputIsOk() throws PLException {
|
boolean res = true;
|
if(!checkRequiredIsOk(this.ctrlPath)){
|
res = false;
|
}
|
return res;
|
}
|
|
/**
|
* 控制路径必输检查
|
* @param ctrlPath
|
* @return
|
*/
|
protected boolean checkRequiredIsOk(String ctrlPath) throws PLException {
|
boolean res = false;
|
String text = ctrlPath.trim();
|
|
if(Func.isBlank(text)){
|
throw new PLException("500", new String[]{"控制路径不能为空!"});
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
@Override
|
public PLDefination getNewPLDefination(PLDefination d) {
|
if(d == null){
|
d = new PLDefination();
|
}
|
d.setControlPath(ctrlPath);
|
return d;
|
}
|
|
}
|
|
@AllArgsConstructor
|
@NoArgsConstructor
|
private class TableComptCheckInput extends BaseComptInter{
|
|
/**
|
* 搜索类型:本对象属性:1,关联对象属性:2
|
*/
|
private String searchTarger;
|
|
/**
|
* 业务类型
|
*/
|
private String btmType;
|
|
/**
|
* 链接类型
|
*/
|
private String linkType;
|
|
/**
|
* 选择模板
|
*/
|
private String txtVIName;
|
|
/**
|
* 查询模板
|
*/
|
private String txtQTName;
|
|
@Override
|
public boolean checkInputIsOk() throws PLException {
|
boolean res = false;
|
if(searchTarger.equals("1")){
|
res = checkBtmTypeInputIsOk(btmType,txtVIName,txtQTName);
|
} else if(searchTarger.equals("2")){
|
res = checkLinkTypeInputIsOk(txtVIName,txtQTName,btmType);
|
}
|
return res;
|
}
|
|
@Override
|
public PLDefination getNewPLDefination(PLDefination d) {
|
if(d == null){
|
d = new PLDefination();
|
}
|
if("1".equals(searchTarger)){
|
d.setSearchTarger("1");
|
d.setShowType(btmType.trim());
|
d.setTemplateId(txtVIName);
|
d.setQueryTemplateName(txtQTName);
|
|
} else if("2".equals(searchTarger)){
|
d.setSearchTarger("2");
|
|
d.setShowType(btmType);
|
d.setLinkType(linkType);
|
d.setTemplateId(txtVIName);
|
d.setQueryTemplateName(txtQTName);
|
}
|
return d;
|
}
|
|
/**
|
* 检查业务类型是否输入,是否存在
|
* @param txtVIName
|
* @param btmType
|
* @param txtQTName
|
* @return
|
*/
|
private boolean checkBtmTypeInputIsOk(String btmType,String txtVIName/*选择模板*/,String txtQTName/*查询模板*/) throws PLException {
|
boolean res = false;
|
if(!super.checkBtmTypeTxtIsOk("业务类型", btmType,true)){
|
res = false;
|
} else if(!super.checkPortalVITxtIsOk("选择模板", txtVIName, btmType,true)){
|
res = false;
|
} else if(!super.checkQTNameTxtIsOk("查询模板", txtQTName, btmType,false)){
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
/**
|
* 检查链接类型是否输入,是否存在
|
* @param txtVIName
|
* @param txtQTName
|
* @param btmType
|
* @return
|
*/
|
private boolean checkLinkTypeInputIsOk(String txtVIName/*选择的模板*/,String txtQTName/*查询模板*/,String btmType) throws PLException {
|
boolean res = false;
|
if(!(this.checkBtmTypeTxtIsOk("目标对象", linkType,true))){
|
res = false;
|
} else if(!(this.checkPortalVITxtIsOk("选择模板", txtVIName, linkType,true))){
|
res = false;
|
} else if(!(this.checkQTNameTxtIsOk("查询模板", txtQTName, linkType,false))){
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
}
|
|
@AllArgsConstructor
|
@NoArgsConstructor
|
private class TreeTableComptCheckInput extends BaseComptInter{
|
|
/**
|
* 搜索类型:本对象属性:1,关联对象属性:2
|
*/
|
private String searchTarger;
|
|
/**
|
* 业务类型
|
*/
|
private String btmType;
|
|
/**
|
* 链接类型
|
*/
|
private String linkType;
|
|
/**
|
* 选择模板
|
*/
|
private String txtVIName;
|
|
/**
|
* 查询模板
|
*/
|
private String txtQTName;
|
|
/**
|
* 树形结构展开列
|
*/
|
private String expandCols;
|
|
/**
|
* 展开形式:逐级展开 1,全部展开 0
|
*/
|
private String expandMode;
|
|
@Override
|
public boolean checkInputIsOk() throws PLException {
|
boolean res = false;
|
if(searchTarger.equals("1")){
|
res = this.checkBtmTypeInputIsOk();
|
} else if(searchTarger.equals("2")){
|
res = checkLinkTypeInputIsOk();
|
}
|
return res;
|
}
|
|
@Override
|
public PLDefination getNewPLDefination(PLDefination d) {
|
if(d == null){
|
d = new PLDefination();
|
}
|
//属性赋值重叠,所以这儿改变了逻辑
|
d.setSearchTarger(searchTarger);
|
d.setShowType(btmType);
|
d.setTemplateId(txtVIName);
|
d.setQueryTemplateName(txtQTName);
|
d.setExpandCols(expandCols);
|
d.setExpandMode(expandMode);
|
if("2".equals(searchTarger)){
|
d.setLinkType(linkType);
|
}
|
return d;
|
}
|
|
private boolean checkBtmTypeInputIsOk() throws PLException {
|
boolean res = false;
|
if(!(super.checkBtmTypeTxtIsOk("顶级节点显示类型", btmType,true))){
|
res = false;
|
} else if(!(super.checkPortalVITxtIsOk("选择模板", txtVIName, btmType,true))){
|
res = false;
|
} else if(!(super.checkQTNameTxtIsOk("查询模板", txtQTName , btmType,false))){
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
private boolean checkLinkTypeInputIsOk() throws PLException {
|
boolean res = false;
|
if(!(super.checkBtmTypeTxtIsOk("顶级节点显示类型", linkType,true))){
|
res = false;
|
} else if(!(super.checkPortalVITxtIsOk("选择模板", txtVIName, linkType,true))){
|
res = false;
|
} else if(!(super.checkQTNameTxtIsOk("查询模板", txtQTName, linkType,false))){
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
}
|
|
@AllArgsConstructor
|
@NoArgsConstructor
|
private class TreeComptCheckInput extends BaseComptInter{
|
|
/**
|
* 业务类型
|
*/
|
private String btmType;
|
|
/**
|
* 链接类型
|
*/
|
private String linkType;
|
|
/**
|
* 查询模板
|
*/
|
private String queryTemplateName;
|
|
/**
|
* 根节点显示表达式
|
*/
|
private String showExpressionRoot;
|
|
/**
|
* 树节点显示表达式
|
*/
|
private String showExpression;
|
|
/**
|
* 参照树设置
|
*/
|
private String refTreeSet;
|
|
|
/**
|
* 分隔符
|
*/
|
private String splitChar;
|
|
/**
|
* 展开方式:逐级展开 1,全部展开 0
|
*/
|
private String expandMode;
|
|
@Override
|
public boolean checkInputIsOk() throws PLException {
|
return checkBtmTypeInputIsOk();
|
}
|
|
@Override
|
public PLDefination getNewPLDefination(PLDefination d) {
|
if(d == null){
|
d = new PLDefination();
|
}
|
d.setShowType(btmType);
|
d.setLinkType(linkType);
|
d.setTemplateId(queryTemplateName);
|
d.setRootContent(showExpressionRoot.trim());
|
d.setShowAbs(showExpression.trim());
|
d.setShowLinkAbs(refTreeSet.trim());
|
d.setSeparator(splitChar.trim());
|
d.setExpandMode(expandMode);
|
return d;
|
}
|
|
private boolean checkBtmTypeInputIsOk() throws PLException {
|
boolean res = false;
|
if(!(super.checkBtmTypeTxtIsOk("业务类型", btmType,true))){
|
res = false;
|
return res;
|
}
|
// 链接类型不为空时,需要同时检查链接类型及链接类型下的查询模板是否有效
|
if(Func.isBlank(linkType)){
|
if(!(super.checkLinkTypeTxtIsOk("链接类型", linkType,false))){
|
res = false;
|
return res;
|
} else if(!(super.checkQTNameTxtIsOk("查询模板", queryTemplateName, linkType,true))){
|
res = false;
|
return res;
|
}
|
} else {
|
// 链接类型为空时,只需要检查业务类型下的查询模板是否有效
|
if(!(super.checkQTNameTxtIsOk("查询模板", queryTemplateName, btmType,true))){
|
res = false;
|
return res;
|
}
|
}
|
|
if(!super.checkRequiredIsOk("根节点显示表达式", showExpressionRoot,true)){
|
res = false;
|
}
|
else if(!super.checkRequiredIsOk("树节点显示表达式", showExpression,true)){
|
res = false;
|
}
|
else if(!super.checkRequiredIsOk("参照树设置", refTreeSet,true)){
|
res = false;
|
}
|
else {
|
res = true;
|
}
|
return res;
|
}
|
|
}
|
|
@AllArgsConstructor
|
@NoArgsConstructor
|
private class UILayoutComptCheckInput extends BaseComptInter{
|
|
/**
|
* 搜索类型:本对象属性:1,关联对象属性:2
|
* 查询类型也是赋值到这个属性上: 业务类型:1,链接类型:2
|
*/
|
private String searchTarger;
|
|
/**
|
* 对象类型
|
*/
|
private String uiBtmType;
|
|
/**
|
* UI定义
|
*/
|
private String uiLayout;
|
|
/**
|
* 查询模板
|
*/
|
private String queryTemplateName;
|
|
/**
|
* 查询对象类型
|
*/
|
private String qryType;
|
|
@Override
|
public boolean checkInputIsOk() throws PLException{
|
return checkUILayoutInputIsOk();
|
}
|
|
@Override
|
public PLDefination getNewPLDefination(PLDefination d) {
|
if (d == null) {
|
d = new PLDefination();
|
}
|
|
d.setSearchTarger(searchTarger);
|
d.setSubUiObjType(uiBtmType.trim());
|
d.setSubUILayout(uiLayout.trim());
|
|
if (searchTarger.equals("1")) {
|
d.setShowType(qryType.trim());
|
} else {
|
d.setLinkType(qryType.trim());
|
}
|
d.setQueryTemplateName(queryTemplateName.trim());
|
|
return d;
|
}
|
|
private boolean checkUILayoutInputIsOk() throws PLException {
|
boolean res = false;
|
if (!(super.checkBtmTypeTxtIsOk("对象类型", uiBtmType,true))) {
|
res = false;
|
} else if (!(super.checkUILayoutTxtIsOk("UI定义", uiLayout, uiBtmType,true))) {
|
res = false;
|
} else if (!(super.checkQTNameTxtIsOk("查询模板", queryTemplateName, qryType,false))) {
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
}
|
|
}
|