业务判断条件:
判断所有的常量中,是否包含这个常量
解决
枚举+map+containsKey() :把多个变量写成一个枚举,使用stream流把所有的枚举放在一个Map里,使用Map.contains.key()方法判断
枚举类
package com.wscar.xny.recommender.constants;
/**
* 流水类型约束
* 在这里维护流水类型 与 余额变动类型(扣减,新增,冻结等)的映射
*
* @author blue
*/
public enum FinanceFlowType {
//流水类型 1订单佣金 2提现失败返还 3提现失败手续费返还 4提现 5提现手续费 6提现金额冻结 7提现手续费冻结
//变更类型 INCOME增加 OUTLAY扣减 FREEZE冻结
/**
* 订单佣金
*/
COMMISSION(1, "订单佣金", FinanceChangeType.INCOME, "com.wscar.xny.recommender.common.account.strategy.IncreaseStrategy"),
/**
* 提现失败返还
*/
WITHDRAW_RETURN(2, "提现失败返还", FinanceChangeType.INCOME, "com.wscar.xny.recommender.common.account.strategy.UnfreezeStrategy"),
/**
* 提现失败手续费返还
*/
WITHDRAW_FEE_RETURN(3, "提现失败手续费返还", FinanceChangeType.INCOME, "com.wscar.xny.recommender.common.account.strategy.UnfreezeStrategy"),
/**
* 提现
*/
WITHDRAW(4, "提现", FinanceChangeType.OUTLAY, "com.wscar.xny.recommender.common.account.strategy.DeductionStrategy"),
/**
* 提现手续费
*/
WITHDRAD_FEE(5, "提现手续费", FinanceChangeType.OUTLAY, "com.wscar.xny.recommender.common.account.strategy.DeductionStrategy"),
/**
* 提现金额冻结
*/
WITHDRAD_FREEZE(6, "提现金额冻结", FinanceChangeType.FREEZE, "com.wscar.xny.recommender.common.account.strategy.FreezeStrategy"),
/**
* 提现手续费冻结
*/
WITHDRAD_FEE_FREEZE(7, "提现手续费冻结", FinanceChangeType.FREEZE, "com.wscar.xny.recommender.common.account.strategy.FreezeStrategy");
/**
* 流水类型标识
*/
private int flowType;
/**
* 流水类型描述
*/
private String disc;
/**
* 流水变更类型 1增加 2扣减 3冻结 4解冻
*/
private FinanceChangeType changeType;
/**
* 处理类
*/
private String target;
FinanceFlowType(int flowType, String disc, FinanceChangeType changeType, String target) {
this.flowType = flowType;
this.disc = disc;
this.changeType = changeType;
this.target = target;
}
public int getFlowType() {
return flowType;
}
public String getDisc() {
return disc;
}
public FinanceChangeType getChangeType() {
return changeType;
}
public String getTarget() {
return target;
}
}
Service判断
形成的Map,Map直接写在Service层里
/**
* 变更类型及流水类型
*/
private static final Map<Integer, FinanceChangeType> FINANCE_CHANGE_TYPE_MAPPING =
Stream.of(FinanceChangeType.values()).collect(Collectors.toMap(FinanceChangeType::getIdentity, e -> e, (a, b) -> a));
private static final Map<Integer, FinanceFlowType> FINANCE_FLOW_TYPE_MAPPING =
Stream.of(FinanceFlowType.values()).collect(Collectors.toMap(FinanceFlowType::getFlowType, e -> e, (a, b) -> a));
if (null != detailType && !FINANCE_FLOW_TYPE_MAPPING.containsKey(detailType)) {
throw new BusinessException(AuthBusinessError.SYS_REQUEST_PARAMETER_ERROR, "未识别的流水类型");
}