package jnpf.onlinedev.util.onlineDevUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import jnpf.base.model.ColumnDataModel; import jnpf.base.model.Template6.ColumnListField; import jnpf.base.model.VisualDevJsonModel; import jnpf.base.util.DateTimeFormatConstant; import jnpf.base.util.FlowFormDataUtil; import jnpf.constant.JnpfConst; import jnpf.constant.PermissionConst; import jnpf.database.model.entity.DbLinkEntity; import jnpf.database.model.superQuery.SuperJsonModel; import jnpf.database.model.superQuery.SuperQueryJsonModel; import jnpf.database.util.ConnUtil; import jnpf.database.util.DbTypeUtil; import jnpf.database.util.DynamicDataSourceUtil; import jnpf.emnus.SearchMethodEnum; import jnpf.exception.DataException; import jnpf.model.visualJson.FieLdsModel; import jnpf.model.visualJson.TableModel; import jnpf.model.visualJson.analysis.FormAllModel; import jnpf.model.visualJson.analysis.FormColumnModel; import jnpf.model.visualJson.analysis.FormEnum; import jnpf.model.visualJson.config.ConfigModel; import jnpf.model.visualJson.config.TabConfigModel; import jnpf.onlinedev.model.OnlineDevListModel.OnlineColumnChildFieldModel; import jnpf.onlinedev.model.OnlineDevListModel.OnlineColumnFieldModel; import jnpf.onlinedev.model.OnlineDevListModel.VisualColumnSearchVO; import jnpf.onlinedev.model.PaginationModel; import jnpf.permission.AuthorizeApi; import jnpf.permission.OrganizeApi; import jnpf.permission.UserApi; import jnpf.permission.UserRelationApi; import jnpf.permission.entity.OrganizeEntity; import jnpf.permission.entity.UserEntity; import jnpf.permission.entity.UserRelationEntity; import jnpf.permission.model.SystemParamModel; import jnpf.permission.model.authorize.OnlineDynamicSqlModel; import jnpf.util.JsonUtil; import jnpf.util.StringUtil; import jnpf.util.TableFeildsEnum; import jnpf.util.context.RequestContext; import jnpf.util.context.SpringContext; import jnpf.util.visiual.JnpfKeyConsts; import lombok.Cleanup; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.mybatis.dynamic.sql.*; import org.mybatis.dynamic.sql.select.QueryExpressionDSL; import org.mybatis.dynamic.sql.select.SelectModel; import java.math.BigDecimal; import java.sql.Connection; import java.sql.SQLException; import java.text.DecimalFormat; import java.util.*; import java.util.stream.Collectors; /** * 生成在线sql语句 * * @author JNPF开发平台组 * @version V3.2.8 * @copyright 引迈信息技术有限公司(https://www.jnpfsoft.com) * @date 2021/11/8 */ public class OnlineProductSqlUtils { private static FlowFormDataUtil flowDataUtil = SpringContext.getBean(FlowFormDataUtil.class); private static UserApi userApi = SpringContext.getBean(UserApi.class); private static UserRelationApi userRelationApi = SpringContext.getBean(UserRelationApi.class); private static OrganizeApi organizeApi = SpringContext.getBean(OrganizeApi.class); private static AuthorizeApi authorizeUtil = SpringContext.getBean(AuthorizeApi.class); /** * 生成列表查询sql * * @param sqlModels * @param visualDevJsonModel * @param columnFieldList * @param linkEntity * @return */ public static void getColumnListSql(List sqlModels, VisualDevJsonModel visualDevJsonModel, List columnFieldList, DbLinkEntity linkEntity) { List childFieldList; try { columnFieldList = columnFieldList.stream().distinct().collect(Collectors.toList()); ColumnDataModel columnData = visualDevJsonModel.getColumnData(); List modelList = JsonUtil.getJsonToList(columnData.getColumnList(), ColumnListField.class); @Cleanup Connection conn = ConnUtil.getConnOrDefault(linkEntity); List tableModelList = visualDevJsonModel.getVisualTables(); String databaseProductName = conn.getMetaData().getDatabaseProductName().trim(); boolean isClobDbType = DbTypeUtil.needToUpperCase(databaseProductName); //主表 TableModel mainTable = tableModelList.stream().filter(model -> model.getTypeId().equals("1")).findFirst().orElse(null); //获取主键 String pKeyName = flowDataUtil.getKey(mainTable, databaseProductName); //列表中区别子表正则 String reg = "^[jnpf_]\\S*_jnpf\\S*"; //列表主表字段 List mainTableFields = columnFieldList.stream().filter(s -> !s.matches(reg) && !s.toLowerCase().contains(JnpfKeyConsts.CHILD_TABLE_PREFIX)).collect(Collectors.toList()); mainTableFields.add(pKeyName); for (TableModel tableModel : tableModelList) { String relationField = tableModel.getRelationField(); if (StringUtil.isNotEmpty(relationField) && !mainTableFields.contains(relationField)) { mainTableFields.add(relationField); } } if (visualDevJsonModel.getFormData().getConcurrencyLock()) { mainTableFields.add(TableFeildsEnum.VERSION.getField()); } String flowidField = TableFeildsEnum.FLOWID.getField(); String flowTaskId = TableFeildsEnum.FLOWTASKID.getField(); if (isClobDbType) { flowidField = TableFeildsEnum.FLOWID.getField().toUpperCase(); flowTaskId = TableFeildsEnum.FLOWTASKID.getField().toUpperCase(); } mainTableFields.add(flowidField); mainTableFields.add(flowTaskId); if (columnData != null && ObjectUtil.isNotEmpty(columnData.getType()) && columnData.getType() == 3) { String groupField = visualDevJsonModel.getColumnData().getGroupField(); boolean contains = columnFieldList.contains(groupField); if (!contains) { if (groupField.startsWith(JnpfConst.SIDE_MARK_PRE)) { columnFieldList.add(groupField); } else { mainTableFields.add(groupField); } } } //列表子表字段 childFieldList = columnFieldList.stream().filter(s -> s.matches(reg)).map(child -> { OnlineColumnFieldModel fieldModel = new OnlineColumnFieldModel(); String[] split = child.split(JnpfConst.SIDE_MARK); String s1 = split[1]; String s2 = split[0].substring(5); fieldModel.setTableName(s2); fieldModel.setField(s1); fieldModel.setOriginallyField(child); return fieldModel; }).collect(Collectors.toList()); //取列表用到的表 List ColumnTableNameList = childFieldList.stream().map(t -> t.getTableName().toLowerCase()).collect(Collectors.toList()); List tableModelList1 = tableModelList.stream().filter(t -> ColumnTableNameList.contains(t.getTable().toLowerCase())).collect(Collectors.toList()); List classifyFieldList = new ArrayList<>(10); for (TableModel t : tableModelList1) { OnlineColumnChildFieldModel childFieldModel = new OnlineColumnChildFieldModel(); childFieldModel.setTable(t.getTable()); childFieldModel.setRelationField(t.getRelationField()); childFieldModel.setTableField(t.getTableField()); classifyFieldList.add(childFieldModel); } for (OnlineDynamicSqlModel dycModel : sqlModels) { if (dycModel.isMain()) { List mainSqlColumns = getBasicColumns(mainTableFields, sqlModels, dycModel, modelList, isClobDbType); dycModel.setColumns(mainSqlColumns); } else { if (classifyFieldList.size() > 0) { Map> mastTableCols = childFieldList.stream().collect(Collectors.groupingBy(OnlineColumnFieldModel::getTableName)); List onlineColumnFieldModels = Optional.ofNullable(mastTableCols.get(dycModel.getTableName())).orElse(new ArrayList<>()); List mastSqlCols = getBasicColumnsChild(modelList, dycModel, onlineColumnFieldModels, isClobDbType); dycModel.setColumns(mastSqlCols); } } } } catch (SQLException sqlException) { sqlException.printStackTrace(); } catch (DataException e) { e.printStackTrace(); } } public static List getGroupBySqlTable(List sqlModels, VisualDevJsonModel visualDevJsonModel, List columnFieldList, boolean isClobDbType) { List childFieldList; List basicColumns = new ArrayList<>(); try { columnFieldList = columnFieldList.stream().distinct().collect(Collectors.toList()); List tableModelList = visualDevJsonModel.getVisualTables(); //列表中区别子表正则 String reg = "^[jnpf_]\\S*_jnpf\\S*"; //列表主表字段 List mainTableFields = columnFieldList.stream().filter(s -> !s.matches(reg) && !s.toLowerCase().contains(JnpfKeyConsts.CHILD_TABLE_PREFIX)).collect(Collectors.toList()); if (visualDevJsonModel.getFormData().getConcurrencyLock()) { mainTableFields.add(TableFeildsEnum.VERSION.getField()); } String flowidField = TableFeildsEnum.FLOWID.getField(); if (isClobDbType) { flowidField = TableFeildsEnum.FLOWID.getField().toUpperCase(); } mainTableFields.add(flowidField); //列表子表字段 childFieldList = columnFieldList.stream().filter(s -> s.matches(reg)).map(child -> { OnlineColumnFieldModel fieldModel = new OnlineColumnFieldModel(); String[] split = child.split(JnpfConst.SIDE_MARK); String s1 = split[1]; String s2 = split[0].substring(5); fieldModel.setTableName(s2); fieldModel.setField(s1); fieldModel.setOriginallyField(child); return fieldModel; }).collect(Collectors.toList()); //取列表用到的表 List ColumnTableNameList = childFieldList.stream().map(t -> t.getTableName().toLowerCase()).collect(Collectors.toList()); List tableModelList1 = tableModelList.stream().filter(t -> ColumnTableNameList.contains(t.getTable().toLowerCase())).collect(Collectors.toList()); List classifyFieldList = new ArrayList<>(10); for (TableModel t : tableModelList1) { OnlineColumnChildFieldModel childFieldModel = new OnlineColumnChildFieldModel(); childFieldModel.setTable(t.getTable()); childFieldModel.setRelationField(t.getRelationField()); childFieldModel.setTableField(t.getTableField()); classifyFieldList.add(childFieldModel); } List modelList = JsonUtil.getJsonToList(visualDevJsonModel.getColumnData().getColumnList(), ColumnListField.class); for (OnlineDynamicSqlModel dycModel : sqlModels) { if (dycModel.isMain()) { List mainSqlColumns = getBasicColumns(mainTableFields, sqlModels, dycModel, modelList, isClobDbType); basicColumns.addAll(mainSqlColumns); } else { if (classifyFieldList.size() > 0) { Map> mastTableCols = childFieldList.stream().collect(Collectors.groupingBy(OnlineColumnFieldModel::getTableName)); List onlineColumnFieldModels = Optional.ofNullable(mastTableCols.get(dycModel.getTableName())).orElse(new ArrayList<>()); List mastSqlCols = getBasicColumnsChild(modelList, dycModel, onlineColumnFieldModels, isClobDbType); basicColumns.addAll(mastSqlCols); } } } } catch (Exception e) { e.printStackTrace(); } return basicColumns; } /** * */ public static void getConditionSql(QueryExpressionDSL.QueryExpressionWhereBuilder form, String databaseProductName, List searchVOList, List sqlModelList) throws SQLException { //成对注释1---进来前有切库。切回主库查询用户相关信息 DynamicDataSourceUtil.switchToDataSource(null); try { boolean isOracle = databaseProductName.equalsIgnoreCase("oracle"); boolean isPostgre = databaseProductName.equalsIgnoreCase("PostgreSQL"); boolean isSqlServer = databaseProductName.equalsIgnoreCase("Microsoft SQL Server"); for (int k = 0; k < searchVOList.size(); k++) { VisualColumnSearchVO vo = searchVOList.get(k); String jnpfKey = "jnpfkey"; if (Objects.nonNull(vo.getConfig())) { jnpfKey = vo.getConfig().getJnpfKey(); } String tableName = vo.getTable(); OnlineDynamicSqlModel sqlModel = sqlModelList.stream().filter(sql -> sql.getTableName().equals(tableName)).findFirst().orElse(null); SqlTable sqlTable = sqlModel.getSqlTable(); String searchType = vo.getSearchType(); String vModel = vo.getField(); String format; boolean isSearchMultiple = vo.getSearchMultiple() != null && vo.getSearchMultiple(); //搜索或字段其中一个为多选, 都按照多选处理 boolean isMultiple = isSearchMultiple || vo.getMultiple() != null && vo.getMultiple(); List dataValues = new ArrayList<>(); SqlColumn sqlColumn = sqlTable.column(vModel); List groupList = new ArrayList<>(); if (isMultiple) { Object tmpValue = vo.getValue(); boolean isComSelect = JnpfKeyConsts.COMSELECT.equals(jnpfKey); if (isComSelect) { //左侧树情况左侧条件为单选查询, 所以组织查询全部转为字符串重新处理 //组织单独处理, 多选是二维数组, 单选是数组 tmpValue = JSONArray.toJSONString(vo.getValue()); } if (tmpValue instanceof String) { //多选的情况, 若为字符串则处理成多选的字符串数组 tmpValue = OnlineSwapDataUtils.convertValueToString((String) tmpValue, true, isComSelect); dataValues = JSON.parseArray((String) tmpValue, String.class); } else { dataValues = JsonUtil.getJsonToList(tmpValue, String.class); } } else { boolean isCurOrg = JnpfKeyConsts.CURRORGANIZE.equals(jnpfKey); if (isCurOrg) { //所属组织只保存了当前组织的ID, 没有存储组织数组, 将过滤条件中的组织数组取最后一个ID vo.setValue(OnlineSwapDataUtils.getLastOrganizeId(vo.getValue())); } dataValues.add(vo.getValue().toString()); } String value = vo.getValue().toString(); if (isMultiple || JnpfKeyConsts.CHECKBOX.equals(jnpfKey) || JnpfKeyConsts.CASCADER.equals(jnpfKey) || JnpfKeyConsts.ADDRESS.equals(jnpfKey) || JnpfKeyConsts.CUSTOMUSERSELECT.equals(jnpfKey) ) { searchType = "2"; } if (JnpfKeyConsts.COM_INPUT.equals(jnpfKey) || JnpfKeyConsts.TEXTAREA.equals(jnpfKey)) { if ("3".equals(searchType)) { searchType = "2"; } } if ("1".equals(searchType)) { form.and(sqlColumn, SqlBuilder.isEqualTo(value)); } else if ("2".equals(searchType)) { if (JnpfKeyConsts.CUSTOMUSERSELECT.equals(jnpfKey)) { // 分组 组织 岗位 角色 用户 for (String userVal : dataValues) { convertUserSelectData(sqlColumn, groupList, userVal, true); } } if (isMultiple) { for (String val : dataValues) { if (isSqlServer) { val = val.replaceAll("\\[", "[[]"); } groupList.add(SqlBuilder.or(sqlColumn, SqlBuilder.isLike("%" + val + "%"))); } } if (isSqlServer) { value = value.replaceAll("\\[", "[[]"); } value = "%" + value + "%"; if (!groupList.isEmpty()) { form.and(sqlColumn, SqlBuilder.isLike(value), groupList); } else { form.and(sqlColumn, SqlBuilder.isLike(value)); } } else if ("3".equals(searchType)) { switch (jnpfKey) { case JnpfKeyConsts.MODIFYTIME: case JnpfKeyConsts.CREATETIME: case JnpfKeyConsts.DATE: case JnpfKeyConsts.DATE_CALCULATE: JSONArray timeStampArray = (JSONArray) vo.getValue(); Long o1 = (Long) timeStampArray.get(0); Long o2 = (Long) timeStampArray.get(1); format = StringUtil.isEmpty(vo.getFormat()) ? "yyyy-MM-dd HH:mm:ss" : DateTimeFormatConstant.getFormat(vo.getFormat()); //时间戳转string格式 String startTime = OnlinePublicUtils.getDateByFormat(o1, format); String endTime = OnlinePublicUtils.getDateByFormat(o2, format); //处理创建和修改时间查询条件范围 if (JnpfKeyConsts.CREATETIME.equals(jnpfKey) || JnpfKeyConsts.MODIFYTIME.equals(jnpfKey)) { endTime = endTime.substring(0, 10); } String firstTimeDate = OnlineDatabaseUtils.getTimeFormat(startTime); String lastTimeDate = OnlineDatabaseUtils.getLastTimeFormat(endTime); if (isOracle || isPostgre) { form.and(sqlTable.column(vModel), SqlBuilder.isBetween(new Date(o1)).and(new Date(o2))); } else { form.and(sqlTable.column(vModel), SqlBuilder.isBetween(firstTimeDate).and(lastTimeDate)); } break; case JnpfKeyConsts.TIME: List stringList = JsonUtil.getJsonToList(value, String.class); form.and(sqlTable.column(vModel), SqlBuilder.isBetween(stringList.get(0)).and(stringList.get(1))); break; case JnpfKeyConsts.NUM_INPUT: case JnpfKeyConsts.CALCULATE: BigDecimal firstValue = null; BigDecimal secondValue = null; JSONArray objects = (JSONArray) vo.getValue(); for (int i = 0; i < objects.size(); i++) { Object n = objects.get(i); if (ObjectUtil.isNotEmpty(n)) { if (i == 0) { firstValue = new BigDecimal(String.valueOf(n)); } else { secondValue = new BigDecimal(String.valueOf(n)); } } } if (firstValue != null) { form.and(sqlTable.column(vModel), SqlBuilder.isGreaterThanOrEqualTo(firstValue)); } if (secondValue != null) { form.and(sqlTable.column(vModel), SqlBuilder.isLessThanOrEqualTo(secondValue)); } break; default: break; } } } } finally { //成对注释1---完成后。切回数据库 DynamicDataSourceUtil.clearSwitchDataSource(); } } /** * 封装搜索数据 */ public static void queryList(List formAllModel, VisualDevJsonModel visualDevJsonModel, PaginationModel paginationModel) { String moduleId = paginationModel.getMenuId(); boolean isApp = false; //集成助手过来没有request,默认走pc try { isApp = !RequestContext.isOrignPc(); } catch (Exception e) { isApp = false; } ColumnDataModel columnData = !visualDevJsonModel.getIsLinkList() && isApp ? visualDevJsonModel.getAppColumnData() : visualDevJsonModel.getColumnData(); List authorizeListAll = null; SuperJsonModel ruleJsonModel = null; String superQueryJson = paginationModel.getSuperQueryJson(); //检测是否有系统字段 List jsonStr = new ArrayList<>(); //数据过滤 if (columnData != null) { SuperJsonModel ruleList = isApp ? columnData.getRuleListApp() : columnData.getRuleList(); ruleJsonModel = ruleList != null ? ruleList : new SuperJsonModel(); jsonStr.add(JsonUtil.getObjectToString(ruleJsonModel)); } //高级查询 if (StringUtil.isNotEmpty(superQueryJson)) { jsonStr.add(superQueryJson); } //数据权限 if (StringUtil.isNotEmpty(moduleId) && columnData.getUseDataPermission() != null && columnData.getUseDataPermission()) { authorizeListAll = authorizeUtil.getConditionSql(moduleId, paginationModel.getSystemCode()); jsonStr.add(JsonUtil.getObjectToString(authorizeListAll)); } Map systemParam = userApi.getSystemFieldValue(new SystemParamModel(jsonStr)); //数据权限 if (StringUtil.isNotEmpty(moduleId) && columnData.getUseDataPermission() != null && columnData.getUseDataPermission()) { for (SuperJsonModel superJsonModel : authorizeListAll) { List conditionList = superJsonModel.getConditionList(); for (SuperQueryJsonModel superQueryJsonModel : conditionList) { List fieLdsModelList = superQueryJsonModel.getGroups(); for (FieLdsModel fieLdsModel : fieLdsModelList) { tabelName(fieLdsModel, formAllModel); replaceSystemParam(systemParam, fieLdsModel); } } } visualDevJsonModel.setAuthorize(authorizeListAll); } //数据过滤 if (columnData != null) { List ruleJsonModelList = ruleJsonModel.getConditionList(); for (SuperQueryJsonModel ruleQueryModel : ruleJsonModelList) { List fieLdsModelList = ruleQueryModel.getGroups(); for (FieLdsModel fieLdsModel : fieLdsModelList) { fieLdsModel.setVModel(fieLdsModel.getId()); tabelName(fieLdsModel, formAllModel); replaceSystemParam(systemParam, fieLdsModel); } } visualDevJsonModel.setRuleQuery(ruleJsonModel); } //高级搜索 if (StringUtil.isNotEmpty(superQueryJson)) { SuperJsonModel queryJsonModel = JsonUtil.getJsonToBean(superQueryJson, SuperJsonModel.class); List superQueryListAll = queryJsonModel.getConditionList(); for (SuperQueryJsonModel superQueryJsonModel : superQueryListAll) { List fieLdsModelList = superQueryJsonModel.getGroups(); for (FieLdsModel fieLdsModel : fieLdsModelList) { fieLdsModel.setVModel(fieLdsModel.getId()); tabelName(fieLdsModel, formAllModel); replaceSystemParam(systemParam, fieLdsModel); } } visualDevJsonModel.setSuperQuery(queryJsonModel); } //列表搜索 String queryJson = paginationModel.getQueryJson(); if (StringUtil.isNotEmpty(queryJson)) { Map keyJsonMap = JsonUtil.stringToMap(queryJson); if (keyJsonMap.containsKey("jnpfFlowState")) { visualDevJsonModel.setJnpfFlowState((Integer) keyJsonMap.get("jnpfFlowState")); } else { visualDevJsonModel.setJnpfFlowState(null); } List searchVOListAll = JsonUtil.getJsonToList(columnData.getSearchList(), FieLdsModel.class); if (!visualDevJsonModel.getIsLinkList()) {//外链没有左侧树和标签面板 searchVOListAll.addAll(treeRelation(columnData, formAllModel)); } List searchVOList = new ArrayList<>(); for (String model : keyJsonMap.keySet()) { FieLdsModel fieLdsModel = searchVOListAll.stream().filter(t -> model.equals(t.getId())).findFirst().orElse(null); Object object = keyJsonMap.get(model); if (fieLdsModel != null) { if ("标签面板字段".equals(fieLdsModel.getLabel()) && ObjectUtil.isEmpty(object)) { continue; } ConfigModel config = fieLdsModel.getConfig(); Integer searchType = fieLdsModel.getSearchType(); String jnpfKey = config.getJnpfKey(); //模糊搜索 boolean isMultiple = fieLdsModel.getSearchMultiple() || fieLdsModel.getMultiple(); List type = JnpfKeyConsts.SelectIgnore; //文本框搜索 List base = JnpfKeyConsts.BaseSelect; if (isMultiple || type.contains(jnpfKey)) { if (object instanceof String) { object = new ArrayList() {{ add(String.valueOf(keyJsonMap.get(model))); }}; } searchType = 4; } if (base.contains(jnpfKey) && searchType == 3) { searchType = 2; } String symbol = searchType == 1 ? SearchMethodEnum.Equal.getSymbol() : searchType == 3 ? SearchMethodEnum.Between.getSymbol() : searchType == 2 ? SearchMethodEnum.Like.getSymbol() : SearchMethodEnum.Included.getSymbol(); fieLdsModel.setSymbol(symbol); if (object instanceof List) { fieLdsModel.setFieldValue(JsonUtil.getObjectToString(object)); } else { fieLdsModel.setFieldValue(String.valueOf(object)); } tabelName(fieLdsModel, formAllModel); searchVOList.add(fieLdsModel); } } SuperQueryJsonModel queryJsonModel = new SuperQueryJsonModel(); queryJsonModel.setGroups(searchVOList); SuperJsonModel superJsonModel = new SuperJsonModel(); superJsonModel.setConditionList(new ArrayList() {{ add(queryJsonModel); }}); visualDevJsonModel.setQuery(superJsonModel); } //keyword 关键词搜索 if (StringUtil.isNotEmpty(queryJson)) { Map keyJsonMap = JsonUtil.stringToMap(queryJson); if (keyJsonMap.get(JnpfKeyConsts.JNPFKEYWORD) != null) { String keyWord = String.valueOf(keyJsonMap.get(JnpfKeyConsts.JNPFKEYWORD)); List searchVOListAll = JsonUtil.getJsonToList(columnData.getSearchList(), FieLdsModel.class); List collect = searchVOListAll.stream().filter(t -> t.getIsKeyword()).collect(Collectors.toList()); List searchVOList = new ArrayList<>(); for (FieLdsModel fieLdsModel : collect) { fieLdsModel.setFieldValue(keyWord); fieLdsModel.setSymbol(SearchMethodEnum.Like.getSymbol()); tabelName(fieLdsModel, formAllModel); searchVOList.add(fieLdsModel); } SuperQueryJsonModel queryJsonModel = new SuperQueryJsonModel(); queryJsonModel.setLogic(SearchMethodEnum.Or.getSymbol()); queryJsonModel.setGroups(searchVOList); SuperJsonModel superJsonModel = new SuperJsonModel(); superJsonModel.setConditionList(new ArrayList() {{ add(queryJsonModel); }}); visualDevJsonModel.setKeyQuery(superJsonModel); } } //页签查询 String extraQueryJson = paginationModel.getExtraQueryJson(); if (StringUtil.isNotEmpty(extraQueryJson)) { Map keyJsonMap = JsonUtil.stringToMap(extraQueryJson); if (MapUtils.isNotEmpty(keyJsonMap)) { SuperJsonModel superJsonModel = new SuperJsonModel(); List extraQueryList = extraQueryList(keyJsonMap, formAllModel); SuperQueryJsonModel queryJsonModel = new SuperQueryJsonModel(); queryJsonModel.setGroups(extraQueryList); superJsonModel.setConditionList(new ArrayList() {{ add(queryJsonModel); }}); visualDevJsonModel.setExtraQuery(superJsonModel); } } } /** * 赋值表名 * * @param fieLdsModel * @param formAllModel */ public static void tabelName(FieLdsModel fieLdsModel, List formAllModel) { //主表数据 List mast = formAllModel.stream().filter(t -> FormEnum.mast.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList()); //列表子表数据 List mastTable = formAllModel.stream().filter(t -> FormEnum.mastTable.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList()); //子表 List childTable = formAllModel.stream().filter(t -> FormEnum.table.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList()); if (fieLdsModel != null) { String vModel = fieLdsModel.getId().split("-")[0]; String field = fieLdsModel.getId().split("-").length > 1 ? fieLdsModel.getId().split("-")[1] : ""; FormAllModel mastModel = mast.stream().filter(t -> vModel.equals(t.getFormColumnModel().getFieLdsModel().getVModel())).findFirst().orElse(null); if (mastModel != null) { fieLdsModel.getConfig().setTableName(mastModel.getFormColumnModel().getFieLdsModel().getConfig().getTableName()); // fieLdsModel.getConfig().setJnpfKey(mastModel.getFormColumnModel().getFieLdsModel().getConfig().getJnpfKey()); } FormAllModel mastTableModel = mastTable.stream().filter(t -> vModel.equals(t.getFormMastTableModel().getVModel())).findFirst().orElse(null); if (mastTableModel != null) { fieLdsModel.getConfig().setTableName(mastTableModel.getFormMastTableModel().getMastTable().getFieLdsModel().getConfig().getTableName()); // fieLdsModel.getConfig().setJnpfKey(mastTableModel.getFormMastTableModel().getMastTable().getFieLdsModel().getConfig().getJnpfKey()); } FormAllModel childTableModel = childTable.stream().filter(t -> vModel.equals(t.getChildList().getTableModel())).findFirst().orElse(null); if (childTableModel != null) { fieLdsModel.getConfig().setTableName(childTableModel.getChildList().getTableName()); List childList = childTableModel.getChildList().getChildList(); for (FormColumnModel formColumnModel : childList) { FieLdsModel childFieLdsModel = formColumnModel.getFieLdsModel(); String childModel = childFieLdsModel.getVModel(); if (childModel.equals(field)) { // fieLdsModel.getConfig().setJnpfKey(childFieLdsModel.getConfig().getJnpfKey()); } } } convertUserSelectData(fieLdsModel); } } private static void convertUserSelectData(FieLdsModel fieLdsModel) { List symbolList = new ArrayList<>(); symbolList.add(SearchMethodEnum.Equal.getSymbol()); symbolList.add(SearchMethodEnum.NotEqual.getSymbol()); String jnpfKey = fieLdsModel.getConfig().getJnpfKey(); String fieldValue = fieLdsModel.getFieldValue(); String symbol = fieLdsModel.getSymbol(); if (StringUtil.isNotEmpty(fieldValue)) { switch (jnpfKey) { case JnpfKeyConsts.CUSTOMUSERSELECT: if (!symbolList.contains(symbol)) { List values = new ArrayList<>(); try { values = JsonUtil.getJsonToList(fieldValue, String.class); } catch (Exception e) { } List dataValues = new ArrayList<>(values); for (String userVal : values) { String userValue = userVal.substring(0, userVal.indexOf("--")); UserEntity userEntity = userApi.getInfoById(userValue); if (userEntity != null) { dataValues.add(userValue); //在用户关系表中取出 List groupRel = Optional.ofNullable(userRelationApi.getList(userValue, PermissionConst.GROUP)).orElse(new ArrayList<>()); List orgRel = Optional.ofNullable(userRelationApi.getList(userValue, PermissionConst.ORGANIZE)).orElse(new ArrayList<>()); List posRel = Optional.ofNullable(userRelationApi.getList(userValue, PermissionConst.POSITION)).orElse(new ArrayList<>()); List roleRel = Optional.ofNullable(userRelationApi.getList(userValue, PermissionConst.ROLE)).orElse(new ArrayList<>()); if (groupRel.size() > 0) { for (UserRelationEntity split : groupRel) { dataValues.add(split.getObjectId()); } } if (StringUtil.isNotEmpty(userEntity.getOrganizeId())) { //向上递归 查出所有上级组织 List allUpOrgIDs = organizeApi.upWardRecursion(userEntity.getOrganizeId()); for (String orgID : allUpOrgIDs) { dataValues.add(orgID); } } if (!posRel.isEmpty()) { for (UserRelationEntity split : posRel) { dataValues.add(split.getObjectId()); } } if (!roleRel.isEmpty()) { for (UserRelationEntity split : roleRel) { dataValues.add(split.getObjectId()); } } } } fieLdsModel.setFieldValue(JsonUtil.getObjectToString(dataValues)); } break; default: break; } } } /** * 高级搜索 * * @param conditionList * @param convertUser */ public static void superList(List conditionList, boolean convertUser) { List dateControl = JnpfKeyConsts.DateSelect; List numControl = JnpfKeyConsts.NumSelect; for (SuperQueryJsonModel queryJsonModel : conditionList) { List fieLdsModelList = queryJsonModel.getGroups(); for (FieLdsModel fieLdsModel : fieLdsModelList) { List dataList = new ArrayList<>(); ConfigModel config = fieLdsModel.getConfig(); String vModel = fieLdsModel.getVModel().trim(); String jnpfKey = config.getJnpfKey(); if (vModel.split(JnpfConst.SIDE_MARK).length > 1) { vModel = vModel.split(JnpfConst.SIDE_MARK)[1]; } if (vModel.split("-").length > 1) { vModel = vModel.split("-")[1]; } String value = fieLdsModel.getFieldValue(); Object fieldValue = fieLdsModel.getFieldValue(); Object fieldValueTwo = fieLdsModel.getFieldValue(); if (fieLdsModel.getFieldValue() == null) { fieldValue = ""; } List controlList = new ArrayList() {{ addAll(numControl); addAll(dateControl); add(JnpfKeyConsts.TIME); }}; //处理数据 if (controlList.contains(jnpfKey) && StringUtil.isNotEmpty(value) && !SearchMethodEnum.Like.getSymbol().equals(fieLdsModel.getSymbol())) { int num = 0; List data = new ArrayList<>(); try { data.addAll(JsonUtil.getJsonToList(value, String.class)); } catch (Exception e) { data.add(value); data.add(value); } String valueOne = data.get(0); String valueTwo = data.get(1); //数字 if (numControl.contains(jnpfKey)) { fieldValue = valueOne != null ? new BigDecimal(valueOne) : valueOne; fieldValueTwo = valueTwo != null ? new BigDecimal(valueTwo) : valueTwo; // 精度处理 Integer precision = fieLdsModel.getPrecision(); if (ObjectUtil.isNotEmpty(precision)) { String zeroNum = "0." + StringUtils.repeat("0", precision); DecimalFormat numFormat = new DecimalFormat(zeroNum); fieldValue = new BigDecimal(numFormat.format(new BigDecimal(valueOne))); if (valueTwo != null) { fieldValueTwo = new BigDecimal(numFormat.format(new BigDecimal(valueTwo))); } } num++; } //日期 if (dateControl.contains(jnpfKey)) { fieldValue = new Date(); fieldValueTwo = new Date(); if (ObjectUtil.isNotEmpty(valueOne)) { fieldValue = new Date(Long.valueOf(valueOne)); } if (ObjectUtil.isNotEmpty(valueTwo)) { fieldValueTwo = new Date(Long.valueOf(valueTwo)); } num++; } if (num == 0) { fieldValue = valueOne; fieldValueTwo = valueTwo; } } try { List> list = JsonUtil.getJsonToBean(value, List.class); Set dataAll = new HashSet<>(); for (int i = 0; i < list.size(); i++) { List list1 = new ArrayList<>(); list1.addAll(list.get(i)); dataAll.add(JSONArray.toJSONString(list1)); } dataList = new ArrayList<>(dataAll); } catch (Exception e) { try { Set dataAll = new HashSet<>(); List list = JsonUtil.getJsonToList(value, String.class); List mast = new ArrayList() {{ add(JnpfKeyConsts.CASCADER); add(JnpfKeyConsts.ADDRESS); }}; if (mast.contains(jnpfKey)) { dataAll.add(JSONArray.toJSONString(list)); } else { dataAll.addAll(list); } dataList.addAll(new ArrayList<>(dataAll)); } catch (Exception e1) { dataList.add(value); } } if (dataList.isEmpty()) { dataList.add("jnpfNullList"); } fieLdsModel.setVModel(vModel); fieLdsModel.setFieldValueOne(fieldValue); fieLdsModel.setFieldValueTwo(fieldValueTwo); fieLdsModel.setDataList(dataList); if (convertUser) { convertUserSelectData(fieLdsModel); } } } } /** * 树形查询 * * @return */ private static List treeRelation(ColumnDataModel columnData, List formAllModel) { //主表数据 List mast = formAllModel.stream().filter(t -> FormEnum.mast.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList()); //列表子表数据 List mastTable = formAllModel.stream().filter(t -> FormEnum.mastTable.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList()); //子表 List childTable = formAllModel.stream().filter(t -> FormEnum.table.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList()); List fieLdsModelList = new ArrayList<>(); List searchVOListAll = JsonUtil.getJsonToList(columnData.getSearchList(), FieLdsModel.class); String treeDataSource = columnData.getTreeDataSource(); String treeRelation = columnData.getTreeRelation(); boolean isTree = searchVOListAll.stream().filter(t -> t.getId().equals(treeRelation)).count() == 0; if (isTree && StringUtil.isNotEmpty(treeRelation)) { String vModel = treeRelation.split("-")[0]; FormAllModel mastModel = mast.stream().filter(t -> vModel.equals(t.getFormColumnModel().getFieLdsModel().getVModel())).findFirst().orElse(null); if (mastModel != null) { FieLdsModel fieLdsModel = mastModel.getFormColumnModel().getFieLdsModel(); fieLdsModel.setId(vModel); fieLdsModel.setSearchType(1); Boolean multiple = fieLdsModel.getMultiple(); fieLdsModel.setSymbol(multiple && !"organize".equals(treeDataSource) ? SearchMethodEnum.Like.getSymbol() : SearchMethodEnum.Equal.getSymbol()); fieLdsModelList.add(fieLdsModel); } FormAllModel mastTableModel = mastTable.stream().filter(t -> vModel.equals(t.getFormMastTableModel().getVModel())).findFirst().orElse(null); if (mastTableModel != null) { FieLdsModel fieLdsModel = mastTableModel.getFormMastTableModel().getMastTable().getFieLdsModel(); fieLdsModel.setId(vModel); fieLdsModel.setSearchType(1); Boolean multiple = fieLdsModel.getMultiple(); fieLdsModel.setSymbol(multiple && !"organize".equals(treeDataSource) ? SearchMethodEnum.Like.getSymbol() : SearchMethodEnum.Equal.getSymbol()); fieLdsModelList.add(fieLdsModel); } FormAllModel childTableModel = childTable.stream().filter(t -> vModel.equals(t.getChildList().getTableModel())).findFirst().orElse(null); if (childTableModel != null) { List childList = childTableModel.getChildList().getChildList(); for (FormColumnModel formColumnModel : childList) { FieLdsModel fieLdsModel = formColumnModel.getFieLdsModel(); Boolean multiple = fieLdsModel.getMultiple(); if (treeRelation.equals(vModel + "-" + fieLdsModel.getVModel())) { fieLdsModel.setSymbol(multiple && !"organize".equals(treeDataSource) ? SearchMethodEnum.Like.getSymbol() : SearchMethodEnum.Equal.getSymbol()); fieLdsModel.setId(vModel + "-" + fieLdsModel.getVModel()); fieLdsModel.setSearchType(1); fieLdsModelList.add(fieLdsModel); } } } } // 标签面板-在线开发查询字段添加 if (Objects.equals(columnData.getType(), 1) || Objects.equals(columnData.getType(), 4) || columnData.getType() == null) { TabConfigModel tabConfig = columnData.getTabConfig(); if (tabConfig != null && tabConfig.isOn() && StringUtil.isNotEmpty(tabConfig.getRelationField())) { String relationField = tabConfig.getRelationField(); FormAllModel mastModel = mast.stream().filter(t -> relationField.equals(t.getFormColumnModel().getFieLdsModel().getVModel())).findFirst().orElse(null); if (mastModel != null) { FieLdsModel fieLdsModel = mastModel.getFormColumnModel().getFieLdsModel(); fieLdsModel.setId(relationField); fieLdsModel.setSearchType(1); fieLdsModel.setLabel("标签面板字段"); fieLdsModel.setSymbol(SearchMethodEnum.Equal.getSymbol()); fieLdsModelList.add(fieLdsModel); } FormAllModel mastTableModel = mastTable.stream().filter(t -> relationField.equals(t.getFormMastTableModel().getVModel())).findFirst().orElse(null); if (mastTableModel != null) { FieLdsModel fieLdsModel = mastTableModel.getFormMastTableModel().getMastTable().getFieLdsModel(); fieLdsModel.setId(relationField); fieLdsModel.setSearchType(1); fieLdsModel.setLabel("标签面板字段"); fieLdsModel.setSymbol(SearchMethodEnum.Equal.getSymbol()); fieLdsModelList.add(fieLdsModel); } } } return fieLdsModelList; } /** * 查询 * * @return */ public static void getSuperSql(QueryExpressionDSL.QueryExpressionWhereBuilder where, List superJsonModelList, List sqlModelList, String databaseProductName, String tableName) { List groupQueryList = new ArrayList<>(); for (SuperJsonModel superJsonModel : superJsonModelList) { List groupList = getSuperSql(where, superJsonModel, sqlModelList, databaseProductName, tableName, true); boolean and = superJsonModel.getAuthorizeLogic(); String matchLogic = superJsonModel.getMatchLogic(); boolean isAddMatchLogic = SearchMethodEnum.And.getSymbol().equalsIgnoreCase(matchLogic); if (!groupList.isEmpty()) { AndOrCriteriaGroup andGroup = SqlBuilder.and(DerivedColumn.of("1"), SqlBuilder.isEqualTo(isAddMatchLogic ? 1 : 2), groupList.toArray(new AndOrCriteriaGroup[groupList.size()])); AndOrCriteriaGroup orGroup = SqlBuilder.or(DerivedColumn.of("1"), SqlBuilder.isEqualTo(isAddMatchLogic ? 1 : 2), groupList.toArray(new AndOrCriteriaGroup[groupList.size()])); groupQueryList.add(and ? andGroup : orGroup); } } if (!groupQueryList.isEmpty()) { where.and(DerivedColumn.of("1"), SqlBuilder.isEqualTo(1), groupQueryList); } } /** * 查询 * * @return */ public static List getSuperSql(QueryExpressionDSL.QueryExpressionWhereBuilder where, SuperJsonModel superJsonModel, List sqlModelList, String databaseProductName, String tableName, boolean authorizeLogic) { List groupList = new ArrayList<>(); OnlineQuerySqlUtils onlineQuerySqlUtils = new OnlineQuerySqlUtils(); List conditionList = new ArrayList<>(); List conditionListAll = superJsonModel.getConditionList(); String matchLogic = superJsonModel.getMatchLogic(); for (SuperQueryJsonModel queryJsonModel : conditionListAll) { List fieLdsModelList = new ArrayList<>(); List groupsList = queryJsonModel.getGroups(); for (FieLdsModel fieLdsModel : groupsList) { String table = StringUtil.isNotEmpty(fieLdsModel.getConfig().getRelationTable()) ? fieLdsModel.getConfig().getRelationTable() : fieLdsModel.getConfig().getTableName(); if (StringUtil.isEmpty(tableName) || table.equals(tableName)) { fieLdsModelList.add(fieLdsModel); } } SuperQueryJsonModel queryModel = new SuperQueryJsonModel(); queryModel.setLogic(queryJsonModel.getLogic()); queryModel.setGroups(fieLdsModelList); if (!fieLdsModelList.isEmpty()) { conditionList.add(queryModel); } } if (!conditionList.isEmpty()) { groupList.addAll(onlineQuerySqlUtils.getSuperSql(conditionList, sqlModelList, databaseProductName, matchLogic)); } if (!authorizeLogic && !groupList.isEmpty()) { where.and(DerivedColumn.of("1"), SqlBuilder.isEqualTo(SearchMethodEnum.And.getSymbol().equalsIgnoreCase(matchLogic) ? 1 : 2), groupList); } return groupList; } /** * 将用户选择控件的数据转换为Dynamic查询条件 * * @param sqlColumn * @param userGroup * @param userVal */ private static void convertUserSelectData(BindableColumn sqlColumn, List userGroup, String userVal, boolean isLike) { // 分组 组织 岗位 角色 用户 String userValue = userVal.substring(0, userVal.indexOf("--")); UserEntity userEntity = userApi.getInfoById(userValue); if (userEntity != null) { String idValue; //在用户关系表中取出 List groupRel = Optional.ofNullable(userRelationApi.getList(userValue, PermissionConst.GROUP)).orElse(new ArrayList<>()); List orgRel = Optional.ofNullable(userRelationApi.getList(userValue, PermissionConst.ORGANIZE)).orElse(new ArrayList<>()); List posRel = Optional.ofNullable(userRelationApi.getList(userValue, PermissionConst.POSITION)).orElse(new ArrayList<>()); List roleRel = Optional.ofNullable(userRelationApi.getList(userValue, PermissionConst.ROLE)).orElse(new ArrayList<>()); if (groupRel.size() > 0) { for (UserRelationEntity split : groupRel) { idValue = "%" + split.getObjectId() + "%"; AndOrCriteriaGroup aog = isLike ? SqlBuilder.or(sqlColumn, SqlBuilder.isLike(idValue)) : SqlBuilder.and(sqlColumn, SqlBuilder.isNotLike(idValue)); userGroup.add(aog); } } if (StringUtil.isNotEmpty(userEntity.getOrganizeId())) { //向上递归 查出所有上级组织 List allUpOrgIDs = organizeApi.upWardRecursion(userEntity.getOrganizeId()); for (String orgID : allUpOrgIDs) { idValue = "%" + orgID + "%"; AndOrCriteriaGroup aog = isLike ? SqlBuilder.or(sqlColumn, SqlBuilder.isLike(idValue)) : SqlBuilder.and(sqlColumn, SqlBuilder.isNotLike(idValue)); userGroup.add(aog); } } if (!posRel.isEmpty()) { for (UserRelationEntity split : posRel) { idValue = "%" + split.getObjectId() + "%"; AndOrCriteriaGroup aog = isLike ? SqlBuilder.or(sqlColumn, SqlBuilder.isLike(idValue)) : SqlBuilder.and(sqlColumn, SqlBuilder.isNotLike(idValue)); userGroup.add(aog); } } if (!roleRel.isEmpty()) { for (UserRelationEntity split : roleRel) { idValue = "%" + split.getObjectId() + "%"; AndOrCriteriaGroup aog = isLike ? SqlBuilder.or(sqlColumn, SqlBuilder.isLike(idValue)) : SqlBuilder.and(sqlColumn, SqlBuilder.isNotLike(idValue)); userGroup.add(aog); } } } } public static List getBasicColumns(List mainTableFields, List sqlModels, OnlineDynamicSqlModel dycModel, List columnFieldListAll, boolean isClobDbType) { // ColumnListField columnListField = columnFieldListAll.stream().filter(item -> item.getProp().equals(m)).findFirst().orElse(null); // if (isClobDbType && columnListField != null) { // String jnpfKey = columnListField.getJnpfKey(); // if (JnpfKeyConsts.getTextField().contains(jnpfKey)) { // if (sqlModels.size() > 1) {//连表会出现《表名.字段》clob处理需要包含表名 // return SqlTable.of("dbms_lob.substr(" + dycModel.getTableName()).column(m + ")").as(m); // } else { // return SqlTable.of(dycModel.getTableName()).column("dbms_lob.substr(" + m + ")").as(m); // } // } // } return mainTableFields.stream().map(m -> { // ColumnListField columnListField = columnFieldListAll.stream().filter(item -> item.getProp().equals(m)).findFirst().orElse(null); // if (isClobDbType && columnListField != null) { // String jnpfKey = columnListField.getJnpfKey(); // if (JnpfKeyConsts.getTextField().contains(jnpfKey)) { // if (sqlModels.size() > 1) {//连表会出现《表名.字段》clob处理需要包含表名 // return SqlTable.of("dbms_lob.substr(" + dycModel.getTableName()).column(m + ")").as(m); // } else { // return SqlTable.of(dycModel.getTableName()).column("dbms_lob.substr(" + m + ")").as(m); // } // } // } return dycModel.getSqlTable().column(m); }).collect(Collectors.toList()); } private static List getBasicColumnsChild(List modelList, OnlineDynamicSqlModel dycModel, List onlineColumnFieldModels, boolean isClobDbType) { SqlTable mastSqlTable = dycModel.getSqlTable(); // ColumnListField columnListField = modelList.stream().filter(item -> item.getProp().equals(m.getOriginallyField())).findFirst().orElse(null); // if (isClobDbType && columnListField != null) { // String jnpfKey = columnListField.getConfig().getJnpfKey(); // if (JnpfKeyConsts.getTextField().contains(jnpfKey)) { // return SqlTable.of("dbms_lob.substr(" + dycModel.getTableName()).column(m.getField() + ")").as(m.getOriginallyField()); // } // } return onlineColumnFieldModels.stream().map(m -> { // ColumnListField columnListField = modelList.stream().filter(item -> item.getProp().equals(m.getOriginallyField())).findFirst().orElse(null); // if (isClobDbType && columnListField != null) { // String jnpfKey = columnListField.getConfig().getJnpfKey(); // if (JnpfKeyConsts.getTextField().contains(jnpfKey)) { // return SqlTable.of("dbms_lob.substr(" + dycModel.getTableName()).column(m.getField() + ")").as(m.getOriginallyField()); // } // } return mastSqlTable.column(m.getField()).as(m.getOriginallyField()); }).collect(Collectors.toList()); } /** * 替换系统参数 * * @param systemParam * @param fieLdsModel */ public static void replaceSystemParam(Map systemParam, FieLdsModel fieLdsModel) { String fieldValue = fieLdsModel.getFieldValue(); if (systemParam.containsKey(fieldValue)) { fieLdsModel.setFieldValue(systemParam.get(fieldValue)); } } /** * 页签查询字段组装 * * @param map * @param formAllModel * @return */ private static List extraQueryList(Map map, List formAllModel) { List fieLdsModelList = new ArrayList<>(); //主表数据 List mast = formAllModel.stream().filter(t -> FormEnum.mast.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList()); //列表子表数据 List mastTable = formAllModel.stream().filter(t -> FormEnum.mastTable.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList()); for (String key : map.keySet()) { Object value = map.get(key); FieLdsModel fieLdsModel = null; FormAllModel mastModel = mast.stream().filter(t -> key.equals(t.getFormColumnModel().getFieLdsModel().getVModel())).findFirst().orElse(null); if (mastModel != null) { fieLdsModel = BeanUtil.copyProperties(mastModel.getFormColumnModel().getFieLdsModel(), FieLdsModel.class); } FormAllModel mastTableModel = mastTable.stream().filter(t -> key.equals(t.getFormMastTableModel().getVModel())).findFirst().orElse(null); if (mastTableModel != null) { fieLdsModel = BeanUtil.copyProperties(mastTableModel.getFormMastTableModel().getMastTable().getFieLdsModel(), FieLdsModel.class); } fieLdsModel.setId(key); fieLdsModel.setSearchType(1); fieLdsModel.setLabel(fieLdsModel.getConfig().getLabel()); fieLdsModel.setSymbol(SearchMethodEnum.Equal.getSymbol()); if (Objects.nonNull(value)) { if (value instanceof List) { fieLdsModel.setFieldValue(JsonUtil.getObjectToString(value)); } else { fieLdsModel.setFieldValue(String.valueOf(value)); } } else { fieLdsModel.setSymbol(SearchMethodEnum.IsNull.getSymbol()); } fieLdsModelList.add(fieLdsModel); } return fieLdsModelList; } /** * 获取组织全路径 * * @param allIdList 组织id列表。 * @return */ private static String getOrgAllPath(List allIdList) { List> orgAllPathList = getOrgAllPathList(allIdList); return JsonUtil.getObjectToString(orgAllPathList); } /** * 获取组织全路径 * * @param allIdList 组织id列表。 * @return */ private static List> getOrgAllPathList(List allIdList) { List> resOrg = new ArrayList<>(); for (String itemOrg : allIdList) { OrganizeEntity organizeEntity = organizeApi.getInfoById(itemOrg); if (organizeEntity != null) { if (StringUtil.isNotEmpty(organizeEntity.getOrganizeIdTree())) { String[] split = organizeEntity.getOrganizeIdTree().split(","); if (split.length > 0) { resOrg.add(Arrays.asList(split)); } } } } return resOrg; } }