您的当前位置:首页work_Station 设计

work_Station 设计

2024-12-14 来源:哗拓教育

TODO list

  1. 数据库调试:一个病人对应多条记录;
  2. UI调试;
  3. Dicom打印;

广西那家医院现在主要问题是住院报告的问题:
医院要求住院的报告补打印
只有报告审核完毕,发给我们以后,才可以打印胶片和报告
做虚拟打印机,pdf的
然后在连一下医院的数据库


image.png

住院的那里就是住院号 //住院报告不打印
门诊就写急诊号//门诊与急诊报告打印
只要有与胶片对应的报告
都可以打印的情况下,就是相当于报告审核好了
比如病人手里有一个条码 123
我们服务器里,有一张胶片号码123 一张报告也是123

修正设计

数据库连接单独采用一个form,用于连接与查询只用;
提供的接口也对外使用

TADOQuery {
close
SQL.clear
SQL.add('select * from table where study_id');
Open
// SQL.savetofile
// execesql
}
if query.RecordCount > 0
if query.RowsAffected > 0
while not query.eof do
query.fieldbyname('status').AsString <> '已审核' //判断状态
query.next;
//

getpdfreport 读取数据库中pdf文件并保存到本地

>> 流程

读取到二维码,进行查询打印;
对设置项中的数据

>> 数据库

数据库操作流程
  1. ViewE_ScreenGroupJobs查询数据, 根据时间从两个表中读取时间限制的数据;
  2. 拿到patient_id去PrintJobList查询胶片,胶片区分是根据SessionUID
  3. 去ReportBoxes查询报告,一个id可能都会对应多个胶片和多个报告,报告区分是根据idx
  4. 报告你打印完了修改下ReportBoxes中report_status为1,
  5. 胶片打印前期先这样做,你修改PrintJobList中Status=2就行
表结构

Data Source=192.168.206.90
PrintJobList -->


Paste_Image.png

ReportBoxes -->


Paste_Image.png

报告打印

if ShellExecute(0, 'open', PChar('WordPro.exe'), nil, nil, SW_SHOW)<=32 then
begin
CXMessage('打印报告失败!',0);
end
else
begin
// 更新打印状态,刷新界面
end;
// word print
Word_Handle, Doc_Handle: OLEVariant;
Word_Handle := CreateOleObject('Word.Application');
//Word_Handle.quit;
Word_Handle.Visible := false; //隐藏Exce窗口
Word_Handle.Documents.open(ExtractFilePath(Application.ExeName)+'模板.doc');
Word_Handle.PrintOut;


//PDF 打印报告?

if ShellExecute(Handle,'print',PChar('.\temp.pdf'),nil,nil,0)<= 32 then


// 使用Printer全局变量进行打印操作
gsprint

There are some different possibilities to print PDFs... it depends whether you can require Adobe Reader to be installed (I don't know if you want to distribute your tool or just use it yourself).

  1. It is possible to load the ActiveX control of Adobe Reader and use it for printing
    pdfFile.src := 'filename.pdf'; pdfFile.LoadFile('filename.pdf'); pdfFile.print;
  2. You can print PDFs with Adobe Reader itself (could be done with FoxIt too)
    ShellExecute(0, 'open', 'acrord32', PChar('/p /h ' + FileName), nil, SW_HIDE);
  3. You could also use Ghostview and Ghostprint
    ShellExecute(Handle, 'open', 'gsprint.exe', PChar('"' + filename + '"'), '', SW_HIDE);

我的印象这个问题从90年代以来一直有人在问,究其原因在于不同的绘制表面(GDI所谓的设备上下文,DC)所支持的点阵图形(windows中称之为光栅图,raster)绘制能力不一样,显示DC或者内存DC的支持能力最强,而打印机DC经常不支持BitBlt、StretchBlt(但是通常会支持DIB复制StretchDIBits),你需要用GetDeviceCaps确定一下你的打印机驱动所支持的DC绘制能力来决定使用哪个位图绘制函数。

消息界面,

弹框出来,自动消失

DIComm 发送图片数据

方案:使用DICOM VCL转换;将jpg转换为DICOM数据,发送给胶片机;

DICOM VCL
DICOM 网络通信
Paste_Image.png
破解组件
lead tools
DICOM3 蛮靠谱

DICOMcm_TLB, ExtCtrls, ComCtrls
TDICOMc; //发送dcm文件
TDICOMaX // 转换jpg文件
echo:
called -> RINGPACS
calling -> DCM_DE

TComm

SPComm,
cm1: TComm;

cm1.BaudRate:=StrToInt(btl);
cm1.Parity:=None;
if _printReport='1' then
try
cm1.StartComm;
except
ShowMessage('打开扫描串口失败!');
end;
cm1.StopComm;

数据加锁

Section:TCriticalSection;
Section:=TCriticalSection.Create;
Section.Free;
Section.Enter;
Section.Leave;

> 用户界面

1. Form1

主界面,信息展示,用户交互


Paste_Image.png
2. Form2

启动界面


Paste_Image.png
3. Form3

设置界面


Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png

> 功能模块

1. 数据库操作

文件:DB.pas
配置文件:

  1. 连接数据库
    函数: connectDB 函数
    读取配置DB.ini中字段,连接数据库;连接成功后,启动主界面;连接失败,提示并退出界面;
  2. 读取数据库数据并滚动显示
    函数: updateInfo 函数
    从数据库不断读取信息,并将最新信息显示在首条;
    打印之后重新查找数据库状态,并更新滚动显示信息;
  3. 根据条码拉取数据
    函数: getPrintInfoByID(checkID: string)
    根据检查号,从数据库中查询信息;
    查询不到信息,弹出提示框;
    查询到信息,自动打印相关报告与胶片

2. 扫描

Scan.pas
文件:Scan.ini

  1. 扫描获取ID
    函数:scanAndGetID
    扫描二维码,扫描成功,将读取的数字显示在输入框中;
    扫描失败,提示出错信息;

3. 打印报告或胶片

Print.pas
根据配置

  1. 打印报告
    函数:printReport
    根据系统设置以及查询到的信息,查看是否能打印报告,能打印调用打印机进行打印,出错则弹出打印失败及相关错误码;
    报告状态不能打印,提供相应拒绝打印提示信息;
  2. 打印胶片
    函数:printFilm
    根据系统设置,对胶片的状态进行查询,允许打印则进行打印;否则弹出相应提示信息;

4. 设置

SettingConfig.pas
文件:Setting.ini

  1. 读取所有配置
    函数:readAllSetting
    读取Setting.ini中的所有字段,存储到内存,用于打印时设置;
  2. 保存基本设置
    函数:saveAllSetting
    将从设置界面获取的信息更新到Setting.ini文件中,并及时更新到存储变量中,用于打印设置;
> 设置项含义:
  1. 设置:
    DBIP --> 数据库服务IP地址,不可写;
    传统胶片 --> DCom打印,IP/Port/AE 屏蔽;
    审核报告 --> 胶片与报告匹配时才打印;
    机器片量 --> 胶片盒1,胶片盒2的胶片数量,打印一张数目自动减一;
    RIS多模板 --> 暂不做;
    胶片机名称 --> 与这个名称匹配的才打印;
    胶片时 --> 打印胶片倒计时;
    纸 --> 打印报告倒计时;
  2. 其他
    触屏时间 --> 不可改,置灰,暂不做;
    审核报告 --> 对应个别需求,暂不做;
    胶片多规格 --> 暂不做;
    摄影 --> 暂不做;
    左侧界面比例 --> 界面比例调整;
    胶片为主 --> 暂不做;
  3. 报告限制
    暂不做
  4. 授权打印
    加密可打片数
    暂不做
显示全文