Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/action/TousseTransitionAction.java =================================================================== diff -u --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/action/TousseTransitionAction.java (revision 0) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/action/TousseTransitionAction.java (revision 15716) @@ -0,0 +1,149 @@ +package com.forgon.disinfectsystem.toussetransition.action; + +import java.util.List; +import java.util.Map; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.log4j.Logger; +import org.apache.struts2.convention.annotation.Action; +import org.apache.struts2.convention.annotation.Namespace; +import org.apache.struts2.convention.annotation.ParentPackage; +import org.apache.struts2.impl.StrutsObjectFactory; + +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.model.BarcodeDevice; +import com.forgon.disinfectsystem.barcode.service.BarcodeManager; +import com.forgon.disinfectsystem.basedatamanager.departmentgroup.service.DepartmentGroupManager; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.recycledepartmentgroup.DepartmentGroup; +import com.forgon.disinfectsystem.toussetransition.service.TousseTransitionRecordManager; +import com.forgon.security.model.User; +import com.forgon.security.service.UserManager; +import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.StrutsResponseUtils; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.json.JSONUtil; +import com.opensymphony.xwork2.Preparable; + +/** + * @author WangYi 2012-3-5 + */ + +@ParentPackage(value = "default") +@Namespace(value = "/disinfectSystem") +@Action(value = "tousseTransitionAction") +public class TousseTransitionAction implements Preparable { + Logger logger = Logger.getLogger(this.getClass()); + private DepartmentGroupManager departmentGroupManager; + private TousseTransitionRecordManager tousseTransitionRecordManager; + private BarcodeManager barcodeManager; + private UserManager userManager; + + public void setDepartmentGroupManager( + DepartmentGroupManager departmentGroupManager) { + this.departmentGroupManager = departmentGroupManager; + } + public void setTousseTransitionRecordManager( + TousseTransitionRecordManager tousseTransitionRecordManager) { + this.tousseTransitionRecordManager = tousseTransitionRecordManager; + } + public void setBarcodeManager(BarcodeManager barcodeManager) { + this.barcodeManager = barcodeManager; + } + public void setUserManager(UserManager userManager) { + this.userManager = userManager; + } + @Override + public void prepare() throws Exception { + // TODO Auto-generated method stub + } + /** + * 获取器械交接的科室分组数据 + */ + public void getTransitionGroup(){ + List groups = departmentGroupManager.getTransitionGroup(); + JSONArray groupArray = new JSONArray(); + if(CollectionUtils.isNotEmpty(groups)){ + for (DepartmentGroup group : groups) { + JSONObject configObj = new JSONObject(); + configObj.put("id", group.getId()); + configObj.put("name", group.getName()); + groupArray.add(configObj); + } + } + StrutsResponseUtils.output(groupArray); + } + /** + * 加载器械交接记录 + */ + public void loadTousseTransitionRecord(){ + String id = StrutsParamUtils.getPraramValue("id", null); + JSONObject obj = tousseTransitionRecordManager.loadTousseTransition(id); + boolean success = obj == null?false:true; + StrutsResponseUtils.output(JSONUtil.buildJsonObject(success, obj)); + } + + public void getInfoByBarcode(){ + JSONObject json = null; + try{ + Map params = StrutsParamUtils.getParameters(); + String barcode = params.get("barcode"); + BarcodeDevice barcodeDevice = barcodeManager.getBarcodeByBarcode(barcode); + if(barcodeDevice instanceof TousseInstance){ + String recyclingApplicationFormId = params.get("recyclingApplicationFormId"); + if(!DatabaseUtil.isPoIdValid(recyclingApplicationFormId)){ + StrutsResponseUtils.output(JSONUtil.buildJsonObject(false, "申请单id不能为空")); + }else{ + json = tousseTransitionRecordManager.getTousseInfo((TousseInstance)barcodeDevice, Long.valueOf(recyclingApplicationFormId)); + JSONUtil.addProperty(json, "type", "tousseInstance"); + } + }else if(barcodeDevice instanceof User){ + json = userManager.user2json((User)barcodeDevice); + JSONUtil.addSuccess(json, true); + JSONUtil.addProperty(json, "type", "User"); + }else{ + json = userManager.user2json(userManager.getUserByBarcode(barcode)); + JSONUtil.addSuccess(json, true); + JSONUtil.addProperty(json, "type", "User"); + } + }catch(Exception e){ + json = JSONUtil.buildJsonObject(false,e.getMessage()); + } + if(json == null){ + json = JSONUtil.buildJsonObject(false,"请扫描用户或者器械包的条码"); + } + StrutsResponseUtils.output(json); + } + public void save(){ + try{ + String prepareRecycleComfirmor = StrutsParamUtils.getPraramValue("prepareRecycleComfirmor", ""); + String confirmerCode = StrutsParamUtils.getPraramValue("confirmerCode", ""); + String app_id = StrutsParamUtils.getPraramValue("id", ""); + String tousseTransitionInfo = StrutsParamUtils.getPraramValue("tousseTransitionInfo", ""); + JSONArray tousseArray = JSONArray.fromObject(tousseTransitionInfo); + JSONArray tousseBarcodes = new JSONArray(); + for(int i = 0; i < tousseArray.size();++i){ + JSONObject tousseItem = tousseArray.getJSONObject(i); + JSONArray barcodes = tousseItem.optJSONArray("tousseBarcodes"); + if(CollectionUtils.isNotEmpty(barcodes)){ + tousseBarcodes.addAll(barcodes); + } + } + JSONObject params = new JSONObject(); + params.put("tousseItems", tousseArray); + params.put("app_id", app_id); + params.put("comfirmor",prepareRecycleComfirmor); + params.put("comfirmorCode",confirmerCode); + params.put("operatorCode",AcegiHelper.getLoginUser().getUserName()); + params.put("operator",AcegiHelper.getLoginUserFullName()); + params.put("tousseBarcodes",tousseBarcodes); + tousseTransitionRecordManager.save(params); + StrutsResponseUtils.output(true, "保存成功"); + }catch(Exception e){ + StrutsResponseUtils.output(false,e.getMessage()); + } + } +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/recyclingapplication/RecyclingApplication.java =================================================================== diff -u -r15325 -r15716 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/recyclingapplication/RecyclingApplication.java (.../RecyclingApplication.java) (revision 15325) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/recyclingapplication/RecyclingApplication.java (.../RecyclingApplication.java) (revision 15716) @@ -1,6 +1,7 @@ package com.forgon.disinfectsystem.entity.recyclingapplication; import java.util.List; + import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; @@ -9,15 +10,18 @@ import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Transient; + import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; + import com.fasterxml.jackson.annotation.JsonIgnore; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.security.acls.AclFieldsObject; +import com.forgon.tools.string.StringTools; /** * @author SongWei 2012-2-20 下午04:55:28 @@ -75,6 +79,10 @@ public static final String INVOICE_STATUS_END = "已终止"; //该属性的作用是,记录下所包含的器械包实例的id ,以方便在触摸屏回收那里通过扫描器械包条码直接拿到申请单 private String tousseBarcodes; + /** + * 诊疗号,用于界面显示 + */ + private String treatmentNum; public String getReaders() { return readers; @@ -213,6 +221,9 @@ } public String getPatientName() { + if(StringTools.isBlank(patientName) && useRecord != null){ + patientName = useRecord.getPatientName(); + } return patientName; } @@ -237,5 +248,16 @@ public void setTousseReturnDisinfectRecordId(Long tousseReturnDisinfectRecordId) { this.tousseReturnDisinfectRecordId = tousseReturnDisinfectRecordId; } +// @Transient + public String getTreatmentNum() { + if(StringTools.isBlank(treatmentNum) && useRecord != null){ + treatmentNum = useRecord.getTreatmentNum(); + } + return treatmentNum; + } + + public void setTreatmentNum(String treatmentNum) { + this.treatmentNum = treatmentNum; + } } Index: ssts-web/src/main/webapp/disinfectsystem/recycle/tousseTransition/tousseTransitionView.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/recycle/tousseTransition/tousseTransitionView.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/recycle/tousseTransition/tousseTransitionView.js (revision 15716) @@ -0,0 +1,131 @@ +var entityName = "器械交接"; +var grid; + +var loadFormData = function(grid) { + var records = grid.getSelectionModel().getSelections(); + if (records.length == 0) { + showResult("请选择要修改的"+entityName+"记录!"); + return false; + } + if (records.length > 1) { + showResult("一次只能修改一个"+entityName+"记录!"); + return false; + } + var id = records[0].data['id']; + addAndEditTousseTransitionRecord(id); +}; + +/** + * 修改记录 modifyRecord函数 触发modify函数调用,并传入当前列的值以及record.data对象 页面中需要定义 + * modify(v,data) 函数 + */ +function modify(v, data) { + loadFormData(grid); +} + +function openWashDataLineChart(id){ + openModalWindow(WWWROOT+'/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/washDataLineChart.jsp?washAndDisinfectRecordId='+id, '清洗参数', '800', '600'); +} + + +Ext.onReady(function() { + Ext.QuickTips.init(); + // 记录cookie(3步) + + function renderColor(v, p, record) { + var status = record.data['isPrepareRecycled']; + var color = "white"; + var v = '已交接'; + if (0 == status) { + color = "yellow"; + v = '待交接'; + } + return "

" + v + "

"; + } + +// function actionFun(v, p, record){ +// if(v == 1){ +// var id = record.data['id']; +// var str = ""; +// return str; +// } +// return ''; +// } + + var columns = [ + {header : "流水号",width : 80,dataIndex : 'serialNumber',renderer : modifyRecord}, + {header : "科室",width : 140,dataIndex : 'depart'}, + {header : "手术间",width : 60,dataIndex : 'operationRoom'}, + {header : "住院号",width : 80,dataIndex : 'hospitalNumber'}, + {header : "诊疗号",width : 80,dataIndex : 'treatmentNum'}, + {header : "病人",width : 60,dataIndex : 'patientName'}, + {header : "交接状态",width : 60,dataIndex : 'isPrepareRecycled',renderer : renderColor}, + {header : "交接时间",width : 140,dataIndex : 'prepareRecycleDateTime',renderer : myDateFormatBySecond}, + {id : 'autoWidthColumn',header : "申请时间",width : 140,dataIndex : 'applicationTime',renderer : myDateFormatBySecond} +// {header : "操作",width : 120,dataIndex : 'isPrepareRecycled',renderer : actionFun} + ]; + + var filters = new Ext.grid.GridFilters({ + filters : [ + {type : 'string',dataIndex : 'serialNumber'}, + {type : 'string',dataIndex : 'depart'}, + {type : 'string',dataIndex : 'operationRoom'}, + {type : 'string',dataIndex : 'hospitalNumber'}, + {type : 'string',dataIndex : 'treatmentNum'}, + {type : 'string',dataIndex : 'patientName'}, + {type : 'date',dataIndex : 'applicationTime'}, + {type : 'date',dataIndex : 'prepareRecycleDateTime'}, + {type : 'numeric',dataIndex : 'isPrepareRecycled'} + ] + }); + + var readerDetail = [ + {name : 'id'}, + {name : 'serialNumber'}, + {name : 'depart'}, + {name : 'operationRoom'}, + {name : 'hospitalNumber'}, + {name : 'treatmentNum'}, + {name : 'patientName'}, + {name : 'applicationTime'}, + {name : 'prepareRecycleDateTime'}, + {name : 'isPrepareRecycled'} + ]; + +// var tbar = [{}, '-', {},'-', {}, '-', {}]; + var dwrCallParams = null; + Ext.ux.ForgonPageGrid.prototype.getGridParameterMap = function() { + }; + + grid = new Ext.ux.ForgonPageGrid({ + title : '器械交接列表', +// tbar : tbar, + pageSize : 20, + defaultSortField : 'applicationTime', + defaultSortDirection : 'DESC', + isCheckboxSelectionModel : true, + rememberSelected : false, + isShowSearchField : true, + columns : columns, + plugins : filters, + autoExpandColumn : 'autoWidthColumn', + renderTo : 'gridDiv', + frame : false + }, + readerDetail, + TousseTransitionTableMamager.findRecyclingApplicationTableList, + dwrCallParams // 这个参数只是占位作用 + ); + + var viewport = new Ext.Viewport({ + layout : 'border', + items : [{ + region : 'center', + margins : '0 0 0 0', + layout : 'fit', + items : grid + }] + }); + +}); \ No newline at end of file Index: ssts-web/src/main/webapp/disinfectsystem/recycle/tousseTransition/tousseTransitionView.jsp =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/recycle/tousseTransition/tousseTransitionView.jsp (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/recycle/tousseTransition/tousseTransitionView.jsp (revision 15716) @@ -0,0 +1,74 @@ +<%@page import="com.forgon.disinfectsystem.entity.recyclingdamagerecord.RecyclingDamageItem"%> +<%@page import="com.forgon.disinfectsystem.entity.basedatamanager.container.Container"%> +<%@ page contentType="text/html; charset=UTF-8"%> +<%@ include file="/common/taglibs.jsp"%> +<%@page import="com.forgon.tools.SpringBeanManger,com.forgon.directory.vo.LoginUserData,com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord,com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager"%> +<%@page import="com.forgon.disinfectsystem.entity.qualitymonitoringmanager.qualitymonitoring.QualityMonitoring"%> +<%@page import="com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition" %> + +<% + SupplyRoomConfigManager supplyRoomConfigManager = (SupplyRoomConfigManager)SpringBeanManger.getBean("supplyRoomConfigManager"); + String orgUnitCoding = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); + String orgUnitName = AcegiHelper.getLoginUser().getOrgUnitNameCodingFromSupplyRoomConfig(); + request.setAttribute("orgUnitName",orgUnitName); + request.setAttribute("orgUnitCoding",orgUnitCoding); + request.setAttribute("userName",AcegiHelper.getLoginUser().getUserFullName()); + request.setAttribute("fontSize",AcegiHelper.getLoginUser().getFontSize() == null?"12":AcegiHelper.getLoginUser().getFontSize()); +%> + + + + + + +<%@ include file="/common/includeExtJsAndCss.jsp"%> +<%@ include file="/common/includeExtJs4_2.jsp"%> + + + + + + + + + + + + + + + + + + + + + + + + + +器械交接 + + + + + + + + + + + +
+
+
+ + + + \ No newline at end of file Index: ssts-web/src/main/webapp/WEB-INF/dwr.xml =================================================================== diff -u -r15564 -r15716 --- ssts-web/src/main/webapp/WEB-INF/dwr.xml (.../dwr.xml) (revision 15564) +++ ssts-web/src/main/webapp/WEB-INF/dwr.xml (.../dwr.xml) (revision 15716) @@ -87,6 +87,10 @@ + + + + Index: ssts-web/src/main/webapp/homepage/menuconfigure.js =================================================================== diff -u -r15564 -r15716 --- ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 15564) +++ ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 15716) @@ -34,7 +34,8 @@ window.open (url,'newwindow','height=1000,width=2000,top=0,left=0,toolbar=yes,menubar=yes,scrollbars=yes, resizable=yes,location=yes, status=yes'); return; } - }}*/ + }}*/, + {hidden :SSTS_RecycRecord_Menu,text:"器械交接",href:WWWROOT+'/disinfectsystem/recycle/tousseTransition/tousseTransitionView.jsp',hrefTarget:linkTarget,leaf:true} ] },{ text:"回收分类", Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r15698 -r15716 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 15698) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 15716) @@ -4543,4 +4543,32 @@ } return noPrintList; } + + public void addDisinfectTousseItem(InvoicePlan plan, Integer prepareRecycleAmount, TousseDefinition td, TousseItem item) { + JSONArray materialArry = new JSONArray(); + List mis = td.getMaterialInstances(); + if(mis != null){ + for (int i = 0; i < mis.size(); i++) { + MaterialInstance ms = mis.get(i); + JSONObject obj = new JSONObject(); + obj.put("name",CssdUtils.getMaterialName(ms.getMaterialDefinition())); + obj.put("count", ms.getCount()); + obj.put("tousseType", "器械"); + materialArry.add(obj); + } + } + TousseDefinition ancestorTD = td; + if(td.getAncestorID() != null && td.getAncestorID().longValue() != td.getId().longValue()){ + ancestorTD = tousseDefinitionManager.getTousseDefinitionById(td.getAncestorID()); + } + TousseDefinition newTousseDefinition = newDisinfectGoodsDefinition(ancestorTD,materialArry,plan.getId()); + item.setTousseDefinitionId(newTousseDefinition.getId()); + //是否生成包实例 + if (TousseDefinition.STR_NO.equals(td.getIsPacking()) + && TousseDefinition.STR_NO.equals(td.getIsRecycling())) { + newUnPackingTousseInstance(td, + item.getUpdateAmount(plan.getCommittedStatus()), + (RecyclingApplication) plan, null); + } + } } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/dwr/table/TousseTransitionTableMamager.java =================================================================== diff -u --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/dwr/table/TousseTransitionTableMamager.java (revision 0) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/dwr/table/TousseTransitionTableMamager.java (revision 15716) @@ -0,0 +1,69 @@ +package com.forgon.disinfectsystem.toussetransition.dwr.table; + +import java.util.List; +import java.util.Map; + +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.Logger; + +import com.forgon.component.grid.GridManager; +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.disinfectsystem.entity.recyclingapplication.RecyclingApplication; +import com.forgon.tools.string.StringTools; + +public class TousseTransitionTableMamager { + Logger logger = Logger.getLogger(this.getClass()); + private GridManager gridManager; + + public void setGridManager(GridManager gridManager) { + this.gridManager = gridManager; + } + + + /** + * 获取使用记录转换而来的申请单 + * @param parameterMap + * @return + */ + public String findRecyclingApplicationTableList( + Map> parameterMap){ + Map sqlWhereParamMap = gridManager + .getParamFromView(parameterMap); + String orgUnitCodings = sqlWhereParamMap.get("orgUnitCodings"); + + String sql = "where (po.recyclingStatus = '" + + InvoicePlan.RECYCLINGSTATUS_AWAITRECYCLE + + "' or po.recyclingStatus = '" + + InvoicePlan.RECYCLINGSTATUS_PARTRECYCLE + + "') and po.committedStatus=true"; + + + if (StringUtils.isNotBlank(orgUnitCodings)) { + // departCoding字段为字符串,需要加单引号查询 + if (!orgUnitCodings.startsWith("'")){ + orgUnitCodings = "'" + orgUnitCodings + "'"; + } + + sql += " and po.departCoding in (" + orgUnitCodings + ")"; + } + String handleDepartCode = AcegiHelper.getCurrentOrgUnitCode(); + if(StringTools.isNotBlank(handleDepartCode)){ + sql += " and po.handleDepartCoding='" + handleDepartCode + "'"; + } + // 此处是触摸屏回收待回收列表调用,而触摸屏回收不处理外来器械包,所以要加上过滤 + sql += " and po.type != '" + InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION + + "'"; + sql += " and ( po.includeRecyclingItems is null or po.includeRecyclingItems = " + + InvoicePlan.SIGNED_TRUE + " )"; +// sql += " and po.isPrepareRecycled = " + InvoicePlan.SIGNED_FALSE; + sql += " and ( po.useRecord is not null )"; +// sql += " order by po.sequence,po.departCoding,po.applicationTime"; + + String result = gridManager.renderGrid(parameterMap, RecyclingApplication.class.getSimpleName(), sql, + new String[] {"applicationItems", "returnedTousseItems", "invoice", + "recyclingRecord", "recyclingApplications", "parent" }); +// System.out.println(result); + return result; + } +} Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java =================================================================== diff -u -r15638 -r15716 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 15638) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 15716) @@ -64,7 +64,6 @@ import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatchStock; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveDisposablegoods; import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; -import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.position.Position; import com.forgon.disinfectsystem.entity.basedatamanager.sterilisation.Sterilisation; import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.Sterilizer; @@ -575,7 +574,7 @@ String tousseName = td.getName(); if (TousseDefinition.PACKAGE_TYPE_DISINFECTION .equals(td.getTousseType())) { - addDisinfectTousseItem(plan, prepareRecycleAmount, + recyclingApplicationManager.addDisinfectTousseItem(plan, prepareRecycleAmount, td,item); continue; } @@ -632,126 +631,22 @@ * @return */ public String saveTransitionRecord(JSONObject params){ - boolean success = false; - String error = ""; - if(params != null){ - JSONArray array = params.optJSONArray("tousseItems"); - if(array != null){ - String invoiceplanId = params.optString("app_id"); - InvoicePlan plan = invoicePlanManager.getInvoicePlanById(invoiceplanId); - for (int i = 0; i < array.size(); i++) { - JSONObject obj = array.getJSONObject(i); - String id = obj.optString("id"); - TousseItem item = null; - if(StringUtils.isNotEmpty(id)){ - item = tousseItemManager.getTousseItemById(id); - } - Integer prepareRecycleAmount = obj - .optInt("prepareRecycleAmount"); - Integer scanedAmount = obj - .optInt("scanedAmount"); - Integer unscanedAmount = obj - .optInt("unscanedAmount"); - if(item == null){ - String td_id = obj.optString("td_id"); - TousseDefinition td = tousseDefinitionManager - .getTousseDefinitionById(td_id); - if (td != null) { - item = new TousseItem(); - item.setAmount(prepareRecycleAmount); - item.setPrepareRecycleAmount(prepareRecycleAmount); - String tousseName = td.getName(); - if (TousseDefinition.PACKAGE_TYPE_DISINFECTION - .equals(td.getTousseType())) { - addDisinfectTousseItem(plan, prepareRecycleAmount, - td,item); - continue; - } - item.setTousseName(tousseName); - item.setTousseType(td.getTousseType()); - item.setDiposable("否"); - item.setTousseDefinitionId(td.getId()); - item.setExpressRecycling(td.getExpressRecycling()); - item.setIsApplyEntireTousse(td.getIsApplyEntireTousse()); - item.setIsCleanedEntirely(td.getIsCleanedEntirely()); - boolean isThereIDCard = tousseDefinitionManager.isThereIDCard(td); - item.setIsThereIdentificationCard(isThereIDCard?"是":"否"); - // 器械包取器械包定义中的价格 - double price = td.getPrice(); - // 消毒物品取材料的消毒价格之和 - if (TousseDefinition.PACKAGE_TYPE_DISINFECTION - .equals(td.getTousseType())) { - price = tousseDefinitionManager - .getDisinfectGoodsPrice(td); - } - item.setPrice(price); - item.setRowPrice(MathTools.mul(price, - prepareRecycleAmount).doubleValue()); - item.setInvoicePlan(plan); - plan.getApplicationItems().add(item); - } else { - JSONUtil.buildErrorMsgJsonResult("未找到对应的器械包"); - } - } - item.setPrepareRecycleAmount(prepareRecycleAmount); - item.setScanedAmount(scanedAmount); - item.setUnscanedAmount(unscanedAmount); - tousseItemManager.saveOrUpdate(item); - } - if (plan != null) { - plan.setIsPrepareRecycled(InvoicePlan.SIGNED_TRUE); - String comfirmor = params.optString("comfirmor"); - String comfirmorCode = params.optString("comfirmorCode"); - String operatorCode = params.optString("operatorCode"); - String operator = params.optString("operator"); - JSONArray tousseBarcodes = params.optJSONArray("tousseBarcodes"); - plan.setPrepareRecycleComfirmor(comfirmor); - plan.setPrepareRecycleOperator(operator); - plan.setPrepareRecycleDateTime(new Date()); - invoicePlanManager.saveInvoicePlan(plan); - tousseTransitionRecordManager.save(plan,tousseBarcodes,comfirmor,comfirmorCode,operator,operatorCode); - success = true; - error = "保存成功"; - } else { - success = false; - error = "申请单不存在"; - } - } + boolean success = true; + String error = "保存成功"; + try{ + tousseTransitionRecordManager.save(params); + }catch(RuntimeException e){ + success = false; + error = e.getMessage(); + }catch(Exception e){ + e.printStackTrace(); + success = false; + error = "保存失败"; } return new JSONStringer().object().key("success").value(success) .key("error").value(error).endObject().toString(); } - private void addDisinfectTousseItem(InvoicePlan plan, - Integer prepareRecycleAmount, TousseDefinition td,TousseItem item) { - - JSONArray materialArry = new JSONArray(); - List mis = td.getMaterialInstances(); - if(mis != null){ - for (int i = 0; i < mis.size(); i++) { - MaterialInstance ms = mis.get(i); - JSONObject obj = new JSONObject(); - obj.put("name",CssdUtils.getMaterialName(ms.getMaterialDefinition())); - obj.put("count", ms.getCount()); - obj.put("tousseType", "器械"); - materialArry.add(obj); - } - } - TousseDefinition ancestorTD = td; - if(td.getAncestorID() != null && td.getAncestorID().longValue() != td.getId().longValue()){ - ancestorTD = tousseDefinitionManager.getTousseDefinitionById(td.getAncestorID()); - } - TousseDefinition newTousseDefinition = recyclingApplicationManager.newDisinfectGoodsDefinition(ancestorTD,materialArry,plan.getId()); - item.setTousseDefinitionId(newTousseDefinition.getId()); - //是否生成包实例 - if (TousseDefinition.STR_NO.equals(td.getIsPacking()) - && TousseDefinition.STR_NO.equals(td.getIsRecycling())) { - recyclingApplicationManager.newUnPackingTousseInstance(td, - item.getUpdateAmount(plan.getCommittedStatus()), - (RecyclingApplication) plan, null); - } - } - /** * 获取申请物品 * @param params Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionRecordManager.java =================================================================== diff -u -r15638 -r15716 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionRecordManager.java (.../TousseTransitionRecordManager.java) (revision 15638) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionRecordManager.java (.../TousseTransitionRecordManager.java) (revision 15716) @@ -26,8 +26,13 @@ * @param operator 接收人 * @param operatorCode 接收人编码 */ - void save(InvoicePlan plan, JSONArray tousseBarcodes, String comfirmor, + public void save(InvoicePlan plan, JSONArray tousseBarcodes, String comfirmor, String comfirmorCode, String operator, String operatorCode); + /** + * 保存交接记录。android pda跟pc都调用这个方法 + * @param params + */ + public void save(JSONObject params); /** * 获取申请单中条码对应的包实例的信息 Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionRecordManagerImpl.java =================================================================== diff -u -r15638 -r15716 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionRecordManagerImpl.java (.../TousseTransitionRecordManagerImpl.java) (revision 15638) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionRecordManagerImpl.java (.../TousseTransitionRecordManagerImpl.java) (revision 15716) @@ -10,6 +10,7 @@ import net.sf.json.JSONArray; import net.sf.json.JSONObject; +import net.sf.json.util.JSONStringer; import com.forgon.Constants; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; @@ -19,9 +20,12 @@ import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.entity.toussetransition.TousseTransitionRecord; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; +import com.forgon.disinfectsystem.recyclingapplication.service.InvoicePlanManager; import com.forgon.disinfectsystem.recyclingapplication.service.RecyclingApplicationManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; +import com.forgon.disinfectsystem.tousseitem.service.TousseItemManager; +import com.forgon.tools.MathTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.BasePoManagerImpl; import com.forgon.tools.json.JSONUtil; @@ -37,6 +41,8 @@ private TousseTransitionItemManager tousseTransitionItemManager; private RecyclingApplicationManager recyclingApplicationManager; private TousseDefinitionManager tousseDefinitionManager; + private InvoicePlanManager invoicePlanManager; + private TousseItemManager tousseItemManager; public void setTousseTransitionItemManager( TousseTransitionItemManager tousseTransitionItemManager) { @@ -50,6 +56,12 @@ TousseDefinitionManager tousseDefinitionManager) { this.tousseDefinitionManager = tousseDefinitionManager; } + public void setInvoicePlanManager(InvoicePlanManager invoicePlanManager) { + this.invoicePlanManager = invoicePlanManager; + } + public void setTousseItemManager(TousseItemManager tousseItemManager) { + this.tousseItemManager = tousseItemManager; + } /** * 通过器械包实例条码,获取交接记录 */ @@ -96,6 +108,91 @@ tousseTransitionItemManager.save(record,tousseBarcodes,getTousseDefineIdTousseItemMap(plan.getApplicationItems())); } + @Override + public void save(JSONObject params) { + if(params != null){ + JSONArray array = params.optJSONArray("tousseItems"); + if(array != null){ + String invoiceplanId = params.optString("app_id"); + InvoicePlan plan = invoicePlanManager.getInvoicePlanById(invoiceplanId); + for (int i = 0; i < array.size(); i++) { + JSONObject obj = array.getJSONObject(i); + String id = obj.optString("id"); + TousseItem item = null; + if(StringUtils.isNotEmpty(id)){ + item = tousseItemManager.getTousseItemById(id); + } + Integer prepareRecycleAmount = obj + .optInt("prepareRecycleAmount"); + Integer scanedAmount = obj + .optInt("scanedAmount"); + Integer unscanedAmount = obj + .optInt("unscanedAmount"); + if(item == null){ + String td_id = obj.optString("td_id"); + TousseDefinition td = tousseDefinitionManager + .getTousseDefinitionById(td_id); + if (td != null) { + item = new TousseItem(); + item.setAmount(prepareRecycleAmount); + item.setPrepareRecycleAmount(prepareRecycleAmount); + String tousseName = td.getName(); + if (TousseDefinition.PACKAGE_TYPE_DISINFECTION + .equals(td.getTousseType())) { + recyclingApplicationManager.addDisinfectTousseItem(plan, prepareRecycleAmount, + td,item); + continue; + } + item.setTousseName(tousseName); + item.setTousseType(td.getTousseType()); + item.setDiposable("否"); + item.setTousseDefinitionId(td.getId()); + item.setExpressRecycling(td.getExpressRecycling()); + item.setIsApplyEntireTousse(td.getIsApplyEntireTousse()); + item.setIsCleanedEntirely(td.getIsCleanedEntirely()); + boolean isThereIDCard = tousseDefinitionManager.isThereIDCard(td); + item.setIsThereIdentificationCard(isThereIDCard?"是":"否"); + // 器械包取器械包定义中的价格 + double price = td.getPrice(); + // 消毒物品取材料的消毒价格之和 + if (TousseDefinition.PACKAGE_TYPE_DISINFECTION + .equals(td.getTousseType())) { + price = tousseDefinitionManager + .getDisinfectGoodsPrice(td); + } + item.setPrice(price); + item.setRowPrice(MathTools.mul(price, + prepareRecycleAmount).doubleValue()); + item.setInvoicePlan(plan); + plan.getApplicationItems().add(item); + } else { + JSONUtil.buildErrorMsgJsonResult("未找到对应的器械包"); + } + } + item.setPrepareRecycleAmount(prepareRecycleAmount); + item.setScanedAmount(scanedAmount); + item.setUnscanedAmount(unscanedAmount); + tousseItemManager.saveOrUpdate(item); + } + if (plan != null) { + plan.setIsPrepareRecycled(InvoicePlan.SIGNED_TRUE); + String comfirmor = params.optString("comfirmor"); + String comfirmorCode = params.optString("comfirmorCode"); + String operatorCode = params.optString("operatorCode"); + String operator = params.optString("operator"); + JSONArray tousseBarcodes = params.optJSONArray("tousseBarcodes"); + plan.setPrepareRecycleComfirmor(comfirmor); + plan.setPrepareRecycleOperator(operator); + plan.setPrepareRecycleDateTime(new Date()); + invoicePlanManager.saveInvoicePlan(plan); + save(plan,tousseBarcodes,comfirmor,comfirmorCode,operator,operatorCode); + } else { + throw new RuntimeException("申请单不存在"); + } + } + } + } + private Map getTousseDefineIdTousseItemMap(List allTousseItems){ Map map = new HashMap(); if(CollectionUtils.isNotEmpty(allTousseItems)){ Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java =================================================================== diff -u -r15637 -r15716 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 15637) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 15716) @@ -7,6 +7,7 @@ import java.util.Map; import com.forgon.directory.model.OrgUnit; + import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -188,5 +189,5 @@ * @return */ List findNoPrintListCodes(String[] allNeedToPrintDept,List needToPrintList); - + public void addDisinfectTousseItem(InvoicePlan plan, Integer prepareRecycleAmount, TousseDefinition td, TousseItem item); } Index: ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml =================================================================== diff -u -r15670 -r15716 --- ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 15670) +++ ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 15716) @@ -587,6 +587,10 @@ + + + Index: ssts-web/src/main/webapp/disinfectsystem/recycle/tousseTransition/tousseTransitionForm.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/recycle/tousseTransition/tousseTransitionForm.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/recycle/tousseTransition/tousseTransitionForm.js (revision 15716) @@ -0,0 +1,587 @@ +var removeBarcode = null; +function addAndEditTousseTransitionRecord(id) { + /** + * 获取器械交接的根节点 + */ + function getTousseTreeRoot(){ + return top.Ext.getCmp('tousseTreePanel').root; + } + /** + * 根据器械包定义id,在交接明细中查找对应的结点 + */ + function findNode(toussedefineId){ + var root = getTousseTreeRoot(); + var node = root.findChild('tousseDefineId', toussedefineId); + return node; + } + /** + * 在结点下查找对应的条码 + */ + function findBarcode(node,barcode){ + if(node){ + return node.findChild('barcode',barcode); + } + return null; + } + /** + * 增加已扫数量 + * @param node + * @returns + */ + function increaseScanedAmount(tousseItemData){ + if(tousseItemData){ + tousseItemData.scanedAmount = isUndefinedOrNullOrEmpty(tousseItemData.scanedAmount)?1:parseInt(tousseItemData.scanedAmount) + 1; + var unscanedAmount = isUndefinedOrNullOrEmpty(tousseItemData.unscanedAmount)?0:parseInt(tousseItemData.unscanedAmount); + tousseItemData.unscanedAmount = unscanedAmount > 0 ? unscanedAmount - 1:0; + } + } + /** + * 减少已扫数量 + * @param node + * @returns + */ + function decreaseScanedAmount(tousseItemData){ + if(tousseItemData){ + tousseItemData.scanedAmount = isUndefinedOrNullOrEmpty(tousseItemData.scanedAmount)?1:parseInt(tousseItemData.scanedAmount) - 1; + var unscanedAmount = isUndefinedOrNullOrEmpty(tousseItemData.unscanedAmount)?0:parseInt(tousseItemData.unscanedAmount); + tousseItemData.unscanedAmount = unscanedAmount + 1; + } + } + /** + * 移除节点 + */ + function removeTousseNode(node){ + if(node){ + node.remove(); + } + } + /** + * 添加节点 + */ + function appendTousseNode(node){ + if(node){ + var root = top.Ext.getCmp('tousseTreePanel').root; + root.appendChild(node); + } + } + /** + * 添加节点中的条码 + */ + function addTousseBarcode(tousseDefineId,barcode) { + var node = findNode(tousseDefineId); + if(node == null){ + return; + } + var itemData = node.attributes.tousseItem; + if(!itemData.tousseBarcodes){ + itemData.tousseBarcodes = []; + } + var tousseBarcode = {}; + tousseBarcode.tousseDefineId = tousseDefineId; + tousseBarcode.tousseName = itemData.tousseName; + tousseBarcode.tousseBarcode = barcode; + itemData.tousseBarcodes.push(tousseBarcode); + increaseScanedAmount(itemData); + + var newNode = createTousseItemNode(itemData); + + removeTousseNode(node); + appendTousseNode(newNode); + } + + /** + * 移除节点中的条码 + */ + function removeTousseBarcode(tousseDefineId,barcode) { + var node = findNode(tousseDefineId); + if(node == null){ + return; + } + var itemData = node.attributes.tousseItem; + if(!itemData.tousseBarcodes){ + itemData.tousseBarcodes = []; + } + for(var index = 0; index < itemData.tousseBarcodes.length;++index){ + var barcodeData = itemData.tousseBarcodes[index]; + if(barcodeData.tousseBarcode==barcode){ + itemData.tousseBarcodes.pop(barcodeData); + break; + } + } + decreaseScanedAmount(itemData); + + var newNode = createTousseItemNode(itemData); + + removeTousseNode(node); + appendTousseNode(newNode); + } + + + /** + * 生成交接明细节点 + */ + function createTousseItemNode(itemData) { + var tousseItem = new top.Ext.tree.TreeNode({ + id : itemData.id, + tousseType : itemData.tousseType, + tousseDefineId : itemData.tousseDefineId, + tousseName : itemData.tousseName, + barcode : '', + amount : itemData.amount, + scanedAmount:itemData.scanedAmount, + unscanedAmount:itemData.unscanedAmount, + cls : 'master-task', + iconCls : 'task-folder', + uiProvider : Ext.tree.ColumnNodeUI, + leaf : false, + expanded : false + }); + + var barcodeArray = itemData.tousseBarcodes; + for ( var i = 0; i < barcodeArray.length; ++i) { + var barcodeData = barcodeArray[i]; + var tousseBarcode = new top.Ext.tree.TreeNode({ + id : '', + tousseType : '', + tousseDefineId : barcodeData.tousseDefineId, + tousseName : barcodeData.tousseName, + barcode : barcodeData.tousseBarcode, + amount : '', + scanedAmount:'', + unscanedAmount:'', + cls : 'master-task', + iconCls : 'task', + uiProvider : Ext.tree.ColumnNodeUI, + leaf : true, + expanded : false + }); + tousseItem.appendChild(tousseBarcode); + } + + //********************** 数据保存在父结点 ****************************// + tousseItem.attributes.tousseItem=itemData; + return tousseItem; + } + /** + * 给树绑定一个编辑器 + */ + function bindEditorForUntracableTree(columnTree){ + //未接受的时候才可以改 + var treeEditer = new top.Ext.tree.ColumnTreeEditor(columnTree,{ + completeOnEnter : true, + autosize : true, + allowBlank: false, + selectOnFocus : true, + revertInvalid:true, + ignoreNoChange : true + }); + treeEditer.on("beforestartedit", function(thiz,el,v){ + var tempNode = thiz.editNode;//将要编辑的节点 + if(!tempNode.isLeaf() && thiz.editColIndex == 'unscanedAmount'){ + return true; + }else{ + return false; + } + }); + treeEditer.on("beforecomplete",function(thiz,newValue,oldValue){ + if(!isInteger(newValue) || parseInt(newValue) < 0){ + return false; + } + }); + treeEditer.on("complete",function(thiz,newValue,oldValue){ + thiz.editNode.attributes.tousseItem.unscanedAmount = newValue; + }); + } + + removeBarcode = removeTousseBarcode; //记录移除条码的函数地址,以便在点击操作按钮时调用 + this.id = id; + var tousseTreePanel = new top.Ext.tree.ColumnTree({ + id : 'tousseTreePanel', + rootVisible : false, + bodyStyle : 'border:1px solid #afd7af', + autoScroll : true, + containerScroll : true, + height : 260, + title : '交接物品明细', + columns : [ + {header : '名称', width : 260,dataIndex : 'tousseName'}, + {header : '条码', width : 90,align:'center',dataIndex : 'barcode'}, + {header : '申请数量',width : 60,align:'center',dataIndex : 'amount'}, + {header : '已扫数量',width : 60,align:'center',dataIndex : 'scanedAmount'}, + {header : '未扫数量',width : 60,align:'center',dataIndex : 'unscanedAmount'}, + {header : '操作',width : 60,align:'center',dataIndex : 'id', + renderer : function (v,p,record) { + if (record.barcode != '') { + var str = ""; + return str; + } + return ''; + } + }], + loader: new Ext.tree.TreeLoader({uiProviders:{'col': Ext.tree.ColumnNodeUI}}), + root: new top.Ext.tree.AsyncTreeNode({ + text : '' + }) + }); + + var formObj = new top.Ext.FormPanel({ + id : 'tousseTransitionForm', + frame : true, + border : 0, + labelSeparator : ':', + bodyStyle : 'padding:5px 5px 0px 5px', + labelAlign:'right', + autoWidth : true, + autoScroll : true, + items : [{ + layout : 'column', + items : [{ + columnWidth : 1, + layout : 'column', + items : [{ + xtype : "fieldset", + title : '基础数据', + layout:'column', + width:700, + height:160, + columnWidth : 1, +// autoHeight : true, + labelWidth : 95, + items : [{ + layout : 'column', + items : [{ + xtype : 'hidden', + name : 'id', + id : 'id' + },{ + xtype : 'hidden', + name : 'confirmerCode', + id : 'confirmerCode' + },{ + id : 'serialNum', + columnWidth : 0.5, + layout : 'form', + hidden:true, + items : [{ + xtype : 'textfield', + fieldLabel : "流水号", + name : "serialNumber", + readOnly : true, + id : "serialNumber", + anchor : '99%', + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : 0.5, + layout : 'form', + items : [{ + xtype : 'textfield', + fieldLabel : "申请人", + name : "applicant", + readOnly : true, + id : "applicant", + anchor : '99%', + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : 0.5, + layout : 'form', + items : [{ + xtype : 'textfield', + fieldLabel : "科室", + name : "depart", + readOnly : true, + id : "depart", + anchor : '99%', + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : 0.5, + layout : 'form', + items : [{ + xtype : 'textfield', + fieldLabel : "住院号", + name : "hospitalNumber", + readOnly : true, + id : "hospitalNumber", + anchor : '99%', + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : .5, + layout : 'form', + items : [{ + xtype : 'textfield', + fieldLabel : "诊疗号", + name : "treatmentNum", + readOnly : true, + id : "treatmentNum", + anchor : '99%', + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : .5, + layout : 'form', + items : [{ + xtype : 'textfield', + fieldLabel : "病人", + name : "patientName", + readOnly : true, + id : "patientName", + anchor : '99%', + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : .5, + layout : 'form', + items : [{ + xtype : 'textfield', + fieldLabel : '申请时间', + id : 'applicationTime', + name : 'applicationTime', + readOnly:true, + cls:'fieldReadOnlyNoRemove', + anchor : '99%' + }] + },{ + columnWidth : .5, + layout : 'form', + items : [{ + xtype : 'textfield', + fieldLabel : "临床科室确认人", + name : "prepareRecycleComfirmor", + readOnly : true, + id : "prepareRecycleComfirmor", + anchor : '99%', + cls:'fieldReadOnlyNoRemove' + }] + },{ + columnWidth : .5, + layout : 'form', + items : [{ + xtype : 'textfield', + fieldLabel : "接收人", + name : "prepareRecycleOperator", + readOnly : true, + id : "prepareRecycleOperator", + anchor : '99%', + cls:'fieldReadOnlyNoRemove' + }] + },{ + id : "inputTextField", + columnWidth : .5, + layout : 'form', + items : [{ + xtype : 'textfield', + fieldLabel : "扫描条码", + allowBlank : true, + blankText : '请输入!', + name : "inputText", + id : "inputText", + anchor : '99%', + listeners : { + specialkey : function(field, ee) { + if (ee.getKey() == Ext.EventObject.ENTER) { + var barcode = top.Ext.getCmp('inputText').getValue(); + if(!isUndefinedOrNullOrEmpty(barcode)){ + Ext.Ajax.request( { + url : WWWROOT + '/disinfectSystem/tousseTransitionAction!getInfoByBarcode.do', + params : { + barcode : barcode, + recyclingApplicationFormId : id + }, + success : function(response, options) { + var result = Ext.decode(response.responseText); + if(!result.success){ + showResult(result.message); + return; + } + top.Ext.getCmp('inputText').setValue(""); + if(result.type=="User"){ + top.Ext.getCmp('prepareRecycleComfirmor').setValue(result.fullName); + top.Ext.getCmp('confirmerCode').setValue(result.name); + }else if(result.type=="tousseInstance"){ + var node = findNode(result.tousseDefinitionId); + if(!node){ + showResult("当前申请单不包含条码为("+barcode+")的器械包"); + }else{ + var findBarcodeNode = findBarcode(node,barcode); + if(findBarcodeNode){ + top.Ext.Msg.confirm("提示","是否移除["+result.tousseName+"]?",function(btn){ + if (btn == 'yes') { + removeTousseBarcode(result.tousseDefinitionId,barcode); + } + }); + }else{ + addTousseBarcode(result.tousseDefinitionId,barcode); + } + } + }else{ + showResult("请扫描器械包或者人员条码"); + } + }, + failure : function(response, options) { + var result = Ext.decode(response.responseText); + if(result && result.message){ + showResult(result.message); + }else{ + showResult("系统加载失败,请稍候再试"); + } + } + }); + }else{ + showResult('请扫描条码!'); + } + } + } + } + }] + },{ + columnWidth : .5, + layout : 'form', + items : [{ + xtype : 'textfield', + fieldLabel : '交接时间', + id : 'prepareRecycleDateTime', + name : 'prepareRecycleDateTime', + readOnly:true, + cls:'fieldReadOnlyNoRemove', + anchor : '99%' + }] + }] + }] + },{ + columnWidth : 1, + layout : 'fit', + items : tousseTreePanel + }] + }] + }], + buttons : [{ + id : 'saveBtn', + text : '保存', + handler : function(){ + this.disable(); + var success = save(); + if(!success){ + this.enable(); + } + } + }, { + text : '取消', + id : 'saveAndNewBtn', + handler : function(){ + top.Ext.getCmp('tousseTransitionRecordWin').close(); + } + }] + }); + + var tousseTransitionRecordWin = new top.Ext.Window({ + id : 'tousseTransitionRecordWin', + layout : 'fit', + title : '器械交接记录', + modal : true, + border:false, + width : 700, + height : 525, + plain : true, + items : [ formObj ] + }); + tousseTransitionRecordWin.show(); + tousseTransitionRecordWin.on('close', function() { //关闭窗口就清除定时器 + }); + + formObj.form.load({ + url : WWWROOT + '/disinfectSystem/tousseTransitionAction!loadTousseTransitionRecord.do', + method : 'GET', + waitMsg : '正在加载数据,请稍候', + success : function(form, action) { + //设置表单 + top.Ext.getCmp('serialNumber').setValue(action.result.data.serialNumber); + top.Ext.getCmp('applicant').setValue(action.result.data.applicant); + top.Ext.getCmp('depart').setValue(action.result.data.depart); + top.Ext.getCmp('hospitalNumber').setValue(action.result.data.hospitalNum); + top.Ext.getCmp('treatmentNum').setValue(action.result.data.treatmentNum); + top.Ext.getCmp('patientName').setValue(action.result.data.patientName); + top.Ext.getCmp('applicationTime').setValue(action.result.data.applicationTime); + top.Ext.getCmp('prepareRecycleComfirmor').setValue(action.result.data.comfirmor); + top.Ext.getCmp('prepareRecycleOperator').setValue(action.result.data.operator); + top.Ext.getCmp('prepareRecycleDateTime').setValue(action.result.data.prepareRecycleDateTime); + + top.Ext.getCmp('id').setValue(id); + + //设置物品列表 + var tousseItemArray = action.result.data.items; + for(var index = 0;index < tousseItemArray.length;++index){ + var itemData = tousseItemArray[index]; + appendTousseNode(createTousseItemNode(itemData)); + } + if(!isUndefinedOrNullOrEmpty(action.result.data.operator)){ + top.Ext.getCmp('saveBtn').disable(); + }else{ + top.Ext.getCmp('prepareRecycleOperator').setValue(userName); + } + }, + failure : function(form, action) { + showResult("加载失败,请联系管理员!"); + }, + params : { + id : id + } + }); + bindEditorForUntracableTree(tousseTreePanel); + /** + * 获取器械包交接数据,以提交后台 + */ + function getTousseTransitionGridData() { + var tousseTransitionInfo = []; + var root = getTousseTreeRoot(); + root.eachChild(function(node){ + tousseTransitionInfo.push(node.attributes.tousseItem); + }); + return tousseTransitionInfo; + } + + function save() { + if (!formObj.form.isValid()) { + showResult('请正确填写表单各值'); + return false; + } + +// var root = top.Ext.getCmp('basketTreePanel').getRootNode(); + + //获取篮筐和材料的数据 + var tousseTransitionInfo = getTousseTransitionGridData(); + + formObj.form.submit({ + url : WWWROOT + '/disinfectSystem/tousseTransitionAction!save.do', + params : {tousseTransitionInfo :JSON.stringify(tousseTransitionInfo)}, + method : 'POST', + waitMsg : '正在保存数据,请稍候', + waitTitle : '提交表单', + success : function(form, action) { + var validate = Ext.decode(action.result.success); + if(validate){ + showResult(action.result.message); + grid.dwrReload(); + tousseTransitionRecordWin.close(); + }else{ + showResult(action.result.message); + top.Ext.getCmp("saveBtn").enable(); + } + }, + failure : function(form, action) { + if(action.result && action.result.message){ + showResult(action.result.message); + }else{ + showResult("提交失败"); + } + top.Ext.getCmp("saveBtn").enable(); + } + }); + } +} +