oneBottles.forEach(bottle -> { //原药的单元识别码 ProductWaterIdentityCode identityCode = identityCodeBo.getIdentityCode(); setOriginalBottleIdentityCode(bottle, apply, identityCode); });
public class ProductWaterIdentityCodeBo { /** 毫秒内最大序列 9999 */ private static final long SEQUENCE_MASK = 9999L; /** 同一托盘最大包装数 99 */ private static final int MAX_PACKAGE_COUNT = 99; /** 最大托盘数 */ public static final int MAX_PLATE_COUNT = 999; private String registerType; private String registerIdentityCode; private String produceType; private String specificationNumber; private String specificationLineNumber; private String dateTimeCode; private String plateCode; private String packageCode; /** 一级码数量, 决定托盘包装数量 */ private int packageCount; /** 托盘数 */ private int plateNumber = 0; /** 包装数 */ private int packageNumber = 0; private int topCodeNumber = 0; public ProductWaterIdentityCode getIdentityCode() { nextCodePlus(); ProductWaterIdentityCode identityCode = new ProductWaterIdentityCode(); BeanUtils.copyProperties(this, identityCode); identityCode.setPlateCode(getPlateCode()); identityCode.setPackageCode(getPackageCode()); String randomNumber = getRandomNumber(); identityCode.setRandomNumber(randomNumber); return identityCode; } public ProductWaterIdentityCode getTopIdentityCode() { ProductWaterIdentityCode identityCode = new ProductWaterIdentityCode(); BeanUtils.copyProperties(this, identityCode); topCodeNumber++; identityCode.setPlateCode(formatPlateCode(topCodeNumber)); identityCode.setPackageCode(formatPackageCode(0)); String randomNumber = getRandomNumber(); identityCode.setRandomNumber(randomNumber); return identityCode; } /** * 获取下一包装号, 如果超过包装规格就重新计数, 同时托盘号+1 */ private void nextCodePlus() { if (plateNumber == 0) { plateNumber = 1; } packageNumber++; if (isMaxPackage()) { packageNumber = 1; plateNumber++; checkIsMaxPlate(); } } private String getPlateCode() { return formatPlateCode(plateNumber); } private String formatPlateCode(int plateNum) { return String.format("%03d", plateNum); } private void checkIsMaxPlate() { if (plateNumber > MAX_PLATE_COUNT) { throw new ServiceException("托盘数超过三位数"); } } private String getPackageCode() { return formatPackageCode(packageNumber); } private String formatPackageCode(int packageNum) { return String.format("%02d", packageNum); } private boolean isMaxPackage() { return packageNumber > packageCount; } /** * 8位随机数 * * @return */ private String getRandomNumber() { return TextUtils.getRandNum(7); } public void setPackageCount(int packageCount) { if (packageCount > MAX_PACKAGE_COUNT) { throw new ServiceException("产品包装规格大于两位数"); } this.packageCount = packageCount; } }
整个类作为一个方法被调用