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.

641 lines
29 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
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.EntityFrameworkCore;
  2. using Shentun.Peis.Enums;
  3. using Shentun.Peis.Models;
  4. using Shentun.Peis.ReferenceRanges;
  5. using Shentun.Peis.RegisterCheckItems;
  6. using Shentun.Peis.RegisterChecks;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. //using TencentCloud.Ame.V20190916.Models;
  13. using TencentCloud.Iot.V20180123.Models;
  14. using Volo.Abp;
  15. using Volo.Abp.Domain.Repositories;
  16. using Volo.Abp.Domain.Services;
  17. namespace Shentun.Peis.RegisterAsbitems
  18. {
  19. /// <summary>
  20. /// 检查组合项目记录
  21. /// </summary>
  22. public class RegisterAsbitemManager : DomainService
  23. {
  24. private readonly IRepository<RegisterAsbitem, Guid> _registerAsbitemRepository;
  25. private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
  26. private readonly IRepository<RegisterCheckItem> _registerCheckItemRepository;
  27. private readonly IRepository<AsbitemDetail> _asbitemDetailRepository;
  28. private readonly IRepository<Asbitem, Guid> _asbitemRepository;
  29. private readonly IRepository<Unit, Guid> _unitRepository;
  30. private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
  31. private readonly IRepository<Item, Guid> _itemRepository;
  32. private readonly IRepository<ReferenceRange, Guid> _referenceRangeRepository;
  33. private readonly ReferenceRangeManager _referenceRangeManager;
  34. private readonly RegisterCheckManager _registerCheckManager;
  35. private readonly RegisterCheckItemManager _registerCheckItemManager;
  36. public RegisterAsbitemManager(IRepository<RegisterAsbitem, Guid> registerAsbitemRepository,
  37. IRepository<RegisterCheck, Guid> registerCheckRepository,
  38. IRepository<RegisterCheckItem> registerCheckItemRepository,
  39. IRepository<AsbitemDetail> asbitemDetailRepository,
  40. IRepository<Asbitem, Guid> asbitemRepository,
  41. IRepository<Unit, Guid> unitRepository,
  42. IRepository<PatientRegister, Guid> patientRegisterRepository,
  43. IRepository<Item, Guid> itemRepository,
  44. IRepository<ReferenceRange, Guid> referenceRangeRepository,
  45. ReferenceRangeManager referenceRangeManager,
  46. RegisterCheckManager registerCheckManager,
  47. RegisterCheckItemManager registerCheckItemManager
  48. )
  49. {
  50. this._registerAsbitemRepository = registerAsbitemRepository;
  51. this._registerCheckRepository = registerCheckRepository;
  52. this._registerCheckItemRepository = registerCheckItemRepository;
  53. this._asbitemDetailRepository = asbitemDetailRepository;
  54. this._asbitemRepository = asbitemRepository;
  55. this._unitRepository = unitRepository;
  56. this._patientRegisterRepository = patientRegisterRepository;
  57. this._itemRepository = itemRepository;
  58. this._referenceRangeRepository = referenceRangeRepository;
  59. this._referenceRangeManager = referenceRangeManager;
  60. this._registerCheckManager = registerCheckManager;
  61. this._registerCheckItemManager = registerCheckItemManager;
  62. }
  63. /// <summary>
  64. /// 添加数据
  65. /// </summary>
  66. /// <param name="OrganizationUnitId">体检中心ID</param>
  67. /// <param name="ent">登记的组合项目</param>
  68. /// <param name="IsAutoMerger">是否需要自动合并</param>
  69. /// <returns></returns>
  70. public async Task<RegisterAsbitem> CreateAsync(Guid OrganizationUnitId, RegisterAsbitem ent, bool IsAutoMerger)
  71. {
  72. var IsregisterAsbitemEnt = await _registerAsbitemRepository.FirstOrDefaultAsync(m => m.PatientRegisterId == ent.PatientRegisterId && m.AsbitemId == ent.AsbitemId);
  73. if (IsregisterAsbitemEnt == null)
  74. {
  75. //添加check跟item数据
  76. #region 默认添加RegisterCheck数据
  77. RegisterCheck registerCheckEnt = new RegisterCheck
  78. {
  79. CheckRequestNo = await _registerCheckManager.CreateCheckRequestNo(OrganizationUnitId),
  80. CheckRequestPrintTimes = 0,
  81. CompleteFlag = RegisterCheckCompleteFlag.UnChecked,
  82. IsAudit = 'N',
  83. IsLock = 'N'
  84. };
  85. var registerCheckEnt_Res = await _registerCheckRepository.InsertAsync(registerCheckEnt, true);
  86. #endregion
  87. RegisterAsbitem entity = new RegisterAsbitem
  88. {
  89. Amount = ent.Amount,
  90. AsbitemId = ent.AsbitemId,
  91. ChargePrice = ent.ChargePrice,
  92. IsCharge = ent.IsCharge,
  93. LisRequestId = ent.LisRequestId,
  94. PatientRegisterId = ent.PatientRegisterId,
  95. PayTypeFlag = ent.PayTypeFlag,
  96. StandardPrice = ent.StandardPrice,
  97. GroupPackageId = ent.GroupPackageId,
  98. RegisterCheckId = registerCheckEnt_Res.Id
  99. };
  100. var registerAsbitemEnt_Res = await _registerAsbitemRepository.InsertAsync(entity, true);
  101. if (registerCheckEnt_Res != null)
  102. {
  103. #region 默认添加RegisterCheckItem数据 需要遍历Item
  104. // var itemList = await _asbitemDetailRepository.GetListAsync(m => m.AsbitemId == ent.AsbitemId);
  105. var asbitemDetailList = (await _asbitemDetailRepository.GetDbSetAsync()).Include(x => x.Item).Where(m => m.AsbitemId == ent.AsbitemId).ToList();
  106. List<RegisterCheckItem> registerCheckItemList = new List<RegisterCheckItem>();
  107. if (asbitemDetailList.Any())
  108. {
  109. var itemList = await _itemRepository.GetListAsync();
  110. var referenceRangeList = await _referenceRangeRepository.GetListAsync();
  111. var patientRegisterEnt = await _patientRegisterRepository.GetAsync(ent.PatientRegisterId);
  112. foreach (var item in asbitemDetailList)
  113. {
  114. //参考范围
  115. // var referenceRangeEnt = await _referenceRangeManager.GetReferenceRangeInSexAge(item.ItemId, ent.PatientRegisterId);
  116. var referenceRangeEnt = _referenceRangeManager.GetReferenceRangeInSexAgeTemp(referenceRangeList,
  117. itemList.Where(m => m.Id == item.ItemId).FirstOrDefault(),
  118. patientRegisterEnt.SexId,
  119. patientRegisterEnt.Age);
  120. string UnitName = "";
  121. if (item.Item.UnitId != null && item.Item.UnitId != Guid.Empty)
  122. {
  123. //单位
  124. var unitEnt = await _unitRepository.GetAsync(item.Item.UnitId.Value);
  125. if (unitEnt != null)
  126. {
  127. UnitName = unitEnt.DisplayName;
  128. }
  129. }
  130. RegisterCheckItem registerCheckItem = new RegisterCheckItem
  131. {
  132. ItemId = item.ItemId,
  133. RegisterCheckId = registerCheckEnt_Res.Id,
  134. ReferenceRangeValue = referenceRangeEnt == null ? "" : referenceRangeEnt.ReferenceRangeValue,
  135. CriticalRangeValue = referenceRangeEnt == null ? "" : referenceRangeEnt.CriticalRangeValue,
  136. Unit = UnitName
  137. };
  138. registerCheckItemList.Add(registerCheckItem);
  139. }
  140. await _registerCheckItemRepository.InsertManyAsync(registerCheckItemList);
  141. }
  142. else
  143. {
  144. var asbitemEntity = await _asbitemRepository.FindAsync(m => m.Id == ent.AsbitemId);
  145. if (asbitemEntity.IsCheck == 'Y')
  146. throw new UserFriendlyException($"{asbitemEntity.DisplayName}项目未包含明细项目");
  147. }
  148. #endregion
  149. }
  150. #region 数据登记完,自动合并 先判断自身组合项目能否合并 如果可以合并再去找当前登记下的组合项目是否有同项目类别的数据(并且判断这个组合项目是否为可以合并的)
  151. //是否需要自动合并
  152. if (IsAutoMerger)
  153. {
  154. var asbitemEnt = (await _asbitemRepository.GetDbSetAsync()).Include(x => x.ItemType).Where(m => m.Id == ent.AsbitemId).FirstOrDefault();
  155. if (asbitemEnt != null)
  156. {
  157. if (asbitemEnt.IsItemResultMerger == 'Y' && asbitemEnt.ItemType.IsMergeAsbitem == 'Y')
  158. {
  159. //可以合并
  160. //查询需要合并的数据
  161. var mergerRegisterAsbitemList = (await _registerAsbitemRepository.GetDbSetAsync()).Include(x => x.Asbitem).Include(x => x.Asbitem.ItemType)
  162. .Where(m => m.PatientRegisterId == ent.PatientRegisterId
  163. && m.Asbitem.IsItemResultMerger == 'Y'
  164. && m.Asbitem.ItemType.IsMergeAsbitem == 'Y'
  165. && m.Asbitem.ItemTypeId == asbitemEnt.ItemTypeId);
  166. //1就是本身
  167. if (mergerRegisterAsbitemList.Count() > 1)
  168. {
  169. //有需要合并的数据
  170. await MergeRegisterAsbitemAsync(mergerRegisterAsbitemList.Select(s => s.Id).ToList(), OrganizationUnitId);
  171. }
  172. }
  173. }
  174. }
  175. #endregion
  176. return registerAsbitemEnt_Res;
  177. }
  178. else
  179. {
  180. //重复
  181. return IsregisterAsbitemEnt;
  182. }
  183. }
  184. public async Task<List<RegisterAsbitem>>CreateManyAsync(PatientRegister patientRegister, List<RegisterAsbitem> registerAsbitems)
  185. {
  186. if(patientRegister == null)
  187. {
  188. throw new UserFriendlyException("patientRegister不能为空");
  189. }
  190. foreach(var registerAsbitem in registerAsbitems)
  191. {
  192. registerAsbitem.PatientRegisterId = patientRegister.Id;
  193. if(registerAsbitem.StandardPrice < 0)
  194. {
  195. throw new UserFriendlyException("标准价格不能小于0");
  196. }
  197. if (registerAsbitem.ChargePrice < 0)
  198. {
  199. throw new UserFriendlyException("实收价格不能小于0");
  200. }
  201. if (registerAsbitem.Amount < 1)
  202. {
  203. throw new UserFriendlyException("数量不能小于1");
  204. }
  205. DataHelper.CheckCharIsYOrN(registerAsbitem.IsCharge,"是否已收费");
  206. if(registerAsbitem.PayTypeFlag != PayTypeFlag.OrgPay &&
  207. registerAsbitem.PayTypeFlag != PayTypeFlag.PersonPay &&
  208. registerAsbitem.PayTypeFlag != PayTypeFlag.Free)
  209. {
  210. throw new UserFriendlyException("支付方式类别不存在");
  211. }
  212. }
  213. return new List<RegisterAsbitem>();
  214. }
  215. /// <summary>
  216. /// 删除数据 判断条件(1.只能删除未收费的 2.已完成体检的不能删除)
  217. /// </summary>
  218. /// <param name="RegisterAsbitemId"></param>
  219. /// <returns></returns>
  220. public async Task DeleteAsync(Guid RegisterAsbitemId)
  221. {
  222. var registerAsbitemEnt = await _registerAsbitemRepository.GetAsync(RegisterAsbitemId);
  223. if (registerAsbitemEnt == null)
  224. throw new UserFriendlyException($"数据有误");
  225. if (registerAsbitemEnt.IsCharge == 'Y')
  226. throw new UserFriendlyException($"当前体检项目已收费,不能删除");
  227. var registerCheckEnt = await _registerCheckRepository.GetAsync(m => m.Id == registerAsbitemEnt.RegisterCheckId);
  228. if (registerCheckEnt != null && registerCheckEnt.CompleteFlag == RegisterCheckCompleteFlag.Checked)
  229. throw new UserFriendlyException($"当前体检项目已完成,不能删除");
  230. await _registerAsbitemRepository.DeleteAsync(registerAsbitemEnt);
  231. }
  232. /// <summary>
  233. /// 删除数据 判断条件(1.只能删除未收费的 2.已完成体检的不能删除)
  234. /// </summary>
  235. /// <param name="RegisterAsbitemId"></param>
  236. /// <returns></returns>
  237. public async Task DeleteManyAsync(List<Guid> RegisterAsbitemIds)
  238. {
  239. foreach (var RegisterAsbitemId in RegisterAsbitemIds)
  240. {
  241. await DeleteAsync(RegisterAsbitemId);
  242. }
  243. }
  244. /// <summary>
  245. /// 更新
  246. /// </summary>
  247. /// <param name="sourceEntity">dto</param>
  248. /// <param name="targetEntity">需要更新的目标实体</param>
  249. /// <returns></returns>
  250. public void UpdateAsync(RegisterAsbitem sourceEntity, RegisterAsbitem targetEntity)
  251. {
  252. if (sourceEntity.ChargePrice != null)
  253. targetEntity.ChargePrice = sourceEntity.ChargePrice;
  254. if (sourceEntity.Amount != null)
  255. targetEntity.Amount = sourceEntity.Amount;
  256. if (sourceEntity.IsCharge != null)
  257. targetEntity.IsCharge = sourceEntity.IsCharge;
  258. if (sourceEntity.PayTypeFlag != null)
  259. targetEntity.PayTypeFlag = sourceEntity.PayTypeFlag;
  260. targetEntity.GroupPackageId = sourceEntity.GroupPackageId;
  261. }
  262. ///// <summary>
  263. ///// 更新Check表下的参考范围信息
  264. ///// </summary>
  265. ///// <param name="PatientRegisterId"></param>
  266. //public async Task UpdateCheckReferenceRange(Guid PatientRegisterId)
  267. //{
  268. // var entlist = (await _registerCheckItemRepository.GetDbSetAsync())
  269. // .Include(x => x.RegisterCheck)
  270. // .Include(x => x.RegisterCheck.RegisterAsbitems)
  271. // .ThenInclude(x => x.PatientRegister)
  272. // .Where(m => m.RegisterCheck.RegisterAsbitems.FirstOrDefault().PatientRegisterId == PatientRegisterId).ToList();
  273. // var itemList = await _itemRepository.GetListAsync();
  274. // var referenceRangeList = await _referenceRangeRepository.GetListAsync();
  275. // foreach (var ent in entlist)
  276. // {
  277. // // var referenceRangeEnt = await _referenceRangeManager.GetReferenceRangeInSexAge(ent.ItemId, PatientRegisterId); //根据新的条件获取参考范围
  278. // var referenceRangeEnt = _referenceRangeManager.GetReferenceRangeInSexAgeTemp(referenceRangeList,
  279. // itemList.Where(m => m.Id == ent.ItemId).FirstOrDefault(),
  280. // ent.RegisterCheck.RegisterAsbitems.FirstOrDefault().PatientRegister.SexId,
  281. // ent.RegisterCheck.RegisterAsbitems.FirstOrDefault().PatientRegister.Age); //根据新的条件获取参考范围
  282. // ent.ReferenceRangeValue = referenceRangeEnt == null ? "" : referenceRangeEnt.ReferenceRangeValue;
  283. // ent.CriticalRangeValue = referenceRangeEnt == null ? "" : referenceRangeEnt.CriticalRangeValue;
  284. // }
  285. // await _registerCheckItemRepository.UpdateManyAsync(entlist);
  286. //}
  287. /// <summary>
  288. /// 更新Check表下的参考范围信息
  289. /// </summary>
  290. /// <param name="PatientRegisterId"></param>
  291. public async Task UpdateCheckReferenceRange(Guid PatientRegisterId)
  292. {
  293. var entlist = (await _registerCheckItemRepository.GetDbSetAsync())
  294. .Include(x => x.RegisterCheck)
  295. .Include(x => x.RegisterCheck.RegisterAsbitems)
  296. .ThenInclude(x => x.PatientRegister)
  297. .Where(m => m.RegisterCheck.RegisterAsbitems.FirstOrDefault().PatientRegisterId == PatientRegisterId).ToList();
  298. var itemList = await _itemRepository.GetListAsync();
  299. var referenceRangeList = await _referenceRangeRepository.GetListAsync();
  300. foreach (var ent in entlist)
  301. {
  302. // var referenceRangeEnt = await _referenceRangeManager.GetReferenceRangeInSexAge(ent.ItemId, PatientRegisterId); //根据新的条件获取参考范围
  303. var referenceRangeEnt = _referenceRangeManager.GetReferenceRangeInSexAgeTemp(referenceRangeList,
  304. itemList.Where(m => m.Id == ent.ItemId).FirstOrDefault(),
  305. ent.RegisterCheck.RegisterAsbitems.FirstOrDefault().PatientRegister.SexId,
  306. ent.RegisterCheck.RegisterAsbitems.FirstOrDefault().PatientRegister.Age); //根据新的条件获取参考范围
  307. ent.ReferenceRangeValue = referenceRangeEnt == null ? "" : referenceRangeEnt.ReferenceRangeValue;
  308. ent.CriticalRangeValue = referenceRangeEnt == null ? "" : referenceRangeEnt.CriticalRangeValue;
  309. }
  310. await _registerCheckItemRepository.UpdateManyAsync(entlist);
  311. }
  312. /// <summary>
  313. /// 合并组合项目
  314. /// </summary>
  315. /// <param name="RegisterAsbitemIds"></param>
  316. /// <param name="OrganizationUnitId">体检中心ID</param>
  317. /// <returns></returns>
  318. public async Task MergeRegisterAsbitemAsync(List<Guid> RegisterAsbitemIds, Guid OrganizationUnitId)
  319. {
  320. //原有项目
  321. var registerAsbitemList = await _registerAsbitemRepository.GetListAsync(m => RegisterAsbitemIds.Contains(m.Id));
  322. //待删除RegisterCheck
  323. List<Guid> RegisterCheckIds = registerAsbitemList.GroupBy(g => g.RegisterCheckId.Value).Select(s => s.Key).ToList();
  324. //删除registerCheckItem
  325. await _registerCheckItemManager.CheckAndDeleteAsync(RegisterCheckIds);
  326. //删除registerCheck
  327. await _registerCheckManager.CheckAndDeleteAsync(RegisterCheckIds);
  328. #region 重新插入一个新的registerCheck
  329. //添加check跟item数据
  330. #region 默认添加RegisterCheck数据
  331. RegisterCheck registerCheckEnt = new RegisterCheck
  332. {
  333. CheckRequestNo = await _registerCheckManager.CreateCheckRequestNo(OrganizationUnitId),
  334. CheckRequestPrintTimes = 0,
  335. CompleteFlag = RegisterCheckCompleteFlag.UnChecked,
  336. IsAudit = 'N',
  337. IsLock = 'N'
  338. };
  339. var registerCheckEnt_Res = await _registerCheckRepository.InsertAsync(registerCheckEnt, true);
  340. #endregion
  341. if (registerCheckEnt_Res != null)
  342. {
  343. #region 默认添加RegisterCheckItem数据 需要遍历Item
  344. // var itemList = await _asbitemDetailRepository.GetListAsync(m => m.AsbitemId == ent.AsbitemId);
  345. var asbitemDetailList = (await _asbitemDetailRepository.GetDbSetAsync()).Include(x => x.Item).Where(m => registerAsbitemList.Select(s => s.AsbitemId).Contains(m.AsbitemId)).ToList();
  346. List<RegisterCheckItem> registerCheckItemList = new List<RegisterCheckItem>();
  347. if (asbitemDetailList.Any())
  348. {
  349. var itemList = await _itemRepository.GetListAsync();
  350. var referenceRangeList = await _referenceRangeRepository.GetListAsync();
  351. var patientRegisterEnt = await _patientRegisterRepository.GetAsync(registerAsbitemList.FirstOrDefault().PatientRegisterId);
  352. foreach (var item in asbitemDetailList)
  353. {
  354. //参考范围
  355. // var referenceRangeEnt = await _referenceRangeManager.GetReferenceRangeInSexAge(item.ItemId, ent.PatientRegisterId);
  356. var referenceRangeEnt = _referenceRangeManager.GetReferenceRangeInSexAgeTemp(referenceRangeList,
  357. itemList.Where(m => m.Id == item.ItemId).FirstOrDefault(),
  358. patientRegisterEnt.SexId,
  359. patientRegisterEnt.Age);
  360. string UnitName = "";
  361. if (item.Item.UnitId != null && item.Item.UnitId != Guid.Empty)
  362. {
  363. //单位
  364. var unitEnt = await _unitRepository.GetAsync(item.Item.UnitId.Value);
  365. if (unitEnt != null)
  366. {
  367. UnitName = unitEnt.DisplayName;
  368. }
  369. }
  370. RegisterCheckItem registerCheckItem = new RegisterCheckItem
  371. {
  372. ItemId = item.ItemId,
  373. RegisterCheckId = registerCheckEnt_Res.Id,
  374. ReferenceRangeValue = referenceRangeEnt == null ? "" : referenceRangeEnt.ReferenceRangeValue,
  375. CriticalRangeValue = referenceRangeEnt == null ? "" : referenceRangeEnt.CriticalRangeValue,
  376. Unit = UnitName
  377. };
  378. //去重
  379. if (!registerCheckItemList.Any() || (registerCheckItemList.Any() && registerCheckItemList.Where(m => m.ItemId == registerCheckItem.ItemId).Count() == 0))
  380. registerCheckItemList.Add(registerCheckItem);
  381. }
  382. await _registerCheckItemRepository.InsertManyAsync(registerCheckItemList);
  383. }
  384. #endregion
  385. registerAsbitemList.ForEach(registerAsbitem => registerAsbitem.RegisterCheckId = registerCheckEnt_Res.Id);
  386. }
  387. #endregion
  388. }
  389. /// <summary>
  390. /// 取消合并组合项目 按RegisterAsbitemId重新生成新的RegisterCheck数据
  391. /// </summary>
  392. /// <param name="RegisterAsbitemIds"></param>
  393. /// <param name="OrganizationUnitId">体检中心ID</param>
  394. /// <returns></returns>
  395. public async Task CancelMergeRegisterAsbitemAsync(List<Guid> RegisterAsbitemIds, Guid RegisterCheckId, Guid OrganizationUnitId)
  396. {
  397. //原有项目
  398. var registerAsbitemList = await _registerAsbitemRepository.GetListAsync(m => RegisterAsbitemIds.Contains(m.Id));
  399. //待删除RegisterCheck
  400. List<Guid> RegisterCheckIds = new List<Guid> { RegisterCheckId };
  401. //删除registerCheckItem
  402. await _registerCheckItemManager.CheckAndDeleteAsync(RegisterCheckIds);
  403. //删除registerCheck
  404. await _registerCheckManager.CheckAndDeleteAsync(RegisterCheckIds);
  405. #region 重新插入多个新的registerCheck
  406. foreach (var registerAsbitem in registerAsbitemList)
  407. {
  408. #region 默认添加RegisterCheck数据
  409. RegisterCheck registerCheckEnt = new RegisterCheck
  410. {
  411. CheckRequestNo = await _registerCheckManager.CreateCheckRequestNo(OrganizationUnitId),
  412. CheckRequestPrintTimes = 0,
  413. CompleteFlag = RegisterCheckCompleteFlag.UnChecked,
  414. IsAudit = 'N',
  415. IsLock = 'N'
  416. };
  417. var registerCheckEnt_Res = await _registerCheckRepository.InsertAsync(registerCheckEnt, true);
  418. if (registerCheckEnt_Res != null)
  419. {
  420. #region 默认添加RegisterCheckItem数据 需要遍历Item
  421. // var itemList = await _asbitemDetailRepository.GetListAsync(m => m.AsbitemId == ent.AsbitemId);
  422. var asbitemDetailList = (await _asbitemDetailRepository.GetDbSetAsync()).Include(x => x.Item).Where(m => m.AsbitemId == registerAsbitem.AsbitemId).ToList();
  423. List<RegisterCheckItem> registerCheckItemList = new List<RegisterCheckItem>();
  424. if (asbitemDetailList.Any())
  425. {
  426. var itemList = await _itemRepository.GetListAsync();
  427. var referenceRangeList = await _referenceRangeRepository.GetListAsync();
  428. var patientRegisterEnt = await _patientRegisterRepository.GetAsync(registerAsbitemList.FirstOrDefault().PatientRegisterId);
  429. foreach (var item in asbitemDetailList)
  430. {
  431. //参考范围
  432. // var referenceRangeEnt = await _referenceRangeManager.GetReferenceRangeInSexAge(item.ItemId, ent.PatientRegisterId);
  433. var referenceRangeEnt = _referenceRangeManager.GetReferenceRangeInSexAgeTemp(referenceRangeList,
  434. itemList.Where(m => m.Id == item.ItemId).FirstOrDefault(),
  435. patientRegisterEnt.SexId,
  436. patientRegisterEnt.Age);
  437. string UnitName = "";
  438. if (item.Item.UnitId != null && item.Item.UnitId != Guid.Empty)
  439. {
  440. //单位
  441. var unitEnt = await _unitRepository.GetAsync(item.Item.UnitId.Value);
  442. if (unitEnt != null)
  443. {
  444. UnitName = unitEnt.DisplayName;
  445. }
  446. }
  447. RegisterCheckItem registerCheckItem = new RegisterCheckItem
  448. {
  449. ItemId = item.ItemId,
  450. RegisterCheckId = registerCheckEnt_Res.Id,
  451. ReferenceRangeValue = referenceRangeEnt == null ? "" : referenceRangeEnt.ReferenceRangeValue,
  452. CriticalRangeValue = referenceRangeEnt == null ? "" : referenceRangeEnt.CriticalRangeValue,
  453. Unit = UnitName
  454. };
  455. registerCheckItemList.Add(registerCheckItem);
  456. }
  457. await _registerCheckItemRepository.InsertManyAsync(registerCheckItemList);
  458. }
  459. #endregion
  460. registerAsbitem.RegisterCheckId = registerCheckEnt_Res.Id;
  461. }
  462. #endregion
  463. }
  464. #endregion
  465. //更新RegisterAsbitem表RegisterCheckId
  466. await _registerAsbitemRepository.UpdateManyAsync(registerAsbitemList);
  467. }
  468. /// <summary>
  469. /// 检查是否能删除、合并、取消合并
  470. /// </summary>
  471. /// <param name="RegisterAsbitemId"></param>
  472. /// <returns></returns>
  473. /// <exception cref="UserFriendlyException"></exception>
  474. public async Task CheckIsDelete(Guid RegisterAsbitemId)
  475. {
  476. var registerAsbitemEnt = await _registerAsbitemRepository.GetAsync(RegisterAsbitemId);
  477. if (registerAsbitemEnt == null)
  478. throw new UserFriendlyException($"数据有误");
  479. if (registerAsbitemEnt.IsCharge == 'Y')
  480. throw new UserFriendlyException($"当前体检项目已收费,不能操作");
  481. var registerCheckEnt = await _registerCheckRepository.GetAsync(m => m.Id == registerAsbitemEnt.RegisterCheckId);
  482. if (registerCheckEnt != null && (registerCheckEnt.CompleteFlag == RegisterCheckCompleteFlag.Checked || registerCheckEnt.CompleteFlag == RegisterCheckCompleteFlag.GiveUpChecked))
  483. throw new UserFriendlyException($"当前体检项目已完成或者已弃检,不能操作");
  484. }
  485. /// <summary>
  486. /// 检查是否在一个项目类别下
  487. /// </summary>
  488. /// <param name="RegisterAsbitemId"></param>
  489. /// <returns></returns>
  490. /// <exception cref="UserFriendlyException"></exception>
  491. public async Task CheckIsItemType(List<Guid> RegisterAsbitemIds)
  492. {
  493. var query = from a in await _registerAsbitemRepository.GetQueryableAsync()
  494. join b in await _asbitemRepository.GetQueryableAsync() on a.AsbitemId equals b.Id
  495. where RegisterAsbitemIds.Contains(a.Id)
  496. group b by b.ItemTypeId;
  497. var itemTypeCount = query.Count();
  498. if (itemTypeCount > 1)
  499. {
  500. throw new UserFriendlyException($"合并的项目不在一个项目类别内");
  501. }
  502. }
  503. }
  504. }