JRT失控处理打印和演示

基于JRT完备的脚本化和打印基础,基于JRT的业务可以轻松的实现想要的打效果,这次以质控图的失控处理打印和月报打印来分享基于JRT的打印业务实现。

演示视频链接

失控报告打印
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

失控处理打印的虚拟M

import JRT.Core.DataGrid.GridDto;
import JRT.Core.DataGrid.IGridChangePage;
import JRT.Core.Dto.HashParam;
import JRT.Core.Dto.OutValue;
import JRT.Core.Dto.PrintElement;
import JRT.Core.Util.Convert;
import JRT.Core.Util.PrintDrawProtocol;
import JRT.Model.Bussiness.Parameters;
import JRT.Model.Entity.*;
import JRTBLLBase.BaseHttpHandler;
import JRTBLLBase.Helper;import java.util.ArrayList;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;/*** 打印质控失控处理,实现打印失控处理报告单*/
public class QCPrintTrancation extends BaseHttpHandler implements IGridChangePage {/*** 打印元素*/private List<PrintElement> retList = new ArrayList<>();/*** 打印模板数据*/JRTPrintTemplateDto template = null;/*** 存打印的Data数据*/Hashtable<String, String> printDataMap = new Hashtable<>();/*** 画多个表格增加的Y*/private int AddGridY = 0;/*** 表格换页之前要执行的逻辑** @param gridKey* @param maxY*/public void PreChangePageDo(String gridKey, int maxY) {}/*** 表格换页之后要执行的逻辑** @param gridKey* @param maxY*/public void AfterChangePageDo(String gridKey, int maxY) {try {//画数据元素PrintData(template, retList, printDataMap);//画标签元素PrintLabel(template, retList);//画线元素PrintLine(template, retList);}catch (Exception ex){}}/*** 执行质控打印绘制逻辑** @param Param* @param Session* @param Output* @return*/public String QueryPrintData(Parameters Param, OutValue Session, OutValue Output) throws Exception {//质控结果主键String RowIDS=Param.P0;//查询模板数据template = GetOneTemplate(null, "QCLossControl");//控制纸张if(template.PaperLayout.equals("Landscape")){retList.add(PrintDrawProtocol.ControlPrinter(template.PaperCode, PrintDrawProtocol.PrintLayout.Landscape,"","",0,0));}else{retList.add(PrintDrawProtocol.ControlPrinter(template.PaperCode, PrintDrawProtocol.PrintLayout.Portrait,"","",0,0));}String [] rowIDArr=RowIDS.split(",");//循环打印for(String one:rowIDArr) {int QcResDR=Convert.ToInt32(one);QCTestResultTransaction transDto=EntityManager().GetByColVal(QCTestResultTransaction.class,"TestResultDR",QcResDR);int transDR=transDto.RowID;//构造DataMakeDataData(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);//转换成ListList<Object> gridData=Helper.Json2List(datasJson,HashMap.class);//构造DataMakeDataData(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.rhkb.cn/news/322281.html

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

相关文章

redis分片java实践、redis哨兵机制实现、redis集群搭建

redis分片java实践 linux安装redishttps://mp.csdn.net/mp_blog/creation/editor/134864302复制redis.conf配置文件成redis1.conf、redis2.conf、redis3.conf 修改redis的端口信息和存pid文件的路径。存pid文件的路径只要不同就行了&#xff0c;没什么特别要求。 指定配置文件…

Redis(主从复制搭建)

文章目录 1.主从复制示意图2.搭建一主多从1.搭建规划三台机器&#xff08;一主二从&#xff09;2.将两台从Redis服务都按照同样的方式配置&#xff08;可以理解为Redis初始化&#xff09;1.安装Redis1.yum安装gcc2.查看gcc版本3.将redis6.2.6上传到/opt目录下4.进入/opt目录下然…

论文阅读】 ICCV-2021-3D Local Convolutional Neural Networks for Gait Recognition

motivation :现有方法方法无法准确定位身体部位&#xff0c;不同的身体部位可以出现在同一个条纹(如手臂和躯干)&#xff0c;一个部分可以出现在不同帧(如手)的不同条纹上。其次&#xff0c;不同的身体部位具有不同的尺度&#xff0c;即使是不同帧中的同一部分也可以出现在不同…

Web前端三大主流框架是什么?

Web前端开发领域的三大主流框架分别是Angular、React和Vue.js。它们在Web开发领域中占据着重要的地位&#xff0c;各自拥有独特的特点和优势。 Angular Angular是一个由Google开发的前端框架&#xff0c;最初版本称为AngularJS&#xff0c;后来升级为Angular。它是一个完整的…

Apple强大功能:在新款 iPad Pro 和 iPad Air 中释放 M4 芯片潜力

Apple 的最新强大功能&#xff1a;在新款 iPad Pro 和 iPad Air 中释放 M4 芯片的潜力 概述 Apple 推出配备强大 M4 芯片的最新 iPad Pro 和 iPad Air 型号&#xff0c;再次突破创新界限。新一代 iPad 有望彻底改变我们的工作、创造和娱乐方式。凭借无与伦比的处理能力、令人惊…

【Kolmogorov-Arnold网络 替代多层感知机MLPs】KAN: Kolmogorov-Arnold Networks

KAN: Kolmogorov-Arnold Networks 论文地址 代码地址 知乎上的讨论&#xff08;看一下评论区更正&#xff09; Abstract Inspired by the Kolmogorov-Arnold representation theorem, we propose Kolmogorov-Arnold Networks (KANs) as promising alternatives to Multi-Layer…

区块链 | NFT 相关论文:Preventing Content Cloning in NFT Collections(三)

&#x1f436;原文&#xff1a; Preventing Content Cloning in NFT Collections &#x1f436;写在前面&#xff1a; 这是一篇 2023 年的 CCF-C 类&#xff0c;本博客只记录其中提出的方法。 F C o l l N F T \mathbf{F_{CollNFT}} FCollNFT​ and Blockchains with Native S…

损失函数详解

1.损失函数 是一种衡量模型与数据吻合程度的算法。损失函数测量实际测量值和预测值之间差距的一种方式。损失函数的值越高预测就越错误&#xff0c;损失函数值越低则预测越接近真实值。对每个单独的观测(数据点)计算损失函数。将所有损失函数&#xff08;loss function&#xf…

树莓派4b测量PM2.5

1.GP2Y1010AU0F粉尘传感器连接图 2. GP2Y1010AU0F工作原理 工作原理 传感器中心有个洞可以让空气自由流过,定向发射LED光,通过检测经过空气中灰尘折射过后的光线来判断灰尘的含量。 3.源代码 main.py # coding=UTF-8 import RPi.GPIO as GPIO from ADC import ADS1015…

神经网络案例实战

&#x1f50e;我们通过一个案例详细使用PyTorch实战 &#xff0c;案例背景&#xff1a;你创办了一家手机公司&#xff0c;不知道如何估算手机产品的价格。为了解决这个问题&#xff0c;收集了多家公司的手机销售数据&#xff1a;这些数据维度可以包括RAM、存储容量、屏幕尺寸、…

在Mars3d实现cesium的ImageryLayer自定义瓦片的层级与原点

需要自定义瓦片层级和原点&#xff0c;所以需要自己写第三方图层&#xff0c;但是之前写的很多方法&#xff0c;图层控制和显隐以及透明度&#xff0c;需要跟之前的交互一直&#xff0c;改动量太大的话不划算&#xff0c;所以直接看Mars3d的layer基类&#xff0c;把重写的image…

字符串函数、内存函数——补充

目录 前言 1、strchr函数 1-1 函数介绍 1-1-1 函数功能 1-1-2 函数原型 1-1-3 函数参数 1-1-4 所属库 1-1-5 函数返回值 1-2 函数简单使用 1-3 函数使用场景 1-4 函数的使用总结 1-4-1 注意事项 2、strrchr函数 2-1 函数介绍 2-1-1 函数功能 2-1-2 函数原型 2…

BACnet到OPC UA的楼宇自动化系统与生产执行系统(MES)整合

在智能制造的浪潮下&#xff0c;一家位于深圳的精密电子制造企业面临着前所未有的挑战&#xff1a;如何高效地将楼宇自动化系统与生产执行系统&#xff08;MES&#xff09;整合&#xff0c;实现能源管理与生产流程的精细化控制。这家企业的楼宇控制系统使用的是BACnet协议&…

.OpenNJet应用引擎实践——从 0-1 体验感受

目录 一. &#x1f981; 写在前面二. &#x1f981; 安装使用2.1 安装环境2.2 配置yum源2.3 安装软件包2.4 编译代码2.5 启动 三. &#x1f981; 使用效果3.1 编辑配置文件3.2 编辑 HTML 代码 四. &#x1f981; 使用感受 一. &#x1f981; 写在前面 现在互联网体系越来越往云…

【Docker学习】docker run的端口映射-p和-P选项

docker run的端口映射选项分为-p&#xff08;小写&#xff0c;全称--publish&#xff09;&#xff0c;-P&#xff08;大写&#xff0c;全称--publish-all&#xff09;&#xff0c;之前认为只有改变容器发布给宿主机的默认端口号才会进行-p的设置&#xff0c;而不改变默认端口号…

MATLAB 基于规则格网的点云抽稀方法(自定义实现)(65)

MATLAB 基于规则格网的点云抽稀方法(自定义实现)(65) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 海量点云的处理,需要提前进行抽稀预处理,相比MATLAB预先给出的抽稀方法,这里提供一种基于规则格网的自定义抽稀方法,步骤清晰,便于理解抽稀内涵, 主要涉及到使…

为什么你创业总是失败?2024普通人如何创业?2024创业赛道!2024创业新风口!2024创业方向!2024普通人的机会!

为什么你做项目老是不赚钱&#xff0c;是你不够努力吗&#xff1f;是你运气不好吗&#xff1f; 如果都不是&#xff01;那一定是你的思维逻辑出了问题&#xff01; 先想一想你以前做的项目&#xff0c;有没有哪个符合以下条件&#xff1a;对客户有价值、寻找客源成本在可接受…

华为eNSP综合实验-网络地址转换

实验完成之后,在AR1的g0/0/1接口抓包,查看地址转换 实现私网pc访问公网pc 实验命令展示 SW1: vlan batch 12 #创建vlan interface e0/0/1 #进入接口配置vlan端口 port link-type access port default vlan 12 q interface e0/0/2 #进入接口配置vlan端口 port link-type ac…

Linux高级学习(前置 在vmware安装centos7.4)

【小白入门 通俗易懂】2021韩顺平 一周学会Linux 此文章包含第006p-第p007的内容 操作 在安装好的vmware下进行安装 这里使用的是vmware15&#xff08;win10下&#xff09;&#xff0c;win11可能无法使用15&#xff08;有几率蓝屏&#xff09;&#xff0c;换成16就行了 用迅雷…

(二刷)代码随想录第1天|704. 二分查找 27. 移除元素

704. 二分查找 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode&#xff1a;704. 二分查找_哔哩哔哩_bilibili 给定一个 n 个元素有序的&#xff08;升序&#xff09…