| 
						 | 
						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{    /// <summary>
    /// 体检登记组合项目图片
    /// </summary>
    [ApiExplorerSettings(GroupName = "Work")]    [Authorize]    public class RegisterCheckPictureAppService : ApplicationService    {        private readonly IRepository<IdentityUser, Guid> _userRepository;        private readonly IRepository<RegisterCheckPicture, Guid> _registerCheckPictureRepository;        private readonly IRepository<RegisterCheckAsbitem, Guid> _registerCheckAsbitemRepository;        private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;        private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;        private readonly IRepository<LisRequest, Guid> _lisRequestRepository;        private readonly RegisterCheckPictureManager _registerCheckPictureManager;        private readonly IConfiguration _configuration;
        public RegisterCheckPictureAppService(            IRepository<RegisterCheckPicture, Guid> registerCheckPictureRepository,            RegisterCheckPictureManager registerCheckPictureManager,            IRepository<IdentityUser, Guid> userRepository,            IRepository<RegisterCheckAsbitem, Guid> registerCheckAsbitemRepository,            IConfiguration configuration,            IRepository<RegisterCheck, Guid> registerCheckRepository,            IRepository<PatientRegister, Guid> patientRegisterRepository,            IRepository<LisRequest, Guid> lisRequestRepository)        {            _registerCheckPictureRepository = registerCheckPictureRepository;            _registerCheckPictureManager = registerCheckPictureManager;            _userRepository = userRepository;            _registerCheckAsbitemRepository = registerCheckAsbitemRepository;            _configuration = configuration;            _registerCheckRepository = registerCheckRepository;            _patientRegisterRepository = patientRegisterRepository;            _lisRequestRepository = lisRequestRepository;        }
        /// <summary>
        /// 根据RegisterCheckId获取列表
        /// </summary>
        /// <param name="RegisterCheckId">RegisterCheck表ID</param>
        /// <returns></returns>
        [HttpGet("api/app/registercheckpicture/getregistercheckpictureinregistercheckid")]        public async Task<List<RegisterCheckPictureDto>> 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;        }
        /// <summary>
        /// 创建以及更新  批量操作  排序值不传就默认按传过来的顺序生成
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("api/app/registercheckpicture/UpdateRegisterCheckPictureStatusMany")]        public async Task UpdateRegisterCheckPictureStatusManyAsync(List<UpdateRegisterCheckPictureStatusManyDto> input)        {
            if (!input.Any())            {                throw new UserFriendlyException("请求参数有误");            }
            List<RegisterCheckPicture> entlist_insert = new List<RegisterCheckPicture>();            List<RegisterCheckPicture> entlist_update = new List<RegisterCheckPicture>();
            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);            }        }
        /// <summary>
        /// 图片上传功能 base64  支持批量
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        /// <exception cref="UserFriendlyException"></exception>
        [HttpPost("api/app/registercheckpicture/uploadregistercheckpicturemany")]        public async Task<List<string>> UploadRegisterCheckPictureManyAsync(UploadRegisterCheckPictureManyDto input)        {
            Random rd = new Random();
            string AbsolutePath = _configuration.GetValue<string>("VirtualPath:RealPath");            string AbsoluteName = _configuration.GetValue<string>("VirtualPath:Alias");
            List<string> msg = new List<string>();
            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<RegisterCheckPicture> entlist_insert = new List<RegisterCheckPicture>();
            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;        }
        /// <summary>
        ///  图片上传功能  文件流   支持批量 
        /// </summary>
        /// <param name="files"></param>
        /// <param name="RegisterCheckId"></param>
        /// <returns></returns>
        /// <exception cref="UserFriendlyException"></exception>
        [RemoteService(false)]        [HttpPost("api/app/registercheckpicture/uploadregistercheckpicturefilemany")]        public async Task<List<string>> UploadRegisterCheckPictureFileManyAsync([FromForm(Name = "file")] List<IFormFile> files, Guid RegisterCheckId)        {
            Random rd = new Random();
            string AbsolutePath = _configuration.GetValue<string>("VirtualPath:RealPath");
            List<string> msg = new List<string>();
            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<RegisterCheckPicture> entlist_insert = new List<RegisterCheckPicture>();
            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;        }
        /// <summary>
        /// 删除 批量
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        /// <exception cref="UserFriendlyException"></exception>
        [HttpPost("api/app/registercheckpicture/deleteregistercheckpicturemany")]        public async Task DeleteRegisterCheckPictureManyAsync(List<Guid> 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("请求参数有误");            }        }
        /// <summary>
        /// 导入检查图片  根据检查单号
        /// </summary>
        /// <returns></returns>
        [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<UploadRegisterCheckPictureManyPictureBaseStrsDto>();            pic.Add(new UploadRegisterCheckPictureManyPictureBaseStrsDto            {                FileName = input.PictureName,                PictureBaseStr = input.PictureBase64            });
            await UploadRegisterCheckPictureManyAsync(new UploadRegisterCheckPictureManyDto            {                PictureBaseStrs = pic,                PictureFileType = '0',                RegisterCheckId = registerCheckEnt.Id            });
        }
        /// <summary>
        /// 导入检查图片  根据人员条码号+项目ID
        /// </summary>
        /// <returns></returns>
        [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<UploadRegisterCheckPictureManyPictureBaseStrsDto>();            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                });            }
        }
        /// <summary>
        /// 导入检查图片  根据检验申请号
        /// </summary>
        /// <returns></returns>
        [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<UploadRegisterCheckPictureManyPictureBaseStrsDto>();            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                });            }
        }
        /// <summary>
        /// 仪器采图接口
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        /// <exception cref="UserFriendlyException"></exception>
        [HttpPost("api/app/RegisterCheckPicture/InstrumentMapping")]        public async Task<List<string>> InstrumentMappingAsync(InstrumentMappingDto input)        {
            Random rd = new Random();
            string AbsolutePath = _configuration.GetValue<string>("PacsVirtualPath:RealPath");            string AbsoluteName = _configuration.GetValue<string>("PacsVirtualPath:Alias");
            List<string> msg = new List<string>();
            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<RegisterCheckPicture> entlist_insert = new List<RegisterCheckPicture>();
            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;        }
        /// <summary>
        /// 修改图片内容
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [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<string>("VirtualPath:RealPath");            string AbsoluteName = _configuration.GetValue<string>("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);
        }    }}
  |