帮我重构这段代码
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;
}
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(")) {