package com.vci.web.service.impl;
|
|
import com.vci.common.utility.ObjectUtility;
|
import com.vci.corba.common.PLException;
|
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.model.PLDefination;
|
import com.vci.pagemodel.PLDefinationVO;
|
import com.vci.pagemodel.PLTabButtonVO;
|
import com.vci.pagemodel.PLUILayoutCloneVO;
|
import com.vci.pagemodel.RoleRightVO;
|
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.VciBaseUtil;
|
import com.vci.starter.web.util.VciDateUtil;
|
import com.vci.starter.web.util.WebThreadLocalUtil;
|
import com.vci.web.service.OsBtmServiceI;
|
import com.vci.web.service.UIManagerServiceI;
|
import com.vci.web.util.*;
|
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.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.servlet.http.HttpServletResponse;
|
import javax.swing.*;
|
import java.io.IOException;
|
import java.util.*;
|
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= VciBaseUtil.str2List(context);
|
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上下文(勾选的要导出的控制区的数据)
|
* oids
|
* @return
|
*/
|
@Override
|
public void expUIContextData(String[] oids, HttpServletResponse response) throws PLException, IOException {
|
|
}
|
|
/**
|
* 导入UI上下文
|
* @param file
|
* @return
|
*/
|
@Override
|
public BaseResult impUIContextData(MultipartFile file) {
|
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);
|
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.parseShort(pdVO.getTemplateType());
|
|
d.setName(pdVO.getName().trim());
|
d.setUiParser(pdVO.getUiParser().trim());
|
d.setExtAttr(pdVO.getExtAttr().trim());
|
d.setTemplateType(pdVO.getTemplateType());
|
|
//名称和编号查重
|
newPLDefinationIsOk(pdVO, false);
|
|
// 检查各个类型下的数据是否输入或有效,一共6种类型按类型检验
|
short plType = pd.plType;
|
switch (plType){
|
//Table(表格)
|
case 1:
|
//From(表单)
|
case 4:
|
TableComptCheckInput tci = new TableComptCheckInput(
|
pdVO.getSearchTarger()
|
,pdVO.getBtmType()
|
,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.getBtmType()
|
,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.getBtmType(),
|
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.getBtmType(),
|
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.name = pdVO.getName().trim();
|
pd.seq = Short.valueOf(pdVO.getSeq().trim());
|
pd.desc = pdVO.getDescription();
|
pd.plType = Short.parseShort(pdVO.getTemplateType());
|
|
d.setName(pdVO.getName().trim());
|
d.setUiParser(pdVO.getUiParser().trim());
|
d.setExtAttr(pdVO.getExtAttr().trim());
|
d.setTemplateType(pdVO.getTemplateType());
|
|
this.newPLDefinationIsOk(pdVO, true);
|
|
// 检查各个组件内部的数据是否有效
|
int plType = pdVO.getType();
|
switch (plType){
|
//Table(表格)
|
case 1:
|
//From(表单)
|
case 4:
|
TableComptCheckInput tci = new TableComptCheckInput(
|
pdVO.getSearchTarger()
|
,pdVO.getBtmType()
|
,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.getBtmType()
|
,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.getBtmType(),
|
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.getBtmType(),
|
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().deletePLUILayoutByOidsForCascade(oids);
|
return res;
|
}
|
|
/**
|
* 获取页签区域按钮配置信息
|
* @param pageDefinationOid
|
* @return
|
*/
|
@Override
|
public List<PLTabButtonVO> getTabButton(String pageDefinationOid) {
|
VciBaseUtil.alertNotNull(pageDefinationOid,"页面定义主键");
|
List<PLTabButton> buttonList = new ArrayList<>();
|
try {
|
PLTabButton[] plTabButtons = platformClientUtil.getUIService().getPLTabButtonsByTableOId(pageDefinationOid);
|
buttonList = Arrays.asList(plTabButtons);
|
return this.tabButton2TabButtonVOS(buttonList);
|
} 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 = (LinkedHashMap<String, String>)Arrays.stream(parameters).collect(Collectors.toMap(parm -> parm.plKey, parm -> parm.plValue));
|
plTabButtonVO.setButtonParams(parameterMap);
|
}
|
return plTabButtonVO;
|
}
|
|
/**
|
* 按钮配置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(!buttonParams.isEmpty()) {
|
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();
|
}
|
}
|
if(!buttonParams.isEmpty()){
|
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;
|
}
|
|
|
|
/**
|
* 处理配置的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 res = false;
|
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));
|
}
|
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);
|
if(roleRightVOMap.containsKey(bizTypes[i].oid)){
|
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,RoleRightVO> 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 ->roleRightVO));
|
}
|
convertTreeDOO2Map(treeList,allTreeMap);
|
List<RoleRightDTO> roleRightDTOList=new ArrayList<>();
|
List<Tree> selectTreeList= uiAuthorDTO.getSelectTreeList();
|
getSelectedRoleRightObjs(uiAuthorDTO.getRoleId(),selectTreeList,allTreeMap,roleRightDTOList);
|
}
|
return res;
|
}
|
|
/**
|
*
|
* @param roleOid
|
* @param selectTreeList
|
* @param allTreeMap
|
* @param roleRightDTOList
|
*/
|
private void getSelectedRoleRightObjs(String roleOid,List<Tree> selectTreeList,HashMap<String,Tree> allTreeMap, List<RoleRightDTO> roleRightDTOList){
|
Date date=new Date();
|
Map<String,RoleRightDTO> roleRightDTOMap=new HashMap<>();
|
selectTreeList.stream().forEach(tree -> {
|
RoleRightDTO roleRightDTO=new RoleRightDTO();
|
String id=ObjectUtility.getNewObjectID36();
|
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) {//按钮
|
|
}
|
});
|
|
|
|
}
|
/**
|
* 获取权限
|
* @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 parentOid=node.getParentId();
|
if(allTreeMap.containsKey(parentOid)){
|
String id=ObjectUtility.getNewObjectID36();
|
Tree parentNode =allTreeMap.get(parentOid);
|
Object parentData= parentNode.getData();
|
if(isUp) {//向上获取,存储每个上级模块的权限值
|
while (!"root".equals(parentNode.getData())){
|
String funcId = "";
|
if (parentData instanceof BizType) {
|
BizType bizType = (BizType) parentData;
|
funcId = bizType.name;
|
} else if (parentData instanceof PLUILayout) {
|
PLUILayout context = (PLUILayout)parentData;
|
funcId = context.plOId;
|
} else if (parentData instanceof PLTabPage) {
|
PLTabPage tab = (PLTabPage) parentData;
|
funcId = tab.plOId;
|
} else if (parentData instanceof PLPageDefination){
|
PLPageDefination pageDef = (PLPageDefination) parentData;
|
funcId = pageDef.plOId;
|
} else if (parentData instanceof PLTabButton) {
|
PLTabButton but = (PLTabButton)parentData;
|
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(new Date());//创建时间
|
roleRightDTO.setModifyUser(currentUserName);//修改者
|
roleRightDTO.setModifyTime(new Date());//修改时间
|
roleRightDTO.setLicensor("");
|
if(!rightMap.containsKey(funcId)){
|
rightMap.put(funcId, roleRightDTO);
|
}
|
}
|
}else{
|
String funcId = "";
|
if(parentData instanceof String){
|
funcId = (String)parentData;
|
} else if (parentData instanceof BizType) {
|
BizType bizType = (BizType)parentData;
|
funcId = bizType.name;
|
} else if (parentData instanceof PLUILayout) {
|
PLUILayout context = (PLUILayout)parentData;
|
funcId = context.plOId;
|
} else if (parentData instanceof PLTabPage) {
|
PLTabPage tab = (PLTabPage) parentData;
|
funcId = tab.plOId;
|
} else if (parentData instanceof PLPageDefination){
|
PLPageDefination pageDef = (PLPageDefination) parentData;
|
funcId = pageDef.plOId;
|
} else if (parentData instanceof PLTabButton) {
|
PLTabButton but = (PLTabButton)parentData;
|
funcId = but.plOId;
|
}
|
if(!(parentData 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(new Date());
|
roleRightDTO.setModifyUser(currentUserName);
|
roleRightDTO.setModifyTime(new Date());
|
roleRightDTO.setLicensor("");
|
rightMap.put(funcId, roleRightDTO);
|
}
|
for(int i = 0;i < parentNode.getChildren().size();i++){
|
//对每个子向下递归遍历
|
getRightValue(roleId,parentNode.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(parentNode,true));//没有操作的模块权限值存储为0
|
roleRightDTO.setRoleId(roleId);
|
|
roleRightDTO.setCreateUser(currentUserName);
|
roleRightDTO.setCreateTime(new Date());
|
roleRightDTO.setModifyUser(currentUserName);
|
roleRightDTO.setModifyTime(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);
|
}
|
});
|
}
|
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 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 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;
|
}
|
|
/**
|
* 控制区节点及其子节点的克隆
|
* @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
|
* @return
|
*/
|
protected boolean checkRequiredIsOk(String tip, String txt){
|
boolean res = false;
|
if(Func.isBlank(txt)){
|
throw new VciBaseException(tip + " 不能为空!");
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
/**
|
* 检查BtmType输入是否有效
|
* @param tipName 提示的信息
|
* @param btmName 业务类型名
|
* @return
|
*/
|
protected boolean checkBtmTypeTxtIsOk(String tipName, String btmName) throws PLException {
|
boolean res = false;
|
if(tipName == null) return true;
|
if(btmName == null) return true;
|
if(!checkRequiredIsOk(tipName, btmName)){
|
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) throws PLException {
|
boolean res = false;
|
if(tip == null) return true;
|
if(txtVIName == null) return true;
|
if(!checkRequiredIsOk(tip, txtVIName)){
|
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) throws PLException {
|
boolean res = false;
|
if(tip == null) return true;
|
if(txtQTName == null) return true;
|
if(!checkRequiredIsOk(tip, txtQTName)){
|
res = false;
|
} else if(Func.isBlank(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) throws PLException {
|
boolean res = false;
|
if(tip == null) return true;
|
if(uiName == null) return true;
|
if(!checkRequiredIsOk(tip, uiName)){
|
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) throws PLException {
|
boolean res = false;
|
if(tip == null) return true;
|
if(linkTypeName == null) return true;
|
if(!checkRequiredIsOk(tip, linkTypeName)){
|
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)){
|
res = false;
|
} else if(!super.checkPortalVITxtIsOk("选择模板", txtVIName, btmType)){
|
res = false;
|
} else if(!super.checkQTNameTxtIsOk("查询模板", txtQTName, btmType)){
|
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))){
|
res = false;
|
} else if(!(this.checkPortalVITxtIsOk("选择模板", txtVIName, linkType))){
|
res = false;
|
} else if(!(this.checkQTNameTxtIsOk("查询模板", txtQTName, linkType))){
|
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))){
|
res = false;
|
} else if(!(super.checkPortalVITxtIsOk("选择模板", txtVIName, btmType))){
|
res = false;
|
} else if(!(super.checkQTNameTxtIsOk("查询模板", txtQTName , btmType))){
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
private boolean checkLinkTypeInputIsOk() throws PLException {
|
boolean res = false;
|
if(!(super.checkBtmTypeTxtIsOk("顶级节点显示类型", linkType))){
|
res = false;
|
} else if(!(super.checkPortalVITxtIsOk("选择模板", txtVIName, linkType))){
|
res = false;
|
} else if(!(super.checkQTNameTxtIsOk("查询模板", txtQTName, linkType))){
|
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))){
|
res = false;
|
return res;
|
}
|
// 链接类型不为空时,需要同时检查链接类型及链接类型下的查询模板是否有效
|
if(Func.isBlank(linkType)){
|
if(!(super.checkLinkTypeTxtIsOk("链接类型", linkType))){
|
res = false;
|
return res;
|
} else if(!(super.checkQTNameTxtIsOk("查询模板", queryTemplateName, linkType))){
|
res = false;
|
return res;
|
}
|
} else {
|
// 链接类型为空时,只需要检查业务类型下的查询模板是否有效
|
if(!(super.checkQTNameTxtIsOk("查询模板", queryTemplateName, btmType))){
|
res = false;
|
return res;
|
}
|
}
|
|
if(!super.checkRequiredIsOk("根节点显示表达式", showExpressionRoot)){
|
res = false;
|
}
|
else if(!super.checkRequiredIsOk("树节点显示表达式", showExpression)){
|
res = false;
|
}
|
else if(!super.checkRequiredIsOk("参照树设置", refTreeSet)){
|
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))) {
|
res = false;
|
} else if (!(super.checkUILayoutTxtIsOk("UI定义", uiLayout, uiBtmType))) {
|
res = false;
|
} else if (!(super.checkQTNameTxtIsOk("查询模板", queryTemplateName, qryType))) {
|
res = false;
|
} else {
|
res = true;
|
}
|
return res;
|
}
|
|
}
|
|
}
|