work_Station 设计

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

报告打印

参考:
http://blog.csdn.net/masofeng/article/details/7655031
http://blog.csdn.net/muais/article/details/9812881
https://www.thoughtco.com/print-documents-from-delphi-1057936
http://stackoverflow.com/questions/2055307/delphi-how-to-print-a-pdf-without-showing-it
http://www.2ccc.com/news/Html/?859.html
// wordPro 打印胶片?

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

http://www.dicomvcl.com/cn/product/product-85-696.html
http://download.csdn.net/detail/xing_1988/9560492?web=web
http://download.csdn.net/download/useryanyin/6702353
TDicomImage

DICOM 网络通信

ConvertJpegFileToBitmapFile

Paste_Image.png

破解组件

破解DICOM3DSDK

lead tools

DICOM

DICOM3 蛮靠谱

http://www.dicom3.cn/download.htm

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

TComm

参考:
http://blog.csdn.net/Tercel99/article/details/46690921
下载一个SPComm控件

SPComm,
cm1: TComm;
cm1.CommName:=port;
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. 授权打印
    加密可打片数
    暂不做
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容