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.

496 lines
24 KiB

3 years ago
2 years ago
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
  1. using Microsoft.AspNetCore.Authorization;
  2. using Microsoft.EntityFrameworkCore;
  3. using Microsoft.Extensions.Configuration;
  4. using Shentun.Peis.Enums;
  5. using Shentun.Peis.Models;
  6. using Shentun.Peis.PlugIns;
  7. using Shentun.Peis.SysParmValues;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.IO;
  11. using System.Linq;
  12. using System.Reflection;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. using Volo.Abp;
  16. using Volo.Abp.Domain.Entities;
  17. using Volo.Abp.Domain.Repositories;
  18. using Volo.Abp.Domain.Services;
  19. namespace Shentun.Peis.LisRequests
  20. {
  21. public class LisRequestManager : DomainService
  22. {
  23. private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
  24. private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
  25. private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository;
  26. private readonly IRepository<SampleGroup, Guid> _sampleGroupRepository;
  27. private readonly IRepository<SampleGroupDetail> _sampleGroupDetailRepository;
  28. private readonly IRepository<Asbitem, Guid> _asbitemRepository;
  29. private readonly IRepository<ItemType, Guid> _itemTypeRepository;
  30. private readonly IRepository<SysParmValue> _sysParmValueRepository;
  31. private readonly IRepository<PrimarykeyBuilder> _primarykeyBuilderRepository;
  32. private readonly IRepository<LisRequest, Guid> _lisRequestRepository;
  33. private readonly IRepository<ThirdInterface, Guid> _thirdInterfaceRepository;
  34. private readonly SysParmValueManager _sysParmValueManager;
  35. public LisRequestManager(
  36. IRepository<PatientRegister, Guid> patientRegisterRepository,
  37. IRepository<RegisterCheck, Guid> registerCheckRepository,
  38. IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository,
  39. IRepository<SampleGroup, Guid> sampleGroupRepository,
  40. IRepository<SampleGroupDetail> sampleGroupDetailRepository,
  41. IRepository<Asbitem, Guid> asbitemRepository,
  42. IRepository<ItemType, Guid> itemTypeRepository,
  43. IRepository<SysParmValue> sysParmValueRepository,
  44. IRepository<PrimarykeyBuilder> primarykeyBuilderRepository,
  45. IRepository<LisRequest, Guid> lisRequestRepository,
  46. SysParmValueManager sysParmValueManager,
  47. IRepository<ThirdInterface, Guid> thirdInterfaceRepository
  48. )
  49. {
  50. _patientRegisterRepository = patientRegisterRepository;
  51. _registerCheckRepository = registerCheckRepository;
  52. this._registerCheckAsbitemRepository = registerCheckAsbitemRepository;
  53. this._sampleGroupRepository = sampleGroupRepository;
  54. this._sampleGroupDetailRepository = sampleGroupDetailRepository;
  55. this._sysParmValueRepository = sysParmValueRepository;
  56. this._primarykeyBuilderRepository = primarykeyBuilderRepository;
  57. this._lisRequestRepository = lisRequestRepository;
  58. _sysParmValueManager = sysParmValueManager;
  59. _thirdInterfaceRepository = thirdInterfaceRepository;
  60. _asbitemRepository = asbitemRepository;
  61. _itemTypeRepository = itemTypeRepository;
  62. }
  63. /// <summary>
  64. /// 生成检验申请单
  65. /// </summary>
  66. /// <param name="patientRegisterId">人员登记ID</param>
  67. /// <returns></returns>
  68. public async Task<List<LisRequest>> SetLisRequestAsync(Guid patientRegisterId)
  69. {
  70. var sampleGroups = await _sampleGroupRepository.GetListAsync();
  71. var _sampleGroupDetail = await _sampleGroupDetailRepository.GetListAsync();
  72. var patientRegisterRequests = (
  73. from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  74. join registerCheck in await _registerCheckRepository.GetQueryableAsync()
  75. on patientRegister.Id equals registerCheck.PatientRegisterId
  76. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
  77. on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  78. join asbitem in await _asbitemRepository.GetQueryableAsync()
  79. on registerCheckAsbitem.AsbitemId equals asbitem.Id
  80. join itemType in await _itemTypeRepository.GetQueryableAsync()
  81. on asbitem.ItemTypeId equals itemType.Id
  82. where patientRegister.Id == patientRegisterId
  83. && itemType.CheckTypeFlag == CheckTypeFlag.Laboratory
  84. && registerCheck.CompleteFlag == RegisterCheckCompleteFlag.UnChecked
  85. select new
  86. {
  87. patientRegister,
  88. registerCheckAsbitem
  89. }).ToList();
  90. var patientRegisterFirst = patientRegisterRequests.First().patientRegister;
  91. var registerCheckAsbitems = patientRegisterRequests.Select(o => o.registerCheckAsbitem)
  92. .Where(o => o.PatientRegisterId == patientRegisterFirst.Id).Distinct().ToList();
  93. SetLisRequest(patientRegisterFirst, registerCheckAsbitems, sampleGroups, _sampleGroupDetail
  94. , out var updateRegisterCheckAsbitems, out var createLisRequests);
  95. return createLisRequests;
  96. }
  97. public void SetLisRequest(PatientRegister patientRegister,
  98. List<RegisterCheckAsbitem> registerCheckAsbitems,
  99. List<SampleGroup> sampleGroups,
  100. List<SampleGroupDetail> sampleGroupDetails,
  101. out List<RegisterCheckAsbitem> updateRegisterCheckAsbitems,
  102. out List<LisRequest> createLisRequests)
  103. {
  104. var registerCheckAsbitemLisList = new List<RegisterCheckAsbitemLis>();
  105. updateRegisterCheckAsbitems = new List<RegisterCheckAsbitem>();
  106. foreach (var registerCheckAsbitem in registerCheckAsbitems)
  107. {
  108. var sampleGroupDetail = sampleGroupDetails.Where(o => o.AsbitemId == registerCheckAsbitem.AsbitemId).FirstOrDefault();
  109. if (sampleGroupDetail != null)
  110. {
  111. registerCheckAsbitemLisList.Add(new RegisterCheckAsbitemLis()
  112. {
  113. RegisterCheckAsbitemId = registerCheckAsbitem.Id,
  114. SampleGroupId = sampleGroupDetail.SampleGroupId,
  115. LisRequestId = registerCheckAsbitem.LisRequestId,
  116. });
  117. }
  118. }
  119. //未设置的申请单设置到相同分组的已有申请单
  120. var noRequestCheckAsbitems = registerCheckAsbitems.Where(o=>o.LisRequestId == null || o.LisRequestId == Guid.Empty).ToList();
  121. foreach(var registerCheckAsbitem in noRequestCheckAsbitems)
  122. {
  123. var registerCheckAsbitemLis = registerCheckAsbitemLisList.Where(o => o.RegisterCheckAsbitemId == registerCheckAsbitem.Id).SingleOrDefault();
  124. if (registerCheckAsbitemLis == null)
  125. {
  126. continue;
  127. }
  128. var haveRegisterCheckAsbitemLis = registerCheckAsbitemLisList.Where(o => o.SampleGroupId == registerCheckAsbitemLis.SampleGroupId
  129. && o.LisRequestId != null && o.LisRequestId != Guid.Empty).SingleOrDefault();
  130. if( haveRegisterCheckAsbitemLis != null)
  131. {
  132. registerCheckAsbitem.LisRequestId = haveRegisterCheckAsbitemLis.LisRequestId;
  133. updateRegisterCheckAsbitems.Add(registerCheckAsbitem);
  134. }
  135. }
  136. //未设置的项目重新设置申请单
  137. noRequestCheckAsbitems = registerCheckAsbitems.Where(o => o.LisRequestId == null || o.LisRequestId == Guid.Empty).ToList();
  138. var noRequestLisList = registerCheckAsbitemLisList.Where(o => noRequestCheckAsbitems.Select(o => o.Id).Contains(o.RegisterCheckAsbitemId)).ToList();
  139. var sampleGroupids = noRequestLisList.Select(o => o.SampleGroupId).Distinct();
  140. createLisRequests = new List<LisRequest>();
  141. foreach ( var sampleGroupid in sampleGroupids)
  142. {
  143. var sampleGroup = sampleGroups.Where(o => o.Id == sampleGroupid).Single();
  144. //var guid = GuidGenerator.Create();
  145. var lisRequest = new LisRequest(GuidGenerator.Create())
  146. {
  147. IsPrint = 'N',
  148. IsSignIn = 'N',
  149. LisRequestNo = CreateLisRequestNo(patientRegister.MedicalCenterId).Result,
  150. SampleContainerId = sampleGroup.SampleContainerId,
  151. SampleTypeId = sampleGroup.SampleTypeId
  152. };
  153. createLisRequests.Add(lisRequest);
  154. foreach (var requestLis in noRequestLisList)
  155. {
  156. if(requestLis.SampleGroupId == sampleGroupid)
  157. {
  158. requestLis.LisRequestId = lisRequest.Id;
  159. var registerCheckAsbitem = noRequestCheckAsbitems.Where(o => o.Id == requestLis.RegisterCheckAsbitemId).Single();
  160. registerCheckAsbitem.LisRequestId = lisRequest.Id;
  161. updateRegisterCheckAsbitems.Add(registerCheckAsbitem);
  162. }
  163. }
  164. }
  165. }
  166. /// <summary>
  167. /// 追加项目到检验单 如lisrequest内有项目完成体检或者弃检 不允许追加
  168. /// </summary>
  169. /// <param name="LisRequestId"></param>
  170. /// <param name="RegisterCheckAsbitemIds"></param>
  171. /// <returns></returns>
  172. public async Task AppendLisRequestAsync(Guid LisRequestId, List<Guid> RegisterCheckAsbitemIds)
  173. {
  174. //根据RegisterAsbitemId
  175. var registerCheckAsbitemInIdList = (await _registerCheckAsbitemRepository.GetQueryableAsync())
  176. .Include(x => x.RegisterCheck)
  177. .Include(x=>x.Asbitem)
  178. .ThenInclude(x=>x.ItemType)
  179. .Where(m => RegisterCheckAsbitemIds.Contains(m.Id)).ToList();
  180. foreach(var registerCheckAsbitem in registerCheckAsbitemInIdList)
  181. {
  182. if(registerCheckAsbitem.Asbitem.ItemType.CheckTypeFlag != CheckTypeFlag.Laboratory)
  183. {
  184. throw new UserFriendlyException($"{registerCheckAsbitem.Asbitem.DisplayName}不是检验项目");
  185. }
  186. }
  187. //根据LisRequestId
  188. var registerAsbitemInLisRequestIdList = (await _registerCheckAsbitemRepository.GetQueryableAsync())
  189. .Include(x => x.RegisterCheck)
  190. .Where(m => m.LisRequestId == LisRequestId).ToList();
  191. if (registerAsbitemInLisRequestIdList.Where(m => m.RegisterCheck.CompleteFlag != RegisterCheckCompleteFlag.UnChecked).Count() > 0)
  192. {
  193. //当前条码项目已完成体检或已弃检
  194. throw new UserFriendlyException("当前条码项目已完成体检或已弃检");
  195. }
  196. if (registerCheckAsbitemInIdList.Any())
  197. {
  198. registerCheckAsbitemInIdList.ForEach(f => f.LisRequestId = LisRequestId);
  199. await _registerCheckAsbitemRepository.UpdateManyAsync(registerCheckAsbitemInIdList);
  200. }
  201. else
  202. {
  203. throw new UserFriendlyException("RegisterAsbitem数据不存在");
  204. }
  205. }
  206. /// <summary>
  207. /// 追加项目到检验单 生成新的条码号
  208. /// </summary>
  209. /// <param name="LisRequestId"></param>
  210. /// <param name="registerCheckAsbitemIds"></param>
  211. /// <returns></returns>
  212. public async Task<List<LisRequest>> AddLisRequestAsync(List<Guid> registerCheckAsbitemIds)
  213. {
  214. List<LisRequest> lisRequests = new List<LisRequest>();
  215. //根据RegisterAsbitem表ID 查找登记的组合项目
  216. var registerCheckAsbitemeList = (await _registerCheckAsbitemRepository.GetQueryableAsync())
  217. .Include(x => x.Asbitem)
  218. .ThenInclude(x => x.ItemType)
  219. .Include(x => x.PatientRegister)
  220. .Where(m => registerCheckAsbitemIds.Contains(m.Id))
  221. .ToList();
  222. if(!registerCheckAsbitemeList.Any())
  223. {
  224. return null;
  225. }
  226. foreach (var registerCheckAsbitem in registerCheckAsbitemeList)
  227. {
  228. if (registerCheckAsbitem.Asbitem.ItemType.CheckTypeFlag != CheckTypeFlag.Laboratory)
  229. {
  230. throw new UserFriendlyException($"{registerCheckAsbitem.Asbitem.DisplayName}不是检验项目");
  231. }
  232. }
  233. var sampleGroups = await _sampleGroupRepository.GetListAsync();
  234. var _sampleGroupDetail = await _sampleGroupDetailRepository.GetListAsync();
  235. var patientRegisterFirst = registerCheckAsbitemeList.First().PatientRegister;
  236. SetLisRequest(patientRegisterFirst, registerCheckAsbitemeList, sampleGroups, _sampleGroupDetail
  237. , out var updateRegisterCheckAsbitems, out var createLisRequests);
  238. //if (registerCheckAsbitemeList.Any())
  239. //{
  240. // //根据登记的组合ID 查找组合项目对应的条码分组
  241. // var sampleGroupDetailList = await _sampleGroupDetailRepository.GetListAsync(m => registerCheckAsbitemeList.Select(s => s.AsbitemId).Contains(m.AsbitemId));
  242. // if (sampleGroupDetailList.Any())
  243. // {
  244. // //查找条码分组信息 根据条码分组ID
  245. // var sampleGroupList = (await _sampleGroupRepository.GetQueryableAsync())
  246. // .Include(x => x.SampleContainer)
  247. // .Include(x => x.SampleType)
  248. // .Where(m => sampleGroupDetailList.Select(s => s.SampleGroupId).Contains(m.Id)).ToList();
  249. // foreach (var sampleGroup in sampleGroupList)
  250. // {
  251. // //根据条码分组生成,一个条码分组生成一个检验单
  252. // #region 生成检验申请单
  253. // var lisRequestEnt = new LisRequest
  254. // {
  255. // IsPrint = 'N',
  256. // IsSignIn = 'N',
  257. // LisRequestNo = await CreateLisRequestNo(registerCheckAsbitemeList.FirstOrDefault().PatientRegister.MedicalCenterId),
  258. // SampleContainerId = sampleGroup.SampleContainerId,
  259. // SampleTypeId = sampleGroup.SampleTypeId
  260. // };
  261. // //生成检验申请单的新实体
  262. // var lisRequestEnt_New = await _lisRequestRepository.InsertAsync(lisRequestEnt, true);
  263. // lisRequests.Add(lisRequestEnt_New);
  264. // #region 修改RegisterAsbitem表 LisRequestId
  265. // //当前条码分组ID绑定的组合项目
  266. // var AsbitemIds = sampleGroupDetailList.Where(m => m.SampleGroupId == sampleGroup.Id).Select(s => s.AsbitemId);
  267. // //获取需要更新的RegisterCheckAsbitem数据
  268. // var registerAsbitemeList_Update = await _registerCheckAsbitemRepository.GetListAsync(
  269. // f => registerCheckAsbitemIds.Contains(f.Id) && AsbitemIds.Contains(f.AsbitemId));
  270. // if (registerAsbitemeList_Update.Any())
  271. // {
  272. // //更新LisRequestId
  273. // registerAsbitemeList_Update.ForEach(m => m.LisRequestId = lisRequestEnt_New.Id);
  274. // await _registerCheckAsbitemRepository.UpdateManyAsync(registerAsbitemeList_Update);
  275. // }
  276. // #endregion
  277. // #endregion
  278. // }
  279. // }
  280. //}
  281. return createLisRequests;
  282. }
  283. public async Task SendThirdLisRequest(Guid id)
  284. {
  285. var thirdInterfaces = (await _thirdInterfaceRepository.GetListAsync(o => o.ThirdInterfaceType == ThirdInterfaceTypeFlag.ChargeRequest))
  286. .OrderBy(o=>o.DisplayOrder).ToList();
  287. foreach (var thirdInterface in thirdInterfaces)
  288. {
  289. var lisRequestPluginsInput = new LisRequestPluginsInput()
  290. {
  291. LisRequestId = id
  292. };
  293. var parmValue = thirdInterface.ParmValue;
  294. var configurationBuilder = new ConfigurationBuilder()
  295. .AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue)));
  296. var config = configurationBuilder.Build();
  297. var assemblyName = config.GetSection("Interface").GetSection("AssemblyName").Value;
  298. var className = config.GetSection("Interface").GetSection("ClassName").Value;
  299. object[] objects = [lisRequestPluginsInput];
  300. var LisRequestPluginsOut = await InvokeAsync(assemblyName, className, parmValue, "SendRequest", objects);
  301. }
  302. }
  303. /// <summary>
  304. /// 生成检验申请单条码号(规则,先找体检中心的配置,如未找到,就直接使用全局的)
  305. /// 模式(0 日期+尾号 1.顺序递增)
  306. /// </summary>
  307. /// <param name="medicalCenterId">体检中心ID</param>
  308. /// <returns></returns>
  309. private async Task<string> CreateLisRequestNo(Guid medicalCenterId)
  310. {
  311. string LisRequestNo = ""; //条码号
  312. //List<SysParmValue> spvlist = await _sysParmValueRepository.GetListAsync();
  313. //var spv_tjzx = spvlist.Where(m => m.MedicalCenterId == medicalCenterId); //体检中心配置
  314. //var spv_global = spvlist.Where(m => m.MedicalCenterId == Guid.Empty); //全局配置
  315. string lis_request_no_rule_coding = "0"; // 模式(0 日期+尾号 1.顺序递增)
  316. string lis_request_no_rule_tail_len = "4"; //尾号长度
  317. string lis_request_no_rule_prefix = "T"; //前缀
  318. lis_request_no_rule_coding = await _sysParmValueManager.GetSysParmValueAsync(medicalCenterId, "lis_request_no_rule_coding");
  319. lis_request_no_rule_tail_len = await _sysParmValueManager.GetSysParmValueAsync(medicalCenterId, "lis_request_no_rule_tail_len");
  320. lis_request_no_rule_prefix = await _sysParmValueManager.GetSysParmValueAsync(medicalCenterId, "lis_request_no_rule_prefix");
  321. if (string.IsNullOrWhiteSpace(lis_request_no_rule_coding))
  322. {
  323. throw new UserFriendlyException("LIS编码方式不能为空");
  324. }
  325. if (string.IsNullOrWhiteSpace(lis_request_no_rule_tail_len))
  326. {
  327. throw new UserFriendlyException("LIS编码尾号长度不能为空");
  328. }
  329. int tailLen = 0;
  330. if (!int.TryParse(lis_request_no_rule_tail_len, out tailLen))
  331. {
  332. throw new UserFriendlyException("LIS编码尾号长度不能为空");
  333. }
  334. if (tailLen < 3)
  335. {
  336. throw new UserFriendlyException("LIS编码尾号长度至少为3位");
  337. }
  338. if (string.IsNullOrWhiteSpace(lis_request_no_rule_prefix))
  339. {
  340. lis_request_no_rule_prefix = "";
  341. }
  342. var primarykeyBuilderEnt = await _primarykeyBuilderRepository.FirstOrDefaultAsync(f => f.PrimarykeyBuilderId == "lis_request_no");
  343. string maxnum = "1";
  344. string date = DateTime.Now.ToString("yyyyMMdd");// 当天
  345. if (lis_request_no_rule_coding == "0")
  346. {
  347. //日期+尾号
  348. #region 模式0 日期+尾号
  349. if (primarykeyBuilderEnt != null)
  350. {
  351. if (primarykeyBuilderEnt.DateString != date)
  352. {
  353. //新的日期 为1 maxnum
  354. primarykeyBuilderEnt.DateString = date;
  355. }
  356. else
  357. {
  358. maxnum = (Convert.ToInt32(primarykeyBuilderEnt.SerialNo) + 1).ToString();
  359. }
  360. primarykeyBuilderEnt.SerialNo = maxnum; //更新新的序列号
  361. LisRequestNo = lis_request_no_rule_prefix + date + maxnum.PadLeft(Convert.ToInt32(lis_request_no_rule_tail_len), '0');
  362. await _primarykeyBuilderRepository.UpdateAsync(primarykeyBuilderEnt);
  363. }
  364. else
  365. {
  366. //初始写入
  367. LisRequestNo = lis_request_no_rule_prefix + date + maxnum.PadLeft(Convert.ToInt32(lis_request_no_rule_tail_len), '0');
  368. primarykeyBuilderEnt = new PrimarykeyBuilder
  369. {
  370. PrimarykeyBuilderId = "lis_request_no",
  371. DateString = date,
  372. SerialNo = maxnum
  373. };
  374. await _primarykeyBuilderRepository.InsertAsync(primarykeyBuilderEnt,true);
  375. }
  376. #endregion
  377. }
  378. else
  379. {
  380. //模式1 顺序递增
  381. #region 模式1 顺序递增
  382. if (primarykeyBuilderEnt != null)
  383. {
  384. maxnum = (Convert.ToInt32(primarykeyBuilderEnt.SerialNo) + 1).ToString();
  385. primarykeyBuilderEnt.SerialNo = maxnum; //更新num
  386. await _primarykeyBuilderRepository.UpdateAsync(primarykeyBuilderEnt);
  387. }
  388. else
  389. {
  390. //初始写入
  391. primarykeyBuilderEnt = new PrimarykeyBuilder
  392. {
  393. PrimarykeyBuilderId = "lis_request_no",
  394. DateString = "",
  395. SerialNo = maxnum
  396. };
  397. await _primarykeyBuilderRepository.InsertAsync(primarykeyBuilderEnt);
  398. }
  399. LisRequestNo = lis_request_no_rule_prefix + maxnum.PadLeft(Convert.ToInt32(lis_request_no_rule_tail_len), '0');
  400. #endregion
  401. }
  402. return LisRequestNo;
  403. }
  404. private class RegisterCheckAsbitemLis
  405. {
  406. public Guid RegisterCheckAsbitemId { get; set; }
  407. public Guid SampleGroupId { get; set; }
  408. public Guid? LisRequestId { get; set; }
  409. }
  410. private async Task<LisRequestPluginsOut> InvokeAsync(string assemblyName, string className, string classConstructorArg, string methodName, object[] args = null)
  411. {
  412. Assembly assembly = Assembly.Load(assemblyName);
  413. Type type = assembly.GetType(className);
  414. // 创建类的实例
  415. object instance = Activator.CreateInstance(type, classConstructorArg);
  416. // 获取方法信息
  417. MethodInfo method = type.GetMethod(methodName);
  418. // 调用方法,如果方法需要参数,可以传入对应的参数数组,例如: new object[] { arg1, arg2 }
  419. LisRequestPluginsOut returnValue;
  420. var isAsync = (method.ReturnType == typeof(Task) ||
  421. (method.ReturnType.IsGenericType && method.ReturnType.GetGenericTypeDefinition() == typeof(Task<>)));
  422. if (isAsync)
  423. {
  424. // 使用反射调用方法
  425. //object returnValue = method.Invoke(instance, args);
  426. returnValue = await (Task<LisRequestPluginsOut>)method.Invoke(instance, args);
  427. }
  428. else
  429. {
  430. returnValue = (LisRequestPluginsOut)method.Invoke(instance, args);
  431. }
  432. return returnValue;
  433. }
  434. }
  435. }