package com.yida.data.common.core.utils;

import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.yida.data.common.core.exception.FebsException;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.util.Date;

/**
 * 支付相关静态工具类
 *
 * @author ZYJ
 * @date 2022-4-1
 */
@Slf4j
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class PayUtil {

    /**
     * 生成流水号
     * 流水号生成规则：第一位：流水号前缀(一位)
     * 第2-10位：学校ID，缺少的以0在前补位
     * 第11-20位：商品编码code，缺少的以0在前补位
     * 第21-28位：购买日期（年月日）
     * 第29-36位：8位随机数
     *
     * @param prefix 流水号前缀
     * @param deptId 部门\学校id
     * @param code   对应支付项目编码
     * @return java.lang.String
     * @author ZYJ
     * @date 2022/4/1 10:21
     */
    public static String generateSerialNumber(String prefix, Long deptId, String code) {
        if (StringUtils.isEmpty(prefix)) {
            throw new FebsException("生成流水号失败");
        }
        StringBuilder stringBuilder = new StringBuilder(StrUtil.sub(prefix, 0, 1));
        stringBuilder.append(StrUtil.fill(deptId.toString(), '0', 9, true));
        stringBuilder.append(StrUtil.fill(code, '0', 10, true));
        stringBuilder.append(DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN));
        stringBuilder.append(RandomUtil.randomNumbers(8));
        return stringBuilder.toString();
    }
}
