Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r17530 -r17532 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 17530) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 17532) @@ -3478,16 +3478,21 @@ //用这次申请的物品和剩余可归还物品作比较 for (Entry map : canReturnAmount.entrySet()) { String key = map.getKey(); - int amount = Math.subtractExact(map.getValue(), restApplyTousses.get(key)); + Integer applyAmount = MapUtils.getInteger(restApplyTousses, key, null); + //因为申请的物品有可能不全在借物单里,所以这里要判空 + if (applyAmount == null){ + continue; + } + int amount = Math.subtractExact(map.getValue(), applyAmount); if (amount < 0) { //如果这次申请的数量大于可归还的数量(即申请单的物品数量>借物单的数量),设置归还的数量为最大可归还数量 applyTousses.put(key, map.getValue()); //重新设置剩余申请归还数量 - restApplyTousses.put(key, Math.subtractExact(restApplyTousses.get(key), map.getValue())); + restApplyTousses.put(key, Math.subtractExact(applyAmount, map.getValue())); } else { // 如果这次申请数量小于等于可归还的数量(即申请单的物品数量<=借物单的数量),设置归还的数量为这次申请归还的数量 - applyTousses.put(key, restApplyTousses.get(key)); + applyTousses.put(key, applyAmount); //因为已经全部把申请归还数量去还了,所以这里剩余申请归还数量是0 restApplyTousses.put(key, 0); }