diff --git a/src/Shentun.Peis.Application.Contracts/Asbitems/SimpleAsbitemWithDetailsDto.cs b/src/Shentun.Peis.Application.Contracts/Asbitems/SimpleAsbitemWithDetailsDto.cs new file mode 100644 index 00000000..4307194d --- /dev/null +++ b/src/Shentun.Peis.Application.Contracts/Asbitems/SimpleAsbitemWithDetailsDto.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.Peis.Asbitems +{ + public class SimpleAsbitemWithDetailsDto + { + /// + /// 组合项目ID + /// + public Guid AsbitemId { get; set; } + + /// + /// 项目名称 + /// + public string ItemName { get; set; } + } +} diff --git a/src/Shentun.Peis.Application.Contracts/RegisterCheckPictures/UploadRegisterCheckPictureManyDto.cs b/src/Shentun.Peis.Application.Contracts/RegisterCheckPictures/UploadRegisterCheckPictureManyDto.cs index b20d1fe3..ceb1363f 100644 --- a/src/Shentun.Peis.Application.Contracts/RegisterCheckPictures/UploadRegisterCheckPictureManyDto.cs +++ b/src/Shentun.Peis.Application.Contracts/RegisterCheckPictures/UploadRegisterCheckPictureManyDto.cs @@ -24,7 +24,7 @@ namespace Shentun.Peis.RegisterCheckPictures /// /// 图片base64 /// - public List PictureBaseStrs { get; set; } + public List PictureBaseStrs { get; set; } = new List() { }; ///// @@ -33,4 +33,11 @@ namespace Shentun.Peis.RegisterCheckPictures //public List PictureBaseStrs2 { get; set; } } + + public class UploadRegisterCheckPictureManyPictureBaseStrsDto + { + public string FileName { get; set; } + + public string PictureBaseStr { get; set; } + } } diff --git a/src/Shentun.Peis.Application.Contracts/RegisterChecks/RegisterCheckWithAsbitemsDto.cs b/src/Shentun.Peis.Application.Contracts/RegisterChecks/RegisterCheckWithAsbitemsDto.cs new file mode 100644 index 00000000..17404db8 --- /dev/null +++ b/src/Shentun.Peis.Application.Contracts/RegisterChecks/RegisterCheckWithAsbitemsDto.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.Peis.RegisterChecks +{ + public class RegisterCheckWithAsbitemsDto + { + public Guid Id { get; set; } + + /// + /// 组合项目名称 + /// + public string AsbitemName { get; set; } + + /// + /// 是否收费 + /// + public char? IsCharge { get; set; } + + /// + /// 检查单号 + /// + public string? CheckRequestNo { get; set; } + + /// + /// 是否锁住 + /// + public char IsLock { get; set; } + /// + /// 完成标志 0(为未检), 1(已检), 2(弃检) + /// + public char CompleteFlag { get; set; } + + + /// + /// 检查医生ID + /// + public string? CheckDoctorId { get; set; } + /// + /// 检查日期 + /// + public string? CheckDate { get; set; } + /// + /// 是审核 + /// + public char IsAudit { get; set; } + /// + /// 审核医生ID + /// + public Guid? AuditorUserId { get; set; } + /// + /// 审核时间 + /// + public DateTime? AuditTime { get; set; } + } +} diff --git a/src/Shentun.Peis.Application/Asbitems/AsbitemAppService.cs b/src/Shentun.Peis.Application/Asbitems/AsbitemAppService.cs index 7b809231..61309df7 100644 --- a/src/Shentun.Peis.Application/Asbitems/AsbitemAppService.cs +++ b/src/Shentun.Peis.Application/Asbitems/AsbitemAppService.cs @@ -32,16 +32,22 @@ namespace Shentun.Peis.Asbitems private readonly IRepository _userRepository; private readonly IDistributedCache _asbitemCache; private readonly AsbitemManager _manager; + private readonly IRepository _itemRepository; + private readonly IRepository _asbitemDetailRepository; public AsbitemAppService( IRepository repository, IRepository userRepository, AsbitemManager manager, - IDistributedCache asbitemCache) + IDistributedCache asbitemCache, + IRepository itemRepository, + IRepository asbitemDetailRepository) : base(repository) { _userRepository = userRepository; _manager = manager; _asbitemCache = asbitemCache; + _itemRepository = itemRepository; + _asbitemDetailRepository = asbitemDetailRepository; } /// /// 获取通过主键 @@ -68,7 +74,7 @@ namespace Shentun.Peis.Asbitems return await base.GetListAsync(input); } - + /// /// 获取列表 整合多条件查询 项目类别、名字、拼音简码、是否只显示启用的数据(默认显示全部) @@ -245,5 +251,30 @@ namespace Shentun.Peis.Asbitems + /// + /// 查询组合项目的子项目名称列表 登记页面用 + /// + /// + [HttpPost("api/app/Asbitem/GetSimpleAsbitemWithDetails")] + public async Task> GetSimpleAsbitemWithDetailsAsync() + { + var query = from asbtiem in await Repository.GetQueryableAsync() + join asbitemDetail in await _asbitemDetailRepository.GetQueryableAsync() on asbtiem.Id equals asbitemDetail.AsbitemId + join item in await _itemRepository.GetQueryableAsync() on asbitemDetail.ItemId equals item.Id + orderby asbtiem.DisplayOrder, item.DisplayOrder ascending + select new + { + AsbitemId = asbtiem.Id, + ItemName = item.DisplayName + }; + + var result = query.Select(s => new SimpleAsbitemWithDetailsDto + { + AsbitemId = s.AsbitemId, + ItemName = s.ItemName + }).ToList(); + + return result; + } } } diff --git a/src/Shentun.Peis.Application/Diagnosises/DiagnosisAppService.cs b/src/Shentun.Peis.Application/Diagnosises/DiagnosisAppService.cs index 24577338..b98ed3d8 100644 --- a/src/Shentun.Peis.Application/Diagnosises/DiagnosisAppService.cs +++ b/src/Shentun.Peis.Application/Diagnosises/DiagnosisAppService.cs @@ -217,14 +217,8 @@ namespace Shentun.Peis.Diagnosises a.IsSummaryTemplate, a.DisplayOrder }, - ab = new - { - ab.SuggestionType, - ab.DisplayOrder, - ab.DiagnosisId, - ab.SuggestionContent - }, - }; + ab + }; var entlist = query.GroupBy(g => g.a.Id).Select(s => new SimpleDiagnosisWithSuggestionsDto { diff --git a/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs b/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs index ed29e619..35282014 100644 --- a/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs +++ b/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs @@ -1273,7 +1273,7 @@ namespace Shentun.Peis.PatientRegisters { //_logger.LogInformation(input.Photo); - string imgurl = $"UpLoad/{DateTime.Now.Year}/{DateTime.Now.Month}/{DateTime.Now.Day}/{input.PatientRegisterId}"; + string imgurl = $"photo/{DateTime.Now.Year}/{DateTime.Now.Month}/{DateTime.Now.Day}/{input.PatientRegisterId}"; var isupload = ImageHelper.Base64StrToImage(input.Photo, imgurl); if (!string.IsNullOrEmpty(isupload)) return isupload; diff --git a/src/Shentun.Peis.Application/RegisterCheckPictures/RegisterCheckPictureAppService.cs b/src/Shentun.Peis.Application/RegisterCheckPictures/RegisterCheckPictureAppService.cs index 2dba5d25..84fd7c58 100644 --- a/src/Shentun.Peis.Application/RegisterCheckPictures/RegisterCheckPictureAppService.cs +++ b/src/Shentun.Peis.Application/RegisterCheckPictures/RegisterCheckPictureAppService.cs @@ -161,7 +161,7 @@ namespace Shentun.Peis.RegisterCheckPictures throw new UserFriendlyException("体检人员不存在"); } - string PicName = DateTime.Now.ToString("yyyyMMddHHmmss") + rd.Next(1000, 9999); + // string PicName = DateTime.Now.ToString("yyyyMMddHHmmss") + rd.Next(1000, 9999); List entlist_insert = new List(); @@ -170,10 +170,13 @@ namespace Shentun.Peis.RegisterCheckPictures foreach (var item in input.PictureBaseStrs) { - string PictureUrl = ImageHelper.Base64StrToImageInAbsolutePath(AbsolutePath, item, + //string PictureUrl = ImageHelper.Base64StrToImageInAbsolutePath(AbsolutePath, item, + // PatientRegisterId, + // input.RegisterCheckId.ToString(), + // PicName + "_" + (input.PictureBaseStrs.IndexOf(item) + 1)); + string PictureUrl = ImageHelper.Base64StrToImageInAbsolutePath(AbsolutePath, item.FileName, item.PictureBaseStr, PatientRegisterId, - input.RegisterCheckId.ToString(), - PicName + "_" + (input.PictureBaseStrs.IndexOf(item) + 1)); + input.RegisterCheckId.ToString()); if (string.IsNullOrEmpty(PictureUrl)) { diff --git a/src/Shentun.Peis.Application/RegisterChecks/RegisterCheckAppService.cs b/src/Shentun.Peis.Application/RegisterChecks/RegisterCheckAppService.cs index e53b6e6b..b947d804 100644 --- a/src/Shentun.Peis.Application/RegisterChecks/RegisterCheckAppService.cs +++ b/src/Shentun.Peis.Application/RegisterChecks/RegisterCheckAppService.cs @@ -1,7 +1,9 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; using Shentun.Peis.Enums; +using Shentun.Peis.MenuInfos; using Shentun.Peis.Models; using Shentun.Peis.PatientRegisters; using Shentun.Peis.RegisterCheckItems; @@ -9,6 +11,7 @@ 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; @@ -42,6 +45,10 @@ namespace Shentun.Peis.RegisterChecks private readonly RegisterCheckItemManager _registerCheckItemManager; private readonly CacheService _cacheService; private readonly IGuidGenerator _guidGenerator; + private readonly IConfiguration _configuration; + private readonly ICurrentUser _currentUser; + private readonly IRepository _userItemTypeRepository; + private readonly IRepository _asbitemRepository; public RegisterCheckAppService(IRepository registerCheckRepository, IRepository registerCheckItemRepository, @@ -53,19 +60,27 @@ namespace Shentun.Peis.RegisterChecks RegisterCheckManager registerCheckManager, RegisterCheckItemManager registerCheckItemManager, CacheService cacheService, - IGuidGenerator guidGenerator) + IGuidGenerator guidGenerator, + IConfiguration configuration, + ICurrentUser currentUser, + IRepository userItemTypeRepository, + IRepository asbitemRepository) { - this._registerCheckRepository = registerCheckRepository; - this._userRepository = userRepository; - this._registerCheckManager = registerCheckManager; - this._patientRegisterRepository = patientRegisterRepository; - this._referenceRangeRepository = referenceRangeRepository; + _registerCheckRepository = registerCheckRepository; + _userRepository = userRepository; + _registerCheckManager = registerCheckManager; + _patientRegisterRepository = patientRegisterRepository; + _referenceRangeRepository = referenceRangeRepository; _registerCheckItemRepository = registerCheckItemRepository; _registerCheckSummaryRepository = registerCheckSummaryRepository; _registerCheckSuggestionRepository = registerCheckSuggestionRepository; - this._registerCheckItemManager = registerCheckItemManager; + _registerCheckItemManager = registerCheckItemManager; _cacheService = cacheService; _guidGenerator = guidGenerator; + _configuration = configuration; + _currentUser = currentUser; + _userItemTypeRepository = userItemTypeRepository; + _asbitemRepository = asbitemRepository; } /// @@ -122,11 +137,11 @@ namespace Shentun.Peis.RegisterChecks var entlist = (await _registerCheckRepository.GetDbSetAsync()) .Include(x => x.RegisterCheckAsbitems) - .ThenInclude(x => x.Asbitem).ThenInclude(x=>x.ItemType) + .ThenInclude(x => x.Asbitem).ThenInclude(x => x.ItemType) .Where(m => m.RegisterCheckAsbitems.Select(s => s.PatientRegisterId).Contains(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(); + entlist = entlist.OrderBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.ItemType.DisplayOrder)).ToList() + .OrderBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.DisplayOrder)).ToList(); var userList = await _userRepository.GetListAsync(); var entdto = entlist.Select(s => new RegisterCheckOrAsbitemNameOrIsChargeDto @@ -163,6 +178,68 @@ namespace Shentun.Peis.RegisterChecks return entdto; } + + /// + /// 获取登记check表数据(附带组合项目名称跟是否收费) 医生诊台左边列表 只有一个收费就显示收费 增加项目类别权限控制 + /// + /// + /// + [HttpPost("api/app/RegisterCheck/GetRegisterCheckWithAsbitems")] + public async Task> 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)); + + #region 增加项目类别权限 + + string AdminId = _configuration.GetValue("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().Id)); + } + else + { + return new List(); + } + + } + + #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, + }).ToList(); + + return entdto; + } + [HttpPost("api/app/registercheck/UpdateCheckResult")] public async Task UpdateCheckResult(UpdateCheckResultDto input) { @@ -200,7 +277,7 @@ namespace Shentun.Peis.RegisterChecks //修改小结 var deleteRegisterCheckSummarys = await _registerCheckSummaryRepository.GetListAsync(o => o.RegisterCheckId == input.RegisterCheckId); await _registerCheckSummaryRepository.DeleteManyAsync(deleteRegisterCheckSummarys); - for(var i = 0; i < input.Summarys.Count; i++) + for (var i = 0; i < input.Summarys.Count; i++) { var registerCheckSummary = new RegisterCheckSummary(_guidGenerator.Create()) { diff --git a/src/Shentun.Peis.Domain/ImageHelper.cs b/src/Shentun.Peis.Domain/ImageHelper.cs index 640416ab..30bd310b 100644 --- a/src/Shentun.Peis.Domain/ImageHelper.cs +++ b/src/Shentun.Peis.Domain/ImageHelper.cs @@ -114,8 +114,8 @@ namespace Shentun.Peis MemoryStream ms = new MemoryStream(photo); Bitmap bitmap = new Bitmap(ms); ms.Close(); - - + + if (bitmap != null) { string ImageSuffix = ""; @@ -184,17 +184,18 @@ namespace Shentun.Peis /// 将Base64字符串转换为图片并保存到服务器 /// /// 物理路径 + /// 图片名 /// /// 登记ID 作为目录 /// 检查ID 作为目录 - /// 图片名 /// - public static string Base64StrToImageInAbsolutePath(string AbsolutePath, string base64Str, string PatientRegisterId, string RegisterCheckId, string ImageName) + public static string Base64StrToImageInAbsolutePath(string AbsolutePath, string fileName, string base64Str, string PatientRegisterId, string RegisterCheckId) { var ret = ""; try { + base64Str = base64Str.Substring(base64Str.IndexOf(",") + 1); string savePath = ""; @@ -221,20 +222,19 @@ namespace Shentun.Peis ImageSuffix = ".jpg"; } - savePath = AbsolutePath + "\\" + PatientRegisterId + "\\" + RegisterCheckId + "\\" + ImageName + ImageSuffix; - hostPath = "/CheckPictureImg/" + PatientRegisterId + "/" + RegisterCheckId + "/" + ImageName + ImageSuffix; + string savaDirectory = $"{AbsolutePath}\\pacs\\{DateTime.Now.Year}\\{DateTime.Now.Month}\\{DateTime.Now.Day}\\{PatientRegisterId}\\{RegisterCheckId}"; + savePath = $"{savaDirectory}\\{fileName + ImageSuffix}"; + hostPath = $"/CheckPictureImg/pacs/{DateTime.Now.Year}/{DateTime.Now.Month}/{DateTime.Now.Day}/{PatientRegisterId}/{RegisterCheckId}/{fileName + ImageSuffix}"; - if (!Directory.Exists(AbsolutePath + "\\" + PatientRegisterId)) - { - Directory.CreateDirectory(AbsolutePath + "\\" + PatientRegisterId); - } - if (!Directory.Exists(AbsolutePath + "\\" + PatientRegisterId + "\\" + RegisterCheckId)) + if (!Directory.Exists(savaDirectory)) { - Directory.CreateDirectory(AbsolutePath + "\\" + PatientRegisterId + "\\" + RegisterCheckId); + Directory.CreateDirectory(savaDirectory); } + + //图片后缀格式 var suffix = savePath.Substring(savePath.LastIndexOf('.') + 1, savePath.Length - savePath.LastIndexOf('.') - 1).ToLower(); var suffixName = suffix == "png" ? ImageFormat.Png : @@ -273,6 +273,7 @@ namespace Shentun.Peis } + ///