| 
						 | 
						using Microsoft.AspNetCore.Authorization;using Microsoft.AspNetCore.Mvc;using Microsoft.EntityFrameworkCore;using Microsoft.Extensions.Configuration;using Org.BouncyCastle.Asn1.Ocsp;using Shentun.Peis.Asbitems;using Shentun.Peis.Enums;using Shentun.Peis.MenuInfos;using Shentun.Peis.Models;using Shentun.Peis.PatientRegisters;using Shentun.Peis.RegisterCheckItems;using Shentun.Peis.RegisterCheckSummarys;using System;using System.Collections.Generic;using System.Linq;using System.Linq.Dynamic.Core;using System.Text;using System.Threading.Tasks;using Volo.Abp;using Volo.Abp.Application.Dtos;using Volo.Abp.Application.Services;using Volo.Abp.Domain.Entities.Events.Distributed;using Volo.Abp.Domain.Repositories;using Volo.Abp.Guids;using Volo.Abp.Identity;using Volo.Abp.ObjectMapping;using Volo.Abp.Users;using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
namespace Shentun.Peis.RegisterChecks{
    /// <summary>
    /// 登记检查单
    /// </summary>
    [ApiExplorerSettings(GroupName = "Work")]    [Authorize]    public class RegisterCheckAppService : ApplicationService    {        private readonly IRepository<RegisterCheckItem> _registerCheckItemRepository;        private readonly IRepository<RegisterCheckAsbitem> _registerCheckAsbitemRepository;        private readonly IRepository<ItemType> _itemTypeRepository;        private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;        private readonly IRepository<ReferenceRange, Guid> _referenceRangeRepository;        private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;        private readonly IRepository<RegisterCheckSummary, Guid> _registerCheckSummaryRepository;        private readonly IRepository<RegisterCheckSuggestion, Guid> _registerCheckSuggestionRepository;        private readonly IRepository<IdentityUser, Guid> _userRepository;        private readonly RegisterCheckManager _registerCheckManager;        private readonly RegisterCheckItemManager _registerCheckItemManager;        private readonly CacheService _cacheService;        private readonly IGuidGenerator _guidGenerator;        private readonly IConfiguration _configuration;        private readonly ICurrentUser _currentUser;        private readonly IRepository<UserItemType> _userItemTypeRepository;        private readonly IRepository<Asbitem, Guid> _asbitemRepository;        private readonly IRepository<LisRequest, Guid> _lisRequestRepository;
        public RegisterCheckAppService(IRepository<RegisterCheck, Guid> registerCheckRepository,            IRepository<RegisterCheckItem> registerCheckItemRepository,             IRepository<PatientRegister, Guid> patientRegisterRepository,            IRepository<ReferenceRange, Guid> referenceRangeRepository,             IRepository<RegisterCheckSummary, Guid> registerCheckSummaryRepository,            IRepository<RegisterCheckSuggestion, Guid> registerCheckSuggestionRepository,            IRepository<IdentityUser, Guid> userRepository,            RegisterCheckManager registerCheckManager,            RegisterCheckItemManager registerCheckItemManager,            CacheService cacheService,            IGuidGenerator guidGenerator,            IConfiguration configuration,            ICurrentUser currentUser,            IRepository<UserItemType> userItemTypeRepository,            IRepository<Asbitem, Guid> asbitemRepository,            IRepository<RegisterCheckAsbitem> registerCheckAsbitemRepository,            IRepository<ItemType> itemTypeRepository,            IRepository<LisRequest, Guid> lisRequestRepository)        {            _registerCheckRepository = registerCheckRepository;            _userRepository = userRepository;            _registerCheckManager = registerCheckManager;            _patientRegisterRepository = patientRegisterRepository;            _referenceRangeRepository = referenceRangeRepository;            _registerCheckItemRepository = registerCheckItemRepository;            _registerCheckSummaryRepository = registerCheckSummaryRepository;            _registerCheckSuggestionRepository = registerCheckSuggestionRepository;            _registerCheckItemManager = registerCheckItemManager;            _cacheService = cacheService;            _guidGenerator = guidGenerator;            _configuration = configuration;            _currentUser = currentUser;            _userItemTypeRepository = userItemTypeRepository;            _asbitemRepository = asbitemRepository;            _registerCheckAsbitemRepository = registerCheckAsbitemRepository;            _itemTypeRepository = itemTypeRepository;            _lisRequestRepository = lisRequestRepository;        }
        /// <summary>
        /// 根据RegisterCheckId获取当前实体数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpGet("api/app/registercheck/getregistercheck")]        public async Task<RegisterCheckDto> GetRegisterCheckAsync(Guid id)        {            var registerCheckEntity = (await _registerCheckRepository.GetQueryableAsync())                .Include(x => x.RegisterCheckAsbitems)                .FirstOrDefault(f => f.Id == id);
            var registerCheckDto = new RegisterCheckDto            {                AuditorUserId = registerCheckEntity.AuditorUserId,                AuditTime = registerCheckEntity.AuditTime,                CheckDate = DataHelper.ConversionDateToString(registerCheckEntity.CheckDate),                CheckDoctorId = registerCheckEntity.CheckDoctorId,                CheckRequestNo = registerCheckEntity.CheckRequestNo,                CheckRequestPrintTimes = registerCheckEntity.CheckRequestPrintTimes,                CompleteFlag = registerCheckEntity.CompleteFlag,                CreationTime = registerCheckEntity.CreationTime,                CreatorId = registerCheckEntity.CreatorId,                CriticalValue = registerCheckEntity.CriticalRangeValue,                //CriticalValueCreateDate = DataHelper.ConversionDateToString(registerCheckEntity.CriticalValueCreateDate),
                CriticalValueFlag = registerCheckEntity.IsCriticalValue,                CriticalValueProcessContent = registerCheckEntity.CriticalValueContent,                //CriticalValueProcessDate = DataHelper.ConversionDateToString(registerCheckEntity.CriticalValueProcessDate),
                //CriticalValueProcessDoctor = registerCheckEntity.CriticalValueProcessDoctor,
                //CriticalValueProcessFlag = registerCheckEntity.CriticalValueProcessFlag,
                Id = registerCheckEntity.Id,                IsAudit = registerCheckEntity.IsAudit,                IsLock = registerCheckEntity.IsLock,                LastModificationTime = registerCheckEntity.LastModificationTime,                LastModifierId = registerCheckEntity.LastModifierId,                ThirdInfo = registerCheckEntity.ThirdInfo,                LastModifierName = _cacheService.GetSurnameAsync(registerCheckEntity.LastModifierId).Result,                CreatorName = _cacheService.GetSurnameAsync(registerCheckEntity.CreatorId).Result,                IsCharge = registerCheckEntity.RegisterCheckAsbitems.Where(m => m.PayTypeFlag == PayTypeFlag.PersonPay && m.IsCharge == 'N').Count() > 0 ? 'N' : 'Y'            };
            return registerCheckDto;        }
        /// <summary>
        /// 获取登记check表数据(附带组合项目名称跟是否收费)  医生诊台左边列表  只有一个收费就显示收费
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("api/app/RegisterCheck/GetRegisterCheckAsbitemsByPatientRegisterId")]        public async Task<List<RegisterCheckOrAsbitemNameOrIsChargeDto>> GetRegisterCheckAsbitemsByPatientRegisterIdAsync(PatientRegisterIdInputDto input)        {            //var list = (from registerCheck in await _registerCheckRepository.GetQueryableAsync()
            //            join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
            //            on registerCheck.Id equals registerCheckAsbitem.AsbitemId
            //            join asbitem in await _asbitemRepository.GetQueryableAsync()
            //            on registerCheckAsbitem.AsbitemId equals asbitem.Id
            //            join itemType in await _itemTypeRepository.GetQueryableAsync()
            //            on asbitem.ItemTypeId equals itemType.Id
            //            where registerCheck.PatientRegisterId == input.PatientRegisterId
            //            orderby itemType.DisplayName, asbitem.DisplayOrder
            //            select new
            //            {
            //                registerCheck,
            //                registerCheckAsbitem,
            //                asbitem,
            //                itemType
            //            }).ToList();
            var entlist = (await _registerCheckRepository.GetQueryableAsync())                 .Include(x => x.RegisterCheckAsbitems)                 .ThenInclude(x => x.Asbitem).ThenInclude(x => x.ItemType)                 .Where(m => m.PatientRegisterId == input.PatientRegisterId).ToList();
            //排序
            entlist = entlist.OrderBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.ItemType.DisplayOrder)).ToList()                      .OrderBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.DisplayOrder)).ToList();
            var entdto = entlist.Where(m => m.RegisterCheckAsbitems.Where(mm => mm.Asbitem.IsCheck == 'Y').Count() > 0).Select(s => new RegisterCheckOrAsbitemNameOrIsChargeDto            {                CheckTypeFlag = s.RegisterCheckAsbitems.First().Asbitem.ItemType.CheckTypeFlag,                AsbitemName = string.Join(",", s.RegisterCheckAsbitems.Select(rs => rs.Asbitem.DisplayName).ToList()),                AuditorUserId = s.AuditorUserId,                AuditTime = s.AuditTime,                CheckDate = DataHelper.ConversionDateToString(s.CheckDate),                CheckDoctorId = s.CheckDoctorId,                CheckRequestNo = s.CheckRequestNo,                CheckRequestPrintTimes = s.CheckRequestPrintTimes,                CompleteFlag = s.CompleteFlag,                CreationTime = s.CreationTime,                CreatorId = s.CreatorId,                CriticalValue = s.CriticalRangeValue,                //CriticalValueCreateDate = DataHelper.ConversionDateToString(s.CriticalValueCreateDate),
                CriticalValueFlag = s.IsCriticalValue,                CriticalValueProcessContent = s.CriticalValueContent,                // CriticalValueProcessDate = DataHelper.ConversionDateToString(s.CriticalValueProcessDate),
                // CriticalValueProcessDoctor = s.CriticalValueProcessDoctor,
                // CriticalValueProcessFlag = s.CriticalValueProcessFlag,
                Id = s.Id,                IsAudit = s.IsAudit,                IsCharge = s.RegisterCheckAsbitems.Where(m => m.IsCharge == 'Y').Count() > 0 ? 'Y' : 'N',                IsLock = s.IsLock,                LastModificationTime = s.LastModificationTime,                LastModifierId = s.LastModifierId,                //RegisterAsbitemId = s.RegisterAsbitemId,
                ThirdInfo = s.ThirdInfo,                CreatorName = _cacheService.GetSurnameAsync(s.CreatorId).Result,                LastModifierName = _cacheService.GetSurnameAsync(s.LastModifierId).Result,                ItemTypeDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.ItemType.DisplayOrder,                AsbitemDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.DisplayOrder            }).ToList();
            return entdto;        }
        /// <summary>
        /// 获取登记check表数据(附带组合项目名称跟是否收费)  医生诊台左边列表  只有一个收费就显示收费  增加项目类别权限控制
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("api/app/RegisterCheck/GetRegisterCheckWithAsbitems")]        public async Task<List<RegisterCheckWithAsbitemsDto>> GetRegisterCheckWithAsbitemsAsync(PatientRegisterIdInputDto input)        {
            var entlist = (await _registerCheckRepository.GetQueryableAsync())                .Include(x => x.RegisterCheckAsbitems)                .ThenInclude(x => x.Asbitem).ThenInclude(x => x.ItemType)                .Where(m => m.RegisterCheckAsbitems.Select(s => s.PatientRegisterId)                .Contains(input.PatientRegisterId)                && m.RegisterCheckAsbitems.Select(s => s.Asbitem.IsCheck).Contains('Y'));
            #region 增加项目类别权限
            string AdminId = _configuration.GetValue<string>("AdminId");            if (_currentUser.Id.Value != Guid.Parse(AdminId))            {                var asbitemIds = (from userItemType in await _userItemTypeRepository.GetQueryableAsync()                                  join asbitem in await _asbitemRepository.GetQueryableAsync() on userItemType.ItemTypeId equals asbitem.ItemTypeId                                  where userItemType.UserId == _currentUser.Id.Value                                  select asbitem.Id).ToList();
                if (asbitemIds.Any())                {                    entlist = entlist.Where(m => asbitemIds.Contains(m.RegisterCheckAsbitems.FirstOrDefault().AsbitemId));                }                else                {                    return new List<RegisterCheckWithAsbitemsDto>();                }
            }
            #endregion
            //排序
            entlist = entlist.OrderBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.ItemType.DisplayOrder))                      .ThenBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.DisplayOrder));
            var entdto = entlist.ToList().Select(s => new RegisterCheckWithAsbitemsDto            {                AsbitemName = string.Join(",", s.RegisterCheckAsbitems.Select(rs => rs.Asbitem.DisplayName).ToList()),                AuditorUserId = s.AuditorUserId,                AuditTime = s.AuditTime,                CheckDate = DataHelper.ConversionDateToString(s.CheckDate),                CheckDoctorId = s.CheckDoctorId,                CheckRequestNo = s.CheckRequestNo,                CompleteFlag = s.CompleteFlag,                Id = s.Id,                IsAudit = s.IsAudit,                IsCharge = s.RegisterCheckAsbitems.Where(m => m.IsCharge == 'Y').Count() > 0 ? 'Y' : 'N',                IsLock = s.IsLock,                CheckTypeFlag = s.RegisterCheckAsbitems.First().Asbitem.ItemType.CheckTypeFlag,                ItemTypeDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.ItemType.DisplayOrder,                AsbitemDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.DisplayOrder,            }).ToList();
            return entdto;        }
        [HttpPost("api/app/registercheck/UpdateCheckResult")]        public async Task UpdateCheckResult(UpdateCheckResultDto input)        {            if (input == null)            {                throw new UserFriendlyException("input参数不能为空");            }            if (input.RegisterCheckItems == null)            {                throw new UserFriendlyException("RegisterCheckItems参数不能为空");            }            if (!input.RegisterCheckItems.Where(o => !string.IsNullOrWhiteSpace(o.Result)).ToList().Any())            {                throw new UserFriendlyException("明细结果不能全部为空");            }            if (input.Summarys == null || !input.Summarys.Any())            {                throw new UserFriendlyException("小结不能为空");            }            var registerCheck = await _registerCheckRepository.GetAsync(input.RegisterCheckId);            var patientRegister = await _patientRegisterRepository.GetAsync(registerCheck.PatientRegisterId);            //修改医生和检查日期
            if (string.IsNullOrWhiteSpace(input.CheckDoctorId))            {                input.CheckDoctorId = CurrentUser.Id.ToString();            }            _registerCheckManager.UpdateCheckDoctorAndDateAsync(patientRegister, registerCheck, input.CheckDoctorId, input.CheckDate, input.ExecOrganizationUnitId);            if (!string.IsNullOrWhiteSpace(input.LisAuditorDoctorName))                registerCheck.LisAuditorDoctorName = input.LisAuditorDoctorName;            if (!string.IsNullOrWhiteSpace(input.LisSampleNo))                registerCheck.LisSampleNo = input.LisSampleNo;            //更新人员登记信息完成标志
            patientRegister.CompleteFlag = PatientRegisterCompleteFlag.PartCheck;            await _patientRegisterRepository.UpdateAsync(patientRegister);            await _registerCheckRepository.UpdateAsync(registerCheck);            //修改项目结果
            var registerCheckItems = await _registerCheckItemRepository.GetListAsync(o => o.RegisterCheckId == input.RegisterCheckId);            foreach (var registerCheckItem in registerCheckItems)            {                var inputCheckItem = input.RegisterCheckItems.Where(o => o.ItemId == registerCheckItem.ItemId).FirstOrDefault();                if (inputCheckItem == null)                {                    continue;                }                var registerCheckItemUpdate = new RegisterCheckItem()                {                    Result = inputCheckItem.Result,                    CheckDoctorName = inputCheckItem.CheckDoctorName,                    CriticalValue = inputCheckItem.CriticalValue,                    CheckDate = DateTime.Now                };                await _registerCheckItemManager.UpdateRegisterCheckItemAsync(registerCheckItemUpdate, registerCheckItem);            }            await _registerCheckItemRepository.UpdateManyAsync(registerCheckItems);            //修改小结
            var deleteRegisterCheckSummarys = await _registerCheckSummaryRepository.GetListAsync(o => o.RegisterCheckId == input.RegisterCheckId);            await _registerCheckSummaryRepository.DeleteManyAsync(deleteRegisterCheckSummarys);            for (var i = 0; i < input.Summarys.Count; i++)            {                var registerCheckSummary = new RegisterCheckSummary(_guidGenerator.Create())                {                    DisplayOrder = i + 1,                    RegisterCheckId = input.RegisterCheckId,                    Summary = input.Summarys[i].Summary,                    SummaryFlag = '0'                };                await _registerCheckSummaryRepository.InsertAsync(registerCheckSummary);            }            //修改建议
            var _registerCheckSuggestions = await _registerCheckSuggestionRepository.GetListAsync(o => o.RegisterCheckId == input.RegisterCheckId);            await _registerCheckSuggestionRepository.DeleteManyAsync(_registerCheckSuggestions);            for (var i = 0; i < input.Suggestions.Count; i++)            {                var registerCheckSuggestion = new RegisterCheckSuggestion(_guidGenerator.Create())                {                    DisplayOrder = i + 1,                    RegisterCheckId = input.RegisterCheckId,                    Suggestion = input.Suggestions[i].Suggestion,                };                await _registerCheckSuggestionRepository.InsertAsync(registerCheckSuggestion);            }        }        ///// <summary>
        ///// 弃检跟恢复操作   0(为未检), 1(已检), 2(弃检)
        ///// </summary>
        ///// <param name="RegisterCheckId">检查单ID</param>
        ///// <param name="CompleteFlag">检查状态</param>
        ///// <returns></returns>
        //[HttpPost("api/app/registercheck/updatecomplete")]
        //public async Task<RegisterCheckDto> UpdateCompleteAsync(Guid RegisterCheckId, char CompleteFlag)
        //{
        //    var registerCheckEnt = await _registerCheckManager.UpdateCompleteAsync(RegisterCheckId, CompleteFlag);
        //    return ObjectMapper.Map<RegisterCheck, RegisterCheckDto>(registerCheckEnt);
        //}
        /// <summary>
        /// 批量弃检跟恢复操作   0(为未检), 1(已检), 2(弃检)
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("api/app/registercheck/updatecompletemany")]        public async Task<List<RegisterCheckDto>> UpdateCompleteManyAsync(List<UpdateCompleteManyDto> input)        {            List<RegisterCheckDto> msg = new List<RegisterCheckDto>();
            if (input.Any())            {                foreach (var item in input)                {                    var registerCheckEnt = await _registerCheckManager.UpdateCompleteAsync(item.RegisterCheckId, item.CompleteFlag);                    var newentity = ObjectMapper.Map<RegisterCheck, RegisterCheckDto>(registerCheckEnt);                    if (newentity != null)                    {                        msg.Add(newentity);                    }                }
            }            return msg;        }
        /// <summary>
        /// 更新审核状态   Y 已审核  N 未审核
        /// </summary>
        /// <param name="RegisterCheckId">检查单ID</param>
        /// <param name="IsAudit">审核状态( Y 已审核  N 未审核)</param>
        /// <returns></returns>
        [HttpPost("api/app/registercheck/updateisaudit")]        public async Task<RegisterCheckDto> UpdateIsAuditAsync(Guid RegisterCheckId, char IsAudit)        {            var registerCheckEnt = await _registerCheckManager.UpdateIsAuditAsync(RegisterCheckId, IsAudit);            return ObjectMapper.Map<RegisterCheck, RegisterCheckDto>(registerCheckEnt);        }
        /// <summary>
        /// 更改检查医生(自动更新完成状态为已检)
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("api/app/registercheck/updatecheckdoctor")]        public async Task<RegisterCheckDto> UpdateCheckDoctorAsync(UpdateCheckDoctorDto input)        {            if (input == null || input.RegisterCheckId == Guid.Empty)            {                throw new UserFriendlyException("请求参数有误");            }
            var entity = await _registerCheckRepository.GetAsync(m => m.Id == input.RegisterCheckId);            var entitydto = ObjectMapper.Map<UpdateCheckDoctorDto, RegisterCheck>(input);            var newentity = await _registerCheckManager.UpdateCheckDoctorAsync(entitydto, entity);
            return ObjectMapper.Map<RegisterCheck, RegisterCheckDto>(newentity);        }
        /// <summary>
        /// 更改危警值内容
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("api/app/registercheck/updatecriticalvalue")]        public async Task<RegisterCheckDto> UpdateCriticalValueAsync(UpdateCriticalValueDto input)        {            if (input == null || input.RegisterCheckId == Guid.Empty)            {                throw new UserFriendlyException("请求参数有误");            }
            var entity = await _registerCheckRepository.GetAsync(m => m.Id == input.RegisterCheckId);            var entitydto = ObjectMapper.Map<UpdateCriticalValueDto, RegisterCheck>(input);            var newentity = await _registerCheckManager.UpdateCriticalValueAsync(entitydto, entity);
            return ObjectMapper.Map<RegisterCheck, RegisterCheckDto>(newentity);        }
        /// <summary>
        /// 更改审核医生(自动更新审核状态为已审核)
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("api/app/registercheck/updateauditordoctor")]        public async Task<RegisterCheckDto> UpdateAuditorDoctorAsync(UpdateAuditorDoctorDto input)        {            if (input == null || input.RegisterCheckId == Guid.Empty)            {                throw new UserFriendlyException("请求参数有误");            }
            var entity = await _registerCheckRepository.GetAsync(m => m.Id == input.RegisterCheckId);            var entitydto = ObjectMapper.Map<UpdateAuditorDoctorDto, RegisterCheck>(input);            var newentity = await _registerCheckManager.UpdateAuditorDoctorAsync(entitydto, entity);
            return ObjectMapper.Map<RegisterCheck, RegisterCheckDto>(newentity);        }
        /// <summary>
        /// 修改人员登记的组合项目锁定状态  批量
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        /// <exception cref="UserFriendlyException"></exception>
        [HttpPost("api/app/registercheck/updateregistercheckislockmany")]        public async Task<List<RegisterCheckDto>> UpdateRegisterCheckIsLockManyAsync(List<UpdateRegisterCheckIsLockDto> input)        {            if (!input.Any())                throw new UserFriendlyException("请求参数有误");
            List<RegisterCheck> entlist = new List<RegisterCheck>();
            foreach (var item in input)            {                var ent = await _registerCheckRepository.GetAsync(item.RegisterCheckId);                ent.IsLock = item.IsLock;                entlist.Add(ent);            }
            await _registerCheckRepository.UpdateManyAsync(entlist);
            return ObjectMapper.Map<List<RegisterCheck>, List<RegisterCheckDto>>(entlist);
        }
        /// <summary>
        /// 根据人员ID集合获取所有项目
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("api/app/RegisterCheck/GetRegisterCheckAsbitemsByPatientRegisterIds")]        public async Task<List<SimpleAsbitemDto>> GetRegisterCheckAsbitemsByPatientRegisterIdsAsync(PatientRegisterIdsInputDto input)        {            if (!input.PatientRegisterIds.Any())                throw new UserFriendlyException("人员ID不能为空");            var entListDto = (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                              where input.PatientRegisterIds.Contains(patientRegister.Id) && asbitem.IsCheck == 'Y'                              select new SimpleAsbitemDto                              {                                  AsbitemId = registerCheckAsbitem.AsbitemId,                                  AsbitemName = asbitem.DisplayName                              }).Distinct().ToList();
            return entListDto;        }
        /// <summary>
        /// 根据人员条码号集合获取所有项目
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("api/app/RegisterCheck/GetRegisterCheckAsbitemsByPatientRegisterNos")]        public async Task<List<SimpleAsbitemDto>> GetRegisterCheckAsbitemsByPatientRegisterNosAsync(PatientRegisterNosInputDto input)        {            if (!input.PatientRegisterNos.Any())                throw new UserFriendlyException("人员条码号不能为空");            var entListDto = (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                              where input.PatientRegisterNos.Contains(patientRegister.PatientRegisterNo) && asbitem.IsCheck == 'Y'                              select new SimpleAsbitemDto                              {                                  AsbitemId = registerCheckAsbitem.AsbitemId,                                  AsbitemName = asbitem.DisplayName                              }).Distinct().ToList();
            return entListDto;        }
        /// <summary>
        /// 根据检验条码号集合获取所有项目
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("api/app/RegisterCheck/GetRegisterCheckAsbitemsByLisRequestNos")]        public async Task<List<SimpleAsbitemDto>> GetRegisterCheckAsbitemsByLisRequestNosAsync(LisRequestNosInputDto input)        {            if (!input.LisRequestNos.Any())                throw new UserFriendlyException("检验条码号不能为空");            var entListDto = (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 lisRequest in await _lisRequestRepository.GetQueryableAsync() on registerCheckAsbitem.LisRequestId equals lisRequest.Id                              join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id                              where input.LisRequestNos.Contains(lisRequest.LisRequestNo) && asbitem.IsCheck == 'Y'                              select new SimpleAsbitemDto                              {                                  AsbitemId = registerCheckAsbitem.AsbitemId,                                  AsbitemName = asbitem.DisplayName                              }).Distinct().ToList();
            return entListDto;        }
        /// <summary>
        /// 批量修改医生 根据人员ID集合
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("api/app/RegisterCheck/UpdateBatchCheckDoctor")]        public async Task UpdateBatchCheckDoctorAsync(UpdateBatchCheckDoctorInputDto input)        {            if (!input.PatientRegisterIds.Any())                throw new UserFriendlyException("人员ID不能为空");
            if (!input.CheckDoctorDetail.Any())                throw new UserFriendlyException("需要修改的信息不能为空");
            var registerCheckAsbitemList = (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                                            where input.PatientRegisterIds.Contains(patientRegister.Id)                                            select registerCheckAsbitem).ToList();
            if (registerCheckAsbitemList.Any())            {                foreach (var registerCheckAsbitem in registerCheckAsbitemList)                {                    var checkDoctorEnt = input.CheckDoctorDetail.FirstOrDefault(f => f.AsbitemId == registerCheckAsbitem.AsbitemId);                    if (checkDoctorEnt != null)                    {                        var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.Id == registerCheckAsbitem.RegisterCheckId);                        if (registerCheckEnt != null)                        {                            registerCheckEnt.CheckDoctorId = checkDoctorEnt.CheckDoctorId;                            await _registerCheckRepository.UpdateAsync(registerCheckEnt);                        }                    }                }            }        }    }
}
  |