Index: ssts-web/src/main/webapp/disinfectsystem/goodsDepartShareConfig/goodsDepartShareConfigForm.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/goodsDepartShareConfig/goodsDepartShareConfigForm.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/goodsDepartShareConfig/goodsDepartShareConfigForm.js (revision 13900) @@ -0,0 +1,245 @@ +var configWin; +var formPanel; + +function cancel() { + configWin.close(); +} +function openSelectReceiverOrganization(departNames,codes){ + var param = { + allowNull:true, + onlyOneOrg : true, + resultType:'code', + tabType : 'orgUnit', + sameLevel :'yes', + range : 'all', + departNames :departNames, + departCodes : codes + }; + var selectedOrgUnitArray = openModalWindow(WWWROOT+"/common/selectOrgByExt.jsp",param, "800", "450"); + //org_3306;org_3219,口腔科;妇科 + var codes =''; + if(selectedOrgUnitArray != null&&selectedOrgUnitArray!=undefined){ + codes = ''; + var tem =''; + var tempArray = selectedOrgUnitArray[0].split(';'); + for(var i=0;i maxDepartLength){ + showResult('最多只能选择' + maxDepartLength + '个科室!'); + return false; + } + saveConfig(); + }else{ + showResult('请填写表单!'); + return false; + } + } + }, { + text : '取消', + id : 'saveAndNewBtn', + handler : cancel + }] + }); + configWin = new top.Ext4.window.Window({ + id : 'satisfactionSurveyApplicationWin', + layout : 'border', + title : '打印发货计划设置', + width : 800, + height : 500, + border : false, + plain : true, + modal :true, + items : [{ + region:'center', + width : 400, + layout :'fit', + items:[formPanel] + }] + }); + configWin.show(); +} + Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/goodsdepartshareconfig/GoodsDepartShareConfig.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/goodsdepartshareconfig/GoodsDepartShareConfig.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/goodsdepartshareconfig/GoodsDepartShareConfig.java (revision 13900) @@ -0,0 +1,101 @@ +package com.forgon.disinfectsystem.entity.goodsdepartshareconfig; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Lob; +import javax.persistence.Table; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; + +/** + * 物品科室共用配置 + * 用于科室间的器械包、高值耗材的录使用记录及科室互借功能的共用 + * @author shuyongfu + * @since 2016-06-22 + * + */ +@Entity +@Table(name = "GoodsDepartShareConfig") +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class GoodsDepartShareConfig { + + private Long id; + /** + * 名称 + */ + private String name; + //用字符串保存每个名称负责的科室代码,科室代码之间以;号隔开 + private String departCodes; + /** + * 科室名称,科室之间以;号隔开 + */ + private String departNames; + + /** + * 顺序 + */ + private Integer orderNum; + + /** + * 备注 + */ + private String remark; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + @Column(length = 3000) + public String getDepartCodes() { + return departCodes; + } + + public void setDepartCodes(String departCodes) { + this.departCodes = departCodes; + } + + @Column(length = 3000) + public String getDepartNames() { + return departNames; + } + + public void setDepartNames(String departNames) { + this.departNames = departNames; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Integer getOrderNum() { + return orderNum; + } + + public void setOrderNum(Integer orderNum) { + this.orderNum = orderNum; + } + + @Column(length = 3000) + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + +} Index: ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml =================================================================== diff -u -r13888 -r13900 --- ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 13888) +++ ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 13900) @@ -748,6 +748,30 @@ class="com.forgon.disinfectsystem.printRecyclingApplicationConfig.dwr.table.PrintConfigTableManager"> + + + + + + + + + + PROPAGATION_REQUIRED + + + + + + + + + + + Index: ssts-web/src/main/webapp/disinfectsystem/useRecord/useRecordForm.js =================================================================== diff -u -r13689 -r13900 --- ssts-web/src/main/webapp/disinfectsystem/useRecord/useRecordForm.js (.../useRecordForm.js) (revision 13689) +++ ssts-web/src/main/webapp/disinfectsystem/useRecord/useRecordForm.js (.../useRecordForm.js) (revision 13900) @@ -145,13 +145,13 @@ if ((goodsInfo.status == hadShipped && sstsConfig.notSignedItemsCanRegistUseRecord != false)|| goodsInfo.status == hadSigned) { if (!compareDate(currentTime, validTime)) { showResult('该器械包已过期!'); - } else if(goodsInfo.locationForDisplay != top.Ext.getCmp('depart').getValue()){ + } /*else if(goodsInfo.locationForDisplay != top.Ext.getCmp('depart').getValue()){ if(top.Ext.getCmp('depart').getValue() == ''){ showResult('该器械包不属于本科室!'); }else{ showResult('该器械包不属于'+top.Ext.getCmp('depart').getValue()+'!'); } - }else { + }*/else { var record = new addTousseInstance({ id : goodsInfo.id, barcode : goodsInfo.barcode, Index: ssts-web/src/main/webapp/disinfectsystem/goodsDepartShareConfig/goodsDepartShareConfigView.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/goodsDepartShareConfig/goodsDepartShareConfigView.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/goodsDepartShareConfig/goodsDepartShareConfigView.js (revision 13900) @@ -0,0 +1,118 @@ +var grid; +/** + * 修改记录 + * modifyRecord函数 触发modify函数调用,并传入当前列的值以及record.data对象 + * 页面中需要定义 modify(v,data) 函数 + */ +function modify(v,data){ + editConfig(data.id); +} + +function moveUp(number){ + if(number>1){ + PrintConfigTableManager.moveUpRecord(number,function(){ + grid.getStore().reload(); + }); + } +} +function moveDown(number){ + PrintConfigTableManager.moveDownRecord(number,function(){ + grid.getStore().reload(); + }); +} + +Ext.onReady(function() { + Ext.QuickTips.init(); + + function moveUpDown(v, p, record){ + var html = ''; + html += '向上移动     '; + html += ''; + html += '向下移动'; + return html; + } + + var columns = [ + {header : "标识号",dataIndex : 'id',hidden :true}, + {header : "名称",dataIndex : 'name',width : 150, renderer : modifyRecord}, + {id : 'departNames',header : "科室名称",dataIndex : 'departNames'}, + {header : "备注",dataIndex : 'remark',width : 300}, + {header : "排序操作",dataIndex : 'orderNum', renderer : moveUpDown, sortable: false, menuDisabled: true}, + {header : "科室代码",dataIndex : 'departCodes',hidden : true} + ]; + var filters = new Ext.grid.GridFilters({ + filters : [ + {type:'string',dataIndex:'name'} + ] + }); + var readerDetail = [ + {name : 'id'}, + {name : 'name'}, + {name : 'remark'}, + {name : 'departNames'}, + {name : 'departCodes'}, + {name : 'orderNum'} + ]; + + var tbar = [{ + text : '添加', + hidden : SSTS_printApplication_manager, + iconCls : 'btn_ext_application_add', + handler : function() { + showWindow(); + } + },'-',{ + text : '修改', + hidden : SSTS_printApplication_manager, + iconCls : 'btn_ext_application_edit', + handler : function() { + var records = grid.getSelectionModel().getSelections(); + if (records.length == 0) { + showResult("请选择要修改的数据!"); + return false; + } + if (records.length > 1) { + showResult("请选择要修改的数据!"); + return false; + } + id = records[0].data['id']; + editConfig(id); + } + }, '-', { + text : '删除', + hidden : SSTS_printApplication_manager, + iconCls : 'btn_ext_application_del', + handler : function() { + deleteConfig(grid); + } + }]; + var dwrCallParams = null; + Ext.ux.ForgonPageGrid.prototype.getGridParameterMap = function() {}; + grid = new Ext.ux.ForgonPageGrid( { + tbar : tbar, + pageSize : 20, + defaultSortField : 'orderNum', + defaultSortDirection : 'ASC', + title : '物品科室共用配置', + isCheckboxSelectionModel : true, + rememberSelected : false, + isShowSearchField : true, + columns : columns, + plugins : filters, + autoExpandColumn : 'departNames', + renderTo : 'gridDiv', + frame : false + }, readerDetail, + GoodsDepartShareConfigTableManager.findAllGoodsDepartShareConfig, + 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/goodsDepartShareConfig/goodsDepartShareConfigView.jsp =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/goodsDepartShareConfig/goodsDepartShareConfigView.jsp (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/goodsDepartShareConfig/goodsDepartShareConfigView.jsp (revision 13900) @@ -0,0 +1,72 @@ +<%@page import="java.util.Date"%> +<%@page import="java.text.SimpleDateFormat"%> +<%@ page contentType="text/html; charset=UTF-8"%> +<%@ include file="/common/taglibs.jsp"%> +<% + request.setAttribute("userName",AcegiHelper.getLoginUser().getUserFullName()); + request.setAttribute("orgunit",AcegiHelper.getLoginUser().getCurrentOrgUnitName()); + request.setAttribute("orgUnitCoding",AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig()); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + request.setAttribute("today", dateFormat.format(new Date())); +%> + + + +<%@ include file="/common/includeExtJsAndCss.jsp"%> +<%@ include file="/common/includeExtJs4_2.jsp"%> + +打印回收单设置 + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +
+ + + \ No newline at end of file Index: ssts-web/src/main/java/com/forgon/disinfectsystem/borrowrecord/action/BorrowRecordAction.java =================================================================== diff -u -r13612 -r13900 --- ssts-web/src/main/java/com/forgon/disinfectsystem/borrowrecord/action/BorrowRecordAction.java (.../BorrowRecordAction.java) (revision 13612) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/borrowrecord/action/BorrowRecordAction.java (.../BorrowRecordAction.java) (revision 13900) @@ -24,10 +24,15 @@ import com.forgon.directory.model.BarcodeDevice; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.borrowrecord.service.BorrowRecordManager; +import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveDisposablegoods; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.borrowrecord.BorrowRecord; +import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.exception.RecyclingRecordException; +import com.forgon.disinfectsystem.invoicemanager.service.InvoiceManager; import com.forgon.tools.StrutsParamUtils; import com.opensymphony.xwork2.ModelDriven; import com.opensymphony.xwork2.Preparable; @@ -43,6 +48,8 @@ private BarcodeManager barcodeManager; private BorrowRecord borrowRecord; + + private InvoiceManager invoiceManager; public void setBorrowRecordManager(BorrowRecordManager borrowRecordManager) { this.borrowRecordManager = borrowRecordManager; @@ -52,6 +59,10 @@ this.barcodeManager = barcodeManager; } + public void setInvoiceManager(InvoiceManager invoiceManager) { + this.invoiceManager = invoiceManager; + } + public void saveBorrowRecord() { if (borrowRecord != null) { SimpleDateFormat dateFormat = new SimpleDateFormat( @@ -90,7 +101,7 @@ } HttpServletResponse httpServletResponse = StrutsParamUtils .getResponse(); - httpServletResponse.setCharacterEncoding("UTF-8"); + httpServletResponse.setContentType("text/html;charset=UTF-8"); try { httpServletResponse.getWriter().print( "{success:true,message:'" + message + "'}"); @@ -141,64 +152,116 @@ if (StringUtils.isNotBlank(barcode)) { BarcodeDevice barcodeDevice = barcodeManager .getBarcodeByBarcode(barcode); - if (barcodeDevice != null - && barcodeDevice instanceof TousseInstance) { - TousseInstance tousseInstance = (TousseInstance) barcodeDevice; - if (TousseInstance.STATUS_SHIPPED.equals(tousseInstance - .getStatus()) - || TousseInstance.STATUS_SIGNED.equals(tousseInstance - .getStatus())) { - if (borrowRecord.getId() == null) { - if (!StringUtils.equals(AcegiHelper.getLoginUser() - .getCurrentOrgUnitCode(), - tousseInstance.getLocation())) { - message = "{success:false,msg:'该器械包不属于" - + AcegiHelper - .getLoginUser() - .getCurrentOrgUnitName() - + "。'}"; - } else { - type = "借用"; - message = "{success:true,name:'" - + tousseInstance.getTousseDefinitionName() - + "',barcode:'" - + tousseInstance.getBarcode() + "',type:'" - + type + "'}"; + if (barcodeDevice != null){ + if (barcodeDevice instanceof TousseInstance) { + TousseInstance tousseInstance = (TousseInstance) barcodeDevice; + if (TousseInstance.STATUS_SHIPPED.equals(tousseInstance + .getStatus()) + || TousseInstance.STATUS_SIGNED.equals(tousseInstance + .getStatus())) { + if (borrowRecord.getId() == null) { + if (!StringUtils.equals(AcegiHelper.getLoginUser() + .getCurrentOrgUnitCode(), + tousseInstance.getLocation())) { + message = "{success:false,msg:'该器械包不属于" + + AcegiHelper + .getLoginUser() + .getCurrentOrgUnitName() + + "。'}"; + } else { + type = "借用"; + message = "{success:true,name:'" + + tousseInstance.getTousseDefinitionName() + + "',barcode:'" + + tousseInstance.getBarcode() + "',type:'" + + type + "'}"; + } + } else if (StringUtils.equals(borrowRecord.getStatus(), + BorrowRecord.STATUS_BORROWED)) { + type = "归还"; + if (StringUtils.equals(borrowRecord.getDepartCode(), + tousseInstance.getLocation())) { + for (TousseItem item : borrowRecord.getItems()) { + if (StringUtils.equals(item.getTousseName(), + tousseInstance + .getTousseDefinitionName())) { + message = "{success:true,name:'" + + tousseInstance + .getTousseDefinitionName() + + "',barcode:'" + + tousseInstance.getBarcode() + + "',type:'" + type + "'}"; + break; + } + } + } else { + message = "{success:false,msg:'该器械包不属于" + + borrowRecord.getDepartName() + "。'}"; + } } - } else if (StringUtils.equals(borrowRecord.getStatus(), - BorrowRecord.STATUS_BORROWED)) { - type = "归还"; - if (StringUtils.equals(borrowRecord.getDepartCode(), - tousseInstance.getLocation())) { - for (TousseItem item : borrowRecord.getItems()) { - if (StringUtils.equals(item.getTousseName(), - tousseInstance - .getTousseDefinitionName())) { - message = "{success:true,name:'" - + tousseInstance - .getTousseDefinitionName() - + "',barcode:'" - + tousseInstance.getBarcode() - + "',type:'" + type + "'}"; - break; + } else { + message = "{success:false,msg:'该器械包的状态为" + + tousseInstance.getStatus() + ",不能借出。'}"; + } + }else if (barcodeDevice instanceof ExpensiveDisposablegoods) { + ExpensiveDisposablegoods expensiveDisposablegoods = (ExpensiveDisposablegoods) barcodeDevice; + if (ExpensiveDisposablegoods.STATUS_DELIVERED.equals(expensiveDisposablegoods.getStatus())) { + Invoice invoice = invoiceManager.getInvoiceById(expensiveDisposablegoods.getInvoiceId()); + DisposableGoodsStock disposableGoodsStock = + expensiveDisposablegoods.getDisposableGoodsBatchStock().getDiposableGoods(); + String goodsName = CssdUtils.getDiposableGoodsName(disposableGoodsStock); + if (borrowRecord.getId() == null) { + //判断高值耗材所在科室是否与当前用户所在科室共用 + if (!StringUtils.equals(borrowRecord.getDepartCode(), invoice.getInvoicePlan().getDepartCoding())) { + message = "{success:false,msg:'该高值耗材不属于" + + AcegiHelper + .getLoginUser() + .getCurrentOrgUnitName() + + "。'}"; + } else { + type = "借用"; + message = "{success:true,name:'" + + goodsName + + "',barcode:'" + + expensiveDisposablegoods.getBarcode() + "',type:'" + + type + "'}"; + } + } else if (StringUtils.equals(borrowRecord.getStatus(), + BorrowRecord.STATUS_BORROWED)) { + type = "归还"; + if (!StringUtils.equals(borrowRecord.getDepartCode(), invoice.getInvoicePlan().getDepartCoding())) { + for (TousseItem item : borrowRecord.getItems()) { + if (StringUtils.equals(item.getTousseName(), + goodsName)) { + message = "{success:true,name:'" + + goodsName + + "',barcode:'" + + expensiveDisposablegoods.getBarcode() + + "',type:'" + type + "'}"; + break; + } } + } else { + message = "{success:false,msg:'该高值耗材不属于" + + borrowRecord.getDepartName() + "及其物品共用配置的科室。'}"; } - } else { - message = "{success:false,msg:'该器械包不属于" - + borrowRecord.getDepartName() + "。'}"; } + } else { + message = "{success:false,msg:'该高值耗材的状态为" + + expensiveDisposablegoods.getStatus() + ",不能借出。'}"; } } else { - message = "{success:false,msg:'该器械包的状态为" - + tousseInstance.getStatus() + ",不能借出。'}"; + message = "{success:false,msg:'没有找到该条码对应的器械包或高值耗材。'}"; } + } else { - message = "{success:false,msg:'没有找到该条码对应的器械包。'}"; + message = "{success:false,msg:'没有找到该条码对应的器械包或高值耗材。'}"; } - + } else { + message = "{success:false,msg:'条码不能为空。'}"; } try { - StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); + StrutsParamUtils.getResponse().setContentType("text/html;charset=UTF-8"); StrutsParamUtils.getResponse().getWriter().println(message); } catch (IOException e) { e.printStackTrace(); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsdepartshareconfig/service/GoodsDepartShareConfigManager.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsdepartshareconfig/service/GoodsDepartShareConfigManager.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsdepartshareconfig/service/GoodsDepartShareConfigManager.java (revision 13900) @@ -0,0 +1,32 @@ +package com.forgon.disinfectsystem.basedatamanager.goodsdepartshareconfig.service; + +import java.util.List; + +import com.forgon.disinfectsystem.entity.goodsdepartshareconfig.GoodsDepartShareConfig; + +/** + * 物品科室共用配置manager接口 + * @author shuyongfu + * @since 2016-06-22 + * + */ +public interface GoodsDepartShareConfigManager { + + GoodsDepartShareConfig getGoodsDepartShareConfigById(String id); + + public void saveOrUpdate(GoodsDepartShareConfig goodsDepartShareConfig); + + public void deleteGoodsDepartShareConfigByIds(String ids); + + public List findGoodsDepartShareConfigBySql(String sql); + + public List getGoodsShareDepartList(String departCoding); + + /** + * 判断两个科室是否为共用科室 + * @param departCode + * @param otherDepartCode + * @return + */ + public boolean canShareGoodsforTwoDepart(String departCode , String otherDepartCode); +} Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java =================================================================== diff -u -r13817 -r13900 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java (.../UseRecordAction.java) (revision 13817) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java (.../UseRecordAction.java) (revision 13900) @@ -26,6 +26,7 @@ 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.goodsdepartshareconfig.service.GoodsDepartShareConfigManager; import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; @@ -75,6 +76,8 @@ private DiposableGoodsManager diposableGoodsManager; + private GoodsDepartShareConfigManager goodsDepartShareConfigManager; + public void setBarcodeManager(BarcodeManager barcodeManager) { this.barcodeManager = barcodeManager; } @@ -104,6 +107,11 @@ this.diposableGoodsManager = diposableGoodsManager; } + public void setGoodsDepartShareConfigManager( + GoodsDepartShareConfigManager goodsDepartShareConfigManager) { + this.goodsDepartShareConfigManager = goodsDepartShareConfigManager; + } + public void getOperationName() { List list = httpOptionManager .getHttpOptionTextById(HttpOption.SYSTENSETTING_OPERATION_NAME); @@ -571,30 +579,37 @@ if (TousseInstance.STATUS_WAIT_FOR_RECALL.equals(ti.getStatus()) || TousseInstance.STATUS_RECALLED.equals(ti.getStatus())) { obj.put("msg", "该器械包不能被使用,已被召回!"); } else { - Date validUntil = ti.getValidUntil(); - String validUntilStr = ""; - if (validUntil != null) { - validUntilStr = new SimpleDateFormat("yyyy-MM-dd") - .format(validUntil); + //检测器械包所属科室是否与当前用户所在科室为物品共用科室 + String currentOrgUnitCode = AcegiHelper.getCurrentOrgUnitCode(); + if(!goodsDepartShareConfigManager.canShareGoodsforTwoDepart(currentOrgUnitCode, ti.getLocation())){ + obj.put("msg", "该器械包所属科室为" + ti.getLocationForDisplay() + ",未配置与当前科室共用,不能录入使用记录!"); + }else{ + Date validUntil = ti.getValidUntil(); + String validUntilStr = ""; + if (validUntil != null) { + validUntilStr = new SimpleDateFormat("yyyy-MM-dd") + .format(validUntil); + } + TousseDefinition td = ti.getTousseDefinition(); + String tousseDefinitionName = ""; + String tousseType = ""; + if (td != null) { + tousseType = td.getTousseType(); + tousseDefinitionName = td.getName(); + } + obj.put("id", ti.getId()); + obj.put("barcode", ti.getBarcode()); + obj.put("tousseDefinitionName", tousseDefinitionName); + obj.put("showTousseName", ti.getShowTousseName()); + obj.put("packageType", ti.getPackageType()); + obj.put("validUntil", validUntilStr); + obj.put("status", ti.getStatus()); + obj.put("location",ti.getLocation()); + obj.put("locationForDisplay",ti.getLocationForDisplay()); + obj.put("materials", null); + obj.put("foreignTousseApp_id",ti.getForeignTousseApp_id()); + obj.put("tousseType", tousseType); } - TousseDefinition td = ti.getTousseDefinition(); - String tousseDefinitionName = ""; - String tousseType = ""; - if (td != null) { - tousseType = td.getTousseType(); - tousseDefinitionName = td.getName(); - } - obj.put("id", ti.getId()); - obj.put("barcode", ti.getBarcode()); - obj.put("tousseDefinitionName", tousseDefinitionName); - obj.put("showTousseName", ti.getShowTousseName()); - obj.put("packageType", ti.getPackageType()); - obj.put("validUntil", validUntilStr); - obj.put("status", ti.getStatus()); - obj.put("locationForDisplay",ti.getLocationForDisplay()); - obj.put("materials", null); - obj.put("foreignTousseApp_id",ti.getForeignTousseApp_id()); - obj.put("tousseType", tousseType); } } else if (bd instanceof ExpensiveDisposablegoods) { // 高值耗材 @@ -640,10 +655,17 @@ return; } - if(!StringUtils.equals(invoice.getDepart(), AcegiHelper.getLoginUser().getCurrentOrgUnitName())){ + /*if(!StringUtils.equals(invoice.getDepart(), AcegiHelper.getLoginUser().getCurrentOrgUnitName())){ obj.put("success", false); obj.put("error", String.format("条码为[%s]的高值耗材所属科室与当前登录用户所属科室不一致", barcode)); return; + }*/ + //检测器械包所属科室是否与当前用户所在科室为物品共用科室 + String currentOrgUnitCode = AcegiHelper.getCurrentOrgUnitCode(); + if(!goodsDepartShareConfigManager.canShareGoodsforTwoDepart(currentOrgUnitCode, expensiveDisposablegoods.getLocation())){ + obj.put("success", false); + obj.put("error", String.format("条码为[%s]的高值耗材所属科室为" + invoice.getDepart() + ",未配置与当前科室共用,不能录入使用记录!", barcode)); + return; } Long disposableGoodsBatchId = expensiveDisposablegoods.getDisposableGoodsBatchID(); Index: ssts-web/src/main/webapp/WEB-INF/dwr.xml =================================================================== diff -u -r13695 -r13900 --- ssts-web/src/main/webapp/WEB-INF/dwr.xml (.../dwr.xml) (revision 13695) +++ ssts-web/src/main/webapp/WEB-INF/dwr.xml (.../dwr.xml) (revision 13900) @@ -119,6 +119,11 @@ + + + + + Index: ssts-web/src/main/webapp/disinfectsystem/borrowRecord/borrowRecordView.js =================================================================== diff -u -r12331 -r13900 --- ssts-web/src/main/webapp/disinfectsystem/borrowRecord/borrowRecordView.js (.../borrowRecordView.js) (revision 12331) +++ ssts-web/src/main/webapp/disinfectsystem/borrowRecord/borrowRecordView.js (.../borrowRecordView.js) (revision 13900) @@ -554,10 +554,11 @@ return false; } - bindTreeData(); + //bindTreeData(); + bindTreeDataJson(); if (top.Ext.getCmp('tousseItems').getValue() == null || top.Ext.getCmp('tousseItems').getValue() == '') { - showResult('请输入想要借用的器械包!'); + showResult('请输入想要借用的器械包或高值耗材!'); return false; } @@ -621,6 +622,33 @@ } } +/** + * 获取已归还器械包明细的数据 设置数据格式如下: + * [{id:1,name:'',amount:2,items:[{name:'010001234',type:'借出'},{name:'012220154',type:'借出'}]},...{id:2,name:'',amount:3,items:[{name:'010001234',type:'借出'},{name:'012220154',type:'借出'}]}] + */ +function bindTreeDataJson() { + var items = []; + var rootNode = borrowedRecordItemTree.getRootNode(); + rootNode.eachChild(function(borrowNode) { + var obj = {}; + obj.id = borrowNode.attributes.id; + obj.name = borrowNode.attributes.name; + obj.amount = borrowNode.attributes.amount; + var objArray = []; + borrowNode.eachChild(function(tousseInstanceNode) { + var subObj = {}; + subObj.name = tousseInstanceNode.attributes.name; + subObj.type = tousseInstanceNode.attributes.amount; + objArray.push(subObj); + }); + obj.items = objArray; + items.push(obj); + }); + if(items.length > 0){ + top.Ext.getCmp('tousseItems').setValue(JSON.stringify(items)); + } +} + function setIsClickAdd(v) { isClickAdd = (v == 1 ? true : false); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsdepartshareconfig/dwr/table/GoodsDepartShareConfigTableManager.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsdepartshareconfig/dwr/table/GoodsDepartShareConfigTableManager.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsdepartshareconfig/dwr/table/GoodsDepartShareConfigTableManager.java (revision 13900) @@ -0,0 +1,70 @@ +package com.forgon.disinfectsystem.basedatamanager.goodsdepartshareconfig.dwr.table; + +import java.util.List; +import java.util.Map; + +import com.forgon.component.grid.GridManager; +import com.forgon.disinfectsystem.entity.goodsdepartshareconfig.GoodsDepartShareConfig; +import com.forgon.tools.hibernate.ObjectDao; + +/** + * 物品科室共用dwr请求处理类 + * @author shuyongfu + * + */ +public class GoodsDepartShareConfigTableManager { + private GridManager gridManager; + private ObjectDao objectDao; + public void setObjectDao(ObjectDao objectDao) { + this.objectDao = objectDao; + } + public void setGridManager(GridManager gridManager) { + this.gridManager = gridManager; + } + + public String findAllGoodsDepartShareConfig(Map> parameterMap){ + String sql = ""; + return gridManager.renderGrid(parameterMap, + GoodsDepartShareConfig.class.getSimpleName(), sql, new String[] { }); + } + + public void moveUpRecord(String number){ + Integer numberOrder = Integer.parseInt(number); + //判断是不是第二条记录 + if(numberOrder>1){ + GoodsDepartShareConfig currentGoodsDepartShareConfig = (GoodsDepartShareConfig) objectDao.getByProperty(GoodsDepartShareConfig.class.getSimpleName() + , "orderNum", numberOrder); + currentGoodsDepartShareConfig.setOrderNum(numberOrder-1); + + GoodsDepartShareConfig goodsDepartShareConfig = (GoodsDepartShareConfig) objectDao.getByProperty(GoodsDepartShareConfig.class.getSimpleName() + , "orderNum", numberOrder-1); + goodsDepartShareConfig.setOrderNum(goodsDepartShareConfig.getOrderNum()+1); + + objectDao.saveOrUpdate(currentGoodsDepartShareConfig); + objectDao.saveOrUpdate(goodsDepartShareConfig); + } + } + + public void moveDownRecord(String number){ + + Integer numberOrder = Integer.parseInt(number); + + GoodsDepartShareConfig goodsDepartShareConfig = (GoodsDepartShareConfig) objectDao.getByProperty(GoodsDepartShareConfig.class.getSimpleName() + , "orderNum", numberOrder+1); + + if(goodsDepartShareConfig != null){ + GoodsDepartShareConfig currentGoodsDepartShareConfig = (GoodsDepartShareConfig) objectDao. + getByProperty(GoodsDepartShareConfig.class.getSimpleName() + , "orderNum", numberOrder); + currentGoodsDepartShareConfig.setOrderNum(numberOrder+1); + + goodsDepartShareConfig.setOrderNum(goodsDepartShareConfig.getOrderNum()-1); + + objectDao.saveOrUpdate(currentGoodsDepartShareConfig); + objectDao.saveOrUpdate(goodsDepartShareConfig); + } + + + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsdepartshareconfig/service/GoodsDepartShareConfigManagerImpl.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsdepartshareconfig/service/GoodsDepartShareConfigManagerImpl.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsdepartshareconfig/service/GoodsDepartShareConfigManagerImpl.java (revision 13900) @@ -0,0 +1,137 @@ +package com.forgon.disinfectsystem.basedatamanager.goodsdepartshareconfig.service; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; + +import com.forgon.disinfectsystem.entity.goodsdepartshareconfig.GoodsDepartShareConfig; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.db.InitDbConnection; +import com.forgon.tools.hibernate.ObjectDao; + +/** + * 物品科室共用配置manager实现类 + * @author shuyongfu + * @since 2016-06-22 + * + */ +public class GoodsDepartShareConfigManagerImpl implements GoodsDepartShareConfigManager { + private ObjectDao objectDao; + + private InitDbConnection dbConnection; + + public void setObjectDao(ObjectDao objectDao) { + this.objectDao = objectDao; + } + + public void setDbConnection(InitDbConnection dbConnection) { + this.dbConnection = dbConnection; + } + + + @Override + public GoodsDepartShareConfig getGoodsDepartShareConfigById(String id) { + + return (GoodsDepartShareConfig) objectDao.getByProperty(GoodsDepartShareConfig.class.getSimpleName(), "id", Long.valueOf(id)); + } + + @Override + public void saveOrUpdate(GoodsDepartShareConfig goodsDepartShareConfig) { + if(goodsDepartShareConfig.getOrderNum() == null){ + String sql = "select max(p.orderNum) from GoodsDepartShareConfig p"; + ResultSet resultSet = objectDao.executeSql(sql); + try { + while(resultSet.next()){ + int orderNum = resultSet.getInt(1); + goodsDepartShareConfig.setOrderNum(orderNum+1); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(resultSet); + } + } + objectDao.saveOrUpdate(goodsDepartShareConfig); + + } + + @Override + public void deleteGoodsDepartShareConfigByIds(String ids) { + List idList = null; + String[] idArray = ids.split(","); + if(idArray.length != 0){ + idList = new ArrayList(); + for(String id: idArray){ + idList.add(Long.valueOf(id)); + } + objectDao.delete(GoodsDepartShareConfig.class.getSimpleName(), idList); + } + } + + @SuppressWarnings("unchecked") + @Override + public List findGoodsDepartShareConfigBySql(String sql) { + if(sql.length() >0){ + return objectDao.findBySql(GoodsDepartShareConfig.class.getSimpleName(), sql); + } + return null; + } + + /** + * 根据科室编码获取可与该科室共用物品的所有其它科室 + */ + public List getGoodsShareDepartList(String departCoding){ + List departCodingList = null; + String hql = "where departCodes like '%" + departCoding + "%;'"; + if(DatabaseUtil.isOracle(dbConnection.getDatabase())){ + hql = "where ';'||departCodes||';' like '%" + departCoding + "%;'"; + } else if(DatabaseUtil.isSqlServer(dbConnection.getDatabase())){ + hql = "where ';'+departCodes+';' like '%" + departCoding + "%;'"; + } + List goodsDepartShareList = objectDao.findBySql(GoodsDepartShareConfig.class.getSimpleName(), hql); + if(CollectionUtils.isNotEmpty(goodsDepartShareList)){ + departCodingList = new ArrayList(); + for(GoodsDepartShareConfig config : goodsDepartShareList){ + String departCodes = config.getDepartCodes(); + if(StringUtils.isNotBlank(departCodes)){ + String[] departCodeArray = departCodes.split(";"); + for(String departCode : departCodeArray){ + if(!StringUtils.equals(departCoding, departCode) && !departCodingList.contains(departCode)){ + departCodingList.add(departCode); + } + } + } + } + } + return departCodingList; + } + + /** + * 判断两个科室是否为共用科室 + * @param departCode + * @param otherDepartCode + * @return + */ + public boolean canShareGoodsforTwoDepart(String departCode , String otherDepartCode){ + boolean success = false; + if(StringUtils.equals(departCode, otherDepartCode)){ + success = true; + } else if(StringUtils.isNotBlank(departCode) && StringUtils.isNotBlank(otherDepartCode)){ + String hql = "where departCodes like '%" + departCode + "%;' and departCodes like '%" + otherDepartCode + "%;'"; + if(DatabaseUtil.isOracle(dbConnection.getDatabase())){ + hql = "where ';'||departCodes||';' like '%" + departCode + "%;' and ';'||departCodes||';' like '%" + otherDepartCode + "%;'"; + } else if(DatabaseUtil.isSqlServer(dbConnection.getDatabase())){ + hql = "where ';'+departCodes+';' like '%" + departCode + "%;' and ';'+departCodes+';' like '%" + otherDepartCode + "%;'"; + } + List goodsDepartShareList = objectDao.findBySql(GoodsDepartShareConfig.class.getSimpleName(), hql); + if(CollectionUtils.isNotEmpty(goodsDepartShareList)){ + success = true; + } + } + return success; + } +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsdepartshareconfig/action/GoodsDepartShareConfigAction.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsdepartshareconfig/action/GoodsDepartShareConfigAction.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/goodsdepartshareconfig/action/GoodsDepartShareConfigAction.java (revision 13900) @@ -0,0 +1,170 @@ +package com.forgon.disinfectsystem.basedatamanager.goodsdepartshareconfig.action; + +import java.io.IOException; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletResponse; + +import net.sf.json.JSONObject; + +import org.apache.commons.lang.StringUtils; +import org.apache.struts2.convention.annotation.Action; +import org.apache.struts2.convention.annotation.Namespace; +import org.apache.struts2.convention.annotation.ParentPackage; + +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.disinfectsystem.basedatamanager.goodsdepartshareconfig.service.GoodsDepartShareConfigManager; +import com.forgon.disinfectsystem.entity.goodsdepartshareconfig.GoodsDepartShareConfig; +import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.ObjectDao; +import com.opensymphony.xwork2.ModelDriven; +import com.opensymphony.xwork2.Preparable; + + +/** + * 物品科室配置action类 + * @author shuyongfu + * @since 2016-06-22 + * + */ +@ParentPackage(value = "default") +@Namespace(value = "/disinfectSystem") +@Action(value = "goodsDepartShareConfigAction") +public class GoodsDepartShareConfigAction implements ModelDriven,Preparable{ + + private GoodsDepartShareConfig goodsDepartShareConfig; + + private GoodsDepartShareConfigManager goodsDepartShareConfigManager; + + public void setGoodsDepartShareConfig( + GoodsDepartShareConfig goodsDepartShareConfig) { + this.goodsDepartShareConfig = goodsDepartShareConfig; + } + + public void setGoodsDepartShareConfigManager( + GoodsDepartShareConfigManager goodsDepartShareConfigManager) { + this.goodsDepartShareConfigManager = goodsDepartShareConfigManager; + } + + /** + * 保存物品科室配置action类 + */ + public void saveConfig(){ + JSONObject jsonObject = new JSONObject(); + HttpServletResponse httpServletResponse = StrutsParamUtils + .getResponse(); + try { + jsonObject.put("success", true); + httpServletResponse.setContentType("text/html;charset=UTF-8"); + + goodsDepartShareConfigManager.saveOrUpdate(goodsDepartShareConfig); + httpServletResponse.getWriter().println(jsonObject); + } catch (RuntimeException e) { + try { + jsonObject.put("success", false); + jsonObject.put("message", e.getMessage()); + httpServletResponse.getWriter().println(jsonObject); + } catch (IOException e1) { + e1.printStackTrace(); + } + } catch (Exception e) { + e.printStackTrace(); + try { + jsonObject.put("success", false); + jsonObject.put("message", e.getMessage()); + httpServletResponse.getWriter().println(jsonObject); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + } + + public void deleteConfig(){ + String ids = StrutsParamUtils.getPraramValue("ids", ""); + JSONObject jsonObject = new JSONObject(); + try { + if (StringUtils.isNotBlank(ids)) { + goodsDepartShareConfigManager.deleteGoodsDepartShareConfigByIds(ids); + jsonObject.put("success", true); + } + } catch (Exception e) { + jsonObject.put("success", false); + e.printStackTrace(); + } + HttpServletResponse httpServletResponse = StrutsParamUtils + .getResponse(); + httpServletResponse.setContentType("text/html;charset=UTF-8"); + + try { + httpServletResponse.getWriter().print(jsonObject); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 加载配置数据 + */ + public void loadConfigData(){ + String id = StrutsParamUtils.getPraramValue("id", ""); + if (StringUtils.isNotBlank(id)) { + goodsDepartShareConfig = goodsDepartShareConfigManager.getGoodsDepartShareConfigById(id); + Map map = new HashMap(); + map.put("success", true); + if(goodsDepartShareConfig != null){ + map.put("data", goodsDepartShareConfig); + } + HttpServletResponse httpServletResponse = StrutsParamUtils + .getResponse(); + httpServletResponse.setContentType("text/html;charset=UTF-8"); + try { + JSONObject jsonObject = JSONObject.fromObject(map); + String jsonStr = jsonObject.toString(); + StrutsParamUtils.getResponse().getWriter().println(jsonStr); + } catch (Exception e) { + map.put("success", false); + e.printStackTrace(); + } + } + } + + /** + * 查询科室的物品公共科室 + */ + public void getGoodsShareDepartList(){ + try { + String departCode = StrutsParamUtils.getPraramValue("departCode", ""); + if(StringUtils.isBlank(departCode)){ + departCode = AcegiHelper.getCurrentOrgUnitCode(); + } + List departCodeList = goodsDepartShareConfigManager.getGoodsShareDepartList(departCode); + System.out.println(departCodeList); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void prepare() throws Exception { + iniInfo(); + } + + @Override + public GoodsDepartShareConfig getModel() { + return goodsDepartShareConfig; + } + + public void iniInfo() { + String id = StrutsParamUtils.getPraramValue("id", ""); + if (DatabaseUtil.isPoIdValid(id)) { + goodsDepartShareConfig = goodsDepartShareConfigManager.getGoodsDepartShareConfigById(id); + } else { + goodsDepartShareConfig = new GoodsDepartShareConfig(); + } + } +} Index: ssts-web/src/main/webapp/homepage/menuconfigure.js =================================================================== diff -u -r13786 -r13900 --- ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 13786) +++ ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 13900) @@ -461,6 +461,7 @@ {hidden :SSTS_RecyclePrint_Menu || (printRecyclingConfigFormVersion!=1),text:"打印发货计划设置",href:WWWROOT+'/disinfectsystem/printRecyclingConfig/printRecyclingConfigView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_RecyclePrint_Menu || (printRecyclingConfigFormVersion!=2),text:"打印发货计划设置",href:WWWROOT+'/disinfectsystem/printRecyclingConfig2/printRecyclingConfigView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_RecyclePrint_Menu,text:"回收科室分组设置",href:WWWROOT+'/disinfectsystem/basedatamanager/departmentgroup/departmentgroupView.jsp',hrefTarget:linkTarget,leaf:true}, + {hidden :SSTS_RecyclePrint_Menu,text:"物品科室共用配置",href:WWWROOT+'/disinfectsystem/goodsDepartShareConfig/goodsDepartShareConfigView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_SpecialInfection_Serch,text:"特殊感染类型设置",href:WWWROOT+'/systemmanage/httpOption.mhtml?listId=specialInfection',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_application_end_cause_Serch,text:"申请单终止原因设置",href:WWWROOT+'/systemmanage/httpOption.mhtml?listId=application_end_cause',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_application_end_cause_Serch,text:"器械包废弃原因设置",href:WWWROOT+'/systemmanage/httpOption.mhtml?listId=tousse_discard_cause',hrefTarget:linkTarget,leaf:true},