JRT质控打印

04-27 1150阅读

最近客户端打磨完了,又来推进质控了。之前演示的打印都是Demo示例,这次真正的写质控图的打印,数据就是质控数据录入界面录入的数据。其中质控图打印应该算最复杂的类型了。涉及JS的绘图,打印表格等,表格比较简单、还没做,难点是把JS的绘图和模板融合。

效果,这里打印和Web一体的优势就出来了,可以实现在线预览:

JRT质控打印

模板维护

JRT质控打印

质控图

JRT质控打印

打印虚拟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("
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]