一、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>