using DocumentFormat.OpenXml.Bibliography; using IRaCIS.Application.Contracts; using IRaCIS.Core.Application.Auth; using IRaCIS.Core.Application.Contracts.Dicom.DTO; using IRaCIS.Core.Domain.Share; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Windows.Input; namespace IRaCIS.Core.Application.Services { [AllowAnonymous, ApiExplorerSettings(GroupName = "HIR")] public class ImageShareService(IRepository _imageShareRepository, ITokenService _tokenService, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IImageShareService { /// /// 创建影像分享,返回分享Id 和初始化随机密码 /// /// /// [HttpPost] public async Task CreateImageShare(ImageShareCommand imageShareCommand) { var imageShare = _mapper.Map(imageShareCommand); var addEntity = await _imageShareRepository.AddAsync(imageShare); addEntity.ExpireTime = DateTime.Now.AddDays(7); //验证码 4位 int verificationPassWord = new Random().Next(1000, 10000); addEntity.Password = verificationPassWord.ToString(); var success = await _imageShareRepository.SaveChangesAsync(); return ResponseOutput.Result(success, new { ResourceId = imageShare.Id, Password = verificationPassWord.ToString(), ImageShareExpireDays = 7 }); } /// /// 更新影像分享 密码和授权时间 /// /// /// [HttpPut] public async Task UpdateImageShare(UpdateImageShare inComand) { var find = await _imageShareRepository.FirstOrDefaultAsync(t => t.Id == inComand.Id); find.ExpireTime = DateTime.Now.AddDays(inComand.ImageShareExpireDays); find.Password = inComand.Password; await _imageShareRepository.SaveChangesAsync(); return ResponseOutput.Ok(); } [HttpGet, Route("{resourceId:guid}/{password}")] public async Task VerifyShareImage(Guid resourceId, string password) { var pWord = password.Trim(); var imageShare = await _imageShareRepository.FirstOrDefaultAsync(t => t.Id == resourceId); if (imageShare == null) { //---资源不存在。 return ResponseOutput.NotOk(_localizer["ISS_ResNotExists"]); } if (pWord != imageShare.Password.Trim()) { //---分享密码错误。 return ResponseOutput.NotOk(_localizer["ISS_SharePwdError"]); } if (DateTime.Now > imageShare.ExpireTime) { //---资源分享过期。 return ResponseOutput.NotOk(_localizer["ISS_ShareExpiration"]); } var resource = new ResourceInfo() { VisitTaskId = imageShare.VisitTaskId, RouteUrl = imageShare.RouteUrl, Token = _tokenService.GetToken(new UserTokenInfo() { IdentityUserId = Guid.NewGuid(), FullName = "Share001", UserName = "Share001", UserTypeEnum = UserTypeEnum.ShareImage, }) }; return ResponseOutput.Ok(resource); } } }