189 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			8.4 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 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<TrialPaymentPriceDTO>(_mapper.ConfigurationProvider);
 | |
| 
 | |
|             return await trialQueryable2.ToPagedListAsync(queryParam.PageIndex, queryParam.PageSize, string.IsNullOrEmpty(queryParam.SortField) ? "CreateTime" : queryParam.SortField, queryParam.Asc);
 | |
| 
 | |
|             #endregion
 | |
| 
 | |
| 
 | |
| 
 | |
|         }
 | |
| 
 | |
| 
 | |
|     }
 | |
| }
 |