ludc
2024-12-05 a485f4494787001a2695863e239910c019a52246
表单\表格定义保存对象转换逻辑修改。UI数据查询接口修改
已修改11个文件
已添加1个文件
222 ■■■■■ 文件已修改
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/UIComponentVO.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/UITableDefineVO.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/UITreeTableDefineVO.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/query/UIDataGridQuery.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/query/UIFormQuery.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/SmUserQueryServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPortalVIServiceImpl.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIEngineServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/uidataservice/UIDataBaseServiceI.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/uidataservice/impl/UIDataCommonServiceImpl.java 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/uidataservice/impl/UIDataTestQueryServiceImpl.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/xmlmodel/UIComponentDefineXO.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/UIComponentVO.java
@@ -27,6 +27,11 @@
    private String name;
    /**
     * bs端使用的自定义查询类名或URL
     */
    private String bsCustQueryCLsOrUrl;
    /**
     * æ‰€å±žåŒºåŸŸ
     */
    private String pkLayout;
@@ -86,6 +91,14 @@
     */
    private List<UIButtonDefineVO> buttons;
    public void setBsCustQueryCLsOrUrl(String bsCustQueryCLsOrUrl) {
        this.bsCustQueryCLsOrUrl = bsCustQueryCLsOrUrl;
    }
    public String getBsCustQueryCLsOrUrl() {
        return bsCustQueryCLsOrUrl;
    }
    @Override
    public String getId() {
        return id;
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/UITableDefineVO.java
@@ -85,6 +85,7 @@
     * æŸ¥è¯¢çš„列
     */
    private List<UITableFieldVO> queryColumns;
    /**
     * freeMarker的表达式的值
     */
@@ -154,6 +155,14 @@
        this.queryTemplateName = queryTemplateName;
    }
    public void setFreeMarkerEls(List<String> freeMarkerEls) {
        this.freeMarkerEls = freeMarkerEls;
    }
    public List<String> getFreeMarkerEls() {
        return freeMarkerEls;
    }
    public List<List<UITableFieldVO>> getCols() {
        return cols;
    }
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/pagemodel/UITreeTableDefineVO.java
@@ -11,6 +11,7 @@
     * åºåˆ—化
     */
    private static final long serialVersionUID = -4334171123988489424L;
    /**
     * æ ‘形结构展开列
     */
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/query/UIDataGridQuery.java
@@ -1,8 +1,6 @@
package com.vci.query;
import com.alibaba.fastjson.JSON;
import com.vci.starter.web.pagemodel.BaseQueryObject;
import com.vci.starter.web.util.Lcm.Func;
import java.util.ArrayList;
import java.util.HashMap;
@@ -32,7 +30,7 @@
    private String uiDefineId;
    /**
     * ç»„件的主键
     * ç»„件的主键(页面定义的主键)
     */
    private String componentOid;
Source/plt-web/plt-web-parent/plt-web-api/src/main/java/com/vci/query/UIFormQuery.java
@@ -13,6 +13,11 @@
    private String btmName;
    /**
     * ç»„件的主键(页面定义的主键)
     */
    private String componentOid;
    /**
     * è¡¨å•定义的主键
     */
    private String formDefineOid;
@@ -32,6 +37,14 @@
     */
    private String sourceOid;
    public void setComponentOid(String componentOid) {
        this.componentOid = componentOid;
    }
    public String getComponentOid() {
        return componentOid;
    }
    public void setSourceOid(String sourceOid) {
        this.sourceOid = sourceOid;
    }
Source/plt-web/plt-web-parent/plt-web-permission/src/main/java/com/vci/web/service/impl/SmUserQueryServiceImpl.java
@@ -1456,7 +1456,7 @@
        userInfo.updateUser = user.getLastModifier() == null ? "" : user.getLastModifier();
        userInfo.pwdUpdateTime = user.getPwdUpdateTime().getTime();
        userInfo.grantor = user.getGrantor() == null ? "" : user.getGrantor();
        userInfo.secretGrade = user.getSecretGrade() == null ? 2 : Integer.valueOf(user.getGrantor());
        userInfo.secretGrade = user.getSecretGrade() == null ? 2 : Integer.valueOf(user.getSecretGrade());
        userInfo.isDeptLeader = user.getIsDeptLeader() == null ? "0" : user.getIsDeptLeader();
        return userInfo;
    }
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/OsPortalVIServiceImpl.java
@@ -1225,11 +1225,12 @@
     * @param prmItemDO
     */
    private void initTableConfigDTOO2DOData(PRMItemDO prmItemDO,PRMItemDTO prmItemDTO){
        prmItemDO.setItemOutFields(VciBaseUtil.array2String(prmItemDTO.getItemOutFieldList().toArray(new String[]{})));//需要使用的字段
        prmItemDO.setItemKeyFields(CollectionUtils.isEmpty(prmItemDTO.getItemKeyFieldList())?"":VciBaseUtil.array2String(prmItemDTO.getItemKeyFieldList().toArray(new String[]{})));//需要搜索的字段
       List<String> newItemFieldWidthList = prmItemDTO.getItemFieldWidthList().stream().map(KeyValue::getValue).distinct().collect(Collectors.toList());
       prmItemDO.setItemFieldWidth(VciBaseUtil.array2String(newItemFieldWidthList.toArray(new String[]{}),":"));//字段宽度
        prmItemDO.setItemOutFields(VciBaseUtil.array2String(prmItemDTO.getItemOutFieldList().toArray(new String[]{})));
        //需要使用的字段prmItemDO.setItemKeyFields(CollectionUtils.isEmpty(prmItemDTO.getItemKeyFieldList())?"":VciBaseUtil.array2String(prmItemDTO.getItemKeyFieldList().toArray(new String[]{})));//需要搜索的字段
        // TODO: 2024/12/5 Ludc è¿™å„¿åŽ»é‡ç”¨çš„ä¸å¯¹ï¼ŒKeyValue::getValue是对宽度去重了
        List<String> newItemFieldWidthList = prmItemDTO.getItemFieldWidthList().stream().distinct().map(KeyValue::getValue).collect(Collectors.toList());
        // TODO: 2024/12/5 Ludc åˆ†éš”符要和平台统一用,而不是用:
        prmItemDO.setItemFieldWidth(VciBaseUtil.array2String(newItemFieldWidthList.toArray(new String[]{}),","));//字段宽度
       List<ItemSeniorQueryBO> itemSeniorQueryBOS = prmItemDTO.getItemSeniorQueryBOS();
       List<String> itemSeniorQueryColsList = new ArrayList<>();
       List<String> itemSeniorQueryColsCountsList=new ArrayList<>();
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIEngineServiceImpl.java
@@ -1246,6 +1246,7 @@
            componentVO.setName(page.name);
            componentVO.setDescription(page.desc);
            componentVO.setOrderNum((int) page.seq);
            UIComponentDefineXO componentDefineXO = null;
            try {
                componentDefineXO = readInfoFromXML(page.plDefination, UIComponentDefineXO.class);
@@ -1253,6 +1254,8 @@
                logger.error("读取xml出错",e);
                return  null;
            }
            //自定义查询方式
            componentVO.setBsCustQueryCLsOrUrl(componentDefineXO.getBsCustQueryCLsOrUrl());
            //之前的类型的值是1,2,3等看着不直观
            UIComponentTypeEnum componentTypeEnum = null;
            if("1".equals(componentDefineXO.getTemplateType())){
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/uidataservice/UIDataBaseServiceI.java
@@ -1,6 +1,7 @@
package com.vci.web.service.uidataservice;
import com.alibaba.fastjson.JSON;
import com.vci.corba.query.data.KV;
import com.vci.pagemodel.UIFormDataVO;
import com.vci.query.UIDataGridQuery;
import com.vci.query.UIFormQuery;
@@ -11,9 +12,7 @@
import com.vci.starter.web.pagemodel.UIDataTree;
import com.vci.starter.web.util.Lcm.Func;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
 * ui数据查询基础服务(该接口定义了一些公共的数据查询方法和一些默认方法以供继承和使用)
@@ -45,6 +44,41 @@
    }
    /**
     * åˆ¤æ–­æ˜¯å¦ä½¿ç”¨è‡ªå®šä¹‰ç±»æ–¹å¼æŸ¥è¯¢ï¼šï¼ˆåŽç»­å¦‚果判断是自定义类还是自定义URL的逻辑有更改,也尽量统一在一个地方进行更改)
     * @param
     */
    default boolean isCustomClass(String bsCustomClassOrUrl){
        if(bsCustomClassOrUrl.indexOf("@") == 0){
            return true;
        }
        return false;
    }
    /**
     * å°†KV转成Map
     * @param kvs
     * @return
     */
    default  List<Map<String, Object>> convertKV2ListMap(KV[][] kvs) {
        // å°† KV[][] è½¬æ¢ä¸º Map
        List<Map<String, Object>> resulListMap = new ArrayList<>();
        if(Func.isEmpty(kvs)){
            return resulListMap;
        }
        for (KV[] kvArray : kvs) {
            Map<String, Object> map = new HashMap<>();
            for (KV kv : kvArray) {
                if (kv.key != null && kv.value != null) {
                    //返回全小写的
                    map.put(kv.key.toLowerCase(Locale.ROOT), kv.value);
                }
            }
            resulListMap.add(map);
        }
        return resulListMap;
    }
    /**
     * èŽ·å–è¡¨æ ¼çš„æ•°æ®
     * @param dataGridQuery è¡¨æ ¼æŸ¥è¯¢ï¼Œå¿…须有业务类型名称和 è¡¨æ ¼çš„编号
     * @return DataGrid中data为Map<String,String>格式
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/uidataservice/impl/UIDataCommonServiceImpl.java
@@ -57,7 +57,6 @@
import static com.vci.constant.FrameWorkBusLangCodeConstant.DATA_OID_NOT_EXIST;
/**
 * UI上的数据查询(通用查询服务)
 * @author Ludc
@@ -155,8 +154,28 @@
        if(Func.isNotEmpty(dataGridQuery.getSourceData())){
            dataGridQuery.setSourceData(this.convertMapValueJson2Map(dataGridQuery.getSourceData()));
        }
        //先判断查询模板
        UITableDefineVO tableDefineVO = uiEngineService.getComponentByOid(dataGridQuery.getComponentOid(),null).getTableDefineVO();
        //先判断查询模板是否配置了自定义查询类
        UIComponentVO componentVO = uiEngineService.getComponentByOid(dataGridQuery.getComponentOid(), null);
        UITableDefineVO tableDefineVO = componentVO.getTableDefineVO();
        String bsCustQueryCLsOrUrl = componentVO.getBsCustQueryCLsOrUrl();
        // TODO: 2024/12/5 Ludc æ ¹æ®UI配置的进行判断是否使用自定义类进行查询(自定义类查询方式优先级高于查询模板)
        if(Func.isNotBlank(bsCustQueryCLsOrUrl) && isCustomClass(bsCustQueryCLsOrUrl)){
            //通过反射调用bsCustQueryCLsOrUrl中定义的服务类中的查询方法
            try {
                // èŽ·å–ç±»çš„ Class å¯¹è±¡
                Class<?> clazz = Class.forName(bsCustQueryCLsOrUrl.replace("@",""));
                // åˆ›å»ºç±»çš„实例
                Object instance = clazz.getDeclaredConstructor().newInstance();
                // èŽ·å–æ–¹æ³•getDataForGrid(该方法是接口中统一定义的方法)
                Method method = clazz.getMethod("getDataForGrid", UIDataGridQuery.class);
                // è°ƒç”¨æ–¹æ³•
                DataGrid dataGrid = (DataGrid) method.invoke(instance, dataGridQuery);
                return dataGrid;
            }catch (Exception e){
                e.printStackTrace();
                throw new VciBaseException("获取表格数据时出现错误,原因:"+e.getMessage());
            }
        }else{
        String queryTemplate = Func.isNotEmpty(dataGridQuery.getSourceData())? (String) dataGridQuery.getSourceData().getOrDefault("querytemplate",tableDefineVO.getQueryTemplateName()) :tableDefineVO.getQueryTemplateName();
        if(StringUtils.isBlank(queryTemplate)){
            //说明没有设置查询模板,需要看看在这个表格所在的组件有没有设置
@@ -220,8 +239,7 @@
                    dataGridQuery.getConditionMap(), replaceMap, dataGridQuery.getPageHelper(), queryFieldList.stream().collect(Collectors.toList()));
            return dataGrid;
        }
        //生命周期在其中查询后就会处理
        //枚举也会被处理了
        }
    }
    /**
@@ -238,7 +256,28 @@
        if(Func.isNotEmpty(formQuery.getSourceData())){
            formQuery.setSourceData(this.convertMapValueJson2Map(formQuery.getSourceData()));
        }
        UIFormDefineVO formDefineVO = uiEngineService.getFormById(formQuery.getBtmName(),formQuery.getFormDefineId());
        //先判断查询模板是否配置了自定义查询类
        UIComponentVO componentVO = uiEngineService.getComponentByOid(formQuery.getComponentOid(), null);
        UIFormDefineVO formDefineVO = componentVO.getFormDefineVO();
        //UIFormDefineVO formDefineVO = uiEngineService.getFormById(formQuery.getBtmName(),formQuery.getFormDefineId());
        String bsCustQueryCLsOrUrl = componentVO.getBsCustQueryCLsOrUrl();
        if(Func.isNotBlank(bsCustQueryCLsOrUrl) && isCustomClass(bsCustQueryCLsOrUrl)){
            //通过反射调用bsCustQueryCLsOrUrl中定义的服务类中的查询方法
            try {
                // èŽ·å–ç±»çš„ Class å¯¹è±¡
                Class<?> clazz = Class.forName(bsCustQueryCLsOrUrl.replace("@",""));
                // åˆ›å»ºç±»çš„实例
                Object instance = clazz.getDeclaredConstructor().newInstance();
                // èŽ·å–æ–¹æ³•getDataForGrid(该方法是接口中统一定义的方法)
                Method method = clazz.getMethod("getDataForForm", UIDataGridQuery.class);
                // è°ƒç”¨æ–¹æ³•
                UIFormDataVO uiFormDataVO = (UIFormDataVO) method.invoke(instance, formQuery);
                return uiFormDataVO;
            }catch (Exception e){
                e.printStackTrace();
                throw new VciBaseException("获取表格数据时出现错误,原因:"+e.getMessage());
            }
        }else{
        String queryTemplate = !CollectionUtils.isEmpty(formQuery.getSourceData())? (String) formQuery.getSourceData().getOrDefault("querytemplate",formDefineVO.getQueryTemplateName()) :formDefineVO.getQueryTemplateName();
        Set<String> queryFieldList = formDefineVO.getItems().stream().filter(s->!UIFieldTypeEnum.CUSTOM.getValue().equalsIgnoreCase(s.getType())).map(UIFormItemVO::getField).collect(Collectors.toSet());
        //获取参照
@@ -335,6 +374,7 @@
        }
        return formDataVO;
    }
    }
    /**
     * å°è£…replaceMap
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/uidataservice/impl/UIDataTestQueryServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
package com.vci.web.service.uidataservice.impl;
import com.vci.corba.query.data.KV;
import com.vci.pagemodel.UIFormDataVO;
import com.vci.query.UIDataGridQuery;
import com.vci.query.UIFormQuery;
import com.vci.query.UITreeQuery;
import com.vci.starter.web.pagemodel.BaseResult;
import com.vci.starter.web.pagemodel.DataGrid;
import com.vci.starter.web.pagemodel.UIDataTree;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.web.service.uidataservice.UIDataBaseServiceI;
import com.vci.web.util.PlatformClientUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
 * è¿™æ˜¯ä¸€ä¸ªè‡ªå®šä¹‰æŸ¥è¯¢ç±»çš„示例服务
 * @author ludc
 * @date 2024/12/5 13:00
 */
@Service
public class UIDataTestQueryServiceImpl implements UIDataBaseServiceI {
    @Override
    public DataGrid getDataForGrid(UIDataGridQuery dataGridQuery) throws Exception {
        // TODO: 2024/12/5 Ludc åå°„方式调用,所以只能通过newPlatformClientUtil的形式,注解形式服务注入
        PlatformClientUtil platformClientUtil = new PlatformClientUtil();
        String sql = "select * from " + VciBaseUtil.getTableName(dataGridQuery.getBtmName())
                + " where oid in ('D5DFA9D3-D2AF-4D1D-850F-73B102532740','BCE5B0E3-A49C-2453-8E62-8F4C7F4BEDF2','257BB15B-12CF-68D2-FCFE-1FA3E29DBD1E')";
        KV[][] kvs = platformClientUtil.getQueryService().queryBySql(sql);
        List<Map<String, Object>> resultMap = convertKV2ListMap(kvs);
        DataGrid dataGrid = new DataGrid();
        dataGrid.setData(resultMap);
        dataGrid.setTotal(resultMap.size());
        // TODO: 2024/12/5 Ludc è¿™å„¿è¿˜å¯ä»¥æŒ‰ç…§dataGridQuery.getTableDefineId()来查询表格定义的内容,
        //  ç„¶åŽæ ¹æ®é…ç½®çš„页面信息来处理要查询条件或列以及返回的参数
        return dataGrid;
    }
    @Override
    public UIFormDataVO getDataForForm(UIFormQuery formQuery) throws Exception {
        return null;
    }
    @Override
    public List<UIDataTree> getDataForTree(UITreeQuery treeQuery) throws Exception {
        return null;
    }
    @Override
    public BaseResult getDataByTemp(UITreeQuery treeQuery) throws Exception {
        return null;
    }
}
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/xmlmodel/UIComponentDefineXO.java
@@ -162,6 +162,11 @@
     */
    private String queryTemplateName;
    /**
     * bs端使用的自定义查询类名或URL
     */
    private String bsCustQueryCLsOrUrl;
    public String getType() {
        return type;
    }
@@ -394,6 +399,14 @@
        this.queryTemplateName = queryTemplateName;
    }
    public void setBsCustQueryCLsOrUrl(String bsCustQueryCLsOrUrl) {
        this.bsCustQueryCLsOrUrl = bsCustQueryCLsOrUrl;
    }
    public String getBsCustQueryCLsOrUrl() {
        return bsCustQueryCLsOrUrl;
    }
    @Override
    public String toString() {
        return "UIComponentDefineXO{" +
@@ -426,6 +439,7 @@
                ", UIParser='" + UIParser + '\'' +
                ", extAttr='" + extAttr + '\'' +
                ", queryTemplateName='" + queryTemplateName + '\'' +
                ", bsCustQueryCLsOrUrl='" + bsCustQueryCLsOrUrl + '\'' +
                '}';
    }
}