场景:游戏充值有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;
    }


}