LisPacs_MR_Bll.cs 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819
  1. using ADODB;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Reflection;
  5. using ZLPlugin_LisPacs_MR.Domain;
  6. using ZLPlugin_LisPacs_MR.Domain.Units;
  7. using ZLPlugin_LisPacs_MR.Model;
  8. namespace ZLPlugin_LisPacs_MR
  9. {
  10. public class LisPacs_MR_Bll
  11. {
  12. /// <summary>
  13. /// lis是否有互认项目
  14. /// </summary>
  15. /// <returns></returns>
  16. public static void IsLisProject(string zlid, out string code, out int total)
  17. {
  18. code = "";
  19. total = 0;
  20. string sql = @"Select to_char(Replace(wm_concat(distinct(l.医保编码)),',','#')) Code,Count(1) total
  21. From 诊疗项目目录 x,诊疗收费关系 y,收费项目目录 z,保险支付项目 m,ZLLPMR.互认项目清单 l
  22. Where y.诊疗项目id = x.Id
  23. And z.Id = y.收费项目id
  24. And m.收费细目id = z.Id
  25. And l.医保通用编码 = m.项目编码
  26. And m.险类 = 111
  27. and x.类别 = 'C'
  28. And x.Id = {0}";
  29. sql = string.Format(sql, zlid);
  30. //Log.Info("sql1:" + sql);
  31. Recordset rd = new Recordset();
  32. Tools.QueryTable(sql, out rd);
  33. if (!rd.EOF)
  34. {
  35. rd.MoveFirst();
  36. code = rd.Fields["CODE"].Value.ToString();
  37. total = int.Parse(rd.Fields["TOTAL"].Value.ToString());
  38. }
  39. }
  40. public static void IsPacsProject(string zlid, out int total,out string type)
  41. {
  42. total = 0;
  43. type = "";
  44. string sql = @"Select Count(1) As total,b.代码 code From 诊疗项目目录 a,ZLLPMR.字典对码表 b
  45. Where 分类 ='检查互认项目'
  46. and a.类别 = 'D' And b.编码 = '{0}'
  47. group by b.代码";
  48. sql = string.Format(sql, zlid);
  49. Log.Info("sql2:" + sql);
  50. Recordset rd = new Recordset();
  51. Tools.QueryTable(sql, out rd);
  52. if (!rd.EOF)
  53. {
  54. rd.MoveFirst();
  55. total = int.Parse(rd.Fields["TOTAL"].Value.ToString());
  56. type = rd.Fields["CODE"].Value.ToString();
  57. }
  58. }
  59. public static void HandleYzData(List<YZData> list, long patientId,long limit_day ,out string message)
  60. {
  61. Log.Info("enter HandleYzData = "+ list.Count);
  62. message = "";
  63. //存在互认的医嘱
  64. int existHuRemYz = 0;
  65. for (var i = 0; i < list.Count; i++)
  66. {
  67. if (list[i].诊疗类别 == "C" && list[i].相关ID != "0.0")
  68. {
  69. LisPacs_MR_Bll.GetHuRenYzData(patientId, list[i].诊疗项目ID, list[i].诊疗类别, limit_day,out existHuRemYz);
  70. if (existHuRemYz>=1)
  71. {
  72. message = list[i].医嘱内容;
  73. //return message;
  74. }
  75. }
  76. else if (list[i].诊疗类别 == "D" && list[i].相关ID == "0.0")
  77. {
  78. LisPacs_MR_Bll.GetHuRenYzData(patientId, list[i].诊疗项目ID, list[i].诊疗类别, limit_day, out existHuRemYz);
  79. if (existHuRemYz >= 1)
  80. {
  81. message = list[i].医嘱内容;
  82. //return message;
  83. }
  84. }
  85. }
  86. Log.Info("end HandleYzData = " + message);
  87. //return message;
  88. }
  89. /// <summary>
  90. /// 返回诊疗项目ID
  91. /// </summary>
  92. /// <param name="rsAdvice"></param>
  93. /// <returns></returns>
  94. public static void GetTreatmentId(List<YZData> list,out string codeNo,out List<Codes> listlis, out List<Codes> listPacs)
  95. {
  96. //lis = "";
  97. //lis_id = "";
  98. //pacs = "";
  99. //pacs_id = "";
  100. codeNo = "";
  101. listlis = new List<Codes>();
  102. listPacs = new List<Codes>();
  103. for (var i = 0; i < list.Count; i++)
  104. {
  105. if (list[i].诊疗类别 == "C" && list[i].相关ID != "0.0")
  106. {
  107. string code = "";
  108. int total = 0;
  109. IsLisProject(list[i].诊疗项目ID, out code, out total);
  110. if (total > 0)
  111. {
  112. Codes codes = new Codes();
  113. codes.id = list[i].相关ID; //原先是 取id 不行
  114. codes.code = code;
  115. listlis.Add(codes);
  116. //lis += list[i].诊疗项目ID + ",";
  117. //lis_id += list[i].ID + ",";
  118. codeNo += code + "#";
  119. }
  120. }
  121. else if (list[i].诊疗类别 == "D" && list[i].相关ID != "0.0")
  122. {
  123. //pacs = list[i].诊疗项目ID + ",";
  124. //pacs_id = list[i].ID + ",";
  125. int total = 0;
  126. string type = "";
  127. //IsPacsProject(list[i].诊疗项目ID, out total, out type);
  128. String param = list[i].诊疗项目ID + "_" + list[i].标本部位 + "_" + list[i].检查方法;
  129. IsPacsProject(param, out total, out type);
  130. if (total >0)
  131. {
  132. Codes codes = new Codes();
  133. codes.id = list[i].相关ID;
  134. codes.type = type;
  135. listPacs.Add(codes);
  136. codeNo += type + "#";
  137. }
  138. }
  139. }
  140. //lis = lis.Length > 0 ? lis.Substring(0, lis.Length - 1) : lis;
  141. codeNo = codeNo.Length > 0 ? codeNo.Substring(0, codeNo.Length - 1) : codeNo;
  142. //pacs = pacs.Length > 0 ? pacs.Substring(0, pacs.Length - 1) : pacs;
  143. //lis_id = lis_id.Length > 0 ? lis_id.Substring(0, lis_id.Length - 1) : lis_id;
  144. //pacs_id = pacs_id.Length > 0 ? pacs_id.Substring(0, pacs_id.Length - 1) : pacs_id;
  145. }
  146. /// <summary>
  147. /// 住院
  148. /// </summary>
  149. /// <param name="lngPatientID"></param>
  150. /// <param name="ZYID"></param>
  151. /// <param name="standardItemId"></param>
  152. /// <returns></returns>
  153. public static Recordset GetZYPostJson(long lngPatientID, long ZYID, string no,int type, string xgId)
  154. {
  155. string sql = @"Select distinct a.姓名 ""PatientName"",
  156. b.身份证号 ""PatientIdCard"",
  157. e.机构编码 ""jzOrgCode"",
  158. e.机构名称 ""jzOrgName"",
  159. c.编号 ""jzDoctorCode"",
  160. c.姓名 ""jzDoctorName"",
  161. d.编码 ""jzDeptCode"",
  162. d.名称 ""jzDeptName"",
  163. a.住院号 ""businessNumber"",
  164. '{2}' ""standardItemId"",
  165. '' ""reportStartTime"",
  166. '' ""reportEndTime"",
  167. '{3}' ""hrType"",
  168. sysdate ""applyTime"",
  169. '{4}' ""hisApplyCode"",
  170. '2'' ""patientType"",
  171. ,
  172. (Select sum(B.收费数量 *
  173. Decode(C.是否变价, 1, Sum(D.缺省价格), Sum(D.现价)))
  174. From 病人医嘱记录 A,
  175. (Select *
  176. From (Select C.诊疗项目ID,
  177. C.收费项目ID,
  178. C.检查部位,
  179. C.检查方法,
  180. C.费用性质,
  181. C.收费数量,
  182. C.固有对照,
  183. C.从属项目,
  184. C.收费方式,
  185. C.适用科室id,
  186. Max(Nvl(c.适用科室id, 0)) Over(Partition By c.诊疗项目id, c.检查部位, c.检查方法, c.费用性质) As Top
  187. From 诊疗收费关系 C, 病人医嘱记录 A
  188. Where (A.ID = {4} Or A.相关ID ={4})
  189. And A.诊疗项目ID + 0 = C.诊疗项目ID
  190. And (a.相关id Is Null And a.执行标记 In (1, 2) And c.费用性质 = 1 Or
  191. a.标本部位 = c.检查部位 And a.检查方法 = c.检查方法 And
  192. Nvl(c.费用性质, 0) = 0 Or
  193. (a.检查方法 Is Null or a.诊疗类别 = 'E' And Exists
  194. (Select 1
  195. From 诊疗项目目录 Z
  196. Where Z.id = a.诊疗项目ID
  197. And Z.操作类型 = '4')) And Nvl(c.费用性质, 0) = 0 And
  198. c.检查部位 Is Null And c.检查方法 Is Null)
  199. And (C.适用科室ID is Null or
  200. C.适用科室ID = A.执行科室ID And C.病人来源 = 1))
  201. Where Nvl(适用科室id, 0) = Top) B,
  202. 收费项目目录 C,
  203. 收费价目 D
  204. Where A.诊疗类别 Not IN ('4', '5', '6', '7')
  205. And A.医嘱状态 IN (-1, 1, 2)
  206. And A.诊疗项目ID + 0 = B.诊疗项目ID
  207. And D.价格等级 is Null
  208. And (A.相关ID is Null And A.执行标记 IN (1, 2) And B.费用性质 = 1 Or
  209. A.标本部位 = B.检查部位 And A.检查方法 = B.检查方法 And Nvl(B.费用性质, 0) = 0 Or
  210. (A.检查方法 is Null or a.诊疗类别 = 'E' And Exists
  211. (Select 1
  212. From 诊疗项目目录 Z
  213. Where Z.id = a.诊疗项目ID
  214. And Z.操作类型 = '4')) And Nvl(B.费用性质, 0) = 0 And B.检查部位 is Null And
  215. B.检查方法 is Null)
  216. And Nvl(A.计价特性, 0) = 0
  217. And Nvl(A.执行性质, 0) Not IN (0, 5)
  218. And B.收费项目ID = C.ID
  219. And B.收费项目ID = D.收费细目ID
  220. And ((Sysdate Between D.执行日期 and D.终止日期) or
  221. (Sysdate >= D.执行日期 And D.终止日期 is NULL))
  222. And (C.撤档时间 is NULL Or C.撤档时间 = To_Date('3000-01-01', 'YYYY-MM-DD'))
  223. And C.服务对象 IN (1, 3)
  224. And (Nvl(B.收费方式, 0) = 1 And C.类别 = '4' And B.收费项目ID = '0' Or
  225. Not (Nvl(B.收费方式, 0) = 1 And C.类别 = '4' And '0' <> 0))
  226. And (C.站点 = '-' Or C.站点 is Null)
  227. And (A.ID = {4} Or A.相关ID = {4})
  228. Group by A.ID,
  229. A.相关ID,
  230. A.序号,
  231. A.诊疗类别,
  232. A.诊疗项目ID,
  233. A.标本部位,
  234. A.检查方法,
  235. A.执行标记,
  236. Nvl(B.费用性质, 0),
  237. Nvl(B.收费方式, 0),
  238. B.收费项目ID,
  239. C.计算单位,
  240. B.收费数量,
  241. C.是否变价,
  242. A.执行科室ID,
  243. Nvl(B.从属项目, 0)
  244. ) ""totalAmount""
  245. From 病案主页 a,病人信息 b, 人员表 c,部门表 d,ZLLPMR.互认配置表 e
  246. Where b.病人id = a.病人id
  247. And c.姓名 = a.住院医师
  248. And d.Id = a.入院科室id
  249. And a.病人id = {0} And a.主页id = {1}";
  250. sql = string.Format(sql, lngPatientID, ZYID, no,type,xgId);
  251. Recordset rd = new Recordset();
  252. Tools.QueryTable(sql, out rd);
  253. return rd;
  254. }
  255. /// <summary>
  256. /// 门诊
  257. /// </summary>
  258. /// <param name="lngPatientID"></param>
  259. /// <param name="ZYID"></param>
  260. /// <param name="standardItemId"></param>
  261. /// <returns></returns>
  262. public static Recordset GetMZPostJson(long ZYID, string no,int type, string xgId)
  263. {
  264. string sql = @"Select distinct a.姓名 ""PatientName"",
  265. b.身份证号 ""PatientIdCard"",
  266. e.机构编码 ""jzOrgCode"",
  267. e.机构名称 ""jzOrgName"",
  268. c.编号 ""jzDoctorCode"",
  269. c.姓名 ""jzDoctorName"",
  270. d.编码 ""jzDeptCode"",
  271. d.名称 ""jzDeptName"",
  272. a.门诊号 ""businessNumber"",
  273. '{1}' ""standardItemId"",
  274. '' ""reportStartTime"",
  275. '' ""reportEndTime"",
  276. '{2}' ""hrType"",
  277. sysdate ""applyTime"",
  278. '{3}' ""hisApplyCode"",
  279. '1'' ""patientType"",
  280. ,
  281. (Select sum(B.收费数量 *
  282. Decode(C.是否变价, 1, Sum(D.缺省价格), Sum(D.现价)))
  283. From 病人医嘱记录 A,
  284. (Select *
  285. From (Select C.诊疗项目ID,
  286. C.收费项目ID,
  287. C.检查部位,
  288. C.检查方法,
  289. C.费用性质,
  290. C.收费数量,
  291. C.固有对照,
  292. C.从属项目,
  293. C.收费方式,
  294. C.适用科室id,
  295. Max(Nvl(c.适用科室id, 0)) Over(Partition By c.诊疗项目id, c.检查部位, c.检查方法, c.费用性质) As Top
  296. From 诊疗收费关系 C, 病人医嘱记录 A
  297. Where (A.ID = {3} Or A.相关ID = {3})
  298. And A.诊疗项目ID + 0 = C.诊疗项目ID
  299. And (a.相关id Is Null And a.执行标记 In (1, 2) And c.费用性质 = 1 Or
  300. a.标本部位 = c.检查部位 And a.检查方法 = c.检查方法 And
  301. Nvl(c.费用性质, 0) = 0 Or
  302. (a.检查方法 Is Null or a.诊疗类别 = 'E' And Exists
  303. (Select 1
  304. From 诊疗项目目录 Z
  305. Where Z.id = a.诊疗项目ID
  306. And Z.操作类型 = '4')) And Nvl(c.费用性质, 0) = 0 And
  307. c.检查部位 Is Null And c.检查方法 Is Null)
  308. And (C.适用科室ID is Null or
  309. C.适用科室ID = A.执行科室ID And C.病人来源 = 1))
  310. Where Nvl(适用科室id, 0) = Top) B,
  311. 收费项目目录 C,
  312. 收费价目 D
  313. Where A.诊疗类别 Not IN ('4', '5', '6', '7')
  314. And A.医嘱状态 IN (-1, 1, 2)
  315. And A.诊疗项目ID + 0 = B.诊疗项目ID
  316. And D.价格等级 is Null
  317. And (A.相关ID is Null And A.执行标记 IN (1, 2) And B.费用性质 = 1 Or
  318. A.标本部位 = B.检查部位 And A.检查方法 = B.检查方法 And Nvl(B.费用性质, 0) = 0 Or
  319. (A.检查方法 is Null or a.诊疗类别 = 'E' And Exists
  320. (Select 1
  321. From 诊疗项目目录 Z
  322. Where Z.id = a.诊疗项目ID
  323. And Z.操作类型 = '4')) And Nvl(B.费用性质, 0) = 0 And B.检查部位 is Null And
  324. B.检查方法 is Null)
  325. And Nvl(A.计价特性, 0) = 0
  326. And Nvl(A.执行性质, 0) Not IN (0, 5)
  327. And B.收费项目ID = C.ID
  328. And B.收费项目ID = D.收费细目ID
  329. And ((Sysdate Between D.执行日期 and D.终止日期) or
  330. (Sysdate >= D.执行日期 And D.终止日期 is NULL))
  331. And (C.撤档时间 is NULL Or C.撤档时间 = To_Date('3000-01-01', 'YYYY-MM-DD'))
  332. And C.服务对象 IN (1, 3)
  333. And (Nvl(B.收费方式, 0) = 1 And C.类别 = '4' And B.收费项目ID = '0' Or
  334. Not (Nvl(B.收费方式, 0) = 1 And C.类别 = '4' And '0' <> 0))
  335. And (C.站点 = '-' Or C.站点 is Null)
  336. And (A.ID = {3} Or A.相关ID = {3})
  337. Group by A.ID,
  338. A.相关ID,
  339. A.序号,
  340. A.诊疗类别,
  341. A.诊疗项目ID,
  342. A.标本部位,
  343. A.检查方法,
  344. A.执行标记,
  345. Nvl(B.费用性质, 0),
  346. Nvl(B.收费方式, 0),
  347. B.收费项目ID,
  348. C.计算单位,
  349. B.收费数量,
  350. C.是否变价,
  351. A.执行科室ID,
  352. Nvl(B.从属项目, 0)
  353. ) ""totalAmount""
  354. From 病人挂号记录 a,病人信息 b, 人员表 c,部门表 d,ZLLPMR.互认配置表 e
  355. Where b.病人id = a.病人id
  356. And c.姓名 = a.执行人
  357. And d.Id = a.执行部门id
  358. And a.id = {0}";
  359. sql = string.Format(sql, ZYID, no,type);
  360. Recordset rd = new Recordset();
  361. Tools.QueryTable(sql, out rd);
  362. return rd;
  363. }
  364. /// <summary>
  365. /// 判断之前是否开个互认医嘱
  366. /// </summary>
  367. /// <param name="patientId"></param>
  368. /// <param name="zlId"></param>
  369. /// <param name="zlType"></param>
  370. /// <param name="limitDay"></param>
  371. /// <param name="existHuRemYz"></param>
  372. public static void GetHuRenYzData( long patientId ,string zlId,string zlType, long limitDay,out int existHuRemYz)
  373. {
  374. Log.Info("GetHuRenYzData");
  375. existHuRemYz = 0;
  376. try
  377. {
  378. string sql = @"Select count(1) count
  379. From 病人医嘱记录 where 病人id={0} and 诊疗项目id = {1} and 诊疗类别 ='{2}' and 开嘱时间 > sysdate -{3} and 医嘱内容 like '%【互认】' ";
  380. sql = string.Format(sql, patientId, zlId, zlType, limitDay);
  381. Log.Info(sql);
  382. Recordset rd = new Recordset();
  383. Tools.QueryTable(sql, out rd);
  384. if (!rd.EOF)
  385. {
  386. rd.MoveFirst();
  387. existHuRemYz = int.Parse(rd.Fields["count"].Value.ToString());
  388. }
  389. }catch(Exception ex)
  390. {
  391. Log.Info("GetHuRenYzData Exception" + ex.Message);
  392. existHuRemYz = 0;
  393. }
  394. }
  395. public static int InsertLis(LISItem lis, long lngPatientID, long lngClinicID, string date, string no,long yzid)
  396. {
  397. string sql = @"Insert Into ZLLPMR.互认_LIS(LISCHECKREPORTID,REPORTNAME,ORGNAME,REPORTTIME,病人ID,主页ID,TIME,OPERATORNO,医嘱id)
  398. Values('{0}','{1}','{2}',to_date('{3}','yyyy/mm/dd hh24:mi:ss'),{4},{5},to_date('{6}','yyyy/mm/dd hh24:mi:ss'),'{7}',{8})";
  399. sql = string.Format(sql, lis.LisCheckReportId, lis.ReportName, lis.OrgName, lis.ReportTime, lngPatientID, lngClinicID, date, no, yzid);
  400. Log.Info("InsertLis:" + sql);
  401. int res = Tools.ExecuteSql(sql);
  402. return res;
  403. }
  404. public static void InsertLisItem(ItemListItem item, string id, long lngPatientID, long lngClinicID, string date)
  405. {
  406. string sql = @"Insert Into ZLLPMR.互认_LISITEMS(LISCHECKREPORTID,ITEMCODE,ITEMNAME,RESULT,UNIT,HINT,RANGE,STANDARDITEMID,TIME)
  407. Values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}',to_date('{8}','yyyy/mm/dd hh24:mi:ss'))";
  408. sql = string.Format(sql, id, item.ItemCode, item.ItemName, item.Result, item.Unit, item.Hint, item.Range, item.StandardItemId, date);
  409. //Log.Info("InsertLisItem:" + sql);
  410. Tools.ExecuteSql(sql);
  411. }
  412. public static int InsertPacs(PACSItem item, long lngPatientID, long lngClinicID, string no,long yzid)
  413. {
  414. string sql = @"Insert Into ZLLPMR.互认_PACS(PACSCHECKREPORTID,ITEMNAME,REPORTTIME,CHECKTYPENAME,POSITIONNAME,STANDARDITEMID,DIAGNOSRESULT,ORGNAME,病人ID,主页ID,TIME,OPERATORNO,医嘱id,REPORTTYPECODE)
  415. Values('{0}','{1}',to_date('{2}','yyyy/mm/dd hh24:mi:ss'),'{3}','{4}','{5}','{6}','{7}',{8},{9},sysdate,'{10}','{11}','{12}')";
  416. //var lis = result.ResultText[0].LIS[0];
  417. sql = string.Format(sql, item.PacsCheckReportId, item.ItemName, item.ReportTime, item.CheckTypeName, item.PositionName, item.StandardItemId, Tools.FormatStr(item.DiagnosResult), item.OrgName, lngPatientID, lngClinicID, no, yzid, item.reportTypeCode);
  418. Log.Info("InsertPacs==>"+sql);
  419. return Tools.ExecuteSql(sql);
  420. }
  421. public static int GetLis(string id)
  422. {
  423. int total = 0;
  424. string sql = @"Select Count(1) as TOTAL From ZLLPMR.互认_LIS Where LISCHECKREPORTID = '{0}'";
  425. sql = string.Format(sql, id);
  426. Recordset rd = new Recordset();
  427. Tools.QueryTable(sql, out rd);
  428. if (!rd.EOF)
  429. {
  430. rd.MoveFirst();
  431. total = int.Parse(rd.Fields["TOTAL"].Value.ToString());
  432. }
  433. return total;
  434. }
  435. public static void SaveData(Results result, long lngPatientID, long lngClinicID, string no, List<Codes> listlis, List<Codes> listpacs,out long lis_id,out long pacs_id)
  436. {
  437. lis_id = -1;
  438. pacs_id = -1;
  439. //Log.Info("666");
  440. var lis = result.ResultText[0].LIS;
  441. var pacs = result.ResultText[0].PACS;
  442. bool state = true;
  443. if (lis != null)
  444. {
  445. //Log.Info("777");
  446. for (int i = 0; i < lis.Count; i++)
  447. {
  448. //long yzid = null;
  449. //string code = lis[i].ItemList[0].StandardItemId;
  450. for (int j = 0; j < lis[i].ItemList.Count; j++)
  451. {
  452. //Log.Info("state:" + state);
  453. if (!state)
  454. {
  455. break;
  456. }
  457. foreach (var items in listlis)
  458. {
  459. //Log.Info("state666");
  460. // if (items.code.Contains(lis[i].ItemList[j].StandardItemId))
  461. //{
  462. // Log.Info("items.code:" + items.code);
  463. //Log.Info("items.id:" + items.id);
  464. string date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  465. //Log.Info("items.code:" + items.code);
  466. //Log.Info("items.id:" + items.id);
  467. int res = InsertLis(lis[i], lngPatientID, lngClinicID, date, no, long.Parse(items.id));
  468. //Log.Info("res:" + res);
  469. if (res > 0)
  470. {
  471. if (lis_id == -1)
  472. {
  473. lis_id = long.Parse(items.id);
  474. }
  475. //Log.Info("res1");
  476. for (int k = 0; k < lis[i].ItemList.Count; k++)
  477. {
  478. //Log.Info("8888");
  479. InsertLisItem(lis[i].ItemList[k], lis[i].LisCheckReportId, lngPatientID, lngClinicID, date);
  480. }
  481. }
  482. state = false;
  483. // }
  484. }
  485. }
  486. }
  487. }
  488. if (pacs != null)
  489. {
  490. long id =long.Parse(listpacs[0].id);
  491. for (int i = 0; i < pacs.Count; i++)
  492. {
  493. foreach (var items in listpacs)
  494. {
  495. if (pacs[i].reportTypeCode == items.type)
  496. {
  497. id = long.Parse(items.id);
  498. break;
  499. }
  500. }
  501. int res = InsertPacs(pacs[i], lngPatientID, lngClinicID, no, id);
  502. if (res > 0)
  503. {
  504. if (pacs_id == -1)
  505. {
  506. pacs_id = id;
  507. }
  508. }
  509. }
  510. }
  511. }
  512. /// <summary>
  513. /// 是否互认
  514. /// </summary>
  515. /// <returns></returns>
  516. public static void IsAgree(out int res,out int date,out int yzzState)
  517. {
  518. res = 1;
  519. date = 20000;
  520. yzzState = 0;
  521. try
  522. {
  523. string sql = @"Select 互认 As AGREE,WAITINGDATE From zllpmr.互认配置表";
  524. Recordset rd = new Recordset();
  525. Tools.QueryTable(sql, out rd);
  526. if (!rd.EOF)
  527. {
  528. rd.MoveFirst();
  529. res = int.Parse(rd.Fields["AGREE"].Value.ToString());
  530. date = int.Parse(rd.Fields["WAITINGDATE"].Value.ToString());
  531. //yzzState = int.Parse(rd.Fields["一张纸"].Value.ToString());
  532. }
  533. }
  534. catch (Exception ex)
  535. {
  536. Log.Info(ex.Message);
  537. Log.Info(ex.StackTrace);
  538. }
  539. }
  540. public static void getUrlYzzCancelMedical(out string url)
  541. {
  542. url = "";
  543. try
  544. {
  545. string sql = @"Select 一张纸URL From zllpmr.互认配置表";
  546. Recordset rd = new Recordset();
  547. Tools.QueryTable(sql, out rd);
  548. if (!rd.EOF)
  549. {
  550. rd.MoveFirst();
  551. url = int.Parse(rd.Fields["一张纸URL"].Value.ToString());
  552. }
  553. }
  554. catch (Exception ex)
  555. {
  556. Log.Info(ex.Message);
  557. Log.Info(ex.StackTrace);
  558. }
  559. }
  560. /// <summary>
  561. /// 是否互认
  562. /// </summary>
  563. /// <returns></returns>
  564. public static void ExistHuRemYz(out long limit_day)
  565. {
  566. limit_day = 1;
  567. try
  568. {
  569. string sql = @"Select limit_day From zllpmr.互认配置表";
  570. Recordset rd = new Recordset();
  571. Tools.QueryTable(sql, out rd);
  572. if (!rd.EOF)
  573. {
  574. rd.MoveFirst();
  575. limit_day = long.Parse(rd.Fields["limit_day"].Value.ToString());
  576. }
  577. }
  578. catch (Exception ex)
  579. {
  580. Log.Info(ex.Message);
  581. Log.Info(ex.StackTrace);
  582. }
  583. }
  584. /// <summary>
  585. /// 仅一张纸使用,查询发送的医嘱
  586. /// </summary>
  587. /// <param name="ZYID"></param>
  588. /// <param name="no"></param>
  589. /// <param name="type"></param>
  590. /// <returns></returns>
  591. public static List<YZData> GetYZList(long fsh)
  592. {
  593. string sql = @"select
  594. to_char(b.ID) as id ,
  595. decode(b.相关id,null,'0.0',to_char(b.相关id)) as 相关id,
  596. to_char(b.前提id ) as 前提id,
  597. to_char(b.病人来源 ) as 病人来源,
  598. to_char(b.病人id )as 病人id,
  599. to_char(b.主页id )as 主页id,
  600. to_char(b.挂号单 )as 挂号单,
  601. to_char(b.婴儿 )as 婴儿,
  602. to_char(b.姓名 )as 姓名,
  603. to_char(b.性别 )as 性别,
  604. to_char(b.年龄 )as 年龄,
  605. to_char(b.病人科室id )as 病人科室id,
  606. to_char(b.序号 )as 序号,
  607. to_char(b.医嘱状态 )as 医嘱状态,
  608. to_char(b.医嘱期效 )as 医嘱期效,
  609. to_char(b.诊疗类别 )as 诊疗类别,
  610. to_char(b.诊疗项目ID )as 诊疗项目ID,
  611. to_char(b.标本部位 )as 标本部位,
  612. to_char(b.检查方法 )as 检查方法,
  613. to_char(b.收费细目id )as 收费细目id,
  614. to_char(b.天数 )as 天数,
  615. to_char(b.单次用量 )as 单次用量,
  616. to_char(b.总给予量 )as 总给予量,
  617. to_char(b.医嘱内容 )as 医嘱内容,
  618. to_char(b.医生嘱托 )as 医生嘱托,
  619. to_char(b.执行科室ID )as 执行科室ID,
  620. to_char(b.执行频次 )as 执行频次,
  621. to_char(b.频率次数 )as 频率次数,
  622. to_char(b.频率间隔 )as 频率间隔,
  623. to_char(b.间隔单位 )as 间隔单位,
  624. to_char(b.执行时间方案 )as 执行时间方案,
  625. to_char(b.计价特性 )as 计价特性,
  626. to_char(b.执行性质 )as 执行性质,
  627. to_char(b.执行标记 )as 执行标记,
  628. to_char(b.可否分零 )as 可否分零,
  629. to_char(b.紧急标志 )as 紧急标志,
  630. to_char(b.开始执行时间,'yyyy-mm-dd hh24:mi:ss' )as 开始执行时间,
  631. to_char(b.执行终止时间 ,'yyyy-mm-dd hh24:mi:ss' )as 执行终止时间,
  632. to_char(b.开嘱科室ID )as 开嘱科室ID,
  633. to_char(b.开嘱医生 )as 开嘱医生,
  634. to_char(b.开嘱时间 ,'yyyy-mm-dd hh24:mi:ss' )as 开嘱时间,
  635. to_char(b.摘要) as 摘要
  636. from 病人医嘱发送 a,病人医嘱记录 b
  637. where b.id = a.医嘱id and 发送号 = {0} and 诊疗类别 in('D','C')
  638. and NOT EXISTS(select 1 from 病人医嘱记录 where id = b.id and 诊疗类别 = 'D' and 相关id is not null)";
  639. sql = string.Format(sql, fsh);
  640. Recordset recordset = new Recordset();
  641. Tools.QueryTable(sql, out recordset);
  642. List<YZData> list = new List<YZData>();
  643. while (!recordset.EOF)
  644. {
  645. YZData yz = new YZData();
  646. yz.ID = recordset.Fields["ID"].Value.ToString();
  647. yz.相关ID = recordset.Fields["相关ID"].Value.ToString();// yz.3767642yz.,
  648. yz.前提ID = recordset.Fields["前提ID"].Value.ToString();// yz.0.0yz.,
  649. yz.病人来源 = recordset.Fields["病人来源"].Value.ToString();// yz.2yz.,
  650. yz.病人ID = recordset.Fields["病人ID"].Value.ToString();// yz.46688yz.,
  651. yz.主页ID = recordset.Fields["主页ID"].Value.ToString();// yz.1yz.,
  652. yz.挂号单 = recordset.Fields["挂号单"].Value.ToString();// yz.yz.,
  653. yz.婴儿 = recordset.Fields["婴儿"].Value.ToString();// yz.0.0yz.,
  654. yz.姓名 = recordset.Fields["姓名"].Value.ToString();// yz.王少清yz.,
  655. yz.性别 = recordset.Fields["性别"].Value.ToString();// yz.男yz.,
  656. yz.年龄 = recordset.Fields["年龄"].Value.ToString();// yz.86yz.,
  657. yz.病人科室ID = recordset.Fields["病人科室ID"].Value.ToString();// yz.232yz.,
  658. yz.序号 = recordset.Fields["序号"].Value.ToString();// yz.87yz.,
  659. yz.医嘱状态 = recordset.Fields["医嘱状态"].Value.ToString();// yz.-1yz.,
  660. yz.医嘱期效 = recordset.Fields["医嘱期效"].Value.ToString();// yz.1yz.,
  661. yz.诊疗类别 = recordset.Fields["诊疗类别"].Value.ToString();// yz.Cyz.,
  662. yz.诊疗项目ID = recordset.Fields["诊疗项目ID"].Value.ToString();// yz.1890yz.,
  663. yz.标本部位 = recordset.Fields["标本部位"].Value.ToString();// yz.静脉血yz.,
  664. yz.检查方法 = recordset.Fields["检查方法"].Value.ToString();// yz.yz.,
  665. yz.收费细目ID = recordset.Fields["收费细目ID"].Value.ToString();// yz.0.0yz.,
  666. yz.天数 = recordset.Fields["天数"].Value.ToString();// yz.0.0yz.,
  667. yz.单次用量 = recordset.Fields["单次用量"].Value.ToString();// yz.0.0yz.,
  668. yz.总给予量 = recordset.Fields["总给予量"].Value.ToString();// yz.1yz.,
  669. yz.医嘱内容 = recordset.Fields["医嘱内容"].Value.ToString();// yz.肝功能yz.,
  670. yz.医生嘱托 = recordset.Fields["医生嘱托"].Value.ToString();// yz.yz.,
  671. yz.执行科室ID = recordset.Fields["执行科室ID"].Value.ToString();// yz.167yz.,
  672. list.Add(yz);
  673. recordset.MoveNext();
  674. }
  675. return list;
  676. }
  677. /// <summary>
  678. /// 作废医嘱
  679. /// </summary>
  680. public static void CancelYz(long 病人id, long 主医嘱id, int lis, int pacs)
  681. {
  682. string sql = @"select distinct c.no
  683. from 病人医嘱记录 a, 病人医嘱发送 b, 门诊费用记录 c
  684. where b.医嘱id = a.id
  685. and c.医嘱序号 = b.医嘱id
  686. and a.病人id = {0}
  687. and (a.id = {1} or a.相关id = {1})";
  688. sql = string.Format(sql, 病人id, 主医嘱id);
  689. Recordset recordset = new Recordset();
  690. Tools.QueryTable(sql, out recordset);
  691. string json = "{\"input\":{\"operator_name\":\"\",\"operator_code\":\"\",\"operator_time\":\"\",\"del_list\":[";
  692. while (!recordset.EOF)
  693. {
  694. string no = recordset.Fields["NO"].Value.ToString();
  695. json += "{\"fee_source\":1,\"fee_bill_type\":1,\"fee_no\":\""+ no + "\",\"del_type\":2,\"serial_num\":\"\",\"exe_sta_nums\":\"\",\"fee_ids\":\"\"},";
  696. recordset.MoveNext();
  697. }
  698. json = json.Substring(0,json.Length - 1);
  699. json += "]}}";
  700. //原始调用过程没有作用 改用数据处理平台中转
  701. //Tools.ExecuteStoredProc(病人id, 主医嘱id, json, lis, pacs);
  702. int lisMessage = 0;
  703. int pacsMessage = 0;
  704. //调有 http
  705. Dictionary<string, string> body = new Dictionary<string, string>();
  706. body.Add("patientId", 病人id.ToString());
  707. body.Add("medicalOrderId", 主医嘱id.ToString());
  708. body.Add("jsonIn", json);
  709. if (lis>0)
  710. {
  711. lisMessage = 1;
  712. }
  713. if (pacs>0)
  714. {
  715. pacsMessage = 1;
  716. }
  717. body.Add("lisMessage", lisMessage.ToString());
  718. body.Add("pacsMessage", pacsMessage.ToString());
  719. string url = "http://172.30.0.66:7000/cancelMedicalForYzz";
  720. getUrlYzzCancelMedical(out url);
  721. Log.Info("url="+ url);
  722. string resultString = HttpUtils.WSCenterData(url, body.ToString());
  723. Log.Info("resultString==" + resultString);
  724. }
  725. public List<BillProjectUpload> GetBillProjects(long lngSendID,string hostName,string patientId)
  726. {
  727. List<BillProjectUpload> billList = new List<BillProjectUpload>();
  728. List<YZData> list = GetYZList(lngSendID);
  729. for (var i = 0; i < list.Count; i++)
  730. {
  731. if (list[i].诊疗类别 == "C" && list[i].相关ID != "0.0")
  732. {
  733. string code = "";
  734. int total = 0;
  735. IsLisProject(list[i].诊疗项目ID, out code, out total);
  736. if (total > 0)
  737. {
  738. //进来才说明是互认项目
  739. BillProjectUpload billProject = new BillProjectUpload();
  740. billProject.billProjectName = list[i].医嘱内容;
  741. billProject.billName = list[i].开嘱医生;
  742. billProject.billTime = DateTime.Now.ToString("yyyy-MM-DD HH:mm:ss");
  743. billProject.billType = "C";
  744. billProject.computerName = hostName;
  745. billProject.patientId = patientId;
  746. billProject.medicId = list[i].ID;
  747. billList.Add(billProject);
  748. }
  749. }
  750. else if (list[i].诊疗类别 == "D" && list[i].相关ID != "0.0")
  751. {
  752. int total = 0;
  753. string type = "";
  754. String param = list[i].诊疗项目ID + "_" + list[i].标本部位 + "_" + list[i].检查方法;
  755. IsPacsProject(param, out total, out type);
  756. if (total > 0)
  757. {
  758. //进来才说明是互认项目
  759. BillProjectUpload billProject = new BillProjectUpload();
  760. billProject.billProjectName = list[i].医嘱内容;
  761. billProject.billName = Infos.UserInfo.编号;
  762. billProject.billTime = DateTime.Now.ToString("yyyy-MM-DD HH:mm:ss");
  763. billProject.billType = "D";
  764. billProject.computerName = hostName;
  765. billProject.patientId = patientId;
  766. billProject.medicId = list[i].ID;
  767. billList.Add(billProject);
  768. }
  769. }
  770. }
  771. if(billList.Count>0)
  772. {
  773. //保存开单数据
  774. }
  775. return billList;
  776. }
  777. }
  778. }