package jnpf.onlinedev.util; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import jnpf.base.model.ColumnDataModel; import jnpf.base.model.VisualDevJsonModel; import jnpf.base.util.FlowFormDataUtil; import jnpf.constant.JnpfConst; import jnpf.constant.KeyConst; import jnpf.database.model.entity.DbLinkEntity; import jnpf.database.model.query.SuperJsonModel; import jnpf.database.model.query.SuperQueryJsonModel; import jnpf.database.util.ConnUtil; import jnpf.database.util.DbTypeUtil; 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.PaginationModel; import jnpf.onlinedev.model.online.OnlineColumnChildFieldModel; import jnpf.onlinedev.model.online.OnlineColumnFieldModel; import jnpf.permission.AuthorizeApi; import jnpf.permission.UserApi; 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 lombok.extern.slf4j.Slf4j; 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 */ @Slf4j public class OnlineProductSqlUtils { private static final String CURRENT_DATE = "@currentDate"; OnlineProductSqlUtils() { } private static FlowFormDataUtil flowDataUtil = SpringContext.getBean(FlowFormDataUtil.class); private static UserApi userApi = SpringContext.getBean(UserApi.class); private static AuthorizeApi authorizeUtil = SpringContext.getBean(AuthorizeApi.class); private static final String LABEL_PANEL = "标签面板字段"; /** * 生成列表查询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(); @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 (Boolean.TRUE.equals(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, dycModel); dycModel.setColumns(mainSqlColumns); } else { if (!classifyFieldList.isEmpty()) { Map> mastTableCols = childFieldList.stream().collect(Collectors.groupingBy(OnlineColumnFieldModel::getTableName)); List onlineColumnFieldModels = Optional.ofNullable(mastTableCols.get(dycModel.getTableName())).orElse(new ArrayList<>()); List mastSqlCols = getBasicColumnsChild(dycModel, onlineColumnFieldModels); dycModel.setColumns(mastSqlCols); } } } } catch (SQLException e1) { log.error(e1.getMessage(), e1); } catch (DataException e) { log.error(e.getMessage(), e); } } /** * 封装搜索数据 */ 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 = !Boolean.TRUE.equals(visualDevJsonModel.getIsLinkList()) && isApp ? visualDevJsonModel.getAppColumnData() : visualDevJsonModel.getColumnData(); List authorizeListAll = null; SuperJsonModel ruleJsonModel = null; String superQueryJson = paginationModel.getSuperQueryJson(); SuperJsonModel superQueryModel = null; //检测是否有系统字段 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); superQueryModel = JsonUtil.getJsonToBean(superQueryJson, SuperJsonModel.class); } //数据权限 if (StringUtil.isNotEmpty(moduleId) && columnData.getUseDataPermission() != null && Boolean.TRUE.equals(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 && Boolean.TRUE.equals(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) { filterRuleByParamQuery(ruleJsonModel, superQueryModel); 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 (superQueryModel != null) { List superQueryListAll = superQueryModel.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(superQueryModel); } //列表搜索 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 (!Boolean.TRUE.equals(visualDevJsonModel.getIsLinkList())) {//外链没有左侧树和标签面板 searchVOListAll.addAll(treeRelation(columnData, formAllModel)); } boolean treeIncludeChildren = Boolean.TRUE.equals(columnData.getTreeIncludeChildren()); String treeRelation = columnData.getTreeRelation(); List searchVOList = new ArrayList<>(); for (Map.Entry modelKey : keyJsonMap.entrySet()) { Object object = modelKey.getValue(); FieLdsModel fieLdsModel = searchVOListAll.stream().filter(t -> modelKey.getKey().equals(t.getId())).findFirst().orElse(null); if (fieLdsModel != null) { if (LABEL_PANEL.equals(fieLdsModel.getLabel()) && ObjectUtil.isEmpty(object)) { continue; } ConfigModel config = fieLdsModel.getConfig(); Integer searchType = fieLdsModel.getSearchType(); String jnpfKey = config.getJnpfKey(); if (treeIncludeChildren && modelKey.getKey().equals(treeRelation) && object instanceof List) { searchType = 4; } //模糊搜索 boolean isMultiple = fieLdsModel.getSearchMultiple() || fieLdsModel.getMultiple(); List type = JnpfKeyConsts.SelectIgnore; //文本框搜索 List base = JnpfKeyConsts.BaseSelect; if (isMultiple || type.contains(jnpfKey)) { if (object instanceof String) { object = Arrays.asList(String.valueOf(object)); } searchType = 4; } if (base.contains(jnpfKey) && searchType == 3) { searchType = 2; } String symbol; if (searchType == 1) { symbol = SearchMethodEnum.EQUAL.getSymbol(); } else if (searchType == 2) { symbol = SearchMethodEnum.LIKE.getSymbol(); } else if (searchType == 3) { symbol = SearchMethodEnum.BETWEEN.getSymbol(); } else { symbol = 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(Arrays.asList(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(Arrays.asList(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(Arrays.asList(queryJsonModel)); visualDevJsonModel.setExtraQuery(superJsonModel); } } } private static void filterRuleByParamQuery(SuperJsonModel ruleJsonModel, SuperJsonModel queryJsonModel) { if (ruleJsonModel == null || queryJsonModel == null) { return; } Set paramFieldSet = getParamQueryFieldSet(queryJsonModel); if (paramFieldSet.isEmpty()) { return; } List ruleList = ruleJsonModel.getConditionList(); if (ruleList == null || ruleList.isEmpty()) { return; } List filteredRuleList = new ArrayList<>(); for (SuperQueryJsonModel ruleQueryModel : ruleList) { List groups = ruleQueryModel.getGroups(); if (groups == null || groups.isEmpty()) { continue; } List filteredGroups = groups.stream() .filter(item -> !paramFieldSet.contains(item.getId())) .collect(Collectors.toList()); if (!filteredGroups.isEmpty()) { ruleQueryModel.setGroups(filteredGroups); filteredRuleList.add(ruleQueryModel); } } ruleJsonModel.setConditionList(filteredRuleList); } private static Set getParamQueryFieldSet(SuperJsonModel queryJsonModel) { Set paramFieldSet = new HashSet<>(); List conditionList = queryJsonModel.getConditionList(); if (conditionList == null || conditionList.isEmpty()) { return paramFieldSet; } for (SuperQueryJsonModel queryModel : conditionList) { List groups = queryModel.getGroups(); if (groups == null || groups.isEmpty()) { continue; } for (FieLdsModel item : groups) { Object fieldValue = item.getFieldValue(); if ("5".equals(item.getFieldValueType()) && fieldValue != null && StringUtil.isNotEmpty(fieldValue.toString())) { paramFieldSet.add(item.getId()); } } } return paramFieldSet; } /** * 赋值表名 * * @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.MAST_TABLE.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]; if (TableFeildsEnum.FLOWSTATE.getField().equalsIgnoreCase(vModel)) { FormAllModel mainTableField = mast.stream().findFirst().orElse(null); if (mainTableField != null) { fieLdsModel.getConfig().setTableName(mainTableField.getFormColumnModel().getFieLdsModel().getConfig().getTableName()); } return; } 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()); } 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()); } FormAllModel childTableModel = childTable.stream().filter(t -> vModel.equals(t.getChildList().getTableModel())).findFirst().orElse(null); if (childTableModel != null) { fieLdsModel.getConfig().setTableName(childTableModel.getChildList().getTableName()); } } } /** * 高级搜索 * * @param conditionList */ public static void superList(List conditionList) { 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]; } boolean flowStateField = TableFeildsEnum.FLOWSTATE.getField().equalsIgnoreCase(vModel); String value = fieLdsModel.getFieldValue(); Object fieldValue = fieLdsModel.getFieldValue(); Object fieldValueTwo = fieLdsModel.getFieldValue(); if (fieLdsModel.getFieldValue() == null) { fieldValue = ""; } List controlList = new ArrayList<>(); controlList.addAll(numControl); controlList.addAll(dateControl); controlList.add(JnpfKeyConsts.TIME); //处理数据 if ((controlList.contains(jnpfKey) || flowStateField) && 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) || flowStateField) { 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(JSON.toJSONString(list1)); } dataList = new ArrayList<>(dataAll); } catch (Exception e) { try { Set dataAll = new HashSet<>(); List list = JsonUtil.getJsonToList(value, String.class); List mast = Arrays.asList(JnpfKeyConsts.CASCADER, JnpfKeyConsts.ADDRESS); if (mast.contains(jnpfKey)) { dataAll.add(JSON.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); } } } /** * 树形查询 * * @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.MAST_TABLE.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 treeIncludeChildren = Boolean.TRUE.equals(columnData.getTreeIncludeChildren()); 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(treeIncludeChildren ? 4 : 1); boolean multiple = fieLdsModel.getMultiple(); fieLdsModel.setSymbol(multiple && !KeyConst.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(treeIncludeChildren ? 4 : 1); boolean multiple = fieLdsModel.getMultiple(); fieLdsModel.setSymbol(multiple && !KeyConst.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 && !KeyConst.ORGANIZE.equals(treeDataSource) ? SearchMethodEnum.LIKE.getSymbol() : SearchMethodEnum.EQUAL.getSymbol()); fieLdsModel.setId(vModel + "-" + fieLdsModel.getVModel()); fieLdsModel.setSearchType(treeIncludeChildren ? 4 : 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(LABEL_PANEL); 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(LABEL_PANEL); 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; } public static List getBasicColumns(List mainTableFields, OnlineDynamicSqlModel dycModel) { return mainTableFields.stream().map(m -> dycModel.getSqlTable().column(m)).collect(Collectors.toList()); } private static List getBasicColumnsChild(OnlineDynamicSqlModel dycModel, List onlineColumnFieldModels) { SqlTable mastSqlTable = dycModel.getSqlTable(); return onlineColumnFieldModels.stream().map(m -> 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 (CURRENT_DATE.equals(fieldValue)) { Date now = new Date(); String symbol = fieLdsModel.getSymbol(); if (SearchMethodEnum.IS_NULL.getSymbol().equals(symbol) || SearchMethodEnum.IS_NOT_NULL.getSymbol().equals(symbol)) { fieLdsModel.setFieldValue(null); } else if (SearchMethodEnum.EQUAL.getSymbol().equals(symbol) || SearchMethodEnum.BETWEEN.getSymbol().equals(symbol)) { // A date equality condition should match any time within the current day. fieLdsModel.setSymbol(SearchMethodEnum.BETWEEN.getSymbol()); fieLdsModel.setFieldValue(JsonUtil.getObjectToString(Arrays.asList(DateUtil.beginOfDay(now).getTime(), DateUtil.endOfDay(now).getTime()))); } else { boolean useEndOfDay = SearchMethodEnum.GREATER_THAN.getSymbol().equals(symbol) || SearchMethodEnum.LESS_THAN_OR_EQUAL.getSymbol().equals(symbol); fieLdsModel.setFieldValue(String.valueOf((useEndOfDay ? DateUtil.endOfDay(now) : DateUtil.beginOfDay(now)).getTime())); } return; } 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.MAST_TABLE.getMessage().equals(t.getJnpfKey())).collect(Collectors.toList()); for (Map.Entry keyItem : map.entrySet()) { String key = keyItem.getKey(); Object value = keyItem.getValue(); 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); } if (fieLdsModel == null) { continue; } 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.IS_NULL.getSymbol()); } fieLdsModelList.add(fieLdsModel); } return fieLdsModelList; } }