Commit 92c630128545884479adbc060b1f0b79bc66d1d2
1 parent
5c6adb25
Excel支持分割字符串组内容
Showing
4 changed files
with
130 additions
and
49 deletions
ruoyi-admin/src/main/resources/application.yml
ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java
| ... | ... | @@ -40,6 +40,11 @@ public @interface Excel |
| 40 | 40 | public String readConverterExp() default ""; |
| 41 | 41 | |
| 42 | 42 | /** |
| 43 | + * 分隔符,读取字符串组内容 | |
| 44 | + */ | |
| 45 | + public String separator() default ","; | |
| 46 | + | |
| 47 | + /** | |
| 43 | 48 | * 导出类型(0数字 1字符串) |
| 44 | 49 | */ |
| 45 | 50 | public ColumnType cellType() default ColumnType.STRING; | ... | ... |
ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java
| ... | ... | @@ -15,6 +15,11 @@ import com.ruoyi.common.utils.spring.SpringUtils; |
| 15 | 15 | public class DictUtils |
| 16 | 16 | { |
| 17 | 17 | /** |
| 18 | + * 分隔符 | |
| 19 | + */ | |
| 20 | + public static final String SEPARATOR = ","; | |
| 21 | + | |
| 22 | + /** | |
| 18 | 23 | * 设置字典缓存 |
| 19 | 24 | * |
| 20 | 25 | * @param key 参数键 |
| ... | ... | @@ -51,21 +56,59 @@ public class DictUtils |
| 51 | 56 | */ |
| 52 | 57 | public static String getDictLabel(String dictType, String dictValue) |
| 53 | 58 | { |
| 54 | - if (StringUtils.isNotEmpty(dictType) && StringUtils.isNotEmpty(dictValue)) | |
| 59 | + return getDictLabel(dictType, dictValue, SEPARATOR); | |
| 60 | + } | |
| 61 | + | |
| 62 | + /** | |
| 63 | + * 根据字典类型和字典标签获取字典值 | |
| 64 | + * | |
| 65 | + * @param dictType 字典类型 | |
| 66 | + * @param dictLabel 字典标签 | |
| 67 | + * @return 字典值 | |
| 68 | + */ | |
| 69 | + public static String getDictValue(String dictType, String dictLabel) | |
| 70 | + { | |
| 71 | + return getDictValue(dictType, dictLabel, SEPARATOR); | |
| 72 | + } | |
| 73 | + | |
| 74 | + /** | |
| 75 | + * 根据字典类型和字典值获取字典标签 | |
| 76 | + * | |
| 77 | + * @param dictType 字典类型 | |
| 78 | + * @param dictValue 字典值 | |
| 79 | + * @param separator 分隔符 | |
| 80 | + * @return 字典标签 | |
| 81 | + */ | |
| 82 | + public static String getDictLabel(String dictType, String dictValue, String separator) | |
| 83 | + { | |
| 84 | + StringBuilder propertyString = new StringBuilder(); | |
| 85 | + List<SysDictData> datas = getDictCache(dictType); | |
| 86 | + | |
| 87 | + if (StringUtils.containsAny(separator, dictValue) && StringUtils.isNotEmpty(datas)) | |
| 55 | 88 | { |
| 56 | - List<SysDictData> datas = getDictCache(dictType); | |
| 57 | - if (StringUtils.isNotEmpty(datas)) | |
| 89 | + for (SysDictData dict : datas) | |
| 58 | 90 | { |
| 59 | - for (SysDictData dict : datas) | |
| 91 | + for (String value : dictValue.split(separator)) | |
| 60 | 92 | { |
| 61 | - if (dictValue.equals(dict.getDictValue())) | |
| 93 | + if (value.equals(dict.getDictValue())) | |
| 62 | 94 | { |
| 63 | - return dict.getDictLabel(); | |
| 95 | + propertyString.append(dict.getDictLabel() + separator); | |
| 96 | + break; | |
| 64 | 97 | } |
| 65 | 98 | } |
| 66 | 99 | } |
| 67 | 100 | } |
| 68 | - return dictValue; | |
| 101 | + else | |
| 102 | + { | |
| 103 | + for (SysDictData dict : datas) | |
| 104 | + { | |
| 105 | + if (dictValue.equals(dict.getDictValue())) | |
| 106 | + { | |
| 107 | + return dict.getDictLabel(); | |
| 108 | + } | |
| 109 | + } | |
| 110 | + } | |
| 111 | + return StringUtils.stripEnd(propertyString.toString(), separator); | |
| 69 | 112 | } |
| 70 | 113 | |
| 71 | 114 | /** |
| ... | ... | @@ -73,25 +116,39 @@ public class DictUtils |
| 73 | 116 | * |
| 74 | 117 | * @param dictType 字典类型 |
| 75 | 118 | * @param dictLabel 字典标签 |
| 119 | + * @param separator 分隔符 | |
| 76 | 120 | * @return 字典值 |
| 77 | 121 | */ |
| 78 | - public static String getDictValue(String dictType, String dictLabel) | |
| 122 | + public static String getDictValue(String dictType, String dictLabel, String separator) | |
| 79 | 123 | { |
| 80 | - if (StringUtils.isNotEmpty(dictType) && StringUtils.isNotEmpty(dictLabel)) | |
| 124 | + StringBuilder propertyString = new StringBuilder(); | |
| 125 | + List<SysDictData> datas = getDictCache(dictType); | |
| 126 | + | |
| 127 | + if (StringUtils.containsAny(separator, dictLabel) && StringUtils.isNotEmpty(datas)) | |
| 81 | 128 | { |
| 82 | - List<SysDictData> datas = getDictCache(dictType); | |
| 83 | - if (StringUtils.isNotEmpty(datas)) | |
| 129 | + for (SysDictData dict : datas) | |
| 84 | 130 | { |
| 85 | - for (SysDictData dict : datas) | |
| 131 | + for (String label : dictLabel.split(separator)) | |
| 86 | 132 | { |
| 87 | - if (dictLabel.equals(dict.getDictLabel())) | |
| 133 | + if (label.equals(dict.getDictLabel())) | |
| 88 | 134 | { |
| 89 | - return dict.getDictValue(); | |
| 135 | + propertyString.append(dict.getDictValue() + separator); | |
| 136 | + break; | |
| 90 | 137 | } |
| 91 | 138 | } |
| 92 | 139 | } |
| 93 | 140 | } |
| 94 | - return dictLabel; | |
| 141 | + else | |
| 142 | + { | |
| 143 | + for (SysDictData dict : datas) | |
| 144 | + { | |
| 145 | + if (dictLabel.equals(dict.getDictLabel())) | |
| 146 | + { | |
| 147 | + return dict.getDictValue(); | |
| 148 | + } | |
| 149 | + } | |
| 150 | + } | |
| 151 | + return StringUtils.stripEnd(propertyString.toString(), separator); | |
| 95 | 152 | } |
| 96 | 153 | |
| 97 | 154 | /** | ... | ... |
ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java
| ... | ... | @@ -271,11 +271,11 @@ public class ExcelUtil<T> |
| 271 | 271 | } |
| 272 | 272 | else if (StringUtils.isNotEmpty(attr.readConverterExp())) |
| 273 | 273 | { |
| 274 | - val = reverseByExp(Convert.toStr(val), attr.readConverterExp()); | |
| 274 | + val = reverseByExp(Convert.toStr(val), attr.readConverterExp(), attr.separator()); | |
| 275 | 275 | } |
| 276 | 276 | else if (StringUtils.isNotEmpty(attr.dictType())) |
| 277 | 277 | { |
| 278 | - val = reverseDictByExp(attr.dictType(), Convert.toStr(val)); | |
| 278 | + val = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator()); | |
| 279 | 279 | } |
| 280 | 280 | ReflectUtils.invokeSetter(entity, propertyName, val); |
| 281 | 281 | } |
| ... | ... | @@ -534,6 +534,7 @@ public class ExcelUtil<T> |
| 534 | 534 | Object value = getTargetValue(vo, field, attr); |
| 535 | 535 | String dateFormat = attr.dateFormat(); |
| 536 | 536 | String readConverterExp = attr.readConverterExp(); |
| 537 | + String separator = attr.separator(); | |
| 537 | 538 | String dictType = attr.dictType(); |
| 538 | 539 | if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value)) |
| 539 | 540 | { |
| ... | ... | @@ -541,11 +542,11 @@ public class ExcelUtil<T> |
| 541 | 542 | } |
| 542 | 543 | else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value)) |
| 543 | 544 | { |
| 544 | - cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp)); | |
| 545 | + cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator)); | |
| 545 | 546 | } |
| 546 | 547 | else if (StringUtils.isNotEmpty(dictType)) |
| 547 | 548 | { |
| 548 | - cell.setCellValue(convertDictByExp(dictType, Convert.toStr(value))); | |
| 549 | + cell.setCellValue(convertDictByExp(Convert.toStr(value), dictType, separator)); | |
| 549 | 550 | } |
| 550 | 551 | else |
| 551 | 552 | { |
| ... | ... | @@ -623,28 +624,36 @@ public class ExcelUtil<T> |
| 623 | 624 | * |
| 624 | 625 | * @param propertyValue 参数值 |
| 625 | 626 | * @param converterExp 翻译注解 |
| 627 | + * @param separator 分隔符 | |
| 626 | 628 | * @return 解析后值 |
| 627 | - * @throws Exception | |
| 628 | 629 | */ |
| 629 | - public static String convertByExp(String propertyValue, String converterExp) throws Exception | |
| 630 | + public static String convertByExp(String propertyValue, String converterExp, String separator) | |
| 630 | 631 | { |
| 631 | - try | |
| 632 | + StringBuilder propertyString = new StringBuilder(); | |
| 633 | + String[] convertSource = converterExp.split(","); | |
| 634 | + for (String item : convertSource) | |
| 632 | 635 | { |
| 633 | - String[] convertSource = converterExp.split(","); | |
| 634 | - for (String item : convertSource) | |
| 636 | + String[] itemArray = item.split("="); | |
| 637 | + if (StringUtils.containsAny(separator, propertyValue)) | |
| 638 | + { | |
| 639 | + for (String value : propertyValue.split(separator)) | |
| 640 | + { | |
| 641 | + if (itemArray[0].equals(value)) | |
| 642 | + { | |
| 643 | + propertyString.append(itemArray[1] + separator); | |
| 644 | + break; | |
| 645 | + } | |
| 646 | + } | |
| 647 | + } | |
| 648 | + else | |
| 635 | 649 | { |
| 636 | - String[] itemArray = item.split("="); | |
| 637 | 650 | if (itemArray[0].equals(propertyValue)) |
| 638 | 651 | { |
| 639 | 652 | return itemArray[1]; |
| 640 | 653 | } |
| 641 | 654 | } |
| 642 | 655 | } |
| 643 | - catch (Exception e) | |
| 644 | - { | |
| 645 | - throw e; | |
| 646 | - } | |
| 647 | - return propertyValue; | |
| 656 | + return StringUtils.stripEnd(propertyString.toString(), separator); | |
| 648 | 657 | } |
| 649 | 658 | |
| 650 | 659 | /** |
| ... | ... | @@ -652,52 +661,62 @@ public class ExcelUtil<T> |
| 652 | 661 | * |
| 653 | 662 | * @param propertyValue 参数值 |
| 654 | 663 | * @param converterExp 翻译注解 |
| 664 | + * @param separator 分隔符 | |
| 655 | 665 | * @return 解析后值 |
| 656 | - * @throws Exception | |
| 657 | 666 | */ |
| 658 | - public static String reverseByExp(String propertyValue, String converterExp) throws Exception | |
| 667 | + public static String reverseByExp(String propertyValue, String converterExp, String separator) | |
| 659 | 668 | { |
| 660 | - try | |
| 669 | + StringBuilder propertyString = new StringBuilder(); | |
| 670 | + String[] convertSource = converterExp.split(","); | |
| 671 | + for (String item : convertSource) | |
| 661 | 672 | { |
| 662 | - String[] convertSource = converterExp.split(","); | |
| 663 | - for (String item : convertSource) | |
| 673 | + String[] itemArray = item.split("="); | |
| 674 | + if (StringUtils.containsAny(separator, propertyValue)) | |
| 675 | + { | |
| 676 | + for (String value : propertyValue.split(separator)) | |
| 677 | + { | |
| 678 | + if (itemArray[1].equals(value)) | |
| 679 | + { | |
| 680 | + propertyString.append(itemArray[0] + separator); | |
| 681 | + break; | |
| 682 | + } | |
| 683 | + } | |
| 684 | + } | |
| 685 | + else | |
| 664 | 686 | { |
| 665 | - String[] itemArray = item.split("="); | |
| 666 | 687 | if (itemArray[1].equals(propertyValue)) |
| 667 | 688 | { |
| 668 | 689 | return itemArray[0]; |
| 669 | 690 | } |
| 670 | 691 | } |
| 671 | 692 | } |
| 672 | - catch (Exception e) | |
| 673 | - { | |
| 674 | - throw e; | |
| 675 | - } | |
| 676 | - return propertyValue; | |
| 693 | + return StringUtils.stripEnd(propertyString.toString(), separator); | |
| 677 | 694 | } |
| 678 | - | |
| 695 | + | |
| 679 | 696 | /** |
| 680 | 697 | * 解析字典值 |
| 681 | 698 | * |
| 682 | - * @param dictType 字典类型 | |
| 683 | 699 | * @param dictValue 字典值 |
| 700 | + * @param dictType 字典类型 | |
| 701 | + * @param separator 分隔符 | |
| 684 | 702 | * @return 字典标签 |
| 685 | 703 | */ |
| 686 | - public static String convertDictByExp(String dictType, String dictValue) throws Exception | |
| 704 | + public static String convertDictByExp(String dictValue, String dictType, String separator) | |
| 687 | 705 | { |
| 688 | - return DictUtils.getDictLabel(dictType, dictValue); | |
| 706 | + return DictUtils.getDictLabel(dictType, dictValue, separator); | |
| 689 | 707 | } |
| 690 | 708 | |
| 691 | 709 | /** |
| 692 | 710 | * 反向解析值字典值 |
| 693 | 711 | * |
| 712 | + * @param dictLabel 字典标签 | |
| 694 | 713 | * @param dictType 字典类型 |
| 695 | - * @param dictValue 字典标签 | |
| 714 | + * @param separator 分隔符 | |
| 696 | 715 | * @return 字典值 |
| 697 | 716 | */ |
| 698 | - public static String reverseDictByExp(String dictType, String dictLabel) throws Exception | |
| 717 | + public static String reverseDictByExp(String dictLabel, String dictType, String separator) | |
| 699 | 718 | { |
| 700 | - return DictUtils.getDictValue(dictType, dictLabel); | |
| 719 | + return DictUtils.getDictValue(dictType, dictLabel, separator); | |
| 701 | 720 | } |
| 702 | 721 | |
| 703 | 722 | /** | ... | ... |