JRT失控处理打印和演示

news2025/1/11 3:02:05

基于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.coloradmin.cn/o/1654816.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构(十二)----查找

目录 一.查找的概念 二.查找算法 1.顺序查找 顺序查找的查找效率&#xff1a; 顺序查找的优化&#xff1a; •有序表的优化&#xff08;缩短查找失败的平均查找长度&#xff09; •被查概率不相等的表的优化&#xff08;缩短查找成功的平均查找长度&#xff09; 2.折半…

[Redis] 使用布隆过滤器和分布式锁实现用户注册

布隆过滤器&#xff08;Bloom Filter&#xff09;是一种数据结构&#xff0c;用于快速判断一个元素是否可能存在于一个集合中。它通过使用多个哈希函数和一个位数组来表示一个集合&#xff0c;当一个元素被加入到集合时&#xff0c;通过哈希函数计算出多个哈希值&#xff0c;并…

「网络流 24 题」最小路径覆盖 【最小路径覆盖】

「网络流 24 题」最小路径覆盖 思路 具体可以看 这篇博客 对于有向无环图&#xff0c;我们只需要将假装将点裂成左点和右点&#xff08;实际没有裂开&#xff09;&#xff0c;然后连边&#xff1b; 在上面跑二分图最大匹配后&#xff0c;剩下没有匹配的左点就是终点&#xff…

【linuxC语言】获取进程信息

文章目录 前言一、getrusage函数二、示例代码总结 前言 在Linux环境下&#xff0c;了解和获取进程的信息对于系统监控、性能优化以及调试等任务至关重要。C语言作为Linux系统编程的主要语言之一&#xff0c;提供了丰富的系统调用和库函数&#xff0c;可以帮助我们轻松地获取进…

嵌入式学习69-C++(Opencv)

知识零碎&#xff1a; QT的两种编译模式 1.debug 调试模式 …

javaWeb入门(自用)

1. vue学习 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><script src"https://unpkg.com/vue2"></script> </head> <body><div id"…

Q1保健品线上市场分析(二):头部力量缺失,中高端鱼油高速成长

事实上&#xff0c;我国的鱼油行业相较其他国家来说起步较晚。但随着这几年大众健康意识的增强&#xff0c;保健品行业得到了更加深入的发展&#xff0c;人们对鱼油的认知度大大提升。 鱼油中的DHA、EPA等成分在降血脂、明目益智、抗炎等方面有不可替代的功效&#xff0c;因此…

如何避免在抓取Google时被屏蔽?代理IP的7个使用误区

在当今数字化时代&#xff0c;数据采集和网络爬取已成为许多企业和个人必不可少的业务活动。对于爬取搜索引擎数据&#xff0c;特别是Google&#xff0c;使用代理IP是常见的手段。然而&#xff0c;使用代理抓取Google并不是一件轻松的事情&#xff0c;有许多常见的误区可能会导…

项目经理【过程】原则

系列文章目录 【引论一】项目管理的意义 【引论二】项目管理的逻辑 【环境】概述 【环境】原则 【环境】任务 【环境】绩效 【人】概述 【人】原则 【人】任务 【人】绩效 【过程】概念 【过程】原则 一、质量管理水平、质量管理的发展 1.1 质量管理水平 1.2 质量管理的发展 …

Java | Spring框架 | @Autowired与@Resource

在Spring框架中&#xff0c;依赖注入是一种核心概念&#xff0c;它允许开发者将对象的创建和对象之间的依赖关系的管理交给框架来处理。这样做的目的是为了提高代码的模块化和可测试性。 Spring提供了多种方式来实现依赖注入&#xff0c;其中最常用的方式是通过注解。在本文中…

C++笔试强训day15

目录 1.平方数 2.分组 Check函数的具体实现&#xff1a; 3.拓扑排序 1.平方数 链接 数学找规律&#xff0c;找离 x 最近的完全平方数 y。 先开平方根再利用四舍五入进位即可。 详细代码&#xff1a; #include <cmath> #include <iostream> using namespac…

小猪APP分发:重塑应用分发市场的创新力量

在移动互联网蓬勃发展的今天&#xff0c;应用分发平台作为连接开发者与用户的桥梁&#xff0c;扮演着至关重要的角色。然而&#xff0c;随着市场的饱和&#xff0c;如何在众多平台中脱颖而出&#xff0c;为开发者提供更宽广的舞台&#xff0c;同时确保用户能够便捷、安全地获取…

STC8增强型单片机开发——GPIO

一、理解电灯案例的代码 #include "STC8H.H"int main() {P5M0 0x00;P5M1 0x00;P53 1;while(1) {} } #include "STC8H.H" 引入头文件P5M0 0x00;P5M1 0x00;配置引脚模式P531;配置IO引脚的电平 二、头文件STC8H.H 针对 STC8H 系列芯片的头文件&#xff…

「网络流 24 题」魔术球 【最小路径覆盖】

「网络流 24 题」魔术球 注意这里的球是依次放置&#xff0c;也就是说如果当前放到第 i i i 号球&#xff0c;那么 1 → i − 1 1 \rarr i - 1 1→i−1 号球都已经放好了&#xff0c;否则可以放无数个球 思路 首先我们对于 i < j 且 i j 完全平方数 i < j 且 i j…

啸叫抑制器采用什么处理芯片?ES56031或PH56031

会议系统或卡拉OK最头疼的就是啸叫了吧&#xff0c;来看看啸叫抑制器采用什么芯片 四通道啸叫抑制器&#xff0c;采用了2个电路板&#xff0c;每个板子处理2路信号&#xff0c;每块电路板有2个卡侬输入插座&#xff0c;2个卡侬输出插座 ES56031S&#xff0c;该啸叫抑制器为4通道…

可视化:智慧能源解决方案,降本增效,运筹帷幄。

智慧能源可视化解决方案是一种利用先进的技术和工具&#xff0c;将能源数据以直观、可视的方式呈现出来&#xff0c;帮助企业更好地管理能源使用&#xff0c;降低成本&#xff0c;提高效率的解决方案。 以下是一些智慧能源可视化解决方案可以帮助企业降本增效、智连未来的方式&…

在思科和华为上实现两个主机A,B A能ping通B,B不能ping通A

1.华为实验的topo如下 常规状态下任意两台主机都是可以ping通的 此时的需求是PC4能ping通PC2和PC3但是PC2和PC3不能ping通PC4 这里需要用到ACL策略 在接口上调用 验证&#xff1a; PC4能ping通PC2和PC3 PC2和PC3不能ping通PC4 2.思科类似 正常情况下是都能互相ping通 加上ac…

科沃斯,「扫地茅」荣光恐难再现

作者 | 辰纹 来源 | 洞见新研社 科沃斯恐怕已经很难再回到被市场誉为“扫地茅”时的荣光了。 不久前&#xff0c;科沃斯发布2023年财报&#xff0c;报告期内营业收入155亿&#xff0c;同比仅增长1.16%&#xff0c;归母净利润6.12亿元&#xff0c;同比下降63.96%&#xff0c;直…

VALSE 2024 Workshop报告分享┆多模态大模型Monkey及其在文档智能中的应用

2024年视觉与学习青年学者研讨会&#xff08;VALSE 2024&#xff09;于5月5日到7日在重庆悦来国际会议中心举行。本公众号将全方位地对会议的热点进行报道&#xff0c;方便广大读者跟踪和了解人工智能的前沿理论和技术。欢迎广大读者对文章进行关注、阅读和转发。文章是对报告人…

Ansible剧本playbook之--------Templates 模块、roles角色详细解读

目录 一、Templates 模块 1.1准备模板文件并设置引用的变量 1.2修改主机清单文件&#xff0c;使用主机变量定义一个变量名相同&#xff0c;而值不同的变量 1.3编写 playbook 1.4ansible主机远程查看修改参数 1.5验证 二、tags 模块 always应用 三、Roles 模块 3.1ro…