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); } }