package com.yd.csf.service.utils;

/**
 * 业务编号生成工具类
 * 格式：出账年月(6) + 转介人内部编号后6位 + 6位流水号(从000001开始递增)
 */
public class BusinessNoUtils {

    /**
     * 生成业务编号（流水号由调用方传入）
     * @param billingYearMonth 出账年月，如 "202604"
     * @param referrerInnerNo  转介人内部编号，可为null或空
     * @param serialPart       6位流水号（如 "000001"）
     * @return 完整业务编号
     */
    public static String generate(String billingYearMonth, String referrerInnerNo, String serialPart) {
        String referrerPart = formatReferrerInnerNo(referrerInnerNo);
        return billingYearMonth + referrerPart + serialPart;
    }

    // 格式化转介人内部编号：取后6位，不足左补0，无则全0
    private static String formatReferrerInnerNo(String referrerInnerNo) {
        if (referrerInnerNo == null || referrerInnerNo.trim().isEmpty()) {
            return "000000";
        }
        String no = referrerInnerNo.trim();
        if (no.length() > 6) {
            return no.substring(no.length() - 6);
        }
        return String.format("%6s", no).replace(' ', '0');
    }

    /**
     * 获取业务编号中的前缀部分（用于数据库查询）
     * @param billingYearMonth 出账年月
     * @param referrerInnerNo  转介人内部编号
     * @return 前缀字符串（12位）
     */
    public static String getPrefix(String billingYearMonth, String referrerInnerNo) {
        return billingYearMonth + formatReferrerInnerNo(referrerInnerNo);
    }
}