using Cronos; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Shentun.Peis.CriticalFollowValues; using Shentun.Peis.CustomerOrgs; using Shentun.Peis.Enums; using Shentun.Peis.Models; using Shentun.Peis.PatientRegisters; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; using Volo.Abp.ObjectMapping; namespace Shentun.Peis.PhoneFollowUps { /// /// 电话随访记录 /// [ApiExplorerSettings(GroupName = "Work")] [Authorize] public class PhoneFollowUpAppService : ApplicationService { private readonly IRepository _phoneFollowUpRepository; private readonly CacheService _cacheService; private readonly IRepository _followUpRepository; private readonly IRepository _patientRegisterRepository; private readonly IRepository _registerCheckRepository; private readonly IRepository _registerCheckItemRepository; private readonly IRepository _registerCheckAsbitemRepository; private readonly IRepository _asbitemRepository; private readonly IRepository _itemRepository; private readonly IRepository _patientRepository; private readonly CustomerOrgManager _customerOrgManager; private readonly IRepository _registerCheckSummaryRepository; public PhoneFollowUpAppService( IRepository phoneFollowUpRepository, CacheService cacheService, IRepository followUpRepository, IRepository patientRegisterRepository, IRepository registerCheckRepository, IRepository registerCheckItemRepository, IRepository registerCheckAsbitemRepository, IRepository asbitemRepository, IRepository itemRepository, IRepository patientRepository, CustomerOrgManager customerOrgManager, IRepository registerCheckSummaryRepository) { _phoneFollowUpRepository = phoneFollowUpRepository; _cacheService = cacheService; _followUpRepository = followUpRepository; _patientRegisterRepository = patientRegisterRepository; _registerCheckRepository = registerCheckRepository; _registerCheckItemRepository = registerCheckItemRepository; _registerCheckAsbitemRepository = registerCheckAsbitemRepository; _asbitemRepository = asbitemRepository; _itemRepository = itemRepository; _patientRepository = patientRepository; _customerOrgManager = customerOrgManager; _registerCheckSummaryRepository = registerCheckSummaryRepository; } /// /// 获取电话随访记录信息 /// /// /// [HttpPost("api/app/PhoneFollowUp/Get")] public async Task GetAsync(PhoneFollowUpIdInputDto input) { var phoneFollowUpEnt = await _phoneFollowUpRepository.GetAsync(input.PhoneFollowUpId); var entityDto = ObjectMapper.Map(phoneFollowUpEnt); entityDto.CreatorName = await _cacheService.GetSurnameAsync(entityDto.CreatorId); entityDto.LastModifierName = await _cacheService.GetSurnameAsync(entityDto.LastModifierId); return entityDto; } /// /// 获取电话随访记录信息 /// /// /// [HttpPost("api/app/PhoneFollowUp/GetList")] public async Task> GetListAsync(PhoneFollowUpListInputDto input) { var query = from phoneFollowUp in await _phoneFollowUpRepository.GetQueryableAsync() join followUp in await _followUpRepository.GetQueryableAsync() on phoneFollowUp.FollowUpId equals followUp.Id join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on followUp.PatientRegisterId equals patientRegister.Id orderby patientRegister.Id, phoneFollowUp.PlanFollowDate select new { patientName = patientRegister.PatientName, phoneFollowUp }; if (input.FollowUpId != null) { query = query.Where(m => m.phoneFollowUp.FollowUpId == input.FollowUpId); } if (!string.IsNullOrWhiteSpace(input.KeyWord)) { query = query.Where(m => (!string.IsNullOrWhiteSpace(m.phoneFollowUp.FollowUpContent) && m.phoneFollowUp.FollowUpContent.Contains(input.KeyWord)) || (!string.IsNullOrWhiteSpace(m.phoneFollowUp.ReplyContent) && m.phoneFollowUp.ReplyContent.Contains(input.KeyWord)) ); } if (input.IsComplete != null) { query = query.Where(m => m.phoneFollowUp.IsComplete == input.IsComplete); } if (!string.IsNullOrWhiteSpace(input.StartDate) && !string.IsNullOrWhiteSpace(input.EndDate)) { query = query.Where(m => m.phoneFollowUp.PlanFollowDate >= Convert.ToDateTime(input.StartDate) && m.phoneFollowUp.PlanFollowDate <= Convert.ToDateTime(input.EndDate).AddDays(1)); } var entListDto = query.ToList().Select(s => new PhoneFollowUpWithPatientRegisterDto { FollowUpId = s.phoneFollowUp.FollowUpId, CreationTime = s.phoneFollowUp.CreationTime, ReplyContent = s.phoneFollowUp.ReplyContent, PlanFollowDate = DataHelper.ConversionDateToString(s.phoneFollowUp.PlanFollowDate), CreatorId = s.phoneFollowUp.CreatorId, FollowUpContent = s.phoneFollowUp.FollowUpContent, Id = s.phoneFollowUp.Id, IsComplete = s.phoneFollowUp.IsComplete, LastModificationTime = s.phoneFollowUp.LastModificationTime, LastModifierId = s.phoneFollowUp.LastModifierId, CreatorName = _cacheService.GetSurnameAsync(s.phoneFollowUp.CreatorId).GetAwaiter().GetResult(), LastModifierName = _cacheService.GetSurnameAsync(s.phoneFollowUp.LastModifierId).GetAwaiter().GetResult(), PatientName = s.patientName }).ToList(); return entListDto; } /// /// 获取所有危急值列表 /// /// [HttpPost("api/app/PhoneFollowUp/GetPatientRegisterCriticalList")] public async Task> GetPatientRegisterCriticalListAsync(GetPatientRegisterCriticalListInputDto input) { var query = from followUp in await _followUpRepository.GetQueryableAsync() join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on followUp.PatientRegisterId equals patientRegister.Id join patient in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals patient.Id join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id join registerCheckItem in await _registerCheckItemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckItem.RegisterCheckId join item in await _itemRepository.GetQueryableAsync() on registerCheckItem.ItemId equals item.Id join phoneFollowUp in await _phoneFollowUpRepository.GetQueryableAsync() on followUp.Id equals phoneFollowUp.FollowUpId into phoneFollowUpTemp from phoneFollowUpEmpty in phoneFollowUpTemp.DefaultIfEmpty() select new { patientRegister, registerCheck, asbitem, registerCheckItem, item, followUp, phoneFollowUpEmpty, patient }; #region 查询条件 if (!string.IsNullOrEmpty(input.PatientNo)) query = query.Where(m => m.patient.PatientNo == input.PatientNo); if (!string.IsNullOrEmpty(input.IdNo)) query = query.Where(m => m.patient.IdNo == input.IdNo); if (!string.IsNullOrEmpty(input.PatientName)) query = query.Where(m => m.patientRegister.PatientName == input.PatientName); if (!string.IsNullOrEmpty(input.PatientRegisterNo)) query = query.Where(m => m.patientRegister.PatientRegisterNo == input.PatientRegisterNo); if (!string.IsNullOrEmpty(input.Phone)) query = query.Where(m => m.patient.MobileTelephone == input.Phone || m.patient.Telephone == input.Phone); if (input.SexId != null && input.SexId != ForSexFlag.All) query = query.Where(m => m.patientRegister.SexId == input.SexId); if (!string.IsNullOrEmpty(input.StartDate) && !string.IsNullOrEmpty(input.EndDate)) { if (input.DateType == '1') { query = query.Where(m => m.patientRegister.CreationTime >= Convert.ToDateTime(input.StartDate) && m.patientRegister.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1)); } else if (input.DateType == '2') { query = query.Where(m => m.patientRegister.MedicalStartDate >= Convert.ToDateTime(input.StartDate) && m.patientRegister.MedicalStartDate < Convert.ToDateTime(input.EndDate).AddDays(1)); } else { query = query.Where(m => (m.patientRegister.CreationTime >= Convert.ToDateTime(input.StartDate) && m.patientRegister.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1)) || (m.patientRegister.MedicalStartDate >= Convert.ToDateTime(input.StartDate) && m.patientRegister.MedicalStartDate < Convert.ToDateTime(input.EndDate).AddDays(1)) ); } } if (input.CompleteFlags.Any()) { query = query.Where(m => input.CompleteFlags.Contains(m.patientRegister.CompleteFlag)); } if (input.MedicalTypeIds.Any()) { query = query.Where(m => input.MedicalTypeIds.Contains(m.patientRegister.MedicalTypeId)); } if (input.CustomerOrgId != null) { var CustomerOrgIds = await _customerOrgManager.GetCustomerOrgChildrenId(input.CustomerOrgId.Value); query = query.Where(m => CustomerOrgIds.Contains(m.patientRegister.CustomerOrgId)); } if (input.CustomerOrgRegisterId != null && input.CustomerOrgRegisterId != Guid.Empty) { query = query.Where(m => m.patientRegister.CustomerOrgRegisterId == input.CustomerOrgRegisterId); } if (input.CustomerOrgGroupIds.Any()) { query = query.Where(m => m.patientRegister.CustomerOrgGroupId != null && input.CustomerOrgGroupIds.Contains(m.patientRegister.CustomerOrgGroupId.Value)); } if (input.IsSmsComplete != null) { query = query.Where(m => m.followUp.IsSmsComplete == input.IsSmsComplete); } if (input.IsPhoneComplete != null) { query = query.Where(m => m.followUp.IsPhoneComplete == input.IsPhoneComplete); } #endregion var followUpGroup = query.ToList().GroupBy(g => g.followUp); var entListDto = followUpGroup.Select(s => new PhoneFollowUpWithCriticalItemDto { FollowUpId = s.Key.Id, PatientName = s.FirstOrDefault().patientRegister.PatientName, IdNo = s.FirstOrDefault().patient.IdNo, PatientRegisterNo = s.FirstOrDefault().patientRegister.PatientRegisterNo, PatientRegisterId = s.FirstOrDefault().patientRegister.Id, Age = s.FirstOrDefault().patientRegister.Age, BirthDate = DataHelper.ConversionDateShortToString(s.FirstOrDefault().patientRegister.BirthDate), CompleteFlag = s.FirstOrDefault().patientRegister.CompleteFlag, CustomerOrgName = _cacheService.GetCustomerOrgNameAsync(s.FirstOrDefault().patientRegister.CustomerOrgId).GetAwaiter().GetResult(), CustomerOrgParentName = _cacheService.GetTopCustomerOrgNameAsync(s.FirstOrDefault().patientRegister.CustomerOrgId).GetAwaiter().GetResult(), IsMedicalStart = s.FirstOrDefault().patientRegister.IsMedicalStart, IsUpload = s.FirstOrDefault().patientRegister.IsUpload, JobCardNo = s.FirstOrDefault().patientRegister.JobCardNo, JobPost = s.FirstOrDefault().patientRegister.JobPost, JobTitle = s.FirstOrDefault().patientRegister.JobTitle, MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(s.FirstOrDefault().patientRegister.MaritalStatusId).GetAwaiter().GetResult(), MedicalCardNo = s.FirstOrDefault().patientRegister.MedicalCardNo, MedicalStartDate = DataHelper.ConversionDateShortToString(s.FirstOrDefault().patientRegister.MedicalStartDate), MedicalTimes = s.FirstOrDefault().patientRegister.MedicalTimes, MedicalTypeName = _cacheService.GetMedicalTypeNameAsync(s.FirstOrDefault().patientRegister.MedicalTypeId).GetAwaiter().GetResult(), MobileTelephone = s.FirstOrDefault().patient.MobileTelephone, NationName = _cacheService.GetNationNameAsync(s.FirstOrDefault().patient.NationId).GetAwaiter().GetResult(), PatientNo = s.FirstOrDefault().patient.PatientNo, PersonnelTypeName = _cacheService.GetPersonnelTypeNameAsync(s.FirstOrDefault().patientRegister.PersonnelTypeId).GetAwaiter().GetResult(), SexName = _cacheService.GetSexNameAsync(s.FirstOrDefault().patientRegister.SexId).GetAwaiter().GetResult(), Telephone = s.FirstOrDefault().patient.Telephone, PhoneFollowUpDetail = s.Where(m => m.phoneFollowUpEmpty != null).GroupBy(g => g.phoneFollowUpEmpty).OrderBy(o => o.Key.PlanFollowDate).Select(ss => new PhoneFollowUpSimpleDto { FollowUpContent = ss.Key.FollowUpContent, IsComplete = ss.Key.IsComplete, PlanFollowDate = DataHelper.ConversionDateToString(ss.Key.PlanFollowDate), ReplyContent = ss.Key.ReplyContent }).ToList(), AbnormalAsbitemDetail = s.Where(m => m.registerCheck.IsCriticalValue != null).GroupBy(g => g.registerCheck).Select(ss => new PhoneFollowUpWithCriticalItemAbnormalAsbitemDto { CriticalValueContent = ss.Key.CriticalValueContent, AsbitemName = string.Join(",", ss.Select(sss => sss.asbitem.DisplayName).Distinct()), IsCriticalValue = ss.Key.IsCriticalValue == null ? 'N' : ss.Key.IsCriticalValue.Value, IsReview = ss.Key.IsReview == null ? 'N' : ss.Key.IsReview.Value }).ToList(), AbnormalItemDetail = s.Where(m => m.registerCheckItem.IsCriticalValue != null).GroupBy(g => g.registerCheckItem).Select(ss => new PhoneFollowUpWithCriticalItemAbnormalItemDto { CriticalValueContent = ss.Key.CriticalValueContent, ItemName = ss.FirstOrDefault().item.DisplayName, IsCriticalValue = ss.Key.IsCriticalValue == null ? 'N' : ss.Key.IsCriticalValue.Value, IsReview = ss.Key.IsReview == null ? 'N' : ss.Key.IsReview.Value }).ToList(), CriticalValueContents = string.Join("
", s.Where(m => !string.IsNullOrWhiteSpace(m.registerCheck.CriticalValueContent)).Select(ss => ss.registerCheck.CriticalValueContent).Distinct()) + "
" + string.Join("
", s.Where(m => !string.IsNullOrWhiteSpace(m.registerCheckItem.CriticalValueContent)).Select(ss => ss.registerCheckItem.CriticalValueContent).Distinct()), IsPhoneComplete = s.Key.IsPhoneComplete, IsSmsComplete = s.Key.IsSmsComplete }).ToList(); return entListDto; //var query = from phoneFollowUp in await _phoneFollowUpRepository.GetQueryableAsync() // join followUp in await _followUpRepository.GetQueryableAsync() on phoneFollowUp.FollowUpId equals followUp.Id // join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on followUp.PatientRegisterId equals patientRegister.Id // orderby patientRegister.Id, phoneFollowUp.PlanFollowDate // select new // { // patientName = patientRegister.PatientName, // phoneFollowUp // }; //if (input.FollowUpId != null) //{ // query = query.Where(m => m.phoneFollowUp.FollowUpId == input.FollowUpId); //} //if (!string.IsNullOrWhiteSpace(input.KeyWord)) //{ // query = query.Where(m => (!string.IsNullOrWhiteSpace(m.phoneFollowUp.FollowUpContent) && m.phoneFollowUp.FollowUpContent.Contains(input.KeyWord)) // || (!string.IsNullOrWhiteSpace(m.phoneFollowUp.ReplyContent) && m.phoneFollowUp.ReplyContent.Contains(input.KeyWord)) // ); //} //if (input.IsComplete != null) //{ // query = query.Where(m => m.phoneFollowUp.IsComplete == input.IsComplete); //} //if (!string.IsNullOrWhiteSpace(input.StartDate) && !string.IsNullOrWhiteSpace(input.EndDate)) //{ // query = query.Where(m => m.phoneFollowUp.PlanFollowDate >= Convert.ToDateTime(input.StartDate) // && m.phoneFollowUp.PlanFollowDate <= Convert.ToDateTime(input.EndDate).AddDays(1)); //} //var entListDto = query.ToList().Select(s => new PhoneFollowUpWithPatientRegisterDto //{ // FollowUpId = s.phoneFollowUp.FollowUpId, // CreationTime = s.phoneFollowUp.CreationTime, // ReplyContent = s.phoneFollowUp.ReplyContent, // PlanFollowDate = DataHelper.ConversionDateToString(s.phoneFollowUp.PlanFollowDate), // CreatorId = s.phoneFollowUp.CreatorId, // FollowUpContent = s.phoneFollowUp.ReplyContent, // Id = s.phoneFollowUp.Id, // IsComplete = s.phoneFollowUp.IsComplete, // LastModificationTime = s.phoneFollowUp.LastModificationTime, // LastModifierId = s.phoneFollowUp.LastModifierId, // CreatorName = _cacheService.GetSurnameAsync(s.phoneFollowUp.CreatorId).GetAwaiter().GetResult(), // LastModifierName = _cacheService.GetSurnameAsync(s.phoneFollowUp.LastModifierId).GetAwaiter().GetResult(), // PatientName = s.patientName //}).ToList(); //return entListDto; } /// /// 获取项目危急值内容 /// /// [HttpPost("api/app/PhoneFollowUp/GetAsbitemOrItemCriticalByPatientRegisterId")] public async Task> GetAsbitemOrItemCriticalByPatientRegisterIdAsync(PatientRegisterIdInputDto input) { var query = from patientRegister in await _patientRegisterRepository.GetQueryableAsync() join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id join registerCheckItem in await _registerCheckItemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckItem.RegisterCheckId join item in await _itemRepository.GetQueryableAsync() on registerCheckItem.ItemId equals item.Id join registerCheckSummary in await _registerCheckSummaryRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckSummary.RegisterCheckId into registerCheckSummaryTemp from registerCheckSummaryHaveEmpty in registerCheckSummaryTemp.DefaultIfEmpty() select new { patientRegister, registerCheck, asbitem, registerCheckItem, item, registerCheckSummaryHaveEmpty }; if (input.PatientRegisterId == Guid.Empty) { throw new UserFriendlyException("人员ID格式不正确"); } query = query.Where(m => m.patientRegister.Id == input.PatientRegisterId); var registerCheckGroup = query.ToList().GroupBy(g => new { g.registerCheck, g.registerCheckItem }); var entListDto = new List(); foreach (var item in registerCheckGroup) { if (item.Key.registerCheck.IsFollowUp == 'Y' || item.Key.registerCheck.IsCriticalValue == 'Y' || item.Key.registerCheckItem.IsFollowUp == 'Y' || item.Key.registerCheckItem.IsCriticalValue == 'Y') { if (item.Key.registerCheckItem.IsFollowUp == 'Y' || item.Key.registerCheckItem.IsCriticalValue == 'Y') { entListDto.Add(new GetAsbitemOrItemCriticalByPatientRegisterIdDto { RegisterCheckId = item.Key.registerCheck.Id, AsbitemName = string.Join(",", item.Select(ss => ss.asbitem.DisplayName).Distinct()), CriticalRangeValue = item.Key.registerCheck.CriticalRangeValue, CriticalValueContent = item.Key.registerCheck.CriticalValueContent, IsCriticalValue = item.Key.registerCheck.IsCriticalValue, IsCriticalValueAudit = item.Key.registerCheck.IsCriticalValueAudit, IsFollowUp = item.Key.registerCheck.IsFollowUp, IsReview = item.Key.registerCheck.IsReview, SummaryDetail = string.Join("
", item.Where(m => m.registerCheckSummaryHaveEmpty != null).Select(ss => ss.registerCheckSummaryHaveEmpty.Summary).Distinct()), ItemCriticalRangeValue = item.Key.registerCheckItem.CriticalRangeValue, ItemCriticalValueContent = item.Key.registerCheckItem.CriticalValueContent, ItemIsCriticalValue = item.Key.registerCheckItem.IsCriticalValue, ItemIsCriticalValueAudit = item.Key.registerCheckItem.IsCriticalValueAudit, ItemIsFollowUp = item.Key.registerCheckItem.IsFollowUp, ItemIsReview = item.Key.registerCheckItem.IsReview, ItemName = item.FirstOrDefault().item.DisplayName, ItemResult = item.Key.registerCheckItem.Result, ReferenceRangeValue = item.Key.registerCheckItem.ReferenceRangeValue, Unit = item.Key.registerCheckItem.Unit }); } else { if (entListDto.Where(m => m.RegisterCheckId == item.Key.registerCheck.Id).Count() == 0) { entListDto.Add(new GetAsbitemOrItemCriticalByPatientRegisterIdDto { RegisterCheckId = item.Key.registerCheck.Id, AsbitemName = string.Join(",", item.Select(ss => ss.asbitem.DisplayName).Distinct()), CriticalRangeValue = item.Key.registerCheck.CriticalRangeValue, CriticalValueContent = item.Key.registerCheck.CriticalValueContent, IsCriticalValue = item.Key.registerCheck.IsCriticalValue, IsCriticalValueAudit = item.Key.registerCheck.IsCriticalValueAudit, IsFollowUp = item.Key.registerCheck.IsFollowUp, IsReview = item.Key.registerCheck.IsReview, SummaryDetail = string.Join("
", item.Where(m => m.registerCheckSummaryHaveEmpty != null).Select(ss => ss.registerCheckSummaryHaveEmpty.Summary).Distinct()), ItemCriticalRangeValue = "", ItemCriticalValueContent = "", ItemIsCriticalValue = null, ItemIsCriticalValueAudit = null, ItemIsFollowUp = null, ItemIsReview = null, ItemName = "", ItemResult = "", ReferenceRangeValue = "", Unit = "" }); } } } } //var entListDto = registerCheckGroup.Select(s => new GetAsbitemOrItemCriticalByPatientRegisterIdDto //{ // RegisterCheckId = s.Key.registerCheck.Id, // AsbitemName = string.Join(",", s.Select(ss => ss.asbitem.DisplayName).Distinct()), // CriticalRangeValue = s.Key.registerCheck.CriticalRangeValue, // CriticalValueContent = s.Key.registerCheck.CriticalValueContent, // IsCriticalValue = s.Key.registerCheck.IsCriticalValue, // IsCriticalValueAudit = s.Key.registerCheck.IsCriticalValueAudit, // IsFollowUp = s.Key.registerCheck.IsFollowUp, // IsReview = s.Key.registerCheck.IsReview, // SummaryDetail = string.Join("
", s.Where(m => m.registerCheckSummaryHaveEmpty != null).Select(ss => ss.registerCheckSummaryHaveEmpty.Summary).Distinct()), // ItemCriticalRangeValue = s.Key.registerCheckItemHaveEmpty.CriticalRangeValue, // ItemCriticalValueContent = s.Key.registerCheckItemHaveEmpty.CriticalValueContent, // ItemIsCriticalValue = s.Key.registerCheckItemHaveEmpty.IsCriticalValue, // ItemIsCriticalValueAudit = s.Key.registerCheckItemHaveEmpty.IsCriticalValueAudit, // ItemIsFollowUp = s.Key.registerCheckItemHaveEmpty.IsFollowUp, // ItemIsReview = s.Key.registerCheckItemHaveEmpty.IsReview, // ItemName = s.FirstOrDefault().item.DisplayName, // ItemResult = s.Key.registerCheckItemHaveEmpty.Result, // ReferenceRangeValue = s.Key.registerCheckItemHaveEmpty.ReferenceRangeValue, // Unit = s.Key.registerCheckItemHaveEmpty.Unit //}).ToList(); //var entListDto = registerCheckGroup.Select(s => new GetAsbitemOrItemCriticalByPatientRegisterIdDto //{ // AsbitemName = string.Join(",", s.Select(ss => ss.asbitem.DisplayName).Distinct()), // CriticalRangeValue = s.Key.CriticalRangeValue, // CriticalValueContent = s.Key.CriticalValueContent, // IsCriticalValue = s.Key.IsCriticalValue, // IsCriticalValueAudit = s.Key.IsCriticalValueAudit, // IsFollowUp = s.Key.IsFollowUp, // IsReview = s.Key.IsReview, // SummaryDetail = string.Join("
", s.Where(m => m.registerCheckSummaryHaveEmpty != null).Select(ss => ss.registerCheckSummaryHaveEmpty.Summary).Distinct()), // ItemDetails = s.GroupBy(g => g.registerCheckItem).ToList() // .Select(ss => new GetAsbitemOrItemCriticalByPatientRegisterIdItemDetail // { // CriticalRangeValue = ss.Key.CriticalRangeValue, // CriticalValueContent = ss.Key.CriticalValueContent, // IsCriticalValue = ss.Key.IsCriticalValue, // IsCriticalValueAudit = ss.Key.IsCriticalValueAudit, // IsFollowUp = ss.Key.IsFollowUp, // IsReview = ss.Key.IsReview, // ItemName = ss.FirstOrDefault().item.DisplayName, // ItemResult = ss.Key.Result, // ReferenceRangeValue = ss.Key.ReferenceRangeValue, // Unit = ss.Key.Unit // }).ToList() //}).ToList(); return entListDto; } /// /// 自动生成电话随访记录 /// /// /// [HttpPost("api/app/PhoneFollowUp/AutoCreate")] public async Task AutoCreateAsync(AutoCreatePhoneFollowUpDto input) { if (string.IsNullOrWhiteSpace(input.StartDate)) { throw new UserFriendlyException("开始时间不能为空"); } var isPhoneFollowUp = await _phoneFollowUpRepository.CountAsync(c => c.FollowUpId == input.FollowUpId); if (isPhoneFollowUp > 0) { throw new UserFriendlyException("已存在电话随访记录,不允许重复生成"); } var followUpEnt = await _followUpRepository.FirstOrDefaultAsync(f => f.Id == input.FollowUpId); if (followUpEnt == null) { throw new UserFriendlyException("随访ID不正确"); } List phoneFollowUpList = new List(); for (int i = 0; i < input.GenerateCount; i++) { DateTime planFollowDate = Convert.ToDateTime(input.StartDate); planFollowDate = planFollowDate.AddDays(i * input.IntervalDays); var phoneFollowUpEntity = new PhoneFollowUp(GuidGenerator.Create()) { FollowUpContent = input.FollowUpContent, FollowUpId = input.FollowUpId, PlanFollowDate = planFollowDate, IsComplete = 'N' }; phoneFollowUpList.Add(phoneFollowUpEntity); } if (phoneFollowUpList.Any()) { await _phoneFollowUpRepository.InsertManyAsync(phoneFollowUpList); followUpEnt.IsPhoneComplete = 'Y'; await _followUpRepository.UpdateAsync(followUpEnt); } } /// /// 新增电话随访记录 /// /// /// [HttpPost("api/app/PhoneFollowUp/Create")] public async Task CreateAsync(CreatePhoneFollowUpDto input) { var followUpEnt = await _followUpRepository.FirstOrDefaultAsync(f => f.Id == input.FollowUpId); if (followUpEnt == null) { throw new UserFriendlyException("随访ID不正确"); } if (string.IsNullOrWhiteSpace(input.PlanFollowDate)) { throw new UserFriendlyException("随访日期不能为空"); } var phoneFollowUpEntity = new PhoneFollowUp(GuidGenerator.Create()) { FollowUpContent = input.FollowUpContent, FollowUpId = input.FollowUpId, PlanFollowDate = Convert.ToDateTime(input.PlanFollowDate), IsComplete = 'N' }; await _phoneFollowUpRepository.InsertAsync(phoneFollowUpEntity); followUpEnt.IsPhoneComplete = 'Y'; await _followUpRepository.UpdateAsync(followUpEnt); } /// /// 修改电话随访记录 /// /// /// [HttpPost("api/app/PhoneFollowUp/Update")] public async Task UpdateAsync(UpdatePhoneFollowUpDto input) { var entity = await _phoneFollowUpRepository.GetAsync(input.PhoneFollowUpId); entity.IsComplete = input.IsComplete; if (input.PlanFollowDate != null) { entity.PlanFollowDate = Convert.ToDateTime(input.PlanFollowDate); } if (!string.IsNullOrWhiteSpace(input.ReplyContent)) { entity.ReplyContent = input.ReplyContent; } if (!string.IsNullOrWhiteSpace(input.FollowUpContent)) { entity.FollowUpContent = input.FollowUpContent; } await _phoneFollowUpRepository.UpdateAsync(entity); } /// /// 删除 /// /// /// [HttpPost("api/app/PhoneFollowUp/Delete")] public async Task DeleteAsync(PhoneFollowUpIdInputDto input) { var phoneFollowUpEnt = await _phoneFollowUpRepository.FirstOrDefaultAsync(f => f.Id == input.PhoneFollowUpId); if (phoneFollowUpEnt == null) { throw new UserFriendlyException("数据不存在"); } await _phoneFollowUpRepository.DeleteAsync(input.PhoneFollowUpId, true); if ((await _phoneFollowUpRepository.CountAsync(c => c.FollowUpId == phoneFollowUpEnt.FollowUpId)) == 0) { var followUpEnt = await _followUpRepository.FirstOrDefaultAsync(f => f.Id == phoneFollowUpEnt.FollowUpId); if (followUpEnt != null) { followUpEnt.IsPhoneComplete = 'N'; await _followUpRepository.UpdateAsync(followUpEnt); } } } } }