Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/action/OperationReservationAction.java =================================================================== diff -u -r17263 -r17296 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/action/OperationReservationAction.java (.../OperationReservationAction.java) (revision 17263) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/action/OperationReservationAction.java (.../OperationReservationAction.java) (revision 17296) @@ -202,9 +202,26 @@ success = false; message = e.getMessage(); } - StrutsResponseUtils.output(success, message);; + StrutsResponseUtils.output(success, message); } + /** + * 批量打印手术预约单 + */ + public void batchPrintOperationReservation(){ + String ids = StrutsParamUtils.getPraramValue("ids", ""); + boolean success = true; + String message = ""; + try { + StrutsResponseUtils.output(operationReservationManager.batchPrintOperationReservation(ids)); + } catch (Exception e) { + success = false; + message = e.getMessage(); + StrutsResponseUtils.output(success, message); + } + + } + @Override public void prepare() throws Exception { Index: ssts-web/src/main/webapp/disinfectsystem/invoice/operationReservationView.js =================================================================== diff -u -r17263 -r17296 --- ssts-web/src/main/webapp/disinfectsystem/invoice/operationReservationView.js (.../operationReservationView.js) (revision 17263) +++ ssts-web/src/main/webapp/disinfectsystem/invoice/operationReservationView.js (.../operationReservationView.js) (revision 17296) @@ -719,6 +719,61 @@ } ); } +function batchPrintOperationReservation(grid){ + var records = grid.getSelectionModel().getSelections(); + + if (records.length == 0) { + showResult("请选择要打印的单据!"); + return false; + } + var ids = ""; + var firstDate = null; + for ( var i = 0, len = records.length; i < len; i++) { + if (ids != "") { + ids += ";"; + } + ids += records[i].data['id']; + var operationDate = records[i].data.operationTime.substr(0,10); + if(!firstDate){ + //未设置第一个时间值,用当前的时间值来设置第一个时间值,后面的单,手术时间必须与这个相等 + if(operationDate){ + firstDate = operationDate; + } + } + if(firstDate){ + var currentDate = firstDate; + if(operationDate){ + currentDate = operationDate; + } + + if(!dateEquals(currentDate,firstDate)){ + showResult("请选择手术日期相同的单据!"); + return false; + } + } + } + top.Ext.MessageBox.confirm("请确认","是否确定要打印选中的手术预约单信息?", + function(button, text) { + if ("yes" == button){ + Ext.Ajax.request({ + url : WWWROOT + '/disinfectsystem/operationReservationAction!batchPrintOperationReservation.do', + params : {ids : ids}, + success : function(response, options) { + var result = Ext.decode(response.responseText); + if(!result.success){ + showResult(result.message); + }else{ + printOperationReservations(result); + } + }, + failure : function(response, options) { + showResult("打印失败"); + } + }); + } + } + ); +} /** * 批量提交手术预约单 */ @@ -884,6 +939,13 @@ handler : function() { batchSubmintOperationReservation(grid); } + },'-',{ + text : '打印', + hidden : SSTS_OR_Create, + iconCls : 'icon_print', + handler : function() { + batchPrintOperationReservation(grid); + } }]; grid = new Ext.ux.ForgonPageGrid( { Index: ssts-web/src/main/webapp/disinfectsystem/print/print.js =================================================================== diff -u -r17175 -r17296 --- ssts-web/src/main/webapp/disinfectsystem/print/print.js (.../print.js) (revision 17175) +++ ssts-web/src/main/webapp/disinfectsystem/print/print.js (.../print.js) (revision 17296) @@ -2577,6 +2577,132 @@ LODOP.ADD_PRINT_TABLE("70","0","100%","3000",titleHtml); LODOP.PRINT(); } +/** + * 打印手术预约单 + * @param printObj 手术预约打印数据 + * @param printType 打印类型:0为打印,其它为预览 + */ +function printOperationReservations(printObj,printType) { + formTypeOfPrinted = "operationReservations"; + printObj.printConfigObj_default = operationReservationVosConfig_default;// + doGetLodop(); + LODOP.PRINT_INIT(""); + setPrinterByConfig(); + print2(printObj); + LODOP.PRINT(); +// if(printType == 0){//直接打印 +// LODOP.PRINT(); +// }else{//打印预览 +// LODOP.SET_SHOW_MODE("HIDE_PAPER_BOARD",1); +// LODOP.PREVIEW(); +// } +} +/** + * 手术预约界面的打印 + */ +var operationReservationVosConfig_default = { + customPrint:printOperationReservationsWithConsoleNameAndItems +} +/** + * 打印手术预约申请单 台次及对应的器械包列表 + * @param operationReservations + */ +function printOperationReservationsWithConsoleNameAndItems(printObj){ + if(isUndefinedOrNullOrEmpty(printObj)){ + return; + } + + doGetLodop(); + var operationReservations = printObj.data; + var groups = []; //台次的分组 "15-1" 15就是分组,所以用"-"分隔,如果没有"-"那就打印到一个分组 + var groupNames = []; + for(var i = 0; i < operationReservations.length;++i){ + var groupName = "0"; + var group = null; + if(operationReservations[i].consoleName){ + var arr = operationReservations[i].consoleName.split('-'); + groupName = arr[0]; + } + for(var j = 0; j < groups.length;++j){ + if(groupName == groups[j].name){ + group = groups[j]; + break; + } + } + if(!group){ + group = {}; + group.name = groupName; + group.consoleNames = []; + group.operationReservations = []; + groupNames.push(groupName); + groups.push(group); + } + group.consoleNames.push(operationReservations[i].consoleName); + group.operationReservations.push(operationReservations[i]); + } + //把字母顺序排序 + groupNames.sort(); + var title = '手术器械安排'; + if(printObj.operationTime){ + title = printObj.operationTime + title; + } + var printTime = new Date().Format("yyyy-MM-dd hh:mm:ss"); + var tableHtml = ""; + tableHtml += ""; + tableHtml += ""; + tableHtml += ""; + + tableHtml += ""; + tableHtml += ""; + tableHtml += ""; + for(var index = 0; index < groupNames.length;++index){ + var group = null; + for(var i = 0; i < groups.length;++i){ + if(groups[i].name == groupNames[index]){ + group = groups[i]; + break; + } + } + if(!group){ + continue; + } + //打印当前分组 + + //台次按字母顺序排序 + group.consoleNames.sort(); + for(var i = 0; i < group.consoleNames.length;++i){ + var operationReservation = null; + for(var j = 0; j < group.operationReservations.length;++j){ + if(group.consoleNames[i] == group.operationReservations[j].consoleName){ + operationReservation = group.operationReservations[j]; + break; + } + } + if(operationReservation){ + tableHtml += ""; + tableHtml += ""; + var tousseItemNames = []; + for(var j = 0; j < operationReservation.applicationItems.length;++j){ + var item = operationReservation.applicationItems[j]; + if(item){ + tousseItemNames.push(item.tousseName); + } + } + tableHtml += ""; + tableHtml += ""; + } + } + //当前分组打印完毕;添加一个空行 + tableHtml += ""; + tableHtml += ""; + tableHtml += ""; + } + + tableHtml += "
"+title+"
打印时间:"+printTime+"
" + + operationReservation.consoleName + "    " +tousseItemNames.join('   ')+"
    
"; + + LODOP.ADD_PRINT_HTM("5%","5%","90%","90%",""+tableHtml+""); +} // 添加表格打印项 function addPrintTable(tableHtml,top,left,width,height){ LODOP.ADD_PRINT_TABLE(top,left,width,height,tableHtml); Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/vo/OperationReservationVo.java =================================================================== diff -u --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/vo/OperationReservationVo.java (revision 0) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/vo/OperationReservationVo.java (revision 17296) @@ -0,0 +1,56 @@ +package com.forgon.disinfectsystem.operationreservation.vo; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.commons.collections4.CollectionUtils; + +import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; + +public class OperationReservationVo { + /** + * 手术台次 + */ + private String consoleName; + /** + * 申请的物品 + */ + private List applicationItems = new ArrayList<>(); + + public String getConsoleName() { + return consoleName; + } + + public void setConsoleName(String consoleName) { + this.consoleName = consoleName; + } + + public List getApplicationItems() { + return applicationItems; + } + + public void setApplicationItems(List items){ + applicationItems.clear(); + if(CollectionUtils.isNotEmpty(items)){ + for(TousseItem ti : items){ + if(ti != null){ + PrintItemVo pi = new PrintItemVo(); + pi.setTousseName(ti.getTousseName()); + applicationItems.add(pi); + } + } + } + } + + public class PrintItemVo { + private String tousseName; + + public String getTousseName() { + return tousseName; + } + + public void setTousseName(String tousseName) { + this.tousseName = tousseName; + } + } +} Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/service/OperationReservationManagerImpl.java =================================================================== diff -u -r17263 -r17296 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/service/OperationReservationManagerImpl.java (.../OperationReservationManagerImpl.java) (revision 17263) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/service/OperationReservationManagerImpl.java (.../OperationReservationManagerImpl.java) (revision 17296) @@ -1,7 +1,9 @@ package com.forgon.disinfectsystem.operationreservation.service; import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -10,6 +12,7 @@ import net.sf.json.JSONArray; import net.sf.json.JSONObject; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.BooleanUtils; @@ -19,6 +22,7 @@ import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.operationreservation.OperationReservation; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.disinfectsystem.operationreservation.vo.OperationReservationVo; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.tousseitem.service.TousseItemManager; import com.forgon.serialnumber.model.SerialNum; @@ -277,4 +281,33 @@ } } + @Override + public JSONObject batchPrintOperationReservation(String ids) { + List vos = new ArrayList<>(); + Collection operationReservations = getCollection(ids, ";"); + String date = null; + if(CollectionUtils.isNotEmpty(operationReservations)){ + for(OperationReservation or : operationReservations){ + if(or != null){ + if(date == null){ + try{ + date = new SimpleDateFormat("MM月dd日").format(or.getOperationTime()); + }catch(Exception e){ + date = null; + } + } + OperationReservationVo vo = new OperationReservationVo(); + vo.setConsoleName(or.getConsoleName()); + vo.setApplicationItems(or.getApplicationItems()); + vos.add(vo); + } + } + } + JSONObject json = JSONUtil.buildJsonObject(true,JSONArray.fromObject(vos)); + if(date != null){ + JSONUtil.addProperty(json, "operationTime", date); + } + return json; + } + } Index: ssts-web/src/main/webapp/js/common.js =================================================================== diff -u -r17014 -r17296 --- ssts-web/src/main/webapp/js/common.js (.../common.js) (revision 17014) +++ ssts-web/src/main/webapp/js/common.js (.../common.js) (revision 17296) @@ -422,8 +422,32 @@ return false; return true; } +/** + * 判断两个日期是否相等 + * @param date1 + * @param date2 + */ +function dateEquals(date1, date2){ + if(date1 == date2){ + //引用相等,那就相等了 + return true; + } + if(date1 == null || date2 == null){ + //到这里,说明引用不相等,并且其中有一个为null,那另一个一定不为null(如果另一个也为null,那上面的判断就已经确定了),所以不相等 + return false; + } + //到这里,两个肯定都不为null + var d1 = date1; + if(!(date1 instanceof Date)){ + d1 = new Date(date1.replace(/-/g, "/")); + } + var d2 = date2; + if(!(date2 instanceof Date)){ + d2 = new Date(date2.replace(/-/g, "/")); + } + return (d1 - d2 == 0); +} - String.prototype.Trim=function(){ return this.replace(/(^\s*)|(\s*$)/g,""); }; Index: forgon-tools/src/main/java/com/forgon/tools/StrutsResponseUtils.java =================================================================== diff -u -r14820 -r17296 --- forgon-tools/src/main/java/com/forgon/tools/StrutsResponseUtils.java (.../StrutsResponseUtils.java) (revision 14820) +++ forgon-tools/src/main/java/com/forgon/tools/StrutsResponseUtils.java (.../StrutsResponseUtils.java) (revision 17296) @@ -105,4 +105,7 @@ } } } + public static void output(boolean success, JSONArray array) { + output(JSONUtil.buildJsonObject(success, array)); + } } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/service/OperationReservationManager.java =================================================================== diff -u -r17263 -r17296 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/service/OperationReservationManager.java (.../OperationReservationManager.java) (revision 17263) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/service/OperationReservationManager.java (.../OperationReservationManager.java) (revision 17296) @@ -2,6 +2,7 @@ import java.util.List; +import net.sf.json.JSONArray; import net.sf.json.JSONObject; import com.forgon.disinfectsystem.entity.operationreservation.OperationReservation; @@ -33,4 +34,9 @@ * @param ids */ public void batchSubmitOperationReservation(String ids); + /** + * 批量打印手术预约单 + * @param ids + */ + public JSONObject batchPrintOperationReservation(String ids); }