瀏覽代碼

对Scan任务进行操作查询接口并解析

singlese7en 2 年之前
父節點
當前提交
3d98b035cc
共有 100 個文件被更改,包括 9375 次插入0 次删除
  1. 255 0
      HisClientReceiveToKC.sln
  2. 1412 0
      IL.BizComponent/MediII.Adapter.BizComponent.ADT/ADTHandler.cs
  3. 269 0
      IL.BizComponent/MediII.Adapter.BizComponent.ADT/ADT_A01B01_Handler.cs
  4. 127 0
      IL.BizComponent/MediII.Adapter.BizComponent.ADT/ADT_A01B02_Handler.cs
  5. 133 0
      IL.BizComponent/MediII.Adapter.BizComponent.ADT/ADT_A01B03_Handler.cs
  6. 124 0
      IL.BizComponent/MediII.Adapter.BizComponent.ADT/ADT_A01B04_Handler.cs
  7. 258 0
      IL.BizComponent/MediII.Adapter.BizComponent.ADT/ADT_A02B01_Handler.cs
  8. 121 0
      IL.BizComponent/MediII.Adapter.BizComponent.ADT/ADT_A04B01_Handler.cs
  9. 127 0
      IL.BizComponent/MediII.Adapter.BizComponent.ADT/ADT_A04B02_Handler.cs
  10. 122 0
      IL.BizComponent/MediII.Adapter.BizComponent.ADT/ADT_A04B03_Handler.cs
  11. 44 0
      IL.BizComponent/MediII.Adapter.BizComponent.ADT/BizComponent_ADT.cs
  12. 152 0
      IL.BizComponent/MediII.Adapter.BizComponent.ADT/MediII.Adapter.BizComponent.ADT.csproj
  13. 36 0
      IL.BizComponent/MediII.Adapter.BizComponent.ADT/Properties/AssemblyInfo.cs
  14. 63 0
      IL.BizComponent/MediII.Adapter.BizComponent.ADT/Properties/Resources.Designer.cs
  15. 117 0
      IL.BizComponent/MediII.Adapter.BizComponent.ADT/Properties/Resources.resx
  16. 26 0
      IL.BizComponent/MediII.Adapter.BizComponent.ADT/Properties/Settings.Designer.cs
  17. 7 0
      IL.BizComponent/MediII.Adapter.BizComponent.ADT/Properties/Settings.settings
  18. 117 0
      IL.BizComponent/MediII.Adapter.BizComponent.Base/BaseBizComponent.cs
  19. 67 0
      IL.BizComponent/MediII.Adapter.BizComponent.Base/BizComponentFactory.cs
  20. 26 0
      IL.BizComponent/MediII.Adapter.BizComponent.Base/DefaultBizBehavior.cs
  21. 29 0
      IL.BizComponent/MediII.Adapter.BizComponent.Base/IBizBehavior.cs
  22. 19 0
      IL.BizComponent/MediII.Adapter.BizComponent.Base/IBizComponent.cs
  23. 127 0
      IL.BizComponent/MediII.Adapter.BizComponent.Base/MediII.Adapter.BizComponent.Base.csproj
  24. 36 0
      IL.BizComponent/MediII.Adapter.BizComponent.Base/Properties/AssemblyInfo.cs
  25. 598 0
      IL.BizComponent/MediII.Adapter.BizComponent.DFP/BizComponent_DFT.cs
  26. 103 0
      IL.BizComponent/MediII.Adapter.BizComponent.DFP/MediII.Adapter.BizComponent.DFT.csproj
  27. 36 0
      IL.BizComponent/MediII.Adapter.BizComponent.DFP/Properties/AssemblyInfo.cs
  28. 63 0
      IL.BizComponent/MediII.Adapter.BizComponent.MFN/BizComponent_MFN.cs
  29. 326 0
      IL.BizComponent/MediII.Adapter.BizComponent.MFN/MFNBase.cs
  30. 117 0
      IL.BizComponent/MediII.Adapter.BizComponent.MFN/MFN_Z2B_GY_KESHI.cs
  31. 113 0
      IL.BizComponent/MediII.Adapter.BizComponent.MFN/MediII.Adapter.BizComponent.MFN.csproj
  32. 36 0
      IL.BizComponent/MediII.Adapter.BizComponent.MFN/Properties/AssemblyInfo.cs
  33. 668 0
      IL.BizComponent/MediII.Adapter.BizComponent.PMU/BizComponent_PMU.cs
  34. 102 0
      IL.BizComponent/MediII.Adapter.BizComponent.PMU/MediII.Adapter.BizComponent.PMU.csproj
  35. 36 0
      IL.BizComponent/MediII.Adapter.BizComponent.PMU/Properties/AssemblyInfo.cs
  36. 20 0
      MediII.Adapter.MsgToKCServer/ApplictStatic.cs
  37. 102 0
      MediII.Adapter.MsgToKCServer/MediII.Adapter.MsgToKCServer.csproj
  38. 37 0
      MediII.Adapter.MsgToKCServer/MsgToKCServer.Designer.cs
  39. 105 0
      MediII.Adapter.MsgToKCServer/MsgToKCServer.cs
  40. 24 0
      MediII.Adapter.MsgToKCServer/Program.cs
  41. 59 0
      MediII.Adapter.MsgToKCServer/ProjectInstaller.Designer.cs
  42. 24 0
      MediII.Adapter.MsgToKCServer/ProjectInstaller.cs
  43. 129 0
      MediII.Adapter.MsgToKCServer/ProjectInstaller.resx
  44. 36 0
      MediII.Adapter.MsgToKCServer/Properties/AssemblyInfo.cs
  45. 149 0
      MediII.Adapter.MsgToKCServer/ServiceStatusPublishManager.cs
  46. 108 0
      MediII.Adapter.MsgToKCServer/app.config
  47. 13 0
      MediII.Adapter.ReceiveToKCModel/BaseEntity.cs
  48. 46 0
      MediII.Adapter.ReceiveToKCModel/HL7_MessageSetEntity.cs
  49. 107 0
      MediII.Adapter.ReceiveToKCModel/HL7_ReceiveEntity.cs
  50. 126 0
      MediII.Adapter.ReceiveToKCModel/HL7_ScanEntity.cs
  51. 66 0
      MediII.Adapter.ReceiveToKCModel/HL7_SendMessageEntity.cs
  52. 68 0
      MediII.Adapter.ReceiveToKCModel/MediII.Adapter.ReceiveToKCModel.csproj
  53. 36 0
      MediII.Adapter.ReceiveToKCModel/Properties/AssemblyInfo.cs
  54. 19 0
      MediII.Adapter.ReceiveToKCModel/dic_department.cs
  55. 20 0
      MediII.Adapter.ReceiveToKCModel/his_doct.cs
  56. 24 0
      MediII.Adapter.ReceiveToKCModel/item_his_original.cs
  57. 26 0
      MediII.Adapter.ReceiveToKCModel/menzhen_medical_order.cs
  58. 29 0
      MediII.Adapter.ReceiveToKCModel/original_data_menzhen.cs
  59. 33 0
      MediII.Adapter.ReceiveToKCModel/original_data_zhuyuan.cs
  60. 24 0
      MediII.Adapter.ReceiveToKCModel/patient_trans.cs
  61. 25 0
      MediII.Adapter.ReceiveToKCModel/v_zhencha.cs
  62. 26 0
      MediII.Adapter.ReceiveToKCModel/zhuyuan_medical_order.cs
  63. 40 0
      MediII.Adapter.ReceiveToKCModel/zhuyuan_original.cs
  64. 23 0
      MediII.Adapter.Scan.UE/DebugScanner.cs
  65. 274 0
      MediII.Adapter.Scan.UE/DefaultDBScanner.cs
  66. 24 0
      MediII.Adapter.Scan.UE/HL7_A01B03_Scanner.cs
  67. 24 0
      MediII.Adapter.Scan.UE/HL7_A01B04_Scanner.cs
  68. 24 0
      MediII.Adapter.Scan.UE/HL7_A02B01_Scanner.cs
  69. 24 0
      MediII.Adapter.Scan.UE/HL7_A04B03_Scanner.cs
  70. 24 0
      MediII.Adapter.Scan.UE/HL7_A05B01_Scanner.cs
  71. 24 0
      MediII.Adapter.Scan.UE/HL7_DFT_Scanner.cs
  72. 97 0
      MediII.Adapter.Scan.UE/HL7_TimeOut_Scanner.cs
  73. 94 0
      MediII.Adapter.Scan.UE/HL7_TimeTask_Scanner.cs
  74. 132 0
      MediII.Adapter.Scan.UE/MediII.Adapter.BizComponent.UE.csproj
  75. 36 0
      MediII.Adapter.Scan.UE/Properties/AssemblyInfo.cs
  76. 11 0
      MediII.Adapter.Scan.UE/app.config
  77. 17 0
      MediII.Adapter.Scanner/App.Config
  78. 128 0
      MediII.Adapter.Scanner/DBScaner.cs
  79. 12 0
      MediII.Adapter.Scanner/Entity/BaseEntity.cs
  80. 45 0
      MediII.Adapter.Scanner/Entity/HL7_MessageSetEntity.cs
  81. 118 0
      MediII.Adapter.Scanner/MediII.Adapter.Scanner.csproj
  82. 14 0
      MediII.Adapter.Scanner/MessageItem.cs
  83. 36 0
      MediII.Adapter.Scanner/Properties/AssemblyInfo.cs
  84. 44 0
      MediII.Adapter.Scanner/ScanNormalTemplate.txt
  85. 58 0
      MediII.Adapter.Scanner/Scaner.cs
  86. 169 0
      MediII.Adapter.WinForm.Scan/MediII.Adapter.WinForm.Scanner.csproj
  87. 38 0
      MediII.Adapter.WinForm.Scan/Program.cs
  88. 36 0
      MediII.Adapter.WinForm.Scan/Properties/AssemblyInfo.cs
  89. 63 0
      MediII.Adapter.WinForm.Scan/Properties/Resources.Designer.cs
  90. 117 0
      MediII.Adapter.WinForm.Scan/Properties/Resources.resx
  91. 26 0
      MediII.Adapter.WinForm.Scan/Properties/Settings.Designer.cs
  92. 7 0
      MediII.Adapter.WinForm.Scan/Properties/Settings.settings
  93. 103 0
      MediII.Adapter.WinForm.Scan/app.config
  94. 二進制
      MessageToKC/UE/MediII.Adapter.BizComponent.UE.dll
  95. 二進制
      MessageToKC/UE/MediII.Adapter.Scan.Interface.dll
  96. 二進制
      MessageToKC/UE/MediII.Adapter.Scanner.dll
  97. 二進制
      MessageToKC/UE/MediII.Common.dll
  98. 二進制
      MessageToKC/UE/Microsoft.Practices.EnterpriseLibrary.Common.dll
  99. 二進制
      MessageToKC/UE/Microsoft.Practices.EnterpriseLibrary.Data.dll
  100. 二進制
      MessageToKC/UE/Microsoft.Practices.EnterpriseLibrary.Logging.dll

+ 255 - 0
HisClientReceiveToKC.sln

@@ -0,0 +1,255 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.21005.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediII.Adapter.BizComponent.ADT", "IL.BizComponent\MediII.Adapter.BizComponent.ADT\MediII.Adapter.BizComponent.ADT.csproj", "{E634900C-0A19-4575-A0F7-BF5780AE20C3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediII.Adapter.BizComponent.Base", "IL.BizComponent\MediII.Adapter.BizComponent.Base\MediII.Adapter.BizComponent.Base.csproj", "{619B1DBF-55B7-446B-AF40-852A6AB689A0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediII.Adapter.ReceiveToKCModel", "MediII.Adapter.ReceiveToKCModel\MediII.Adapter.ReceiveToKCModel.csproj", "{F182AC2B-A0D5-40D2-89AF-8D547606B6AC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediII.Adapter.BizComponent.UE", "MediII.Adapter.Scan.UE\MediII.Adapter.BizComponent.UE.csproj", "{0786BB9F-0092-44A2-9CA0-263F5A0AA86E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediII.Adapter.WinForm.Scanner", "MediII.Adapter.WinForm.Scan\MediII.Adapter.WinForm.Scanner.csproj", "{5E125823-EC26-4F15-B178-48E8387C5F1A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sacnner", "Sacnner", "{13F2A33E-FD55-41A7-9288-18572D9E5130}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ORM", "ORM", "{0F0E79A2-AED1-4FD1-859B-A518FCB4BA31}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "BizComponent", "BizComponent", "{092D7052-844E-4C0F-B6BB-D18B84FC7F99}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dll", "dll", "{746D4716-9F08-409E-9F3A-122F6F807E03}"
+	ProjectSection(SolutionItems) = preProject
+		..\dll\amqmdnet.dll = ..\dll\amqmdnet.dll
+		..\dll\amqmdunmanaged.dll = ..\dll\amqmdunmanaged.dll
+		..\dll\amqmdxcs.dll = ..\dll\amqmdxcs.dll
+		..\dll\AutoMapper.dll = ..\dll\AutoMapper.dll
+		..\dll\AutoMapper.xml = ..\dll\AutoMapper.xml
+		..\dll\ChnCharInfo.dll = ..\dll\ChnCharInfo.dll
+		..\dll\EFProviderWrapperToolkit.dll = ..\dll\EFProviderWrapperToolkit.dll
+		..\dll\EFTracingProvider.dll = ..\dll\EFTracingProvider.dll
+		..\dll\EntityFramework.dll = ..\dll\EntityFramework.dll
+		..\dll\IBM.XMS.dll = ..\dll\IBM.XMS.dll
+		..\dll\MediII.Adapter.BaseBiz.dll = ..\dll\MediII.Adapter.BaseBiz.dll
+		..\dll\MediII.Common.dll = ..\dll\MediII.Common.dll
+		..\dll\MediII.Common.MQAccess.dll = ..\dll\MediII.Common.MQAccess.dll
+		..\dll\MediII.Common.Processer.dll = ..\dll\MediII.Common.Processer.dll
+		..\dll\MediII.HL7.Mapping.dll = ..\dll\MediII.HL7.Mapping.dll
+		..\dll\Microsoft.Practices.EnterpriseLibrary.Common.dll = ..\dll\Microsoft.Practices.EnterpriseLibrary.Common.dll
+		..\dll\Microsoft.Practices.EnterpriseLibrary.Data.dll = ..\dll\Microsoft.Practices.EnterpriseLibrary.Data.dll
+		..\dll\Microsoft.Practices.EnterpriseLibrary.Logging.dll = ..\dll\Microsoft.Practices.EnterpriseLibrary.Logging.dll
+		..\dll\Microsoft.Practices.ServiceLocation.dll = ..\dll\Microsoft.Practices.ServiceLocation.dll
+		..\dll\Microsoft.Practices.Unity.Configuration.dll = ..\dll\Microsoft.Practices.Unity.Configuration.dll
+		..\dll\Microsoft.Practices.Unity.dll = ..\dll\Microsoft.Practices.Unity.dll
+		..\dll\Microsoft.Practices.Unity.Interception.Configuration.dll = ..\dll\Microsoft.Practices.Unity.Interception.Configuration.dll
+		..\dll\Microsoft.Practices.Unity.Interception.dll = ..\dll\Microsoft.Practices.Unity.Interception.dll
+	EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediII.Adapter.Scan.Interface", "..\Public\MediII.Adapter.Scan.Interface\MediII.Adapter.Scan.Interface.csproj", "{4E8C6D0E-E696-4F02-812F-CEDD6FE3F6DC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IL.Common", "..\Public\IL.Common\IL.Common.csproj", "{F320951F-886B-4F99-A3FD-5686C0A97868}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediII.Adapter.BizComponent.MFN", "IL.BizComponent\MediII.Adapter.BizComponent.MFN\MediII.Adapter.BizComponent.MFN.csproj", "{70F1BFF2-22D0-4B1D-BD85-4279FAC616C1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediII.Adapter.BizComponent.PMU", "IL.BizComponent\MediII.Adapter.BizComponent.PMU\MediII.Adapter.BizComponent.PMU.csproj", "{B937B9E7-11DE-47BF-9D62-FEAD3DE51D0D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediII.Adapter.Scanner", "MediII.Adapter.Scanner\MediII.Adapter.Scanner.csproj", "{0ADDDB14-B0F6-4D12-8025-5EC8124A511B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediII.Adapter.MsgToKCServer", "MediII.Adapter.MsgToKCServer\MediII.Adapter.MsgToKCServer.csproj", "{76458091-5802-4284-8861-5F96360119FF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test", "Test\Test.csproj", "{FB0F3AD4-26BC-44D6-B4BB-88380A445C53}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MediII.Adapter.BizComponent.DFT", "IL.BizComponent\MediII.Adapter.BizComponent.DFP\MediII.Adapter.BizComponent.DFT.csproj", "{8A266F13-DC0A-4639-A5C1-F9426F687A73}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Debug|Mixed Platforms = Debug|Mixed Platforms
+		Debug|x64 = Debug|x64
+		Debug|x86 = Debug|x86
+		Release|Any CPU = Release|Any CPU
+		Release|Mixed Platforms = Release|Mixed Platforms
+		Release|x64 = Release|x64
+		Release|x86 = Release|x86
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{E634900C-0A19-4575-A0F7-BF5780AE20C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{E634900C-0A19-4575-A0F7-BF5780AE20C3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{E634900C-0A19-4575-A0F7-BF5780AE20C3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{E634900C-0A19-4575-A0F7-BF5780AE20C3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{E634900C-0A19-4575-A0F7-BF5780AE20C3}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{E634900C-0A19-4575-A0F7-BF5780AE20C3}.Debug|x86.ActiveCfg = Debug|x86
+		{E634900C-0A19-4575-A0F7-BF5780AE20C3}.Debug|x86.Build.0 = Debug|x86
+		{E634900C-0A19-4575-A0F7-BF5780AE20C3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{E634900C-0A19-4575-A0F7-BF5780AE20C3}.Release|Any CPU.Build.0 = Release|Any CPU
+		{E634900C-0A19-4575-A0F7-BF5780AE20C3}.Release|Mixed Platforms.ActiveCfg = Release|x86
+		{E634900C-0A19-4575-A0F7-BF5780AE20C3}.Release|Mixed Platforms.Build.0 = Release|x86
+		{E634900C-0A19-4575-A0F7-BF5780AE20C3}.Release|x64.ActiveCfg = Release|Any CPU
+		{E634900C-0A19-4575-A0F7-BF5780AE20C3}.Release|x86.ActiveCfg = Release|x86
+		{E634900C-0A19-4575-A0F7-BF5780AE20C3}.Release|x86.Build.0 = Release|x86
+		{619B1DBF-55B7-446B-AF40-852A6AB689A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{619B1DBF-55B7-446B-AF40-852A6AB689A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{619B1DBF-55B7-446B-AF40-852A6AB689A0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{619B1DBF-55B7-446B-AF40-852A6AB689A0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{619B1DBF-55B7-446B-AF40-852A6AB689A0}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{619B1DBF-55B7-446B-AF40-852A6AB689A0}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{619B1DBF-55B7-446B-AF40-852A6AB689A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{619B1DBF-55B7-446B-AF40-852A6AB689A0}.Release|Any CPU.Build.0 = Release|Any CPU
+		{619B1DBF-55B7-446B-AF40-852A6AB689A0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{619B1DBF-55B7-446B-AF40-852A6AB689A0}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{619B1DBF-55B7-446B-AF40-852A6AB689A0}.Release|x64.ActiveCfg = Release|Any CPU
+		{619B1DBF-55B7-446B-AF40-852A6AB689A0}.Release|x86.ActiveCfg = Release|Any CPU
+		{F182AC2B-A0D5-40D2-89AF-8D547606B6AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F182AC2B-A0D5-40D2-89AF-8D547606B6AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F182AC2B-A0D5-40D2-89AF-8D547606B6AC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{F182AC2B-A0D5-40D2-89AF-8D547606B6AC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{F182AC2B-A0D5-40D2-89AF-8D547606B6AC}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{F182AC2B-A0D5-40D2-89AF-8D547606B6AC}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{F182AC2B-A0D5-40D2-89AF-8D547606B6AC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F182AC2B-A0D5-40D2-89AF-8D547606B6AC}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F182AC2B-A0D5-40D2-89AF-8D547606B6AC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{F182AC2B-A0D5-40D2-89AF-8D547606B6AC}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{F182AC2B-A0D5-40D2-89AF-8D547606B6AC}.Release|x64.ActiveCfg = Release|Any CPU
+		{F182AC2B-A0D5-40D2-89AF-8D547606B6AC}.Release|x86.ActiveCfg = Release|Any CPU
+		{0786BB9F-0092-44A2-9CA0-263F5A0AA86E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0786BB9F-0092-44A2-9CA0-263F5A0AA86E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0786BB9F-0092-44A2-9CA0-263F5A0AA86E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{0786BB9F-0092-44A2-9CA0-263F5A0AA86E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{0786BB9F-0092-44A2-9CA0-263F5A0AA86E}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{0786BB9F-0092-44A2-9CA0-263F5A0AA86E}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{0786BB9F-0092-44A2-9CA0-263F5A0AA86E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{0786BB9F-0092-44A2-9CA0-263F5A0AA86E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{0786BB9F-0092-44A2-9CA0-263F5A0AA86E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{0786BB9F-0092-44A2-9CA0-263F5A0AA86E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{0786BB9F-0092-44A2-9CA0-263F5A0AA86E}.Release|x64.ActiveCfg = Release|Any CPU
+		{0786BB9F-0092-44A2-9CA0-263F5A0AA86E}.Release|x86.ActiveCfg = Release|Any CPU
+		{5E125823-EC26-4F15-B178-48E8387C5F1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{5E125823-EC26-4F15-B178-48E8387C5F1A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{5E125823-EC26-4F15-B178-48E8387C5F1A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{5E125823-EC26-4F15-B178-48E8387C5F1A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{5E125823-EC26-4F15-B178-48E8387C5F1A}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{5E125823-EC26-4F15-B178-48E8387C5F1A}.Debug|x64.Build.0 = Debug|Any CPU
+		{5E125823-EC26-4F15-B178-48E8387C5F1A}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{5E125823-EC26-4F15-B178-48E8387C5F1A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{5E125823-EC26-4F15-B178-48E8387C5F1A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{5E125823-EC26-4F15-B178-48E8387C5F1A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{5E125823-EC26-4F15-B178-48E8387C5F1A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{5E125823-EC26-4F15-B178-48E8387C5F1A}.Release|x64.ActiveCfg = Release|Any CPU
+		{5E125823-EC26-4F15-B178-48E8387C5F1A}.Release|x86.ActiveCfg = Release|Any CPU
+		{4E8C6D0E-E696-4F02-812F-CEDD6FE3F6DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4E8C6D0E-E696-4F02-812F-CEDD6FE3F6DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4E8C6D0E-E696-4F02-812F-CEDD6FE3F6DC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{4E8C6D0E-E696-4F02-812F-CEDD6FE3F6DC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{4E8C6D0E-E696-4F02-812F-CEDD6FE3F6DC}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{4E8C6D0E-E696-4F02-812F-CEDD6FE3F6DC}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{4E8C6D0E-E696-4F02-812F-CEDD6FE3F6DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{4E8C6D0E-E696-4F02-812F-CEDD6FE3F6DC}.Release|Any CPU.Build.0 = Release|Any CPU
+		{4E8C6D0E-E696-4F02-812F-CEDD6FE3F6DC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{4E8C6D0E-E696-4F02-812F-CEDD6FE3F6DC}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{4E8C6D0E-E696-4F02-812F-CEDD6FE3F6DC}.Release|x64.ActiveCfg = Release|Any CPU
+		{4E8C6D0E-E696-4F02-812F-CEDD6FE3F6DC}.Release|x86.ActiveCfg = Release|Any CPU
+		{F320951F-886B-4F99-A3FD-5686C0A97868}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{F320951F-886B-4F99-A3FD-5686C0A97868}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F320951F-886B-4F99-A3FD-5686C0A97868}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{F320951F-886B-4F99-A3FD-5686C0A97868}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{F320951F-886B-4F99-A3FD-5686C0A97868}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{F320951F-886B-4F99-A3FD-5686C0A97868}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{F320951F-886B-4F99-A3FD-5686C0A97868}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{F320951F-886B-4F99-A3FD-5686C0A97868}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F320951F-886B-4F99-A3FD-5686C0A97868}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{F320951F-886B-4F99-A3FD-5686C0A97868}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{F320951F-886B-4F99-A3FD-5686C0A97868}.Release|x64.ActiveCfg = Release|Any CPU
+		{F320951F-886B-4F99-A3FD-5686C0A97868}.Release|x86.ActiveCfg = Release|Any CPU
+		{70F1BFF2-22D0-4B1D-BD85-4279FAC616C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{70F1BFF2-22D0-4B1D-BD85-4279FAC616C1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{70F1BFF2-22D0-4B1D-BD85-4279FAC616C1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{70F1BFF2-22D0-4B1D-BD85-4279FAC616C1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{70F1BFF2-22D0-4B1D-BD85-4279FAC616C1}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{70F1BFF2-22D0-4B1D-BD85-4279FAC616C1}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{70F1BFF2-22D0-4B1D-BD85-4279FAC616C1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{70F1BFF2-22D0-4B1D-BD85-4279FAC616C1}.Release|Any CPU.Build.0 = Release|Any CPU
+		{70F1BFF2-22D0-4B1D-BD85-4279FAC616C1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{70F1BFF2-22D0-4B1D-BD85-4279FAC616C1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{70F1BFF2-22D0-4B1D-BD85-4279FAC616C1}.Release|x64.ActiveCfg = Release|Any CPU
+		{70F1BFF2-22D0-4B1D-BD85-4279FAC616C1}.Release|x86.ActiveCfg = Release|Any CPU
+		{B937B9E7-11DE-47BF-9D62-FEAD3DE51D0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B937B9E7-11DE-47BF-9D62-FEAD3DE51D0D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B937B9E7-11DE-47BF-9D62-FEAD3DE51D0D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{B937B9E7-11DE-47BF-9D62-FEAD3DE51D0D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{B937B9E7-11DE-47BF-9D62-FEAD3DE51D0D}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{B937B9E7-11DE-47BF-9D62-FEAD3DE51D0D}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{B937B9E7-11DE-47BF-9D62-FEAD3DE51D0D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B937B9E7-11DE-47BF-9D62-FEAD3DE51D0D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B937B9E7-11DE-47BF-9D62-FEAD3DE51D0D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{B937B9E7-11DE-47BF-9D62-FEAD3DE51D0D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{B937B9E7-11DE-47BF-9D62-FEAD3DE51D0D}.Release|x64.ActiveCfg = Release|Any CPU
+		{B937B9E7-11DE-47BF-9D62-FEAD3DE51D0D}.Release|x86.ActiveCfg = Release|Any CPU
+		{0ADDDB14-B0F6-4D12-8025-5EC8124A511B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0ADDDB14-B0F6-4D12-8025-5EC8124A511B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0ADDDB14-B0F6-4D12-8025-5EC8124A511B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{0ADDDB14-B0F6-4D12-8025-5EC8124A511B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{0ADDDB14-B0F6-4D12-8025-5EC8124A511B}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{0ADDDB14-B0F6-4D12-8025-5EC8124A511B}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{0ADDDB14-B0F6-4D12-8025-5EC8124A511B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{0ADDDB14-B0F6-4D12-8025-5EC8124A511B}.Release|Any CPU.Build.0 = Release|Any CPU
+		{0ADDDB14-B0F6-4D12-8025-5EC8124A511B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{0ADDDB14-B0F6-4D12-8025-5EC8124A511B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{0ADDDB14-B0F6-4D12-8025-5EC8124A511B}.Release|x64.ActiveCfg = Release|Any CPU
+		{0ADDDB14-B0F6-4D12-8025-5EC8124A511B}.Release|x86.ActiveCfg = Release|Any CPU
+		{76458091-5802-4284-8861-5F96360119FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{76458091-5802-4284-8861-5F96360119FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{76458091-5802-4284-8861-5F96360119FF}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{76458091-5802-4284-8861-5F96360119FF}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{76458091-5802-4284-8861-5F96360119FF}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{76458091-5802-4284-8861-5F96360119FF}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{76458091-5802-4284-8861-5F96360119FF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{76458091-5802-4284-8861-5F96360119FF}.Release|Any CPU.Build.0 = Release|Any CPU
+		{76458091-5802-4284-8861-5F96360119FF}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{76458091-5802-4284-8861-5F96360119FF}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{76458091-5802-4284-8861-5F96360119FF}.Release|x64.ActiveCfg = Release|Any CPU
+		{76458091-5802-4284-8861-5F96360119FF}.Release|x86.ActiveCfg = Release|Any CPU
+		{FB0F3AD4-26BC-44D6-B4BB-88380A445C53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{FB0F3AD4-26BC-44D6-B4BB-88380A445C53}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{FB0F3AD4-26BC-44D6-B4BB-88380A445C53}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{FB0F3AD4-26BC-44D6-B4BB-88380A445C53}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{FB0F3AD4-26BC-44D6-B4BB-88380A445C53}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{FB0F3AD4-26BC-44D6-B4BB-88380A445C53}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{FB0F3AD4-26BC-44D6-B4BB-88380A445C53}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{FB0F3AD4-26BC-44D6-B4BB-88380A445C53}.Release|Any CPU.Build.0 = Release|Any CPU
+		{FB0F3AD4-26BC-44D6-B4BB-88380A445C53}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{FB0F3AD4-26BC-44D6-B4BB-88380A445C53}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{FB0F3AD4-26BC-44D6-B4BB-88380A445C53}.Release|x64.ActiveCfg = Release|Any CPU
+		{FB0F3AD4-26BC-44D6-B4BB-88380A445C53}.Release|x86.ActiveCfg = Release|Any CPU
+		{8A266F13-DC0A-4639-A5C1-F9426F687A73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{8A266F13-DC0A-4639-A5C1-F9426F687A73}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8A266F13-DC0A-4639-A5C1-F9426F687A73}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+		{8A266F13-DC0A-4639-A5C1-F9426F687A73}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+		{8A266F13-DC0A-4639-A5C1-F9426F687A73}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{8A266F13-DC0A-4639-A5C1-F9426F687A73}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{8A266F13-DC0A-4639-A5C1-F9426F687A73}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{8A266F13-DC0A-4639-A5C1-F9426F687A73}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8A266F13-DC0A-4639-A5C1-F9426F687A73}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+		{8A266F13-DC0A-4639-A5C1-F9426F687A73}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{8A266F13-DC0A-4639-A5C1-F9426F687A73}.Release|x64.ActiveCfg = Release|Any CPU
+		{8A266F13-DC0A-4639-A5C1-F9426F687A73}.Release|x86.ActiveCfg = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{619B1DBF-55B7-446B-AF40-852A6AB689A0} = {092D7052-844E-4C0F-B6BB-D18B84FC7F99}
+		{0786BB9F-0092-44A2-9CA0-263F5A0AA86E} = {092D7052-844E-4C0F-B6BB-D18B84FC7F99}
+		{E634900C-0A19-4575-A0F7-BF5780AE20C3} = {092D7052-844E-4C0F-B6BB-D18B84FC7F99}
+		{70F1BFF2-22D0-4B1D-BD85-4279FAC616C1} = {092D7052-844E-4C0F-B6BB-D18B84FC7F99}
+		{B937B9E7-11DE-47BF-9D62-FEAD3DE51D0D} = {092D7052-844E-4C0F-B6BB-D18B84FC7F99}
+		{8A266F13-DC0A-4639-A5C1-F9426F687A73} = {092D7052-844E-4C0F-B6BB-D18B84FC7F99}
+		{F182AC2B-A0D5-40D2-89AF-8D547606B6AC} = {0F0E79A2-AED1-4FD1-859B-A518FCB4BA31}
+		{4E8C6D0E-E696-4F02-812F-CEDD6FE3F6DC} = {13F2A33E-FD55-41A7-9288-18572D9E5130}
+		{0ADDDB14-B0F6-4D12-8025-5EC8124A511B} = {13F2A33E-FD55-41A7-9288-18572D9E5130}
+	EndGlobalSection
+	GlobalSection(SubversionScc) = preSolution
+		Svn-Managed = True
+		Manager = AnkhSVN - Subversion Support for Visual Studio
+	EndGlobalSection
+EndGlobal

+ 1412 - 0
IL.BizComponent/MediII.Adapter.BizComponent.ADT/ADTHandler.cs

@@ -0,0 +1,1412 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+using System.Data;
+using System.Data.Common;
+using System.Transactions;
+using System.Text.RegularExpressions;
+using System.Management;
+using IL.Common;
+using MediII.Adapter.ReceiveToKCModel;
+
+namespace MediII.Adapter.BizComponent.ADT
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public abstract class ADTHandler
+    {
+        static readonly string SEDING_APPLICATION = System.Configuration.ConfigurationManager.AppSettings["SedingApplication"];
+        //数据库连接
+        protected Database ctx;
+        protected Database Scanctx;
+        /// <summary>
+        /// 
+        /// </summary>
+        public ADTHandler()
+        {
+            DatabaseProviderFactory factory = new DatabaseProviderFactory();
+            ctx = factory.Create("HealthCare");
+            Scanctx = factory.CreateDefault();
+        }
+
+        protected string GetZone(string value)
+        {
+            string sql = @"SELECT Zone FROM HealthCare.dbo.HisInfo WHERE HisZone = @HisZone";
+            var command1 = ctx.GetSqlStringCommand(sql.ToString());
+            ctx.AddInParameter(command1, "HisZone", System.Data.DbType.AnsiString, value);
+            DataTable dt = ctx.ExecuteDataSet(command1).Tables[0];
+            string ZONE = "";
+            if (dt.Rows.Count > 0)
+            {
+                ZONE = dt.Rows[0]["Zone"].ToString();
+            }
+            return ZONE;
+        }
+
+        /// <summary>
+        /// 根据事件类型获取不同的处理类
+        /// </summary>
+        /// <param name="evntType">消息类型</param>
+        /// <returns>ADTHandler的子类</returns>
+        public static ADTHandler GetHandler(string evntType)
+        {
+            try
+            {
+                switch (evntType)
+                {
+                    case "ADT^A01[B01]": return new ADT_A01B01_Handler();// 住院就诊信息登记、相关明细任务生成
+                    case "ADT^A01[B02]": return new ADT_A01B02_Handler();// 住院处方单
+                    case "ADT^A01[B03]": return new ADT_A01B03_Handler();// 住院收费明细
+                    case "ADT^A01[B04]": return new ADT_A01B04_Handler();// 住院转科转床
+                    case "ADT^A02[B01]": return new ADT_A02B01_Handler();// 住院就诊信息登记、判断是否出院并生成明细任务
+                    //case "ADT^A02[B02]": return new ADT_A02B02_Handler();// 门诊收费明细更新
+                    //case "ADT^A02[B03]": return new ADT_A02B03_Handler();// 门诊挂号更新
+                    //case "A03": return new ADT_A03_Handler();//出院(ADT^A03)
+                    case "ADT^A04[B01]": return new ADT_A04B01_Handler();//   门诊处方单
+                    case "ADT^A04[B02]": return new ADT_A04B02_Handler();//门诊收费明细
+                    case "ADT^A04[B03]": return new ADT_A04B03_Handler();//门诊挂号
+                    //case "ADT^A05[B01]": return new ADT_A02B01_Handler();//住院就诊信息更新
+                    //case "A08": return new ADT_A08_Handler();//患者信息修改:
+                    //case "A10": return new ADT_A10_Handler();//入科
+                    //case "A11": return new ADT_A11_Handler();//取消入院
+                    //case "A13": return new ADT_A13_Handler();//取消出院(ADT^A13)
+                    //case "A16": return new ADT_A16_Handler();//患者预出院
+                    //case "A25": return new ADT_A25_Handler();//患者取消预出院
+                    //case "A28": return new ADT_A28_Handler();//患者建档
+                    //case "A31": return new ADT_A31_Handler();//患者基本信息修改(ADT^A31) 
+                    //case "A29": return new ADT_A29_Handler();//删除婴儿信息(ADT^A29^ADT_A21)
+                    //case "A54": return new ADT_A54_Handler();//修改主治医生
+                    //case "A60": return new ADT_A60_Handler();//患者副作用信息修改
+
+
+
+
+                    default: throw new NotImplementedException();
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.LogError(ex, LogCatagories.General);
+                throw ex;
+            }
+
+        }
+
+
+
+        /// <summary>
+        /// 待实现的处理
+        /// </summary>
+        /// <param name="m">传入的消息结构</param>
+        /// <returns>ACK</returns>
+        public abstract void Handler(string m, string ID);
+
+        #region 获取字典信息
+        /// <summary>
+        /// 获取字典信息
+        /// </summary> 
+        /// <returns></returns>
+        protected DataTable GetDictionView(Database ctx, string viewName)
+        {
+            var ntb = new DataTable();
+            var sql = string.Format("SELECT  CodeID,CodeName,HisCodeID,MedCodeID FROM  HealthCare.dbo.[{0}]  WHERE IsDel=0", viewName);
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
+            ntb.Load(SqlDataAccess.ExecuteReader(ctx, cmd));
+            return ntb;
+        }
+
+
+        /// <summary>
+        /// 获取本地Zone
+        /// </summary>
+        /// <param name="ctx"></param>
+        /// <param name="hisZone"></param>
+        /// <returns></returns>
+        protected string GetZone(Database ctx, string hisZone)
+        {
+            var sql = string.Format("SELECT top 1 Zone FROM HealthCare.dbo.HisInfo WHERE  HisZone='{0}'", hisZone);
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
+            var val = StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd));
+            if (string.IsNullOrEmpty(val))
+            {
+                return hisZone;
+            }
+            return val;
+        }
+        #endregion
+
+        #region 取序列
+        ///<summary>
+        /// 取序列
+        /// </summary> 
+        protected string GetSeq(Database ctx, string seqName)
+        {
+            string sql = string.Format("SELECT NEXT VALUE FOR {0}", seqName);
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
+            object obj = SqlDataAccess.ExecuteScalar(ctx, cmd);
+            if (obj != null)
+                return obj.ToString();
+            else
+                return "0";
+        }
+        #endregion
+
+        #region 取服务器当前时间
+        /// <summary>
+        /// 获取当前时间
+        /// </summary> 
+        internal DateTime GetNow(Database ctx)
+        {
+
+            object obj = (DateTime)SqlDataAccess.ExecuteScalar(ctx, CommandType.Text, "select GETDATE()");
+            if (obj != null)
+                return Convert.ToDateTime(obj.ToString());
+            else
+                return DateTime.Now;
+        }
+
+        #endregion
+
+
+
+        /// <summary>
+        /// 添加床位日志
+        /// </summary>
+        /// <param name="ctx">数据库操作类</param>
+        /// <param name="visitNo"></param>
+        /// <param name="updateUser"></param>
+        /// <param name="OperateTypeInstr"></param>
+        /// <param name="remark"></param>
+        /// <param name="oldMsg"></param>
+        /// <param name="newMsg"></param>
+        protected void AddNewWardLog(Database ctx, string visitNo, string updateUser, string OperateTypeInstr, string remark, string oldMsg, string newMsg)
+        {
+            var sql = @" INSERT INTO HealthCare.dbo.Log_WardOperateLog( VisitNo ,  UpdateUser ,  UpdateDateTime ,   OperateTypeInstr , IP ,  Mac ,   Remark ,   OldContent ,   NewContent) VALUES( @VisitNo ,  @UpdateUser ,  GETDATE() ,   @OperateTypeInstr , @IP , @Mac ,   @Remark ,   @OldContent ,   @NewContent) ";
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
+
+            SqlDataAccess.AddInParameter(ctx, cmd, "VisitNo", DbType.AnsiString, visitNo);
+            SqlDataAccess.AddInParameter(ctx, cmd, "UpdateUser", DbType.AnsiString, updateUser);
+            SqlDataAccess.AddInParameter(ctx, cmd, "OperateTypeInstr", DbType.AnsiString, OperateTypeInstr);
+            SqlDataAccess.AddInParameter(ctx, cmd, "IP", DbType.AnsiString, NetHelper.GetIP());
+            SqlDataAccess.AddInParameter(ctx, cmd, "Mac", DbType.AnsiString, NetHelper.GetMacAddress());
+            SqlDataAccess.AddInParameter(ctx, cmd, "Remark", DbType.AnsiString, remark);
+            SqlDataAccess.AddInParameter(ctx, cmd, "OldContent", DbType.AnsiString, oldMsg);
+            SqlDataAccess.AddInParameter(ctx, cmd, "NewContent", DbType.AnsiString, newMsg);
+
+            SqlDataAccess.ExecuteNonQuery(ctx, cmd);
+        }
+
+        #region "患者建档(ADT^A28)消息规范"
+
+        /// <summary>
+        /// 检查是否建档
+        /// </summary>
+        /// <param name="OptProfile"></param>
+        /// <param name="chartNo"></param>
+        /// <returns></returns>
+        protected int HasPatient(string chartNo)
+        {
+            try
+            {
+                var sql = "  select count(1)    from HealthCare.dbo.Patient   where ChartNo=@ChartNo  ";
+                var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
+                SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", DbType.AnsiString, chartNo);
+                return int.Parse(StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd)));  //病患是否建档 
+            }
+            catch (Exception ex)
+            {
+                throw ex;
+            }
+        }
+
+        /// <summary>
+        /// 建档
+        /// </summary>
+        /// <param name="ctx"></param>
+        /// <param name="m05"></param>
+        /// <param name="m01"></param>
+        //protected void AddNewPatient(Database ctx, ADT_A05 m05 = null, ADT_A01 m01 = null)
+        //{
+
+        //    PID pid = null;
+        //    PV1 pv1 = null;
+        //    NK1 nk1 = null;
+        //    if (null != m05)
+        //    {
+        //        pid = m05.PID;
+        //        pv1 = m05.PV1;
+        //        nk1 = m05.GetNK1(0);
+        //    }
+        //    if (null != m01)
+        //    {
+        //        pid = m01.PID;
+        //        pv1 = m01.PV1;
+        //        nk1 = m01.GetNK1(0);
+        //    }
+        //    AddNewPatient(ctx, pid, pv1, nk1);
+        //}
+//        protected void AddNewPatient(Database ctx, PID pid, PV1 pv1, NK1 nk1)
+//        {
+//            DataRow rowTemp = null;
+//            #region SQL
+
+//            var sql1 = @"insert into HealthCare.dbo.Patient
+//                        (ChartNo, LastNumber,PtName,BirthDay,IdNo,CardNo,Sex, UnBloodType, BloodType,PtType,
+//                         DiscountType, EduLevel,JobType,BornFlag,Marriage, TakeMedInfo , SalaryInfo ,
+//                         Tel1 , Tel2 , EMail, ConName , ConTel , ConTel1Area, ConTel1, ChartWhere,
+//                         FirstVisitDate , FirstVisitDivNo, NoPromiseCnt , NoPromiseDate, Private, AgreeUse , BadRecord, 
+//                         LastVisitDate, CheckUser, CheckTime, UpdateUser , UpdateTime ,NationNo, NationName, WorkplaceZipCode, 
+//                         HomeZipCode, ConRelationshipNo, ConRelationshipName, ConZipCode, 
+//                         UnitAdrDesc,AdrAreaName, AdrArea, AdrDesc, 
+//                         NativeNo,NativeName, 
+//                         BirthAreaNo,BirthAreaName, 
+//                         Nationality , NationalityName ,IsSigned,IsBlackList,ConArea,GreenChannelFlag) 
+//                         Values
+//                        (@ChartNo , @LastNumber ,@PtName , @BirthDay , @IdNo , @CardNo , HealthCare.dbo.GetSexCodeIdByHisID(@Sex),
+//                         @UnBloodType , @BloodType , @PtType ,
+//                         @DiscountType, @EduLevel , @JobType ,  @BornFlag , 
+//                         HealthCare.dbo.GetMarriageCodeIdByHisID(@Marriage), @TakeMedInfo ,@SalaryInfo , 
+//                         @Tel1 , @Tel2 , @EMail,  @ConName , @ConTel , @ConTel1Area, @ConTel1, @ChartWhere, 
+//                         GetDate() , @FirstVisitDivNo, @NoPromiseCnt , GetDate(), @Private, @AgreeUse , @BadRecord, 
+//                         GetDate(), @CheckUser, GetDate(), @UpdateUser , GetDate() ,@NationNo, @NationName, @WorkplaceZipCode, 
+//                         @HomeZipCode, @ConRelationshipNo, @ConRelationshipName, @ConZipCode,
+//                         @UnitAdrDesc, HealthCare.dbo.GetNativeCodeName(HealthCare.dbo.GetMinNativeCodeID(@AdrDesc,5),@AdrDesc),HealthCare.dbo.GetMinNativeCodeID(@AdrDesc,5), @AdrDesc,
+//                         HealthCare.dbo.GetMinNativeCodeID(@AdrDesc,5), HealthCare.dbo.GetNativeCodeName(HealthCare.dbo.GetMinNativeCodeID(@AdrDesc,5),@AdrDesc),
+//                         HealthCare.dbo.GetMinNativeCodeID(@BirthAreaName,5), HealthCare.dbo.GetNativeCodeName(HealthCare.dbo.GetMinNativeCodeID(@BirthAreaName,5),@AdrDesc),
+//                         @Nationality ,@NationalityName,@IsSigned,@IsBlackList,@ConArea,@GreenChannelFlag)";
+
+//            #endregion
+
+//            var command = SqlDataAccess.GetSqlStringCommand(ctx, sql1);
+//            //就诊卡号
+//            SqlDataAccess.AddInParameter(ctx, command, "ChartNo", DbType.AnsiString, pid.PatientID.ID.Value);
+//            int LastNumberCount = pid.PatientID.ID.Value.Count();
+//            //最后两码
+//            if (LastNumberCount <= 2)
+//            {
+//                SqlDataAccess.AddInParameter(ctx, command, "LastNumber", DbType.AnsiString, pid.PatientID.ID.Value);
+//            }
+//            else
+//            {
+//                string LastNumberSubString = pid.PatientID.ID.Value.Substring(LastNumberCount - 2);
+//                SqlDataAccess.AddInParameter(ctx, command, "LastNumber", DbType.AnsiString, LastNumberSubString);
+//            }
+
+
+//            //姓名
+//            SqlDataAccess.AddInParameter(ctx, command, "PtName", DbType.AnsiString, pid.GetPatientName(0).GivenName.Value);
+//            string tmp = pid.DateTimeOfBirth.TimeOfAnEvent.GetAsDate().ToString();
+//            //出生日期
+//            SqlDataAccess.AddInParameter(ctx, command, "BirthDay", DbType.DateTime, pid.DateTimeOfBirth.TimeOfAnEvent.GetAsDate());
+//            //性别
+//            SqlDataAccess.AddInParameter(ctx, command, "Sex", DbType.AnsiString, pid.AdministrativeSex.Value);
+//            //if (pid.AdministrativeSex.Value == "M")
+//            //    SqlDataAccess.AddInParameter(ctx,command, "Sex", DbType.AnsiString, "1");
+//            //else if (pid.AdministrativeSex.Value == "F")
+//            //    SqlDataAccess.AddInParameter(ctx,command, "Sex", DbType.AnsiString, "2");
+//            //else
+//            //    SqlDataAccess.AddInParameter(ctx,command, "Sex", DbType.AnsiString, "");
+
+
+
+//            SqlDataAccess.AddInParameter(ctx, command, "BirthAreaName", DbType.AnsiString, pid.BirthPlace.Value);
+//            //SqlDataAccess.AddInParameter(ctx, command, "JobType", DbType.AnsiString, pid.GetCitizenship(0).Identifier.Value);his不发职业了
+//            SqlDataAccess.AddInParameter(ctx, command, "UnBloodType", DbType.AnsiString, "");
+//            SqlDataAccess.AddInParameter(ctx, command, "BloodType", DbType.AnsiString, "");
+//            if (pv1.PatientType.Value == "01")
+//            {
+//                SqlDataAccess.AddInParameter(ctx, command, "PtType", DbType.AnsiString, "1");
+//            }
+//            else
+//            {
+//                SqlDataAccess.AddInParameter(ctx, command, "PtType", DbType.AnsiString, "2");
+//            }
+//            SqlDataAccess.AddInParameter(ctx, command, "DiscountType", DbType.Int32, 0);
+//            SqlDataAccess.AddInParameter(ctx, command, "EduLevel", DbType.Int32, 0);
+//            SqlDataAccess.AddInParameter(ctx, command, "JobType", DbType.Int32, 0);
+//            SqlDataAccess.AddInParameter(ctx, command, "BornFlag", DbType.AnsiString, "N");
+//            SqlDataAccess.AddInParameter(ctx, command, "TakeMedInfo", DbType.AnsiString, "");
+//            SqlDataAccess.AddInParameter(ctx, command, "SalaryInfo", DbType.AnsiString, "");
+
+//            #region "联系人"
+//            var nName = nk1.GetName(0);
+//            if (null != nName)
+//                SqlDataAccess.AddInParameter(ctx, command, "ConName", DbType.AnsiString, nName.GivenName.Value);
+//            else
+//                SqlDataAccess.AddInParameter(ctx, command, "ConName", DbType.AnsiString, DBNull.Value);
+
+
+
+//            var nPhone = nk1.GetPhoneNumber(0);
+//            if (null != nPhone)
+//                SqlDataAccess.AddInParameter(ctx, command, "ConTel", DbType.AnsiString, nPhone.PhoneNumber.Value);
+//            else
+//                SqlDataAccess.AddInParameter(ctx, command, "ConTel", DbType.AnsiString, DBNull.Value);
+//            SqlDataAccess.AddInParameter(ctx, command, "ConTel1Area", DbType.AnsiString, "0");
+
+//            var nPhone2 = nk1.GetPhoneNumber(1);
+//            if (null != nPhone2)
+//                SqlDataAccess.AddInParameter(ctx, command, "ConTel1", DbType.AnsiString, nPhone2.PhoneNumber.Value);
+//            else
+//                SqlDataAccess.AddInParameter(ctx, command, "ConTel1", DbType.AnsiString, DBNull.Value);
+
+
+
+
+
+
+
+//            var nAddr = nk1.GetAddress(0);
+//            if (null != nAddr)
+//                SqlDataAccess.AddInParameter(ctx, command, "ConArea", DbType.AnsiString, nAddr.StreetAddress.StreetName.Value);
+//            else
+//                SqlDataAccess.AddInParameter(ctx, command, "ConArea", DbType.AnsiString, DBNull.Value);
+//            #endregion
+
+//            SqlDataAccess.AddInParameter(ctx, command, "ChartWhere", DbType.AnsiString, "0");          //Todo
+//            //SqlDataAccess.AddInParameter(ctx, command, "FirstVisitDate", DbType.DateTime, DateTime.Now);
+//            SqlDataAccess.AddInParameter(ctx, command, "FirstVisitDivNo", DbType.Int32, "0");
+//            SqlDataAccess.AddInParameter(ctx, command, "NoPromiseCnt", DbType.Int32, "0");
+//            //SqlDataAccess.AddInParameter(ctx, command, "NoPromiseDate", DbType.DateTime, DateTime.Now);
+//            SqlDataAccess.AddInParameter(ctx, command, "Private", DbType.AnsiString, "");
+//            SqlDataAccess.AddInParameter(ctx, command, "AgreeUse", DbType.AnsiString, "");
+//            SqlDataAccess.AddInParameter(ctx, command, "BadRecord", DbType.AnsiString, "");
+//            //SqlDataAccess.AddInParameter(ctx, command, "LastVisitDate", DbType.DateTime, DateTime.Now);
+//            SqlDataAccess.AddInParameter(ctx, command, "EMail", DbType.AnsiString, "");
+
+
+
+//            //2016/01/14 杨燕要求Tel1为空时保存Tel2的数据进入Tel1中
+//            //家庭电话 
+//            var tel1 = pid.GetPhoneNumberHome(0).PhoneNumber.Value;
+//            if (string.IsNullOrEmpty(tel1) || tel1.Equals("0"))
+//                SqlDataAccess.AddInParameter(ctx, command, "Tel1", DbType.AnsiString, pid.GetPhoneNumberBusiness(0).PhoneNumber.Value);
+//            else
+//                SqlDataAccess.AddInParameter(ctx, command, "Tel1", DbType.AnsiString, pid.GetPhoneNumberHome(0).PhoneNumber.Value);
+//            //单位电话
+//            if (string.IsNullOrEmpty(pid.GetPhoneNumberBusiness(0).PhoneNumber.Value))
+//                SqlDataAccess.AddInParameter(ctx, command, "Tel2", DbType.AnsiString, string.Empty);
+//            else
+//                SqlDataAccess.AddInParameter(ctx, command, "Tel2", DbType.AnsiString, pid.GetPhoneNumberBusiness(0).PhoneNumber.Value);
+
+
+//            //婚姻代码
+//            SqlDataAccess.AddInParameter(ctx, command, "Marriage", DbType.AnsiString, pid.MaritalStatus.Identifier.Value);
+
+
+//            //医保卡号 
+//            if (string.IsNullOrEmpty(pid.PatientAccountNumber.ID.Value))
+//            {
+//                SqlDataAccess.AddInParameter(ctx, command, "CardNo", DbType.AnsiString, "0");
+//            }
+//            else
+//            {
+//                SqlDataAccess.AddInParameter(ctx, command, "CardNo", DbType.AnsiString, pid.PatientAccountNumber.ID.Value);
+//            }
+//            //身分证号
+//            SqlDataAccess.AddInParameter(ctx, command, "IdNo", DbType.AnsiString, pid.SSNNumberPatient.Value);
+
+
+//            #region "地址"
+
+
+//            var address = pid.GetPatientAddress(0);
+
+//            //工作单位
+//            SqlDataAccess.AddInParameter(ctx, command, "UnitAdrDesc", DbType.AnsiString, address.OtherDesignation.Value ?? string.Empty);
+
+//            var Adrtmp = address.StreetAddress.StreetOrMailingAddress.Value;
+//            if (string.IsNullOrWhiteSpace(Adrtmp))
+//            {
+//                SqlDataAccess.AddInParameter(ctx, command, "AdrDesc", DbType.AnsiString, address.OtherDesignation.Value ?? string.Empty);
+
+//            }
+//            else
+//            //家庭地址
+//            SqlDataAccess.AddInParameter(ctx, command, "AdrDesc", DbType.AnsiString, address.StreetAddress.StreetOrMailingAddress.Value ?? string.Empty);
+
+
+//            ////@家庭地址
+//            //SqlDataAccess.AddInParameter(ctx, command, "AdrAreaName", DbType.AnsiString, address.StreetAddress.StreetOrMailingAddress.Value ?? string.Empty);
+
+//            //#region
+//            //var csd = pid.BirthPlace.Value;
+//            ////出生地 BirthAreaName
+//            //if (!string.IsNullOrEmpty(csd))
+//            //{
+//            //    SqlDataAccess.AddInParameter(ctx, command, "BirthAreaName", DbType.AnsiString, csd); //出生地名称
+//            //}
+//            //else
+//            //{
+//            //    SqlDataAccess.AddInParameter(ctx, command, "BirthAreaName", DbType.AnsiString, address.StreetAddress.StreetOrMailingAddress.Value ?? string.Empty); //出生地名称
+//            //}
+
+//            #endregion
+
+
+//            SqlDataAccess.AddInParameter(ctx, command, "CheckUser", DbType.AnsiString, "0");//建档人
+//            //SqlDataAccess.AddInParameter(ctx, command, "CheckTime", DbType.DateTime, DateTime.Now);//建档日期
+//            SqlDataAccess.AddInParameter(ctx, command, "UpdateUser", DbType.AnsiString, "0");//修改人
+//            //SqlDataAccess.AddInParameter(ctx, command, "UpdateTime", DbType.DateTime, DateTime.Now);//修改时间
+
+//            var eg = pid.GetEthnicGroup(0);
+//            #region "民族"
+//            var mzcoid = eg.Identifier.Value;
+//            var mzname = eg.Text.Value;
+
+//            rowTemp = GetDictionView(ctx, "V_Nation").Rows.Cast<DataRow>().Where(n =>
+//              StrHelepr.Obj2StrTrim(n["MedCodeID"]) == mzcoid ||
+//              StrHelepr.Obj2StrTrim(n["CodeName"]) == mzname).FirstOrDefault();
+//            //民族V_Nation
+//            if (rowTemp != null)
+//            {
+//                SqlDataAccess.AddInParameter(ctx, command, "NationNo", DbType.AnsiString, StrHelepr.Obj2StrTrim(rowTemp["CodeID"]));
+//                mzname = StrHelepr.Obj2StrTrim(rowTemp["CodeName"]);
+//            }
+//            else
+//            {
+//                SqlDataAccess.AddInParameter(ctx, command, "NationNo", DbType.AnsiString, DBNull.Value); //民族V_Nation
+//            }
+
+//            SqlDataAccess.AddInParameter(ctx, command, "NationName", DbType.AnsiString, mzname); //民族名称 
+//            #endregion
+
+//            SqlDataAccess.AddInParameter(ctx, command, "WorkplaceZipCode", DbType.AnsiString, DBNull.Value); //工作单位邮编
+
+
+
+
+//            SqlDataAccess.AddInParameter(ctx, command, "HomeZipCode", DbType.AnsiString, address.ZipOrPostalCode.Value); //家庭邮编 
+
+//            #region 关系人
+//            var nkId = nk1.Relationship.Identifier.Value;
+//            var nkText = nk1.Relationship.Text.Value;
+//            rowTemp = GetDictionView(ctx, "V_Relationship").Rows.Cast<DataRow>().Where(n =>
+//               StrHelepr.Obj2StrTrim(n["MedCodeID"]) == nkId ||
+//               StrHelepr.Obj2StrTrim(n["CodeName"]) == nkText).FirstOrDefault();
+
+//            if (rowTemp != null)
+//            {
+//                SqlDataAccess.AddInParameter(ctx, command, "ConRelationshipNo", DbType.AnsiString, StrHelepr.Obj2StrTrim(rowTemp["CodeID"])); //关系人关系ID V_Relationship
+//                nkText = StrHelepr.Obj2StrTrim(rowTemp["CodeName"]);
+//            }
+//            else
+//            {
+//                SqlDataAccess.AddInParameter(ctx, command, "ConRelationshipNo", DbType.AnsiString, DBNull.Value); //关系人关系ID V_Relationship
+//            }
+
+//            SqlDataAccess.AddInParameter(ctx, command, "ConRelationshipName", DbType.AnsiString, nkText); //关系人关系名称 V_Relationship
+//            var gadd = nk1.GetAddress(0);
+//            SqlDataAccess.AddInParameter(ctx, command, "ConZipCode", DbType.AnsiString, gadd.ZipOrPostalCode.Value); //关系人邮编
+
+//            #endregion
+
+//            //#region "AdrArea"
+//            //var area = address.ZipOrPostalCode.Value;
+//            //SqlDataAccess.AddInParameter(ctx, command, "AdrArea", DbType.AnsiString, string.IsNullOrEmpty(address.ZipOrPostalCode.Value) ? "" : address.ZipOrPostalCode.Value);//邮编号
+//            //#endregion
+
+//            #region 国籍
+//            var gj = pid.Nationality.Identifier.Value;
+//            var gjmc = pid.Nationality.Text.Value;
+
+//            rowTemp = GetDictionView(ctx, "V_Nationality").Rows.Cast<DataRow>().Where(n =>
+//                StrHelepr.Obj2StrTrim(n["MedCodeID"]) == gj
+//              || StrHelepr.Obj2StrTrim(n["CodeName"]) == gjmc).FirstOrDefault();
+//            //国籍代码
+//            if (rowTemp != null)
+//            {
+//                SqlDataAccess.AddInParameter(ctx, command, "Nationality", DbType.AnsiString, StrHelepr.Obj2StrTrim(rowTemp["CodeID"]));
+//                gjmc = StrHelepr.Obj2StrTrim(rowTemp["CodeName"]);
+//            }
+//            else
+//            {
+//                SqlDataAccess.AddInParameter(ctx, command, "Nationality", DbType.AnsiString, DBNull.Value);
+//            }
+//            //国籍名称 
+//            SqlDataAccess.AddInParameter(ctx, command, "NationalityName", DbType.AnsiString, gjmc); //国籍名称
+
+//            #endregion
+
+//            SqlDataAccess.AddInParameter(ctx, command, "IsSigned", System.Data.DbType.String, pid.PatientID.CheckDigit.Value ?? "0");//a05.PID.PatientID.CheckDigit.Value);//是否签约
+//            SqlDataAccess.AddInParameter(ctx, command, "IsBlackList", System.Data.DbType.String, pid.GetIdentityReliabilityCode(0).Value); //a05.PID.GetIdentityReliabilityCode(0).Value);//是否为黑名单
+
+//            SqlDataAccess.AddInParameter(ctx, command, "GreenChannelFlag", System.Data.DbType.Int32, pid.PatientID.IdentifierTypeCode.Value ?? "0");
+
+//            using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew))
+//            {
+//                SqlDataAccess.ExecuteNonQuery(ctx, command);
+//                scope.Complete();
+//            }
+
+//            #region 家庭地址和工作单位
+
+//            //住院先不处理
+//            if (pv1.PatientClass.Value == "I")
+//            {
+
+//            }
+//            else
+//            {
+//                try
+//                {
+//                    var sqlCode = @"SELECT CodeID,Str4 FROM HealthCare.dbo.PublicCode WHERE TypeID = '1008'";
+//                    var cmdCode = ctx.DBGetSqlStringCommand(sqlCode);
+//                    DataTable dtCode = new DataTable();
+//                    dtCode.Load(ctx.DBExecuteReader(cmdCode));
+
+//                    //Patient
+//                    var sqlUpdPatient = @" UPDATE  HealthCare.dbo.Patient
+//                                    SET    HomeProCode = @HomeProCode ,
+//                                           HomeCityCode = @HomeCityCode ,
+//                                           HomeDistrictCode = @HomeDistrictCode ,
+//                                           HomeAddress = @HomeAddress,
+//                                           AdrDesc = @HomeAddress
+//                                    WHERE  ChartNo = @ChartNo ";
+//                    var cmdPatientUpd = SqlDataAccess.GetSqlStringCommand(ctx, sqlUpdPatient);
+
+//                    var homeAddress = string.Empty;
+
+//                    for (int i = 0; i < pid.PatientAddressRepetitionsUsed; i++)
+//                    {
+//                        var add = pid.GetPatientAddress(i);
+//                        if (add.AddressType.Value == "H") //现住址
+//                        {
+//                            var pro = dtCode.AsEnumerable().FirstOrDefault(row => StrHelepr.ObjToStr(row["Str4"]) == StrHelepr.ObjToStr(add.StateOrProvince.Value));
+//                            var city = dtCode.AsEnumerable().FirstOrDefault(row => StrHelepr.ObjToStr(row["Str4"]) == StrHelepr.ObjToStr(add.City.Value));
+//                            var district = dtCode.AsEnumerable().FirstOrDefault(row => StrHelepr.ObjToStr(row["Str4"]) == StrHelepr.ObjToStr(add.OtherDesignation.Value));
+//                            homeAddress = add.StreetAddress.StreetOrMailingAddress.Value;
+
+//                            SqlDataAccess.AddInParameter(ctx, cmdPatientUpd, "HomeProCode", DbType.AnsiString, pro == null ? string.Empty : StrHelepr.ObjToStr(pro["CodeID"])); //省编码
+//                            SqlDataAccess.AddInParameter(ctx, cmdPatientUpd, "HomeCityCode", DbType.AnsiString, city == null ? string.Empty : StrHelepr.ObjToStr(city["CodeID"]));//市编码
+//                            SqlDataAccess.AddInParameter(ctx, cmdPatientUpd, "HomeDistrictCode", DbType.AnsiString, district == null ? string.Empty : StrHelepr.ObjToStr(district["CodeID"])); //县区编码
+//                            if (!string.IsNullOrEmpty(homeAddress))
+//                            {
+//                                SqlDataAccess.AddInParameter(ctx, cmdPatientUpd, "HomeAddress", DbType.AnsiString, homeAddress); //详细地址信息
+//                            }
+//                            SqlDataAccess.AddInParameter(ctx, cmdPatientUpd, "ChartNo", DbType.AnsiString, pid.PatientID.ID.Value); //ChartNo
+//                        }
+//                    }
+
+//                    //家庭地址如果为空,则填入工作单位名称 PID-11(n)-8
+//                    if (string.IsNullOrEmpty(homeAddress))
+//                    {
+//                        for (int i = 0; i < pid.PatientAddressRepetitionsUsed; i++)
+//                        {
+//                            var add = pid.GetPatientAddress(i);
+//                            if (add.AddressType.Value == "W") //工作地址
+//                            {
+//                                homeAddress = add.OtherGeographicDesignation.Value;
+//                                SqlDataAccess.AddInParameter(ctx, cmdPatientUpd, "HomeAddress", DbType.AnsiString, homeAddress); //详细地址信息
+//                            }
+//                        }
+//                    }
+//                    SqlDataAccess.ExecuteNonQuery(ctx, cmdPatientUpd);
+//                }
+//                catch (Exception ex)
+//                {
+//                    LogHelper.LogError("更新门诊现住址失败!" + ex.Message + Environment.NewLine + ex.StackTrace);
+//                }
+//            }
+
+//            #endregion
+//        }
+
+        #endregion
+
+        /// <summary>
+        /// 修改黑名单和签约
+        /// </summary>
+        /// <param name="ctx"></param>
+        /// <param name="m05"></param>
+        /// <param name="m01"></param>
+//        protected void UpdatePatientBlackListAndSigned(Database ctx, ADT_A05 m05 = null, ADT_A01 m01 = null)
+//        {
+//            PID pid = null;
+//            PV1 pv1 = null;
+//            NK1 nk1 = null;
+//            if (null != m05)
+//            {
+//                pid = m05.PID;
+//                pv1 = m05.PV1;
+//                nk1 = m05.GetNK1(0);
+//            }
+//            if (null != m01)
+//            {
+//                pid = m01.PID;
+//                pv1 = m01.PV1;
+//                nk1 = m01.GetNK1(0);
+//            }
+
+//            var sqlPatient = @"     update HealthCare.dbo.Patient  set  
+//                                    IsSigned = @IsSigned ,   
+//                                    IsBlackList= @IsBlackList       
+//                                    where ChartNo=@ChartNo     ";
+//            var cmd = ctx.GetSqlStringCommand(sqlPatient);
+//            SqlDataAccess.AddInParameter(ctx, cmd, "IsSigned", System.Data.DbType.String, pid.PatientID.CheckDigit.Value ?? "0"); //是否签约
+//            SqlDataAccess.AddInParameter(ctx, cmd, "IsBlackList", System.Data.DbType.String, pid.GetIdentityReliabilityCode(0).Value);//是否为黑名单
+//            SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", System.Data.DbType.String, pid.PatientID.ID.Value); //ChartNo
+//            using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew))
+//            {
+//                SqlDataAccess.ExecuteNonQuery(ctx, cmd);
+//                scope.Complete();
+//            }
+//        }
+
+
+        #region "患者基本信息修改(ADT^A31)"
+
+
+//        internal void EditNewPatient(Database ctx, PID pid, PV1 pv1, NK1 nk1)
+//        {
+//            DataRow rowTemp = null;
+//            StringBuilder sql2 = new StringBuilder();
+//            sql2.AppendLine(" update HealthCare.dbo.Patient set ");
+//            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql2.ToString());
+
+//            #region LastNumber
+//            int LastNumberCount = pid.PatientID.ID.Value.Length;
+//            sql2.AppendLine(" LastNumber=@LastNumber, ");
+//            if (LastNumberCount <= 2)
+//            {
+//                SqlDataAccess.AddInParameter(ctx, cmd, "LastNumber", DbType.AnsiString, pid.PatientID.ID.Value);
+//            }
+//            else
+//            {
+//                string LastNumberSubString = pid.PatientID.ID.Value.Substring(LastNumberCount - 2);
+//                SqlDataAccess.AddInParameter(ctx, cmd, "LastNumber", DbType.AnsiString, LastNumberSubString);
+//            }
+//            #endregion
+
+//            #region "BirthDay"
+//            sql2.AppendLine(" BirthDay=@BirthDay, ");
+//            //出生日期
+//            SqlDataAccess.AddInParameter(ctx, cmd, "BirthDay", DbType.DateTime, pid.DateTimeOfBirth.TimeOfAnEvent.GetAsDate());
+//            #endregion
+
+//            #region "Sex"
+//            var sex = pid.AdministrativeSex.Value;
+//            if (!string.IsNullOrEmpty(sex))
+//            {
+//                sql2.AppendLine(" Sex=HealthCare.dbo.GetSexCodeIdByHisID(@Sex), ");
+//                SqlDataAccess.AddInParameter(ctx, cmd, "Sex", DbType.AnsiString, sex);
+//            }
+//            #endregion
+
+//            #region "PtType"
+//            var PtType = pv1.PatientType.Value; // 费用类别
+//            if (!string.IsNullOrEmpty(PtType))
+//            {
+//                sql2.AppendLine(" PtType=@PtType, ");
+//                if (PtType == "01") { PtType = "1"; }
+//                else { PtType = "2"; }
+//                SqlDataAccess.AddInParameter(ctx, cmd, "PtType", DbType.AnsiString, PtType);
+//            }
+//            #endregion
+//            #region "BirthAreaName"
+//            var BirthAreaName = pid.BirthPlace.Value;//出生地
+//            if (!string.IsNullOrEmpty(BirthAreaName))
+//            {
+//                sql2.AppendLine("BirthAreaName=@BirthAreaName,");
+//                SqlDataAccess.AddInParameter(ctx, cmd, "BirthAreaName", DbType.AnsiString, BirthAreaName);
+//            }
+
+//            #endregion
+
+//            #region "Marriage"
+
+//            var marr = pid.MaritalStatus.Identifier.Value;
+//            if (!string.IsNullOrEmpty(marr))
+//            {
+//                sql2.AppendLine(" Marriage= HealthCare.dbo.GetMarriageCodeIdByHisID(@Marriage), ");
+//                SqlDataAccess.AddInParameter(ctx, cmd, "Marriage", DbType.AnsiString, pid.MaritalStatus.Identifier.Value);
+//            }
+
+//            #endregion
+
+//            #region "Tel1"
+
+//            var tel1 = pid.GetPhoneNumberHome(0).PhoneNumber.Value;
+//            if (!string.IsNullOrEmpty(tel1))
+//            {
+//                sql2.AppendLine(" Tel1=@Tel1, ");
+//                SqlDataAccess.AddInParameter(ctx, cmd, "Tel1", DbType.AnsiString, tel1);//家庭电话
+//            }
+//            #endregion
+
+//            #region "Tel2"
+//            var tel2 = pid.GetPhoneNumberBusiness(0).PhoneNumber.Value;
+//            if (!string.IsNullOrEmpty(tel2))
+//            {
+//                sql2.AppendLine("  Tel2=@Tel2, ");
+//                SqlDataAccess.AddInParameter(ctx, cmd, "Tel2", DbType.AnsiString, tel2);//单位电话
+//            }
+//            #endregion
+
+//            var address = pid.GetPatientAddress(0);
+
+//            #region "AdrDesc"
+//            var addr = address.StreetAddress.StreetOrMailingAddress.Value;
+//            if (!string.IsNullOrEmpty(addr))
+//            {
+//                sql2.AppendLine(" AdrDesc=@AdrDesc, ");
+//                SqlDataAccess.AddInParameter(ctx, cmd, "AdrDesc", DbType.AnsiString, addr);//家庭地址
+//            }
+//            else
+//            {
+//                addr = address.OtherDesignation.Value;//工作单位
+//                if (!string.IsNullOrEmpty(addr))
+//                {
+//                    sql2.AppendLine(" AdrDesc=@AdrDesc, ");
+//                    SqlDataAccess.AddInParameter(ctx, cmd, "AdrDesc", DbType.AnsiString, addr);//家庭地址
+//                }
+//            }
+
+//            #endregion
+
+//            #region "UnitAdrDesc"
+//            sql2.AppendLine("UnitAdrDesc=@UnitAdrDesc,");
+//            SqlDataAccess.AddInParameter(ctx, cmd, "UnitAdrDesc", DbType.AnsiString, address.OtherDesignation.Value ?? string.Empty);//工作单位
+//            #endregion
+
+//            //加入病人姓名 杨燕要求的
+//            var ptName = pid.GetPatientName(0).GivenName.Value;
+//            if (!string.IsNullOrEmpty(ptName))
+//            {
+//                sql2.AppendLine("  PtName=@PtName, ");
+//                SqlDataAccess.AddInParameter(ctx, cmd, "PtName", DbType.AnsiString, ptName);//病人姓名
+//            }
+
+//            //#region "AdrArea"
+//            //var area = address.ZipOrPostalCode.Value;
+//            //if (!string.IsNullOrEmpty(address.ZipOrPostalCode.Value))
+//            //{
+//            //    sql2.AppendLine("  AdrArea=@AdrArea, ");
+//            //    SqlDataAccess.AddInParameter(ctx, cmd, "AdrArea", DbType.Int32, address.ZipOrPostalCode.Value);//邮编号
+//            //    //SqlDataAccess.AddInParameter(ctx, command, "AdrArea", DbType.AnsiString, string.IsNullOrEmpty(address.ZipOrPostalCode.Value) ? "" : address.ZipOrPostalCode.Value);//邮编号
+//            //}
+//            //#endregion
+
+//            #region "CardNo"
+//            var cardNo = pid.PatientAccountNumber.ID.Value;
+//            if (!string.IsNullOrEmpty(cardNo))
+//            {
+//                sql2.AppendLine("  CardNo=@CardNo, ");
+//                SqlDataAccess.AddInParameter(ctx, cmd, "CardNo", DbType.AnsiString, cardNo);//医保卡号
+//            }
+//            #endregion
+
+//            #region "idNo"
+//            var idNo = pid.SSNNumberPatient.Value;
+//            if (!string.IsNullOrEmpty(idNo))
+//            {
+//                sql2.AppendLine("  IdNo=@IdNo, ");
+//                SqlDataAccess.AddInParameter(ctx, cmd, "IdNo", DbType.AnsiString, idNo);//身分证号 
+//            }
+//            #endregion
+
+
+
+//            //SqlDataAccess.AddInParameter(ctx,command, "FirstVisitDate", DbType.DateTime, DateTime.Now);
+//            //SqlDataAccess.AddInParameter(ctx,command, "FirstVisitDivNo", DbType.Int32, "0");
+//            //SqlDataAccess.AddInParameter(ctx,command, "NoPromiseCnt", DbType.Int32, "0");
+//            //SqlDataAccess.AddInParameter(ctx,command, "NoPromiseDate", DbType.DateTime, DateTime.Now);
+//            //SqlDataAccess.AddInParameter(ctx,command, "Private", DbType.AnsiString, "");
+//            //SqlDataAccess.AddInParameter(ctx,command, "AgreeUse", DbType.AnsiString, "");
+//            //SqlDataAccess.AddInParameter(ctx,command, "BadRecord", DbType.AnsiString, "");
+
+//            sql2.AppendLine("  LastVisitDate=GetDate(), ");
+//            //SqlDataAccess.AddInParameter(ctx, cmd, "LastVisitDate", DbType.DateTime, DateTime.Now);
+
+//            #region "民族"
+//            var eg = pid.GetEthnicGroup(0);
+//            var mzcoid = eg.Identifier.Value;
+//            var mzname = eg.Text.Value;
+//            if (!string.IsNullOrEmpty(mzcoid) || !string.IsNullOrEmpty(mzname))
+//            {
+//                rowTemp = GetDictionView(ctx, "V_Nation").Rows.Cast<DataRow>().Where(n =>
+//                                                          StrHelepr.Obj2StrTrim(n["MedCodeID"]) == mzcoid ||
+//                                                          StrHelepr.Obj2StrTrim(n["CodeName"]) == mzname).FirstOrDefault();
+//                //民族V_Nation
+//                if (rowTemp != null)
+//                {
+//                    sql2.AppendLine("  NationNo=@NationNo, ");
+//                    SqlDataAccess.AddInParameter(ctx, cmd, "NationNo", DbType.AnsiString, StrHelepr.Obj2StrTrim(rowTemp["CodeID"]));
+//                    mzname = StrHelepr.Obj2StrTrim(rowTemp["CodeName"]);
+//                }
+//                else
+//                {
+//                    SqlDataAccess.AddInParameter(ctx, cmd, "NationNo", DbType.AnsiString, DBNull.Value); //民族V_Nation
+//                }
+
+//                sql2.AppendLine("  NationName=@NationName, ");
+//                SqlDataAccess.AddInParameter(ctx, cmd, "NationName", DbType.AnsiString, mzname); //民族名称 
+//            }
+
+//            #endregion
+
+//            #region 籍贯
+//            var sheng = address.StateOrProvince.Value;
+//            if (!string.IsNullOrEmpty(sheng))
+//            {
+//                rowTemp = GetDictionView(ctx, "V_Native").Rows.Cast<DataRow>().Where(n =>
+//             StrHelepr.Obj2StrTrim(n["CodeName"]) == sheng).FirstOrDefault();
+//                if (rowTemp != null)
+//                {
+//                    sql2.AppendLine("  NativeNo=@NativeNo, ");
+//                    SqlDataAccess.AddInParameter(ctx, cmd, "NativeNo", DbType.AnsiString, StrHelepr.Obj2StrTrim(rowTemp["CodeID"])); //籍贯ID V_Native
+//                }
+//                sql2.AppendLine("  NativeName=@NativeName, ");
+//                SqlDataAccess.AddInParameter(ctx, cmd, "NativeName", DbType.AnsiString, sheng); //籍贯名称
+//            }
+
+//            #endregion
+
+//            #region "ziocode"
+//            var zipcode = address.ZipOrPostalCode.Value;
+//            if (!string.IsNullOrEmpty(zipcode))
+//            {
+//                sql2.AppendLine("  HomeZipCode=@HomeZipCode, ");
+//                SqlDataAccess.AddInParameter(ctx, cmd, "HomeZipCode", DbType.AnsiString, zipcode); //家庭邮编 
+//            }
+
+//            #endregion
+
+//            #region 关系人
+//            var nkId = nk1.Relationship.Identifier.Value;
+//            var nkText = nk1.Relationship.Text.Value;
+//            if (!string.IsNullOrEmpty(nkId) || !string.IsNullOrEmpty(nkText))
+//            {
+//                rowTemp = GetDictionView(ctx, "V_Relationship").Rows.Cast<DataRow>().Where(n =>
+//               StrHelepr.Obj2StrTrim(n["MedCodeID"]) == nkId ||
+//               StrHelepr.Obj2StrTrim(n["CodeName"]) == nkText).FirstOrDefault();
+
+//                if (rowTemp != null)
+//                {
+//                    sql2.AppendLine("  ConRelationshipNo=@ConRelationshipNo, ");
+//                    SqlDataAccess.AddInParameter(ctx, cmd, "ConRelationshipNo", DbType.AnsiString, StrHelepr.Obj2StrTrim(rowTemp["CodeID"])); //关系人关系ID V_Relationship
+//                    nkText = StrHelepr.Obj2StrTrim(rowTemp["CodeName"]);
+//                }
+//                sql2.AppendLine("  ConRelationshipName=@ConRelationshipName, ");
+//                SqlDataAccess.AddInParameter(ctx, cmd, "ConRelationshipName", DbType.AnsiString, nkText); //关系人关系名称 V_Relationship
+//            }
+
+//            var gadd = nk1.GetAddress(0);
+//            var gzode = gadd.ZipOrPostalCode.Value;
+//            if (!string.IsNullOrEmpty(gzode))
+//            {
+//                sql2.AppendLine("  ConZipCode=@ConZipCode, ");
+//                SqlDataAccess.AddInParameter(ctx, cmd, "ConZipCode", DbType.AnsiString, gzode); //关系人邮编
+//            }
+
+
+//            #endregion
+
+//            #region "联系人"
+//            var lNameP = nk1.GetName(0);
+//            var lname = lNameP.GivenName.Value;
+//            if (!string.IsNullOrEmpty(lname))
+//            {
+//                sql2.AppendLine("  ConName=@ConName, ");
+//                SqlDataAccess.AddInParameter(ctx, cmd, "ConName", DbType.AnsiString, lname);
+//            }
+
+//            var lphone = nk1.GetPhoneNumber(0).PhoneNumber.Value;
+//            if (!string.IsNullOrEmpty(lphone))
+//            {
+//                sql2.AppendLine("  ConTel=@ConTel, ");
+//                SqlDataAccess.AddInParameter(ctx, cmd, "ConTel", DbType.AnsiString, lphone);
+//            }
+
+
+//            var nAddr = nk1.GetAddress(0);
+//            if (!string.IsNullOrEmpty(nAddr.StreetAddress.StreetName.Value))
+//            {
+//                sql2.AppendLine("  ConArea=@ConArea, ");
+//                SqlDataAccess.AddInParameter(ctx, cmd, "ConArea", DbType.AnsiString, nAddr.StreetAddress.StreetName.Value);
+//            }
+
+//            #endregion
+
+
+//            #region 国籍
+//            var gj = pid.Nationality.Identifier.Value;
+//            var gjmc = pid.Nationality.Text.Value;
+//            if (!string.IsNullOrEmpty(gj) || !string.IsNullOrEmpty(gjmc))
+//            {
+//                rowTemp = GetDictionView(ctx, "V_Nationality").Rows.Cast<DataRow>().Where(n =>
+//                    StrHelepr.Obj2StrTrim(n["MedCodeID"]) == gj
+//                  || StrHelepr.Obj2StrTrim(n["CodeName"]) == gjmc).FirstOrDefault();
+//                //国籍代码
+//                if (rowTemp != null)
+//                {
+//                    sql2.AppendLine("  Nationality=@Nationality, ");
+//                    SqlDataAccess.AddInParameter(ctx, cmd, "Nationality", DbType.AnsiString, StrHelepr.Obj2StrTrim(rowTemp["CodeID"]));
+//                    gjmc = StrHelepr.Obj2StrTrim(rowTemp["CodeName"]);
+//                }
+//                sql2.AppendLine("  NationalityName=@NationalityName, ");
+//                //国籍名称 
+//                SqlDataAccess.AddInParameter(ctx, cmd, "NationalityName", DbType.AnsiString, gjmc); //国籍名称
+//            }
+//            #endregion
+
+//            sql2.AppendLine(" IsSigned=@IsSigned, ");
+//            SqlDataAccess.AddInParameter(ctx, cmd, "IsSigned", System.Data.DbType.String, pid.PatientID.CheckDigit.Value ?? "0");//a05.PID.PatientID.CheckDigit.Value);//是否签约
+//            sql2.AppendLine(" IsBlackList=@IsBlackList, ");
+//            SqlDataAccess.AddInParameter(ctx, cmd, "IsBlackList", System.Data.DbType.String, pid.GetIdentityReliabilityCode(0).Value); //a05.PID.GetIdentityReliabilityCode(0).Value);//是否为黑名单
+
+//            sql2.AppendLine(" GreenChannelFlag=@GreenChannelFlag, ");
+//            SqlDataAccess.AddInParameter(ctx, cmd, "GreenChannelFlag", System.Data.DbType.String, string.IsNullOrWhiteSpace(pid.PatientID.IdentifierTypeCode.Value) ? "0" : pid.PatientID.IdentifierTypeCode.Value);//pid.PatientID.IdentifierTypeCode.Value ?? "0");
+//            sql2.AppendLine("  UpdateUser=@UpdateUser, ");
+//            var UpdateUserID = pv1.GetOtherHealthcareProvider(0).IDNumber.Value; //操作者工号
+//            SqlDataAccess.AddInParameter(ctx, cmd, "UpdateUser", DbType.AnsiString, UpdateUserID);//修改人
+//            sql2.AppendLine("  UpdateTime=GetDate() ");
+//            //SqlDataAccess.AddInParameter(ctx, cmd, "UpdateTime", DbType.DateTime, DateTime.Now);//修改时间
+
+
+//            #region "ChartNo"
+//            sql2.Append("where ChartNo=@ChartNo");
+//            SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", DbType.AnsiString, pid.PatientID.ID.Value); //就诊卡号
+//            #endregion
+
+//            cmd.CommandText = sql2.ToString();
+//            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
+//            {
+//                SqlDataAccess.ExecuteNonQuery(ctx, cmd);
+//                scope.Complete();
+//            }
+
+//            #region 病案首页现住址
+
+//            #region 住院
+
+//            if (pv1.PatientClass.Value == "I")
+//            {
+//                try
+//                {
+//                    var sqlCode = @"SELECT CodeID,Str4 FROM HealthCare.dbo.PublicCode WHERE TypeID = '1008'";
+//                    var cmdCode = ctx.DBGetSqlStringCommand(sqlCode);
+//                    DataTable dtCode = new DataTable();
+//                    dtCode.Load(ctx.DBExecuteReader(cmdCode));
+
+//                    //更新病案首页
+//                    var sqlUpdAddress = @" UPDATE  HealthCare.dbo.BASY_病人基本信息
+//                                    SET    现住址编号_省 = @现住址编号_省 ,
+//                                           现住址编号_市 = @现住址编号_市 ,
+//                                           现住址编号_县 = @现住址编号_县 ,
+//                                           现住址 = @现住址
+//                                    WHERE  就诊ID = @就诊ID ";
+//                    var cmdAddressUpd = SqlDataAccess.GetSqlStringCommand(ctx, sqlUpdAddress);
+
+//                    //Patient
+//                    var sqlUpdPatient = @" UPDATE  HealthCare.dbo.Patient
+//                                    SET    HomeProCode = @HomeProCode ,
+//                                           HomeCityCode = @HomeCityCode ,
+//                                           HomeDistrictCode = @HomeDistrictCode ,
+//                                           HomeAddress = @HomeAddress
+//                                    WHERE  ChartNo = @ChartNo ";
+//                    var cmdPatientUpd = SqlDataAccess.GetSqlStringCommand(ctx, sqlUpdPatient);
+
+//                    for (int i = 0; i < pid.PatientAddressRepetitionsUsed; i++)
+//                    {
+//                        var add = pid.GetPatientAddress(i);
+//                        if (add.AddressType.Value == "H") //现住址
+//                        {
+//                            var pro = dtCode.AsEnumerable().FirstOrDefault(row => StrHelepr.ObjToStr(row["Str4"]) == StrHelepr.ObjToStr(add.StateOrProvince.Value));
+//                            var city = dtCode.AsEnumerable().FirstOrDefault(row => StrHelepr.ObjToStr(row["Str4"]) == StrHelepr.ObjToStr(add.City.Value));
+//                            var district = dtCode.AsEnumerable().FirstOrDefault(row => StrHelepr.ObjToStr(row["Str4"]) == StrHelepr.ObjToStr(add.OtherDesignation.Value));
+
+//                            SqlDataAccess.AddInParameter(ctx, cmdAddressUpd, "现住址编号_省", DbType.AnsiString, pro == null ? string.Empty : StrHelepr.ObjToStr(pro["CodeID"])); //省编码
+//                            SqlDataAccess.AddInParameter(ctx, cmdAddressUpd, "现住址编号_市", DbType.AnsiString, city == null ? string.Empty : StrHelepr.ObjToStr(city["CodeID"]));//市编码
+//                            SqlDataAccess.AddInParameter(ctx, cmdAddressUpd, "现住址编号_县", DbType.AnsiString, district == null ? string.Empty : StrHelepr.ObjToStr(district["CodeID"])); //县区编码
+//                            SqlDataAccess.AddInParameter(ctx, cmdAddressUpd, "现住址", DbType.AnsiString, add.StreetAddress.StreetOrMailingAddress.Value); //详细地址信息
+//                            SqlDataAccess.AddInParameter(ctx, cmdAddressUpd, "就诊ID", DbType.AnsiString, pv1.VisitNumber.ID.Value); //VisitNo
+
+//                            if (SqlDataAccess.ExecuteNonQuery(ctx, cmdAddressUpd) == 0)
+//                            {
+//                                #region 旧的调用存储过程的方法,会经常导致超时
+
+//                                //var db = DatabaseFactory.CreateDatabase("HealthCare");
+//                                //var conn = db.CreateConnection();
+//                                //conn.Open();
+
+//                                //DbCommand cmdAddressInsert = db.GetStoredProcCommand("dbo.AddPtBaseInfoToBASY");
+//                                //cmdAddressInsert.Connection = conn;
+
+//                                //var para = cmdAddressInsert.CreateParameter();
+//                                //para.ParameterName = "@VisitNo";
+//                                //para.DbType = DbType.String;
+//                                //para.Value = pv1.VisitNumber.ID.Value;
+//                                //cmdAddressInsert.Parameters.Add(para);
+
+//                                //if (cmdAddressInsert.ExecuteNonQuery() > 0)
+//                                //{
+//                                //    SqlDataAccess.ExecuteNonQuery(ctx, cmdAddressUpd);
+//                                //}
+//                                //conn.Close();
+
+//                                #endregion
+
+//                                #region SQL
+
+//                                var sqlInsertBASY = @"INSERT  INTO dbo.BASY_病人基本信息
+//            ( 病人姓名 ,
+//			  住院次数,
+//              性别 ,
+//              出生日期 ,
+//              年龄 ,
+//              婚姻 ,
+//              职业 ,
+//              民族 ,
+//              国籍 ,
+//              身份证 ,
+//              血型 ,
+//              工作单位 ,
+//              单位电话 ,
+//              单位邮编 ,
+//              关系人姓名 ,
+//              关系 ,
+//              关系人地址 ,
+//              关系人电话 ,
+//              出生地_省市县 ,
+//              籍贯省市县 ,
+//              现住址 ,
+//              现住址电话 ,
+//              现住址邮编 ,
+//              病历号 ,
+//              就诊ID ,
+//              院区ID ,
+//              主任医生ID ,
+//              主治医生ID ,
+//              住院医生ID ,
+//              实习医生ID ,
+//              入院科室 ,
+//              入院日期 ,
+//              入院床位 ,
+//              出院床位 ,
+//              出院科室 ,
+//              出院日期 ,
+//              住院天数 ,
+//              当前科室 ,
+//              婴儿标志 ,
+//              当前病区 ,
+//              当前床位 ,
+//              身高 ,
+//              体重 ,
+//              责任护士ID ,
+//              责任护士姓名 ,
+//			  出生地编号_省,
+//			  出生地编号_市,
+//			  出生地编号_县,
+//			  籍贯编号_省,
+//			  籍贯编号_市,
+//			  籍贯编号_县, 
+//			  现住址编号_省,
+//			  现住址编号_市,
+//			  现住址编号_县 , 
+//			   现住址省市县,
+//			  户口地址编号_省,
+//			  户口地址编号_市,
+//			  户口地址编号_县, 
+//			  户口地址省市县,
+//			  医生组编号,
+//			  户口地址
+//            )
+//            SELECT  a.PtName ,
+//			        b.HospTimes,
+//                    a.Sex ,
+//                    a.BirthDay ,
+//                    dbo.Fun_GetAge(a.BirthDay, b.AdmitTime, b.VisitNo) age ,
+//                    a.Marriage ,
+//                    a.JobType ,
+//                    a.NationNo ,
+//                    a.Nationality ,
+//                    SUBSTRING(a.IdNo,1,18) ,
+//                    CASE WHEN a.BloodType = 'A型' THEN 1
+//                         WHEN a.BloodType = 'B型' THEN 2
+//                         WHEN a.BloodType = 'O型' THEN 3
+//                         WHEN a.BloodType = 'AB型' THEN 4
+//                         ELSE 5
+//                    END BloodType ,
+//                    a.UnitAdrDesc ,
+//                    a.Tel2 ,
+//                    a.WorkplaceZipCode ,
+//                    a.ConName ,
+//                    a.ConRelationshipName ,
+//                    a.ConArea ,
+//                    a.ConTel ,
+//                    dbo.GetAddrName(a.BirthAreaNo ) ,
+//                   dbo.GetAddrName(a.NativeNo ) ,
+//                    a.AdrDesc ,
+//                    a.Tel1 ,
+//                    a.HomeZipCode ,
+//                    a.ChartNo ,
+//                    b.VisitNo ,
+//                    ISNULL(c.VisitZone, ( SELECT    Zone
+//                                          FROM      Employee
+//                                          WHERE     EmpNo = b.UpdateUser
+//                                        )) Zone ,
+//                    b.ChiefDrNo ,
+//                    b.DrNo1 ,
+//                    b.DrNo3 ,
+//                    b.DrNo4 ,
+//                    b.AdmissDivNo ,
+//                    ( CASE ( SELECT ParamValue
+//                             FROM   dbo.SiteParamCtrl
+//                             WHERE  SiteNo = '0000'
+//                                    AND ParamID = '病案首页_入院日期取入科日期'
+//                           )
+//                        WHEN 1 THEN (SELECT MIN(ipd.DynamicTime) FROM dbo.InPatientDynamic ipd WHERE ipd.VisitNo = b.VisitNo AND ipd.DynamicType=13)
+//                        ELSE AdmitTime
+//                      END ) AS AdmitTime ,
+//                    AdmissBed ,
+//                    ( CASE b.InHospitalStatus
+//                        WHEN 0 THEN ''
+//                        ELSE  b.BedNo
+//                      END ) LeaveBedNo ,
+//                    ( CASE b.InHospitalStatus
+//                        WHEN 0 THEN ''
+//                        ELSE b.DivNo
+//                      END ) LeaveDivNo ,
+//                    ( CASE ( SELECT ParamValue
+//                             FROM   dbo.SiteParamCtrl
+//                             WHERE  SiteNo = '0000'
+//                                    AND ParamID = '病案首页_出院日期启用预出院日期时间'
+//                           )
+//                        WHEN 1 THEN b.PreDischargeTime
+//                        ELSE DischargeTime
+//                      END ) AS LeaveDate ,
+//                    b.AdmitDays ,
+//                    b.DivNo ,
+//                    b.InfantFlag ,
+//                    b.DepartNo ,
+//                    b.BedNo ,
+//                    b.PtHeight ,
+//                    b.PtWeight ,
+//                    b.DrNo2 , 
+//                    dbo.GetEmpName(b.DrNo2),
+//					 dbo.GetAddrCode(a.BirthAreaNo,1)  ,
+//					 dbo.GetAddrCode(a.BirthAreaNo,2) , 
+//					 dbo.GetAddrCode(a.BirthAreaNo,3)  ,
+//					 dbo.GetAddrCode(a.NativeNo,1)  ,
+//					 dbo.GetAddrCode(a.NativeNo,2) , 
+//					 dbo.GetAddrCode(a.NativeNo,3)  ,
+//					 dbo.GetAddrCode(a.AdrArea,1)  ,
+//					 dbo.GetAddrCode(a.AdrArea,2) , 
+//					  dbo.GetAddrCode(a.AdrArea,3)   ,
+//					 dbo.GetAddrName(a.AdrArea ),
+//					  dbo.GetAddrCode(a.AdrArea,1)  ,
+//					 dbo.GetAddrCode(a.AdrArea,2) , 
+//					 dbo.GetAddrCode(a.AdrArea,3)  ,
+//					 dbo.GetAddrName(a.AdrArea ),
+//					 b.MedicalGroupNo,
+//					 AdrDesc
+//            FROM    dbo.Patient a ,
+//                    dbo.InPatient b ,
+//                    dbo.VisitRecord c
+//            WHERE   a.ChartNo = c.ChartNo
+//                    AND b.VisitNo = c.VisitNo
+//                    AND b.VisitNo = @VisitNo";
+
+//                                #endregion
+
+//                                var cmdBASY = SqlDataAccess.GetSqlStringCommand(ctx, sqlInsertBASY);
+//                                SqlDataAccess.AddInParameter(ctx, cmdBASY, "VisitNo", DbType.AnsiString, pv1.VisitNumber.ID.Value); //VisitNo
+//                                SqlDataAccess.ExecuteNonQuery(ctx, cmdBASY);
+//                            }
+
+//                            //更新Patient表
+//                            SqlDataAccess.AddInParameter(ctx, cmdPatientUpd, "HomeProCode", DbType.AnsiString, pro == null ? string.Empty : StrHelepr.ObjToStr(pro["CodeID"])); //省编码
+//                            SqlDataAccess.AddInParameter(ctx, cmdPatientUpd, "HomeCityCode", DbType.AnsiString, city == null ? string.Empty : StrHelepr.ObjToStr(city["CodeID"]));//市编码
+//                            SqlDataAccess.AddInParameter(ctx, cmdPatientUpd, "HomeDistrictCode", DbType.AnsiString, district == null ? string.Empty : StrHelepr.ObjToStr(district["CodeID"])); //县区编码
+//                            SqlDataAccess.AddInParameter(ctx, cmdPatientUpd, "HomeAddress", DbType.AnsiString, add.StreetAddress.StreetOrMailingAddress.Value); //详细地址信息
+//                            SqlDataAccess.AddInParameter(ctx, cmdPatientUpd, "ChartNo", DbType.AnsiString, pid.PatientID.ID.Value); //ChartNo
+//                            SqlDataAccess.ExecuteNonQuery(ctx, cmdPatientUpd);
+//                        }
+//                    }
+//                }
+//                catch (Exception ex)
+//                {
+//                    LogHelper.LogError("更新现住址失败!" + ex.Message + Environment.NewLine + ex.StackTrace);
+//                }
+//            }
+
+//            #endregion
+
+//            #region 门急诊
+
+//            else
+//            {
+//                try
+//                {
+//                    var sqlCode = @"SELECT CodeID,Str4 FROM HealthCare.dbo.PublicCode WHERE TypeID = '1008'";
+//                    var cmdCode = ctx.DBGetSqlStringCommand(sqlCode);
+//                    DataTable dtCode = new DataTable();
+//                    dtCode.Load(ctx.DBExecuteReader(cmdCode));
+
+//                    //Patient
+//                    var sqlUpdPatient = @" UPDATE  HealthCare.dbo.Patient
+//                                    SET    HomeProCode = @HomeProCode ,
+//                                           HomeCityCode = @HomeCityCode ,
+//                                           HomeDistrictCode = @HomeDistrictCode ,
+//                                           HomeAddress = @HomeAddress,
+//                                           AdrDesc = @HomeAddress
+//                                    WHERE  ChartNo = @ChartNo ";
+//                    var cmdPatientUpd = SqlDataAccess.GetSqlStringCommand(ctx, sqlUpdPatient);
+
+//                    var homeAddress = string.Empty;
+
+//                    for (int i = 0; i < pid.PatientAddressRepetitionsUsed; i++)
+//                    {
+//                        var add = pid.GetPatientAddress(i);
+//                        if (add.AddressType.Value == "H") //现住址
+//                        {
+//                            var pro = dtCode.AsEnumerable().FirstOrDefault(row => StrHelepr.ObjToStr(row["Str4"]) == StrHelepr.ObjToStr(add.StateOrProvince.Value));
+//                            var city = dtCode.AsEnumerable().FirstOrDefault(row => StrHelepr.ObjToStr(row["Str4"]) == StrHelepr.ObjToStr(add.City.Value));
+//                            var district = dtCode.AsEnumerable().FirstOrDefault(row => StrHelepr.ObjToStr(row["Str4"]) == StrHelepr.ObjToStr(add.OtherDesignation.Value));
+//                            homeAddress = add.StreetAddress.StreetOrMailingAddress.Value;
+
+//                            SqlDataAccess.AddInParameter(ctx, cmdPatientUpd, "HomeProCode", DbType.AnsiString, pro == null ? string.Empty : StrHelepr.ObjToStr(pro["CodeID"])); //省编码
+//                            SqlDataAccess.AddInParameter(ctx, cmdPatientUpd, "HomeCityCode", DbType.AnsiString, city == null ? string.Empty : StrHelepr.ObjToStr(city["CodeID"]));//市编码
+//                            SqlDataAccess.AddInParameter(ctx, cmdPatientUpd, "HomeDistrictCode", DbType.AnsiString, district == null ? string.Empty : StrHelepr.ObjToStr(district["CodeID"])); //县区编码
+//                            if (!string.IsNullOrEmpty(homeAddress))
+//                            {
+//                                SqlDataAccess.AddInParameter(ctx, cmdPatientUpd, "HomeAddress", DbType.AnsiString, homeAddress); //详细地址信息
+//                            }
+//                            SqlDataAccess.AddInParameter(ctx, cmdPatientUpd, "ChartNo", DbType.AnsiString, pid.PatientID.ID.Value); //ChartNo
+//                        }
+//                    }
+
+//                    //家庭地址如果为空,则填入工作单位名称 PID-11(n)-8
+//                    if (string.IsNullOrEmpty(homeAddress))
+//                    {
+//                        for (int i = 0; i < pid.PatientAddressRepetitionsUsed; i++)
+//                        {
+//                            var add = pid.GetPatientAddress(i);
+//                            if (add.AddressType.Value == "W") //工作地址
+//                            {
+//                                homeAddress = add.OtherGeographicDesignation.Value;
+//                                SqlDataAccess.AddInParameter(ctx, cmdPatientUpd, "HomeAddress", DbType.AnsiString, homeAddress); //详细地址信息
+//                            }
+//                        }
+//                    }
+//                    SqlDataAccess.ExecuteNonQuery(ctx, cmdPatientUpd);
+//                }
+//                catch (Exception ex)
+//                {
+//                    LogHelper.LogError("更新门诊现住址失败!" + ex.Message + Environment.NewLine + ex.StackTrace);
+//                }
+//            }
+
+//            #endregion
+
+//            #endregion
+
+//        }
+        //protected void EditNewPatient(Database ctx, ADT_A05 a05)
+        //{
+
+
+        //    PID pid = a05.PID;
+        //    PV1 pv1 = a05.PV1;
+        //    NK1 nk1 = a05.GetNK1(0);
+
+        //    EditNewPatient(ctx, pid, pv1, nk1);
+
+        //}
+        #endregion
+
+
+        /// <summary>
+        /// 获取员工信息
+        /// </summary>
+        /// <param name="ctx"></param>
+        /// <param name="empCode"></param>
+        /// <returns></returns>
+        //protected EmployeeEntity GetEmpNo(Database ctx, string empCode)
+        //{
+        //    var sql = string.Format("SELECT EmpNo,EmpCode,EmpName,PhoneticName,EngName,IdNo,Sex,Birthday,MobilePhone,Email,HireDate,Zone,DepartNo,WorkDepartNo,EmpType,Title,ChiefNo,SubTel,SimpleTel,Password,PasswordTime,PressCard,ResignDate,Remark,UpdateUser,UpdateTime,Keyword1,Keyword2,Keyword3,UserLevelId,InputCode FROM HealthCare.dbo.Employee WHERE EmpCode='{0}'", empCode);
+        //    return SqlDataAccess.ExecuteSqlStringAccessor<EmployeeEntity>(ctx, sql).FirstOrDefault();
+        //}
+
+
+
+        /// <summary>
+        /// 获取参数
+        /// </summary>
+        /// <param name="ctx"></param>
+        /// <param name="key"></param>
+        /// <returns></returns>
+        protected string GetParam(Database ctx, string key)
+        {
+            try
+            {
+                var sql = string.Format("SELECT ParamValue FROM  HealthCare.dbo.SiteParamCtrl WHERE SiteNo='0000' AND ParamID='{0}' AND IsDel=0", key);
+                var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
+                var obj = SqlDataAccess.ExecuteScalar(ctx, cmd);
+                return StrHelepr.Obj2StrTrim(obj);
+            }
+            catch (Exception ex)
+            {
+                IL.Common.LogHelper.LogError(string.Format("获取参数错误:{0}  {1}\r\n{2}", key, ex.Message, ex.StackTrace), LogCatagories.MQAccess);
+                return string.Empty;
+            }
+
+        }
+
+        protected int GetScanTaskCount(string visitNo, string type)
+        {
+            var sql = "SELECT count(1) FROM dbo.HL7_Scan WITH(NOLOCK) WHERE VisitNo=@VisitNo and TaskType=@TaskType and TaskStatus=1 and UpdateTime>'2023-01-01'";
+            var cmd = Scanctx.DBGetSqlStringCommand(sql);
+            Scanctx.AddInParameter(cmd, "VisitNo", DbType.String, visitNo);
+            Scanctx.AddInParameter(cmd, "TaskType", DbType.String, type);
+            var obj = int.Parse(StrHelepr.Obj2StrTrim(Scanctx.DBExecuteScalar(cmd)));
+            return obj;
+        }
+
+        protected int GetOriginalCount(string VisitNo)
+        {
+            var sql = "SELECT count(1) FROM dbo.zhuyuan_original WITH(NOLOCK) WHERE patient_zyh=@VisitNo ";
+            var cmd = ctx.DBGetSqlStringCommand(sql);
+            ctx.AddInParameter(cmd, "VisitNo", DbType.String, VisitNo);
+            var obj = int.Parse(StrHelepr.Obj2StrTrim(ctx.DBExecuteScalar(cmd)));
+            return obj;
+        }
+        /// <summary>
+        /// 获取急诊病人床位
+        /// </summary>
+        /// <param name="ctx"></param>
+        /// <param name="visitNo"></param>
+        /// <returns></returns>
+        //protected BedEntity GetBed(Database ctx, string roombed, string ward)
+        //{
+        //    if (string.IsNullOrWhiteSpace(roombed))
+        //        return null;
+
+        //    var sql = string.Format("SELECT BedNo,RoomBed,Ward,Zone,DepartNo,StockLoc,OwnDivNo,BedLevel,BedType,LocArea,SexCtrl,IsQuery,IsTaint,IsICU,ChartNo,PtName,VisitNo,UDDTime,ExpandStatus,ReserveNo,BedStatue,Printer1,Printer2,BedItemCode,AddItemCode,InpItemCode,NurseItemCode,DrugItemCode,IsDelete,UpdateUser,UpdateTime,PatientType,RoomNo,BedUseStatus FROM HealthCare.dbo.Bed WHERE RoomBed='{0}' and  Ward='{1}'", roombed, ward);
+        //    return SqlDataAccess.ExecuteSqlStringAccessor<BedEntity>(ctx, sql).FirstOrDefault();
+        //}
+        /// <summary>
+        /// 获取床位
+        /// </summary>
+        /// <param name="ctx"></param>
+        /// <param name="roomBed"></param>
+        /// <returns></returns>
+        //protected BedEntity GetBed(Database ctx, string roomBed)
+        //{
+        //    var sql = string.Format("SELECT BedNo,RoomBed,Ward,Zone,DepartNo,StockLoc,OwnDivNo,BedLevel,BedType,LocArea,SexCtrl,IsQuery,IsTaint,IsICU,ChartNo,PtName,VisitNo,UDDTime,ExpandStatus,ReserveNo,BedStatue,Printer1,Printer2,BedItemCode,AddItemCode,InpItemCode,NurseItemCode,DrugItemCode,IsDelete,UpdateUser,UpdateTime,PatientType,RoomNo,BedUseStatus FROM dbo.Bed WHERE RoomBed='{0}'", roomBed);
+        //    return SqlDataAccess.ExecuteSqlStringAccessor<BedEntity>(ctx, sql).FirstOrDefault();
+        //}
+
+
+        //protected InPatientEntity GetInPatient(Database ctx, string visitNo)
+        //{
+        //    var sql = string.Format("SELECT VisitNo,AdmitTime,CheckInTime,CheckInFlag,Source,LastPtWeight,PtWeight,PtHeight,BMI,WBLoss,IntakeCondition,IsVisit,IsHighRiskFall,IsIllness,NutritionCare,RtnReason,BedNo,DivNo,DepartNo,Diag,DrNo1,DrNo2,DrNo3,DrNo4,PrePayment,LastReportTime,IsPlanDischarge,PreDischargeTime,DischargeTime,DischargeReason,MbdDocNo,DischargeBillNo,NhiAmt,GenAmt,AdmitDays,LinkNo,ChargeStatus,PtMark,PtSourceNo,ChargeUser,ChargeTime,UpdateUser,UpdateTime,RegisterTime,MedicalGroupNo,InHospitalStatus,AdmissDivNo,AdmissDepartNo,AdmissBed,MotherVisitNo,InfantFlag,ChiefDrNo,AdmittedDrNo,HospTimes,OutDirection,OutDiagNo1,OutDiagNo3,OutDiagName3,OutDiagNo2,OutDiagName2,OutDiagName1,DisputeFlag,OldPreDischargeTime FROM HealthCare.dbo.InPatient WHERE VisitNo='{0}'", visitNo);
+        //    return SqlDataAccess.ExecuteSqlStringAccessor<InPatientEntity>(ctx, sql).FirstOrDefault();
+        //}
+
+    }
+}

+ 269 - 0
IL.BizComponent/MediII.Adapter.BizComponent.ADT/ADT_A01B01_Handler.cs

@@ -0,0 +1,269 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Transactions;
+using System.Data;
+using System.Data.Common;
+using IL.Common;
+using System.Xml;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+
+namespace MediII.Adapter.BizComponent.ADT
+{
+    /// <summary>
+    /// 住院就诊记录
+    /// </summary>
+    public class ADT_A01B01_Handler : ADTHandler
+    {
+        public override void Handler(string m,string ID)
+        {
+            var isql = @"insert into dbo.zhuyuan_original(No,patient_zyh,patient_id,RY_DATE,RY_UNIT,RY_BQ,RY_BED,CY_DATE,CY_UNIT,CY_BQ,age,patient_name,Sex,address,JG_DOCT_GH,SZ_DOCT_GH,Nurse_grade,ICD_CODE_RY1,ICD_CODE_RY2,ICD_CODE_RY3,ICD_CODE_RY4,ICD_CODE_CY1,ICD_CODE_CY2,ICD_CODE_CY3,ICD_CODE_CY4,CY_Kind) Value();";
+
+            
+           
+            //初始化
+            var rtnMsg = string.Empty;
+            var msgHead = string.Empty;
+            var msgBody = string.Empty;
+            var resultCode = string.Empty;
+            var result = string.Empty;
+            WebService server = new WebService();
+            OperateXmlUtil xmlHelper = new OperateXmlUtil();
+            //读取配置的凭证号
+            var cert = System.Configuration.ConfigurationManager.AppSettings["cert"];
+            //读取就诊流水号
+            //string visitNo = xmlHelper.XpathRead(m, "//*[@root='2.16.156.10011.2.5.1.9']", "extension");
+            string visitNo = m;
+            //拼接接口访问参数
+            msgBody = xmlHelper.GetMsgBody(visitNo);
+            msgHead = xmlHelper.GetMsgHead("getInHospitalInfo", cert);
+            //接口访问
+            rtnMsg = server.TestInterface(msgHead, msgBody);
+
+            //存储访问记录
+            MessageHelper.SaveSendMsg(Scanctx, ID, "ADT^A01[B01]", msgHead, msgBody, rtnMsg);
+            //消息判断是否成功
+            if (!xmlHelper.isSuccess(rtnMsg, ref resultCode, ref result))
+            {
+                throw new Exception(result);
+            }
+
+            //更新发送表,保存留档
+
+            //返回数据解析
+            XmlNode root = xmlHelper.GetContentRootNode(rtnMsg);
+            //是否出院
+            string CheckOutDate = root.SelectSingleNode("//*[name()='CY_DATE']").InnerText;
+
+            if (!string.IsNullOrWhiteSpace(CheckOutDate))
+            {
+                try
+                {
+                    DateTime OutDate = DateTime.Parse(CheckOutDate);
+                    if (OutDate < DateTime.Parse("2010-01-01") && OutDate > DateTime.Parse("2050-01-01"))
+                    {
+                        return;//返回,本次不解析
+                    }
+                }
+                catch
+                {
+                    return;
+                }
+            }
+            else
+            {
+                return;
+            }
+            //入院日期
+            string CheckInDate = root.SelectSingleNode("//*[name()='RY_DATE']").InnerText;
+            XmlNodeList list = root.SelectNodes("//returnContents//returnContent");
+            /* 获取档案,如果存在出院日,再判断是否有相关消息任务进行中,如有,则不操作,如果没有,插入任务,同时更新档案
+               Todo:
+             * 1、判断出院日
+             * 2、判断是否有相关任务进行中
+             * 3、插入医嘱任务、插入费用任务
+             * 4、更新档案
+             */
+            if (list.Count <= 0)
+                return;
+            int num = GetOriginalCount(visitNo);
+
+            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
+            {
+                if (num <= 0)
+                {
+                    var ifsql = @"insert into dbo.zhuyuan_original(patient_zyh,patient_id,RY_DATE,RY_UNIT,RY_BQ,RY_BED,CY_DATE,CY_UNIT,CY_BQ,age,patient_name,Sex,address,JG_DOCT_GH,SZ_DOCT_GH,Nurse_grade,ICD_CODE_RY1,ICD_CODE_RY2,ICD_CODE_RY3,ICD_CODE_RY4,ICD_CODE_CY1,ICD_CODE_CY2,ICD_CODE_CY3,ICD_CODE_CY4,CY_Kind) Values(
+@patient_zyh,@patient_id,@RY_DATE,@RY_UNIT,@RY_BQ,@RY_BED,@CY_DATE,@CY_UNIT,@CY_BQ,@age,@patient_name,@Sex,@address,@JG_DOCT_GH,@SZ_DOCT_GH,@Nurse_grade,@ICD_CODE_RY1,@ICD_CODE_RY2,@ICD_CODE_RY3,@ICD_CODE_RY4,@ICD_CODE_CY1,@ICD_CODE_CY2,@ICD_CODE_CY3,@ICD_CODE_CY4,@CY_Kind)";
+                    //住院患者基本档
+                    foreach (XmlElement xn in list)
+                    {
+                        var icmd = ctx.DBGetSqlStringCommand(ifsql);
+                        SetEntity(ctx, icmd, xn);
+                        SqlDataAccess.ExecuteNonQuery(ctx, icmd);
+                    }
+                }
+                else
+                {
+                    var usql = @"update dbo.zhuyuan_original set RY_DATE=@RY_DATE,
+RY_UNIT=@RY_UNIT,
+RY_BQ=@RY_BQ,
+RY_BED=@RY_BED,
+CY_DATE=@CY_DATE,
+CY_UNIT=@CY_UNIT,
+CY_BQ=@CY_BQ,
+age=@age,
+patient_name=@patient_name,
+Sex=@Sex,
+address=@address,
+JG_DOCT_GH=@JG_DOCT_GH,
+SZ_DOCT_GH=@SZ_DOCT_GH,
+Nurse_grade=@Nurse_grade,
+ICD_CODE_RY1=@ICD_CODE_RY1,
+ICD_CODE_RY2=@ICD_CODE_RY2,
+ICD_CODE_RY3=@ICD_CODE_RY3,
+ICD_CODE_RY4=@ICD_CODE_RY4,
+ICD_CODE_CY1=@ICD_CODE_CY1,
+ICD_CODE_CY2=@ICD_CODE_CY2,
+ICD_CODE_CY3=@ICD_CODE_CY3,
+ICD_CODE_CY4=@ICD_CODE_CY4,
+CY_Kind=@CY_Kind where patient_zyh=@patient_zyh and patient_id=@patient_id";
+                    foreach (XmlElement xn in list)
+                    {
+                        var ucmd = ctx.DBGetSqlStringCommand(usql);
+                        SetEntity(ctx, ucmd, xn);
+                        SqlDataAccess.ExecuteNonQuery(ctx, ucmd);
+                    }
+                }
+
+                var sql = @"INSERT INTO HL7_Platform.dbo.HL7_Scan  (ID ,ChartNo,VisitNo,OtherNo1,OtherNo2,OtherNo3,OtherName ,  TaskType ,  TaskStatus ,  UpdateUser ,  UpdateTime,Reserve1) VALUES (@ID ,@ChartNo ,@VisitNo ,@OtherNo1 ,  @OtherNo2 ,@OtherNo3 ,@OtherName ,@TaskType ,@TaskStatus , @UpdateUser , GETDATE(),@Reserve1)";
+                
+                if (GetScanTaskCount(visitNo, "ADT^A01[B02]") <= 0)
+                {
+                    //住院处方单
+                    var ccmd = Scanctx.DBGetSqlStringCommand(sql);
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "ID", DbType.AnsiString, Guid.NewGuid().ToString());
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "ChartNo", DbType.AnsiString, visitNo);
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "VisitNo", DbType.AnsiString, visitNo);
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "OtherNo1", DbType.AnsiString, CheckInDate);
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "OtherNo2", DbType.AnsiString, "");
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "OtherNo3", DbType.AnsiString, "");
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "OtherName", DbType.AnsiString, "住院处方单");
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "TaskType", DbType.AnsiString, "ADT^A01[B02]");
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "TaskStatus", DbType.Int32, 1);
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "UpdateUser", DbType.AnsiString, "9999");
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "Reserve1", DbType.AnsiString, "");
+                    SqlDataAccess.ExecuteNonQuery(Scanctx, ccmd);
+                }
+
+                if (GetScanTaskCount(visitNo, "ADT^A01[B03]") <= 0)
+                {
+                    //住院收费数据明细
+                    var fcmd = Scanctx.DBGetSqlStringCommand(sql);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "ID", DbType.AnsiString, Guid.NewGuid().ToString());
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "ChartNo", DbType.AnsiString, visitNo);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "VisitNo", DbType.AnsiString, visitNo);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "OtherNo1", DbType.AnsiString, CheckInDate);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "OtherNo2", DbType.AnsiString, "");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "OtherNo3", DbType.AnsiString, "");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "OtherName", DbType.AnsiString, "住院收费数据明细");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "TaskType", DbType.AnsiString, "ADT^A01[B03]");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "TaskStatus", DbType.Int32, 1);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "UpdateUser", DbType.AnsiString, "9999");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "Reserve1", DbType.AnsiString, "");
+                    SqlDataAccess.ExecuteNonQuery(Scanctx, fcmd);
+                }
+                if (GetScanTaskCount(visitNo, "ADT^A01[B04]") <= 0)
+                {
+                    //住院转科转床
+                    var fcmd = Scanctx.DBGetSqlStringCommand(sql);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "ID", DbType.AnsiString, Guid.NewGuid().ToString());
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "ChartNo", DbType.AnsiString, visitNo);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "VisitNo", DbType.AnsiString, visitNo);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "OtherNo1", DbType.AnsiString, CheckInDate);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "OtherNo2", DbType.AnsiString, "");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "OtherNo3", DbType.AnsiString, "");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "OtherName", DbType.AnsiString, "住院转科转床");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "TaskType", DbType.AnsiString, "ADT^A01[B04]");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "TaskStatus", DbType.Int32, 1);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "UpdateUser", DbType.AnsiString, "9999");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "Reserve1", DbType.AnsiString, "");
+                    SqlDataAccess.ExecuteNonQuery(Scanctx, fcmd);
+                }
+                scope.Complete(); 
+            }
+
+
+        }
+
+        /// <summary>
+        /// 获取门诊就诊次数
+        /// </summary> 
+        /// <returns></returns>
+        private int GetOutNumByChartNo(string chartNo)
+        {
+
+            string OutPatientSql = @"select count(1)	 
+                                             from HealthCare.dbo.OutPatient a, HealthCare.dbo.VisitRecord b	 
+                                             where a.VisitNo = b.VisitNo  AND b.ChartNo= @ChartNo  
+                                             AND a.VisitStatus<>'D'  ";
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, OutPatientSql);
+            SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", DbType.AnsiString, chartNo);
+            return int.Parse(StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd)));  //看诊次数 
+
+        }
+
+        /// <summary>
+        /// 获取急诊就诊次数
+        /// </summary> 
+        /// <returns></returns>
+        private int GetEmgNumByChartNo(string chartNo)
+        {
+            string EmgPatientSql = @"select count(1) from HealthCare.dbo.Emergency a, HealthCare.dbo.VisitRecord b	 
+                                             where a.VisitNo = b.VisitNo  
+                                             AND b.ChartNo= @ChartNo   AND a.VisitStatus<>'D'  ";
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, EmgPatientSql);
+            SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", DbType.AnsiString, chartNo);
+            return int.Parse(StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd)));   //看诊次数 
+
+        }
+
+        private void SetEntity(Database ctx,DbCommand icmd,XmlElement xn)
+        {
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "patient_zyh", DbType.AnsiString, xn.SelectSingleNode("patient_zyh").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "patient_id", DbType.AnsiString, xn.SelectSingleNode("patient_id").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "RY_DATE", DbType.AnsiString, xn.SelectSingleNode("RY_DATE").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "RY_UNIT", DbType.AnsiString, xn.SelectSingleNode("RY_UNIT").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "RY_BQ", DbType.AnsiString, xn.SelectSingleNode("RY_BQ").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "RY_BED", DbType.AnsiString, xn.SelectSingleNode("RY_BED").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "CY_DATE", DbType.AnsiString, xn.SelectSingleNode("CY_DATE").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "CY_UNIT", DbType.AnsiString, xn.SelectSingleNode("CY_UNIT").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "CY_BQ", DbType.AnsiString, xn.SelectSingleNode("CY_BQ").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "age", DbType.AnsiString, xn.SelectSingleNode("age").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "patient_name", DbType.AnsiString, xn.SelectSingleNode("patient_name").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "Sex", DbType.AnsiString, xn.SelectSingleNode("Sex").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "address", DbType.AnsiString, xn.SelectSingleNode("address").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "JG_DOCT_GH", DbType.AnsiString, xn.SelectSingleNode("JG_DOCT_GH").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "SZ_DOCT_GH", DbType.AnsiString, xn.SelectSingleNode("SZ_DOCT_GH").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "Nurse_grade", DbType.AnsiString, xn.SelectSingleNode("Nurse_grade").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "ICD_CODE_RY1", DbType.AnsiString, xn.SelectSingleNode("ICD_CODE_RY1").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "ICD_CODE_RY2", DbType.AnsiString, xn.SelectSingleNode("ICD_CODE_RY2").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "ICD_CODE_RY3", DbType.AnsiString, xn.SelectSingleNode("ICD_CODE_RY3").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "ICD_CODE_RY4", DbType.AnsiString, xn.SelectSingleNode("ICD_CODE_RY4").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "ICD_CODE_CY1", DbType.AnsiString, xn.SelectSingleNode("ICD_CODE_CY1").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "ICD_CODE_CY2", DbType.AnsiString, xn.SelectSingleNode("ICD_CODE_CY2").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "ICD_CODE_CY3", DbType.AnsiString, xn.SelectSingleNode("ICD_CODE_CY3").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "ICD_CODE_CY4", DbType.AnsiString, xn.SelectSingleNode("ICD_CODE_CY4").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "CY_Kind", DbType.AnsiString, xn.SelectSingleNode("CY_Kind").InnerText);
+        }
+
+        private int GetInHospInfoCount(string VisitNo)
+        {
+            var sql = @"Select Count(1) from dbo.zhuyuan_original where patient_zyh=@patient_zyh";
+            var cmd = Scanctx.DBGetSqlStringCommand(sql);
+            Scanctx.AddInParameter(cmd, "patient_zyh", DbType.String, VisitNo);
+            var obj = int.Parse(StrHelepr.Obj2StrTrim(Scanctx.DBExecuteScalar(cmd)));
+            return obj;
+        }
+    }
+}

+ 127 - 0
IL.BizComponent/MediII.Adapter.BizComponent.ADT/ADT_A01B02_Handler.cs

@@ -0,0 +1,127 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Transactions;
+using System.Data;
+using System.Data.Common;
+using IL.Common;
+using System.Xml;
+
+namespace MediII.Adapter.BizComponent.ADT
+{
+    /// <summary>
+    /// 住院就诊记录
+    /// </summary>
+    public class ADT_A01B02_Handler : ADTHandler
+    {
+        public override void Handler(string m, string ID)
+        {
+            var isql = @"insert into dbo.zhuyuan_original(No,patient_zyh,patient_id,RY_DATE,RY_UNIT,RY_BQ,RY_BED,CY_DATE,CY_UNIT,CY_BQ,age,patient_name,Sex,address,JG_DOCT_GH,SZ_DOCT_GH,Nurse_grade,ICD_CODE_RY1,ICD_CODE_RY2,ICD_CODE_RY3,ICD_CODE_RY4,ICD_CODE_CY1,ICD_CODE_CY2,ICD_CODE_CY3,ICD_CODE_CY4,CY_Kind) Value();";
+
+            
+           
+            //初始化
+            var rtnMsg = string.Empty;
+            var msgHead = string.Empty;
+            var msgBody = string.Empty;
+            var resultCode = string.Empty;
+            var result = string.Empty;
+            WebService server = new WebService();
+            OperateXmlUtil xmlHelper = new OperateXmlUtil();
+            //读取配置的凭证号
+            var cert = System.Configuration.ConfigurationManager.AppSettings["cert"];
+            //读取就诊流水号
+            //string visitNo = xmlHelper.XpathRead(m, "//*[@root='2.16.156.10011.2.5.1.9']", "extension");
+            string visitNo = m;
+            //拼接接口访问参数
+            msgBody = xmlHelper.GetMsgBody(visitNo);
+            msgHead = xmlHelper.GetMsgHead("getInHospPresc", cert);
+            //接口访问
+            rtnMsg = server.TestInterface(msgHead, msgBody);
+            //存储访问记录
+            MessageHelper.SaveSendMsg(Scanctx, ID, "ADT^A01[B02]", msgHead, msgBody, rtnMsg);
+            //消息判断是否成功
+            if (!xmlHelper.isSuccess(rtnMsg, ref resultCode, ref result))
+            {
+                //存储访问记录
+
+                throw new Exception(result);
+            }
+
+            //更新发送表,保存留档
+
+            //返回数据解析
+            XmlNode root = xmlHelper.GetContentRootNode(rtnMsg);
+            XmlNodeList list = root.SelectNodes("//returnContents//returnContent");
+            if (list.Count <= 0)
+                return;
+
+            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
+            {
+                var delSql = @"delete from dbo.zhuyuan_medical_order where id=@id";
+                var cmd = ctx.DBGetSqlStringCommand(delSql);
+                ctx.AddInParameter(cmd, "id", System.Data.DbType.String, visitNo);
+                ctx.DBExecuteNonQuery(cmd);//
+
+                var osql = @"insert into dbo.zhuyuan_medical_order(id,medical_order_id,fee_date,yfdm,yfmc,cflx,cfje,cfdzs,yjts,kdksdm,kdys) VALUES(
+@id,@medical_order_id,@fee_date,@yfdm,@yfmc,@cflx,@cfje,@cfdzs,@yjts,@kdksdm,@kdys );";
+
+                foreach (XmlElement xn in list)
+                {
+                    var dcmd = ctx.DBGetSqlStringCommand(osql);
+                    ctx.AddInParameter(dcmd, "id", System.Data.DbType.String, xn.SelectSingleNode("id").InnerText);
+                    ctx.AddInParameter(dcmd, "medical_order_id", System.Data.DbType.String, xn.SelectSingleNode("medical_order_id").InnerText);
+                    ctx.AddInParameter(dcmd, "fee_date", System.Data.DbType.DateTime, xn.SelectSingleNode("fee_date").InnerText);
+                    ctx.AddInParameter(dcmd, "yfdm", System.Data.DbType.String, xn.SelectSingleNode("yfdm").InnerText);
+                    ctx.AddInParameter(dcmd, "yfmc", System.Data.DbType.String, xn.SelectSingleNode("yfmc").InnerText);
+                    ctx.AddInParameter(dcmd, "cflx", System.Data.DbType.String, xn.SelectSingleNode("cflx").InnerText);
+                    ctx.AddInParameter(dcmd, "cfje", System.Data.DbType.String, xn.SelectSingleNode("cfje").InnerText);
+                    ctx.AddInParameter(dcmd, "cfdzs", System.Data.DbType.String, xn.SelectSingleNode("cfdzs").InnerText);
+                    ctx.AddInParameter(dcmd, "yjts", System.Data.DbType.String, xn.SelectSingleNode("yjts").InnerText);
+                    ctx.AddInParameter(dcmd, "kdksdm", System.Data.DbType.String, xn.SelectSingleNode("kdksdm").InnerText);
+                    ctx.AddInParameter(dcmd, "kdys", System.Data.DbType.String, xn.SelectSingleNode("kdys").InnerText);
+                    ctx.DBExecuteNonQuery(dcmd);//
+                }
+
+               
+                scope.Complete(); 
+            }
+
+
+        }
+
+        /// <summary>
+        /// 获取门诊就诊次数
+        /// </summary> 
+        /// <returns></returns>
+        private int GetOutNumByChartNo(string chartNo)
+        {
+
+            string OutPatientSql = @"select count(1)	 
+                                             from HealthCare.dbo.OutPatient a, HealthCare.dbo.VisitRecord b	 
+                                             where a.VisitNo = b.VisitNo  AND b.ChartNo= @ChartNo  
+                                             AND a.VisitStatus<>'D'  ";
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, OutPatientSql);
+            SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", DbType.AnsiString, chartNo);
+            return int.Parse(StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd)));  //看诊次数 
+
+        }
+
+        /// <summary>
+        /// 获取急诊就诊次数
+        /// </summary> 
+        /// <returns></returns>
+        private int GetEmgNumByChartNo(string chartNo)
+        {
+            string EmgPatientSql = @"select count(1) from HealthCare.dbo.Emergency a, HealthCare.dbo.VisitRecord b	 
+                                             where a.VisitNo = b.VisitNo  
+                                             AND b.ChartNo= @ChartNo   AND a.VisitStatus<>'D'  ";
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, EmgPatientSql);
+            SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", DbType.AnsiString, chartNo);
+            return int.Parse(StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd)));   //看诊次数 
+
+        }
+
+    }
+}

+ 133 - 0
IL.BizComponent/MediII.Adapter.BizComponent.ADT/ADT_A01B03_Handler.cs

@@ -0,0 +1,133 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Transactions;
+using System.Data;
+using System.Data.Common;
+using IL.Common;
+using System.Xml;
+
+namespace MediII.Adapter.BizComponent.ADT
+{
+    /// <summary>
+    /// 住院就诊记录
+    /// </summary>
+    public class ADT_A01B03_Handler : ADTHandler
+    {
+        public override void Handler(string m, string ID)
+        {
+            var isql = @"insert into dbo.zhuyuan_original(No,patient_zyh,patient_id,RY_DATE,RY_UNIT,RY_BQ,RY_BED,CY_DATE,CY_UNIT,CY_BQ,age,patient_name,Sex,address,JG_DOCT_GH,SZ_DOCT_GH,Nurse_grade,ICD_CODE_RY1,ICD_CODE_RY2,ICD_CODE_RY3,ICD_CODE_RY4,ICD_CODE_CY1,ICD_CODE_CY2,ICD_CODE_CY3,ICD_CODE_CY4,CY_Kind) Value();";
+
+            
+           
+            //初始化
+            var rtnMsg = string.Empty;
+            var msgHead = string.Empty;
+            var msgBody = string.Empty;
+            var resultCode = string.Empty;
+            var result = string.Empty;
+            WebService server = new WebService();
+            OperateXmlUtil xmlHelper = new OperateXmlUtil();
+            //读取配置的凭证号
+            var cert = System.Configuration.ConfigurationManager.AppSettings["cert"];
+            //读取就诊流水号
+            //string visitNo = xmlHelper.XpathRead(m, "//*[@root='2.16.156.10011.2.5.1.9']", "extension");
+            string visitNo = m;
+            //拼接接口访问参数
+            msgBody = xmlHelper.GetMsgBody(visitNo);
+            msgHead = xmlHelper.GetMsgHead("getInHospCostDetail", cert);
+            //接口访问
+            rtnMsg = server.TestInterface(msgHead, msgBody);
+            //存储访问记录
+            MessageHelper.SaveSendMsg(Scanctx, ID, "ADT^A01[B03]", msgHead, msgBody, rtnMsg);
+            //消息判断是否成功
+            if (!xmlHelper.isSuccess(rtnMsg, ref resultCode, ref result))
+            {
+                //存储访问记录
+
+                throw new Exception(result);
+            }
+
+            //更新发送表,保存留档
+
+            //返回数据解析
+            XmlNode root = xmlHelper.GetContentRootNode(rtnMsg);
+            XmlNodeList list = root.SelectNodes("//returnContents//returnContent");
+            if (list.Count <= 0)
+                return;
+
+            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
+            {
+                var delSql = @"delete from dbo.original_data_zhuyuan where patient_zyh=@patient_zyh";
+                var cmd = ctx.DBGetSqlStringCommand(delSql);
+                ctx.AddInParameter(cmd, "patient_zyh", System.Data.DbType.String, visitNo);
+                ctx.DBExecuteNonQuery(cmd);//
+
+                var fsql = @"insert into dbo.original_data_zhuyuan(patient_zyh,patient_id,fee_date,order_unit_id,order_doctor_id,exec_unit_id,exec_doctor_id,patient_unit_id,bed_doctor_id,bq_id,bed_id,fee_type_id,fee_type_name,item_id,item_name,item_quantity,price,fee) VALUES(
+@patient_zyh,@patient_id,@fee_date,@order_unit_id,@order_doctor_id,@exec_unit_id,@exec_doctor_id,@patient_unit_id,@bed_doctor_id,@bq_id,@bed_id,@fee_type_id,@fee_type_name,@item_id,@item_name,@item_quantity,@price,@fee);";
+                
+                //住院收费数据
+                foreach (XmlElement xn in list)
+                {
+                    var dcmd = ctx.DBGetSqlStringCommand(fsql);
+                    ctx.AddInParameter(dcmd, "patient_zyh", System.Data.DbType.String, xn.SelectSingleNode("mz_id").InnerText);
+                    ctx.AddInParameter(dcmd, "patient_id", System.Data.DbType.String, xn.SelectSingleNode("patient_id").InnerText);
+                    ctx.AddInParameter(dcmd, "fee_date", System.Data.DbType.DateTime, xn.SelectSingleNode("fee_date").InnerText);
+                    ctx.AddInParameter(dcmd, "order_unit_id", System.Data.DbType.String, xn.SelectSingleNode("order_unit_id").InnerText);
+                    ctx.AddInParameter(dcmd, "order_doctor_id", System.Data.DbType.String, xn.SelectSingleNode("order_doctor_id").InnerText);
+                    ctx.AddInParameter(dcmd, "exec_unit_id", System.Data.DbType.String, xn.SelectSingleNode("exec_unit_id").InnerText);
+                    ctx.AddInParameter(dcmd, "exec_doctor_id", System.Data.DbType.String, xn.SelectSingleNode("exec_doctor_id").InnerText);
+                    ctx.AddInParameter(dcmd, "patient_unit_id", System.Data.DbType.String, xn.SelectSingleNode("patient_unit_id").InnerText);
+                    ctx.AddInParameter(dcmd, "bed_doctor_id", System.Data.DbType.String, xn.SelectSingleNode("bed_doctor_id").InnerText);
+                    ctx.AddInParameter(dcmd, "bq_id", System.Data.DbType.String, xn.SelectSingleNode("bq_id").InnerText);
+                    ctx.AddInParameter(dcmd, "bed_id", System.Data.DbType.String, xn.SelectSingleNode("bed_id").InnerText);
+                    ctx.AddInParameter(dcmd, "fee_type_id", System.Data.DbType.String, xn.SelectSingleNode("fee_type_id").InnerText);
+                    ctx.AddInParameter(dcmd, "fee_type_name", System.Data.DbType.String, xn.SelectSingleNode("fee_type_name").InnerText);
+                    ctx.AddInParameter(dcmd, "item_id", System.Data.DbType.String, xn.SelectSingleNode("item_id").InnerText);
+                    ctx.AddInParameter(dcmd, "item_name", System.Data.DbType.String, xn.SelectSingleNode("item_name").InnerText);
+                    ctx.AddInParameter(dcmd, "item_quantity", System.Data.DbType.String, xn.SelectSingleNode("item_quantity").InnerText);
+                    ctx.AddInParameter(dcmd, "price", System.Data.DbType.String, xn.SelectSingleNode("price").InnerText);
+                    ctx.AddInParameter(dcmd, "fee", System.Data.DbType.String, xn.SelectSingleNode("fee").InnerText);
+                    ctx.DBExecuteNonQuery(dcmd);//
+                }
+                scope.Complete(); 
+            }
+
+
+        }
+
+        /// <summary>
+        /// 获取门诊就诊次数
+        /// </summary> 
+        /// <returns></returns>
+        private int GetOutNumByChartNo(string chartNo)
+        {
+
+            string OutPatientSql = @"select count(1)	 
+                                             from HealthCare.dbo.OutPatient a, HealthCare.dbo.VisitRecord b	 
+                                             where a.VisitNo = b.VisitNo  AND b.ChartNo= @ChartNo  
+                                             AND a.VisitStatus<>'D'  ";
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, OutPatientSql);
+            SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", DbType.AnsiString, chartNo);
+            return int.Parse(StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd)));  //看诊次数 
+
+        }
+
+        /// <summary>
+        /// 获取急诊就诊次数
+        /// </summary> 
+        /// <returns></returns>
+        private int GetEmgNumByChartNo(string chartNo)
+        {
+            string EmgPatientSql = @"select count(1) from HealthCare.dbo.Emergency a, HealthCare.dbo.VisitRecord b	 
+                                             where a.VisitNo = b.VisitNo  
+                                             AND b.ChartNo= @ChartNo   AND a.VisitStatus<>'D'  ";
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, EmgPatientSql);
+            SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", DbType.AnsiString, chartNo);
+            return int.Parse(StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd)));   //看诊次数 
+
+        }
+
+    }
+}

+ 124 - 0
IL.BizComponent/MediII.Adapter.BizComponent.ADT/ADT_A01B04_Handler.cs

@@ -0,0 +1,124 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Transactions;
+using System.Data;
+using System.Data.Common;
+using IL.Common;
+using System.Xml;
+
+namespace MediII.Adapter.BizComponent.ADT
+{
+    /// <summary>
+    /// 住院就诊记录
+    /// </summary>
+    public class ADT_A01B04_Handler : ADTHandler
+    {
+        public override void Handler(string m, string ID)
+        {
+            var isql = @"insert into dbo.zhuyuan_original(No,patient_zyh,patient_id,RY_DATE,RY_UNIT,RY_BQ,RY_BED,CY_DATE,CY_UNIT,CY_BQ,age,patient_name,Sex,address,JG_DOCT_GH,SZ_DOCT_GH,Nurse_grade,ICD_CODE_RY1,ICD_CODE_RY2,ICD_CODE_RY3,ICD_CODE_RY4,ICD_CODE_CY1,ICD_CODE_CY2,ICD_CODE_CY3,ICD_CODE_CY4,CY_Kind) Value();";
+
+            
+           
+            //初始化
+            var rtnMsg = string.Empty;
+            var msgHead = string.Empty;
+            var msgBody = string.Empty;
+            var resultCode = string.Empty;
+            var result = string.Empty;
+            WebService server = new WebService();
+            OperateXmlUtil xmlHelper = new OperateXmlUtil();
+            //读取配置的凭证号
+            var cert = System.Configuration.ConfigurationManager.AppSettings["cert"];
+            //读取就诊流水号
+            //string visitNo = xmlHelper.XpathRead(m, "//*[@root='2.16.156.10011.2.5.1.9']", "extension");
+            string visitNo = m;
+            //拼接接口访问参数
+            msgBody = xmlHelper.GetMsgBody(visitNo);
+            msgHead = xmlHelper.GetMsgHead("getTransInfo", cert);
+            //接口访问
+            rtnMsg = server.TestInterface(msgHead, msgBody);
+            //存储访问记录
+            MessageHelper.SaveSendMsg(Scanctx, ID, "ADT^A01[B04]", msgHead, msgBody, rtnMsg);
+            //消息判断是否成功
+            if (!xmlHelper.isSuccess(rtnMsg, ref resultCode, ref result))
+            {
+                //存储访问记录
+
+                throw new Exception(result);
+            }
+
+            //更新发送表,保存留档
+
+            //返回数据解析
+            XmlNode root = xmlHelper.GetContentRootNode(rtnMsg);
+            XmlNodeList list = root.SelectNodes("//returnContents//returnContent");
+
+            if (list.Count <= 0)
+                return;
+
+            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
+            {
+                var delSql = @"delete from dbo.patient_trans where patient_zyh=@patient_zyh";
+                var cmd = ctx.DBGetSqlStringCommand(delSql);
+                ctx.AddInParameter(cmd, "patient_zyh", System.Data.DbType.String, visitNo);
+                ctx.DBExecuteNonQuery(cmd);//
+
+                var fsql = @"insert into dbo.patient_trans(patient_zyh,patient_id,TRANS_DATE,TRANS_UNIT,TRANS_BQ,TRANS_BED,zk_UNIT,zk_BQ,zk_BED) Values(@patient_zyh,@patient_id,@TRANS_DATE,@TRANS_UNIT,@TRANS_BQ,@TRANS_BED,@zk_UNIT,@zk_BQ,@zk_BED)";
+                
+                //住院转科转床
+                foreach (XmlElement xn in list)
+                {
+                    var dcmd = ctx.DBGetSqlStringCommand(fsql);
+                    ctx.AddInParameter(dcmd, "patient_zyh", System.Data.DbType.String, xn.SelectSingleNode("patient_zyh").InnerText);
+                    ctx.AddInParameter(dcmd, "patient_id", System.Data.DbType.String, xn.SelectSingleNode("patient_id").InnerText);
+                    ctx.AddInParameter(dcmd, "TRANS_DATE", System.Data.DbType.DateTime, xn.SelectSingleNode("TRANS_DATE").InnerText);
+                    ctx.AddInParameter(dcmd, "TRANS_UNIT", System.Data.DbType.String, xn.SelectSingleNode("TRANS_UNIT").InnerText);
+                    ctx.AddInParameter(dcmd, "TRANS_BQ", System.Data.DbType.String, xn.SelectSingleNode("TRANS_BQ").InnerText);
+                    ctx.AddInParameter(dcmd, "TRANS_BED", System.Data.DbType.String, xn.SelectSingleNode("TRANS_BED").InnerText);
+                    ctx.AddInParameter(dcmd, "zk_UNIT", System.Data.DbType.String, xn.SelectSingleNode("zk_UNIT").InnerText);
+                    ctx.AddInParameter(dcmd, "zk_BQ", System.Data.DbType.String, xn.SelectSingleNode("zk_BQ").InnerText);
+                    ctx.AddInParameter(dcmd, "zk_BED", System.Data.DbType.String, xn.SelectSingleNode("zk_BED").InnerText);
+                    ctx.DBExecuteNonQuery(dcmd);//
+                }
+                scope.Complete(); 
+            }
+
+
+        }
+
+        /// <summary>
+        /// 获取门诊就诊次数
+        /// </summary> 
+        /// <returns></returns>
+        private int GetOutNumByChartNo(string chartNo)
+        {
+
+            string OutPatientSql = @"select count(1)	 
+                                             from HealthCare.dbo.OutPatient a, HealthCare.dbo.VisitRecord b	 
+                                             where a.VisitNo = b.VisitNo  AND b.ChartNo= @ChartNo  
+                                             AND a.VisitStatus<>'D'  ";
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, OutPatientSql);
+            SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", DbType.AnsiString, chartNo);
+            return int.Parse(StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd)));  //看诊次数 
+
+        }
+
+        /// <summary>
+        /// 获取急诊就诊次数
+        /// </summary> 
+        /// <returns></returns>
+        private int GetEmgNumByChartNo(string chartNo)
+        {
+            string EmgPatientSql = @"select count(1) from HealthCare.dbo.Emergency a, HealthCare.dbo.VisitRecord b	 
+                                             where a.VisitNo = b.VisitNo  
+                                             AND b.ChartNo= @ChartNo   AND a.VisitStatus<>'D'  ";
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, EmgPatientSql);
+            SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", DbType.AnsiString, chartNo);
+            return int.Parse(StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd)));   //看诊次数 
+
+        }
+
+    }
+}

+ 258 - 0
IL.BizComponent/MediII.Adapter.BizComponent.ADT/ADT_A02B01_Handler.cs

@@ -0,0 +1,258 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Transactions;
+using System.Data;
+using System.Data.Common;
+using IL.Common;
+using System.Xml;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+
+namespace MediII.Adapter.BizComponent.ADT
+{
+    /// <summary>
+    /// 门诊就诊记录
+    /// </summary>
+    public class ADT_A02B01_Handler : ADTHandler
+    {
+        public override void Handler(string m, string ID)
+        {
+            var isql = @"insert into dbo.zhuyuan_original(No,patient_zyh,patient_id,RY_DATE,RY_UNIT,RY_BQ,RY_BED,CY_DATE,CY_UNIT,CY_BQ,age,patient_name,Sex,address,JG_DOCT_GH,SZ_DOCT_GH,Nurse_grade,ICD_CODE_RY1,ICD_CODE_RY2,ICD_CODE_RY3,ICD_CODE_RY4,ICD_CODE_CY1,ICD_CODE_CY2,ICD_CODE_CY3,ICD_CODE_CY4,CY_Kind) Value();";
+
+            
+           
+            //初始化
+            var rtnMsg = string.Empty;
+            var msgHead = string.Empty;
+            var msgBody = string.Empty;
+            var resultCode = string.Empty;
+            var result = string.Empty;
+            WebService server = new WebService();
+            OperateXmlUtil xmlHelper = new OperateXmlUtil();
+            //读取配置的凭证号
+            var cert = System.Configuration.ConfigurationManager.AppSettings["cert"];
+            //读取就诊流水号
+            //string visitNo = xmlHelper.XpathRead(m, "//*[@root='2.16.156.10011.2.5.1.9']", "extension");
+            string visitNo = m;
+            //拼接接口访问参数
+            msgBody = xmlHelper.GetMsgBody(visitNo);
+            msgHead = xmlHelper.GetMsgHead("getInHospitalInfo", cert);
+            //接口访问
+            rtnMsg = server.TestInterface(msgHead, msgBody);
+            //存储访问记录
+            MessageHelper.SaveSendMsg(Scanctx, ID, "ADT^A02[B01]", msgHead, msgBody, rtnMsg);
+            //消息判断是否成功
+            if (!xmlHelper.isSuccess(rtnMsg, ref resultCode, ref result))
+            {
+                //存储访问记录
+
+                throw new Exception(result);
+            }
+
+            //更新发送表,保存留档
+
+            //返回数据解析
+            XmlNode root = xmlHelper.GetContentRootNode(rtnMsg);
+            XmlNodeList list = root.SelectNodes("//returnContents//returnContent");
+            if (list.Count <= 0)
+                return;
+            /* 获取档案,如果存在出院日,再判断是否有相关消息任务进行中,如有,则不操作,如果没有,插入任务,同时更新档案
+               Todo:
+             * 1、判断出院日
+             * 2、判断是否有相关任务进行中
+             * 3、插入医嘱任务、插入费用任务
+             * 4、更新档案
+             */
+
+            //是否出院
+            string CheckOutDate = root.SelectSingleNode("//*[name()='CY_DATE']").InnerText;
+
+            if (!string.IsNullOrWhiteSpace(CheckOutDate))
+            {
+                try
+                {
+                    DateTime OutDate = DateTime.Parse(CheckOutDate);
+                    if (OutDate < DateTime.Parse("2010-01-01") && OutDate > DateTime.Parse("2050-01-01"))
+                    {
+                        return;//返回,本次不解析
+                    }
+                }
+                catch
+                {
+                    return;
+                }
+            }
+            else
+            {
+                return;
+            }
+            //入院日期
+            string CheckInDate = root.SelectSingleNode("//*[name()='RY_DATE']").InnerText;
+
+            int num = GetOriginalCount(visitNo);
+            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
+            {
+                if (num <= 0)
+                {
+                    var ifsql = @"insert into dbo.zhuyuan_original(patient_zyh,patient_id,RY_DATE,RY_UNIT,RY_BQ,RY_BED,CY_DATE,CY_UNIT,CY_BQ,age,patient_name,Sex,address,JG_DOCT_GH,SZ_DOCT_GH,Nurse_grade,ICD_CODE_RY1,ICD_CODE_RY2,ICD_CODE_RY3,ICD_CODE_RY4,ICD_CODE_CY1,ICD_CODE_CY2,ICD_CODE_CY3,ICD_CODE_CY4,CY_Kind) Values(
+@patient_zyh,@patient_id,@RY_DATE,@RY_UNIT,@RY_BQ,@RY_BED,@CY_DATE,@CY_UNIT,@CY_BQ,@age,@patient_name,@Sex,@address,@JG_DOCT_GH,@SZ_DOCT_GH,@Nurse_grade,@ICD_CODE_RY1,@ICD_CODE_RY2,@ICD_CODE_RY3,@ICD_CODE_RY4,@ICD_CODE_CY1,@ICD_CODE_CY2,@ICD_CODE_CY3,@ICD_CODE_CY4,@CY_Kind)";
+                    //住院患者基本档
+                    foreach (XmlElement xn in list)
+                    {
+                        var icmd = ctx.DBGetSqlStringCommand(ifsql);
+                        SetEntity(ctx, icmd, xn);
+                        SqlDataAccess.ExecuteNonQuery(ctx, icmd);
+                    }
+                }
+                else
+                {
+                    var usql = @"update dbo.zhuyuan_original set RY_DATE=@RY_DATE,
+RY_UNIT=@RY_UNIT,
+RY_BQ=@RY_BQ,
+RY_BED=@RY_BED,
+CY_DATE=@CY_DATE,
+CY_UNIT=@CY_UNIT,
+CY_BQ=@CY_BQ,
+age=@age,
+patient_name=@patient_name,
+Sex=@Sex,
+address=@address,
+JG_DOCT_GH=@JG_DOCT_GH,
+SZ_DOCT_GH=@SZ_DOCT_GH,
+Nurse_grade=@Nurse_grade,
+ICD_CODE_RY1=@ICD_CODE_RY1,
+ICD_CODE_RY2=@ICD_CODE_RY2,
+ICD_CODE_RY3=@ICD_CODE_RY3,
+ICD_CODE_RY4=@ICD_CODE_RY4,
+ICD_CODE_CY1=@ICD_CODE_CY1,
+ICD_CODE_CY2=@ICD_CODE_CY2,
+ICD_CODE_CY3=@ICD_CODE_CY3,
+ICD_CODE_CY4=@ICD_CODE_CY4,
+CY_Kind=@CY_Kind where patient_zyh=@patient_zyh and patient_id=@patient_id";
+                    foreach (XmlElement xn in list)
+                    {
+                        var ucmd = ctx.DBGetSqlStringCommand(usql);
+                        SetEntity(ctx, ucmd, xn);
+                        SqlDataAccess.ExecuteNonQuery(ctx, ucmd);
+                    }
+                }
+                var sql = @"INSERT INTO HL7_Platform.dbo.HL7_Scan  (ID ,ChartNo,VisitNo,OtherNo1,OtherNo2,OtherNo3,OtherName ,  TaskType ,  TaskStatus ,  UpdateUser ,  UpdateTime,Reserve1) VALUES (@ID ,@ChartNo ,@VisitNo ,@OtherNo1 ,  @OtherNo2 ,@OtherNo3 ,@OtherName ,@TaskType ,@TaskStatus , @UpdateUser , GETDATE(),@Reserve1)";
+                if (GetScanTaskCount(visitNo, "ADT^A01[B02]") <= 0)
+                {
+                    //住院处方单
+                    var ccmd = Scanctx.DBGetSqlStringCommand(sql);
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "ID", DbType.AnsiString, Guid.NewGuid().ToString());
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "ChartNo", DbType.AnsiString, visitNo);
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "VisitNo", DbType.AnsiString, visitNo);
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "OtherNo1", DbType.AnsiString, CheckOutDate);
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "OtherNo2", DbType.AnsiString, "");
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "OtherNo3", DbType.AnsiString, "");
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "OtherName", DbType.AnsiString, "住院处方单");
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "TaskType", DbType.AnsiString, "ADT^A01[B02]");
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "TaskStatus", DbType.Int32, 1);
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "UpdateUser", DbType.AnsiString, "9999");
+                    SqlDataAccess.AddInParameter(Scanctx, ccmd, "Reserve1", DbType.AnsiString, "");
+                    SqlDataAccess.ExecuteNonQuery(Scanctx, ccmd);
+                }
+                if (GetScanTaskCount(visitNo, "ADT^A01[B03]") <= 0)
+                {
+                    //住院收费数据明细
+                    var fcmd = Scanctx.DBGetSqlStringCommand(sql);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "ID", DbType.AnsiString, Guid.NewGuid().ToString());
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "ChartNo", DbType.AnsiString, visitNo);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "VisitNo", DbType.AnsiString, visitNo);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "OtherNo1", DbType.AnsiString, CheckOutDate);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "OtherNo2", DbType.AnsiString, "");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "OtherNo3", DbType.AnsiString, "");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "OtherName", DbType.AnsiString, "住院收费数据明细");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "TaskType", DbType.AnsiString, "ADT^A01[B03]");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "TaskStatus", DbType.Int32, 1);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "UpdateUser", DbType.AnsiString, "9999");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "Reserve1", DbType.AnsiString, "");
+                    SqlDataAccess.ExecuteNonQuery(Scanctx, fcmd);
+                }
+                if (GetScanTaskCount(visitNo, "ADT^A01[B04]") <= 0)
+                {
+                    //住院收费数据明细
+                    var fcmd = Scanctx.DBGetSqlStringCommand(sql);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "ID", DbType.AnsiString, Guid.NewGuid().ToString());
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "ChartNo", DbType.AnsiString, visitNo);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "VisitNo", DbType.AnsiString, visitNo);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "OtherNo1", DbType.AnsiString, CheckOutDate);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "OtherNo2", DbType.AnsiString, "");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "OtherNo3", DbType.AnsiString, "");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "OtherName", DbType.AnsiString, "住院转科转床");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "TaskType", DbType.AnsiString, "ADT^A01[B04]");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "TaskStatus", DbType.Int32, 1);
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "UpdateUser", DbType.AnsiString, "9999");
+                    SqlDataAccess.AddInParameter(Scanctx, fcmd, "Reserve1", DbType.AnsiString, "");
+                    SqlDataAccess.ExecuteNonQuery(Scanctx, fcmd);
+                }
+                scope.Complete(); 
+            }
+
+
+        }
+
+        /// <summary>
+        /// 获取门诊就诊次数
+        /// </summary> 
+        /// <returns></returns>
+        private int GetOutNumByChartNo(string chartNo)
+        {
+
+            string OutPatientSql = @"select count(1)	 
+                                             from HealthCare.dbo.OutPatient a, HealthCare.dbo.VisitRecord b	 
+                                             where a.VisitNo = b.VisitNo  AND b.ChartNo= @ChartNo  
+                                             AND a.VisitStatus<>'D'  ";
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, OutPatientSql);
+            SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", DbType.AnsiString, chartNo);
+            return int.Parse(StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd)));  //看诊次数 
+
+        }
+
+        /// <summary>
+        /// 获取急诊就诊次数
+        /// </summary> 
+        /// <returns></returns>
+        private int GetEmgNumByChartNo(string chartNo)
+        {
+            string EmgPatientSql = @"select count(1) from HealthCare.dbo.Emergency a, HealthCare.dbo.VisitRecord b	 
+                                             where a.VisitNo = b.VisitNo  
+                                             AND b.ChartNo= @ChartNo   AND a.VisitStatus<>'D'  ";
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, EmgPatientSql);
+            SqlDataAccess.AddInParameter(ctx, cmd, "ChartNo", DbType.AnsiString, chartNo);
+            return int.Parse(StrHelepr.Obj2StrTrim(SqlDataAccess.ExecuteScalar(ctx, cmd)));   //看诊次数 
+
+        }
+        private void SetEntity(Database ctx, DbCommand icmd, XmlElement xn)
+        {
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "patient_zyh", DbType.AnsiString, xn.SelectSingleNode("patient_zyh").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "patient_id", DbType.AnsiString, xn.SelectSingleNode("patient_id").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "RY_DATE", DbType.AnsiString, xn.SelectSingleNode("RY_DATE").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "RY_UNIT", DbType.AnsiString, xn.SelectSingleNode("RY_UNIT").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "RY_BQ", DbType.AnsiString, xn.SelectSingleNode("RY_BQ").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "RY_BED", DbType.AnsiString, xn.SelectSingleNode("RY_BED").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "CY_DATE", DbType.AnsiString, xn.SelectSingleNode("CY_DATE").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "CY_UNIT", DbType.AnsiString, xn.SelectSingleNode("CY_UNIT").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "CY_BQ", DbType.AnsiString, xn.SelectSingleNode("CY_BQ").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "age", DbType.AnsiString, xn.SelectSingleNode("age").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "patient_name", DbType.AnsiString, xn.SelectSingleNode("patient_name").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "Sex", DbType.AnsiString, xn.SelectSingleNode("Sex").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "address", DbType.AnsiString, xn.SelectSingleNode("address").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "JG_DOCT_GH", DbType.AnsiString, xn.SelectSingleNode("JG_DOCT_GH").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "SZ_DOCT_GH", DbType.AnsiString, xn.SelectSingleNode("SZ_DOCT_GH").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "Nurse_grade", DbType.AnsiString, xn.SelectSingleNode("Nurse_grade").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "ICD_CODE_RY1", DbType.AnsiString, xn.SelectSingleNode("ICD_CODE_RY1").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "ICD_CODE_RY2", DbType.AnsiString, xn.SelectSingleNode("ICD_CODE_RY2").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "ICD_CODE_RY3", DbType.AnsiString, xn.SelectSingleNode("ICD_CODE_RY3").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "ICD_CODE_RY4", DbType.AnsiString, xn.SelectSingleNode("ICD_CODE_RY4").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "ICD_CODE_CY1", DbType.AnsiString, xn.SelectSingleNode("ICD_CODE_CY1").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "ICD_CODE_CY2", DbType.AnsiString, xn.SelectSingleNode("ICD_CODE_CY2").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "ICD_CODE_CY3", DbType.AnsiString, xn.SelectSingleNode("ICD_CODE_CY3").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "ICD_CODE_CY4", DbType.AnsiString, xn.SelectSingleNode("ICD_CODE_CY4").InnerText);
+            SqlDataAccess.AddInParameter(Scanctx, icmd, "CY_Kind", DbType.AnsiString, xn.SelectSingleNode("CY_Kind").InnerText);
+        }
+    }
+}

+ 121 - 0
IL.BizComponent/MediII.Adapter.BizComponent.ADT/ADT_A04B01_Handler.cs

@@ -0,0 +1,121 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+using System.Transactions;
+using System.Data;
+using IL.Common;
+using System.Xml;
+
+namespace MediII.Adapter.BizComponent.ADT
+{
+    public class ADT_A04B01_Handler : ADTHandler
+    {
+        public override void Handler(string m,string ID)
+        {
+            //门诊就诊,处方单
+            //初始化
+            var rtnMsg = string.Empty;
+            var msgHead = string.Empty;
+            var msgBody = string.Empty;
+            var resultCode = string.Empty;
+            var result = string.Empty;
+            WebService server = new WebService();
+            OperateXmlUtil xmlHelper = new OperateXmlUtil();
+            //读取配置的凭证号
+            var cert = System.Configuration.ConfigurationManager.AppSettings["cert"];
+            //读取就诊流水号
+            string visitNo = m;
+            //拼接接口访问参数
+            msgBody = xmlHelper.GetMsgBody(visitNo);
+            msgHead = xmlHelper.GetMsgHead("getOutPresc", cert);
+            //接口访问
+            rtnMsg = server.TestInterface(msgHead, msgBody);
+            //存储访问记录
+            MessageHelper.SaveSendMsg(Scanctx, ID, "ADT^A04[B01]", msgHead, msgBody, rtnMsg);
+            //消息判断是否成功
+            if (!xmlHelper.isSuccess(rtnMsg, ref resultCode, ref result))
+            {
+                throw new Exception(result);
+            }
+                
+            //更新发送表,保存留档
+
+            //返回数据解析
+            XmlNode root=  xmlHelper.GetContentRootNode(rtnMsg);
+            XmlNodeList list = root.SelectNodes("//returnContents//returnContent");
+            if (list.Count <= 0)
+                return;
+            using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew))
+            {
+                var delSql = @"delete from dbo.menzhen_medical_order where id=@id";
+                var cmd = ctx.DBGetSqlStringCommand(delSql);
+                ctx.AddInParameter(cmd, "id", System.Data.DbType.String, visitNo);
+                ctx.DBExecuteNonQuery(cmd);//
+
+                var dsql = @"INSERT INTO dbo.menzhen_medical_order
+(id,medical_order_id,fee_date,yfdm,yfmc,cflx,cfje,sycfbz,yjts,kdksdm,kdys) 
+VALUES(@id,@medical_order_id,@fee_date,@yfdm,@yfmc,@cflx,@cfje,@sycfbz,@yjts,@kdksdm,@kdys)";
+
+                foreach (XmlElement xn in list)
+                {
+                    var dcmd = ctx.DBGetSqlStringCommand(dsql);
+                    ctx.AddInParameter(dcmd, "id", System.Data.DbType.String, xn.SelectSingleNode("id").InnerText);
+                    ctx.AddInParameter(dcmd, "medical_order_id", System.Data.DbType.String, xn.SelectSingleNode("medical_order_id").InnerText);
+                    ctx.AddInParameter(dcmd, "fee_date", System.Data.DbType.DateTime, xn.SelectSingleNode("fee_date").InnerText);
+                    ctx.AddInParameter(dcmd, "yfdm", System.Data.DbType.String, xn.SelectSingleNode("yfdm").InnerText);
+                    ctx.AddInParameter(dcmd, "yfmc", System.Data.DbType.String, xn.SelectSingleNode("yfmc").InnerText);
+                    ctx.AddInParameter(dcmd, "cflx", System.Data.DbType.String, xn.SelectSingleNode("cflx").InnerText);
+                    ctx.AddInParameter(dcmd, "cfje", System.Data.DbType.String, xn.SelectSingleNode("cfje").InnerText);
+                    ctx.AddInParameter(dcmd, "sycfbz", System.Data.DbType.String, xn.SelectSingleNode("sycfbz").InnerText);
+                    ctx.AddInParameter(dcmd, "yjts", System.Data.DbType.String, xn.SelectSingleNode("yjts").InnerText);
+                    ctx.AddInParameter(dcmd, "kdksdm", System.Data.DbType.String, xn.SelectSingleNode("kdksdm").InnerText);
+                    ctx.AddInParameter(dcmd, "kdys", System.Data.DbType.String, xn.SelectSingleNode("kdys").InnerText);
+                    ctx.DBExecuteNonQuery(dcmd);//
+                }
+                scope.Complete();
+                //DiagFlag = 20; 
+            }
+
+        }
+
+
+        public string GetDiagNo(string icdCode)
+        {
+            try
+            {
+                var sql = string.Format("SELECT DiagNo FROM HealthCare.dbo.Diag WHERE IcdCode='{0}'", icdCode);
+                var obj = ctx.DBExecuteScalar(CommandType.Text, sql);
+                var val = StrHelepr.Obj2StrTrim(obj);
+                if (string.IsNullOrWhiteSpace(val))
+                {
+                    val = icdCode;
+                }
+
+                return val;
+            }
+            catch (Exception ex)
+            {
+                IL.Common.LogHelper.LogError(string.Format("获取DiagNo错误:{0}  {1}\r\n{2}", icdCode, ex.Message, ex.StackTrace), LogCatagories.MQAccess);
+                return string.Empty;
+            }
+        }
+
+        public string GetBedNo(Database ctx, string roombed)
+        {
+            var sql = "SELECT Top 1 BedNo FROM HealthCare.dbo.Bed WHERE RoomBed=@RoomBed";
+            var cmd = ctx.DBGetSqlStringCommand(sql);
+            ctx.AddInParameter(cmd, "RoomBed", DbType.String, roombed);
+            var obj = StrHelepr.Obj2StrTrim(ctx.DBExecuteScalar(cmd));
+            if (string.IsNullOrWhiteSpace(obj))
+            {
+                obj = roombed;
+            }
+            return obj;
+
+        }
+    }
+
+
+}

+ 127 - 0
IL.BizComponent/MediII.Adapter.BizComponent.ADT/ADT_A04B02_Handler.cs

@@ -0,0 +1,127 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+using System.Transactions;
+using System.Data;
+using IL.Common;
+using System.Xml;
+
+namespace MediII.Adapter.BizComponent.ADT
+{
+    public class ADT_A04B02_Handler : ADTHandler
+    {
+        public override void Handler(string m, string ID)
+        {
+            //门诊就诊,收费明细
+            //初始化
+            var rtnMsg = string.Empty;
+            var msgHead = string.Empty;
+            var msgBody = string.Empty;
+            var resultCode = string.Empty;
+            var result = string.Empty;
+            WebService server = new WebService();
+            OperateXmlUtil xmlHelper = new OperateXmlUtil();
+            //读取配置的凭证号
+            var cert = System.Configuration.ConfigurationManager.AppSettings["cert"];
+            //读取就诊流水号
+            string visitNo = m;
+            //拼接接口访问参数
+            msgBody = xmlHelper.GetMsgBody(visitNo);
+            msgHead = xmlHelper.GetMsgHead("getOutCostDetail", cert);
+            //接口访问
+            rtnMsg = server.TestInterface(msgHead, msgBody);
+            //存储访问记录
+            MessageHelper.SaveSendMsg(Scanctx, ID, "ADT^A04[B02]", msgHead, msgBody, rtnMsg);
+            //消息判断是否成功
+            if (!xmlHelper.isSuccess(rtnMsg, ref resultCode, ref result))
+            {
+                //存储访问记录
+
+                throw new Exception(result);
+            }
+                
+            //更新发送表,保存留档
+
+            //返回数据解析
+            XmlNode root=  xmlHelper.GetContentRootNode(rtnMsg);
+            XmlNodeList list = root.SelectNodes("//returnContents//returnContent");
+            if (list.Count <= 0)
+                return;
+            using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew))
+            {
+
+                var delSql = @"delete from dbo.original_data_menzhen where mz_id=@mz_id";
+                var cmd = ctx.DBGetSqlStringCommand(delSql);
+                ctx.AddInParameter(cmd, "mz_id", System.Data.DbType.String, visitNo);
+                ctx.DBExecuteNonQuery(cmd);//
+                //门诊收费明细
+
+                var osql = @"insert into dbo.original_data_menzhen(mz_id,patient_id,fee_date,order_unit_id,order_doctor_id,exec_unit_id,exec_doctor_id,fee_type_id,fee_type_name,item_id,item_name,item_quantity,price,fee) VALUES(
+@mz_id,@patient_id,@fee_date,@order_unit_id,@order_doctor_id,@exec_unit_id,@exec_doctor_id,@fee_type_id,@fee_type_name,@item_id,@item_name,@item_quantity,@price,@fee);";
+                foreach (XmlElement xn in list)
+                {
+                    var ocmd = ctx.DBGetSqlStringCommand(osql);
+                    ctx.AddInParameter(ocmd, "mz_id", System.Data.DbType.String, xn.SelectSingleNode("mz_id").InnerText);
+                    ctx.AddInParameter(ocmd, "patient_id", System.Data.DbType.String, xn.SelectSingleNode("patient_id").InnerText);
+                    ctx.AddInParameter(ocmd, "fee_date", System.Data.DbType.DateTime, xn.SelectSingleNode("fee_date").InnerText);
+                    ctx.AddInParameter(ocmd, "order_unit_id", System.Data.DbType.String, xn.SelectSingleNode("order_unit_id").InnerText);
+                    ctx.AddInParameter(ocmd, "order_doctor_id", System.Data.DbType.String, xn.SelectSingleNode("order_doctor_id").InnerText);
+                    ctx.AddInParameter(ocmd, "exec_unit_id", System.Data.DbType.String, xn.SelectSingleNode("exec_unit_id").InnerText);
+                    ctx.AddInParameter(ocmd, "exec_doctor_id", System.Data.DbType.String, xn.SelectSingleNode("exec_doctor_id").InnerText);
+                    ctx.AddInParameter(ocmd, "fee_type_id", System.Data.DbType.String, xn.SelectSingleNode("fee_type_id").InnerText);
+                    ctx.AddInParameter(ocmd, "fee_type_name", System.Data.DbType.String, xn.SelectSingleNode("fee_type_name").InnerText);
+                    ctx.AddInParameter(ocmd, "item_id", System.Data.DbType.String, xn.SelectSingleNode("item_id").InnerText);
+                    ctx.AddInParameter(ocmd, "item_name", System.Data.DbType.String, xn.SelectSingleNode("item_name").InnerText);
+                    ctx.AddInParameter(ocmd, "item_quantity", System.Data.DbType.String, xn.SelectSingleNode("item_quantity").InnerText);
+                    ctx.AddInParameter(ocmd, "price", System.Data.DbType.String, xn.SelectSingleNode("price").InnerText);
+                    ctx.AddInParameter(ocmd, "fee", System.Data.DbType.String, xn.SelectSingleNode("fee").InnerText);
+                    ctx.DBExecuteNonQuery(ocmd);//
+                }
+                
+                scope.Complete();
+                //DiagFlag = 20; 
+            }
+
+        }
+
+
+        public string GetDiagNo(string icdCode)
+        {
+            try
+            {
+                var sql = string.Format("SELECT DiagNo FROM HealthCare.dbo.Diag WHERE IcdCode='{0}'", icdCode);
+                var obj = ctx.DBExecuteScalar(CommandType.Text, sql);
+                var val = StrHelepr.Obj2StrTrim(obj);
+                if (string.IsNullOrWhiteSpace(val))
+                {
+                    val = icdCode;
+                }
+
+                return val;
+            }
+            catch (Exception ex)
+            {
+                IL.Common.LogHelper.LogError(string.Format("获取DiagNo错误:{0}  {1}\r\n{2}", icdCode, ex.Message, ex.StackTrace), LogCatagories.MQAccess);
+                return string.Empty;
+            }
+        }
+
+        public string GetBedNo(Database ctx, string roombed)
+        {
+            var sql = "SELECT Top 1 BedNo FROM HealthCare.dbo.Bed WHERE RoomBed=@RoomBed";
+            var cmd = ctx.DBGetSqlStringCommand(sql);
+            ctx.AddInParameter(cmd, "RoomBed", DbType.String, roombed);
+            var obj = StrHelepr.Obj2StrTrim(ctx.DBExecuteScalar(cmd));
+            if (string.IsNullOrWhiteSpace(obj))
+            {
+                obj = roombed;
+            }
+            return obj;
+
+        }
+    }
+
+
+}

+ 122 - 0
IL.BizComponent/MediII.Adapter.BizComponent.ADT/ADT_A04B03_Handler.cs

@@ -0,0 +1,122 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+using System.Transactions;
+using System.Data;
+using IL.Common;
+using System.Xml;
+
+namespace MediII.Adapter.BizComponent.ADT
+{
+    public class ADT_A04B03_Handler : ADTHandler
+    {
+        public override void Handler(string m, string ID)
+        {
+            //门诊就诊,挂号
+            //初始化
+            var rtnMsg = string.Empty;
+            var msgHead = string.Empty;
+            var msgBody = string.Empty;
+            var resultCode = string.Empty;
+            var result = string.Empty;
+            WebService server = new WebService();
+            OperateXmlUtil xmlHelper = new OperateXmlUtil();
+            //读取配置的凭证号
+            var cert = System.Configuration.ConfigurationManager.AppSettings["cert"];
+            //读取就诊流水号
+            string visitNo = m;
+            //拼接接口访问参数
+            msgBody = xmlHelper.GetMsgBody(visitNo);
+            msgHead = xmlHelper.GetMsgHead("getRegisterDetail", cert);
+            //接口访问
+            rtnMsg = server.TestInterface(msgHead, msgBody);
+            //存储访问记录
+            MessageHelper.SaveSendMsg(Scanctx, ID, "ADT^A04[B03]", msgHead, msgBody, rtnMsg);
+            //消息判断是否成功
+            if (!xmlHelper.isSuccess(rtnMsg, ref resultCode, ref result))
+            {
+                //存储访问记录
+
+                throw new Exception(result);
+            }
+                
+            //更新发送表,保存留档
+
+            //返回数据解析
+            XmlNode root=  xmlHelper.GetContentRootNode(rtnMsg);
+            XmlNodeList list = root.SelectNodes("//returnContents//returnContent");
+            if (list.Count <= 0)
+                return;
+            using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew))
+            {
+                var delSql = @"delete from dbo.v_zhencha where VISITNO=@VISITNO";
+                var cmd = ctx.DBGetSqlStringCommand(delSql);
+                ctx.AddInParameter(cmd, "VISITNO", System.Data.DbType.String, visitNo);
+                ctx.DBExecuteNonQuery(cmd);//
+                //挂号
+
+                var fsql = @"insert into dbo.v_zhencha(VISITNO,fee_date,unit_id,unit_name,doct_code,doct_name,item_id,item_name,item_quantity,fee,fee_kind) VALUES(
+@VISITNO,@fee_date,@unit_id,@unit_name,@doct_code,@doct_name,@item_id,@item_name,@item_quantity,@fee,@fee_kind)";
+                foreach (XmlElement xn in list)
+                {
+                    var gcmd = ctx.DBGetSqlStringCommand(fsql);
+                    ctx.AddInParameter(gcmd, "VISITNO", System.Data.DbType.String, visitNo);
+                    ctx.AddInParameter(gcmd, "fee_date", System.Data.DbType.DateTime, xn.SelectSingleNode("fee_date").InnerText);
+                    ctx.AddInParameter(gcmd, "unit_id", System.Data.DbType.String, xn.SelectSingleNode("unit_id").InnerText);
+                    ctx.AddInParameter(gcmd, "unit_name", System.Data.DbType.String, xn.SelectSingleNode("unit_name").InnerText);
+                    ctx.AddInParameter(gcmd, "doct_code", System.Data.DbType.String, xn.SelectSingleNode("doct_code").InnerText);
+                    ctx.AddInParameter(gcmd, "doct_name", System.Data.DbType.String, xn.SelectSingleNode("doct_name").InnerText);
+                    ctx.AddInParameter(gcmd, "item_id", System.Data.DbType.String, xn.SelectSingleNode("item_id").InnerText);
+                    ctx.AddInParameter(gcmd, "item_name", System.Data.DbType.String, xn.SelectSingleNode("item_name").InnerText);
+                    ctx.AddInParameter(gcmd, "item_quantity", System.Data.DbType.String, xn.SelectSingleNode("item_quantity").InnerText);
+                    ctx.AddInParameter(gcmd, "fee", System.Data.DbType.String, xn.SelectSingleNode("fee").InnerText);
+                    ctx.AddInParameter(gcmd, "fee_kind", System.Data.DbType.String, xn.SelectSingleNode("fee_kind").InnerText);
+                    ctx.DBExecuteNonQuery(gcmd);//
+                }
+                scope.Complete();
+                //DiagFlag = 20; 
+            }
+
+        }
+
+
+        public string GetDiagNo(string icdCode)
+        {
+            try
+            {
+                var sql = string.Format("SELECT DiagNo FROM HealthCare.dbo.Diag WHERE IcdCode='{0}'", icdCode);
+                var obj = ctx.DBExecuteScalar(CommandType.Text, sql);
+                var val = StrHelepr.Obj2StrTrim(obj);
+                if (string.IsNullOrWhiteSpace(val))
+                {
+                    val = icdCode;
+                }
+
+                return val;
+            }
+            catch (Exception ex)
+            {
+                IL.Common.LogHelper.LogError(string.Format("获取DiagNo错误:{0}  {1}\r\n{2}", icdCode, ex.Message, ex.StackTrace), LogCatagories.MQAccess);
+                return string.Empty;
+            }
+        }
+
+        public string GetBedNo(Database ctx, string roombed)
+        {
+            var sql = "SELECT Top 1 BedNo FROM HealthCare.dbo.Bed WHERE RoomBed=@RoomBed";
+            var cmd = ctx.DBGetSqlStringCommand(sql);
+            ctx.AddInParameter(cmd, "RoomBed", DbType.String, roombed);
+            var obj = StrHelepr.Obj2StrTrim(ctx.DBExecuteScalar(cmd));
+            if (string.IsNullOrWhiteSpace(obj))
+            {
+                obj = roombed;
+            }
+            return obj;
+
+        }
+    }
+
+
+}

+ 44 - 0
IL.BizComponent/MediII.Adapter.BizComponent.ADT/BizComponent_ADT.cs

@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;  
+using MediII.Adapter.BizComponent.Base;
+
+namespace MediII.Adapter.BizComponent.ADT
+{
+    public class BizComponent_ADT : BaseBizComponent, IBizComponent
+    {
+        public override string DoProcess(string m,string msgType,string ID)
+        {
+            try
+            {
+                //string type = msh.MessageType.TriggerEvent.Value;
+                string errMsg = string.Empty;
+                ADTHandler handler = ADTHandler.GetHandler(msgType);
+                try
+                {
+                    handler.Handler(m,ID);
+                    return string.Empty;
+                }
+                catch (Exception ex)
+                {
+                    if (ex.InnerException == null)
+                    {
+                        return ex.Message;
+                    }
+                    else
+                    {
+                        return ex.Message + " InnerException:" + ex.InnerException.Message;
+                    }
+                } 
+            }
+            catch (Exception ex)
+            {
+                return ex.Message;
+            }
+             
+        }
+
+       
+    }
+}

+ 152 - 0
IL.BizComponent/MediII.Adapter.BizComponent.ADT/MediII.Adapter.BizComponent.ADT.csproj

@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{E634900C-0A19-4575-A0F7-BF5780AE20C3}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>MediII.Adapter.BizComponent.ADT</RootNamespace>
+    <AssemblyName>MediII.Adapter.BizComponent.ADT</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
+    <FileAlignment>512</FileAlignment>
+    <SccProjectName>
+    </SccProjectName>
+    <SccLocalPath>
+    </SccLocalPath>
+    <SccAuxPath>
+    </SccAuxPath>
+    <SccProvider>
+    </SccProvider>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>..\..\MediII.Adapter.WinForm.Scan\bin\Debug\UE\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>none</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DebugSymbols>false</DebugSymbols>
+  </PropertyGroup>
+  <PropertyGroup>
+    <StartupObject />
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>TRACE;DEBUG</DefineConstants>
+    <DocumentationFile>
+    </DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <OutputPath>bin\Release\</OutputPath>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="MediII.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\MediII.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=e44a2bc38ed2c13c, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\Microsoft.Practices.EnterpriseLibrary.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\Microsoft.Practices.EnterpriseLibrary.Data.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=e44a2bc38ed2c13c, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\Microsoft.Practices.EnterpriseLibrary.Logging.dll</HintPath>
+    </Reference>
+    <Reference Include="SI.Common.SITask">
+      <HintPath>..\..\..\dll\SI.Common.SITask.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Management" />
+    <Reference Include="System.Runtime.Serialization" />
+    <Reference Include="System.Transactions" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ADTHandler.cs" />
+    <Compile Include="ADT_A01B04_Handler.cs" />
+    <Compile Include="ADT_A04B01_Handler.cs" />
+    <Compile Include="ADT_A04B03_Handler.cs" />
+    <Compile Include="ADT_A04B02_Handler.cs" />
+    <Compile Include="ADT_A02B01_Handler.cs" />
+    <Compile Include="ADT_A01B03_Handler.cs" />
+    <Compile Include="ADT_A01B02_Handler.cs" />
+    <Compile Include="ADT_A01B01_Handler.cs" />
+    <Compile Include="BizComponent_ADT.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\Public\IL.Common\IL.Common.csproj">
+      <Project>{f320951f-886b-4f99-a3fd-5686c0a97868}</Project>
+      <Name>IL.Common</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\MediII.Adapter.ReceiveToKCModel\MediII.Adapter.ReceiveToKCModel.csproj">
+      <Project>{f182ac2b-a0d5-40d2-89af-8d547606b6ac}</Project>
+      <Name>MediII.Adapter.ReceiveToKCModel</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\MediII.Adapter.BizComponent.Base\MediII.Adapter.BizComponent.Base.csproj">
+      <Project>{619b1dbf-55b7-446b-af40-852a6ab689a0}</Project>
+      <Name>MediII.Adapter.BizComponent.Base</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>Copy $(TargetDir)   $(ProjectDir)..\..\MessageToKC\UE\
+Copy $(TargetDir)   $(ProjectDir)..\..\MessageToKCServer\UE\</PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 36 - 0
IL.BizComponent/MediII.Adapter.BizComponent.ADT/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("MediII.Adapter.Winform.Tool.MQ")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("MediII.Adapter.Winform.Tool.MQ")]
+[assembly: AssemblyCopyright("Copyright ©  2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("63a3c311-21ab-456d-acfa-37029f7be530")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 63 - 0
IL.BizComponent/MediII.Adapter.BizComponent.ADT/Properties/Resources.Designer.cs

@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     此代码由工具生成。
+//     运行时版本:4.0.30319.18444
+//
+//     对此文件的更改可能会导致不正确的行为,并且如果
+//     重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace MediII.Adapter.BizComponent.ADT.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   一个强类型的资源类,用于查找本地化的字符串等。
+    /// </summary>
+    // 此类是由 StronglyTypedResourceBuilder
+    // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+    // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+    // (以 /str 作为命令选项),或重新生成 VS 项目。
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   返回此类使用的缓存的 ResourceManager 实例。
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MediII.Adapter.BizComponent.ADT.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   使用此强类型资源类,为所有资源查找
+        ///   重写当前线程的 CurrentUICulture 属性。
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}

+ 117 - 0
IL.BizComponent/MediII.Adapter.BizComponent.ADT/Properties/Resources.resx

@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 26 - 0
IL.BizComponent/MediII.Adapter.BizComponent.ADT/Properties/Settings.Designer.cs

@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     此代码由工具生成。
+//     运行时版本:4.0.30319.18444
+//
+//     对此文件的更改可能会导致不正确的行为,并且如果
+//     重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace MediII.Adapter.BizComponent.ADT.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+    }
+}

+ 7 - 0
IL.BizComponent/MediII.Adapter.BizComponent.ADT/Properties/Settings.settings

@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>

+ 117 - 0
IL.BizComponent/MediII.Adapter.BizComponent.Base/BaseBizComponent.cs

@@ -0,0 +1,117 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using NHapi.Base.Model;
+using NHapi.Base.Parser;
+using NHapi.Model.V24.Segment;
+using NHapi.Model.V24.Message;
+using MediII.Common;
+using NHapi.Base.Util;
+using System.ComponentModel.Composition;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+using System.Data.Common;
+using IL.Common;
+
+namespace MediII.Adapter.BizComponent.Base
+{
+    [Export]
+    public abstract class BaseBizComponent : IBizComponent
+    {
+
+
+        protected PipeParser parser = new PipeParser();
+        //数据库连接
+        protected Database ctx;
+
+        static IBizBehavior BizBehavior { get; set; }
+
+        public BaseBizComponent()
+        {
+            DatabaseProviderFactory factory = new DatabaseProviderFactory();
+            ctx = factory.CreateDefault();
+        }
+
+        static BaseBizComponent()
+        {
+            string bizBehavior = System.Configuration.ConfigurationManager.AppSettings["BizBehavior"];
+            if (string.IsNullOrEmpty(bizBehavior))
+            {
+                BizBehavior = new DefaultBizBehavior();
+            }
+            else
+            {
+                string[] ar = bizBehavior.Split(',');
+                string assemblyName = ar[0];
+                string typeName = ar[1];
+                try
+                {
+                    BizBehavior = Activator.CreateInstance(assemblyName, typeName).Unwrap() as IBizBehavior;
+                }
+                catch
+                {
+                    BizBehavior = new DefaultBizBehavior();
+                }
+            }
+        }
+
+
+        /// <summary>
+        /// 处理消息
+        /// </summary>
+        /// <param name="message">解析后消息的抽象类型</param>
+        public abstract string DoProcess(string message,string msgType,string ID);
+
+        /// <summary>
+        ///实现处理的接口
+        /// </summary>
+        /// <param name="message">传入的消息字符</param>
+        /// <returns></returns>
+        public string Process(string message, string msgType,string ID)
+        {
+            //IMessage m = parser.Parse(message);
+            //ISegment msh = (ISegment)m.GetStructure("MSH");
+            //string messageID = Terser.Get(msh, 10, 0, 1, 1);
+            OperateXmlUtil xmlHelper = new OperateXmlUtil();
+            string messageID = xmlHelper.XpathRead(message, "//*[@root='2.16.156.10011.2.5.1.1']", "extension");
+            string guid = MediII.Common.GUIDHelper.NewGUID();
+            OnProcessing(guid, messageID, message,"HL7v3");
+            string ack = DoProcess(message, msgType, ID);
+            OnProcessed(guid, "", "", true);
+            return ack;
+        }
+
+        /// <summary>
+        /// 保存回复
+        /// </summary>
+        /// <param name="ack"></param>
+        private void OnProcessed(string id, string messageID, string ack, bool successed)
+        {
+            BizBehavior.AfterProcess(id, messageID, ack, successed);
+        }
+
+        /// <summary>
+        /// 保存接受信息
+        /// </summary>
+        /// <param name="message"></param>
+        private void OnProcessing(string id, string messageID, string message, string Version)
+        {
+            BizBehavior.BeforeProcess(id, messageID, message, Version);
+        }
+
+
+        #region 取DB服务器当前时间
+        public static DateTime GetNow(Database ctx)
+        {
+            DbCommand command = SqlDataAccess.GetSqlStringCommand(ctx, "SELECT  GETDATE() sysdate  ");
+            object obj = SqlDataAccess.ExecuteScalar(ctx, command);
+            if (obj != null)
+                return Convert.ToDateTime(obj.ToString());
+            else
+                return Convert.ToDateTime(null);
+        }
+        #endregion
+
+
+    }
+}

+ 67 - 0
IL.BizComponent/MediII.Adapter.BizComponent.Base/BizComponentFactory.cs

@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace MediII.Adapter.BizComponent.Base
+{
+    public static class BizComponentFactory
+    {
+        static readonly string HosiptalName;
+        static List<string> listNotExist = new List<string>();
+
+        static BizComponentFactory()
+        {
+            HosiptalName = System.Configuration.ConfigurationManager.AppSettings["HosiptalName"];
+        }
+
+        public static IBizComponent GetBizComponent(string messageName)
+        {
+
+            string assemblyName = string.Format("MediII.Adapter.BizComponent.{0}", messageName);
+            string typeName ;
+            //if (messageName == "ORM")
+            //{
+            //    int i = 10;
+            //}
+            if (string.IsNullOrEmpty(HosiptalName) || listNotExist.Contains(messageName))
+            {
+                typeName = string.Format("{0}.BizComponent_{1}", assemblyName, messageName);
+                try
+                {
+                   
+                    return Activator.CreateInstance(assemblyName, typeName).Unwrap() as IBizComponent;
+                     
+                }
+                catch(Exception ex)
+                {
+                    throw new Exception(string.Format("创建消息处理对象{0}失败", typeName));
+                }
+            }
+            else
+            {
+                typeName = string.Format("{0}.BizComponent_{1}_{2}", assemblyName, messageName, HosiptalName);
+
+                try
+                {
+                    return Activator.CreateInstance(assemblyName, typeName).Unwrap() as IBizComponent;
+                }
+                catch (TypeLoadException)
+                {
+                    typeName = string.Format("{0}.BizComponent_{1}", assemblyName, messageName);
+                    var bizComponet = Activator.CreateInstance(assemblyName, typeName).Unwrap() as IBizComponent;
+                    lock (listNotExist)
+                    {
+                        listNotExist.Add(messageName);
+                    }
+                    return bizComponet;
+                }
+                catch
+                {
+                    throw new Exception(string.Format("创建消息处理对象{0}失败", typeName));
+                }
+            }
+             
+        }
+    }
+}

+ 26 - 0
IL.BizComponent/MediII.Adapter.BizComponent.Base/DefaultBizBehavior.cs

@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ComponentModel.Composition;
+
+namespace MediII.Adapter.BizComponent.Base
+{
+    /// <summary>
+    /// 默认的实现,写日志
+    /// </summary>
+    public class DefaultBizBehavior:IBizBehavior
+    {
+        public void AfterProcess(string id,string messageID, string ack, bool successed)
+        {
+            string content = string.Format("消息:{0}已处理完毕,处理结果为:{1}\n\r回复消息为:{1}",messageID,successed,ack);
+            MediII.Common.LogHelper.LogDebug(content, Common.LogCatagories.BizBehavior);
+        }
+
+        public void BeforeProcess(string id, string messageID, string message, string Version)
+        {
+            string content = string.Format("消息:{0}已接收,内容为:{1}", messageID, message);
+            MediII.Common.LogHelper.LogDebug(content, Common.LogCatagories.BizBehavior);
+        }
+    }
+}

+ 29 - 0
IL.BizComponent/MediII.Adapter.BizComponent.Base/IBizBehavior.cs

@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.ComponentModel.Composition;
+
+namespace MediII.Adapter.BizComponent.Base
+{
+    /// <summary>
+    /// Biz处理前后的行为
+    /// </summary>
+    public interface IBizBehavior
+    {
+        /// <summary>
+        /// 消息处理之后
+        /// </summary>
+        /// <param name="messageID">消息ID</param>
+        /// <param name="ack">回复信息</param>
+        /// <param name="successed">true成功 false失败</param>
+        void AfterProcess(string id,string messageID, string ack, bool successed);
+
+        /// <summary>
+        /// 消息处理之前
+        /// </summary>
+        /// <param name="messageID">消息ID</param>
+        /// <param name="message">消息</param>
+        void BeforeProcess(string id, string messageID, string message, string Version);
+    }
+}

+ 19 - 0
IL.BizComponent/MediII.Adapter.BizComponent.Base/IBizComponent.cs

@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using NHapi.Base.Model;
+
+namespace MediII.Adapter.BizComponent.Base
+{
+    public interface IBizComponent
+    { 
+        /// <summary>
+        /// 消息到达处理
+        /// </summary>
+        /// <param name="message">处理消息的抽象接口</param>
+        /// <param name="ackMessage">回复消息</param>
+        /// <returns>1 成功,0 失败</returns>
+        string Process(string message,string msgType,string ID);
+    }
+}

+ 127 - 0
IL.BizComponent/MediII.Adapter.BizComponent.Base/MediII.Adapter.BizComponent.Base.csproj

@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{619B1DBF-55B7-446B-AF40-852A6AB689A0}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>MediII.Adapter.BizComponent.Base</RootNamespace>
+    <AssemblyName>MediII.Adapter.BizComponent.Base</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+    <SccProjectName>
+    </SccProjectName>
+    <SccLocalPath>
+    </SccLocalPath>
+    <SccAuxPath>
+    </SccAuxPath>
+    <SccProvider>
+    </SccProvider>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <StartupObject />
+  </PropertyGroup>
+  <PropertyGroup>
+    <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="MediII.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\MediII.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=e44a2bc38ed2c13c, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\Microsoft.Practices.EnterpriseLibrary.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\Microsoft.Practices.EnterpriseLibrary.Data.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=e44a2bc38ed2c13c, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\Microsoft.Practices.EnterpriseLibrary.Logging.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\Microsoft.Practices.ServiceLocation.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.Unity, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\Microsoft.Practices.Unity.dll</HintPath>
+    </Reference>
+    <Reference Include="NHapi.Base, Version=2.3.0.0, Culture=neutral, PublicKeyToken=d0d8ea960a3440eb, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\NHapi.Base.dll</HintPath>
+    </Reference>
+    <Reference Include="NHapi.Model.V24, Version=2.3.0.0, Culture=neutral, PublicKeyToken=d0d8ea960a3440eb, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\NHapi.Model.V24.dll</HintPath>
+    </Reference>
+    <Reference Include="NHapi.Model.V25, Version=2.3.0.0, Culture=neutral, PublicKeyToken=d0d8ea960a3440eb, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\NHapi.Model.V25.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.ComponentModel.Composition" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BaseBizComponent.cs" />
+    <Compile Include="BizComponentFactory.cs" />
+    <Compile Include="DefaultBizBehavior.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="IBizBehavior.cs">
+      <SubType>Code</SubType>
+    </Compile>
+    <Compile Include="IBizComponent.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\Public\IL.Common\IL.Common.csproj">
+      <Project>{f320951f-886b-4f99-a3fd-5686c0a97868}</Project>
+      <Name>IL.Common</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>Copy $(TargetDir)   $(ProjectDir)..\..\MessageToKC\UE\
+Copy $(TargetDir)   $(ProjectDir)..\..\MessageToKCServer\UE\</PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 36 - 0
IL.BizComponent/MediII.Adapter.BizComponent.Base/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的常规信息通过以下
+// 特性集控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("MediII.Adapter.BizComponent.Base")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("MediII.Adapter.BizComponent.Base")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 使此程序集中的类型
+// 对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型,
+// 则将该类型上的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("a05041ee-76a4-4b09-b57b-e872cb17b43b")]
+
+// 程序集的版本信息由下面四个值组成: 
+//
+//      主版本
+//      次版本 
+//      生成号
+//      修订号
+//
+// 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
+// 方法是按如下所示使用“*”: 
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 598 - 0
IL.BizComponent/MediII.Adapter.BizComponent.DFP/BizComponent_DFT.cs

@@ -0,0 +1,598 @@
+using System;
+using System.Data;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+//using MediII.Adapter.BaseBiz;
+using System.Data.Common;
+using System.Transactions;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+//using MediII.Adapter.Model.UE;
+using System.Globalization;
+using MediII.Adapter.BizComponent.Base;
+using IL.Common;
+using System.Xml;
+
+namespace MediII.Adapter.BizComponent.DFT
+{
+    public class BizComponent_DFT : BaseBizComponent, IBizComponent
+    {
+        const string Insert = "B01"; //增加个人纪录
+        //const string Update = "B02"; //更新个人记录
+        //const string Delete = "B03"; //删除个人记录
+
+
+        //数据库连接
+        protected Database ctx;
+        protected Database Scanctx;
+        public BizComponent_DFT()
+        {
+            DatabaseProviderFactory factory = new DatabaseProviderFactory();
+            ctx = factory.Create("HealthCare");
+            Scanctx = factory.CreateDefault();
+        }
+        ////HealthCareContainer HealthCareContainer = new HealthCareContainer();
+        //private Database ctx = null;
+        //public BizComponent_PMU(Database dbCtx)
+        //{
+        //    ctx = dbCtx;
+        //}
+        public override string DoProcess(string m, string msgType, string ID)
+        {
+            string strMsgType = null;
+            var resultCode = string.Empty;
+            var result = string.Empty;
+            //try
+            //{
+            //try
+            // {
+            //取得消息类型 MAD新增 MUP更新 MDL删除 "MDC"作废 "MAC"恢复
+            OperateXmlUtil helper = new OperateXmlUtil();
+            WebService server = new WebService();
+            string orgCode = System.Configuration.ConfigurationManager.AppSettings["orgCode"];
+            var cert = System.Configuration.ConfigurationManager.AppSettings["cert"];                                             
+            //string qurysql = "select count(*) from dbo.his_doct where DOCT_CODE=@DOCT_CODE";
+            //DbCommand command = ctx.GetSqlStringCommand(qurysql.ToString());
+            //string pkid = helper.XpathRead(m, "//*[@root='2.16.156.10011.1.4']", "extension");
+            //ctx.AddInParameter(command, "DOCT_CODE", System.Data.DbType.String, pkid);
+            //int counts = Convert.ToInt32(ctx.ExecuteScalar(command));
+
+            string msgBody = helper.GetMsgBody(orgCode);
+            string msgHead = helper.GetMsgHead("getItemDict", cert);
+
+
+            string rtnMsg = server.TestInterface(msgHead, msgHead);
+            //存储访问记录
+            MessageHelper.SaveSendMsg(Scanctx, ID, "DFT^B01[B01]", msgHead, msgBody, rtnMsg);
+            //消息判断是否成功
+            if (!helper.isSuccess(rtnMsg, ref resultCode, ref result))
+            {
+                throw new Exception(result);
+            }
+            
+            XmlNodeList root = helper.XpathRead(rtnMsg, "//returnContents//returnContent");
+            if (root.Count <= 0)
+                return string.Empty;
+            
+            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
+            {
+                var usql = @"update item_his_original set yn_code=@yn_code,item_name=@item_name,fee_code=@fee_code,fee_name=@fee_code,spell_code=@spell_code,price=@price,status=@status,status_date=@status_date where item_code=@item_code";
+                var sql = @"insert into item_his_original(item_code,yn_code,item_name,fee_code,fee_name,spell_code,price,status,status_date) Values(@item_code,@yn_code,@item_name,@fee_code,@fee_name,@spell_code,@price,@status,@status_date);";
+                foreach (XmlElement xe in root)
+                {
+                    var iSet = GetDOCT(xe.SelectSingleNode("item_code").InnerText);
+                    if (iSet <= 0)
+                    {
+                        var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
+                        ctx.AddInParameter(cmd, "item_code", System.Data.DbType.String, xe.SelectSingleNode("item_code").InnerText);
+                        ctx.AddInParameter(cmd, "yn_code", System.Data.DbType.String, xe.SelectSingleNode("yn_code").InnerText);
+                        ctx.AddInParameter(cmd, "item_name", System.Data.DbType.String, xe.SelectSingleNode("item_name").InnerText);
+                        ctx.AddInParameter(cmd, "fee_code", System.Data.DbType.String, xe.SelectSingleNode("fee_code").InnerText);
+                        ctx.AddInParameter(cmd, "fee_name", System.Data.DbType.String, xe.SelectSingleNode("fee_name").InnerText);
+                        ctx.AddInParameter(cmd, "spell_code", System.Data.DbType.String, xe.SelectSingleNode("spell_code").InnerText);
+                        ctx.AddInParameter(cmd, "price", System.Data.DbType.Decimal, xe.SelectSingleNode("price").InnerText);
+                        ctx.AddInParameter(cmd, "status", System.Data.DbType.String, xe.SelectSingleNode("status").InnerText);
+                        var date = xe.SelectSingleNode("status_date").InnerText;
+                        DateTime time = DateTime.Now;
+                        if (!string.IsNullOrWhiteSpace(date))
+                        {
+                            if (!DateTime.TryParse(date, out time))
+                            {
+                                time = DateTime.Now;
+                            }
+                        }
+                        ctx.AddInParameter(cmd, "status_date", System.Data.DbType.DateTime, time);
+                        SqlDataAccess.DBExecuteNonQuery(ctx, cmd);
+                    }
+                    else
+                    {
+                        var cmd = SqlDataAccess.GetSqlStringCommand(ctx, usql);
+                        ctx.AddInParameter(cmd, "item_code", System.Data.DbType.String, xe.SelectSingleNode("item_code").InnerText);
+                        ctx.AddInParameter(cmd, "yn_code", System.Data.DbType.String, xe.SelectSingleNode("yn_code").InnerText);
+                        ctx.AddInParameter(cmd, "item_name", System.Data.DbType.String, xe.SelectSingleNode("item_name").InnerText);
+                        ctx.AddInParameter(cmd, "fee_code", System.Data.DbType.String, xe.SelectSingleNode("fee_code").InnerText);
+                        ctx.AddInParameter(cmd, "fee_name", System.Data.DbType.String, xe.SelectSingleNode("fee_name").InnerText);
+                        ctx.AddInParameter(cmd, "spell_code", System.Data.DbType.String, xe.SelectSingleNode("spell_code").InnerText);
+                        ctx.AddInParameter(cmd, "price", System.Data.DbType.Decimal, xe.SelectSingleNode("price").InnerText);
+                        ctx.AddInParameter(cmd, "status", System.Data.DbType.String, xe.SelectSingleNode("status").InnerText);
+                        var date = xe.SelectSingleNode("status_date").InnerText;
+                        DateTime time = DateTime.Now;
+                        if (!string.IsNullOrWhiteSpace(date))
+                        {
+                            if (!DateTime.TryParse(date, out time))
+                            {
+                                time = DateTime.Now;
+                            }
+                        }
+                        ctx.AddInParameter(cmd, "status_date", System.Data.DbType.DateTime, time);
+                        SqlDataAccess.DBExecuteNonQuery(ctx, cmd);
+                    }
+                }
+                var ScanSql = @"update HL7_Scan set OtherNo1=CONVERT(varchar(100), GETDATE(), 120),TaskStatus=1 where ID=@ID";
+                var ucmd = SqlDataAccess.GetSqlStringCommand(Scanctx, ScanSql);
+                Scanctx.AddInParameter(ucmd, "ID", System.Data.DbType.String, ID);
+                SqlDataAccess.DBExecuteNonQuery(Scanctx, ucmd);
+                scope.Complete();
+            }
+            return string.Empty;
+        }
+        public void AddData(string message,string id)
+        {
+            #region 新增
+            string sql = @"INSERT INTO dbo.his_doct
+                                    ( DOCT_CODE ,
+                                    DOCT_NAME ,
+                                    HIS_DEPT_CODE ,
+                                    HIS_DEPT_NAME ,
+                                    status
+                                    )
+                            VALUES  ( @DOCT_CODE,
+                                    @DOCT_NAME ,
+                                    @HIS_DEPT_CODE ,
+                                    @HIS_DEPT_NAME ,
+                                    @status)";
+            DbCommand command = ctx.GetSqlStringCommand(sql.ToString());
+
+            SetEntity(message, command, id);
+            SqlDataAccess.ExecuteNonQuery(ctx, command);
+            #endregion
+        }
+        public void UpDateData(string message, string id)
+        {
+            #region 修改
+            string sql1 = @"update dbo.his_doct set 
+                                    DOCT_NAME =@DOCT_NAME,
+                                    HIS_DEPT_CODE =@HIS_DEPT_CODE,
+                                    HIS_DEPT_NAME =@HIS_DEPT_NAME,
+                                    status=@status
+                                where DOCT_CODE=@DOCT_CODE";
+            DbCommand command1 = ctx.GetSqlStringCommand(sql1.ToString());
+
+            SetEntity(message, command1, id);
+            SqlDataAccess.ExecuteNonQuery(ctx, command1);
+            #endregion
+        }
+
+        public void SetEntity(string message,DbCommand command,string id)
+        {
+            string value = string.Empty;
+            OperateXmlUtil xmlHelper = new OperateXmlUtil();
+
+            ctx.AddInParameter(command, "DOCT_CODE", System.Data.DbType.String, id);
+            var valueNode = xmlHelper.XpathRead(message, "//*[name()='healthCarePrincipalPerson']").Item(0);
+
+            foreach (XmlNode xe in valueNode.ChildNodes)
+            {
+                if (xe.Name == "name")
+                {
+                    value = xe.LastChild.LastChild.Attributes["value"].Value;
+                    ctx.AddInParameter(command, "DOCT_NAME", System.Data.DbType.String, value);
+
+                    break;
+                }
+            }
+
+            value = xmlHelper.XpathRead(message, "//*[@root='2.16.156.10011.1.26']", "extension");
+            ctx.AddInParameter(command, "HIS_DEPT_CODE", System.Data.DbType.AnsiString, value);
+
+            valueNode = xmlHelper.XpathRead(message, "//*[name()='affiliatedPrincipalOrganization']").Item(0);
+            foreach (XmlNode xe in valueNode.ChildNodes)
+            {
+                if (xe.Name == "name")
+                {
+                    value = xe.LastChild.LastChild.Attributes["value"].Value;
+                    ctx.AddInParameter(command, "HIS_DEPT_NAME", System.Data.DbType.String, value);
+
+                    break;
+                }
+            }
+            ctx.AddInParameter(command, "status", System.Data.DbType.String, "在用");
+            //ctx.ExecuteNonQuery(command);
+        }
+
+        public int GetDOCT(string DOCT_Code)
+        {
+            var sql = "SELECT count(1) FROM dbo.item_his_original WITH(NOLOCK) WHERE item_code=@item_code";
+            var cmd = ctx.DBGetSqlStringCommand(sql);
+            ctx.AddInParameter(cmd, "item_code", DbType.String, DOCT_Code);
+            var obj = int.Parse(StrHelepr.Obj2StrTrim(ctx.DBExecuteScalar(cmd)));
+            return obj;
+        }
+       
+
+
+
+      
+
+    }
+
+}
+#region 此为老版本代码
+/*
+Employee Module_Employee = new Employee();
+
+strMsgType = pmuB01.EVN.EventTypeCode.Value;
+
+#region STG
+STF stf = pmuB01.STF;
+
+Module_Employee.EmpNo = Convert.ToInt16(stf.PrimaryKeyValueSTF.Identifier.Value);// 员工代号
+Module_Employee.EmpCode = stf.GetStaffIDCode(0).ID.Value;// 员工代码
+Module_Employee.EmpName = stf.GetStaffName(0).GivenName.Value;// 姓名
+Module_Employee.EngName = stf.GetStaffName(0).GivenName.Value;// 英文姓名
+Module_Employee.IdNo = stf.DriverSLicenseNumberStaff.DriverSLicenseNumber.Value.Trim() ;// 身份证号 <<<<<<<<<<<<<<<<<<<<<< 目前ISNULL
+
+#region 性别转换
+// 1:男 2:女
+Module_Employee.Sex = His.MediIITransfer.MediII2Ue.GetSex(stf.AdministrativeSex.Value);
+#endregion
+
+Module_Employee.Birthday = His.Time.TryParseExact(stf.DateTimeOfBirth.TimeOfAnEvent.Value, "yyyyMMddhhmmss");
+
+#region 婚姻状况
+// 婚姻状况 (0:未婚,1:已婚,2:离婚)
+switch (stf.MaritalStatus.Text.Value)
+{
+    case "S"://S	独身
+    case "P"://P	同性恋
+    case "G"://G	同居
+    case "B"://B	未婚
+    case "U"://U	未知
+    case "O"://O	其他
+    case "T"://T	未报告
+        Module_Employee.MaritalStatus = "0";
+        break;
+    case "M"://M	结婚
+    case "A":  //A	分居
+    case "W"://W	丧偶
+    case "R"://R	已登记同性恋
+    case "E"://E	合法分居
+    // case "C"://C	普通法律
+    case "I"://I	诉讼中
+        Module_Employee.MaritalStatus = "1";
+        break;
+
+    case "D"://D	离婚
+        Module_Employee.MaritalStatus = "2";
+        break;
+    default:
+        Module_Employee.MaritalStatus = "0";
+        break;
+}
+#endregion
+
+Module_Employee.HomeAdrArea = 0;// 住处区域代码 <<<<<<<<<<<<<<<<<<<<<<<<<<<
+Module_Employee.HomeAdrDesc = stf.GetOfficeHomeAddress(0).StreetAddress.StreetOrMailingAddress.Value;// 住处地址
+Module_Employee.HomeTel1 = stf.GetPhone(0).PhoneNumber.Value;// 住处电话1
+Module_Employee.HomeTel2 = "0"; // 住处电话2(不同步)
+
+Module_Employee.MobilePhone = stf.GetPhone(0).PhoneNumber.Value; // 移动电话
+
+Module_Employee.NativeAdrArea = 0;// 户籍区域代码(不同步)
+Module_Employee.NativeAdrDesc = "";// 户籍地址(不同步)
+Module_Employee.NativeTel = "";// 户籍电话(不同步)
+
+Module_Employee.ConName = "";// 联系人姓名(不同步)
+Module_Employee.ConTel1 = "";// 络人电话(不同步)
+Module_Employee.ConTel2 = "";// 络人电话(不同步)
+
+Module_Employee.ConAdrArea = 0;// 联系人区域代码(不同步)
+Module_Employee.ConAdrDesc = "";// 联系人地址(不同步)
+
+Module_Employee.Affiliation = "";// 与联系人关系(不同步)
+
+try
+{
+     string sHireDate =stf.GetInstitutionActivationDate(0).Date.TimeOfAnEvent.Value;
+    DateTime dtHireDate = His.Time.TryParseExact(sHireDate, "yyyyMMddhhmmss");
+
+    Module_Employee.HireDate = dtHireDate == His.Time.MaxDateTime ? Convert.ToDateTime("1911-01-01 00:00:00") : dtHireDate; // 到职日期
+
+}
+catch
+{
+    Module_Employee.HireDate = Convert.ToDateTime("1911-01-01 00:00:00");
+}
+               
+Module_Employee.Zone = "A";// 归属院区(联众会开栏位**********)<<<<<<<<<<<<<<<<<<<<<<
+
+string tmp = stf.GetDepartment(0).Identifier.Value;
+
+try
+{
+    string sDepartNo = His.MediIITransfer.MediII2Ue.GetDepartNo(stf.GetDepartment(0).Identifier.Value);
+    Module_Employee.DepartNo = Convert.ToInt16(sDepartNo);// 部门代码
+}
+catch (Exception ex)
+{
+    Module_Employee.DepartNo = -1;
+}
+
+Module_Employee.EmpType = stf.GetStaffType(0).Value;
+
+#region 员工分类
+
+switch (stf.GetStaffType(0).Value) // 员工分类
+{
+    case "1"://1	医生
+        Module_Employee.EmpType = "1";
+        break;
+    case "2"://2	护士
+        Module_Employee.EmpType = "2";
+        break;
+    case "3"://3	财务人员
+        Module_Employee.EmpType = "3";
+        break;
+    case "4"://4	药剂人员
+        Module_Employee.EmpType = "4";
+        break;
+    case "5"://5	技师(检验)
+    case "6"://6	技师(影像)
+    case "7"://7	管理人员
+    case "8"://8	其他卫生技术人员
+    case "9"://9	其他人员
+        Module_Employee.EmpType = "0";
+        break;
+}
+#endregion
+string tmp2 = stf.JobCodeClass.JobCode.Value;
+
+try
+{
+    Module_Employee.Title = Convert.ToInt16(stf.JobCodeClass.JobCode.Value);// 职称
+}
+catch (Exception ex)
+{
+    Module_Employee.Title = -1;
+}
+
+
+Module_Employee.ChiefNo = Convert.ToInt16(stf.GetHospitalService(0).Identifier.Value);// 职位
+string tmp3 = stf.GetDepartment(0).Identifier.Value;
+
+try
+{
+    string sWorkDepartNo = His.MediIITransfer.MediII2Ue.GetDepartNo(stf.GetDepartment(0).Identifier.Value);
+    Module_Employee.WorkDepartNo = Convert.ToInt16(sWorkDepartNo);// 工作单位代号  <<<<<<<<<<<<<
+
+}
+catch
+{
+    Module_Employee.WorkDepartNo = -1;
+}
+
+Module_Employee.SimpleTel = stf.GetPhone(0).PhoneNumber.Value;// 速拨码
+Module_Employee.SubTel = stf.GetPhone(0).PhoneNumber.Value;// 分机
+
+string sPassword = stf.GetBackupPersonID(0).Identifier.Value;
+
+Module_Employee.Password = sPassword == null ? "" : sPassword;
+Module_Employee.PasswordTime = DateTime.Now; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+Module_Employee.PressCard = 0;// 工作卡号(暫時不填)
+
+
+string  sActiveInactiveFlag = stf.ActiveInactiveFlag.Value; // A,在职;I,离职
+Module_Employee.ResignDate = sActiveInactiveFlag == "A" ? His.Time.MaxDateTime : His.Time.MaxDateTime; 
+
+int iIntParse;
+int.TryParse(stf.PreferredMethodOfContact.Identifier.Value, out iIntParse);
+if (iIntParse != 0)
+{
+    Module_Employee.UpdateUser = Convert.ToInt16(iIntParse);// 最后修改人
+}
+
+Module_Employee.UpdateTime = DateTime.Now;
+
+Module_Employee.EMail = "";// 电子信箱(不同步)
+
+Module_Employee.Remark = "";// 备注说明(不同步)
+
+Module_Employee.Team = 0;// 组别
+
+#endregion
+
+#region 測試
+
+string sErrMsg;
+if (string.IsNullOrEmpty(Module_Employee.IdNo))
+{
+    sErrMsg = "【身份证】无法为空";
+    SetACK(m, "ACK", strMsgType, "ACK", sErrMsg);
+}
+
+if (string.IsNullOrEmpty(Module_Employee.HomeAdrDesc))
+{
+    Module_Employee.HomeAdrDesc = "";
+}
+
+if (string.IsNullOrEmpty(Module_Employee.HomeTel1))
+{
+    Module_Employee.HomeTel1 = "";
+}
+
+if (string.IsNullOrEmpty(Module_Employee.HomeTel1))
+{
+    Module_Employee.HomeTel1 = ""; // 住处电话1
+}
+
+if (string.IsNullOrEmpty(Module_Employee.MobilePhone))
+{
+    Module_Employee.MobilePhone = ""; // 移动电话1
+}
+
+if (string.IsNullOrEmpty(Module_Employee.MobilePhone))
+{
+    Module_Employee.MobilePhone = ""; // 移动电话1
+}
+
+
+//Module_Employee.HireDate = His.Time.TryParseExact(sHireDate, "yyyyMMdd"); // 到职日期
+//Module_Employee.Title = Convert.ToInt16(stf.JobCodeClass.JobCode.Value);// 职称
+
+//Module_Employee.ChiefNo = Convert.ToInt16(stf.GetHospitalService(0).Identifier.Value);// 职位
+
+if (string.IsNullOrEmpty(Module_Employee.MobilePhone))
+{
+    Module_Employee.SimpleTel = "";// 速拨码
+}
+
+if (string.IsNullOrEmpty(Module_Employee.MobilePhone))
+{
+    Module_Employee.SubTel = "";// 分机
+}
+
+if (string.IsNullOrEmpty(Module_Employee.Password))
+{
+    sErrMsg = "【密碼】无法为空";
+    SetACK(m, "ACK", strMsgType, "ACK", sErrMsg);
+}
+
+//if (Module_Employee.HireDate == DateTime.MinValue)
+//{
+//    Module_Employee.HireDate = His.Time.MaxDateTime;
+//}
+if (Module_Employee.PasswordTime == DateTime.MinValue)
+{
+    Module_Employee.PasswordTime = His.Time.MaxDateTime;
+}
+if (Module_Employee.UpdateTime == DateTime.MinValue)
+{
+    Module_Employee.UpdateTime = His.Time.MaxDateTime;
+}
+
+if (Module_Employee.ResignDate == DateTime.MinValue)
+{
+    Module_Employee.ResignDate = His.Time.MaxDateTime;
+}
+
+
+//Module_Employee.ResignDate = His.Time.TryParseExact(sResignDate, "yyyyMMdd"); // 离职日期
+#endregion
+
+
+// 開始存入資料庫
+int iEmpNo = Convert.ToInt16(stf.PrimaryKeyValueSTF.Identifier.Value);// 员工代号
+using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
+{
+    switch (strMsgType)
+    {
+        case Insert:
+        case Update:
+            EmployeeDelete(iEmpNo, ref HealthCareContainer, scope, ref Module_Employee);
+            EmployeeInsert(iEmpNo, ref HealthCareContainer, scope, ref Module_Employee);
+            break;
+        case Delete:
+            EmployeeDelete(iEmpNo, ref HealthCareContainer, scope, ref Module_Employee);
+            break;
+    }
+
+    #region 存入資料庫
+
+    try
+    {
+        HealthCareContainer.SaveChanges();
+    }
+    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
+    {
+        scope.Dispose();
+        throw ex;
+    }
+    #endregion
+
+    scope.Complete();
+
+
+}
+*/
+//        return string.Empty;
+
+//    }
+//    catch (Exception ex)
+//    {
+//        string errMsg = string.Empty;
+//        if (ex.InnerException == null)
+//        {
+//            errMsg = ex.Message + "\r\n" + ex.StackTrace;
+//        }
+//        else
+//        {
+//            errMsg = ex.Message + "\r\n" + ex.InnerException.Message + "\r\n" + ex.InnerException.StackTrace;
+//        }
+//        return errMsg;
+//    }
+//}
+// catch (System.Data.Entity.Validation.DbEntityValidationException ex)
+//{
+//var tmp = ex.EntityValidationErrors.FirstOrDefault().ValidationErrors;
+//string errString = "";
+//foreach (var item in tmp)
+//{
+//    errString += item.ErrorMessage;
+//}
+//string ack = SetACK(m, "ACK", mType, "ACK", ex.EntityValidationErrors.ToString());
+//throw new Exception(string.Format("{0}\r\n{1}", ex.EntityValidationErrors.ToString()));
+
+//return ex.Message;
+//}
+//}
+
+
+/*
+
+public void EmployeeInsert(int iEmpNo, ref HealthCareContainer HealthCareContainer, TransactionScope scope, ref Employee Module_Employee)
+{
+    try
+    {
+        HealthCareContainer.Employee.Add(Module_Employee);
+
+    }
+    catch (Exception ex)
+    {
+        scope.Dispose();
+        throw ex;
+    }
+}
+
+public void EmployeeDelete(int iEmpNo, ref HealthCareContainer HealthCareContainer, TransactionScope scope, ref Employee Module_Employee)
+{
+    try
+    {
+        IEnumerable<Employee> EmployeeList = HealthCareContainer.Employee.Where(x => x.EmpNo == iEmpNo);
+        if (EmployeeList.Count() != 0)
+        {
+            Employee Module_Employee_Del = EmployeeList.FirstOrDefault();
+            HealthCareContainer.Employee.Remove(Module_Employee_Del);
+            HealthCareContainer.SaveChanges();
+        }
+
+    }
+    catch (Exception ex)
+    {
+        scope.Dispose();
+        throw ex;
+    }
+}
+*/
+// }
+//}
+#endregion

+ 103 - 0
IL.BizComponent/MediII.Adapter.BizComponent.DFP/MediII.Adapter.BizComponent.DFT.csproj

@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{8A266F13-DC0A-4639-A5C1-F9426F687A73}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>MediII.Adapter.BizComponent.DFT</RootNamespace>
+    <AssemblyName>MediII.Adapter.BizComponent.DFT</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SccProjectName>
+    </SccProjectName>
+    <SccLocalPath>
+    </SccLocalPath>
+    <SccAuxPath>
+    </SccAuxPath>
+    <SccProvider>
+    </SccProvider>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>none</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="MediII.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\MediII.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=e44a2bc38ed2c13c, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\Microsoft.Practices.EnterpriseLibrary.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\Microsoft.Practices.EnterpriseLibrary.Data.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=e44a2bc38ed2c13c, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\Microsoft.Practices.EnterpriseLibrary.Logging.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.ComponentModel.DataAnnotations" />
+    <Reference Include="System.configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Transactions" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BizComponent_DFT.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\Public\IL.Common\IL.Common.csproj">
+      <Project>{f320951f-886b-4f99-a3fd-5686c0a97868}</Project>
+      <Name>IL.Common</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\Public\MediII.Adapter.Scan.Interface\MediII.Adapter.Scan.Interface.csproj">
+      <Project>{4e8c6d0e-e696-4f02-812f-cedd6fe3f6dc}</Project>
+      <Name>MediII.Adapter.Scan.Interface</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\MediII.Adapter.BizComponent.Base\MediII.Adapter.BizComponent.Base.csproj">
+      <Project>{619b1dbf-55b7-446b-af40-852a6ab689a0}</Project>
+      <Name>MediII.Adapter.BizComponent.Base</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>Copy $(TargetDir)   $(ProjectDir)..\..\MessageToKC\UE\
+Copy $(TargetDir)   $(ProjectDir)..\..\MessageToKCServer\UE\</PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 36 - 0
IL.BizComponent/MediII.Adapter.BizComponent.DFP/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的常规信息通过以下
+// 特性集控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("MediII.Adapter.BizComponent.DFT")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("MediII.Adapter.BizComponent.DFT")]
+[assembly: AssemblyCopyright("Copyright ©  2012")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 使此程序集中的类型
+// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
+// 则将该类型上的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("ff47b8b9-7d92-43ac-93a8-dcd10d1ff028")]
+
+// 程序集的版本信息由下面四个值组成:
+//
+//      主版本
+//      次版本 
+//      内部版本号
+//      修订号
+//
+// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,
+// 方法是按如下所示使用“*”:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 63 - 0
IL.BizComponent/MediII.Adapter.BizComponent.MFN/BizComponent_MFN.cs

@@ -0,0 +1,63 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+//using MediII.Adapter.BaseBiz;
+using MediII.Common;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+using MediII.Adapter.BizComponent.Base;
+
+namespace MediII.Adapter.BizComponent.MFN
+{
+    public class BizComponent_MFN : BaseBizComponent, IBizComponent
+    {
+        //数据库连接
+        protected Database ctx
+        {
+            get { return base.ctx; }
+        }
+
+        public override string DoProcess(string m,string msgType)
+        {
+            try
+            {
+                try
+                {
+                    //根据不同的类型再分开不同的类处理
+                    MFNBase processor = MFNBase.GetProcessor("MFN^Z2B", ctx);//
+                    int result = processor.Process(m);
+                    return string.Empty;
+
+                    //string ack = SetACK(m, "ACK", mType, "ACK");
+                    //return ack;
+                }
+                catch (Exception ex)
+                {
+
+                    if (ex.InnerException == null)
+                    {
+                        return ex.Message;
+                    }
+                    else
+                    {
+                        return ex.Message + " InnerException:" + ex.InnerException.Message;
+                    }
+                }
+
+            }
+            catch (Exception ex)
+            {
+                //var tmp = ex.EntityValidationErrors.FirstOrDefault().ValidationErrors;
+                //string errString = "";
+                //foreach (var item in tmp)
+                //{
+                //    errString += item.ErrorMessage;
+                //}
+                //string ack = SetACK(m, "ACK", mType, "ACK", ex.EntityValidationErrors.ToString());
+                //throw new Exception(string.Format("{0}\r\n{1}", ex.EntityValidationErrors.ToString()));
+
+                return ex.Message;
+            }
+        }
+    }
+}

+ 326 - 0
IL.BizComponent/MediII.Adapter.BizComponent.MFN/MFNBase.cs

@@ -0,0 +1,326 @@
+using System;
+using System.Collections.Generic;
+using System.Data.Common;
+using System.Linq;
+using System.Text;
+
+using Microsoft.Practices.EnterpriseLibrary.Data;
+//using MediII.Adapter.Model.UE;
+using IL.Common;
+using System.Data;
+
+namespace MediII.Adapter.BizComponent.MFN
+{
+    /// <summary>
+    /// MFN消息处理的基类
+    /// zengfan 2012-09-04
+    /// </summary>
+    public abstract class MFNBase
+    {
+        /// <summary>
+        /// 新增
+        /// </summary>
+        protected const string MAD = "MAD";
+
+        /// <summary>
+        /// 更新
+        /// </summary>
+        protected const string MUP = "MUP";
+
+        /// <summary>
+        /// 删除
+        /// </summary>
+        protected const string MDL = "MDL";
+
+        /// <summary>
+        /// 恢复
+        /// </summary>
+        protected const string MAC = "MAC";
+
+        /// <summary>
+        /// 消息处理,入库
+        /// </summary>
+        /// <param name="message">转化过的强类型消息</param>
+        /// <returns></returns>
+        public abstract int Process(string message);
+
+        #region 根据不同类型初始化对应子类
+        /// <summary>
+        /// 根据不同类型初始化对应子类
+        /// </summary>
+        /// <param name="type">消息类型</param>
+        /// <returns></returns>
+        public static MFNBase GetProcessor(string type, Database ctx)
+        {
+            switch (type)
+            {
+                /*
+                 MFN_Z1A    MFN_Z1A
+                 MFN_Z1B    MFN_Z1B
+                 MFN_Z1C    MFN_Z1C
+                 MFN_Z1D    MFN_Z1D
+                 MFN_Z1E    MFN_Z1E
+                 MFN_Z1F    MFN_Z1F
+                 MFN_Z1G    MFN_Z1G
+                 MFN_Z1H    MFN_Z1H
+                 MFN_Z1I    MFN_Z1I
+                 MFN_Z3F    MFN_Z3F
+                 MFN_Z3I
+                 MFN_Z3J
+                 MFN_Z3K    
+                 MFN_Z3L
+                 MFN_Z3M    MFN_Z3M
+                 MFN_Z3N    MFN_Z3N
+                 MFN_Z4B    MFN_Z4B
+                 MFN_Z5F
+                 MFN_Z6C
+                 MFN_Z6D
+                 MFN_Z6E
+                 MFN_Z6G
+                 MFN_Z6H
+                 MFN_Z7B    MFN_Z7B
+                 MFN_Z7C    MFN_Z7C
+                 MFN_Z8B    MFN_Z8B
+                 MFN_Z8C    MFN_Z8C
+                 MFN_Z8D    MFN_Z8D
+                 */
+                case "MFN_Z1A":
+                //return new MFN_Z1H_V_Title(ctx);
+                //return new MFN_Z1G_dbo_PublicCode(ctx);
+                //return new MFN_Z8C_PublicCode(ctx);
+                case "MFN_Z1B":
+                case "MFN_Z1C":
+                case "MFN_Z1D":
+                case "MFN_Z1E":
+                case "MFN_Z1F":
+                //case "MFN_Z1G":
+                //    return new MFN_Z1G_dbo_PublicCode(ctx);
+                //case "MFN_Z1H":
+                //    return new MFN_Z1H_V_Title(ctx);
+                case "MFN_Z1I":
+                case "MFN_Z3F":
+                case "MFN_Z3M":
+                // case "MFN_Z3N":
+                case "MFN_Z4B":
+                case "MFN_Z7B":
+                case "MFN_Z7C":
+                case "MFN_Z8B":
+                //case "MFN_Z8C":
+                //    return new MFN_Z8C_PublicCode(ctx);
+                //case "MFN_Z8D":
+                //    //return new MFN_Z1A_GY_DAIMA(ctx);
+                //case "MFN_Z2A":
+                //    //return new MFN_Z2A_GY_YUANQU(ctx);
+                case "MFN_Z2B":
+                    return new MFN_Z2B_GY_KESHI(ctx);
+                //case "MFN_Z2C":
+                //    return new MFN_Z2C_Depart(ctx); //   return new MFN_Z2C_GY_BINGQU(ctx);
+                //case "MFN_Z2D":
+                //    return new MFN_Z2D_GY_KESHIBQ(ctx);
+                //case "MFN_Z2E":
+                //    return new MFN_Z2E_GY_YILIAOZU1(ctx);
+                //case "MFN_Z2F":
+                //    return new MFN_Z2F_GY_YILIAOZU2(ctx);
+                //case "MFN_Z2G":
+                //    return new MFN_Z2G_bed(ctx); // return new MFN_Z2G_GY_CHANGWEIXX(ctx);
+                //case "MFN_Z2H":
+                //    return new MFN_Z2H_GY_ZHIGONGKSBG(ctx);
+                //case "MFN_Z2I":
+                //    return new MFN_Z2I_EmpLicense(ctx);
+                //case "MFN_Z2K":
+                //    return new MFN_Z2K_GY_CHANGWEIFU(ctx);
+                //case "MFN_Z2L":
+                //    return new MFN_Z2L_OpdRoomSet(ctx);                         //MFN_Z2L_WEIZHIXX(ctx);
+                //case "MFN_Z3A":
+                //    return new MFN_Z3A_GY_YAOPINXX(ctx);
+                //case "MFN_Z3B":
+                //    return new MFN_Z3B_GY_YAOPINCD(ctx);
+                //case "MFN_Z3C":
+                //    return new MFN_Z3C_DrugSet(ctx);                      //    return new MFN_Z3C_GY_YAOPINJG(ctx);
+                //case "MFN_Z3D":
+                //    return new MFN_Z3D_GY_YAOPINZBM(ctx);
+                //case "MFN_Z3E":
+                //    return new MFN_Z3E_GY_GEIYAOFS(ctx);
+                //case "MFN_Z3G":
+                //    return new MFN_Z3G_GY_PINCI(ctx);
+                //case "MFN_Z3H":
+                //    return new MFN_Z3H_GY_YAOPINFL(ctx);
+                //case "MFN_Z3I":
+                //    return new MFN_Z3I_GY_JIXING(ctx);
+                //case "MFN_Z3J":
+                //    return new MFN_Z3J_GY_ZHANGBULB(ctx);
+                //case "MFN_Z3K":
+                //    return new MFN_Z3K_YAOPINDLFL(ctx);
+                //case "MFN_Z3L":
+                //    return new MFN_Z3L_GY_YAOPINJZFL(ctx);
+                //case "MFN_Z3N":
+                //    return new MFN_Z3N_V_SkinAdvice(ctx);
+                //case "MFN_Z3P":
+                //    return new MFN_Z3P_GY_YAOPINDW(ctx);
+                //case "MFN_Z3Q":
+                //    return new MFN_Z3Q_GY_YAOPINMCGG(ctx);
+                //case "MFN_Z3R":
+                //    return new MFN_Z3R_DrugStock(ctx);//MFN_Z3R_GY_YAOPINKC(ctx);
+                //case "MFN_Z4A":
+                //    return new MFN_Z4A_GY_JIBING(ctx);
+                    //return new MFN_Z4A_Diag(ctx);
+                //case "MFN_Z5A":
+                //    return new MFN_Z5A_GY_FEIYONGLB(ctx);
+                //case "MFN_Z5B":
+                //    return new MFN_Z5B_GY_FEIYONGXZ(ctx);
+                //case "MFN_Z5C":
+                //    return new MFN_Z5C_YB_BAOXIANLB(ctx);
+                //case "MFN_Z5D":
+                //    return new MFN_Z5D_MedCodeSet(ctx);  //MFN_Z5D_GY_SHOUFEIXM(ctx);
+                //case "MFN_Z5E":
+                //    return new MFN_Z5E_GY_HESUANXM(ctx);
+                //case "MFN_Z5F":
+                //    return new MFN_Z5F_GY_XIANGMULX(ctx);
+                //case "MFN_Z5I":
+                //    return new MFN_Z5I_MedCodeFee(ctx);
+                //case "MFN_Z5G":
+                //    return new MFN_Z5G_GY_GEIYAOFSJFXM(ctx);
+                //case "MFN_Z5H":
+                //    return new MFN_Z5H_MedCodeFee(ctx);
+                //case "MFN_Z5I":
+                //    return new MFN_Z5I_GY_JIANYANXMSF(ctx);
+                //case "MFN_Z5J":
+                //    return new MFN_Z5J_GY_JIJIADW(ctx);
+                //case "MFN_Z5K":
+                //    return new MFN_Z5K_YB_YIBAOYPDZ(ctx);
+                //case "MFN_Z5L":
+                //    return new MFN_Z5L_YB_JBDMDZ(ctx);
+                //case "MFN_Z5M":
+                //    return new MFN_Z5M_YB_ZLDMDZ(ctx);
+                //case "MFN_Z5N":
+                //    return new MFN_Z5N_GY_SHOUFEITCMX(ctx);
+                //case "MFN_Z6A":
+                //    return new MFN_Z6A_ModeCodeSet(ctx);
+                //case "MFN_Z6B":
+                //    return new MFN_Z6B_GY_JIANYANTCMX(ctx);
+                //case "MFN_Z6C":
+                //    return new MFN_Z6C_GY_CAIJIBW(ctx);
+                //case "MFN_Z6D":
+                //    return new MFN_Z6D_GY_JIANYANRQ(ctx);
+                //case "MFN_Z6E":
+                //    return new MFN_Z6E_MedViewTypeRef(ctx);
+                //case "MFN_Z6F":
+                //    return new MFN_Z6F_GY_YANGBENLX(ctx);
+                //case "MFN_Z6G":
+                //    return new MFN_Z6G_MedCodeSet(ctx);
+                //case "MFN_Z6H":
+                //    return new MFN_Z6H_GY_JIANCHALX(ctx);
+                //case "MFN_Z6I":
+                //    return new MFN_Z6I_MedViewTypeRef(ctx);
+                //case "MFN_Z6J":
+                //    return new  MFN_Z6J_MedCodeSetAndMedViewType(ctx);
+                //case "MFN_Z6K":
+                //    return new MFN_Z6K_MedCodeFee(ctx);
+                //case "MFN_Z6L":
+                //    return new MFN_Z6L_GY_JIANYANKDSYXMDY(ctx);
+                //case "MFN_Z6M":
+                //    return new MFN_Z6M_GY_JIANYANSYXM(ctx);
+                //case "MFN_Z6N":
+                //    return new MFN_Z6N_GY_JIANCHAXMYPSF(ctx);
+
+
+                //case "MFN_Z6O":
+                //    return new MFN_Z6O_TubeFee(ctx);
+
+                //case "MFN_Z8A":
+                //    return new MFN_Z8A_MedCodeSet(ctx);
+
+                //case "MFN_Z2M":
+                //    return new MFN_Z2M_EmpRight(ctx);
+                //case "MFN_Z7A":
+                //    return new MFN_Z7A_ModeCodeSet(ctx);
+                //case "MFN_Z7D":
+                //    return new MFN_Z7D_YZ_PAICHIYZ1(ctx);
+                //case "MFN_Z7E":
+                //    return new MFN_Z7E_YZ_PAICHIYZ2(ctx);
+                //case "MFN_Z7F":
+                //    return new MFN_Z7F_YZ_CHUANGWEIPXS(ctx);
+                ////Z7G(医嘱项目收费)定义多余
+                ////case "MFN_Z7G":
+                ////    return new MFN_Z7G_YIZHUXMSF(ctx);
+                //case "MFN_Z8A":
+                //    return new MFN_Z8A_SM_SHOUSHUMC(ctx);
+                default:
+                    throw new NotImplementedException();
+            }
+
+
+           
+        }
+        #endregion
+        //public static HealthCareContainer conn = new HealthCareContainer();
+        //public static IEnumerable<MedCodeSet> MCSList = conn.MedCodeSet.ToList();
+        #region 取序列
+        /// <summary>
+        /// 取序列
+        /// </summary>
+        /// <param name="ctx"></param>
+        /// <param name="seqName"></param>
+        /// <returns></returns>
+        public static string GetSeq(Database ctx, string seqName)
+        {
+            //string sql = string.Format("select {0}.Nextval  from dual", seqName);//caowen
+            string sql = "SELECT NEXT VALUE FOR " + seqName;
+            DbCommand command = ctx.GetSqlStringCommand(sql);
+            object obj = ctx.ExecuteScalar(command);
+            if (obj != null)
+                return obj.ToString();
+            else
+                return "0";
+        }
+        #endregion
+
+        #region 获取表对应的顺序号
+        /// <summary>
+        /// 获取表对应的顺序号
+        /// </summary>
+        /// <param name="ctx"></param>
+        /// <param name="tableName"></param>
+        /// <returns></returns>
+        public static object GetSortNum(Database ctx, string tableName)
+        {
+            // "SELECT CONVERT(INT,MAX(UsageNo)) +1  FROM HealthCare.dbo.MedUsageSet WHERE UsageNo BETWEEN '1000' AND '7999'";
+            string sql = string.Format(@" SELECT CONVERT(INT,MAX(SeqNo)) +1 FROM {0} ", tableName);
+            // string sql = string.Format(@" SELECT COUNT(1)+1 FROM {0} ", tableName);
+            DbCommand command = ctx.GetSqlStringCommand(sql);
+            return ctx.ExecuteScalar(command);
+        }
+        #endregion
+
+        #region 获取输入码
+        /// <summary>
+        /// 获取输入码
+        /// </summary>
+        /// <param name="words">名称单词</param>
+        /// <param name="inputType">获取的输入码类型:0 拼音,1 五笔</param>
+        /// <returns></returns>
+        public static string GetInputCode(int inputType, string words)
+        {
+            words = inputType == 0 ? MediII.Common.InputCodeHelper.GetCode1(words) + "" : MediII.Common.InputCodeHelper.GetCode2(words) + "";
+            return words = words.Length > 10 ? words.Substring(0, 9) : words;
+        }
+        #endregion
+
+        #region 更新数据和字段(单个字段)
+        /// <summary>
+        /// 更新字段数据(单个字段)
+        /// </summary>
+        /// <param name="tableName">表名称</param>
+        /// <param name="columnName">列名</param>
+        /// <param name="columnValue">字段更新值</param>
+        /// <param name="conditions">条件</param>
+        /// <param name="ctx">数据库链接</param>
+        public static void UpdateCommonColumn(string tableName, string columnName, object columnValue, string conditions, Database ctx)
+        {
+            string updateSql = string.Format(@" UPDATE " + tableName + " SET " + columnName + " = " + columnValue + " WHERE " + conditions);
+            DbCommand command = ctx.GetSqlStringCommand(updateSql);
+            ctx.ExecuteNonQuery(command);
+        }
+        #endregion
+    }
+}

+ 117 - 0
IL.BizComponent/MediII.Adapter.BizComponent.MFN/MFN_Z2B_GY_KESHI.cs

@@ -0,0 +1,117 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Data.Common;
+using System.Transactions;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+using System.Data;
+using IL.Common;
+using System.Xml;
+//using MediII.Adapter.Model.UE;
+
+
+namespace MediII.Adapter.BizComponent.MFN
+{
+    /// <summary>
+    /// 公用科室
+    /// zengfan 2012-09-04
+    /// </summary>
+    /// <remarks></remarks>
+    public class MFN_Z2B_GY_KESHI : MFNBase
+    {
+        //数据库连接
+        //HealthCareContainer HealthCareContainer = new HealthCareContainer();
+        private Database ctx = null;
+        public MFN_Z2B_GY_KESHI(Database dbCtx)
+        {
+            ctx = dbCtx;
+        }
+        /// <summary>
+        /// 消息处理,入库
+        /// </summary>
+        /// <param name="message">转化过的强类型消息</param>
+        /// <returns></returns>
+        /// <remarks></remarks>
+        public override int Process(string message)
+        {
+            string strMsgType;
+            using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew))
+            {
+                string sqlSel = "select count(*) from dbo.dic_department where id=@id";
+                OperateXmlUtil helper = new OperateXmlUtil();
+                string pkid = helper.XpathRead(message, "//*[@root='2.16.156.10011.1.26']", "extension");
+                DbCommand cmd=ctx.DBGetSqlStringCommand(sqlSel);
+                ctx.AddInParameter(cmd, "id", System.Data.DbType.String, pkid);
+                int counts = Convert.ToInt32(ctx.ExecuteScalar(cmd));
+
+                if (counts == 0)
+                {
+                    string sql = @"insert into dbo.dic_department(id,
+                                                                name,
+									                            status,
+									                            search_code)
+							                            VALUES(@id,
+                                                                @name,
+									                            @status,
+									                            @search_code)";
+
+                    OperateXmlUtil xmlHelper = new OperateXmlUtil();
+                    DbCommand command = ctx.GetSqlStringCommand(sql.ToString());
+                    Resolving(message, ctx, command);
+
+                    ctx.ExecuteNonQuery(command);
+                }
+                else
+                {
+                    string sql = "update dbo.dic_department set name=@name,search_code=@search_code where id=@id";
+                    OperateXmlUtil xmlHelper = new OperateXmlUtil();
+                    DbCommand command = ctx.GetSqlStringCommand(sql.ToString());
+                    Resolving(message, ctx, command);
+
+                    ctx.ExecuteNonQuery(command);
+                }
+                scope.Complete();
+            }
+            return 1;
+        }
+
+
+        /// <summary>
+        /// 科室删除
+        /// </summary>
+        /// <param name="seg">传入资料</param>
+        /// <param name="HealthCareContainer">连线</param>
+        /// <param name="scope">交易</param>
+        public void Division_SyncDel(string pkid)
+        {
+            //string sql4 = "update HealthCare.dbo.Division set IsIss=1 where DivNo=@DivNo";
+            string sql4 = "delete from HealthCare.dbo.Division where DivNo=@DivNo";
+            DbCommand command4 = ctx.GetSqlStringCommand(sql4.ToString());
+            ctx.AddInParameter(command4, "DivNo", System.Data.DbType.AnsiString, pkid);
+            ctx.ExecuteNonQuery(command4);
+        }
+
+        public void Resolving(string Content, Database ctx, DbCommand command)
+        {
+            string value = string.Empty;
+            OperateXmlUtil xmlHelper = new OperateXmlUtil();
+
+            value = xmlHelper.XpathRead(Content, "//*[@root='2.16.156.10011.1.26']", "extension");
+            ctx.AddInParameter(command, "id", System.Data.DbType.String, value);
+            var valueNode = xmlHelper.XpathRead(Content, "//*[name()='assignedPrincipalOrganization']").Item(0);
+      
+            foreach (XmlNode xe in valueNode.ChildNodes)
+            {
+                if (xe.Name == "name")
+                {
+                    value = xe.LastChild.LastChild.Attributes["value"].Value;
+                    ctx.AddInParameter(command, "name", System.Data.DbType.String, value);
+                    value = xe.LastChild.LastChild.Attributes["code"].Value;
+                    ctx.AddInParameter(command, "search_code", System.Data.DbType.String, value);
+                    break;
+                }
+            }
+        }
+    }
+}

+ 113 - 0
IL.BizComponent/MediII.Adapter.BizComponent.MFN/MediII.Adapter.BizComponent.MFN.csproj

@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{70F1BFF2-22D0-4B1D-BD85-4279FAC616C1}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>MediII.Adapter.BizComponent.MFN</RootNamespace>
+    <AssemblyName>MediII.Adapter.BizComponent.MFN</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SccProjectName>
+    </SccProjectName>
+    <SccLocalPath>
+    </SccLocalPath>
+    <SccAuxPath>
+    </SccAuxPath>
+    <SccProvider>
+    </SccProvider>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>none</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <StartupObject />
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="MediII.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\MediII.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=e44a2bc38ed2c13c, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\Microsoft.Practices.EnterpriseLibrary.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\Microsoft.Practices.EnterpriseLibrary.Data.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=e44a2bc38ed2c13c, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\Microsoft.Practices.EnterpriseLibrary.Logging.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.ServiceLocation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\Microsoft.Practices.ServiceLocation.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.ComponentModel.DataAnnotations" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Transactions" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BizComponent_MFN.cs" />
+    <Compile Include="MFNBase.cs" />
+    <Compile Include="MFN_Z2B_GY_KESHI.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\Public\IL.Common\IL.Common.csproj">
+      <Project>{f320951f-886b-4f99-a3fd-5686c0a97868}</Project>
+      <Name>IL.Common</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\Public\MediII.Adapter.Scan.Interface\MediII.Adapter.Scan.Interface.csproj">
+      <Project>{4e8c6d0e-e696-4f02-812f-cedd6fe3f6dc}</Project>
+      <Name>MediII.Adapter.Scan.Interface</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\MediII.Adapter.BizComponent.Base\MediII.Adapter.BizComponent.Base.csproj">
+      <Project>{619b1dbf-55b7-446b-af40-852a6ab689a0}</Project>
+      <Name>MediII.Adapter.BizComponent.Base</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>Copy $(TargetDir)   $(ProjectDir)..\..\MessageToKC\UE\
+Copy $(TargetDir)   $(ProjectDir)..\..\MessageToKCServer\UE\</PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 36 - 0
IL.BizComponent/MediII.Adapter.BizComponent.MFN/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的常规信息通过以下
+// 特性集控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("MediII.Adapter.BizComponent.MFN")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("MediII.Adapter.BizComponent.MFN")]
+[assembly: AssemblyCopyright("Copyright ©  2012")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 使此程序集中的类型
+// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
+// 则将该类型上的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("115a6a94-1cf1-4141-8b5c-740ce3ae0cef")]
+
+// 程序集的版本信息由下面四个值组成:
+//
+//      主版本
+//      次版本 
+//      内部版本号
+//      修订号
+//
+// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,
+// 方法是按如下所示使用“*”:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 668 - 0
IL.BizComponent/MediII.Adapter.BizComponent.PMU/BizComponent_PMU.cs

@@ -0,0 +1,668 @@
+using System;
+using System.Data;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+//using MediII.Adapter.BaseBiz;
+using System.Data.Common;
+using System.Transactions;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+//using MediII.Adapter.Model.UE;
+using System.Globalization;
+using MediII.Adapter.BizComponent.Base;
+using IL.Common;
+using System.Xml;
+
+namespace MediII.Adapter.BizComponent.PMU
+{
+    public class BizComponent_PMU : BaseBizComponent, IBizComponent
+    {
+        const string Insert = "B01"; //增加个人纪录
+        //const string Update = "B02"; //更新个人记录
+        //const string Delete = "B03"; //删除个人记录
+        //数据库连接
+        protected Database ctx
+        {
+            get { return base.ctx; }
+        }
+        public BizComponent_PMU()
+        {
+
+        }
+        ////HealthCareContainer HealthCareContainer = new HealthCareContainer();
+        //private Database ctx = null;
+        //public BizComponent_PMU(Database dbCtx)
+        //{
+        //    ctx = dbCtx;
+        //}
+        public override string DoProcess(string m,string msgType)
+        {
+            string strMsgType = null;
+            //try
+            //{
+            //try
+            // {
+            //取得消息类型 MAD新增 MUP更新 MDL删除 "MDC"作废 "MAC"恢复
+            OperateXmlUtil helper = new OperateXmlUtil();
+            string qurysql = "select count(*) from dbo.his_doct where DOCT_CODE=@DOCT_CODE";
+            DbCommand command = ctx.GetSqlStringCommand(qurysql.ToString());
+            string pkid = helper.XpathRead(m, "//*[@root='2.16.156.10011.1.4']", "extension");
+            ctx.AddInParameter(command, "DOCT_CODE", System.Data.DbType.String, pkid);
+            int counts = Convert.ToInt32(ctx.ExecuteScalar(command));
+
+
+            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
+            {
+                //for (int i = 0; i < pmuB01.EDURepetitionsUsed; i++)
+                //{ 
+                if (counts == 0)
+                {
+                    //没有查询到记录则新增,否则修改
+                    AddData(m, pkid);
+                }
+                else
+                {
+                    UpDateData(m, pkid);
+                }
+
+                
+                
+                scope.Complete();
+            }
+            return string.Empty;
+        }
+        public void AddData(string message,string id)
+        {
+            #region 新增
+            string sql = @"INSERT INTO dbo.his_doct
+                                    ( DOCT_CODE ,
+                                    DOCT_NAME ,
+                                    HIS_DEPT_CODE ,
+                                    HIS_DEPT_NAME ,
+                                    status
+                                    )
+                            VALUES  ( @DOCT_CODE,
+                                    @DOCT_NAME ,
+                                    @HIS_DEPT_CODE ,
+                                    @HIS_DEPT_NAME ,
+                                    @status)";
+            DbCommand command = ctx.GetSqlStringCommand(sql.ToString());
+
+            SetEntity(message, command, id);
+            SqlDataAccess.ExecuteNonQuery(ctx, command);
+            #endregion
+        }
+        public void UpDateData(string message, string id)
+        {
+            #region 修改
+            string sql1 = @"update dbo.his_doct set 
+                                    DOCT_NAME =@DOCT_NAME,
+                                    HIS_DEPT_CODE =@HIS_DEPT_CODE,
+                                    HIS_DEPT_NAME =@HIS_DEPT_NAME,
+                                    status=@status
+                                where DOCT_CODE=@DOCT_CODE";
+            DbCommand command1 = ctx.GetSqlStringCommand(sql1.ToString());
+
+            SetEntity(message, command1, id);
+            SqlDataAccess.ExecuteNonQuery(ctx, command1);
+            #endregion
+        }
+
+        public void SetEntity(string message,DbCommand command,string id)
+        {
+            string value = string.Empty;
+            OperateXmlUtil xmlHelper = new OperateXmlUtil();
+
+            ctx.AddInParameter(command, "DOCT_CODE", System.Data.DbType.String, id);
+            var valueNode = xmlHelper.XpathRead(message, "//*[name()='healthCarePrincipalPerson']").Item(0);
+
+            foreach (XmlNode xe in valueNode.ChildNodes)
+            {
+                if (xe.Name == "name")
+                {
+                    value = xe.LastChild.LastChild.Attributes["value"].Value;
+                    ctx.AddInParameter(command, "DOCT_NAME", System.Data.DbType.String, value);
+
+                    break;
+                }
+            }
+
+            value = xmlHelper.XpathRead(message, "//*[@root='2.16.156.10011.1.26']", "extension");
+            ctx.AddInParameter(command, "HIS_DEPT_CODE", System.Data.DbType.AnsiString, value);
+
+            valueNode = xmlHelper.XpathRead(message, "//*[name()='affiliatedPrincipalOrganization']").Item(0);
+            foreach (XmlNode xe in valueNode.ChildNodes)
+            {
+                if (xe.Name == "name")
+                {
+                    value = xe.LastChild.LastChild.Attributes["value"].Value;
+                    ctx.AddInParameter(command, "HIS_DEPT_NAME", System.Data.DbType.String, value);
+
+                    break;
+                }
+            }
+            ctx.AddInParameter(command, "status", System.Data.DbType.String, "在用");
+            //ctx.ExecuteNonQuery(command);
+        }
+        public void AddEmpLicense(string type, string pkid, string bm, string updateuser)
+        {
+            #region 新增资格编码
+            var sql = @"INSERT INTO HealthCare.dbo.EmpLicense
+                                ( EmpLicenseID ,
+                                  EmpNo ,
+                                  LicenseType ,
+                                  LicenseClass ,
+                                  LicenseNo ,
+                                  IsMajor ,
+                                  IssueDate ,
+                                  StartDate ,
+                                  EndDate ,
+                                  UpdateUser ,
+                                  UpdateTime ,
+                                  IsDel
+                                )
+                        VALUES  ( NEXT VALUE FOR HealthCare.dbo.Seq_EmpLicense_EmpLicenseID ,
+                                  @EmpNo , 
+                                  @LicenseType , 
+                                  1 ,
+                                  @LicenseNo , 
+                                  0 , 
+                                  GETDATE() , 
+                                  GETDATE() , 
+                                  '2999-12-31 00:00:00.000',
+                                  @UpdateUser , 
+                                  GETDATE() , 
+                                  0
+                                )";
+            #endregion
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
+            SqlDataAccess.AddInParameter(ctx, cmd, "EmpNo", DbType.AnsiString, pkid);
+            SqlDataAccess.AddInParameter(ctx, cmd, "LicenseType", DbType.AnsiString, type);
+            SqlDataAccess.AddInParameter(ctx, cmd, "LicenseNo", DbType.AnsiString, bm);
+            SqlDataAccess.AddInParameter(ctx, cmd, "UpdateUser", DbType.AnsiString, updateuser);
+            SqlDataAccess.DBExecuteNonQuery(ctx, cmd);
+
+
+        }
+        public void UpdateEmpLicense(string type, string pkid, string bm)
+        {
+            var sql = @"UPDATE HealthCare.dbo.EmpLicense SET LicenseNo=@LicenseNo WHERE EmpNo=@EmpNo AND LicenseType=@LicenseType ";
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
+            SqlDataAccess.AddInParameter(ctx, cmd, "EmpNo", DbType.AnsiString, pkid);
+            SqlDataAccess.AddInParameter(ctx, cmd, "LicenseType", DbType.AnsiString, type);
+            SqlDataAccess.AddInParameter(ctx, cmd, "LicenseNo", DbType.AnsiString, bm);
+            SqlDataAccess.DBExecuteNonQuery(ctx, cmd);
+        }
+        public void DeleteEmpLicense(string type, string pkid)
+        {
+            var sql = "DELETE FROM HealthCare.dbo.EmpLicense WHERE EmpNo=@EmpNo AND LicenseType=@LicenseType";
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
+            SqlDataAccess.AddInParameter(ctx, cmd, "EmpNo", DbType.AnsiString, pkid);
+            SqlDataAccess.AddInParameter(ctx, cmd, "LicenseType", DbType.AnsiString, type);
+            SqlDataAccess.DBExecuteNonQuery(ctx, cmd);
+        }
+
+       
+
+
+
+        ///// <summary>
+        ///// 获取当前时间
+        ///// </summary> 
+        //internal DateTime GetNow(Database ctx)
+        //{ 
+        //    object obj = (DateTime)SqlDataAccess.ExecuteScalar(ctx, CommandType.Text, "select GETDATE()");
+        //    if (obj != null)
+        //        return Convert.ToDateTime(obj.ToString());
+        //    else
+        //        return DateTime.Now;
+        //}
+
+        //获取性别,转化
+        public string GetSex(string value)
+        {
+            string sex = "0";
+            switch (value)
+            {
+                case "F":
+                    sex = "1";//男
+                    break;
+                case "男":
+                    sex = "1";//男
+                    break;
+                case "M":
+                    sex = "2";//女
+                    break;
+                case "女":
+                    sex = "2";//女
+                    break;
+                default:
+                    sex = "9";//不定
+                    break;
+            }
+            return sex;
+        }
+        public string GetYsdj(string hiscodeid)
+        {
+            var sql = "SELECT CodeID FROM HealthCare.dbo.V_UserLevel WHERE HisCodeID=@HisCodeID";
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
+            SqlDataAccess.AddInParameter(ctx, cmd, "HisCodeID", DbType.AnsiString, hiscodeid);
+            string codeid = StrHelepr.Obj2StrTrim(SqlDataAccess.DBExecuteScalar(ctx, cmd));
+            if (codeid != null)
+            {
+                return codeid;
+            }
+            else
+            {
+                throw new Exception("V_UserLevel没有找到对应的医生等级");
+            }
+
+        }
+        public string GetEmpType(string value)
+        {
+            string emptype = "";
+            switch (value) // 员工分类
+            {
+                case "1"://1	医生
+                    emptype = "1";
+                    break;
+                case "2"://2	护士
+                    emptype = "2";
+                    break;
+                case "3"://3	财务人员
+                    emptype = "3";
+                    break;
+                case "4"://4	药剂人员
+                    emptype = "4";
+                    break;
+                case "5"://5	技师(检验)
+                    emptype = "5";
+                    break;
+                case "6"://6	技师(影像)
+                    emptype = "6";
+                    break;
+                case "7"://7	管理人员
+                    emptype = "7";
+                    break;
+                case "8"://8	其他卫生技术人员
+                    emptype = "8";
+                    break;
+                case "9"://9	其他人员
+                    emptype = "9";
+                    break;
+            }
+            return emptype;
+        }
+
+    }
+
+}
+#region 此为老版本代码
+/*
+Employee Module_Employee = new Employee();
+
+strMsgType = pmuB01.EVN.EventTypeCode.Value;
+
+#region STG
+STF stf = pmuB01.STF;
+
+Module_Employee.EmpNo = Convert.ToInt16(stf.PrimaryKeyValueSTF.Identifier.Value);// 员工代号
+Module_Employee.EmpCode = stf.GetStaffIDCode(0).ID.Value;// 员工代码
+Module_Employee.EmpName = stf.GetStaffName(0).GivenName.Value;// 姓名
+Module_Employee.EngName = stf.GetStaffName(0).GivenName.Value;// 英文姓名
+Module_Employee.IdNo = stf.DriverSLicenseNumberStaff.DriverSLicenseNumber.Value.Trim() ;// 身份证号 <<<<<<<<<<<<<<<<<<<<<< 目前ISNULL
+
+#region 性别转换
+// 1:男 2:女
+Module_Employee.Sex = His.MediIITransfer.MediII2Ue.GetSex(stf.AdministrativeSex.Value);
+#endregion
+
+Module_Employee.Birthday = His.Time.TryParseExact(stf.DateTimeOfBirth.TimeOfAnEvent.Value, "yyyyMMddhhmmss");
+
+#region 婚姻状况
+// 婚姻状况 (0:未婚,1:已婚,2:离婚)
+switch (stf.MaritalStatus.Text.Value)
+{
+    case "S"://S	独身
+    case "P"://P	同性恋
+    case "G"://G	同居
+    case "B"://B	未婚
+    case "U"://U	未知
+    case "O"://O	其他
+    case "T"://T	未报告
+        Module_Employee.MaritalStatus = "0";
+        break;
+    case "M"://M	结婚
+    case "A":  //A	分居
+    case "W"://W	丧偶
+    case "R"://R	已登记同性恋
+    case "E"://E	合法分居
+    // case "C"://C	普通法律
+    case "I"://I	诉讼中
+        Module_Employee.MaritalStatus = "1";
+        break;
+
+    case "D"://D	离婚
+        Module_Employee.MaritalStatus = "2";
+        break;
+    default:
+        Module_Employee.MaritalStatus = "0";
+        break;
+}
+#endregion
+
+Module_Employee.HomeAdrArea = 0;// 住处区域代码 <<<<<<<<<<<<<<<<<<<<<<<<<<<
+Module_Employee.HomeAdrDesc = stf.GetOfficeHomeAddress(0).StreetAddress.StreetOrMailingAddress.Value;// 住处地址
+Module_Employee.HomeTel1 = stf.GetPhone(0).PhoneNumber.Value;// 住处电话1
+Module_Employee.HomeTel2 = "0"; // 住处电话2(不同步)
+
+Module_Employee.MobilePhone = stf.GetPhone(0).PhoneNumber.Value; // 移动电话
+
+Module_Employee.NativeAdrArea = 0;// 户籍区域代码(不同步)
+Module_Employee.NativeAdrDesc = "";// 户籍地址(不同步)
+Module_Employee.NativeTel = "";// 户籍电话(不同步)
+
+Module_Employee.ConName = "";// 联系人姓名(不同步)
+Module_Employee.ConTel1 = "";// 络人电话(不同步)
+Module_Employee.ConTel2 = "";// 络人电话(不同步)
+
+Module_Employee.ConAdrArea = 0;// 联系人区域代码(不同步)
+Module_Employee.ConAdrDesc = "";// 联系人地址(不同步)
+
+Module_Employee.Affiliation = "";// 与联系人关系(不同步)
+
+try
+{
+     string sHireDate =stf.GetInstitutionActivationDate(0).Date.TimeOfAnEvent.Value;
+    DateTime dtHireDate = His.Time.TryParseExact(sHireDate, "yyyyMMddhhmmss");
+
+    Module_Employee.HireDate = dtHireDate == His.Time.MaxDateTime ? Convert.ToDateTime("1911-01-01 00:00:00") : dtHireDate; // 到职日期
+
+}
+catch
+{
+    Module_Employee.HireDate = Convert.ToDateTime("1911-01-01 00:00:00");
+}
+               
+Module_Employee.Zone = "A";// 归属院区(联众会开栏位**********)<<<<<<<<<<<<<<<<<<<<<<
+
+string tmp = stf.GetDepartment(0).Identifier.Value;
+
+try
+{
+    string sDepartNo = His.MediIITransfer.MediII2Ue.GetDepartNo(stf.GetDepartment(0).Identifier.Value);
+    Module_Employee.DepartNo = Convert.ToInt16(sDepartNo);// 部门代码
+}
+catch (Exception ex)
+{
+    Module_Employee.DepartNo = -1;
+}
+
+Module_Employee.EmpType = stf.GetStaffType(0).Value;
+
+#region 员工分类
+
+switch (stf.GetStaffType(0).Value) // 员工分类
+{
+    case "1"://1	医生
+        Module_Employee.EmpType = "1";
+        break;
+    case "2"://2	护士
+        Module_Employee.EmpType = "2";
+        break;
+    case "3"://3	财务人员
+        Module_Employee.EmpType = "3";
+        break;
+    case "4"://4	药剂人员
+        Module_Employee.EmpType = "4";
+        break;
+    case "5"://5	技师(检验)
+    case "6"://6	技师(影像)
+    case "7"://7	管理人员
+    case "8"://8	其他卫生技术人员
+    case "9"://9	其他人员
+        Module_Employee.EmpType = "0";
+        break;
+}
+#endregion
+string tmp2 = stf.JobCodeClass.JobCode.Value;
+
+try
+{
+    Module_Employee.Title = Convert.ToInt16(stf.JobCodeClass.JobCode.Value);// 职称
+}
+catch (Exception ex)
+{
+    Module_Employee.Title = -1;
+}
+
+
+Module_Employee.ChiefNo = Convert.ToInt16(stf.GetHospitalService(0).Identifier.Value);// 职位
+string tmp3 = stf.GetDepartment(0).Identifier.Value;
+
+try
+{
+    string sWorkDepartNo = His.MediIITransfer.MediII2Ue.GetDepartNo(stf.GetDepartment(0).Identifier.Value);
+    Module_Employee.WorkDepartNo = Convert.ToInt16(sWorkDepartNo);// 工作单位代号  <<<<<<<<<<<<<
+
+}
+catch
+{
+    Module_Employee.WorkDepartNo = -1;
+}
+
+Module_Employee.SimpleTel = stf.GetPhone(0).PhoneNumber.Value;// 速拨码
+Module_Employee.SubTel = stf.GetPhone(0).PhoneNumber.Value;// 分机
+
+string sPassword = stf.GetBackupPersonID(0).Identifier.Value;
+
+Module_Employee.Password = sPassword == null ? "" : sPassword;
+Module_Employee.PasswordTime = DateTime.Now; // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+Module_Employee.PressCard = 0;// 工作卡号(暫時不填)
+
+
+string  sActiveInactiveFlag = stf.ActiveInactiveFlag.Value; // A,在职;I,离职
+Module_Employee.ResignDate = sActiveInactiveFlag == "A" ? His.Time.MaxDateTime : His.Time.MaxDateTime; 
+
+int iIntParse;
+int.TryParse(stf.PreferredMethodOfContact.Identifier.Value, out iIntParse);
+if (iIntParse != 0)
+{
+    Module_Employee.UpdateUser = Convert.ToInt16(iIntParse);// 最后修改人
+}
+
+Module_Employee.UpdateTime = DateTime.Now;
+
+Module_Employee.EMail = "";// 电子信箱(不同步)
+
+Module_Employee.Remark = "";// 备注说明(不同步)
+
+Module_Employee.Team = 0;// 组别
+
+#endregion
+
+#region 測試
+
+string sErrMsg;
+if (string.IsNullOrEmpty(Module_Employee.IdNo))
+{
+    sErrMsg = "【身份证】无法为空";
+    SetACK(m, "ACK", strMsgType, "ACK", sErrMsg);
+}
+
+if (string.IsNullOrEmpty(Module_Employee.HomeAdrDesc))
+{
+    Module_Employee.HomeAdrDesc = "";
+}
+
+if (string.IsNullOrEmpty(Module_Employee.HomeTel1))
+{
+    Module_Employee.HomeTel1 = "";
+}
+
+if (string.IsNullOrEmpty(Module_Employee.HomeTel1))
+{
+    Module_Employee.HomeTel1 = ""; // 住处电话1
+}
+
+if (string.IsNullOrEmpty(Module_Employee.MobilePhone))
+{
+    Module_Employee.MobilePhone = ""; // 移动电话1
+}
+
+if (string.IsNullOrEmpty(Module_Employee.MobilePhone))
+{
+    Module_Employee.MobilePhone = ""; // 移动电话1
+}
+
+
+//Module_Employee.HireDate = His.Time.TryParseExact(sHireDate, "yyyyMMdd"); // 到职日期
+//Module_Employee.Title = Convert.ToInt16(stf.JobCodeClass.JobCode.Value);// 职称
+
+//Module_Employee.ChiefNo = Convert.ToInt16(stf.GetHospitalService(0).Identifier.Value);// 职位
+
+if (string.IsNullOrEmpty(Module_Employee.MobilePhone))
+{
+    Module_Employee.SimpleTel = "";// 速拨码
+}
+
+if (string.IsNullOrEmpty(Module_Employee.MobilePhone))
+{
+    Module_Employee.SubTel = "";// 分机
+}
+
+if (string.IsNullOrEmpty(Module_Employee.Password))
+{
+    sErrMsg = "【密碼】无法为空";
+    SetACK(m, "ACK", strMsgType, "ACK", sErrMsg);
+}
+
+//if (Module_Employee.HireDate == DateTime.MinValue)
+//{
+//    Module_Employee.HireDate = His.Time.MaxDateTime;
+//}
+if (Module_Employee.PasswordTime == DateTime.MinValue)
+{
+    Module_Employee.PasswordTime = His.Time.MaxDateTime;
+}
+if (Module_Employee.UpdateTime == DateTime.MinValue)
+{
+    Module_Employee.UpdateTime = His.Time.MaxDateTime;
+}
+
+if (Module_Employee.ResignDate == DateTime.MinValue)
+{
+    Module_Employee.ResignDate = His.Time.MaxDateTime;
+}
+
+
+//Module_Employee.ResignDate = His.Time.TryParseExact(sResignDate, "yyyyMMdd"); // 离职日期
+#endregion
+
+
+// 開始存入資料庫
+int iEmpNo = Convert.ToInt16(stf.PrimaryKeyValueSTF.Identifier.Value);// 员工代号
+using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
+{
+    switch (strMsgType)
+    {
+        case Insert:
+        case Update:
+            EmployeeDelete(iEmpNo, ref HealthCareContainer, scope, ref Module_Employee);
+            EmployeeInsert(iEmpNo, ref HealthCareContainer, scope, ref Module_Employee);
+            break;
+        case Delete:
+            EmployeeDelete(iEmpNo, ref HealthCareContainer, scope, ref Module_Employee);
+            break;
+    }
+
+    #region 存入資料庫
+
+    try
+    {
+        HealthCareContainer.SaveChanges();
+    }
+    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
+    {
+        scope.Dispose();
+        throw ex;
+    }
+    #endregion
+
+    scope.Complete();
+
+
+}
+*/
+//        return string.Empty;
+
+//    }
+//    catch (Exception ex)
+//    {
+//        string errMsg = string.Empty;
+//        if (ex.InnerException == null)
+//        {
+//            errMsg = ex.Message + "\r\n" + ex.StackTrace;
+//        }
+//        else
+//        {
+//            errMsg = ex.Message + "\r\n" + ex.InnerException.Message + "\r\n" + ex.InnerException.StackTrace;
+//        }
+//        return errMsg;
+//    }
+//}
+// catch (System.Data.Entity.Validation.DbEntityValidationException ex)
+//{
+//var tmp = ex.EntityValidationErrors.FirstOrDefault().ValidationErrors;
+//string errString = "";
+//foreach (var item in tmp)
+//{
+//    errString += item.ErrorMessage;
+//}
+//string ack = SetACK(m, "ACK", mType, "ACK", ex.EntityValidationErrors.ToString());
+//throw new Exception(string.Format("{0}\r\n{1}", ex.EntityValidationErrors.ToString()));
+
+//return ex.Message;
+//}
+//}
+
+
+/*
+
+public void EmployeeInsert(int iEmpNo, ref HealthCareContainer HealthCareContainer, TransactionScope scope, ref Employee Module_Employee)
+{
+    try
+    {
+        HealthCareContainer.Employee.Add(Module_Employee);
+
+    }
+    catch (Exception ex)
+    {
+        scope.Dispose();
+        throw ex;
+    }
+}
+
+public void EmployeeDelete(int iEmpNo, ref HealthCareContainer HealthCareContainer, TransactionScope scope, ref Employee Module_Employee)
+{
+    try
+    {
+        IEnumerable<Employee> EmployeeList = HealthCareContainer.Employee.Where(x => x.EmpNo == iEmpNo);
+        if (EmployeeList.Count() != 0)
+        {
+            Employee Module_Employee_Del = EmployeeList.FirstOrDefault();
+            HealthCareContainer.Employee.Remove(Module_Employee_Del);
+            HealthCareContainer.SaveChanges();
+        }
+
+    }
+    catch (Exception ex)
+    {
+        scope.Dispose();
+        throw ex;
+    }
+}
+*/
+// }
+//}
+#endregion

+ 102 - 0
IL.BizComponent/MediII.Adapter.BizComponent.PMU/MediII.Adapter.BizComponent.PMU.csproj

@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{B937B9E7-11DE-47BF-9D62-FEAD3DE51D0D}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>MediII.Adapter.BizComponent.PMU</RootNamespace>
+    <AssemblyName>MediII.Adapter.BizComponent.PMU</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SccProjectName>
+    </SccProjectName>
+    <SccLocalPath>
+    </SccLocalPath>
+    <SccAuxPath>
+    </SccAuxPath>
+    <SccProvider>
+    </SccProvider>
+    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>
+    <RestorePackages>true</RestorePackages>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>none</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="MediII.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\MediII.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=e44a2bc38ed2c13c, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\Microsoft.Practices.EnterpriseLibrary.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\Microsoft.Practices.EnterpriseLibrary.Data.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=e44a2bc38ed2c13c, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\dll\Microsoft.Practices.EnterpriseLibrary.Logging.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.ComponentModel.DataAnnotations" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Transactions" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BizComponent_PMU.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\..\Public\IL.Common\IL.Common.csproj">
+      <Project>{f320951f-886b-4f99-a3fd-5686c0a97868}</Project>
+      <Name>IL.Common</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\..\Public\MediII.Adapter.Scan.Interface\MediII.Adapter.Scan.Interface.csproj">
+      <Project>{4e8c6d0e-e696-4f02-812f-cedd6fe3f6dc}</Project>
+      <Name>MediII.Adapter.Scan.Interface</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\MediII.Adapter.BizComponent.Base\MediII.Adapter.BizComponent.Base.csproj">
+      <Project>{619b1dbf-55b7-446b-af40-852a6ab689a0}</Project>
+      <Name>MediII.Adapter.BizComponent.Base</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>Copy $(TargetDir)   $(ProjectDir)..\..\MessageToSI\UE\
+Copy $(TargetDir)   $(ProjectDir)..\..\MessageToSIServer\UE\</PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 36 - 0
IL.BizComponent/MediII.Adapter.BizComponent.PMU/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的常规信息通过以下
+// 特性集控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("MediII.Adapter.BizComponent.PMU")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("MediII.Adapter.BizComponent.PMU")]
+[assembly: AssemblyCopyright("Copyright ©  2012")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 使此程序集中的类型
+// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
+// 则将该类型上的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("ff47b8b9-7d92-43ac-93a8-dcd10d1ff028")]
+
+// 程序集的版本信息由下面四个值组成:
+//
+//      主版本
+//      次版本 
+//      内部版本号
+//      修订号
+//
+// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,
+// 方法是按如下所示使用“*”:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 20 - 0
MediII.Adapter.MsgToKCServer/ApplictStatic.cs

@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+
+namespace MediII.Adapter.MsgToKCServer
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class ApplictStatic
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public const string ServerName = "KC.HL7.MsgToKCServer";
+    }
+}

+ 102 - 0
MediII.Adapter.MsgToKCServer/MediII.Adapter.MsgToKCServer.csproj

@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{76458091-5802-4284-8861-5F96360119FF}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>MediII.Adapter.MsgToKCServer</RootNamespace>
+    <AssemblyName>MediII.Adapter.MsgToKCServer</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <DocumentationFile>
+    </DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration.Install" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Management" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.ServiceProcess" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ApplictStatic.cs" />
+    <Compile Include="MsgToKCServer.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="MsgToKCServer.Designer.cs">
+      <DependentUpon>MsgToKCServer.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="ProjectInstaller.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="ProjectInstaller.Designer.cs">
+      <DependentUpon>ProjectInstaller.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ServiceStatusPublishManager.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="app.config">
+      <SubType>Designer</SubType>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\Public\IL.Common\IL.Common.csproj">
+      <Project>{f320951f-886b-4f99-a3fd-5686c0a97868}</Project>
+      <Name>IL.Common</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\Public\MediII.Adapter.Scan.Interface\MediII.Adapter.Scan.Interface.csproj">
+      <Project>{4e8c6d0e-e696-4f02-812f-cedd6fe3f6dc}</Project>
+      <Name>MediII.Adapter.Scan.Interface</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\MediII.Adapter.Scanner\MediII.Adapter.Scanner.csproj">
+      <Project>{0adddb14-b0f6-4d12-8025-5ec8124a511b}</Project>
+      <Name>MediII.Adapter.Scanner</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="ProjectInstaller.resx">
+      <DependentUpon>ProjectInstaller.cs</DependentUpon>
+    </EmbeddedResource>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>Copy $(TargetDir)   $(ProjectDir)..\MessageToKCServer\</PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 37 - 0
MediII.Adapter.MsgToKCServer/MsgToKCServer.Designer.cs

@@ -0,0 +1,37 @@
+namespace MediII.Adapter.MsgToKCServer
+{
+    partial class MsgToKCServer
+    {
+        /// <summary> 
+        /// 必需的设计器变量。
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// 清理所有正在使用的资源。
+        /// </summary>
+        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region 组件设计器生成的代码
+
+        /// <summary> 
+        /// 设计器支持所需的方法 - 不要
+        /// 使用代码编辑器修改此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            components = new System.ComponentModel.Container();
+            this.ServiceName = "Service1";
+        }
+
+        #endregion
+    }
+}

+ 105 - 0
MediII.Adapter.MsgToKCServer/MsgToKCServer.cs

@@ -0,0 +1,105 @@
+using IL.Common;
+using MediII.Adapter.Scan.Interface;
+using MediII.Adapter.Scanner;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Diagnostics;
+using System.IO.Pipes;
+using System.Linq;
+using System.ServiceProcess;
+using System.Text;
+using System.Threading;
+using System.Windows.Forms;
+
+namespace MediII.Adapter.MsgToKCServer
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public partial class MsgToKCServer : ServiceBase
+    {
+
+        private bool _addPool = false;//是否启动  
+        private Scaner scanner = new Scaner();
+        /// <summary>
+        /// 
+        /// </summary>
+        public MsgToKCServer()
+        {
+            InitializeComponent();
+
+        }
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="args"></param>
+        protected override void OnStart(string[] args)
+        {
+            sp_MessageLog(null,
+                new LogEventArgs()
+                {
+                    LogTime = DateTime.Now,
+                    LogModel = new LogModel() { Message = "服务启动" }
+                });
+
+            LogHelper.LogDebug("服务启动", LogCatagories.General);
+            LogHelper.LogInfo("服务启动", LogCatagories.General);
+            LogHelper.LogError("服务启动", LogCatagories.General);
+
+
+            LogHelper.LogDebug("服务启动", LogCatagories.Sock);
+            LogHelper.LogInfo("服务启动", LogCatagories.Sock);
+            LogHelper.LogError("服务启动", LogCatagories.Sock);
+
+            LogHelper.LogDebug("服务启动", LogCatagories.AdapterScan);
+            LogHelper.LogInfo("服务启动", LogCatagories.AdapterScan);
+            LogHelper.LogError("服务启动", LogCatagories.AdapterScan);
+
+            LogHelper.LogDebug("服务启动", LogCatagories.SQL);
+            LogHelper.LogInfo("服务启动", LogCatagories.SQL);
+            LogHelper.LogError("服务启动", LogCatagories.SQL);
+
+
+            System.Diagnostics.Debug.WriteLine("OnStart", ApplictStatic.ServerName);
+            //_running = true;
+            if (!_addPool)
+            {
+                ThreadPool.QueueUserWorkItem(DoTask);
+                _addPool = true;
+            }
+        }
+
+        private void DoTask(object state)
+        {
+            var args = new string[] { "UE" };
+            if (args.Length > 0)
+            {
+
+                string dllPath = System.IO.Path.Combine(Application.StartupPath, args[0]);
+                string path = Environment.GetEnvironmentVariable("path") + ";" + dllPath;
+                Environment.SetEnvironmentVariable("path", path);
+                scanner.Start(new string[] { dllPath }, sp_MessageLog);
+            }
+        }
+        /// <summary>
+        /// 
+        /// </summary>
+        protected override void OnStop()
+        {
+            sp_MessageLog(null, new LogEventArgs() { LogTime = DateTime.Now, LogModel = new LogModel() { Message = "服务停止" } });
+
+            scanner.Stop();
+            System.Threading.Thread.Sleep(10 * 1000);//暂时10秒再退出
+        }
+
+
+        void sp_MessageLog(object sender, LogEventArgs e)
+        {
+            ServiceStatusPublishManager.Instance.AppendMessage(e);
+        }
+    }
+
+
+}

+ 24 - 0
MediII.Adapter.MsgToKCServer/Program.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.ServiceProcess;
+using System.Text;
+
+namespace MediII.Adapter.MsgToKCServer
+{
+    static class Program
+    {
+        /// <summary>
+        /// 应用程序的主入口点。
+        /// </summary>
+        static void Main()
+        {
+            ServiceBase[] ServicesToRun;
+            ServicesToRun = new ServiceBase[] 
+            { 
+                new MsgToKCServer() 
+            };
+            ServiceBase.Run(ServicesToRun);
+        }
+    }
+}

+ 59 - 0
MediII.Adapter.MsgToKCServer/ProjectInstaller.Designer.cs

@@ -0,0 +1,59 @@
+namespace MediII.Adapter.MsgToKCServer
+{
+    partial class ProjectInstaller
+    {
+        /// <summary>
+        /// 必需的设计器变量。
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// 清理所有正在使用的资源。
+        /// </summary>
+        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region 组件设计器生成的代码
+
+        /// <summary>
+        /// 设计器支持所需的方法 - 不要
+        /// 使用代码编辑器修改此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
+            this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
+            // 
+            // serviceProcessInstaller1
+            // 
+            this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalService;
+            this.serviceProcessInstaller1.Password = null;
+            this.serviceProcessInstaller1.Username = null;
+            // 
+            // serviceInstaller1
+            // 
+            this.serviceInstaller1.Description = "康程HL7消息解析服务";
+            this.serviceInstaller1.DisplayName = "KC.HL7.MsgToKCServer";
+            this.serviceInstaller1.ServiceName = "KC.HL7.MsgToKCServer";
+            // 
+            // ProjectInstaller
+            // 
+            this.Installers.AddRange(new System.Configuration.Install.Installer[] {
+            this.serviceProcessInstaller1,
+            this.serviceInstaller1});
+
+        }
+
+        #endregion
+
+        private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;
+        private System.ServiceProcess.ServiceInstaller serviceInstaller1;
+    }
+}

+ 24 - 0
MediII.Adapter.MsgToKCServer/ProjectInstaller.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Configuration.Install;
+using System.Linq;
+
+namespace MediII.Adapter.MsgToKCServer
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    [RunInstaller(true)]
+    public partial class ProjectInstaller : System.Configuration.Install.Installer
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public ProjectInstaller()
+        {
+            InitializeComponent();
+        }
+    }
+}

+ 129 - 0
MediII.Adapter.MsgToKCServer/ProjectInstaller.resx

@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="serviceProcessInstaller1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="serviceInstaller1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>208, 17</value>
+  </metadata>
+  <metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+</root>

+ 36 - 0
MediII.Adapter.MsgToKCServer/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的常规信息通过以下
+// 特性集控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("MediII.Adapter.MsgToKCServer")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("MediII.Adapter.MsgToKCServer")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 使此程序集中的类型
+// 对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型,
+// 则将该类型上的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("8b78e209-53d5-48ff-add9-af57b4a0013c")]
+
+// 程序集的版本信息由下面四个值组成: 
+//
+//      主版本
+//      次版本 
+//      生成号
+//      修订号
+//
+// 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
+// 方法是按如下所示使用“*”: 
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 149 - 0
MediII.Adapter.MsgToKCServer/ServiceStatusPublishManager.cs

@@ -0,0 +1,149 @@
+using IL.Common;
+using System;
+using System.Collections.Generic;
+using System.IO.Pipes;
+using System.Linq;
+using System.Text;
+using System.Threading;
+
+namespace MediII.Adapter.MsgToKCServer
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class ServiceStatusPublishManager
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        static public readonly ServiceStatusPublishManager Instance = new ServiceStatusPublishManager();
+
+        private const int MAX_LENGTH = 1000;
+        private const string PIPENAME = ApplictStatic.ServerName;
+        private List<LogEventArgs> _msgs;
+
+        private ManagerImple _managerImp;
+        /// <summary>
+        /// 
+        /// </summary>
+        protected ServiceStatusPublishManager()
+        {
+            _managerImp = new ManagerImple(this);
+            _msgs = new List<LogEventArgs>();
+        }
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="msg"></param>
+        public void AppendMessage(LogEventArgs msg)
+        {
+            lock (this) _msgs.Add(msg);
+
+            if (_msgs.Count > MAX_LENGTH)
+            {
+                lock (this)
+                {
+                    _msgs.RemoveAt(0);
+                    //if (_managerImp._msgIndex == _msgs.Count) _managerImp._msgIndex -= 2;
+                }
+            }
+        }
+
+
+
+        public LogEventArgs GetMessage()
+        {
+            lock (this)
+            {
+                if (_msgs.Count <= 0)
+                    return null;
+                var data = _msgs[_msgs.Count - 1];
+                _msgs.Remove(data);
+                return data;
+            }
+        }
+
+        class ManagerImple
+        {
+            private ServiceStatusPublishManager _trace;
+
+            private Thread _thread;
+
+            public ManagerImple(ServiceStatusPublishManager trace)
+            {
+                _trace = trace;
+                _thread = new Thread(WriteServiceStatus);
+                _thread.Start();
+            }
+
+            //public int _msgIndex = 0;
+
+            private void WriteServiceStatus(object stats)
+            {
+                while (true)
+                {
+                    try
+                    {
+                        using (var serverStream = new NamedPipeServerStream(PIPENAME, PipeDirection.InOut, 10, PipeTransmissionMode.Message))
+                        {
+                            serverStream.WaitForConnection();
+
+                            while (serverStream.IsConnected)
+                            {
+                                System.Diagnostics.Debug.WriteLine("serverStream.IsConnected", ApplictStatic.ServerName);
+
+                                bool writeSomeMessage = false;
+                                LogEventArgs logData = null;
+                                while ((logData = _trace.GetMessage()) != null)
+                                {
+                                    var msg = string.Format("时间:{0}  是否成功:{1} 消息ID:{2} 消息内容:{3}  ", logData.LogTime, string.IsNullOrEmpty(logData.LogModel.ErrorMsg),  logData.LogModel.MessageID,
+                                     logData.LogModel.Message);
+                                    if (!string.IsNullOrEmpty(logData.LogModel.ErrorMsg))
+                                    {
+                                        msg += " 错误消息:"+logData.LogModel.ErrorMsg;
+                                    }
+                                    byte[] bytes = Encoding.UTF8.GetBytes(msg);
+                                    serverStream.Write(bytes, 0, bytes.Length);
+                                    serverStream.Flush(); 
+                                    writeSomeMessage = true;
+                                    Thread.Sleep(100);
+                                }
+
+
+
+                                //while (_msgIndex < _trace._msgs.Count)
+                                //{
+                                //    var logData = _trace._msgs[_msgIndex];
+                                //    var msg = string.Format("时间:{0}  是否成功:{1} 消息ID:{2} 消息内容:{3} 错误信息:{4} ", logData.LogTime, string.IsNullOrEmpty(logData.LogModel.ErrorMsg), logData.LogModel.MessageID,
+                                //        logData.LogModel.Message, logData.LogModel.ErrorMsg);
+                                //    byte[] bytes = Encoding.UTF8.GetBytes(msg);
+                                //    serverStream.Write(bytes, 0, bytes.Length);
+                                //    serverStream.Flush();
+                                //    _msgIndex++;
+                                //    writeSomeMessage = true;
+                                //}
+
+                                if (!writeSomeMessage)
+                                {
+                                    byte[] bytes = Encoding.UTF8.GetBytes("无消息输出");
+                                    serverStream.Write(bytes, 0, bytes.Length);
+                                    serverStream.Flush();
+                                    Thread.Sleep(1000 * 10);
+                                }
+                                Thread.Sleep(1000);
+                            }
+
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        System.Diagnostics.Debug.WriteLine(ex.ToString(), ApplictStatic.ServerName);
+                    }
+                }
+
+            }
+        }
+    }
+}

+ 108 - 0
MediII.Adapter.MsgToKCServer/app.config

@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+  <configSections>
+    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
+    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
+  </configSections>
+  <!--日志配置-->
+  <loggingConfiguration name="" tracingEnabled="true" defaultCategory="General">
+    <listeners>
+      <add name="GeneralListener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
+        listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
+        fileName="General\rolling.log" formatter="Text Formatter" rollFileExistsBehavior="Increment"
+        rollInterval="Day" maxArchivedFiles="0" traceOutputOptions="None" />
+      <add name="SockListener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
+        listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
+        fileName="Sock\rolling.log" formatter="Text Formatter" rollInterval="Day" />
+      <add name="ScanListener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
+        listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
+        fileName="Scan\rolling.log" formatter="Text Formatter" rollInterval="Day" />
+      <add name="SqlListener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
+        listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
+        fileName="SQL\logSql.log" formatter="Text Formatter" rollInterval="Day" />
+    </listeners>
+    <formatters>
+      <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
+        template="Timestamp: {timestamp}{newline}&#xA;Message: {message}"
+        name="Text Formatter" />
+    </formatters>
+    <categorySources>
+      <add switchValue="All" name="General">
+        <listeners>
+          <add name="GeneralListener" />
+        </listeners>
+      </add>
+      <add switchValue="All" name="Sock">
+        <listeners>
+          <add name="SockListener" />
+        </listeners>
+      </add>
+      <add switchValue="All" name="AdapterScan">
+        <listeners>
+          <add name="ScanListener" />
+        </listeners>
+      </add>
+      <add switchValue="All" name="SQL">
+        <listeners>
+          <add name="SqlListener" />
+        </listeners>
+      </add>
+    </categorySources>
+    <specialSources>
+      <allEvents switchValue="All" name="All Events" />
+      <notProcessed switchValue="All" name="Unprocessed Category" />
+      <errors switchValue="All" name="Logging Errors &amp; Warnings" />
+    </specialSources>
+  </loggingConfiguration>
+  <dataConfiguration defaultDatabase="DefaultDB" />
+  <connectionStrings>
+    <add name="DefaultDB" connectionString="Data Source=.;
+                       Initial Catalog=HL7_Platform;
+                       Persist Security Info=True;
+                       Integrated Security=False;
+                       User ID=sa;Password=123" providerName="System.Data.SqlClient"/>
+
+    <add name="HealthCare" connectionString="Data Source=.;
+                       Initial Catalog=KC_JX;
+                       Persist Security Info=True;
+                       Integrated Security=False;
+                       User ID=sa;Password=123" providerName="System.Data.SqlClient"/>
+
+
+
+  </connectionStrings>
+  <appSettings>
+    <!--测试-->
+    <!--正式-->
+    <add key="MediIIAddress" value="192.9.216.206" />
+    <add key="MediIIPort" value="31001" />
+    <add key="BufferSize" value="4048" />
+    <add key="ReviceTimeOut" value="30000" />
+    <add key="ErrorRepeatCount" value="1" />
+    <add key="ErrorSleepMSecodes" value="3000" />
+    <!--<add key="SedingApplication" value="UEHIS" />-->
+    <add key="HosiptalName" value=""/>
+
+    <add key="AddMinues" value="30"/>
+    <add key="BranchID" value=""/>
+    <!--查询数量-->
+    <add key="SearchNum" value="50"/>
+
+    <!--任务解锁时间  单位分钟-->
+    <add key="TaskRunTime" value="5"/>
+
+
+    <!--启动SQL日志-->
+    <add key="LogSql" value="1"/>
+  </appSettings>
+  <system.serviceModel>
+    <bindings>
+      <basicHttpBinding>
+        <binding name="WebServiceSoap"/>
+      </basicHttpBinding>
+    </bindings>
+    <client>
+      <endpoint address="http://localhost:8092/WebService.asmx" binding="basicHttpBinding" bindingConfiguration="WebServiceSoap" contract="ServiceTest.WebServiceSoap" name="WebServiceSoap"/>
+    </client>
+  </system.serviceModel>
+</configuration>

+ 13 - 0
MediII.Adapter.ReceiveToKCModel/BaseEntity.cs

@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MediII.Adapter.ReceiveToKCModel
+{
+    [Serializable]
+    public abstract class BaseEntity
+    {
+    }
+}

+ 46 - 0
MediII.Adapter.ReceiveToKCModel/HL7_MessageSetEntity.cs

@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+
+
+namespace  MediII.Adapter.ReceiveToKCModel
+{ 
+
+
+	[Serializable]
+	public partial class HL7_MessageSetEntity:BaseEntity
+	{
+
+			/// <summary> 
+			///  消息ID
+			/// </summary>
+			public string  MessageId { get; set; } 
+
+			/// <summary> 
+			///  消息类型 1扫描 2接收
+			/// </summary>
+			public int  MessageType { get; set; } 
+
+			/// <summary> 
+			///  执行时间
+			/// </summary>
+			public DateTime?  ExecuteTime { get; set; } 
+
+			/// <summary> 
+			///  间隔时间
+			/// </summary>
+			public int?  IntervalTime { get; set; } 
+
+			/// <summary> 
+			///  
+			/// </summary>
+			public int?  IsDel { get; set; } 
+
+			/// <summary> 
+			///  备注
+			/// </summary>
+			public string  Remark { get; set; } 
+	}
+}
+//MessageId,MessageType,ExecuteTime,IntervalTime,IsDel,Remark,

+ 107 - 0
MediII.Adapter.ReceiveToKCModel/HL7_ReceiveEntity.cs

@@ -0,0 +1,107 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+
+
+namespace MediII.Adapter.ReceiveToKCModel
+{
+
+
+    [Serializable]
+    public partial class HL7_ReceiveEntity : BaseEntity
+    {
+
+        /// <summary> 
+        ///  主键Guid
+        /// </summary>
+        public string ID { get; set; }
+
+        /// <summary> 
+        ///  顺序 自增长
+        /// </summary>
+        public int SeqNo { get; set; }
+
+        /// <summary> 
+        ///  发送系统ID
+        /// </summary>
+        public string SourceID { get; set; }
+
+        /// <summary> 
+        ///  消息唯一主键
+        /// </summary>
+        public string MsgConID { get; set; }
+
+        /// <summary> 
+        ///  消息内容
+        /// </summary>
+        public string MsgContent { get; set; }
+
+        /// <summary> 
+        ///  回复消息
+        /// </summary>
+        public string ReplyMsg { get; set; }
+
+        /// <summary> 
+        ///  接收时间
+        /// </summary>
+        public DateTime ReceivingTime { get; set; }
+
+        /// <summary> 
+        ///  发送IP
+        /// </summary>
+        public string IP { get; set; }
+
+        /// <summary> 
+        ///  任务处理状态 1未处理 2 处理中 
+        /// </summary>
+        public int? TaskStatus { get; set; }
+
+        /// <summary> 
+        ///  处理开始时间
+        /// </summary>
+        public DateTime? StartTime { get; set; }
+
+        /// <summary> 
+        ///  处理结束时间
+        /// </summary>
+        public DateTime? EndTime { get; set; }
+
+        /// <summary> 
+        ///  处理任务机器IP
+        /// </summary>
+        public string TaskIP { get; set; }
+
+        /// <summary> 
+        ///  处理任务机器MAC
+        /// </summary>
+        public string TaskMac { get; set; }
+
+        /// <summary> 
+        ///  处理错误信息
+        /// </summary>
+        public string TaskMsg { get; set; }
+
+        /// <summary> 
+        ///  
+        /// </summary>
+        public string MessageID { get; set; }
+
+        /// <summary> 
+        ///  
+        /// </summary>
+        public string MessageType { get; set; }
+
+        /// <summary> 
+        ///  备注
+        /// </summary>
+        public string Remark { get; set; }
+
+
+        /// <summary>
+        /// 排序
+        /// </summary>
+        public int Sequeue { get; set; }
+    }
+}
+//ID,SeqNo,SourceID,MsgConID,MsgContent,ReplyMsg,ReceivingTime,IP,TaskStatus,StartTime,EndTime,TaskIP,TaskMac,TaskMsg,MessageID,MessageType,Remark,

+ 126 - 0
MediII.Adapter.ReceiveToKCModel/HL7_ScanEntity.cs

@@ -0,0 +1,126 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+
+
+namespace  MediII.Adapter.ReceiveToKCModel
+{ 
+
+
+	[Serializable]
+	public partial class HL7_ScanEntity:BaseEntity
+	{
+
+			/// <summary> 
+			///  主键Guid
+			/// </summary>
+			public string  ID { get; set; } 
+
+			/// <summary> 
+			///  流水号 自增长
+			/// </summary>
+			public int  SeqNo { get; set; } 
+
+			/// <summary> 
+			///  病历号
+			/// </summary>
+			public string  ChartNo { get; set; } 
+
+			/// <summary> 
+			///  就诊ID
+			/// </summary>
+			public string  VisitNo { get; set; } 
+
+			/// <summary> 
+			///  业务表主键1
+			/// </summary>
+			public string  OtherNo1 { get; set; } 
+
+			/// <summary> 
+			///  业务表主键2
+			/// </summary>
+			public string  OtherNo2 { get; set; } 
+
+			/// <summary> 
+			///  业务表主键3
+			/// </summary>
+			public string  OtherNo3 { get; set; } 
+
+			/// <summary> 
+			///  业务表名称
+			/// </summary>
+			public string  OtherName { get; set; } 
+
+			/// <summary> 
+			///  任务类型,由HL7定义
+			/// </summary>
+			public string  TaskType { get; set; } 
+
+			/// <summary> 
+			///  任务状态 1未处理 2 处理中 3失
+			/// </summary>
+			public int?  TaskStatus { get; set; } 
+
+			/// <summary> 
+			///  更新人
+			/// </summary>
+			public string  UpdateUser { get; set; } 
+
+			/// <summary> 
+			///  更新时间
+			/// </summary>
+			public DateTime?  UpdateTime { get; set; } 
+
+			/// <summary> 
+			///  保留字段1
+			/// </summary>
+			public string  Reserve1 { get; set; } 
+
+			/// <summary> 
+			///  保留字段2
+			/// </summary>
+			public string  Reserve2 { get; set; } 
+
+			/// <summary> 
+			///  保留字段3
+			/// </summary>
+			public string  Reserve3 { get; set; } 
+
+			/// <summary> 
+			///  操作任务机器IP      操作任
+			/// </summary>
+			public string  IP { get; set; } 
+
+			/// <summary> 
+			///  操作任务机器MAC   
+			/// </summary>
+			public string  MAC { get; set; } 
+
+			/// <summary> 
+			///  任务开始时间
+			/// </summary>
+			public DateTime?  BeginTime { get; set; } 
+
+			/// <summary> 
+			///  任务结束时间
+			/// </summary>
+			public DateTime?  EndTime { get; set; } 
+
+			/// <summary> 
+			///  任务结果
+			/// </summary>
+			public int?  Result { get; set; } 
+
+			/// <summary> 
+			///  任务失败原因
+			/// </summary>
+			public string  TaskMsg { get; set; } 
+
+			/// <summary> 
+			///  结果返回时间
+			/// </summary>
+			public DateTime?  ResultTime { get; set; } 
+	}
+}
+//ID,SeqNo,ChartNo,VisitNo,OtherNo1,OtherNo2,OtherNo3,OtherName,TaskType,TaskStatus,UpdateUser,UpdateTime,Reserve1,Reserve2,Reserve3,IP,MAC,BeginTime,EndTime,Result,TaskMsg,ResultTime,

+ 66 - 0
MediII.Adapter.ReceiveToKCModel/HL7_SendMessageEntity.cs

@@ -0,0 +1,66 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+
+
+namespace  MediII.Adapter.ReceiveToKCModel
+{ 
+
+
+	[Serializable]
+	public partial class HL7_SendMessageEntity:BaseEntity
+	{
+
+			/// <summary> 
+			///  主键
+			/// </summary>
+			public string  ID { get; set; } 
+
+			/// <summary> 
+			///  HL7_Scan主键
+			/// </summary>
+			public string  ScanID { get; set; } 
+
+			/// <summary> 
+			///  顺序 自增长
+			/// </summary>
+			public int  SeqNo { get; set; } 
+
+			/// <summary> 
+			///  消息类型
+			/// </summary>
+			public string  MessageType { get; set; } 
+
+			/// <summary> 
+			///  消息内容
+			/// </summary>
+			public string  MsgContent { get; set; } 
+
+			/// <summary> 
+			///  发送时间
+			/// </summary>
+			public DateTime?  SendTime { get; set; } 
+
+			/// <summary> 
+			///  重复次数
+			/// </summary>
+			public int?  RepeatTimes { get; set; } 
+
+			/// <summary> 
+			///  回复内容
+			/// </summary>
+			public string  ReplyContent { get; set; } 
+
+			/// <summary> 
+			///  回复时间
+			/// </summary>
+			public DateTime?  ReplyTime { get; set; } 
+
+			/// <summary> 
+			///  处理标志 
+			/// </summary>
+			public int?  TaskStatus { get; set; } 
+	}
+}
+//ID,ScanID,SeqNo,MessageType,MsgContent,SendTime,RepeatTimes,ReplyContent,ReplyTime,TaskStatus,

+ 68 - 0
MediII.Adapter.ReceiveToKCModel/MediII.Adapter.ReceiveToKCModel.csproj

@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{F182AC2B-A0D5-40D2-89AF-8D547606B6AC}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>MediII.Adapter.ReceiveToKCModel</RootNamespace>
+    <AssemblyName>MediII.Adapter.ReceiveToKCModel</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="BaseEntity.cs" />
+    <Compile Include="dic_department.cs" />
+    <Compile Include="his_doct.cs" />
+    <Compile Include="HL7_MessageSetEntity.cs" />
+    <Compile Include="HL7_ReceiveEntity.cs" />
+    <Compile Include="HL7_ScanEntity.cs" />
+    <Compile Include="HL7_SendMessageEntity.cs" />
+    <Compile Include="item_his_original.cs" />
+    <Compile Include="menzhen_medical_order.cs" />
+    <Compile Include="original_data_menzhen.cs" />
+    <Compile Include="original_data_zhuyuan.cs" />
+    <Compile Include="patient_trans.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="v_zhencha.cs" />
+    <Compile Include="zhuyuan_medical_order.cs" />
+    <Compile Include="zhuyuan_original.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 36 - 0
MediII.Adapter.ReceiveToKCModel/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的常规信息通过以下
+// 特性集控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("MediII.Adapter.ReceiveToKCModel")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("MediII.Adapter.ReceiveToKCModel")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 使此程序集中的类型
+// 对 COM 组件不可见。  如果需要从 COM 访问此程序集中的类型,
+// 则将该类型上的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("6ff93c25-5666-4619-a817-7bb0ecc44d98")]
+
+// 程序集的版本信息由下面四个值组成: 
+//
+//      主版本
+//      次版本 
+//      生成号
+//      修订号
+//
+// 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
+// 方法是按如下所示使用“*”: 
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 19 - 0
MediII.Adapter.ReceiveToKCModel/dic_department.cs

@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+
+namespace MediII.Adapter.ReceiveToKCModel
+{
+    [Serializable]
+    public class dic_department : BaseEntity
+	{
+		  public Int64 No {  get; set;}
+  public string id {  get; set;}
+  public string name {  get; set;}
+  public string status {  get; set;}
+  public string search_code {  get; set;}
+
+	}
+}

+ 20 - 0
MediII.Adapter.ReceiveToKCModel/his_doct.cs

@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+
+namespace MediII.Adapter.ReceiveToKCModel
+{
+    [Serializable]
+    public class his_doct : BaseEntity
+	{
+		  public Int64 No {  get; set;}
+  public string DOCT_CODE {  get; set;}
+  public string DOCT_NAME {  get; set;}
+  public string HIS_DEPT_CODE {  get; set;}
+  public string HIS_DEPT_NAME {  get; set;}
+  public string status {  get; set;}
+
+	}
+}

+ 24 - 0
MediII.Adapter.ReceiveToKCModel/item_his_original.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+
+namespace MediII.Adapter.ReceiveToKCModel
+{
+    [Serializable]
+    public partial class item_his_original : BaseEntity
+	{
+		  public Int64 No {  get; set;}
+  public string item_code {  get; set;}
+  public string yn_code {  get; set;}
+  public string item_name {  get; set;}
+  public string fee_code {  get; set;}
+  public string fee_name {  get; set;}
+  public string spell_code {  get; set;}
+  public Decimal price {  get; set;}
+  public string status {  get; set;}
+  public DateTime status_date {  get; set;}
+
+	}
+}

+ 26 - 0
MediII.Adapter.ReceiveToKCModel/menzhen_medical_order.cs

@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+
+namespace MediII.Adapter.ReceiveToKCModel
+{
+    [Serializable]
+    public class menzhen_medical_order : BaseEntity
+	{
+		  public Int64 No {  get; set;}
+  public string id {  get; set;}
+  public string medical_order_id {  get; set;}
+  public DateTime fee_date {  get; set;}
+  public string yfdm {  get; set;}
+  public string yfmc {  get; set;}
+  public string cflx {  get; set;}
+  public string cfje {  get; set;}
+  public string sycfbz {  get; set;}
+  public string yjts {  get; set;}
+  public string kdksdm {  get; set;}
+  public string kdys {  get; set;}
+
+	}
+}

+ 29 - 0
MediII.Adapter.ReceiveToKCModel/original_data_menzhen.cs

@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+
+namespace MediII.Adapter.ReceiveToKCModel
+{
+    [Serializable]
+    public class original_data_menzhen : BaseEntity
+	{
+		  public Int64 No {  get; set;}
+  public string mz_id {  get; set;}
+  public string patient_id {  get; set;}
+  public DateTime fee_date {  get; set;}
+  public string order_unit_id {  get; set;}
+  public string order_doctor_id {  get; set;}
+  public string exec_unit_id {  get; set;}
+  public string exec_doctor_id {  get; set;}
+  public string fee_type_id {  get; set;}
+  public string fee_type_name {  get; set;}
+  public string item_id {  get; set;}
+  public string item_name {  get; set;}
+  public Decimal item_quantity {  get; set;}
+  public Decimal price {  get; set;}
+  public Decimal fee {  get; set;}
+
+	}
+}

+ 33 - 0
MediII.Adapter.ReceiveToKCModel/original_data_zhuyuan.cs

@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+
+namespace MediII.Adapter.ReceiveToKCModel
+{
+    [Serializable]
+    public class original_data_zhuyuan : BaseEntity
+	{
+		  public Int64 No {  get; set;}
+  public string patient_zyh {  get; set;}
+  public string patient_id {  get; set;}
+  public DateTime fee_date {  get; set;}
+  public string order_unit_id {  get; set;}
+  public string order_doctor_id {  get; set;}
+  public string exec_unit_id {  get; set;}
+  public string exec_doctor_id {  get; set;}
+  public string patient_unit_id {  get; set;}
+  public string bed_doctor_id {  get; set;}
+  public string bq_id {  get; set;}
+  public string bed_id {  get; set;}
+  public string fee_type_id {  get; set;}
+  public string fee_type_name {  get; set;}
+  public string item_id {  get; set;}
+  public string item_name {  get; set;}
+  public Decimal item_quantity {  get; set;}
+  public Decimal price {  get; set;}
+  public Decimal fee {  get; set;}
+
+	}
+}

+ 24 - 0
MediII.Adapter.ReceiveToKCModel/patient_trans.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+
+namespace MediII.Adapter.ReceiveToKCModel
+{
+    [Serializable]
+    public class patient_trans : BaseEntity
+	{
+		  public Int64 No {  get; set;}
+  public string patient_zyh {  get; set;}
+  public string patient_id {  get; set;}
+  public DateTime TRANS_DATE {  get; set;}
+  public string TRANS_UNIT {  get; set;}
+  public string TRANS_BQ {  get; set;}
+  public string TRANS_BED {  get; set;}
+  public string zk_UNIT {  get; set;}
+  public string zk_BQ {  get; set;}
+  public string zk_BED {  get; set;}
+
+	}
+}

+ 25 - 0
MediII.Adapter.ReceiveToKCModel/v_zhencha.cs

@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+
+namespace MediII.Adapter.ReceiveToKCModel
+{
+    [Serializable]
+    public class v_zhencha : BaseEntity
+	{
+		  public Int64 No {  get; set;}
+  public DateTime fee_date {  get; set;}
+  public string unit_id {  get; set;}
+  public string unit_name {  get; set;}
+  public string doct_code {  get; set;}
+  public string doct_name {  get; set;}
+  public string item_id {  get; set;}
+  public string item_name {  get; set;}
+  public Decimal item_quantity {  get; set;}
+  public Decimal fee {  get; set;}
+  public string fee_kind {  get; set;}
+
+	}
+}

+ 26 - 0
MediII.Adapter.ReceiveToKCModel/zhuyuan_medical_order.cs

@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+
+namespace MediII.Adapter.ReceiveToKCModel
+{
+    [Serializable]
+    public class zhuyuan_medical_order : BaseEntity
+	{
+		  public Int64 No {  get; set;}
+  public string id {  get; set;}
+  public string medical_order_id {  get; set;}
+  public DateTime fee_date {  get; set;}
+  public string yfdm {  get; set;}
+  public string yfmc {  get; set;}
+  public string cflx {  get; set;}
+  public string cfje {  get; set;}
+  public string cfdzs {  get; set;}
+  public string yjts {  get; set;}
+  public string kdksdm {  get; set;}
+  public string kdys {  get; set;}
+
+	}
+}

+ 40 - 0
MediII.Adapter.ReceiveToKCModel/zhuyuan_original.cs

@@ -0,0 +1,40 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+
+namespace MediII.Adapter.ReceiveToKCModel
+{
+    [Serializable]
+    public class zhuyuan_original : BaseEntity
+	{
+		  public Int64 No {  get; set;}
+  public string patient_zyh {  get; set;}
+  public string patient_id {  get; set;}
+  public DateTime RY_DATE {  get; set;}
+  public string RY_UNIT {  get; set;}
+  public string RY_BQ {  get; set;}
+  public string RY_BED {  get; set;}
+  public DateTime CY_DATE {  get; set;}
+  public string CY_UNIT {  get; set;}
+  public string CY_BQ {  get; set;}
+  public string age {  get; set;}
+  public string patient_name {  get; set;}
+  public string Sex {  get; set;}
+  public string address {  get; set;}
+  public string JG_DOCT_GH {  get; set;}
+  public string SZ_DOCT_GH {  get; set;}
+  public string Nurse_grade {  get; set;}
+  public string ICD_CODE_RY1 {  get; set;}
+  public string ICD_CODE_RY2 {  get; set;}
+  public string ICD_CODE_RY3 {  get; set;}
+  public string ICD_CODE_RY4 {  get; set;}
+  public string ICD_CODE_CY1 {  get; set;}
+  public string ICD_CODE_CY2 {  get; set;}
+  public string ICD_CODE_CY3 {  get; set;}
+  public string ICD_CODE_CY4 {  get; set;}
+  public string CY_Kind {  get; set;}
+
+	}
+}

+ 23 - 0
MediII.Adapter.Scan.UE/DebugScanner.cs

@@ -0,0 +1,23 @@
+using System.Collections.Generic;
+using MediII.Adapter.ReceiveToKCModel;
+
+namespace MediII.Adapter.BizComponent.UE
+{
+    public class DebugScanner : DefaultDBScanner
+    {
+        protected override string GetMessageType()
+        {
+            return string.Empty;
+        }
+
+        /// <summary>
+        /// 调试消息并更新表"HL7_Receive"
+        /// </summary>
+        /// <param name="entity"></param>
+        public void DebugMsg(HL7_ScanEntity entity,string msgType)
+        {
+            var list = new List<HL7_ScanEntity> { entity };
+            //base.DebugMsg(list, msgType);
+        }
+    }
+}

+ 274 - 0
MediII.Adapter.Scan.UE/DefaultDBScanner.cs

@@ -0,0 +1,274 @@
+using MediII.Adapter.ReceiveToKCModel;
+using MediII.Adapter.Scanner;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using Microsoft.Practices.EnterpriseLibrary.Data;
+using NHapi.Base.Parser;
+using MediII.Adapter.BizComponent.Base;
+using System.Data;
+using System.Diagnostics;
+using IL.Common;
+
+namespace MediII.Adapter.BizComponent.UE
+{
+    public abstract class DefaultDBScanner : DBScaner
+    {
+        private int SearchNum
+        {
+            get
+            {
+                var searchNum = System.Configuration.ConfigurationManager.AppSettings["SearchNum"];
+                int num = 0;
+                if (!int.TryParse(searchNum, out num))
+                {
+                    num = 10;
+                }
+                return num;
+            }
+        }
+        /// <summary>
+        /// 门诊定时类型,0=正常;>0  隔N天
+        /// </summary>
+        private int OutSearchType
+        {
+            get
+            {
+                var type = System.Configuration.ConfigurationManager.AppSettings["OutSearchType"];
+                int rtn = 0;
+                if (!int.TryParse(type, out rtn))
+                {
+                    rtn = 0;
+                }
+                return rtn;
+            }
+        }
+
+        private int DFTSearchType
+        {
+            get
+            {
+                var type = System.Configuration.ConfigurationManager.AppSettings["DFTSearchType"];
+                int rtn = 30;
+                if (!int.TryParse(type, out rtn))
+                {
+                    rtn = 30;
+                }
+                return rtn;
+            }
+        }
+        /// <summary>
+        /// 住院定时类型,0=正常;>0 隔N天
+        /// </summary>
+        private int InSearchType
+        {
+            get
+            {
+                var type = System.Configuration.ConfigurationManager.AppSettings["InSearchType"];
+                int rtn = 0;
+                if (!int.TryParse(type, out rtn))
+                {
+                    rtn = 0;
+                }
+                return rtn;
+            }
+        }
+
+        protected override long OnDo(DateTime dtEventTime, Action<LogModel> setLog)
+        {
+
+            Stopwatch stopwatch = new Stopwatch();
+
+
+            var type = GetMessageType();
+            stopwatch.Start();
+            try
+            {
+
+                if (setLog != null)
+                    setLog(new LogModel { Message = "开始一次消息处理扫描 消息类型:" + type });
+
+                if (type == "DFT^B01") //字典解析
+                {
+                    var sql = @" SELECT ID,SeqNo,ChartNo,VisitNo,OtherNo1,OtherNo2,OtherNo3,OtherName,TaskType,TaskStatus,
+              UpdateUser,UpdateTime,Reserve1,Reserve2,Reserve3,IP,MAC,BeginTime,EndTime,Result,TaskMsg,ResultTime
+              FROM dbo.HL7_Scan WITH(NOLOCK)  
+              WHERE TaskStatus=1 AND TaskType='{0}' AND OtherNo1 <=(GETDATE()-{1})
+              ORDER BY SeqNo ASC";
+
+                    sql = string.Format(sql, type, DFTSearchType);
+                    try
+                    {
+                        var listRow = SqlDataAccess.ExecuteSqlStringAccessor<HL7_ScanEntity>(ctx, sql).Take(1).ToList();
+                        if (listRow.Count() > 0)
+                        {
+                            Process(listRow, setLog, type);
+                        }
+                    }
+                    catch (Exception ex)
+                    {
+                        LogHelper.LogError(ex, LogCatagories.AdapterScan);
+                        throw ex;
+                    }
+                }
+                else
+                {
+                    RunExec(type, setLog);
+                } 
+            }
+            finally
+            {
+                stopwatch.Stop();
+
+                //LogHelper.LogError(string.Format("{0}耗时{1}-->{2}", type, stopwatch.Elapsed, stopwatch.ElapsedTicks), LogCatagories.AdapterScan);
+            }
+
+            return 1;
+        }
+
+        private void RunExec(string type, Action<LogModel> setLog)
+        {
+            var num = SearchNum;
+            var orderSeq = string.Empty;
+            var timeSeq = string.Empty;
+            if (type == "MFN")
+            {
+                orderSeq = " Sequeue ASC,";
+            }
+            if (type.Substring(0, 7) == "ADT^A01" || type.Substring(0, 7) == "ADT^A02")
+            {
+                if (InSearchType > 0)
+                {
+                    timeSeq = string.Format(" AND OtherNo1 <=(GETDATE()-{0})", InSearchType);
+                }
+            }
+            if (type.Substring(0, 7) == "ADT^A04" || type.Substring(0, 7) == "ADT^A05")
+            {
+                if (OutSearchType > 0)
+                {
+                    timeSeq = string.Format(" AND OtherNo1 <=(GETDATE()-{0})", OutSearchType);
+                }
+            }
+            //var sql = @"SELECT top {0} ID , SeqNo , SourceID ,MsgConID ,  MsgContent ,ReplyMsg ,   ReceivingTime ,       IP ,TaskStatus ,StartTime ,EndTime ,TaskIP , TaskMac ,TaskMsg ,MessageID ,MessageType ,Remark ,Sequeue  FROM dbo.HL7_Receive WITH(NOLOCK)  WHERE TaskStatus='1' and MessageID='{1}' ORDER BY {2} SeqNo ASC ";
+            var sql = @" SELECT TOP {0} ID,SeqNo,ChartNo,VisitNo,OtherNo1,OtherNo2,OtherNo3,OtherName,TaskType,TaskStatus,
+              UpdateUser,UpdateTime,Reserve1,Reserve2,Reserve3,IP,MAC,BeginTime,EndTime,Result,TaskMsg,ResultTime
+              FROM dbo.HL7_Scan WITH(NOLOCK)  
+              WHERE TaskStatus=1 AND IP IS null  AND MAC IS NULL AND TaskType='{1}'  {3}
+              ORDER BY {2} SeqNo ASC";
+
+            sql = string.Format(sql, num, type, orderSeq, timeSeq);
+            try
+            {
+                var listRow = SqlDataAccess.ExecuteSqlStringAccessor<HL7_ScanEntity>(ctx, sql).Take(num).ToList();
+                if (listRow.Count() > 0)
+                {
+                    Process(listRow, setLog, type);
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.LogError(ex, LogCatagories.AdapterScan);
+                throw ex;
+            }
+        }
+
+        private void Process(IEnumerable<HL7_ScanEntity> listRow, Action<LogModel> setLog,string msgType)
+        {
+            listRow.ToList().ForEach(o =>
+            {
+
+                //验证
+                var model = GetListRow(o.ID);
+                if (null != model)
+                {
+                    try
+                    {
+                        if (setLog != null)
+                            setLog(new LogModel { Message = o.VisitNo, MessageID = o.TaskType });
+
+
+                        SetStartBiz(o.ID);
+                        //PipeParser parser = new PipeParser();
+                        //string mesStruct = parser.GetMessageStructure(o.MsgContent).Substring(0, 3);
+
+                        //var behavior = BizComponentFactory.GetBizComponent(mesStruct);
+                        var behavior = BizComponentFactory.GetBizComponent(msgType.Substring(0,msgType.IndexOf('^')));
+                        var errMsg = behavior.Process(o.VisitNo, o.TaskType,o.ID);
+                        SetEndBiz(o.ID, errMsg);
+
+                    }
+                    catch (Exception ex)
+                    {
+                        if (setLog != null)
+                            setLog(new LogModel { Message = o.VisitNo, MessageID = o.TaskType, ErrorMsg = "消息处理错误 :" + ex.Message });
+                        SetEndBiz(o.ID, ex.Message);
+                    }
+
+                }
+            });
+        }
+
+
+        /// <summary>
+        /// 获取消息类型
+        /// </summary>
+        /// <returns></returns>
+        protected abstract string GetMessageType();
+
+
+
+        /// <summary>
+        /// 获取当前记录
+        /// </summary>
+        /// <param name="id">id</param>
+        /// <returns></returns>
+        protected HL7_ScanEntity GetListRow(string id)
+        {
+            var sql = "SELECT *  FROM dbo.HL7_Scan  WHERE TaskStatus='1'  and ID='" + id + "'";
+            var model = SqlDataAccess.ExecuteSqlStringAccessor<HL7_ScanEntity>(ctx, sql).Take(1).FirstOrDefault();
+            return model;
+
+        }
+
+
+        //开始时间
+        protected int SetStartBiz(string id)
+        {
+            var sql = "UPDATE dbo.HL7_Scan SET BeginTime=GETDATE() , TaskStatus='2',IP=@TaskIP,Mac=@TaskMac WHERE  ID=@ID";
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
+            SqlDataAccess.AddInParameter(ctx, cmd, "ID", DbType.String, id);
+            SqlDataAccess.AddInParameter(ctx, cmd, "TaskIP", DbType.String, NetHelper.GetIP());
+            SqlDataAccess.AddInParameter(ctx, cmd, "TaskMac", DbType.String, NetHelper.GetMacAddress());
+            return SqlDataAccess.ExecuteNonQuery(ctx, cmd);
+        }
+
+
+        //结束时间
+        protected int SetEndBiz(string id, string errMsg)
+        {
+            var sql = "UPDATE dbo.HL7_Scan SET EndTime=GETDATE(),TaskStatus=@TaskStatus,TaskMsg=@TaskMsg WHERE  ID=@ID";
+            var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
+            SqlDataAccess.AddInParameter(ctx, cmd, "ID", DbType.String, id);
+            if (!string.IsNullOrEmpty(errMsg))
+            {
+                SqlDataAccess.AddInParameter(ctx, cmd, "TaskMsg", DbType.String, errMsg);
+                SqlDataAccess.AddInParameter(ctx, cmd, "TaskStatus", DbType.Int32, 3);
+            }
+            else
+            {
+                SqlDataAccess.AddInParameter(ctx, cmd, "TaskMsg", DbType.String, DBNull.Value);
+                SqlDataAccess.AddInParameter(ctx, cmd, "TaskStatus", DbType.Int32, 4);
+            }
+
+            return SqlDataAccess.ExecuteNonQuery(ctx, cmd);
+        }
+
+        public void DebugMsg(IEnumerable<HL7_ReceiveEntity> list,string msgType)
+        {
+            //Process(list, null,msgType);
+        }
+
+    }
+}

+ 24 - 0
MediII.Adapter.Scan.UE/HL7_A01B03_Scanner.cs

@@ -0,0 +1,24 @@
+
+using MediII.Adapter.Scanner;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Transactions;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+using NHapi.Base.Parser;
+using MediII.Adapter.BizComponent.Base;
+using IL.Common;
+using MediII.Adapter.ReceiveToKCModel;
+
+namespace MediII.Adapter.BizComponent.UE
+{
+    public class HL7_A01B03_Scanner : DefaultDBScanner
+    {
+        protected override string GetMessageType()
+        {
+            return "ADT^A01[B03]";
+        }
+    }
+}

+ 24 - 0
MediII.Adapter.Scan.UE/HL7_A01B04_Scanner.cs

@@ -0,0 +1,24 @@
+
+using MediII.Adapter.Scanner;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Transactions;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+using NHapi.Base.Parser;
+using MediII.Adapter.BizComponent.Base;
+using IL.Common;
+using MediII.Adapter.ReceiveToKCModel;
+
+namespace MediII.Adapter.BizComponent.UE
+{
+    public class HL7_A01B04_Scanner : DefaultDBScanner
+    {
+        protected override string GetMessageType()
+        {
+            return "ADT^A01[B04]";
+        }
+    }
+}

+ 24 - 0
MediII.Adapter.Scan.UE/HL7_A02B01_Scanner.cs

@@ -0,0 +1,24 @@
+
+using MediII.Adapter.Scanner;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Transactions;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+using NHapi.Base.Parser;
+using MediII.Adapter.BizComponent.Base;
+using IL.Common;
+using MediII.Adapter.ReceiveToKCModel;
+
+namespace MediII.Adapter.BizComponent.UE
+{
+    public class HL7_A02B01_Scanner : DefaultDBScanner
+    {
+        protected override string GetMessageType()
+        {
+            return "ADT^A02[B01]";
+        }
+    }
+}

+ 24 - 0
MediII.Adapter.Scan.UE/HL7_A04B03_Scanner.cs

@@ -0,0 +1,24 @@
+
+using MediII.Adapter.Scanner;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Transactions;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+using NHapi.Base.Parser;
+using MediII.Adapter.BizComponent.Base;
+using IL.Common;
+using MediII.Adapter.ReceiveToKCModel;
+
+namespace MediII.Adapter.BizComponent.UE
+{
+    public class HL7_A04B03_Scanner : DefaultDBScanner
+    {
+        protected override string GetMessageType()
+        {
+            return "ADT^A04[B03]";
+        }
+    }
+}

+ 24 - 0
MediII.Adapter.Scan.UE/HL7_A05B01_Scanner.cs

@@ -0,0 +1,24 @@
+
+using MediII.Adapter.Scanner;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Transactions;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+using NHapi.Base.Parser;
+using MediII.Adapter.BizComponent.Base;
+using IL.Common;
+using MediII.Adapter.ReceiveToKCModel;
+
+namespace MediII.Adapter.BizComponent.UE
+{
+    public class HL7_A05B01_Scanner : DefaultDBScanner
+    {
+        protected override string GetMessageType()
+        {
+            return "ADT^A05[B01]";
+        }
+    }
+}

+ 24 - 0
MediII.Adapter.Scan.UE/HL7_DFT_Scanner.cs

@@ -0,0 +1,24 @@
+
+using MediII.Adapter.Scanner;
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Transactions;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+using NHapi.Base.Parser;
+using MediII.Adapter.BizComponent.Base;
+using IL.Common;
+using MediII.Adapter.ReceiveToKCModel;
+
+namespace MediII.Adapter.BizComponent.UE
+{
+    public class HL7_DFT_Scanner : DefaultDBScanner
+    {
+        protected override string GetMessageType()
+        {
+            return "DFT^B01";
+        }
+    }
+}

+ 97 - 0
MediII.Adapter.Scan.UE/HL7_TimeOut_Scanner.cs

@@ -0,0 +1,97 @@
+using MediII.Adapter.ReceiveToKCModel;
+using MediII.Adapter.Scanner;
+using System;
+using System.Configuration;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Data;
+using IL.Common;
+
+namespace MediII.Adapter.BizComponent.UE
+{
+    public class HL7_TimeTask_Scanner : DBScaner
+    {
+        //定时任务
+        private int TaskRunTime = 5;
+
+        public HL7_TimeTask_Scanner()
+        {
+
+            var tm = ConfigurationManager.AppSettings["TaskRunTime"];
+            if (!int.TryParse(tm, out TaskRunTime))
+            {
+                TaskRunTime = 5;
+            }
+
+        }
+
+
+        protected override long OnDo(DateTime dtEventTime, Action<LogModel> setLog)
+        {
+            if (setLog != null)
+                setLog(new LogModel { Message = "开始一次数据库错误消息处理扫描 " });
+            var sql = @" 
+                        SELECT *   
+                        FROM    HL7_Platform.dbo.HL7_Scan with(nolock)
+                        WHERE   1 = 1 
+                                AND ( TaskMsg LIKE '%Timeout 时间已到。%'
+                                        OR TaskMsg LIKE '%此操作对该事务的状态无效%'
+                                        OR TaskMsg LIKE '%请重新运行该事务。%' )
+                                AND (ErrNum<4 or ErrNum is null) 
+                                AND TaskStatus = 3
+                                AND OtherNo1 > DATEADD(dy,-{0},getdate()) 
+                        ORDER BY SeqNo DESC  ";
+            sql = string.Format(sql, TaskRunTime);//操作中数据
+            try
+            {
+                var listRow = SqlDataAccess.ExecuteSqlStringAccessor<HL7_ScanEntity>(ctx, sql).Take(100).ToList();
+                if (listRow.Any())
+                {
+                    process(listRow, setLog); 
+                }
+            }
+            catch (Exception ex)
+            {
+                if (setLog != null)
+                    setLog(new LogModel { Message = "重置数据库错误消息发生错误", ErrorMsg ="sql:"+ sql+"\r\n"+ ex.Message + "\r\n" + ex.StackTrace });
+            }
+            return 1;
+        }
+
+
+        private void process(IEnumerable<HL7_ScanEntity> listRow, Action<LogModel> setLog)
+        {
+            listRow.ToList().ForEach(o =>
+            {
+                try
+                {
+                    if (setLog != null)
+                        setLog(new LogModel { Message = "重置数据库错误消息:" , MessageID = o.TaskType });
+
+                    var sql = @"UPDATE dbo.HL7_Scan SET TaskStatus=1,EndTime = NULL ,
+	        IP = NULL ,
+	        MAC = NULL ,
+        ResultTime = NULL,ErrNum=ISNULL(ErrNum,0)+1 WHERE ID=@ID";
+                    var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
+                    SqlDataAccess.AddInParameter(ctx, cmd, "ID", DbType.String, o.ID);
+                    SqlDataAccess.ExecuteNonQuery(ctx, cmd);
+                }
+                catch (Exception ex)
+                {
+                    if (setLog != null)
+                        setLog(new LogModel
+                        {
+                            Message = string.Format("重置数据库错误消息发生错误:HL7ReceiveID:{0}", o.ID),
+                            ErrorMsg = ex.Message + "\r\n" + ex.StackTrace
+                        });
+                }
+
+            });
+        }
+
+
+
+    }
+}

+ 94 - 0
MediII.Adapter.Scan.UE/HL7_TimeTask_Scanner.cs

@@ -0,0 +1,94 @@
+using MediII.Adapter.ReceiveToKCModel;
+using MediII.Adapter.Scanner;
+using System;
+using System.Configuration;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Data;
+using IL.Common;
+
+namespace MediII.Adapter.BizComponent.UE
+{
+    public class HL7_TimeOut_Scanner : DBScaner
+    {
+
+        private int TaskRunTime = 5;
+
+        public HL7_TimeOut_Scanner()
+        {
+
+            var tm = ConfigurationManager.AppSettings["TaskRunTime"];
+            if (!int.TryParse(tm, out TaskRunTime))
+            {
+                TaskRunTime = 5;
+            }
+
+        }
+
+
+        protected override long OnDo(DateTime dtEventTime, Action<LogModel> setLog)
+        {
+            if (setLog != null)
+                setLog(new LogModel { Message = "开始一次数据库错误消息处理扫描 " });
+            var sql = @" 
+                        SELECT *   
+                        FROM    HL7_Platform.dbo.HL7_Scan with(nolock)
+                        WHERE   1 = 1 
+                                AND ( TaskMsg LIKE '%Timeout 时间已到。%'
+                                        OR TaskMsg LIKE '%此操作对该事务的状态无效%'
+                                        OR TaskMsg LIKE '%请重新运行该事务。%' )
+                                AND (ErrNum<4 or ErrNum is null) 
+                                AND TaskStatus = 3
+                                AND OtherNo1 > DATEADD(dy,-{0},getdate()) 
+                        ORDER BY SeqNo DESC  ";
+            sql = string.Format(sql, TaskRunTime);//操作中数据
+            try
+            {
+                var listRow = SqlDataAccess.ExecuteSqlStringAccessor<HL7_ScanEntity>(ctx, sql).Take(100).ToList();
+                if (listRow.Any())
+                {
+                    process(listRow, setLog); 
+                }
+            }
+            catch (Exception ex)
+            {
+                if (setLog != null)
+                    setLog(new LogModel { Message = "重置数据库错误消息发生错误", ErrorMsg ="sql:"+ sql+"\r\n"+ ex.Message + "\r\n" + ex.StackTrace });
+            }
+            return 1;
+        }
+
+
+        private void process(IEnumerable<HL7_ScanEntity> listRow, Action<LogModel> setLog)
+        {
+            listRow.ToList().ForEach(o =>
+            {
+                try
+                {
+                    if (setLog != null)
+                        setLog(new LogModel { Message = "重置数据库错误消息:" , MessageID = o.TaskType });
+
+                    var sql = "UPDATE dbo.HL7_Scan SET TaskStatus=1,StartTime=NULL,TaskIP=NULL,TaskMsg = null, TaskMac=NULL,ErrNum=ISNULL(ErrNum,0)+1 WHERE ID=@ID";
+                    var cmd = SqlDataAccess.GetSqlStringCommand(ctx, sql);
+                    SqlDataAccess.AddInParameter(ctx, cmd, "ID", DbType.String, o.ID);
+                    SqlDataAccess.ExecuteNonQuery(ctx, cmd);
+                }
+                catch (Exception ex)
+                {
+                    if (setLog != null)
+                        setLog(new LogModel
+                        {
+                            Message = string.Format("重置数据库错误消息发生错误:HL7ReceiveID:{0}", o.ID),
+                            ErrorMsg = ex.Message + "\r\n" + ex.StackTrace
+                        });
+                }
+
+            });
+        }
+
+
+
+    }
+}

+ 132 - 0
MediII.Adapter.Scan.UE/MediII.Adapter.BizComponent.UE.csproj

@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{0786BB9F-0092-44A2-9CA0-263F5A0AA86E}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>MediII.Adapter.BizComponent.UE</RootNamespace>
+    <AssemblyName>MediII.Adapter.BizComponent.UE</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SccProjectName>
+    </SccProjectName>
+    <SccLocalPath>
+    </SccLocalPath>
+    <SccAuxPath>
+    </SccAuxPath>
+    <SccProvider>
+    </SccProvider>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DocumentationFile>
+    </DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="MediII.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\dll\MediII.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=e44a2bc38ed2c13c, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\dll\Microsoft.Practices.EnterpriseLibrary.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\dll\Microsoft.Practices.EnterpriseLibrary.Data.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=e44a2bc38ed2c13c, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\dll\Microsoft.Practices.EnterpriseLibrary.Logging.dll</HintPath>
+    </Reference>
+    <Reference Include="NHapi.Base, Version=2.3.0.0, Culture=neutral, PublicKeyToken=d0d8ea960a3440eb, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\dll\NHapi.Base.dll</HintPath>
+    </Reference>
+    <Reference Include="NHapi.Model.V24, Version=2.3.0.0, Culture=neutral, PublicKeyToken=d0d8ea960a3440eb, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\dll\NHapi.Model.V24.dll</HintPath>
+    </Reference>
+    <Reference Include="NHapi.Model.V25, Version=2.3.0.0, Culture=neutral, PublicKeyToken=d0d8ea960a3440eb, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\dll\NHapi.Model.V25.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Transactions" />
+    <Reference Include="System.XML" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="DebugScanner.cs" />
+    <Compile Include="DefaultDBScanner.cs" />
+    <Compile Include="HL7_A01B04_Scanner.cs" />
+    <Compile Include="HL7_A01B03_Scanner.cs" />
+    <Compile Include="HL7_A02B01_Scanner.cs" />
+    <Compile Include="HL7_A05B01_Scanner.cs" />
+    <Compile Include="HL7_A04B03_Scanner.cs" />
+    <Compile Include="HL7_A04B02_Scanner.cs" />
+    <Compile Include="HL7_A04B01_Scanner.cs" />
+    <Compile Include="HL7_A01B01_Scanner.cs" />
+    <Compile Include="HL7_DFT_Scanner.cs" />
+    <Compile Include="HL7_A01B02_Scanner.cs" />
+    <Compile Include="HL7_TimeOut_Scanner.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\Public\IL.Common\IL.Common.csproj">
+      <Project>{f320951f-886b-4f99-a3fd-5686c0a97868}</Project>
+      <Name>IL.Common</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\Public\MediII.Adapter.Scan.Interface\MediII.Adapter.Scan.Interface.csproj">
+      <Project>{4e8c6d0e-e696-4f02-812f-cedd6fe3f6dc}</Project>
+      <Name>MediII.Adapter.Scan.Interface</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\IL.BizComponent\MediII.Adapter.BizComponent.Base\MediII.Adapter.BizComponent.Base.csproj">
+      <Project>{619b1dbf-55b7-446b-af40-852a6ab689a0}</Project>
+      <Name>MediII.Adapter.BizComponent.Base</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\MediII.Adapter.ReceiveToKCModel\MediII.Adapter.ReceiveToKCModel.csproj">
+      <Project>{f182ac2b-a0d5-40d2-89af-8d547606b6ac}</Project>
+      <Name>MediII.Adapter.ReceiveToKCModel</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\MediII.Adapter.Scanner\MediII.Adapter.Scanner.csproj">
+      <Project>{0adddb14-b0f6-4d12-8025-5ec8124a511b}</Project>
+      <Name>MediII.Adapter.Scanner</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>Copy $(TargetDir)   $(ProjectDir)..\MessageToKC\UE\
+Copy $(TargetDir)   $(ProjectDir)..\MessageToKCServer\UE\</PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 36 - 0
MediII.Adapter.Scan.UE/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的常规信息通过以下
+// 特性集控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("MediII.Adapter.Scan.Test")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("MediII.Adapter.Scan.Test")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 使此程序集中的类型
+// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
+// 则将该类型上的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("cf431a49-66d7-41d5-b0bc-26a22bb02d24")]
+
+// 程序集的版本信息由下面四个值组成:
+//
+//      主版本
+//      次版本 
+//      内部版本号
+//      修订号
+//
+// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,
+// 方法是按如下所示使用“*”:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 11 - 0
MediII.Adapter.Scan.UE/app.config

@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<configuration>
+	<runtime>
+		<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+			<dependentAssembly>
+				<assemblyIdentity name="Microsoft.Practices.EnterpriseLibrary.Common" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
+				<bindingRedirect oldVersion="0.0.0.0-5.0.505.0" newVersion="5.0.505.0"/>
+			</dependentAssembly>
+		</assemblyBinding>
+	</runtime>
+</configuration>

+ 17 - 0
MediII.Adapter.Scanner/App.Config

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <configSections>
+    
+    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
+  </configSections>
+  <connectionStrings>
+    <add name="HIS3Context" connectionString="metadata=res://*/HISContext.csdl|res://*/HISContext.ssdl|res://*/HISContext.msl;provider=Oracle.DataAccess.Client;provider connection string=&quot;DATA SOURCE=MediIIPlat;PASSWORD=his3;USER ID=HIS3&quot;" providerName="System.Data.EntityClient" />
+  </connectionStrings>
+  <entityFramework>
+    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
+      <parameters>
+        <parameter value="v11.0" />
+      </parameters>
+    </defaultConnectionFactory>
+  </entityFramework>
+</configuration>

+ 128 - 0
MediII.Adapter.Scanner/DBScaner.cs

@@ -0,0 +1,128 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using MediII.Adapter.Scan.Interface;
+using NHapi.Base.Model;
+using System.Collections.Concurrent;
+
+using NHapi.Base.Parser;
+using Microsoft.Practices.EnterpriseLibrary.Common;
+using Microsoft.Practices.EnterpriseLibrary.Data;
+using System.Data.Common;
+using System.Threading.Tasks;
+using System.Data;
+using MediII.Adapter.ReceiveToKCModel;
+using IL.Common;
+
+namespace MediII.Adapter.Scanner
+{
+    public abstract class DBScaner : BaseScan
+    {
+        PipeParser parser = new PipeParser();
+
+        DatabaseProviderFactory factory = new DatabaseProviderFactory();
+        //数据库连接
+        protected Database ctx;
+
+        public DBScaner()
+        {
+            ctx = factory.CreateDefault();
+        }
+
+        protected override void OnStart()
+        {
+            string typeName = this.GetType().Name.Trim();
+            MediII.Common.LogHelper.LogInfo(string.Format("Scaner:{0} Started...", typeName), Common.LogCatagories.MQAccess);
+
+            var entity = GetSaoMiao(typeName);
+            if (entity == null)
+            {
+                LastTime = GetNow().AddDays(-1);
+            }
+            else
+            {
+                if (entity.IsDel == 1)
+                {
+                    this.Stop();
+                    return;
+                }
+
+                MediII.Common.LogHelper.LogInfo(string.Format("Scaner:{0} Started...", typeName), Common.LogCatagories.MQAccess);
+                int minus = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["AddMinues"]);
+                if (AddMinusDay)
+                    LastTime = entity.ExecuteTime.AddDays(-1);
+                else
+                    LastTime = entity.ExecuteTime;
+
+                //设置扫描间隔
+                var jianGe = entity.IntervalTime;
+                if (jianGe != null)
+                {
+                    this.Interval = (int)jianGe;
+                    MediII.Common.LogHelper.LogInfo(string.Format("Scaner:{0} jianGe:{1}", typeName, this.Interval), Common.LogCatagories.MQAccess);
+                }
+            }
+        }
+
+        private HL7_MessageSetEntity GetSaoMiao(string typeName)
+        {
+            var sql = string.Format("select * from HL7_MessageSet where MessageType=2 and  MessageId = '{0}'", typeName);
+            var entity = SqlDataAccess.ExecuteSqlStringAccessor<HL7_MessageSetEntity>(ctx, sql).FirstOrDefault();
+            return entity;
+        }
+
+        protected override void OnStop()
+        {
+            SetNewExecTime(LastTime);
+        }
+
+        protected override void OnElapsed(DateTime elapsedTime)
+        {
+            SetNewExecTime(elapsedTime);
+        }
+
+        /// <summary>
+        /// 最后执行时间
+        /// </summary>
+        /// <param name="elapsedTime"></param>
+        private void SetNewExecTime(DateTime elapsedTime)
+        {
+            try
+            {
+                var typeName = this.GetType().Name.Trim();
+                var sql = "update HL7_MessageSet set ExecuteTime = @ExecuteTime where MessageId=@MessageId";
+                var dbCommand = SqlDataAccess.GetSqlStringCommand(ctx, sql);
+                SqlDataAccess.AddInParameter(ctx, dbCommand, "ExecuteTime", System.Data.DbType.DateTime, elapsedTime);
+                SqlDataAccess.AddInParameter(ctx, dbCommand, "MessageId", System.Data.DbType.AnsiString, typeName);
+                SqlDataAccess.ExecuteNonQuery(ctx, dbCommand);
+            }
+            catch (Exception ex)
+            {
+                MediII.Common.LogHelper.LogError(ex, Common.LogCatagories.MQAccess);
+            }
+        }
+
+         
+        public override long GetMaxSCN()
+        {
+            return 0;
+        }
+
+        protected override DateTime GetNow()
+        {
+            try
+            {
+                return (DateTime)SqlDataAccess.ExecuteScalar(ctx, CommandType.Text, "select GETDATE()");
+            }
+            catch (Exception ex)
+            {
+                MediII.Common.LogHelper.LogError(ex, Common.LogCatagories.MQAccess);
+                return DateTime.Now;
+            }
+        }
+         
+
+       
+    }
+}

+ 12 - 0
MediII.Adapter.Scanner/Entity/BaseEntity.cs

@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace MediII.Adapter.Scanner
+{
+    [Serializable]
+    public class BaseEntity
+    {
+    }
+}

+ 45 - 0
MediII.Adapter.Scanner/Entity/HL7_MessageSetEntity.cs

@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+
+
+namespace MediII.Adapter.Scanner
+{
+
+
+    [Serializable]
+    public partial class HL7_MessageSetEntity : BaseEntity
+    {
+
+        /// <summary> 
+        ///  消息ID
+        /// </summary>
+        public string MessageId { get; set; }
+
+        /// <summary> 
+        ///  消息类型 1扫描 2接收
+        /// </summary>
+        public int MessageType { get; set; }
+
+        /// <summary> 
+        ///  执行时间
+        /// </summary>
+        public DateTime ExecuteTime { get; set; }
+
+        /// <summary> 
+        ///  间隔时间
+        /// </summary>
+        public int? IntervalTime { get; set; }
+
+        /// <summary> 
+        ///  
+        /// </summary>
+        public int? IsDel { get; set; }
+
+        /// <summary> 
+        ///  备注
+        /// </summary>
+        public string Remark { get; set; }
+    }
+}

+ 118 - 0
MediII.Adapter.Scanner/MediII.Adapter.Scanner.csproj

@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{0ADDDB14-B0F6-4D12-8025-5EC8124A511B}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>MediII.Adapter.Scanner</RootNamespace>
+    <AssemblyName>MediII.Adapter.Scanner</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SccProjectName>
+    </SccProjectName>
+    <SccLocalPath>
+    </SccLocalPath>
+    <SccAuxPath>
+    </SccAuxPath>
+    <SccProvider>
+    </SccProvider>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>none</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <StartupObject />
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="MediII.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\dll\MediII.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=e44a2bc38ed2c13c, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\dll\Microsoft.Practices.EnterpriseLibrary.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\dll\Microsoft.Practices.EnterpriseLibrary.Data.dll</HintPath>
+    </Reference>
+    <Reference Include="NHapi.Base, Version=2.3.0.0, Culture=neutral, PublicKeyToken=d0d8ea960a3440eb, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\dll\NHapi.Base.dll</HintPath>
+    </Reference>
+    <Reference Include="NHapi.Model.V24, Version=2.3.0.0, Culture=neutral, PublicKeyToken=d0d8ea960a3440eb, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\dll\NHapi.Model.V24.dll</HintPath>
+    </Reference>
+    <Reference Include="NHapi.Model.V25, Version=2.3.0.0, Culture=neutral, PublicKeyToken=d0d8ea960a3440eb, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\dll\NHapi.Model.V25.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.ComponentModel.Composition" />
+    <Reference Include="System.ComponentModel.DataAnnotations" />
+    <Reference Include="System.configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Entity\BaseEntity.cs" />
+    <Compile Include="DBScaner.cs" />
+    <Compile Include="Entity\HL7_MessageSetEntity.cs" />
+    <Compile Include="MessageItem.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Scaner.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.Config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="ScanNormalTemplate.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\Public\IL.Common\IL.Common.csproj">
+      <Project>{f320951f-886b-4f99-a3fd-5686c0a97868}</Project>
+      <Name>IL.Common</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\..\Public\MediII.Adapter.Scan.Interface\MediII.Adapter.Scan.Interface.csproj">
+      <Project>{4e8c6d0e-e696-4f02-812f-cedd6fe3f6dc}</Project>
+      <Name>MediII.Adapter.Scan.Interface</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\MediII.Adapter.ReceiveToKCModel\MediII.Adapter.ReceiveToKCModel.csproj">
+      <Project>{f182ac2b-a0d5-40d2-89af-8d547606b6ac}</Project>
+      <Name>MediII.Adapter.ReceiveToKCModel</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 14 - 0
MediII.Adapter.Scanner/MessageItem.cs

@@ -0,0 +1,14 @@
+using NHapi.Base.Model;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace MediII.Adapter.Scanner
+{
+    public class MessageItem
+    {
+        public AbstractMessage MessageStruct { get; set; }
+        public object Item { get; set; }
+    }
+}

+ 36 - 0
MediII.Adapter.Scanner/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的常规信息通过以下
+// 特性集控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("MediII.Adapter.Scan.HIS")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("MediII.Adapter.Scan.HIS")]
+[assembly: AssemblyCopyright("Copyright ©  2012")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 使此程序集中的类型
+// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
+// 则将该类型上的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("0cb95154-1314-4aa1-929d-1f31002ae570")]
+
+// 程序集的版本信息由下面四个值组成:
+//
+//      主版本
+//      次版本 
+//      内部版本号
+//      修订号
+//
+// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,
+// 方法是按如下所示使用“*”:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 44 - 0
MediII.Adapter.Scanner/ScanNormalTemplate.txt

@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Data;
+using MediII.Adapter.Scan.Interface;
+using MediII.Adapter.Builder.Interface;
+
+namespace MediII.Adapter.Scanner.@@SYSNAME
+{
+    public class @@SCANNAME_Scanner : DBScaner, IScan
+    {
+        public override long Do(DateTime dtEventTime)
+        {
+            IEnumerable<DataRow> listRow;
+            string sql = "@@SQL";
+            listRow = ctx.ExecuteDataSet(CommandType.Text, sql).Tables[0].AsEnumerable();
+
+            if (listRow.Count() > 0)
+            {
+                List<MessageItem> listMessage = BuildMSG<DataRow>(listRow, entity =>
+                {
+                    //OML_O21_Builder builder = HIS_MessageBuilder.GetBuilder<OML_O21_Builder>();
+                    //builder.BuildCheXiao(entity);
+                    //return builder.MessageHolder;
+					var o = new NHapi.Model.V24.Message.OML_O21();
+                    o.MSH.MessageControlID.Value = Guid.NewGuid().ToString("N");
+                    return o;
+					//return null;
+                });
+
+                BeforeSend(listMessage.Select(s => s.MessageStruct).ToList());
+                SendMessages<DataRow>(listMessage, list =>
+                {
+                    string[] idList = list.Select(s => s["XUHAO"].ToString()).ToArray();
+                    string sqlUpdate = string.Format("update hl7_l_laborder set zhuangtai = 1 where xuhao in ('{0}')", string.Join(",", idList));
+                    SqlDataAccess.ExecuteNonQuery(ctx,System.Data.CommandType.Text, sqlUpdate);
+                    return 1;
+                });
+            }
+            return 0;
+        }
+    }
+}

+ 58 - 0
MediII.Adapter.Scanner/Scaner.cs

@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using MediII.Adapter.Scan.Interface;
+using IL.Common;
+
+namespace MediII.Adapter.Scanner
+{
+    public class Scaner
+    {
+        IEnumerable<IScan> listScaner = new List<IScan>();
+
+
+        public int Start(string[] importsPaths)
+        {
+            return Start(importsPaths, null);
+        }
+        public int Start(string[] importsPaths, MessageLogDelegate msgLog)
+        {
+            ServicesContainer container = new ServicesContainer();
+            foreach (string path in importsPaths)
+            {
+                HostingMEF.SatisfyImports(container, path);
+            }
+            listScaner = container.Scanners;
+
+            foreach (var scanner in container.Scanners)
+            {
+                //间隔可以分别设置
+                //scanner.Interval = XX
+                //启动扫描     
+                //if (!scanner.ToString().Contains("HL7_Treatment_Create_Scanner"))
+                //{
+                //    continue;
+                //}
+                LogHelper.LogInfo("服务启动 " + scanner.GetType().FullName, LogCatagories.AdapterScan);
+                scanner.MessageLog += msgLog;
+                scanner.Start();
+            }
+            return 1;
+        }
+
+        public int Stop()
+        {
+            foreach (var scaner in listScaner)
+            {
+                if (scaner.IsRuning)
+                {
+                    LogHelper.LogInfo("服务停止 " + scaner.GetType().FullName, LogCatagories.AdapterScan);
+                    scaner.Stop();
+                }
+                   
+            }
+            return 1;
+        }
+    }
+}

+ 169 - 0
MediII.Adapter.WinForm.Scan/MediII.Adapter.WinForm.Scanner.csproj

@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{5E125823-EC26-4F15-B178-48E8387C5F1A}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>MediII.Adapter.WinForm.Scanner</RootNamespace>
+    <AssemblyName>MediII.Adapter.WinForm.Scanner</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkProfile>
+    </TargetFrameworkProfile>
+    <FileAlignment>512</FileAlignment>
+    <SccProjectName>
+    </SccProjectName>
+    <SccLocalPath>
+    </SccLocalPath>
+    <SccAuxPath>
+    </SccAuxPath>
+    <SccProvider>
+    </SccProvider>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <PublishUrl>发布\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup />
+  <PropertyGroup>
+    <ApplicationIcon>
+    </ApplicationIcon>
+  </PropertyGroup>
+  <PropertyGroup />
+  <PropertyGroup>
+    <StartupObject />
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
+    <DebugSymbols>true</DebugSymbols>
+    <OutputPath>bin\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <DebugType>full</DebugType>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <DocumentationFile>
+    </DocumentationFile>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <Optimize>true</Optimize>
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <ErrorReport>prompt</ErrorReport>
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="MediII.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\dll\MediII.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=e44a2bc38ed2c13c, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\dll\Microsoft.Practices.EnterpriseLibrary.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Data">
+      <HintPath>..\..\dll\Microsoft.Practices.EnterpriseLibrary.Data.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=e44a2bc38ed2c13c, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\dll\Microsoft.Practices.EnterpriseLibrary.Logging.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.ComponentModel.Composition" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Web.Extensions" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="app.config">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include=".NETFramework,Version=v4.0">
+      <Visible>False</Visible>
+      <ProductName>Microsoft .NET Framework 4 %28x86 和 x64%29</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.4.5">
+      <Visible>False</Visible>
+      <ProductName>Windows Installer 4.5</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\..\Public\MediII.Adapter.Scan.Interface\MediII.Adapter.Scan.Interface.csproj">
+      <Project>{4e8c6d0e-e696-4f02-812f-cedd6fe3f6dc}</Project>
+      <Name>MediII.Adapter.Scan.Interface</Name>
+    </ProjectReference>
+    <ProjectReference Include="..\MediII.Adapter.Scanner\MediII.Adapter.Scanner.csproj">
+      <Project>{0adddb14-b0f6-4d12-8025-5ec8124a511b}</Project>
+      <Name>MediII.Adapter.Scanner</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <PropertyGroup>
+    <PostBuildEvent>
+    </PostBuildEvent>
+  </PropertyGroup>
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>

+ 38 - 0
MediII.Adapter.WinForm.Scan/Program.cs

@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using MediII.Adapter.Scanner;
+using MediII.Adapter.Scan.Interface; 
+
+namespace MediII.Adapter.WinForm.Scanner
+{
+    class Program
+    {
+        static Scaner scanner = new Scaner();
+
+        static void Main(string[] args)
+        {
+
+            //try
+            //{
+
+            //    var sca = new BizComponent_MFN();
+            //}
+            //catch (Exception ex)
+            //{
+            //    Console.WriteLine(ex.Message);
+            //}
+
+            args = new string[] { "UE" };
+            if (args.Length > 0)
+            {
+                string dllPath = System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, args[0]);
+                string path = Environment.GetEnvironmentVariable("path") + ";" + dllPath;
+                Environment.SetEnvironmentVariable("path", path);
+                scanner.Start(new string[] { dllPath });
+            }
+            Console.Read();
+        }
+    }
+}

+ 36 - 0
MediII.Adapter.WinForm.Scan/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的常规信息通过以下
+// 特性集控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("MediII.Adapter.WinForm.Scan")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("MediII.Adapter.WinForm.Scan")]
+[assembly: AssemblyCopyright("Copyright ©  2012")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 将 ComVisible 设置为 false 使此程序集中的类型
+// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
+// 则将该类型上的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("9b49a670-5a28-42ed-a4ff-2b252c3f1454")]
+
+// 程序集的版本信息由下面四个值组成:
+//
+//      主版本
+//      次版本 
+//      内部版本号
+//      修订号
+//
+// 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,
+// 方法是按如下所示使用“*”:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 63 - 0
MediII.Adapter.WinForm.Scan/Properties/Resources.Designer.cs

@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     此代码由工具生成。
+//     运行时版本:4.0.30319.18063
+//
+//     对此文件的更改可能会导致不正确的行为,并且如果
+//     重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace MediII.Adapter.WinForm.Scanner.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   一个强类型的资源类,用于查找本地化的字符串等。
+    /// </summary>
+    // 此类是由 StronglyTypedResourceBuilder
+    // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+    // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+    // (以 /str 作为命令选项),或重新生成 VS 项目。
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   返回此类使用的缓存的 ResourceManager 实例。
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MediII.Adapter.WinForm.Scanner.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   使用此强类型资源类,为所有资源查找
+        ///   重写当前线程的 CurrentUICulture 属性。
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}

+ 117 - 0
MediII.Adapter.WinForm.Scan/Properties/Resources.resx

@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 26 - 0
MediII.Adapter.WinForm.Scan/Properties/Settings.Designer.cs

@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     此代码由工具生成。
+//     运行时版本:4.0.30319.18063
+//
+//     对此文件的更改可能会导致不正确的行为,并且如果
+//     重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace MediII.Adapter.WinForm.Scanner.Properties {
+    
+    
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+        
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+        
+        public static Settings Default {
+            get {
+                return defaultInstance;
+            }
+        }
+    }
+}

+ 7 - 0
MediII.Adapter.WinForm.Scan/Properties/Settings.settings

@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>

+ 103 - 0
MediII.Adapter.WinForm.Scan/app.config

@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <configSections>
+    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
+    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
+  </configSections>
+  <!--日志配置-->
+  <loggingConfiguration name="" tracingEnabled="true" defaultCategory="General">
+    <listeners>
+      <add name="GeneralListener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" fileName="General\rolling.log" formatter="Text Formatter" rollFileExistsBehavior="Increment" rollInterval="Day" maxArchivedFiles="0" traceOutputOptions="None" />
+      <add name="SockListener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" fileName="Sock\rolling.log" formatter="Text Formatter" rollInterval="Day" />
+      <add name="ScanListener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" fileName="Scan\rolling.log" formatter="Text Formatter" rollInterval="Day" />
+      <add name="SqlListener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" fileName="SQL\logSql.log" formatter="Text Formatter" rollInterval="Day" />
+    </listeners>
+    <formatters>
+      <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" template="Timestamp: {timestamp}{newline}&#xA;Message: {message}" name="Text Formatter" />
+    </formatters>
+    <categorySources>
+      <add switchValue="All" name="General">
+        <listeners>
+          <add name="GeneralListener" />
+        </listeners>
+      </add>
+      <add switchValue="All" name="Sock">
+        <listeners>
+          <add name="SockListener" />
+        </listeners>
+      </add>
+      <add switchValue="All" name="AdapterScan">
+        <listeners>
+          <add name="ScanListener" />
+        </listeners>
+      </add>
+      <add switchValue="All" name="SQL">
+        <listeners>
+          <add name="SqlListener" />
+        </listeners>
+      </add>
+    </categorySources>
+    <specialSources>
+      <allEvents switchValue="All" name="All Events" />
+      <notProcessed switchValue="All" name="Unprocessed Category" />
+      <errors switchValue="All" name="Logging Errors &amp; Warnings" />
+    </specialSources>
+  </loggingConfiguration>
+  <dataConfiguration defaultDatabase="DefaultDB" />
+  <connectionStrings>
+    <add name="DefaultDB" connectionString="Data Source=.;
+                       Initial Catalog=HL7_Platform;
+                       Persist Security Info=True;
+                       Integrated Security=False;
+                       User ID=sa;Password=123" providerName="System.Data.SqlClient"/>
+
+    <add name="HealthCare" connectionString="Data Source=.;
+                       Initial Catalog=KC_JX;
+                       Persist Security Info=True;
+                       Integrated Security=False;
+                       User ID=sa;Password=123" providerName="System.Data.SqlClient"/>
+  </connectionStrings>
+  <appSettings>
+    <!--测试-->
+    <!--正式-->
+    <add key="MediIIAddress" value="192.9.216.206" />
+    <add key="MediIIPort" value="31001" />
+    <add key="BufferSize" value="4048" />
+    <add key="ReviceTimeOut" value="30000" />
+    <add key="ErrorRepeatCount" value="1" />
+    <add key="ErrorSleepMSecodes" value="3000" />
+    <!--<add key="SedingApplication" value="UEHIS" />-->
+    <add key="HosiptalName" value="" />
+    <add key="AddMinues" value="30" />
+    <add key="BranchID" value="" />
+    <!--查询数量-->
+    <add key="SearchNum" value="50" />
+    <!--任务解锁时间  单位分钟-->
+    <add key="TaskRunTime" value="5" />
+    <!--启动SQL日志-->
+    <add key="LogSql" value="1" />
+    <add key="ClientSettingsProvider.ServiceUri" value="" />
+  </appSettings>
+  <system.web>
+    <membership defaultProvider="ClientAuthenticationMembershipProvider">
+      <providers>
+        <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
+      </providers>
+    </membership>
+    <roleManager defaultProvider="ClientRoleProvider" enabled="true">
+      <providers>
+        <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
+      </providers>
+    </roleManager>
+  </system.web>
+  <system.serviceModel>
+    <bindings>
+      <basicHttpBinding>
+        <binding name="WebServiceSoap"/>
+      </basicHttpBinding>
+    </bindings>
+    <client>
+      <endpoint address="http://localhost:8092/WebService.asmx" binding="basicHttpBinding" bindingConfiguration="WebServiceSoap" contract="ServiceTest.WebServiceSoap" name="WebServiceSoap"/>
+    </client>
+  </system.serviceModel>
+</configuration>

二進制
MessageToKC/UE/MediII.Adapter.BizComponent.UE.dll


二進制
MessageToKC/UE/MediII.Adapter.Scan.Interface.dll


二進制
MessageToKC/UE/MediII.Adapter.Scanner.dll


二進制
MessageToKC/UE/MediII.Common.dll


二進制
MessageToKC/UE/Microsoft.Practices.EnterpriseLibrary.Common.dll


二進制
MessageToKC/UE/Microsoft.Practices.EnterpriseLibrary.Data.dll


二進制
MessageToKC/UE/Microsoft.Practices.EnterpriseLibrary.Logging.dll


部分文件因文件數量過多而無法顯示