using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.IdentityModel.Tokens; using Shentun.Peis.Enums; using Shentun.Peis.GuideTypes; using Shentun.Peis.Models; using Shentun.Peis.PatientRegisters; 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.Identity; namespace Shentun.Peis.RegisterCheckPictures { /// /// 体检登记组合项目图片 /// [ApiExplorerSettings(GroupName = "Work")] [Authorize] public class RegisterCheckPictureAppService : ApplicationService { private readonly IRepository _userRepository; private readonly IRepository _registerCheckPictureRepository; private readonly IRepository _registerCheckAsbitemRepository; private readonly IRepository _registerCheckRepository; private readonly IRepository _patientRegisterRepository; private readonly IRepository _lisRequestRepository; private readonly RegisterCheckPictureManager _registerCheckPictureManager; private readonly IConfiguration _configuration; public RegisterCheckPictureAppService( IRepository registerCheckPictureRepository, RegisterCheckPictureManager registerCheckPictureManager, IRepository userRepository, IRepository registerCheckAsbitemRepository, IConfiguration configuration, IRepository registerCheckRepository, IRepository patientRegisterRepository, IRepository lisRequestRepository) { _registerCheckPictureRepository = registerCheckPictureRepository; _registerCheckPictureManager = registerCheckPictureManager; _userRepository = userRepository; _registerCheckAsbitemRepository = registerCheckAsbitemRepository; _configuration = configuration; _registerCheckRepository = registerCheckRepository; _patientRegisterRepository = patientRegisterRepository; _lisRequestRepository = lisRequestRepository; } /// /// 根据RegisterCheckId获取列表 /// /// RegisterCheck表ID /// [HttpGet("api/app/registercheckpicture/getregistercheckpictureinregistercheckid")] public async Task> GetRegisterCheckPictureInRegisterCheckIdAsync(Guid RegisterCheckId) { var query = from a in await _registerCheckPictureRepository.GetQueryableAsync() join b in await _userRepository.GetQueryableAsync() on a.CreatorId equals b.Id into bb from ab in bb.DefaultIfEmpty() join c in await _userRepository.GetQueryableAsync() on a.LastModifierId equals c.Id into cc from ac in cc.DefaultIfEmpty() where a.RegisterCheckId == RegisterCheckId select new { a, CreatorName = ab != null ? ab.Surname : "", LastModifierName = ac != null ? ac.Surname : "" }; var entlistdto = query.Select(s => new RegisterCheckPictureDto { Id = s.a.Id, RegisterCheckId = s.a.RegisterCheckId, CreationTime = s.a.CreationTime, CreatorId = s.a.CreatorId, DisplayOrder = s.a.DisplayOrder, IsPrint = s.a.IsPrint, LastModificationTime = s.a.LastModificationTime, LastModifierId = s.a.LastModifierId, PictureFilename = s.a.PictureFilename, LocalPathName = s.a.LocalPathName, LastModifierName = s.LastModifierName, PictureFileType = s.a.PictureFileType, CreatorName = s.CreatorName }).OrderBy(o => o.DisplayOrder).ToList(); return entlistdto; } /// /// 创建以及更新 批量操作 排序值不传就默认按传过来的顺序生成 /// /// /// [HttpPost("api/app/registercheckpicture/UpdateRegisterCheckPictureStatusMany")] public async Task UpdateRegisterCheckPictureStatusManyAsync(List input) { if (!input.Any()) { throw new UserFriendlyException("请求参数有误"); } List entlist_insert = new List(); List entlist_update = new List(); string PicName = DateTime.Now.ToString("yyyyMMddHHmmss"); foreach (var item in input) { var ent = await _registerCheckPictureRepository.FirstOrDefaultAsync(m => m.Id == item.RegisterCheckPictureId); if (ent != null) { ent.DisplayOrder = input.IndexOf(item) + 1; // ent.PictureFilename = item.PictureFilename; ent.IsPrint = item.IsPrint; if (item.PictureFileType != null) ent.PictureFileType = item.PictureFileType.Value; entlist_update.Add(ent); } } if (entlist_update.Any()) { await _registerCheckPictureRepository.UpdateManyAsync(entlist_update); } } /// /// 图片上传功能 base64 支持批量 /// /// /// /// [HttpPost("api/app/registercheckpicture/uploadregistercheckpicturemany")] public async Task> UploadRegisterCheckPictureManyAsync(UploadRegisterCheckPictureManyDto input) { Random rd = new Random(); string AbsolutePath = _configuration.GetValue("VirtualPath:RealPath"); string AbsoluteName = _configuration.GetValue("VirtualPath:Alias"); List msg = new List(); if (!input.PictureBaseStrs.Any()) { throw new UserFriendlyException("请求参数有误"); } var patientRegisterCompleteFlag = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId where registerCheck.Id == input.RegisterCheckId select new { CompleteFlag = patientRegister.CompleteFlag, PatientRegisterId = patientRegister.Id }).ToList(); if (patientRegisterCompleteFlag.Count == 0) throw new UserFriendlyException("体检人员不存在"); if (patientRegisterCompleteFlag.FirstOrDefault().CompleteFlag == PatientRegisterCompleteFlag.PreRegistration) throw new UserFriendlyException("预登记人员不能导入图片"); if (patientRegisterCompleteFlag.FirstOrDefault().CompleteFlag == PatientRegisterCompleteFlag.SumCheck) throw new UserFriendlyException("已总检人员不能导入图片"); string PatientRegisterId = patientRegisterCompleteFlag.FirstOrDefault().PatientRegisterId.ToString(); List entlist_insert = new List(); foreach (var item in input.PictureBaseStrs) { //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(), AbsoluteName); if (string.IsNullOrEmpty(PictureUrl)) { throw new UserFriendlyException("图片数据有误"); } var ent = await _registerCheckPictureRepository.FirstOrDefaultAsync(m => m.RegisterCheckId == input.RegisterCheckId && m.PictureFilename == PictureUrl); if (ent != null) { ent.PictureFilename = PictureUrl; await _registerCheckPictureRepository.UpdateAsync(ent); } else { ent = new RegisterCheckPicture { DisplayOrder = input.PictureBaseStrs.IndexOf(item) + 1, IsPrint = 'Y', PictureFilename = PictureUrl, RegisterCheckId = input.RegisterCheckId, PictureFileType = input.PictureFileType }; await _registerCheckPictureRepository.InsertAsync(ent); } msg.Add(PictureUrl); } return msg; } /// /// 图片上传功能 文件流 支持批量 /// /// /// /// /// [RemoteService(false)] [HttpPost("api/app/registercheckpicture/uploadregistercheckpicturefilemany")] public async Task> UploadRegisterCheckPictureFileManyAsync([FromForm(Name = "file")] List files, Guid RegisterCheckId) { Random rd = new Random(); string AbsolutePath = _configuration.GetValue("VirtualPath:RealPath"); List msg = new List(); if (!files.Any()) { throw new UserFriendlyException("请求参数有误"); } string PatientRegisterId = ""; var registerAsbitemEntity = await _registerCheckAsbitemRepository.FirstOrDefaultAsync(m => m.RegisterCheckId == RegisterCheckId); if (registerAsbitemEntity != null) { PatientRegisterId = registerAsbitemEntity.PatientRegisterId.ToString(); } else { throw new UserFriendlyException("体检人员不存在"); } string PicName = DateTime.Now.ToString("yyyyMMddHHmmss") + rd.Next(1000, 9999); List entlist_insert = new List(); foreach (var item in files) { string PictureUrl = ImageHelper.Base64StrToImageInAbsolutePath2(AbsolutePath, item, PatientRegisterId, RegisterCheckId.ToString(), PicName + "_" + (files.IndexOf(item) + 1)); if (string.IsNullOrEmpty(PictureUrl)) { throw new UserFriendlyException("图片数据有误"); } var ent = new RegisterCheckPicture { DisplayOrder = files.IndexOf(item) + 1, IsPrint = 'N', PictureFilename = PictureUrl, RegisterCheckId = RegisterCheckId }; entlist_insert.Add(ent); msg.Add(PictureUrl); } if (entlist_insert.Any()) { await _registerCheckPictureRepository.InsertManyAsync(entlist_insert); } return msg; } /// /// 删除 批量 /// /// /// /// [HttpPost("api/app/registercheckpicture/deleteregistercheckpicturemany")] public async Task DeleteRegisterCheckPictureManyAsync(List ids) { if (ids.Any()) { var patientRegisterCompleteFlag = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId join registerCheckPicture in await _registerCheckPictureRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckPicture.RegisterCheckId where ids.Contains(registerCheckPicture.Id) select new { CompleteFlag = patientRegister.CompleteFlag }).ToList(); if (patientRegisterCompleteFlag.Count == 0) throw new UserFriendlyException("Id不存在"); if (patientRegisterCompleteFlag.FirstOrDefault().CompleteFlag == PatientRegisterCompleteFlag.SumCheck) { throw new UserFriendlyException("已总检人员不能删除图片"); } await _registerCheckPictureRepository.DeleteAsync(m => ids.Contains(m.Id)); } else { throw new UserFriendlyException("请求参数有误"); } } /// /// 导入检查图片 根据检查单号 /// /// [HttpPost("api/app/RegisterCheckPicture/ImportRegisterCheckPicture")] public async Task ImportRegisterCheckPictureAsync(ImportRegisterCheckPictureInputDto input) { var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.CheckRequestNo == input.CheckRequestNo); if (registerCheckEnt == null) throw new UserFriendlyException("检查条码号不正确"); if (string.IsNullOrWhiteSpace(input.PictureBase64)) throw new UserFriendlyException("图片不能为空"); var pic = new List(); pic.Add(new UploadRegisterCheckPictureManyPictureBaseStrsDto { FileName = input.PictureName, PictureBaseStr = input.PictureBase64 }); await UploadRegisterCheckPictureManyAsync(new UploadRegisterCheckPictureManyDto { PictureBaseStrs = pic, PictureFileType = '0', RegisterCheckId = registerCheckEnt.Id }); } /// /// 导入检查图片 根据人员条码号+项目ID /// /// [HttpPost("api/app/RegisterCheckPicture/ImportRegisterCheckPictureByPatientRegisterNo")] public async Task ImportRegisterCheckPictureByPatientRegisterNoAsync(ImportRegisterCheckPictureByPatientRegisterNoInputDto input) { var registerCheckList = (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 patientRegister.PatientRegisterNo == input.PatientRegisterNo && registerCheckAsbitem.AsbitemId == input.AsbitemId select registerCheck).ToList(); if (!registerCheckList.Any()) throw new UserFriendlyException("人员信息或项目信息不正确"); if (string.IsNullOrWhiteSpace(input.PictureBase64)) throw new UserFriendlyException("图片不能为空"); var pic = new List(); pic.Add(new UploadRegisterCheckPictureManyPictureBaseStrsDto { FileName = input.PictureName, PictureBaseStr = input.PictureBase64 }); foreach (var registerCheck in registerCheckList) { await UploadRegisterCheckPictureManyAsync(new UploadRegisterCheckPictureManyDto { PictureBaseStrs = pic, PictureFileType = '0', RegisterCheckId = registerCheck.Id }); } } /// /// 导入检查图片 根据检验申请号 /// /// [HttpPost("api/app/RegisterCheckPicture/ImportRegisterCheckPictureByLisRequestNo")] public async Task ImportRegisterCheckPictureByLisRequestNoAsync(ImportRegisterCheckPictureByLisRequestNoInputDto input) { var registerCheckList = (from registerCheck in await _registerCheckRepository.GetQueryableAsync() join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId join lisRequest in await _lisRequestRepository.GetQueryableAsync() on registerCheckAsbitem.LisRequestId equals lisRequest.Id where lisRequest.LisRequestNo == input.LisRequestNo && registerCheckAsbitem.AsbitemId == input.AsbitemId select registerCheck).ToList(); if (!registerCheckList.Any()) throw new UserFriendlyException("人员信息或项目信息不正确"); if (string.IsNullOrWhiteSpace(input.PictureBase64)) throw new UserFriendlyException("图片不能为空"); var pic = new List(); pic.Add(new UploadRegisterCheckPictureManyPictureBaseStrsDto { FileName = input.PictureName, PictureBaseStr = input.PictureBase64 }); foreach (var registerCheck in registerCheckList) { await UploadRegisterCheckPictureManyAsync(new UploadRegisterCheckPictureManyDto { PictureBaseStrs = pic, PictureFileType = '0', RegisterCheckId = registerCheck.Id }); } } /// /// 仪器采图接口 /// /// /// /// [HttpPost("api/app/RegisterCheckPicture/InstrumentMapping")] public async Task> InstrumentMappingAsync(InstrumentMappingDto input) { Random rd = new Random(); string AbsolutePath = _configuration.GetValue("PacsVirtualPath:RealPath"); string AbsoluteName = _configuration.GetValue("PacsVirtualPath:Alias"); List msg = new List(); if (!input.PictureBaseStrs.Any()) { throw new UserFriendlyException("请求参数有误"); } var patientRegisterCompleteFlag = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId where registerCheck.Id == input.RegisterCheckId select new { CompleteFlag = patientRegister.CompleteFlag, PatientRegisterId = patientRegister.Id }).ToList(); if (patientRegisterCompleteFlag.Count == 0) throw new UserFriendlyException("体检人员不存在"); if (patientRegisterCompleteFlag.FirstOrDefault().CompleteFlag == PatientRegisterCompleteFlag.PreRegistration) throw new UserFriendlyException("预登记人员不能导入图片"); if (patientRegisterCompleteFlag.FirstOrDefault().CompleteFlag == PatientRegisterCompleteFlag.SumCheck) throw new UserFriendlyException("已总检人员不能导入图片"); string PatientRegisterId = patientRegisterCompleteFlag.FirstOrDefault().PatientRegisterId.ToString(); List entlist_insert = new List(); foreach (var item in input.PictureBaseStrs) { string PictureUrl = ImageHelper.Base64StrToImageInAbsolutePath(AbsolutePath, item.FileName, item.PictureBaseStr, PatientRegisterId, input.RegisterCheckId.ToString(), AbsoluteName); if (string.IsNullOrEmpty(PictureUrl)) { throw new UserFriendlyException("图片数据有误"); } var ent = await _registerCheckPictureRepository.FirstOrDefaultAsync(m => m.RegisterCheckId == input.RegisterCheckId && m.PictureFilename == PictureUrl); if (ent != null) { ent.PictureFilename = PictureUrl; await _registerCheckPictureRepository.UpdateAsync(ent); } else { ent = new RegisterCheckPicture { DisplayOrder = input.PictureBaseStrs.IndexOf(item) + 1, IsPrint = 'Y', PictureFilename = PictureUrl, RegisterCheckId = input.RegisterCheckId, PictureFileType = input.PictureFileType, LocalPathName = item.LocalPathName }; await _registerCheckPictureRepository.InsertAsync(ent); } msg.Add(PictureUrl); } return msg; } /// /// 修改图片内容 /// /// /// [HttpPost("api/app/RegisterCheckPicture/UpdateRegisterCheckPicture")] public async Task UpdateRegisterCheckPictureAsync(UpdateRegisterCheckPictureInputDto input) { var registerCheckPictureEnt = await _registerCheckPictureRepository.FirstOrDefaultAsync(f => f.Id == input.RegisterCheckPictureId); if (registerCheckPictureEnt == null) throw new UserFriendlyException("RegisterCheckPictureId不正确"); if (string.IsNullOrWhiteSpace(input.PictureBaseStr)) { throw new UserFriendlyException("图片数据有误"); } string AbsolutePath = _configuration.GetValue("VirtualPath:RealPath"); string AbsoluteName = _configuration.GetValue("VirtualPath:Alias"); var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.Id == registerCheckPictureEnt.RegisterCheckId); if (registerCheckEnt == null) throw new UserFriendlyException("检查数据不存在"); string PictureUrl = ImageHelper.Base64StrToImageInAbsolutePath(AbsolutePath, input.FileName, input.PictureBaseStr, registerCheckEnt.PatientRegisterId.ToString(), registerCheckEnt.Id.ToString(), AbsoluteName); if (string.IsNullOrEmpty(PictureUrl)) { throw new UserFriendlyException("图片资源不正确"); } registerCheckPictureEnt.PictureFilename = PictureUrl; if (!string.IsNullOrWhiteSpace(input.LocalPathName)) { registerCheckPictureEnt.LocalPathName = input.LocalPathName; } await _registerCheckPictureRepository.UpdateAsync(registerCheckPictureEnt); } } }