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 _trialExtRepository; private readonly IRepository _enrollRepository; private readonly IRepository _doctorRepository; private readonly IRepository _croRepository; private readonly IRepository _trialRepository; public TrialPaymentPriceService(IRepository trialRepository, IRepository trialExtRepository, IRepository enrollRepository, IRepository doctorRepository, IRepository croCompanyRepository, IMapper mapper) { _trialExtRepository = trialExtRepository; _croRepository = croCompanyRepository; _enrollRepository = enrollRepository; _doctorRepository = doctorRepository; _trialRepository = trialRepository; } /// /// 添加或更新项目支付价格信息 /// [NonDynamicMethod] public async Task 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 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 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); } /// /// 获取项目支付价格信息列表 /// [HttpPost] public async Task> GetTrialPaymentPriceList(TrialPaymentPriceQueryDTO queryParam) { #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(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)) .ProjectTo(_mapper.ConfigurationProvider); return await trialQueryable2.ToPagedListAsync(queryParam.PageIndex, queryParam.PageSize, string.IsNullOrEmpty(queryParam.SortField) ? "CreateTime" : queryParam.SortField, queryParam.Asc); #endregion } } }