Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java =================================================================== diff -u -r13522 -r13530 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java (.../UseRecordAction.java) (revision 13522) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java (.../UseRecordAction.java) (revision 13530) @@ -100,10 +100,6 @@ this.useRecordManager = useRecordManager; } - public DiposableGoodsManager getDiposableGoodsManager() { - return diposableGoodsManager; - } - public void setDiposableGoodsManager(DiposableGoodsManager diposableGoodsManager) { this.diposableGoodsManager = diposableGoodsManager; } @@ -650,6 +646,14 @@ obj.put("error", String.format("条码为[%s]的高值耗材批次定义已被删除", barcode)); return; } + + //扫描时判断该高值耗材是否已录过使用记录(即在UseDisposableGoodsItem表存中,按barcode查询),保存时也要校验,防止多人同时操作同一条码。普通物品暂不用校验 + if(CollectionUtils.isNotEmpty(useRecordManager.getUseDiposableGoodsItemList(barcode))){ + obj.put("success", false); + obj.put("error", String.format("条码为[%s]的高值耗材已被使用,不能重复添加", barcode)); + return; + } + obj.put("barcode", bd.getBarcode()); obj.put("showTousseName", CssdUtils.getDiposableGoodsName(batch.getDiposableGoods())); obj.put("batchNo", batch.getBatchNumber()); Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManager.java =================================================================== diff -u -r13522 -r13530 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManager.java (.../UseRecordManager.java) (revision 13522) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManager.java (.../UseRecordManager.java) (revision 13530) @@ -27,6 +27,7 @@ import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; +import com.forgon.disinfectsystem.entity.useRecord.UseDiposableGoodsItem; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.disinfectsystem.vo.UseMaterialGoodsItem; @@ -137,6 +138,13 @@ public String getUseRecordJsonById(String id); /** + * 根据一次性物品定义id查询一次性物品使用明细 + * @param barcode + * @return + */ + public List getUseDiposableGoodsItemList(String barcode); + + /** * 根据发货单的id查询发货单信息 * 由于InvoiceManager所在的发货模块没有被使用记录模块依赖导致不能注入,所以在此定义方法 * @param id Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java =================================================================== diff -u -r13522 -r13530 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 13522) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 13530) @@ -28,11 +28,14 @@ import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.model.BarcodeDevice; import com.forgon.directory.vo.LoginUserData; +import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; import com.forgon.disinfectsystem.datasynchronization.service.DataSynchronizationManager; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveDisposablegoods; import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; @@ -83,6 +86,8 @@ private JdbcTemplate pathJdbcTemplate; + private BarcodeManager barcodeManager; + //private FindPatientInfoByHospitalNumDao findPatientInfoByHospitalNumDao; private DataSynchronizationManager dataSynchronizationManager; @@ -135,6 +140,10 @@ this.dataSynchronizationManager = dataSynchronizationManager; } + public void setBarcodeManager(BarcodeManager barcodeManager) { + this.barcodeManager = barcodeManager; + } + public void deleteUseRecordById(String id) { objectDao.delete(getUseRecordById(id)); } @@ -161,6 +170,19 @@ public void saveOrUpdate(UseRecord useRecord) { objectDao.saveOrUpdate(useRecord); + //对高值耗材设置状态为已使用,并记录使用记录的id + if(CollectionUtils.isNotEmpty(useRecord.getDiposableGoodsItems())){ + for(UseDiposableGoodsItem ugi : useRecord.getDiposableGoodsItems()){ + //判断是否为高值耗材 + BarcodeDevice bd = barcodeManager.getBarcodeByBarcode(ugi.getBarcode()); + if(bd != null && bd instanceof ExpensiveDisposablegoods){ + ExpensiveDisposablegoods edg = (ExpensiveDisposablegoods)bd; + edg.setStatus(ExpensiveDisposablegoods.STATUS_USED); + edg.setUserecordId(useRecord.getId()); + objectDao.saveOrUpdate(edg); + } + } + } } /** @@ -525,6 +547,18 @@ private void saveUseRecord_internal(UseRecord modified) { // 新增使用记录,设置录入时间 modified.setEnteringDate(new Date()); + //保存使用记录时判断该高值耗材是否已录过使用记录(即在UseDisposableGoodsItem表存中,按barcode查询),防止多人同时操作同一条码。录使用记录扫描高值耗材条码时也要校验,普通物品暂不用校验 + if(CollectionUtils.isNotEmpty(modified.getDiposableGoodsItems())){ + for(UseDiposableGoodsItem ugi : modified.getDiposableGoodsItems()){ + //判断是否为高值耗材 + BarcodeDevice bd = barcodeManager.getBarcodeByBarcode(ugi.getBarcode()); + if(bd != null && bd instanceof ExpensiveDisposablegoods){ + if(CollectionUtils.isNotEmpty(getUseDiposableGoodsItemList(ugi.getBarcode()))){ + throw new RuntimeException(String.format("条码为[%s]的高值耗材已被使用,不能重复添加", ugi.getBarcode())); + } + } + } + } saveOrUpdate(modified); Map tousseInstancesMap = new HashMap(); List tousseInstanceList = modified @@ -1679,6 +1713,15 @@ } /** + * 根据一次性物品定义id查询一次性物品使用明细 + * @param barcode + * @return + */ + public List getUseDiposableGoodsItemList(String barcode){ + return objectDao.findBySql(UseDiposableGoodsItem.class.getSimpleName(), " where barcode = '" + barcode + "'"); + } + + /** * 根据发货单的id查询发货单信息 * 由于InvoiceManager所在的发货模块没有被使用记录模块依赖导致不能注入,所以在此定义方法 * @param id Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveDisposablegoods.java =================================================================== diff -u -r13528 -r13530 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveDisposablegoods.java (.../ExpensiveDisposablegoods.java) (revision 13528) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/ExpensiveDisposablegoods.java (.../ExpensiveDisposablegoods.java) (revision 13530) @@ -48,6 +48,8 @@ private Long receiveRecordItemId;// 领用记录item的ID private Long receiveRecordId;// 领用记录的ID + private Long userecordId;//使用记录id + private String status = STATUS_IN_WAREHOUSE; public ExpensiveDisposablegoods() { @@ -170,6 +172,14 @@ this.receiveRecordId = receiveRecordId; } + public Long getUserecordId() { + return userecordId; + } + + public void setUserecordId(Long userecordId) { + this.userecordId = userecordId; + } + public String getStatus() { return status; }