Index: ssts-web/src/main/webapp/disinfectsystem/useRecord/useRecordForm.js =================================================================== diff -u -r16433 -r16625 --- ssts-web/src/main/webapp/disinfectsystem/useRecord/useRecordForm.js (.../useRecordForm.js) (revision 16433) +++ ssts-web/src/main/webapp/disinfectsystem/useRecord/useRecordForm.js (.../useRecordForm.js) (revision 16625) @@ -159,22 +159,31 @@ showResult('该器械包不属于'+top.Ext.getCmp('depart').getValue()+'!'); } }*/else { - var record = new addTousseInstance({ - id : goodsInfo.id, - barcode : goodsInfo.barcode, - amount : 1, - batchNo : '', - tousseDefinitionName : goodsInfo.tousseDefinitionName, - showTousseName : goodsInfo.showTousseName, - packageType : goodsInfo.packageType, - validUntil : validTime, - tousseType : goodsInfo.tousseType, - foreignTousseApp_id : goodsInfo.foreignTousseApp_id, - includeImplant : goodsInfo.includeImplant - }); - tousseInstanceStore.add(record); - useAmount++; - top.Ext.getCmp('useAmount').setValue(useAmount); + function addTousse(){ + var record = new addTousseInstance({ + id : goodsInfo.id, + barcode : goodsInfo.barcode, + amount : 1, + batchNo : '', + tousseDefinitionName : goodsInfo.tousseDefinitionName, + showTousseName : goodsInfo.showTousseName, + packageType : goodsInfo.packageType, + validUntil : validTime, + tousseType : goodsInfo.tousseType, + foreignTousseApp_id : goodsInfo.foreignTousseApp_id, + includeImplant : goodsInfo.includeImplant + }); + tousseInstanceStore.add(record); + useAmount++; + top.Ext.getCmp('useAmount').setValue(useAmount); + } + if(sstsConfig.olderTousseComfirmForUserecord && goodsInfo.older){ + if(confirm(goodsInfo.older.tousseName+"[条码:"+goodsInfo.older.barcode+"]更接近失效期,是否继续?")){ + addTousse(); + } + }else{ + addTousse(); + } } } else { if (sstsConfig.notSignedItemsCanRegistUseRecord == false){ Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java =================================================================== diff -u -r15198 -r16625 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java (.../UseRecordAction.java) (revision 15198) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java (.../UseRecordAction.java) (revision 16625) @@ -585,6 +585,13 @@ } else if(!TousseInstance.STATUS_SHIPPED.equals(ti.getStatus()) && !TousseInstance.STATUS_SIGNED.equals(ti.getStatus())){ obj.put("msg", "该器械包状态为" + ti.getStatus() + ",不能录入使用记录!"); } else { + List acceptStatus = new ArrayList<>(); + boolean notSignedItemsCanRegistUseRecord = CssdUtils.getSystemSetConfigByNameBool("notSignedItemsCanRegistUseRecord"); + if(notSignedItemsCanRegistUseRecord){ + acceptStatus.add(TousseInstance.STATUS_SHIPPED); + } + acceptStatus.add(TousseInstance.STATUS_SIGNED); + TousseInstance older = tousseInstanceManager.getExpireNearest(ti, acceptStatus); //判断当前用户登录科室是否存在共用科室配置 if(CollectionUtils.isNotEmpty(goodsDepartShareConfigManager.getGoodsShareDepartList(currentOrgUnitCode))){ //判断包实例所属科室是否与当前用户登录科室配置物品共享 @@ -645,6 +652,12 @@ obj.put("msg", "该器械包所属科室为" + ti.getLocationForDisplay() + ",不能录入使用记录!"); } } + if(older != null){ + JSONObject json = new JSONObject(); + json.put("barcode", older.getBarcode()); + json.put("tousseName", older.getTousseDefinitionName()); + obj.put("older", json); + } } } else if (bd instanceof ExpensiveDisposablegoods) { // 高值耗材 Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java =================================================================== diff -u -r16621 -r16625 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 16621) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 16625) @@ -359,5 +359,13 @@ */ public List getTousseInstanceByBasket(String basketBarcode, Integer pageNow, Integer pageSize); + + /** + * 获取跟对应包实例同一个包定义的,失效期在此包实例之前,也是最靠近失效期的包实例对象 + * @param tousseInstance 源包实例 + * @param acceptStatus 有效的包实例的状态 + * @return + */ + public TousseInstance getExpireNearest(TousseInstance tousseInstance,List acceptStatus); } Index: ssts-web/src/main/webapp/disinfectsystem/config/zsszyy/config.js =================================================================== diff -u -r16567 -r16625 --- ssts-web/src/main/webapp/disinfectsystem/config/zsszyy/config.js (.../config.js) (revision 16567) +++ ssts-web/src/main/webapp/disinfectsystem/config/zsszyy/config.js (.../config.js) (revision 16625) @@ -83,5 +83,7 @@ //不要语音播报签收成功的包名称,如果配置为true,则签收器械包成功时不提示,失败时提示失败信息 donotSpeakTousseSignSuccessMessage:true, //当外来器械未归还时能否申请 - canApplyForForeignTousseNotReturn : false + canApplyForForeignTousseNotReturn : false, + //使用记录扫描条码,是否提示更接近失效期的包实例 + olderTousseComfirmForUserecord:true } \ No newline at end of file Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r16621 -r16625 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 16621) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 16625) @@ -2462,4 +2462,20 @@ Integer firstIndex = pageSize*(pageNow - 1); return objectDao.findBySql(ReviewedBasket.class.getSimpleName(), sql, firstIndex, pageSize, "id desc"); } + + @Override + public TousseInstance getExpireNearest(TousseInstance tousseInstance,List acceptStatus) { + if(tousseInstance == null || tousseInstance.getTousseDefinition() == null){ + return null; + } + String hql = "po.tousseDefinition.id=" + tousseInstance.getTousseDefinition().getId(); + if(DatabaseUtil.isPoIdValid(tousseInstance.getId())){ + hql += " and po.id <> " + tousseInstance.getId(); + } + hql += " and " + SqlUtils.getStringFieldInCollectionsPredicate("po.status", acceptStatus); + hql += " and po.validUntil > " + dateQueryAdapter.dateAdapter(new Date()); + hql += " and po.validUntil < " + dateQueryAdapter.dateAdapter(tousseInstance.getValidUntil()); + hql += " order by po.validUntil asc"; + return getFirst(hql); + } }