diff --git a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialCodeController.java b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialCodeController.java index e4dc09c9..d4e71ff3 100644 --- a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialCodeController.java +++ b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/controller/MaterialCodeController.java @@ -266,7 +266,7 @@ public class MaterialCodeController extends BaseController { items.add(item); qrs.add(new WmsShipmentMaterialCodeItemQr() .setItemId(item.getId()) - .setNo(KeyUtil.next()) + .setNo(KeyUtil.nextFCode()) .setNum(item.getMinPackagingNum()) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) @@ -318,7 +318,7 @@ public class MaterialCodeController extends BaseController { for (int i = 1; i <= item.getPackingNum(); i++) { materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr() .setItemId(item.getId()) - .setNo(KeyUtil.next()) + .setNo(KeyUtil.nextFCode()) // .setNum(i == count && decimalValue.compareTo(BigDecimal.ZERO) > 0 ? decimalValue : item.getMinPackagingNum()) .setNum(NumberUtil.getPackageNum(item.getNum(), item.getMinPackagingNum(), item.getPackingNum(), i)) .setCreateBy(UserUtil.getUserName()) @@ -367,7 +367,7 @@ public class MaterialCodeController extends BaseController { for (int i = 1; i <= item.getPackingNum(); i++) { materialCodeItemQrService.save(new WmsShipmentMaterialCodeItemQr() .setItemId(item.getId()) - .setNo(KeyUtil.next()) + .setNo(KeyUtil.nextFCode()) .setNum(NumberUtil.getPackageNum(item.getNum(), item.getMinPackagingNum(), item.getPackingNum(), i)) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) @@ -449,7 +449,7 @@ public class MaterialCodeController extends BaseController { itemsForAdd.add(item); qrsForAdd.add(new WmsShipmentMaterialCodeItemQr() .setItemId(item.getId()) - .setNo(KeyUtil.next()) + .setNo(KeyUtil.nextFCode()) .setNum(item.getMinPackagingNum()) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) @@ -465,7 +465,7 @@ public class MaterialCodeController extends BaseController { itemsForAdd.add(item); qrsForAdd.add(new WmsShipmentMaterialCodeItemQr() .setItemId(item.getId()) - .setNo(KeyUtil.next()) + .setNo(KeyUtil.nextFCode()) .setNum(item.getMinPackagingNum()) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) @@ -494,7 +494,7 @@ public class MaterialCodeController extends BaseController { } else { qrsForAdd.add(new WmsShipmentMaterialCodeItemQr() .setItemId(item.getId()) - .setNo(KeyUtil.next()) + .setNo(KeyUtil.nextFCode()) .setNum(item.getMinPackagingNum()) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()) diff --git a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/util/KeyUtil.java b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/util/KeyUtil.java index 34f80457..de3c6378 100644 --- a/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/util/KeyUtil.java +++ b/nflg-wms-shipment/src/main/java/com/nflg/wms/shipment/util/KeyUtil.java @@ -1,9 +1,27 @@ package com.nflg.wms.shipment.util; +import com.nflg.wms.common.constant.STATE; +import com.nflg.wms.common.exception.NflgException; +import com.nflg.wms.repository.entity.WmsShipmentMaterialCodeItemQr; +import com.nflg.wms.repository.service.IWmsShipmentMaterialCodeItemQrService; +import com.nflg.wms.starter.utils.SpringContextHolder; import io.hypersistence.tsid.TSID; +import java.security.SecureRandom; + public class KeyUtil { + private static final SecureRandom RANDOM = new SecureRandom(); + private static final int MAX_RETRY = 100; + private static IWmsShipmentMaterialCodeItemQrService wmsShipmentMaterialCodeItemQrService; + + private static IWmsShipmentMaterialCodeItemQrService getWmsShipmentMaterialCodeItemQrService() { + if (wmsShipmentMaterialCodeItemQrService == null) { + wmsShipmentMaterialCodeItemQrService = SpringContextHolder.getBean(IWmsShipmentMaterialCodeItemQrService.class); + } + return wmsShipmentMaterialCodeItemQrService; + } + public static String next(){ return TSID.Factory.getTsid().toString(); } @@ -11,4 +29,30 @@ public class KeyUtil { public static String nextBase62(){ return TSID.Factory.getTsid().encode(62); } + + /** + * 生成规则:F + 12位随机数字,保证唯一性 + * 如果生成的编码已存在,则重新生成,最多重试100次 + * 例如:F123456789012 + */ + public static String nextFCode(){ + for (int i = 0; i < MAX_RETRY; i++) { + String code = generateCode("F"); + long count = getWmsShipmentMaterialCodeItemQrService().lambdaQuery() + .eq(WmsShipmentMaterialCodeItemQr::getNo, code) + .count(); + if (count == 0) { + return code; + } + } + throw new NflgException(STATE.BusinessError, "生成唯一条码号失败,请重试"); + } + + private static String generateCode(String prefix){ + StringBuilder sb = new StringBuilder(prefix); + for (int i = 0; i < 12; i++) { + sb.append(RANDOM.nextInt(10)); + } + return sb.toString(); + } } \ No newline at end of file diff --git a/nflg-wms-starter/src/main/java/com/nflg/wms/starter/utils/SpringContextHolder.java b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/utils/SpringContextHolder.java new file mode 100644 index 00000000..e622f486 --- /dev/null +++ b/nflg-wms-starter/src/main/java/com/nflg/wms/starter/utils/SpringContextHolder.java @@ -0,0 +1,33 @@ +package com.nflg.wms.starter.utils; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +@Component +public class SpringContextHolder implements ApplicationContextAware { + + private static ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext context) throws BeansException { + applicationContext = context; + } + + public static T getBean(Class clazz) { + return applicationContext.getBean(clazz); + } + + public static T getBean(String name, Class clazz) { + return applicationContext.getBean(name, clazz); + } + + public static Object getBean(String name) { + return applicationContext.getBean(name); + } + + public static ApplicationContext getApplicationContext() { + return applicationContext; + } +}