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.mzph.cn/diannao/8587.shtml

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

相关文章

Konga域名配置多个路由

云原生API网关-Kong部署与konga基本使用 Nginx server{listen 443 ssl;location / {proxy_pass http://127.0.0.1:8100;}location /openApi {proxy_pass http://172.31.233.35:7100/openApi;} } Kong {"id": "f880b21c-f7e0-43d7-a2a9-221fe86d9231&q…

通过AOP实现项目中业务服务降级功能

最近项目中需要增强系统的可靠性&#xff0c;比如某远程服务宕机或者网络抖动引起服务不可用&#xff0c;需要从本地或者其它地方获取业务数据&#xff0c;保证业务的连续稳定性等等。这里简单记录下业务实现&#xff0c;主要我们项目中调用远程接口失败时&#xff0c;需要从本…

Nest.js中使用任务调度

java中的xxl在nestJs中是有内置的任务调度nestjs/schedule npm install --save nestjs/schedule 在model中引入使用 在service中直接使用就行 具体间隔多久看官方配置 Task Scheduling | NestJS 中文文档 | NestJS 中文网

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

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

小微公司可用的开源ERP系统

项目介绍 华夏ERP是基于SpringBoot框架和SaaS模式的企业资源规划&#xff08;ERP&#xff09;软件&#xff0c;旨在为中小企业提供开源且易用的ERP解决方案。它专注于提供进销存、财务和生产功能&#xff0c;涵盖了零售管理、采购管理、销售管理、仓库管理、财务管理、报表查询…

VALSE 2024 Workshop报告分享┆ 大规模自动驾驶仿真系统研究

视觉与学习青年学者研讨会&#xff08;VALSE&#xff09;旨在为从事计算机视觉、图像处理、模式识别与机器学习研究的中国青年学者提供一个广泛而深入的学术交流平台。该平台旨在促进国内青年学者的思想交流和学术合作&#xff0c;以期在相关领域做出显著的学术贡献&#xff0c…

【三】DRF序列化进阶

序列化器的定义与使用 多表关联序列化 【1】准备工作 # settings.py DATABASES {default: {# 数据库引擎选择使用MySQLENGINE: django.db.backends.mysql,# 指定数据库名字&#xff0c;需提前创建NAME: books,# 指定数据库用户名USER: root,# 指定数据库用户密码PASSWORD: …

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

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

时序图详解

1.这是iic总线在回应时候的时序图&#xff0c;data in代表eeprom收到数据&#xff0c;回stm32的ack&#xff0c;数据回应&#xff0c;data out代表stm32收到eeprom的消息&#xff0c;数据输出ack回应 2.交叉线 代表在这一次输出高电平&#xff0c;或者在这一次也可能输出低电…

【bash】笔记

在Shell脚本中&#xff0c;-e 是一个测试运算符&#xff0c;用于检查给定的文件或目录是否存在。 | 是通道符&#xff0c;会把前面的输出给后面作为输入。 sudo tee命令在这里用于同时更新文件和在终端显示输出&#xff08;尽管 > /dev/null 将标准输出重定向到黑洞&…

ai智能答题助手,这四款软件让知识触手可及!

在数字化时代&#xff0c;知识的获取变得前所未有的便捷。随着人工智能技术的不断发展&#xff0c;AI智能答题助手应运而生&#xff0c;成为了人们学习、工作和生活中的得力助手。今天&#xff0c;就为大家介绍四款备受欢迎的AI智能答题助手软件&#xff0c;让你感受知识的魅力…

俄罗斯国际消费类电子电器展ICEE:人潮如织,盛况空前

近日&#xff0c;备受全球瞩目的俄罗斯国际消费类电子电器展ICEE在莫斯科盛大落幕。本次展会为期四天&#xff0c;真的攒足了眼球&#xff0c;不仅俄罗斯这边的很多媒体和自媒体有报道&#xff0c;展会第一天&#xff0c;很多参展商通过短视频平台将展会的盛况传到了国内&#…

libcity/model/trajectory_loc_prediction/DeepMove.py

1 DeepMove 1.1 构造函数 1.2 初始化权重 1.3 forward 1.4 predict def predict(self, batch):score self.forward(batch)if self.evaluate_method sample:# build pos_neg_inedxpos_neg_index torch.cat((batch[target].unsqueeze(1), batch[neg_loc]), dim1)score tor…

在思科和华为上实现两个主机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…

深入了解 NumPy:深度学习中的数学运算利器

文章目录 1. 导入NumPy2. 创建NumPy数组3. 数组的算术运算4. N维数组4.1 创建和操作多维数组4.2 高维数组 5. NumPy的广播功能5.1 基本广播示例5.2 更复杂的广播示例 6. 访问数组元素6.1 基于索引的访问6.2 遍历数组6.3 基于条件的访问6.4 高级索引6.5 性能考虑 在深度学习和数…

【idea-sprongboot项目】在linux服务器上纯远程开发方式

继上一篇博客【idea-sprongboot项目】SSH连接云服务器进行远程开发-CSDN博客 目录 五、远程开发方式 2&#xff09;纯远程开发方式 步骤 五、远程开发方式 2&#xff09;纯远程开发方式 实现原理&#xff0c; 步骤 &#xff08;1&#xff09;首先&#xff0c;关闭当前正在…

springMVC入门学习

目录 1、 什么是springmvc 2、springmvc工作流程 3、 springmvc快速入门&#xff08;XML版本&#xff09; 4、加载自定义目录下的springmvc.xml配置文件 5、 解析器InternalResourceViewResolver 6、 映射器BeanNameUrlHandlerMapping 7、 适配器SimpleControllerHandle…

el-select 点击按钮滚动到选择框顶部

主要代码是在visibleChange 在这个 popper 里面找到 .el-select-dropdown__list let popper ref.$refs.popper const ref this.$refs.select let dom popper.querySelector(.el-select-dropdown__list) setTimeout(() > { dom.scrollIntoView() }, 800) <templat…

CSF(Cloth Simulation Filter)点云地面点滤波

CSF[Cloth Simulation Filter]点云地面点滤波 0.引言1.布料模拟2.修改布料模拟3.布料滤波4.CSF总体过程 0.引言 code 基本原理&#xff1a;原始点云被倒置过来&#xff0c;然后⼀块布从上⽅掉落到倒置的表⾯。通过分析布的节点与相应的LIDAR点之间的相互作⽤&#xff0c;可以确…

【中级软件设计师】上午题15-计算机网络

上午题15-计算机网络 1 网络设备2 协议簇3 TCP和UDP4 SMTP和POP35 ARP和RARP6 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff09;7 URL8 浏览器9 IP地址和子网划分10 IPv611 Windows命令12 路由器 1 网络设备 物理层设备&#xff1a;中继器、集线器&#xff0…