JRT质控打印

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

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

模板维护
在这里插入图片描述

质控图
在这里插入图片描述

打印虚拟M

import JRT.Core.DataGrid.GridDto;
import JRT.Core.DataGrid.IGridChangePage;
import JRT.Core.Dto.HashParam;
import JRT.Core.Dto.OutValue;
import JRT.Core.Dto.PrintElement;
import JRT.Core.Util.Convert;
import JRT.Core.Util.PrintDrawProtocol;
import JRT.Model.Bussiness.Parameters;
import JRT.Model.Entity.*;
import JRTBLLBase.BaseHttpHandler;
import JRTBLLBase.Helper;import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;/*** 质控公共打印的虚拟M,实现LJ图、Z分数图、定性质控图、WestGard图打印控制*/
public class QCPrintCommon extends BaseHttpHandler implements IGridChangePage {/*** 打印元素*/private List<PrintElement> retList = new ArrayList<>();/*** 打印模板数据*/JRTPrintTemplateDto template = null;/*** 存打印的Data数据*/Hashtable<String, String> printDataMap = null;/*** 表格换页之前要执行的逻辑** @param gridKey* @param maxY*/public void PreChangePageDo(String gridKey, int maxY) {}/*** 表格换页之后要执行的逻辑** @param gridKey* @param maxY*/public void AfterChangePageDo(String gridKey, int maxY) {//画数据元素PrintData(template, retList, printDataMap);//画标签元素PrintLabel(template, retList);//画线元素PrintLine(template, retList);}/*** 执行质控打印绘制逻辑** @param Param* @param Session* @param Output* @return*/public String QueryPrintData(Parameters Param, OutValue Session, OutValue Output) throws Exception {//从参数对象取参数String QCPara = Param.P0;String UserCode = Param.P1;String TemplateCode = Param.P2;//分割提取数据ID和图片路径String[] TemplateCodeArr = TemplateCode.split("\\^");//数据主键String DataRowIDS = TemplateCodeArr[2];//图片路径String ImagePath = TemplateCodeArr[1];TemplateCode = TemplateCodeArr[0];//分割提取参数String[] ParaArr = QCPara.split("\\^");int StartDate = Helper.ValidParam(ParaArr[0], 0);int EndDate = Helper.ValidParam(ParaArr[1], 0);int MachineParameterDR = Convert.ToInt32(ParaArr[2]);String MaterialDR = ParaArr[3];String FMatLotDR = ParaArr[4];int TestCodeDR = Convert.ToInt32(ParaArr[5]);String Level = ParaArr[6];String QcRule = ParaArr[7];String PointRange = ParaArr[8];String FMapTitlePrintInfo = ParaArr[9];String FPrintExtraData = ParaArr[10];String IsShowDetail = ParaArr[11];//查询模板数据template = GetOneTemplate(null, TemplateCode);//得到质控打印Data数据GetQCDataData(StartDate, EndDate, MachineParameterDR, TestCodeDR, Level, QcRule, PointRange, MaterialDR, TemplateCode);//得到质控结果,给打印表格用List<QCTestResultDto> qcResList = GetQCResult(StartDate, EndDate, MachineParameterDR, TestCodeDR, Level, QcRule, PointRange, MaterialDR);//画图片元素PrintImage(template, retList, ImagePath);//画数据元素PrintData(template, retList, printDataMap);//画标签元素PrintLabel(template, retList);//画线元素PrintLine(template, retList);ZW("图", retList);//画表格元素//PrintDataGrid(template, retList, repResList);return Helper.Object2Json(retList);}/*** 输出报告结果** @param template* @param template   模板* @param retList    元素列表* @param repResList 报告结果列表*/private void PrintDataGrid(JRTPrintTemplateDto template, List<PrintElement> retList, List<Object> repResList) throws Exception {for (JRTPrintTemplateEle ele : template.EleList) {//输出表格if (ele.PrintType.equals("DataGrid")) {//得到表格定义GridDto defGrid = (GridDto) Helper.Json2Object(ele.PrintText, GridDto.class);int lastY = PrintDrawProtocol.DrawGrid(retList, defGrid, null, repResList, "ReportRes", this);}}}/*** 输出图片** @param template* @param template  模板* @param retList   元素列表* @param ImagePath 图片路径*/private void PrintImage(JRTPrintTemplateDto template, List<PrintElement> retList, String ImagePath) throws Exception {for (JRTPrintTemplateEle ele : template.EleList) {//输出图片if (ele.PrintType.equals("Graph")) {//不是图片元素退出if (!ele.DataField.equals("P")) {continue;}int addHeigth = 0;String[] arr = ImagePath.split(";");for (String one : arr) {PrintElement printEle = PrintDrawProtocol.DrawGraph(ele.PrintX, ele.PrintY + addHeigth, ele.PrintWidth, ele.PrintHeight, "CMD", false, false);printEle.PrintFlag = one;retList.add(printEle);addHeigth += ele.PrintHeight + 5;}}}}/*** 输出数据** @param template     模板* @param retList      元素列表* @param printDataMap 数据哈希*/private void PrintData(JRTPrintTemplateDto template, List<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);}}}public void GetQCDataData(int StartDate, int EndDate, int MachineParameterDR, int TestCodeDR, String Level, String QcRule, String PointRange, String MaterialDR, String TemplateCode) throws Exception {//仪器数据BTMIMachineParameter miDto = EntityManager().DolerGet(BTMIMachineParameter.class, MachineParameterDR);BTWorkGroupMachine wgmDto = EntityManager().DolerGet(BTWorkGroupMachine.class, miDto.WorkGroupMachineDR);BTWorkGroup wgDto = EntityManager().DolerGet(BTWorkGroup.class, wgmDto.WorkGroupDR);BTHospital hosDto = EntityManager().DolerGet(BTHospital.class, miDto.HospitalDR);String title = hosDto.CName;String titleWG = wgDto.CName;if (TemplateCode.equals("QCPrintZ")) {title = title + "Z分数图";titleWG = titleWG + "Z分数图";} else if (TemplateCode.equals("QCPrintQualitative")) {title = title + "定性质控图";titleWG = titleWG + "定性质控图";} else if (TemplateCode.equals("QCPrintLJ")) {title = title + "L-J图";titleWG = titleWG + "L-J图";} else if (TemplateCode.equals("QCPrintWestGard")) {title = title + "Levey-Jenning图";titleWG = titleWG + "Levey-Jenning图";}//存打印的Data数据printDataMap = new Hashtable<>();printDataMap.put("标题", title);printDataMap.put("查询日期", Helper.DateIntToStr(StartDate) + " " + Helper.DateIntToStr(EndDate));printDataMap.put("仪器代码", miDto.Code);printDataMap.put("仪器", miDto.CName);BTQCMaterial matDto = EntityManager().DolerGet(BTQCMaterial.class, Convert.ToInt32(MaterialDR));BTTestCode tsDto = EntityManager().DolerGet(BTTestCode.class, TestCodeDR);printDataMap.put("质控物代码", matDto.Code);printDataMap.put("质控物", matDto.CName);printDataMap.put("波长", matDto.WaveLength);printDataMap.put("项目名称", tsDto.CName);printDataMap.put("浓度单位", "");printDataMap.put("实验方法", "");printDataMap.put("浓度", "");printDataMap.put("使用规则", "");printDataMap.put("批号", "");printDataMap.put("校正液批号", "");printDataMap.put("校正液效期", "");printDataMap.put("校正液", "");printDataMap.put("试剂厂商", "");printDataMap.put("失控处理", "");printDataMap.put("质控评价", "");printDataMap.put("主波长", "");printDataMap.put("次波长", "");printDataMap.put("试剂批号", "");printDataMap.put("质控批号", "");printDataMap.put("批次浓度", "");printDataMap.put("打印时间", "");printDataMap.put("目标CV", "");printDataMap.put("失效日期", "");printDataMap.put("打印人", "");printDataMap.put("试剂有效期", "");printDataMap.put("工作组", wgDto.CName);printDataMap.put("工作小组", wgmDto.CName);printDataMap.put("开始日期", Helper.DateIntToStr(StartDate));printDataMap.put("结束日期", Helper.DateIntToStr(EndDate));printDataMap.put("生产日期", "");printDataMap.put("仪器简称", miDto.LName);printDataMap.put("工作组标题", titleWG);printDataMap.put("质控审阅人", "");printDataMap.put("签字", "");printDataMap.put("质控物厂家", "");printDataMap.put("质控审阅人签名", "");printDataMap.put("签字签名", "");printDataMap.put("确认日期", "");printDataMap.put("审核日期", "");}public List<QCTestResultDto> GetQCResult(int StartDate, int EndDate, int MachineParameterDR, int TestCodeDR, String Level, String QcRule, String PointRange, String MaterialDR) throws Exception {HashParam hs = new HashParam();hs.Add("MachineParameterDR", MachineParameterDR);hs.Add("TestCodeDR", TestCodeDR);List<String> operater = new ArrayList<>();operater.add("=");operater.add("=");hs.Add("TestDate", StartDate);hs.Add("TestDate", EndDate);operater.add(">=");operater.add("<=");//质控物浓度映射HashMap<Integer, BTQCMaterialLevel> matLevMap = new HashMap<>();//筛选质控物if (!MaterialDR.isEmpty()) {hs.Add("MaterialDR", Convert.ToInt32(MaterialDR));//质控浓度List<BTQCMaterialLevel> levList = EntityManager().FindByColVal(BTQCMaterialLevel.class, "MaterialDR", Convert.ToInt32(MaterialDR));if (levList != null && levList.size() > 0) {for (BTQCMaterialLevel lev : levList) {matLevMap.put(lev.LevelNo, lev);}}}//浓度筛选图HashMap levMap = Helper.GetSplitMap(Level, ",");//查询仪器、项目、日期范围的所有质控数据List<QCTestResultDto> allData = EntityManager().FindAllSimple(QCTestResultDto.class, hs, "LevelNo asc,TestDate asc,TestTime asc", -1, null, operater);//存处理后的数据List<QCTestResultDto> dealedData = new ArrayList<>();if (allData != null && allData.size() > 0) {for (QCTestResultDto one : allData) {//筛选浓度if (levMap.size() > 0 && !levMap.containsKey(String.valueOf(one.LevelNo))) {continue;}dealedData.add(one);}}return dealedData;}/*** 通过模板主键或者代码得到模板数据供打印使用** @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) {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 List<JRTPrintTemplateEle> EleList;}/*** 返回到前台的数据实体*/public static class QCTestResultDto extends QCTestResult {/*** 当前浓度*/public int CurLevelNo;/*** 点类型*/public String CurPointType;/*** 数量*/public int Num;/*** 日期*/public String CurdateNum;/*** 测试时间*/public String TestRTime;/*** 用户名*/public String UserName;/*** 画图结果*/public String PicResult;/*** 结果*/public String PicX;/*** 规则代码*/public String CurRuleCode;/*** 规则颜色*/public String CurRuleColour;/*** 规则状态*/public String CurRuleStatus;/*** 规则名称*/public String CurRuleName;/*** 靶值*/public String TCX;/*** SD*/public String TCSD;/*** 项目名称*/public String TCName;/*** 项目代码*/public String CurTestCode;/*** 浓度名称*/public String CurLevelName;/*** CV*/public String TCCV;/*** 计算均值*/public String CalX;/*** 计算SD*/public String CalSD;/*** 计算CV*/public String CalCV;/*** 计算类型*/public String CalcType;/*** 计算均值*/public String AccMean;/*** 计算均值*/public String AccSD;/*** 计算均值*/public String AccCV;/*** 计算均值*/public String SetCV;/*** 计算均值*/public String TargetCV;/*** 计算均值*/public String LotNo;/*** 计算均值*/public String Event;/*** 计算均值*/public String ReagentLot;/*** 计算均值*/public String ResRemark;/*** 计算均值*/public String AutUserName;/*** 计算均值*/public String OriginalRes;/*** 失控处理说明*/public String TransactionRemark;/*** 失控类型*/public String TransactionType;/*** 处理方法*/public String TransactionMethod;/*** 失控处理结果*/public String TransactionRes;/*** 失控处理人*/public String TransactionUser;/*** 全部批号*/public String LotNoAll;/*** 结果和靶值的偏差*/public Double Offset;}
}

借助虚拟M实现的质控图公共查询逻辑

import JRT.Core.Dto.HashParam;
import JRT.Core.Dto.OutValue;
import JRT.Core.Util.Convert;
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.List;
import java.util.Map;/*** 画质控图公共查询逻辑,所有的质控图都通过虚拟M调过来,钙类实现规则判断等*/
public class QCDrawCommon extends BaseHttpHandler {/*** 质控绘图公共查数据* @param Param* @param Session* @param Output* @return* @throws Exception*/public String QueryQcDrawData(Parameters Param, OutValue Session, OutValue Output) throws Exception {int StartDate= Helper.ValidParam(Param.P0,0);int EndDate=Helper.ValidParam(Param.P1,0);int MachineParameterDR= Convert.ToInt32(Param.P2);int TestCodeDR=Convert.ToInt32(Param.P3);String Level=Param.P4;String QcRule=Param.P5;String PointRange=Param.P6;String MaterialDR=Param.P7;String UseFL=Param.P8;String LotNo=Param.P9;HashParam hs=new HashParam();hs.Add("MachineParameterDR",MachineParameterDR);hs.Add("TestCodeDR",TestCodeDR);List<String> operater=new ArrayList<>();operater.add("=");operater.add("=");hs.Add("TestDate",StartDate);hs.Add("TestDate",EndDate);operater.add(">=");operater.add("<=");//质控物浓度映射HashMap<Integer,BTQCMaterialLevel> matLevMap=new HashMap<>();//筛选质控物if(!MaterialDR.isEmpty()){hs.Add("MaterialDR",Convert.ToInt32(MaterialDR));//质控浓度List<BTQCMaterialLevel> levList=EntityManager().FindByColVal(BTQCMaterialLevel.class,"MaterialDR",Convert.ToInt32(MaterialDR));if(levList!=null&&levList.size()>0){for(BTQCMaterialLevel lev:levList){matLevMap.put(lev.LevelNo,lev);}}}//浓度筛选图HashMap levMap=Helper.GetSplitMap(Level,",");//查询仪器、项目、日期范围的所有质控数据List<QCTestResultDto> allData=EntityManager().FindAllSimple(QCTestResultDto.class,hs,"LevelNo asc,TestDate asc,TestTime asc",-1,null,operater);//存处理后的数据List<QCTestResultDto> dealedData=new ArrayList<>();//1:所有质控点 2:去除排除点 6:所有在控点 11:去除平行点 12:仅平行点 4:去除复查点 10:只查最后一点//7:最好点连线 8:最后一点连线 9:只查最好点//辅助判断复查点HashMap redoMap=new HashMap();//最好点的图HashMap<String,QCTestResultDto> bestMap=new HashMap();HashMap<Integer, Boolean> bestRowIDMap=new HashMap();//最后点的图HashMap<String,QCTestResultDto> lastMap=new HashMap();HashMap<Integer, Boolean> lastRowIDMap=new HashMap();if(allData!=null&&allData.size()>0){for(QCTestResultDto one:allData){//筛选浓度if(levMap.size()>0&&!levMap.containsKey(String.valueOf(one.LevelNo))){continue;}//去除排除点if(PointRange.equals("2")&&one.ExcludeType.equals("2")){continue;}//所有在控点if(PointRange.equals("6")&&one.CurRuleStatus.equals("R")){continue;}//仅平行点if(PointRange.equals("11")&&!one.IsParallel.equals("!")){continue;}//去除平行点if(PointRange.equals("12")&&one.IsParallel.equals("!")){continue;}//去除复查点if(PointRange.equals("4")&&redoMap.containsKey(one.LevelNo+"-"+one.TestDate)){continue;}//只查最后一点if(PointRange.equals("10")&&redoMap.containsKey(one.LevelNo+"-"+one.TestDate)){continue;}//当天第一个数据redoMap.put(one.LevelNo+"-"+one.TestDate,true);one.CurLevelNo=one.LevelNo;one.CurPointType="";one.Num=1;one.CurdateNum=Helper.DateIntToStr(one.TestDate);one.TestRTime=Helper.TimeIntToStr(one.TestTime);one.UserName="";if(one.AddUserDR!=null){SYSUser user=EntityManager().DolerGet(SYSUser.class,one.AddUserDR);one.UserName=user.CName;}one.PicResult=one.Result;one.PicX=one.PicResult;one.CurRuleCode="";one.CurRuleColour="";one.CurRuleStatus="";one.CurRuleName="";if(one.QCRulesDR!=null){BTQCRules rule=EntityManager().DolerGet(BTQCRules.class,one.QCRulesDR);one.CurRuleCode=rule.Code;one.CurRuleColour=rule.Color;one.CurRuleStatus=rule.Status;one.CurRuleName=rule.CName;}//参数QCResMaterialTestCode para=EntityManager().DolerGet(QCResMaterialTestCode.class,one.ResMaterialTestCodeDR);//结果和均值的差one.Offset=Math.abs(Convert.ToInt32(one.Result)-para.Mean);//找到最好结果if(!bestMap.containsKey(one.LevelNo+"-"+one.TestDate)){bestMap.put(one.LevelNo+"-"+one.TestDate,one);}else{QCTestResultDto pre=bestMap.get(one.LevelNo+"-"+one.TestDate);if(pre.Offset>one.Offset){bestMap.put(one.LevelNo+"-"+one.TestDate,one);}}//最后点lastMap.put(one.LevelNo+"-"+one.TestDate,one);one.TCX=String.valueOf(para.Mean);one.TCSD=String.valueOf(para.SD);BTTestCode testCode=EntityManager().DolerGet(BTTestCode.class,one.TestCodeDR);one.TCName=testCode.CName;one.CurTestCode=testCode.Code;one.CurLevelName=matLevMap.get(one.LevelNo).CName;one.TCCV=String.valueOf(para.SetCV);one.CalX="";one.CalSD="";one.CalCV="";one.CalcType="";one.AccMean="";one.AccSD="";one.AccCV="";one.SetCV=String.valueOf(para.SetCV);one.TargetCV=para.TargetCV;one.LotNo=para.LotNo;one.Event="";one.ReagentLot=para.RgLot;one.ResRemark=one.Remark;one.AutUserName="";one.OriginalRes=one.TextRes;one.TransactionRemark="";one.TransactionMethod="";one.TransactionRes="";one.TransactionType="";one.TransactionUser="";one.LotNoAll="";dealedData.add(one);}//转换成主键mapfor (Map.Entry<String,QCTestResultDto> entry : bestMap.entrySet()) {bestRowIDMap.put(entry.getValue().RowID,true);}//转换成主键mapfor (Map.Entry<String,QCTestResultDto> entry : lastMap.entrySet()) {lastRowIDMap.put(entry.getValue().RowID,true);}//第二次处理数据for(int i=0;i<dealedData.size();i++){//只查最好点if(PointRange.equals("9")){if(!bestRowIDMap.containsKey(dealedData.get(i).RowID)){dealedData.remove(i);i--;continue;}}//只查最后点if(PointRange.equals("10")){if(!lastRowIDMap.containsKey(dealedData.get(i).RowID)){dealedData.remove(i);i--;continue;}}//最好点连线if(PointRange.equals("7")){if(!bestRowIDMap.containsKey(dealedData.get(i).RowID)){dealedData.get(i).CurPointType="0";}}//最后点连线else{if(!lastRowIDMap.containsKey(dealedData.get(i).RowID)){dealedData.get(i).CurPointType="0";}}}}return Helper.Object2Json(dealedData);}/*** 返回到前台的数据实体*/public static class QCTestResultDto extends QCTestResult{/*** 当前浓度*/public int CurLevelNo;/*** 点类型*/public String CurPointType;/*** 数量*/public int Num;/*** 日期*/public String CurdateNum;/*** 测试时间*/public String TestRTime;/*** 用户名*/public String UserName;/*** 画图结果*/public String PicResult;/*** 结果*/public String PicX;/*** 规则代码*/public String CurRuleCode;/*** 规则颜色*/public String CurRuleColour;/*** 规则状态*/public String CurRuleStatus;/*** 规则名称*/public String CurRuleName;/*** 靶值*/public String TCX;/*** SD*/public String TCSD;/*** 项目名称*/public String TCName;/*** 项目代码*/public String CurTestCode;/*** 浓度名称*/public String CurLevelName;/*** CV*/public String TCCV;/*** 计算均值*/public String CalX;/*** 计算SD*/public String CalSD;/*** 计算CV*/public String CalCV;/*** 计算类型*/public String CalcType;/*** 计算均值*/public String AccMean;/*** 计算均值*/public String AccSD;/*** 计算均值*/public String AccCV;/*** 计算均值*/public String SetCV;/*** 计算均值*/public String TargetCV;/*** 计算均值*/public String LotNo;/*** 计算均值*/public String Event;/*** 计算均值*/public String ReagentLot;/*** 计算均值*/public String ResRemark;/*** 计算均值*/public String AutUserName;/*** 计算均值*/public String OriginalRes;/*** 失控处理说明*/public String TransactionRemark;/*** 失控类型*/public String TransactionType;/*** 处理方法*/public String TransactionMethod;/*** 失控处理结果*/public String TransactionRes;/*** 失控处理人*/public String TransactionUser;/*** 全部批号*/public String LotNoAll;/*** 结果和靶值的偏差*/public Double Offset;}
}

WestGard图对接

import JRT.Core.Dto.HashParam;
import JRT.Core.Dto.OutValue;
import JRT.Core.MultiPlatform.JRTContext;
import JRT.Core.Util.Convert;
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.List;/*** 绘制质控WestGard图的后台*/
public class ashQCDrawWestGard extends BaseHttpHandler {/*** 查询质控浓度数据** @return*/public String QueryQCLeaveData() throws Exception {int MaterialDR = Helper.ValidParam(JRTContext.GetRequest(Request, "MaterialDR"), 0);List<BTQCMaterialLevel> retList = EntityManager().FindByColVal(BTQCMaterialLevel.class, "MaterialDR", MaterialDR);return Helper.Object2Json(retList);}/*** 查询质控数据* @return*/public String QueryWestGardData() throws Exception{//参数Parameters param = new Parameters();//开始日期param.P0 = JRTContext.GetRequest(Request, "StartDate");//结束日期param.P1 = JRTContext.GetRequest(Request, "EndDate");//仪器代码param.P2 = JRTContext.GetRequest(Request, "InstrumentCode");//项目代码param.P3 = JRTContext.GetRequest(Request, "TcCode");//浓度串String leavelStr = Helper.ValidParam(JRTContext.GetRequest(Request, "Leavel"), "");//浓度param.P4 = JRTContext.GetRequest(Request, "Leavel");//质控规则param.P5 = JRTContext.GetRequest(Request, "QcRule");//点类型param.P6 = JRTContext.GetRequest(Request, "PointRange");//质控物param.P7 = JRTContext.GetRequest(Request, "MaterialCode");param.P8 = Helper.ValidParam(JRTContext.GetRequest(Request, "UseFL"), "");param.P9 = Helper.ValidParam(JRTContext.GetRequest(Request, "LotNo"), "");OutValue Session=new OutValue();Session.Value=UserLogin().SessionStr;OutValue Output=new OutValue();String json=Helper.GetVMData("qc.ashx.QCDrawCommon","QueryQcDrawData",param,Session,Output);String ShowStr="[]";String statJson="[]";String result = "{ \"DrawData\":" + json + ",\"StartDate\":\"" + param.P0+ "\",\"MaxDate\":\"" + param.P1 + "\",\"ShowStr\":" + ShowStr + ",\"State\":" + statJson + "}";//返回查询结果return result;}/*** 查询工作组数据* @return* @throws Exception*/public String QueryWorkGroupData() throws Exception{//得到用户的角色List<SYSUserRoleDto> roleList = EntityManager().FindByColVal(SYSUserRoleDto.class, "UserDR", Convert.ToInt32(UserLogin().UserID));if (roleList != null && roleList.size() > 0) {for (SYSUserRoleDto one : roleList) {BTWorkGroup wgDto = EntityManager().DolerGet(BTWorkGroup.class, one.WorkGroupDR);one.WorkGroupName = wgDto.CName;one.CurWorkGroupDR = UserLogin().GroupID;}}return Helper.Object2Json(roleList);}/*** 查询仪器** @return*/public String QryMachineParameter() throws Exception {int WorkGroupDR = Helper.ValidParam(JRTContext.GetRequest(Request, "WorkGroupDR"), 0);List<BTWorkGroupMachine> wgmList = EntityManager().FindByColVal(BTWorkGroupMachine.class, "WorkGroupDR", WorkGroupDR);List<BTMIMachineParameter> retList = new ArrayList<>();if (wgmList != null && wgmList.size() > 0) {for (BTWorkGroupMachine wgm : wgmList) {//查询工作小组下的所有仪器List<BTMIMachineParameter> machList = EntityManager().FindByColVal(BTMIMachineParameter.class, "WorkGroupMachineDR", wgm.RowID);retList.addAll(machList);}}return Helper.Object2Json(retList);}/*** 查询仪器项目** @return*/public String QryMachineTestCode() throws Exception {int MachineParameterDR = Helper.ValidParam(JRTContext.GetRequest(Request, "MachineParameterDR"), 0);int StartDate = Helper.ValidParam(JRTContext.GetRequest(Request, "StartDate"), 0);int EndDate = Helper.ValidParam(JRTContext.GetRequest(Request, "EndDate"), 0);HashParam hs = new HashParam();hs.Add("StartDate", StartDate);List<String> operators = new ArrayList<>();operators.add("<=");//先找小于开始日期的最近数据List<BTQCMaterialTestCode> lastData = EntityManager().FindAllSimple(BTQCMaterialTestCode.class, hs, "StartDate desc", 1, null, operators);//然后安装最近开始日期和结束日期找模板数据HashParam hsFind = new HashParam();//结束日期hsFind.Add("StartDate", EndDate);List<String> operatorsFind = new ArrayList<>();operatorsFind.add("<=");List<String> joinerFind = new ArrayList<>();if (lastData != null && lastData.size() > 0) {joinerFind.add("and");operatorsFind.add(">=");//开始日期hsFind.Add("StartDate", lastData.get(0).StartDate);}//目标数据List<BTQCMaterialTestCodeDto> perData = EntityManager().FindAllSimple(BTQCMaterialTestCodeDto.class, hsFind, "StartDate asc", -1, joinerFind, operatorsFind);//返回的数据List<BTQCMaterialTestCodeDto> retData = new ArrayList<>();HashMap map = new HashMap();if (perData != null && perData.size() > 0) {for (BTQCMaterialTestCodeDto one : perData) {BTQCMaterial matDto = EntityManager().DolerGet(BTQCMaterial.class, one.MaterialDR);one.MaterialName = matDto.CName;BTTestCode tsDto = EntityManager().DolerGet(BTTestCode.class, one.TestCodeDR);one.CName = tsDto.CName;one.Code = tsDto.Code;one.Synonym = tsDto.Synonym;if (!map.containsKey(one.MaterialDR + "-" + one.TestCodeDR)) {retData.add(one);map.put(one.MaterialDR + "-" + one.TestCodeDR, true);}one.QcFlag="0";one.HasDoc="";one.LotNoJson="[]";}}return Helper.Object2Json(retData);}/*** 查询批次项目实体*/public static class BTQCMaterialTestCodeDto extends BTQCMaterialTestCode {/*** 质控物名称*/public String MaterialName;/*** 项目名称*/public String CName;/*** 项目缩写*/public String Synonym;/*** 项目代码*/public String Code;/*** 质控标识*/public String QcFlag;/*** 是否归档*/public String HasDoc;/*** 批号*/public String LotNoJson;}/*** 角色查询实体*/public static class SYSUserRoleDto extends SYSUserRole {//工作组名称public String WorkGroupName;//当前工作组public String CurWorkGroupDR;}
}

前期的基础打好了就可以实现不错的效果,越写越简单了

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

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

相关文章

端点安全管理系统干什么用的 有哪些好用?

你听说过&#xff1a; 端点安全管理系统吗&#xff1f; 我们一起来了解一下啊 一、什么是端点安全管理系统&#xff1f; 端点安全管理系统&#xff08;Endpoint Security Management System&#xff09;是一种专门用于保护企业内部网络终端设备的综合性安全解决方案。 这些终…

全国省级金融发展水平数据集(2000-2022年)

01、数据简介 金融发展水平是一个国家或地区经济实力和国际竞争力的重要体现。它反映了金融体系的成熟程度和发展水平&#xff0c;是衡量一个国家或地区经济发展质量的重要指标。金融发展水平的提高&#xff0c;意味着金融体系能够更好地服务实体经济&#xff0c;推动经济增长…

Servlet(写一个Hello Worldt)【一】

文章目录 一、Servlet 目的 ----- 实现动态页面二、编写一个 Servlet 的Hello World2.1 创建项目2.2 处理文件夹2.3 引入依赖2.4 手动创建一些必要的目录/文件2.5 编写代码2.6 打包程序2.7 部署2.8 验证程序是否能正常工作 一、Servlet 目的 ----- 实现动态页面 静态页面 VS 动…

安卓免费抠图、AI绘图、修图软件——SnapEdit

一、前言 AI绘图原理主要基于深度学习和神经网络技术&#xff0c;通过训练数据集中的图像&#xff0c;从中学习并提取特征&#xff0c;进而生成新的图像。这一过程涉及到多种技术和模型&#xff0c;包括但不限于VAE&#xff08;变分自编码器&#xff09;、auto-encoder、GAN&a…

后端工程师——C++工程师如何准备面试?

相比 Java 语言方向,C++ 入门简单,精通难,找工作竞争压力更小,但 C++ 依然是近年来招聘的热门岗位之一。本文将从以下三个方面进行详细讲解,帮助你对 C++ 相关岗位的就业前景、岗位要求、学习路线等有更充分的了解。 C++工程师面试准备 上两篇文章对 C++ 工程师的招聘需求…

2024年世界排名TOP250医院榜单发布|医学访学/博后/联培博士参考

作为医学类的访问学者、博士后及联合培养博士们&#xff0c;都希望到世界知名医院进行临床研修交流及科研学习。2024年世界最佳医院排行榜的发布为申请者提供了可选目标&#xff0c;现知识人网小编整理刊出。 近日&#xff0c;美国《新闻周刊》&#xff08;Newsweek&#xff09…

To String的几个作用

To String的几个作用 一、Object类中toString的作用 1、在主方法中我们可以直接用toString输出对象其中的内容 2、我们需要直接输出对象中所属内容时&#xff0c;直接使用toString方法输出语句&#xff0c;输出内容不友好&#xff0c;不便于阅读 子类&#xff1a; public c…

Linux 进程管理快捷键 ctrl+z、ctrl+c、ctrl+\、ctrl+d介绍

在Linux系统中&#xff0c;可以使用一些特定的键盘快捷键来管理后台进程和控制终端的行为。下面是对这些快捷键的介绍&#xff1a; 1 CtrlZ&#xff08;挂起&#xff09;&#xff1a; 在终端中运行程序时&#xff0c;你可以使用CtrlZ来将其挂起&#xff0c;即将其移动到后台并…

Pytorch:张量的梯度计算

目录 一、自动微分简单介绍1、基本原理2、梯度计算过程3、示例&#xff1a;基于 PyTorch 的自动微分a.示例详解b.梯度计算过程c.可视化计算图 4、总结 二、为什么要计算损失&#xff0c;为何权重更新是对的&#xff1f;1、梯度下降数学原理2、梯度上升 三、在模型中使用自动微分…

【U+】U+智享版运维平台账号密码重置

【问题描述】 友加畅捷系列中的U智享版软件&#xff0c; 系统运维平台账号admin密码忘记了&#xff0c;无法登录。 【解决方法】 在软件的安装目录下&#xff0c;找到sysconfig_accounts文件&#xff0c;并删除。 【路径&#xff1a;X:\U系列软件\U智享版\WebSite\config\】 …

【算法基础实验】图论-UnionFind连通性检测之quick-union

Union-Find连通性检测之quick-union 理论基础 在图论和计算机科学中&#xff0c;Union-Find 或并查集是一种用于处理一组元素分成的多个不相交集合&#xff08;即连通分量&#xff09;的情况&#xff0c;并能快速回答这组元素中任意两个元素是否在同一集合中的问题。Union-Fi…

AI技术宝库:一键收藏全球最全面的人工智能资源网站

1、KKAI&#xff08;kk.zlrxjh.top&#xff09; R5AI是一种融合了星火大模型与文心大模型的知识增强型大语言模型&#xff0c;主要聚焦于自然语言处理&#xff08;NLP&#xff09;的技术开发。 该模型具有卓越的语义理解和文本生成能力&#xff0c;可以有效处理多种复杂的自然语…

python爬虫-----深入了解 requests 库下篇(第二十六天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

M-LAG的基本概念

如图所示&#xff0c;用户侧设备Switch&#xff08;可以是交换机或主机&#xff09;通过M-LAG机制与另外两台设备&#xff08;SwitchA和SwitchB&#xff09;进行跨设备链路聚合&#xff0c;共同组成一个双活系统。这样可以实现SwitchA和SwitchB共同进行流量转发的功能&#xff…

16(第十五章,数据管理成熟度评估)

目录 概述 数据管理成熟度等级 基本概念 评级等级以及特点 现有的DMMA框架 活动 方法 扩展 概述 数据管理成熟度等级 1) 0 级。无能力级。2) 1 级。初始级或临时级&#xff1a;成功取决于个人的能力。3) 2 级。可重复级&#xff1a;制定了最初级的流程规则。4) 3 级。…

【webrtc】m114自己实现的PrioritizedPacketQueue及优先级处理

G:\CDN\WEBRTC-DEV\libwebrtc_build\src\modules\pacing\prioritized_packet_queue.h跟m98不同 :webrtc】m98 RoundRobinPacketQueue的优先级处理,m114直接使用taskqueue顺序处理了。甚至自己实现了优先级队列感觉简化了实现,更为清晰 易读,但是去掉了码率低就优先的逻辑。1…

企业计算机服务器中了rmallox勒索病毒怎么办?Rmallox勒索病毒解密流程工具

在网络飞速发展的时代&#xff0c;企业离不开网络&#xff0c;网络为企业的生产运营提供了极大便利&#xff0c;加快了企业进步的步伐&#xff0c;依靠网络可以开展各项工作业务&#xff0c;通过网络数据整合&#xff0c;可以更方便企业办公。网络在为企业提供便利的同时也为企…

ESLint 、 e2e test 学习

Lint和Format的区别&#xff1a; Lint只会告诉你代码中的错误或者不符合规范的地方&#xff0c;而Format是用来对格式作调整的 HTML/tpl&#xff1a;HTMLLint CSS/SCSS&#xff1a;Stylelint JS/JSX&#xff1a;Eslint JSLint&#xff1a;古老&#xff0c;不能配置和扩展JSHin…

【C++类和对象】日期类的实现

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

Post请求中常见的Content-Type类型

Post请求中常见的Content-Type类型的结构 &#xff08;1&#xff09;application/x-www-form-urlencoded 这是浏览器原生的form表单类型&#xff0c;或者说是表单默认的类型。 下面是一个请求实例&#xff1a; 请求报文&#xff1a; 可以看得出&#xff0c;post将请求参数以k…