枚举类使用案例

一、ICsCommonEnum公共接口

/**
 * @description 通用枚举公共类
 */
public interface ICsCommonEnum {
    /**
     * 统一定义基础code码
     * @return
     */
    String getCode();
}    

二、ErrorCodeEnum枚举类

import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;

/**
 * @description: 短信错误枚举类
*/
public class ErrorCodeEnum {

    @Getter
    @AllArgsConstructor
    public enum MessageErrorCodeEnum implements ICsCommonEnum{

        SUCCESS("0", "成功返回"),
        SYSTEM_BUSY("100", "系统忙(因平台侧原因,暂时无法处理提交的短信)"),
        NO_SMS_ACCOUNT("101", "无此短信账号/短信账号未登陆"),
        NO_INTERFACE_PERMISSION("199", "无此类型接口权限");
        private String code;
        private String message;
        /**
         *获取具体枚举类型
         */
        public static MessageErrorCodeEnum getCodeEnum(String code){
            final ErrorCodeEnum.MessageErrorCodeEnum codeEnum = Arrays.stream(values()).filter(v -> v.getCode().equals(code)).findFirst().orElse(null);
            return codeEnum;
        }
    }

    /**
     * 获取对应的状态码
     * @param code
     * @return
     */
    public static String  getMessage(String code){
        if(instance.isEmpty()){
            Arrays.stream(values()).forEach(v->{
                instance.put(v.getCode(),v.getMessage());
            });
            /*或者
			Arrays.stream(MessageErrorCodeEnum.values()).forEach(v->{
                instance.put(v.getCode(),v.getMessage());
            });
			*/
        }
        return instance.get(code);
    }

    @Getter
    @AllArgsConstructor
    public enum TaskStatusEnum{
        ENABLE(true,"启用"),
        DISABLE(false,"不启用")
        ;
        private boolean status;
        private String message;
    }
}

三、测试

@SpringBootTest
public class CsServiceApplicationTests {
    @Test
    void test5(){
        ErrorCodeEnum.MessageErrorCodeEnum codeEnum =  ErrorCodeEnum.MessageErrorCodeEnum.getCodeEnum("118");
        System.out.println(codeEnum);
    }
}

四、项目中实际使用

场景:根据返回CsPushScheduleTaskResp数据,对任务状态status和推送状态pushStatus的结果,进行判断最终的任务推送状态scheduleTaskPushStatus。
在这里插入图片描述
CsPushScheduleTaskResp

@Data
public class CsPushScheduleTaskResp implements Serializable {
    @ApiModelProperty("定时任务id")
    private Long id;

    @ApiModelProperty("预定推送时间")
    private Date pushTime;

    @ApiModelProperty("推送状态")
    private Integer pushStatus;

    @ApiModelProperty("任务名称")
    private String pushTaskName;

    @ApiModelProperty("推送对象")
    private String pushObject;

    @ApiModelProperty("推送模板名称")
    private String templateName;

    @ApiModelProperty("推送用户数")
    private Long pushUserNums;

    @ApiModelProperty("送达用户数量")
    private Long deliveryUseNums;

    @ApiModelProperty("状态")
    private Integer status;

    @ApiModelProperty("任务推送状态")
    private int scheduleTaskPushStatus;

    public int getScheduleTaskPushStatus() {
        final Integer taskStatus = SchedulerTaskPushStatusEnum.getTaskStatus(this.getStatus());
        final Integer taskPushStatus = SchedulerTaskPushStatusEnum.getPushStatus(this.getPushStatus());
        this.scheduleTaskPushStatus = !Objects.isNull(taskStatus) ? taskStatus : taskPushStatus ;
        return this.scheduleTaskPushStatus ;
    }
}

PushTaskEnum

public class PushTaskEnum {
@Getter
    @AllArgsConstructor
    public enum SchedulerTaskPushStatusEnum{
        TO_BE_SENT(0,"待发送",TaskPushStatusEnum.TO_BE_SENT.getStatus(),null),
        SENT(1,"已发送",TaskPushStatusEnum.SENT.getStatus(), null),
        SENDING(1,"发送中",TaskPushStatusEnum.SENDING.getStatus(), null),
        HAS_WITHDRAW(2,"已撤回",null,null),
        DISABLED(3,"已作废",null,TaskStatusEnum.ABANDONED.getStatus()),
        FAIL(4,"任务执行失败",TaskPushStatusEnum.FAIL.getStatus(), null)
        ;
        private Integer status;
        private String message;
        private Integer pushStatus;
        private Integer taskStatus;

        public static Map<Integer,Integer> pushStatusMap = new HashMap<>();
        public static Map<Integer,Integer> taskStatusMap = new HashMap<>();

        static{
            Arrays.stream(values()).forEach(v->{
                if(!Objects.isNull(v.getPushStatus())){
                    pushStatusMap.put(v.getPushStatus(),v.getStatus());
                }
                if(!Objects.isNull(v.getTaskStatus())){
                    taskStatusMap.put(v.getTaskStatus(),v.getStatus());
                }
            });
        }

        public static  Integer getPushStatus(int code){
           return pushStatusMap.get(code);
        }

        public static  Integer getTaskStatus(int code){
            return taskStatusMap.get(code);
        }
    }
}

在这里插入图片描述
getScheduleTaskPage

public PagingResult<CsPushScheduleTaskResp> getScheduleTaskPage(CsScheduleTaskPageReq req) throws Exception {
        CsPushScheduleTaskReq serviceReq = BeanCopyUtils.copyProperties(CsPushScheduleTaskReq.class,req);
        Integer pushStatus = null;
        if(!Objects.isNull(pushStatus = req.getPushStatus())){
            Integer finalPushStatus = pushStatus;
            List<Integer> taskStatus = new ArrayList<>();
            List<Integer> taskPushStatus = new ArrayList<>();
            //根据搜索框中推送状态码,反推枚举类中对应的状态码
            Arrays.stream(PushTaskEnum.SchedulerTaskPushStatusEnum.values()).forEach(v->{
                if(v.getStatus().equals(finalPushStatus)){
                    if(!Objects.isNull(v.getTaskStatus())){
                        taskStatus.add(v.getTaskStatus());
                    }
                    if(!Objects.isNull(v.getPushStatus())){
                        taskPushStatus.add(v.getPushStatus());
                    }
                }
            });
            serviceReq.setStatus(taskStatus);
            serviceReq.setPushStatus(taskPushStatus);
        }
        final Response<PagingResult<CsPushScheduleTaskResp>> resp = csPushTaskClient.getScheduleTaskPage(serviceReq);
        if(resp.fail()){
            ExceptionUtils.create(resp);
        }
        return resp.getResult();
    }

CsPushTaskMapper.xml

<select id="pageScheduleList"
            resultType="com.xxx.service.api.response.CsPushScheduleTaskResp">
        SELECT
            a.id,
            a.push_task_name ,
            b.name AS pushObject,
            a.push_time,
            a.push_status,
            a.push_time,
            a.del_flag,
            a.status,
            (SELECT d.name FROM cms_message_template AS d WHERE d.id=a.template_id) AS template_name,
            b.personnel_number AS push_user_nums
        FROM cs_push_task a
        LEFT JOIN  cms_user_group AS b ON a.user_group_id=b.group_id
        where
            a.del_flag = 0 and a.user_group_type = '0' AND a.push_type = '1'
            <if test="entity.search !=null and entity.search != ''">
                <bind name="search" value="'%'+entity.search+'%'"/>
                and (a.push_task_name like #{search} or b.name like #{search})
            </if>
            <if test="entity.pushStatus != null and entity.pushStatus.size > 0">
                and a.status !=0
                and a.push_status in
                <foreach collection="entity.pushStatus" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
            <if test="entity.status != null and entity.status.size > 0">
                and a.status in
                <foreach collection="entity.status" item="item" open="(" separator="," close=")">
                    #{item}
                </foreach>
            </if>
        order by a.id desc
    </select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值