当前位置: 首页 > news >正文

JRT1.7发布

JRT1.7连仪器在线演示视频

JRT1.5实现质控主体、1.6基本完成质控;本次版本推进到1.7,1.7集菜单权限、登录、打印导出客户端、初始化、质控、Linux客户端、仪器连接和监控体系各种功能大全,上十年写系统用到的都全了。

这次直接挑战检验最难类型的仪器连接(西比亚蛋白电泳、固定电泳、尿蛋白电泳),同时实现Linux上连接和TCP连接,充分验证仪器连接的可靠性。西比亚的难点有数据解析、有绘图。借助仪器连接同时展示了JRT业务脚本化的在应对修改的优越性。

设计理想在JRT下一一实现。

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

西比亚数据

P0001                                                      000                            00000g/dl                                                                                                                                                          TS 2201202410β2微球蛋白    溶菌酶       视黄醇结合蛋白   游离轻链      α1微球蛋白    游离轻链二聚体   白蛋白       转铁蛋白      IgG&IgA   结合珠蛋白     010.8009.2006.8005.5004.9028.1007.3004.9011.0011.500000000000000000000000000000000000000000000000000                                        000.0000.0000.0000.000000000000000000000000.0001.00                                                                                                                                                                                                                                      000300A0100000000000000000000000000000000008005000800A500CC00B6007C004200290016000E000B000C000C000C000C000B000900070004000400BF01E2034D03EE03E8038202BF01F3C1210149021A033B036702B701DE0161416F014F012300C500830055004700430039002B001A0011000B000800050003000180000000000100040007000B000E00110028007C00E30134011100F100F201360153011500BA00620048005D00AD0105012C00FF00AD00610036001E0010000A00060004000300050007000900070004800100010002000300030002000100010003000500060007004100E801AE023201DB014900BC00B800D800F400CD0090004E002F001BC011003E008D00ED00FE00CE0081004A00310024003B006A00A400AE008D005A003500220016001B004E009100CD00BB008A004C002D001D001500120011001300140012800E00120040011B0243037B04BD075F0A3A0C040A1806FD03B70251018C013D00EA00A0005A003780240039009E015C021E02BC02D102B80212017500CA00760044002A001B0011000A00050002800200020006004C00D6017701B6016B012301040134011B00D90080004700290018000D000700038002000200040006001700380066009900B100B7008E00650072015A028B039F03340257013300BA0067003C00210013000D004A00BF014D0186014600DB0073004500250015000C0008000500030001800100020004000500050003000200040009000D000D000A000800080008000B0034007200B800BA00940059004C006D00A700FE013D0171014700F70091004F002D0019000F000A00070056016702C003CB03670279015500C700088002|**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

仪器接口代码片段
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

仪器控制界面后台

import JRT.Core.MultiPlatform.JRTContext;
import JRT.Core.Socket.MachManager;
import JRT.Core.Util.Convert;
import JRT.Model.Entity.BTMIMachineParameter;
import JRT.Model.Entity.BTWorkGroup;
import JRT.Model.Entity.BTWorkGroupMachine;
import JRTBLLBase.BaseHttpHandler;
import JRTBLLBase.Helper;import java.util.ArrayList;
import java.util.List;/*** 仪器控制界面的后台逻辑*/
public class ashMachineControl extends BaseHttpHandler {/*** 查询仪器* @return* @throws Exception*/public String QueryMachine() throws Exception{String FindAll = Helper.ValidParam(JRTContext.GetRequest(Request, "FindAll"), "");//考虑仪器不多,直接查询全部List<BTMIMachineParameterDto>  allMachine=EntityManager().FindAllSimple(BTMIMachineParameterDto.class,null);List<BTMIMachineParameterDto> retList=new ArrayList<>();if(allMachine!=null&&allMachine.size()>0){for(BTMIMachineParameterDto one : allMachine){//查当前工作组的仪器if(FindAll.equals("0")){BTWorkGroupMachine wgm=EntityManager().DolerGet(BTWorkGroupMachine.class,one.WorkGroupMachineDR);BTWorkGroup wg=EntityManager().DolerGet(BTWorkGroup.class,wgm.WorkGroupDR);if(wg.RowID!= Convert.ToInt32(UserLogin().GroupID)){continue;}}//有端口的才是TCP仪器if(one.PortNo!=null&&!one.PortNo.isEmpty()){if(one.IPAddress!=null&&!one.IPAddress.isEmpty()){one.TcpType="客户端";}else{one.TcpType="服务端";}BTWorkGroupMachine wgm=EntityManager().DolerGet(BTWorkGroupMachine.class,one.WorkGroupMachineDR);one.WorkGroupMachineName=wgm.CName;retList.add(one);}}}return Helper.Object2Json(retList);}/*** 启动仪器* @return*/public String StartMachine() throws Exception{int MachineDR = Helper.ValidParam(JRTContext.GetRequest(Request, "MachineDR"), 0);BTMIMachineParameter machDto=EntityManager().DolerGet(BTMIMachineParameter.class,MachineDR);String err=(String) Helper.GetBllMethodData(machDto.IFProgram,"Start",MachineDR);if(!err.isEmpty()){machDto.IsStart=false;machDto.OpMessage="启动失败";return Helper.Error(err);}else{machDto.IsStart=true;machDto.OpMessage="启动成功:"+Helper.GetNowDateStr()+" "+Helper.GetNowTimeStr();}EntityManager().Update(machDto,ErrRet(),null);return Helper.Success();}/*** 停止仪器* @return*/public String StopMachine() throws Exception{int MachineDR = Helper.ValidParam(JRTContext.GetRequest(Request, "MachineDR"), 0);BTMIMachineParameter machDto=EntityManager().DolerGet(BTMIMachineParameter.class,MachineDR);String err=MachManager.StopMachSocketByKey(String.valueOf(MachineDR));if(!err.isEmpty()){machDto.OpMessage="停止失败";return Helper.Error(err);}else{machDto.IsStart=false;machDto.OpMessage="停止成功:"+Helper.GetNowDateStr()+" "+Helper.GetNowTimeStr();}EntityManager().Update(machDto,ErrRet(),null);return Helper.Success();}/*** 返回实体*/public static class BTMIMachineParameterDto extends BTMIMachineParameter{/*** TCP连接类型*/public String TcpType="";/*** 工作小组*/public String WorkGroupMachineName="";}
}

仪器控制界面前端

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>仪器控制</title><link rel="shortcut icon" href="../../resource/common/images/favicon.ico" /><script src="../../resource/common/js/JRTBSBase.js" type="text/javascript"></script><link href="../../resource/plug/spectrum/css/spectrum.css" rel="stylesheet" type="text/css" /><script src="../../resource/plug/spectrum/js/spectrum.js" type="text/javascript"></script><script language="javascript" type="text/javascript">SYSPageCommonInfo.Init();var BasePath = '';var ResourcePath = '';var WebServicAddress = SYSPageCommonInfo.Data.WebServicAddress;var UserID = SYSPageCommonInfo.Data.Sesssion.UserID;var GroupID = SYSPageCommonInfo.Data.Sesssion.GroupID;var SessionStr = SYSPageCommonInfo.Data.SessionStr;</script><script type="text/javascript">//全局变量var me = {actionUrl: '../ashx/ashMachineControl.ashx'};//jquery入口$(function () {//查询范围$('#cmbFindAll').combobox({data:[{RowID:"0",CName:"当前工作组"},{RowID:"1",CName:"全部仪器"}],valueField:'RowID',textField:'CName'});$('#cmbFindAll').combobox("setValue","0");//查询$("#btnSelect").click(function () {SelectMachine();});//启动仪器$("#btnStart").click(function () {var selectRow=$('#dgData').datagrid("getSelected");if(selectRow==null){$.messager.alert('提示','请选择一个仪器');return;}$.ajax({type: "POST",dataType: "json", //text, json, xmlcache: false, //async: true, //为true时,异步,不等待后台返回值,为false时强制等待;-asirurl: me.actionUrl + '?Method=StartMachine',data:{MachineDR:selectRow.RowID},success: function (result, status) {SelectMachine();}});});//停止仪器$("#btnStop").click(function () {var selectRow=$('#dgData').datagrid("getSelected");if(selectRow==null){$.messager.alert('提示','请选择一个仪器');return;}$.ajax({type: "POST",dataType: "json", //text, json, xmlcache: false, //async: true, //为true时,异步,不等待后台返回值,为false时强制等待;-asirurl: me.actionUrl + '?Method=StopMachine',data:{MachineDR:selectRow.RowID},success: function (result, status) {SelectMachine();}});});//仪器$('#dgData').datagrid({singleSelect:true,fitColumns:true,columns:[[{ field: 'RowID', title: TranslateDataMTHD('RowID', '主键', '') , width: 40, sortable: true },{ field: 'Code', title: TranslateDataMTHD('Code', '代码', '') , width: 60, sortable: true },{ field: 'CName', title: TranslateDataMTHD('CName', '名称', '') , width: 150, sortable: true },{ field: 'WorkGroupMachineName', title: TranslateDataMTHD('WorkGroupMachineName', '工作小组', '') , width: 150, sortable: true },{ field: 'IPAddress', title: TranslateDataMTHD('IPAddress', 'IP地址', '') , width: 120, sortable: true },{ field: 'PortNo', title: TranslateDataMTHD('PortNo', '端口号', '') , width: 60, sortable: true },{ field: 'TcpType', title: TranslateDataMTHD('TcpType', 'Tcp类型', '') , width: 60, sortable: true },{ field: 'IFProgram', title: TranslateDataMTHD('IFProgram', '接口程序', '') , width: 180, sortable: true },{ field: 'Sequence', title: TranslateDataMTHD('Sequence', '序号', '') , width: 50, sortable: true },{ field: 'Active', title: TranslateDataMTHD('Active', '状态', '') , width: 50, sortable: true },{ field: 'IsStart', title: TranslateDataMTHD('IsStart', '启动', '') , width: 50, sortable: true,formatter: function (value, rowData, rowIndex) {return rowData.IsStart == true ? '<img src="../../resource/common/images/active.png" alt="激活" title="激活"/>' : '<img src="../../resource/common/images/cross.png" alt="未激活" title="未激活"/>';}},{ field: 'OpMessage', title: TranslateDataMTHD('OpMessage', '操作信息', '') , width: 150, sortable: true },{ field: 'ComPort', title: TranslateDataMTHD('ComPort', '串口号', '') , width: 60, sortable: true },{ field: 'BaudRate', title: TranslateDataMTHD('BaudRate', '波特率', '') , width: 60, sortable: true },{ field: 'DataBits', title: TranslateDataMTHD('DataBits', '数据位', '') , width: 60, sortable: true },{ field: 'StopBits', title: TranslateDataMTHD('StopBits', '停止位', '') , width: 60, sortable: true },{ field: 'Parity', title: TranslateDataMTHD('Parity', '校验位', '') , width: 60, sortable: true },]]});//查询仪器function SelectMachine() {$.ajax({type: "POST",dataType: "json", //text, json, xmlcache: false, //async: true, //为true时,异步,不等待后台返回值,为false时强制等待;-asirurl: me.actionUrl + '?Method=QueryMachine',data:{FindAll:$('#cmbFindAll').combobox("getValue")},success: function (result, status) {//工作组$("#dgData").datagrid("loadData", result);}});}SelectMachine();});</script>
</head>
<body>
<div class="easyui-layout" fit="true"><div data-options="region:'north',title:'',split:true" style="height:48px;padding: 5px 0 0 10px;"><span>查询范围</span><span class="jrtsp6"></span><input id="cmbFindAll" style="width: 120px;"/><span class="jrtsp"></span><a id="btnSelect" href="#" class="easyui-linkbutton">查询</a><a id="btnStart" href="#" class="easyui-linkbutton">启动</a><a id="btnStop" href="#" class="easyui-linkbutton">停止</a></div><div data-options="region:'center',title:''" style="border: none;"><table id="dgData" fit="true"></table></div>
</div>
</body>
</html>

仪器数据监控界面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><title>仪器数据监控</title><link rel="shortcut icon" href="../../resource/common/images/favicon.ico" /><script src="../../resource/common/js/JRTBSBase.js" type="text/javascript"></script><link href="../../resource/plug/spectrum/css/spectrum.css" rel="stylesheet" type="text/css" /><script src="../../resource/plug/spectrum/js/spectrum.js" type="text/javascript"></script><script language="javascript" type="text/javascript">SYSPageCommonInfo.Init();var BasePath = '';var ResourcePath = '';var WebServicAddress = SYSPageCommonInfo.Data.WebServicAddress;var UserID = SYSPageCommonInfo.Data.Sesssion.UserID;var GroupID = SYSPageCommonInfo.Data.Sesssion.GroupID;var SessionStr = SYSPageCommonInfo.Data.SessionStr;</script><script type="text/javascript">//全局变量var me = {actionUrl: '../ashx/ashMachineDataMonitor.ashx'};//jquery入口$(function () {//查询$("#btnSelect").click(function () {var MachineDR=$("#cmbMachine").combogrid("getValue");if(MachineDR==null||MachineDR==""){$.messager.alert('提示','请选择一个仪器');return;}$.ajax({type: "POST",dataType: "json", //text, json, xmlcache: false, //async: true, //为true时,异步,不等待后台返回值,为false时强制等待;-asirurl: me.actionUrl + '?Method=QueryTraceData&MachineDR='+MachineDR,success: function (result, status) {$('#dgData').datagrid("loadData",result);}});});//清空$("#btnClear").click(function () {var MachineDR=$("#cmbMachine").combogrid("getValue");if(MachineDR==null||MachineDR==""){$.messager.alert('提示','请选择一个仪器');return;}$.ajax({type: "POST",dataType: "json", //text, json, xmlcache: false, //async: true, //为true时,异步,不等待后台返回值,为false时强制等待;-asirurl: me.actionUrl + '?Method=ClearTraceData&MachineDR='+MachineDR,success: function (result, status) {//对数据进行筛选,是后台抛的信息的话,就提示,以及决定是否继续if (!FilterBackData(result)) {return;}if (result.IsOk) {$('#dgData').datagrid("loadData",[]);}}});});//查看传输$("#btnSelectTrans").click(function () {var MachineDR=$("#cmbMachine").combogrid("getValue");if(MachineDR==null||MachineDR==""){$.messager.alert('提示','请选择一个仪器');return;}showwin("#winCommon", TranslateDataMTHD('Machine Extract', '查看传输数据', ""), SYSSessionURL("frmRPMachineExtract.html?MachineID=" + MachineDR), $(document).width() - 130, 690, true, "10px");});//查看图片$("#btnSelectImage").click(function () {var MachineDR=$("#cmbMachine").combogrid("getValue");if(MachineDR==null||MachineDR==""){$.messager.alert('提示','请选择一个仪器');return;}showwin("#winCommon", TranslateDataMTHD('Machine Image', '仪器图片', ""), SYSSessionURL("frmRPMachineImage.html?MachineID=" + MachineDR), $(document).width() - 130, 690, true, "10px");});//仪器结果$("#btnMachineRes").click(function () {var MachineDR=$("#cmbMachine").combogrid("getValue");if(MachineDR==null||MachineDR==""){$.messager.alert('提示','请选择一个仪器');return;}showwin("#winCommon", TranslateDataMTHD('Machine Result', '仪器结果', ""), SYSSessionURL("frmRPMachineResult.html?MachineID=" + MachineDR), $(document).width() - 130, 690, true, "10px");});//工作组$("#cmbWG").combogrid({width: 160,idField: 'WorkGroupDR',textField: 'WorkGroupName',method: 'get',editable: false,columns:[[{field:'WorkGroupName',title:'名称',width:140}]],onSelect: function (date) {me.cmbMach.combobox("setValue","")QueryMachData();}});$("#cmbWG").combogrid("showSelectWin");//仪器$("#cmbMachine").combogrid({width: 160,panelWidth:260,idField: 'RowID',textField: 'CName',method: 'get',editable: true,columns:[[{field:'RowID',title:'主键',width:40},{field:'Code',title:'代码',width:60},{field:'CName',title:'名称',width:140}]],onSelect: function (data) {}});$("#cmbMachine").combogrid("showSelectWin");//请求工作组数据,并设置默认选项$.ajax({type: "POST",dataType: "json", //text, json, xmlcache: false, //async: true, //为true时,异步,不等待后台返回值,为false时强制等待;-asirurl: me.actionUrl + '?Method=QueryWorkGroupData',success: function (result, status) {//工作组$("#cmbWG").combogrid("grid").datagrid("loadData", result);}});//查询仪器数据function QueryMachData(){$.ajax({type: "POST",dataType: "json", //text, json, xmlcache: false, //async: true, //为true时,异步,不等待后台返回值,为false时强制等待;-asirurl: me.actionUrl + '?Method=QryMachineParameter&WorkGroupDR='+$("#cmbWG").combogrid("getValue"),success: function (result, status) {//仪器$("#cmbMachine").combogrid("grid").datagrid("loadData", result);}});}QueryMachData();$('#dgData').datagrid({fitColumns:true,columns:[[{field:'Seq',title:'序号',width:50,fixed:true},{field:'Data',title:'日志',width:100}]]});});</script>
</head>
<body>
<div class="easyui-layout" fit="true"><div data-options="region:'north',title:'',split:true" style="height:48px;padding: 5px 0 0 10px;"><span>工作组</span><span class="jrtsp6"></span><input id="cmbWG" style="width: 120px;"/><span class="jrtsp"></span><span>仪器</span><input id="cmbMachine" style="width:120px;"/><span class="jrtsp6"></span><a id="btnSelect" href="#" class="easyui-linkbutton">查询</a><a id="btnClear" href="#" class="easyui-linkbutton">清空</a><a id="btnSelectTrans" href="#" class="easyui-linkbutton">查看传输</a><a id="btnSelectImage" href="#" class="easyui-linkbutton">查看图片</a><a id="btnMachineRes" href="#" class="easyui-linkbutton">仪器结果</a></div><div data-options="region:'center',title:''" style="border: none;"><table id="dgData" fit="true"></table></div><div id="winCommon"></div>
</div>
</body>
</html>

仪器数据监控后台

import JRT.Core.Debug.TraceManager;
import JRT.Core.Debug.TraceQueue;
import JRT.Core.MultiPlatform.JRTContext;
import JRT.Core.Util.Convert;
import JRT.Model.Entity.BTMIMachineParameter;
import JRT.Model.Entity.BTWorkGroup;
import JRT.Model.Entity.BTWorkGroupMachine;
import JRT.Model.Entity.SYSUserRole;
import JRTBLLBase.BaseHttpHandler;
import JRTBLLBase.Helper;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;public class ashMachineDataMonitor extends BaseHttpHandler {/*** 查询工作组数据** @return*/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<BTMIMachineParameter> retList = new ArrayList<>();String [] arr=UserLogin().SessionStr.split("\\^");String hospitalDR=arr[4];//查询工作小组下的所有仪器List<BTMIMachineParameter> machList = EntityManager().FindByColVal(BTMIMachineParameter.class, "HospitalDR", Convert.ToInt32(hospitalDR));for (BTMIMachineParameter mi : machList) {BTWorkGroupMachine wgm=EntityManager().DolerGet(BTWorkGroupMachine.class,mi.WorkGroupMachineDR);BTWorkGroup wg=EntityManager().DolerGet(BTWorkGroup.class,wgm.WorkGroupDR);if(WorkGroupDR>0&&wg.RowID!=WorkGroupDR){continue;}retList.add(mi);}return Helper.Object2Json(retList);}/*** 清空跟踪日志* @return* @throws Exception*/public String ClearTraceData() throws Exception {String MachineDR = Helper.ValidParam(JRTContext.GetRequest(Request, "MachineDR"), "");TraceQueue trace = TraceManager.GetTraceHandler(MachineDR, -1);trace.Clear();return Helper.Success();}/*** 查询日志数据* @return*/public String QueryTraceData() throws Exception{String MachineDR = Helper.ValidParam(JRTContext.GetRequest(Request, "MachineDR"), "");TraceQueue trace = TraceManager.GetTraceHandler(MachineDR, -1);List<String> logList=trace.GetTraceData();List<HashMap> retList=new ArrayList<>();if(logList!=null&&logList.size()>0){int Seq=0;for(String one:logList){Seq++;HashMap hs=new HashMap();hs.put("Data",one);hs.put("Seq",Seq);retList.add(hs);}}return Helper.Object2Json(retList);}/*** 角色查询实体*/public static class SYSUserRoleDto extends SYSUserRole {//工作组名称public String WorkGroupName="";//当前工作组public String CurWorkGroupDR="";}
}

TCP仪器接口代码

import JRT.Core.Dto.OutValue;
import JRT.Core.Socket.IMachDealData;
import JRT.Core.Socket.MachSocketBase;
import JRT.Core.Util.Convert;
import JRT.Model.Bussiness.Parameters;
import JRT.Model.Entity.BTMIMachineParameter;
import JRTBLLBase.BaseHttpHandlerMachine;
import JRTBLLBase.Helper;import java.io.PrintWriter;
import java.net.Socket;/*** 南比亚TCP仪器接口*/
public class miNanBia extends BaseHttpHandlerMachine implements IMachDealData {/*** 启动仪器控制* @param mi 仪器* @return 空或失败原因*/public String Start(int mi){try {BTMIMachineParameter machDto = EntityManager().DolerGet(BTMIMachineParameter.class, mi);MachSocketBase base=JRT.Core.Socket.MachManager.GetMachSocketBase(machDto.IPAddress, Convert.ToInt32(machDto.PortNo),Long.valueOf(5000),this,"GBK",String.valueOf(mi));}catch (Exception ex){Trace(String.valueOf(mi),Helper.GetExceptionStr(ex),"H->M");return Helper.GetExceptionStr(ex);}return "";}/*** 处理上传定时器接口* @param sender Socket对象,用来发送比特用* @param writer 用来发布初始化指定的字符用* @param mi 仪器主键*/public void DealUpTimer(Socket sender, PrintWriter writer,String mi){try {if(writer!=null) {String sendStr = "H->M:我主动定时给你推送的数据</br>";//返回数据writer.print(sendStr);writer.flush();Trace(mi, sendStr, "H->M");}}catch (Exception ex){Trace(mi,Helper.GetExceptionStr(ex),"H->M");}}/*** 处理数据接收* @param data 公共层处理成字符串的数据* @param buf 没处理的比特数组* @param sender Socket对象,用来发送比特用* @param writer 用来发布初始化指定的字符用* @param mi 仪器主键*/public void DealReceive(String data, byte[] buf, Socket sender, PrintWriter writer,String mi){try {Parameters para = new Parameters();para.P0 = mi;para.P1 = data;para.P2 = "";para.P3 = "";para.P4 = "";OutValue session = new OutValue();OutValue outPut = new OutValue();writer.print("ACK");writer.flush();Trace(mi,"ACK","H->M");//调用处理文件的逻辑String ret=(String)Helper.GetBllMethodData("mi.miSebia", "SaveData", para, session, outPut);Trace(mi,ret,"返回");}catch (Exception ex){Trace(mi,Helper.GetExceptionStr(ex),"M->H");}}
}

解落三秋叶
能开二月花
过江千尺浪
入竹万竿斜

为了梦想十年如一日的推进进度

2024-05-26 小乌鱼

相关文章:

JRT1.7发布

JRT1.7连仪器在线演示视频 JRT1.5实现质控主体、1.6基本完成质控&#xff1b;本次版本推进到1.7&#xff0c;1.7集菜单权限、登录、打印导出客户端、初始化、质控、Linux客户端、仪器连接和监控体系各种功能大全&#xff0c;上十年写系统用到的都全了。 这次直接挑战检验最难…...

Python错误集锦:xlwt写入表格时提示exception-unexpected-data-type-class-bytes

原文链接&#xff1a;http://www.juzicode.com/python-error-exception-unexpected-data-type-class-bytes 错误提示&#xff1a; #juzicode.com/VX公众号:juzicode import xlwt wb xlwt.Workbook() ws wb.add_sheet(juzicode) a bjuzicode ws.write(3, 0, 桔子code) ws.wri…...

赶紧收藏!2024 年最常见 20道 Redis面试题(八)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见 20道 Redis面试题&#xff08;七&#xff09;-CSDN博客 十五、一个Redis实例最多能存放多少的keys&#xff1f; Redis实例能存放的键&#xff08;keys&#xff09;的数量主要受限于以下几个因素&#xff1a; 物理内…...

Flowable第一次启动MYSQL8.0版本(踩坑)

flowable工作流项目第一次启动报错表不存在&#xff0c;是因为连接mysql数据库的时候没有设置&nullCatalogMeansCurrenttrue&#xff0c;mysql5.0以上该配置默认为flase&#xff0c;即不操作本数据库。因此需要修改为true。datasource:url: jdbc:mysql://127.0.0.1:3306/fl…...

Java基础的语法---StringBuilder

StringBuilder 构造方法 StringBuilder()&#xff1a;创建一个空的StringBuilder实例。 StringBuilder(String str)&#xff1a;创建一个StringBuilder实例&#xff0c;并将其初始化为指定的字符串内容。 StringBuilder(int a): 创建一个StringBuilder实例…...

【微服务】springboot 构建镜像多种模式使用详解

目录 一、前言 二、微服务常用的镜像构建方案 3.1 使用Dockerfile 3.2 使用docker plugin插件 3.3 使用docker compose 编排文件 三、环境准备 3.1 服务器 3.2 安装JDK环境 3.2.1 创建目录 3.2.2 下载安装包 3.2.3 配置环境变量 2.2.4 查看java版本 3.3 安装maven …...

手写tomcat(Ⅲ)——tomcat动态资源的获取

仿写tomcat的Servlet接口体系 之前写过一篇博客&#xff0c;Tomcat的Servlet-GenericServlet-HttpServlet体系的具体结构&#xff0c;以及Servlet的生命周期 Servlet讲解 想要模仿tomcat获取动态资源&#xff0c;就需要我们自己仿写一个Servlet接口体系 主要包括&#xff1a…...

软件测试面试题(四)

一&#xff1a;测试评估的目标&#xff1f; 量化测试进程 生成缺陷和测试覆盖率的总结报告 测试评估的问题 没有把测试覆盖率作为报告测试进程的根据&#xff0c;使得不知测试是否结束&#xff1b; 没有做测试缺陷评估&#xff0c;缺陷评估是量度软件可行性的重要指标&…...

infoq学习笔记-云原生网关当道,三大主流厂商如何“竞 技”?

注基础组件的质量&#xff0c;这些基础组件是用户看不到的。这些组件包括代码质量、自动化的CI/CD、端对端测试、混沌测试等。在APISIX中&#xff0c;我们内置了大 量的测试案例代码&#xff0c;包括单元测试、E2E测试、混沌测试&#xff0c;以及一些基准测试等&#xff0c;从而…...

Python中别再用 ‘+‘ 拼接字符串了!

大家好&#xff0c;在 Python 编程中&#xff0c;我们常常需要对字符串进行拼接。你可能会自然地想到用 操作符将字符串连接起来&#xff0c;毕竟这看起来简单明了。 在 Python 中&#xff0c;字符串是不可变的数据类型&#xff0c;这意味着一旦字符串被创建&#xff0c;它就…...

前端上传heic图片转jpe格式并展示

各大浏览器对 HEIC 格式图片的支持情况&#xff0c;包括上传和显示的支持度 浏览器版本HEIC 上传HEIC 显示Chrome版本 85 及以上支持不支持Firefox所有版本支持不支持Safari版本 11 及以上支持支持Edge版本 18 及以上支持不支持Opera所有版本支持不支持IE不支持不支持不支持 …...

VMware虚拟机-设置系统网络IP、快照、克隆

1.设置网络IP 1.点击右上角开关按钮-》有线 已连接-》有线设置 2.手动修改ip 3.重启或者把开关重新关闭开启 2.快照设置 快照介绍&#xff1a; 通过快照可快速保存虚拟机当前的状态&#xff0c;后续可以使用虚拟机还原到某个快照的状态。 1.添加快照(需要先关闭虚拟机) 2.在…...

指纹识别概念解析

目录 1. 指纹是物证之首 1.1 起源于中国 1.2 发展于欧洲 1.3 流行于全世界 2. 指纹图像 3. 指纹特征 4. 指纹注册 5. 指纹验证 6. 指纹辨识 1. 指纹是物证之首 指纹识别技术起源于中国、发展于欧洲、流行于全世界。自20世纪以来&#xff0c;指纹在侦破刑事案件、解决诉…...

图像处理神经网络数据预处理步骤的详细解释和分析

1. 尺寸调整&#xff08;Resizing&#xff09; 目的&#xff1a;神经网络通常需要固定尺寸的输入图像。通过统一图像尺寸&#xff0c;可以确保输入的一致性&#xff0c;使得网络能够正常处理。 方法&#xff1a;将所有输入图像调整为特定的尺寸&#xff08;例如224x224像素&a…...

音视频开发4-补充 FFmpeg 开发环境搭建 -- 在windows 上重新build ffmpeg

本节的目的是在windows 上 编译 ffmpeg 源码&#xff0c;这样做的目的是&#xff1a;在工作中可以根据工作的实际内容裁剪 ffmpeg&#xff0c;或者改动 ffmpeg 的源码。 第一步 &#xff1a;下载&#xff0c; 安装&#xff0c;配置 &#xff0c;运行 msys64 下载 下载地址&…...

第十二周笔记

微信小程序的自定义事件是指开发者可以自行定义并触发的事件&#xff0c;以实现特定的功能或逻辑。通过自定义事件&#xff0c;开发者可以更灵活地管理小程序的交互和数据流动&#xff0c;提升用户体验和开发效率。下面我将详细讲解微信小程序自定义事件&#xff0c;包括定义、…...

SketchUp v2024 v24.0.553 解锁版安装教程 (强大的绘图三维建模工具)

前言 SketchUp&#xff08;简称SU&#xff0c;俗称草图大师&#xff09;全球知名的三维建模软件&#xff0c;强大的绘图工具、建模渲染、扩展插件和渲染器模板、海量3D模型库及建模灯光材质渲染效果图&#xff0c;用于建筑师、城市规划专家、游戏开发等行业。 一、下载地址 …...

力扣题解记录

三元组队列、取出元组中的元素&#xff1a;腐烂的橘子...

Flutter 中的 ExpandIcon 小部件:全面指南

Flutter 中的 ExpandIcon 小部件&#xff1a;全面指南 Flutter 提供了一系列的动画图标&#xff0c;ExpandIcon 就是其中之一&#xff0c;它用于表示一个可以展开或收起的内容区域。这个小部件通常用于实现折叠列表、手风琴菜单或其他类似的UI元素。本文将为您提供一个全面的指…...

想转行程序员的朋友,有什么想问的在评论区随便问,我知道的都告诉你。

你想转行程序员吗&#xff1f; 我自己是法学院毕业后&#xff0c;通过2年的努力才转行程序员成功的。 我发现对于一个外行来说&#xff0c;找不到一个适合自己的方向&#xff0c;光靠努力在一个新的行业里成功异常艰难。即使你非常努力&#xff0c;但方向错了也会做大量的无用…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

倒装芯片凸点成型工艺

UBM&#xff08;Under Bump Metallization&#xff09;与Bump&#xff08;焊球&#xff09;形成工艺流程。我们可以将整张流程图分为三大阶段来理解&#xff1a; &#x1f527; 一、UBM&#xff08;Under Bump Metallization&#xff09;工艺流程&#xff08;黄色区域&#xff…...

UE5 音效系统

一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类&#xff0c;将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix&#xff0c;将上述三个类翻入其中&#xff0c;通过它管理每个音乐…...