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.

574 lines
33 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. using Microsoft.AspNetCore.Authorization;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Shentun.WebPeis.AppointRegisterAsbitems;
  4. using Shentun.WebPeis.CustomerOrgs;
  5. using Shentun.WebPeis.Enums;
  6. using Shentun.WebPeis.MedicalPackages;
  7. using Shentun.WebPeis.Models;
  8. using Shentun.WebPeis.OrganizationUnits;
  9. using Shentun.WebPeis.PatientRegisters;
  10. using Shentun.WebPeis.Persons;
  11. using System;
  12. using System.Collections;
  13. using System.Collections.Generic;
  14. using System.Linq;
  15. using System.Text;
  16. using System.Threading.Tasks;
  17. using Volo.Abp;
  18. using Volo.Abp.Application.Services;
  19. using Volo.Abp.Domain.Repositories;
  20. using Volo.Abp.Identity;
  21. using static Volo.Abp.Identity.Settings.IdentitySettingNames;
  22. namespace Shentun.WebPeis.AppointPatientRegisters
  23. {
  24. /// <summary>
  25. /// 微信预约
  26. /// </summary>
  27. [ApiExplorerSettings(GroupName = "Work")]
  28. [Authorize]
  29. public class AppointPatientRegisterAppService : ApplicationService
  30. {
  31. private readonly IRepository<AppointPatientRegister> _repository;
  32. private readonly IRepository<AppointRegisterAsbitem> _appointRegisterAsbitemRepository;
  33. private readonly IRepository<Person> _personRepository;
  34. private readonly IRepository<CustomerOrg> _customerOrgRepository;
  35. private readonly IRepository<IdentityUser> _identityUserRepository;
  36. private readonly IRepository<Asbitem> _asbitemRepository;
  37. private readonly IRepository<ItemType> _itemTypeRepository;
  38. private readonly IRepository<MedicalPackage> _medicalPackageRepository;
  39. private readonly IRepository<MedicalPackageDetail> _medicalPackageDetailRepository;
  40. private readonly IRepository<CustomerOrgGroup> _customerOrgGroupRepository;
  41. private readonly IRepository<CustomerOrgGroupDetail> _customerOrgGroupDetailRepository;
  42. private readonly CacheService _cacheService;
  43. private readonly AppointPatientRegisterManager _appointPatientRegisterManager;
  44. private readonly CustomerOrgManager _customerOrgManager;
  45. private readonly WebPeisOrganizationUnitManager _webPeisOrganizationUnitManager;
  46. private readonly IRepository<PatientRegister> _patientRegisterRepository;
  47. private readonly IRepository<Patient> _patientRepository;
  48. private readonly IRepository<RegisterCheck> _registerCheckRepository;
  49. private readonly IRepository<RegisterCheckAsbitem> _registerCheckAsbitemRepository;
  50. public AppointPatientRegisterAppService(IRepository<AppointPatientRegister> repository,
  51. CacheService cacheService,
  52. IRepository<ItemType> itemTypeRepository,
  53. AppointPatientRegisterManager appointPatientRegisterManager,
  54. IRepository<AppointRegisterAsbitem> appointRegisterAsbitemRepository,
  55. IRepository<Person> personRepository,
  56. IRepository<IdentityUser> identityUserRepository,
  57. CustomerOrgManager customerOrgManager,
  58. IRepository<MedicalPackage> medicalPackageRepository,
  59. IRepository<CustomerOrgGroup> customerOrgGroupRepository,
  60. IRepository<Asbitem> asbitemRepository,
  61. IRepository<CustomerOrg> customerOrgRepository,
  62. IRepository<MedicalPackageDetail> medicalPackageDetailRepository,
  63. IRepository<CustomerOrgGroupDetail> customerOrgGroupDetailRepository,
  64. WebPeisOrganizationUnitManager webPeisOrganizationUnitManager,
  65. IRepository<PatientRegister> patientRegisterRepository,
  66. IRepository<Patient> patientRepository,
  67. IRepository<RegisterCheck> registerCheckRepository,
  68. IRepository<RegisterCheckAsbitem> registerCheckAsbitemRepository
  69. )
  70. {
  71. _repository = repository;
  72. _cacheService = cacheService;
  73. _itemTypeRepository = itemTypeRepository;
  74. _appointPatientRegisterManager = appointPatientRegisterManager;
  75. _appointRegisterAsbitemRepository = appointRegisterAsbitemRepository;
  76. _personRepository = personRepository;
  77. _identityUserRepository = identityUserRepository;
  78. _customerOrgManager = customerOrgManager;
  79. _medicalPackageRepository = medicalPackageRepository;
  80. _customerOrgGroupRepository = customerOrgGroupRepository;
  81. _asbitemRepository = asbitemRepository;
  82. _customerOrgRepository = customerOrgRepository;
  83. _medicalPackageDetailRepository = medicalPackageDetailRepository;
  84. _customerOrgGroupDetailRepository = customerOrgGroupDetailRepository;
  85. _webPeisOrganizationUnitManager = webPeisOrganizationUnitManager;
  86. _patientRegisterRepository = patientRegisterRepository;
  87. _patientRepository = patientRepository;
  88. _registerCheckAsbitemRepository = registerCheckAsbitemRepository;
  89. _registerCheckRepository = registerCheckRepository;
  90. }
  91. /// <summary>
  92. /// 预约,小程序使用
  93. /// </summary>
  94. /// <param name="input"></param>
  95. /// <returns></returns>
  96. /// <exception cref="UserFriendlyException"></exception>
  97. [HttpPost("api/app/AppointPatientRegister/Create")]
  98. public async Task<AppointPatientRegisterDto> CreateAsync(CreateAppointPatientRegisterDto input)
  99. {
  100. var entity = ObjectMapper.Map<CreateAppointPatientRegisterDto, AppointPatientRegister>(input);
  101. var asbitems = ObjectMapper.Map<List<CreateAppointRegisterAsbitemDto>, List<AppointRegisterAsbitem>>(input.Asbitems);
  102. entity.AppointRegisterAsbitems = asbitems;
  103. Guid medicalCenterId;
  104. if (input.MedicalCenterId == null || input.MedicalCenterId == Guid.Empty)
  105. {
  106. var webPeisOrganizationUnit = await _webPeisOrganizationUnitManager.GetMedicalCenterListAsync();
  107. if (webPeisOrganizationUnit.Count > 1 || webPeisOrganizationUnit.Count == 0)
  108. {
  109. throw new UserFriendlyException("体检中心参数不能为空");
  110. }
  111. medicalCenterId = webPeisOrganizationUnit.First().Id;
  112. }
  113. else
  114. {
  115. medicalCenterId = (Guid)input.MedicalCenterId;
  116. }
  117. entity.MedicalCenterId = medicalCenterId;
  118. entity = await _appointPatientRegisterManager.CreateAsync(entity);
  119. await _repository.InsertAsync(entity);
  120. var result = ObjectMapper.Map<AppointPatientRegister, AppointPatientRegisterDto>(entity);
  121. return result;
  122. }
  123. /// <summary>
  124. /// 通过手机号等获取预约列表信息,体检程序前台登记使用
  125. /// </summary>
  126. /// <param name="input"></param>
  127. /// <returns></returns>
  128. /// <exception cref="UserFriendlyException"></exception>
  129. [AllowAnonymous]
  130. [HttpPost("api/app/AppointPatientRegister/GetListByFilter")]
  131. public async Task<List<AppointPatientRegisterDto>> GetListByFilterAsync(AppointPatientRegisterInputDto input)
  132. {
  133. if (input == null) throw new UserFriendlyException("参数不能为空");
  134. Guid medicalCenterId;
  135. if (input.MedicalCenterId == null || input.MedicalCenterId == Guid.Empty)
  136. {
  137. var webPeisOrganizationUnit = await _webPeisOrganizationUnitManager.GetMedicalCenterListAsync();
  138. if (webPeisOrganizationUnit.Count > 1 || webPeisOrganizationUnit.Count == 0)
  139. {
  140. throw new UserFriendlyException("体检中心参数不能为空");
  141. }
  142. medicalCenterId = webPeisOrganizationUnit.First().Id;
  143. }
  144. else
  145. {
  146. medicalCenterId = (Guid)input.MedicalCenterId;
  147. }
  148. if (input.AppointStartDate == null)
  149. {
  150. input.AppointStartDate = DateTime.Now.Date;
  151. }
  152. else
  153. {
  154. input.AppointStartDate = ((DateTime)input.AppointStartDate).Date;
  155. }
  156. if (input.AppointStopDate == null)
  157. {
  158. input.AppointStopDate = DateTime.Now.Date.AddDays(3650);
  159. }
  160. else
  161. {
  162. input.AppointStopDate = ((DateTime)input.AppointStopDate).Date.AddDays(1);
  163. }
  164. if (string.IsNullOrWhiteSpace(input.MobilePhone) && string.IsNullOrWhiteSpace(input.IdNo))
  165. {
  166. throw new UserFriendlyException("手机号和身份证必须至少填一个");
  167. }
  168. var query = (from user in await _identityUserRepository.GetQueryableAsync()
  169. join person in await _personRepository.GetQueryableAsync()
  170. on user.Id equals person.PersonId
  171. join appointPatientRegister in await _repository.GetQueryableAsync()
  172. on person.PersonId equals appointPatientRegister.PersonId
  173. join medicalPackage in await _medicalPackageRepository.GetQueryableAsync()
  174. on appointPatientRegister.MedicalPackageId equals medicalPackage.MedicalPackageId into canEmptyMedicalPackage
  175. from haveMedicalPackage in canEmptyMedicalPackage.DefaultIfEmpty()
  176. join customerOrgGroup in await _customerOrgGroupRepository.GetQueryableAsync()
  177. on appointPatientRegister.CustomerOrgGroupId equals customerOrgGroup.CustomerOrgGroupId into canEmptyCustomerOrgGroup
  178. from haveCustomerOrgGroup in canEmptyCustomerOrgGroup.DefaultIfEmpty()
  179. join appointRegisterAsbitem in await _appointRegisterAsbitemRepository.GetQueryableAsync()
  180. on appointPatientRegister.AppointPatientRegisterId equals appointRegisterAsbitem.AppointPatientRegisterId
  181. join asbitem in await _asbitemRepository.GetQueryableAsync()
  182. on appointRegisterAsbitem.AsbitemId equals asbitem.AsbitemId
  183. join customerOrg in await _customerOrgRepository.GetQueryableAsync()
  184. on appointPatientRegister.CustomerOrgId equals customerOrg.CustomerOrgId
  185. where appointPatientRegister.MedicalCenterId == medicalCenterId &&
  186. appointPatientRegister.AppointDate >= input.AppointStartDate &&
  187. appointPatientRegister.AppointDate < input.AppointStopDate
  188. orderby appointPatientRegister.AppointDate
  189. select new
  190. {
  191. user,
  192. person,
  193. appointPatientRegister,
  194. appointRegisterAsbitem,
  195. asbitem,
  196. haveMedicalPackage,
  197. haveCustomerOrgGroup,
  198. customerOrg
  199. }
  200. );
  201. if (!string.IsNullOrWhiteSpace(input.IdNo))
  202. {
  203. if (input.IdNo.Length != 18)
  204. {
  205. throw new UserFriendlyException("身份证长度必须是18位");
  206. }
  207. query = query.Where(o => o.person.IdNo == input.IdNo);
  208. }
  209. else
  210. {
  211. if (input.MobilePhone.Length != 11)
  212. {
  213. throw new UserFriendlyException("手机号长度必须是11位");
  214. }
  215. query = query.Where(o => o.user.PhoneNumber == input.MobilePhone);
  216. }
  217. if(input.CompleteFlag != null)
  218. {
  219. query = query.Where(o => o.appointPatientRegister.CompleteFlag == input.CompleteFlag);
  220. }
  221. var appointPatientRegisterDtos = query.ToList();
  222. var list = appointPatientRegisterDtos.GroupBy(o => o.appointPatientRegister)
  223. .Select(o => new AppointPatientRegisterDto()
  224. {
  225. AppointPatientRegisterId = o.FirstOrDefault().appointPatientRegister.AppointPatientRegisterId,
  226. PersonId = o.FirstOrDefault().appointPatientRegister.PersonId,
  227. PersonName = o.FirstOrDefault().user.Name,
  228. IdNo = o.FirstOrDefault().person.IdNo,
  229. MobileTelephone = o.FirstOrDefault().user.PhoneNumber,
  230. SexId = o.FirstOrDefault().person.SexId,
  231. MaritalStatusId = o.FirstOrDefault().person.MaritalStatusId,
  232. CustomerOrgId = o.FirstOrDefault().appointPatientRegister.CustomerOrgId,
  233. ChildCustomerOrgName = o.FirstOrDefault().customerOrg.PathCode.Length == 5 ? "" : o.FirstOrDefault().customerOrg.CustomerOrgName,
  234. CustomerOrgGroupId = o.FirstOrDefault().appointPatientRegister.CustomerOrgGroupId,
  235. CustomerOrgGroupName = o.FirstOrDefault().haveCustomerOrgGroup == null ? "" : o.FirstOrDefault().haveCustomerOrgGroup.CustomerOrgGroupName,
  236. CustomerOrgRegisterId = o.FirstOrDefault().appointPatientRegister.CustomerOrgRegisterId,
  237. MedicalPackageId = o.FirstOrDefault().appointPatientRegister.MedicalPackageId,
  238. MedicalPackageName = o.FirstOrDefault().haveMedicalPackage == null ? "" : o.FirstOrDefault().haveMedicalPackage.MedicalPackageName,
  239. MedicalCenterId = o.FirstOrDefault().appointPatientRegister.MedicalCenterId,
  240. CompleteFlag = o.FirstOrDefault().appointPatientRegister.CompleteFlag,
  241. IsCharge = o.FirstOrDefault().appointPatientRegister.IsCharge,
  242. AppointDate = o.FirstOrDefault().appointPatientRegister.AppointDate,
  243. Remark = o.FirstOrDefault().appointPatientRegister.Remark,
  244. PregnantFlag = o.FirstOrDefault().appointPatientRegister.PregnantFlag,
  245. Height = o.FirstOrDefault().appointPatientRegister.Height,
  246. Weight = o.FirstOrDefault().appointPatientRegister.Weight,
  247. SexName = _cacheService.GetSexNameAsync(o.FirstOrDefault().person.SexId).Result,
  248. MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(o.FirstOrDefault().person.MaritalStatusId).Result,
  249. CustomerOrgName = _customerOrgManager.GetTopCustomerOrgAsync(o.FirstOrDefault().appointPatientRegister.CustomerOrgId).Result.CustomerOrgName
  250. }).ToList();
  251. return list;
  252. }
  253. /// <summary>
  254. /// 获取某人的预约列表,小程序使用
  255. /// </summary>
  256. /// <param name="input"></param>
  257. /// <returns></returns>
  258. /// <exception cref="UserFriendlyException"></exception>
  259. [HttpPost("api/app/AppointPatientRegister/GetListByPersonId")]
  260. public async Task<List<AppointPatientRegisterDto>> GetListByPersonIdAsync(PersonIdInputDto input)
  261. {
  262. if (input == null) throw new UserFriendlyException("参数不能为空");
  263. var query = (from user in await _identityUserRepository.GetQueryableAsync()
  264. join person in await _personRepository.GetQueryableAsync()
  265. on user.Id equals person.PersonId
  266. join appointPatientRegister in await _repository.GetQueryableAsync()
  267. on person.PersonId equals appointPatientRegister.PersonId
  268. join medicalPackage in await _medicalPackageRepository.GetQueryableAsync()
  269. on appointPatientRegister.MedicalPackageId equals medicalPackage.MedicalPackageId into canEmptyMedicalPackage
  270. from haveMedicalPackage in canEmptyMedicalPackage.DefaultIfEmpty()
  271. join customerOrgGroup in await _customerOrgGroupRepository.GetQueryableAsync()
  272. on appointPatientRegister.CustomerOrgGroupId equals customerOrgGroup.CustomerOrgGroupId into canEmptyCustomerOrgGroup
  273. from haveCustomerOrgGroup in canEmptyCustomerOrgGroup.DefaultIfEmpty()
  274. join appointRegisterAsbitem in await _appointRegisterAsbitemRepository.GetQueryableAsync()
  275. on appointPatientRegister.AppointPatientRegisterId equals appointRegisterAsbitem.AppointPatientRegisterId
  276. join asbitem in await _asbitemRepository.GetQueryableAsync()
  277. on appointRegisterAsbitem.AsbitemId equals asbitem.AsbitemId
  278. join customerOrg in await _customerOrgRepository.GetQueryableAsync()
  279. on appointPatientRegister.CustomerOrgId equals customerOrg.CustomerOrgId
  280. where appointPatientRegister.PersonId == input.PersonId &&
  281. appointPatientRegister.CompleteFlag != AppointPatientRegisterCompleteFlag.CancelAppoint
  282. orderby appointPatientRegister.AppointDate
  283. select new
  284. {
  285. user,
  286. person,
  287. appointPatientRegister,
  288. appointRegisterAsbitem,
  289. asbitem,
  290. haveMedicalPackage,
  291. haveCustomerOrgGroup,
  292. customerOrg
  293. }
  294. );
  295. var appointPatientRegisterDtos = query.ToList();
  296. var list = appointPatientRegisterDtos.GroupBy(o => o.appointPatientRegister)
  297. .Select(o => new AppointPatientRegisterDto()
  298. {
  299. AppointPatientRegisterId = o.FirstOrDefault().appointPatientRegister.AppointPatientRegisterId,
  300. PersonId = o.FirstOrDefault().appointPatientRegister.PersonId,
  301. PersonName = o.FirstOrDefault().user.Name,
  302. IdNo = o.FirstOrDefault().person.IdNo,
  303. SexId = o.FirstOrDefault().person.SexId,
  304. MaritalStatusId = o.FirstOrDefault().person.MaritalStatusId,
  305. CustomerOrgId = o.FirstOrDefault().appointPatientRegister.CustomerOrgId,
  306. ChildCustomerOrgName = o.FirstOrDefault().customerOrg.PathCode.Length == 5 ? "" : o.FirstOrDefault().customerOrg.CustomerOrgName,
  307. CustomerOrgGroupId = o.FirstOrDefault().appointPatientRegister.CustomerOrgGroupId,
  308. CustomerOrgGroupName = o.FirstOrDefault().haveCustomerOrgGroup == null ? "" : o.FirstOrDefault().haveCustomerOrgGroup.CustomerOrgGroupName,
  309. CustomerOrgRegisterId = o.FirstOrDefault().appointPatientRegister.CustomerOrgRegisterId,
  310. MedicalPackageId = o.FirstOrDefault().appointPatientRegister.MedicalPackageId,
  311. MedicalPackageName = o.FirstOrDefault().haveMedicalPackage == null ? "" : o.FirstOrDefault().haveMedicalPackage.MedicalPackageName,
  312. MedicalCenterId = o.FirstOrDefault().appointPatientRegister.MedicalCenterId,
  313. CompleteFlag = o.FirstOrDefault().appointPatientRegister.CompleteFlag,
  314. AppointDate = o.FirstOrDefault().appointPatientRegister.AppointDate,
  315. Remark = o.FirstOrDefault().appointPatientRegister.Remark,
  316. PregnantFlag = o.FirstOrDefault().appointPatientRegister.PregnantFlag,
  317. Height = o.FirstOrDefault().appointPatientRegister.Height,
  318. Weight = o.FirstOrDefault().appointPatientRegister.Weight,
  319. SexName = _cacheService.GetSexNameAsync(o.FirstOrDefault().person.SexId).Result,
  320. MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(o.FirstOrDefault().person.MaritalStatusId).Result,
  321. CustomerOrgName = _customerOrgManager.GetTopCustomerOrgAsync(o.FirstOrDefault().appointPatientRegister.CustomerOrgId).Result.CustomerOrgName
  322. }).ToList();
  323. return list;
  324. }
  325. /// <summary>
  326. /// 取消预约
  327. /// </summary>
  328. /// <param name="input"></param>
  329. /// <returns></returns>
  330. /// <exception cref="UserFriendlyException"></exception>
  331. [HttpPost("api/app/AppointPatientRegister/CancelAppoint")]
  332. public async Task CancelAppointAsync(AppointPatientRegisterIdInputDto input)
  333. {
  334. var appointPatientRegister = await _repository.GetAsync(o => o.AppointPatientRegisterId == input.AppointPatientRegisterId);
  335. if(appointPatientRegister.IsCharge == 'Y')
  336. {
  337. throw new UserFriendlyException("已收费不能取消");
  338. }
  339. if (appointPatientRegister.CompleteFlag == AppointPatientRegisterCompleteFlag.Check)
  340. {
  341. throw new UserFriendlyException("已到检不能取消");
  342. }
  343. if (appointPatientRegister.CompleteFlag == AppointPatientRegisterCompleteFlag.CancelAppoint)
  344. {
  345. throw new UserFriendlyException("已取消预约不能重复取消");
  346. }
  347. appointPatientRegister.CompleteFlag = AppointPatientRegisterCompleteFlag.CancelAppoint;
  348. await _repository.UpdateAsync(appointPatientRegister);
  349. }
  350. /// <summary>
  351. /// 获取预约的组合项目
  352. /// </summary>
  353. /// <param name="input"></param>
  354. /// <returns></returns>
  355. [AllowAnonymous]
  356. [HttpPost("api/app/AppointPatientRegister/GetAppointRegisterAsbitemListById")]
  357. public async Task<List<AppointRegisterAsbitemDto>> GetAppointRegisterAsbitemListByIdAsync(AppointPatientRegisterIdInputDto input)
  358. {
  359. var appointPatientRegister = await _repository.GetAsync(o => o.AppointPatientRegisterId == input.AppointPatientRegisterId);
  360. var appointRegisterAsbitemDtos = (
  361. from appointRegisterAsbitem in await _appointRegisterAsbitemRepository.GetQueryableAsync()
  362. join asbitem in await _asbitemRepository.GetQueryableAsync()
  363. on appointRegisterAsbitem.AsbitemId equals asbitem.AsbitemId
  364. join itemType in await _itemTypeRepository.GetQueryableAsync()
  365. on asbitem.ItemTypeId equals itemType.ItemTypeId
  366. orderby appointPatientRegister.AppointDate
  367. where appointRegisterAsbitem.AppointPatientRegisterId == input.AppointPatientRegisterId
  368. select new AppointRegisterAsbitemDto()
  369. {
  370. AppointPatientRegisterId = input.AppointPatientRegisterId,
  371. AsbitemId = appointRegisterAsbitem.AsbitemId,
  372. AsbitemName = asbitem.AsbitemName,
  373. StandardPrice = appointRegisterAsbitem.StandardPrice,
  374. ChargePrice = appointRegisterAsbitem.ChargePrice,
  375. Amount = appointRegisterAsbitem.Amount,
  376. IsCharge = appointRegisterAsbitem.IsCharge,
  377. DisplayOrder = asbitem.DisplayOrder,
  378. ItemTypeId = itemType.ItemTypeId,
  379. ItemTypeName = itemType.ItemTypeName,
  380. ItemTypeDisplayOrder = itemType.DisplayOrder,
  381. PayTypeFlag = appointRegisterAsbitem.PayTypeFlag
  382. }
  383. ).ToList();
  384. List<Guid> asbitems = new List<Guid>();
  385. if (appointPatientRegister.MedicalPackageId != null)
  386. {
  387. asbitems = (await _medicalPackageDetailRepository.GetQueryableAsync())
  388. .Where(o => o.MedicalPackageId == appointPatientRegister.MedicalPackageId)
  389. .Select(x => x.AsbitemId).ToList();
  390. ;
  391. }
  392. else if (appointPatientRegister.CustomerOrgGroupId != null)
  393. {
  394. asbitems = (await _customerOrgGroupDetailRepository.GetQueryableAsync())
  395. .Where(o => o.CustomerOrgGroupId == appointPatientRegister.CustomerOrgGroupId)
  396. .Select(x => x.AsbitemId).ToList();
  397. }
  398. var itemTypes = await _itemTypeRepository.GetListAsync();
  399. appointRegisterAsbitemDtos.ForEach(o =>
  400. {
  401. if (asbitems.Where(x => x == o.AsbitemId).ToList().Any())
  402. {
  403. o.IsBelongGroupPackage = 'Y';
  404. }
  405. var itemType = itemTypes.Where(o => o.ItemTypeId == o.ItemTypeId).First();
  406. itemType = itemTypes.Where(o => o.PathCode == itemType.PathCode.Substring(0, 5)).First();
  407. o.ItemTypeId = itemType.ItemTypeId;
  408. o.ItemTypeDisplayOrder = itemType.DisplayOrder;
  409. });
  410. appointRegisterAsbitemDtos = appointRegisterAsbitemDtos.OrderBy(o => o.ItemTypeDisplayOrder)
  411. .OrderBy(o => o.DisplayOrder).ToList();
  412. return appointRegisterAsbitemDtos;
  413. }
  414. /// <summary>
  415. /// 获取单位预约病人
  416. /// </summary>
  417. /// <param name="input"></param>
  418. /// <returns></returns>
  419. [HttpPost("api/app/AppointPatientRegister/GetCustomerOrgAppointPatientRegisterByPersonId")]
  420. public async Task<PatientRegisterDto> GetCustomerOrgAppointPatientRegisterByPersonIdAsync(PersonIdInputDto input)
  421. {
  422. var patientRegisterDto = (from user in await _identityUserRepository.GetQueryableAsync()
  423. join person in await _personRepository.GetQueryableAsync()
  424. on user.Id equals person.PersonId
  425. join patient in await _patientRepository.GetQueryableAsync()
  426. on new { idNo = person.IdNo, phone = user.PhoneNumber } equals new { idNo = patient.IdNo, phone = patient.MobileTelephone }
  427. join patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  428. on patient.PatientId equals patientRegister.PatientId
  429. join customerOrg in await _customerOrgRepository.GetQueryableAsync()
  430. on patientRegister.CustomerOrgId equals customerOrg.CustomerOrgId
  431. join customerOrgGroup in await _customerOrgGroupRepository.GetQueryableAsync()
  432. on patientRegister.CustomerOrgGroupId equals customerOrgGroup.CustomerOrgGroupId into canEmptyCustomerOrgGroup
  433. from haveCustomerOrgGroup in canEmptyCustomerOrgGroup.DefaultIfEmpty()
  434. where user.Id == input.PersonId &&
  435. (patientRegister.CompleteFlag == PatientRegisterCompleteFlag.PreRegistration ||
  436. patientRegister.CompleteFlag == PatientRegisterCompleteFlag.Registration) &&
  437. patientRegister.MedicalStartDate >= DateTime.Now.Date.AddDays(-365)
  438. orderby patientRegister.MedicalStartDate descending
  439. select new PatientRegisterDto()
  440. {
  441. PatientRegisterId = patientRegister.PatientRegisterId,
  442. CustomerOrgId = customerOrg.CustomerOrgId,
  443. ChildCustomerOrgName = customerOrg.CustomerOrgName,
  444. CustomerOrgRegisterId = patientRegister.CustomerOrgRegisterId,
  445. CustomerOrgGroupId = patientRegister.CustomerOrgGroupId,
  446. CustomerOrgGroupName = haveCustomerOrgGroup == null?"": haveCustomerOrgGroup.CustomerOrgGroupName,
  447. Price = haveCustomerOrgGroup == null ? 0:haveCustomerOrgGroup.Price,
  448. CanAddMoney = haveCustomerOrgGroup == null ? 0 : haveCustomerOrgGroup.CanAddMoney,
  449. }).FirstOrDefault();
  450. if (patientRegisterDto == null)
  451. {
  452. return patientRegisterDto;
  453. }
  454. var customerOrgEntity = await _customerOrgRepository.GetAsync(o => o.CustomerOrgId == patientRegisterDto.CustomerOrgId);
  455. customerOrgEntity = await _customerOrgRepository.GetAsync(o => o.PathCode == customerOrgEntity.PathCode.Substring(0, 5));
  456. patientRegisterDto.CustomerOrgName = customerOrgEntity.CustomerOrgName;
  457. var appointPatientRegisters = await _repository.GetListAsync(o => o.PersonId == input.PersonId &&
  458. o.AppointDate >= DateTime.Now.Date && o.CustomerOrgRegisterId == patientRegisterDto.CustomerOrgRegisterId
  459. && o.CompleteFlag != AppointPatientRegisterCompleteFlag.CancelAppoint);
  460. if (appointPatientRegisters .Any())
  461. {
  462. throw new UserFriendlyException("已有今天及之后的团检预约订单,必须先取消订单才能重新预约");
  463. }
  464. return patientRegisterDto;
  465. }
  466. /// <summary>
  467. /// 获取团检中个人备案项目
  468. /// </summary>
  469. /// <param name="input"></param>
  470. /// <returns></returns>
  471. [HttpPost("api/app/AppointPatientRegister/GetCheckTypeWithAsbitemsListByPatientRegisterId")]
  472. public async Task<List<MedicalPackageCheckTypeWithAsbitemsDto>> GetCheckTypeWithAsbitemsListByPatientRegisterIdAsync(PatientRegisterIdInputDto input)
  473. {
  474. //获取团检个人所有组合项目
  475. var asbitems = (from registerCheck in await _registerCheckRepository.GetQueryableAsync()
  476. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
  477. on registerCheck.RegisterCheckId equals registerCheckAsbitem.RegisterCheckId
  478. join asbitem in await _asbitemRepository.GetQueryableAsync()
  479. on registerCheckAsbitem.AsbitemId equals asbitem.AsbitemId
  480. where registerCheck.PatientRegisterId == input.PatientRegisterId
  481. select new MedicalPackageAsbitem()
  482. {
  483. ItemTypeId = asbitem.ItemTypeId,
  484. AsbitemId = asbitem.AsbitemId,
  485. AsbitemName = asbitem.AsbitemName,
  486. ShortName = asbitem.ShortName,
  487. Price = asbitem.Price,
  488. ForSexId = asbitem.ForSexId,
  489. //ForSexName = _cacheService.GetForSexNameAsync(asbitem.ForSexId).Result,
  490. IsBeforeEat = asbitem.IsBeforeEat,
  491. ClinicalMeaning = asbitem.ClinicalMeaning,
  492. IsCheck = asbitem.IsCheck,
  493. Warn = asbitem.Warn,
  494. DiseaseScreeningTypeId = asbitem.DiseaseScreeningTypeId,
  495. SimpleCode = asbitem.SimpleCode,
  496. DisplayOrder = asbitem.DisplayOrder,
  497. }
  498. ).ToList();
  499. //获取检查分类
  500. var medicalPackageAsbitemDtos = new List<MedicalPackageCheckTypeWithAsbitemsDto>()
  501. {
  502. new MedicalPackageCheckTypeWithAsbitemsDto(){CheckTypeFlag = CheckTypeFlag.Regular,CheckTypeFlagName = "科室检查",DisplayOrder = 1},
  503. new MedicalPackageCheckTypeWithAsbitemsDto(){CheckTypeFlag = CheckTypeFlag.Laboratory,CheckTypeFlagName = "检验",DisplayOrder = 2},
  504. new MedicalPackageCheckTypeWithAsbitemsDto(){CheckTypeFlag =CheckTypeFlag.SpecialInspection,CheckTypeFlagName = "特检",DisplayOrder = 3},
  505. new MedicalPackageCheckTypeWithAsbitemsDto(){CheckTypeFlag = CheckTypeFlag.Radiology,CheckTypeFlagName = "放射",DisplayOrder = 4}
  506. };
  507. var itemTypes = await _itemTypeRepository.GetListAsync();
  508. foreach (var asbitem in asbitems)
  509. {
  510. asbitem.ForSexName = await _cacheService.GetForSexNameAsync(asbitem.ForSexId);
  511. var itemType = itemTypes.Where(o => o.ItemTypeId == asbitem.ItemTypeId).Single();
  512. if (itemType.PathCode.Length > 5)
  513. {
  514. itemType = itemTypes.Where(o => o.PathCode == itemType.PathCode.Substring(0, 5)).Single();
  515. asbitem.ItemTypeId = itemType.ItemTypeId;
  516. }
  517. asbitem.CheckTypeFlag = itemType.CheckTypeFlag;
  518. }
  519. //设置每个分类包含的组合项目
  520. foreach (var medicalPackageAsbitemDto in medicalPackageAsbitemDtos)
  521. {
  522. medicalPackageAsbitemDto.Asbitems = asbitems.Where(o => o.CheckTypeFlag == medicalPackageAsbitemDto.CheckTypeFlag).ToList();
  523. }
  524. return medicalPackageAsbitemDtos;
  525. }
  526. }
  527. }