xiejun
2024-08-23 84237d1fb40c38f9501c2f4e501f23e6c167df60
表单表格功能添加
已修改4个文件
已添加3个文件
605 ■■■■■ 文件已修改
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/ClonePortalVIDTO.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/ClonePortalVIDTOList.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/DeletePortalVIDTOList.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PRMItemDTO.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebPortalVIController.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsPortalVIServiceI.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPortalVIServiceImpl.java 332 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/ClonePortalVIDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
package com.vci.dto;
public class ClonePortalVIDTO implements java.io.Serializable{
    private static final long serialVersionUID = -721829341919731723L;
    /**
     * å…‹éš†çš„表单对象
     */
    private PortalVIDTO oldPortalVIDTO;
    /**
     *新表单/表格名称
     */
    private String viName;
    /***
     *业务类型
     */
    private  String typeName;
    /**
     * 0: ä¸šåŠ¡ç±»åž‹; 1: é“¾æŽ¥ç±»åž‹. é»˜è®¤0
     */
    private short typeFlag;
    public PortalVIDTO getOldPortalVIDTO() {
        return oldPortalVIDTO;
    }
    public void setOldPortalVIDTO(PortalVIDTO oldPortalVIDTO) {
        this.oldPortalVIDTO = oldPortalVIDTO;
    }
    public String getViName() {
        return viName;
    }
    public void setViName(String viName) {
        this.viName = viName;
    }
    public String getTypeName() {
        return typeName;
    }
    public void setTypeName(String typeName) {
        this.typeName = typeName;
    }
    public short getTypeFlag() {
        return typeFlag;
    }
    public void setTypeFlag(short typeFlag) {
        this.typeFlag = typeFlag;
    }
    @Override
    public String toString() {
        return "ClonePortalVIDTO{" +
                "oldPortalVIDTO=" + oldPortalVIDTO +
                ", viName='" + viName + '\'' +
                ", typeName='" + typeName + '\'' +
                '}';
    }
}
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/ClonePortalVIDTOList.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.vci.dto;
import java.util.List;
public class ClonePortalVIDTOList implements  java.io.Serializable{
  private List<ClonePortalVIDTO> clonePortalVIDTOList;
    public List<ClonePortalVIDTO> getClonePortalVIDTOList() {
        return clonePortalVIDTOList;
    }
    public void setClonePortalVIDTOList(List<ClonePortalVIDTO> clonePortalVIDTOList) {
        this.clonePortalVIDTOList = clonePortalVIDTOList;
    }
    @Override
    public String toString() {
        return "ClonePortalVIDTOList{" +
                "clonePortalVIDTOList=" + clonePortalVIDTOList +
                '}';
    }
}
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/DeletePortalVIDTOList.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.vci.dto;
import java.util.List;
public class DeletePortalVIDTOList implements java.io.Serializable{
    private static final long serialVersionUID = 3618617014834926325L;
    private List<PortalVIDTO> portalVIDTOList;
    public List<PortalVIDTO> getPortalVIDTOList() {
        return portalVIDTOList;
    }
    public void setPortalVIDTOList(List<PortalVIDTO> portalVIDTOList) {
        this.portalVIDTOList = portalVIDTOList;
    }
    @Override
    public String toString() {
        return "DeletePortalVIDTOList{" +
                "portalVIDTOList=" + portalVIDTOList +
                '}';
    }
}
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/dto/PRMItemDTO.java
@@ -51,9 +51,7 @@
    /**
     * å¾…选择的属性字段
     */
    private List<String[]> itemSelectoutFields=new ArrayList<>();
    private List<String> itemSelectoutFieldList=new ArrayList<>();
    /**
     * éœ€è¦ä½¿ç”¨çš„集合
     */
@@ -614,12 +612,12 @@
        this.itemSeniorQueryBOS = itemSeniorQueryBOS;
    }
    public List<String[]> getItemSelectoutFields() {
        return itemSelectoutFields;
    public List<String> getItemSelectoutFieldList() {
        return itemSelectoutFieldList;
    }
    public void setItemSelectoutFields(List<String[]> itemSelectoutFields) {
        this.itemSelectoutFields = itemSelectoutFields;
    public void setItemSelectoutFieldList(List<String> itemSelectoutFieldList) {
        this.itemSelectoutFieldList = itemSelectoutFieldList;
    }
    public List<String> getItemSearchFieldList() {
@@ -712,7 +710,7 @@
                ", itemPageSize='" + itemPageSize + '\'' +
                ", itemImgWH='" + itemImgWH + '\'' +
                ", itemOutFields='" + itemOutFields + '\'' +
                ", itemSelectoutFields=" + itemSelectoutFields +
                ", itemSelectoutFieldList=" + itemSelectoutFieldList +
                ", itemOutFieldList=" + itemOutFieldList +
                ", itemKeyFields='" + itemKeyFields + '\'' +
                ", itemSearchFieldList=" + itemSearchFieldList +
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/controller/WebPortalVIController.java
@@ -1,16 +1,25 @@
package com.vci.web.controller;
import com.vci.corba.common.PLException;
import com.vci.dto.ClonePortalVIDTOList;
import com.vci.dto.DeletePortalVIDTOList;
import com.vci.dto.OsBtmTypeDTO;
import com.vci.dto.PortalVIDTO;
import com.vci.pagemodel.KeyValue;
import com.vci.pagemodel.PortalVIVO;
import com.vci.starter.web.annotation.controller.VciUnCheckRight;
import com.vci.starter.web.annotation.log.VciBusinessLog;
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.util.VciBaseUtil;
import com.vci.web.enumpck.ItemDblEnum;
import com.vci.web.enumpck.ItemTypeEnum;
import com.vci.web.service.OsPortalVIServiceI;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -23,6 +32,12 @@
@RestController
@RequestMapping("/portalVIController")
public class WebPortalVIController {
    /**
     * æ—¥å¿—
     */
    private Logger logger = LoggerFactory.getLogger(getClass());
    @Autowired
   private OsPortalVIServiceI portalVIServiceI;
    /**
     * è¡¨å•列表
@@ -31,24 +46,93 @@
     * @param baseQueryObject æŸ¥è¯¢æ¡ä»¶
     * @return åˆ—表的内容
     */
    @GetMapping( "/referDataGrid")
    @GetMapping( "/gridPortalVIDatas")
    @VciBusinessLog(operateName = "表单/表格列表")
    public DataGrid<PortalVIVO> referDataGrid(BaseQueryObject baseQueryObject){
    public DataGrid<PortalVIVO> gridPortalVIDatas(BaseQueryObject baseQueryObject){
        return portalVIServiceI.gridPortalVIVOs(baseQueryObject);
    }
    /**
     *根据表单id获取具体数据
     * @param id
     * @return
     */
    @GetMapping( "/getPortalVIById")
    @VciBusinessLog(operateName = "获取表单/表格数据")
    public BaseResult getPortalVIById(@RequestBody String id,@RequestBody String viType){
        try{
            PortalVIVO portalVIVO=  portalVIServiceI.getPortalVIById(id,viType);
           return  BaseResult.success(portalVIVO);
        }catch (Throwable e){
            e.printStackTrace();
            String exceptionMessage = "创建业务类型时出现错误,原因:" + VciBaseUtil.getExceptionMessage(e);
            logger.error(exceptionMessage);
            return BaseResult.fail(exceptionMessage);
        }
    }
    /**
     * è¡¨å•/table保存
     * @param portalVIDTO
     * @return
     */
    @PostMapping("/savePortalVI")
    @VciBusinessLog(operateName = "添加表单/表格")
    @VciBusinessLog(operateName = "保存表单/表格")
    public BaseResult savePortalVI(@RequestBody PortalVIDTO portalVIDTO){
        if(StringUtils.isNotBlank(portalVIDTO.getId())){
            return portalVIServiceI.edit(portalVIDTO);
            return portalVIServiceI.editSave(portalVIDTO);
        }else{
            return portalVIServiceI.add(portalVIDTO);
            return portalVIServiceI.addSave(portalVIDTO);
        }
    }
    /**
     * ä¸šåŠ¡ç±»åž‹åˆ é™¤
     * btmTypeDTO ä¸šåŠ¡ç±»åž‹å¯¹è±¡
     * @return åˆ é™¤ç»“æžœ
     */
    @DeleteMapping("/delete")
    @VciBusinessLog(operateName = "删除表单/表格")
    public BaseResult delete(@RequestBody DeletePortalVIDTOList deletePortalVIDTOList){
        try {
            return portalVIServiceI.delete(deletePortalVIDTOList) ? BaseResult.success("删除成功!"):BaseResult.fail("删除失败!");
        } catch (PLException e) {
            e.printStackTrace();
            String exceptionMessage = "删除表单时出现错误,原因:" + VciBaseUtil.getExceptionMessage(e);
            logger.error(exceptionMessage);
            return BaseResult.fail(exceptionMessage);
        }
    }
    /**
     * ä¸šåŠ¡ç±»åž‹åˆ é™¤
     * btmTypeDTO ä¸šåŠ¡ç±»åž‹å¯¹è±¡
     * @return åˆ é™¤ç»“æžœ
     */
    @DeleteMapping("/deleteByIds")
    @VciBusinessLog(operateName = "删除表单/表格")
    public BaseResult deleteByIds(@RequestBody String ids){
        try {
            return portalVIServiceI.delete(ids) ? BaseResult.success("删除成功!"):BaseResult.fail("删除失败!");
        } catch (PLException e) {
            e.printStackTrace();
            String exceptionMessage = "删除表单时出现错误,原因:" + VciBaseUtil.getExceptionMessage(e);
            logger.error(exceptionMessage);
            return BaseResult.fail(exceptionMessage);
        }
    }
    /**
     *
     */
    @PostMapping("/clone")
    @VciBusinessLog(operateName = "删除表单/表格")
    public BaseResult clone(@RequestBody ClonePortalVIDTOList portalVIDTOList){
        try {
            return portalVIServiceI.clone(portalVIDTOList) ? BaseResult.success("删除成功!"):BaseResult.fail("删除失败!");
        } catch (Throwable e) {
            e.printStackTrace();
            String exceptionMessage = "删除表单时出现错误,原因:" + VciBaseUtil.getExceptionMessage(e);
            logger.error(exceptionMessage);
            return BaseResult.fail(exceptionMessage);
        }
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/OsPortalVIServiceI.java
@@ -1,5 +1,8 @@
package com.vci.web.service;
import com.vci.corba.common.PLException;
import com.vci.corba.portal.data.PortalVI;
import com.vci.dto.ClonePortalVIDTOList;
import com.vci.dto.DeletePortalVIDTOList;
import com.vci.dto.PortalVIDTO;
import com.vci.pagemodel.PortalVIVO;
import com.vci.starter.web.exception.VciBaseException;
@@ -23,7 +26,7 @@
     * @param baseQueryObject æŸ¥è¯¢å¯¹è±¡
     * @return é“¾æŽ¥ç±»åž‹çš„æ˜¾ç¤ºå¯¹è±¡
     */
    DataGrid<PortalVIVO> gridPortalVIVOs(BaseQueryObject baseQueryObject);
    DataGrid<PortalVIVO> gridPortalVIVOs(BaseQueryObject baseQueryObject)throws VciBaseException;
    /***
     * æ·»åŠ è¡¨å•/表格
@@ -31,15 +34,47 @@
     * @return
     * @throws VciBaseException
     */
    BaseResult add(PortalVIDTO portalVIDTO) throws VciBaseException;
    BaseResult addSave(PortalVIDTO portalVIDTO) throws VciBaseException;
    /***
     * èŽ·å–å•æ¡æ•°æ®
     * @param id
     * @return viType
     * @throws VciBaseException
     */
    PortalVIVO getPortalVIById(String  id,String viType) throws  PLException;
    /***
     * æ›´æ”¹è¡¨å•/表格
     * @param portalVIDTO
     * @return
     * @throws VciBaseException
     */
    BaseResult edit(PortalVIDTO portalVIDTO) throws VciBaseException;
    BaseResult editSave(PortalVIDTO portalVIDTO) throws VciBaseException;
    /**
     * åˆ é™¤æ•°æ®
     * @param portalVIDTOList
     * @return
     * @throws PLException
     */
    boolean  delete(DeletePortalVIDTOList portalVIDTOList)throws  PLException;
    /**
     * åˆ é™¤æ•°æ®
     * @param ids
     * @return
     * @throws PLException
     */
    boolean  delete(String ids)throws  PLException;
    /**
     * å…‹éš†æ•°æ®
     * @param portalVIDTOList
     * @return
     * @throws PLException
     */
    boolean  clone(ClonePortalVIDTOList portalVIDTOList)throws  Throwable;
    /**
     *查询所有表单或者表格
@@ -76,4 +111,17 @@
     * @return
     */
    public   PortalVI portalVIDTOO2VI(PortalVIDTO portalVIDTO);
    /**
     *  PortalVI转成DTO
     * @param PortalVIS
     * @return
     */
    public List<PortalVIDTO> portalVIO2DTOS(Collection<PortalVI> PortalVIS);
    /***
     * PortalVI转成DTO
     * @param portalVI
     * @return
     */
    public PortalVIDTO  portalVIO2DTO(PortalVI portalVI);
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPortalVIServiceImpl.java
@@ -5,9 +5,7 @@
import com.vci.corba.common.PLException;
import com.vci.corba.portal.PortalService.GetPagePortalVIArrayByPageInfoResult;
import com.vci.corba.portal.data.PortalVI;
import com.vci.dto.PRMDTO;
import com.vci.dto.PRMItemDTO;
import com.vci.dto.PortalVIDTO;
import com.vci.dto.*;
import com.vci.model.*;
import com.vci.pagemodel.*;
import com.vci.starter.web.exception.VciBaseException;
@@ -22,9 +20,12 @@
import com.vci.web.util.PlatformClientUtil;
import com.vci.web.util.UITools;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -37,6 +38,10 @@
*/
@Service
public class OsPortalVIServiceImpl implements OsPortalVIServiceI  {
    /**
     * æ—¥å¿—
     */
    private Logger logger = LoggerFactory.getLogger(getClass());
    /**
     * åŠ è½½è‡ªèº«
     */
@@ -72,19 +77,22 @@
        }
        String viName=StringUtils.isBlank(conditionMap.get("viName"))?"":conditionMap.get("viName");
        String viTypeLabel=StringUtils.isBlank(conditionMap.get("viType"))?"":conditionMap.get("viType");
        PortalVIType  portalVIType= PortalVIType.getByLabel(viTypeLabel);
        PortalVIType  portalVIType= PortalVIType.getByName(viTypeLabel);
        Short viType=-1;
        if(portalVIType!=null){
            viType=portalVIType.getIntVal();
        }
        String viTypeFlagLabel=StringUtils.isBlank(conditionMap.get("viTypeFlag"))?"":conditionMap.get("viTypeFlag");
        PortalVITypeFlag portalVITypeFlag= PortalVITypeFlag.getByLabel(viTypeFlagLabel);
        PortalVITypeFlag portalVITypeFlag= PortalVITypeFlag.getByName(viTypeFlagLabel);
        Short viTypeFlag=-1;
        if(portalVITypeFlag!=null){
            viTypeFlag=portalVITypeFlag.getIntVal();
        }
        long pageIndex=baseQueryObject.getPage();
        long pageSize=baseQueryObject.getLimit();
        if(pageSize==-1){
            pageSize=25;
        }
        DataGrid<PortalVIVO> dataGrid = new DataGrid<>();
        try {
            GetPagePortalVIArrayByPageInfoResult pagePortalVIArrayByPageInfoResult= platformClientUtil.getPortalService().getPagePortalVIArrayByPageInfo(typeName,viName,viType,viTypeFlag,pageIndex,pageSize);
@@ -110,9 +118,30 @@
     * @throws PLException
     */
    @Override
    public BaseResult add(PortalVIDTO portalVIDTO) throws VciBaseException {
    public BaseResult addSave(PortalVIDTO portalVIDTO) throws VciBaseException {
        return  savePortalVIDTO(portalVIDTO,false);
    }
    /**
     * æ ¹æ®è¡¨å•id获取具体数据
     * @param id
     * @param viType
     * @return
     * @throws VciBaseException
     */
    @Override
    public PortalVIVO getPortalVIById(String id,String viType) throws PLException {
        VciBaseUtil.alertNotNull(id,"主键为空!");
        String lableName=PortalVIType.Form.getLabel();
        if(PortalVIType.Table.getName()==viType){
            lableName=PortalVIType.Table.getLabel();
        }
        PortalVIVO portalVIVO=new PortalVIVO();
        PortalVI portalVI=  platformClientUtil.getPortalService().getPortalVIById(id);
        portalVIVO=portalVIDOO2VO(portalVI);
        return portalVIVO;
    }
    /***
     * è¡¨å•/表格更改
     * @param portalVIDTO
@@ -120,9 +149,102 @@
     * @throws PLException
     */
    @Override
    public BaseResult edit(PortalVIDTO portalVIDTO) throws VciBaseException {
    public BaseResult editSave(PortalVIDTO portalVIDTO) throws VciBaseException {
        return  savePortalVIDTO(portalVIDTO,true);
    }
    @Override
    public boolean delete(DeletePortalVIDTOList portalVIDTOList) throws PLException {
        if(portalVIDTOList==null||CollectionUtils.isEmpty(portalVIDTOList.getPortalVIDTOList())){
            VciBaseUtil.alertNotNull("请选择要删除的对象!");
        }
        try {
            for(PortalVIDTO portalVIDTO:portalVIDTOList.getPortalVIDTOList()) {
                boolean formFlag = false;
                short viType = portalVIDTO.getViType();
                String typeName = portalVIDTO.getTypeName();
                String viewName = portalVIDTO.getViName();
                String id = portalVIDTO.getId();
                if (viType == PortalVIType.Form.getIntVal()) {
                    // åˆ¤æ–­è¯¥è¡¨å•是否在表格中被引用
                    formFlag = platformClientUtil.getPortalService().judgeDeleteButton(id, typeName);
                    if (formFlag) {
                        throw new Throwable(viewName + "表单已经在表格中被引用,请重新选择要删除的对象!");
                    }
                }
                // åˆ¤æ–­è¯¥è¡¨å•或表格是否在UI定义时被引用
                formFlag = platformClientUtil.getPortalService().judgeUpdateButton(viType, viewName, typeName);
                if (formFlag) {
                    throw new Throwable(viewName + "数据已经被UI组件引用,请重新选择要删除的对象!");
                }
                UITools.getService().deletePortalVIByID(id);
            }
        }catch (Throwable e){
            String exceptionMessage = "删除表单时出现错误,原因:" + VciBaseUtil.getExceptionMessage(e);
            logger.error(exceptionMessage);
            throw  new PLException("100",new String[]{exceptionMessage});
        }
        return true;
    }
    @Override
    public boolean delete(String ids) throws PLException {
        VciBaseUtil.alertNotNull(ids,"主键");
         List<String> idsList=  VciBaseUtil.str2List(ids);
        List<PortalVI> PortalVIList= new ArrayList<>();
        DeletePortalVIDTOList portalVIDTOList=new DeletePortalVIDTOList();
        idsList.stream().forEach(id->{
            PortalVI portalVI= null;
            try {
                portalVI = platformClientUtil.getPortalService().getPortalVIById(id);
                PortalVIList.add(portalVI);
            } catch (PLException e) {
                e.printStackTrace();
            }
        });
        portalVIDTOList.setPortalVIDTOList(portalVIO2DTOS(PortalVIList));
        return delete(portalVIDTOList);
    }
    /**
     * è¡¨å•/表格克隆
     * @param clonePortalVIDTOList
     * @return
     * @throws VciBaseException
     */
    @Override
    public boolean clone(ClonePortalVIDTOList clonePortalVIDTOList) throws VciBaseException {
        if(clonePortalVIDTOList==null||CollectionUtils.isEmpty(clonePortalVIDTOList.getClonePortalVIDTOList())){
            throw  new VciBaseException("请选择要克隆的对象!");
        }
        try {
            for (ClonePortalVIDTO clonedestObject : clonePortalVIDTOList.getClonePortalVIDTOList()) {
                String viName = clonedestObject.getViName();
                PortalVIDTO portalVIDTO = clonedestObject.getOldPortalVIDTO();
                String typeName = clonedestObject.getTypeName();
                short typeFlag = clonedestObject.getTypeFlag();
                if (viName != null) {
                    VciBaseUtil.alertNotNull(viName, "克隆名称不允许为空");
                    PortalVI portalVI = UITools.getService().getPortalVIById(portalVIDTO.getId());
                    portalVI.id = ObjectUtility.getNewObjectID36();
                    portalVI.viName = viName;
                    //如果克隆选择了业务类型则拷贝到新的业务类型下
                    if (StringUtils.isNotBlank(typeName)) {
                        portalVI.typeName = typeName;
                    }
                    if (typeFlag == PortalVITypeFlag.BtmType.getIntVal() || typeFlag == PortalVITypeFlag.LinkType.getIntVal()) {
                        portalVI.typeFlag = typeFlag;
                    }
                    UITools.getService().savePortalVI(portalVI);
                }
            }
        }catch (PLException e){
            throw new VciBaseException("克隆出现异常:"+e.getMessage());
        }
        return true;
    }
    private BaseResult savePortalVIDTO(PortalVIDTO portalVIDTO,boolean isEdit)  {
        boolean _isBtm=false;
@@ -158,7 +280,7 @@
                               throw  new Throwable("该"+labelName+"已经被引用,不能修改名称!");
                           }
                       } catch (PLException e) {
                           throw  new Throwable("查询");
                           throw  new Throwable("查询原有表单出现异常:"+e.getMessage());
                       }
                       if (!portalVI.id.equals(portalVIDTO.getId())) {
                           if (portalVI.viName.equals(portalVIDTO.getViName())) {
@@ -175,48 +297,29 @@
            }else{
                flag=platformClientUtil.getPortalService().judgeUpdateButton(portalVIDTO.getTypeFlag(), portalVIDTO.getViName(), portalVIDTO.getTypeName());
            }
            flag=  saveForm(portalVIDTO,isEdit);
            PortalVI pvi=portalVIDTOO2VI(portalVIDTO);
            if (!isEdit) {
                flag= platformClientUtil.getPortalService().savePortalVI(pvi);
            } else {
                flag= platformClientUtil.getPortalService().updatePortalVI(pvi);
            }
            if(flag){
                return  BaseResult.success("保存"+labelName+"成功!");
            }else{
                new Throwable("保存"+labelName+"失败!");
            }
        } catch (Throwable e) {
           // throw new VciBaseException("保存表单出现异常:"+e.getMessage());
          return    BaseResult.fail("保存"+labelName+"出现异常:"+e.getMessage());
            String exceptionMessage = "保存"+labelName+"出现异常:"+ VciBaseUtil.getExceptionMessage(e);
            logger.error(exceptionMessage);
          return    BaseResult.fail(exceptionMessage);
        }
        return  BaseResult.success("保存"+labelName+"成功!");
    }
    /**
     * è¡¨å•/表格
     * @param portalVIDTO
     * @param isEdit
     * @return
     */
    private boolean saveForm(PortalVIDTO portalVIDTO,boolean isEdit) {
        List<PRMItemDO> prmItemList = new ArrayList<PRMItemDO>();
        try {
            PortalVI pvi=portalVIDTOO2VI(portalVIDTO);
            boolean res=false;
            if (!isEdit) {
                res= platformClientUtil.getPortalService().savePortalVI(pvi);
            } else {
                res= platformClientUtil.getPortalService().updatePortalVI(pvi);
            }
            return res;
        } catch (Throwable e) {
             e.printStackTrace();
                return false;
        }
    }
    @Override
    public Map<String, PortalVIVO> selectAllPortalVIMap() throws VciBaseException {
        return null;
    }
    /**
     * åˆ¤æ–­æ¯é¡µè¡Œæ•°å®šä¹‰æ˜¯å¦æ­£ç¡®
@@ -294,6 +397,22 @@
        });
        return portalVIS;
    }
    /**
     * è¡¨å•的数据对象转换为显示对象
     * @param PortalVIS è¡¨å•的对象
     * @return æ˜¾ç¤ºå¯¹è±¡
     */
    @Override
    public List<PortalVIDTO> portalVIO2DTOS(Collection<PortalVI> PortalVIS) {
        List<PortalVIDTO>PortalVIDTOS  = new ArrayList<>();
        Optional.ofNullable(PortalVIS).orElseGet(()->new ArrayList<>()).stream().forEach(PortalVI -> {
            PortalVIDTO PPortalVIDTO = portalVIO2DTO(PortalVI);
            PortalVIDTOS.add(PPortalVIDTO);
        });
        return PortalVIDTOS;
    }
    /**
     * è¡¨å•的数据对象转换为显示对象
@@ -317,7 +436,24 @@
        }
        return portalVI;
    }
    /**
     * è¡¨å•的数据对象转换为显示对象
     * @param portalVI
     * @return
     */
    @Override
    public PortalVIDTO  portalVIO2DTO(PortalVI portalVI) {
        PortalVIDTO portalVIDTO=new PortalVIDTO();
        portalVIDTO.setId(portalVI.id);
        portalVIDTO.setTypeFlag(portalVI.typeFlag);
        portalVIDTO.setTypeName(portalVI.typeName);
        portalVIDTO.setViName(portalVI.viName);
        portalVIDTO.setViType(portalVI.viType);
        short viType =portalVIDTO.getViType();
        PRMDO prmdo=  UITools.getPRM(portalVI.prm);
        portalVIDTO.setPrm(prmDOO2DTOS(prmdo,viType));
        return portalVIDTO;
    }
    /**
     * è¡¨å•数据对象转换
     * @param prmdto
@@ -332,6 +468,20 @@
        return  prmdo;
    }
    /**
     * è¡¨å•数据对象转换
     * @param prmdo
     * @param viType
     * @return
     */
    private PRMDTO prmDOO2DTOS( PRMDO prmdo, short viType) {
        PRMDTO prmdto=new PRMDTO();
        prmdto.setShowCols(prmdo.getShowCols());
        prmdto.setFormQtName(prmdo.getFormQtName());
        prmdto.setPrmItemList(pRMItemDOO2DTOS(prmdo.getPrmItemList(),viType));
        return  prmdto;
    }
    @Override
    public  PortalVIVO portalVIDOO2VO(PortalVI portalVI) {
        PortalVIVO portalVIVO=new PortalVIVO();
@@ -341,8 +491,10 @@
        portalVIVO.setViName(portalVI.viName);
        portalVIVO.setViType(portalVI.viType);
        String  prm= portalVI.prm;
        PRMDO prmdo= UITools.getPRM(prm);
        portalVIVO.setPrm(prmDOO2VOS(prmdo,portalVI.viType));
        if(StringUtils.isNotBlank(prm)) {
            PRMDO prmdo = UITools.getPRM(prm);
            portalVIVO.setPrm(prmDOO2VOS(prmdo, portalVI.viType));
        }
        return portalVIVO;
    }
    private PRMVO prmDOO2VOS(PRMDO prmdo,short viType){
@@ -366,6 +518,15 @@
        Optional.ofNullable(prmItemDTOS).orElseGet(()->new ArrayList<>()).stream().forEach(PRMItemDTO -> {
            PRMItemDO PRMItemDO = pRMItemDTOO2DO(PRMItemDTO,viType);
            portalVIVOS.add(PRMItemDO);
        });
        return portalVIVOS;
    }
    public List<PRMItemDTO> pRMItemDOO2DTOS(Collection<PRMItemDO> prmItemDOS,short viType) {
        List<PRMItemDTO> portalVIVOS = new ArrayList<>();
        Optional.ofNullable(prmItemDOS).orElseGet(()->new ArrayList<>()).stream().forEach(prmItemDO -> {
            PRMItemDTO prmItemDTO = pRMItemDOO2DTO(prmItemDO,viType);
            portalVIVOS.add(prmItemDTO);
        });
        return portalVIVOS;
    }
@@ -501,7 +662,72 @@
        }
        return prmItemVO;
    }
    /**
     * æ•°æ®å¯¹è±¡è½¬æ¢
     * @param prmItemDO æ•°æ®å¯¹è±¡
     * @param viType è¡¨å•类型
     * @return
     */
    private PRMItemDTO pRMItemDOO2DTO(PRMItemDO prmItemDO,short viType) {
        PRMItemDTO prmItemDTO=new PRMItemDTO();
        prmItemDTO.setItemBat(prmItemDO.getItemBat());
        prmItemDTO.setItemCols(prmItemDO.getItemCols());
        prmItemDTO.setItemEQ(prmItemDO.getItemEQ());
        prmItemDTO.setItemDbl(prmItemDO.getItemDbl());
        prmItemDTO.setItemCut(prmItemDO.getItemCut());
        prmItemDTO.setItemOR(prmItemDO.getItemOR());
        prmItemDTO.setItemAddFilter(prmItemDO.getItemAddFilter());
        prmItemDTO.setItemField(prmItemDO.getItemField());
        prmItemDTO.setItemImgWH(prmItemDO.getItemImgWH());
        prmItemDTO.setItemCtrlDisplyCol(prmItemDO.getItemCtrlDisplyCol());//控制显示列
        prmItemDTO.setItemDateFormat(prmItemDO.getItemDateFormat());// æ•°æ®ä¸ºæ—¥æœŸç±»åž‹æ—¶çš„æ ¼å¼åŒ–字符串 å¦‚ yyyy-MM-dd HH:mm:ss
        prmItemDTO.setItemInObj(prmItemDO.getItemInObj());
        prmItemDTO.setItemName(prmItemDO.getItemName());
        prmItemDTO.setItemCustomClass(prmItemDO.getItemCustomClass());//自定义类路径
        prmItemDTO.setItemIsHidden(prmItemDO.getItemIsHidden());
        prmItemDTO.setItemIsEditable(prmItemDO.getItemIsEditable());
        prmItemDTO.setItemIsRequired(prmItemDO.getItemIsRequired());
        prmItemDTO.setItemFieldWidth(prmItemDO.getItemFieldWidth());
        prmItemDTO.setItemTxf(prmItemDO.getItemTxf());
        prmItemDTO.setItemRows(prmItemDO.getItemRows());
        prmItemDTO.setItemHrefConf(prmItemDO.getItemHrefConf());//超链接配置
        prmItemDTO.setItemTips(prmItemDO.getItemTips());
        prmItemDTO.setItemTrim(prmItemDO.getItemTrim());
        prmItemDTO.setItemDateFormat(prmItemDO.getItemDateFormat());
        prmItemDTO.setItemCtrlDisplyCondition(prmItemDO.getItemCtrlDisplyCondition());////控制显示条件
        prmItemDTO.setItemEditableProgram(prmItemDO.getItemEditableProgram());
        prmItemDTO.setItemEditCondition(prmItemDO.getItemEditCondition());
        prmItemDTO.setItemHrefFields(prmItemDO.getItemHrefFields());//超链接字段
        prmItemDTO.setItemValueList(prmItemDO.getItemValueList());
        prmItemDTO.setItemValue(prmItemDO.getItemValue());
        prmItemDTO.setItemStyle(prmItemDO.getItemStyle());
        prmItemDTO.setItemShowExpression(prmItemDO.getItemShowExpression());// æ˜¾ç¤ºè¡¨è¾¾å¼ ${aa}-${bb}
        prmItemDTO.setItemSeniorQueryColsCounts(prmItemDO.getItemSeniorQueryColsCounts());//高级查询各列使用次数
        prmItemDTO.setItemQuerySql(prmItemDO.getItemQuerySql());//高级查询sql
        prmItemDTO.setItemType(prmItemDO.getItemType());//属性基本类型
        prmItemDTO.setItemTypeText(ItemTypeEnum.getTextByValue(prmItemDO.getItemType()));//属性基本类型显示值
        prmItemDTO.setItemScript(prmItemDO.getItemScript());
        prmItemDTO.setItemRight(prmItemDO.getItemRight());
        prmItemDTO.setItemQueryRefFields(prmItemDO.getItemQueryRefFields());//查询关联列
        prmItemDTO.setItemQtName(prmItemDO.getItemQtName());
        prmItemDTO.setItemParentFolderName(prmItemDO.getItemParentFolderName());//父文件夹名称
        prmItemDTO.setItemPageSize(prmItemDO.getItemPageSize());
        prmItemDTO.setItemOutType(prmItemDO.getItemOutType());
        prmItemDTO.setItemOutFields(prmItemDO.getItemOutFields());
        prmItemDTO.setItemListVal(prmItemDO.getItemListVal());//参照值
        prmItemDTO.setItemListTxt(prmItemDO.getItemListTxt());
        prmItemDTO.setItemListTable(prmItemDO.getItemListTable());
        prmItemDTO.setItemKeyFields(prmItemDO.getItemKeyFields());
        prmItemDTO.setItemIsShowFolder(prmItemDO.getItemIsShowFolder());//是否显示文件夹
        prmItemDTO.setItemIsNavigatorExpand(prmItemDO.getItemIsNavigatorExpand());////查询区域显示控制
        prmItemDTO.setItemIsHttpSave(prmItemDO.getItemIsHttpSave());
        prmItemDTO.setItemHttpVolumnPath(prmItemDO.getItemHttpVolumnPath());
        prmItemDTO.setItemHttpPathField(prmItemDO.getItemHttpPathField());
        if(viType==PortalVIType.Table.getIntVal()) {//如果是表格
            initTableConfigDOO2VOData(prmItemDTO,prmItemDO);
        }
        return prmItemDTO;
    }
    /**
     * åˆå§‹åŒ–表格所用特殊字段配置
     * @param prmItemVO
@@ -510,9 +736,9 @@
    private void initTableConfigDOO2VOData(PRMItemVO prmItemVO,PRMItemDO prmItemDO){
        prmItemVO.setItemFieldWidthList(initItemFieldWidthList(prmItemDO.getItemOutFields(),prmItemDO.getItemFieldWidth()));//列显示宽段 itemOutFieldList ç›¸åŒ¹é…
        prmItemVO.setItemSeniorQueryBOS(initItemSeniorQueryBOData(prmItemDO.getItemSeniorQueryCols(),prmItemDO.getItemSeniorQueryColsCounts(),prmItemDO.getItemQuerySql()));//高级查询对象
        List<String> allKeyList= getRefFormVIName(prmItemVO.getItemInObj());
        List<String> itemOutFieldList =VciBaseUtil.str2List(prmItemVO.getItemOutFields());
        List<String> itemKeyFieldList =VciBaseUtil.str2List(prmItemVO.getItemKeyFields());
        List<String> allKeyList= getRefFormVIName(prmItemDO.getItemInObj());
        List<String> itemOutFieldList =VciBaseUtil.str2List(prmItemDO.getItemOutFields());
        List<String> itemKeyFieldList =VciBaseUtil.str2List(prmItemDO.getItemKeyFields());
        List<String> itemSelectoutFieldList= allKeyList.stream().filter(s ->!itemOutFieldList.stream().map(s1 -> s1).collect(Collectors.toList()).contains(s) ).collect(Collectors.toList());
        prmItemVO.setItemSelectoutFieldList(itemSelectoutFieldList);//待选择的属性字段
        prmItemVO.setItemOutFieldList(itemOutFieldList);//需要使用的集合
@@ -525,6 +751,24 @@
     * @param prmItemDTO
     * @param prmItemDO
     */
    private void initTableConfigDOO2VOData(PRMItemDTO prmItemDTO,PRMItemDO prmItemDO){
        prmItemDTO.setItemFieldWidthList(initItemFieldWidthList(prmItemDO.getItemOutFields(),prmItemDO.getItemFieldWidth()));//列显示宽段 itemOutFieldList ç›¸åŒ¹é…
        prmItemDTO.setItemSeniorQueryBOS(initItemSeniorQueryBOData(prmItemDO.getItemSeniorQueryCols(),prmItemDO.getItemSeniorQueryColsCounts(),prmItemDO.getItemQuerySql()));//高级查询对象
        List<String> allKeyList= getRefFormVIName(prmItemDO.getItemInObj());
        List<String> itemOutFieldList =VciBaseUtil.str2List(prmItemDO.getItemOutFields());
        List<String> itemKeyFieldList =VciBaseUtil.str2List(prmItemDO.getItemKeyFields());
        List<String> itemSelectoutFieldList= allKeyList.stream().filter(s ->!itemOutFieldList.stream().map(s1 -> s1).collect(Collectors.toList()).contains(s) ).collect(Collectors.toList());
        prmItemDTO.setItemSelectoutFieldList(itemSelectoutFieldList);//待选择的属性字段
        prmItemDTO.setItemOutFieldList(itemOutFieldList);//需要使用的集合
        List<String> itemSearchFieldList= itemOutFieldList.stream().filter(s ->!itemKeyFieldList.stream().map(s1 -> s1).collect(Collectors.toList()).contains(s) ).collect(Collectors.toList());
        prmItemDTO.setItemSearchFieldList(itemSearchFieldList);//待搜索字段
        prmItemDTO.setItemKeyFieldList(itemKeyFieldList);//搜索字段
    }
    /**
     * åˆå§‹åŒ–表格所用特殊字段配置
     * @param prmItemDTO
     * @param prmItemDO
     */
    private void initTableConfigDTOO2DOData(PRMItemDO prmItemDO,PRMItemDTO prmItemDTO){
        prmItemDO.setItemOutFields(VciBaseUtil.array2String(prmItemDTO.getItemOutFieldList().toArray(new String[]{})));//需要使用的字段