Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java =================================================================== diff -u -r16832 -r16833 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 16832) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 16833) @@ -1950,9 +1950,8 @@ tousseInstanceBarcodeJSONArray.toString(), new TypeToken>() { }.getType()); - for (String barcode : tousseInstanceBarcodes) { - tousseInstanceManager.removeFromBasket(barcode); - } + //由之前的循环单个包实例条码移除改为批量移除 + tousseInstanceManager.removeFromBasket(tousseInstanceBarcodes); return new JSONStringer().object().key("success").value(true) .endObject().toString(); Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r16736 -r16833 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 16736) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 16833) @@ -677,21 +677,32 @@ * 将器械包从它所对应的篮筐中移除 */ @Override - public void removeFromBasket(String barcode) { - TousseInstance tousseInstance = getTousseInstanceByBarcode(barcode); - JSONObject logObj = new JSONObject(); - JSONUtil.modifyPropertyLog(logObj, "reviewBasket_ID", tousseInstance.getReviewBasket_id(),null); - JSONUtil.modifyPropertyLog(logObj, "status",tousseInstance.getStatus(),TousseInstance.STATUS_REVIEWED); - JSONUtil.addLogProperty(logObj, "tousseInstanceId", tousseInstance.getId()); - JSONUtil.addLogProperty(logObj, "tousseInstanceBarcode", tousseInstance.getBarcode()); - JSONUtil.addLogProperty(logObj, "tousseName", tousseInstance.getTousseName()); - JSONUtil.addLogProperty(logObj, "操作","包实例从篮筐中移除"); - appLogManager.saveLog(AcegiHelper.getLoginUser(), "审核模块或者灭菌装载或者灭菌模块", Log.TYPE_DELETE, logObj); - - String sql = String - .format("update TousseInstance set reviewBasket_ID = null, status = '%s' where id = %d", - TousseInstance.STATUS_REVIEWED, tousseInstance.getId()); - objectDao.excuteSQL(sql); + public void removeFromBasket(Collection tousseInstanceBarcodes) { + Query query = objectDao.getHibernateSession().createQuery("from TousseInstance where barcode in (:barcodeList)"); + query.setParameterList("barcodeList", tousseInstanceBarcodes); + @SuppressWarnings("unchecked") + List tousseInstanceList = query.list(); + if(CollectionUtils.isNotEmpty(tousseInstanceList)){ + String[] barcodeArray = new String[tousseInstanceList.size()]; + int i = 0; + for (TousseInstance tousseInstance : tousseInstanceList) { + JSONObject logObj = new JSONObject(); + JSONUtil.modifyPropertyLog(logObj, "reviewBasket_ID", tousseInstance.getReviewBasket_id(),null); + JSONUtil.modifyPropertyLog(logObj, "status",tousseInstance.getStatus(),TousseInstance.STATUS_REVIEWED); + JSONUtil.addLogProperty(logObj, "tousseInstanceId", tousseInstance.getId()); + JSONUtil.addLogProperty(logObj, "tousseInstanceBarcode", tousseInstance.getBarcode()); + JSONUtil.addLogProperty(logObj, "tousseName", tousseInstance.getTousseName()); + JSONUtil.addLogProperty(logObj, "操作","包实例从篮筐中移除"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), "审核模块或者灭菌装载或者灭菌模块", Log.TYPE_DELETE, logObj); + + barcodeArray[i++] = "'" + tousseInstance.getBarcode() + "'"; + } + + String sql = String + .format("update TousseInstance set reviewBasket_ID = null, status = '%s' where id in (select id from barcodeDevice where barcode in (%s))", + TousseInstance.STATUS_REVIEWED, StringUtils.join(barcodeArray, ",")); + objectDao.excuteSQL(sql); + } } Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterileloading/dwr/table/SterileLoadingTableManager.java =================================================================== diff -u -r16408 -r16833 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterileloading/dwr/table/SterileLoadingTableManager.java (.../SterileLoadingTableManager.java) (revision 16408) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterileloading/dwr/table/SterileLoadingTableManager.java (.../SterileLoadingTableManager.java) (revision 16833) @@ -196,19 +196,34 @@ } return json.toString(); } + + /** + * 构造多个器械包的集合的返回json + * @param tousseInstanceList 器械包实例集合 + * @return + */ private JSONObject buildMultiTousseReturnJson(Collection tousseInstanceList){ JSONObject jsonObj = new JSONObject(); if(CollectionUtils.isNotEmpty(tousseInstanceList)){ JSONArray tousses = new JSONArray(); jsonObj.put("returnType", "multiTousseInstancesSuccess"); + //是否包含装载到虚拟篮筐的器械包(如果有则需要返回前台提示) + boolean includeTousseInVirtualBasket = false; for(TousseInstance tousseInstance : tousseInstanceList){ if(tousseInstance != null && StringUtils.equals(AcegiHelper.getLoginUser() .getCurrentOrgUnitCode(), tousseInstance.getOrgUnitCoding())){ JSONObject tousse = tousseInstanceManager.buildTousseInstanceSuccessJson(tousseInstance); tousses.add(tousse); + + //如果包实例的虚拟篮筐编号不为空时,则变量置为true + if(StringUtils.isNotBlank(tousseInstance.getVirtualBasketSeqNum())){ + includeTousseInVirtualBasket = true; + } } } jsonObj.put("tousseInstances", tousses); + + jsonObj.put("includeTousseInVirtualBasket", includeTousseInVirtualBasket); }else{ jsonObj.put("returnType", "noResult"); JSONUtil.addMessage(jsonObj, "没有需要灭菌装载的器械包"); Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java =================================================================== diff -u -r16727 -r16833 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 16727) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 16833) @@ -122,7 +122,11 @@ public void addTousseInstanceToBasket(String basketBarcode, String tousseInstanceBarcode, Collection excludeBarcodes); - public void removeFromBasket(String barcode); + /** + * 灭菌装载移除包实例条码 + * @param tousseInstanceBarcodes 条码集合 + */ + public void removeFromBasket(Collection tousseInstanceBarcodes); public boolean isTousseStatusCorrect(TousseInstance tousseInstance); Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java =================================================================== diff -u -r16764 -r16833 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java (.../TousseInstanceAction.java) (revision 16764) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java (.../TousseInstanceAction.java) (revision 16833) @@ -523,12 +523,19 @@ } /** - * 将器械包从篮筐移出 + * 将器械包从篮筐移出,请求参数为器械包实例条码(多个用分号拼接的方式) */ public void removeFromBasket() { try { String barcode = StrutsParamUtils.getPraramValue("barcode", ""); - tousseInstanceManager.removeFromBasket(barcode); + if(StringUtils.isNotBlank(barcode)){ + String[] barcodeArray = barcode.split(";"); + Collection barcodes = new ArrayList(); + for (int i = 0; i < barcodeArray.length; i++) { + barcodes.add(barcodeArray[i]); + } + tousseInstanceManager.removeFromBasket(barcodes); + } } catch (Exception e) { e.printStackTrace(); } Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationLoadingForm.js =================================================================== diff -u -r16821 -r16833 --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationLoadingForm.js (.../sterilizationLoadingForm.js) (revision 16821) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationLoadingForm.js (.../sterilizationLoadingForm.js) (revision 16833) @@ -27,6 +27,64 @@ currentScanMode = sstsConfig.sterilePageScanMode; } +/** + * 移除篮筐物品统计的数据 + */ +function removeStasticsGridItem() { + var rows = Ext.getCmp('stasticsGrid').getSelectionModel().getSelections(); + if (rows) { + for ( var i = 0; i < rows.length; i++) { + var row = rows[i]; + var stasticsDepart = row.data.depart; + var stasticsTousseName = row.data.tousseDefinitionName; + //待移除的包实例条码 + var waitRemovingBarcodeArray = []; + //循环篮筐物品明细grid里的行数据 + var tousseGridData = Ext.getCmp('tousseGrid').getStore(); + if(tousseGridData && tousseGridData.data && tousseGridData.data.items && tousseGridData.data.items.length > 0){ + var rowDataArray = []; + //循环取到篮筐物品明细里面的条码及行数据 + for(var i = 0;i < tousseGridData.data.items.length;i++){ + var tousseGridItem = tousseGridData.data.items[i]; + var tousseGridItemDepart = tousseGridItem.data.depart; + var tousseGridItemTousseName = tousseGridItem.data.tousseDefinitionName; + + if(((!stasticsDepart && !tousseGridItemDepart) || (stasticsDepart == tousseGridItemDepart)) + && stasticsTousseName == tousseGridItemTousseName){ + waitRemovingBarcodeArray.push(tousseGridItem.data.barcode); + rowDataArray.push(tousseGridItem); + } + } + + //从篮筐里移除 + Ext.Ajax.request({ + url : WWWROOT + '/disinfectSystem/tousseInstanceAction!removeFromBasket.do', + params : {barcode : waitRemovingBarcodeArray.join(";")}, + success : function(response, options) { + for(var i = 0;i < rowDataArray.length;i++){ + tousseStore.remove(rowDataArray[i]); + } + stasticsStore.remove(row); + //刷新入筐器械包列表的数据 + reviewedPanel.loader.load(reviewedPanel.root,function(){ + reviewedPanel.expandAll(); + }); + //待灭菌装载列表数据源重新刷新 + waitSterileLoadingTousseStore.reload(); + }, + failure : function(response, options) { + var result = Ext.decode(response.responseText); + MsgTip.msg('提示', result.cause,true,3); + } + }); + } + } + } +} + +/** + * 移除篮筐物品明细的数据 + */ function removeGridItem() { var rows = Ext.getCmp('tousseGrid').getSelectionModel().getSelections(); if (rows) { @@ -604,7 +662,23 @@ } Ext.onReady(function() { + + /** + * 篮筐物品统计grid的移除函数 + */ + function showStasticsDelBtn(v,p,record) { + + if(SSTS_Sterilization_remove){ + return ""; + } + + } + /** + * 篮筐物品明细grid的移除函数 + */ function showDelBtn(v,p,record) { if(SSTS_Sterilization_remove){ @@ -807,7 +881,17 @@ showResult('未找到相应的结果'); return; }else if(returnType == "multiTousseInstancesSuccess"){ - processMultiTousseInstance(obj); + //是否包含装载到虚拟篮筐的器械包 + var includeTousseInVirtualBasket = obj.includeTousseInVirtualBasket; + if(includeTousseInVirtualBasket){ + Ext.MessageBox.confirm("请确认","条码范围内有器械包已在虚拟篮筐中,是否继续装载?",function(button, text) { + if ("yes" == button){ + processMultiTousseInstance(obj); + } + }); + }else{ + processMultiTousseInstance(obj); + } }else {//不为器械包实例条码 // showResult("条码(尾)只能扫描器械包条码"); showResult(obj.message); @@ -823,8 +907,8 @@ //篮筐物品明细grid的列头,根据可配置的参数进行动态定义 var tousseGridColumnArray = []; if(sstsConfig.showDepartOfTousseInstanceSterile == true){ - tousseGridColumnArray.push({header: "科室", width: 250, sortable: true, dataIndex: 'depart'}); - tousseGridColumnArray.push({header: "器械包名称", width: 150, sortable: true, dataIndex: 'tousseDefinitionName'}); + tousseGridColumnArray.push({header: "科室", width: 200, sortable: true, dataIndex: 'depart'}); + tousseGridColumnArray.push({header: "器械包名称", width: 200, sortable: true, dataIndex: 'tousseDefinitionName'}); tousseGridColumnArray.push({header: "条码", width: 100, sortable: true, dataIndex: 'barcode'}); }else{ tousseGridColumnArray.push({header: "器械包名称", width: 250, sortable: true, dataIndex: 'tousseDefinitionName'}); @@ -881,10 +965,14 @@ //篮筐物品统计信息列头数组 var stasticsGridColumnArray = []; if(sstsConfig.showDepartOfTousseInstanceSterile == true){ - stasticsGridColumnArray.push({header: "科室", width: 250, sortable: true, dataIndex: 'depart'}); + stasticsGridColumnArray.push({header: "科室", width: 200, sortable: true, dataIndex: 'depart'}); + stasticsGridColumnArray.push({header: "器械包名称", width: 200, sortable: true, dataIndex: 'tousseDefinitionName'}); + stasticsGridColumnArray.push({header: "数量", width: 100, sortable: true, dataIndex: 'count'}); + }else{ + stasticsGridColumnArray.push({header: "器械包名称", width: 250, sortable: true, dataIndex: 'tousseDefinitionName'}); + stasticsGridColumnArray.push({header: "数量", width: 200, sortable: true, dataIndex: 'count'}); } - stasticsGridColumnArray.push({header: "器械包名称", width: 250, sortable: true, dataIndex: 'tousseDefinitionName'}); - stasticsGridColumnArray.push({header: "数量", width: 250, sortable: true, dataIndex: 'count'}); + stasticsGridColumnArray.push({header: "移除", width: 50, dataIndex: 'barcode', renderer : showStasticsDelBtn}); //篮筐物品统计信息grid var stasticsGrid = new Ext.grid.GridPanel({