package com.finance.system.utils; import com.finance.common.enums.FieldInputTypeEnum; import com.finance.common.enums.FieldTypeEnum; import com.finance.common.utils.StringUtils; import com.finance.system.domain.TbBasicDataField; import com.finance.system.domain.TbField; import com.finance.system.vo.FieldsTreeVO; import java.text.DecimalFormat; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author mitao * @date 2024/4/3 */ public class FieldBuildUtil { /** * 构建基础数据字段树形层级 * * @param basicDataFields 基础数据字段 * @param fieldMap 字段Map * @param roots 返回的vo */ public static void buildTreeStructure(List basicDataFields, Map fieldMap, List roots) { Map levelTwoMap = new HashMap<>(); Map levelThreeMap = new HashMap<>(); for (TbBasicDataField item : basicDataFields) { TbField tbField = fieldMap.get(item.getFieldId()); if (tbField != null) { String levelOneCategory = tbField.getLevelOneCategory(); String levelTwoCategory = tbField.getLevelTwoCategory(); String levelThreeCategory = tbField.getLevelThreeCategory(); Long id = tbField.getId(); String fieldName = tbField.getFieldName(); String fieldValue = item.getFieldValue(); FieldsTreeVO field = new FieldsTreeVO(); field.setId(id); field.setName(fieldName); field.setValue(fieldValue); field.setCategory(Boolean.FALSE); field.setFieldType(tbField.getFieldType()); if (tbField.getFieldType().equals(FieldTypeEnum.TEXT) && tbField.getTextInputType() .equals(FieldInputTypeEnum.FIXED_CONTENT)) { field.setDropdown(tbField.getTextContent()); field.setDropdownState(Boolean.TRUE); } FieldsTreeVO levelOneField = null; for (FieldsTreeVO root : roots) { if (root.getName().equals(levelOneCategory)) { levelOneField = root; break; } } if (levelOneField == null) { levelOneField = new FieldsTreeVO(); levelOneField.setName(levelOneCategory); roots.add(levelOneField); } if (StringUtils.isNotBlank(levelTwoCategory)) { FieldsTreeVO levelTwoField = levelTwoMap.getOrDefault(levelTwoCategory, null); if (levelTwoField == null) { levelTwoField = new FieldsTreeVO(); levelTwoField.setName(levelTwoCategory); levelTwoMap.put(levelTwoCategory, levelTwoField); levelOneField.getChildren().add(levelTwoField); } if (StringUtils.isNotBlank(levelThreeCategory)) { FieldsTreeVO levelThreeField = levelThreeMap.getOrDefault( levelThreeCategory, null); if (levelThreeField == null) { levelThreeField = new FieldsTreeVO(); levelThreeField.setName(levelThreeCategory); levelThreeMap.put(levelThreeCategory, levelThreeField); levelTwoField.getChildren().add(levelThreeField); } levelThreeField.getChildren().add(field); } else { levelTwoField.getChildren().add(field); } } else { levelOneField.getChildren().add(field); } } } } /** * 构建字段树形层级 * * @param tbFieldList 字段列表 */ public static void buildTreeFromTbFieldList(List tbFieldList, List roots) { Map levelOneMap = new HashMap<>(); Map levelTwoMap = new HashMap<>(); for (TbField tbField : tbFieldList) { String levelOneCategory = tbField.getLevelOneCategory(); String levelTwoCategory = tbField.getLevelTwoCategory(); String levelThreeCategory = tbField.getLevelThreeCategory(); String fieldName = tbField.getFieldName(); Long id = tbField.getId(); FieldsTreeVO field = new FieldsTreeVO(); field.setId(id); field.setName(fieldName); field.setCategory(Boolean.FALSE); field.setFieldType(tbField.getFieldType()); if (tbField.getFieldType().equals(FieldTypeEnum.TEXT) && tbField.getTextInputType().equals(FieldInputTypeEnum.FIXED_CONTENT)) { field.setDropdown(tbField.getTextContent()); field.setDropdownState(Boolean.TRUE); } FieldsTreeVO levelOneField = null; for (FieldsTreeVO root : roots) { if (root.getName().equals(levelOneCategory)) { levelOneField = root; break; } } if (levelOneField == null) { levelOneField = new FieldsTreeVO(); levelOneField.setName(levelOneCategory); roots.add(levelOneField); } if (StringUtils.isNotBlank(levelTwoCategory)) { FieldsTreeVO levelTwoField = levelTwoMap.getOrDefault(levelTwoCategory, null); if (levelTwoField == null) { levelTwoField = new FieldsTreeVO(); levelTwoField.setName(levelTwoCategory); levelOneField.getChildren().add(levelTwoField); levelTwoMap.put(levelTwoCategory, levelTwoField); } if (StringUtils.isNotBlank(levelThreeCategory)) { FieldsTreeVO levelThreeField = new FieldsTreeVO(); levelThreeField.setName(levelThreeCategory); levelTwoField.getChildren().add(levelThreeField); levelThreeField.getChildren().add(field); } else { levelTwoField.getChildren().add(field); } } else { levelOneField.getChildren().add(field); } } } /** * 数值类型格式化 数字类型字符串,每三位增加逗号 * * @param fieldValue 整数类型的字符串 * @return 格式化后的值 */ public static String formatNumberWithCommas(String fieldValue) { if (fieldValue != null && fieldValue.matches("\\d+")) { DecimalFormat df = new DecimalFormat("#,###"); return df.format(Long.parseLong(fieldValue)); } else { return fieldValue; // 不满足条件时返回传入的值 } } }