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.

529 lines
26 KiB

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