chenhj
4 天以前 6a7275a4c1d0e33e310082e316313aeb9d4b7374
枚举返回通用接口
已添加2个文件
已修改9个文件
159 ■■■■ 文件已修改
src/main/java/com/ruoyi/basic/controller/EnumController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/dto/SelectOptionDTO.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/utils/EnumUtils.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/enums/BaseEnum.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/enums/SalesLedgerType.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/enums/StaffLeaveReason.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/enums/StockRecordTypeEnum.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/enums/StorageAttachmentRecordType.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/enums/UserStatus.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/utils/EnumUtil.java 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/controller/EnumController.java
@@ -1,15 +1,16 @@
package com.ruoyi.basic.controller;
import com.ruoyi.basic.utils.EnumUtils;
import com.ruoyi.common.enums.StockRecordTypeEnum;
import com.ruoyi.common.utils.EnumUtil;
import com.ruoyi.framework.aspectj.lang.annotation.Anonymous;
import com.ruoyi.framework.web.domain.R;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -26,4 +27,10 @@
        List<Map<String, Object>> list = EnumUtil.toList(StockRecordTypeEnum.class);
        return R.ok(list);
    }
    @GetMapping("/{className}")
    @Anonymous
    public R test(@PathVariable String className){
        return R.ok(EnumUtils.getOptions("com.ruoyi.common.enums." + className));
    }
}
src/main/java/com/ruoyi/basic/dto/SelectOptionDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.ruoyi.basic.dto;
import lombok.Data;
@Data
public class SelectOptionDTO<T> {
    private T value;
    private String label;
    public SelectOptionDTO(T code, String value) {
        this.value = code;
        this.label = value;
    }
}
src/main/java/com/ruoyi/basic/utils/EnumUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,45 @@
package com.ruoyi.basic.utils;
import com.ruoyi.basic.dto.SelectOptionDTO;
import com.ruoyi.common.enums.BaseEnum;
import java.util.ArrayList;
import java.util.List;
public class EnumUtils {
    public static List<SelectOptionDTO<?>> getOptions(String className) {
        try {
            Class<?> clazz = Class.forName(className);
            return getOptionsByClass(clazz);
        } catch (ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
    @SuppressWarnings("unchecked")
    private static List<SelectOptionDTO<?>> getOptionsByClass(Class<?> clazz) {
        if (!clazz.isEnum()) {
            throw new RuntimeException("不是枚举:" + clazz.getName());
        }
        if (!BaseEnum.class.isAssignableFrom(clazz)) {
            throw new RuntimeException("未实现 BaseEnum:" + clazz.getName());
        }
        return (List<SelectOptionDTO<?>>) getOptionsInternal((Class) clazz);
    }
    private static <T> List<SelectOptionDTO<T>> getOptionsInternal(
            Class<? extends BaseEnum<T>> clazz) {
        Enum<?>[] enums = (Enum<?>[]) clazz.getEnumConstants();
        List<SelectOptionDTO<T>> list = new ArrayList<>();
        for (Enum<?> e : enums) {
            BaseEnum<T> option = (BaseEnum<T>) e;
            list.add(new SelectOptionDTO<>(
                    option.getCode(),
                    option.getValue()
            ));
        }
        return list;
    }
}
src/main/java/com/ruoyi/common/enums/BaseEnum.java
@@ -4,10 +4,10 @@
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
public interface BaseEnum {
public interface BaseEnum<T> {
    @JsonValue
    Integer getCode();
    T getCode();
    String getValue();
    /**
@@ -17,7 +17,7 @@
     * é€šç”¨é™æ€å·¥å…·æ–¹æ³•:支持从 Integer æˆ– String ç±»åž‹çš„ Code è¿›è¡Œååºåˆ—化
     */
    @JsonCreator(mode = JsonCreator.Mode.DELEGATING)
    static <E extends Enum<E> & BaseEnum> E fromCode(Class<E> enumClass, Object code) {
    static <E extends Enum<E> & BaseEnum<?>> E fromCode(Class<E> enumClass, Object code) {
        if (code == null) {
            return null;
        }
src/main/java/com/ruoyi/common/enums/SalesLedgerType.java
@@ -1,7 +1,7 @@
package com.ruoyi.common.enums;
public enum SalesLedgerType {
public enum SalesLedgerType implements BaseEnum<Integer>{
    SALES_LEDGER_TYPE_SALES_LEDGER(1, "销售台账"),
    SALES_LEDGER_TYPE_PURCHASE_LEDGER(2, "采购台账");
@@ -13,11 +13,11 @@
        this.label = label;
    }
    public Integer getValue() {
    public Integer getCode() {
        return value;
    }
    public String getLabel() {
    public String getValue() {
        return label;
    }
src/main/java/com/ruoyi/common/enums/StaffLeaveReason.java
@@ -7,7 +7,7 @@
 *
 */
@AllArgsConstructor
public enum StaffLeaveReason {
public enum StaffLeaveReason implements BaseEnum<String> {
    StaffLeaveReasonSalary("salary","薪资待遇"),
    StaffLeaveReasonCareerDevelopment("career_development","职业发展"),
    StaffLeaveReasonWorkEnvironment("work_environment","工作环境"),
@@ -22,6 +22,10 @@
        return code;
    }
    public String getValue() {
        return info;
    }
    public String getInfo() {
        return info;
    }
src/main/java/com/ruoyi/common/enums/StockRecordTypeEnum.java
@@ -8,7 +8,7 @@
 * @email 3038525872@qq.com
 */
@Getter
public enum StockRecordTypeEnum implements BaseEnum {
public enum StockRecordTypeEnum implements BaseEnum<Integer> {
    CUSTOMIZATION_STOCK_IN(0, "合格自定义入库"),
    CUSTOMIZATION_STOCK_OUT(1, "合格自定义出库"),
    PRODUCTION_REPORT_STOCK_IN(2, "生产报工-入库"),
src/main/java/com/ruoyi/common/enums/StorageAttachmentRecordType.java
@@ -7,7 +7,7 @@
 *
 */
@AllArgsConstructor
public enum StorageAttachmentRecordType {
public enum StorageAttachmentRecordType implements BaseEnum<String> {
    // ä¾‹å­ å®žé™…开发请删除
    Template("Template","范例"),
    Archives("Archives","文档管理"),
@@ -23,6 +23,10 @@
        return code;
    }
    public String getValue() {
        return info;
    }
    public String getInfo() {
        return info;
    }
src/main/java/com/ruoyi/common/enums/UserStatus.java
@@ -5,7 +5,7 @@
 * 
 * @author ruoyi
 */
public enum UserStatus
public enum UserStatus implements BaseEnum<String>
{
    OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除");
@@ -23,8 +23,13 @@
        return code;
    }
    public String getValue() {
        return info;
    }
    public String getInfo()
    {
        return info;
    }
}
src/main/java/com/ruoyi/common/utils/EnumUtil.java
@@ -2,7 +2,6 @@
import com.ruoyi.common.enums.BaseEnum;
import com.ruoyi.common.enums.StockRecordTypeEnum;
import java.util.*;
import java.util.stream.Collectors;
@@ -20,7 +19,7 @@
     */
    public static <E extends Enum<E> & BaseEnum> E fromCode(Class<E> enumClass, int code) {
        for (E e : enumClass.getEnumConstants()) {
            if (e.getCode() == code) {
            if ((int)e.getCode() == code) {
                return e;
            }
        }
@@ -29,7 +28,7 @@
    public static <E extends Enum<E> & BaseEnum> E fromCodeHasNull(Class<E> enumClass, int code) {
        for (E e : enumClass.getEnumConstants()) {
            if (e.getCode() == code) {
            if ((int)e.getCode() == code) {
                return e;
            }
        }
@@ -38,7 +37,7 @@
    public static <E extends Enum<E> & BaseEnum> E fromCodeHasDefault(Class<E> enumClass, int code,E defaultE) {
        for (E e : enumClass.getEnumConstants()) {
            if (e.getCode() == code) {
            if ((int)e.getCode() == code) {
                return e;
            }
        }
@@ -81,27 +80,27 @@
                .collect(Collectors.toList());
    }
    /**
     * è½¬ä¸º Map<Integer, String>
     * æ ¼å¼: { 1: "绞线", 0: "拉丝" }
     */
    public static <E extends Enum<E> & BaseEnum> Map<Integer, String> toMap(Class<E> enumClass) {
        return Arrays.stream(enumClass.getEnumConstants())
                .collect(Collectors.toMap(BaseEnum::getCode, BaseEnum::getValue));
    }
    public static void main(String[] args) {
        // âœ… 1. æ ¹æ® code èŽ·å–æžšä¸¾
        StockRecordTypeEnum status = EnumUtil.fromCode(StockRecordTypeEnum.class, 1);
        System.out.println(status.getValue()); // ç»žçº¿
        // âœ… 2. è½¬æˆ list (适合前端)
        System.out.println(EnumUtil.toList(StockRecordTypeEnum.class));
        // è¾“出: [{code=1, value=绞线}, {code=0, value=拉丝}]
        // âœ… 3. è½¬æˆ map
        System.out.println(EnumUtil.toMap(StockRecordTypeEnum.class));
        // è¾“出: {1=绞线, 0=拉丝}
    }
//    /**
//     * è½¬ä¸º Map<Integer, String>
//     * æ ¼å¼: { 1: "绞线", 0: "拉丝" }
//     */
//    public static <E extends Enum<E> & BaseEnum> Map<Integer, String> toMap(Class<E> enumClass) {
//        return Arrays.stream(enumClass.getEnumConstants())
//                .collect(Collectors.toMap((BaseEnum::getCode, BaseEnum::getValue));
//    }
//
//
//    public static void main(String[] args) {
//        // âœ… 1. æ ¹æ® code èŽ·å–æžšä¸¾
//        StockRecordTypeEnum status = EnumUtil.fromCode(StockRecordTypeEnum.class, 1);
//        System.out.println(status.getValue()); // ç»žçº¿
//
//        // âœ… 2. è½¬æˆ list (适合前端)
//        System.out.println(EnumUtil.toList(StockRecordTypeEnum.class));
//        // è¾“出: [{code=1, value=绞线}, {code=0, value=拉丝}]
//
//        // âœ… 3. è½¬æˆ map
//        System.out.println(EnumUtil.toMap(StockRecordTypeEnum.class));
//        // è¾“出: {1=绞线, 0=拉丝}
//    }
}
src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
@@ -30,7 +30,6 @@
import com.ruoyi.sales.mapper.CommonFileMapper;
import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
import com.ruoyi.sales.pojo.CommonFile;
import com.ruoyi.sales.pojo.InvoiceRegistrationProduct;
import com.ruoyi.sales.pojo.SalesLedgerProduct;
import com.ruoyi.sales.service.ISalesLedgerProductService;
import lombok.RequiredArgsConstructor;
@@ -458,7 +457,7 @@
        BeanUtils.copyProperties(purchaseLedger, purchaseLedgerDto);
        SalesLedgerProduct salesLedgerProduct = new SalesLedgerProduct();
        salesLedgerProduct.setSalesLedgerId(id);
        salesLedgerProduct.setType(SalesLedgerType.SALES_LEDGER_TYPE_SALES_LEDGER.getValue());
        salesLedgerProduct.setType(SalesLedgerType.SALES_LEDGER_TYPE_SALES_LEDGER.getCode());
        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductService.selectSalesLedgerProductList(salesLedgerProduct);
        purchaseLedgerDto.setProductData(salesLedgerProducts);
        List<CommonFile> commonFiles = commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>()