irc-netcore-api/IRaCIS.Core.Application/Service/Financial/TrialPaymentPriceService.cs

189 lines
8.3 KiB
C#

using AutoMapper;
using IRaCIS.Application.Interfaces;
using IRaCIS.Application.Contracts;
using IRaCIS.Core.Infra.EFCore;
using Microsoft.AspNetCore.Mvc;
using Panda.DynamicWebApi.Attributes;
namespace IRaCIS.Application.Services
{
[ApiExplorerSettings(GroupName = "Financial")]
public class TrialPaymentPriceService : BaseService, ITrialPaymentPriceService
{
private readonly IRepository<TrialPaymentPrice> _trialExtRepository;
private readonly IRepository<Enroll> _enrollRepository;
private readonly IRepository<Doctor> _doctorRepository;
private readonly IRepository<CRO> _croRepository;
private readonly IRepository<Trial> _trialRepository;
public TrialPaymentPriceService(IRepository<Trial> trialRepository, IRepository<TrialPaymentPrice> trialExtRepository,
IRepository<Enroll> enrollRepository,
IRepository<Doctor> doctorRepository,
IRepository<CRO> croCompanyRepository, IMapper mapper)
{
_trialExtRepository = trialExtRepository;
_croRepository = croCompanyRepository;
_enrollRepository = enrollRepository;
_doctorRepository = doctorRepository;
_trialRepository = trialRepository;
}
/// <summary>
/// 添加或更新项目支付价格信息
/// </summary>
[NonDynamicMethod]
public async Task<IResponseOutput> AddOrUpdateTrialPaymentPrice(TrialPaymentPriceCommand addOrUpdateModel)
{
var trialExistedItem = await _trialExtRepository.FirstOrDefaultAsync(u => u.TrialId == addOrUpdateModel.TrialId);
if (trialExistedItem == null)//insert
{
await _trialExtRepository.InsertFromDTOAsync(addOrUpdateModel);
}
else//update
{
await _trialExtRepository.UpdateFromDTOAsync(addOrUpdateModel);
}
var success = await _trialExtRepository.SaveChangesAsync();
return ResponseOutput.Result(success);
}
[HttpPost]
public async Task<IResponseOutput> UploadTrialSOW(TrialSOWPathDTO trialSowPath)
{
var trialPaymentPrice = await _trialExtRepository.FirstOrDefaultAsync(u => u.TrialId == trialSowPath.TrialId);
if (trialPaymentPrice == null)//添加
{
await _trialExtRepository.InsertFromDTOAsync(trialSowPath);
}
else//更新
{
await _trialExtRepository.UpdateFromDTOAsync(trialSowPath);
}
var success = await _trialExtRepository.SaveChangesAsync();
return ResponseOutput.Result(success);
}
[HttpPost]
public async Task<IResponseOutput> DeleteTrialSOW(DeleteSowPathDTO trialSowPath)
{
var success = await _trialExtRepository.BatchUpdateNoTrackingAsync(u => u.TrialId == trialSowPath.TrialId, s => new TrialPaymentPrice
{
SowPath = "",
SowName = "",
UpdateTime = DateTime.Now,
UpdateUserId = _userInfo.Id
});
return ResponseOutput.Result(success);
}
/// <summary>
/// 获取项目支付价格信息列表
/// </summary>
[HttpPost]
public async Task<PageOutput<TrialPaymentPriceDTO>> GetTrialPaymentPriceList(TrialPaymentPriceQueryDTO inQuery)
{
#region hwt
//var trialQueryable = from trial in _trialRepository.AsQueryable()
// .WhereIf(queryParam.CroId != null, o => o.CROId == queryParam.CroId)
// .WhereIf(!string.IsNullOrEmpty(queryParam.KeyWord), o => o.TrialCode.Contains(queryParam.KeyWord) || o.Indication.Contains(queryParam.KeyWord))
// join cro in _croRepository.AsQueryable() on trial.CROId equals cro.Id into CRO
// from croInfo in CRO.DefaultIfEmpty()
// join trialExt in _trialExtRepository.Where()
// on trial.Id equals trialExt.TrialId into trialInfo
// from trialExt in trialInfo.DefaultIfEmpty()
// select new TrialPaymentPriceDTO
// {
// //Id = trialExt.Id ,
// IsNewTrial = trialExt.IsNewTrial,
// TrialId = trial.Id,
// TrialCode = trial.TrialCode,
// Cro = croInfo.CROName,
// Indication = trial.Indication,
// Expedited = trial.Expedited,
// TrialAdditional = trialExt.TrialAdditional,
// AdjustmentMultiple = trialExt.AdjustmentMultiple,
// SowName = trialExt.SowName,
// SowPath = trialExt.SowPath,
// CreateTime = trial.CreateTime,
// };
//var namelist = (from enroll in _enrollRepository.AsQueryable()
// join doctor in _doctorRepository.Where() on enroll.DoctorId equals doctor.Id
// select new DtoDoctorList()
// {
// TrialId = enroll.TrialId,
// Name = doctor.ChineseName
// }).ToList().GroupBy(x => new { x.TrialId },
//(key, lst) => new DtoDoctorList
//{
// TrialId = key.TrialId,
// Name = string.Join(',', lst.Select(x => x.Name))
//});
//var returndata = trialQueryable.ToPagedList(queryParam.PageIndex, queryParam.PageSize, "CreateTime", queryParam.Asc);
//returndata.CurrentPageData.ForEach(x => {
// x.DoctorsNames = namelist.Where(y => y.TrialId == x.TrialId).Select(y => y.Name).FirstOrDefault() ?? string.Empty;
//});
//return returndata;
#endregion
#region byzhouhang 方式一
//var trialQueryable = _trialExtRepository.Where(t => t.Trial.IsDeleted == false)
// .WhereIf(queryParam.CroId != null, o => o.Trial.CROId == queryParam.CroId)
// .WhereIf(!string.IsNullOrEmpty(queryParam.KeyWord), o => o.Trial.TrialCode.Contains(queryParam.KeyWord) || o.Trial.Indication.Contains(queryParam.KeyWord))
// .Select(trialExt => new TrialPaymentPriceDTO()
// {
// TrialCode = trialExt.Trial.TrialCode,
// Cro = trialExt.Trial.CRO.CROName,
// Indication = trialExt.Trial.Indication,
// Expedited = trialExt.Trial.Expedited,
// TrialId = trialExt.TrialId,
// IsNewTrial = trialExt.IsNewTrial,
// SowName = trialExt.SowName,
// SowPath = trialExt.SowPath,
// TrialAdditional = trialExt.TrialAdditional,
// AdjustmentMultiple = trialExt.AdjustmentMultiple,
// CreateTime = trialExt.CreateTime,
// DoctorsNames = string.Join(',', trialExt.Trial.EnrollList.Select(t => t.Doctor.ChineseName))
// });
//return trialQueryable.ToPagedList(queryParam.PageIndex, queryParam.PageSize, string.IsNullOrEmpty(queryParam.SortField) ? "CreateTime" : queryParam.SortField, queryParam.Asc);
#endregion
#region byzhouhang 方式二
var trialQueryable2 = _trialExtRepository.Where(t => t.Trial.IsDeleted == false)
.WhereIf(inQuery.CroId != null, o => o.Trial.CROId == inQuery.CroId)
.WhereIf(!string.IsNullOrEmpty(inQuery.KeyWord), o => o.Trial.TrialCode.Contains(inQuery.KeyWord) || o.Trial.Indication.Contains(inQuery.KeyWord))
.ProjectTo<TrialPaymentPriceDTO>(_mapper.ConfigurationProvider);
return await trialQueryable2.ToPagedListAsync(inQuery);
#endregion
}
}
}