You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

5928 lines
294 KiB

6 months ago
7 months ago
7 months ago
5 months ago
7 months ago
7 months ago
7 months ago
6 months ago
7 months ago
5 months ago
7 months ago
6 months ago
7 months ago
7 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
7 months ago
7 months ago
6 months ago
6 months ago
7 months ago
6 months ago
6 months ago
7 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
5 months ago
7 months ago
5 months ago
7 months ago
5 months ago
7 months ago
5 months ago
7 months ago
5 months ago
7 months ago
5 months ago
7 months ago
5 months ago
7 months ago
5 months ago
7 months ago
5 months ago
7 months ago
5 months ago
7 months ago
5 months ago
7 months ago
5 months ago
7 months ago
7 months ago
6 months ago
7 months ago
7 months ago
6 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
6 months ago
6 months ago
6 months ago
6 months ago
7 months ago
7 months ago
7 months ago
6 months ago
6 months ago
6 months ago
7 months ago
7 months ago
7 months ago
6 months ago
7 months ago
7 months ago
6 months ago
6 months ago
7 months ago
6 months ago
5 months ago
7 months ago
7 months ago
6 months ago
7 months ago
7 months ago
7 months ago
6 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
7 months ago
7 months ago
7 months ago
5 months ago
5 months ago
5 months ago
6 months ago
7 months ago
7 months ago
7 months ago
7 months ago
6 months ago
7 months ago
5 months ago
7 months ago
7 months ago
7 months ago
5 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
5 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
6 months ago
7 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
6 months ago
5 months ago
6 months ago
5 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
6 months ago
7 months ago
  1. using EFCore.BulkExtensions;
  2. using Microsoft.AspNetCore.Authorization;
  3. using Microsoft.AspNetCore.Identity;
  4. using Microsoft.AspNetCore.Mvc;
  5. using Microsoft.EntityFrameworkCore;
  6. using Microsoft.Extensions.Configuration;
  7. using Microsoft.Extensions.DependencyInjection;
  8. using Microsoft.Extensions.Logging;
  9. using NPOI.POIFS.Properties;
  10. using NPOI.SS.Formula.Functions;
  11. using Shentun.Peis.ColumnReferences;
  12. using Shentun.Peis.CustomerOrgs;
  13. using Shentun.Peis.DataMigrations;
  14. using Shentun.Peis.EntityFrameworkCore;
  15. using Shentun.Peis.Enums;
  16. using Shentun.Peis.ItemTypes;
  17. using Shentun.Peis.Migrations;
  18. using Shentun.Peis.Models;
  19. using Shentun.Peis.MyUser;
  20. using Shentun.Peis.OrganizationUnits;
  21. using Shentun.Peis.PatientRegisters;
  22. using Shentun.Peis.RegisterCheckItems;
  23. using Shentun.Utilities;
  24. using SqlSugar;
  25. using System;
  26. using System.Collections.Generic;
  27. using System.Data;
  28. using System.Diagnostics;
  29. using System.Formats.Asn1;
  30. using System.Linq;
  31. using System.Text;
  32. using System.Threading.Tasks;
  33. using Volo.Abp;
  34. using Volo.Abp.Application.Services;
  35. using Volo.Abp.Caching;
  36. using Volo.Abp.Data;
  37. using Volo.Abp.Domain.Entities;
  38. using Volo.Abp.Domain.Repositories;
  39. using Volo.Abp.EntityFrameworkCore;
  40. using Volo.Abp.Identity;
  41. using Volo.Abp.Uow;
  42. using Volo.Abp.Users;
  43. using static System.Formats.Asn1.AsnWriter;
  44. namespace Shentun.Peis.CCTJExportDatas
  45. {
  46. /// <summary>
  47. /// 长城体检中心数据导入
  48. /// </summary>
  49. [Authorize]
  50. public class CCTJExportDataAppService : ApplicationService
  51. {
  52. //默认指引类别ID
  53. private readonly char defaultGuidTypeId = '0';
  54. //默认体检报告类别ID
  55. private readonly char defaultMedicalReportTypeId = '0';
  56. //默认体检结论类别
  57. private readonly string defaultMedicalConclusionType = "01";
  58. //默认体检中心
  59. private readonly Guid defaultMedicalCenterId = Guid.Parse("8beda924-3925-4525-be49-d28bbb3618c4");
  60. //默认容器ID
  61. private readonly Guid defaultSampleContainerId = Guid.Parse("3a126a07-eb42-a369-99e4-114a2629d714");
  62. //默认单位性质ID
  63. private readonly Guid defaultOrgTypeId = Guid.Parse("3a126a08-9607-fe40-e5da-6daa01712468");
  64. //老系统数据库配置
  65. private readonly SqlSugarClient oldDb = new SqlSugarClient(new ConnectionConfig()
  66. {
  67. // ConnectionString = "server=192.168.0.3;uid=sa;pwd=132****6302;database=oldPeis;Encrypt=false;",
  68. ConnectionString = "server=192.168.0.3;uid=sa;pwd=132****6302;database=reddolphin;Encrypt=false;",
  69. DbType = SqlSugar.DbType.SqlServer,
  70. IsAutoCloseConnection = true
  71. });
  72. //lis数据库配置
  73. private readonly SqlSugarClient oldLisDb = new SqlSugarClient(new ConnectionConfig()
  74. {
  75. ConnectionString = "server=192.168.0.3;uid=sa;pwd=132****6302;database=mylis;Encrypt=false;",
  76. DbType = SqlSugar.DbType.SqlServer,
  77. IsAutoCloseConnection = true
  78. });
  79. //新系统配置
  80. private readonly SqlSugarClient newDb = new SqlSugarClient(new ConnectionConfig()
  81. {
  82. ConnectionString = "Host=192.168.0.188;Port=5432;Database=ShentunPeis;User ID=postgres;Password=St123456;",
  83. DbType = SqlSugar.DbType.PostgreSQL,
  84. IsAutoCloseConnection = true
  85. });
  86. private readonly IDbContextProvider<PeisDbContext> _dbContextProvider;
  87. private readonly UnitOfWorkManager _unitOfWorkManager;
  88. private readonly IRepository<DeviceType, Guid> _deviceTypeRepository;
  89. private readonly IRepository<ItemType, Guid> _itemTypeRepository;
  90. private readonly ItemTypeManager _itemTypeManager;
  91. private readonly IRepository<Unit, Guid> _unitRepository;
  92. private readonly IRepository<MedicalType, Guid> _medicalTypeRepository;
  93. private readonly IRepository<PersonnelType, Guid> _personnelTypeRepository;
  94. private readonly IRepository<InvoiceItemType, Guid> _invoiceItemTypeRepository;
  95. private readonly IRepository<FieldComparison, Guid> _fieldComparisonRepository;
  96. private readonly IRepository<SampleType, Guid> _sampleTypeRepository;
  97. private readonly IRepository<Item, Guid> _itemRepository;
  98. private readonly IRepository<ReferenceRange, Guid> _referenceRangeRepository;
  99. private readonly IRepository<Asbitem, Guid> _asbitemRepository;
  100. private readonly IRepository<AsbitemDetail> _asbitemDetailRepository;
  101. private readonly IRepository<MedicalPackage, Guid> _medicalPackageRepository;
  102. private readonly IRepository<MedicalPackageDetail> _medicalPackageDetailRepository;
  103. private readonly IRepository<Diagnosis, Guid> _diagnosisRepository;
  104. private readonly IRepository<Suggestion, Guid> _suggestionRepository;
  105. private readonly IRepository<ItemResultTemplate, Guid> _itemResultTemplateRepository;
  106. private readonly IRepository<ItemResultMatch, Guid> _ItemResultMatchRepository;
  107. private readonly IRepository<MenuInfo, Guid> _menuInfoRepository;
  108. private readonly IRepository<CustomerOrg, Guid> _customerOrgRepository;
  109. private readonly CustomerOrgManager _customerOrgManager;
  110. private readonly IRepository<CustomerOrgRegister, Guid> _customerOrgRegisterRepository;
  111. private readonly IRepository<CustomerOrgGroup, Guid> _customerOrgGroupRepository;
  112. private readonly IRepository<CustomerOrgGroupDetail> _customerOrgGroupDetailRepository;
  113. private readonly IRepository<Nation> _nationRepository;
  114. private readonly ILogger<BaseDataHandleAppService> _logger;
  115. private readonly IRepository<IdentityUser, Guid> _identityUserRepository;
  116. private readonly IRepository<MedicalConclusion, Guid> _medicalConclusionRepository;
  117. private readonly IRepository<SampleGroup, Guid> _sampleGroupRepository;
  118. private readonly IRepository<SampleGroupDetail> _sampleGroupDetailRepository;
  119. private readonly IRepository<SysParmType> _sysParmTypeRepository;
  120. private readonly IRepository<SysParm> _sysParmRepository;
  121. private readonly IRepository<SysParmValue> _sysParmValueRepository;
  122. private readonly IRepository<CollectItemType, Guid> _collectItemTypeRepository;
  123. private readonly IRepository<AsbitemGuide> _asbitemGuideRepository;
  124. //业务
  125. private readonly IRepository<Patient, Guid> _patientRepository;
  126. private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
  127. private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
  128. private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository;
  129. private readonly IRepository<RegisterCheckItem> _registerCheckItemRepository;
  130. private readonly IRepository<RegisterCheckSummary, Guid> _registerCheckSummaryRepository;
  131. private readonly RegisterCheckItemManager _registerCheckItemManager;
  132. private readonly IRepository<SumSuggestionHeader, Guid> _sumSuggestionHeaderRepository;
  133. private readonly IRepository<SumSuggestionContent, Guid> _sumSuggestionContentRepository;
  134. private readonly IRepository<SumSummaryHeader, Guid> _sumSummaryHeaderRepository;
  135. private readonly IRepository<SumSummaryContent, Guid> _sumSummaryContentRepository;
  136. private readonly IRepository<SumDiagnosis> _sumDiagnosisRepository;
  137. private readonly IConfiguration _configuration;
  138. private readonly MyUserAppService _myUserAppService;
  139. private readonly ColumnReferenceAppService _columnReferenceAppService;
  140. private readonly IRepository<CardType, Guid> _cardTypeRepository;
  141. private readonly IRepository<CardRegister, Guid> _cardRegisterRepository;
  142. private readonly IServiceScopeFactory _serviceScopeFactory;
  143. private readonly ICurrentUser _currentUser;
  144. private static List<FieldComparison> fieldComparisonTempList = new List<FieldComparison>();
  145. private static List<FieldComparison> asbitemFieldComparisonTempList = new List<FieldComparison>();
  146. private static List<FieldComparison> itemFieldComparisonTempList = new List<FieldComparison>();
  147. private static List<CustomerOrgRegister> _customerOrgRegisterList = new List<CustomerOrgRegister>();
  148. private static List<IdentityUser> _userList = new List<IdentityUser>();
  149. private readonly IRepository<GuideType, char> _guideTypeRepository;
  150. private readonly IRepository<MedicalReportType, char> _medicalReportTypeRepository;
  151. private readonly IRepository<MedicalConclusionType> _medicalConclusionTypeRepository;
  152. private readonly IRepository<SampleContainer, Guid> _sampleContainerRepository;
  153. private readonly IRepository<CustomerOrgType, Guid> _customerOrgTypeRepository;
  154. private readonly IRepository<OrganizationUnit, Guid> _organizationUnitRepository;
  155. private readonly PeisOrganizationUnitManager _organizationUnitManager;
  156. private readonly IRepository<Sex> _sexRepository;
  157. private readonly IRepository<ForSex> _forSexRepository;
  158. private readonly IRepository<MaritalStatus> _maritalStatusRepository;
  159. private readonly IRepository<ResultStatus> _resultStatusRepository;
  160. private readonly IRepository<PayMode> _payModeRepository;
  161. private readonly IRepository<DiagnosisLevel, short> _diagnosisLevelRepository;
  162. private readonly IdentityUserManager _identityUserManager;
  163. private readonly IRepository<IdentityUserOrganizationUnit> _identityUserOrganizationUnitRepository;
  164. private readonly IRepository<CommonTable, Guid> _commonTableRepository;
  165. private readonly IRepository<Room, Guid> _roomRepository;
  166. private readonly IRepository<RoomDetail> _roomDetailRepository;
  167. private readonly IRepository<UserItemType> _userItemTypeRepository;
  168. public CCTJExportDataAppService(
  169. UnitOfWorkManager unitOfWorkManager,
  170. IRepository<DeviceType, Guid> deviceTypeRepository,
  171. IRepository<ItemType, Guid> itemTypeRepository,
  172. ItemTypeManager itemTypeManager,
  173. IRepository<Unit, Guid> unitRepository,
  174. IRepository<MedicalType, Guid> medicalTypeRepository,
  175. IRepository<PersonnelType, Guid> personnelTypeRepository,
  176. IRepository<InvoiceItemType, Guid> invoiceItemTypeRepository,
  177. IRepository<FieldComparison, Guid> fieldComparisonRepository,
  178. IRepository<SampleType, Guid> sampleTypeRepository,
  179. IRepository<Item, Guid> itemRepository,
  180. IRepository<ReferenceRange, Guid> referenceRangeRepository,
  181. IRepository<Asbitem, Guid> asbitemRepository,
  182. IRepository<AsbitemDetail> asbitemDetailRepository,
  183. IRepository<MedicalPackage, Guid> medicalPackageRepository,
  184. IRepository<MedicalPackageDetail> medicalPackageDetailRepository,
  185. IRepository<Diagnosis, Guid> diagnosisRepository,
  186. IRepository<Suggestion, Guid> suggestionRepository,
  187. IRepository<ItemResultTemplate, Guid> itemResultTemplateRepository,
  188. IRepository<ItemResultMatch, Guid> itemResultMatchRepository,
  189. IRepository<MenuInfo, Guid> menuInfoRepository,
  190. IRepository<CustomerOrg, Guid> customerOrgRepository,
  191. CustomerOrgManager customerOrgManager,
  192. IRepository<CustomerOrgRegister, Guid> customerOrgRegisterRepository,
  193. IRepository<CustomerOrgGroup, Guid> customerOrgGroupRepository,
  194. IRepository<CustomerOrgGroupDetail> customerOrgGroupDetailRepository,
  195. IRepository<Nation> nationRepository,
  196. ILogger<BaseDataHandleAppService> logger,
  197. IRepository<IdentityUser, Guid> identityUserRepository,
  198. IRepository<MedicalConclusion, Guid> medicalConclusionRepository,
  199. IRepository<SampleGroup, Guid> sampleGroupRepository,
  200. IRepository<SampleGroupDetail> sampleGroupDetailRepository,
  201. IRepository<SysParmType> sysParmTypeRepository,
  202. IRepository<SysParm> sysParmRepository,
  203. IRepository<SysParmValue> sysParmValueRepository,
  204. IRepository<CollectItemType, Guid> collectItemTypeRepository,
  205. IRepository<AsbitemGuide> asbitemGuideRepository,
  206. IRepository<Patient, Guid> patientRepository,
  207. IRepository<PatientRegister, Guid> patientRegisterRepository,
  208. IRepository<RegisterCheck, Guid> registerCheckRepository,
  209. IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository,
  210. IRepository<RegisterCheckItem> registerCheckItemRepository,
  211. IRepository<RegisterCheckSummary, Guid> registerCheckSummaryRepository,
  212. RegisterCheckItemManager registerCheckItemManager,
  213. IRepository<SumSuggestionHeader, Guid> sumSuggestionHeaderRepository,
  214. IRepository<SumSuggestionContent, Guid> sumSuggestionContentRepository,
  215. IRepository<SumSummaryHeader, Guid> sumSummaryHeaderRepository,
  216. IRepository<SumSummaryContent, Guid> sumSummaryContentRepository,
  217. IRepository<SumDiagnosis> sumDiagnosisRepository,
  218. IConfiguration configuration,
  219. MyUserAppService myUserAppService,
  220. ColumnReferenceAppService columnReferenceAppService,
  221. IRepository<CardType, Guid> cardTypeRepository,
  222. IRepository<CardRegister, Guid> cardRegisterRepository,
  223. IServiceScopeFactory serviceScopeFactory,
  224. IDbContextProvider<PeisDbContext> dbContextProvider,
  225. ICurrentUser currentUser,
  226. IRepository<GuideType, char> guideTypeRepository,
  227. IRepository<MedicalReportType, char> medicalReportTypeRepository,
  228. IRepository<MedicalConclusionType> medicalConclusionTypeRepository,
  229. IRepository<SampleContainer, Guid> sampleContainerRepository,
  230. IRepository<CustomerOrgType, Guid> customerOrgTypeRepository,
  231. IRepository<OrganizationUnit, Guid> organizationUnitRepository,
  232. PeisOrganizationUnitManager organizationUnitManager,
  233. IRepository<Sex> sexRepository,
  234. IRepository<ForSex> forSexRepository,
  235. IRepository<MaritalStatus> maritalStatusRepository,
  236. IRepository<ResultStatus> resultStatusRepository,
  237. IRepository<PayMode> payModeRepository,
  238. IRepository<DiagnosisLevel, short> diagnosisLevelRepository,
  239. IdentityUserManager identityUserManager,
  240. IRepository<IdentityUserOrganizationUnit> identityUserOrganizationUnitRepository,
  241. IRepository<CommonTable, Guid> commonTableRepository,
  242. IRepository<Room, Guid> roomRepository,
  243. IRepository<RoomDetail> roomDetailRepository,
  244. IRepository<UserItemType> userItemTypeRepository)
  245. {
  246. _unitOfWorkManager = unitOfWorkManager;
  247. _deviceTypeRepository = deviceTypeRepository;
  248. _itemTypeRepository = itemTypeRepository;
  249. _itemTypeManager = itemTypeManager;
  250. _unitRepository = unitRepository;
  251. _medicalTypeRepository = medicalTypeRepository;
  252. _personnelTypeRepository = personnelTypeRepository;
  253. _invoiceItemTypeRepository = invoiceItemTypeRepository;
  254. _fieldComparisonRepository = fieldComparisonRepository;
  255. _sampleTypeRepository = sampleTypeRepository;
  256. _itemRepository = itemRepository;
  257. _referenceRangeRepository = referenceRangeRepository;
  258. _asbitemRepository = asbitemRepository;
  259. _asbitemDetailRepository = asbitemDetailRepository;
  260. _medicalPackageRepository = medicalPackageRepository;
  261. _medicalPackageDetailRepository = medicalPackageDetailRepository;
  262. _diagnosisRepository = diagnosisRepository;
  263. _suggestionRepository = suggestionRepository;
  264. _itemResultTemplateRepository = itemResultTemplateRepository;
  265. _ItemResultMatchRepository = itemResultMatchRepository;
  266. _menuInfoRepository = menuInfoRepository;
  267. _customerOrgRepository = customerOrgRepository;
  268. _customerOrgManager = customerOrgManager;
  269. _customerOrgRegisterRepository = customerOrgRegisterRepository;
  270. _customerOrgGroupRepository = customerOrgGroupRepository;
  271. _customerOrgGroupDetailRepository = customerOrgGroupDetailRepository;
  272. _nationRepository = nationRepository;
  273. _logger = logger;
  274. _identityUserRepository = identityUserRepository;
  275. _medicalConclusionRepository = medicalConclusionRepository;
  276. _sampleGroupRepository = sampleGroupRepository;
  277. _sampleGroupDetailRepository = sampleGroupDetailRepository;
  278. _sysParmTypeRepository = sysParmTypeRepository;
  279. _sysParmRepository = sysParmRepository;
  280. _sysParmValueRepository = sysParmValueRepository;
  281. _collectItemTypeRepository = collectItemTypeRepository;
  282. _asbitemGuideRepository = asbitemGuideRepository;
  283. _patientRepository = patientRepository;
  284. _patientRegisterRepository = patientRegisterRepository;
  285. _registerCheckRepository = registerCheckRepository;
  286. _registerCheckAsbitemRepository = registerCheckAsbitemRepository;
  287. _registerCheckItemRepository = registerCheckItemRepository;
  288. _registerCheckSummaryRepository = registerCheckSummaryRepository;
  289. _registerCheckItemManager = registerCheckItemManager;
  290. _sumSuggestionHeaderRepository = sumSuggestionHeaderRepository;
  291. _sumSuggestionContentRepository = sumSuggestionContentRepository;
  292. _sumSummaryHeaderRepository = sumSummaryHeaderRepository;
  293. _sumSummaryContentRepository = sumSummaryContentRepository;
  294. _sumDiagnosisRepository = sumDiagnosisRepository;
  295. _configuration = configuration;
  296. _myUserAppService = myUserAppService;
  297. _columnReferenceAppService = columnReferenceAppService;
  298. _cardTypeRepository = cardTypeRepository;
  299. _cardRegisterRepository = cardRegisterRepository;
  300. _serviceScopeFactory = serviceScopeFactory;
  301. _dbContextProvider = dbContextProvider;
  302. _currentUser = currentUser;
  303. _guideTypeRepository = guideTypeRepository;
  304. _medicalReportTypeRepository = medicalReportTypeRepository;
  305. _medicalConclusionTypeRepository = medicalConclusionTypeRepository;
  306. _sampleContainerRepository = sampleContainerRepository;
  307. _customerOrgTypeRepository = customerOrgTypeRepository;
  308. _organizationUnitRepository = organizationUnitRepository;
  309. _organizationUnitManager = organizationUnitManager;
  310. _sexRepository = sexRepository;
  311. _forSexRepository = forSexRepository;
  312. _maritalStatusRepository = maritalStatusRepository;
  313. _resultStatusRepository = resultStatusRepository;
  314. _payModeRepository = payModeRepository;
  315. _diagnosisLevelRepository = diagnosisLevelRepository;
  316. _identityUserManager = identityUserManager;
  317. _identityUserOrganizationUnitRepository = identityUserOrganizationUnitRepository;
  318. _commonTableRepository = commonTableRepository;
  319. _roomRepository = roomRepository;
  320. _roomDetailRepository = roomDetailRepository;
  321. _userItemTypeRepository = userItemTypeRepository;
  322. }
  323. /// <summary>
  324. /// 默认数据处理
  325. /// </summary>
  326. /// <returns></returns>
  327. [HttpPost("api/app/CCTJExportData/HandDefaultData")]
  328. public async Task HandDefaultData()
  329. {
  330. #region 默认指引类别
  331. var isDefaultGuidType = await _guideTypeRepository.FirstOrDefaultAsync(f => f.Id == defaultGuidTypeId);
  332. if (isDefaultGuidType == null)
  333. {
  334. List<GuideType> guideTypes = new List<GuideType>();
  335. guideTypes.Add(new GuideType(defaultGuidTypeId)
  336. {
  337. DisplayName = "普通检查",
  338. SimpleCode = "PTJC",
  339. DisplayOrder = 1
  340. });
  341. guideTypes.Add(new GuideType('1')
  342. {
  343. DisplayName = "检验",
  344. SimpleCode = "JY",
  345. DisplayOrder = 2
  346. });
  347. guideTypes.Add(new GuideType('2')
  348. {
  349. DisplayName = "特检",
  350. SimpleCode = "TJ",
  351. DisplayOrder = 3
  352. });
  353. guideTypes.Add(new GuideType('3')
  354. {
  355. DisplayName = "放射",
  356. SimpleCode = "FS",
  357. DisplayOrder = 4
  358. });
  359. await _guideTypeRepository.InsertManyAsync(guideTypes);
  360. }
  361. #endregion
  362. #region 默认体检报告类别
  363. var isDefaultMedicalReportType = await _medicalReportTypeRepository.FirstOrDefaultAsync(f => f.Id == defaultMedicalReportTypeId);
  364. if (isDefaultMedicalReportType == null)
  365. {
  366. List<MedicalReportType> medicalReportTypes = new List<MedicalReportType>();
  367. medicalReportTypes.Add(new MedicalReportType(defaultMedicalReportTypeId)
  368. {
  369. DisplayName = "普通检查",
  370. SimpleCode = "PTJC",
  371. DisplayOrder = 1
  372. });
  373. medicalReportTypes.Add(new MedicalReportType('1')
  374. {
  375. DisplayName = "检验",
  376. SimpleCode = "JY",
  377. DisplayOrder = 2
  378. });
  379. medicalReportTypes.Add(new MedicalReportType('2')
  380. {
  381. DisplayName = "特检",
  382. SimpleCode = "TJ",
  383. DisplayOrder = 3
  384. });
  385. medicalReportTypes.Add(new MedicalReportType('3')
  386. {
  387. DisplayName = "放射",
  388. SimpleCode = "FS",
  389. DisplayOrder = 4
  390. });
  391. await _medicalReportTypeRepository.InsertManyAsync(medicalReportTypes);
  392. }
  393. #endregion
  394. #region 默认体检结论类别
  395. var isDefaultMedicalConclusionType = await _medicalConclusionTypeRepository.FirstOrDefaultAsync(f => f.Id == defaultMedicalConclusionType);
  396. if (isDefaultMedicalConclusionType == null)
  397. {
  398. var defaultEnt = new MedicalConclusionType
  399. {
  400. Id = defaultMedicalConclusionType,
  401. DisplayName = "社会体检",
  402. DisplayOrder = 1
  403. };
  404. await _medicalConclusionTypeRepository.InsertAsync(defaultEnt);
  405. }
  406. #endregion
  407. #region 默认体检中心
  408. var isDefaultMedicalCenter = await _organizationUnitRepository.FirstOrDefaultAsync(f => f.Id == defaultMedicalCenterId);
  409. if (isDefaultMedicalCenter == null)
  410. {
  411. OrganizationUnit defaultEnt = new OrganizationUnit(defaultMedicalCenterId, "石家庄长城体检中心", null);
  412. defaultEnt.SetProperty("IsPeis", 'Y');
  413. await _organizationUnitManager.CreateAsync(defaultEnt);
  414. }
  415. #endregion
  416. #region 默认容器
  417. var isDefaultSampleContainer = await _sampleContainerRepository.FirstOrDefaultAsync(f => f.Id == defaultSampleContainerId);
  418. if (isDefaultSampleContainer == null)
  419. {
  420. var defaultEnt = new SampleContainer(defaultSampleContainerId)
  421. {
  422. DisplayName = "管子",
  423. SimpleCode = "GZ",
  424. DisplayOrder = 1,
  425. ContainerColor = 16711680,
  426. ContainerColorName = "其它",
  427. ContainerRemark = ""
  428. };
  429. await _sampleContainerRepository.InsertAsync(defaultEnt);
  430. }
  431. //var isDefaultSampleContainer = await _sampleContainerRepository.CountAsync();
  432. //if (isDefaultSampleContainer == 0)
  433. //{
  434. // List<SampleContainer> sampleContainers = new List<SampleContainer>();
  435. // var oldSpecimenTypeList = await oldDb.Ado.GetDataTableAsync(" select * from specimen_type order by display_order asc");
  436. // if (oldSpecimenTypeList.Rows.Count > 0)
  437. // {
  438. // foreach (DataRow row in oldSpecimenTypeList.Rows)
  439. // {
  440. // using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  441. // {
  442. // var tempId = GuidGenerator.Create();
  443. // if (row["specimen_type_id"].ToString() == "0011")
  444. // {
  445. // tempId = defaultSampleContainerId;
  446. // }
  447. // var defaultEnt = new SampleContainer(tempId)
  448. // {
  449. // DisplayName = row["specimen_type_name"].ToString(),
  450. // SimpleCode = LanguageConverter.GetPYSimpleCode(row["specimen_type_name"].ToString()),
  451. // DisplayOrder = oldSpecimenTypeList.Rows.IndexOf(row) + 1,
  452. // ContainerColor = 16711680,
  453. // ContainerColorName = "其它",
  454. // ContainerRemark = ""
  455. // };
  456. // await _sampleContainerRepository.InsertAsync(defaultEnt);
  457. // var fieldComparison = new FieldComparison
  458. // {
  459. // TableName = "sample_container",
  460. // FieldName = "id",
  461. // NewKeyValue = tempId.ToString(),
  462. // OldKeyValue = row["specimen_type_id"].ToString()
  463. // };
  464. // await _fieldComparisonRepository.InsertAsync(fieldComparison);
  465. // await uow.CompleteAsync();
  466. // }
  467. // }
  468. // }
  469. // await _diagnosisLevelRepository.InsertManyAsync(diagnosisLevels);
  470. //}
  471. #endregion
  472. #region 默认单位性质
  473. var isDefaultOrgType = await _customerOrgTypeRepository.FirstOrDefaultAsync(f => f.Id == defaultOrgTypeId);
  474. if (isDefaultOrgType == null)
  475. {
  476. var defaultEnt = new CustomerOrgType(defaultOrgTypeId)
  477. {
  478. DisplayName = "其它",
  479. SimpleCode = "QT",
  480. DisplayOrder = 1
  481. };
  482. await _customerOrgTypeRepository.InsertAsync(defaultEnt);
  483. }
  484. #endregion
  485. #region 诊断级别
  486. var isDiagnosisLevel = await _diagnosisLevelRepository.CountAsync();
  487. if (isDiagnosisLevel == 0)
  488. {
  489. List<DiagnosisLevel> diagnosisLevels = new List<DiagnosisLevel>();
  490. diagnosisLevels.Add(new DiagnosisLevel(1)
  491. {
  492. DisplayName = "一级",
  493. DisplayOrder = 1
  494. });
  495. diagnosisLevels.Add(new DiagnosisLevel(2)
  496. {
  497. DisplayName = "二级",
  498. DisplayOrder = 2
  499. });
  500. diagnosisLevels.Add(new DiagnosisLevel(3)
  501. {
  502. DisplayName = "三级",
  503. DisplayOrder = 3
  504. });
  505. diagnosisLevels.Add(new DiagnosisLevel(4)
  506. {
  507. DisplayName = "四级",
  508. DisplayOrder = 4
  509. });
  510. await _diagnosisLevelRepository.InsertManyAsync(diagnosisLevels);
  511. }
  512. #endregion
  513. await CreateSexAsync();
  514. await CreateForSexAsync();
  515. await CreateMaritalStatusAsync();
  516. await CreateResultStatusAsync();
  517. }
  518. /// <summary>
  519. /// 处理基础数据
  520. /// </summary>
  521. /// <returns></returns>
  522. [HttpPost("api/app/CCTJExportData/HandBaseData")]
  523. public async Task HandBaseData()
  524. {
  525. await TransferDeviceTypeData();
  526. await TransferUnitData();
  527. await TransferMedicalTypeData();
  528. await TransferPersonnelTypeData();
  529. await TransferInvoiceItemTypeData();
  530. await TransferCollectItemTypeData();
  531. await TransferItemTypeData();
  532. await TransferSampleTypeData();
  533. await TransferNationData();
  534. await TransferMedicalConclusionData();
  535. await TransferUserData();
  536. await TransferUserOrganizationUnitData();
  537. await TransferPayModeData();
  538. }
  539. /// <summary>
  540. /// 处理基础项目相关数据
  541. /// </summary>
  542. /// <returns></returns>
  543. [HttpPost("api/app/CCTJExportData/HandBaseItemData")]
  544. public async Task HandBaseItemData()
  545. {
  546. await TransferItemData();
  547. await TransferAsbitemData();
  548. await TransferAsbitemDetailData();
  549. await TransferMedicalPackageData();
  550. await TransferMedicalPackageDetailData();
  551. await TransferDiagnosisData();
  552. await TransferSuggestionData();
  553. await TransferItemResultTemplateData();
  554. await TransferItemResultMatchData();
  555. await TransferReferenceRangeData();
  556. await TransferSampleGroupData();
  557. await TransferSampleGroupDetailData();
  558. await TransferTopCustomerOrgData();
  559. await TransferTwoCustomerOrgData();
  560. await TransferThreeCustomerOrgData();
  561. await TransferFourCustomerOrgData();
  562. await TransferCustomerOrgRegisterData();
  563. await TransferCustomerOrgGroupData();
  564. await TransferCustomerOrgGroupDetailData();
  565. }
  566. #region 基础数据
  567. /// <summary>
  568. /// 迁移仪器类别数据
  569. /// </summary>
  570. /// <returns></returns>
  571. [RemoteService(false)]
  572. public async Task TransferDeviceTypeData()
  573. {
  574. var count = await _deviceTypeRepository.GetCountAsync();
  575. if (count == 0)
  576. {
  577. var oldDeviceTypeList = await oldDb.Ado.GetDataTableAsync("select device_type_id,device_type_name from device_type order by display_order asc");
  578. if (oldDeviceTypeList.Rows.Count > 0)
  579. {
  580. foreach (DataRow row in oldDeviceTypeList.Rows)
  581. {
  582. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  583. {
  584. Guid deviceTypeId = GuidGenerator.Create();
  585. var data = new DeviceType(deviceTypeId)
  586. {
  587. CheckTypeFlag = '0',
  588. DisplayName = row["device_type_name"].ToString(),
  589. DisplayOrder = oldDeviceTypeList.Rows.IndexOf(row) + 1,
  590. SimpleCode = LanguageConverter.GetPYSimpleCode(row["device_type_name"].ToString())
  591. };
  592. await _deviceTypeRepository.InsertAsync(data);
  593. var fieldComparison = new FieldComparison
  594. {
  595. TableName = "device_type",
  596. FieldName = "id",
  597. NewKeyValue = deviceTypeId.ToString(),
  598. OldKeyValue = row["device_type_id"].ToString()
  599. };
  600. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  601. await uow.CompleteAsync();
  602. }
  603. }
  604. }
  605. _logger.LogInformation($"仪器类别数据处理完毕,处理数量{oldDeviceTypeList.Rows.Count}");
  606. }
  607. else
  608. {
  609. _logger.LogInformation("仪器类别数据已存在,未处理");
  610. }
  611. }
  612. /// <summary>
  613. /// 迁移数值单位数据
  614. /// </summary>
  615. /// <returns></returns>
  616. [RemoteService(false)]
  617. public async Task TransferUnitData()
  618. {
  619. var count = await _unitRepository.GetCountAsync();
  620. if (count == 0)
  621. {
  622. var oldUnitList = await oldDb.Ado.GetDataTableAsync("select unit_id,unit_name from unit order by display_order asc");
  623. if (oldUnitList.Rows.Count > 0)
  624. {
  625. foreach (DataRow row in oldUnitList.Rows)
  626. {
  627. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  628. {
  629. Guid unitId = GuidGenerator.Create();
  630. var data = new Unit(unitId)
  631. {
  632. DisplayName = row["unit_name"].ToString(),
  633. DisplayOrder = oldUnitList.Rows.IndexOf(row) + 1,
  634. SimpleCode = LanguageConverter.GetPYSimpleCode(row["unit_name"].ToString())
  635. };
  636. await _unitRepository.InsertAsync(data);
  637. var fieldComparison = new FieldComparison
  638. {
  639. TableName = "unit",
  640. FieldName = "id",
  641. NewKeyValue = unitId.ToString(),
  642. OldKeyValue = row["unit_id"].ToString()
  643. };
  644. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  645. await uow.CompleteAsync();
  646. }
  647. }
  648. _logger.LogInformation($"数值单位数据处理完毕,处理数量{oldUnitList.Rows.Count}");
  649. }
  650. else
  651. {
  652. _logger.LogInformation($"数值单位数据已存在,未处理");
  653. }
  654. }
  655. }
  656. /// <summary>
  657. /// 迁移体检类别数据
  658. /// </summary>
  659. /// <returns></returns>
  660. [RemoteService(false)]
  661. public async Task TransferMedicalTypeData()
  662. {
  663. var count = await _medicalTypeRepository.GetCountAsync();
  664. if (count == 0)
  665. {
  666. var oldMedicalTypeList = await oldDb.Ado.GetDataTableAsync("select medical_type_id,medical_type_name from medical_type order by display_order asc");
  667. if (oldMedicalTypeList.Rows.Count > 0)
  668. {
  669. foreach (DataRow row in oldMedicalTypeList.Rows)
  670. {
  671. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  672. {
  673. Guid medicalTypeId = GuidGenerator.Create();
  674. var data = new MedicalType(medicalTypeId)
  675. {
  676. DisplayName = row["medical_type_name"].ToString(),
  677. DisplayOrder = oldMedicalTypeList.Rows.IndexOf(row) + 1,
  678. SimpleCode = LanguageConverter.GetPYSimpleCode(row["medical_type_name"].ToString())
  679. };
  680. await _medicalTypeRepository.InsertAsync(data);
  681. var fieldComparison = new FieldComparison
  682. {
  683. TableName = "medical_type",
  684. FieldName = "id",
  685. NewKeyValue = medicalTypeId.ToString(),
  686. OldKeyValue = row["medical_type_id"].ToString()
  687. };
  688. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  689. await uow.CompleteAsync();
  690. }
  691. }
  692. _logger.LogInformation($"体检类别数据处理完毕,处理数量{oldMedicalTypeList.Rows.Count}");
  693. }
  694. else
  695. {
  696. _logger.LogInformation($"体检类别数据已存在,未处理");
  697. }
  698. }
  699. }
  700. /// <summary>
  701. /// 迁移人员类别数据
  702. /// </summary>
  703. /// <returns></returns>
  704. [RemoteService(false)]
  705. public async Task TransferPersonnelTypeData()
  706. {
  707. var count = await _personnelTypeRepository.GetCountAsync();
  708. if (count == 0)
  709. {
  710. var oldPersonnelTypeList = await oldDb.Ado.GetDataTableAsync("select personnel_type_id,personnel_type_name from personnel_type order by display_order asc");
  711. if (oldPersonnelTypeList.Rows.Count > 0)
  712. {
  713. foreach (DataRow row in oldPersonnelTypeList.Rows)
  714. {
  715. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  716. {
  717. Guid personnelTypeId = GuidGenerator.Create();
  718. var data = new PersonnelType(personnelTypeId)
  719. {
  720. DisplayName = row["personnel_type_name"].ToString(),
  721. DisplayOrder = oldPersonnelTypeList.Rows.IndexOf(row) + 1,
  722. SimpleCode = LanguageConverter.GetPYSimpleCode(row["personnel_type_name"].ToString())
  723. };
  724. await _personnelTypeRepository.InsertAsync(data);
  725. var fieldComparison = new FieldComparison
  726. {
  727. TableName = "personnel_type",
  728. FieldName = "id",
  729. NewKeyValue = personnelTypeId.ToString(),
  730. OldKeyValue = row["personnel_type_id"].ToString()
  731. };
  732. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  733. await uow.CompleteAsync();
  734. }
  735. }
  736. }
  737. _logger.LogInformation($"人员类别数据处理完毕,处理数量{oldPersonnelTypeList.Rows.Count}");
  738. }
  739. else
  740. {
  741. _logger.LogInformation($"人员类别数据已存在,未处理");
  742. }
  743. }
  744. /// <summary>
  745. /// 迁移发票项目类别数据
  746. /// </summary>
  747. /// <returns></returns>
  748. [RemoteService(false)]
  749. public async Task TransferInvoiceItemTypeData()
  750. {
  751. var count = await _invoiceItemTypeRepository.GetCountAsync();
  752. if (count == 0)
  753. {
  754. var oldInvoiceItemTypeList = await oldDb.Ado.GetDataTableAsync("select invoice_item_type_id,invoice_item_type_name from invoice_item_type order by display_order asc");
  755. if (oldInvoiceItemTypeList.Rows.Count > 0)
  756. {
  757. foreach (DataRow row in oldInvoiceItemTypeList.Rows)
  758. {
  759. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  760. {
  761. Guid invoiceItemTypeId = GuidGenerator.Create();
  762. var data = new InvoiceItemType(invoiceItemTypeId)
  763. {
  764. DisplayName = row["invoice_item_type_name"].ToString(),
  765. DisplayOrder = oldInvoiceItemTypeList.Rows.IndexOf(row) + 1,
  766. SimpleCode = LanguageConverter.GetPYSimpleCode(row["invoice_item_type_name"].ToString())
  767. };
  768. await _invoiceItemTypeRepository.InsertAsync(data);
  769. var fieldComparison = new FieldComparison
  770. {
  771. TableName = "invoice_item_type",
  772. FieldName = "id",
  773. NewKeyValue = invoiceItemTypeId.ToString(),
  774. OldKeyValue = row["invoice_item_type_id"].ToString()
  775. };
  776. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  777. await uow.CompleteAsync();
  778. }
  779. }
  780. }
  781. _logger.LogInformation($"发票项目类别数据处理完毕,处理数量{oldInvoiceItemTypeList.Rows.Count}");
  782. }
  783. else
  784. {
  785. _logger.LogInformation($"发票项目类别数据已存在,未处理");
  786. }
  787. }
  788. /// <summary>
  789. /// 迁移汇总项目类别数据
  790. /// </summary>
  791. /// <returns></returns>
  792. [RemoteService(false)]
  793. public async Task TransferCollectItemTypeData()
  794. {
  795. var count = await _collectItemTypeRepository.GetCountAsync();
  796. if (count == 0)
  797. {
  798. var oldCollectItemTypeList = await oldDb.Ado.GetDataTableAsync("select collect_item_type_id,collect_item_type_name,invoice_item_type_id from collect_item_type order by display_order asc");
  799. if (oldCollectItemTypeList.Rows.Count > 0)
  800. {
  801. foreach (DataRow row in oldCollectItemTypeList.Rows)
  802. {
  803. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  804. {
  805. Guid collectItemTypeId = GuidGenerator.Create();
  806. Guid invoiceItemTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "invoice_item_type" && m.OldKeyValue == row["invoice_item_type_id"].ToString()).FirstOrDefault().NewKeyValue);
  807. var data = new CollectItemType(collectItemTypeId)
  808. {
  809. DisplayName = row["collect_item_type_name"].ToString(),
  810. DisplayOrder = oldCollectItemTypeList.Rows.IndexOf(row) + 1,
  811. SimpleCode = LanguageConverter.GetPYSimpleCode(row["collect_item_type_name"].ToString()),
  812. InvoiceItemTypeId = invoiceItemTypeId
  813. };
  814. await _collectItemTypeRepository.InsertAsync(data);
  815. var fieldComparison = new FieldComparison
  816. {
  817. TableName = "collect_item_type",
  818. FieldName = "id",
  819. NewKeyValue = collectItemTypeId.ToString(),
  820. OldKeyValue = row["collect_item_type_id"].ToString()
  821. };
  822. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  823. await uow.CompleteAsync();
  824. }
  825. }
  826. _logger.LogInformation($"汇总项目类别数据处理完毕,处理数量{oldCollectItemTypeList.Rows.Count}");
  827. }
  828. else
  829. {
  830. _logger.LogInformation($"汇总项目类别数据已存在,未处理");
  831. }
  832. }
  833. }
  834. /// <summary>
  835. /// 迁移项目类别-科室数据
  836. /// </summary>
  837. /// <returns></returns>
  838. [RemoteService(false)]
  839. public async Task TransferItemTypeData()
  840. {
  841. var count = await _itemTypeRepository.GetCountAsync();
  842. if (count == 0)
  843. {
  844. var oldItemTypeList = await oldDb.Ado.GetDataTableAsync("select department_id,department_type,department_name,merge_asbitem_flag,print_pacs_barcode_flag from department order by display_order asc");
  845. if (oldItemTypeList.Rows.Count > 0)
  846. {
  847. foreach (DataRow row in oldItemTypeList.Rows)
  848. {
  849. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  850. {
  851. Guid itemTypeId = GuidGenerator.Create();
  852. var data = new ItemType(itemTypeId)
  853. {
  854. DisplayName = row["department_name"].ToString(),
  855. DisplayOrder = oldItemTypeList.Rows.IndexOf(row) + 1,
  856. SimpleCode = LanguageConverter.GetPYSimpleCode(row["department_name"].ToString()),
  857. CheckTypeFlag = Convert.ToChar(row["department_type"]),
  858. // GuidTypeId = defaultGuidTypeId,
  859. GuidTypeId = Convert.ToChar(row["department_type"]),
  860. IsMergeAsbitem = Convert.ToChar(row["merge_asbitem_flag"]),
  861. IsWrap = 'N',
  862. MedicalReportTypeId = Convert.ToChar(row["department_type"]),
  863. //MedicalReportTypeId = defaultMedicalReportTypeId,
  864. ParentId = null,
  865. PathCode = _itemTypeManager.CreatePathCode(null).Result,
  866. IsCheckRequest = Convert.ToChar(row["print_pacs_barcode_flag"])
  867. };
  868. await _itemTypeRepository.InsertAsync(data);
  869. var fieldComparison = new FieldComparison
  870. {
  871. TableName = "item_type",
  872. FieldName = "id",
  873. NewKeyValue = itemTypeId.ToString(),
  874. OldKeyValue = row["department_id"].ToString()
  875. };
  876. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  877. await uow.CompleteAsync();
  878. }
  879. }
  880. }
  881. _logger.LogInformation($"项目类别数据处理完毕,处理数量{oldItemTypeList.Rows.Count}");
  882. }
  883. else
  884. {
  885. _logger.LogInformation($"项目类别数据已存在,未处理");
  886. }
  887. }
  888. /// <summary>
  889. /// 迁移标本类型数据
  890. /// </summary>
  891. /// <returns></returns>
  892. [RemoteService(false)]
  893. public async Task TransferSampleTypeData()
  894. {
  895. var count = await _sampleTypeRepository.GetCountAsync();
  896. if (count == 0)
  897. {
  898. var oldSampleTypeList = await oldDb.Ado.GetDataTableAsync("select specimen_type_id,specimen_type_name from specimen_type order by display_order asc");
  899. if (oldSampleTypeList.Rows.Count > 0)
  900. {
  901. foreach (DataRow row in oldSampleTypeList.Rows)
  902. {
  903. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  904. {
  905. Guid sampleTypeId = GuidGenerator.Create();
  906. var data = new SampleType(sampleTypeId)
  907. {
  908. DisplayName = row["specimen_type_name"].ToString(),
  909. DisplayOrder = oldSampleTypeList.Rows.IndexOf(row) + 1,
  910. SimpleCode = LanguageConverter.GetPYSimpleCode(row["specimen_type_name"].ToString())
  911. };
  912. await _sampleTypeRepository.InsertAsync(data);
  913. var fieldComparison = new FieldComparison
  914. {
  915. TableName = "sample_type",
  916. FieldName = "id",
  917. NewKeyValue = sampleTypeId.ToString(),
  918. OldKeyValue = row["specimen_type_id"].ToString()
  919. };
  920. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  921. await uow.CompleteAsync();
  922. }
  923. }
  924. }
  925. _logger.LogInformation($"标本类型数据处理完毕,处理数量{oldSampleTypeList.Rows.Count}");
  926. }
  927. else
  928. {
  929. _logger.LogInformation($"标本类型数据已存在,未处理");
  930. }
  931. }
  932. /// <summary>
  933. /// 民族数据对照
  934. /// </summary>
  935. /// <returns></returns>
  936. [RemoteService(false)]
  937. public async Task TransferNationData()
  938. {
  939. var count = await _nationRepository.GetCountAsync();
  940. if (count == 0)
  941. {
  942. var oldNationList = await oldDb.Ado.GetDataTableAsync("select * from nation order by nation_id asc");
  943. if (oldNationList.Rows.Count > 0)
  944. {
  945. foreach (DataRow row in oldNationList.Rows)
  946. {
  947. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  948. {
  949. var data = new Nation()
  950. {
  951. Id = row["nation_id"].ToString(),
  952. CountryCode = "",
  953. DisplayName = row["nation_name"].ToString(),
  954. DisplayOrder = oldNationList.Rows.IndexOf(row) + 1,
  955. SimpleCode = row["py_simple_code"].ToString()
  956. };
  957. await _nationRepository.InsertAsync(data);
  958. var fieldComparison = new FieldComparison
  959. {
  960. TableName = "nation",
  961. FieldName = "id",
  962. NewKeyValue = row["nation_id"].ToString(),
  963. OldKeyValue = row["nation_id"].ToString()
  964. };
  965. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  966. await uow.CompleteAsync();
  967. }
  968. }
  969. }
  970. _logger.LogInformation($"民族数据处理完毕,处理数量{oldNationList.Rows.Count}");
  971. }
  972. else
  973. {
  974. _logger.LogInformation($"民族数据已存在,未处理");
  975. }
  976. }
  977. /// <summary>
  978. /// 迁移体检结论数据
  979. /// </summary>
  980. /// <returns></returns>
  981. [RemoteService(false)]
  982. public async Task TransferMedicalConclusionData()
  983. {
  984. var count = await _medicalConclusionRepository.GetCountAsync();
  985. if (count == 0)
  986. {
  987. var oldMedicalConclusionList = await oldDb.Ado.GetDataTableAsync("select medical_conclusion_id,medical_conclusion_name from medical_conclusion order by display_order asc");
  988. if (oldMedicalConclusionList.Rows.Count > 0)
  989. {
  990. foreach (DataRow row in oldMedicalConclusionList.Rows)
  991. {
  992. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  993. {
  994. Guid medicalConclusionId = GuidGenerator.Create();
  995. var data = new MedicalConclusion(medicalConclusionId)
  996. {
  997. DisplayName = row["medical_conclusion_name"].ToString(),
  998. DisplayOrder = oldMedicalConclusionList.Rows.IndexOf(row) + 1,
  999. SimpleCode = LanguageConverter.GetPYSimpleCode(row["medical_conclusion_name"].ToString()),
  1000. MedicalConclusionTypeId = defaultMedicalConclusionType
  1001. };
  1002. await _medicalConclusionRepository.InsertAsync(data);
  1003. var fieldComparison = new FieldComparison
  1004. {
  1005. TableName = "medical_conclusion",
  1006. FieldName = "id",
  1007. NewKeyValue = medicalConclusionId.ToString(),
  1008. OldKeyValue = row["medical_conclusion_id"].ToString()
  1009. };
  1010. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  1011. await uow.CompleteAsync();
  1012. }
  1013. }
  1014. }
  1015. _logger.LogInformation($"体检结论数据处理完毕,处理数量{oldMedicalConclusionList.Rows.Count}");
  1016. }
  1017. else
  1018. {
  1019. _logger.LogInformation("体检结论数据已存在,未处理");
  1020. }
  1021. }
  1022. /// <summary>
  1023. /// 迁移用户对应的科室
  1024. /// </summary>
  1025. /// <returns></returns>
  1026. [RemoteService(false)]
  1027. public async Task TransferUserOrganizationUnitData()
  1028. {
  1029. var count = await _identityUserOrganizationUnitRepository.CountAsync();
  1030. if (count == 0)
  1031. {
  1032. var identityUserList = await _identityUserRepository.GetListAsync();
  1033. if (identityUserList.Count > 0)
  1034. {
  1035. foreach (var item in identityUserList)
  1036. {
  1037. await _identityUserManager.SetOrganizationUnitsAsync(item.Id, defaultMedicalCenterId);
  1038. }
  1039. }
  1040. _logger.LogInformation($"用户对应的科室处理完毕,处理数量{identityUserList.Count}");
  1041. }
  1042. else
  1043. {
  1044. _logger.LogInformation("用户对应的科室已存在,未处理");
  1045. }
  1046. }
  1047. /// <summary>
  1048. /// 迁移收费方式数据
  1049. /// </summary>
  1050. /// <returns></returns>
  1051. [RemoteService(false)]
  1052. public async Task TransferPayModeData()
  1053. {
  1054. var count = await _payModeRepository.GetCountAsync();
  1055. if (count == 0)
  1056. {
  1057. var oldPaymentModeList = await oldDb.Ado.GetDataTableAsync("select payment_mode_id,payment_mode_name from payment_mode order by display_order asc");
  1058. if (oldPaymentModeList.Rows.Count > 0)
  1059. {
  1060. foreach (DataRow row in oldPaymentModeList.Rows)
  1061. {
  1062. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1063. {
  1064. var data = new PayMode()
  1065. {
  1066. Id = row["payment_mode_id"].ToString(),
  1067. DisplayName = row["payment_mode_name"].ToString(),
  1068. DisplayOrder = oldPaymentModeList.Rows.IndexOf(row) + 1,
  1069. SimpleCode = LanguageConverter.GetPYSimpleCode(row["payment_mode_name"].ToString()),
  1070. IsActive = 'Y'
  1071. };
  1072. await _payModeRepository.InsertAsync(data);
  1073. await uow.CompleteAsync();
  1074. }
  1075. }
  1076. }
  1077. _logger.LogInformation($"收费方式数据处理完毕,处理数量{oldPaymentModeList.Rows.Count}");
  1078. }
  1079. else
  1080. {
  1081. _logger.LogInformation("收费方式数据已存在,未处理");
  1082. }
  1083. }
  1084. #endregion
  1085. #region 基础项目相关数据
  1086. /// <summary>
  1087. /// 迁移项目数据
  1088. /// </summary>
  1089. /// <returns></returns>
  1090. [RemoteService(false)]
  1091. public async Task TransferItemData()
  1092. {
  1093. var count = await _itemRepository.GetCountAsync();
  1094. if (count == 0)
  1095. {
  1096. var oldItemList = await oldDb.Ado.GetDataTableAsync("select a.* from item as a left join department as b on a.department_id=b.department_id order by b.display_order,a.display_order");
  1097. if (oldItemList.Rows.Count > 0)
  1098. {
  1099. foreach (DataRow row in oldItemList.Rows)
  1100. {
  1101. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1102. {
  1103. #region 根据仪器类别生成二级科室
  1104. var itemTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item_type" && m.OldKeyValue == row["department_id"].ToString()).FirstOrDefault().NewKeyValue);
  1105. Guid? deviceTypeId = null;
  1106. if (!string.IsNullOrWhiteSpace(row["device_type_id"].ToString()))
  1107. {
  1108. deviceTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "device_type" && m.OldKeyValue == row["device_type_id"].ToString()).FirstOrDefault().NewKeyValue);
  1109. var itemTypeEnt = await _itemTypeRepository.GetAsync(itemTypeId);
  1110. var deviceTypeEnt = await _deviceTypeRepository.GetAsync(deviceTypeId.Value);
  1111. var itemTypeChildEnt = await _itemTypeRepository.FirstOrDefaultAsync(m => m.ParentId == itemTypeEnt.Id && m.DisplayName == deviceTypeEnt.DisplayName);
  1112. if (itemTypeChildEnt == null)
  1113. {
  1114. Guid autoItemTypeId = GuidGenerator.Create();
  1115. #region 排序值
  1116. int displayOrder = (await _itemTypeRepository.CountAsync(m => m.ParentId == itemTypeEnt.Id)) + 1;
  1117. #endregion
  1118. var item_type_data = new ItemType(autoItemTypeId)
  1119. {
  1120. DisplayName = deviceTypeEnt.DisplayName,
  1121. DisplayOrder = displayOrder,
  1122. SimpleCode = LanguageConverter.GetPYSimpleCode(deviceTypeEnt.DisplayName),
  1123. CheckTypeFlag = itemTypeEnt.CheckTypeFlag,
  1124. GuidTypeId = itemTypeEnt.GuidTypeId,
  1125. IsMergeAsbitem = itemTypeEnt.IsMergeAsbitem,
  1126. IsWrap = itemTypeEnt.IsWrap,
  1127. MedicalReportTypeId = itemTypeEnt.MedicalReportTypeId,
  1128. ParentId = itemTypeEnt.Id,
  1129. PathCode = _itemTypeManager.CreatePathCode(itemTypeEnt.Id).Result,
  1130. IsCheckRequest = itemTypeEnt.IsCheckRequest
  1131. };
  1132. await _itemTypeRepository.InsertAsync(item_type_data);
  1133. itemTypeId = autoItemTypeId;
  1134. }
  1135. else
  1136. {
  1137. itemTypeId = itemTypeChildEnt.Id;
  1138. }
  1139. }
  1140. #endregion
  1141. Guid? unitId = null;
  1142. if (!string.IsNullOrWhiteSpace(row["unit_id"].ToString()))
  1143. unitId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "unit" && m.OldKeyValue == row["unit_id"].ToString()).FirstOrDefault().NewKeyValue);
  1144. Guid itemId = GuidGenerator.Create();
  1145. var data = new Item(itemId)
  1146. {
  1147. DisplayName = row["item_name"].ToString(),
  1148. DisplayOrder = oldItemList.Rows.IndexOf(row) + 1,
  1149. SimpleCode = LanguageConverter.GetPYSimpleCode(row["item_name"].ToString()),
  1150. CalculationFunction = "",
  1151. DefaultResult = row["default_result"].ToString(),
  1152. DiagnosisFunction = "",
  1153. EnglishShortName = row["english_abbreviation"].ToString(),
  1154. InputCheck = row["input_check"].ToString(),
  1155. IsActive = Convert.ToChar(row["valid_flag"].ToString()),
  1156. IsCalculationItem = 'N',
  1157. IsContinueProcess = 'N',
  1158. IsDiagnosisFunction = 'N',
  1159. IsNameIntoSummary = Convert.ToChar(row["name_into_summary_flag"]),
  1160. IsProduceSummary = Convert.ToChar(row["produce_summary_flag"]),
  1161. ItemTypeId = itemTypeId,
  1162. LineModeFlag = '0',
  1163. Price = Convert.ToDecimal(row["price"]),
  1164. PriceItemId = null,
  1165. ReferenceRangeTypeFlag = Convert.ToChar(row["reference_range_type"]),
  1166. ResultTemplateTypeFlag = '0',
  1167. UnitId = unitId,
  1168. DeviceTypeId = deviceTypeId
  1169. };
  1170. await _itemRepository.InsertAsync(data);
  1171. if (row["reference_range_type"].ToString() == "2" && !string.IsNullOrWhiteSpace(row["reference_range_value"].ToString()))
  1172. {
  1173. //增加字符型参考范围到参考范围表
  1174. Guid referenceRangeId = GuidGenerator.Create();
  1175. var referenceRange = new ReferenceRange(referenceRangeId)
  1176. {
  1177. AgeLowerLimit = 0,
  1178. AgeUpperLimit = 200,
  1179. CriticalRangeValue = "",
  1180. ItemId = itemId,
  1181. ForSexId = ForSexFlag.All,
  1182. LowerDiagnosisId = null,
  1183. ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Character,
  1184. UpperDiagnosisId = null,
  1185. ReferenceRangeValue = row["reference_range_value"].ToString()
  1186. };
  1187. //referenceRanges.Add(referenceRange);
  1188. await _referenceRangeRepository.InsertAsync(referenceRange);
  1189. }
  1190. var fieldComparison = new FieldComparison
  1191. {
  1192. TableName = "item",
  1193. FieldName = "id",
  1194. NewKeyValue = itemId.ToString(),
  1195. OldKeyValue = row["item_id"].ToString()
  1196. };
  1197. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  1198. await uow.CompleteAsync();
  1199. }
  1200. }
  1201. }
  1202. _logger.LogInformation($"项目数据处理完毕,处理数量{oldItemList.Rows.Count}");
  1203. }
  1204. else
  1205. {
  1206. _logger.LogInformation("项目数据已存在,未处理");
  1207. }
  1208. }
  1209. /// <summary>
  1210. /// 迁移组合项目数据
  1211. /// </summary>
  1212. /// <returns></returns>
  1213. [RemoteService(false)]
  1214. public async Task TransferAsbitemData()
  1215. {
  1216. var count = await _asbitemRepository.GetCountAsync();
  1217. if (count == 0)
  1218. {
  1219. var oldAsbitemList = await oldDb.Ado.GetDataTableAsync("select a.* from asbitem as a left join department as b on a.department_id=b.department_id order by b.display_order,a.display_order ");
  1220. if (oldAsbitemList.Rows.Count > 0)
  1221. {
  1222. foreach (DataRow row in oldAsbitemList.Rows)
  1223. {
  1224. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1225. {
  1226. #region 根据仪器类别生成二级科室
  1227. var itemTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item_type" && m.OldKeyValue == row["department_id"].ToString()).FirstOrDefault().NewKeyValue);
  1228. Guid? deviceTypeId = null;
  1229. if (!string.IsNullOrWhiteSpace(row["device_type_id"].ToString()))
  1230. {
  1231. deviceTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "device_type" && m.OldKeyValue == row["device_type_id"].ToString()).FirstOrDefault().NewKeyValue);
  1232. var itemTypeEnt = await _itemTypeRepository.GetAsync(itemTypeId);
  1233. var deviceTypeEnt = await _deviceTypeRepository.GetAsync(deviceTypeId.Value);
  1234. var itemTypeChildEnt = await _itemTypeRepository.FirstOrDefaultAsync(m => m.ParentId == itemTypeEnt.Id && m.DisplayName == deviceTypeEnt.DisplayName);
  1235. if (itemTypeChildEnt == null)
  1236. {
  1237. Guid autoItemTypeId = GuidGenerator.Create();
  1238. #region 排序值
  1239. int displayOrder = (await _itemTypeRepository.CountAsync(m => m.ParentId == itemTypeEnt.Id)) + 1;
  1240. #endregion
  1241. var item_type_data = new ItemType(autoItemTypeId)
  1242. {
  1243. DisplayName = deviceTypeEnt.DisplayName,
  1244. DisplayOrder = displayOrder,
  1245. SimpleCode = LanguageConverter.GetPYSimpleCode(deviceTypeEnt.DisplayName),
  1246. CheckTypeFlag = itemTypeEnt.CheckTypeFlag,
  1247. GuidTypeId = itemTypeEnt.GuidTypeId,
  1248. IsMergeAsbitem = itemTypeEnt.IsMergeAsbitem,
  1249. IsWrap = itemTypeEnt.IsWrap,
  1250. MedicalReportTypeId = itemTypeEnt.MedicalReportTypeId,
  1251. ParentId = itemTypeEnt.Id,
  1252. PathCode = _itemTypeManager.CreatePathCode(itemTypeEnt.Id).Result,
  1253. IsCheckRequest = itemTypeEnt.IsCheckRequest
  1254. };
  1255. await _itemTypeRepository.InsertAsync(item_type_data);
  1256. itemTypeId = autoItemTypeId;
  1257. }
  1258. else
  1259. {
  1260. itemTypeId = itemTypeChildEnt.Id;
  1261. }
  1262. }
  1263. #endregion
  1264. Guid collectItemTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "collect_item_type" && m.OldKeyValue == row["collect_item_type_id"].ToString()).FirstOrDefault().NewKeyValue);
  1265. Guid asbitemId = GuidGenerator.Create();
  1266. var data = new Asbitem(asbitemId)
  1267. {
  1268. DisplayName = row["asbitem_name"].ToString(),
  1269. DisplayOrder = oldAsbitemList.Rows.IndexOf(row) + 1,
  1270. SimpleCode = LanguageConverter.GetPYSimpleCode(row["asbitem_name"].ToString()),
  1271. DefaultResult = row["default_result"].ToString(),
  1272. DiagnosisFunction = "",
  1273. IsActive = Convert.ToChar(row["valid_flag"].ToString()),
  1274. IsContinueProcess = 'N',
  1275. IsDiagnosisFunction = 'N',
  1276. ItemTypeId = itemTypeId,
  1277. Price = Convert.ToDecimal(row["price"]),
  1278. DeviceTypeId = deviceTypeId,
  1279. ClinicalMeaning = row["clinical_meaning"].ToString(),
  1280. ForSexId = ConvertForSex(row["for_sex_id"].ToString()),
  1281. CollectItemTypeId = collectItemTypeId,
  1282. //InvoiceItemTypeId = InvoiceItemTypeId,
  1283. IsBeforeEat = Convert.ToChar(row["before_eat_flag"].ToString()),
  1284. IsCheck = Convert.ToChar(row["check_flag"].ToString()),
  1285. IsItemResultMerger = Convert.ToChar(row["item_result_merger_flag"].ToString()),
  1286. IsPictureRotate = Convert.ToChar(row["picture_rotate_flag"].ToString()),
  1287. QueueTime = string.IsNullOrEmpty(row["queue_time"].ToString()) ? 0 : Convert.ToDecimal(row["queue_time"].ToString()),
  1288. ShortName = row["short_name"].ToString(),
  1289. BarcodeMode = '0',
  1290. DiseaseScreeningTypeId = null,
  1291. ForPregnantFlag = 'A',
  1292. IsWebAppoint = 'N',
  1293. MaritalStatusId = 'A',
  1294. Warn = "",
  1295. IsOutsend = Convert.ToChar(string.IsNullOrWhiteSpace(row["outsend_flag"].ToString()) ? "N" : row["outsend_flag"].ToString())
  1296. };
  1297. await _asbitemRepository.InsertAsync(data);
  1298. #region 指引信息
  1299. if (!string.IsNullOrWhiteSpace(row["prompt"].ToString()))
  1300. {
  1301. var asbitemGuideData = new AsbitemGuide
  1302. {
  1303. AsbitemId = asbitemId,
  1304. ForSexId = ForSexFlag.All,
  1305. Guide = row["prompt"].ToString(),
  1306. MedicalCenterId = defaultMedicalCenterId
  1307. };
  1308. await _asbitemGuideRepository.InsertAsync(asbitemGuideData);
  1309. }
  1310. #endregion
  1311. var fieldComparison = new FieldComparison
  1312. {
  1313. TableName = "asbitem",
  1314. FieldName = "id",
  1315. NewKeyValue = asbitemId.ToString(),
  1316. OldKeyValue = row["asbitem_id"].ToString()
  1317. };
  1318. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  1319. await uow.CompleteAsync();
  1320. }
  1321. }
  1322. }
  1323. _logger.LogInformation($"组合项目数据处理完毕,处理数量{oldAsbitemList.Rows.Count}");
  1324. }
  1325. else
  1326. {
  1327. _logger.LogInformation("组合项目数据已存在,未处理");
  1328. }
  1329. }
  1330. /// <summary>
  1331. /// 迁移组合项目明细数据 无字典
  1332. /// </summary>
  1333. /// <returns></returns>
  1334. [RemoteService(false)]
  1335. public async Task TransferAsbitemDetailData()
  1336. {
  1337. var count = await _asbitemDetailRepository.GetCountAsync();
  1338. if (count == 0)
  1339. {
  1340. var oldAsbitemDetailList = await oldDb.Ado.GetDataTableAsync("select * from asbitem_detail ");
  1341. if (oldAsbitemDetailList.Rows.Count > 0)
  1342. {
  1343. foreach (DataRow row in oldAsbitemDetailList.Rows)
  1344. {
  1345. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1346. {
  1347. Guid asbitemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "asbitem" && m.OldKeyValue == row["asbitem_id"].ToString()).FirstOrDefault().NewKeyValue);
  1348. Guid itemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item" && m.OldKeyValue == row["item_id"].ToString()).FirstOrDefault().NewKeyValue);
  1349. var data = new AsbitemDetail
  1350. {
  1351. AsbitemId = asbitemId,
  1352. ItemId = itemId
  1353. };
  1354. await _asbitemDetailRepository.InsertAsync(data);
  1355. await uow.CompleteAsync();
  1356. }
  1357. }
  1358. }
  1359. _logger.LogInformation($"组合项目明细数据处理完毕,处理数量{oldAsbitemDetailList.Rows.Count}");
  1360. }
  1361. else
  1362. {
  1363. _logger.LogInformation("组合项目明细数据已存在,未处理");
  1364. }
  1365. }
  1366. /// <summary>
  1367. /// 迁移体检套餐数据
  1368. /// </summary>
  1369. /// <returns></returns>
  1370. [RemoteService(false)]
  1371. public async Task TransferMedicalPackageData()
  1372. {
  1373. var count = await _medicalPackageRepository.GetCountAsync();
  1374. if (count == 0)
  1375. {
  1376. var oldMedicalPackageList = await oldDb.Ado.GetDataTableAsync("select * from medical_package order by display_order");
  1377. if (oldMedicalPackageList.Rows.Count > 0)
  1378. {
  1379. foreach (DataRow row in oldMedicalPackageList.Rows)
  1380. {
  1381. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1382. {
  1383. Guid medicalPackageId = GuidGenerator.Create();
  1384. var data = new MedicalPackage(medicalPackageId)
  1385. {
  1386. DisplayName = row["medical_package_name"].ToString(),
  1387. DisplayOrder = oldMedicalPackageList.Rows.IndexOf(row) + 1,
  1388. SimpleCode = LanguageConverter.GetPYSimpleCode(row["medical_package_name"].ToString()),
  1389. ForSexId = ConvertForSex(row["for_sex_id"].ToString()),
  1390. IsActive = Convert.ToChar(row["valid_flag"].ToString()),
  1391. Price = Convert.ToDecimal(row["price"].ToString()),
  1392. Remark = row["remark"].ToString(),
  1393. AgeLowerLimit = 0,
  1394. AgeUpperLimit = 200,
  1395. IsBasicRecommend = 'N',
  1396. IsWebAppoint = 'N',
  1397. MaritalStatusId = 'A'
  1398. };
  1399. await _medicalPackageRepository.InsertAsync(data);
  1400. var fieldComparison = new FieldComparison
  1401. {
  1402. TableName = "medical_package",
  1403. FieldName = "id",
  1404. NewKeyValue = medicalPackageId.ToString(),
  1405. OldKeyValue = row["medical_package_id"].ToString()
  1406. };
  1407. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  1408. await uow.CompleteAsync();
  1409. }
  1410. }
  1411. }
  1412. _logger.LogInformation($"体检套餐数据处理完毕,处理数量{oldMedicalPackageList.Rows.Count}");
  1413. }
  1414. else
  1415. {
  1416. _logger.LogInformation("体检套餐数据已存在,未处理");
  1417. }
  1418. }
  1419. /// <summary>
  1420. /// 迁移体检套餐明细数据 无字典
  1421. /// </summary>
  1422. /// <returns></returns>
  1423. [RemoteService(false)]
  1424. public async Task TransferMedicalPackageDetailData()
  1425. {
  1426. var count = await _medicalPackageDetailRepository.GetCountAsync();
  1427. if (count == 0)
  1428. {
  1429. var oldMedicalPackageDetailList = await oldDb.Ado.GetDataTableAsync("select * from medical_package_detail ");
  1430. if (oldMedicalPackageDetailList.Rows.Count > 0)
  1431. {
  1432. foreach (DataRow row in oldMedicalPackageDetailList.Rows)
  1433. {
  1434. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1435. {
  1436. Guid asbitemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "asbitem" && m.OldKeyValue == row["asbitem_id"].ToString()).FirstOrDefault().NewKeyValue);
  1437. Guid MedicalPackageId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "medical_package" && m.OldKeyValue == row["medical_package_id"].ToString()).FirstOrDefault().NewKeyValue);
  1438. var asbitemEnt = await _asbitemRepository.GetAsync(asbitemId);
  1439. var data = new MedicalPackageDetail
  1440. {
  1441. AsbitemId = asbitemId,
  1442. Amount = 1,
  1443. MedicalPackageId = MedicalPackageId,
  1444. Price = asbitemEnt.Price
  1445. };
  1446. await _medicalPackageDetailRepository.InsertAsync(data);
  1447. await uow.CompleteAsync();
  1448. }
  1449. }
  1450. }
  1451. _logger.LogInformation($"体检套餐明细数据处理完毕,处理数量{oldMedicalPackageDetailList.Rows.Count}");
  1452. }
  1453. else
  1454. {
  1455. _logger.LogInformation("体检套餐明细数据已存在,未处理");
  1456. }
  1457. }
  1458. /// <summary>
  1459. /// 迁移诊断设置数据
  1460. /// </summary>
  1461. /// <returns></returns>
  1462. [RemoteService(false)]
  1463. public async Task TransferDiagnosisData()
  1464. {
  1465. var count = await _diagnosisRepository.GetCountAsync();
  1466. if (count == 0)
  1467. {
  1468. var oldDiagnosisList = await oldDb.Ado.GetDataTableAsync("select a.* from diagnosis as a left join department as b on a.department_id=b.department_id order by b.display_order,a.display_order ");
  1469. if (oldDiagnosisList.Rows.Count > 0)
  1470. {
  1471. foreach (DataRow row in oldDiagnosisList.Rows)
  1472. {
  1473. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1474. {
  1475. #region 根据仪器类别生成二级科室
  1476. var itemTypeId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item_type" && m.OldKeyValue == row["department_id"].ToString()).FirstOrDefault().NewKeyValue);
  1477. Guid? deviceTypeId = null;
  1478. if (!string.IsNullOrWhiteSpace(row["device_type_id"].ToString()))
  1479. {
  1480. var fieldComparisonEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "device_type" && m.OldKeyValue == row["device_type_id"].ToString()).FirstOrDefault();
  1481. if (fieldComparisonEnt != null)
  1482. {
  1483. deviceTypeId = Guid.Parse(fieldComparisonEnt.NewKeyValue);
  1484. var itemTypeEnt = await _itemTypeRepository.GetAsync(itemTypeId);
  1485. var deviceTypeEnt = await _deviceTypeRepository.GetAsync(deviceTypeId.Value);
  1486. var itemTypeChildEnt = await _itemTypeRepository.FirstOrDefaultAsync(m => m.ParentId == itemTypeEnt.Id && m.DisplayName == deviceTypeEnt.DisplayName);
  1487. if (itemTypeChildEnt == null)
  1488. {
  1489. Guid autoItemTypeId = GuidGenerator.Create();
  1490. #region 排序值
  1491. int displayOrder = (await _itemTypeRepository.CountAsync(m => m.ParentId == itemTypeEnt.Id)) + 1;
  1492. #endregion
  1493. var item_type_data = new ItemType(autoItemTypeId)
  1494. {
  1495. DisplayName = deviceTypeEnt.DisplayName,
  1496. DisplayOrder = displayOrder,
  1497. SimpleCode = LanguageConverter.GetPYSimpleCode(deviceTypeEnt.DisplayName),
  1498. CheckTypeFlag = itemTypeEnt.CheckTypeFlag,
  1499. GuidTypeId = itemTypeEnt.GuidTypeId,
  1500. IsMergeAsbitem = itemTypeEnt.IsMergeAsbitem,
  1501. IsWrap = itemTypeEnt.IsWrap,
  1502. MedicalReportTypeId = itemTypeEnt.MedicalReportTypeId,
  1503. ParentId = itemTypeEnt.Id,
  1504. PathCode = _itemTypeManager.CreatePathCode(itemTypeEnt.Id).Result,
  1505. IsCheckRequest = itemTypeEnt.IsCheckRequest
  1506. };
  1507. await _itemTypeRepository.InsertAsync(item_type_data);
  1508. itemTypeId = autoItemTypeId;
  1509. }
  1510. else
  1511. {
  1512. itemTypeId = itemTypeChildEnt.Id;
  1513. }
  1514. }
  1515. }
  1516. #endregion
  1517. Guid diagnosisId = GuidGenerator.Create();
  1518. var data = new Diagnosis(diagnosisId)
  1519. {
  1520. DisplayName = row["diagnosis_name"].ToString(),
  1521. DisplayOrder = oldDiagnosisList.Rows.IndexOf(row) + 1,
  1522. SimpleCode = LanguageConverter.GetPYSimpleCode(row["diagnosis_name"].ToString()),
  1523. ItemTypeId = itemTypeId,
  1524. DiagnosisLevelId = 1,
  1525. ForSexId = 'A',
  1526. IsIll = Convert.ToChar(row["ill_flag"].ToString()),
  1527. IsSummaryTemplate = Convert.ToChar(row["template_flag"].ToString()),
  1528. SuggestionName = row["suggestion_name"].ToString()
  1529. };
  1530. await _diagnosisRepository.InsertAsync(data);
  1531. var fieldComparison = new FieldComparison
  1532. {
  1533. TableName = "diagnosis",
  1534. FieldName = "id",
  1535. NewKeyValue = diagnosisId.ToString(),
  1536. OldKeyValue = row["diagnosis_id"].ToString()
  1537. };
  1538. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  1539. await uow.CompleteAsync();
  1540. }
  1541. }
  1542. }
  1543. _logger.LogInformation($"诊断设置数据处理完毕,处理数量{oldDiagnosisList.Rows.Count}");
  1544. }
  1545. else
  1546. {
  1547. _logger.LogInformation("诊断设置数据已存在,未处理");
  1548. }
  1549. }
  1550. /// <summary>
  1551. /// 迁移诊断建议数据
  1552. /// </summary>
  1553. /// <returns></returns>
  1554. [RemoteService(false)]
  1555. public async Task TransferSuggestionData()
  1556. {
  1557. var count = await _suggestionRepository.GetCountAsync();
  1558. if (count == 0)
  1559. {
  1560. var oldSuggestionList = await oldDb.Ado.GetDataTableAsync("select * from suggestion order by display_order,suggestion_id ");
  1561. if (oldSuggestionList.Rows.Count > 0)
  1562. {
  1563. foreach (DataRow row in oldSuggestionList.Rows)
  1564. {
  1565. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1566. {
  1567. Guid DiagnosisId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "diagnosis" && m.OldKeyValue == row["diagnosis_id"].ToString()).FirstOrDefault().NewKeyValue);
  1568. Guid suggestionId = GuidGenerator.Create();
  1569. if (await _suggestionRepository.FirstOrDefaultAsync(f => f.DiagnosisId == DiagnosisId && f.SuggestionContent == row["suggestion_content"].ToString()) == null)
  1570. {
  1571. var data = new Suggestion(suggestionId)
  1572. {
  1573. DisplayOrder = oldSuggestionList.Rows.IndexOf(row) + 1,
  1574. DiagnosisId = DiagnosisId,
  1575. SuggestionType = SuggestionTypeFlag.HealthGuidance,
  1576. SuggestionContent = row["suggestion_content"].ToString()
  1577. };
  1578. await _suggestionRepository.InsertAsync(data);
  1579. var fieldComparison = new FieldComparison
  1580. {
  1581. TableName = "suggestion",
  1582. FieldName = "id",
  1583. NewKeyValue = suggestionId.ToString(),
  1584. OldKeyValue = row["suggestion_id"].ToString()
  1585. };
  1586. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  1587. }
  1588. await uow.CompleteAsync();
  1589. }
  1590. }
  1591. }
  1592. _logger.LogInformation($"诊断建议数据处理完毕,处理数量{oldSuggestionList.Rows.Count}");
  1593. }
  1594. else
  1595. {
  1596. _logger.LogInformation("诊断建议数据已存在,未处理");
  1597. }
  1598. }
  1599. /// <summary>
  1600. /// 迁移项目结果模板数据
  1601. /// </summary>
  1602. /// <returns></returns>
  1603. [RemoteService(false)]
  1604. public async Task TransferItemResultTemplateData()
  1605. {
  1606. var count = await _itemResultTemplateRepository.GetCountAsync();
  1607. if (count == 0)
  1608. {
  1609. var oldItemResultTemplateList = await oldDb.Ado.GetDataTableAsync("select * from item_result_template order by display_order,item_result_template_id ");
  1610. if (oldItemResultTemplateList.Rows.Count > 0)
  1611. {
  1612. foreach (DataRow row in oldItemResultTemplateList.Rows)
  1613. {
  1614. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1615. {
  1616. Guid? DiagnosisId = null;
  1617. if (!string.IsNullOrWhiteSpace(row["diagnosis_id"].ToString()))
  1618. {
  1619. var fieldComparisonDiagnosisEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "diagnosis" && m.OldKeyValue == row["diagnosis_id"].ToString()).FirstOrDefault();
  1620. if (fieldComparisonDiagnosisEnt != null)
  1621. {
  1622. DiagnosisId = Guid.Parse(fieldComparisonDiagnosisEnt.NewKeyValue);
  1623. }
  1624. }
  1625. Guid ItemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item" && m.OldKeyValue == row["item_id"].ToString()).FirstOrDefault().NewKeyValue);
  1626. Guid itemResultTemplateId = GuidGenerator.Create();
  1627. if (await _itemResultTemplateRepository.FirstOrDefaultAsync(f => f.ItemId == ItemId && f.Result == row["result"].ToString()) == null)
  1628. {
  1629. var data = new ItemResultTemplate(itemResultTemplateId)
  1630. {
  1631. DisplayOrder = oldItemResultTemplateList.Rows.IndexOf(row) + 1,
  1632. DiagnosisId = DiagnosisId,
  1633. IsNameIntoSummary = Convert.ToChar(row["name_into_summary_flag"].ToString()),
  1634. IsResultIntoSummary = Convert.ToChar(row["result_into_summary_flag"].ToString()),
  1635. ItemId = ItemId,
  1636. Result = row["result"].ToString(),
  1637. SimpleCode = LanguageConverter.GetPYSimpleCode(row["result"].ToString()),
  1638. ResultStatusId = row["result_status_id"].ToString()
  1639. };
  1640. await _itemResultTemplateRepository.InsertAsync(data);
  1641. var fieldComparison = new FieldComparison
  1642. {
  1643. TableName = "item_result_template",
  1644. FieldName = "id",
  1645. NewKeyValue = itemResultTemplateId.ToString(),
  1646. OldKeyValue = row["item_result_template_id"].ToString()
  1647. };
  1648. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  1649. }
  1650. await uow.CompleteAsync();
  1651. }
  1652. }
  1653. }
  1654. _logger.LogInformation($"项目结果模板数据处理完毕,处理数量{oldItemResultTemplateList.Rows.Count}");
  1655. }
  1656. else
  1657. {
  1658. _logger.LogInformation("项目结果模板数据已存在,未处理");
  1659. }
  1660. }
  1661. /// <summary>
  1662. /// 迁移项目结果匹配数据
  1663. /// </summary>
  1664. /// <returns></returns>
  1665. [RemoteService(false)]
  1666. public async Task TransferItemResultMatchData()
  1667. {
  1668. var count = await _ItemResultMatchRepository.GetCountAsync();
  1669. if (count == 0)
  1670. {
  1671. var oldItemResultMatchList = await oldDb.Ado.GetDataTableAsync("select * from item_result_match order by display_order,item_result_match_id ");
  1672. if (oldItemResultMatchList.Rows.Count > 0)
  1673. {
  1674. foreach (DataRow row in oldItemResultMatchList.Rows)
  1675. {
  1676. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1677. {
  1678. var fieldComparisonDiagnosisEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "diagnosis" && m.OldKeyValue == row["diagnosis_id"].ToString()).FirstOrDefault();
  1679. if (fieldComparisonDiagnosisEnt != null)
  1680. {
  1681. Guid DiagnosisId = Guid.Parse(fieldComparisonDiagnosisEnt.NewKeyValue);
  1682. Guid ItemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item" && m.OldKeyValue == row["item_id"].ToString()).FirstOrDefault().NewKeyValue);
  1683. Guid itemResultMatchId = GuidGenerator.Create();
  1684. var data = new ItemResultMatch(itemResultMatchId)
  1685. {
  1686. DisplayOrder = oldItemResultMatchList.Rows.IndexOf(row) + 1,
  1687. DiagnosisId = DiagnosisId,
  1688. ItemId = ItemId,
  1689. Result = row["result"].ToString()
  1690. };
  1691. var ent = await _ItemResultMatchRepository.InsertAsync(data, true);
  1692. var fieldComparison = new FieldComparison
  1693. {
  1694. TableName = "item_result_match",
  1695. FieldName = "id",
  1696. NewKeyValue = ent.Id.ToString(),
  1697. OldKeyValue = row["item_result_match_id"].ToString()
  1698. };
  1699. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  1700. }
  1701. await uow.CompleteAsync();
  1702. }
  1703. }
  1704. }
  1705. _logger.LogInformation($"项目结果匹配数据处理完毕,处理数量{oldItemResultMatchList.Rows.Count}");
  1706. }
  1707. else
  1708. {
  1709. _logger.LogInformation("项目结果匹配数据已存在,未处理");
  1710. }
  1711. }
  1712. /// <summary>
  1713. /// 迁移项目参考范围数据 无字典
  1714. /// </summary>
  1715. /// <returns></returns>
  1716. [RemoteService(false)]
  1717. public async Task TransferReferenceRangeData()
  1718. {
  1719. var count = (await _referenceRangeRepository.GetQueryableAsync()).Where(m => m.ReferenceRangeTypeFlag != ItemReferenceRangeTypeFlag.Character).Count();
  1720. if (count == 0)
  1721. {
  1722. var oldReferenceRangeList = await oldDb.Ado.GetDataTableAsync("select * from reference_range order by reference_range_id ");
  1723. if (oldReferenceRangeList.Rows.Count > 0)
  1724. {
  1725. foreach (DataRow row in oldReferenceRangeList.Rows)
  1726. {
  1727. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1728. {
  1729. Guid? LowerDiagnosisId = null;
  1730. Guid? UpperDiagnosisId = null;
  1731. var fieldComparisonLowerDiagnosisEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "diagnosis" && m.OldKeyValue == row["lower_diagnosis_id"].ToString()).FirstOrDefault();
  1732. var fieldComparisonUpperDiagnosisEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "diagnosis" && m.OldKeyValue == row["upper_diagnosis_id"].ToString()).FirstOrDefault();
  1733. if (fieldComparisonLowerDiagnosisEnt != null)
  1734. {
  1735. LowerDiagnosisId = Guid.Parse(fieldComparisonLowerDiagnosisEnt.NewKeyValue);
  1736. }
  1737. if (fieldComparisonUpperDiagnosisEnt != null)
  1738. {
  1739. UpperDiagnosisId = Guid.Parse(fieldComparisonUpperDiagnosisEnt.NewKeyValue);
  1740. }
  1741. Guid ItemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "item" && m.OldKeyValue == row["item_id"].ToString()).FirstOrDefault().NewKeyValue);
  1742. Guid referenceRangeId = GuidGenerator.Create();
  1743. var data = new ReferenceRange(referenceRangeId)
  1744. {
  1745. ItemId = ItemId,
  1746. AgeLowerLimit = (short)Convert.ToInt32(row["age_lower_limit"].ToString()),
  1747. AgeUpperLimit = (short)Convert.ToInt32(row["age_upper_limit"].ToString()),
  1748. CriticalRangeValue = string.Empty,
  1749. ForSexId = ConvertForSex(row["for_sex_id"].ToString()),
  1750. LowerDiagnosisId = LowerDiagnosisId,
  1751. ReferenceRangeTypeFlag = ItemReferenceRangeTypeFlag.Number,
  1752. ReferenceRangeValue = Convert.ToDecimal(row["lower_limit"].ToString()).ToString("#0.####") + "-" + Convert.ToDecimal(row["upper_limit"].ToString()).ToString("#0.####"),
  1753. UpperDiagnosisId = UpperDiagnosisId
  1754. };
  1755. await _referenceRangeRepository.InsertAsync(data);
  1756. await uow.CompleteAsync();
  1757. }
  1758. }
  1759. }
  1760. _logger.LogInformation($"项目参考范围数据处理完毕,处理数量{oldReferenceRangeList.Rows.Count}");
  1761. }
  1762. else
  1763. {
  1764. _logger.LogInformation("项目参考范围数据已存在,未处理");
  1765. }
  1766. }
  1767. /// <summary>
  1768. /// 迁移条码分组数据
  1769. /// </summary>
  1770. /// <returns></returns>
  1771. [RemoteService(false)]
  1772. public async Task TransferSampleGroupData()
  1773. {
  1774. var count = await _sampleGroupRepository.GetCountAsync();
  1775. if (count == 0)
  1776. {
  1777. //获取一条条码类型的数据
  1778. Guid defaultSampleTypeId = Guid.Empty;
  1779. var sampleTypeEnt = await _sampleTypeRepository.FirstOrDefaultAsync();
  1780. if (sampleTypeEnt != null)
  1781. {
  1782. defaultSampleTypeId = sampleTypeEnt.Id;
  1783. }
  1784. if (defaultSampleTypeId != Guid.Empty)
  1785. {
  1786. var oldSampleGroupList = await oldDb.Ado.GetDataTableAsync("select * from vessels_type order by display_order");
  1787. if (oldSampleGroupList.Rows.Count > 0)
  1788. {
  1789. foreach (DataRow row in oldSampleGroupList.Rows)
  1790. {
  1791. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1792. {
  1793. #region 转成成新的标本类型ID
  1794. Guid newSampleTypeId = defaultSampleTypeId; //默认取其他 ID
  1795. if (!string.IsNullOrWhiteSpace(row["specimen_type_id"].ToString()))
  1796. {
  1797. var oldSampleType = (await _fieldComparisonRepository.GetQueryableAsync())
  1798. .Where(m => m.TableName == "sample_type" && m.OldKeyValue == row["specimen_type_id"].ToString()).FirstOrDefault();
  1799. if (oldSampleType != null)
  1800. {
  1801. newSampleTypeId = Guid.Parse(oldSampleType.NewKeyValue);
  1802. }
  1803. }
  1804. #endregion
  1805. Guid sampleGroupId = GuidGenerator.Create();
  1806. var data = new SampleGroup(sampleGroupId)
  1807. {
  1808. DisplayName = row["vessels_type_name"].ToString(),
  1809. DisplayOrder = oldSampleGroupList.Rows.IndexOf(row) + 1,
  1810. SimpleCode = LanguageConverter.GetPYSimpleCode(row["vessels_type_name"].ToString()),
  1811. SampleContainerId = defaultSampleContainerId,
  1812. SamplePrintCount = string.IsNullOrWhiteSpace(row["label_num"].ToString()) ? 0 : Convert.ToInt32(row["label_num"].ToString()),
  1813. SampleTypeId = newSampleTypeId
  1814. };
  1815. await _sampleGroupRepository.InsertAsync(data);
  1816. var fieldComparison = new FieldComparison
  1817. {
  1818. TableName = "sample_group",
  1819. FieldName = "id",
  1820. NewKeyValue = sampleGroupId.ToString(),
  1821. OldKeyValue = row["vessels_type_id"].ToString()
  1822. };
  1823. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  1824. await uow.CompleteAsync();
  1825. }
  1826. }
  1827. }
  1828. _logger.LogInformation($"条码分组数据处理完毕,处理数量{oldSampleGroupList.Rows.Count}");
  1829. }
  1830. else
  1831. {
  1832. _logger.LogInformation($"条码类型未获取到默认数据,跳过条码分组数据处理");
  1833. }
  1834. }
  1835. else
  1836. {
  1837. _logger.LogInformation("条码分组数据已存在,未处理");
  1838. }
  1839. }
  1840. /// <summary>
  1841. /// 迁移条码分组明细数据
  1842. /// </summary>
  1843. /// <returns></returns>
  1844. [RemoteService(false)]
  1845. public async Task TransferSampleGroupDetailData()
  1846. {
  1847. var count = await _sampleGroupDetailRepository.GetCountAsync();
  1848. if (count == 0)
  1849. {
  1850. var oldSampleGroupDetailList = await oldDb.Ado.GetDataTableAsync("select * from vessels_type_detail ");
  1851. if (oldSampleGroupDetailList.Rows.Count > 0)
  1852. {
  1853. foreach (DataRow row in oldSampleGroupDetailList.Rows)
  1854. {
  1855. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1856. {
  1857. Guid newSampleGroupId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync())
  1858. .Where(m => m.TableName == "sample_group" && m.OldKeyValue == row["vessels_type_id"].ToString()).FirstOrDefault().NewKeyValue);
  1859. Guid newAsbitemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync())
  1860. .Where(m => m.TableName == "asbitem" && m.OldKeyValue == row["asbitem_id"].ToString()).FirstOrDefault().NewKeyValue);
  1861. var data = new SampleGroupDetail
  1862. {
  1863. AsbitemId = newAsbitemId,
  1864. SampleGroupId = newSampleGroupId
  1865. };
  1866. await _sampleGroupDetailRepository.InsertAsync(data);
  1867. await uow.CompleteAsync();
  1868. }
  1869. }
  1870. }
  1871. _logger.LogInformation($"条码分组明细数据处理完毕,处理数量{oldSampleGroupDetailList.Rows.Count}");
  1872. }
  1873. else
  1874. {
  1875. _logger.LogInformation("条码分组明细数据已存在,未处理");
  1876. }
  1877. }
  1878. /// <summary>
  1879. /// 迁移体检单位数据 一级
  1880. /// </summary>
  1881. /// <returns></returns>
  1882. [RemoteService(false)]
  1883. public async Task TransferTopCustomerOrgData()
  1884. {
  1885. var count = await _customerOrgRepository.GetCountAsync();
  1886. if (count == 0)
  1887. {
  1888. var medicalTypeIdFieldComparisonList = (await _fieldComparisonRepository.GetQueryableAsync())
  1889. .Where(m => m.TableName == "medical_Type").ToList();
  1890. var oldCustomerOrgList = await oldDb.Ado.GetDataTableAsync("select * from org where len(org_id)=5 order by display_order asc");
  1891. if (oldCustomerOrgList.Rows.Count > 0)
  1892. {
  1893. foreach (DataRow row in oldCustomerOrgList.Rows)
  1894. {
  1895. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1896. {
  1897. Guid customerOrgId = GuidGenerator.Create();
  1898. if (row["org_id"].ToString() == "00000")
  1899. {
  1900. customerOrgId = Guid.Parse("00000000-0000-0000-0000-000000000001");
  1901. }
  1902. #region 备注 导入联系人姓名、电话
  1903. string remark = "";
  1904. if (!string.IsNullOrWhiteSpace(row["linkman"].ToString()))
  1905. {
  1906. remark = row["linkman"].ToString();
  1907. }
  1908. if (!string.IsNullOrWhiteSpace(row["telephone"].ToString()))
  1909. {
  1910. if (!string.IsNullOrWhiteSpace(remark))
  1911. {
  1912. remark += "|" + row["telephone"].ToString();
  1913. }
  1914. else
  1915. {
  1916. remark = row["telephone"].ToString();
  1917. }
  1918. }
  1919. #endregion
  1920. #region 转换体检类别ID
  1921. Guid? medicalTypeId = null;
  1922. var oldMedicalTypeId = row["medical_type_id"].ToString();
  1923. if (!string.IsNullOrWhiteSpace(oldMedicalTypeId))
  1924. {
  1925. var medicalTypeIdFieldComparison = medicalTypeIdFieldComparisonList.FirstOrDefault(f => f.OldKeyValue == oldMedicalTypeId);
  1926. if (medicalTypeIdFieldComparison != null)
  1927. medicalTypeId = Guid.Parse(medicalTypeIdFieldComparison.NewKeyValue);
  1928. }
  1929. #endregion
  1930. var data = new CustomerOrg(customerOrgId)
  1931. {
  1932. Accounts = row["accounts"].ToString(),
  1933. Address = row["address"].ToString(),
  1934. Bank = row["bank"].ToString(),
  1935. DisplayName = row["org_name"].ToString(),
  1936. DisplayOrder = oldCustomerOrgList.Rows.IndexOf(row) + 1,
  1937. Fax = row["fax"].ToString(),
  1938. InvoiceName = row["org_name"].ToString(),
  1939. IsActive = 'Y',
  1940. IsLock = Convert.ToChar(row["lock_flag"].ToString()),
  1941. MedicalCenterId = defaultMedicalCenterId,
  1942. OrgTypeId = defaultOrgTypeId, //默认为私营
  1943. ParentId = null,
  1944. PathCode = (oldCustomerOrgList.Rows.IndexOf(row) + 1).ToString().PadLeft(5, '0'),
  1945. PostalCode = row["postalcode"].ToString(),
  1946. Remark = remark,
  1947. ShortName = row["short_name"].ToString(),
  1948. SimpleCode = LanguageConverter.GetPYSimpleCode(row["org_name"].ToString()),
  1949. Telephone = row["telephone"].ToString(),
  1950. CountryOrgCode = row["org_id"].ToString(),
  1951. SalesPerson = "",
  1952. SalesPersonPhone = "",
  1953. MedicalTypeId = medicalTypeId
  1954. };
  1955. await _customerOrgRepository.InsertAsync(data);
  1956. var fieldComparison = new FieldComparison
  1957. {
  1958. FieldName = "id",
  1959. NewKeyValue = customerOrgId.ToString(),
  1960. OldKeyValue = row["org_id"].ToString(),
  1961. TableName = "customer_org"
  1962. };
  1963. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  1964. await uow.CompleteAsync();
  1965. }
  1966. }
  1967. }
  1968. _logger.LogInformation($"体检单位一级数据处理完毕,处理数量{oldCustomerOrgList.Rows.Count}");
  1969. }
  1970. else
  1971. {
  1972. _logger.LogInformation("体检单位一级数据已存在,未处理");
  1973. }
  1974. }
  1975. /// <summary>
  1976. /// 迁移体检单位数据 二级
  1977. /// </summary>
  1978. /// <returns></returns>
  1979. [RemoteService(false)]
  1980. public async Task TransferTwoCustomerOrgData()
  1981. {
  1982. var count = (await _customerOrgRepository.GetQueryableAsync()).Where(m => m.PathCode.Length > 5).Count();
  1983. if (count == 0)
  1984. {
  1985. var medicalTypeIdFieldComparisonList = (await _fieldComparisonRepository.GetQueryableAsync())
  1986. .Where(m => m.TableName == "medical_Type").ToList();
  1987. var oldCustomerOrgList = await oldDb.Ado.GetDataTableAsync("select * from [dbo].[org] where len(org_id)=8 order by org_id asc");
  1988. if (oldCustomerOrgList.Rows.Count > 0)
  1989. {
  1990. List<CustomerOrg> customerOrgList = await _customerOrgRepository.GetListAsync(m => m.ParentId == null);
  1991. List<FieldComparison> fieldComparisonList = await _fieldComparisonRepository.GetListAsync(m => m.TableName == "customer_org");
  1992. foreach (DataRow row in oldCustomerOrgList.Rows)
  1993. {
  1994. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  1995. {
  1996. #region 查找上级ID
  1997. string oldId = row["org_id"].ToString();
  1998. string oldParentId = oldId.Substring(0, 5);
  1999. Guid parentId = Guid.Parse(fieldComparisonList.Where(m => m.OldKeyValue == oldParentId).FirstOrDefault().NewKeyValue);
  2000. #endregion
  2001. Guid customerOrgId = GuidGenerator.Create();
  2002. #region 转换体检类别ID
  2003. Guid? medicalTypeId = null;
  2004. var oldMedicalTypeId = row["medical_type_id"].ToString();
  2005. if (!string.IsNullOrWhiteSpace(oldMedicalTypeId))
  2006. {
  2007. var medicalTypeIdFieldComparison = medicalTypeIdFieldComparisonList.FirstOrDefault(f => f.OldKeyValue == oldMedicalTypeId);
  2008. if (medicalTypeIdFieldComparison != null)
  2009. medicalTypeId = Guid.Parse(medicalTypeIdFieldComparison.NewKeyValue);
  2010. }
  2011. #endregion
  2012. #region 备注 导入联系人姓名、电话
  2013. string remark = "";
  2014. if (!string.IsNullOrWhiteSpace(row["linkman"].ToString()))
  2015. {
  2016. remark = row["linkman"].ToString();
  2017. }
  2018. if (!string.IsNullOrWhiteSpace(row["telephone"].ToString()))
  2019. {
  2020. if (!string.IsNullOrWhiteSpace(remark))
  2021. {
  2022. remark += "|" + row["telephone"].ToString();
  2023. }
  2024. else
  2025. {
  2026. remark = row["telephone"].ToString();
  2027. }
  2028. }
  2029. #endregion
  2030. var data = new CustomerOrg(customerOrgId)
  2031. {
  2032. Accounts = row["accounts"].ToString(),
  2033. Address = row["address"].ToString(),
  2034. Bank = row["bank"].ToString(),
  2035. DisplayName = row["org_name"].ToString(),
  2036. DisplayOrder = oldCustomerOrgList.Rows.IndexOf(row) + 1,
  2037. Fax = row["fax"].ToString(),
  2038. InvoiceName = row["org_name"].ToString(),
  2039. IsActive = 'Y',
  2040. IsLock = Convert.ToChar(row["lock_flag"].ToString()),
  2041. MedicalCenterId = defaultMedicalCenterId,
  2042. OrgTypeId = defaultOrgTypeId, //默认为私营
  2043. ParentId = parentId,
  2044. PathCode = _customerOrgManager.CreatePathCode(parentId).Result,
  2045. PostalCode = row["postalcode"].ToString(),
  2046. Remark = remark,
  2047. ShortName = row["short_name"].ToString(),
  2048. SimpleCode = LanguageConverter.GetPYSimpleCode(row["org_name"].ToString()),
  2049. Telephone = row["telephone"].ToString(),
  2050. CountryOrgCode = row["org_id"].ToString(),
  2051. SalesPerson = "",
  2052. SalesPersonPhone = "",
  2053. MedicalTypeId = medicalTypeId
  2054. };
  2055. await _customerOrgRepository.InsertAsync(data);
  2056. var fieldComparison = new FieldComparison
  2057. {
  2058. FieldName = "id",
  2059. NewKeyValue = customerOrgId.ToString(),
  2060. OldKeyValue = row["org_id"].ToString(),
  2061. TableName = "customer_org"
  2062. };
  2063. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  2064. await uow.CompleteAsync();
  2065. }
  2066. }
  2067. }
  2068. _logger.LogInformation($"体检单位二级数据处理完毕,处理数量{oldCustomerOrgList.Rows.Count}");
  2069. }
  2070. else
  2071. {
  2072. _logger.LogInformation("体检单位二级数据已存在,未处理");
  2073. }
  2074. }
  2075. /// <summary>
  2076. /// 迁移体检单位数据 三级
  2077. /// </summary>
  2078. /// <returns></returns>
  2079. [RemoteService(false)]
  2080. public async Task TransferThreeCustomerOrgData()
  2081. {
  2082. var count = (await _customerOrgRepository.GetQueryableAsync()).Where(m => m.PathCode.Length > 11).Count();
  2083. if (count == 0)
  2084. {
  2085. var medicalTypeIdFieldComparisonList = (await _fieldComparisonRepository.GetQueryableAsync())
  2086. .Where(m => m.TableName == "medical_Type").ToList();
  2087. var oldCustomerOrgList = await oldDb.Ado.GetDataTableAsync("select * from [dbo].[org] where len(org_id)=11 order by org_id asc");
  2088. if (oldCustomerOrgList.Rows.Count > 0)
  2089. {
  2090. List<CustomerOrg> customerOrgList = await _customerOrgRepository.GetListAsync(m => m.ParentId == null);
  2091. List<FieldComparison> fieldComparisonList = await _fieldComparisonRepository.GetListAsync(m => m.TableName == "customer_org");
  2092. foreach (DataRow row in oldCustomerOrgList.Rows)
  2093. {
  2094. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  2095. {
  2096. #region 查找上级ID
  2097. string oldId = row["org_id"].ToString();
  2098. string oldParentId = oldId.Substring(0, 8);
  2099. Guid parentId = Guid.Parse(fieldComparisonList.Where(m => m.OldKeyValue == oldParentId).FirstOrDefault().NewKeyValue);
  2100. #endregion
  2101. Guid customerOrgId = GuidGenerator.Create();
  2102. #region 备注 导入联系人姓名、电话
  2103. string remark = "";
  2104. if (!string.IsNullOrWhiteSpace(row["linkman"].ToString()))
  2105. {
  2106. remark = row["linkman"].ToString();
  2107. }
  2108. if (!string.IsNullOrWhiteSpace(row["telephone"].ToString()))
  2109. {
  2110. if (!string.IsNullOrWhiteSpace(remark))
  2111. {
  2112. remark += "|" + row["telephone"].ToString();
  2113. }
  2114. else
  2115. {
  2116. remark = row["telephone"].ToString();
  2117. }
  2118. }
  2119. #endregion
  2120. #region 转换体检类别ID
  2121. Guid? medicalTypeId = null;
  2122. var oldMedicalTypeId = row["medical_type_id"].ToString();
  2123. if (!string.IsNullOrWhiteSpace(oldMedicalTypeId))
  2124. {
  2125. var medicalTypeIdFieldComparison = medicalTypeIdFieldComparisonList.FirstOrDefault(f => f.OldKeyValue == oldMedicalTypeId);
  2126. if (medicalTypeIdFieldComparison != null)
  2127. medicalTypeId = Guid.Parse(medicalTypeIdFieldComparison.NewKeyValue);
  2128. }
  2129. #endregion
  2130. var data = new CustomerOrg(customerOrgId)
  2131. {
  2132. Accounts = row["accounts"].ToString(),
  2133. Address = row["address"].ToString(),
  2134. Bank = row["bank"].ToString(),
  2135. DisplayName = row["org_name"].ToString(),
  2136. DisplayOrder = oldCustomerOrgList.Rows.IndexOf(row) + 1,
  2137. Fax = row["fax"].ToString(),
  2138. InvoiceName = row["org_name"].ToString(),
  2139. IsActive = 'Y',
  2140. IsLock = Convert.ToChar(row["lock_flag"].ToString()),
  2141. MedicalCenterId = defaultMedicalCenterId,
  2142. OrgTypeId = defaultOrgTypeId, //默认为私营
  2143. ParentId = parentId,
  2144. PathCode = _customerOrgManager.CreatePathCode(parentId).Result,
  2145. PostalCode = row["postalcode"].ToString(),
  2146. Remark = remark,
  2147. ShortName = row["short_name"].ToString(),
  2148. SimpleCode = LanguageConverter.GetPYSimpleCode(row["org_name"].ToString()),
  2149. Telephone = row["telephone"].ToString(),
  2150. CountryOrgCode = row["org_id"].ToString(),
  2151. SalesPerson = "",
  2152. SalesPersonPhone = "",
  2153. MedicalTypeId = medicalTypeId
  2154. };
  2155. await _customerOrgRepository.InsertAsync(data);
  2156. var fieldComparison = new FieldComparison
  2157. {
  2158. FieldName = "id",
  2159. NewKeyValue = customerOrgId.ToString(),
  2160. OldKeyValue = row["org_id"].ToString(),
  2161. TableName = "customer_org"
  2162. };
  2163. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  2164. await uow.CompleteAsync();
  2165. }
  2166. }
  2167. }
  2168. _logger.LogInformation($"体检单位三级数据处理完毕,处理数量{oldCustomerOrgList.Rows.Count}");
  2169. }
  2170. else
  2171. {
  2172. _logger.LogInformation("体检单位三级数据已存在,未处理");
  2173. }
  2174. }
  2175. /// <summary>
  2176. /// 迁移体检单位数据 四级
  2177. /// </summary>
  2178. /// <returns></returns>
  2179. [RemoteService(false)]
  2180. public async Task TransferFourCustomerOrgData()
  2181. {
  2182. var count = (await _customerOrgRepository.GetQueryableAsync()).Where(m => m.PathCode.Length > 17).Count();
  2183. if (count == 0)
  2184. {
  2185. var medicalTypeIdFieldComparisonList = (await _fieldComparisonRepository.GetQueryableAsync())
  2186. .Where(m => m.TableName == "medical_Type").ToList();
  2187. var oldCustomerOrgList = await oldDb.Ado.GetDataTableAsync("select * from [dbo].[org] where len(org_id)=14 order by org_id asc");
  2188. if (oldCustomerOrgList.Rows.Count > 0)
  2189. {
  2190. List<CustomerOrg> customerOrgList = await _customerOrgRepository.GetListAsync(m => m.ParentId == null);
  2191. List<FieldComparison> fieldComparisonList = await _fieldComparisonRepository.GetListAsync(m => m.TableName == "customer_org");
  2192. foreach (DataRow row in oldCustomerOrgList.Rows)
  2193. {
  2194. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  2195. {
  2196. #region 查找上级ID
  2197. string oldId = row["org_id"].ToString();
  2198. string oldParentId = oldId.Substring(0, 11);
  2199. Guid parentId = Guid.Parse(fieldComparisonList.Where(m => m.OldKeyValue == oldParentId).FirstOrDefault().NewKeyValue);
  2200. #endregion
  2201. Guid customerOrgId = GuidGenerator.Create();
  2202. #region 备注 导入联系人姓名、电话
  2203. string remark = "";
  2204. if (!string.IsNullOrWhiteSpace(row["linkman"].ToString()))
  2205. {
  2206. remark = row["linkman"].ToString();
  2207. }
  2208. if (!string.IsNullOrWhiteSpace(row["telephone"].ToString()))
  2209. {
  2210. if (!string.IsNullOrWhiteSpace(remark))
  2211. {
  2212. remark += "|" + row["telephone"].ToString();
  2213. }
  2214. else
  2215. {
  2216. remark = row["telephone"].ToString();
  2217. }
  2218. }
  2219. #endregion
  2220. #region 转换体检类别ID
  2221. Guid? medicalTypeId = null;
  2222. var oldMedicalTypeId = row["medical_type_id"].ToString();
  2223. if (!string.IsNullOrWhiteSpace(oldMedicalTypeId))
  2224. {
  2225. var medicalTypeIdFieldComparison = medicalTypeIdFieldComparisonList.FirstOrDefault(f => f.OldKeyValue == oldMedicalTypeId);
  2226. if (medicalTypeIdFieldComparison != null)
  2227. medicalTypeId = Guid.Parse(medicalTypeIdFieldComparison.NewKeyValue);
  2228. }
  2229. #endregion
  2230. var data = new CustomerOrg(customerOrgId)
  2231. {
  2232. Accounts = row["accounts"].ToString(),
  2233. Address = row["address"].ToString(),
  2234. Bank = row["bank"].ToString(),
  2235. DisplayName = row["org_name"].ToString(),
  2236. DisplayOrder = oldCustomerOrgList.Rows.IndexOf(row) + 1,
  2237. Fax = row["fax"].ToString(),
  2238. InvoiceName = row["org_name"].ToString(),
  2239. IsActive = 'Y',
  2240. IsLock = Convert.ToChar(row["lock_flag"].ToString()),
  2241. MedicalCenterId = defaultMedicalCenterId,
  2242. OrgTypeId = defaultOrgTypeId, //默认为私营
  2243. ParentId = parentId,
  2244. PathCode = _customerOrgManager.CreatePathCode(parentId).Result,
  2245. PostalCode = row["postalcode"].ToString(),
  2246. Remark = remark,
  2247. ShortName = row["short_name"].ToString(),
  2248. SimpleCode = LanguageConverter.GetPYSimpleCode(row["org_name"].ToString()),
  2249. Telephone = row["telephone"].ToString(),
  2250. CountryOrgCode = row["org_id"].ToString(),
  2251. SalesPerson = "",
  2252. SalesPersonPhone = "",
  2253. MedicalTypeId = medicalTypeId
  2254. };
  2255. await _customerOrgRepository.InsertAsync(data);
  2256. var fieldComparison = new FieldComparison
  2257. {
  2258. FieldName = "id",
  2259. NewKeyValue = customerOrgId.ToString(),
  2260. OldKeyValue = row["org_id"].ToString(),
  2261. TableName = "customer_org"
  2262. };
  2263. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  2264. await uow.CompleteAsync();
  2265. }
  2266. }
  2267. }
  2268. _logger.LogInformation($"体检单位四级数据处理完毕,处理数量{oldCustomerOrgList.Rows.Count}");
  2269. }
  2270. else
  2271. {
  2272. _logger.LogInformation("体检单位四级数据已存在,未处理");
  2273. }
  2274. }
  2275. /// <summary>
  2276. /// 迁移单位体检次数数据 无字典
  2277. /// </summary>
  2278. /// <returns></returns>
  2279. [RemoteService(false)]
  2280. public async Task TransferCustomerOrgRegisterData()
  2281. {
  2282. var count = await _customerOrgRegisterRepository.GetCountAsync();
  2283. if (count == 0)
  2284. {
  2285. var oldCustomerOrgRegisterList = await oldDb.Ado.GetDataTableAsync("select * from org_medical_register order by org_medical_times");
  2286. if (oldCustomerOrgRegisterList.Rows.Count > 0)
  2287. {
  2288. List<FieldComparison> fieldComparisonList = await _fieldComparisonRepository.GetListAsync(m => m.TableName == "customer_org");
  2289. foreach (DataRow row in oldCustomerOrgRegisterList.Rows)
  2290. {
  2291. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  2292. {
  2293. Guid customerOrgId = Guid.Parse(fieldComparisonList.Where(m => m.OldKeyValue == row["org_id"].ToString()).FirstOrDefault().NewKeyValue);
  2294. Guid customerOrgRegisterId = GuidGenerator.Create();
  2295. if (customerOrgId == GuidFlag.PersonCustomerOrgId)
  2296. customerOrgRegisterId = GuidFlag.PersonCustomerOrgRegisterId;
  2297. var data = new CustomerOrgRegister(customerOrgRegisterId)
  2298. {
  2299. BeginTime = Convert.ToDateTime(row["start_time"].ToString()),
  2300. CustomerOrgId = customerOrgId,
  2301. EndTime = !string.IsNullOrWhiteSpace(row["end_time"].ToString()) ? Convert.ToDateTime(row["end_time"].ToString()) : null,
  2302. IsComplete = Convert.ToChar(row["complete_flag"].ToString()),
  2303. MedicalTimes = (short)Convert.ToInt32(row["org_medical_times"].ToString()),
  2304. RegisterName = "",
  2305. RegisterNo = ""
  2306. };
  2307. await _customerOrgRegisterRepository.InsertAsync(data);
  2308. await uow.CompleteAsync();
  2309. }
  2310. }
  2311. }
  2312. _logger.LogInformation($"单位体检次数数据处理完毕,处理数量{oldCustomerOrgRegisterList.Rows.Count}");
  2313. }
  2314. else
  2315. {
  2316. _logger.LogInformation("单位体检次数数据已存在,未处理");
  2317. }
  2318. }
  2319. /// <summary>
  2320. /// 迁移单位分组
  2321. /// </summary>
  2322. /// <returns></returns>
  2323. [RemoteService(false)]
  2324. public async Task TransferCustomerOrgGroupData()
  2325. {
  2326. var count = await _customerOrgGroupRepository.GetCountAsync();
  2327. if (count == 0)
  2328. {
  2329. var oldCustomerOrgGroupList = await oldDb.Ado.GetDataTableAsync("select * from org_group order by display_order asc");
  2330. if (oldCustomerOrgGroupList.Rows.Count > 0)
  2331. {
  2332. List<FieldComparison> fieldComparisonList = await _fieldComparisonRepository.GetListAsync(m => m.TableName == "customer_org");
  2333. List<CustomerOrgRegister> customerOrgRegisterList = await _customerOrgRegisterRepository.GetListAsync();
  2334. foreach (DataRow row in oldCustomerOrgGroupList.Rows)
  2335. {
  2336. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  2337. {
  2338. //新系统单位ID
  2339. Guid customerOrgId = Guid.Parse(fieldComparisonList.Where(m => m.OldKeyValue == row["org_id"].ToString()).FirstOrDefault().NewKeyValue);
  2340. Guid customerOrgRegisterId = customerOrgRegisterList.Where(m => m.CustomerOrgId == customerOrgId
  2341. && m.MedicalTimes == (short)Convert.ToInt32(row["org_medical_times"].ToString())).FirstOrDefault().Id;
  2342. Guid customerOrgGroupId = GuidGenerator.Create();
  2343. var data = new CustomerOrgGroup(customerOrgGroupId)
  2344. {
  2345. AgeLowerLimit = (short)Convert.ToInt32(row["age_lower_limit"].ToString()),
  2346. AgeUpperLimit = (short)Convert.ToInt32(row["age_upper_limit"].ToString()),
  2347. CustomerOrgRegisterId = customerOrgRegisterId,
  2348. DisplayName = row["org_group_name"].ToString(),
  2349. DisplayOrder = oldCustomerOrgGroupList.Rows.IndexOf(row) + 1,
  2350. ForSexId = ConvertForSex(row["for_sex_id"].ToString()),
  2351. JobPost = row["job_post"].ToString(),
  2352. JobTitle = row["job_title"].ToString(),
  2353. MaritalStatusId = Convert.ToChar(row["marital_status_id"].ToString()),
  2354. Price = Convert.ToDecimal(row["price"].ToString()),
  2355. Remark = row["remark"].ToString(),
  2356. CanAddMoney = 0
  2357. };
  2358. await _customerOrgGroupRepository.InsertAsync(data);
  2359. var fieldComparison = new FieldComparison
  2360. {
  2361. FieldName = "id",
  2362. NewKeyValue = customerOrgGroupId.ToString(),
  2363. OldKeyValue = row["org_group_id"].ToString(),
  2364. TableName = "customer_org_group"
  2365. };
  2366. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  2367. await uow.CompleteAsync();
  2368. }
  2369. }
  2370. }
  2371. _logger.LogInformation($"单位分组数据处理完毕,处理数量{oldCustomerOrgGroupList.Rows.Count}");
  2372. }
  2373. else
  2374. {
  2375. _logger.LogInformation("单位分组数据已存在,未处理");
  2376. }
  2377. }
  2378. /// <summary>
  2379. /// 迁移单位分组明细数据
  2380. /// </summary>
  2381. /// <returns></returns>
  2382. [RemoteService(false)]
  2383. public async Task TransferCustomerOrgGroupDetailData()
  2384. {
  2385. var count = await _customerOrgGroupDetailRepository.GetCountAsync();
  2386. if (count == 0)
  2387. {
  2388. int pclcount = 200;
  2389. var oldCustomerOrgGroupList = await oldDb.Ado.GetDataTableAsync("select * from org_group_detail ");
  2390. if (oldCustomerOrgGroupList.Rows.Count > 0)
  2391. {
  2392. List<CustomerOrgGroupDetail> tempList = new List<CustomerOrgGroupDetail>();
  2393. foreach (DataRow row in oldCustomerOrgGroupList.Rows)
  2394. {
  2395. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  2396. {
  2397. //新系统单位分组ID
  2398. Guid customerOrgGroupId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync())
  2399. .Where(m => m.TableName == "customer_org_group" && m.OldKeyValue == row["org_group_id"].ToString()).FirstOrDefault().NewKeyValue);
  2400. Guid asbitemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync())
  2401. .Where(m => m.TableName == "asbitem" && m.OldKeyValue == row["asbitem_id"].ToString()).FirstOrDefault().NewKeyValue);
  2402. decimal price = 0;
  2403. if (!decimal.TryParse(row["price"].ToString(), out price))
  2404. {
  2405. price = 0;
  2406. }
  2407. var data = new CustomerOrgGroupDetail
  2408. {
  2409. AsbitemId = asbitemId,
  2410. CustomerOrgGroupId = customerOrgGroupId,
  2411. Price = price,
  2412. Amount = 1
  2413. };
  2414. tempList.Add(data);
  2415. if (tempList.Count >= pclcount)
  2416. {
  2417. await _customerOrgGroupDetailRepository.InsertManyAsync(tempList);
  2418. tempList = new List<CustomerOrgGroupDetail>();
  2419. }
  2420. else
  2421. {
  2422. if (oldCustomerOrgGroupList.Rows.IndexOf(row) == oldCustomerOrgGroupList.Rows.Count - 1)
  2423. {
  2424. await _customerOrgGroupDetailRepository.InsertManyAsync(tempList);
  2425. }
  2426. }
  2427. await uow.CompleteAsync();
  2428. }
  2429. }
  2430. }
  2431. _logger.LogInformation($"单位分组明细数据处理完毕,处理数量{oldCustomerOrgGroupList.Rows.Count}");
  2432. }
  2433. else
  2434. {
  2435. _logger.LogInformation("单位分组明细数据已存在,未处理");
  2436. }
  2437. }
  2438. #endregion
  2439. #region 导入业务数据
  2440. [HttpPost("api/app/CCTJExportData/InitFieldComparisonCache")]
  2441. public async Task InitFieldComparisonCache()
  2442. {
  2443. fieldComparisonTempList = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName != "patient_register").ToList();
  2444. asbitemFieldComparisonTempList = fieldComparisonTempList.Where(o => o.TableName == "asbitem").ToList();
  2445. itemFieldComparisonTempList = fieldComparisonTempList.Where(o => o.TableName == "item").ToList();
  2446. _customerOrgRegisterList = await _customerOrgRegisterRepository.GetListAsync();
  2447. _userList = await _identityUserRepository.GetListAsync();
  2448. _logger.LogInformation($"组合项目数:{asbitemFieldComparisonTempList.Count},项目数:{itemFieldComparisonTempList.Count}");
  2449. }
  2450. private int hangPatientRegisterCount = 0;
  2451. private int hangPatientRegisterErrorCount = 0;
  2452. private int hangPatientRegisterReverseCount = 0;
  2453. /// <summary>
  2454. /// 迁移人员、检查单、登记项目、项目结果、医生小结、修改人员创建者、创建时间
  2455. /// </summary>
  2456. /// <param name="handCount">每次处理的人员数量</param>
  2457. /// <param name="startdate">开始日期</param>
  2458. /// <param name="enddate">截止日期</param>
  2459. /// <param name="isGo">是否继续处理</param>
  2460. /// <returns></returns>
  2461. [HttpPost("api/app/CCTJExportData/TransferPatientRegisterWithDetailData")]
  2462. [RemoteService(false)]
  2463. public async Task TransferPatientRegisterWithDetailData(int handCount, string startdate, string enddate, bool isGo = false)
  2464. {
  2465. Stopwatch stopwatch = new Stopwatch();
  2466. stopwatch.Start();
  2467. _logger.LogInformation($"开始导入数据");
  2468. //当前导入的ID
  2469. string nextKeyValue = oldDb.Ado.GetString("select keyvalue from tb_export_key where tablename='patient_register' ");
  2470. string sqlPatientRegister = "";
  2471. if (!string.IsNullOrWhiteSpace(startdate) && !string.IsNullOrWhiteSpace(enddate))
  2472. {
  2473. sqlPatientRegister = $"select top {handCount} * from patient_register where patient_register_id>'{nextKeyValue}'" +
  2474. $" and register_date>='{startdate}' and register_date<'{enddate}' order by patient_register_id asc";
  2475. }
  2476. else
  2477. {
  2478. sqlPatientRegister = $"select top {handCount} * from patient_register where patient_register_id>'{nextKeyValue}' order by patient_register_id asc";
  2479. }
  2480. DataTable oldPatientRegisterList = await oldDb.Ado.GetDataTableAsync(sqlPatientRegister);
  2481. stopwatch.Stop();
  2482. _logger.LogInformation($"获取要导入的人员总数耗时:{stopwatch.ElapsedMilliseconds}" + $"共{oldPatientRegisterList.Rows.Count}条");
  2483. if (oldPatientRegisterList.Rows.Count > 0)
  2484. {
  2485. Stopwatch stopwatch2 = new Stopwatch();
  2486. stopwatch2.Start();
  2487. var userList = await _identityUserRepository.GetListAsync();
  2488. List<CustomerOrgRegister> customerOrgRegisterList = await _customerOrgRegisterRepository.GetListAsync();
  2489. stopwatch2.Stop();
  2490. _logger.LogInformation($"获取所有客户单位耗时:{stopwatch2.ElapsedMilliseconds}");
  2491. Stopwatch stopwatch5 = new Stopwatch();
  2492. stopwatch5.Start();
  2493. //Parallel.ForEach(oldPatientRegisterList.AsEnumerable(), row =>
  2494. //{
  2495. //});
  2496. foreach (DataRow row in oldPatientRegisterList.Rows)
  2497. {
  2498. hangPatientRegisterCount++;
  2499. await ImportSingle(customerOrgRegisterList, userList, row);
  2500. }
  2501. //await Parallel.ForEachAsync(oldPatientRegisterList.AsEnumerable(), async (row, token) =>
  2502. //{
  2503. // hangPatientRegisterCount++;
  2504. // await ImportSingleParallel(customerOrgRegisterList, userList, row);
  2505. //});
  2506. stopwatch5.Stop();
  2507. _logger.LogInformation($"处理完全部人员耗时:{stopwatch5.ElapsedMilliseconds}");
  2508. _logger.LogInformation($"人员数据处理{oldPatientRegisterList.Rows.Count}条,当前总数{hangPatientRegisterCount}");
  2509. if (isGo)
  2510. await TransferPatientRegisterWithDetailData(handCount, startdate, enddate, isGo);
  2511. }
  2512. else
  2513. {
  2514. _logger.LogInformation("人员数据已处理完,没有查询到需要处理的人员");
  2515. }
  2516. }
  2517. /// <summary>
  2518. /// 人员信息导入
  2519. /// </summary>
  2520. /// <param name="patientRegisterIdFrom"></param>
  2521. /// <param name="patientRegisterIdTo"></param>
  2522. /// <returns></returns>
  2523. /// <exception cref="Exception"></exception>
  2524. [HttpPost("api/app/CCTJExportData/TransferPatientRegisterWithDetailDataById")]
  2525. public async Task TransferPatientRegisterWithDetailDataById(long patientRegisterIdFrom, long patientRegisterIdTo)
  2526. {
  2527. #region 初始数据
  2528. if (fieldComparisonTempList.Count == 0)
  2529. {
  2530. fieldComparisonTempList = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName != "patient_register").ToList();
  2531. asbitemFieldComparisonTempList = fieldComparisonTempList.Where(o => o.TableName == "asbitem").ToList();
  2532. itemFieldComparisonTempList = fieldComparisonTempList.Where(o => o.TableName == "item").ToList();
  2533. }
  2534. if (!_customerOrgRegisterList.Any())
  2535. _customerOrgRegisterList = await _customerOrgRegisterRepository.GetListAsync();
  2536. if (!_userList.Any())
  2537. _userList = await _identityUserRepository.GetListAsync();
  2538. _logger.LogInformation($"组合项目数:{asbitemFieldComparisonTempList.Count},项目数:{itemFieldComparisonTempList.Count}");
  2539. #endregion
  2540. Stopwatch stopwatch = new Stopwatch();
  2541. stopwatch.Start();
  2542. _logger.LogInformation($"开始导入数据");
  2543. //当前导入的ID
  2544. //string nextKeyValue = oldDb.Ado.GetString("select keyvalue from tb_export_key where tablename='patient_register' ");
  2545. string sqlPatientRegister = "";
  2546. if (patientRegisterIdFrom >= patientRegisterIdTo)
  2547. {
  2548. throw new Exception("开始值必须小于等于结束值");
  2549. }
  2550. var sql = $"select count(*) as cnt from patient_register where patient_register_id>='{patientRegisterIdFrom}'" +
  2551. $" and patient_register_id<'{patientRegisterIdTo}' ";
  2552. DataTable oldPatientRegisterCount = await oldDb.Ado.GetDataTableAsync(sql);
  2553. if (oldPatientRegisterCount.Rows.Count == 0)
  2554. {
  2555. return;
  2556. }
  2557. _logger.LogInformation($"共有{oldPatientRegisterCount.Rows[0]["cnt"].ToString()}条");
  2558. sqlPatientRegister = $"select top 1000 * from patient_register where patient_register_id>='{patientRegisterIdFrom}'" +
  2559. $" and patient_register_id<'{patientRegisterIdTo}' order by patient_register_id asc";
  2560. DataTable oldPatientRegisterList = await oldDb.Ado.GetDataTableAsync(sqlPatientRegister);
  2561. stopwatch.Stop();
  2562. _logger.LogInformation($"获取要导入的人员列表耗时:{stopwatch.ElapsedMilliseconds}" + $"共{oldPatientRegisterList.Rows.Count}条");
  2563. //Stopwatch stopwatch2 = new Stopwatch();
  2564. //stopwatch2.Start();
  2565. //var userList = await _identityUserRepository.GetListAsync();
  2566. //List<CustomerOrgRegister> customerOrgRegisterList = await _customerOrgRegisterRepository.GetListAsync();
  2567. //stopwatch2.Stop();
  2568. Stopwatch stopwatch5 = new Stopwatch();
  2569. stopwatch5.Start();
  2570. while (oldPatientRegisterList.Rows.Count > 0)
  2571. {
  2572. foreach (DataRow row in oldPatientRegisterList.Rows)
  2573. {
  2574. hangPatientRegisterCount++;
  2575. await ImportSingle(_customerOrgRegisterList, _userList, row);
  2576. }
  2577. patientRegisterIdFrom = Convert.ToInt64(oldPatientRegisterList.Rows[oldPatientRegisterList.Rows.Count - 1]["patient_register_id"]);
  2578. patientRegisterIdFrom++;
  2579. sqlPatientRegister = $"select top 1000 * from patient_register where patient_register_id>='{patientRegisterIdFrom}'" +
  2580. $" and patient_register_id<'{patientRegisterIdTo}' order by patient_register_id asc";
  2581. Stopwatch stopwatch6 = new Stopwatch();
  2582. stopwatch6.Start();
  2583. oldPatientRegisterList = await oldDb.Ado.GetDataTableAsync(sqlPatientRegister);
  2584. _logger.LogInformation($"获取要导入的人员列表耗时:{stopwatch6.ElapsedMilliseconds}" + $"共{oldPatientRegisterList.Rows.Count}条");
  2585. }
  2586. stopwatch5.Stop();
  2587. _logger.LogInformation($"处理完全部人员耗时:{stopwatch5.ElapsedMilliseconds}");
  2588. _logger.LogInformation($"人员数据处理{oldPatientRegisterList.Rows.Count}条,当前总数{hangPatientRegisterCount}");
  2589. }
  2590. private async Task ImportSingle(List<CustomerOrgRegister> customerOrgRegisterList, List<IdentityUser> userList, DataRow row)
  2591. {
  2592. try
  2593. {
  2594. Stopwatch stopwatch3 = new Stopwatch();
  2595. stopwatch3.Start();
  2596. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  2597. {
  2598. var dbContext = await _dbContextProvider.GetDbContextAsync();
  2599. //Stopwatch stopwatch31 = new Stopwatch();
  2600. //stopwatch31.Start();
  2601. string oldPatientRegisterId = row["patient_register_id"].ToString();
  2602. string barcodeNo = row["barcode_no"].ToString();
  2603. //检查是否已经导入
  2604. var patRegisterLis = await _patientRegisterRepository.GetListAsync(o => o.PatientRegisterNo == barcodeNo);
  2605. if (patRegisterLis.Count > 0)
  2606. {
  2607. return;
  2608. }
  2609. //检查是否已经导入
  2610. //var isDZPatientRegisterTemp = (await _fieldComparisonRepository.GetListAsync(f => f.TableName == "patient_register"
  2611. // && f.OldKeyValue == oldPatientRegisterId));
  2612. //if (isDZPatientRegisterTemp.Count > 0)
  2613. //{
  2614. // return;
  2615. // //continue;//并行处理不使用该语句
  2616. //}
  2617. //档案ID
  2618. Guid patientId = Guid.Empty;
  2619. #region 处理档案,未找到档案就生成
  2620. var patientEnt = await _patientRepository.FirstOrDefaultAsync(m => m.PatientNo == row["patient_id"].ToString());
  2621. if (patientEnt == null)
  2622. {
  2623. string nationId = null;
  2624. if (!string.IsNullOrWhiteSpace(row["nation_id"].ToString()))
  2625. {
  2626. var nationEnt = fieldComparisonTempList.Where(m => m.TableName == "nation" && m.OldKeyValue == row["nation_id"].ToString()).FirstOrDefault();
  2627. if (nationEnt == null)
  2628. {
  2629. nationId = row["nation_id"].ToString();
  2630. }
  2631. else
  2632. {
  2633. nationId = nationEnt.NewKeyValue;
  2634. }
  2635. }
  2636. Guid autoPatientId = GuidGenerator.Create(); //档案ID
  2637. var dataPatient = new Patient(autoPatientId)
  2638. {
  2639. Address = row["address"].ToString(),
  2640. BirthDate = string.IsNullOrEmpty(row["birth_date"].ToString()) ? null : Convert.ToDateTime(row["birth_date"].ToString()),
  2641. BirthPlaceId = null,
  2642. DisplayName = row["name"].ToString(),
  2643. Email = row["email"].ToString(),
  2644. IdNo = row["id_card_no"].ToString(),
  2645. MaritalStatusId = row["marital_status_id"].ToString() == "2" ? '4' : Convert.ToChar(row["marital_status_id"].ToString()),
  2646. MedicalCenterId = defaultMedicalCenterId,
  2647. MobileTelephone = row["mobile_telephone"].ToString(),
  2648. NationId = nationId,
  2649. PatientNo = row["patient_id"].ToString(),
  2650. PatientPassword = row["patient_password"].ToString(),
  2651. PostalCode = row["postalcode"].ToString(),
  2652. SexId = ConvertSex(row["sex_id"].ToString()),
  2653. SimpleCode = LanguageConverter.GetPYSimpleCode(row["name"].ToString()),
  2654. Telephone = row["telephone"].ToString()
  2655. };
  2656. await _patientRepository.InsertAsync(dataPatient, true);
  2657. patientId = autoPatientId;
  2658. }
  2659. else
  2660. {
  2661. patientId = patientEnt.Id;
  2662. }
  2663. #endregion
  2664. Guid patientRegisterId = GuidGenerator.Create(); //生成登记ID
  2665. #region 转换审核医生ID
  2666. Guid? AuditDoctorId = null;
  2667. if (!string.IsNullOrWhiteSpace(row["audit_doctor"].ToString()))
  2668. {
  2669. var userEnt = userList.Where(m => m.Name == row["audit_doctor"].ToString().Trim()
  2670. || m.Surname == row["audit_doctor"].ToString().Trim()
  2671. || m.UserName == row["audit_doctor"].ToString().Trim()).FirstOrDefault();
  2672. if (userEnt != null)
  2673. {
  2674. AuditDoctorId = userEnt.Id;
  2675. }
  2676. }
  2677. #endregion
  2678. #region 转换单位分组ID
  2679. Guid? customerOrgGroupId = null;
  2680. if (!string.IsNullOrWhiteSpace(row["org_group_id"].ToString()))
  2681. {
  2682. var customerOrgGroupEnt = fieldComparisonTempList.Where(m => m.TableName == "customer_org_group" && m.OldKeyValue == row["org_group_id"].ToString()).FirstOrDefault();
  2683. if (customerOrgGroupEnt != null)
  2684. {
  2685. customerOrgGroupId = Guid.Parse(customerOrgGroupEnt.NewKeyValue);
  2686. }
  2687. }
  2688. #endregion
  2689. #region 转换单位ID 部门
  2690. Guid customerOrgId = Guid.Parse(fieldComparisonTempList.Where(m => m.TableName == "customer_org" && m.OldKeyValue == row["org_id"].ToString()).FirstOrDefault().NewKeyValue);
  2691. #endregion
  2692. #region 转换单位体检次数ID 没有增加默认值
  2693. Guid customerOrgRegisterId = GuidFlag.PersonCustomerOrgRegisterId;
  2694. if (row["org_id"].ToString() != "00000")
  2695. {
  2696. Guid topCustomerOrgId = Guid.Parse(fieldComparisonTempList.Where(m => m.TableName == "customer_org" && m.OldKeyValue == row["org_id"].ToString().Substring(0, 5)).FirstOrDefault().NewKeyValue);
  2697. var customerOrgRegisterEnt = customerOrgRegisterList.Where(m => m.CustomerOrgId == topCustomerOrgId
  2698. && m.MedicalTimes == (short)Convert.ToInt32(row["org_medical_times"].ToString())).FirstOrDefault();
  2699. if (customerOrgRegisterEnt != null)
  2700. {
  2701. customerOrgRegisterId = customerOrgRegisterEnt.Id;
  2702. }
  2703. }
  2704. #endregion
  2705. #region 转换体检结论ID
  2706. Guid? medicalConclusionId = null;
  2707. if (!string.IsNullOrWhiteSpace(row["medical_conclusion_id"].ToString()))
  2708. {
  2709. var medicalConclusionEnt = fieldComparisonTempList.Where(m => m.TableName == "medical_conclusion"
  2710. && m.OldKeyValue == row["medical_conclusion_id"].ToString()).FirstOrDefault();
  2711. if (medicalConclusionEnt != null)
  2712. {
  2713. medicalConclusionId = Guid.Parse(medicalConclusionEnt.NewKeyValue);
  2714. }
  2715. }
  2716. #endregion
  2717. #region 转换套餐ID
  2718. Guid? medicalPackageId = null;
  2719. if (!string.IsNullOrWhiteSpace(row["medical_package_id"].ToString()))
  2720. {
  2721. var medicalPackageEnt = fieldComparisonTempList.Where(m => m.TableName == "medical_package" && m.OldKeyValue == row["medical_package_id"].ToString()).FirstOrDefault();
  2722. if (medicalPackageEnt != null)
  2723. {
  2724. medicalPackageId = Guid.Parse(medicalPackageEnt.NewKeyValue);
  2725. }
  2726. }
  2727. #endregion
  2728. #region 转换体检类别ID
  2729. Guid? medicalTypeId = null;
  2730. if (!string.IsNullOrWhiteSpace(row["medical_type_id"].ToString()))
  2731. {
  2732. var medicalTypeEnt = fieldComparisonTempList.Where(m => m.TableName == "medical_type" && m.OldKeyValue == row["medical_type_id"].ToString()).FirstOrDefault();
  2733. if (medicalTypeEnt != null)
  2734. {
  2735. medicalTypeId = Guid.Parse(medicalTypeEnt.NewKeyValue);
  2736. }
  2737. }
  2738. #endregion
  2739. #region 转换人员类别ID
  2740. Guid? personnelTypeId = null;
  2741. if (!string.IsNullOrWhiteSpace(row["personnel_type_id"].ToString()))
  2742. {
  2743. var personnelTypeEnt = fieldComparisonTempList.Where(m => m.TableName == "personnel_type" && m.OldKeyValue == row["personnel_type_id"].ToString()).FirstOrDefault();
  2744. if (personnelTypeEnt != null)
  2745. {
  2746. personnelTypeId = Guid.Parse(personnelTypeEnt.NewKeyValue);
  2747. }
  2748. }
  2749. #endregion
  2750. #region 转换总检医生ID
  2751. Guid? summaryDoctorId = null;
  2752. if (!string.IsNullOrWhiteSpace(row["summary_doctor"].ToString()))
  2753. {
  2754. var userEnt = userList.Where(m => m.Name == row["summary_doctor"].ToString().Trim()
  2755. || m.Surname == row["summary_doctor"].ToString().Trim()
  2756. || m.UserName == row["summary_doctor"].ToString().Trim()).FirstOrDefault();
  2757. if (userEnt != null)
  2758. {
  2759. summaryDoctorId = userEnt.Id;
  2760. }
  2761. }
  2762. #endregion
  2763. #region 上传图片,获取地址
  2764. string photo = "";
  2765. if (!string.IsNullOrEmpty(row["photograph"].ToString()))
  2766. {
  2767. photo = UpLoadImg(patientRegisterId, Convert.ToDateTime(row["register_date"].ToString()), (byte[])row["photograph"]);
  2768. }
  2769. #endregion
  2770. var data = new PatientRegister(patientRegisterId)
  2771. {
  2772. BirthDate = string.IsNullOrEmpty(row["birth_date"].ToString()) ? null : Convert.ToDateTime(row["birth_date"].ToString()),
  2773. MaritalStatusId = row["marital_status_id"].ToString() == "2" ? '4' : Convert.ToChar(row["marital_status_id"].ToString()),
  2774. MedicalCenterId = defaultMedicalCenterId,
  2775. SexId = ConvertSex(row["sex_id"].ToString()),
  2776. Age = string.IsNullOrWhiteSpace(row["age"].ToString()) ? null : Convert.ToInt16(row["age"].ToString()),
  2777. AuditDate = string.IsNullOrWhiteSpace(row["audit_date"].ToString()) ? null : Convert.ToDateTime(row["audit_date"].ToString()),
  2778. AuditDoctorId = AuditDoctorId,
  2779. CompleteFlag = Convert.ToChar(row["complete_flag"].ToString()),
  2780. CustomerOrgGroupId = customerOrgGroupId,
  2781. CustomerOrgId = customerOrgId,
  2782. CustomerOrgRegisterId = customerOrgRegisterId,
  2783. GuidePrintTimes = string.IsNullOrWhiteSpace(row["instruct_print_times"].ToString()) ? (short)0 : Convert.ToInt16(row["instruct_print_times"].ToString()),
  2784. InterposeMeasure = null,
  2785. IsAudit = string.IsNullOrWhiteSpace(row["audit_flag"].ToString()) ? 'N' : Convert.ToChar(row["audit_flag"].ToString()),
  2786. IsLock = string.IsNullOrWhiteSpace(row["lock_flag"].ToString()) ? 'N' : Convert.ToChar(row["lock_flag"].ToString()),
  2787. IsMedicalStart = string.IsNullOrWhiteSpace(row["medical_start_flag"].ToString()) ? 'N' : Convert.ToChar(row["medical_start_flag"].ToString()),
  2788. IsNameHide = string.IsNullOrWhiteSpace(row["name_encrypt_flag"].ToString()) ? 'N' : Convert.ToChar(row["name_encrypt_flag"].ToString()),
  2789. IsPhoneFollow = 'N',
  2790. IsRecoverGuide = string.IsNullOrWhiteSpace(row["recover_form_flag"].ToString()) ? 'N' : Convert.ToChar(row["recover_form_flag"].ToString()),
  2791. IsUpload = string.IsNullOrWhiteSpace(row["upload_flag"].ToString()) ? 'N' : Convert.ToChar(row["upload_flag"].ToString()),
  2792. IsVip = string.IsNullOrWhiteSpace(row["vip_flag"].ToString()) ? 'N' : Convert.ToChar(row["vip_flag"].ToString()),
  2793. JobCardNo = row["job_card_no"].ToString(),
  2794. JobPost = row["job_post"].ToString(),
  2795. JobTitle = row["job_title"].ToString(),
  2796. MedicalCardNo = row["medical_card_no"].ToString(),
  2797. MedicalConclusionId = medicalConclusionId,
  2798. MedicalPackageId = medicalPackageId,
  2799. MedicalStartDate = string.IsNullOrEmpty(row["medical_start_date"].ToString()) ? null : Convert.ToDateTime(row["medical_start_date"].ToString()),
  2800. MedicalTimes = Convert.ToInt16(row["medical_times"].ToString()),
  2801. MedicalTypeId = medicalTypeId,
  2802. PatientId = patientId,
  2803. PatientName = row["name"].ToString(),
  2804. PatientRegisterNo = row["barcode_no"].ToString(),
  2805. PersonnelTypeId = personnelTypeId,
  2806. Photo = photo,
  2807. Remark = row["remark"].ToString(),
  2808. ReportPrintTimes = Convert.ToInt16(row["report_print_times"].ToString()),
  2809. Salesman = row["salesman"].ToString(),
  2810. SexHormoneTermId = null,
  2811. SummaryDate = string.IsNullOrEmpty(row["summary_date"].ToString()) ? null : Convert.ToDateTime(row["summary_date"].ToString()),
  2812. SummaryDoctorId = summaryDoctorId,
  2813. ThirdInfo = row["third_info"].ToString(),
  2814. };
  2815. await _patientRegisterRepository.InsertAsync(data, true);
  2816. //stopwatch31.Stop();
  2817. //_logger.LogInformation($"{row["patient_register_id"]}_第31片段耗时:{stopwatch31.ElapsedMilliseconds}");
  2818. //Stopwatch stopwatch32 = new Stopwatch();
  2819. //stopwatch32.Start();
  2820. #region 登记的项目、结果、小结
  2821. var oldRegisterAsbitemList = await oldDb.Ado.GetDataTableAsync($"select * from register_asbitem where patient_register_id='{row["patient_register_id"].ToString()}'");
  2822. if (oldRegisterAsbitemList.Rows.Count > 0)
  2823. {
  2824. var oldRegisterCheckItemListAll = await oldDb.Ado.GetDataTableAsync($"select * from register_item where patient_register_id='{row["patient_register_id"].ToString()}'");
  2825. var registerCheckList = new List<RegisterCheck>();
  2826. var registerCheckAsbitemList = new List<RegisterCheckAsbitem>();
  2827. var registerCheckItemList = new List<RegisterCheckItem>();
  2828. var registerCheckSummaryList = new List<RegisterCheckSummary>();
  2829. var registerCheckPictureList = new List<RegisterCheckPicture>();
  2830. foreach (DataRow rowAsbitem in oldRegisterAsbitemList.Rows)
  2831. {
  2832. //Stopwatch stopwatch34 = new Stopwatch();
  2833. //stopwatch34.Start();
  2834. #region 转换审核医生ID
  2835. Guid? auditorUserId = null;
  2836. if (!string.IsNullOrWhiteSpace(rowAsbitem["audit_doctor"].ToString()))
  2837. {
  2838. var userEnt = userList.Where(m => m.Name == rowAsbitem["audit_doctor"].ToString().Trim()
  2839. || m.Surname == rowAsbitem["audit_doctor"].ToString().Trim()
  2840. || m.UserName == rowAsbitem["audit_doctor"].ToString().Trim()).FirstOrDefault();
  2841. if (userEnt != null)
  2842. {
  2843. auditorUserId = userEnt.Id;
  2844. }
  2845. }
  2846. #endregion
  2847. #region 转换检查医生ID
  2848. string checkDoctorId = null;
  2849. if (!string.IsNullOrWhiteSpace(rowAsbitem["check_doctor"].ToString()))
  2850. {
  2851. var userEnt = userList.Where(m => m.Name == rowAsbitem["check_doctor"].ToString().Trim()
  2852. || m.Surname == rowAsbitem["check_doctor"].ToString().Trim()
  2853. || m.UserName == rowAsbitem["check_doctor"].ToString().Trim()).FirstOrDefault();
  2854. if (userEnt != null)
  2855. {
  2856. checkDoctorId = userEnt.Id.ToString();
  2857. }
  2858. else
  2859. {
  2860. checkDoctorId = rowAsbitem["check_doctor"].ToString().Trim();
  2861. }
  2862. }
  2863. #endregion
  2864. #region 转换组合项目ID
  2865. Guid newAsbitemId = Guid.Parse(asbitemFieldComparisonTempList.Where(m => m.OldKeyValue == rowAsbitem["asbitem_id"].ToString()).FirstOrDefault().NewKeyValue);
  2866. #endregion
  2867. //stopwatch34.Stop();
  2868. //_logger.LogInformation($"{row["patient_register_id"]}_第34片段耗时:{stopwatch34.ElapsedMilliseconds}");
  2869. #region 插入register_check
  2870. Guid registerCheckId = GuidGenerator.Create();
  2871. var dataRegisterCheck = new RegisterCheck(registerCheckId)
  2872. {
  2873. AuditorUserId = auditorUserId,
  2874. AuditTime = string.IsNullOrEmpty(rowAsbitem["audit_date"].ToString()) ? null : Convert.ToDateTime(rowAsbitem["audit_date"].ToString()),
  2875. CheckDate = string.IsNullOrEmpty(rowAsbitem["check_date"].ToString()) ? null : Convert.ToDateTime(rowAsbitem["check_date"].ToString()),
  2876. CheckDoctorId = checkDoctorId,
  2877. CheckRequestNo = "",
  2878. CheckRequestPrintTimes = (short)1,
  2879. CompleteFlag = Convert.ToChar(rowAsbitem["complete_flag"].ToString()),
  2880. CriticalRangeValue = null,
  2881. //CriticalValueCreateDate = null,
  2882. IsCriticalValue = null,
  2883. CriticalValueContent = null,
  2884. //CriticalValueProcessDate = null,
  2885. //CriticalValueProcessDoctor = null,
  2886. //CriticalValueProcessFlag = null,
  2887. IsAudit = string.IsNullOrEmpty(rowAsbitem["audit_flag"].ToString()) ? 'N' : Convert.ToChar(rowAsbitem["audit_flag"].ToString()),
  2888. IsLock = string.IsNullOrEmpty(rowAsbitem["lock_flag"].ToString()) ? 'N' : Convert.ToChar(rowAsbitem["lock_flag"].ToString()),
  2889. PatientRegisterId = patientRegisterId,
  2890. ThirdInfo = rowAsbitem["third_info"].ToString()
  2891. };
  2892. //await _registerCheckRepository.InsertAsync(dataRegisterCheck, true);
  2893. dataRegisterCheck.SetCreateId(_currentUser.Id);
  2894. dataRegisterCheck.SetCreationTime(DateTime.Now);
  2895. dataRegisterCheck.SetLastModifierId(_currentUser.Id);
  2896. dataRegisterCheck.SetLastModificationTime(DateTime.Now);
  2897. registerCheckList.Add(dataRegisterCheck);
  2898. #endregion
  2899. #region 插入register_check_asbitem
  2900. Guid registerCheckAsbitemId = GuidGenerator.Create();
  2901. var dataRegisterAsbitem = new RegisterCheckAsbitem(registerCheckAsbitemId)
  2902. {
  2903. Amount = 1,
  2904. IsCharge = Convert.ToChar(rowAsbitem["charge_flag"].ToString()),
  2905. AsbitemId = newAsbitemId,
  2906. ChargePrice = Convert.ToDecimal(rowAsbitem["price"].ToString()),
  2907. GroupPackageId = null,
  2908. LisRequestId = null,
  2909. PatientRegisterId = patientRegisterId,
  2910. PayTypeFlag = Convert.ToChar(rowAsbitem["payment_mode"].ToString()),
  2911. RegisterCheckId = registerCheckId,
  2912. StandardPrice = Convert.ToDecimal(rowAsbitem["standard_price"].ToString()),
  2913. };
  2914. //await _registerCheckAsbitemRepository.InsertAsync(dataRegisterAsbitem);
  2915. dataRegisterAsbitem.SetCreateId(_currentUser.Id);
  2916. dataRegisterAsbitem.SetCreationTime(DateTime.Now);
  2917. dataRegisterAsbitem.SetLastModifierId(_currentUser.Id);
  2918. dataRegisterAsbitem.SetLastModificationTime(DateTime.Now);
  2919. registerCheckAsbitemList.Add(dataRegisterAsbitem);
  2920. #endregion
  2921. #region 插入医生小结
  2922. var oldSummary = rowAsbitem["summary"].ToString();
  2923. if (!string.IsNullOrWhiteSpace(oldSummary))
  2924. {
  2925. Guid dataRegisterCheckSummaryId = GuidGenerator.Create();
  2926. var dataRegisterCheckSummary = new RegisterCheckSummary(dataRegisterCheckSummaryId)
  2927. {
  2928. RegisterCheckId = registerCheckId,
  2929. DisplayOrder = 1,
  2930. Summary = oldSummary,
  2931. SummaryFlag = '0'
  2932. };
  2933. //await _registerCheckSummaryRepository.InsertAsync(dataRegisterCheckSummary);
  2934. dataRegisterCheckSummary.SetCreateId(_currentUser.Id);
  2935. dataRegisterCheckSummary.SetCreationTime(DateTime.Now);
  2936. dataRegisterCheckSummary.SetLastModifierId(_currentUser.Id);
  2937. dataRegisterCheckSummary.SetLastModificationTime(DateTime.Now);
  2938. registerCheckSummaryList.Add(dataRegisterCheckSummary);
  2939. }
  2940. #endregion
  2941. #region 插入检查图片
  2942. string sql_check_picture = $"select * from check_picture where patient_register_id='{row["patient_register_id"]}' and asbitem_id='{rowAsbitem["asbitem_id"]}' ";
  2943. DataTable dt_check_picture = await oldDb.Ado.GetDataTableAsync(sql_check_picture);
  2944. if (dt_check_picture.Rows.Count > 0)
  2945. {
  2946. foreach (DataRow checkPictureRow in dt_check_picture.Rows)
  2947. {
  2948. Guid tempRegisterCheckPictureId = GuidGenerator.Create();
  2949. var fileName = checkPictureRow["picture_filename"].ToString();
  2950. fileName = fileName.Replace("\\\\192.168.0.3", "").Replace(@"\", "/").Replace("//", "/");
  2951. var tempRegisterCheckPicture = new RegisterCheckPicture(tempRegisterCheckPictureId)
  2952. {
  2953. DisplayOrder = dt_check_picture.Rows.IndexOf(checkPictureRow) + 1,
  2954. IsPrint = 'Y',
  2955. LocalPathName = "",
  2956. PictureFileType = '0',
  2957. PictureFilename = fileName,
  2958. RegisterCheckId = registerCheckId
  2959. };
  2960. tempRegisterCheckPicture.SetCreateId(_currentUser.Id);
  2961. tempRegisterCheckPicture.SetCreationTime(DateTime.Now);
  2962. tempRegisterCheckPicture.SetLastModifierId(_currentUser.Id);
  2963. tempRegisterCheckPicture.SetLastModificationTime(DateTime.Now);
  2964. registerCheckPictureList.Add(tempRegisterCheckPicture);
  2965. }
  2966. }
  2967. #endregion
  2968. #region 插入明细项目
  2969. oldRegisterCheckItemListAll.DefaultView.RowFilter = $"asbitem_id={rowAsbitem["asbitem_id"].ToString()}";
  2970. var oldRegisterCheckItemList = oldRegisterCheckItemListAll.DefaultView.ToTable();
  2971. //var oldRegisterCheckItemList = await oldDb.Ado.GetDataTableAsync($"select * from register_item where patient_register_id='{row["patient_register_id"].ToString()}' and asbitem_id='{rowAsbitem["asbitem_id"].ToString()}'");
  2972. if (oldRegisterCheckItemList.Rows.Count > 0)
  2973. {
  2974. foreach (DataRow rowRegisterCheckItem in oldRegisterCheckItemList.Rows)
  2975. {
  2976. #region 转换项目ID 老转新
  2977. Guid newItemId = Guid.Parse(itemFieldComparisonTempList.Where(m => m.OldKeyValue == rowRegisterCheckItem["item_id"].ToString()).FirstOrDefault().NewKeyValue);
  2978. #endregion
  2979. var dataRegisterCheckItem = new RegisterCheckItem
  2980. {
  2981. CheckDate = string.IsNullOrEmpty(rowRegisterCheckItem["check_date"].ToString()) ? null : Convert.ToDateTime(rowRegisterCheckItem["check_date"].ToString()),
  2982. CriticalValue = null,
  2983. CheckDoctorName = rowRegisterCheckItem["check_doctor"].ToString().Trim(),
  2984. CriticalRangeValue = null,
  2985. ItemId = newItemId,
  2986. ReferenceRangeValue = rowRegisterCheckItem["reference_range_value"].ToString(),
  2987. RegisterCheckId = registerCheckId,
  2988. Result = rowRegisterCheckItem["result"].ToString(),
  2989. ResultStatusId = _registerCheckItemManager.GetResultStatusId(rowRegisterCheckItem["result"].ToString(), rowRegisterCheckItem["reference_range_value"].ToString()),
  2990. Unit = rowRegisterCheckItem["Unit"].ToString()
  2991. };
  2992. //await _registerCheckItemRepository.InsertAsync(dataRegisterCheckItem);
  2993. dataRegisterCheckItem.SetCreateId(_currentUser.Id);
  2994. dataRegisterCheckItem.SetCreationTime(DateTime.Now);
  2995. dataRegisterCheckItem.SetLastModifierId(_currentUser.Id);
  2996. dataRegisterCheckItem.SetLastModificationTime(DateTime.Now);
  2997. registerCheckItemList.Add(dataRegisterCheckItem);
  2998. }
  2999. }
  3000. #endregion
  3001. }
  3002. //await _registerCheckRepository.InsertManyAsync(registerCheckList, true);
  3003. //await _registerCheckAsbitemRepository.InsertManyAsync(registerCheckAsbitemList, true);
  3004. //if (registerCheckSummaryList.Count > 0)
  3005. //{
  3006. // await _registerCheckSummaryRepository.InsertManyAsync(registerCheckSummaryList, true);
  3007. //}
  3008. //if (registerCheckItemList.Count > 0)
  3009. //{
  3010. // await _registerCheckItemRepository.InsertManyAsync(registerCheckItemList, true);
  3011. //}
  3012. await dbContext.BulkInsertAsync<RegisterCheck>(registerCheckList, new BulkConfig
  3013. {
  3014. PreserveInsertOrder = false, // 如果不需要顺序,可以关掉
  3015. SetOutputIdentity = false, // Guid 主键时一定要关掉
  3016. BatchSize = 10000, // 大数据量时调整批次大小
  3017. TrackingEntities = false // 禁用跟踪,加快速度
  3018. });
  3019. await dbContext.BulkInsertAsync<RegisterCheckAsbitem>(registerCheckAsbitemList, new BulkConfig
  3020. {
  3021. PreserveInsertOrder = false, // 如果不需要顺序,可以关掉
  3022. SetOutputIdentity = false, // Guid 主键时一定要关掉
  3023. BatchSize = 10000, // 大数据量时调整批次大小
  3024. TrackingEntities = false // 禁用跟踪,加快速度
  3025. });
  3026. if (registerCheckSummaryList.Count > 0)
  3027. {
  3028. await dbContext.BulkInsertAsync<RegisterCheckSummary>(registerCheckSummaryList, new BulkConfig
  3029. {
  3030. PreserveInsertOrder = false, // 如果不需要顺序,可以关掉
  3031. SetOutputIdentity = false, // Guid 主键时一定要关掉
  3032. BatchSize = 10000, // 大数据量时调整批次大小
  3033. TrackingEntities = false // 禁用跟踪,加快速度
  3034. });
  3035. }
  3036. if (registerCheckItemList.Count > 0)
  3037. {
  3038. await dbContext.BulkInsertAsync<RegisterCheckItem>(registerCheckItemList, new BulkConfig
  3039. {
  3040. PreserveInsertOrder = false, // 如果不需要顺序,可以关掉
  3041. SetOutputIdentity = false, // Guid 主键时一定要关掉
  3042. BatchSize = 10000, // 大数据量时调整批次大小
  3043. TrackingEntities = false // 禁用跟踪,加快速度
  3044. });
  3045. }
  3046. if (registerCheckPictureList.Count > 0)
  3047. {
  3048. await dbContext.BulkInsertAsync<RegisterCheckPicture>(registerCheckPictureList, new BulkConfig
  3049. {
  3050. PreserveInsertOrder = false, // 如果不需要顺序,可以关掉
  3051. SetOutputIdentity = false, // Guid 主键时一定要关掉
  3052. BatchSize = 10000, // 大数据量时调整批次大小
  3053. TrackingEntities = false // 禁用跟踪,加快速度
  3054. });
  3055. }
  3056. }
  3057. #endregion
  3058. //stopwatch32.Stop();
  3059. //_logger.LogInformation($"{row["patient_register_id"]}_第32片段耗时:{stopwatch32.ElapsedMilliseconds}");
  3060. #region 总检建议、综述、总检诊断
  3061. var oldSum = await oldDb.Ado.GetDataTableAsync($"select summary,suggestion,barcode_no from patient_register where patient_register_id='{oldPatientRegisterId}' ");
  3062. if (oldSum.Rows.Count == 1)
  3063. {
  3064. string oldSummary = oldSum.Rows[0][0].ToString();
  3065. string oldSuggestion = oldSum.Rows[0][1].ToString();
  3066. if (!string.IsNullOrWhiteSpace(oldSummary))
  3067. {
  3068. Guid sumSummaryHeaderId = GuidGenerator.Create();
  3069. var dataSumSummaryHeader = new SumSummaryHeader(sumSummaryHeaderId)
  3070. {
  3071. DisplayOrder = 1,
  3072. SummaryFlag = '0',
  3073. PatientRegisterId = patientRegisterId,
  3074. SummaryTitle = "异常结果如下"
  3075. };
  3076. await _sumSummaryHeaderRepository.InsertAsync(dataSumSummaryHeader);
  3077. Guid sumSummaryContentId = GuidGenerator.Create();
  3078. var dataSumSummaryContent = new SumSummaryContent(sumSummaryContentId)
  3079. {
  3080. DisplayOrder = 1,
  3081. SumSummaryHeaderId = sumSummaryHeaderId,
  3082. SummaryContent = oldSummary
  3083. };
  3084. await _sumSummaryContentRepository.InsertAsync(dataSumSummaryContent);
  3085. }
  3086. if (!string.IsNullOrWhiteSpace(oldSuggestion))
  3087. {
  3088. Guid sumSuggestionHeaderId = GuidGenerator.Create();
  3089. var dataSumSuggestionHeader = new SumSuggestionHeader(sumSuggestionHeaderId)
  3090. {
  3091. DisplayOrder = 1,
  3092. SuggestionFlag = '0',
  3093. PatientRegisterId = patientRegisterId,
  3094. SuggestionTitle = "健康建议如下"
  3095. };
  3096. await _sumSuggestionHeaderRepository.InsertAsync(dataSumSuggestionHeader);
  3097. Guid sumSuggestionContentId = GuidGenerator.Create();
  3098. var dataSumSuggestionContent = new SumSuggestionContent(sumSuggestionContentId)
  3099. {
  3100. DisplayOrder = 1,
  3101. SuggestionContent = oldSuggestion,
  3102. SuggestionType = SuggestionTypeFlag.HealthGuidance,
  3103. SumSuggestionHeaderId = sumSuggestionHeaderId
  3104. };
  3105. await _sumSuggestionContentRepository.InsertAsync(dataSumSuggestionContent);
  3106. #region 总症诊断
  3107. var oldSummaryDiagnosis = await oldDb.Ado.GetDataTableAsync($"select diagnosis_id from summary_diagnosis where patient_register_id='{oldPatientRegisterId}' order by display_order asc ");
  3108. if (oldSummaryDiagnosis.Rows.Count > 0)
  3109. {
  3110. List<SumDiagnosis> sumDiagnosisInsert = new List<SumDiagnosis>();
  3111. foreach (DataRow summaryDiagnosis in oldSummaryDiagnosis.Rows)
  3112. {
  3113. var diagnosisEnt = fieldComparisonTempList.Where(m => m.TableName == "diagnosis" && m.OldKeyValue == summaryDiagnosis["diagnosis_id"].ToString()).FirstOrDefault();
  3114. if (diagnosisEnt != null)
  3115. {
  3116. var dataSumDiagnosis = new SumDiagnosis
  3117. {
  3118. DisplayOrder = oldSummaryDiagnosis.Rows.IndexOf(summaryDiagnosis) + 1,
  3119. PatientRegisterId = patientRegisterId,
  3120. DiagnosisId = Guid.Parse(diagnosisEnt.NewKeyValue),
  3121. SumSuggestionHeaderId = sumSuggestionHeaderId
  3122. };
  3123. sumDiagnosisInsert.Add(dataSumDiagnosis);
  3124. }
  3125. }
  3126. if (sumDiagnosisInsert.Any())
  3127. await _sumDiagnosisRepository.InsertManyAsync(sumDiagnosisInsert);
  3128. }
  3129. #endregion
  3130. }
  3131. }
  3132. #endregion
  3133. /*
  3134. var fieldComparison = new FieldComparison
  3135. {
  3136. FieldName = "id",
  3137. NewKeyValue = patientRegisterId.ToString(),
  3138. OldKeyValue = row["patient_register_id"].ToString(),
  3139. TableName = "patient_register"
  3140. };
  3141. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  3142. await oldDb.Ado.ExecuteCommandAsync($"update tb_export_key set keyvalue='{row["patient_register_id"].ToString()}',addtime=getdate(),handlecount+=1 where tablename='patient_register' ");
  3143. */
  3144. await uow.CompleteAsync();
  3145. #region 修改创建者日期跟id
  3146. Guid registerDoctorId = Guid.Parse(_configuration.GetValue<string>("AdminId"));
  3147. var registerDoctorEnt = userList.Where(m => m.Name == row["register_doctor"].ToString().Trim()).FirstOrDefault();
  3148. if (registerDoctorEnt != null)
  3149. {
  3150. registerDoctorId = registerDoctorEnt.Id;
  3151. }
  3152. string sql_update = $"update patient_register set creator_id='{registerDoctorId}',creation_time='{Convert.ToDateTime(row["register_date"]).ToString("yyyy-MM-dd HH:mm:ss")}'";
  3153. sql_update += $" where id='{patientRegisterId}' ";
  3154. await newDb.Ado.ExecuteCommandAsync(sql_update);
  3155. #endregion
  3156. ;
  3157. }
  3158. stopwatch3.Stop();
  3159. _logger.LogInformation($"{row["patient_register_id"]}_处理单个人总耗时:{stopwatch3.ElapsedMilliseconds}");
  3160. }
  3161. catch (Exception ex)
  3162. {
  3163. hangPatientRegisterErrorCount++;
  3164. _logger.LogInformation($"数据处理失败,人员id为:{row["patient_register_id"]}");
  3165. #region 添加到tb_error_log表
  3166. await oldDb.Ado.ExecuteCommandAsync($"insert into tb_error_log(old_patient_register_id,error_message,addtime) values ('{row["patient_register_id"]}','{ex.StackTrace}',getdate()) ");
  3167. #endregion
  3168. }
  3169. }
  3170. /// <summary>
  3171. /// 失败人员处理
  3172. /// </summary>
  3173. /// <returns></returns>
  3174. [HttpPost("api/app/CCTJExportData/HandErrorPatientRegisterData")]
  3175. public async Task HandErrorPatientRegisterData()
  3176. {
  3177. string sql_error = "select old_patient_register_id from tb_error_log";
  3178. var errorPatientRegister = await oldDb.Ado.GetDataTableAsync(sql_error);
  3179. if (errorPatientRegister.Rows.Count > 0)
  3180. {
  3181. if (fieldComparisonTempList.Count == 0)
  3182. {
  3183. fieldComparisonTempList = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName != "patient_register").ToList();
  3184. asbitemFieldComparisonTempList = fieldComparisonTempList.Where(o => o.TableName == "asbitem").ToList();
  3185. itemFieldComparisonTempList = fieldComparisonTempList.Where(o => o.TableName == "item").ToList();
  3186. }
  3187. if (!_customerOrgRegisterList.Any())
  3188. _customerOrgRegisterList = await _customerOrgRegisterRepository.GetListAsync();
  3189. if (!_userList.Any())
  3190. _userList = await _identityUserRepository.GetListAsync();
  3191. foreach (DataRow row in errorPatientRegister.Rows)
  3192. {
  3193. string sql = $"select * from patient_register where patient_register_id={row["old_patient_register_id"]}";
  3194. var tempdt = await oldDb.Ado.GetDataTableAsync(sql);
  3195. if (tempdt.Rows.Count > 0)
  3196. {
  3197. await ImportSingle(_customerOrgRegisterList, _userList, tempdt.Rows[0]);
  3198. }
  3199. await oldDb.Ado.ExecuteCommandAsync($"delete from tb_error_log where old_patient_register_id='{row["old_patient_register_id"]}'");
  3200. }
  3201. }
  3202. }
  3203. private async Task ImportSingleParallel(List<CustomerOrgRegister> customerOrgRegisterList, List<IdentityUser> userList, DataRow row)
  3204. {
  3205. try
  3206. {
  3207. Stopwatch stopwatch3 = new Stopwatch();
  3208. stopwatch3.Start();
  3209. using (var scope = _serviceScopeFactory.CreateScope())
  3210. {
  3211. var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
  3212. using (var uow = unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  3213. {
  3214. using (var oldDb2 = new SqlSugarClient(new ConnectionConfig()
  3215. {
  3216. ConnectionString = "server=192.168.0.3;uid=sa;pwd=132****6302;database=oldPeis;Encrypt=false;",
  3217. DbType = SqlSugar.DbType.SqlServer,
  3218. IsAutoCloseConnection = true
  3219. }))
  3220. {
  3221. using (var newDb2 = new SqlSugarClient(new ConnectionConfig()
  3222. {
  3223. ConnectionString = "Host=192.168.0.188;Port=5432;Database=ShentunPeis;User ID=postgres;Password=St123456;",
  3224. DbType = SqlSugar.DbType.PostgreSQL,
  3225. IsAutoCloseConnection = true
  3226. }))
  3227. {
  3228. Stopwatch stopwatch31 = new Stopwatch();
  3229. stopwatch31.Start();
  3230. string oldPatientRegisterId = row["patient_register_id"].ToString();
  3231. //检查是否已经导入
  3232. var isDZPatientRegisterTemp = (await _fieldComparisonRepository.GetListAsync(f => f.TableName == "patient_register"
  3233. && f.OldKeyValue == oldPatientRegisterId));
  3234. if (isDZPatientRegisterTemp.Count > 0)
  3235. {
  3236. return;
  3237. //continue;//并行处理不使用该语句
  3238. }
  3239. //档案ID
  3240. Guid patientId = Guid.Empty;
  3241. #region 处理档案,未找到档案就生成
  3242. var patientEnt = await _patientRepository.FirstOrDefaultAsync(m => m.PatientNo == row["patient_id"].ToString());
  3243. if (patientEnt == null)
  3244. {
  3245. string nationId = null;
  3246. if (!string.IsNullOrWhiteSpace(row["nation_id"].ToString()))
  3247. {
  3248. var nationEnt = fieldComparisonTempList.Where(m => m.TableName == "nation" && m.OldKeyValue == row["nation_id"].ToString()).FirstOrDefault();
  3249. if (nationEnt == null)
  3250. {
  3251. nationId = row["nation_id"].ToString();
  3252. }
  3253. else
  3254. {
  3255. nationId = nationEnt.NewKeyValue;
  3256. }
  3257. }
  3258. Guid autoPatientId = GuidGenerator.Create(); //档案ID
  3259. var patientRepository = scope.ServiceProvider.GetRequiredService<IRepository<Patient, Guid>>();
  3260. var dataPatient = new Patient(autoPatientId)
  3261. {
  3262. Address = row["address"].ToString(),
  3263. BirthDate = string.IsNullOrEmpty(row["birth_date"].ToString()) ? null : Convert.ToDateTime(row["birth_date"].ToString()),
  3264. BirthPlaceId = null,
  3265. DisplayName = row["name"].ToString(),
  3266. Email = row["email"].ToString(),
  3267. IdNo = row["id_card_no"].ToString(),
  3268. MaritalStatusId = row["marital_status_id"].ToString() == "2" ? '4' : Convert.ToChar(row["marital_status_id"].ToString()),
  3269. MedicalCenterId = defaultMedicalCenterId,
  3270. MobileTelephone = row["mobile_telephone"].ToString(),
  3271. NationId = nationId,
  3272. PatientNo = row["patient_id"].ToString(),
  3273. PatientPassword = row["patient_password"].ToString(),
  3274. PostalCode = row["postalcode"].ToString(),
  3275. SexId = ConvertSex(row["sex_id"].ToString()),
  3276. SimpleCode = LanguageConverter.GetPYSimpleCode(row["name"].ToString()),
  3277. Telephone = row["telephone"].ToString()
  3278. };
  3279. await patientRepository.InsertAsync(dataPatient, true);
  3280. patientId = autoPatientId;
  3281. }
  3282. else
  3283. {
  3284. patientId = patientEnt.Id;
  3285. }
  3286. #endregion
  3287. Guid patientRegisterId = GuidGenerator.Create(); //生成登记ID
  3288. #region 转换审核医生ID
  3289. Guid? AuditDoctorId = null;
  3290. if (!string.IsNullOrWhiteSpace(row["audit_doctor"].ToString()))
  3291. {
  3292. var userEnt = userList.Where(m => m.Name == row["audit_doctor"].ToString().Trim()).FirstOrDefault();
  3293. if (userEnt != null)
  3294. {
  3295. AuditDoctorId = userEnt.Id;
  3296. }
  3297. }
  3298. #endregion
  3299. #region 转换单位分组ID
  3300. Guid? customerOrgGroupId = null;
  3301. if (!string.IsNullOrWhiteSpace(row["org_group_id"].ToString()))
  3302. {
  3303. var customerOrgGroupEnt = fieldComparisonTempList.Where(m => m.TableName == "customer_org_group" && m.OldKeyValue == row["org_group_id"].ToString()).FirstOrDefault();
  3304. if (customerOrgGroupEnt != null)
  3305. {
  3306. customerOrgGroupId = Guid.Parse(customerOrgGroupEnt.NewKeyValue);
  3307. }
  3308. }
  3309. #endregion
  3310. #region 转换单位ID 部门
  3311. Guid customerOrgId = Guid.Parse(fieldComparisonTempList.Where(m => m.TableName == "customer_org" && m.OldKeyValue == row["org_id"].ToString()).FirstOrDefault().NewKeyValue);
  3312. #endregion
  3313. #region 转换单位体检次数ID 没有增加默认值
  3314. Guid customerOrgRegisterId = GuidFlag.PersonCustomerOrgRegisterId;
  3315. if (row["org_id"].ToString() != "00000")
  3316. {
  3317. Guid topCustomerOrgId = Guid.Parse(fieldComparisonTempList.Where(m => m.TableName == "customer_org" && m.OldKeyValue == row["org_id"].ToString().Substring(0, 5)).FirstOrDefault().NewKeyValue);
  3318. var customerOrgRegisterEnt = customerOrgRegisterList.Where(m => m.CustomerOrgId == topCustomerOrgId
  3319. && m.MedicalTimes == (short)Convert.ToInt32(row["org_medical_times"].ToString())).FirstOrDefault();
  3320. if (customerOrgRegisterEnt != null)
  3321. {
  3322. customerOrgRegisterId = customerOrgRegisterEnt.Id;
  3323. }
  3324. }
  3325. #endregion
  3326. #region 转换体检结论ID
  3327. Guid? medicalConclusionId = null;
  3328. if (!string.IsNullOrWhiteSpace(row["medical_conclusion_id"].ToString()))
  3329. {
  3330. var medicalConclusionEnt = fieldComparisonTempList.Where(m => m.TableName == "medical_conclusion"
  3331. && m.OldKeyValue == row["medical_conclusion_id"].ToString()).FirstOrDefault();
  3332. if (medicalConclusionEnt != null)
  3333. {
  3334. medicalConclusionId = Guid.Parse(medicalConclusionEnt.NewKeyValue);
  3335. }
  3336. }
  3337. #endregion
  3338. #region 转换套餐ID
  3339. Guid? medicalPackageId = null;
  3340. if (!string.IsNullOrWhiteSpace(row["medical_package_id"].ToString()))
  3341. {
  3342. var medicalPackageEnt = fieldComparisonTempList.Where(m => m.TableName == "medical_package" && m.OldKeyValue == row["medical_package_id"].ToString()).FirstOrDefault();
  3343. if (medicalPackageEnt != null)
  3344. {
  3345. medicalPackageId = Guid.Parse(medicalPackageEnt.NewKeyValue);
  3346. }
  3347. }
  3348. #endregion
  3349. #region 转换体检类别ID
  3350. Guid? medicalTypeId = null;
  3351. if (!string.IsNullOrWhiteSpace(row["medical_type_id"].ToString()))
  3352. {
  3353. var medicalTypeEnt = fieldComparisonTempList.Where(m => m.TableName == "medical_type" && m.OldKeyValue == row["medical_type_id"].ToString()).FirstOrDefault();
  3354. if (medicalTypeEnt != null)
  3355. {
  3356. medicalTypeId = Guid.Parse(medicalTypeEnt.NewKeyValue);
  3357. }
  3358. }
  3359. #endregion
  3360. #region 转换人员类别ID
  3361. Guid? personnelTypeId = null;
  3362. if (!string.IsNullOrWhiteSpace(row["personnel_type_id"].ToString()))
  3363. {
  3364. var personnelTypeEnt = fieldComparisonTempList.Where(m => m.TableName == "personnel_type" && m.OldKeyValue == row["personnel_type_id"].ToString()).FirstOrDefault();
  3365. if (personnelTypeEnt != null)
  3366. {
  3367. personnelTypeId = Guid.Parse(personnelTypeEnt.NewKeyValue);
  3368. }
  3369. }
  3370. #endregion
  3371. #region 转换总检医生ID
  3372. Guid? summaryDoctorId = null;
  3373. if (!string.IsNullOrWhiteSpace(row["summary_doctor"].ToString()))
  3374. {
  3375. var userEnt = userList.Where(m => m.Name == row["summary_doctor"].ToString().Trim()).FirstOrDefault();
  3376. if (userEnt != null)
  3377. {
  3378. summaryDoctorId = userEnt.Id;
  3379. }
  3380. }
  3381. #endregion
  3382. #region 上传图片,获取地址
  3383. string photo = "";
  3384. if (!string.IsNullOrEmpty(row["photograph"].ToString()))
  3385. {
  3386. photo = UpLoadImg(patientRegisterId, Convert.ToDateTime(row["register_date"].ToString()), (byte[])row["photograph"]);
  3387. }
  3388. #endregion
  3389. var data = new PatientRegister(patientRegisterId)
  3390. {
  3391. BirthDate = string.IsNullOrEmpty(row["birth_date"].ToString()) ? null : Convert.ToDateTime(row["birth_date"].ToString()),
  3392. MaritalStatusId = row["marital_status_id"].ToString() == "2" ? '4' : Convert.ToChar(row["marital_status_id"].ToString()),
  3393. MedicalCenterId = defaultMedicalCenterId,
  3394. SexId = ConvertSex(row["sex_id"].ToString()),
  3395. Age = string.IsNullOrWhiteSpace(row["age"].ToString()) ? null : Convert.ToInt16(row["age"].ToString()),
  3396. AuditDate = string.IsNullOrWhiteSpace(row["audit_date"].ToString()) ? null : Convert.ToDateTime(row["audit_date"].ToString()),
  3397. AuditDoctorId = AuditDoctorId,
  3398. CompleteFlag = Convert.ToChar(row["complete_flag"].ToString()),
  3399. CustomerOrgGroupId = customerOrgGroupId,
  3400. CustomerOrgId = customerOrgId,
  3401. CustomerOrgRegisterId = customerOrgRegisterId,
  3402. GuidePrintTimes = string.IsNullOrWhiteSpace(row["instruct_print_times"].ToString()) ? (short)0 : Convert.ToInt16(row["instruct_print_times"].ToString()),
  3403. InterposeMeasure = null,
  3404. IsAudit = string.IsNullOrWhiteSpace(row["audit_flag"].ToString()) ? 'N' : Convert.ToChar(row["audit_flag"].ToString()),
  3405. IsLock = string.IsNullOrWhiteSpace(row["lock_flag"].ToString()) ? 'N' : Convert.ToChar(row["lock_flag"].ToString()),
  3406. IsMedicalStart = string.IsNullOrWhiteSpace(row["medical_start_flag"].ToString()) ? 'N' : Convert.ToChar(row["medical_start_flag"].ToString()),
  3407. IsNameHide = string.IsNullOrWhiteSpace(row["name_encrypt_flag"].ToString()) ? 'N' : Convert.ToChar(row["name_encrypt_flag"].ToString()),
  3408. IsPhoneFollow = 'N',
  3409. IsRecoverGuide = string.IsNullOrWhiteSpace(row["recover_form_flag"].ToString()) ? 'N' : Convert.ToChar(row["recover_form_flag"].ToString()),
  3410. IsUpload = string.IsNullOrWhiteSpace(row["upload_flag"].ToString()) ? 'N' : Convert.ToChar(row["upload_flag"].ToString()),
  3411. IsVip = string.IsNullOrWhiteSpace(row["vip_flag"].ToString()) ? 'N' : Convert.ToChar(row["vip_flag"].ToString()),
  3412. JobCardNo = row["job_card_no"].ToString(),
  3413. JobPost = row["job_post"].ToString(),
  3414. JobTitle = row["job_title"].ToString(),
  3415. MedicalCardNo = row["medical_card_no"].ToString(),
  3416. MedicalConclusionId = medicalConclusionId,
  3417. MedicalPackageId = medicalPackageId,
  3418. MedicalStartDate = string.IsNullOrEmpty(row["medical_start_date"].ToString()) ? null : Convert.ToDateTime(row["medical_start_date"].ToString()),
  3419. MedicalTimes = Convert.ToInt16(row["medical_times"].ToString()),
  3420. MedicalTypeId = medicalTypeId,
  3421. PatientId = patientId,
  3422. PatientName = row["name"].ToString(),
  3423. PatientRegisterNo = row["barcode_no"].ToString(),
  3424. PersonnelTypeId = personnelTypeId,
  3425. Photo = photo,
  3426. Remark = row["remark"].ToString(),
  3427. ReportPrintTimes = Convert.ToInt16(row["report_print_times"].ToString()),
  3428. Salesman = row["salesman"].ToString(),
  3429. SexHormoneTermId = null,
  3430. SummaryDate = string.IsNullOrEmpty(row["summary_date"].ToString()) ? null : Convert.ToDateTime(row["summary_date"].ToString()),
  3431. SummaryDoctorId = summaryDoctorId,
  3432. ThirdInfo = row["third_info"].ToString(),
  3433. };
  3434. var patientRegisterRepository = scope.ServiceProvider.GetRequiredService<IRepository<PatientRegister, Guid>>();
  3435. await patientRegisterRepository.InsertAsync(data, true);
  3436. stopwatch31.Stop();
  3437. _logger.LogInformation($"{row["patient_register_id"]}_第31片段耗时:{stopwatch31.ElapsedMilliseconds}");
  3438. Stopwatch stopwatch32 = new Stopwatch();
  3439. stopwatch32.Start();
  3440. #region 登记的项目、结果、小结
  3441. var oldRegisterAsbitemList = await oldDb2.Ado.GetDataTableAsync($"select * from register_asbitem where patient_register_id='{row["patient_register_id"].ToString()}'");
  3442. if (oldRegisterAsbitemList.Rows.Count > 0)
  3443. {
  3444. foreach (DataRow rowAsbitem in oldRegisterAsbitemList.Rows)
  3445. {
  3446. Stopwatch stopwatch34 = new Stopwatch();
  3447. stopwatch34.Start();
  3448. #region 转换审核医生ID
  3449. Guid? auditorUserId = null;
  3450. if (!string.IsNullOrWhiteSpace(rowAsbitem["audit_doctor"].ToString()))
  3451. {
  3452. var userEnt = userList.Where(m => m.Name == rowAsbitem["audit_doctor"].ToString().Trim()).FirstOrDefault();
  3453. if (userEnt != null)
  3454. {
  3455. auditorUserId = userEnt.Id;
  3456. }
  3457. }
  3458. #endregion
  3459. #region 转换检查医生ID
  3460. string checkDoctorId = null;
  3461. if (!string.IsNullOrWhiteSpace(rowAsbitem["check_doctor"].ToString()))
  3462. {
  3463. var userEnt = userList.Where(m => m.Name == rowAsbitem["check_doctor"].ToString().Trim()).FirstOrDefault();
  3464. if (userEnt != null)
  3465. {
  3466. checkDoctorId = userEnt.Id.ToString();
  3467. }
  3468. else
  3469. {
  3470. checkDoctorId = rowAsbitem["check_doctor"].ToString().Trim();
  3471. }
  3472. }
  3473. #endregion
  3474. #region 转换组合项目ID
  3475. Guid newAsbitemId = Guid.Parse(fieldComparisonTempList.Where(m => m.TableName == "asbitem" && m.OldKeyValue == rowAsbitem["asbitem_id"].ToString()).FirstOrDefault().NewKeyValue);
  3476. #endregion
  3477. stopwatch34.Stop();
  3478. _logger.LogInformation($"{row["patient_register_id"]}_第34片段耗时:{stopwatch34.ElapsedMilliseconds}");
  3479. #region 插入register_check
  3480. Guid registerCheckId = GuidGenerator.Create();
  3481. var dataRegisterCheck = new RegisterCheck(registerCheckId)
  3482. {
  3483. AuditorUserId = auditorUserId,
  3484. AuditTime = string.IsNullOrEmpty(rowAsbitem["audit_date"].ToString()) ? null : Convert.ToDateTime(rowAsbitem["audit_date"].ToString()),
  3485. CheckDate = string.IsNullOrEmpty(rowAsbitem["check_date"].ToString()) ? null : Convert.ToDateTime(rowAsbitem["check_date"].ToString()),
  3486. CheckDoctorId = checkDoctorId,
  3487. CheckRequestNo = "",
  3488. CheckRequestPrintTimes = (short)1,
  3489. CompleteFlag = Convert.ToChar(rowAsbitem["complete_flag"].ToString()),
  3490. CriticalRangeValue = null,
  3491. //CriticalValueCreateDate = null,
  3492. IsCriticalValue = null,
  3493. CriticalValueContent = null,
  3494. //CriticalValueProcessDate = null,
  3495. //CriticalValueProcessDoctor = null,
  3496. //CriticalValueProcessFlag = null,
  3497. IsAudit = string.IsNullOrEmpty(rowAsbitem["audit_flag"].ToString()) ? 'N' : Convert.ToChar(rowAsbitem["audit_flag"].ToString()),
  3498. IsLock = string.IsNullOrEmpty(rowAsbitem["lock_flag"].ToString()) ? 'N' : Convert.ToChar(rowAsbitem["lock_flag"].ToString()),
  3499. PatientRegisterId = patientRegisterId,
  3500. ThirdInfo = rowAsbitem["third_info"].ToString()
  3501. };
  3502. var registerCheckRepository = scope.ServiceProvider.GetRequiredService<IRepository<RegisterCheck, Guid>>();
  3503. await registerCheckRepository.InsertAsync(dataRegisterCheck, true);
  3504. #endregion
  3505. #region 插入register_check_asbitem
  3506. Guid registerCheckAsbitemId = GuidGenerator.Create();
  3507. var dataRegisterAsbitem = new RegisterCheckAsbitem(registerCheckAsbitemId)
  3508. {
  3509. Amount = 1,
  3510. IsCharge = Convert.ToChar(rowAsbitem["charge_flag"].ToString()),
  3511. AsbitemId = newAsbitemId,
  3512. ChargePrice = Convert.ToDecimal(rowAsbitem["price"].ToString()),
  3513. GroupPackageId = null,
  3514. LisRequestId = null,
  3515. PatientRegisterId = patientRegisterId,
  3516. PayTypeFlag = Convert.ToChar(rowAsbitem["payment_mode"].ToString()),
  3517. RegisterCheckId = registerCheckId,
  3518. StandardPrice = Convert.ToDecimal(rowAsbitem["standard_price"].ToString())
  3519. };
  3520. var registerCheckAsbitemRepository = scope.ServiceProvider.GetRequiredService<IRepository<RegisterCheckAsbitem, Guid>>();
  3521. await registerCheckAsbitemRepository.InsertAsync(dataRegisterAsbitem);
  3522. #endregion
  3523. #region 插入医生小结
  3524. var registerCheckSummaryRepository = scope.ServiceProvider.GetRequiredService<IRepository<RegisterCheckSummary, Guid>>();
  3525. var oldSummary = rowAsbitem["summary"].ToString();
  3526. if (!string.IsNullOrWhiteSpace(oldSummary))
  3527. {
  3528. var dataRegisterCheckSummary = new RegisterCheckSummary
  3529. {
  3530. RegisterCheckId = registerCheckId,
  3531. DisplayOrder = 1,
  3532. Summary = oldSummary,
  3533. SummaryFlag = '0'
  3534. };
  3535. await registerCheckSummaryRepository.InsertAsync(dataRegisterCheckSummary);
  3536. }
  3537. #endregion
  3538. #region 插入明细项目
  3539. var registerCheckItemRepository = scope.ServiceProvider.GetRequiredService<IRepository<RegisterCheckItem>>();
  3540. var oldRegisterCheckItemList = await oldDb2.Ado.GetDataTableAsync($"select * from register_item where patient_register_id='{row["patient_register_id"].ToString()}' and asbitem_id='{rowAsbitem["asbitem_id"].ToString()}'");
  3541. if (oldRegisterCheckItemList.Rows.Count > 0)
  3542. {
  3543. foreach (DataRow rowRegisterCheckItem in oldRegisterCheckItemList.Rows)
  3544. {
  3545. #region 转换项目ID 老转新
  3546. Guid newItemId = Guid.Parse(fieldComparisonTempList.Where(m => m.TableName == "item" && m.OldKeyValue == rowRegisterCheckItem["item_id"].ToString()).FirstOrDefault().NewKeyValue);
  3547. #endregion
  3548. var dataRegisterCheckItem = new RegisterCheckItem
  3549. {
  3550. CheckDate = string.IsNullOrEmpty(rowRegisterCheckItem["check_date"].ToString()) ? null : Convert.ToDateTime(rowRegisterCheckItem["check_date"].ToString()),
  3551. CriticalValue = null,
  3552. CheckDoctorName = rowRegisterCheckItem["check_doctor"].ToString().Trim(),
  3553. CriticalRangeValue = null,
  3554. ItemId = newItemId,
  3555. ReferenceRangeValue = rowRegisterCheckItem["reference_range_value"].ToString(),
  3556. RegisterCheckId = registerCheckId,
  3557. Result = rowRegisterCheckItem["result"].ToString(),
  3558. ResultStatusId = _registerCheckItemManager.GetResultStatusId(rowRegisterCheckItem["result"].ToString(), rowRegisterCheckItem["reference_range_value"].ToString()),
  3559. Unit = rowRegisterCheckItem["Unit"].ToString()
  3560. };
  3561. await registerCheckItemRepository.InsertAsync(dataRegisterCheckItem);
  3562. }
  3563. }
  3564. #endregion
  3565. }
  3566. }
  3567. #endregion
  3568. stopwatch32.Stop();
  3569. _logger.LogInformation($"{row["patient_register_id"]}_第32片段耗时:{stopwatch32.ElapsedMilliseconds}");
  3570. #region 总检建议、综述、总检诊断
  3571. var sumSummaryHeaderRepository = scope.ServiceProvider.GetRequiredService<IRepository<SumSummaryHeader, Guid>>();
  3572. var sumSummaryContentRepository = scope.ServiceProvider.GetRequiredService<IRepository<SumSummaryContent, Guid>>();
  3573. var sumSuggestionHeaderRepository = scope.ServiceProvider.GetRequiredService<IRepository<SumSuggestionHeader, Guid>>();
  3574. var sumSuggestionContentRepository = scope.ServiceProvider.GetRequiredService<IRepository<SumSuggestionContent, Guid>>();
  3575. var sumDiagnosisRepository = scope.ServiceProvider.GetRequiredService<IRepository<SumDiagnosis>>();
  3576. var oldSum = await oldDb2.Ado.GetDataTableAsync($"select summary,suggestion,barcode_no from patient_register where patient_register_id='{oldPatientRegisterId}' ");
  3577. if (oldSum.Rows.Count == 1)
  3578. {
  3579. string oldSummary = oldSum.Rows[0][0].ToString();
  3580. string oldSuggestion = oldSum.Rows[0][1].ToString();
  3581. if (!string.IsNullOrWhiteSpace(oldSummary))
  3582. {
  3583. Guid sumSummaryHeaderId = GuidGenerator.Create();
  3584. var dataSumSummaryHeader = new SumSummaryHeader(sumSummaryHeaderId)
  3585. {
  3586. DisplayOrder = 1,
  3587. SummaryFlag = '0',
  3588. PatientRegisterId = patientRegisterId,
  3589. SummaryTitle = "异常结果如下"
  3590. };
  3591. await sumSummaryHeaderRepository.InsertAsync(dataSumSummaryHeader);
  3592. Guid sumSummaryContentId = GuidGenerator.Create();
  3593. var dataSumSummaryContent = new SumSummaryContent(sumSummaryContentId)
  3594. {
  3595. DisplayOrder = 1,
  3596. SumSummaryHeaderId = sumSummaryHeaderId,
  3597. SummaryContent = oldSummary
  3598. };
  3599. await sumSummaryContentRepository.InsertAsync(dataSumSummaryContent);
  3600. }
  3601. if (!string.IsNullOrWhiteSpace(oldSuggestion))
  3602. {
  3603. Guid sumSuggestionHeaderId = GuidGenerator.Create();
  3604. var dataSumSuggestionHeader = new SumSuggestionHeader(sumSuggestionHeaderId)
  3605. {
  3606. DisplayOrder = 1,
  3607. SuggestionFlag = '0',
  3608. PatientRegisterId = patientRegisterId,
  3609. SuggestionTitle = "健康建议如下"
  3610. };
  3611. await sumSuggestionHeaderRepository.InsertAsync(dataSumSuggestionHeader);
  3612. Guid sumSuggestionContentId = GuidGenerator.Create();
  3613. var dataSumSuggestionContent = new SumSuggestionContent(sumSuggestionContentId)
  3614. {
  3615. DisplayOrder = 1,
  3616. SuggestionContent = oldSuggestion,
  3617. SuggestionType = SuggestionTypeFlag.HealthGuidance,
  3618. SumSuggestionHeaderId = sumSuggestionHeaderId
  3619. };
  3620. await sumSuggestionContentRepository.InsertAsync(dataSumSuggestionContent);
  3621. #region 总症诊断
  3622. var oldSummaryDiagnosis = await oldDb2.Ado.GetDataTableAsync($"select diagnosis_id from summary_diagnosis where patient_register_id='{oldPatientRegisterId}' order by display_order asc ");
  3623. if (oldSummaryDiagnosis.Rows.Count > 0)
  3624. {
  3625. List<SumDiagnosis> sumDiagnosisInsert = new List<SumDiagnosis>();
  3626. foreach (DataRow summaryDiagnosis in oldSummaryDiagnosis.Rows)
  3627. {
  3628. var diagnosisEnt = fieldComparisonTempList.Where(m => m.TableName == "diagnosis" && m.OldKeyValue == summaryDiagnosis["diagnosis_id"].ToString()).FirstOrDefault();
  3629. if (diagnosisEnt != null)
  3630. {
  3631. var dataSumDiagnosis = new SumDiagnosis
  3632. {
  3633. DisplayOrder = oldSummaryDiagnosis.Rows.IndexOf(summaryDiagnosis) + 1,
  3634. PatientRegisterId = patientRegisterId,
  3635. DiagnosisId = Guid.Parse(diagnosisEnt.NewKeyValue),
  3636. SumSuggestionHeaderId = sumSuggestionHeaderId
  3637. };
  3638. sumDiagnosisInsert.Add(dataSumDiagnosis);
  3639. }
  3640. }
  3641. if (sumDiagnosisInsert.Any())
  3642. await sumDiagnosisRepository.InsertManyAsync(sumDiagnosisInsert);
  3643. }
  3644. #endregion
  3645. }
  3646. }
  3647. #endregion
  3648. var fieldComparison = new FieldComparison
  3649. {
  3650. FieldName = "id",
  3651. NewKeyValue = patientRegisterId.ToString(),
  3652. OldKeyValue = row["patient_register_id"].ToString(),
  3653. TableName = "patient_register"
  3654. };
  3655. var fieldComparisonRepository = scope.ServiceProvider.GetRequiredService<IRepository<FieldComparison, Guid>>();
  3656. await fieldComparisonRepository.InsertAsync(fieldComparison);
  3657. await oldDb2.Ado.ExecuteCommandAsync($"update tb_export_key set keyvalue='{row["patient_register_id"].ToString()}',addtime=getdate(),handlecount+=1 where tablename='patient_register' ");
  3658. await uow.CompleteAsync();
  3659. #region 修改创建者日期跟id
  3660. Guid registerDoctorId = Guid.Parse(_configuration.GetValue<string>("AdminId"));
  3661. var registerDoctorEnt = userList.Where(m => m.Name == row["register_doctor"].ToString().Trim()).FirstOrDefault();
  3662. if (registerDoctorEnt != null)
  3663. {
  3664. registerDoctorId = registerDoctorEnt.Id;
  3665. }
  3666. string sql_update = $"update patient_register set creator_id='{registerDoctorId}',creation_time='{Convert.ToDateTime(row["register_date"]).ToString("yyyy-MM-dd HH:mm:ss")}'";
  3667. sql_update += $" where id='{patientRegisterId}' ";
  3668. await newDb2.Ado.ExecuteCommandAsync(sql_update);
  3669. #endregion
  3670. }
  3671. }
  3672. ;
  3673. }
  3674. ;
  3675. }
  3676. stopwatch3.Stop();
  3677. _logger.LogInformation($"{row["patient_register_id"]}_处理单个人总耗时:{stopwatch3.ElapsedMilliseconds}");
  3678. }
  3679. catch (Exception ex)
  3680. {
  3681. hangPatientRegisterErrorCount++;
  3682. _logger.LogInformation($"数据处理失败,人员id为:{row["patient_register_id"]}");
  3683. #region 添加到tb_error_log表
  3684. //await oldDb2.Ado.ExecuteCommandAsync($"insert into tb_error_log(old_patient_register_id,error_message,addtime) values ('{row["patient_register_id"]}','{ex.StackTrace}',getdate()) ");
  3685. #endregion
  3686. }
  3687. }
  3688. /// <summary>
  3689. /// 反向导入人员等业务信息
  3690. /// </summary>
  3691. /// <param name="handCount">每次处理的人员数量</param>
  3692. /// <param name="isGo">是否继续处理</param>
  3693. /// <returns></returns>
  3694. [RemoteService(false)]
  3695. [HttpPost("api/app/CCTJExportData/TransferPatientRegisterWithDetailReverseData")]
  3696. public async Task TransferPatientRegisterWithDetailReverseData(int handCount, bool isGo = false)
  3697. {
  3698. //当前导入的ID
  3699. string nextKeyValue = oldDb.Ado.GetString("select keyvalue from tb_export_key where tablename='patient_register_reverse' ");
  3700. var oldPatientRegisterList = await oldDb.Ado.GetDataTableAsync($"select top {handCount} * from patient_register where patient_register_id<'{nextKeyValue}' order by patient_register_id desc");
  3701. if (oldPatientRegisterList.Rows.Count > 0)
  3702. {
  3703. var userList = await _identityUserRepository.GetListAsync();
  3704. List<CustomerOrgRegister> customerOrgRegisterList = await _customerOrgRegisterRepository.GetListAsync();
  3705. foreach (DataRow row in oldPatientRegisterList.Rows)
  3706. {
  3707. hangPatientRegisterReverseCount++;
  3708. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  3709. {
  3710. string oldPatientRegisterId = row["patient_register_id"].ToString();
  3711. //检查是否已经导入
  3712. var isDZPatientRegisterTemp = (await _fieldComparisonRepository.GetListAsync(f => f.TableName == "patient_register"
  3713. && f.OldKeyValue == oldPatientRegisterId));
  3714. if (isDZPatientRegisterTemp.Count > 0)
  3715. {
  3716. continue;
  3717. }
  3718. //档案ID
  3719. Guid patientId = Guid.Empty;
  3720. #region 处理档案,未找到档案就生成
  3721. var patientEnt = await _patientRepository.FirstOrDefaultAsync(m => m.PatientNo == row["patient_id"].ToString());
  3722. if (patientEnt == null)
  3723. {
  3724. string nationId = null;
  3725. if (!string.IsNullOrWhiteSpace(row["nation_id"].ToString()))
  3726. {
  3727. var nationEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "nation" && m.OldKeyValue == row["nation_id"].ToString()).FirstOrDefault();
  3728. if (nationEnt == null)
  3729. {
  3730. nationId = row["nation_id"].ToString();
  3731. }
  3732. else
  3733. {
  3734. nationId = nationEnt.NewKeyValue;
  3735. }
  3736. }
  3737. Guid autoPatientId = GuidGenerator.Create(); //档案ID
  3738. var dataPatient = new Patient(autoPatientId)
  3739. {
  3740. Address = row["address"].ToString(),
  3741. BirthDate = string.IsNullOrEmpty(row["birth_date"].ToString()) ? null : Convert.ToDateTime(row["birth_date"].ToString()),
  3742. BirthPlaceId = null,
  3743. DisplayName = row["name"].ToString(),
  3744. Email = row["email"].ToString(),
  3745. IdNo = row["id_card_no"].ToString(),
  3746. MaritalStatusId = row["marital_status_id"].ToString() == "2" ? '4' : Convert.ToChar(row["marital_status_id"].ToString()),
  3747. MedicalCenterId = defaultMedicalCenterId,
  3748. MobileTelephone = row["mobile_telephone"].ToString(),
  3749. NationId = nationId,
  3750. PatientNo = row["patient_id"].ToString(),
  3751. PatientPassword = row["patient_password"].ToString(),
  3752. PostalCode = row["postalcode"].ToString(),
  3753. SexId = ConvertSex(row["sex_id"].ToString()),
  3754. SimpleCode = LanguageConverter.GetPYSimpleCode(row["name"].ToString()),
  3755. Telephone = row["telephone"].ToString()
  3756. };
  3757. await _patientRepository.InsertAsync(dataPatient, true);
  3758. patientId = autoPatientId;
  3759. }
  3760. else
  3761. {
  3762. patientId = patientEnt.Id;
  3763. }
  3764. #endregion
  3765. Guid patientRegisterId = GuidGenerator.Create(); //生成登记ID
  3766. #region 转换审核医生ID
  3767. Guid? AuditDoctorId = null;
  3768. if (!string.IsNullOrWhiteSpace(row["audit_doctor"].ToString()))
  3769. {
  3770. var userEnt = userList.Where(m => m.Name == row["audit_doctor"].ToString().Trim()).FirstOrDefault();
  3771. if (userEnt != null)
  3772. {
  3773. AuditDoctorId = userEnt.Id;
  3774. }
  3775. }
  3776. #endregion
  3777. #region 转换单位分组ID
  3778. Guid? customerOrgGroupId = null;
  3779. if (!string.IsNullOrWhiteSpace(row["org_group_id"].ToString()))
  3780. {
  3781. var customerOrgGroupEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "customer_org_group" && m.OldKeyValue == row["org_group_id"].ToString()).FirstOrDefault();
  3782. if (customerOrgGroupEnt != null)
  3783. {
  3784. customerOrgGroupId = Guid.Parse(customerOrgGroupEnt.NewKeyValue);
  3785. }
  3786. }
  3787. #endregion
  3788. #region 转换单位ID 部门
  3789. Guid customerOrgId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "customer_org" && m.OldKeyValue == row["org_id"].ToString()).FirstOrDefault().NewKeyValue);
  3790. #endregion
  3791. #region 转换单位体检次数ID 没有增加默认值
  3792. Guid customerOrgRegisterId = GuidFlag.PersonCustomerOrgRegisterId;
  3793. if (row["org_id"].ToString() != "00000")
  3794. {
  3795. Guid topCustomerOrgId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "customer_org" && m.OldKeyValue == row["org_id"].ToString().Substring(0, 5)).FirstOrDefault().NewKeyValue);
  3796. var customerOrgRegisterEnt = customerOrgRegisterList.Where(m => m.CustomerOrgId == topCustomerOrgId
  3797. && m.MedicalTimes == (short)Convert.ToInt32(row["org_medical_times"].ToString())).FirstOrDefault();
  3798. if (customerOrgRegisterEnt != null)
  3799. {
  3800. customerOrgRegisterId = customerOrgRegisterEnt.Id;
  3801. }
  3802. }
  3803. #endregion
  3804. #region 转换体检结论ID
  3805. Guid? medicalConclusionId = null;
  3806. if (!string.IsNullOrWhiteSpace(row["medical_conclusion_id"].ToString()))
  3807. {
  3808. var medicalConclusionEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "medical_conclusion"
  3809. && m.OldKeyValue == row["medical_conclusion_id"].ToString()).FirstOrDefault();
  3810. if (medicalConclusionEnt != null)
  3811. {
  3812. medicalConclusionId = Guid.Parse(medicalConclusionEnt.NewKeyValue);
  3813. }
  3814. }
  3815. #endregion
  3816. #region 转换套餐ID
  3817. Guid? medicalPackageId = null;
  3818. if (!string.IsNullOrWhiteSpace(row["medical_package_id"].ToString()))
  3819. {
  3820. var medicalPackageEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "medical_package" && m.OldKeyValue == row["medical_package_id"].ToString()).FirstOrDefault();
  3821. if (medicalPackageEnt != null)
  3822. {
  3823. medicalPackageId = Guid.Parse(medicalPackageEnt.NewKeyValue);
  3824. }
  3825. }
  3826. #endregion
  3827. #region 转换体检类别ID
  3828. Guid? medicalTypeId = null;
  3829. if (!string.IsNullOrWhiteSpace(row["medical_type_id"].ToString()))
  3830. {
  3831. var medicalTypeEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "medical_type" && m.OldKeyValue == row["medical_type_id"].ToString()).FirstOrDefault();
  3832. if (medicalTypeEnt != null)
  3833. {
  3834. medicalTypeId = Guid.Parse(medicalTypeEnt.NewKeyValue);
  3835. }
  3836. }
  3837. #endregion
  3838. #region 转换人员类别ID
  3839. Guid? personnelTypeId = null;
  3840. if (!string.IsNullOrWhiteSpace(row["personnel_type_id"].ToString()))
  3841. {
  3842. var personnelTypeEnt = (await _fieldComparisonRepository.GetQueryableAsync()).Where(m => m.TableName == "personnel_type" && m.OldKeyValue == row["personnel_type_id"].ToString()).FirstOrDefault();
  3843. if (personnelTypeEnt != null)
  3844. {
  3845. personnelTypeId = Guid.Parse(personnelTypeEnt.NewKeyValue);
  3846. }
  3847. }
  3848. #endregion
  3849. #region 转换总检医生ID
  3850. Guid? summaryDoctorId = null;
  3851. if (!string.IsNullOrWhiteSpace(row["summary_doctor"].ToString()))
  3852. {
  3853. var userEnt = userList.Where(m => m.Name == row["summary_doctor"].ToString().Trim()).FirstOrDefault();
  3854. if (userEnt != null)
  3855. {
  3856. summaryDoctorId = userEnt.Id;
  3857. }
  3858. }
  3859. #endregion
  3860. #region 上传图片,获取地址
  3861. string photo = "";
  3862. if (!string.IsNullOrEmpty(row["photograph"].ToString()))
  3863. {
  3864. photo = UpLoadImg(patientRegisterId, Convert.ToDateTime(row["register_date"].ToString()), (byte[])row["photograph"]);
  3865. }
  3866. #endregion
  3867. var data = new PatientRegister(patientRegisterId)
  3868. {
  3869. BirthDate = string.IsNullOrEmpty(row["birth_date"].ToString()) ? null : Convert.ToDateTime(row["birth_date"].ToString()),
  3870. MaritalStatusId = row["marital_status_id"].ToString() == "2" ? '4' : Convert.ToChar(row["marital_status_id"].ToString()),
  3871. MedicalCenterId = defaultMedicalCenterId,
  3872. SexId = ConvertSex(row["sex_id"].ToString()),
  3873. Age = string.IsNullOrWhiteSpace(row["age"].ToString()) ? null : Convert.ToInt16(row["age"].ToString()),
  3874. AuditDate = string.IsNullOrWhiteSpace(row["audit_date"].ToString()) ? null : Convert.ToDateTime(row["audit_date"].ToString()),
  3875. AuditDoctorId = AuditDoctorId,
  3876. CompleteFlag = Convert.ToChar(row["complete_flag"].ToString()),
  3877. CustomerOrgGroupId = customerOrgGroupId,
  3878. CustomerOrgId = customerOrgId,
  3879. CustomerOrgRegisterId = customerOrgRegisterId,
  3880. GuidePrintTimes = string.IsNullOrWhiteSpace(row["instruct_print_times"].ToString()) ? (short)0 : Convert.ToInt16(row["instruct_print_times"].ToString()),
  3881. InterposeMeasure = null,
  3882. IsAudit = string.IsNullOrWhiteSpace(row["audit_flag"].ToString()) ? 'N' : Convert.ToChar(row["audit_flag"].ToString()),
  3883. IsLock = string.IsNullOrWhiteSpace(row["lock_flag"].ToString()) ? 'N' : Convert.ToChar(row["lock_flag"].ToString()),
  3884. IsMedicalStart = string.IsNullOrWhiteSpace(row["medical_start_flag"].ToString()) ? 'N' : Convert.ToChar(row["medical_start_flag"].ToString()),
  3885. IsNameHide = string.IsNullOrWhiteSpace(row["name_encrypt_flag"].ToString()) ? 'N' : Convert.ToChar(row["name_encrypt_flag"].ToString()),
  3886. IsPhoneFollow = 'N',
  3887. IsRecoverGuide = string.IsNullOrWhiteSpace(row["recover_form_flag"].ToString()) ? 'N' : Convert.ToChar(row["recover_form_flag"].ToString()),
  3888. IsUpload = string.IsNullOrWhiteSpace(row["upload_flag"].ToString()) ? 'N' : Convert.ToChar(row["upload_flag"].ToString()),
  3889. IsVip = string.IsNullOrWhiteSpace(row["vip_flag"].ToString()) ? 'N' : Convert.ToChar(row["vip_flag"].ToString()),
  3890. JobCardNo = row["job_card_no"].ToString(),
  3891. JobPost = row["job_post"].ToString(),
  3892. JobTitle = row["job_title"].ToString(),
  3893. MedicalCardNo = row["medical_card_no"].ToString(),
  3894. MedicalConclusionId = medicalConclusionId,
  3895. MedicalPackageId = medicalPackageId,
  3896. MedicalStartDate = string.IsNullOrEmpty(row["medical_start_date"].ToString()) ? null : Convert.ToDateTime(row["medical_start_date"].ToString()),
  3897. MedicalTimes = Convert.ToInt16(row["medical_times"].ToString()),
  3898. MedicalTypeId = medicalTypeId,
  3899. PatientId = patientId,
  3900. PatientName = row["name"].ToString(),
  3901. PatientRegisterNo = row["barcode_no"].ToString(),
  3902. PersonnelTypeId = personnelTypeId,
  3903. Photo = photo,
  3904. Remark = row["remark"].ToString(),
  3905. ReportPrintTimes = Convert.ToInt16(row["report_print_times"].ToString()),
  3906. Salesman = row["salesman"].ToString(),
  3907. SexHormoneTermId = null,
  3908. SummaryDate = string.IsNullOrEmpty(row["summary_date"].ToString()) ? null : Convert.ToDateTime(row["summary_date"].ToString()),
  3909. SummaryDoctorId = summaryDoctorId,
  3910. ThirdInfo = row["third_info"].ToString(),
  3911. };
  3912. await _patientRegisterRepository.InsertAsync(data, true);
  3913. #region 登记的项目、结果、小结
  3914. var oldRegisterAsbitemList = await oldDb.Ado.GetDataTableAsync($"select * from register_asbitem where patient_register_id='{row["patient_register_id"].ToString()}'");
  3915. if (oldRegisterAsbitemList.Rows.Count > 0)
  3916. {
  3917. foreach (DataRow rowAsbitem in oldRegisterAsbitemList.Rows)
  3918. {
  3919. #region 转换审核医生ID
  3920. Guid? auditorUserId = null;
  3921. if (!string.IsNullOrWhiteSpace(rowAsbitem["audit_doctor"].ToString()))
  3922. {
  3923. var userEnt = userList.Where(m => m.Name == rowAsbitem["audit_doctor"].ToString().Trim()).FirstOrDefault();
  3924. if (userEnt != null)
  3925. {
  3926. auditorUserId = userEnt.Id;
  3927. }
  3928. }
  3929. #endregion
  3930. #region 转换检查医生ID
  3931. string checkDoctorId = null;
  3932. if (!string.IsNullOrWhiteSpace(rowAsbitem["check_doctor"].ToString()))
  3933. {
  3934. var userEnt = userList.Where(m => m.Name == rowAsbitem["check_doctor"].ToString().Trim()).FirstOrDefault();
  3935. if (userEnt != null)
  3936. {
  3937. checkDoctorId = userEnt.Id.ToString();
  3938. }
  3939. else
  3940. {
  3941. checkDoctorId = rowAsbitem["check_doctor"].ToString().Trim();
  3942. }
  3943. }
  3944. #endregion
  3945. #region 转换组合项目ID
  3946. Guid newAsbitemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync())
  3947. .Where(m => m.TableName == "asbitem" && m.OldKeyValue == rowAsbitem["asbitem_id"].ToString()).FirstOrDefault().NewKeyValue);
  3948. #endregion
  3949. #region 插入register_check
  3950. Guid registerCheckId = GuidGenerator.Create();
  3951. var dataRegisterCheck = new RegisterCheck(registerCheckId)
  3952. {
  3953. AuditorUserId = auditorUserId,
  3954. AuditTime = string.IsNullOrEmpty(rowAsbitem["audit_date"].ToString()) ? null : Convert.ToDateTime(rowAsbitem["audit_date"].ToString()),
  3955. CheckDate = string.IsNullOrEmpty(rowAsbitem["check_date"].ToString()) ? null : Convert.ToDateTime(rowAsbitem["check_date"].ToString()),
  3956. CheckDoctorId = checkDoctorId,
  3957. CheckRequestNo = "",
  3958. CheckRequestPrintTimes = (short)1,
  3959. CompleteFlag = Convert.ToChar(rowAsbitem["complete_flag"].ToString()),
  3960. CriticalRangeValue = null,
  3961. //CriticalValueCreateDate = null,
  3962. IsCriticalValue = null,
  3963. CriticalValueContent = null,
  3964. //CriticalValueProcessDate = null,
  3965. //CriticalValueProcessDoctor = null,
  3966. //CriticalValueProcessFlag = null,
  3967. IsAudit = string.IsNullOrEmpty(rowAsbitem["audit_flag"].ToString()) ? 'N' : Convert.ToChar(rowAsbitem["audit_flag"].ToString()),
  3968. IsLock = string.IsNullOrEmpty(rowAsbitem["lock_flag"].ToString()) ? 'N' : Convert.ToChar(rowAsbitem["lock_flag"].ToString()),
  3969. PatientRegisterId = patientRegisterId,
  3970. ThirdInfo = rowAsbitem["third_info"].ToString()
  3971. };
  3972. await _registerCheckRepository.InsertAsync(dataRegisterCheck, true);
  3973. #endregion
  3974. #region 插入register_check_asbitem
  3975. Guid registerCheckAsbitemId = GuidGenerator.Create();
  3976. var dataRegisterAsbitem = new RegisterCheckAsbitem(registerCheckAsbitemId)
  3977. {
  3978. Amount = 1,
  3979. IsCharge = Convert.ToChar(rowAsbitem["charge_flag"].ToString()),
  3980. AsbitemId = newAsbitemId,
  3981. ChargePrice = Convert.ToDecimal(rowAsbitem["price"].ToString()),
  3982. GroupPackageId = null,
  3983. LisRequestId = null,
  3984. PatientRegisterId = patientRegisterId,
  3985. PayTypeFlag = Convert.ToChar(rowAsbitem["payment_mode"].ToString()),
  3986. RegisterCheckId = registerCheckId,
  3987. StandardPrice = Convert.ToDecimal(rowAsbitem["standard_price"].ToString())
  3988. };
  3989. await _registerCheckAsbitemRepository.InsertAsync(dataRegisterAsbitem);
  3990. #endregion
  3991. #region 插入医生小结
  3992. var oldSummary = rowAsbitem["summary"].ToString();
  3993. if (!string.IsNullOrWhiteSpace(oldSummary))
  3994. {
  3995. var dataRegisterCheckSummary = new RegisterCheckSummary
  3996. {
  3997. RegisterCheckId = registerCheckId,
  3998. DisplayOrder = 1,
  3999. Summary = oldSummary,
  4000. SummaryFlag = '0'
  4001. };
  4002. await _registerCheckSummaryRepository.InsertAsync(dataRegisterCheckSummary);
  4003. }
  4004. #endregion
  4005. #region 插入明细项目
  4006. var oldRegisterCheckItemList = await oldDb.Ado.GetDataTableAsync($"select * from register_item where patient_register_id='{row["patient_register_id"].ToString()}' and asbitem_id='{rowAsbitem["asbitem_id"].ToString()}'");
  4007. if (oldRegisterCheckItemList.Rows.Count > 0)
  4008. {
  4009. foreach (DataRow rowRegisterCheckItem in oldRegisterCheckItemList.Rows)
  4010. {
  4011. #region 转换项目ID 老转新
  4012. Guid newItemId = Guid.Parse((await _fieldComparisonRepository.GetQueryableAsync())
  4013. .Where(m => m.TableName == "item" && m.OldKeyValue == rowRegisterCheckItem["item_id"].ToString()).FirstOrDefault().NewKeyValue);
  4014. #endregion
  4015. var dataRegisterCheckItem = new RegisterCheckItem
  4016. {
  4017. CheckDate = string.IsNullOrEmpty(rowRegisterCheckItem["check_date"].ToString()) ? null : Convert.ToDateTime(rowRegisterCheckItem["check_date"].ToString()),
  4018. CriticalValue = null,
  4019. CheckDoctorName = rowRegisterCheckItem["check_doctor"].ToString().Trim(),
  4020. CriticalRangeValue = null,
  4021. ItemId = newItemId,
  4022. ReferenceRangeValue = rowRegisterCheckItem["reference_range_value"].ToString(),
  4023. RegisterCheckId = registerCheckId,
  4024. Result = rowRegisterCheckItem["result"].ToString(),
  4025. ResultStatusId = _registerCheckItemManager.GetResultStatusId(rowRegisterCheckItem["result"].ToString(), rowRegisterCheckItem["reference_range_value"].ToString()),
  4026. Unit = rowRegisterCheckItem["Unit"].ToString()
  4027. };
  4028. await _registerCheckItemRepository.InsertAsync(dataRegisterCheckItem);
  4029. }
  4030. }
  4031. #endregion
  4032. }
  4033. }
  4034. #endregion
  4035. #region 总检建议、综述、总检诊断
  4036. var oldSum = await oldDb.Ado.GetDataTableAsync($"select summary,suggestion,barcode_no from patient_register where patient_register_id='{oldPatientRegisterId}' ");
  4037. if (oldSum.Rows.Count == 1)
  4038. {
  4039. string oldSummary = oldSum.Rows[0][0].ToString();
  4040. string oldSuggestion = oldSum.Rows[0][1].ToString();
  4041. if (!string.IsNullOrWhiteSpace(oldSummary))
  4042. {
  4043. Guid sumSummaryHeaderId = GuidGenerator.Create();
  4044. var dataSumSummaryHeader = new SumSummaryHeader(sumSummaryHeaderId)
  4045. {
  4046. DisplayOrder = 1,
  4047. SummaryFlag = '0',
  4048. PatientRegisterId = patientRegisterId,
  4049. SummaryTitle = "异常结果如下"
  4050. };
  4051. await _sumSummaryHeaderRepository.InsertAsync(dataSumSummaryHeader);
  4052. Guid sumSummaryContentId = GuidGenerator.Create();
  4053. var dataSumSummaryContent = new SumSummaryContent(sumSummaryContentId)
  4054. {
  4055. DisplayOrder = 1,
  4056. SumSummaryHeaderId = sumSummaryHeaderId,
  4057. SummaryContent = oldSummary
  4058. };
  4059. await _sumSummaryContentRepository.InsertAsync(dataSumSummaryContent);
  4060. }
  4061. if (!string.IsNullOrWhiteSpace(oldSuggestion))
  4062. {
  4063. Guid sumSuggestionHeaderId = GuidGenerator.Create();
  4064. var dataSumSuggestionHeader = new SumSuggestionHeader(sumSuggestionHeaderId)
  4065. {
  4066. DisplayOrder = 1,
  4067. SuggestionFlag = '0',
  4068. PatientRegisterId = patientRegisterId,
  4069. SuggestionTitle = "健康建议如下"
  4070. };
  4071. await _sumSuggestionHeaderRepository.InsertAsync(dataSumSuggestionHeader);
  4072. Guid sumSuggestionContentId = GuidGenerator.Create();
  4073. var dataSumSuggestionContent = new SumSuggestionContent(sumSuggestionContentId)
  4074. {
  4075. DisplayOrder = 1,
  4076. SuggestionContent = oldSuggestion,
  4077. SuggestionType = SuggestionTypeFlag.HealthGuidance,
  4078. SumSuggestionHeaderId = sumSuggestionHeaderId
  4079. };
  4080. await _sumSuggestionContentRepository.InsertAsync(dataSumSuggestionContent);
  4081. #region 总症诊断
  4082. var oldSummaryDiagnosis = await oldDb.Ado.GetDataTableAsync($"select diagnosis_id from summary_diagnosis where patient_register_id='{oldPatientRegisterId}' order by display_order asc ");
  4083. if (oldSummaryDiagnosis.Rows.Count > 0)
  4084. {
  4085. List<SumDiagnosis> sumDiagnosisInsert = new List<SumDiagnosis>();
  4086. foreach (DataRow summaryDiagnosis in oldSummaryDiagnosis.Rows)
  4087. {
  4088. var diagnosisEnt = (await _fieldComparisonRepository.GetQueryableAsync())
  4089. .Where(m => m.TableName == "diagnosis" && m.OldKeyValue == summaryDiagnosis["diagnosis_id"].ToString()).FirstOrDefault();
  4090. if (diagnosisEnt != null)
  4091. {
  4092. var dataSumDiagnosis = new SumDiagnosis
  4093. {
  4094. DisplayOrder = oldSummaryDiagnosis.Rows.IndexOf(summaryDiagnosis) + 1,
  4095. PatientRegisterId = patientRegisterId,
  4096. DiagnosisId = Guid.Parse(diagnosisEnt.NewKeyValue),
  4097. SumSuggestionHeaderId = sumSuggestionHeaderId
  4098. };
  4099. sumDiagnosisInsert.Add(dataSumDiagnosis);
  4100. }
  4101. }
  4102. if (sumDiagnosisInsert.Any())
  4103. await _sumDiagnosisRepository.InsertManyAsync(sumDiagnosisInsert);
  4104. }
  4105. #endregion
  4106. }
  4107. }
  4108. #endregion
  4109. var fieldComparison = new FieldComparison
  4110. {
  4111. FieldName = "id",
  4112. NewKeyValue = patientRegisterId.ToString(),
  4113. OldKeyValue = row["patient_register_id"].ToString(),
  4114. TableName = "patient_register"
  4115. };
  4116. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  4117. await oldDb.Ado.ExecuteCommandAsync($"update tb_export_key set keyvalue='{row["patient_register_id"].ToString()}',addtime=getdate(),handlecount+=1 where tablename='patient_register_reverse' ");
  4118. await uow.CompleteAsync();
  4119. #region 修改创建者日期跟id
  4120. Guid registerDoctorId = Guid.Parse(_configuration.GetValue<string>("AdminId"));
  4121. var registerDoctorEnt = userList.Where(m => m.Name == row["register_doctor"].ToString().Trim()).FirstOrDefault();
  4122. if (registerDoctorEnt != null)
  4123. {
  4124. registerDoctorId = registerDoctorEnt.Id;
  4125. }
  4126. string sql_update = $"update patient_register set creator_id='{registerDoctorId}',creation_time='{Convert.ToDateTime(row["register_date"]).ToString("yyyy-MM-dd HH:mm:ss")}'";
  4127. sql_update += $" where id='{patientRegisterId}' ";
  4128. await newDb.Ado.ExecuteCommandAsync(sql_update);
  4129. #endregion
  4130. }
  4131. }
  4132. _logger.LogInformation($"人员数据反向处理{oldPatientRegisterList.Rows.Count}条,当前总数{hangPatientRegisterReverseCount}");
  4133. if (isGo)
  4134. await TransferPatientRegisterWithDetailReverseData(handCount, isGo);
  4135. }
  4136. else
  4137. {
  4138. _logger.LogInformation("人员数据反向已处理完");
  4139. }
  4140. }
  4141. #endregion
  4142. /// <summary>
  4143. /// 迁移子项目对照数据
  4144. /// </summary>
  4145. /// <returns></returns>
  4146. public async Task TranferItemColumnReferenceData()
  4147. {
  4148. var oldColumnReferenceList = await oldDb.Ado.GetDataTableAsync($"select code_value,interface_code_value from column_reference_detail where column_reference_id=001 and interface_code_value!=''");
  4149. foreach (DataRow item in oldColumnReferenceList.Rows)
  4150. {
  4151. var fieldComparisonEnt = await _fieldComparisonRepository.FirstOrDefaultAsync(f => f.TableName == "item" && f.OldKeyValue == item["code_value"].ToString().Trim());
  4152. if (fieldComparisonEnt != null)
  4153. {
  4154. var newItemId = Guid.Parse(fieldComparisonEnt.NewKeyValue);
  4155. string oldInterfaceCodeValue = item["interface_code_value"].ToString();
  4156. string[] oldInterfaceCodeValues = oldInterfaceCodeValue.Split(',');
  4157. var inputDto = new UpdateColumnReferenceInterfaceDto
  4158. {
  4159. ColumnReferenceId = Guid.Parse("3a1cfe80-ab99-509b-5447-8cf83c25fba6"),
  4160. AppCode = new UpdateColumnReferenceCodeDto { CodeValue = newItemId.ToString() },
  4161. InterfaceCodes = oldInterfaceCodeValues.Select(s => new UpdateColumnReferenceInterfaceCodeDto
  4162. {
  4163. CodeValue = s
  4164. }).ToList()
  4165. };
  4166. await _columnReferenceAppService.UpdateInterfaceCodeValuesAsync(inputDto);
  4167. }
  4168. }
  4169. }
  4170. /// <summary>
  4171. /// 迁移迪安项目对照数据
  4172. /// </summary>
  4173. /// <returns></returns>
  4174. public async Task TranferDAItemColumnReferenceData()
  4175. {
  4176. List<CommonTable> commonTables = new List<CommonTable>();
  4177. var oldColumnReferenceItemList = await oldDb.Ado.GetDataTableAsync($"select code_value,interface_code_value from column_reference_detail where column_reference_id=002 and interface_code_value!=''");
  4178. foreach (DataRow item in oldColumnReferenceItemList.Rows)
  4179. {
  4180. var fieldComparisonEnt = await _fieldComparisonRepository.FirstOrDefaultAsync(f => f.TableName == "item" && f.OldKeyValue == item["code_value"].ToString().Trim());
  4181. if (fieldComparisonEnt != null)
  4182. {
  4183. var newItemId = Guid.Parse(fieldComparisonEnt.NewKeyValue);
  4184. string oldInterfaceCodeValue = item["interface_code_value"].ToString();
  4185. string[] oldInterfaceCodeValues = oldInterfaceCodeValue.Split(',');
  4186. foreach (var codeValue in oldInterfaceCodeValues)
  4187. {
  4188. commonTables.Add(new CommonTable
  4189. {
  4190. CommonTableTypeId = "100",
  4191. DataCode = codeValue,
  4192. DisplayName = newItemId.ToString(),
  4193. DisplayOrder = oldColumnReferenceItemList.Rows.IndexOf(item) + 1,
  4194. SimpleCode = ""
  4195. });
  4196. }
  4197. }
  4198. }
  4199. await _commonTableRepository.InsertManyAsync(commonTables);
  4200. var oldColumnReferenceAsbitemList = await oldDb.Ado.GetDataTableAsync($"select code_value,interface_code_value from column_reference_detail where column_reference_id=003 and interface_code_value!=''");
  4201. foreach (DataRow item in oldColumnReferenceAsbitemList.Rows)
  4202. {
  4203. var fieldComparisonEnt = await _fieldComparisonRepository.FirstOrDefaultAsync(f => f.TableName == "asbitem" && f.OldKeyValue == item["code_value"].ToString().Trim());
  4204. if (fieldComparisonEnt != null)
  4205. {
  4206. var newItemId = Guid.Parse(fieldComparisonEnt.NewKeyValue);
  4207. string oldInterfaceCodeValue = item["interface_code_value"].ToString();
  4208. string[] oldInterfaceCodeValues = oldInterfaceCodeValue.Split(',');
  4209. foreach (var codeValue in oldInterfaceCodeValues)
  4210. {
  4211. commonTables.Add(new CommonTable
  4212. {
  4213. CommonTableTypeId = "200",
  4214. DataCode = codeValue,
  4215. DisplayName = newItemId.ToString(),
  4216. DisplayOrder = oldColumnReferenceAsbitemList.Rows.IndexOf(item) + 1,
  4217. SimpleCode = ""
  4218. });
  4219. }
  4220. }
  4221. }
  4222. await _commonTableRepository.InsertManyAsync(commonTables);
  4223. }
  4224. /// <summary>
  4225. /// 迁移lis项目对照
  4226. /// </summary>
  4227. /// <returns></returns>
  4228. public async Task TranferLisAsbitemColumnReferenceData()
  4229. {
  4230. var oldColumnReferenceList = await oldLisDb.Ado.GetDataTableAsync($"select code_value,interface_code_value from column_reference_detail where column_reference_id=001 and interface_code_value!=''");
  4231. foreach (DataRow item in oldColumnReferenceList.Rows)
  4232. {
  4233. string[] oldInterfaceCodeValues = item["interface_code_value"].ToString().Split(',');
  4234. var fieldComparisonList = await _fieldComparisonRepository.GetListAsync(f => f.TableName == "asbitem" && oldInterfaceCodeValues.Contains(f.OldKeyValue));
  4235. if (fieldComparisonList.Any())
  4236. {
  4237. string newAsbitemIds = string.Join(',', fieldComparisonList.Select(s => s.NewKeyValue));
  4238. int maxId = oldLisDb.Ado.GetInt("select max(column_reference_detail_id) from column_reference_detail");
  4239. await oldLisDb.Ado.ExecuteCommandAsync(@"insert into column_reference_detail(column_reference_detail_id,column_reference_id,code_value,interface_code_value)
  4240. VALUES (@column_reference_detail_id,@column_reference_id,@code_value,@interface_code_value);",
  4241. new List<SugarParameter>() {
  4242. new SugarParameter("column_reference_detail_id",(maxId+1).ToString().PadLeft(6,'0')),
  4243. new SugarParameter("column_reference_id","003"),
  4244. new SugarParameter("code_value",item["code_value"]),
  4245. new SugarParameter("interface_code_value",newAsbitemIds)
  4246. });
  4247. }
  4248. }
  4249. }
  4250. #region 会员卡相关
  4251. /// <summary>
  4252. /// 迁移会员卡相关数据 金额后面统计
  4253. /// </summary>
  4254. /// <returns></returns>
  4255. public async Task TranferCardData()
  4256. {
  4257. await TransferCardTypeDataAsync();
  4258. await TransferCardRegisterDataAsync();
  4259. }
  4260. /// <summary>
  4261. /// 迁移会员卡类别数据
  4262. /// </summary>
  4263. /// <returns></returns>
  4264. private async Task TransferCardTypeDataAsync()
  4265. {
  4266. var count = await _cardTypeRepository.GetCountAsync();
  4267. if (count == 0)
  4268. {
  4269. var oldCardTypeList = await oldDb.Ado.GetDataTableAsync("select card_type_id,card_type_name,card_mode_id,discount,expiry_day,remark from card_type order by display_order asc");
  4270. if (oldCardTypeList.Rows.Count > 0)
  4271. {
  4272. foreach (DataRow row in oldCardTypeList.Rows)
  4273. {
  4274. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  4275. {
  4276. Guid cardTypeId = GuidGenerator.Create();
  4277. var data = new CardType(cardTypeId)
  4278. {
  4279. DisplayName = row["card_type_name"].ToString(),
  4280. DisplayOrder = oldCardTypeList.Rows.IndexOf(row) + 1,
  4281. CardModeId = row["card_mode_id"].ToString() == "1" ? '0' : '1',
  4282. Discount = Convert.ToInt32(row["discount"].ToString()),
  4283. ExpiryDay = Convert.ToInt32(row["expiry_day"].ToString()),
  4284. Remark = row["remark"].ToString()
  4285. };
  4286. await _cardTypeRepository.InsertAsync(data);
  4287. var fieldComparison = new FieldComparison
  4288. {
  4289. TableName = "card_type",
  4290. FieldName = "id",
  4291. NewKeyValue = cardTypeId.ToString(),
  4292. OldKeyValue = row["card_type_id"].ToString()
  4293. };
  4294. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  4295. await uow.CompleteAsync();
  4296. }
  4297. }
  4298. }
  4299. _logger.LogInformation($"会员卡类别数据处理完毕,处理数量{oldCardTypeList.Rows.Count}");
  4300. }
  4301. else
  4302. {
  4303. _logger.LogInformation($"会员卡类别数据已存在,未处理");
  4304. }
  4305. }
  4306. /// <summary>
  4307. /// 迁移会员卡数据
  4308. /// </summary>
  4309. /// <returns></returns>
  4310. private async Task TransferCardRegisterDataAsync()
  4311. {
  4312. var count = await _cardRegisterRepository.GetCountAsync();
  4313. if (count == 0)
  4314. {
  4315. var oldCardRegisterList = await oldDb.Ado.GetDataTableAsync("SELECT [card_register_id],[card_type_id],[card_no],[discount],[expiry_date],[customer_name],[id_card_no]," +
  4316. "[telephone],[mobile_telephone],[card_flag],[remark],[sale_date],[amender],[amended_date] FROM [dbo].[card_register] where card_flag='Y' order by card_register_id asc");
  4317. if (oldCardRegisterList.Rows.Count > 0)
  4318. {
  4319. foreach (DataRow row in oldCardRegisterList.Rows)
  4320. {
  4321. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  4322. {
  4323. #region 统计金额
  4324. string sql_money = $"select sum(bill_money) as card_balance from card_bill where card_register_id='{row["card_register_id"]}'";
  4325. var cardBalance = oldDb.Ado.SqlQuerySingle<decimal>(sql_money);
  4326. #endregion
  4327. if (cardBalance <= 0)
  4328. continue;
  4329. Guid cardRegisterId = GuidGenerator.Create();
  4330. var cardTypeFieldComparison = await _fieldComparisonRepository.FirstOrDefaultAsync(f => f.TableName == "card_type" && f.OldKeyValue == row["card_type_id"].ToString().Trim());
  4331. var data = new CardRegister(cardRegisterId)
  4332. {
  4333. CardBalance = cardBalance,
  4334. CardNo = row["card_no"].ToString(),
  4335. IdNo = row["id_card_no"].ToString(),
  4336. CardPassword = "",
  4337. ExpiryDate = Convert.ToDateTime(row["expiry_date"].ToString()),
  4338. Remark = row["remark"].ToString(),
  4339. CardTypeId = Guid.Parse(cardTypeFieldComparison.NewKeyValue),
  4340. CustomerName = row["customer_name"].ToString(),
  4341. Discount = Convert.ToInt32(row["discount"].ToString()),
  4342. IsActive = Convert.ToChar(row["card_flag"].ToString()),
  4343. MedicalCenterId = defaultMedicalCenterId,
  4344. MobileTelephone = row["mobile_telephone"].ToString(),
  4345. Telephone = row["telephone"].ToString()
  4346. };
  4347. await _cardRegisterRepository.InsertAsync(data);
  4348. var fieldComparison = new FieldComparison
  4349. {
  4350. TableName = "card_register",
  4351. FieldName = "id",
  4352. NewKeyValue = cardRegisterId.ToString(),
  4353. OldKeyValue = row["card_register_id"].ToString()
  4354. };
  4355. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  4356. await uow.CompleteAsync();
  4357. }
  4358. }
  4359. }
  4360. _logger.LogInformation($"会员卡数据处理完毕,处理数量{oldCardRegisterList.Rows.Count}");
  4361. }
  4362. else
  4363. {
  4364. _logger.LogInformation($"会员卡数据已存在,未处理");
  4365. }
  4366. }
  4367. #endregion
  4368. /// <summary>
  4369. /// 处理用户签名
  4370. /// </summary>
  4371. /// <returns></returns>
  4372. public async Task TranferUserSignData()
  4373. {
  4374. var userList = await _identityUserRepository.GetListAsync();
  4375. var oldUserList = await oldDb.Ado.GetDataTableAsync("select * from users");
  4376. if (oldUserList.Rows.Count > 0)
  4377. {
  4378. foreach (DataRow row in oldUserList.Rows)
  4379. {
  4380. if (!string.IsNullOrWhiteSpace(row["signature_image"].ToString()))
  4381. {
  4382. var newUser = userList.FirstOrDefault(f => f.UserName == row["user_id"].ToString());
  4383. if (newUser == null)
  4384. {
  4385. newUser = userList.FirstOrDefault(f => f.UserName == row["user_id"].ToString() + "2");
  4386. }
  4387. if (newUser != null)
  4388. {
  4389. string signImg = UpLoadSignImg(Guid.NewGuid(), DateTime.Now, (byte[])row["signature_image"]);
  4390. if (signImg != "")
  4391. {
  4392. newUser.SetProperty("user_sign", signImg);
  4393. await _identityUserRepository.UpdateAsync(newUser);
  4394. }
  4395. }
  4396. }
  4397. }
  4398. }
  4399. }
  4400. /// <summary>
  4401. /// 处理房间数据
  4402. /// </summary>
  4403. /// <returns></returns>
  4404. public async Task TranferRoomData()
  4405. {
  4406. var count = await _roomRepository.GetCountAsync();
  4407. if (count == 0)
  4408. {
  4409. var oldRoomList = await oldDb.Ado.GetDataTableAsync(@"SELECT [room_id],[room_name],[department_id],
  4410. [for_sex_id],[room_type],[valid_flag],[display_order],[amender],[amended_date],[upper_limit_num] FROM [dbo].[room] order by display_order asc ");
  4411. if (oldRoomList.Rows.Count > 0)
  4412. {
  4413. foreach (DataRow row in oldRoomList.Rows)
  4414. {
  4415. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  4416. {
  4417. var fieldComparisonEnt = await _fieldComparisonRepository.FirstOrDefaultAsync(f => f.TableName == "item_type"
  4418. && f.OldKeyValue == row["department_id"].ToString().Trim());
  4419. Guid roomId = GuidGenerator.Create();
  4420. var data = new Room(roomId)
  4421. {
  4422. DisplayName = row["room_name"].ToString(),
  4423. IsActive = Convert.ToChar(row["valid_flag"].ToString()),
  4424. MedicalCenterId = defaultMedicalCenterId,
  4425. DisplayOrder = oldRoomList.Rows.IndexOf(row) + 1,
  4426. ForSexId = ConvertForSex(row["for_sex_id"].ToString()),
  4427. QueueTime = 5,
  4428. RoomNo = row["room_id"].ToString(),
  4429. SimpleCode = LanguageConverter.GetPYSimpleCode(row["room_name"].ToString()),
  4430. ItemTypeId = Guid.Parse(fieldComparisonEnt.NewKeyValue),
  4431. RoomTypeFlag = Convert.ToChar(row["room_type"].ToString())
  4432. };
  4433. await _roomRepository.InsertAsync(data);
  4434. var fieldComparison = new FieldComparison
  4435. {
  4436. TableName = "room",
  4437. FieldName = "id",
  4438. NewKeyValue = roomId.ToString(),
  4439. OldKeyValue = row["room_id"].ToString()
  4440. };
  4441. await _fieldComparisonRepository.InsertAsync(fieldComparison);
  4442. await uow.CompleteAsync();
  4443. }
  4444. }
  4445. }
  4446. _logger.LogInformation($"房间数据处理完毕,处理数量{oldRoomList.Rows.Count}");
  4447. }
  4448. else
  4449. {
  4450. _logger.LogInformation($"房间数据已存在,未处理");
  4451. }
  4452. }
  4453. /// <summary>
  4454. /// 处理房间明细数据
  4455. /// </summary>
  4456. /// <returns></returns>
  4457. public async Task TranferRoomDetailData()
  4458. {
  4459. var count = await _roomDetailRepository.GetCountAsync();
  4460. if (count == 0)
  4461. {
  4462. var oldRoomDetailList = await oldDb.Ado.GetDataTableAsync(@"select asbitem_id,room_id from room_asbitem ");
  4463. if (oldRoomDetailList.Rows.Count > 0)
  4464. {
  4465. var roomNos = (await _roomRepository.GetListAsync()).Select(s => s.RoomNo);
  4466. foreach (DataRow row in oldRoomDetailList.Rows)
  4467. {
  4468. if (roomNos.Contains(row["room_id"].ToString().Trim()))
  4469. {
  4470. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  4471. {
  4472. var fieldComparisonEnt = await _fieldComparisonRepository.FirstOrDefaultAsync(f => f.TableName == "room"
  4473. && f.OldKeyValue == row["room_id"].ToString().Trim());
  4474. var fieldComparisonAsbitemEnt = await _fieldComparisonRepository.FirstOrDefaultAsync(f => f.TableName == "asbitem"
  4475. && f.OldKeyValue == row["asbitem_id"].ToString().Trim());
  4476. var data = new RoomDetail()
  4477. {
  4478. AsbitemId = Guid.Parse(fieldComparisonAsbitemEnt.NewKeyValue),
  4479. RoomId = Guid.Parse(fieldComparisonEnt.NewKeyValue)
  4480. };
  4481. await _roomDetailRepository.InsertAsync(data);
  4482. await uow.CompleteAsync();
  4483. }
  4484. }
  4485. }
  4486. }
  4487. _logger.LogInformation($"房间明细数据处理完毕,处理数量{oldRoomDetailList.Rows.Count}");
  4488. }
  4489. else
  4490. {
  4491. _logger.LogInformation($"房间明细数据已存在,未处理");
  4492. }
  4493. }
  4494. /// <summary>
  4495. /// 处理用户科室
  4496. /// </summary>
  4497. /// <returns></returns>
  4498. public async Task TranferUserItemTypeData()
  4499. {
  4500. var userList = await _identityUserRepository.GetListAsync();
  4501. if (userList.Any())
  4502. {
  4503. string sql_old_qx = "select user_id,department_id from security_department order by user_id asc";
  4504. var oldUserItemTypeList = await oldDb.Ado.GetDataTableAsync(sql_old_qx);
  4505. foreach (var item in userList)
  4506. {
  4507. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  4508. {
  4509. var oldRows = oldUserItemTypeList.Select($"user_id = '{item.UserName}'");
  4510. if (oldRows.Count() > 0)
  4511. {
  4512. List<UserItemType> userItemTypes = new List<UserItemType>();
  4513. foreach (DataRow row in oldRows)
  4514. {
  4515. var oldItemTypeId = row["department_id"].ToString();
  4516. var newItemTypeId = await _fieldComparisonRepository.FirstOrDefaultAsync(f => f.TableName == "item_type" && f.OldKeyValue == oldItemTypeId);
  4517. //科室找最后一级
  4518. var chidrenItemTypeList = await _itemTypeRepository.GetListAsync(m => m.ParentId == Guid.Parse(newItemTypeId.NewKeyValue));
  4519. if (chidrenItemTypeList.Any())
  4520. {
  4521. foreach (var chidrenItemType in chidrenItemTypeList)
  4522. {
  4523. var tempEnt = new UserItemType()
  4524. {
  4525. UserId = item.Id,
  4526. ItemTypeId = chidrenItemType.Id
  4527. };
  4528. userItemTypes.Add(tempEnt);
  4529. }
  4530. }
  4531. else
  4532. {
  4533. var tempEnt = new UserItemType()
  4534. {
  4535. UserId = item.Id,
  4536. ItemTypeId = Guid.Parse(newItemTypeId.NewKeyValue)
  4537. };
  4538. userItemTypes.Add(tempEnt);
  4539. }
  4540. }
  4541. await _userItemTypeRepository.InsertManyAsync(userItemTypes);
  4542. }
  4543. await uow.CompleteAsync();
  4544. }
  4545. }
  4546. _logger.LogInformation($"用户科室数据处理完毕,处理数量{oldUserItemTypeList.Rows.Count}");
  4547. }
  4548. }
  4549. #region 私有方法
  4550. /// <summary>
  4551. /// 转换老系统适用性别
  4552. /// </summary>
  4553. /// <param name="forSexId"></param>
  4554. /// <returns></returns>
  4555. private char ConvertForSex(string forSexId)
  4556. {
  4557. if (forSexId == "0")
  4558. {
  4559. return 'M';
  4560. }
  4561. else if (forSexId == "1")
  4562. {
  4563. return 'F';
  4564. }
  4565. else
  4566. {
  4567. return 'A';
  4568. }
  4569. }
  4570. /// <summary>
  4571. /// 转换老系统性别
  4572. /// </summary>
  4573. /// <param name="SexId"></param>
  4574. /// <returns></returns>
  4575. private char ConvertSex(string SexId)
  4576. {
  4577. if (SexId == "0")
  4578. {
  4579. return 'M';
  4580. }
  4581. else if (SexId == "1")
  4582. {
  4583. return 'F';
  4584. }
  4585. else
  4586. {
  4587. return 'U';
  4588. }
  4589. }
  4590. /// <summary>
  4591. /// 转换头像
  4592. /// </summary>
  4593. /// <param name="PatientRegisterId"></param>
  4594. /// <param name="time"></param>
  4595. /// <param name="Photo"></param>
  4596. /// <returns></returns>
  4597. private string UpLoadImg(Guid PatientRegisterId, DateTime time, byte[] Photo)
  4598. {
  4599. string imgurl = $"photo/{time.Year}/{time.Month}/{time.Day}/" + PatientRegisterId;
  4600. var isupload = ImageHelper.ByteToImage(Photo, imgurl);
  4601. if (!string.IsNullOrEmpty(isupload))
  4602. return isupload;
  4603. else
  4604. return "";
  4605. }
  4606. /// <summary>
  4607. /// 转换签名
  4608. /// </summary>
  4609. /// <param name="UserId"></param>
  4610. /// <param name="time"></param>
  4611. /// <param name="Photo"></param>
  4612. /// <returns></returns>
  4613. private string UpLoadSignImg(Guid UserId, DateTime time, byte[] Photo)
  4614. {
  4615. string imgurl = $"UserSign/{time.Year}/{time.Month}/{time.Day}/" + UserId;
  4616. var isupload = ImageHelper.ByteToImage(Photo, imgurl);
  4617. if (!string.IsNullOrEmpty(isupload))
  4618. return isupload;
  4619. else
  4620. return "";
  4621. }
  4622. /// <summary>
  4623. /// 迁移后台用户数据
  4624. /// </summary>
  4625. /// <returns></returns>
  4626. private async Task TransferUserData()
  4627. {
  4628. var oldUserList = await oldDb.Ado.GetDataTableAsync("select * from users");
  4629. if (oldUserList.Rows.Count > 0)
  4630. {
  4631. if (await _identityUserRepository.CountAsync() == 1)
  4632. {
  4633. foreach (DataRow row in oldUserList.Rows)
  4634. {
  4635. using (var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true))
  4636. {
  4637. //#region 上传图片,获取地址
  4638. //string signImg = "";
  4639. //if (!string.IsNullOrEmpty(row["signature_image"].ToString()))
  4640. //{
  4641. // signImg = UpLoadSignImg(Guid.NewGuid(), DateTime.Now, (byte[])row["signature_image"]);
  4642. //}
  4643. //#endregion
  4644. string newUserName = LanguageConverter.GetPYSimpleCode(row["user_id"].ToString().Trim());
  4645. var isUserName = await _identityUserRepository.FirstOrDefaultAsync(m => m.UserName == newUserName);
  4646. if (isUserName != null)
  4647. {
  4648. newUserName += "2";
  4649. }
  4650. var userEnt = new IdentityUserCreateNoEmailDto
  4651. {
  4652. Email = "",
  4653. IsActive = row["valid_flag"].ToString() == "Y" ? true : false,
  4654. LockoutEnabled = false,
  4655. Name = "",
  4656. Password = string.IsNullOrWhiteSpace(row["password"].ToString()) ? "888888" : row["password"].ToString(),
  4657. PhoneNumber = "",
  4658. RoleNames = new string[] { "admin" },
  4659. Surname = row["user_name"].ToString().Trim(),
  4660. UserName = newUserName,
  4661. UserPhoto = "",
  4662. UserSign = ""
  4663. };
  4664. await _myUserAppService.CreateAsync(userEnt);
  4665. await uow.CompleteAsync();
  4666. }
  4667. }
  4668. }
  4669. else
  4670. {
  4671. _logger.LogInformation("用户数据已存在,未处理");
  4672. }
  4673. }
  4674. }
  4675. #endregion
  4676. #region 默认数据
  4677. /// <summary>
  4678. /// 生成性别表基础数据
  4679. /// </summary>
  4680. /// <returns></returns>
  4681. private async Task CreateSexAsync()
  4682. {
  4683. if (await _sexRepository.GetCountAsync() == 0)
  4684. {
  4685. List<Sex> sexes = new List<Sex>();
  4686. sexes.Add(new Sex
  4687. {
  4688. DisplayName = "未知",
  4689. Id = 'U',
  4690. DisplayOrder = 1,
  4691. SimpleCode = LanguageConverter.GetPYSimpleCode("未知")
  4692. });
  4693. sexes.Add(new Sex
  4694. {
  4695. DisplayName = "男",
  4696. Id = 'M',
  4697. DisplayOrder = 2,
  4698. SimpleCode = LanguageConverter.GetPYSimpleCode("男")
  4699. });
  4700. sexes.Add(new Sex
  4701. {
  4702. DisplayName = "女",
  4703. Id = 'F',
  4704. DisplayOrder = 3,
  4705. SimpleCode = LanguageConverter.GetPYSimpleCode("女")
  4706. });
  4707. await _sexRepository.InsertManyAsync(sexes);
  4708. }
  4709. }
  4710. /// <summary>
  4711. /// 生成适用性别表基础数据
  4712. /// </summary>
  4713. /// <returns></returns>
  4714. private async Task CreateForSexAsync()
  4715. {
  4716. if (await _forSexRepository.GetCountAsync() == 0)
  4717. {
  4718. List<ForSex> forSexes = new List<ForSex>();
  4719. forSexes.Add(new ForSex
  4720. {
  4721. DisplayName = "全部",
  4722. Id = 'A',
  4723. DisplayOrder = 1,
  4724. SimpleCode = LanguageConverter.GetPYSimpleCode("全部")
  4725. });
  4726. forSexes.Add(new ForSex
  4727. {
  4728. DisplayName = "男",
  4729. Id = 'M',
  4730. DisplayOrder = 2,
  4731. SimpleCode = LanguageConverter.GetPYSimpleCode("男")
  4732. });
  4733. forSexes.Add(new ForSex
  4734. {
  4735. DisplayName = "女",
  4736. Id = 'F',
  4737. DisplayOrder = 3,
  4738. SimpleCode = LanguageConverter.GetPYSimpleCode("女")
  4739. });
  4740. await _forSexRepository.InsertManyAsync(forSexes);
  4741. }
  4742. }
  4743. /// <summary>
  4744. /// 生成婚姻状况表基础数据
  4745. /// </summary>
  4746. /// <returns></returns>
  4747. private async Task CreateMaritalStatusAsync()
  4748. {
  4749. if (await _maritalStatusRepository.GetCountAsync() == 0)
  4750. {
  4751. List<MaritalStatus> maritalStatuses = new List<MaritalStatus>();
  4752. maritalStatuses.Add(new MaritalStatus
  4753. {
  4754. DisplayName = "未婚",
  4755. Id = '0',
  4756. DisplayOrder = 1,
  4757. SimpleCode = LanguageConverter.GetPYSimpleCode("未婚")
  4758. });
  4759. maritalStatuses.Add(new MaritalStatus
  4760. {
  4761. DisplayName = "已婚",
  4762. Id = '1',
  4763. DisplayOrder = 2,
  4764. SimpleCode = LanguageConverter.GetPYSimpleCode("已婚")
  4765. });
  4766. maritalStatuses.Add(new MaritalStatus
  4767. {
  4768. DisplayName = "离异",
  4769. Id = '2',
  4770. DisplayOrder = 3,
  4771. SimpleCode = LanguageConverter.GetPYSimpleCode("离异")
  4772. });
  4773. maritalStatuses.Add(new MaritalStatus
  4774. {
  4775. DisplayName = "丧偶",
  4776. Id = '3',
  4777. DisplayOrder = 4,
  4778. SimpleCode = LanguageConverter.GetPYSimpleCode("丧偶")
  4779. });
  4780. maritalStatuses.Add(new MaritalStatus
  4781. {
  4782. DisplayName = "离异或丧偶",
  4783. Id = '4',
  4784. DisplayOrder = 5,
  4785. SimpleCode = LanguageConverter.GetPYSimpleCode("离异或丧偶")
  4786. });
  4787. maritalStatuses.Add(new MaritalStatus
  4788. {
  4789. DisplayName = "未知",
  4790. Id = '9',
  4791. DisplayOrder = 6,
  4792. SimpleCode = LanguageConverter.GetPYSimpleCode("未知")
  4793. });
  4794. await _maritalStatusRepository.InsertManyAsync(maritalStatuses);
  4795. }
  4796. }
  4797. /// <summary>
  4798. /// 生成结果状态
  4799. /// </summary>
  4800. /// <returns></returns>
  4801. private async Task CreateResultStatusAsync()
  4802. {
  4803. if (await _resultStatusRepository.GetCountAsync() == 0)
  4804. {
  4805. #region 数据
  4806. List<ResultStatus> resultStatuses = new List<ResultStatus>();
  4807. resultStatuses.Add(new ResultStatus
  4808. {
  4809. Id = "01",
  4810. DisplayName = "正常",
  4811. ReportPrompt = "",
  4812. ReportBackgroundColor = 16777215,
  4813. ReportFontColor = 0,
  4814. DataInputPrompt = "",
  4815. DataInputBackgroundColor = 16777215,
  4816. DataInputFontColor = 0,
  4817. DisplayOrder = 1
  4818. });
  4819. resultStatuses.Add(new ResultStatus
  4820. {
  4821. Id = "02",
  4822. DisplayName = "错误",
  4823. ReportPrompt = "×",
  4824. ReportBackgroundColor = 16711680,
  4825. ReportFontColor = 255,
  4826. DataInputPrompt = "×",
  4827. DataInputBackgroundColor = 16711808,
  4828. DataInputFontColor = 255,
  4829. DisplayOrder = 2
  4830. });
  4831. resultStatuses.Add(new ResultStatus
  4832. {
  4833. Id = "03",
  4834. DisplayName = "阴性",
  4835. ReportPrompt = "-",
  4836. ReportBackgroundColor = 16777215,
  4837. ReportFontColor = 0,
  4838. DataInputPrompt = "-",
  4839. DataInputBackgroundColor = 16777215,
  4840. DataInputFontColor = 0,
  4841. DisplayOrder = 3
  4842. });
  4843. resultStatuses.Add(new ResultStatus
  4844. {
  4845. Id = "04",
  4846. DisplayName = "阳性",
  4847. ReportPrompt = "+",
  4848. ReportBackgroundColor = 16777215,
  4849. ReportFontColor = 0,
  4850. DataInputPrompt = "+",
  4851. DataInputBackgroundColor = 16777215,
  4852. DataInputFontColor = 0,
  4853. DisplayOrder = 4
  4854. });
  4855. resultStatuses.Add(new ResultStatus
  4856. {
  4857. Id = "05",
  4858. DisplayName = "弱阳性",
  4859. ReportPrompt = "±",
  4860. ReportBackgroundColor = 16777215,
  4861. ReportFontColor = 0,
  4862. DataInputPrompt = "±",
  4863. DataInputBackgroundColor = 16777215,
  4864. DataInputFontColor = 0,
  4865. DisplayOrder = 5
  4866. });
  4867. resultStatuses.Add(new ResultStatus
  4868. {
  4869. Id = "06",
  4870. DisplayName = "偏低",
  4871. ReportPrompt = "↓",
  4872. ReportBackgroundColor = 65535,
  4873. ReportFontColor = 16711680,
  4874. DataInputPrompt = "↓",
  4875. DataInputBackgroundColor = 16777215,
  4876. DataInputFontColor = 16711680,
  4877. DisplayOrder = 6
  4878. });
  4879. resultStatuses.Add(new ResultStatus
  4880. {
  4881. Id = "07",
  4882. DisplayName = "偏高",
  4883. ReportPrompt = "↑",
  4884. ReportBackgroundColor = 8454143,
  4885. ReportFontColor = 255,
  4886. DataInputPrompt = "↑",
  4887. DataInputBackgroundColor = 16777215,
  4888. DataInputFontColor = 255,
  4889. DisplayOrder = 7
  4890. });
  4891. resultStatuses.Add(new ResultStatus
  4892. {
  4893. Id = "08",
  4894. DisplayName = "危急值下限",
  4895. ReportPrompt = "↓",
  4896. ReportBackgroundColor = 16777215,
  4897. ReportFontColor = 8421376,
  4898. DataInputPrompt = "↓",
  4899. DataInputBackgroundColor = 16777215,
  4900. DataInputFontColor = 8421376,
  4901. DisplayOrder = 8
  4902. });
  4903. resultStatuses.Add(new ResultStatus
  4904. {
  4905. Id = "09",
  4906. DisplayName = "危急值上限",
  4907. ReportPrompt = "↑",
  4908. ReportBackgroundColor = 16777215,
  4909. ReportFontColor = 16711935,
  4910. DataInputPrompt = "↑",
  4911. DataInputBackgroundColor = 16777215,
  4912. DataInputFontColor = 16711935,
  4913. DisplayOrder = 9
  4914. });
  4915. resultStatuses.Add(new ResultStatus
  4916. {
  4917. Id = "10",
  4918. DisplayName = "危急值",
  4919. ReportPrompt = "×",
  4920. ReportBackgroundColor = 16777215,
  4921. ReportFontColor = 16711935,
  4922. DataInputPrompt = "×",
  4923. DataInputBackgroundColor = 16777215,
  4924. DataInputFontColor = 16711935,
  4925. DisplayOrder = 10
  4926. });
  4927. #endregion
  4928. await _resultStatusRepository.InsertManyAsync(resultStatuses);
  4929. }
  4930. }
  4931. #endregion
  4932. }
  4933. }