項目情況
- 對接了多個錢包項目,各個錢包直接各種業務收費標準不一樣
- 比如 A錢包充值收錢少 B錢包提現收錢少,A錢包某幾天提現免費
- 需要實時更改選中的錢包渠道,此時用二進制剛好
上代碼
建表
CREATE TABLE `wallet_channel_config` (
`id` bigint(64) NOT NULL AUTO_INCREMENT,
`channel_code` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '渠道標識',
`channel_name` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '渠道名稱',
`weight` int(11) NULL DEFAULT NULL COMMENT '權重',
`status` int(11) NULL DEFAULT NULL COMMENT '狀態',
`handler` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '解析器',
`tags` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '進制碼',
`tag` int(11) NULL DEFAULT NULL COMMENT '值',
`create_at` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
`update_at` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新時間',
PRIMARY KEY (`id`) USING BTREE,
INDEX `idx_channel_code`(`channel_code`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1000 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '錢包渠道配置表' ROW_FORMAT = Dynamic;
表結構及數據
TranType
public enum TranType {
DEPOSIT("deposit",1,"充值"),
WITHDRAW("withdraw",2,"提現"),
VALID_ADD("withdraw",4,"校驗地址合法性"),
TEST("withdraw",8,"測試添加");
private String code;
private Integer value;
private String name;
TransactionType(String code, Integer value,String name){
this.code = code;
this.value = value;
this.name = name;
}
public String getCode() {
return code;
}
public Integer getValue() {
return value;
}
public String getName() {
return name;
}}
枚舉裏面設定了三種業務類型,數據庫通過 tags
設定了四種類型
- 查詢合法性
- 測試 選擇
- 提現
這樣通過進制選擇合適的配置 效率剛剛的
java
if ((ping.getStatus() & status) == 0) {
status += ping.getStatus();
}
3 & 1 =1;
3 & 2 =2;
3 & 4 =0;