Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java =================================================================== diff -u -r40302 -r40320 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 40302) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 40320) @@ -83,6 +83,7 @@ import com.forgon.disinfectsystem.entity.packing.PackingRecord; import com.forgon.disinfectsystem.entity.packing.PackingTask; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingItem; +import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; import com.forgon.disinfectsystem.entity.tousseitem.MaterialModifyRecord; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.entity.urgent.UrgentLevel; @@ -3845,7 +3846,7 @@ jsonobj.put("tousseDefinitionId", td.getId()); jsonobj.put("supplierName", tousseItem.getSupplierName()); jsonobj.put("oldSupplierName", tousseItem.getSupplierName()); - jsonobj.put("packageStatus", tousseItem.getPackageStatus()); + jsonobj.put("packageStatus", foreignTousseIdPackageStatusMap.get(td.getId())); jsonobj.put("amount", tousseItem.getAmount()); jsonobj.put("includeImplant", ""); jsonobj.put("price", td.getPrice() == null ? 0 : td.getPrice()); @@ -5358,8 +5359,19 @@ , String returneeOfSupplier, String returnMan, Date returnTime) { List allMaterialReturnTousseItemTousseDefinitionIdList = new ArrayList(); //判断拆分小包是否二次回收 - Map tousseDefinitionIdRecyclingItemIdMap = getForeignTousseSplitRecyclingItemIdMap(returnTousseDefinitionList); + Map tousseDefinitionIdRecyclingItemIdMap = new HashMap(); + //判断拆分小包使用记录是否转换申请单 + Map foreignTousseUseRecordStatusMap = new HashMap(); + SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager.getSystemParamsObj(); + if(StringUtils.equals(Constants.STR_NO, supplyRoomConfig.getForeignTousseIsSecondRecycle())){ + //不二次回收的外来器械,使用记录转换申请单后,才可以确认归还 + foreignTousseUseRecordStatusMap = getTousseDefinitionUseRecordStatusMap(returnTousseDefinitionList); + }else{ + //二次回收的外来器械才可以确认归还 + tousseDefinitionIdRecyclingItemIdMap = getForeignTousseSplitRecyclingItemIdMap(returnTousseDefinitionList); + } + if(StringUtils.isBlank(returnMan)){ returnMan = AcegiHelper.getLoginUserFullName(); } @@ -5374,8 +5386,15 @@ throw new SystemException(String.format("%s已经确认归还!", tousseDefinition.getName())); } - if(!tousseDefinitionIdRecyclingItemIdMap.containsKey(tousseDefinition.getId())){ - throw new SystemException(String.format("%s还没有回收,不能归还!", tousseDefinition.getName())); + if(StringUtils.equals(Constants.STR_NO, supplyRoomConfig.getForeignTousseIsSecondRecycle())){ + //外来器械不需要二次回收时,判断拆分小包是否转换申请单,转换申请单的拆分小包才允许归还 + if(!StringUtils.equals(foreignTousseUseRecordStatusMap.get(tousseDefinition.getId()), UseRecord.STATUS_APPLIED)){ + throw new SystemException(String.format("%s还没有转换申请单,不能归还!", tousseDefinition.getName())); + } + }else{ + if(!tousseDefinitionIdRecyclingItemIdMap.containsKey(tousseDefinition.getId())){ + throw new SystemException(String.format("%s还没有回收,不能归还!", tousseDefinition.getName())); + } } tousseDefinition.setPackageStatus(TousseItem.PACKAGE_STATUS_RETURNED); @@ -5416,6 +5435,50 @@ } /** + * 根据器械包定义查询使用记录申请状态 + * @param returnTousseDefinitionList 待归还的器械包定义 + * @return + */ + private Map getTousseDefinitionUseRecordStatusMap(List returnTousseDefinitionList) { + Map useRecordStatusMap = new HashMap(); + if(CollectionUtils.isEmpty(returnTousseDefinitionList)){ + return useRecordStatusMap; + } + List foreignTousseDefinitionIdList = new ArrayList(); + for (TousseDefinition tousseDefinition : returnTousseDefinitionList) { + foreignTousseDefinitionIdList.add(tousseDefinition.getId()); + } + if(CollectionUtils.isEmpty(foreignTousseDefinitionIdList)){ + return useRecordStatusMap; + } + StringBuffer sqlBuffer = new StringBuffer(); + sqlBuffer.append("select ti.tousseDefinition_id, ur.status from "); + sqlBuffer.append(TousseInstance.class.getSimpleName()); + sqlBuffer.append(" ti join "); + sqlBuffer.append(UseRecord.class.getSimpleName()); + sqlBuffer.append(" ur on ur.id = ti.useRecord_id where "); + sqlBuffer.append(SqlUtils.getNonStringFieldInLargeCollectionsPredicate("ti.tousseDefinition_id", foreignTousseDefinitionIdList)); + + ResultSet rs = null; + try { + rs = objectDao.executeSql(sqlBuffer.toString()); + while(rs.next()){ + Long id = rs.getLong("tousseDefinition_id"); + String status = rs.getString("status"); + useRecordStatusMap.put(id, status); + } + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e.getMessage()); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + + return useRecordStatusMap; + } + + /** * 查询申请项的已归还材料数量 * @param tousseItemList 待归还的申请项 * @return @@ -5431,16 +5494,17 @@ } StringBuffer sqlBuffer = new StringBuffer(); - sqlBuffer.append("select parentID, materialAmount from "); + sqlBuffer.append("select parentID, sum(materialAmount) returnMaterialAmount from "); sqlBuffer.append(TousseDefinition.class.getSimpleName()); sqlBuffer.append(" where packageStatus = '已归还' and " + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("parentID", tousseDefinitionIdList)); + sqlBuffer.append(" group by parentID"); ResultSet rs = null; try { rs = objectDao.executeSql(sqlBuffer.toString()); while(rs.next()){ Long id = rs.getLong("parentID"); - Integer materialAmount = rs.getInt("materialAmount"); + Integer materialAmount = rs.getInt("returnMaterialAmount"); tousseDefinitionIdReturnMaterialAmountMap.put(id, materialAmount); } } catch (Exception e) { @@ -5488,6 +5552,31 @@ DatabaseUtil.closeResultSetAndStatement(rs); } + //小包还没有二次回收,再判断是否大包二次回收 + if(MapUtils.isEmpty(tousseDefinitionIdRecyclingItemIdMap)){ + StringBuffer parentTDSqlBuffer = new StringBuffer(); + parentTDSqlBuffer.append("select ri.id recyclingItemId, td.id tousseDefinitionId from "); + parentTDSqlBuffer.append(RecyclingItem.class.getSimpleName()); + parentTDSqlBuffer.append(" ri join TousseDefinition td on td.parentID = ri.tousseDefinitionId "); + parentTDSqlBuffer.append(" join RecyclingRecord rr on rr.id = ri.recyclingRecord_id "); + parentTDSqlBuffer.append(" where rr.recyclingTimes = " + RecyclingRecord.RECYCLINGTIMES_TWO + " and " + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("td.id", tousseDefinitionIdList)); + + ResultSet parentTDRs = null; + try { + parentTDRs = objectDao.executeSql(parentTDSqlBuffer.toString()); + while(parentTDRs.next()){ + Long recyclingItemId = parentTDRs.getLong("recyclingItemId"); + Long tousseDefinitionId = parentTDRs.getLong("tousseDefinitionId"); + tousseDefinitionIdRecyclingItemIdMap.put(tousseDefinitionId, recyclingItemId); + } + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e.getMessage()); + } finally { + DatabaseUtil.closeResultSetAndStatement(parentTDRs); + } + } + return tousseDefinitionIdRecyclingItemIdMap; } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r40302 -r40320 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 40302) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 40320) @@ -9172,9 +9172,10 @@ //查询清洗状态 StringBuffer washSqlBuffer = new StringBuffer(); - washSqlBuffer.append("select ci.tousseDefinitionID, ci.id classifiedItemId, ci.materialAmount, wdr.washStatus from "); + washSqlBuffer.append("select ci.tousseDefinitionID, ci.id classifiedItemId, ci.materialAmount, wdr.washStatus, rr.recyclingTimes from "); washSqlBuffer.append(ClassifiedItem.class.getSimpleName()); - washSqlBuffer.append(" ci join ClassifyBasket_WashRecord cbwr on cbwr.ClassifyBasket_ID = ci.classifybasket_id "); + washSqlBuffer.append(" ci join RecyclingRecord rr on ci.recyclingRecordId = rr.id "); + washSqlBuffer.append(" join ClassifyBasket_WashRecord cbwr on cbwr.ClassifyBasket_ID = ci.classifybasket_id "); washSqlBuffer.append(" join "); washSqlBuffer.append(WashAndDisinfectRecord.class.getSimpleName()); washSqlBuffer.append(" wdr on wdr.id = cbwr.WashAndDisinfectRecord_ID where "); @@ -9190,7 +9191,13 @@ Long tousseDefinitionID = rs.getLong("tousseDefinitionID"); Integer materialAmount = rs.getInt("materialAmount"); String washStatus = rs.getString("washStatus"); + Integer recyclingTimes = rs.getInt("recyclingTimes"); + if(recyclingTimes.intValue() == RecyclingRecord.RECYCLINGTIMES_TWO.intValue()){ + //不查询二次回收的清洗记录 + continue; + } + if(classifiedItemIdSet.contains(classifiedItemId)){ continue; }