Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java =================================================================== diff -u -r13784 -r13817 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 13784) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 13817) @@ -362,10 +362,69 @@ throw new RuntimeException(String.format( "使用记录必须为未审核状态才能修改,当前状态为[%s]!", curUseRecord.getStatus())); } - //一次性物品处理 + // 1.一次性物品处理 curUseRecord.setDiposableGoodsItems(modified.getDiposableGoodsItems()); - // 暂时只需要锁定页面上的,当前记录对应的因为不会修改,所以不需要锁定 + // 2.高值耗材处理:已从使用记录中移除的高值耗材其状态变为已发货,使用记录id置null;本次修改使用记录新录入的高值耗材其状态变为已使用 + List originalExpensiveDisposablegoodsBarcode = new ArrayList(); + List modifiedExpensiveDisposablegoodsBarcode = new ArrayList(); + List modifiedDiposableGoodsItem = modified.getDiposableGoodsItems(); + //保存使用记录时判断该高值耗材是否已录过使用记录(即在UseDisposableGoodsItem表存中,按barcode查询),防止多人同时操作同一条码。录使用记录扫描高值耗材条码时也要校验,普通物品暂不用校验 + if(CollectionUtils.isNotEmpty(modifiedDiposableGoodsItem)){ + for(UseDiposableGoodsItem ugi : modifiedDiposableGoodsItem){ + //判断是否为高值耗材 + BarcodeDevice bd = barcodeManager.getBarcodeByBarcode(ugi.getBarcode()); + if(bd != null && bd instanceof ExpensiveDisposablegoods){ + ExpensiveDisposablegoods ed = (ExpensiveDisposablegoods)bd; + if(ed.getUserecordId() != null && ed.getUserecordId().longValue() != modified.getId().intValue()){ + throw new RuntimeException(String.format("条码为[%s]的高值耗材已被使用,不能重复录入使用记录", ugi.getBarcode())); + } + modifiedExpensiveDisposablegoodsBarcode.add(bd.getBarcode()); + } + } + } + List originalDiposableGoodsItem = original.getDiposableGoodsItems(); + if(CollectionUtils.isNotEmpty(originalDiposableGoodsItem)){ + for(UseDiposableGoodsItem ugi : originalDiposableGoodsItem){ + //判断是否为高值耗材 + BarcodeDevice bd = barcodeManager.getBarcodeByBarcode(ugi.getBarcode()); + if(bd != null && bd instanceof ExpensiveDisposablegoods){ + originalExpensiveDisposablegoodsBarcode.add(bd.getBarcode()); + } + } + } + //新录入的高值耗材条码集 + Collection newExpensiveDisposablegoodsBarcode = CollectionUtils.subtract( + modifiedExpensiveDisposablegoodsBarcode, originalExpensiveDisposablegoodsBarcode); + //待移除的高值耗材条码集 + Collection deletedExpensiveDisposablegoodsBarcode = CollectionUtils.subtract( + originalExpensiveDisposablegoodsBarcode, modifiedExpensiveDisposablegoodsBarcode); + + if(CollectionUtils.isNotEmpty(newExpensiveDisposablegoodsBarcode)){ + for(String barcode : newExpensiveDisposablegoodsBarcode){ + BarcodeDevice bd = barcodeManager.getBarcodeByBarcode(barcode); + if(bd != null && bd instanceof ExpensiveDisposablegoods){ + ExpensiveDisposablegoods ed = (ExpensiveDisposablegoods)bd; + ed.setUserecordId(modified.getId()); + ed.setStatus(ExpensiveDisposablegoods.STATUS_USED); + objectDao.saveOrUpdate(ed); + } + } + } + + if(CollectionUtils.isNotEmpty(deletedExpensiveDisposablegoodsBarcode)){ + for(String barcode : deletedExpensiveDisposablegoodsBarcode){ + BarcodeDevice bd = barcodeManager.getBarcodeByBarcode(barcode); + if(bd != null && bd instanceof ExpensiveDisposablegoods){ + ExpensiveDisposablegoods ed = (ExpensiveDisposablegoods)bd; + ed.setUserecordId(null); + ed.setStatus(ExpensiveDisposablegoods.STATUS_DELIVERED); + objectDao.saveOrUpdate(ed); + } + } + } + + // 3.器械包处理:暂时只需要锁定页面上的,当前记录对应的因为不会修改,所以不需要锁定 Map tousseInstancesMap = new HashMap(); List originalItemList = original .getTousseInstanceList(); @@ -429,6 +488,7 @@ objectDao.flush(); } } + // 更新使用记录属性 updateUseRecordProperties(original, modified, curUseRecord); // 修改使用记录,设置修改时间 Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java =================================================================== diff -u -r13719 -r13817 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java (.../TousseInstanceAction.java) (revision 13719) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java (.../TousseInstanceAction.java) (revision 13817) @@ -362,6 +362,10 @@ BarcodeDevice bd = barcodeManager.getBarcodeByBarcode(barcode); if(bd != null && bd instanceof ExpensiveDisposablegoods){ ExpensiveDisposablegoods ed = (ExpensiveDisposablegoods)bd; + if (useRecordID.equals(String + .valueOf(ed.getUserecordId()))) { + continue; + } if(!ExpensiveDisposablegoods.STATUS_DELIVERED.equals(ed.getStatus())){ result = "{success:false,barcode:" + barcode + ", tousseType:\"" + DisposableGoods.TYPE_EXPENSIVEDIPOSABLEGOODS +"\"}"; } Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java =================================================================== diff -u -r13689 -r13817 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java (.../UseRecordAction.java) (revision 13689) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java (.../UseRecordAction.java) (revision 13817) @@ -502,7 +502,11 @@ .findTousseInstanceListByUseRecordId(Long.valueOf(id)); if (tousseInstances != null) { for (TousseInstance t : tousseInstances) { - t.setStatus(TousseInstance.STATUS_SHIPPED);// 还原器械包状态 + if (t.getSignedDate() != null) { + t.setStatus(TousseInstance.STATUS_SIGNED); + } else { + t.setStatus(TousseInstance.STATUS_SHIPPED); + } t.setUseRecord_id(null);// 清除关联关系,并没有把器械包删除 } }