package com.casic.missiles.utils;
import cn.hutool.core.date.DateUtil;
import com.casic.missiles.enums.quality.QualityTableEnum;
import org.apache.commons.lang3.StringUtils;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.BiFunction;
/**
* 编码生成器
*/
public class QualityNoUtil {
/**
* 编码信息
*
* @param labCode 实验室编码
* @param groupNo 组编码
* @param tableEnum 枚举
* @param func 方法体
* @return
*/
public static String genMaxNo(String labCode, String groupNo, QualityTableEnum tableEnum, BiFunction<QualityTableEnum, String, Long> func) {
return genMaxNo(null, labCode, groupNo, tableEnum, func);
}
public static String genMaxNo(Integer yearTime, String labCode, String groupNo, QualityTableEnum tableEnum, BiFunction<QualityTableEnum, String, Long> func) {
String code = getCode(yearTime, tableEnum.getFileNoEnum().getCode(), labCode, tableEnum.getFileTypeEnum().getCode(), groupNo, 0l);
String queryCode = code.substring(0, tableEnum.getFixedLength());
Long maxNo = func.apply(tableEnum, queryCode);
String newCode = NoGeneratorUtil.getCode(tableEnum.getFileNoEnum().getCode(), labCode, tableEnum.getFileTypeEnum().getCode(), groupNo, maxNo);
return newCode;
}
public static String convertToYearNo(String labCode, Integer yearTime, Integer yearNum) {
return labCode + yearTime + yearNum;
}
public static synchronized String getCode(Integer yearNo, String fileNo, String labNo, String recordTypeNo, String groupNo, long nowNum) {
//年号
if (yearNo == null) {
yearNo = DateUtil.thisYear();
}
StringBuilder builder = new StringBuilder();
builder.append(fileNo).append("-");
builder.append(labNo).append("-");
builder.append(recordTypeNo).append("-");
if (StringUtils.isNotEmpty(groupNo)) {
builder.append(groupNo);
}
builder.append(yearNo);
AtomicLong count = new AtomicLong(nowNum);
if (nowNum == 0) {
count = new AtomicLong(0);
builder.append("00").append(count.incrementAndGet());
} else {
String format = String.format("%03d", count.incrementAndGet());
builder.append(format);
}
return String.valueOf(builder);
}
}