JRT质控打印
最近客户端打磨完了,又来推进质控了。之前演示的打印都是Demo示例,这次真正的写质控图的打印,数据就是质控数据录入界面录入的数据。其中质控图打印应该算最复杂的类型了。涉及JS的绘图,打印表格等,表格比较简单、还没做,难点是把JS的绘图和模板融合。
效果,这里打印和Web一体的优势就出来了,可以实现在线预览:
模板维护
质控图
打印虚拟M
import JRT.Core.DataGrid.GridDto; import JRT.Core.DataGrid.IGridChangePage; import JRT.Core.Dto.HashParam; import JRT.Core.Dto.OutValue; import JRT.Core.Dto.PrintElement; import JRT.Core.Util.Convert; import JRT.Core.Util.PrintDrawProtocol; import JRT.Model.Bussiness.Parameters; import JRT.Model.Entity.*; import JRTBLLBase.BaseHttpHandler; import JRTBLLBase.Helper; import java.util.ArrayList; import java.util.HashMap; import java.util.Hashtable; import java.util.List; /** * 质控公共打印的虚拟M,实现LJ图、Z分数图、定性质控图、WestGard图打印控制 */ public class QCPrintCommon extends BaseHttpHandler implements IGridChangePage { /** * 打印元素 */ private List retList = new ArrayList(); /** * 打印模板数据 */ JRTPrintTemplateDto template = null; /** * 存打印的Data数据 */ Hashtable printDataMap = null; /** * 表格换页之前要执行的逻辑 * * @param gridKey * @param maxY */ public void PreChangePageDo(String gridKey, int maxY) { } /** * 表格换页之后要执行的逻辑 * * @param gridKey * @param maxY */ public void AfterChangePageDo(String gridKey, int maxY) { //画数据元素 PrintData(template, retList, printDataMap); //画标签元素 PrintLabel(template, retList); //画线元素 PrintLine(template, retList); } /** * 执行质控打印绘制逻辑 * * @param Param * @param Session * @param Output * @return */ public String QueryPrintData(Parameters Param, OutValue Session, OutValue Output) throws Exception { //从参数对象取参数 String QCPara = Param.P0; String UserCode = Param.P1; String TemplateCode = Param.P2; //分割提取数据ID和图片路径 String[] TemplateCodeArr = TemplateCode.split("\\^"); //数据主键 String DataRowIDS = TemplateCodeArr[2]; //图片路径 String ImagePath = TemplateCodeArr[1]; TemplateCode = TemplateCodeArr[0]; //分割提取参数 String[] ParaArr = QCPara.split("\\^"); int StartDate = Helper.ValidParam(ParaArr[0], 0); int EndDate = Helper.ValidParam(ParaArr[1], 0); int MachineParameterDR = Convert.ToInt32(ParaArr[2]); String MaterialDR = ParaArr[3]; String FMatLotDR = ParaArr[4]; int TestCodeDR = Convert.ToInt32(ParaArr[5]); String Level = ParaArr[6]; String QcRule = ParaArr[7]; String PointRange = ParaArr[8]; String FMapTitlePrintInfo = ParaArr[9]; String FPrintExtraData = ParaArr[10]; String IsShowDetail = ParaArr[11]; //查询模板数据 template = GetOneTemplate(null, TemplateCode); //得到质控打印Data数据 GetQCDataData(StartDate, EndDate, MachineParameterDR, TestCodeDR, Level, QcRule, PointRange, MaterialDR, TemplateCode); //得到质控结果,给打印表格用 List qcResList = GetQCResult(StartDate, EndDate, MachineParameterDR, TestCodeDR, Level, QcRule, PointRange, MaterialDR); //画图片元素 PrintImage(template, retList, ImagePath); //画数据元素 PrintData(template, retList, printDataMap); //画标签元素 PrintLabel(template, retList); //画线元素 PrintLine(template, retList); ZW("图", retList); //画表格元素 //PrintDataGrid(template, retList, repResList); return Helper.Object2Json(retList); } /** * 输出报告结果 * * @param template * @param template 模板 * @param retList 元素列表 * @param repResList 报告结果列表 */ private void PrintDataGrid(JRTPrintTemplateDto template, List retList, List repResList) throws Exception { for (JRTPrintTemplateEle ele : template.EleList) { //输出表格 if (ele.PrintType.equals("DataGrid")) { //得到表格定义 GridDto defGrid = (GridDto) Helper.Json2Object(ele.PrintText, GridDto.class); int lastY = PrintDrawProtocol.DrawGrid(retList, defGrid, null, repResList, "ReportRes", this); } } } /** * 输出图片 * * @param template * @param template 模板 * @param retList 元素列表 * @param ImagePath 图片路径 */ private void PrintImage(JRTPrintTemplateDto template, List retList, String ImagePath) throws Exception { for (JRTPrintTemplateEle ele : template.EleList) { //输出图片 if (ele.PrintType.equals("Graph")) { //不是图片元素退出 if (!ele.DataField.equals("P")) { continue; } int addHeigth = 0; String[] arr = ImagePath.split(";"); for (String one : arr) { PrintElement printEle = PrintDrawProtocol.DrawGraph(ele.PrintX, ele.PrintY + addHeigth, ele.PrintWidth, ele.PrintHeight, "CMD", false, false); printEle.PrintFlag = one; retList.add(printEle); addHeigth += ele.PrintHeight + 5; } } } } /** * 输出数据 * * @param template 模板 * @param retList 元素列表 * @param printDataMap 数据哈希 */ private void PrintData(JRTPrintTemplateDto template, List retList, Hashtable printDataMap) { for (JRTPrintTemplateEle ele : template.EleList) { //输出标签 if (ele.PrintType.equals("Data")) { String dataFiled = ele.DataField; if (!dataFiled.isEmpty() && printDataMap.containsKey(dataFiled)) { //带字的条码 if (ele.PrintFlag.contains("BarCode")) { String BarType = ele.PrintFlag.replace("BarCode", ""); PrintElement printEle = PrintDrawProtocol.DrawBarCode(ele.PrintX, ele.PrintY, printDataMap.get(dataFiled), true, ele.PrintWidth, ele.PrintHeight, BarType, ele.PrintFont, Convert.ToDouble(ele.PrintFontSize).intValue(), ele.PrintFontStyle, PrintDrawProtocol.GetPrintAlignment(ele.PrintAlignment), ele.Color, ele.Angle); retList.add(printEle); } //不带字的条码 else if (ele.PrintFlag.contains("BarCodeN")) { String BarType = ele.PrintFlag.replace("BarCodeN", ""); PrintElement printEle = PrintDrawProtocol.DrawBarCode(ele.PrintX, ele.PrintY, printDataMap.get(dataFiled), false, ele.PrintWidth, ele.PrintHeight, BarType, ele.PrintFont, Convert.ToDouble(ele.PrintFontSize).intValue(), ele.PrintFontStyle, PrintDrawProtocol.GetPrintAlignment(ele.PrintAlignment), ele.Color, ele.Angle); retList.add(printEle); } //画普通数据 else { PrintElement printEle = PrintDrawProtocol.DrawLabel(ele.PrintX, ele.PrintY, printDataMap.get(dataFiled), ele.PrintFont, Convert.ToDouble(ele.PrintFontSize).intValue(), ele.PrintFontStyle, PrintDrawProtocol.GetPrintAlignment(ele.PrintAlignment), ele.Color, "", ele.Angle); retList.add(printEle); } } } } } /** * 输出标签 * * @param template * @param retList */ private void PrintLabel(JRTPrintTemplateDto template, List retList) { for (JRTPrintTemplateEle ele : template.EleList) { //输出标签 if (ele.PrintType.equals("Label")) { PrintElement printEle = PrintDrawProtocol.DrawLabel(ele.PrintX, ele.PrintY, ele.PrintText, ele.PrintFont, Convert.ToDouble(ele.PrintFontSize).intValue(), ele.PrintFontStyle, PrintDrawProtocol.GetPrintAlignment(ele.PrintAlignment), ele.Color, "", ele.Angle); retList.add(printEle); } } } /** * 输出线 * * @param template * @param retList */ private void PrintLine(JRTPrintTemplateDto template, List retList) { for (JRTPrintTemplateEle ele : template.EleList) { //输出先 if (ele.PrintType.equals("ILineN")) { int width = ele.PrintWidth; int height = ele.PrintHeight; int endX = ele.PrintX + width; int endY = ele.PrintY; int lineWidth = height; if (height > width) { endX = ele.PrintX; endY = ele.PrintY; lineWidth = width; } PrintElement printEle = PrintDrawProtocol.DrawLine(ele.PrintX, ele.PrintY, endX, endY, lineWidth, ele.PrintFlag, ele.Color); retList.add(printEle); } } } public void GetQCDataData(int StartDate, int EndDate, int MachineParameterDR, int TestCodeDR, String Level, String QcRule, String PointRange, String MaterialDR, String TemplateCode) throws Exception { //仪器数据 BTMIMachineParameter miDto = EntityManager().DolerGet(BTMIMachineParameter.class, MachineParameterDR); BTWorkGroupMachine wgmDto = EntityManager().DolerGet(BTWorkGroupMachine.class, miDto.WorkGroupMachineDR); BTWorkGroup wgDto = EntityManager().DolerGet(BTWorkGroup.class, wgmDto.WorkGroupDR); BTHospital hosDto = EntityManager().DolerGet(BTHospital.class, miDto.HospitalDR); String title = hosDto.CName; String titleWG = wgDto.CName; if (TemplateCode.equals("QCPrintZ")) { title = title + "Z分数图"; titleWG = titleWG + "Z分数图"; } else if (TemplateCode.equals("QCPrintQualitative")) { title = title + "定性质控图"; titleWG = titleWG + "定性质控图"; } else if (TemplateCode.equals("QCPrintLJ")) { title = title + "L-J图"; titleWG = titleWG + "L-J图"; } else if (TemplateCode.equals("QCPrintWestGard")) { title = title + "Levey-Jenning图"; titleWG = titleWG + "Levey-Jenning图"; } //存打印的Data数据 printDataMap = new Hashtable(); printDataMap.put("标题", title); printDataMap.put("查询日期", Helper.DateIntToStr(StartDate) + " " + Helper.DateIntToStr(EndDate)); printDataMap.put("仪器代码", miDto.Code); printDataMap.put("仪器", miDto.CName); BTQCMaterial matDto = EntityManager().DolerGet(BTQCMaterial.class, Convert.ToInt32(MaterialDR)); BTTestCode tsDto = EntityManager().DolerGet(BTTestCode.class, TestCodeDR); printDataMap.put("质控物代码", matDto.Code); printDataMap.put("质控物", matDto.CName); printDataMap.put("波长", matDto.WaveLength); printDataMap.put("项目名称", tsDto.CName); printDataMap.put("浓度单位", ""); printDataMap.put("实验方法", ""); printDataMap.put("浓度", ""); printDataMap.put("使用规则", ""); printDataMap.put("批号", ""); printDataMap.put("校正液批号", ""); printDataMap.put("校正液效期", ""); printDataMap.put("校正液", ""); printDataMap.put("试剂厂商", ""); printDataMap.put("失控处理", ""); printDataMap.put("质控评价", ""); printDataMap.put("主波长", ""); printDataMap.put("次波长", ""); printDataMap.put("试剂批号", ""); printDataMap.put("质控批号", ""); printDataMap.put("批次浓度", ""); printDataMap.put("打印时间", ""); printDataMap.put("目标CV", ""); printDataMap.put("失效日期", ""); printDataMap.put("打印人", ""); printDataMap.put("试剂有效期", ""); printDataMap.put("工作组", wgDto.CName); printDataMap.put("工作小组", wgmDto.CName); printDataMap.put("开始日期", Helper.DateIntToStr(StartDate)); printDataMap.put("结束日期", Helper.DateIntToStr(EndDate)); printDataMap.put("生产日期", ""); printDataMap.put("仪器简称", miDto.LName); printDataMap.put("工作组标题", titleWG); printDataMap.put("质控审阅人", ""); printDataMap.put("签字", ""); printDataMap.put("质控物厂家", ""); printDataMap.put("质控审阅人签名", ""); printDataMap.put("签字签名", ""); printDataMap.put("确认日期", ""); printDataMap.put("审核日期", ""); } public List GetQCResult(int StartDate, int EndDate, int MachineParameterDR, int TestCodeDR, String Level, String QcRule, String PointRange, String MaterialDR) throws Exception { HashParam hs = new HashParam(); hs.Add("MachineParameterDR", MachineParameterDR); hs.Add("TestCodeDR", TestCodeDR); List operater = new ArrayList(); operater.add("="); operater.add("="); hs.Add("TestDate", StartDate); hs.Add("TestDate", EndDate); operater.add(">="); operater.add("
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。