clsPlugin.cs 133 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999
  1. //-----------------------------------------------------------------------------
  2. // 文 件 名: clsPlugin
  3. // 作 者:blanksea
  4. // 创建时间:2023/10/13 9:48:34
  5. // 描 述:
  6. // 版 本:
  7. //-----------------------------------------------------------------------------
  8. // 历史更新纪录
  9. //-----------------------------------------------------------------------------
  10. // 版 本:1.0 修改时间:2020/08/25 修改人: 苏纯栋
  11. // 修改内容:建立子插件项目模板
  12. // 适用HIS版本: 35.0 ~ 35.130
  13. //*****************************************************************************
  14. // 版 本:1.1 修改时间:2020/12/22 修改人: 苏纯栋
  15. // 修改内容:新增日志类,封装标准存储方式及存储路径;新增数据查询辅助类
  16. // 适用HIS版本: 35.0 ~ 35.130
  17. //*****************************************************************************
  18. // 版 本:1.2 修改时间:2021/03/18 修改人: 苏纯栋
  19. // 修改内容:新增JSON类,调整DBHelper辅助类,新增WebService服务动态调用,新增扩展类,规范MessageBox调用显示
  20. // 修改内容:新增用户信息模型及配置信息模型,新增domain及model层
  21. // 修改内容:迁移原数据,调整IclsPlugin函数签名匹配35.140版本
  22. // 修改内容:补全所有功能方法的使用说明及参数备注
  23. // 适用HIS版本: 35.0 ~ 35.140
  24. //*****************************************************************************
  25. // 版 本:1.3 修改时间:2021/09/14 修改人: 苏纯栋
  26. // 修改内容:修复部分bug
  27. // 适用HIS版本: 35.0 ~ 35.140
  28. //*****************************************************************************
  29. // 版 本:1.4 修改时间:2021/11/16 修改人: 苏纯栋
  30. // 修改内容:修复部分bug
  31. // 修改内容:调整Ini初始化说明,修复因主插件重复调用引起的重复初始化
  32. // 修改内容:新增AES及DES加解密操作类
  33. // 适用HIS版本: 35.0 ~ 35.140
  34. //-----------------------------------------------------------------------------
  35. // Copyright (C) 2013-2023 重庆中联信息科技贵阳公司接口部
  36. //-----------------------------------------------------------------------------
  37. using ADODB;
  38. using System;
  39. using System.Collections.Generic;
  40. using System.Net;
  41. using System.Runtime.InteropServices;
  42. using System.Text;
  43. using System.Windows.Forms;
  44. using ZLPlugin_MR.Domain;
  45. using ZLPlugin_MR.Domain.Units;
  46. using ZLPlugin_MR.Model;
  47. using ZLPlugin_MR.ServerImpl;
  48. namespace ZLPlugin_MR
  49. {
  50. [ComVisible(true)]
  51. [Guid("65d940c4-4970-4392-ad70-f2a76fec089c")]
  52. [ProgId("ZLPlugin_MR.clsPlugin")]
  53. public class clsPlugin : IclsPlugIn
  54. {
  55. Connection OracleConnect;//初始化时获取连接对象
  56. //==========================================规范使用说明==============================================================
  57. //使用插件时,为了规范化代码,便于后期维护,请将自己要使用实现的功能从“未实现功能”的region中移动到“已实现功能”中来
  58. //====================================================================================================================
  59. #region 已实现的功能
  60. static bool IsInit = false;
  61. public void Initialize(Connection cnOracle, long lngSys, long lngModual, int int场合 = -1)
  62. {
  63. //功能:初始化
  64. //事件触发点:登录导航台时触发;进入医生站时连续触发
  65. //注意事项:因会重复触发,经测试定义的类变量进入时重复定义类变量,标记的static变量不会出现问题,建议:
  66. // 1. 需要定义到类内部的全局变量,使用静态变量static;
  67. // 2. 需要使用的静态变量初始化,放入下方初始化操作中,以避免重复调用
  68. Log.Info("初始化 Initialize");
  69. if (!IsInit)
  70. {
  71. Tools.Connection = cnOracle;
  72. OracleConnect = cnOracle;
  73. Domain.Infos.Con = cnOracle;
  74. Domain.Infos.ReadConfig();
  75. Log.ClearLogAsyn().Start();
  76. IsInit = true;
  77. }
  78. }
  79. public bool AdviceSend(long lngSys, long lngModual, long lngPatientID, long lngClinicID, long lngSendID)
  80. {
  81. // '功能:发送医嘱完成后调用,当住院护士同时发送多个病人医嘱时一个病人会调用一次。
  82. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号(1252=门诊医嘱下达(门诊没有“发送”模块),1254=住院医嘱发送)
  83. //' lngPatientID=病人ID,lngClinicID=就诊ID(挂号记录ID)/主页ID(住院调用时)
  84. //' lngSendID=发送号(病人医嘱发送.id)
  85. Log.Info("AdviceSend lngModual == " + lngModual );
  86. Log.Info("AdviceSend lngSys == " + lngSys);
  87. //住院的时候发送 不需要 20241015
  88. if (lngModual == 1254)
  89. {
  90. return true;
  91. }
  92. //-------------- 20241015
  93. Log.Info("AdviceSend enter=="+ lngSendID);
  94. try
  95. {
  96. Log.Info("AdviceSend enter==");
  97. int res = 1;
  98. int waittingdate = 0;
  99. int yzzState = 0;
  100. LisPacs_MR_Bll.IsAgree(out res, out waittingdate, out yzzState);
  101. if (res == 0)//互认关闭
  102. {
  103. return true;
  104. }
  105. List<YZData> ss_list = LisPacs_MR_Bll.GetYZList(lngSendID);
  106. string hisApplyId = Tools.Generate16CharGUID();
  107. string patientSource = "1"; //病人来源
  108. string code = "";
  109. string billProjectNames = ""; //开单项目名称
  110. List<Codes> listlis;
  111. List<Codes> listpacs;
  112. LisPacs_MR_Bll.GetTreatmentId(ss_list, out code, out listlis, out listpacs,out billProjectNames);
  113. Log.Info("code==" + code);
  114. Log.Info("billProjectNames==" + billProjectNames);
  115. decimal totalPrice = 0;
  116. int hrType = 0;
  117. if (listlis.Count == 0 && listpacs.Count == 0)
  118. {
  119. Log.Info("listlis.Count == 0");
  120. return true;
  121. }
  122. else if (listlis.Count > 0 && listpacs.Count == 0)//只有检验
  123. {
  124. hrType = 1;
  125. }
  126. else if (listpacs.Count > 0 && listlis.Count == 0)//只有检查
  127. {
  128. hrType = 2;
  129. }
  130. if (hrType == 1)
  131. {
  132. totalPrice = LisPacs_MR_Bll.GetTotalPriceForLisByZlxmIds(LisPacs_MR_Bll.GetZlxmIdFromList(listlis));// 获取总金额
  133. //totalPrice = LisPacs_MR_Bll.GetTotalPriceForLisByZLXM(zlxmid);
  134. }
  135. else if (hrType == 2)
  136. {
  137. for (var ii = 0; ii < listpacs.Count; ii++)
  138. {
  139. totalPrice += LisPacs_MR_Bll.GetTotalPriceForPacsByZLXM(listpacs[ii].zlxmid, listpacs[ii].zxksid, listpacs[ii].part, listpacs[ii].method, 2);
  140. }
  141. // totalPrice = LisPacs_MR_Bll.GetTotalPriceForPacsByZLXM(zlxmid, listpacs[0].zxksid, listpacs[0].part, listpacs[0].method, 2);
  142. }
  143. else
  144. {
  145. //获取合单之后 同时有检查和检验 的开单项目唯一id 以及金额
  146. totalPrice = LisPacs_MR_Bll.GetTotalPriceForLisByZlxmIds(LisPacs_MR_Bll.GetZlxmIdFromList(listlis));// 获取总金额
  147. for (var ii = 0; ii < listpacs.Count; ii++)
  148. {
  149. totalPrice += LisPacs_MR_Bll.GetTotalPriceForPacsByZLXM(listpacs[ii].zlxmid, listpacs[ii].zxksid, listpacs[ii].part, listpacs[ii].method, 2);
  150. }
  151. }
  152. Recordset rd = LisPacs_MR_Bll.GetMZPostJson(lngClinicID, code, hrType, totalPrice.ToString(), hisApplyId);
  153. string json = Tools.RecordsetToJson(rd);
  154. Log.Info(json);
  155. SocketClient clientSend = new SocketClient("127.0.0.1", 6061);
  156. clientSend.Send(json);
  157. //Tools.Delay(10000, 0);
  158. bool status = true; int i = 0;
  159. var begintime = DateTime.Now.Ticks;
  160. TimeSpan timeSpan = new TimeSpan();
  161. Log.Info("初始化完成!");
  162. while (status)
  163. {
  164. timeSpan = new TimeSpan(DateTime.Now.Ticks - begintime);
  165. //Thread.Sleep(3000);
  166. try
  167. {
  168. clientSend.Receive();
  169. }
  170. catch (Exception e)
  171. {
  172. Log.Info("接收失败!" + e.Message);
  173. }
  174. if (timeSpan.TotalSeconds > 10 || !string.IsNullOrWhiteSpace(SocketClient.Message))
  175. {
  176. status = false;
  177. }
  178. Log.Info("timeSpan.TotalSeconds:" + timeSpan.TotalSeconds);
  179. i++;
  180. }
  181. Log.Info("22222" + SocketClient.Message);
  182. if (!string.IsNullOrWhiteSpace(SocketClient.Message))
  183. {
  184. Log.Info(SocketClient.Message);
  185. ResultsEx rex = new ResultsEx();
  186. rex = JSON.JsonToObject<ResultsEx>(Tools.FormatStr(SocketClient.Message), Encoding.UTF8);
  187. if (rex.ResultCode == 2)//有互认
  188. {
  189. MessageBox.Show("回传数据至his!");
  190. clientSend.Receive();
  191. // SocketClient.Message = null;
  192. SaveData(waittingdate, lngPatientID, lngClinicID, listlis, listpacs, 1);
  193. //保存开单项目
  194. int ii = LisPacs_MR_Bll.InsertHuRenBillProject(Dns.GetHostName(), lngPatientID, billProjectNames, 999, Tools.GetHostIp(), Infos.UserInfo.ID.ToString(), hisApplyId, hrType.ToString(), Infos.UserInfo.姓名,patientSource);
  195. Log.Info("开单状态=" + ii);
  196. clientSend.Close();
  197. return true;
  198. }
  199. else if (rex.ResultCode == -1)//互认引用失败
  200. {
  201. MessageBox.Show(rex.ResultText.ToString(), "中联软件", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
  202. clientSend.Close();
  203. return true;
  204. }
  205. else
  206. {
  207. MessageBox.Show(rex.ResultText.ToString(), "中联软件", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
  208. int ii = LisPacs_MR_Bll.InsertHuRenBillProject(Dns.GetHostName(), lngPatientID, billProjectNames, 999, Tools.GetHostIp(), Infos.UserInfo.ID.ToString(), hisApplyId, hrType.ToString(), Infos.UserInfo.姓名, patientSource);
  209. Log.Info("开单状态=" + ii);
  210. clientSend.Close();
  211. return true;//此病人不存在互认信息
  212. }
  213. }
  214. clientSend.Close();
  215. }
  216. catch (Exception ex)
  217. {
  218. Log.Info(ex.Message);
  219. Log.Info(ex.StackTrace);
  220. MessageBox.Show(ex.Message, "中联软件", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
  221. }
  222. /*if (clientSend != null)
  223. {
  224. clientSend.Close();
  225. }*/
  226. Log.Info("AdviceSend end==");
  227. return true;
  228. }
  229. public bool AdviceSave(long lngSys, long lngModual, long lngPatientID, long lngClinicID, Recordset rsAdvice, int int场合 = -1)
  230. {
  231. // '功能:保存医嘱时(事务开始前)调用,返回False时不保存医嘱
  232. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号(1252=门诊医嘱下达,1253=住院医嘱下达)
  233. //' lngPatientID=病人ID,lngClinicID=就诊ID(挂号记录ID)/主页ID(住院调用时)
  234. //' rsAdvice=当前病人本次新开或修改的所有医嘱记录,字段同AdviceEnter接口的该参数,除此之外,门诊调用时,还包含医嘱对应的诊断的疾病ID
  235. //' 字段 EditState '1 - 新增,2-修改
  236. //' int场合=0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  237. Log.Info("AdviceSave lngModual==" + lngModual);
  238. Log.Info("AdviceSave lngSys == " + lngSys);
  239. rsAdvice.Filter = "";
  240. // SocketClient socketClient = new SocketClient("127.0.0.1", 6061);
  241. try
  242. {
  243. int res = 1;
  244. int waittingdate = 0;
  245. int yzzState = 0;
  246. LisPacs_MR_Bll.IsAgree(out res, out waittingdate, out yzzState);
  247. if (res == 0)//互认关闭
  248. {
  249. return true;
  250. }
  251. string str = Tools.GetAdviceSaveData(rsAdvice);
  252. Log.Info("保存前医嘱:" + str);
  253. if (str == "")
  254. {
  255. return true;
  256. }
  257. if (yzzState == 1)
  258. {
  259. #region 仅印江人民医院使用,仅支持住院,因为一张纸发送医嘱后也会触发此方法
  260. if (lngModual == 1252)
  261. {
  262. return true;
  263. }
  264. #endregion
  265. }
  266. List<YZData> ss_list = JSON.JsonToObject<List<YZData>>(Tools.FormatStr(str), Encoding.UTF8);
  267. string hisApplyId = Tools.Generate16CharGUID();
  268. Log.Info("hisApplyId==" + hisApplyId);
  269. string patientSource = ""; //病人来源
  270. string code = "";
  271. string billProjectNames = ""; //开单项目名称
  272. List<Codes> listlis;
  273. List<Codes> listpacs;
  274. Log.Info("");
  275. LisPacs_MR_Bll.GetTreatmentId(ss_list, out code, out listlis, out listpacs, out billProjectNames);
  276. Log.Info("code==" + code);
  277. Log.Info("billProjectNames==" + billProjectNames);
  278. Recordset rd = new Recordset();
  279. decimal totalPrice = 0;
  280. int hrType = 0;
  281. if (listlis.Count == 0 && listpacs.Count == 0)
  282. {
  283. Log.Info("listlis.Count == 0 && listpacs.Count == 0");
  284. return true;
  285. }
  286. else if (listlis.Count > 0 && listpacs.Count == 0)//只有检验
  287. {
  288. hrType = 1;
  289. }
  290. else if (listpacs.Count > 0 && listlis.Count == 0)//只有检查
  291. {
  292. hrType = 2;
  293. }
  294. if (lngModual == 1253)//住院
  295. {
  296. if (hrType == 1)
  297. {
  298. totalPrice = LisPacs_MR_Bll.GetTotalPriceForLisByZlxmIds(LisPacs_MR_Bll.GetZlxmIdFromList(listlis));// 获取总金额
  299. //totalPrice = LisPacs_MR_Bll.GetTotalPriceForLisByZLXM(zlxmid);
  300. }
  301. else if (hrType == 2)
  302. {
  303. for (var ii = 0; ii < listpacs.Count; ii++)
  304. {
  305. totalPrice += LisPacs_MR_Bll.GetTotalPriceForPacsByZLXM(listpacs[ii].zlxmid, listpacs[ii].zxksid, listpacs[ii].part, listpacs[ii].method, 1);
  306. }
  307. }
  308. else
  309. {
  310. //获取合单之后 同时有检查和检验 的开单项目唯一id 以及金额
  311. totalPrice = LisPacs_MR_Bll.GetTotalPriceForLisByZlxmIds(LisPacs_MR_Bll.GetZlxmIdFromList(listlis));// 获取总金额
  312. for (var ii = 0; ii < listpacs.Count; ii++)
  313. {
  314. totalPrice += LisPacs_MR_Bll.GetTotalPriceForPacsByZLXM(listpacs[ii].zlxmid, listpacs[ii].zxksid, listpacs[ii].part, listpacs[ii].method, 1);
  315. }
  316. }
  317. //totalPrice = LisPacs_MR_Bll.GetZYTotalPrice(zlxmid);
  318. patientSource = "2";
  319. rd = LisPacs_MR_Bll.GetZYPostJson(lngPatientID, lngClinicID, code, hrType, totalPrice.ToString(), hisApplyId);
  320. }
  321. else
  322. {
  323. //totalPrice = LisPacs_MR_Bll.GetMZTotalPrice(lngPatientID, yzid);
  324. if (hrType == 1)
  325. {
  326. totalPrice = LisPacs_MR_Bll.GetTotalPriceForLisByZlxmIds(LisPacs_MR_Bll.GetZlxmIdFromList(listlis));// 获取总金额
  327. //totalPrice = LisPacs_MR_Bll.GetTotalPriceForLisByZLXM(zlxmid);
  328. }
  329. else if (hrType == 2)
  330. {
  331. for (var ii = 0; ii < listpacs.Count; ii++)
  332. {
  333. totalPrice += LisPacs_MR_Bll.GetTotalPriceForPacsByZLXM(listpacs[ii].zlxmid, listpacs[ii].zxksid, listpacs[ii].part, listpacs[ii].method, 2);
  334. }
  335. // totalPrice = LisPacs_MR_Bll.GetTotalPriceForPacsByZLXM(zlxmid, listpacs[0].zxksid, listpacs[0].part, listpacs[0].method, 2);
  336. }
  337. else
  338. {
  339. //获取合单之后 同时有检查和检验 的开单项目唯一id 以及金额
  340. totalPrice = LisPacs_MR_Bll.GetTotalPriceForLisByZlxmIds(LisPacs_MR_Bll.GetZlxmIdFromList(listlis));// 获取总金额
  341. for (var ii = 0; ii < listpacs.Count; ii++)
  342. {
  343. totalPrice += LisPacs_MR_Bll.GetTotalPriceForPacsByZLXM(listpacs[ii].zlxmid, listpacs[ii].zxksid, listpacs[ii].part, listpacs[ii].method, 1);
  344. }
  345. }
  346. patientSource = "1";
  347. rd = LisPacs_MR_Bll.GetMZPostJson(lngClinicID, code, hrType, totalPrice.ToString(), hisApplyId);
  348. }
  349. SocketClient socketClient = new SocketClient("127.0.0.1", 6061);
  350. //Results result = new Results();
  351. string json = Tools.RecordsetToJson(rd);
  352. Log.Info(json);
  353. socketClient.Send(json);
  354. //Tools.Delay(10000, 0);
  355. bool status = true; int i = 0;
  356. var begintime = DateTime.Now.Ticks;
  357. TimeSpan timeSpan = new TimeSpan();
  358. Log.Info("初始化完成!");
  359. while (status)
  360. {
  361. timeSpan = new TimeSpan(DateTime.Now.Ticks - begintime);
  362. //Thread.Sleep(3000);
  363. try
  364. {
  365. socketClient.Receive();
  366. }
  367. catch (Exception e)
  368. {
  369. Log.Info("接收失败!" + e.Message);
  370. }
  371. if (timeSpan.TotalSeconds > 10 || !string.IsNullOrWhiteSpace(SocketClient.Message))
  372. {
  373. status = false;
  374. }
  375. Log.Info("timeSpan.TotalSeconds:" + timeSpan.TotalSeconds);
  376. i++;
  377. }
  378. Log.Info("22222" + SocketClient.Message);
  379. Log.Info("退出循环!");
  380. Log.Info("listlis count!" + listlis.Count);
  381. Log.Info("listpacs count!" + listpacs.Count);
  382. if (!string.IsNullOrWhiteSpace(SocketClient.Message))
  383. {
  384. //Log.Info(SocketClient.Message);
  385. ResultsEx rex = new ResultsEx();
  386. rex = JSON.JsonToObject<ResultsEx>(Tools.FormatStr(SocketClient.Message), Encoding.UTF8);
  387. if (rex.ResultCode == 2)//有互认
  388. {
  389. MessageBox.Show("回传数据至his!");
  390. socketClient.Receive();
  391. //SocketClient.Message = null;
  392. SaveData(waittingdate, lngPatientID, lngClinicID, listlis, listpacs, -1);
  393. //保存开单项目
  394. int ii = LisPacs_MR_Bll.InsertHuRenBillProject(Dns.GetHostName(), lngPatientID, billProjectNames, 999, Tools.GetHostIp(), Infos.UserInfo.ID.ToString(), hisApplyId, hrType.ToString(), Infos.UserInfo.姓名, patientSource);
  395. Log.Info("开单状态=" + ii);
  396. socketClient.Close();
  397. return true;
  398. }
  399. else if (rex.ResultCode == -1)//互认引用失败
  400. {
  401. MessageBox.Show(rex.ResultText.ToString(), "中联软件", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
  402. socketClient.Close();
  403. return true;
  404. }
  405. else
  406. {
  407. MessageBox.Show(rex.ResultText.ToString(), "中联软件", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
  408. int ii = LisPacs_MR_Bll.InsertHuRenBillProject(Dns.GetHostName(), lngPatientID, billProjectNames, 999, Tools.GetHostIp(), Infos.UserInfo.ID.ToString(), hisApplyId, hrType.ToString(), Infos.UserInfo.姓名, patientSource);
  409. Log.Info("开单状态=" + ii);
  410. socketClient.Close();
  411. return true;//此病人不存在互认信息
  412. }
  413. }
  414. socketClient.Close();
  415. }
  416. catch (Exception ex)
  417. {
  418. MessageBox.Show(ex.Message, "中联软件", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
  419. Log.Info(ex.Message);
  420. Log.Info(ex.StackTrace);
  421. }
  422. /*if (client != null)
  423. {
  424. client.Close();
  425. }*/
  426. Log.Info("AdviceSave end==");
  427. return true;
  428. }
  429. private bool SaveData(int waittingdate, long lngPatientID, long lngClinicID, List<Codes> listlis, List<Codes> listpacs, int state)
  430. {
  431. Results result = new Results();
  432. Tools.Delay(waittingdate);
  433. if (string.IsNullOrWhiteSpace(SocketClient.Message))
  434. {
  435. return true;
  436. }
  437. try
  438. {
  439. Log.Info("互认的信息》》" + SocketClient.Message);
  440. result = JSON.JsonToObject<Results>(Tools.FormatStr(SocketClient.Message), Encoding.UTF8);
  441. }
  442. catch (Exception ex)//插件关闭时,返回格式不一样
  443. {
  444. ResultsEx rex = new ResultsEx();
  445. rex = JSON.JsonToObject<ResultsEx>(Tools.FormatStr(SocketClient.Message), Encoding.UTF8);
  446. Log.Info("SaveData catch" + ex.Message);
  447. return true;
  448. }
  449. if (result.ResultText[0].State == "0")//不互认
  450. {
  451. return true;
  452. }
  453. //Log.Info(SocketClient.Message);
  454. List<long> lisIds = new List<long>();
  455. List<long> pacsIds = new List<long>();
  456. Log.Info("Domain.Infos.UserInfo.编号 = " + Domain.Infos.UserInfo.编号);
  457. LisPacs_MR_Bll.SaveDataNew(result, lngPatientID, lngClinicID, Domain.Infos.UserInfo.编号, listlis, listpacs, out lisIds, out pacsIds);
  458. Log.Info("state:"+ state + " lisId"+ lisIds.Count);
  459. if (state < 1)
  460. {
  461. return true;
  462. }
  463. //仅发送医嘱后执行
  464. if (lisIds.Count > 0)
  465. {
  466. lisIds.ForEach(xgid =>
  467. {
  468. Log.Info("CancelYz lisId="+ xgid);
  469. LisPacs_MR_Bll.CancelYzzNew(lngPatientID, xgid, 1, 0);
  470. Log.Info("CancelYz end");
  471. });
  472. }
  473. if (pacsIds.Count > 0)
  474. {
  475. pacsIds.ForEach(xgid =>
  476. {
  477. Log.Info("CancelYz pacsId=" + xgid);
  478. LisPacs_MR_Bll.CancelYzzNew(lngPatientID, xgid, 0, 1);
  479. Log.Info("CancelYz end");
  480. });
  481. }
  482. return true;
  483. }
  484. #endregion
  485. #region 未实现的功能
  486. public bool AddEMRBefore(string lngSys, long lngModual, long lngPatientID, long lngClinicID, long EMRFileID, params dynamic[] arrInput)
  487. {
  488. //功能:新增电子病历时候调用
  489. //参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号(门诊病历 1250,住院病历 1251,护理病历 1255)
  490. // lngPatientID=病人ID,lngClinicID=就诊ID/
  491. // EMRFileID=病历文件列表.id
  492. // arrInput是数组:扩展参数用于扩展使用,通过下标访一直接问时可能会报两种错,9-下标越界/13-类型不匹配:均表示参数没有传入
  493. // 所以访问参数前应先判断:If TypeName(arrInput(i)) <> "Error" Then 满足这个条件后才使用这个参数,否则就认为这个参数没有传入
  494. // arrInput 目前未传入任何参数
  495. return true;
  496. }
  497. public bool AdvcieBeforToReview(long lngSys, long lngModual, long lngPatientID, long lngClinicID,
  498. long lngAdviceID, long lngSendID, string str核对人, string str核对时间, string str执行人, string strXML)
  499. {
  500. //功能:核对前调用,批量核对时每条医嘱调用一次
  501. //参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号(1261=住院医生站,1262=住院护士站)
  502. // lngPatientID=病人ID,lngClinicID=就诊ID(挂号记录ID)/主页ID(住院调用时)
  503. // lngAdviceID=病人医嘱记录.id
  504. // lngSendID=医嘱发送号
  505. // str核对人=核对人
  506. // str核对时间=核对时间
  507. // str执行人=执行人
  508. // strXML=XML扩展参数
  509. //返回:true允许核对,false不能核对
  510. return true;
  511. }
  512. public void AdviceBeforeSend(string strEndDate, Recordset rsData, string strAdviceIDs, string strMsg)
  513. {
  514. // '功能:医嘱发送前调用。
  515. //'参数:strEndDate 医嘱发送的结束时间(如果医嘱为长嘱则需要此参数) 格式:2015-11-18 18:00:00
  516. //' rsData 从ZLHIS程序中组织传入,本次发送的所有医嘱,含以下字段。
  517. //' 病人ID
  518. //' 就诊ID 主页ID/挂号ID
  519. //' 挂号单 如果是门诊病人 病人挂号记录.NO;住院病为空。
  520. //' 医嘱ID 医嘱ID 病人医嘱记录.ID
  521. //' 相关ID 如果是主医嘱 该字段为0
  522. //' 收费细目ID
  523. //' 分解时间 医嘱执行分解的执行时间点格式:2015-11-18 12:00:00,2015-11-18 18:00:00,...
  524. //' 次数 执行数
  525. //' 单量
  526. //' 单量单位
  527. //' 总量
  528. //' 总量单位
  529. //' 场合 0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  530. //' strAdviceIDs 出参 本次不允许发送的医嘱ID串,用逗号分割,如:23423,3123,64563;
  531. //' strMsg 出参 提示信息。strMsg="" - 不提示;strMsg<>"" - ZLHIS程以 msgbox 方式弹出提示。
  532. //' 当提示信息过多时,msgbox方式提示信息显示不完成,可以将strMsg置空,在接口内部自定义提示信息的展示方式,例如:加一个模态窗体来显示提示信息。
  533. }
  534. public bool AdviceCheckApplyCustom(long lngSys, long lngModual, long lngPatiID, string lng就诊ID, long lng文件ID, string strXML, ref dynamic objWeb, long lng医嘱ID = 0, string strReserve = "")
  535. {
  536. // '功能:门诊住院自定义申请单检查表单数据
  537. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号
  538. //' lngPatiID=病人ID,lng就诊ID=门诊挂号单号,住院主页ID
  539. //' lng文件ID=申请单对应的病历文件列表.ID;lng医嘱ID 修改申请单时传入
  540. //' strXML=自定义申请单的XML数据
  541. //' objWeb=WebBrowser浏览器控件,可通过objWeb.document 对象访问网页表单数据进行检查
  542. //' strReserve=扩展参数
  543. //'示例-----------------------------------------------------------------------------
  544. //' Dim objXML As Object
  545. //'
  546. //' Set objXML = CreateObject("MSXML2.DOMDocument")
  547. //' If objXML Is Nothing Then
  548. //' MsgBox "创建MSXML2.DOMDocument对象失败", vbExclamation, Me.Caption
  549. //' Exit Function
  550. //' End If
  551. //' Call objXML.loadXML(strXML)
  552. //' On Error Resume Next
  553. //' objXML.selectSingleNode(".//" & "姓名").Text = mstr病人姓名
  554. //' Set vDoc = webSub.Document
  555. //' For i = 0 To vDoc.All.Length - 1
  556. //' If UCase(vDoc.All(i).tagName) = "INPUT" Or UCase(vDoc.All(i).tagName) = "SELECT" Then
  557. //' Set vtag = vDoc.All(i)
  558. //' If vtag.Type = "text" Or vtag.Type = "password" Or vtag.Type = "hidden" Or vtag.Type = "select-one" Then
  559. //' If vtag.Value = XXXX Then XXXXX
  560. //' End If
  561. //' End If
  562. //' Next
  563. //'---------------------------------------------------------------------------------
  564. return true;
  565. }
  566. public bool AdviceCheckSendFee(long lngSys, long lngModual, long lngPatientID, long lngClinicID, double cur合计, int int场合 = -1, string strReserve = "")
  567. {
  568. // '功能:医嘱发送前费用检查:检查通过返回true,检查不通过返回false
  569. //'参数:lngSys,lngModual = 当前调用接口的主程序系统号及模块号
  570. //' lngPatientID = 病人ID,
  571. //' lngClinicID = 就诊ID(挂号记录ID)/主页ID(住院调用时)
  572. //' cur合计 = 病人本次要发送医嘱的记帐金额合计,包含记帐划价单的金额
  573. //' int场合 = 调用场合:0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  574. //' strReserve = 保留参数,用于扩展使用
  575. return true;
  576. }
  577. public bool AdviceDeletBefor(long lngSys, long lngModual, long lngPatientID, long lngClinicID, long lngAdviceID, int int场合 = -1)
  578. {
  579. // '功能:医嘱删除前调用(返回False则取消删除医嘱)
  580. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号(1252=门诊医嘱下达,1253=住院医嘱下达)
  581. //' lngPatientID=病人ID,lngClinicID=就诊ID(挂号记录ID)/主页ID(住院调用时)
  582. //' lngAdviceID=病人医嘱记录.id
  583. //' int场合 调用场合:0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  584. return true;
  585. }
  586. public bool AdviceDeleted(long lngSys, long lngModual, long lngPatientID, long lngClinicID, long lngAdviceID, int int场合 = -1)
  587. {
  588. // '功能:医嘱删除后调用
  589. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号(1252=门诊医嘱下达,1253=住院医嘱下达)
  590. //' lngPatientID=病人ID,lngClinicID=就诊ID(挂号记录ID)/主页ID(住院调用时)
  591. //' lngAdviceID=病人医嘱记录.id
  592. //' int场合 调用场合:0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  593. return true;
  594. }
  595. public bool AdviceEditAfter(long lngSys, long lngModual, long lngPatientID, long lngClinicID, Recordset rsAdvice, int int场合 = -1)
  596. {
  597. // '功能:每输入完一条医嘱项目进行下一条医嘱输入时调用,或者在表格换行时调用(传入的医嘱是上一行的内容--新开或修改过的医嘱)
  598. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号(1252=门诊医嘱下达,1253=住院医嘱下达)
  599. //' lngPatientID=病人ID,lngClinicID=就诊ID(挂号记录ID)/主页ID(住院调用时)
  600. //' rsAdvice=当前录入的一条或一组医嘱记录(中药配方、成套方案、批量复制医嘱在输入时不调用)
  601. //' 字段为表“病人医嘱记录”的大部分字段,包括:ID, 相关id, 序号, 病人来源(1=门诊,2=住院), 病人id, 挂号单/主页ID,
  602. //' 姓名, 性别, 年龄, 婴儿, 医嘱状态, 医嘱期效, 诊疗类别, 诊疗项目id, 收费细目id, 天数, 单次用量, 总给予量, 医嘱内容, 医生嘱托, 标本部位,
  603. //' 检查方法 , 执行标记, 执行频次, 频率次数, 频率间隔, 间隔单位, 执行时间方案, 计价特性, 执行科室id, 执行性质, 紧急标志, 可否分零,
  604. //' 开始执行时间,执行终止时间(住院调用才有,没填时为cdate(0)), 病人科室id, 开嘱科室id, 开嘱医生, 开嘱时间, 挂号单, 前提id, 摘要
  605. //' ,除此之外,门诊调用时,还包含医嘱对应的诊断的疾病ID
  606. //' int场合=0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  607. return true;
  608. }
  609. public bool AdviceEnter(long lngSys, long lngModual, long lngPatientID, long lngClinicID, Recordset rsAdvice, int int场合 = -1)
  610. {
  611. // '功能:保存医嘱时(事务开始前)调用,返回False时不保存医嘱
  612. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号(1252=门诊医嘱下达,1253=住院医嘱下达)
  613. //' lngPatientID=病人ID,lngClinicID=就诊ID(挂号记录ID)/主页ID(住院调用时)
  614. //' rsAdvice=当前病人本次新开或修改的所有医嘱记录,字段同AdviceEnter接口的该参数,除此之外,门诊调用时,还包含医嘱对应的诊断的疾病ID
  615. //' 字段 EditState '1 - 新增,2-修改
  616. //' int场合=0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  617. return true;
  618. }
  619. public bool AdviceLoadApplyCustom(long lngSys, long lngModual, long lngPatiID, string lng就诊ID, long lng文件ID, string strXML, long lng医嘱ID = 0, string strReserve = "")
  620. {
  621. // '功能:门诊住院自定义申请单读取数据处理(XML处理)
  622. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号
  623. //' lngPatiID=病人ID,lng就诊ID=门诊挂号单号,住院主页ID
  624. //' lng文件ID=申请单对应的病历文件列表.ID;lng医嘱ID 修改申请单时传入
  625. //' strXML=自定义申请单的XML数据(出参)
  626. //' lng医嘱ID=修改和查看时,医嘱ID不为空,新开时为空
  627. //' strReserve=扩展参数
  628. //'示例-----------------------------------------------------------------------------
  629. //' Dim objXML As Object
  630. //'
  631. //' Set objXML = CreateObject("MSXML2.DOMDocument")
  632. //' If objXML Is Nothing Then
  633. //' MsgBox "创建MSXML2.DOMDocument对象失败", vbExclamation, Me.Caption
  634. //' Exit Function
  635. //' End If
  636. //' Call objXML.loadXML(strXML)
  637. //' On Error Resume Next
  638. //' objXML.selectSingleNode(".//" & "姓名").Text = mstr病人姓名
  639. //'---------------------------------------------------------------------------------
  640. return true;
  641. }
  642. public bool AdviceMakeFee(long lngSys, long lngModual, string strCurFee, Recordset rsNowFee, double dblCount, string strReserve = "")
  643. {
  644. // '功能:获取检查医嘱子医嘱行对应的费用收取次数,具体收几次费由接口内部处理,医嘱发送时调用
  645. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号
  646. //' strCurFee当前医嘱记录行对的相关信息,固定格式,用<sTab>分割,
  647. //' lng医嘱ID & "<sTab>" & lng当前医嘱ID & "<sTab>" & lng诊疗项目ID & "<sTab>" & lng收费项目ID & "<sTab>" & int收费方式 & "<sTab>" & str部位 & "<sTab>" & str方法 & "<sTab>" & (dbl总量 * dbl计价数量)
  648. //' rsNowFee 本次发送中已经处理的费用项目 包含的字段
  649. // '"医嘱ID", adBigInt '一组医嘱的ID
  650. // '"诊疗项目ID", adBigInt
  651. // '"收费项目ID", adBigInt
  652. // '"收费方式", adInteger
  653. // '"收费时间", adVarChar, 10
  654. // '"执行部门ID", adBigInt
  655. // '"子医嘱ID", adBigInt '相关ID不为空的医嘱行的医嘱ID
  656. // '"检查部位", adVarChar, 30
  657. // '"检查方法", adVarChar, 30
  658. // '"数量", adDouble '收费数量
  659. //' dblCount 出参数取值-1,0,>0;-1表示按主程序原有逻辑收取相当于是正常收费、为0表示本次不用收取、>0表示本次收费次数
  660. //' strReserve 保留扩展参数
  661. //'特殊说明,rsNowFee 记录集只能读取不能修改删除
  662. return true;
  663. }
  664. public bool AdviceRevoked(long lngSys, long lngModual, long lngPatientID, long lngClinicID, long lngAdviceID, int int场合 = -1)
  665. {
  666. // '功能:医嘱作废后调用,一条医嘱调用一次
  667. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号(1252=门诊医嘱下达,1253=住院医嘱下达)
  668. //' lngPatientID=病人ID,lngClinicID=就诊ID(挂号记录ID)/主页ID(住院调用时)
  669. //' lngAdviceID=病人医嘱记录.id
  670. //' int场合 调用场合:0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  671. return true;
  672. }
  673. public bool AdviceRevokedBefore(long lngSys, long lngModual, long lngPatientID, long lngClinicID, long lngAdviceID, int int场合, string strMsg, string strReserve = "")
  674. {
  675. // '功能:医嘱作废前调用,一条医嘱调用一次
  676. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号(1252=门诊医嘱下达,1253=住院医嘱下达)
  677. //' lngPatientID=病人ID,lngClinicID=就诊ID(挂号记录ID)/主页ID(住院调用时)
  678. //' lngAdviceID=病人医嘱记录.id
  679. //' int场合 调用场合:0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  680. //' strMsg 提示信息,接口内部组织返回给主程序进行提示,空串则不提示
  681. //' strReserve 扩展参数
  682. //'返回:true允许作废,false不能作废
  683. return true;
  684. }
  685. public bool AdviceRollSend(long lngSys, long lngModual, long lngPatientID, long lngClinicID, long lngAdviceID, int int场合, string strMsg, string strReserve = "")
  686. {
  687. // '功能:医嘱回退发送后调用,一条医嘱调用一次
  688. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号(1252=门诊医嘱下达,1253=住院医嘱下达)
  689. //' lngPatientID=病人ID,lngClinicID=就诊ID(挂号记录ID)/主页ID(住院调用时)
  690. //' lngAdviceID=病人医嘱记录.id
  691. //' int场合 调用场合:0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  692. //' strMsg 提示信息,接口内部组织返回给主程序进行提示,空串则不提示
  693. //' strReserve 扩展参数
  694. return true;
  695. }
  696. public bool AdviceRollSendBefore(long lngSys, long lngModual, long lngPatientID, long lngClinicID, long lngAdviceID, int int场合, string strMsg, string strReserve = "")
  697. {
  698. // '功能:医嘱回退发送前调用,一条医嘱调用一次
  699. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号(1252=门诊医嘱下达,1253=住院医嘱下达)
  700. //' lngPatientID=病人ID,lngClinicID=就诊ID(挂号记录ID)/主页ID(住院调用时)
  701. //' lngAdviceID=病人医嘱记录.id
  702. //' int场合 调用场合:0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  703. //' strMsg 提示信息,接口内部组织返回给主程序进行提示,空串则不提示
  704. //' strReserve 扩展参数
  705. //'返回:true允许回退,false不能回退
  706. return true;
  707. }
  708. public bool AdviceRowChange(long lngSys, long lngModual, long lngPatientID, long lngClinicID, Recordset rsAdvice, int int场合 = -1)
  709. {
  710. // '功能:医嘱编辑时切换医嘱行时(医嘱编辑界面医嘱表格行变换)调用
  711. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号(1252=门诊医嘱下达,1253=住院医嘱下达)
  712. //' lngPatientID=病人ID,lngClinicID=就诊ID(挂号记录ID)/主页ID(住院调用时)
  713. //' rsAdvice=当前病人本次新开的所有医嘱记录,字段同AdviceEnter接口的该参数,除此之外,门诊调用时,还包含医嘱对应的诊断的疾病ID
  714. //' int场合=0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  715. return true;
  716. }
  717. public bool AdviceSaveApplyCustom(long lngSys, long lngModual, long lngPatiID, string lng就诊ID, long lng文件ID, string strXML, ref dynamic objWeb, long lng医嘱ID = 0, string strReserve = "")
  718. {
  719. // '功能:门诊住院自定义申请单保存数据处理(XML处理)
  720. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号
  721. //' lngPatiID=病人ID,lng就诊ID=门诊挂号单号,住院主页ID
  722. //' lng文件ID=申请单对应的病历文件列表.ID;lng医嘱ID 修改申请单时传入
  723. //' strXML=自定义申请单的XML数据(出参)
  724. //' objWeb=WebBrowser浏览器控件,可通过objWeb.document 对象访问网页表单数据进行检查
  725. //' strReserve=扩展参数
  726. //'示例-----------------------------------------------------------------------------
  727. //' Dim objXML As Object
  728. //'
  729. //' Set objXML = CreateObject("MSXML2.DOMDocument")
  730. //' If objXML Is Nothing Then
  731. //' MsgBox "创建MSXML2.DOMDocument对象失败", vbExclamation, Me.Caption
  732. //' Exit Function
  733. //' End If
  734. //' Call objXML.loadXML(strXML)
  735. //' On Error Resume Next
  736. //' objXML.selectSingleNode(".//" & "姓名").Text = mstr病人姓名
  737. //' Set vDoc = webSub.Document
  738. //' For i = 0 To vDoc.All.Length - 1
  739. //' If UCase(vDoc.All(i).tagName) = "INPUT" Or UCase(vDoc.All(i).tagName) = "SELECT" Then
  740. //' Set vtag = vDoc.All(i)
  741. //' If vtag.Type = "text" Or vtag.Type = "password" Or vtag.Type = "hidden" Or vtag.Type = "select-one" Then
  742. //' If vtag.Value = XXXX Then XXXXX
  743. //' End If
  744. //' End If
  745. //' Next
  746. //'---------------------------------------------------------------------------------
  747. return true;
  748. }
  749. public bool AdviceSendEnd(long lngSys, long lngModual, string strSendIDs)
  750. {
  751. // '功能:一次发送医嘱完成后调用
  752. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号(1252=门诊医嘱下达(门诊没有“发送”模块),1254=住院医嘱发送)
  753. //' strSendIDs 发送号可能有多个,用逗号分割
  754. return true;
  755. }
  756. public bool BeforeEMRDocSave(long lngSource, long lngPatiID, long lngPageID, long lngFileId, string strTitle, string strContent, params dynamic[] arrInput)
  757. {
  758. // '功能:电子病历保存前调用
  759. //'参数:lngSource 1 门诊 2 住院
  760. //' lngPatientID=病人ID,lngPageId=就诊ID/
  761. //' lngFileId=病历文件列表.id
  762. //' arrInput是数组:扩展参数用于扩展使用,通过下标访一直接问时可能会报两种错,9-下标越界/13-类型不匹配:均表示参数没有传入
  763. //' 所以访问参数前应先判断:If TypeName(arrInput(i)) <> "Error" Then 满足这个条件后才使用这个参数,否则就认为这个参数没有传入
  764. //' arrInput 目前未传入任何参数
  765. return true;
  766. }
  767. public bool BeforeVitalSignsSave(long lng病人ID, long lng主页ID, long lng文件ID, string strDataXML)
  768. {
  769. // '---------------------------------------------------------------------------------------------------------------------------------------------
  770. //'功能:体温单记录保存时调用此接口,接口返回成功体温单/记录单数据才允许保存
  771. //'入参:
  772. //' lng病人ID:病人ID
  773. //' lng主页ID:主页ID
  774. //' lng文件ID:护理文件ID
  775. //' strDataXML:数据XML串,格式如下:
  776. // '<DATALIST>
  777. // ' <ITEMLIST>
  778. // ' <FSSJ>2019-6-12 15:34</FSSJ>
  779. // ' <ITEM>
  780. // ' <XMXH>1</XMXH>
  781. // ' <XMMC>体温</XMMC>
  782. // ' <DATA>37.5</DATA>
  783. // ' <BW>腋温</BW>
  784. // ' </TEIM>
  785. // ' <ITEM>
  786. // ' <XMXH>2</XMXH>
  787. // ' <XMMC>脉搏</XMMC>
  788. // ' <DATA>110</DATA>
  789. // ' <BW></BW>
  790. // ' </TEIM>
  791. // ' .......
  792. // ' <ITEMLIST>
  793. // ' <ITEMLIST>
  794. // ' <FSSJ>2019-6-12 14:34</FSSJ>
  795. // ' <ITEM>
  796. // ' <XMXH>1</XMXH>
  797. // ' <XMMC>体温</XMMC>
  798. // ' <DATA>37</DATA>
  799. // ' <BW>腋温</BW>
  800. // ' </TEIM>
  801. // ' <ITEM>
  802. // ' <XMXH>2</XMXH>
  803. // ' <XMMC>脉搏</XMMC>
  804. // ' <DATA>120</DATA>
  805. // ' <BW></BW>
  806. // ' </TEIM>
  807. // ' .......
  808. // ' <ITEMLIST>
  809. // ' .........
  810. // '</DATALIST>
  811. //'出参:
  812. //'返回:成功返回true,否则返回Fale
  813. //'编制:刘鹏飞
  814. //'日期:2019-6-12 15:34
  815. return true;
  816. }
  817. public bool ChargeDeleteAndStrictValied(long lngModule, int int记录性质, bool bln门诊, bool bln划价单, string strNos)
  818. {
  819. // '功能:检查删除划价单或对收费进行退费、和记帐,检查保存数据的合法性
  820. //'入参:lngModule-模块号
  821. //' int记录性质-1-收费单;2-记帐单
  822. //' bln划价单-是否当前是保存的划价单
  823. //' strNOs-格式1:NO1:序号1,序号2,||NO2:序号1,序号2
  824. //' 络式2:NO1||NO2:序号1,序号2||...
  825. //' 络式3:NO1||NO2||...
  826. //'出参:
  827. //'返回:成功返回true,否则返回Fale
  828. return true;
  829. }
  830. public void ChargeSaveAfter(long lngSys, long lngModual, long lngPatientID, long lng主页ID, bool bln门诊, int int记录性质, string strNos)
  831. {
  832. // '功能:在保存记帐、收费单后(事务结束后)调用
  833. //'入参:lngSys,lngModual=当前调用接口的主程序系统号及模块号
  834. //' lng病人ID(记帐表时,传入0)
  835. //' lng主页ID(记帐表时,传入0)
  836. //' bln门诊 -是否门诊费用
  837. //' int记录性质-1-收费;2-记帐
  838. //' strNO-单据号
  839. }
  840. public bool ChargeSaveValied(long lngSys, long lngModual, long int记录性质, bool bln门诊, bool bln划价单, string strNos, Recordset rsSaveItems)
  841. {
  842. // '功能:收费合法性检查
  843. //'入参:lngSys,lngModual=当前调用接口的主程序系统号及模块号
  844. //' int记录性质
  845. //' bln门诊
  846. //' --是否门诊费用
  847. //' bln划价单
  848. //' strNOs-门诊收费时,传入的划价单号(对本次收费的划价单号)
  849. //' rsSaveItems
  850. //' --当前保存的项目集,字段:病人ID,主页ID,单据序号, 序号,价格父号,收费细目ID,收入项目id,付数 ,数次,标准单价,应收金额 ,
  851. //' 实收金额,发生时间,项目编码,项目名称,费用类别,开单部门ID,开单人,执行部门ID
  852. return true;
  853. }
  854. public bool CheckChargeItem(long lngSys, long lngModule, int intType, int intMode, Recordset rsDetail, string strExpend = "")
  855. {
  856. // '功能:收费项目有效性检查
  857. //'入参:lngSys,lngModual=当前调用接口的主程序系统号及模块号
  858. //' intType:0-门诊;1-住院
  859. //' intMode:0-录入明细时的常规检查;1-保存单据前的汇总检查
  860. //' rsDetail-病人ID,主页ID,收费类别,收费细目ID,数量,单价,实收金额,开单人,开单科室,
  861. //' 执行科室ID, 单据性质(1-收费单,2-记帐单), 是否划价(1-划价;0-正常的收费及记帐单)
  862. //' strExpend-待以后扩展,暂无用
  863. //'出参:strExpend-待以后扩展,暂无用
  864. //'返回:数据合法返回true,否则返回False
  865. return true;
  866. }
  867. public bool CheckMecInfo(long lngSys, long lngModule, long lngPatiID, long lngPageID, dynamic colCtl, string strMsg, string strReserve = "")
  868. {
  869. //'功能:首页输入有效性检查
  870. //'返回:True是成功,False是失败
  871. //'参数:strMsg 返回参数 格式 例: 提示消息-(提醒:1/禁止:0)|控件Key值-提示消息-(提醒:1/禁止:0)|表格控件Key值-提示消息-(提醒:1/禁止:0)-Row-Col
  872. //' strReserve=保留参数,用于扩展使用 固定格式,用<sTab>分割,
  873. //' lngType执行 & "<sTab>" &...& "<sTab>" & ... & "<sTab>"
  874. //' lngSys,lngModual=当前调用接口的主程序系统号及模块号
  875. //' colCtl 病案首页控件集合
  876. //' lngPageID-主页ID;
  877. //'------------------------------------------------------------colCtl控件集合Key值--------------------------------------------------------------
  878. //'结构化地址控件:出生地点(结构化), 籍贯(结构化), 现住址(结构化), 户口地址(结构化), 联系人地址(结构化),单位地址(结构化)
  879. //'结构化地址控件[属性]:value省,value市,value区县,value乡镇,value详细地址
  880. //'文本框:出生地点, 籍贯, 现住址, 户口地址, 联系人地址, 病人区域, 单位地址, 病案号, 档案号, X线号, 姓名, 其他证件, 联系人姓名, 入院科室, 入院病房,
  881. //' 出院科室, 出院病房, 医保号, 摘要, 门诊号, 监护人, 发病地址, 医学警示, 其他医学警示, 病理号, 死亡原因, 病原学诊断, 抢救病因, 输其他,
  882. //' 转入医疗机构, 31天内再住院, 转科1, 转科2, 转科3, 退出原因, 变异原因, 重症监护室名称, 肿瘤T, 肿瘤N, 肿瘤M, Email, 其他会诊, 引发药物,
  883. //' 临床表现, 透析尿素氮值, 其他关系, 入院转入, 单位电话, 单位邮编, 家庭电话, 家庭邮编, 户口邮编, 身高, 身高单位, 体重, 体重单位, 体温,
  884. //' 入院次数, 收缩压, 舒张压, 联系人电话, 年龄, 婴幼儿年龄, 新生儿出生体重, 新生儿入院体重, 住院天数, 住院号, 抢救次数, 成功次数, 特护,
  885. //' 一级护理, 二级护理, 三级护理, ICU, CCU, 输红细胞, 输血小板, 输血浆, 输全血, 自体回收, 呼吸机使用, 昏迷时间入院前_天, 昏迷时间入院前_小时,
  886. //' 昏迷时间入院前_分钟, 昏迷时间入院后_天, 昏迷时间入院后_小时, 昏迷时间入院后_分钟, 随诊期限, 费用和, 约束总时间, 重症监护天, 重症监护小时,
  887. //' Apgar , QQ, 输白蛋白, 院内会诊, 外院会诊, 距上次住院时间,婴幼儿年龄_DAY,GC_监护人身份证号
  888. //'下拉框: 门诊医师 , 科主任, 主任或副主任, 进修医师, 主治医师, 住院医师, 研究生医师, 实习医师, 质控医师, 质控护士, 责任护士, 编目员, 主诊医师, 随诊期限(下拉)
  889. //' 付款方式, 性别, 婚姻, 职业, 国籍, 民族, 关系, 入院途径, 文化程度, 去向, 感染与死亡关系, 入院情况, 分化程度, 最高诊断依据, 门诊与出院XY,入院与出院XY,
  890. //' 门诊与入院, 术前与术后, 放射与病理, 临床与病理, 死亡期间, 临床与尸检, 门诊与出院ZY, 入院与出院ZY, 辩证, 治法, 方药, 治疗类别, 中医诊疗设备, 抢救方法,
  891. //' 中医诊疗技术, 自制中药制剂, 辨证施护, 病案质量, 病例分型, HBsAg, 血型, HCVAb, RH, HIVAb, 输液反应, 输血反应, 输血前9项检查, 生育状况, 出院方式,
  892. //' 再入院计划天数, 压疮发生期间, 压疮分期, 跌倒或坠床伤害, 跌倒或坠床原因, 距上次住院时间(下拉), 重返间隔时间, 约束方式, 约束工具, 约束原因,
  893. //' 新生儿离院方式 , 肿瘤分期, 临床路径管理, 法定传染病, 实施DGRS管理, 死亡患者尸检, 身份证, 变异原因(下拉), 健康卡号, 年龄(下拉), 婴幼儿年龄(下拉),联系人身份证
  894. //'时间控件: 出生日期 , 入院时间, 出院时间, 确诊日期, 死亡时间, 发病日期, 发病时间, 质控日期, 编目日期, 收回日期, 入科时间
  895. //'复选框: 再入院 , 入院前外院治疗, 是否确诊, 病原学检查, 新发肿瘤, 危重, 急症, 疑难, 示教病案, 科研病案, 疑难病例, 随诊, CT, MRI, 彩色多普勒,
  896. //' 传染病上传, 围术期死亡, 术后猝死, 进入路径, 完成路径, 变异, 住院出现危重, 是否同一疾病, 人工气道脱出, 重返重症医学科, 住院物理约束, 单病种管理,
  897. //' 细菌标本送检 , 会诊情况, 无过敏记录, 未找到时自由录入,无手术记录,无重症监护记录,无转科记录
  898. //'单选按钮: 再住院无 , 再住院有, 初诊, 复诊, ICU无, ICU有, XY按诊断输入, XY按疾病编码输入, ZY按诊断输入, ZY按疾病编码输入, 按诊断输入,
  899. //' 按疾病编码输入, 按药品目录输入, 按过敏源输入
  900. //'VS表格: 转科情况 (表格), 西医诊断(表格), 中医诊断(表格), 过敏信息(表格), 手术记录(表格), 住院费用(表格), 化疗记录信息(表格), 放疗记录信息(表格),
  901. //' 抗菌药物使用情况(表格), 抗精神病治疗情况(表格), 重症监护情况(表格), 病案附加项目(表格), 特殊检查情况(表格),器械导管使用情况(表格),病人感染记录(表格),
  902. //' 感染部位(表格),病人病原学检查(表格)
  903. //'list列表控件: 不良事件(表格), 感染因素(表格)
  904. //'树形表控件: 住院费用(树形表)
  905. //'------------------------------------------------------------表格控件列枚举--------------------------------------------------------------------
  906. //'过敏信息列枚举 : 过敏药物=0 ,过敏反应=1 ,过敏时间=2 ,过敏源编码=3 ,药物ID=4 ,过敏来源=5
  907. //'(西医诊断/中医诊断)列枚举 : 诊断类型=0 ,关联=1 ,诊断编码=2 ,诊断描述=3 ,中医证候=4 ,发病时间=5 ,备注=6 ,入院病情=7 ,出院情况=8 ,ICD附码=9 ,是否未治=10
  908. //' 是否疑诊=11 ,增加=12 ,Del=13 ,诊断ID=14 ,疾病ID=15 ,证候ID=16 ,医嘱IDs=17 ,诊断分类=18 ,固定附码=19 ,是否病人=20
  909. //' 诊断来源=24 ,疾病编码=25 ,疾病类别=26 ,证候编码=27 ,记录日期=28 ,记录人员=29 ,疗效限制=21 ,分娩信息=22 ,附码ID=23
  910. //'手术列枚举 : Copy=0 ,手术日期=1 ,结束日期=2 ,抗菌用药时间=3 ,手术情况=4 ,准备天数=5 ,手术编码=6 ,手术名称=7 ,再次手术=8 ,主刀医师=9 ,助产护士=10 ,助手1=11
  911. //' 助手2=12 ,麻醉开始时间=13 ,麻醉类型 (界面名称麻醉方式)= 14 ,ASA分级=15 ,NNIS分级=16 ,手术级别=17 ,麻醉医师=18 ,切口愈合=19 ,切口部位=20 ,重返手术室计划=21
  912. //' 重返手术室目的=22 ,切口感染=23 ,并发症=24 ,预防用抗菌药=25 ,抗菌药天数=26 ,非预期的二次手术=27 ,麻醉并发症=28 ,术中异物遗留=29 ,手术并发症=30 ,术后出血或血肿=31
  913. //' 手术伤口裂开=32 ,术后深静脉血栓=33 ,术后生理代谢紊乱=34 ,术后呼吸衰竭=35 ,术后肺栓塞=36 ,术后败血症=37 ,术后髋关节骨折=38 ,手术操作ID=39 ,诊疗项目ID=40 ,麻醉ID=41
  914. //' 麻醉方式(界面名称麻醉类型)=42 ,手麻来源=43
  915. //'化疗列枚举 : 化学治疗编码=0 ,开始日期=1 ,结束日期=2 ,疗程数=3 ,化疗方案=4 ,总量=5 ,化疗效果=6 ,疾病ID=7
  916. //'放疗列枚举 : 放射治疗编码=0 ,开始日期=1 ,结束日期=2 ,设野部位=3 ,放射剂量=4 ,累计量=5 ,放疗效果=6 ,疾病ID=7
  917. //'精神药品列枚举 : 药物名称=0 ,疗程=1 ,最高日量=2 ,特殊反应=3 ,疗效=4 ,药品ID=5
  918. //'重症监护枚举 : 序号=0 ,监护室名称=1 ,进入时间=2 ,退出时间=3 ,再入住计划=4 ,再入住原因=5
  919. //'重症监护器械枚举 : ICU类型=0 ,器械及导管=1 ,开始时间=2 ,结束时间=3 ,感染累计小时=4
  920. //'医院感染枚举 : 确诊日期=0 ,感染部位=1 ,医院感染名称=2 ,医院感染编码=3
  921. //'标本来源枚举 : 标本=0 ,病原学代码及名称=1 ,送检日期=2
  922. //'抗菌药枚举 : 序号=0 ,抗菌药物名=1 ,用药目的=2 ,使用阶段=3 ,使用天数=4 ,一类切口预防用=5 ,DDD数=6 ,联合用药=7
  923. //'---------------------------------------------------------------------------------------------------------------------------------------------
  924. //'使用itemData的控件:
  925. //'涉及动态加载下拉框: 用于存储数据的id
  926. //'不良事件 (表格), 感染因素(表格): 用于存储数据的编码
  927. //'使用rowdata的控件:
  928. //'过敏信息 (表格), 西医诊断(表格), 中医诊断(表格), 手术记录(表格): 用于存储数据的id
  929. //'化疗记录信息 (表格), 重症监护情况(表格), 放疗记录信息(表格), 抗精神病治疗情况(表格): 用于存储数据的序号
  930. //'抗菌药物使用情况 (表格): 用于存储数据的药名id
  931. return true;
  932. }
  933. public bool CheckPathInItem(long lngSys, long lngModual, long lngPatientID, long lngClinicID, Recordset rsAdvice, long lng路径项目ID, string str分类, int int场合 = -1, string strReserve = "")
  934. {
  935. // '功能:对临床路径病人下医嘱时,传入当前下达的医嘱信息,由接口内部判断是否为路径外项目
  936. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号(1252=门诊医嘱下达,1253=住院医嘱下达)
  937. //' lngPatientID=病人ID,lngClinicID=就诊ID(挂号记录ID)/主页ID(住院调用时)
  938. //' rsAdvice=当前录入的一条或一组医嘱记录(中药配方、成套方案、批量复制医嘱在输入时不调用)
  939. //' 字段为表“病人医嘱记录”的大部分字段,包括:ID, 相关id, 序号, 病人来源(1=门诊,2=住院), 病人id, 挂号单/主页ID,
  940. //' 姓名, 性别, 年龄, 婴儿, 医嘱状态, 医嘱期效, 诊疗类别, 诊疗项目id, 收费细目id, 天数, 单次用量, 总给予量, 医嘱内容, 医生嘱托, 标本部位,
  941. //' 检查方法 , 执行标记, 执行频次, 频率次数, 频率间隔, 间隔单位, 执行时间方案, 计价特性, 执行科室id, 执行性质, 紧急标志, 可否分零,
  942. //' 开始执行时间,执行终止时间(住院调用才有,没填时为cdate(0)), 病人科室id, 开嘱科室id, 开嘱医生, 开嘱时间, 挂号单, 前提id, 摘要
  943. //' ,除此之外,门诊调用时,还包含医嘱对应的诊断的疾病ID
  944. //' int场合=0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  945. //' strReserve=保留参数,用于扩展使用
  946. //' lng路径项目ID , str分类:即做为入参数,也当做出参影响主程序判断。 当传入的传不为0和空值,表示主程序已经匹配成功能,接口内部仍可以对参数赋值设为不匹配。如果要保留ZLHIS主程序判断结果,则原值返回。
  947. //' 1.当前接判断为不是路径外项目时,则返回 路径项目ID和分类名称,lng路径项目ID - 病人路径执行.项目id,str分类 - 临床路径项目.分类
  948. //' 2.当前接判断为是路径外项目时,则返回0和空串,lng路径项目ID=0,str分类=""
  949. return true;
  950. }
  951. public bool ClinicFinish(long lngSys, long lngModual, long lngPatientID, long lngClinicID)
  952. {
  953. // '功能:病人完成接诊后调用
  954. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号
  955. //' lngPatientID=病人ID,lngClinicID=就诊ID(挂号记录ID)
  956. return true;
  957. }
  958. public bool ClinicReceive(long lngSys, long lngModual, long lngPatientID, long lngClinicID)
  959. {
  960. // '功能:病人接诊操作后调用
  961. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号
  962. //' lngPatientID=病人ID,lngClinicID=就诊ID(挂号记录ID)
  963. return true;
  964. }
  965. public bool CommitPatiInfo(string str卡号, Recordset rsInfo)
  966. {
  967. // '功能:提交发卡信息
  968. //'入参:str卡号-卡号
  969. //' rsInfo-返回的病人信息集(直接更新该表,字段为:病人ID,姓名,性别,年龄,出生日期,出生地点,身份证号,其他证件,身份,职业,家庭地址,家庭电话,家庭邮编,工作单位,单位邮编,医保号,医疗付款方式,费别,国籍,民族,婚姻状况,区域)
  970. //'返回:调用成功,返回true,否则返回False
  971. //'编制:刘兴洪
  972. //'日期:2011-06-10 17:33:19
  973. //'说明:准格尔旗区域卫生系统接口(提交发卡信息)
  974. //'问题:38841
  975. return true;
  976. }
  977. public bool CreateMecOK()
  978. {
  979. // '功能:病案部件创建与检查
  980. return true;
  981. }
  982. public bool DiagnosisDeleted(long lngSys, long lngModual, long lngPatientID, long lngClinicID, long lngDiagID, string strDiagDesc, int int场合 = -1)
  983. {
  984. // '功能:门诊病案中删除诊断后调用
  985. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号
  986. //' lngPatientID=病人ID,lngClinicID=就诊ID(挂号记录ID)
  987. //' lngDiagID=诊断ID或疾病ID(根据系统参数决定),strDiagDesc=诊断描述
  988. //' int场合=0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  989. return true;
  990. }
  991. public bool DiagnosisEnter(long lngSys, long lngModual, long lngPatientID, long lngClinicID, long lngDiagID, string strDiagDesc, long lng原诊断id, int int场合 = -1)
  992. {
  993. // '功能:门诊病案中输入主要诊断后调用
  994. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号
  995. //' lngPatientID=病人ID,lngClinicID=就诊ID(挂号记录ID)
  996. //' lngDiagID=诊断ID或疾病ID(根据系统参数决定),strDiagDesc=诊断描述
  997. //' lng原诊断id=0 表示新添加的诊断, 不为0表示修改诊断,lng原诊断id的值就是修改前的 诊断ID或疾病ID
  998. //' int场合=0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  999. return true;
  1000. }
  1001. public bool DiagnosisEnterIn(long lngSys, long lngModual, long lngPatientID, long lngClinicID, long lngDiagID, string strDiagDesc, long lng原诊断id,
  1002. int int场合 = -1, int int诊断类型 = 0, int int诊断次序 = 0, string strReserve = "")
  1003. {
  1004. // '功能:住院病案中输入诊断后调用
  1005. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号
  1006. //' lngPatientID=病人ID,lngClinicID=主页ID
  1007. //' lngDiagID=诊断ID或疾病ID(根据系统参数决定),strDiagDesc=诊断描述
  1008. //' lng原诊断id=0 表示新添加的诊断, 不为0表示修改诊断,lng原诊断id的值就是修改前的诊断ID或疾病ID
  1009. //' int场合=0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  1010. //' int诊断类型=1-西医门诊诊断;2-西医入院诊断;3-出院诊断(其他诊断);5-院内感染;6-病理诊断;7-损伤中毒码;10-并发症
  1011. //' int诊断次序=诊断类型下的顺序号
  1012. //' strReserve=扩展参数
  1013. return true;
  1014. }
  1015. public bool DiagnosisOtherEnter(long lngSys, long lngModual, long lngPatientID, long lngClinicID, long lngDiagID, string strDiagDesc, long lng原诊断id, int int场合 = -1)
  1016. {
  1017. // '功能:门诊病案中输入次要诊断后调用
  1018. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号
  1019. //' lngPatientID=病人ID,lngClinicID=就诊ID(挂号记录ID)
  1020. //' lngDiagID=诊断ID或疾病ID(根据系统参数决定),strDiagDesc=诊断描述
  1021. //' lng原诊断id=0 表示新添加的诊断, 不为0表示修改诊断,lng原诊断id的值就是修改前的 诊断ID或疾病ID
  1022. //' int场合=0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  1023. return true;
  1024. }
  1025. public bool DrugBeforeSendByRecipe(long lng库房ID, string strNos, string strReserve = "")
  1026. {
  1027. // '功能:药品处方发药前调用,按处方发药
  1028. //'参数:lng库房ID 库房ID;
  1029. //' strNOs 一次发药可能多个处方,处方类型和处方号,格式;单据,NO|单据,NO...
  1030. //' strReserve=扩展参数
  1031. //' 返回:True-继续发药,False-不继续发药
  1032. return true;
  1033. }
  1034. public bool DrugBeforeSendBySumID(long lng库房ID, string str收发ids, string strReserve = "")
  1035. {
  1036. // '功能:药品部门发药前调用,按收发id传送,主要通过收发ID来获取其他信息
  1037. //'参数:lng库房ID 库房ID;
  1038. //' str收发ids 收发id串,收发id1,收发id2...
  1039. //' strReserve=扩展参数
  1040. //' 返回:True-继续发药,False-不继续发药
  1041. return true;
  1042. }
  1043. public bool DrugDosageByRecipe(long lng库房ID, string strNos, DateTime dteSendTime, string strReserve = "")
  1044. {
  1045. // '功能:药品处方配药后调用,按处方配药
  1046. //'参数:lng库房ID 库房ID;
  1047. //' strNOs 一次配药可能多个处方,处方类型和处方号,格式;单据,NO|单据,NO...
  1048. //' dteSendTime 配药时间,加上时间用于区别是哪次配药;
  1049. //' strReserve=扩展参数
  1050. return true;
  1051. }
  1052. public bool DrugListWork(int intType, string str药品IDs, string strReserve = "")
  1053. {
  1054. // '功能:药品目录通用业务接口
  1055. //' 在完成药品目录中药品规格主要业务功能后调用该接口(增删改停用启用)
  1056. //'参数:intType:业务类型,0-新增,1-修改,2-删除,3-停用,4-启用
  1057. //' str药品IDs :药品id串,格式“药品id1,药品id2,...”
  1058. //' strReserve=扩展参数
  1059. //'说明:业务类型=2修改时,正常情况是规格属性发生变化,也可能是因为该规格对应的品种属性修改,具体查询后比对
  1060. //' 业务类型=3删除时,该接口是在ZLHIS功能执行后调用,在事务不同步情况下该药品已经在ZLHIS中删除了
  1061. return true;
  1062. }
  1063. public bool DrugReturnByID(long lng库房ID, string strIDs, DateTime dteSendTime, string strReserve = "")
  1064. {
  1065. // '功能:药品退药后调用,处方发药/部门发药业务都适用
  1066. //'参数:lng库房ID 库房ID;
  1067. //' strIDs 一次退药操作可能退多个药品记录,格式;收发id,退药数量|收发id,退药数量...
  1068. //' dteSendTime 退药时间,一条收发id可能退多次,加上时间可以用于区别是哪次退药;
  1069. //' strReserve=扩展参数
  1070. return true;
  1071. }
  1072. public bool DrugSendByRecipe(long lng库房ID, string strNos, DateTime dteSendTime, string strReserve = "")
  1073. {
  1074. // '功能:药品处方发药后调用,按处方发药
  1075. //'参数:lng库房ID 库房ID;
  1076. //' strNOs 一次发药可能多个处方,处方类型和处方号,格式;单据,NO|单据,NO...
  1077. //' dteSendTime 发药时间,可能一个处方退药了之后再发,加上时间用于区别是哪次发药;
  1078. //' strReserve=扩展参数
  1079. return true;
  1080. }
  1081. public bool DrugSendBySumID(long lng库房ID, string strSumNO, string strReserve = "")
  1082. {
  1083. // '功能:药品部门发药后调用,按收发id发药
  1084. //'参数:lng库房ID 库房ID;
  1085. //' strSumNO 汇总发药号
  1086. //' strReserve=扩展参数
  1087. return true;
  1088. }
  1089. public bool DrugSendCustomCheck(string str收发ids, string str返回收发ids, string strReserve = "")
  1090. {
  1091. // '功能:药品部门发药主界面调用,按收发id传送,主要通过收发ID来获取其他信息
  1092. //'参数:
  1093. //' str收发ids=收发id串,收发id1,收发id2...
  1094. //' str返回收发ids=返回主界面的收发ids,用来控制界面数据是否发药,默认返回的收发ids不发药
  1095. //' strReserve=扩展参数
  1096. //' 返回:True-继续发药,False-不继续发药
  1097. return true;
  1098. }
  1099. public bool DrugSendCustomCheckSet(string strFunName)
  1100. {
  1101. // '功能:药品部门发药,自定义审核功能。返回true时部门发药主界面开启自定义审核功能按钮
  1102. //'参数:strFunName:可以自定义功能名称,返回作为主界面工具栏按钮的名称
  1103. //'返回:false-不启用,true-启用
  1104. return true;
  1105. }
  1106. public bool DrugSendWorkNormal(long lngModual, string strFuncName, long lng库房ID, string strNO, int int单据, string strReserve = "")
  1107. {
  1108. // '功能:药品发药业务调用
  1109. //'参数:lngModual 模块号;
  1110. //' strFuncName 功能名称;
  1111. //' lng库房ID 库房ID;
  1112. //' strNO 单据号;
  1113. //' int单据 单据类型;
  1114. //' strReserve=扩展参数
  1115. //'例:药品业务调用接口,传入库房ID,NO号,单据类型
  1116. return true;
  1117. }
  1118. public bool DrugStuffWork(int intType, long lng库房ID, string strNO, int int单据, string strDate = "", string strReserve = "")
  1119. {
  1120. // '功能:药品卫材流通通用业务接口
  1121. //' 在完成流通主要业务功能后调用该接口(删除业务是在之前调用)
  1122. //'参数:intType:业务类型,0-新增,1-修改,2-删除,3-审核,4-冲销
  1123. //' lng库房ID :库房ID
  1124. //' strNO:单据号
  1125. //' int单据:单据类型
  1126. //' 药品:0-计划;1-外购入库;2-自制入库;3-协药入库;4-其他入库;6-库房移出;7-部门领用;11-其他出库;12-盘点;
  1127. //' 卫材:0-计划;15-材料外购入库,16-材料自制入库,17-材料其他入库,19-材料移库,20-部门材料领用,21-材料其他出库,22-材料盘点
  1128. //' strDate:单据日期,只有冲销时传入(因为允许部分冲销,用时间来区分本次冲销的是哪些数据,如果不传就是不允许部分冲销)
  1129. //' strReserve=扩展参数
  1130. //'说明:1)根据传入的单据区分药品卫材和具体的业务类型
  1131. //' 2)该接口可以通用于药品卫材所有的流通(包括计划,不包括发药/发料)的单据主要业务功能(增删改,审核,冲销),目前实现的功能如下
  1132. //' 3)10.35.120 在药品申领、移库、外购、其他入库、其他出库、领用、盘点的审核功能中调用了接口
  1133. return true;
  1134. }
  1135. public bool DrugStuffWorkNoramal(long lngModual, string strFuncName, long lng库房ID, string strNO, int int单据, string strReserve = "")
  1136. {
  1137. // '功能:药品卫材流通管理业务调用
  1138. //'参数:lngModual 模块号;
  1139. //' strFuncName 功能名称;
  1140. //' lng库房ID 库房ID;
  1141. //' strNO 单据号;
  1142. //' int单据 单据类型;
  1143. //' strReserve=扩展参数
  1144. //'例:卫材外购入库调用接口,传入库房ID,NO号,单据类型
  1145. //' 计划管理,单据类型=0
  1146. return true;
  1147. }
  1148. public long EMPI_AddPatiInfo(long lngSys, long lngModule, long lngPatiID, long lngPageID, long lngClinicID, string strMsg, string strReserve = "")
  1149. {
  1150. // '功能:向EMPI平台创建新病人信息
  1151. //'返回:1是成功,0是失败
  1152. //'参数:strMsg 出参接口内部赋值,成功、失败说明信息
  1153. //' strReserve=保留参数,用于扩展使用
  1154. //' lngSys,lngModual=当前调用接口的主程序系统号及模块号
  1155. //' lngPageID-主页ID;lngClinicID-挂号ID;住院病人lngClinicID传0,门诊病人lngPageID传0
  1156. return 1;
  1157. }
  1158. public long EMPI_ModifyPatiInfo(long lngSys, long lngModule, long lngPatiID, long lngPageID, long lngClinicID, string strMsg, string strReserve = "")
  1159. {
  1160. // '功能:更新EMPI平台中的病人信息
  1161. //'返回:1是成功,0是失败
  1162. //'参数:strMsg 出参接口内部赋值,成功、失败说明信息
  1163. //' strReserve=保留参数,用于扩展使用
  1164. //' lngSys,lngModual=当前调用接口的主程序系统号及模块号
  1165. //' lngPageID-主页ID;lngClinicID-挂号ID;住院病人lngClinicID传0,门诊病人lngPageID传0
  1166. return 1;
  1167. }
  1168. public bool EMPI_QueryPatiInfo(long lngSys, long lngModule, Recordset rsIn, Recordset rsOut, string strReserve = "")
  1169. {
  1170. // '功能:从EMPI平台中读取病人信息
  1171. //'返回:是否查找成功,true-找到病人,false-未找到任何信息
  1172. //'参数:
  1173. //' lngSys,lngModual=当前调用接口的主程序系统号及模块号
  1174. //' strReserve=保留参数,用于扩展使用:入院登记调用时代表:0-正常登记,1-预约登记,2-接收预约
  1175. //' rsIn HIS传入的病人信息
  1176. //' rsOut 返回的病人信息结果此记录集信息由接口内部进行赋值
  1177. //' rsInt和rsOut记录集字段相同,字段均为字符串类型,包含这些字段:"病人ID,主页ID,挂号ID,门诊号,住院号,医保号,身份证号,其他证件,姓名,性别,出生日期,出生地点,国籍,民族,学历,职业,工作单位,邮箱,婚姻状况,家庭电话,联系人电话,单位电话,家庭地址,家庭地址邮编,户口地址,户口地址邮编,单位邮编,联系人地址,联系人关系,联系人姓名"
  1178. //'说明:如果His没有找到病人而接口中找了病人或者两者的病人ID不一致,接口决定返回病人ID告诉His以接口的病人ID为准,则需要准确核实这个病人ID是否属于当前病人。
  1179. //' 因为基本信息可能因EMPI发生变化,His不能判断信息的正确性。
  1180. return false;
  1181. }
  1182. public bool ExeButtomClick(long lngSys, long lngModual, IntPtr objForm, string strName, string strFuncName,
  1183. long lngPatiID, long lng主页ID, string str挂号单, long lng医嘱ID = 0, string strReserve = "")
  1184. {
  1185. // '功能:执行窗体内部的功能
  1186. //'参数:strName 当前窗体名称,strFuncName 菜名称(窗体中功能名称)
  1187. //' lngSys,lngModual=当前调用接口的主程序系统号及模块号
  1188. //' lngPatientID=病人ID,lng主页ID,str挂号单
  1189. //' lng医嘱ID=只有医技站传调用时会传入, 否则没传值
  1190. //' Exit Function '如使用此功能请修改接口内部实现
  1191. //If objForm Is Nothing Then Exit Function
  1192. // ExeButtomClick = objForm.ExecuteFunc(lngSys, lngModual, objForm, strName, strFuncName, lngPatiID, lng主页ID, str挂号单, lng医嘱ID, strReserve)
  1193. return true;
  1194. }
  1195. public void ExecuteFunc(long lngSys, long lngModual, string strFuncName, long lngPatiID,
  1196. dynamic varRecId, dynamic varKeyId, string strReserve, int int场合 = -1, string strXML = "")
  1197. {
  1198. // '功能:执行某个外挂功能
  1199. //'参数:lngSys,lngModual=当前调用接口的上级系统号及模块号,病历调用时 lngModual=1070,无int场合参数
  1200. //' strFuncName=要执行的功能名,该功能名之前由GetFuncNames函数返回
  1201. //' lngPatiID=当前病人ID,人员管理调用时,传入的人员ID, 新版LIS默认传入0
  1202. //' varRecId=数字或者字符串;对门诊病人,为当前挂号单号或者挂号ID;对住院病人,为当前住院主页ID,新版LIS默认传入0;挂号调用时,为挂号单号;收费调用时,为收费单号
  1203. //' varKeyId=数字或者字符串;当前的关键业务数据唯一标识ID,如医嘱ID
  1204. //' 病历调用时 varKeyId=电子病历记录.id,在新增编辑未保存前其值=0,保存后或修改、审订时执行有值;
  1205. //' 临床路径 varKeyId 病人路径id
  1206. //' 新版LIS varKeyId = 标本id ,当前有标本为标本id ,无标本则为0
  1207. //' strReserve=保留参数,用于扩展使用 当是病历调用时 strReserve= 病历文件列表.id 。当场合为5、6调用时,strReserve=诊断内容
  1208. //' int场合 调用场合:0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS),3-挂号调用,4-收费调用,5-门诊医嘱下达诊断扩展,6-首页诊断扩展
  1209. //' strXml为XML格式的字符串,例:<ROOT><XXX>XXX</XXX></ROOT>
  1210. //' 当门诊和住院医嘱界面调用时,strXml传入的节点:诊疗项目名称
  1211. //' 当门诊医嘱界面调用时,strXml传入的节点:诊疗项目名称、界面科室ID、挂号科室ID
  1212. //' 当住院医嘱界面调用时,strXml传入的节点:诊疗项目名称、病人科室ID、病人病区ID、界面科室ID、医护科室ID
  1213. //' 场合为5和6时,strXml传入的节点:诊断ID、疾病ID
  1214. //'特殊说明:当插件在人员管理模块调用时只传入lngSys、lngModual、strFuncName、lngPatiID、varRecId、varKeyId,
  1215. //' lngPatiID就是人员id,如果lngPatiID=0表示界面上未选中人员;其中的varRecId和varKeyId等值都是传的0
  1216. // '注意:在采用分离插件后,功能的执行时,应该先对功能明进行判断。
  1217. // '先检查功能是否在本插件(zlPlugIn)中,然后再去执行扩展插件
  1218. }
  1219. public string GetButtomName(long lngSys, long lngModual, IntPtr objForm, string strName)
  1220. {
  1221. // '功能:添加到菜单和工具栏上的按钮名称,菜单上级为 扩展,工具栏上直接加按钮
  1222. //'参数:strName 当前窗体名称
  1223. //' Exit Function '如使用此功能请修改接口内部实现
  1224. // If objForm Is Nothing Then Exit Function
  1225. // GetButtomName = objForm.GetInSideFunc(lngSys, lngModual, objForm, strName)
  1226. return "";
  1227. }
  1228. public IntPtr GetForm(long lngSys, long lngModual, string strName)
  1229. {
  1230. // '功能:根据索引值返回对象。工作站窗体加载时调用
  1231. //' Exit Function '如使用此功能请修改接口内部实现
  1232. //' Select Case lngModual
  1233. //' Case m住院医生工作站
  1234. //' Select Case strName
  1235. //' Case "Test1"
  1236. //' Set GetForm = New frmDockEx
  1237. //' Case "Test2"
  1238. //' Set GetForm = New frmDockEx
  1239. //' Case Else
  1240. //' Set GetForm = GetFormEx(lngSys, lngModual, strName)
  1241. //' End Select
  1242. //' Case m住院护士工作站
  1243. //' Select Case strName
  1244. //' Case "Test1"
  1245. //' Set GetForm = New frmDockEx
  1246. //' Case "Test2"
  1247. //' Set GetForm = New frmDockEx
  1248. //' Case Else
  1249. //' Set GetForm = GetFormEx(lngSys, lngModual, strName)
  1250. //' End Select
  1251. //' Case m门诊医生工作站
  1252. //' Select Case strName
  1253. //' Case "Test1"
  1254. //' Set GetForm = New frmDockEx
  1255. //' Case "Test2"
  1256. //' Set GetForm = New frmDockEx
  1257. //' Case Else
  1258. //' Set GetForm = GetFormEx(lngSys, lngModual, strName)
  1259. //' End Select
  1260. //' Case m医技工作站
  1261. //' Select Case strName
  1262. //' Case "Test1"
  1263. //' Set GetForm = New frmDockEx
  1264. //' Case "Test2"
  1265. //' Set GetForm = New frmDockEx
  1266. //' Case Else
  1267. //' Set GetForm = GetFormEx(lngSys, lngModual, strName)
  1268. //' End Select
  1269. //' Case m门诊医嘱下达
  1270. //' Select Case strName
  1271. //' Case "Test1"
  1272. //' Set GetForm = New frmDockEx
  1273. //' Case "Test2"
  1274. //' Set GetForm = New frmDockEx
  1275. //' Case Else
  1276. //' Set GetForm = GetFormEx(lngSys, lngModual, strName)
  1277. //' End Select
  1278. //' Case m住院医嘱下达
  1279. //' Select Case strName
  1280. //' Case "Test1"
  1281. //' Set GetForm = New frmDockEx
  1282. //' Case "Test2"
  1283. //' Set GetForm = New frmDockEx
  1284. //' Case Else
  1285. //' Set GetForm = GetFormEx(lngSys, lngModual, strName)
  1286. //' End Select
  1287. //' End Select
  1288. // 'todo 从这里以下开始编写自己的代码,上面的代码可以不删除
  1289. // '主插件调用本方法实例化页签窗体
  1290. // Select Case strName
  1291. // Case "页签名称1", "页签名称2"
  1292. // Set GetForm = New frmDockEx
  1293. // End Select
  1294. // Call mdlPublic.LoadPageInfo(lngSys, lngModual, strName) '装载当前页签详细
  1295. return IntPtr.Zero;
  1296. }
  1297. public string GetFormCaption(long lngSys, long lngModual)
  1298. {
  1299. // '功能:在住院医生工作站中添加卡片的名称,逗号分割。
  1300. //' Dim strTmp As String, strThis As String
  1301. //' Exit Function '如使用此功能请修改接口内部实现
  1302. //' strTmp = GetFormCaptionEx(lngSys, lngModual)
  1303. //'
  1304. //' Select Case lngModual
  1305. //' Case m住院医生工作站
  1306. //' strThis = "Test1,Test2"
  1307. //' Case m住院护士工作站
  1308. //' strThis = "Test1,Test2"
  1309. //' Case m门诊医生工作站
  1310. //' strThis = "Test1,Test2"
  1311. //' Case m医技工作站
  1312. //' strThis = "Test1,Test2"
  1313. //' Case m住院医嘱下达
  1314. //' strThis = "Test1,Test2"
  1315. //' Case m门诊医嘱下达
  1316. //' strThis = "Test1,Test2"
  1317. //' End Select
  1318. //' GetFormCaption = strThis & IIf(strTmp = "", "", "," & strTmp)
  1319. return "";
  1320. }
  1321. public long GetFormHwnd(string strReserve = "")
  1322. {
  1323. // '功能:病人信息管理 模块中调用 获取要嵌入的窗体句柄,
  1324. //'参数:
  1325. //' strReserve=扩展参数
  1326. return 0;
  1327. }
  1328. public string GetFuncNames(long lngSys, long lngModual, int int场合 = -1, string strReserve = "")
  1329. {
  1330. // '功能:获取外挂功能列表;该接口一般在初始化之后调用一次,调用时机和频度可能因不同的主程序而不同
  1331. //'参数:lngSys,lngModual=当前调用接口的上级系统号及模块号,病历调用时 lngModual=1070,无int场合参数
  1332. //' int场合 调用场合:0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS),3-门诊挂号调用,4-门诊收费调用,5-门诊医嘱下达诊断扩展,6-首页诊断扩展
  1333. //' strReserve=保留参数,用于扩展使用
  1334. //'返回:外挂功能列表,格式为"功能名1,功能名2,功能名3,..."
  1335. //' "Auto" 关键字支持新版护士站-病人事务窗口:病人医嘱(门诊和住院)Dock页签界面、临床路径Dock页签界面,医嘱附费Dock页签界面,当切换病人后会自动执行该功能,该功能只充许有一个
  1336. //' "InTool" 表示当前这个功能,是否是直接显示还是以下拉方式二级菜单显示,
  1337. //'说明:当插件在人员管理模块调用时只传入lngSys和lngModual,并且其中的lngModual=0
  1338. //'strReserve 扩展后被用于控件功能在ZLHIS工作站中菜单的显示样式,如果不对此参数赋值,则仍沿用以前返回值方式
  1339. //'应用场合:
  1340. //' 1.新版护士站主界面(菜单栏-工具-按钮下;工具栏;床头卡右键菜单)
  1341. //' 2.包含(门诊/住院医嘱清单、临床路径,医嘱附费)模块嵌入的Dock页签显示的工作站界面切换到医嘱信息页签后窗口功能显示
  1342. //' 如:门诊医生站-医嘱信息,住院医生站-医嘱信息,老版护士站-医嘱信息,新版护士站病-病人事物窗中-医嘱信息等。
  1343. //'当窗口切换当对应页签后生效:
  1344. //' a.病人医嘱(门诊和住院)Dock页签界面,[菜单栏-医嘱、工具按钮下;工具栏;右键弹出随 医嘱 菜单弹出];
  1345. //' b.临床路径Dock页签界面,[菜单栏-路径、工具 按钮下;工具栏;右键弹出随 路径 菜单弹出];
  1346. //' c.医嘱附费Dock页签界面,[菜单栏-费用、工具 按钮下;工具栏;右键弹出随 费用 菜单弹出];
  1347. //'格式为: xml结构 "<menubar>...</menubar><toolbar>...</toolbar><popbar>...</popbar><hotkey>...</hotkey>"
  1348. //'menubar 窗体主界面菜单栏"工具"中展示样式,结点内容逗号分割,"功能1,功能2,功能3,功能4",
  1349. //' 每个功能前可以前缀 “|:Auto:InTool:功能1”
  1350. //' "|"竖线,表示当前位进行菜单的分割就是菜单之前的分割线;
  1351. //' "Auto" 关键字支持新版护士站-病人事务窗口:病人医嘱(门诊和住院)Dock页签界面、临床路径Dock页签界面,医嘱附费Dock页签界面,当切换病人后会自动执行该功能,该功能只充许有一个
  1352. //' "InTool" 表示当前这个功能,是否是直接显示还是以下拉方式二级菜单显示,
  1353. //'toolbar 窗体主界面工具栏中展示样式,结点内容逗号分割,"功能1,功能2,功能3,功能4",
  1354. //' 每个功能前可以前缀 “|:InTool:功能1”
  1355. //' "|"竖线,表示当前位进行菜单的分割就是菜单之前的分割线;
  1356. //' "InTool" 表示当前这个功能,是否是直接显示还是以下拉方式二级菜单显示,
  1357. //'popbar 右键弹出菜单展示样式,结点内容逗号分割,"功能1,功能2,功能3,功能4",
  1358. //' 每个功能前可以前缀 “|:InTool:功能1”
  1359. //' "|"竖线,表示当前位进行菜单的分割就是菜单之前的分割线;
  1360. //' "InTool" 表示当前这个功能,是否是直接显示还是以下拉方式二级菜单显示,
  1361. //'hotkey 窗体中快捷建,功能名|KeyCode|Shift 组合成成,例:"快捷键功能1|116|0,快捷键功能2|123|0,快捷键功能3|49|4
  1362. //' 原理:功能由 父窗体的Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)事件进行触发
  1363. //' 该功能仅门诊医生工作站医嘱下达界面-医嘱编辑 页签生效。
  1364. return "";
  1365. }
  1366. public Dictionary<string, string> GetMeRecFormCol(long lngSys, long lngModule, long lngPatiID, long lngPageID, long lngPatiType)
  1367. {
  1368. //'初始化外挂附页窗体对象的集合,注:zlhis34最多可以扩展3个页签窗体
  1369. throw new NotImplementedException();
  1370. }
  1371. public bool InPatiCancelOutBefore(long lng病人ID, long lng主页ID, string strReserve = "")
  1372. {
  1373. // '功能:病人撤消出院之前调用(病人入出管理撤消出院操作时调用)
  1374. //'参数:lng病人ID 病人ID
  1375. //' strReserve=扩展参数
  1376. //'返回:true 允许撤消出院,false不能撤消出院
  1377. return true;
  1378. }
  1379. public bool InPatiCashierAfter(long lng病人ID, long lng结帐ID, string strReserve = "")
  1380. {
  1381. // '功能:业务评价 出院结账后调用
  1382. //'参数:lng病人ID 病人ID;lng结帐ID 收费后产生病人结帐记录ID
  1383. //' strReserve=扩展参数
  1384. return true;
  1385. }
  1386. public bool InPatiCheckInAfter(long lng病人ID, long lng主页ID, string strReserve = "")
  1387. {
  1388. // '功能:业务评价 入院处办理入院后调用
  1389. //'参数:lng病人ID lng主页ID
  1390. //' strReserve=扩展参数:入院登记调用时代表:0-正常登记,1-预约登记,2-接收预约
  1391. return true;
  1392. }
  1393. public bool InPatiCheckInBranchAfter(long lng病人ID, long lng主页ID, string strReserve = "")
  1394. {
  1395. // '功能:业务评价 护士站办理入科后调用
  1396. //'参数:lng病人ID lng主页ID
  1397. //' strReserve=扩展参数
  1398. return true;
  1399. }
  1400. public bool InPatiCheckInCancel(long lng病人ID, long lng主页ID, long lngType, string strReserve = "")
  1401. {
  1402. // '功能:入院登记界面关闭或者点取消退出按钮时调用
  1403. //'参数:lng病人ID lng主页ID,这两个参数可能没有值,当登记界面被清空或者未录入时这两个值均为0
  1404. //' lngType 0-正常登记,1-预约登记,2-接收预约
  1405. //' strReserve=扩展参数
  1406. return true;
  1407. }
  1408. public bool InPatiCheckOutAfter(long lng病人ID, long lng主页ID, string strReserve = "")
  1409. {
  1410. // '功能:业务评价 护士站办理出院后调用(病人入出管理)
  1411. //'参数:lng病人ID 病人ID
  1412. //' strReserve=扩展参数
  1413. return true;
  1414. }
  1415. public bool LisPrintCodeBefore(long lngSys, long lngModual, Recordset rsNumber)
  1416. {
  1417. // '参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号
  1418. //' rsNumber 本次打印的条码记录集中 包含的字段
  1419. //' rsNumber 中可能会存在多个条码
  1420. //' rsNumber.Fields.Append "类别", adVarChar, 20
  1421. //' rsNumber.Fields.Append "管码", adVarChar, 18
  1422. //' rsNumber.Fields.Append "相关ID", adBigInt
  1423. //' rsNumber.Fields.Append "样本条码", adVarChar, 18
  1424. //' rsNumber.Fields.Append "执行科室ID", adVarChar, 18
  1425. //' rsNumber.Fields.Append "诊疗项目ID", adVarChar, 18
  1426. //' rsNumber.Fields.Append "婴儿", adBigInt
  1427. //' rsNumber.Fields.Append "紧急标志", adBigInt
  1428. //' rsNumber.Fields.Append "标本", adVarChar, 30
  1429. //' rsNumber.Fields.Append "医嘱内容", adVarChar, 500
  1430. //' rsNumber.Fields.Append "采集方式", adVarChar, 100
  1431. //' rsNumber.Fields.Append "开嘱医生", adVarChar, 50
  1432. //' rsNumber.Fields.Append "开嘱时间", adDate
  1433. //' rsNumber.Fields.Append "采样人", adVarChar, 50
  1434. //' rsNumber.Fields.Append "采样时间", adDate
  1435. //' rsNumber.Fields.Append "采血量", adVarChar, 20
  1436. //' rsNumber.Fields.Append "试管名称", adVarChar, 50
  1437. //' rsNumber.Fields.Append "病人来源", adInteger
  1438. //' rsNumber.Fields.Append "医嘱ID串", adVarChar, 500
  1439. //' rsNumber.Fields.Append "执行科室", adVarChar, 50
  1440. //' rsNumber.Fields.Append "婴儿姓名", adVarChar, 50
  1441. //' rsNumber.Fields.Append "婴儿性别", adVarChar, 50
  1442. //' rsNumber.Fields.Append "申请科室", adVarChar, 50
  1443. //' 返回值未false 时候,条码不进行打印。
  1444. return true;
  1445. }
  1446. public bool LoadMecInfo(long lngSys, long lngModule, long lngPatiID, long lngPageID, long lngPatiType, dynamic colCtl)
  1447. {
  1448. // '---------------------------------------------------------------------------------------------------------------------------------------------
  1449. //'功能:首页加载自定义数据
  1450. //'返回:True是成功,False是失败
  1451. //' lngSys,lngModual=当前调用接口的主程序系统号及模块号
  1452. //' colCtl 病案首页控件集合
  1453. //' lngPageID-主页ID;
  1454. //' lngPatiType-病人类型:1-门诊,2-住院
  1455. //' lngPatiID-病人id
  1456. //'------------------------------------------------------------colCtl控件集合Key值--------------------------------------------------------------
  1457. //'结构化地址控件:出生地点(结构化), 籍贯(结构化), 现住址(结构化), 户口地址(结构化), 联系人地址(结构化)
  1458. //'结构化地址控件[属性]:value省,value市,value区县,value乡镇,value详细地址
  1459. //'文本框:出生地点, 籍贯, 现住址, 户口地址, 联系人地址, 病人区域, 单位地址, 病案号, 档案号, X线号, 姓名, 其他证件, 联系人姓名, 入院科室, 入院病房,
  1460. //' 出院科室, 出院病房, 医保号, 摘要, 门诊号, 监护人, 发病地址, 医学警示, 其他医学警示, 病理号, 死亡原因, 病原学诊断, 抢救病因, 输其他,
  1461. //' 转入医疗机构, 31天内再住院, 转科1, 转科2, 转科3, 退出原因, 变异原因, 重症监护室名称, 肿瘤T, 肿瘤N, 肿瘤M, Email, 其他会诊, 引发药物,
  1462. //' 临床表现, 透析尿素氮值, 其他关系, 入院转入, 单位电话, 单位邮编, 家庭电话, 家庭邮编, 户口邮编, 身高, 身高单位, 体重, 体重单位, 体温,
  1463. //' 入院次数, 收缩压, 舒张压, 联系人电话, 年龄, 婴幼儿年龄, 新生儿出生体重, 新生儿入院体重, 住院天数, 住院号, 抢救次数, 成功次数, 特护,
  1464. //' 一级护理, 二级护理, 三级护理, ICU, CCU, 输红细胞, 输血小板, 输血浆, 输全血, 自体回收, 呼吸机使用, 昏迷时间入院前_天, 昏迷时间入院前_小时,
  1465. //' 昏迷时间入院前_分钟, 昏迷时间入院后_天, 昏迷时间入院后_小时, 昏迷时间入院后_分钟, 随诊期限, 费用和, 约束总时间, 重症监护天, 重症监护小时,
  1466. //' Apgar , QQ, 输白蛋白, 院内会诊, 外院会诊, 距上次住院时间
  1467. //'下拉框: 门诊医师 , 科主任, 主任或副主任, 进修医师, 主治医师, 住院医师, 研究生医师, 实习医师, 质控医师, 质控护士, 责任护士, 编目员, 主诊医师, 随诊期限(下拉)
  1468. //' 付款方式, 性别, 婚姻, 职业, 国籍, 民族, 关系, 入院途径, 文化程度, 去向, 感染与死亡关系, 入院情况, 分化程度, 最高诊断依据, 门诊与出院XY,入院与出院XY,
  1469. //' 门诊与入院, 术前与术后, 放射与病理, 临床与病理, 死亡期间, 临床与尸检, 门诊与出院ZY, 入院与出院ZY, 辩证, 治法, 方药, 治疗类别, 中医诊疗设备, 抢救方法,
  1470. //' 中医诊疗技术, 自制中药制剂, 辨证施护, 病案质量, 病例分型, HBsAg, 血型, HCVAb, RH, HIVAb, 输液反应, 输血反应, 输血前9项检查, 生育状况, 出院方式,
  1471. //' 再入院计划天数, 压疮发生期间, 压疮分期, 跌倒或坠床伤害, 跌倒或坠床原因, 距上次住院时间(下拉), 重返间隔时间, 约束方式, 约束工具, 约束原因,
  1472. //' 新生儿离院方式 , 肿瘤分期, 临床路径管理, 法定传染病, 实施DGRS管理, 死亡患者尸检, 身份证, 变异原因(下拉), 健康卡号, 年龄(下拉), 婴幼儿年龄(下拉),
  1473. //'时间控件: 出生日期 , 入院时间, 出院时间, 确诊日期, 死亡时间, 发病日期, 发病时间, 质控日期, 编目日期, 收回日期, 入科时间
  1474. //'复选框: 再入院 , 入院前外院治疗, 是否确诊, 病原学检查, 新发肿瘤, 危重, 急症, 疑难, 示教病案, 科研病案, 疑难病例, 随诊, CT, MRI, 彩色多普勒,
  1475. //' 传染病上传, 围术期死亡, 术后猝死, 进入路径, 完成路径, 变异, 住院出现危重, 是否同一疾病, 人工气道脱出, 重返重症医学科, 住院物理约束, 单病种管理,
  1476. //' 细菌标本送检 , 会诊情况, 无过敏记录, 未找到时自由录入
  1477. //'单选按钮: 再住院无 , 再住院有, 初诊, 复诊, ICU无, ICU有, XY按诊断输入, XY按疾病编码输入, ZY按诊断输入, ZY按疾病编码输入, 按诊断输入,
  1478. //' 按疾病编码输入, 按药品目录输入, 按过敏源输入
  1479. //'VS表格: 转科情况 (表格), 西医诊断(表格), 中医诊断(表格), 过敏信息(表格), 手术记录(表格), 住院费用(表格), 化疗记录信息(表格), 放疗记录信息(表格),
  1480. //' 抗菌药物使用情况(表格), 抗精神病治疗情况(表格), 重症监护情况(表格), 病案附加项目(表格), 特殊检查情况(表格)
  1481. //'list列表控件: 不良事件(表格), 感染因素(表格)
  1482. //'树形表控件: 住院费用(树形表)
  1483. //'------------------------------------------------------------表格控件列枚举--------------------------------------------------------------------
  1484. //'过敏信息列枚举 : 过敏药物=0 ,过敏反应=1 ,过敏时间=2 ,过敏源编码=3 ,药物ID=4 ,过敏来源=5
  1485. //'(西医诊断/中医诊断)列枚举 : 诊断类型=0 ,关联=1 ,诊断编码=2 ,诊断描述=3 ,中医证候=4 ,发病时间=5 ,备注=6 ,入院病情=7 ,出院情况=8 ,ICD附码=9 ,是否未治=10
  1486. //' 是否疑诊=11 ,增加=12 ,Del=13 ,诊断ID=14 ,疾病ID=15 ,证候ID=16 ,医嘱IDs=17 ,诊断分类=18 ,固定附码=19 ,是否病人=20
  1487. //' 诊断来源=24 ,疾病编码=25 ,疾病类别=26 ,证候编码=27 ,记录日期=28 ,记录人员=29 ,疗效限制=21 ,分娩信息=22 ,附码ID=23
  1488. //'手术列枚举 : Copy=0 ,手术日期=1 ,结束日期=2 ,抗菌用药时间=3 ,手术情况=4 ,准备天数=5 ,手术编码=6 ,手术名称=7 ,再次手术=8 ,主刀医师=9 ,助产护士=10 ,助手1=11
  1489. //' 助手2=12 ,麻醉开始时间=13 ,麻醉类型 (界面名称麻醉方式)= 14 ,ASA分级=15 ,NNIS分级=16 ,手术级别=17 ,麻醉医师=18 ,切口愈合=19 ,切口部位=20 ,重返手术室计划=21
  1490. //' 重返手术室目的=22 ,切口感染=23 ,并发症=24 ,预防用抗菌药=25 ,抗菌药天数=26 ,非预期的二次手术=27 ,麻醉并发症=28 ,术中异物遗留=29 ,手术并发症=30 ,术后出血或血肿=31
  1491. //' 手术伤口裂开=32 ,术后深静脉血栓=33 ,术后生理代谢紊乱=34 ,术后呼吸衰竭=35 ,术后肺栓塞=36 ,术后败血症=37 ,术后髋关节骨折=38 ,手术操作ID=39 ,诊疗项目ID=40 ,麻醉ID=41
  1492. //' 麻醉方式(界面名称麻醉类型)=42 ,手麻来源=43
  1493. //'化疗列枚举 : 化学治疗编码=0 ,开始日期=1 ,结束日期=2 ,疗程数=3 ,化疗方案=4 ,总量=5 ,化疗效果=6 ,疾病ID=7
  1494. //'放疗列枚举 : 放射治疗编码=0 ,开始日期=1 ,结束日期=2 ,设野部位=3 ,放射剂量=4 ,累计量=5 ,放疗效果=6 ,疾病ID=7
  1495. //'精神药品列枚举 : 药物名称=0 ,疗程=1 ,最高日量=2 ,特殊反应=3 ,疗效=4 ,药品ID=5
  1496. //'重症监护枚举 : 序号=0 ,监护室名称=1 ,进入时间=2 ,退出时间=3 ,再入住计划=4 ,再入住原因=5
  1497. //'重症监护器械枚举 : ICU类型=0 ,器械及导管=1 ,开始时间=2 ,结束时间=3 ,感染累计小时=4
  1498. //'医院感染枚举 : 确诊日期=0 ,感染部位=1 ,医院感染名称=2 ,医院感染编码=3
  1499. //'标本来源枚举 : 标本=0 ,病原学代码及名称=1 ,送检日期=2
  1500. //'抗菌药枚举 : 序号=0 ,抗菌药物名=1 ,用药目的=2 ,使用阶段=3 ,使用天数=4 ,一类切口预防用=5 ,DDD数=6 ,联合用药=7
  1501. //'---------------------------------------------------------------------------------------------------------------------------------------------
  1502. //'使用itemData的控件:
  1503. //'涉及动态加载下拉框: 用于存储数据的id
  1504. //'不良事件 (表格), 感染因素(表格): 用于存储数据的编码
  1505. //'使用rowdata的控件:
  1506. //'过敏信息 (表格), 西医诊断(表格), 中医诊断(表格), 手术记录(表格): 用于存储数据的id
  1507. //'化疗记录信息 (表格), 重症监护情况(表格), 放疗记录信息(表格), 抗精神病治疗情况(表格): 用于存储数据的序号
  1508. //'抗菌药物使用情况 (表格): 用于存储数据的药名id
  1509. //'---------------------------------------------------------------------------------------------------------------------------------------------
  1510. return true;
  1511. }
  1512. public void LogInAfter()
  1513. {
  1514. //'功能:登陆航导台之后
  1515. }
  1516. public void LogOutBefore()
  1517. {
  1518. //'功能:关闭航导台或者注销当前
  1519. }
  1520. public bool OutPatiExseAfter(long lng病人ID, long lng结帐ID, string strReserve = "")
  1521. {
  1522. return true;
  1523. }
  1524. public bool OutPatiInvoicePrintAfter(long lng病人ID, long str结帐IDs, string strReserve = "")
  1525. {
  1526. // '功能:业务评价 门诊收费完成后调用
  1527. //'参数:lng病人ID 病人ID;lng结帐ID 本次收费后产生病人结帐记录ID
  1528. //' strReserve=扩展参数
  1529. return true;
  1530. }
  1531. public bool OutPatiMedicineAfter(long lng病人ID, string strNO, int int单据, long lng药房ID, string strReserve = "")
  1532. {
  1533. // '功能:业务评价 门诊发药后调用
  1534. //'参数:lng病人ID 病人ID;strNO 单据号;int单据 单据类型;lng药房ID 药房ID
  1535. //' strReserve=扩展参数
  1536. return true;
  1537. }
  1538. public bool OutPatiRegisterAfter(long lng病人ID, long lng挂号ID, string strReserve = "")
  1539. {
  1540. // '功能:业务评价 门诊挂号完成后调用
  1541. //'参数:lng病人ID 病人ID;lng挂号ID 病人挂号ID
  1542. //' strReserve=扩展参数
  1543. return true;
  1544. }
  1545. public bool PathEvaluateAfter(long lngSys, long lngModual, long lngPatientID, long lngClinicID, long lng路径记录ID, long lng阶段ID, int int场合 = -1, string strReserve = "")
  1546. {
  1547. // '功能:评估路径评估后
  1548. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号1256=临床路径应用
  1549. //' lngPatientID=病人ID,lngClinicID=主页ID
  1550. //' lng路径记录ID=病人临床路径.id
  1551. //' lng阶段ID=当前评估的阶段ID
  1552. //' int场合 调用场合:0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  1553. //' strReserve=扩展参数
  1554. return true;
  1555. }
  1556. public bool PathEvaluateBefore(long lngSys, long lngModual, long lngPatientID, long lngClinicID, long lng路径记录ID, long lng阶段ID, int int场合 = -1, string strReserve = "")
  1557. {
  1558. // '功能:评估路径评估前
  1559. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号1256=临床路径应用
  1560. //' lngPatientID=病人ID,lngClinicID=主页ID
  1561. //' lng路径记录ID=病人临床路径.id
  1562. //' lng阶段ID=当前评估的阶段ID
  1563. //' int场合 调用场合:0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  1564. //' strReserve=扩展参数
  1565. return true;
  1566. }
  1567. public bool PathImportAfter(long lngSys, long lngModual, long lngPatientID, long lngClinicID, long lng路径ID, long lng版本号ID,
  1568. int int场合 = -1, long lngDiagnosisType = 0, long lng疾病ID = 0, long lng诊断ID = 0, string strReserve = "")
  1569. {
  1570. // '功能:路径导入后
  1571. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号(1252=门诊医嘱下达,1253=住院医嘱下达)
  1572. //' lngPatientID=病人ID,lngClinicID=主页ID
  1573. //' lng路径ID=临床路径目录.id
  1574. //' lng版本号ID=导入的版本号
  1575. //' int场合 调用场合:0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  1576. //' strReserve=扩展参数
  1577. return true;
  1578. }
  1579. public bool PathImportBefore(long lngSys, long lngModual, long lngPatientID, long lngClinicID, long lng路径ID, long lng版本号ID,
  1580. int int场合 = -1, long lngDiagnosisType = 0, long lng疾病ID = 0, long lng诊断ID = 0, string strReserve = "")
  1581. {
  1582. // '功能:路径导入前
  1583. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号(1252=门诊医嘱下达,1253=住院医嘱下达)
  1584. //' lngPatientID=病人ID,lngClinicID=主页ID
  1585. //' lng路径ID=临床路径目录.id
  1586. //' lng版本号ID=导入的版本号
  1587. //' int场合 调用场合:0-医生站调用,1-护士站调用,2-医技站调用(PACS/LIS)
  1588. //' lngDiagnosisType 导入诊断类型 '诊断类型: 1 - 西医门诊诊断; 2 - 西医入院诊断; 11 - 中医门诊诊断; 12 - 中医入院诊断
  1589. //' lng疾病ID=导入疾病(疾病编码目录.ID)、lng诊断ID=导入诊断(疾病诊断目录.ID)
  1590. //' strReserve=扩展参数
  1591. return true;
  1592. }
  1593. public bool PatiFeeAuditingAndCancelCheck(long lngModual, long lng病人ID, long lng主页ID, bool blnCancel = false, string strExpendXML = "")
  1594. {
  1595. // '功能:病人费用审核和取消审核检查
  1596. //'入参:lngModual-调用的模块号
  1597. //' lng病人ID-病人ID
  1598. //' lng主页ID-主页ID
  1599. //' blnCancel-取消执行时,传入True,执行时传入False
  1600. //' strExpendXML-保留参数,暂无,待以后扩展
  1601. //'出参:strExpendXML-保留参数,暂无,待以后扩展
  1602. //'返回:检查合法,返回True,否则返回False
  1603. //'编制:刘兴洪
  1604. //'日期:2016-09-01 17:09:06
  1605. //'调用:
  1606. //' 病人费用查询--病人审核和取消病人审核时调用(数据保存前调用)
  1607. return true;
  1608. }
  1609. public bool PatiInfoSaveAfter(long lng病人ID, string strReserve = "")
  1610. {
  1611. // '功能:病人信息管理 模块中调用 病人信息管理中保存病人信息后,事务提交后调用,插件中渠道自行处理数据保存
  1612. //'参数:lng病人ID 病人ID
  1613. //' strReserve=扩展参数
  1614. return true;
  1615. }
  1616. public bool PatiInfoSaveBefore(long lng病人ID, string strReserve = "")
  1617. {
  1618. // '功能:病人信息管理 模块中调用 病人信息管理中保存病人信息前,用于控制一些检查类的业务,返回False终止保存操作。
  1619. //'参数:lng病人ID 病人ID
  1620. //' strReserve=扩展参数
  1621. return true;
  1622. }
  1623. public bool PatiPrePayAfter(long lng病人ID, int int预交类型, long lng预交ID, string strReserve = "")
  1624. {
  1625. // '功能:业务评价 缴纳预交款后调用(门诊/住院通用,由参数 int预交类型 来区分)
  1626. //'参数:lng病人ID 病人ID
  1627. //' int预交类型:0-门诊,1-住院
  1628. //' lng预交ID 预交记录ID
  1629. //' strReserve=扩展参数
  1630. return true;
  1631. }
  1632. public bool PatiRegTriageCheck(long lngSys, long lngModule, byte bytFun, long lng挂号ID, string str医生 = "", string str诊室 = "", string str新号码 = "", long lng新出诊记录ID = 0)
  1633. {
  1634. // '功能:挂号分诊检测接口
  1635. //'入参:lngSys,lngModual=当前调用接口的主程序系统号及模块号
  1636. //' bytFun- 0-分诊;1-换号;2-完成就诊(13-恢复就诊);3-标记为不就诊;4-签道(14-取消签道);5-回诊(15-取消回诊);6-病人待诊
  1637. //' lng挂号ID-挂号ID
  1638. //' str医生-医生姓名(bytfun=0,1,2,4时传入)
  1639. //' str诊室-诊室名称(bytfun=0,1,2,4时传入)
  1640. //' str新号码-换号时的新号码(bytfun=1时传入)
  1641. //' lng新出诊记录ID-换号时的新号码(bytfun=1时传入)
  1642. //'出参:
  1643. //'返回:分诊合法返回true,否则返回False
  1644. return true;
  1645. }
  1646. public bool PatiValiedCheck(long lngSys, long lngModule, long lngType, long lngPatiID, long lngPageID, string strPatiInforXML, string strReserve = "")
  1647. {
  1648. // '功能:检查当前病人是否是指定的特殊病人
  1649. //'返回:true时允许继续操作,False时不允许操作
  1650. //'参数:
  1651. //' lngSys,lngModual=当前调用接口的主程序系统号及模块号
  1652. //' lngType 操作类型:1-门诊挂号,2-住院入院,3-门诊收费,4-住院结帐,5-门诊结帐。
  1653. //' lngPatiID-病人ID: 新建档的,为0,否则传入建档病人ID
  1654. //' lngPageID-主页ID: 新建档的,为0,否则传入建档主页ID(住院传入主页ID) 特殊说明:仅 lngType=4 时才传入 lngPageID,其它均传0
  1655. //' strPatiInforXML-病人信息:针对未建档病人传入,"姓名,性别,年龄,出生日期,医保号,身份证号",出生日期 格式:2016-11-11 12:12:12,操作类型=1时,还会传入当前挂号的医生姓名
  1656. //' 固定格式:<XM></XM><XB></XB><NL></NL><CSRQ></CSRQ><YBH></YBH><SFZH></SFZH><YSXM></YSXM>
  1657. //' strReserve=保留参数,用于扩展使用
  1658. return true;
  1659. }
  1660. public bool PivaWorkNormal(long lngModual, string strFuncName, long lng库房ID, long lng配药id, string strReserve = "")
  1661. {
  1662. // '功能:配置中心业务调用
  1663. //'参数:lngModual 模块号;
  1664. //' strFuncName 功能名称;
  1665. //' lng库房ID 库房ID;
  1666. //' lng配药id 输液单id;
  1667. //' strReserve=扩展参数
  1668. return true;
  1669. }
  1670. public bool QueryPatiInfo(long lngSys, long lngModule, string str卡号, Recordset rsInfo)
  1671. {
  1672. // '功能:返回病人信息集。病人信息集为动态记录集,在接口中预先写好构建及返回字段模板;如果返回字段中"病人ID"<>0,则表示接口返回前已新建档案,挂号程序直接提取病人ID对应的档案信息,而不直接读取其他字段;
  1673. //'入参:lngModule-调用的模块号
  1674. //'出参:rsInfo-返回的病人信息集(直接更新该表,字段为:病人ID,姓名,性别,年龄,出生日期,出生地点,身份证号,其他证件,身份,职业,家庭地址,家庭电话,家庭邮编,工作单位,单位邮编,医保号,医疗付款方式,费别,国籍,民族,婚姻状况,区域)
  1675. //'返回:调用成功,返回true,否则返回False
  1676. //'编制:刘兴洪
  1677. //'日期:2011-06-10 17:33:19
  1678. //'说明:准格尔旗区域卫生系统接口(读取病人信息)
  1679. //'问题:38841
  1680. return true;
  1681. }
  1682. public void RefreshForm(long lngSys, long lngModual, IntPtr objForm, string strName, long lngPatiID, string str挂号单, long lng主页ID,
  1683. bool blnMoved, long lng界面科室ID, long lng医护科室ID, long lng病区ID, long lng科室id, long lng前提ID, int int状态, int int执行状态, long lng路径状态 = -1)
  1684. {
  1685. // '功能:刷新内部界面
  1686. //'参数:strName 当前窗体名称
  1687. //' lngPatiID 病人id,str挂号单 挂号单号门诊病人才有否则为空,lng主页ID 住院病人才有否则为0
  1688. //' blnMoved=该病人的数据是否已转出
  1689. //' lng界面科室ID=如果当前医生站是会诊病人,则为会诊科室ID;如果是医技站调用,则为医技科室ID
  1690. //' lng医护科室ID=医护站界面ID
  1691. //' lng病区ID,lng科室ID=当“5-最近转科病人”时为病人原病区或原科室
  1692. //' lng前提ID=当由医技站调用时传入
  1693. //' int状态=0-在院病人,1-预出院病人,2-出院病人,3-待会诊病人(在院),4-已会诊病人,5-最近转科病人(在院),6-转科或转病区待入住病人(不含入院待入住)
  1694. //' int执行状态=当由医技站调用时传入,医技执行项目的执行状态
  1695. //' lng路径状态=-1:未导入,0-不符合导入条件,1-执行中,2-正常结束,3-变异结束
  1696. //' Exit Sub '如使用此功能请修改接口内部实现
  1697. // If objForm Is Nothing Then Exit Sub
  1698. // Call objForm.RefreshInSide(lngSys, lngModual, objForm, strName, lngPatiID, str挂号单, lng主页ID, _
  1699. // blnMoved, lng界面科室ID, lng医护科室ID, lng病区ID, lng科室ID, _
  1700. // lng前提ID, int状态, int执行状态, lng路径状态)
  1701. }
  1702. public bool SaveCtlInfoCheck(long lngSys, long lngModule, long lngPatiID, long lngPageID, Recordset rsCtlValueInfo, string strError, Recordset rsBackInfo, string strReserve = "")
  1703. {
  1704. // '功能:检查当前病人录入的信息是否准确
  1705. //'返回:检查到不合格的信息后返回错误信息,格式(信息名|控件名|Index|错误信息)
  1706. //'参数:
  1707. //' lngSys,lngModual=当前调用接口的主程序系统号及模块号。
  1708. //' lngPatiID-病人ID: 新建档的,为0,否则传入建档病人ID
  1709. //' lngPageID-主页ID: 新建档的,为0,否则传入建档主页ID(住院传入主页ID) 特殊说明:仅 lngType=4 时才传入 lngPageID,其它均传0
  1710. //' rsCtlValueInfo:界面上录入的病人信息记录集:序号,信息名,控件名,Index(控件Index),ExpState(是否扩展),信息原值,信息现值,Edit(是否可编辑),是否改变
  1711. //' 记录集数据有(控件名,信息名;): "txtPatient", "病人ID"; "txt住院号", "住院号"; "txt姓名", "姓名"; "txt医保号", "医保号"; "txt身份证号", "身份证号"; "cboIDNumber", "身份证未录原因";"txt支付密码", "支付密码"; "txt验证密码", "验证密码";
  1712. // '"txt出生日期", "出生日期"'"txt出生时间", "出生时间"' "txt年龄", "年龄"' "cbo年龄单位", "年龄单位"' "cbo性别", "性别"; "cbo费别", "费别"; "cbo医疗付款", "医疗付款方式"; "txt险类", "险类名";"cbo国籍","国籍"; "cbo民族", "民族";
  1713. // '"cbo身份", "身份"; "txt其他证件", "其他证件";"cbo学历", "学历"; "cbo婚姻状况", "婚姻状况"; "cbo职业", "职业"; "txt家庭地址", "现住址";"txt家庭电话", "家庭电话";"txt家庭地址邮编", "家庭地址邮编"; "txt户口地址", "户口地址";
  1714. // '"txt户口地址邮编", "户口地址邮编"; "txt籍贯", "籍贯"; "txt出生地点", "出生地点"; "txt区域", "区域"; "cbo病人类型", "病人类型"; "txt工作单位", "工作单位";"txt单位电话","单位电话"; "txt单位邮编", "单位邮编";"txt单位开户行", "单位开户行";
  1715. // '"txt单位帐号", "单位帐号";"txtMobile", "手机号"; "cbo联系人关系", "联系人关系"; "txt联系人姓名", "联系人姓名"; "txt联系人电话", "联系人电话"; "txt联系人身份证号", "联系人身份证号"; "txt联系人地址", "联系人地址"; "txt担保人", "担保人";
  1716. // '"chkUnlimit", "是否不限担保额"; "txt担保额", "担保额"; "dtp担保时限", "担保时限"; "chk临时担保", "是否临时担保";"txtReason", "担保原因"; "cbo入院科室","入院科室";"cbo入院病区", "入院病区"; "cbo床位","入院床位"; "txtTimes","第几次住院";
  1717. // '"cbo护理等级", "护理等级";"cbo门诊医师", "门诊医师"; "txt入院时间", "入院时间"; "chk再入院", "是否再入院";"chk陪伴", "是否陪伴"; "cbo住院目的", "住院目的"; "cbo入院病况", "入院病况"; "cbo入院属性", "入院属性"; "chk二级院转入", "是否二级院转入";
  1718. // '"txt门诊诊断", "门诊诊断";"cbo入院方式", "入院方式"; "txt转入", "转入医疗机构";"txt中医诊断", "中医诊断"; "txt备注", "备注";"PatiAddress(1)","出生地点";"PatiAddress(2)", "籍贯";"PatiAddress(3)", "现住址";"PatiAddress(4)", "户口地址";
  1719. // '"PatiAddress(5)", "联系人地址";"txtPages", "主页ID";"txtLinkManInfo","关系",
  1720. //' rsBackInfo:扩展参数,用于记录检查出的所有错误信息,返回到界面上显示出来
  1721. //' strReserve=保留参数,用于扩展使用
  1722. return true;
  1723. }
  1724. public bool SetPassDiag(long lngPatientID, long lng主页ID, Recordset rsDiag)
  1725. {
  1726. // '功能:合理用药监测传入诊断拦截
  1727. //'参数:
  1728. //' lngPatientID=病人ID,lng主页ID= 主页ID
  1729. //' rsDiag=传入Pass的诊断记录;此记录由合理用药监测传入,此记录集允许增删改操作
  1730. //'出参:
  1731. //' rsDiag返回加工后的诊断记录
  1732. return true;
  1733. }
  1734. public bool SetPassExams(long lngPatientID, long lng主页ID, long lng挂号ID, string strExamsInfo)
  1735. {
  1736. // '功能:合理用药监测传入检验信息
  1737. //'参数:
  1738. //' lngPatientID=病人ID,lng主页ID= 主页ID,lng挂号ID-挂号ID
  1739. //'出参:
  1740. //' strExamsInfo返回检验信息MXL\JSON字符串
  1741. return true;
  1742. }
  1743. public bool ShowClinicHelp(long lngOwnHwnd, int int场合, int int病人来源, long lng病人ID, long lng就诊ID, string str项目IDs, string strReserve = "")
  1744. {
  1745. // '功能:外接第三方诊疗参考
  1746. //'入参:lngOwnHwnd:父窗体句柄
  1747. //' int场合:0-申请,1-报告
  1748. //' int病人来源:1-门诊,2-住院
  1749. //' lng病人ID:病人ID
  1750. //' lng就诊ID:主页ID/挂号ID
  1751. //' str项目IDs:诊疗项目IDs(例:111,222,333)
  1752. //' strReserve 扩展参数,格式特殊符号分割,保留关键字 <ITEM> <SP1> <SP2>
  1753. //' 信息1<ITEM>信息2<ITEM>信息3....
  1754. //' 当传入的是检查类诊疗项目时 信息1 被使用通过特殊符号 <SP1>,<SP2>分割
  1755. //' [检查项目ID]<SP2>[部位1]<SP2>[部位2]<SP2>[部位2]<SP1>[检查项目ID]<SP2>[部位1]<SP2>[部位2]<SP2>[部位2]......
  1756. //' 例:231<SP2>头部<SP2>胸部<SP2>腹部<SP1>232<SP2>心脑<SP2>锁骨<SP2>颈椎
  1757. //' 也可以不包含部位 231<SP1>232<SP1>233<SP2>颈椎
  1758. //' 注意:应工作站调用时可能未指定病人,则入参[int病人来源、lng病人ID、lng就诊ID、str项目IDs、strReserve]传入值为空
  1759. // '出参:
  1760. // '返回:成功返回true,否则返回Fale
  1761. return false;
  1762. }
  1763. public void SignEMRAfter(long lngSys, long lngModual, long lngPatientID, long lngClinicID, long EMRFileID, params dynamic[] arrInput)
  1764. {
  1765. // '功能:在签名窗口关闭且文档数据保存后调用
  1766. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号,lngModual固定传递1070
  1767. //' lngPatientID=病人ID,lngClinicID=就诊ID/主页ID
  1768. //' EMRFileID=电子病历记录.id 在新增编辑未保存前其值=0,保存后签名、修改时签名、审签有值;
  1769. //' arrInput是数组:扩展参数用于扩展使用,通过下标访一直接问时可能会报两种错,9-下标越界/13-类型不匹配:均表示参数没有传入
  1770. //' 所以访问参数前应先判断:If TypeName(arrInput(i)) <> "Error" Then 满足这个条件后才使用这个参数,否则就认为这个参数没有传入
  1771. //' arrInput(0)-String:签名人的姓名
  1772. }
  1773. public bool SignEMRBefore(long lngSys, long lngModual, long lngPatientID, long lngClinicID, long EMRFileID, params dynamic[] arrInput)
  1774. {
  1775. // '功能:电子病历签名前调用,事务未开启时
  1776. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号,lngModual固定传递1070
  1777. //' lngPatientID=病人ID,lngClinicID=就诊ID/主页ID
  1778. //' EMRFileID=电子病历记录.id
  1779. //' arrInput是数组:扩展参数用于扩展使用,通过下标访一直接问时可能会报两种错,9-下标越界/13-类型不匹配:均表示参数没有传入
  1780. //' 所以访问参数前应先判断:If TypeName(arrInput(i)) <> "Error" Then 满足这个条件后才使用这个参数,否则就认为这个参数没有传入
  1781. //' arrInput 目前未传入任何参数
  1782. //'返回:true时,允许继续签名,否则不弹出签名窗口,病历内部不做提示。
  1783. return true;
  1784. }
  1785. public bool StuffReturnByID(long lng库房ID, string strIDs, DateTime dteSendTime, string strReserve = "")
  1786. {
  1787. // '功能:卫材退料后调用
  1788. //'参数:lng库房ID 库房ID;
  1789. //' strIDs 一次退料操作可能退多个卫材记录,格式;收发id,退料数量|收发id,退料数量...
  1790. //' dteSendTime 退料时间,一条收发id可能退多次,加上时间可以用于区别是哪次退料;
  1791. //' strReserve=扩展参数
  1792. return true;
  1793. }
  1794. public bool StuffSendByRecipe(long lng库房ID, string strNos, DateTime dteSendTime, string strReserve = "")
  1795. {
  1796. // '功能:卫材处方发料后调用,按处方发料
  1797. //'参数:lng库房ID 库房ID;
  1798. //' strNOs 一次发料可能多个处方,处方类型和处方号,格式;单据,NO|单据,NO...
  1799. //' dteSendTime 发料时间,可能一个处方退料了之后再发,加上时间用于区别是哪次发料;
  1800. //' strReserve=扩展参数
  1801. return true;
  1802. }
  1803. public bool StuffSendBySumID(long lng库房ID, string strSumNO, string strReserve = "")
  1804. {
  1805. // '功能:卫材发料后调用,按收发id发料
  1806. //'参数:lng库房ID 库房ID;
  1807. //' strSumNO 汇总发料号
  1808. //' strReserve=扩展参数
  1809. //' MsgBox "批量发料后调用PlugIn中StuffSendBySumID接口执行成功!发料信息如下..." & vbCrLf & _
  1810. //' "库房ID=" & lng库房ID & vbCrLf & _
  1811. //' "发料记录=" & strSumNO
  1812. return true;
  1813. }
  1814. public void Terminate(long lngSys, long lngModual, int int场合 = -1)
  1815. {
  1816. }
  1817. public bool TransfusionShowPatiList(long lngSys, long lngModual, long lng科室id, DateTime BeginTime, DateTime EndTime, string strReserve = "")
  1818. {
  1819. // '功能:门诊输液系统病人列表刷新时调用
  1820. //'参数:lngSys,lngModual=当前调用接口的主程序系统号及模块号 1264 门诊输液模块
  1821. //' lng科室id 科室,
  1822. //' BeginTime , EndTime 界面过滤时间范围,开始时间,结束时间
  1823. //' strReserve=扩展参数
  1824. return true;
  1825. }
  1826. public bool zlGetSelfPaymentMode(long lngModule, long lng病人ID, string str主页Ids, long lng结帐ID, Recordset rsFeeLists, string strSelfPaymentMode_Out)
  1827. {
  1828. // '功能:获取自费方式
  1829. //'入参:lngModule-调用模块号
  1830. //' lng病人ID-病人ID
  1831. //' str主页Ids-当前主页IDs,多个用逗号分离
  1832. //' lng结帐ID-如果是医保病人,在医保结算后,调用本接口,传入当前的结帐ID,
  1833. //' 如果是普通病人,在读取费用明细后,调用本接口,结帐ID为0,但传入了rsFeeLists记录集
  1834. //' rsFeeLists-传入的本次结帐的费用明细数据(住院,单据号 ,项目,费目,ID,序号,记录性质,记录状态,执行状态,主页ID,计算单位,
  1835. //' 数量, 价格,应收金额,实收金额,未结金额,结帐金额, 统筹金额,类型, 收费类别,收费类别名,费别, 婴儿费, 执行部门id,
  1836. //' 科室,开单部门ID,开单人, 保险大类id,收费细目ID,门诊标志,排序, 医嘱序号,时间,登记时间)(即传入现结帐程序中的费用明细集)
  1837. //'出参:strSelfPaymentMode_Out-返回结算方式,本接口返回true时有效,格式为:结算方式1,结算金额1,结算号码1||结算方式2,结算金额2,结算号码2||....
  1838. //'返回:获取返回true,否则返回False
  1839. //'编制:刘兴洪
  1840. //'日期:2019-05-05 14:41:27
  1841. //'调用时机:
  1842. //' 1.普通病人:在读取病人费用明细后调用本接口
  1843. //' 2.医保病人:进行医保结算后,调用本接口
  1844. //'应用场景:慈善救助
  1845. //' 1、慈善救助得患者需病区得护士进行身份的核对,患者在结帐的时候不会主动说自己是慈善救助的对象,所以让结账员手工录入的话,容易漏掉这部分。
  1846. //' 2、慈善救助金额算法是:如果是医保病人,需要在医保结算完成之后才按照自费金额的xx%计算的,普通病人则直接是自费费用的xx%。
  1847. return false;
  1848. }
  1849. public bool zlSendInfor(long lngSys, long lngModule, string strPatiXML, int int场合, string strFeedBack = "", string strErrMsg = "", string strReserve = "")
  1850. {
  1851. // '功能:向短信平台发送消息
  1852. //'返回:True是成功,False是失败
  1853. //'入参:lngSys,lngModual:当前调用接口的主程序系统号及模块号
  1854. //' strPatiXML:包含病人信息的XML字符串
  1855. //' int场合:1-发卡时短信验证,2-账户余额变化提醒
  1856. //'出参:strFeedBack:场合=1时返回验证码以及等待时间,格式:验证码|倒计时秒数
  1857. //' strErrMsg:错误信息
  1858. //' strReserve:扩展信息
  1859. return true;
  1860. }
  1861. #endregion
  1862. }
  1863. }