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基本完成质控;本次版本推进到1.7,1.7集菜单权限、登录、打印导出客户端、初始化、质控、Linux客户端、仪器连接和监控体系各种功能大全,上十年写系统用到的都全了。 这次直接挑战检验最难…...
Python错误集锦:xlwt写入表格时提示exception-unexpected-data-type-class-bytes
原文链接:http://www.juzicode.com/python-error-exception-unexpected-data-type-class-bytes 错误提示: #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面试题(八)
上一篇地址:赶紧收藏!2024 年最常见 20道 Redis面试题(七)-CSDN博客 十五、一个Redis实例最多能存放多少的keys? Redis实例能存放的键(keys)的数量主要受限于以下几个因素: 物理内…...
Flowable第一次启动MYSQL8.0版本(踩坑)
flowable工作流项目第一次启动报错表不存在,是因为连接mysql数据库的时候没有设置&nullCatalogMeansCurrenttrue,mysql5.0以上该配置默认为flase,即不操作本数据库。因此需要修改为true。datasource:url: jdbc:mysql://127.0.0.1:3306/fl…...
Java基础的语法---StringBuilder
StringBuilder 构造方法 StringBuilder():创建一个空的StringBuilder实例。 StringBuilder(String str):创建一个StringBuilder实例,并将其初始化为指定的字符串内容。 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接口体系 之前写过一篇博客,Tomcat的Servlet-GenericServlet-HttpServlet体系的具体结构,以及Servlet的生命周期 Servlet讲解 想要模仿tomcat获取动态资源,就需要我们自己仿写一个Servlet接口体系 主要包括:…...
软件测试面试题(四)
一:测试评估的目标? 量化测试进程 生成缺陷和测试覆盖率的总结报告 测试评估的问题 没有把测试覆盖率作为报告测试进程的根据,使得不知测试是否结束; 没有做测试缺陷评估,缺陷评估是量度软件可行性的重要指标&…...
infoq学习笔记-云原生网关当道,三大主流厂商如何“竞 技”?
注基础组件的质量,这些基础组件是用户看不到的。这些组件包括代码质量、自动化的CI/CD、端对端测试、混沌测试等。在APISIX中,我们内置了大 量的测试案例代码,包括单元测试、E2E测试、混沌测试,以及一些基准测试等,从而…...
Python中别再用 ‘+‘ 拼接字符串了!
大家好,在 Python 编程中,我们常常需要对字符串进行拼接。你可能会自然地想到用 操作符将字符串连接起来,毕竟这看起来简单明了。 在 Python 中,字符串是不可变的数据类型,这意味着一旦字符串被创建,它就…...
前端上传heic图片转jpe格式并展示
各大浏览器对 HEIC 格式图片的支持情况,包括上传和显示的支持度 浏览器版本HEIC 上传HEIC 显示Chrome版本 85 及以上支持不支持Firefox所有版本支持不支持Safari版本 11 及以上支持支持Edge版本 18 及以上支持不支持Opera所有版本支持不支持IE不支持不支持不支持 …...
VMware虚拟机-设置系统网络IP、快照、克隆
1.设置网络IP 1.点击右上角开关按钮-》有线 已连接-》有线设置 2.手动修改ip 3.重启或者把开关重新关闭开启 2.快照设置 快照介绍: 通过快照可快速保存虚拟机当前的状态,后续可以使用虚拟机还原到某个快照的状态。 1.添加快照(需要先关闭虚拟机) 2.在…...
指纹识别概念解析
目录 1. 指纹是物证之首 1.1 起源于中国 1.2 发展于欧洲 1.3 流行于全世界 2. 指纹图像 3. 指纹特征 4. 指纹注册 5. 指纹验证 6. 指纹辨识 1. 指纹是物证之首 指纹识别技术起源于中国、发展于欧洲、流行于全世界。自20世纪以来,指纹在侦破刑事案件、解决诉…...
图像处理神经网络数据预处理步骤的详细解释和分析
1. 尺寸调整(Resizing) 目的:神经网络通常需要固定尺寸的输入图像。通过统一图像尺寸,可以确保输入的一致性,使得网络能够正常处理。 方法:将所有输入图像调整为特定的尺寸(例如224x224像素&a…...
音视频开发4-补充 FFmpeg 开发环境搭建 -- 在windows 上重新build ffmpeg
本节的目的是在windows 上 编译 ffmpeg 源码,这样做的目的是:在工作中可以根据工作的实际内容裁剪 ffmpeg,或者改动 ffmpeg 的源码。 第一步 :下载, 安装,配置 ,运行 msys64 下载 下载地址&…...
第十二周笔记
微信小程序的自定义事件是指开发者可以自行定义并触发的事件,以实现特定的功能或逻辑。通过自定义事件,开发者可以更灵活地管理小程序的交互和数据流动,提升用户体验和开发效率。下面我将详细讲解微信小程序自定义事件,包括定义、…...
SketchUp v2024 v24.0.553 解锁版安装教程 (强大的绘图三维建模工具)
前言 SketchUp(简称SU,俗称草图大师)全球知名的三维建模软件,强大的绘图工具、建模渲染、扩展插件和渲染器模板、海量3D模型库及建模灯光材质渲染效果图,用于建筑师、城市规划专家、游戏开发等行业。 一、下载地址 …...
力扣题解记录
三元组队列、取出元组中的元素:腐烂的橘子...
Flutter 中的 ExpandIcon 小部件:全面指南
Flutter 中的 ExpandIcon 小部件:全面指南 Flutter 提供了一系列的动画图标,ExpandIcon 就是其中之一,它用于表示一个可以展开或收起的内容区域。这个小部件通常用于实现折叠列表、手风琴菜单或其他类似的UI元素。本文将为您提供一个全面的指…...
想转行程序员的朋友,有什么想问的在评论区随便问,我知道的都告诉你。
你想转行程序员吗? 我自己是法学院毕业后,通过2年的努力才转行程序员成功的。 我发现对于一个外行来说,找不到一个适合自己的方向,光靠努力在一个新的行业里成功异常艰难。即使你非常努力,但方向错了也会做大量的无用…...
R语言建模总“跑不通”?3步定位环境污染源:从.Rprofile到Sys.getenv()的深度诊断手册
第一章:R语言建模环境“跑不通”现象的典型表现与危害R语言建模环境中的“跑不通”并非指语法错误导致的立即报错,而是一类隐蔽性强、复现性差、定位困难的系统性失配问题。这类问题常在跨平台迁移、版本升级或协作开发中集中爆发,表面看似代…...
孤立森林(Isolation Forest)在金融风控中的实战应用
1. 金融风控中的异常检测挑战 金融行业每天都要处理海量的交易数据,如何从中快速准确地识别出异常行为一直是风控系统的核心难题。传统的规则引擎虽然直观易懂,但面对日益复杂的欺诈手段往往力不从心。我曾经参与过一个信用卡反欺诈项目,最初…...
如何将微信聊天记录永久保存并深度分析?WeChatMsg终极解决方案
如何将微信聊天记录永久保存并深度分析?WeChatMsg终极解决方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…...
nRF Connect 介绍和操作入门
nRF Connect 介绍和操作入门 一、nRF Connect 简介 nRF Connect 是由 Nordic Semiconductor 开发的一套强大的低功耗蓝牙(BLE)开发工具集合,主要面向开发者、测试人员以及蓝牙技术爱好者。它分为三个主要版本: 1.1 主要版本版本平…...
发那科机器人速度倍率再启动设置详解(附PLC联动避坑指南)
发那科机器人速度倍率再启动设置详解(附PLC联动避坑指南) 在工业自动化产线中,发那科机器人凭借其高精度和稳定性成为众多制造企业的首选。然而,在实际操作过程中,工程师们常常会遇到一个令人头疼的问题——机器人在暂…...
解耦的艺术:.NET 中依赖注入(DI)的核心原理与实战
解耦的艺术:.NET 中依赖注入(DI)的核心原理与实战在现代软件开发中,代码的可维护性、可测试性和可扩展性往往取决于架构设计的质量。而 依赖注入(Dependency Injection, DI) 正是实现“高内聚、低耦合”这一…...
文墨共鸣:如何用AI理解文字“意思”而不仅仅是“文字”?
文墨共鸣:如何用AI理解文字“意思”而不仅仅是“文字”? 你有没有遇到过这样的情况?两段文字,用词完全不同,但说的却是同一个意思。或者反过来,字面看起来差不多,但想表达的核心观点天差地别。…...
Clawdbot+Qwen3:32B快速上手:免开发Web界面搭建私有ChatGPT
ClawdbotQwen3:32B快速上手:免开发Web界面搭建私有ChatGPT 1. 为什么选择这个方案? 你是否遇到过这些困扰: 想使用强大的Qwen3:32B大模型,但本地硬件资源不足希望拥有一个美观易用的Web界面,但不想从头开发需要确保…...
AMD Ryzen SDT调试工具深度解析:5大实战场景解锁处理器极限性能
AMD Ryzen SDT调试工具深度解析:5大实战场景解锁处理器极限性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: h…...
Tusky测试策略分析:单元测试与集成测试在Android应用中的实践
Tusky测试策略分析:单元测试与集成测试在Android应用中的实践 【免费下载链接】Tusky An Android client for the microblogging server Mastodon 项目地址: https://gitcode.com/gh_mirrors/tu/Tusky Tusky作为一款流行的Mastodon Android客户端,…...
