Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r20952 -r21041 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 20952) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 21041) @@ -3524,10 +3524,10 @@ break; } } - if(needVirtualBasket){ - String sql = String.format(" where purpose='%s'", Container.CONTAINER_PURPOSE_VIRTUAL); - objectDao.getBySql_ForUpdate2(Container.class.getSimpleName(), sql); - } +// if(needVirtualBasket){ +// String sql = String.format(" where purpose='%s'", Container.CONTAINER_PURPOSE_VIRTUAL); +// objectDao.getBySql_ForUpdate2(Container.class.getSimpleName(), sql); +// } if(!packingTaskBasketBarcodeSet.isEmpty()){ objectDao.findBySql_ForUpdate(Container.class.getSimpleName(), String.format(" where %s ", SqlUtils.getStringFieldInCollectionsPredicate("po.barcode", packingTaskBasketBarcodeSet))); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/container/service/ContainerManagerImpl.java =================================================================== diff -u -r20493 -r21041 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/container/service/ContainerManagerImpl.java (.../ContainerManagerImpl.java) (revision 20493) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/container/service/ContainerManagerImpl.java (.../ContainerManagerImpl.java) (revision 21041) @@ -197,6 +197,11 @@ @Override public List callVirtualContainer(int amount , String taskGroup){ List virtualBasketList = null; + // 锁定第一条记录,防止并发 + { + String sql = String.format(" where purpose='%s' and containerName='001' ", Container.CONTAINER_PURPOSE_VIRTUAL); + objectDao.getBySql_ForUpdate2(Container.class.getSimpleName(), sql); + } String sql = " from Container where purpose='" + Container.CONTAINER_PURPOSE_VIRTUAL + "' and status='"+Container.CONTAINER_STATUS_FREE+"'"; String condition = "";