JRT失控处理打印和演示

基于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;

/**
 * 打印质控失控处理,实现打印失控处理报告单
 */
public class QCPrintTrancation extends BaseHttpHandler implements IGridChangePage {
    /**
     * 打印元素
     */
    private List<PrintElement> retList = new ArrayList<>();

    /**
     * 打印模板数据
     */
    JRTPrintTemplateDto template = null;

    /**
     * 存打印的Data数据
     */
    Hashtable<String, String> printDataMap = new Hashtable<>();

    /**
     * 画多个表格增加的Y
     */
    private int AddGridY = 0;

    /**
     * 表格换页之前要执行的逻辑
     *
     * @param gridKey
     * @param maxY
     */
    public void PreChangePageDo(String gridKey, int maxY) {

    }

    /**
     * 表格换页之后要执行的逻辑
     *
     * @param gridKey
     * @param maxY
     */
    public void AfterChangePageDo(String gridKey, int maxY) {
        try {
            //画数据元素
            PrintData(template, retList, printDataMap);
            //画标签元素
            PrintLabel(template, retList);
            //画线元素
            PrintLine(template, retList);
        }
        catch (Exception ex)
        {

        }
    }

    /**
     * 执行质控打印绘制逻辑
     *
     * @param Param
     * @param Session
     * @param Output
     * @return
     */
    public String QueryPrintData(Parameters Param, OutValue Session, OutValue Output) throws Exception {
        //质控结果主键
        String RowIDS=Param.P0;
        //查询模板数据
        template = GetOneTemplate(null, "QCLossControl");
        //控制纸张
        if(template.PaperLayout.equals("Landscape"))
        {
            retList.add(PrintDrawProtocol.ControlPrinter(template.PaperCode, PrintDrawProtocol.PrintLayout.Landscape,"","",0,0));
        }
        else
        {
            retList.add(PrintDrawProtocol.ControlPrinter(template.PaperCode, PrintDrawProtocol.PrintLayout.Portrait,"","",0,0));
        }
        String [] rowIDArr=RowIDS.split(",");
        //循环打印
        for(String one:rowIDArr) {
            int QcResDR=Convert.ToInt32(one);
            QCTestResultTransaction transDto=EntityManager().GetByColVal(QCTestResultTransaction.class,"TestResultDR",QcResDR);
            int transDR=transDto.RowID;
            //构造Data
            MakeDataData(transDR);
            //画数据元素
            PrintData(template, retList, printDataMap);
            //画标签元素
            PrintLabel(template, retList);
            //画线元素
            PrintLine(template, retList);
            //打印的表格数据
            List<Object> gridData=new ArrayList<>();
            HashMap row1=new HashMap();
            row1.put("Title","失控类型");
            row1.put("Data","");
            if(transDto.TransactionTypeDR!=null)
            {
                BTQCTransactionType typeDto=EntityManager().DolerGet(BTQCTransactionType.class,transDto.TransactionTypeDR);
                row1.put("Data",typeDto.CName);
            }
            gridData.add(row1);

            HashMap row2=new HashMap();
            row2.put("Title","处理方法");
            row2.put("Data",transDto.TransactionMethod);
            gridData.add(row2);

            HashMap row3=new HashMap();
            row3.put("Title","处理结果");
            row3.put("Data",transDto.TransactionRes);
            gridData.add(row3);

            HashMap row4=new HashMap();
            row4.put("Title","临床影响");
            row4.put("Data",transDto.ClinicaImpact);
            gridData.add(row4);

            HashMap row5=new HashMap();
            row5.put("Title","预防措施");
            row5.put("Data",transDto.Precaution);
            gridData.add(row5);
            //绘制表格数据
            PrintGrid(template, retList,gridData);
            //输出换页标识,这里不用考虑是否多输出了,打印会忽略空白
            retList.add(PrintDrawProtocol.ChangePage());
        }
        return Helper.Object2Json(retList);
    }

    /**
     * 构造数据
     * @param transDR 失控数据主键
     */
    private void MakeDataData(int transDR) throws Exception
    {
        QCTestResultTransaction transDto=EntityManager().DolerGet(QCTestResultTransaction.class,transDR);
        QCTestResult resDto=EntityManager().DolerGet(QCTestResult.class,transDto.TestResultDR);
        QCResMaterialTestCode para=EntityManager().DolerGet(QCResMaterialTestCode.class,resDto.ResMaterialTestCodeDR);
        BTMIMachineParameter machDto=EntityManager().DolerGet(BTMIMachineParameter.class,resDto.MachineParameterDR);
        BTHospital hosDto=EntityManager().DolerGet(BTHospital.class,machDto.HospitalDR);
        BTTestCode tsDto=EntityManager().DolerGet(BTTestCode.class, resDto.TestCodeDR);
        BTQCMaterial matDto=EntityManager().DolerGet(BTQCMaterial.class, resDto.MaterialDR);
        HashParam hs=new HashParam();
        hs.Add("MaterialDR",resDto.MaterialDR);
        hs.Add("LevelNo",resDto.LevelNo);
        List<BTQCMaterialLevel> levList=EntityManager().FindAllSimple(BTQCMaterialLevel.class,hs);
        printDataMap.put("标题",hosDto.CName+"失控处理单");
        printDataMap.put("仪器",machDto.CName);
        printDataMap.put("项目名称",tsDto.CName);
        printDataMap.put("浓度",levList.get(0).CName);
        printDataMap.put("质控批次",para.LotNo);
        printDataMap.put("靶值",String.valueOf(para.Mean));
        printDataMap.put("SD",String.valueOf(para.SD));
        printDataMap.put("质控物",matDto.CName);
        printDataMap.put("结果",resDto.TextRes);
        printDataMap.put("最后结果","");
        printDataMap.put("质控规则","");
        if(resDto.QCRulesDR!=null)
        {
            BTQCRules ruleDto=EntityManager().DolerGet(BTQCRules.class, resDto.QCRulesDR);
            printDataMap.put("质控规则",ruleDto.CName);
        }
        printDataMap.put("测试日期",Helper.DateIntToStr(resDto.TestDate));
        printDataMap.put("测试时间",Helper.TimeIntToStr(resDto.TestTime));
        printDataMap.put("试剂批次",para.RgLot);
        printDataMap.put("试剂有效期",Helper.DateIntToStr(para.RgEffectiveDate));
        printDataMap.put("有效日期",Helper.DateIntToStr(para.ExpiryDate));
        printDataMap.put("处理人","");
        if(transDto.AddUserDR!=null)
        {
            SYSUser userDto=EntityManager().DolerGet(SYSUser.class, transDto.AddUserDR);
            printDataMap.put("处理人",userDto.CName);
        }
        printDataMap.put("处理日期",Helper.DateIntToStr(transDto.AddDate));
        printDataMap.put("处理时间",Helper.TimeIntToStr(transDto.AddTime));
        printDataMap.put("小组负责人","");
        printDataMap.put("小组负责人签名","");
        if(transDto.InnerUserDR!=null)
        {
            SYSUser userDto=EntityManager().DolerGet(SYSUser.class, transDto.InnerUserDR);
            printDataMap.put("小组负责人",userDto.CName);
            printDataMap.put("小组负责人签名",userDto.Code);
        }
        printDataMap.put("专业负责人","");
        printDataMap.put("专业负责人签名","");
        if(transDto.ProfessionUserDR!=null)
        {
            SYSUser userDto=EntityManager().DolerGet(SYSUser.class, transDto.ProfessionUserDR);
            printDataMap.put("专业负责人",userDto.CName);
            printDataMap.put("专业负责人签名",userDto.Code);
        }
        printDataMap.put("打印时间",Helper.GetNowTimeStr());
    }

    /**
     * 输出表格数据
     *
     * @param template   模板
     * @param retList    元素集合
     * @param datas  表格数据
     * @throws Exception
     */
    private void PrintGrid(JRTPrintTemplateDto template, List<PrintElement> retList, List<Object> datas) throws Exception {
        for (JRTPrintTemplateEle ele : template.EleList) {
            //输出表格
            if (ele.PrintType.equals("DataGrid")) {
                //得到表格定义
                GridDto defGrid = (GridDto) Helper.Json2Object(ele.PrintText, GridDto.class);
                //zw("数据",resGridData);
                int lastY = PrintDrawProtocol.DrawGrid(retList, defGrid, null, datas, "grid", this);
            }
        }
    }


    /**
     * 输出图片
     *
     * @param template
     * @param template  模板
     * @param retList   元素列表
     * @param ImagePath 图片路径
     */
    private void PrintImage(JRTPrintTemplateDto template, List<PrintElement> retList, String ImagePath) throws Exception {
        for (JRTPrintTemplateEle ele : template.EleList) {
            //输出图片
            if (ele.PrintType.equals("Graph")) {
                //不是图片元素退出
                if (!ele.DataField.equals("P")) {
                    continue;
                }
                String[] arr = ImagePath.split(";");
                int index = 0;
                for (String one : arr) {
                    if (index > 0) {
                        AddGridY += ele.PrintHeight + 5;
                    }
                    PrintElement printEle = PrintDrawProtocol.DrawGraph(ele.PrintX, ele.PrintY + AddGridY, ele.PrintWidth, ele.PrintHeight, "CMD", false, false);
                    printEle.PrintFlag = one;
                    retList.add(printEle);
                    index++;
                }
            }
        }
    }

    /**
     * 输出数据
     *
     * @param template     模板
     * @param retList      元素列表
     * @param printDataMap 数据哈希
     */
    private void PrintData(JRTPrintTemplateDto template, List<PrintElement> retList, Hashtable<String, String> printDataMap) throws Exception{
        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 if (ele.PrintFlag.equals("D")) {
                        String iconCode = printDataMap.get(dataFiled);
                        JRTPrintImage img=EntityManager().GetByColVal(JRTPrintImage.class,"Code",iconCode);
                        //有签名图标就打印签名
                        if(img!=null)
                        {
                            PrintElement printEle = PrintDrawProtocol.DrawGraph(ele.PrintX, ele.PrintY + AddGridY, ele.PrintWidth, ele.PrintHeight, img.ImgBase64String, true, false);
                            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);
                        }
                    }
                    //画普通数据
                    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<PrintElement> 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<PrintElement> 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);
            }
        }
    }



    /**
     * 通过模板主键或者代码得到模板数据供打印使用
     *
     * @param rowID
     * @param code
     * @return
     */
    private JRTPrintTemplateDto GetOneTemplate(Integer rowID, String code) throws Exception {
        JRTPrintTemplateDto retDto = null;
        //按主键取
        if (rowID != null) {
            retDto = EntityManager().GetById(JRTPrintTemplateDto.class, rowID);
        }
        //按代码取
        else if (code != null && !code.isEmpty()) {
            System.out.println(code);
            retDto = EntityManager().GetByColVal(JRTPrintTemplateDto.class, "Code", code);
        }
        if (retDto != null) {
            if(retDto.JRTPrintPaperDR!=null)
            {
                JRTPrintPaper paper=EntityManager().DolerGet(JRTPrintPaper.class,retDto.JRTPrintPaperDR);
                retDto.PaperCode=paper.Code;
            }
            HashParam hs = new HashParam();
            hs.Add("PrintTemplateDR", retDto.RowID);
            retDto.EleList = EntityManager().FindAllSimple(JRTPrintTemplateEle.class, hs);
        }
        return retDto;
    }

    /**
     * 存获得的一个模板数据
     */
    public static class JRTPrintTemplateDto extends JRTPrintTemplate {
        /**
         * 纸张代码
         */
        public String PaperCode="";

        /**
         * 模板元素
         */
        public List<JRTPrintTemplateEle> EleList;
    }

}

质控月报打印
在这里插入图片描述

在这里插入图片描述

打印虚拟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.JRTPrintPaper;
import JRT.Model.Entity.JRTPrintTemplate;
import JRT.Model.Entity.JRTPrintTemplateEle;
import JRTBLLBase.BaseHttpHandler;
import JRTBLLBase.Helper;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;

/**
 * 实现质控月报的打印
 */
public class QCPrintMonth extends BaseHttpHandler implements IGridChangePage {
    /**
     * 打印元素
     */
    private List<PrintElement> retList = new ArrayList<>();

    /**
     * 打印模板数据
     */
    JRTPrintTemplateDto template = null;

    /**
     * 存打印的Data数据
     */
    Hashtable<String, String> printDataMap = new Hashtable<>();

    /**
     * 画多个表格增加的Y
     */
    private int AddGridY = 0;

    /**
     * 表格换页之前要执行的逻辑
     *
     * @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 selectPara=Param.P0;
        String userCode=Param.P1;
        String paramList=Param.P2;
        Parameters para=(Parameters)Helper.Json2Object(selectPara,Parameters.class);
        //开始日期
        String StartDate = para.P0;
        //结束日期
        String EndDate = para.P1;
        //仪器
        int MachineParameterDR = Helper.ValidParam(para.P2,0);
        //浓度
        String Leavel = para.P3;
        //项目
        String TestCodeDRS = para.P4;
        //排除规则
        String QcRule = para.P5;
        //质控物
        String MaterialDRS = para.P6;
        String PointType = para.P7;
        String LotType = para.P8;
        String FLots = para.P9;
        zw(paramList);
        String [] paraArr=paramList.split("\\$SP\\$");
        String templateCode=paraArr[0];
        String sessionStr=paraArr[1];

        //查询模板数据
        template = GetOneTemplate(null, templateCode);
        //控制纸张
        if(template.PaperLayout.equals("Landscape"))
        {
            retList.add(PrintDrawProtocol.ControlPrinter(template.PaperCode, PrintDrawProtocol.PrintLayout.Landscape,"","",0,0));
        }
        else
        {
            retList.add(PrintDrawProtocol.ControlPrinter(template.PaperCode, PrintDrawProtocol.PrintLayout.Portrait,"","",0,0));
        }
        OutValue session=new OutValue();
        session.Value=sessionStr;
        OutValue output=new OutValue();
        //查询月报数据
        String datasJson=Helper.GetVMData("qc.ashx.ashQCDataCalMonth","QueryQCMonthData",para,session,output);
        //转换成List
        List<Object> gridData=Helper.Json2List(datasJson,HashMap.class);
        //构造Data
        MakeDataData(session);
        //画数据元素
        PrintData(template, retList, printDataMap);
        //画标签元素
        PrintLabel(template, retList);
        //画线元素
        PrintLine(template, retList);
        //绘制表格数据
        PrintGrid(template, retList,gridData);
        return Helper.Object2Json(retList);
    }

    /**
     * 构造数据
     * @param session
     */
    private void MakeDataData(OutValue session)
    {
        String sessionStr=session.GetString();
        String [] arr=sessionStr.split("\\^");
        printDataMap.put("标题",arr[0]);
        printDataMap.put("打印日期",arr[1]);
        printDataMap.put("说明",arr[2]);
        printDataMap.put("报表",arr[3]);
        printDataMap.put("用户",arr[4]);
        printDataMap.put("年月",arr[5]);
        printDataMap.put("仪器",arr[6]);
        printDataMap.put("工作小组",arr[7]);
        printDataMap.put("工作组",arr[8]);
        printDataMap.put("规则",arr[9]);
    }

    /**
     * 输出表格数据
     *
     * @param template   模板
     * @param retList    元素集合
     * @param datas  表格数据
     * @throws Exception
     */
    private void PrintGrid(JRTPrintTemplateDto template, List<PrintElement> retList, List<Object> datas) throws Exception {
        for (JRTPrintTemplateEle ele : template.EleList) {
            //输出表格
            if (ele.PrintType.equals("DataGrid")) {
                //得到表格定义
                GridDto defGrid = (GridDto) Helper.Json2Object(ele.PrintText, GridDto.class);
                //zw("数据",resGridData);
                int lastY = PrintDrawProtocol.DrawGrid(retList, defGrid, null, datas, "grid", this);
            }
        }
    }


    /**
     * 输出图片
     *
     * @param template
     * @param template  模板
     * @param retList   元素列表
     * @param ImagePath 图片路径
     */
    private void PrintImage(JRTPrintTemplateDto template, List<PrintElement> retList, String ImagePath) throws Exception {
        for (JRTPrintTemplateEle ele : template.EleList) {
            //输出图片
            if (ele.PrintType.equals("Graph")) {
                //不是图片元素退出
                if (!ele.DataField.equals("P")) {
                    continue;
                }
                String[] arr = ImagePath.split(";");
                int index = 0;
                for (String one : arr) {
                    if (index > 0) {
                        AddGridY += ele.PrintHeight + 5;
                    }
                    PrintElement printEle = PrintDrawProtocol.DrawGraph(ele.PrintX, ele.PrintY + AddGridY, ele.PrintWidth, ele.PrintHeight, "CMD", false, false);
                    printEle.PrintFlag = one;
                    retList.add(printEle);
                    index++;
                }
            }
        }
    }

    /**
     * 输出数据
     *
     * @param template     模板
     * @param retList      元素列表
     * @param printDataMap 数据哈希
     */
    private void PrintData(JRTPrintTemplateDto template, List<PrintElement> retList, Hashtable<String, String> 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<PrintElement> 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<PrintElement> 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);
            }
        }
    }



    /**
     * 通过模板主键或者代码得到模板数据供打印使用
     *
     * @param rowID
     * @param code
     * @return
     */
    private JRTPrintTemplateDto GetOneTemplate(Integer rowID, String code) throws Exception {
        JRTPrintTemplateDto retDto = null;
        //按主键取
        if (rowID != null) {
            retDto = EntityManager().GetById(JRTPrintTemplateDto.class, rowID);
        }
        //按代码取
        else if (code != null && !code.isEmpty()) {
            System.out.println(code);
            retDto = EntityManager().GetByColVal(JRTPrintTemplateDto.class, "Code", code);
        }
        if (retDto != null) {
            if(retDto.JRTPrintPaperDR!=null)
            {
                JRTPrintPaper paper=EntityManager().DolerGet(JRTPrintPaper.class,retDto.JRTPrintPaperDR);
                retDto.PaperCode=paper.Code;
            }
            HashParam hs = new HashParam();
            hs.Add("PrintTemplateDR", retDto.RowID);
            retDto.EleList = EntityManager().FindAllSimple(JRTPrintTemplateEle.class, hs);
        }
        return retDto;
    }

    /**
     * 存获得的一个模板数据
     */
    public static class JRTPrintTemplateDto extends JRTPrintTemplate {
        /**
         * 纸张代码
         */
        public String PaperCode="";

        /**
         * 模板元素
         */
        public List<JRTPrintTemplateEle> EleList;
    }

}

1.更高的性能
同等的Spring+mybats+radis的程序要3秒以上
在这里插入图片描述

2.更低的内存占用
数据库+web+svn+rsync占用低至几百兆
在这里插入图片描述

3.更少的依赖
仅需JDK和idea,不需要任何额外软件和插件

4.更快的开发效率
以一人敌两个团队的效率,同时业余开发架构和业务进度不输

5.更高效的维护
开发代码既发布,修改方便,调试方便

6.更多的数据库支持
基本支持所有关系库,而无需业务修改代码

7.Linux完整的支持
开发、打印、客户端、监听、初始化都完成了Linux支持和测试

基础的稳定为业务带来简化和稳定,可以看到我的速度是非常快的,而且写的代码就没准备大改重构,考虑的就是一次设计到位。准备信创接盘,先储备握住机会的实力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/604224.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序开发-数据事件绑定

&#x1f433;简介 数据绑定 数据绑定是一种将小程序中的数据与页面元素关联起来的技术&#xff0c;使得当数据变化时&#xff0c;页面元素能够自动更新。这通常使用特定的语法&#xff08;如双大括号 {{ }}&#xff09;来实现&#xff0c;以便在页面上展示动态数据。 事件绑…

分布式与一致性协议之ZAB协议(八)

ZAB协议 如何实现读操作 相比写操作&#xff0c;读操作的处理要简单很多&#xff0c;因为接收到度请求的节点只需要查询本地数据&#xff0c;然后响应数据给客户端就可以了。读操作的核心流程如图所示。 1.跟随者在FollowerRequestProcessor.processRequest()中接收到度请求…

Python深度学习基于Tensorflow(6)神经网络基础

文章目录 使用Tensorflow解决XOR问题激活函数正向传播和反向传播解决过拟合权重正则化Dropout正则化批量正则化 BatchNormal权重初始化残差连接 选择优化算法传统梯度更新算法动量算法NAG算法AdaGrad算法RMSProp算法Adam算法如何选择优化算法 使用tf.keras构建神经网络使用Sequ…

射频无源器件之电桥

一. 电桥的定义及作用 电桥主要用于实现微波大功率功放系统的功率合成分配,信号采集等功能,被广泛应用于中国及全球4G/5G基站、5G网络覆盖、北斗导航天线、车载高精度导航(无人驾驶)天线等。可将信号分成有相位差的两路,90度电桥相位差90,180度电桥相位差180。 常说的3d…

【CSS】认识CSS选择器及各选择器对应的用法

目录 一、什么是CSS&#xff1f; 二、CSS 选择器 1. 标签选择器 2. 类选择器 3. ID选择器 4. 通配符选择器 5. 复合选择器 一、什么是CSS&#xff1f; CSS(Cascading Style Sheet)&#xff0c;层叠样式表。它与 HTML&#xff08;超文本标记语言&#xff09;一起使用&am…

c++11 的explicit关键字 -- 显示构建对象

概述: 在平时我们定义一个类&#xff0c;然后创建类对象可以有多种方式&#xff0c;主要分为两种: 声明一个Student类: class Student { public: Student(int age) { m_age age; } private: int m_age; }; 显示构建(explicit) Student s1(5); //…

全栈开发之路——前端篇(5)组件间通讯和接口等知识补充

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 第二篇&#xff1a;介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇&#xff1a;setup语法&#xff0c;设置响应式数据。 第四篇&#xff1a;数据绑定、计算属性和watch监视 辅助文档&…

WPF 图片显示某一部分区域

效果图&#xff1a; 代码&#xff1a; <Image Width"32"HorizontalAlignment"Right"Height"32"Source"../../Resources/Images/BLUEWOLF.jpg"><Image.Clip><PathGeometry><PathFigure StartPoint"32,32&quo…

重写muduo之Thread、EventLoopThread、EventLoopThreadPool

目录 1、概述 2、Thread 2.1 Thread.h 3、EventLoopThread 3.1 EventLoopThread.h 3.2 EventLoopThread.cc 4、 EventLoopThreadPool 4.1 EventLoopThreadPool.h 4.2 EventLoopThreadPool.cc 1、概述 管理事件循环线程的调度的 打包了一个EventLoop和线程&#xff0c;…

在ubuntu虚拟机中手动安装VMware Tools(VMware Workstation 17 player)

可参考官方文档&#xff1a;在 Linux 虚拟机中手动安装 VMware Tools 以下列出我在安装过程中遇见的问题&#xff1a; 1、“安装VMware Tools”选项为灰&#xff0c;无法选中 原因是VMware Tools的安装包镜像在Player的安装目录下&#xff0c;需要在虚拟机启动的时候加载这个…

【数字经济】上市公司供应链数字化数据(2000-2022)

数据来源&#xff1a; 时间跨度&#xff1a;2000-2022年 数据范围&#xff1a;各上市企业 数据指标&#xff1a; 样例数据&#xff1a; 参考文献&#xff1a;[1]刘海建,胡化广,张树山,等.供应链数字化的绿色创新效应[J].财经研究,2023,49(03):4-18. 下载链接&#xff1a;https:…

关系型数据库MySQL开发要点之多表查询2024详解

多表查询 准备测试数据 -- 部门管理 create table tb_dept(id int unsigned primary key auto_increment comment 主键ID,name varchar(10) not null unique comment 部门名称,create_time datetime not null comment 创建时间,update_time datetime not null comment 修改时…

图神经网络综述和学习路径

应用邻域 应用举例 应用层面&#xff08;节点&#xff0c;连接&#xff0c;子图&#xff0c;全图&#xff09; 概念区别 图神经网络本质上解决了表示学习的问题 可以把神经网络看作一个黑箱&#xff0c;图中的f函数 困难与挑战 现代的深度学习&#xff0c;如何把图输入到神经…

Clion STM32CubeMX 项目

系列文章目录 前言 最后修改 2024 年 4 月 16 日 操作系统&#xff1a;Windows / Linux / macOS 所需工具 STM32CubeMX、GNU ARM 工具链 项目格式&#xff1a; CMake 兼容配置&#xff1a; OpenOCD 运行与调试/嵌入式 GDB 服务器 对于以 STM32 板卡为目标的嵌入式项目&#xf…

QX-mini51单片机学习-----(3)流水灯

目录 1宏定义 2函数的定义 3延时函数 4标准库函数中的循环移位函数 5循环移位函数与左移和右移运算符的区别 6实例 7keil中DeBug的用法 1宏定义 是预处理语句不需要分号 #define uchar unsigned char//此时uchar代替unsigned char typedef是关键字 后面是接分号…

【Linux】线程的内核级理解详谈页表以及虚拟地址到物理地址之间的转化

一、线程的概念 对于进程来说&#xff0c;进程创建时间和空间成本较高&#xff0c;因为进程是承担分配系统资源的基本实体&#xff0c;所以线程的出现就成为了必然。Linux线程与进程非常相似&#xff0c;Linux设计者在设计之初觉得如果再为线程设计数据结构和调度算法就会使整个…

java--io流(一)

1. 前置知识 字符集是什么&#xff1f; 字符集&#xff08;Character Set&#xff09;是一组字符的集合&#xff0c;它定义了可以在计算机系统中使用的所有字符。字符集可以包括字母、数字、标点符号、控制字符、图形符号等。字符集使得计算机能够存储、处理和显示各种语言和…

idea 项目 修改项目文件名 教程

文章目录 目录 文章目录 修改流程 小结 概要流程技术细节小结 概要 原项目名 修改流程 关掉当前项目的idea页面 修改之后的文件名 重新打开idea。选择项目打开项目页面 技术细节 出现下面这个问题&#xff0c;可以参考作者新的一编文章idea开发工具 项目使用Spring框架开发解…

【智能楼宇秘籍】一网关多协议无缝对接BACnet+OPC+MQTT

在繁华的都市中心&#xff0c;一座崭新的大型商业综合体拔地而起&#xff0c;集购物、餐饮、娱乐、办公于一体&#xff0c;是现代城市生活的缩影。然而&#xff0c;这座综合体的幕后英雄——一套高度集成的楼宇自动化系统&#xff0c;正是依靠多功能协议网关&#xff0c;实现了…

《从零开始,搭建一个简单的UVM验证平台》实操

最近的工作中需要用UVM平台去仿真软件同事写的C程序&#xff0c;虽然只要用EDA同事已经搭好的UVM平台稍微改改就行&#xff0c;但对于我这种从未接触过UVM甚至都没用过System Verilog的纯FPGA工程师来说还是很有难度的&#xff0c;因为我对这方面一点概念都没有。 基于此&…