You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

607 lines
25 KiB

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);
}
}
}