255 lines
9.8 KiB
C#
255 lines
9.8 KiB
C#
using IRaCIS.Application.Interfaces;
|
||
using IRaCIS.Application.Contracts;
|
||
using IRaCIS.Core.Infra.EFCore;
|
||
using IRaCIS.Core.Domain.Models;
|
||
using IRaCIS.Core.Infrastructure.Extention;
|
||
using Microsoft.AspNetCore.Mvc;
|
||
using Panda.DynamicWebApi.Attributes;
|
||
|
||
namespace IRaCIS.Application.Services
|
||
{
|
||
/// <summary>
|
||
/// 医生文档关联关系维护
|
||
/// </summary>
|
||
[ApiExplorerSettings(GroupName = "Reviewer")]
|
||
public class AttachmentService : BaseService, IAttachmentService
|
||
{
|
||
private readonly IRepository<Attachment> _attachmentrepository;
|
||
|
||
public AttachmentService(IRepository<Attachment> attachmentrepository)
|
||
{
|
||
this._attachmentrepository = attachmentrepository;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除附件
|
||
/// </summary>
|
||
/// <param name="param"></param>
|
||
/// <returns></returns>
|
||
|
||
public async Task<IResponseOutput> DeleteAttachment([FromBody]AttachementCommand param)
|
||
{
|
||
//var attachment = _doctorAttachmentApp.GetDetailById(id);
|
||
//string file = HostingEnvironment.MapPath(attachment.Path);
|
||
|
||
//if (File.Exists(file))
|
||
//{
|
||
// File.Delete(file);
|
||
//}
|
||
//var temp = HostingEnvironment.MapPath(param.Path);
|
||
//if (File.Exists(temp))
|
||
//{
|
||
// File.Delete(temp);
|
||
//}
|
||
|
||
var success =await _attachmentrepository.BatchDeleteNoTrackingAsync(a => a.Id == param.Id);
|
||
return ResponseOutput.Result(success);
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 根据医生Id 和 附件类型,获取记录
|
||
/// </summary>
|
||
/// <param name="doctorId">医生Id</param>
|
||
/// <param name="type">附件类型</param>
|
||
/// <returns></returns>
|
||
[HttpGet("{doctorId:guid}/{type}")]
|
||
public async Task<IEnumerable<AttachmentDTO>> GetAttachmentByType(Guid doctorId, string type)
|
||
{
|
||
var attachmentList = await _attachmentrepository.Where(a => a.DoctorId == doctorId && a.Type.Equals(type)).ProjectTo<AttachmentDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||
attachmentList.ForEach(t => t.FullPath = t.Path + "?access_token=" + _userInfo.UserToken);
|
||
|
||
return attachmentList;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取单个医生的多种证书附件
|
||
/// </summary>
|
||
/// <param name="doctorId">医生Id</param>
|
||
/// <param name="types">类型数组</param>
|
||
/// <returns></returns>
|
||
[HttpPost("{doctorId:guid}")]
|
||
public async Task<IEnumerable<AttachmentDTO>> GetAttachmentByTypes(Guid doctorId, string[] types)
|
||
{
|
||
|
||
var attachmentList =await _attachmentrepository.Where(a => a.DoctorId == doctorId && types.Contains(a.Type)).OrderBy(s => s.Type).ThenBy(m => m.CreateTime).ProjectTo<AttachmentDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||
attachmentList.ForEach(t => t.FullPath = t.Path + "?access_token=" + _userInfo.UserToken);
|
||
|
||
return attachmentList;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 根据医生Id获取医生附件
|
||
/// </summary>
|
||
/// <param name="doctorId">医生Id</param>
|
||
/// <returns></returns>
|
||
[HttpGet("{doctorId:guid}")]
|
||
public async Task<IEnumerable<AttachmentDTO>> GetAttachments(Guid doctorId)
|
||
{
|
||
var attachmentList =await _attachmentrepository.Where(a => a.DoctorId == doctorId).OrderBy(s => s.Type).ThenBy(m => m.CreateTime).ProjectTo<AttachmentDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||
attachmentList.ForEach(t => t.FullPath = t.Path + "?access_token=" + _userInfo.UserToken);
|
||
|
||
return attachmentList;
|
||
}
|
||
|
||
[NonDynamicMethod]
|
||
public async Task<AttachmentDTO> GetDetailById(Guid attachmentId)
|
||
{
|
||
var attachment = await _attachmentrepository.FirstOrDefaultAsync(a => a.Id == attachmentId).IfNullThrowException();
|
||
var temp= _mapper.Map<AttachmentDTO>(attachment);
|
||
temp.FullPath = temp.Path + "?access_token=" + _userInfo.UserToken;
|
||
return temp;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 保存多个附件
|
||
/// </summary>
|
||
/// <param name="attachmentList"></param>
|
||
/// <returns></returns>
|
||
public async Task<IEnumerable<AttachmentDTO>> SaveAttachments(IEnumerable<AttachmentDTO> attachmentList)
|
||
{
|
||
var attachments = _mapper.Map<IEnumerable<Attachment>>(attachmentList).ToList();
|
||
|
||
//1 是中文 2是英文 中英文第一份简历默认设置为官方
|
||
|
||
var zhCount = attachments.Count(t => t.Language == 1);
|
||
var usCount = attachments.Count(t => t.Language == 2);
|
||
|
||
if (zhCount == 1)
|
||
{
|
||
var k = attachments.First(t => t.Language == 1);
|
||
k.IsOfficial = true;
|
||
}
|
||
if (usCount == 1)
|
||
{
|
||
var k = attachments.First(t => t.Language == 2);
|
||
k.IsOfficial = true;
|
||
}
|
||
|
||
|
||
//处理重传
|
||
var reUpload = attachmentList.FirstOrDefault(t => t.ReUpload == true);
|
||
if (reUpload != null)
|
||
{
|
||
//因为界面现实的列表用了 接口返回的列表,所以要把返回的模型对应的字段也要更改
|
||
var attach = attachments.First(t => t.Id == reUpload.Id);
|
||
attach.CreateTime = DateTime.Now;
|
||
|
||
|
||
//重传的时候,发现 相同语言的官方简历数量为2 那么将重传的简历设置为非官方
|
||
if (attachments.Count(t => t.Language == reUpload.Language && t.IsOfficial) == 2)
|
||
{
|
||
await _attachmentrepository.BatchUpdateNoTrackingAsync(t => t.Id == reUpload.Id, u => new Attachment()
|
||
{
|
||
Path = reUpload.Path,
|
||
CreateTime = DateTime.Now,
|
||
Language = reUpload.Language,
|
||
IsOfficial = false
|
||
});
|
||
attach.IsOfficial = false;
|
||
}
|
||
else //相同语言的重传
|
||
{
|
||
await _attachmentrepository.BatchUpdateNoTrackingAsync(t => t.Id == reUpload.Id, u => new Attachment()
|
||
{
|
||
Path = reUpload.Path,
|
||
CreateTime = DateTime.Now,
|
||
Language = reUpload.Language
|
||
});
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
var newAttachment = attachments.Where(t => t.Id == Guid.Empty);
|
||
|
||
await _repository.AddRangeAsync(newAttachment);
|
||
await _repository.SaveChangesAsync();
|
||
|
||
//_doctorAttachmentRepository.AddRange(newAttachment);
|
||
//_doctorAttachmentRepository.SaveChanges();
|
||
|
||
var list = _mapper.Map<IEnumerable<AttachmentDTO>>(attachments).ToList();
|
||
|
||
list.ForEach(t => t.FullPath = t.Path + "?access_token=" + _userInfo.UserToken);
|
||
|
||
return list;
|
||
}
|
||
|
||
public async Task<IResponseOutput<AttachmentDTO>> AddAttachment(AttachmentDTO attachment)
|
||
{
|
||
|
||
var newAttachment = _mapper.Map<Attachment>(attachment);
|
||
//如果这个医生不存在 这个语言的官方简历 就设置为官方简历
|
||
if (! await _attachmentrepository.AnyAsync(t => t.Type == "Resume" && t.DoctorId == attachment.DoctorId && t.Language == attachment.Language && t.IsOfficial))
|
||
{
|
||
newAttachment.IsOfficial = true;
|
||
|
||
attachment.IsOfficial = true;
|
||
}
|
||
|
||
await _repository.AddAsync(newAttachment);
|
||
var success = await _repository.SaveChangesAsync();
|
||
return ResponseOutput.Result(success, attachment);
|
||
}
|
||
|
||
|
||
[NonDynamicMethod]
|
||
public async Task<string> GetDoctorOfficialCV(int language, Guid doctorId)
|
||
{
|
||
var result = await _attachmentrepository.FirstOrDefaultAsync(a => a.DoctorId == doctorId &&
|
||
a.IsOfficial && a.Type.Equals("Resume") && a.Language == language);
|
||
if (result != null)
|
||
{
|
||
return result.Path;
|
||
}
|
||
return string.Empty;
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 将简历设置为官方简历
|
||
/// </summary>
|
||
/// <param name="doctorId"></param>
|
||
/// <param name="attachmentId"></param>
|
||
/// <param name="language"></param>
|
||
/// <returns></returns>
|
||
|
||
[HttpPost("{doctorId:guid}/{attachmentId:guid}/{language}")]
|
||
public async Task<IResponseOutput> SetOfficial(Guid doctorId, Guid attachmentId, int language)
|
||
{
|
||
var resumeList = await _attachmentrepository.Where(t => t.DoctorId == doctorId && t.Type == "Resume" && t.Language == language).ToListAsync();
|
||
foreach (var item in resumeList)
|
||
{
|
||
if (item.Id == attachmentId) item.IsOfficial = true;
|
||
else item.IsOfficial = false;
|
||
await _repository.UpdateAsync(item);
|
||
}
|
||
|
||
return ResponseOutput.Result(await _repository.SaveChangesAsync());
|
||
}
|
||
|
||
/// <summary>
|
||
/// 设置简历的语言类型
|
||
/// </summary>
|
||
/// <param name="doctorId"></param>
|
||
/// <param name="attachmentId"></param>
|
||
/// <param name="language">0-未设置,1-中文,2-英文</param>
|
||
/// <returns></returns>
|
||
|
||
[HttpPost("{doctorId:guid}/{attachmentId:guid}/{language}")]
|
||
public async Task<IResponseOutput> SetLanguage(Guid doctorId, Guid attachmentId, int language)
|
||
{
|
||
bool result =await _attachmentrepository.BatchUpdateNoTrackingAsync(t => t.Id == attachmentId, a => new Attachment
|
||
{
|
||
Language = language,
|
||
IsOfficial = false
|
||
});
|
||
return ResponseOutput.Result(result);
|
||
}
|
||
|
||
|
||
}
|
||
}
|