Index: ssts-web/src/main/webapp/disinfectsystem/packing/directPacking.js =================================================================== diff -u -r17824 -r20264 --- ssts-web/src/main/webapp/disinfectsystem/packing/directPacking.js (.../directPacking.js) (revision 17824) +++ ssts-web/src/main/webapp/disinfectsystem/packing/directPacking.js (.../directPacking.js) (revision 20264) @@ -128,6 +128,90 @@ barcodeField.setValue(); } + function loadIdCardByBarcodeForRepacking(barcodeField){ + var barcode = barcodeField.getValue(); + PackingTableManager.loadIdCardByBarcodeForRepacking(barcode,function(resultJsonStr){ + var tousseInfo = JSON.parse(resultJsonStr); + if(tousseInfo.success){ + var tousseId = tousseInfo.tousseDefinitionId; + var tousseName = tousseInfo.tousseName; + var tousseType = tousseInfo.tousseType; + Ext.getCmp('idCardBarcode').setValue(tousseInfo.idCardId); + Ext.getCmp('idCardDefinitionId').setValue(tousseInfo.idCardDefinitionId); + Ext.getCmp('idCardName').setValue(tousseName); + Ext.getCmp('tousseName').setValue(tousseName); + Ext.getCmp('tousseBarcode').setValue(tousseInfo.barcode); + Ext.getCmp('operator').setValue(tousseInfo.operator); + Ext.getCmp('reviewer').setValue(tousseInfo.reviewer); + Ext.getCmp('packageType').setValue(tousseInfo.packageType); + Ext.getCmp('sterilingType1').setValue(tousseInfo.sterilingType); +// Ext.getCmp('disinfectionDate').setValue(tousseInfo.sterileStartDate); + Ext.getCmp('packAmount').setValue(1); + Ext.getCmp('isThereIdentificationCard').setValue('是'); + + Ext.getCmp('tempTousseType').setValue(tousseType); + loadImage(tousseId,tousseName); + loadMaterials(tousseId); + loadTousseInfo(tousseId); + directPackingTousseDefinitionId = tousseId; + + Ext.getCmp('operatorBarcode').focus(); + } + else + { + showResult(tousseInfo.message); + Ext.getCmp('idCardName').setValue(); + } + }); + barcodeField.setValue(); + } + + function loadTousseByBarcode(barcodeField){ + var barcode = barcodeField.getValue(); + PackingTableManager.loadTousseByBarcodeForRepacking(barcode,function(resultJsonStr){ + var tousseInfo = JSON.parse(resultJsonStr); + if(tousseInfo.success){ + var tousseId = tousseInfo.tousseDefinitionId; + var tousseName = tousseInfo.tousseName; + var tousseType = tousseInfo.tousseType; +// Ext.getCmp('idCardBarcode').setValue(tousseInfo.idCardId); +// Ext.getCmp('idCardDefinitionId').setValue(tousseInfo.idCardDefinitionId); +// Ext.getCmp('idCardName').setValue(tousseName); + Ext.getCmp('tousseName').setValue(tousseName); + Ext.getCmp('tousseBarcode').setValue(barcode); + Ext.getCmp('operator').setValue(tousseInfo.operator); + Ext.getCmp('reviewer').setValue(tousseInfo.reviewer); + Ext.getCmp('packageType').setValue(tousseInfo.packageType); + Ext.getCmp('sterilingType1').setValue(tousseInfo.sterilingType); +// Ext.getCmp('disinfectionDate').setValue(tousseInfo.sterileStartDate); + + Ext.getCmp('packAmount').setValue(1); +// Ext.getCmp('isThereIdentificationCard').setValue('是'); + + Ext.getCmp('tempTousseType').setValue(tousseType); + loadImage(tousseId,tousseName); + loadMaterials(tousseId); + loadTousseInfo(tousseId); + directPackingTousseDefinitionId = tousseId; + + Ext.getCmp('operatorBarcode').focus(); + } + else + { + showResult(tousseInfo.message); + Ext.getCmp('idCardName').setValue(); + } + }); + barcodeField.setValue(); + } + + function isDirectPackingMode(){ + var packingMode = Ext.getCmp('packingMode_id').getValue(); + if(packingMode == 'directPacking'){ + return true; + } + return false; + } function loadUserByBarcode(barcodeField,userNameField,userCodeField,focusField){ if(userNameField == null || userCodeField == null || barcodeField == null){ @@ -641,9 +725,61 @@ name : 'continueOnVirtualBasketInsufficient', value : '' },{ + xtype : 'hidden', + id : 'tousseBarcode', + name : 'tousseBarcode' + },{ columnWidth : .33, layout : 'form', cls:'edit-5char-labelwidth', + items : [{ + xtype:'combo', + id : 'packingMode_id', + name : 'packingMode', + hiddenName:'packingMode', + fieldLabel : '装配模式', + valueField : 'packingModeCode', + displayField : 'packingModeName', + triggerAction : 'all', + width : 80, + allowBlank : true, + editable : false, + value:'directPacking', + store : new Ext.data.SimpleStore({ + fields : ['packingModeCode', 'packingModeName' ], + data : [['directPacking','自定义装配'],['repacking','重新装配']] + }), + mode:'local', + forceSelection : true, + triggerAction : 'all', + listeners : { + select : function(combo, record, index){ + //alert(record.get("scanModeCode")); + var packingMode = record.get("packingModeCode"); + //首尾条码全部清空,且让首条码得到焦点 + Ext.getCmp('idCardName').setValue(""); + Ext.getCmp('sterilingType1').setValue(""); + Ext.getCmp('packageType').setValue(""); + Ext.getCmp('tousseName').setValue(""); + if(packingMode == 'directPacking'){ + Ext.getCmp('tousseName').getEl().dom.readOnly = false; + Ext.getCmp('packAmount').getEl().dom.readOnly = false; + + Ext.getCmp('tousseBarcodeCmp').hide(); + }else{ + Ext.getCmp('tousseName').getEl().dom.readOnly = true; + Ext.getCmp('packAmount').getEl().dom.readOnly = true; + Ext.getCmp('tousseBarcodeCmp').show(); + } +// Ext.getCmp('scanText').focus(); + } + }, + anchor : '100%' + }] + },{ + columnWidth : .33, + layout : 'form', + cls:'edit-5char-labelwidth', hidden : sstsConfig.disableIdCard, items : [{ xtype : 'textfield', @@ -652,7 +788,11 @@ listeners : { specialkey : function(thiz, e){ if(e.getKey() == 13){ - loadIdCardByBarcode(thiz); + if(isDirectPackingMode()){ + loadIdCardByBarcode(thiz); + }else{ + loadIdCardByBarcodeForRepacking(thiz); + } } } }, @@ -675,6 +815,26 @@ }] },{ + columnWidth : .33, + layout : 'form', + cls:'edit-5char-labelwidth', + + items : [{ + xtype : 'textfield', + fieldLabel : "器械包条码", + allowBlank : true, + id:'tousseBarcodeCmp', + hidden: true, + listeners : { + specialkey : function(thiz, e){ + if(e.getKey() == 13){ + loadTousseByBarcode(thiz); + } + } + }, + anchor : '100%' + }] + },{ columnWidth : .33, layout : 'form', cls:'edit-5char-labelwidth', @@ -1038,7 +1198,12 @@ }else{ Ext.getCmp('packageType').enable(); } - } + }, + beforequery : function(e) { + if(!isDirectPackingMode()){ + e.cancel = true; + } + } } }] },{ Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r20200 -r20264 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 20200) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 20264) @@ -5407,7 +5407,14 @@ String departCoding = request.getParameter("departCoding");// 临床科室编码 String continueOnVirtualBasketInsufficient = request .getParameter("continueOnVirtualBasketInsufficient");// 虚拟篮筐不够时是否继续 - + String packingMode = request.getParameter("packingMode"); + String tousseBarcode = request.getParameter("tousseBarcode"); + if(StringUtils.equals(packingMode, "repacking")){ + if(StringUtils.isBlank(tousseBarcode)){ + throw new RuntimeException(String.format("参数非法,重新装配必须包含器械包条码!", + tousseName)); + } + } SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date currentDate = new Date(); Date sterileDate = currentDate; @@ -5539,6 +5546,14 @@ packingRecord.setTousseDefinitionId(td.getId()); //器械包定义的id saveOrUpdate(packingRecord); + TousseInstance oldTousseInstance = null; + if(StringUtils.isNotBlank(tousseBarcode)){ + oldTousseInstance = tousseInstanceManager.getTousseInstanceByBarcode(tousseBarcode); + if(oldTousseInstance == null){ + throw new RuntimeException("器械包" + tousseBarcode + + " 已不存在!"); + } + } // 打印条码、保存包实例 List tousseInstanceList = new ArrayList(); @@ -5645,7 +5660,24 @@ e.printStackTrace(); } } - + // 设置清洗和回收信息,用于重新装配 + if(oldTousseInstance != null){ + tousseInstance.setClassifyBasketIds(oldTousseInstance.getClassifyBasketIds()); + tousseInstance.setClassifyBasket_id(oldTousseInstance.getClassifyBasket_id()); + tousseInstance.setDisinfectIdentification(oldTousseInstance.getDisinfectIdentification()); + tousseInstance.setDisinfectProgram(oldTousseInstance.getDisinfectProgram()); + tousseInstance.setWashOperator(oldTousseInstance.getWashOperator()); + tousseInstance.setWashOperatorCode(oldTousseInstance.getWashOperatorCode()); + tousseInstance.setWashStartTime(oldTousseInstance.getWashStartTime()); + tousseInstance.setWashEndTime(oldTousseInstance.getWashEndTime()); + tousseInstance.setWashBasket(oldTousseInstance.getWashBasket()); + + tousseInstance.setRecyclingOperator(oldTousseInstance.getRecyclingOperator()); + tousseInstance.setRecyclingUser(oldTousseInstance.getRecyclingUser()); + tousseInstance.setRecyclingItemId(oldTousseInstance.getRecyclingItemId()); + tousseInstance.setRecyclingRecordId(oldTousseInstance.getRecyclingRecordId()); + tousseInstance.setRecyclingStatus(oldTousseInstance.getRecyclingStatus()); + } tousseInstanceManager.saveOrUpdate(tousseInstance); tousseInstanceList.add(tousseInstance); Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/dwr/table/PackingTableManager.java =================================================================== diff -u -r19166 -r20264 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/dwr/table/PackingTableManager.java (.../PackingTableManager.java) (revision 19166) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/dwr/table/PackingTableManager.java (.../PackingTableManager.java) (revision 20264) @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; +import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -36,8 +37,10 @@ import com.forgon.disinfectsystem.entity.basedatamanager.taskGroup.TaskGroup; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.idcarddefinition.IDCardDefinition; import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; import com.forgon.disinfectsystem.entity.packing.PackingRecord; +import com.forgon.disinfectsystem.entity.packing.PackingTask; import com.forgon.disinfectsystem.expirationdateinfo.service.ExpirationDateInfoManager; import com.forgon.disinfectsystem.idcardinstance.service.IDCardInstanceManager; import com.forgon.disinfectsystem.idcardinstance.util.IDCardInstanceUtils; @@ -610,4 +613,95 @@ public String loadUnSupplementMaterialsByTousseInstance(String id){ return packingManager.getErrorDamgeDetailByTousseInstanceId(id).toString(); } + // 自定义装配扫描标识牌条码 + public String loadIdCardByBarcodeForRepacking(String barcode){ + + JSONObject obj = new JSONObject(); + try { + if (StringUtils.isBlank(barcode)) { + throw new RuntimeException("标识牌条码不能为空!"); + } + BarcodeDevice barcodeDevice = barcodeManager + .getBarcodeByBarcode(barcode); + if (barcodeDevice == null) { + throw new RuntimeException(String.format("未找到条码为%s的标识牌!", + barcode)); + } + if (!(barcodeDevice instanceof IDCardInstance)) { + throw new RuntimeException(String.format("条码为%s不是标识牌!", + barcode)); + } + + IDCardInstance idCardInstance = (IDCardInstance) barcodeDevice; + idCardInstance.isCanUse(objectDao, true); + + TousseInstance tousseInstance = IDCardInstanceUtils.getLastOperatedTousseInstance(objectDao, idCardInstance); + if (tousseInstance == null) { + throw new RuntimeException(String.format("未找到标识牌绑定的实例!", + barcode)); + } + TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); + obj.put("barcode", tousseInstance.getBarcode()); + obj.put("tousseDefinitionId", tousseDefinition.getId()); + obj.put("tousseName", tousseDefinition.getName()); + obj.put("tousseType", tousseDefinition.getTousseType()); + obj.put("idCardId", idCardInstance.getId()); + obj.put("idCardBarcode", idCardInstance.getBarcode()); + obj.put("idCardDefinitionId", idCardInstance.getIdCardDefinitionID()); + + obj.put("operator", tousseInstance.getOperator()); + obj.put("reviewer", tousseInstance.getReviewer()); + obj.put("packageType", tousseInstance.getPackageType()); + obj.put("sterilingType", tousseInstance.getSterilingType()); + obj.put("sterileStartDate", tousseInstance.getSterileStartDate()); + + JSONUtil.addSuccess(obj, true); + } catch (Exception e) { + e.printStackTrace(); + JSONUtil.addMessage(obj, e.getMessage()); + JSONUtil.addSuccess(obj, false); + } + return obj.toString(); + } + // 自定义装配扫描器械包条码 + public String loadTousseByBarcodeForRepacking(String barcode){ + + JSONObject obj = new JSONObject(); + try { + if (StringUtils.isBlank(barcode)) { + throw new RuntimeException("器械包条码不能为空!"); + } + BarcodeDevice barcodeDevice = barcodeManager + .getBarcodeByBarcode(barcode); + if (barcodeDevice == null) { + throw new RuntimeException(String.format("未找到条码为%s的条码对象!", + barcode)); + } + if (!(barcodeDevice instanceof TousseInstance)) { + throw new RuntimeException(String.format("条码%s不是器械包!", + barcode)); + } + + TousseInstance tousseInstance = (TousseInstance) barcodeDevice; + + TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); + obj.put("barcode", tousseInstance.getBarcode()); + obj.put("tousseDefinitionId", tousseDefinition.getId()); + obj.put("tousseName", tousseDefinition.getName()); + obj.put("tousseType", tousseDefinition.getTousseType()); +// obj.put("idCardBarcode", idCardInstance.getBarcode()); +// obj.put("idCardDefinitionId", idCardInstance.getIdCardDefinitionID()); + obj.put("operator", tousseInstance.getOperator()); + obj.put("reviewer", tousseInstance.getReviewer()); + obj.put("packageType", tousseInstance.getPackageType()); + obj.put("sterilingType", tousseInstance.getSterilingType()); + obj.put("sterileStartDate", tousseInstance.getSterileStartDate()); + JSONUtil.addSuccess(obj, true); + } catch (Exception e) { + e.printStackTrace(); + JSONUtil.addMessage(obj, e.getMessage()); + JSONUtil.addSuccess(obj, false); + } + return obj.toString(); + } }