场景:游戏充值有1-9个充值挡位,每个挡位首充都会赠送相应代金券。
法一。
1.表设计
1.挡位表
2.挡位与用户关联表
2.业务逻辑
查询关联表表示出用户哪些挡位已经充值过,其余为为充值。
法二。
1.表设计
1.挡位表
2.用户表增加first_recharge_status字段,存储10进制。
2.业务逻辑
在电路中1开0闭,九个挡位我们可以用二进制 1111 1111 1,表示转换成10进制为511,first_recharge_status存储511.
查询充值挡位,组装充值挡位参数
充值完成修改首充状态
以下为工具类
package com.ruoyi.common.utils; import cn.hutool.core.util.StrUtil; import org.apache.commons.lang3.time.DateFormatUtils; import javax.xml.bind.DatatypeConverter; import java.math.BigInteger; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * @description 进制相关工具类 * @version V1.0 * @author zhang * @date 2021/11/23 14:00 * @update 2021/11/23 14:00 */ public class HexUtils { /** * 将16进制转换为二进制 * * @param dec * @return */ public static String[] hexString2binaryString(Integer dec) { String hexString = intToHexString(dec, 2); //16进制转10进制 BigInteger sint = new BigInteger(hexString, 16); //10进制转2进制 String result = sint.toString(2); //字符串反转 return new StringBuffer(StrUtil.fillBefore(result, '0', 16)).reverse().toString().split(""); } /** * 将16进制转换为二进制 * * @param dec * @return */ public static Integer binaryString2hexString(String[] dec) { String collect = Arrays.stream(dec).collect(Collectors.joining("")); return Integer.parseInt(new StringBuffer(collect).reverse().toString(),2); } /** * @Title:intToHexString @Description:10进制数字转成16进制 * * @param a 转化数据 * @param len 占用字节数 * @return * @throws */ public static String intToHexString(int a, int len) { len <<= 1; String hexString = Integer.toHexString(a); int b = len - hexString.length(); if (b > 0) { for (int i = 0; i < b; i++) { hexString = "0" + hexString; } } return hexString; } /** * @Title:hexString2Bytes @Description:16进制字符串转字节数组 * * @param src 16进制字符串 * @return 字节数组 */ public static byte[] hexString2Bytes(String src) { int l = src.length() / 2; byte[] ret = new byte[l]; for (int i = 0; i < l; i++) { ret[i] = (byte) Integer.valueOf(src.substring(i * 2, i * 2 + 2), 16).byteValue(); } return ret; } }