魔法数字应用示例

src/main/java/com/weiyu/service/CapitalInfoService.java

package com.weiyu.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.weiyu.mapper.CapitalInfoMapper;
import com.weiyu.model.CapitalInfo;
import com.weiyu.model.CapitalInfoQueryDTO;
import com.weiyu.model.CapitalInfoVO;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;
import java.util.stream.Collectors;


    /**
     * 刷新资金信息列表
     */
    public List<CapitalInfoVO> refreshList() {
        LambdaQueryWrapper<CapitalInfo > queryWrapper = new LambdaQueryWrapper<>();

        // 构造查询条件
        queryWrapper
                // 精确查询 - 资金状态为使用中
                .eq(CapitalInfo::getCapitalState, 0)
                // 或者
                .or()
                // 精确查询 - 资金状态为已回笼
                .eq(CapitalInfo::getCapitalState, 1)
                // 倒序排序 - 资金年份
                .orderByDesc(CapitalInfo::getCapitalYear)
                // 倒序排序 - 主键id
                .orderByDesc(CapitalInfo::getId);

        List<CapitalInfo> capitalInfos = capitalInfoMapper.selectList(queryWrapper);

        // List<CapitalInfo> -> List<CapitalInfoVO>
        return  capitalInfos.stream()
                .map(capitalInfo -> {
                    CapitalInfoVO capitalInfoVO = new CapitalInfoVO();
                    BeanUtils.copyProperties(capitalInfo, capitalInfoVO);
                    return capitalInfoVO;
                })
                .collect(Collectors.toList());
    }
}

src/main/java/com/weiyu/model/CapitalInfo.java

package com.weiyu.model;

import com.baomidou.mybatisplus.annotation.*;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 资金信息实体类
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("CapitalInfoManage")
public class CapitalInfo {
    /**
     * 主键id
     */
    @TableId(value = "cim_ID", type = IdType.AUTO)
    private Integer id;

    /**
     * 资金序号
     */
    @TableField("cim_CapitalNo")
    private String capitalNo;

    /**
     * 资金名称
     */
    @TableField("cim_CapitalName")
    @NotBlank(message = "资金名称不能为空")
    private String capitalName;

    /**
     * 资金类别
     */
    @TableField("cim_CapitalType")
    @NotBlank(message = "资金类别不能为空")
    private String capitalType;

    /**
     * 指标预算总额
     */
    @TableField("cim_CapitalTotal")
    @NotNull(message = "指标预算总额不能为空")
    private BigDecimal capitalTotal;

    /**
     * 指标剩余额
     */
    @TableField("cim_CapitalLeaveTotal")
    @NotNull(message = "指标剩余额不能为空")
    private BigDecimal capitalLeaveTotal;

    /**
     * 指标可用总额
     */
    @TableField("cim_CapitalValidTotal")
    @NotNull(message = "指标可用总额不能为空")
    private BigDecimal capitalValidTotal;

    /**
     * 指标类别
     */
    @TableField("cim_CapitalIndexType")
    @NotBlank(message = "指标类别不能为空")
    private String capitalIndexType;

    /**
     * 资金账户
     */
    @TableField("cim_CapitalAccount")
    @NotBlank(message = "资金账户不能为空")
    private String capitalAccount;

    /**
     * 资金来源
     */
    @TableField("cim_CapitalSource")
    @NotBlank(message = "资金来源不能为空")
    private String capitalSource;

    /**
     * 指标来源
     */
    @TableField("cim_CapitalIndexSource")
    @NotBlank(message = "指标来源不能为空")
    private String capitalIndexSource;

    /**
     * 资金年份
     */
    @TableField("cim_CapitalYear")
    @NotNull(message = "资金年份不能为空")
    @Min(value = 2000, message = "资金年份不能早于2000年")
    @Max(value = 2100, message = "资金年份不能晚于2100年")
    private Integer capitalYear;

    /**
     * 资金状态
     */
    @TableField("cim_State")
    @NotNull(message = "状态不能为空")
    private Integer capitalState;

    /**
     * 备注信息
     */
    @TableField("cim_Remark")
    private String remark;

    /**
     * 创建时间
     */
    @TableField(value = "cim_CreateDate", fill = FieldFill.INSERT)
    private LocalDateTime createTime;
}

src/main/java/com/weiyu/model/CapitalInfoVO.java

package com.weiyu.model;

import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 资金信息 VO
 */
@Data
public class CapitalInfoVO {
    /**
     * 主键id
     */
    private Integer id;

    /**
     * 资金序号
     */
    private String capitalNo;

    /**
     * 资金名称
     */
    private String capitalName;

    /**
     * 资金类别
     */
    private String capitalType;

    /**
     * 指标预算总额
     */
    private BigDecimal capitalTotal;

    /**
     * 指标剩余额
     */
    private BigDecimal capitalLeaveTotal;

    /**
     * 指标可用总额
     */
    private BigDecimal capitalValidTotal;

    /**
     * 指标类别
     */
    private String capitalIndexType;

    /**
     * 资金账户
     */
    private String capitalAccount;

    /**
     * 资金来源
     */
    private String capitalSource;

    /**
     * 指标来源
     */
    private String capitalIndexSource;

    /**
     * 资金年份
     */
    private Integer capitalYear;

    /**
     * 资金状态
     */
    private Integer capitalState;

    /**
     * 备注信息
     */
    private String remark;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;
}

使用常量类替换魔法数字

常量类

src/main/java/com/weiyu/constant/CapitalInfoStateConstants.java

package com.weiyu.constant;

/**
 * 资金信息状态常量类
 */
@SuppressWarnings("all")
public final class CapitalInfoStateConstants {

    private CapitalInfoStateConstants() {
        // 工具类,防止实例化
    }

    /**
     * 使用中
     */
    public static  final int IN_USE = 0;

    /**
     * 已回笼
     */
    public static final int RETURNED = 1;

    /**
     * 已结案
     */
    public static final int CLOSED = 2;

}

src/main/java/com/weiyu/service/CapitalInfoService.java

package com.weiyu.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.weiyu.constant.CapitalInfoStateConstants;
import com.weiyu.mapper.CapitalInfoMapper;
import com.weiyu.model.CapitalInfo;
import com.weiyu.model.CapitalInfoQueryDTO;
import com.weiyu.model.CapitalInfoVO;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;
import java.util.stream.Collectors;


    /**
     * 刷新资金信息列表
     */
    public List<CapitalInfoVO> refreshList() {
        LambdaQueryWrapper<CapitalInfo > queryWrapper = new LambdaQueryWrapper<>();

        // 构造查询条件
        queryWrapper
                // 精确查询 - 资金状态为使用中
                .eq(CapitalInfo::getCapitalState, CapitalInfoStateConstants.IN_USE)
                // 或者
                .or()
                // 精确查询 - 资金状态为已回笼
                .eq(CapitalInfo::getCapitalState, CapitalInfoStateConstants.RETURNED)
                // 倒序排序 - 资金年份
                .orderByDesc(CapitalInfo::getCapitalYear)
                // 倒序排序 - 主键id
                .orderByDesc(CapitalInfo::getId);

        List<CapitalInfo> capitalInfos = capitalInfoMapper.selectList(queryWrapper);

        // List<CapitalInfo> -> List<CapitalInfoVO>
        return  capitalInfos.stream()
                .map(capitalInfo -> {
                    CapitalInfoVO capitalInfoVO = new CapitalInfoVO();
                    BeanUtils.copyProperties(capitalInfo, capitalInfoVO);
                    return capitalInfoVO;
                })
                .collect(Collectors.toList());
    }
}

使用枚举替换魔法数字(简单应用:不改变实体类和VO)

枚举

src/main/java/com/weiyu/enumeration/CapitalInfoStateEnum.java

package com.weiyu.enumeration;

import lombok.Getter;

/**
 * 资金信息状态枚举
 */
@Getter
public enum CapitalInfoStateEnum {
    /**
     * 使用中
     */
    IN_USE(0, "使用中"),

    /**
     * 已回笼
     */
    RETURNED(1, "已回笼"),

    /**
     * 已结案
     */
    CLOSED(2, "已结案");

    private final Integer value;
    private final String description;

    CapitalInfoStateEnum(Integer value, String description) {
        this.value = value;
        this.description = description;
    }
}

src/main/java/com/weiyu/service/CapitalInfoService.java

package com.weiyu.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.weiyu.enumeration.CapitalInfoStateEnum;
import com.weiyu.mapper.CapitalInfoMapper;
import com.weiyu.model.CapitalInfo;
import com.weiyu.model.CapitalInfoQueryDTO;
import com.weiyu.model.CapitalInfoVO;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;
import java.util.stream.Collectors;


    /**
     * 刷新资金信息列表
     */
    public List<CapitalInfoVO> refreshList() {
        LambdaQueryWrapper<CapitalInfo > queryWrapper = new LambdaQueryWrapper<>();

        // 构造查询条件,WHERE (cim_State = ? OR cim_State = ?) ORDER BY cim_CapitalYear DESC,cim_ID 
        queryWrapper
                // 精确查询 - 资金状态为使用中
                .eq(CapitalInfo::getCapitalState, CapitalInfoStateEnum.IN_USE.getValue())
                // 或者
                .or()
                // 精确查询 - 资金状态为已回笼
                .eq(CapitalInfo::getCapitalState, CapitalInfoStateEnum.RETURNED.getValue())
                // 倒序排序 - 资金年份
                .orderByDesc(CapitalInfo::getCapitalYear)
                // 倒序排序 - 主键id
                .orderByDesc(CapitalInfo::getId);

        List<CapitalInfo> capitalInfos = capitalInfoMapper.selectList(queryWrapper);

        // List<CapitalInfo> -> List<CapitalInfoVO>
        return  capitalInfos.stream()
                .map(capitalInfo -> {
                    CapitalInfoVO capitalInfoVO = new CapitalInfoVO();
                    BeanUtils.copyProperties(capitalInfo, capitalInfoVO);
                    return capitalInfoVO;
                })
                .collect(Collectors.toList());
    }
}

使用 in

package com.weiyu.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.weiyu.enumeration.CapitalInfoStateEnum;
import com.weiyu.mapper.CapitalInfoMapper;
import com.weiyu.model.CapitalInfo;
import com.weiyu.model.CapitalInfoQueryDTO;
import com.weiyu.model.CapitalInfoVO;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;
import java.util.stream.Collectors;


    /**
     * 刷新资金信息列表
     */
    public List<CapitalInfoVO> refreshList() {
        LambdaQueryWrapper<CapitalInfo > queryWrapper = new LambdaQueryWrapper<>();

        // 构造查询条件,WHERE (cim_State IN (?,?)) ORDER BY cim_CapitalYear DESC,cim_ID DESC
        queryWrapper
                // in - 资金状态为使用中或已回笼,使用常量替换魔法数字0,使用枚举替换魔法数字1
                .in(CapitalInfo::getCapitalState, Arrays.asList(
                        CapitalInfoStateConstants.IN_USE,
                        CapitalInfoStateEnum.RETURNED.getValue())
                )
                // 倒序排序 - 资金年份
                .orderByDesc(CapitalInfo::getCapitalYear)
                // 倒序排序 - 主键id
                .orderByDesc(CapitalInfo::getId);

        List<CapitalInfo> capitalInfos = capitalInfoMapper.selectList(queryWrapper);

        // List<CapitalInfo> -> List<CapitalInfoVO>
        return  capitalInfos.stream()
                .map(capitalInfo -> {
                    CapitalInfoVO capitalInfoVO = new CapitalInfoVO();
                    BeanUtils.copyProperties(capitalInfo, capitalInfoVO);
                    return capitalInfoVO;
                })
                .collect(Collectors.toList());
    }
}
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐