Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r35507 -r35518 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 35507) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 35518) @@ -93,6 +93,7 @@ import com.forgon.disinfectsystem.entity.sterilizationmanager.foreignproxydisinfection.ForeignProxyDisinfection; import com.forgon.disinfectsystem.entity.sterilizationmanager.foreignproxydisinfection.ForeignProxyItem; import com.forgon.disinfectsystem.entity.sterilizationmanager.proxydisinfection.ProxyDisinfection; +import com.forgon.disinfectsystem.entity.tousseitem.PrepareRecyleScanBarcode; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.entity.urgent.UrgentLevel; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; @@ -3410,6 +3411,9 @@ if(tousseDefinition == null){ throw new SystemException(errorBarcodeMessage); } + + //同一个条码,已经进行了预回收操作后,不允许再被其他的预回收单扫码进行预回收;QYSRMYY-54 + prepareRecycleBarcodeScanned(tousseInstanceBarcode, invoicePlan, barcode); if(invoicePlan.isTousseAppliaction() || invoicePlan.isDisinfectGoodsAppliaction() @@ -3501,11 +3505,75 @@ return null; } + /** + * 判断器械包实例条码是否已经被预回收 + * @param tousseInstanceBarcode 器械包实例条码 + * @param invoicePlan 申请单 + * @param barcode 扫码的条码 + */ + private void prepareRecycleBarcodeScanned(String tousseInstanceBarcode, + InvoicePlan invoicePlan, String barcode) { + if(StringUtils.isBlank(tousseInstanceBarcode) + || invoicePlan == null + || !DatabaseUtil.isPoIdValid(invoicePlan.getId()) + || StringUtils.isBlank(barcode)){ + return; + } + //同一个条码,已经进行了预回收操作后,不允许再被其他的预回收单扫码进行预回收;QYSRMYY-54 + String countSql = String.format("select cout(*) from %s prs " + + "join %s ti on ti.id = prs.tousseItemId " + + "where prs.tousseInstanceBarcode = '%s' and ti.recyclingApplication_ID <> %s", + PrepareRecyleScanBarcode.class.getSimpleName(), + TousseItem.class.getSimpleName(), + tousseInstanceBarcode, + invoicePlan.getId()); + if(objectDao.countBySql(countSql) > 0){ + throw new SystemException("条码" + barcode + "已经被预回收,无法重复预回收"); + } + } + @Override public Map> getPrepareRecycleScanBarcodeInfo( List tousseItemList) { - // TODO Auto-generated method stub - return null; + Map> tousseDefinitionIDScanBarcodeMap = new HashMap>(); + if(CollectionUtils.isEmpty(tousseItemList)){ + return tousseDefinitionIDScanBarcodeMap; + } + Set tousseItemIdSet = new HashSet(); + for (TousseItem ti : tousseItemList) { + tousseItemIdSet.add(ti.getId()); + } + String sql = String.format("select ti.tousseDefinitionId, prs.tousseInstanceBarcode " + + "from %s ti " + + "left join %s prs on prs.tousseItemId = ti.id " + + "where 1=1 and %s ", + TousseItem.class.getSimpleName(), + PrepareRecyleScanBarcode.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("ti.id", tousseItemIdSet)); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + Long tousseDefinitionId = rs.getLong("tousseDefinitionId"); + String tousseInstanceBarcode = rs.getString("tousseInstanceBarcode"); + if(DatabaseUtil.isPoIdValid(tousseDefinitionId)){ + List scanBarcodeList = tousseDefinitionIDScanBarcodeMap.get(tousseDefinitionId); + if(scanBarcodeList == null){ + scanBarcodeList = new ArrayList(); + } + if(StringUtils.isNotBlank(tousseInstanceBarcode) + && !scanBarcodeList.contains(tousseInstanceBarcode)){ + scanBarcodeList.add(tousseInstanceBarcode); + } + tousseDefinitionIDScanBarcodeMap.put(tousseDefinitionId, scanBarcodeList); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return tousseDefinitionIDScanBarcodeMap; } /**