帮我重构这段代码 public static Map<String, List<QueryField>> handleFields(Entity entity, boolean isSum, boolean isDistinct, List<QueryField> sumSelectFields, List<QueryField> selectFields, List<String> groupbyFields, List<QueryOrderby> queryOrderbys, Map<String, Object> extendSelectFields, BillContext billContext, boolean isCrossDomainHandle, boolean isFromApi, List<String> groupByAsCondition) { List<Field> fields = entity.getFields(); if (isDistinct) { selectFields.add(new QueryField("1", "", "distinct")); } List<DataTransferField> transferFields = null; if (isFromApi && "Bill".equalsIgnoreCase(entity.getType()) && null != entity.getDataSourceName()) { IDataTransfer dataTransfer = DataTransferFactory.create(1); try { DataTransferConfig config = dataTransfer.getConfig(billContext.getBillnum(), entity.getDataSourceName(), 1);//new DataTransferConfig(fullname, fields); transferFields = config.getFields(); } catch (Exception e) { log.error("api模式获取实体翻译配置失败,billnum" + billContext.getBillnum() + ",fullname=" + entity.getDataSourceName()); } } Map<String, List<QueryField>> assoQueryFields = new HashMap<>(); if (CollectionUtils.isEmpty(fields)) { return assoQueryFields; } //判断是否走groupby兼容 boolean isGroupbyCompatible = BooleanUtils.b(AppContext.getEnvConfig(MddConstants.MDD_GROUPBY_COMPATIBLE), false); Set<String> ignoreMaxFields = new HashSet<>(); Set<String> newReferFields = new HashSet<>(); List<QueryField> mainSumSelectFields = new ArrayList<>(); // 记录 是否billContext中直接指定则聚合跨域 if (isSum) { boolean forceAggrCrossDomain = billContext.getExtProps() != null && BooleanUtils.b(billContext.getExtProps().get("aggrJoinSplit")); if (forceAggrCrossDomain) { isCrossDomainHandle = true; } } for (Field field : fields) { if ("Button".equals(field.getControlType())) { continue; } if (extendSelectFields != null && extendSelectFields.containsKey(field.getItemName())) { field.setFieldName(String.valueOf(extendSelectFields.get(field.getItemName()))); } if (billContext != null && billContext.isExcludeRelated() && isExpression(field.getFieldName())) { continue; } if (shouldIgnoreField(field, billContext)) { continue; } boolean isCrossDomain = shouldHandleCrossDomain(field, isCrossDomainHandle, entity); if (isCrossDomain) { handleCrossDomainField(field, assoQueryFields); } else { handleField(billContext, isSum, selectFields, groupbyFields, field, sumSelectFields, mainSumSelectFields); } handleSpecialFields(field, ignoreMaxFields, newReferFields); } if (AppContext.getCurrentUser().getNewArch() && isSum) { boolean isAddIdGroupField = isAddIdGroupField(groupbyFields, entity, selectFields); if (isAddIdGroupField) { groupbyFields.add("id"); } } //处理多数据库groupBy兼容问题,如果存在group by if (isGroupbyCompatible && !groupbyFields.isEmpty()) { //循环处理所有selectFields selectFields.forEach(selectField -> { //没有聚合函数的都需要拼 if (StringUtils.isEmpty(selectField.aggr()) && StringUtils.isNotEmpty(selectField.name()) && !groupbyFields.contains(selectField.name()) && !ignoreMaxFields.contains(selectField.name()) && !selectField.name().toUpperCase().contains("GROUP_CONCAT") && !selectField.name().toUpperCase().replace(" ", "").contains("SUM(") && !selectField.name().toUpperCase().replace(" ", "").contains("COUNT(") && !selectField.name().toUpperCase().replace(" ", "").contains(")OVER(")) { selectField.setAggr("max"); } }); if (CollectionUtils.isNotEmpty(newReferFields)) { //如果已经有分组了,参照二合一去max后需要加入到分组中 newReferFields.forEach(newReferField -> { if (!groupbyFields.contains(newReferField)) { groupbyFields.add(newReferField); } } ); } } boolean hasGroup = CollectionUtils.isNotEmpty(groupbyFields); for (Field field : fields) { if (StringUtils.isNotEmpty(field.getOrderBy())) { String cSumType = field.getSumType(); if (hasGroup && isSum && StringUtils.isNotEmpty(cSumType) && !"null".equalsIgnoreCase(cSumType) && !"support".equalsIgnoreCase(cSumType) && !"group".equalsIgnoreCase(cSumType)) { queryOrderbys.add(new QueryOrderby(field.getFieldName(), field .getOrderBy(), cSumType)); } else { queryOrderbys.add(new QueryOrderby(field.getFieldName(), field .getOrderBy())); } } } // if (CollectionUtils.isNotEmpty(mainSumSelectFields) && CollectionUtils.isNotEmpty(sumSelectFields) && mainSumSelectFields.size() < sumSelectFields.size()) { if (CollectionUtils.isNotEmpty(mainSumSelectFields)) { AppContext.addShallowInheritableAttribute("mainSumSelectFields", mainSumSelectFields); } if (MapUtils.isNotEmpty(assoQueryFields)) {// 如果参照查询属性列表不为空,根据参照翻译配置判断需不要进行反向生成assoQueryField Iterator<Map.Entry<String, List<QueryField>>> iterator = assoQueryFields.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, List<QueryField>> entry = iterator.next(); String target = entry.getKey(); List<QueryField> queryFields = entry.getValue(); if (CollectionUtils.isNotEmpty(transferFields)) {// 根据参照翻译填充assoField // 根据transferfield的target是否等于当前FieldName过滤需要额外添加的assoField List<DataTransferField> filterTransferFields = transferFields.stream().filter(transferField -> target.equals(transferField.getTarget())).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(filterTransferFields)) { for (DataTransferField filterTransferField : filterTransferFields) { // 增加判断,entity的field列表中包含itemname为sourcearr的属性,则走正常的逻辑判断不需要走反向生成 if (StringUtils.isNotBlank(filterTransferField.getAttr()) && StringUtils.isNotBlank(filterTransferField.getName())) { String source = filterTransferField.getName(); String sourceAttr = filterTransferField.getAttr(); boolean match = queryFields.stream().anyMatch(queryField -> source.equals(queryField.name())); if (match) { continue; } QueryField extraAssoField = new QueryField(sourceAttr, source); queryFields.add(extraAssoField); } } } } } } return assoQueryFields; }

2023-04-21by@happylimy-O9biz&@GPT-4.Model: gpt-3.5
happylimy-O9biz

帮我重构这段代码
public static Map<String, List<QueryField>> handleFields(Entity entity, boolean isSum,
boolean isDistinct, List<QueryField> sumSelectFields,
List<QueryField> selectFields, List<String> groupbyFields,
List<QueryOrderby> queryOrderbys,
Map<String, Object> extendSelectFields, BillContext billContext, boolean isCrossDomainHandle, boolean isFromApi, List<String> groupByAsCondition) {
List<Field> fields = entity.getFields();
if (isDistinct) {
selectFields.add(new QueryField("1", "", "distinct"));
}
List<DataTransferField> transferFields = null;
if (isFromApi && "Bill".equalsIgnoreCase(entity.getType()) && null != entity.getDataSourceName()) {
IDataTransfer dataTransfer = DataTransferFactory.create(1);
try {
DataTransferConfig config = dataTransfer.getConfig(billContext.getBillnum(), entity.getDataSourceName(), 1);//new DataTransferConfig(fullname, fields);
transferFields = config.getFields();
} catch (Exception e) {
log.error("api模式获取实体翻译配置失败,billnum" + billContext.getBillnum() + ",fullname=" + entity.getDataSourceName());
}
}
Map<String, List<QueryField>> assoQueryFields = new HashMap<>();
if (CollectionUtils.isEmpty(fields)) {
return assoQueryFields;
}
//判断是否走groupby兼容
boolean isGroupbyCompatible = BooleanUtils.b(AppContext.getEnvConfig(MddConstants.MDD_GROUPBY_COMPATIBLE), false);
Set<String> ignoreMaxFields = new HashSet<>();
Set<String> newReferFields = new HashSet<>();
List<QueryField> mainSumSelectFields = new ArrayList<>();
// 记录 是否billContext中直接指定则聚合跨域
if (isSum) {
boolean forceAggrCrossDomain = billContext.getExtProps() != null && BooleanUtils.b(billContext.getExtProps().get("aggrJoinSplit"));
if (forceAggrCrossDomain) {
isCrossDomainHandle = true;
}
}
for (Field field : fields) {
if ("Button".equals(field.getControlType())) {
continue;
}
if (extendSelectFields != null && extendSelectFields.containsKey(field.getItemName())) {
field.setFieldName(String.valueOf(extendSelectFields.get(field.getItemName())));
}
if (billContext != null && billContext.isExcludeRelated() && isExpression(field.getFieldName())) {
continue;
}
if (shouldIgnoreField(field, billContext)) {
continue;
}
boolean isCrossDomain = shouldHandleCrossDomain(field, isCrossDomainHandle, entity);
if (isCrossDomain) {
handleCrossDomainField(field, assoQueryFields);
} else {
handleField(billContext, isSum, selectFields, groupbyFields, field, sumSelectFields, mainSumSelectFields);
}
handleSpecialFields(field, ignoreMaxFields, newReferFields);
}

    if (AppContext.getCurrentUser().getNewArch() && isSum) {
        boolean isAddIdGroupField = isAddIdGroupField(groupbyFields, entity, selectFields);
        if (isAddIdGroupField) {
            groupbyFields.add("id");
        }
    }
    //处理多数据库groupBy兼容问题,如果存在group by
    if (isGroupbyCompatible && !groupbyFields.isEmpty()) {
        //循环处理所有selectFields
        selectFields.forEach(selectField -> {
            //没有聚合函数的都需要拼
            if (StringUtils.isEmpty(selectField.aggr()) && StringUtils.isNotEmpty(selectField.name())
                    && !groupbyFields.contains(selectField.name())
                    && !ignoreMaxFields.contains(selectField.name())
                    && !selectField.name().toUpperCase().contains("GROUP_CONCAT")
                    && !selectField.name().toUpperCase().replace(" ", "").contains("SUM(")
                    && !selectField.name().toUpperCase().replace(" ", "").contains("COUNT(")
                    && !selectField.name().toUpperCase().replace(" ", "").contains(")OVER(")) {
                selectField.setAggr("max");
            }
        });
        if (CollectionUtils.isNotEmpty(newReferFields)) {
            //如果已经有分组了,参照二合一去max后需要加入到分组中
            newReferFields.forEach(newReferField -> {
                        if (!groupbyFields.contains(newReferField)) {
                            groupbyFields.add(newReferField);
                        }
                    }
            );
        }
    }
    boolean hasGroup = CollectionUtils.isNotEmpty(groupbyFields);
    for (Field field : fields) {
        if (StringUtils.isNotEmpty(field.getOrderBy())) {
            String cSumType = field.getSumType();
            if (hasGroup && isSum &&
                    StringUtils.isNotEmpty(cSumType)
                    && !"null".equalsIgnoreCase(cSumType) && !"support".equalsIgnoreCase(cSumType) && !"group".equalsIgnoreCase(cSumType)) {
                queryOrderbys.add(new QueryOrderby(field.getFieldName(), field
                        .getOrderBy(), cSumType));
            } else {
                queryOrderbys.add(new QueryOrderby(field.getFieldName(), field
                        .getOrderBy()));
            }
        }
    }

    // if (CollectionUtils.isNotEmpty(mainSumSelectFields) && CollectionUtils.isNotEmpty(sumSelectFields) && mainSumSelectFields.size() < sumSelectFields.size()) {
    if (CollectionUtils.isNotEmpty(mainSumSelectFields)) {
        AppContext.addShallowInheritableAttribute("mainSumSelectFields", mainSumSelectFields);
    }
    if (MapUtils.isNotEmpty(assoQueryFields)) {// 如果参照查询属性列表不为空,根据参照翻译配置判断需不要进行反向生成assoQueryField
        Iterator<Map.Entry<String, List<QueryField>>> iterator = assoQueryFields.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, List<QueryField>> entry = iterator.next();
            String target = entry.getKey();
            List<QueryField> queryFields = entry.getValue();
            if (CollectionUtils.isNotEmpty(transferFields)) {// 根据参照翻译填充assoField
                // 根据transferfield的target是否等于当前FieldName过滤需要额外添加的assoField
                List<DataTransferField> filterTransferFields = transferFields.stream().filter(transferField -> target.equals(transferField.getTarget())).collect(Collectors.toList());
                if (CollectionUtils.isNotEmpty(filterTransferFields)) {
                    for (DataTransferField filterTransferField : filterTransferFields) {
                        // 增加判断,entity的field列表中包含itemname为sourcearr的属性,则走正常的逻辑判断不需要走反向生成
                        if (StringUtils.isNotBlank(filterTransferField.getAttr()) && StringUtils.isNotBlank(filterTransferField.getName())) {
                            String source = filterTransferField.getName();
                            String sourceAttr = filterTransferField.getAttr();
                            boolean match = queryFields.stream().anyMatch(queryField -> source.equals(queryField.name()));
                            if (match) {
                                continue;
                            }
                            QueryField extraAssoField = new QueryField(sourceAttr, source);
                            queryFields.add(extraAssoField);
                        }
                    }
                }
            }
        }
    }
    return assoQueryFields;
}
Avatar
Avatar

public static Map<String, List<QueryField>> handleFields(Entity entity, boolean isSum,
boolean isDistinct, List<QueryField> sumSelectFields,
List<QueryField> selectFields, List<String> groupbyFields,
List<QueryOrderby> queryOrderbys,
Map<String, Object> extendSelectFields, BillContext billContext,
boolean isCrossDomainHandle, boolean isFromApi,
List<String> groupByAsCondition) {
List<Field> fields = entity.getFields();
if (isDistinct) {
selectFields.add(new QueryField("1", "", "distinct"));
}
List<DataTransferField> transferFields = null;
if (isFromApi && "Bill".equalsIgnoreCase(entity.getType()) && null != entity.getDataSourceName()) {
IDataTransfer dataTransfer = DataTransferFactory.create(1);
try {
DataTransferConfig config = dataTransfer.getConfig(billContext.getBillnum(), entity.getDataSourceName(), 1);
transferFields = config.getFields();
} catch (Exception e) {
log.error("api模式获取实体翻译配置失败,billnum" + billContext.getBillnum() + ",fullname=" + entity.getDataSourceName());
}
}
Map<String, List<QueryField>> assoQueryFields = new HashMap<>();
if (CollectionUtils.isEmpty(fields)) {
return assoQueryFields;
}
boolean isGroupbyCompatible = BooleanUtils.b(AppContext.getEnvConfig(MddConstants.MDD_GROUPBY_COMPATIBLE), false);
Set<String> ignoreMaxFields = new HashSet<>();
Set<String> newReferFields = new HashSet<>();
List<QueryField> mainSumSelectFields = new ArrayList<>();
if (isSum) {
boolean forceAggrCrossDomain = billContext.getExtProps() != null && BooleanUtils.b(billContext.getExtProps().get("aggrJoinSplit"));
if (forceAggrCrossDomain) {
isCrossDomainHandle = true;
}
}
for (Field field : fields) {
if ("Button".equals(field.getControlType())) {
continue;
}
if (extendSelectFields != null && extendSelectFields.containsKey(field.getItemName())) {
field.setFieldName(String.valueOf(extendSelectFields.get(field.getItemName())));
}
if (billContext != null && billContext.isExcludeRelated() && isExpression(field.getFieldName())) {
continue;
}
if (shouldIgnoreField(field, billContext)) {
continue;
}
boolean isCrossDomain = shouldHandleCrossDomain(field, isCrossDomainHandle, entity);
if (isCrossDomain) {
handleCrossDomainField(field, assoQueryFields);
} else {
handleField(billContext, isSum, selectFields, groupbyFields, field, sumSelectFields, mainSumSelectFields);
}
handleSpecialFields(field, ignoreMaxFields, newReferFields);
}

if (AppContext.getCurrentUser().getNewArch() && isSum) {
    boolean isAddIdGroupField = isAddIdGroupField(groupbyFields, entity, selectFields);
    if (isAddIdGroupField) {
        groupbyFields.add("id");
    }
}
if (isGroupbyCompatible && !groupbyFields.isEmpty()) {
    selectFields.forEach(selectField -> {
        if (StringUtils.isEmpty(selectField.aggr()) && StringUtils.isNotEmpty(selectField.name())
                && !groupbyFields.contains(selectField.name())
                && !ignoreMaxFields.contains(selectField.name())
                && !selectField.name().toUpperCase().contains("GROUP_CONCAT")
                && !selectField.name().toUpperCase().replace(" ", "").contains("SUM(")
                && !selectField.name().toUpperCase().replace(" ", "").contains("COUNT(")
                && !selectField.name().toUpperCase().replace(" ", "").contains(")OVER(")) {