package digital.laboratory.platform.entrustment.json;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;
import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * BigDecimal 自定义序列化器
 */
public class DynamicBigDecimalSerializer extends JsonSerializer<BigDecimal> {

    @Override
    public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        // 判断是否大于100，动态控制小数位数
        int scale = value.compareTo(new BigDecimal("100")) > 0 ? 1 : 2;
        value = value.setScale(scale, BigDecimal.ROUND_HALF_UP);

        // 使用 DecimalFormat 保留小数位并输出
        DecimalFormat df = new DecimalFormat();
        df.setMinimumFractionDigits(scale); // 最小小数位数
        df.setMaximumFractionDigits(scale); // 最大小数位数
        df.setGroupingUsed(false); // 不使用千分位，true 1000,000,000

        gen.writeString(df.format(value)); // 输出为字符串
    }
}
