JRT导出协议实现

news2024/11/25 10:59:33

之前实现了JRT的打印客户端实现,这次实现JRT的导出Excel的客户端实现,这样这套框架就成为完全体了。还是一样的设计,不面向具体业务编程,我喜欢面向协议编程,导出一样定义了一套协议。

协议约定:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

然后就是对约定的实现

导出数据输出的示例

import JRT.Core.Dto.OutParam;
import JRT.Model.Entity.BTTestCode;
import JRTBLLBase.BaseHttpHandlerNoSession;
import JRTBLLBase.Helper;

import java.util.List;

/**
 * 输出符合Query约定的数据供导出Excel用,所有的虚拟M方法参数约定就是这个样子
 */
public class ExportExcelTest extends BaseHttpHandlerNoSession {
    /**
     * 查询所有项目数据导出到Excel
     * @param P0
     * @param P1
     * @param P2
     * @param P3
     * @param P4
     * @param P5
     * @param P6
     * @param P7
     * @param P8
     * @param P9
     * @param P10
     * @param P11
     * @param P12
     * @param P13
     * @param Session
     * @param Output
     * @return
     */
    public String QryTestCode(String P0, String P1, String P2, String P3, String P4, String P5, String P6, String P7, String P8, String P9, String P10, String P11, String P12, String P13, OutParam Session, OutParam Output) throws Exception{
        BTTestCode dto=new BTTestCode();
        //返回的参数,供Excel模板使用
        Session.Message="项目数据导出^"+JRT.Core.Util.TimeParser.GetNowDate()+"^zhanglianzhu";
        //查询项目数据
        List<BTTestCode> retList=EntityManager().FindAll(dto,null,"",-1,-1);
        //数组转json就是等价Query的
        return Helper.Object2Json(retList);
    }
}





打印消息处理类对接导出命令

package Monitor.Msg;

import JRTPrintDraw.DrawConvert;
import JRTPrintDraw.JsonDealUtil;
import JRTPrintDraw.WebService.OutValue;
import JRTPrintDraw.WebService.Parameters;
import JRTPrintDraw.WebService.WebGetData;
import Monitor.Util.LogUtils;
import javafx.application.Platform;
import javafx.scene.control.Alert;
import org.apache.poi.ss.usermodel.Workbook;
import org.java_websocket.WebSocket;

/**
 * 处理打印消息
 */
public class MessagePrintDeal implements Monitor.Msg.IMessageDeal {
    /**
     * 处理消息
     *
     * @param socket  套接字,可以获得id,发送消息给socket
     * @param message 约定#分割的第一位描述消息类型,收到的消息内容
     * @return 是否继续往后传递消息,true是,false否
     */
    public boolean DealMessage(WebSocket socket, String message) throws Exception {
        LogUtils.WriteDebugLog("识别以print#开头的消息");
        //识别打印消息
        if (message.split("#")[0].equals("print")) {
            LogUtils.WriteDebugLog("确定为打印消息,准备处理");
            int index = message.indexOf('#');
            String msg = message.substring(index + 1);
            String[] arrMsg = msg.split("@");

            //报告打印消息直接处理,不驱动exe,提高速度
            if (arrMsg.length > 5 && (!arrMsg[4].contains("PDF#")) && (arrMsg[0].equals("iMedicalLIS://0") || arrMsg[0].equals("iMedicalLIS://1") || arrMsg[0].equals("iMedicalLIS://Export")) && (!arrMsg[4].equals("ReportView"))) {
                String cmdLine = msg.substring(14);
                String[] tmpStrings = cmdLine.split("@");
                String printFlag = tmpStrings[0];
                String connectString = tmpStrings[1].replace("&", "&amp;");
                String rowids = tmpStrings[2];
                String userCode = tmpStrings[3];
                //PrintOut:打印  PrintPreview打印预览
                String printType = tmpStrings[4];
                //参数模块名称(LIS工作站,DOC医生,SELF自助,OTH其它)
                String paramList = tmpStrings[5];

                String clsName = "";
                String funName = "";
                if (tmpStrings.length >= 8) {
                    clsName = tmpStrings[6];
                    funName = tmpStrings[7];
                }
                //导出Excel
                if (printFlag.equals("Export") || (printFlag.equals("ExportFast") && tmpStrings.length > 2)) {
                    String tempExcelPath = tmpStrings[6];
                    //快速导出Excel标识
                    if (tmpStrings[0] == "ExportFast") {
                        //ExportUtil.IsExportFast = true;
                    }
                    //选模板的模式
                    if (tempExcelPath.contains("|")) {
                        Platform.runLater(() -> {
                            //选择模板
                            Monitor.Dialog.SelectExcelDialog frmSelect = new Monitor.Dialog.SelectExcelDialog(tempExcelPath);
                            frmSelect.Show();
                            if (frmSelect.IsOK == true) {
                                tmpStrings[6] = frmSelect.SelectPath;
                                try {
                                    Monitor.Excel.ExportUtil.RealExport(tmpStrings);
                                } catch (Exception ee) {
                                    Alert alert = new Alert(Alert.AlertType.INFORMATION);
                                    alert.setTitle("提示");
                                    alert.setContentText(ee.getMessage());
                                    alert.showAndWait();
                                }
                            }
                        });
                    } else {
                        Platform.runLater(() -> {
                            try {
                                Monitor.Excel.ExportUtil.RealExport(tmpStrings);
                            } catch (Exception ee) {
                                Alert alert = new Alert(Alert.AlertType.INFORMATION);
                                alert.setTitle("提示");
                                alert.setContentText(ee.getMessage());
                                alert.showAndWait();
                            }
                        });
                    }
                    return false;
                }
                //没传报告主键退出
                else if (rowids == "" && printType != "ReportView") {
                    javafx.application.Platform.runLater(() -> {
                        Alert alert = new Alert(Alert.AlertType.INFORMATION);
                        alert.setTitle("提示");
                        alert.setHeaderText("打印参数异常");
                        alert.setContentText("未传入报告主键");
                        alert.showAndWait();
                    });
                    return true;
                }
                ;
                String ip = "";
                String hostName = "";
                String mac = "";
                paramList = paramList + "^HN" + hostName + "^IP" + ip + "^MAC" + mac;
                //printFlag  0:打印所有报告 1:循环打印每一份报告
                if (printFlag.substring(0, 1).equals("0")) {
                    Monitor.Print.PrintProtocol reportPrint = new Monitor.Print.PrintProtocol(rowids, userCode, paramList, connectString, printType, clsName, funName);
                } else {
                    String[] tmpRowids = rowids.split((char) 94 + "");
                    for (int i = 0; i < tmpRowids.length; i++) {
                        rowids = tmpRowids[i];
                        if (rowids != "") {
                            Monitor.Print.PrintProtocol reportPrint = new Monitor.Print.PrintProtocol(rowids, userCode, paramList, connectString, printType, clsName, funName);
                        }
                    }
                }
            }
            return false;
        }
        LogUtils.WriteDebugLog("不是打印消息,传递消息链");
        return true;
    }


}

导出主控制类实现

package Monitor.Excel;

import JRTPrintDraw.DrawConvert;
import JRTPrintDraw.JsonDealUtil;
import JRTPrintDraw.WebService.OutValue;
import JRTPrintDraw.WebService.Parameters;
import JRTPrintDraw.WebService.WebGetData;
import javafx.scene.control.Alert;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import javax.net.ssl.*;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.List;

public class ExportUtil {
    /**
     * 文件序号
     */
    private static int fileIndex = 0;

    /**
     * 是否是快速导出模式
     */
    private static boolean IsExportFast = false;

    /**
     * url编码
     *
     * @param url
     * @return
     * @throws Exception
     */
    private static String UrlEnCode(String url) throws Exception {
        String[] arr = url.split("/");
        String head = "";
        String left = "";
        for (int i = 0; i < arr.length; i++) {
            if (i < 3) {
                if (head.isEmpty()) {
                    head = arr[i];
                } else {
                    head = head + "/" + arr[i];
                }
            } else {
                left = left + "/" + URLEncoder.encode(arr[i], "UTF-8");
            }
        }
        return head + left;

    }

    /**
     * 执行导出Excel
     *
     * @param inputStrArr
     * @throws Exception
     */
    public static void RealExport(String[] inputStrArr) throws Exception {
        String webServicAddress = inputStrArr[1].replace("&", "&amp;");
        //获得配置的连接信息
        //String connectStringOne = System.Configuration.ConfigurationSettings.AppSettings["WebServiceAddressOne"];
        //没有强制地址,使用单独地址
        //if (connectStringOne != "")
        //{
        //webServicAddress = connectStringOne;
        //}
        String className = inputStrArr[2];
        String functionName = inputStrArr[3];
        String paraJson = inputStrArr[4];
        String session = inputStrArr[5];
        String tempExcelPath = inputStrArr[6];
        //导出路径-1桌面  0用户选择  -2直接打印其他路径信息不带最后的\\
        String exportPath = inputStrArr[7];
        //用户选择
        if (exportPath.equals("0")) {
            String fileName = "";
            if (tempExcelPath != "") {
                String[] tmpNameArr = tempExcelPath.split("/");
                fileName = tmpNameArr[tmpNameArr.length - 1];
            }
            Monitor.Dialog.SaveExcelFileDialog sfMy = new Monitor.Dialog.SaveExcelFileDialog(fileName);
            sfMy.Show();
            if (sfMy.IsOK == true) {
                String fullName = sfMy.SavePath;
                if (fullName != "") {
                    exportPath = "F#" + fullName;
                    //ExportUtil.ExportStart = DateTime.Now;
                } else {
                    exportPath = "-2";
                }
            } else {
                return;
            }
        }
        //取图片串
        String imgStr = "";
        if (inputStrArr.length > 8) {
            imgStr = inputStrArr[8];
        }
        String printerPara = "";
        if (inputStrArr.length > 9) {
            printerPara = inputStrArr[9];
        }
        //得到参数
        Parameters para = null;
        try {
            para = (Parameters) JsonDealUtil.Json2Object(paraJson, Parameters.class);
        } catch (Exception ex) {
            if (paraJson.contains("\\\"")) {
                try {
                    para = (Parameters) JsonDealUtil.Json2Object(paraJson.replace("\\\"", "\""), Parameters.class);
                } catch (Exception ee) {
                    // 弹出一个信息对话框
                    Alert alert = new Alert(Alert.AlertType.INFORMATION);
                    alert.setTitle("提示");
                    alert.setHeaderText(null);
                    alert.setContentText(ee.getMessage());
                    alert.showAndWait();
                }
            } else {
                // 弹出一个信息对话框
                Alert alert = new Alert(Alert.AlertType.INFORMATION);
                alert.setTitle("提示");
                alert.setHeaderText(null);
                alert.setContentText(ex.getMessage());
                alert.showAndWait();
            }
        }
        String err;
        OutValue sessionObj = new OutValue();
        sessionObj.Value = session;
        //执行查询
        String jsonStr = WebGetData.GetData(webServicAddress, className, functionName, para, sessionObj);
        //Monitor.Util.LogUtils.WriteDebugLog("地址:" + webServicAddress + "类名:" + className + "方法:" + functionName + "参数:" + paraJson + "会话:" + session + "数据:" + jsonStr);
        int changePageNum = -1;
        if (exportPath.contains("-2")) {
            String[] cpArr = exportPath.split("^");
            exportPath = cpArr[0];
            if (cpArr.length > 1) {
                changePageNum = DrawConvert.ToInt32(cpArr[1]);
            }
        }
        //直接打印
        if (exportPath.equals("-2") && changePageNum > 0) {
            return;
        }

        Workbook workbook = null;
        String fileName = "";
        String tmpFileName = "";
        if (!tempExcelPath.isEmpty()) {
            try {
                //忽略证书
                if (tempExcelPath.contains("https://")) {
                    TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
                        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                            return null;
                        }

                        public void checkClientTrusted(X509Certificate[] certs, String authType) {
                        }

                        public void checkServerTrusted(X509Certificate[] certs, String authType) {
                        }
                    }
                    };

                    // Install the all-trusting trust manager
                    SSLContext sc = SSLContext.getInstance("SSL");
                    sc.init(null, trustAllCerts, new java.security.SecureRandom());
                    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

                    // Create all-trusting host name verifier
                    HostnameVerifier allHostsValid = new HostnameVerifier() {
                        public boolean verify(String hostname, SSLSession session) {
                            return true;
                        }
                    };
                }
                URL u = new URL(UrlEnCode(tempExcelPath));
                HttpURLConnection http = (HttpURLConnection) u.openConnection();
                http.setDoOutput(Boolean.TRUE);
                http.setRequestMethod("GET");
                int responseCode = http.getResponseCode();
                InputStream responseStream = http.getInputStream();
                String[] tmpNameArr = tempExcelPath.split("/");
                String tmpPath = Paths.get(Monitor.Util.Path.BasePath, "tmp").toString();
                File dirTMP = new File(tmpPath);
                //检查创建目录
                if (!dirTMP.exists()) {
                    dirTMP.mkdirs();
                }

                fileName = tmpNameArr[tmpNameArr.length - 1];
                //临时文件名
                tmpFileName = Paths.get(tmpPath, fileIndex + "-" + fileName).toString();
                FileOutputStream fileOutputStream = new FileOutputStream(tmpFileName);
                // 创建一个byte数组来缓存读取的数据
                byte[] buffer = new byte[1024];
                int bytesRead;
                // 读取InputStream中的数据,并将其写入到文件中
                while ((bytesRead = responseStream.read(buffer)) != -1) {
                    fileOutputStream.write(buffer, 0, bytesRead);
                }
                if (responseStream != null) {
                    responseStream.close();
                }
                if (fileOutputStream != null) {
                    fileOutputStream.close();
                }
                // 2007版本
                if (tmpFileName.indexOf(".xlsx") > 0) {
                    File file = new File(tmpFileName);
                    FileInputStream st = new FileInputStream(file);
                    if (ExportUtil.IsExportFast == true) {
                        workbook = new SXSSFWorkbook(new XSSFWorkbook(st));
                    } else {
                        workbook = new XSSFWorkbook(st);
                    }
                }
                // 2003版本
                else if (tmpFileName.indexOf(".xls") > 0) {
                    File file = new File(tmpFileName);
                    FileInputStream st = new FileInputStream(file);
                    workbook = new HSSFWorkbook(st);
                }
            } catch (Exception ex) {
                ex.printStackTrace();
                Alert alert = new Alert(Alert.AlertType.INFORMATION);
                alert.setTitle("提示");
                alert.setContentText(ex.getMessage());
                alert.showAndWait();
            }
        }
        try {
            List<HashMap> dataList = JsonDealUtil.Json2List(jsonStr, Object.class);
            Monitor.Excel.ExcelProtocol.DealListToExcel(dataList, workbook, fileName, exportPath, imgStr, printerPara, sessionObj.GetString());
            if (!tmpFileName.isEmpty()) {
                File fileTmp = new File(tmpFileName);
                if (fileTmp.exists()) {
                    fileTmp.delete();
                }
            }
        } catch (Exception ex) {
            Alert alert = new Alert(Alert.AlertType.INFORMATION);
            alert.setTitle("提示");
            alert.setContentText(ex.getMessage());
            alert.showAndWait();
        }
    }

    /**
     * 保存Excel文件
     *
     * @param name
     * @param workbook
     * @param path
     * @param printerPara
     * @return
     * @throws Exception
     */
    public static String SaveFile(String name, Workbook workbook, String path, String printerPara) throws Exception {
        //替换回车换行符
        path = path.replace("\r\n", "");
        //保存到桌面
        if (path.equals("-1")) {
            path = Paths.get(System.getProperty("user.home"), "Desktop").toString();
            String fullName = Paths.get(path, name).toString();
            Save(fullName, workbook);
            workbook.close();
            return fullName;
        }
        //直接打印
        if (path.equals("-2")) {

        }
        //用户自己选择模式
        else if (path.equals("0")) {
            Monitor.Dialog.SaveExcelFileDialog sfMy = new Monitor.Dialog.SaveExcelFileDialog(name);
            sfMy.Show();
            if (sfMy.IsOK == true) {
                String fullName = sfMy.SavePath;
                if (!fullName.isEmpty()) {
                    Save(fullName, workbook);
                } else {

                }
            }
        }
        //保存到固定路径
        else if (path.length() > 2 && path.substring(0, 2).equals("F#")) {
            String fullName = path.substring(2);
            Save(fullName, workbook);
            workbook.close();
            return fullName;
        }
        //否则就把路径和名称组装
        else {
            String fullName = Paths.get(path, name).toString();
            Save(fullName, workbook);
            workbook.close();
            return fullName;
        }
        return "";
    }

    /**
     * 保存文件
     *
     * @param fullName 全面
     * @param workbook 工作簿
     * @throws Exception
     */
    private static void Save(String fullName, Workbook workbook) throws Exception {
        File fi = new File(fullName);
        Path path = Paths.get(fullName).getParent();
        //没有父路径就创建
        if (!Files.exists(path)) {
            // 如果路径不存在,则创建路径
            Files.createDirectories(path);
        }
        FileOutputStream file = null;
        try {
            file = new FileOutputStream(fullName);
            // 把相应的Excel工作蒲存盘
            workbook.write(file);
        } finally {
            if (file != null) {
                file.close();
            }
        }
    }

}

导出协议实现
$s

$b
在这里插入图片描述

$col
在这里插入图片描述

选择多个Excel模板弹窗实现

package Monitor.Dialog;

import javafx.application.Platform;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Modality;
import javafx.stage.Stage;

import java.io.File;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * 选择Excel模板弹创
 */
public class SelectExcelDialog {
    /**
     * 舞台
     */
    Stage curStage = null;

    /**
     * 控件坐标
     */
    private int left = 40;

    /**
     * 控件坐标
     */
    private int top = 0;

    /**
     * 添加按钮数量
     */
    private int num = 0;

    /**
     * 用户选择的模板
     */
    public String SelectPath;

    /**
     * 是否成功
     */
    public boolean IsOK = false;

    /**
     * 构造函数
     */
    public SelectExcelDialog(String paths) {
        // 创建新的Stage对象,设置标题和尺寸
        curStage = new Stage();
        curStage.setTitle("导出Excel多模板选择");
        int Width = 500;
        int Height = 200;
        if (num > 0 && num % 3 == 0) {
            left = 40;
            top += 122;
            Height += 80;
        }
        // 创建一个水平排列的容器,将按钮添加到容器中
        // 设置按钮之间的间距为10
        VBox hbox = new VBox(10);
        String[] pathArr = paths.split("\\|");
        for (String path : pathArr) {
            int index = path.lastIndexOf('/');
            String fileName = path.substring(index + 1);
            // 创建按钮
            Button btnOne = new Button(fileName.split("\\.")[0]);
            btnOne.setPrefWidth(450);
            btnOne.setPrefHeight(40);
            btnOne.setUserData(path);
            btnOne.setOnMouseClicked(e -> {
                Button clickedButton = (Button) e.getSource();
                SelectPath = clickedButton.getUserData().toString();
                IsOK = true;
                Hide();
            });
            hbox.getChildren().add(btnOne);
            left += 173;
            num++;
        }


        // 设置容器的内边距为10
        hbox.setPadding(new Insets(10));
        // 设置容器的对齐方式为居中
        hbox.setAlignment(Pos.CENTER);

        // 创建一个容器,将水平排列的容器添加到主窗口中
        StackPane root = new StackPane();
        root.getChildren().add(hbox);
        curStage.setWidth(Width);
        curStage.setHeight(Height);
        // 创建Scene对象,并将容器作为根节点添加到Scene中
        Scene scene = new Scene(root, Width, Height);
        curStage.setScene(scene);
        curStage.initModality(Modality.APPLICATION_MODAL);
    }

    /**
     * 隐藏
     */
    private void Hide() {
        Platform.runLater(() -> {
            curStage.hide();
        });
    }

    /**
     * 展示
     */
    public void Show() {
        curStage.showAndWait();
    }
}

选择保存路径实现

package Monitor.Dialog;

import javafx.application.Platform;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.stage.FileChooser;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.util.Pair;

import java.io.File;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * 保存Excel的文件对话框
 */
public class SaveExcelFileDialog {
    /**
     * 舞台
     */
    Stage curStage = null;

    /**
     * 供外部获取选择的路径
     */
    public String SavePath = "";

    /**
     * 是否成功
     */
    public boolean IsOK = false;

    /**
     * 保存的文件名字
     */
    private String Name = "";

    /**
     * 构造函数
     */
    public SaveExcelFileDialog(String name) {
        Name = name;
        // 创建新的Stage对象,设置标题和尺寸
        curStage = new Stage();
        curStage.setTitle("导出Excel保存-导出大量数据时候肯需要比较久的时间");
        curStage.setWidth(600);
        curStage.setHeight(220);
        // 创建3个按钮
        Button btnDeskTop = new Button("保存桌面");
        btnDeskTop.setPrefWidth(150);
        btnDeskTop.setPrefHeight(110);
        btnDeskTop.setOnMouseClicked(e -> {
            String desktopPath = Paths.get(System.getProperty("user.home"), "Desktop").toString();
            if (!Name.contains(".")) {
                Name += ".xlsx";
            }
            LocalDateTime currentTime = LocalDateTime.now();
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddhhmmss");
            String formattedTime = currentTime.format(formatter);
            SavePath = Paths.get(desktopPath, formattedTime + "-" + Name).toString();
            IsOK = true;
            Hide();
        });

        Button btnUserSave = new Button("选择保存");
        btnUserSave.setPrefWidth(150);
        btnUserSave.setPrefHeight(110);
        btnUserSave.setOnMouseClicked(e -> {
            // 创建一个保存文件的对话框
            FileChooser fileChooser = new FileChooser();
            fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Excel Files", "*.xls"));
            fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Excel Files", "*.xlsx"));
            fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("All Files", "*.*"));
            if (!Name.contains(".")) {
                Name += ".xlsx";
            }
            fileChooser.setInitialFileName(Name);
            // 弹出保存文件对话框并获取用户选择的文件
            File result = fileChooser.showSaveDialog(curStage);
            if (result != null) {
                SavePath = result.getAbsolutePath();
                IsOK = true;
            } else {
                IsOK = false;
            }
            Hide();
        });

        Button btnPrint = new Button("打印");
        btnPrint.setPrefWidth(150);
        btnPrint.setPrefHeight(110);
        btnPrint.setOnMouseClicked(e -> {
            // 弹出一个信息对话框
            Alert alert = new Alert(Alert.AlertType.INFORMATION);
            alert.setTitle("提示");
            alert.setHeaderText(null);
            alert.setContentText("还没实现打印Excel支持!");
            IsOK = true;
            alert.showAndWait();
            Hide();
        });
        //创建一个水平排列的容器,将按钮添加到容器中
        //设置按钮之间的间距为10
        HBox hbox = new HBox(10, btnDeskTop, btnUserSave, btnPrint);
        // 设置容器的内边距为10
        hbox.setPadding(new Insets(10));
        // 设置容器的对齐方式为居中
        hbox.setAlignment(Pos.CENTER);

        //创建一个容器,将水平排列的容器添加到主窗口中
        StackPane root = new StackPane();
        root.getChildren().add(hbox);

        //创建Scene对象,并将容器作为根节点添加到Scene中
        Scene scene = new Scene(root, 600, 220);
        curStage.setScene(scene);
        curStage.initModality(Modality.APPLICATION_MODAL);
    }

    /**
     * 隐藏
     */
    private void Hide() {
        Platform.runLater(() -> {
            curStage.hide();
        });
    }

    /**
     * 展示
     */
    public void Show() {
        curStage.showAndWait();
    }
}

多模板让用户选的模板存放方式
在这里插入图片描述
页面调用
在这里插入图片描述

测试
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

DolerGet测试

import JRTBLLBase.BaseHttpHandlerNoSession;
import JRTBLLBase.Helper;
import JRT.Core.Dto.HashParam;
import JRT.Core.Dto.ParamDto;
import JRT.Core.Dto.OutParam;
import JRT.Model.Entity.*;
import JRT.Core.Util.Convert;
import JRT.Core.MultiPlatform.JRTContext;

import java.util.ArrayList;
import java.util.List;

/**
 * 测试DolerGet和不用DolerGet的性能差别
 *
 */
public class ashDolerGetTest extends BaseHttpHandlerNoSession {
    /**
     * 不用DolerGet查询数据
     * @return
     */
    public String NoDolerGet() throws Exception
    {
        long start=JRT.Core.Util.TimeParser.GetTimeInMillis();
        StringBuilder retSb=new StringBuilder();
        List<ParamDto> para=new ArrayList<>();
        List<RPVisitNumber> visList=EntityManager().FindAll(new RPVisitNumber(),para,"",-1,-1,"",null,null);
        retSb.append(Helper.Object2Json(visList));
        int getNum=0;
        for(RPVisitNumber vis:visList)
        {
            for(int i=0;i<200;i++) {
                if (vis.LocationDR != null) {
                    BTLocation loc = EntityManager().GetById(new BTLocation(), vis.LocationDR);
                    getNum++;
                    //retSb.append(Helper.Object2Json(loc));
                }
                if (vis.HospitalDR != null) {
                    BTHospital hos = EntityManager().GetById(new BTHospital(), vis.HospitalDR);
                    getNum++;
                    //retSb.append(Helper.Object2Json(hos));
                }
                if (vis.AdmissionTypeDR != null) {
                    BTAdmissionType adm = EntityManager().GetById(new BTAdmissionType(), vis.AdmissionTypeDR);
                    getNum++;
                    //retSb.append(Helper.Object2Json(adm));
                }
                if (vis.SpecimenDR != null) {
                    BTSpecimen sp = EntityManager().GetById(new BTSpecimen(), vis.SpecimenDR);
                    getNum++;
                    //retSb.append(Helper.Object2Json(sp));
                }
            }
        }
        long end=JRT.Core.Util.TimeParser.GetTimeInMillis();
        return "消耗时间:"+(end-start)+"    获取次数:"+getNum+"  "+retSb.toString();
    }

    /**
     * 用DolerGet查询数据
     * @return
     */
    public String DolerGet() throws Exception
    {
        long start=JRT.Core.Util.TimeParser.GetTimeInMillis();
        StringBuilder retSb=new StringBuilder();
        List<ParamDto> para=new ArrayList<>();
        List<RPVisitNumber> visList=EntityManager().FindAll(new RPVisitNumber(),para,"",-1,-1,"",null,null);
        retSb.append(Helper.Object2Json(visList));
        int getNum=0;
        for(RPVisitNumber vis:visList)
        {
            for(int i=0;i<200;i++) {
                if (vis.LocationDR != null) {
                    BTLocation loc = EntityManager().DolerGet(new BTLocation(), vis.LocationDR);
                    getNum++;
                    //retSb.append(Helper.Object2Json(loc));
                }
                if (vis.HospitalDR != null) {
                    BTHospital hos = EntityManager().DolerGet(new BTHospital(), vis.HospitalDR);
                    getNum++;
                    //retSb.append(Helper.Object2Json(hos));
                }
                if (vis.AdmissionTypeDR != null) {
                    BTAdmissionType adm = EntityManager().DolerGet(new BTAdmissionType(), vis.AdmissionTypeDR);
                    getNum++;
                    //retSb.append(Helper.Object2Json(adm));
                }
                if (vis.SpecimenDR != null) {
                    BTSpecimen sp = EntityManager().DolerGet(new BTSpecimen(), vis.SpecimenDR);
                    getNum++;
                    //retSb.append(Helper.Object2Json(sp));
                }
            }
        }
        long end=JRT.Core.Util.TimeParser.GetTimeInMillis();
        return "消耗时间:"+(end-start)+"    获取次数:"+getNum+"  "+retSb.toString();
    }

    /**
     * 查看缓存数据
     * @return
     * @throws Exception
     */
    public String View() throws Exception
    {
        return JRT.DAL.ORM.Global.GlobalManager.ViewGlobalJson();
    }

    /**
     * 查看缓存队列数据
     * @return
     * @throws Exception
     */
    public String ViewQuen() throws Exception
    {
        return JRT.DAL.ORM.Global.GlobalManager.ViewGlobalTaskQuenDate();
    }
}

不用DolerGet
在这里插入图片描述

使用DolerGet
在这里插入图片描述
缓存观测
在这里插入图片描述

这是第一版的DolerGet实现,已经有了起码一倍的性能提升,后面在细致优化,这样多维查询就不是难事了

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

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

相关文章

openEuler操作系统安装

所需要的软件镜像 https://repo.openeuler.org/openEuler-20.03-LTS/ISO/x86_64/ 选择openEuler-20.03-LTS-everything-x86_64-dvd.iso 版本的最完整 如果硬盘空间小可选择openEuler-20.03-LTS-x86_64-dvd.iso 安装步骤 1 选择第一个 install openEuler 20.03-LTS 2 选择语…

鸿蒙Harmony开发初探

一、背景 9月25日华为秋季全场景新品发布会&#xff0c;余承东宣布鸿蒙HarmonyOS NEXT蓄势待发&#xff0c;不再支持安卓应用。网易有道、同程旅行、美团、国航、阿里等公司先后宣布启动鸿蒙原生应用开发工作。 二、鸿蒙Next介绍 HarmonyOS是一款面向万物互联&#xff0c;全…

mysql原理--InnoDB记录结构

1.InnoDB行格式 我们平时是以记录为单位来向表中插入数据的&#xff0c;这些记录在磁盘上的存放方式也被称为 行格式 或者 记录格式 。 设计 InnoDB 存储引擎的大叔们到现在为止设计了4种不同类型的 行格式 &#xff0c;分别是 Compact 、 Redundant 、Dynamic 和 Compressed 行…

罗技鼠标使用接收器和电脑重新配对

罗技鼠标使用接收器和电脑重新配对 文章目录 罗技鼠标使用接收器和电脑重新配对1\. 前言2\. 安装软件3\. 进行配对3.1. 取消之前的配对3.2. 重新配对3.3 配对完成 4\. 报错4.1. 重新配对时显示配对未成功 1. 前言 罗技的鼠标出厂的时候&#xff0c;默认的是将通道一设置为接收…

『亚马逊云科技产品测评』活动征文|基于亚马逊EC2云服务器部署Gogs服务

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 亚马逊EC2云服务器&#xff08;Elastic Compute Cloud&#xff09;是亚马…

Redis穿透以及解决方法

Redis穿透是指当一个请求在缓存中和数据库都找不到对应的数据时&#xff0c;导致每次请求都要查询数据库&#xff0c;从而产生了大量的无效数据库查询&#xff0c;大量无效的数据库查询会导致数据库负载增加&#xff0c;降低数据库的性能和响应能力甚至宕机的风险。 这种情况通…

nodejs+vue+微信小程序+python+PHP天天网站书城管理系统的设计与实现-计算机毕业设计推荐

本项目主要分为前台模块与后台模块2个部分&#xff0c;详细描述如下&#xff1a;   &#xff08;1&#xff09;前台模块 首页: 首页可以起到导航的作用&#xff0c;用户想要了解网站 &#xff0c;网站首页为用户可以深入了解网站提供了一个平台&#xff0c;它就向一个“导游”…

【模型可解释性系列一】树模型-拿到特征重要度-打印关键因素

接下来一段时间内&#xff0c;会主要介绍下模型可解释性方向的一些常用方法。 模型可解释性&#xff1a;主要用来解释为什么这个样本的特征是这样的时候&#xff0c;模型结果是那样。面向老板汇报工作(尤其是不懂算法的老板)和业务方。 常用的树模型 xgboost、lightgbm这两个…

京东数据分析:2023年10月京东打印机行业品牌销售排行榜

鲸参谋监测的京东平台10月份打印机市场销售数据已出炉&#xff01; 10月份&#xff0c;打印机市场整体销售下滑。鲸参谋数据显示&#xff0c;今年10月份&#xff0c;京东平台打印机的销量将近60万&#xff0c;环比降低约2%&#xff0c;同比降低约5%&#xff1b;销售额为4.4亿&a…

Install4J安装界面中如何使用脚本找到依赖程序XShell的安装位置

前言 写了一个工具, 使用Install4j打包, 但因为需要用到XShell, 所以希望在安装界面能够提前让用户配置好XShell的安装位置, 所以对Install4j的安装界面需要自定义, 后期在程序中直接过去安装位置就可以正常使用. 调研 和git-bash不一样, 安装版的XShell没有在注册表里存储安…

通过keepalived+nginx实现 k8s apiserver节点高可用

一、环境准备 K8s 主机配置&#xff1a; 配置&#xff1a; 4Gib 内存/4vCPU/60G 硬盘 网络&#xff1a;机器相互可以通信 k8s 实验环境网络规划&#xff1a; podSubnet&#xff08;pod 网段&#xff09; 10.244.0.0/16 serviceSubnet&#xff08;service 网段&#xff09;: 1…

quickapp_快应用_快应用与h5交互

快应用与h5交互 h5跳转到快应用[1] 判断当前环境是否支持组件跳转快应用[2] h5跳转到快应用(1)deeplink方式进行跳转(推荐)(2)h5点击组件(接收参数存在问题)(3)url配置跳转(官方不推荐) 问题-浏览器问题 web组件h5页面嵌入快应用快应用发送消息到h5页面h5页面接收快应用发送的消…

微前端 前置知识2--- monorepo架构

目录 前言 pnpm vs npm pnpm设计思想 硬连接 软链接 &#xff08;符号链接&#xff09; 原理 pnpm 指令 monorepo架构 介绍 配置monorepo pnpm --filter 前言 我们采用的是微前端一个主应用&#xff0c;和多个子应用&#xff0c;我们肯定不会一个一个去install安装…

【教程】苹果推送证书的创建和使用流程详解

摘要 本篇博客主要介绍了苹果推送证书的使用流程。首先&#xff0c;在苹果开发者中心创建推送证书&#xff0c;然后在应用程序中使用该证书进行消息推送。文章详细说明了创建推送证书的步骤&#xff0c;并提供了在应用程序中注册推送服务、发送推送消息以及处理推送消息的相关…

CentOS最小化安装后怎么转图形界面/可视化桌面?

文章目录 1、命令行和图形界面切换方式一方式二 2、最小化安装转桌面1-设置网络2-测试网络3-更新文件4-安装图形5-查看默认6-设置默认 界面效果参考视频 1、命令行和图形界面切换 如果安装的是最小化&#xff0c;那么init 5 (进入图像化桌面)命令是无效的 方式一 1.如果在命…

把 Windows 11 装进移动硬盘:Windows 11 To Go

本篇文章聊聊如何制作一个可以“说带走就带走”的 Windows 操作系统&#xff0c;将 Windows11 做成能够放在 U 盘或者移动硬盘里的 WinToGo “绿色软件”。 写在前面 在《开源的全能维护 U 盘工具&#xff1a;Ventoy》这篇文章的最后&#xff0c;我提到了一个关键词 “WinToG…

带你学C语言:带你学函数

目录 &#x1f30d;函数的概念 ★★☆☆☆库函数 ★★★★☆自定义函数 ★★★☆☆形参与实参 ★★★☆☆return语句 ★★★☆☆数组做函数参数 ★★★☆☆嵌套调用和链式访问 ★★★☆☆函数的声明和定义 ✍结束语 &#x1f30d;函数的概念 数学中我们其实就见过函数…

校园局域网规划设计

摘 要 随着网络技术的发展&#xff0c;校园网的建设已经进入到一个蓬勃发展的阶段。校园网的建成和使用&#xff0c;对于提高教学和科研的质量、改善教学和科研条件、加快学校的信息化进程&#xff0c;开展多媒体教学与研究以及使教学多出人才、科研多出成果有着十分重要而深远…

Oracle连接错误:ORA-28040:没有匹配的验证协议

一、产生原因&#xff1a;oci动态库版本太低&#xff0c;无法连接高版本的数据库 二、解决办法 1、下载高版本的oci库 https://www.oracle.com/database/technologies/instant-client/winx64-64- downloads.html 2、解压并复制oci动态库 3、粘贴到相应的目录

学校图书管理系统的开发

目 录 摘要 1 Abstract. 1 1 引言 2 1.1 图书管理的现状 2 1.2 现有图书管理系统的概述 3 1.3 选题的目的、意义 3 1.4 图书管理系统的可行性分析 4 1.5 系统开发运行环境 4 2 图书管理系统开发相关技术的介绍 5 2.1 Asp.net的介绍 5 2.1.1 Asp.net的优势介绍 5 2.1.2 Asp.net…