574 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			574 lines
		
	
	
		
			28 KiB
		
	
	
	
		
			C#
		
	
	
| //using IRaCIS.Application.Contracts;
 | ||
| //using IRaCIS.Core.Application.Contracts;
 | ||
| //using System.Linq.Expressions;
 | ||
| //using IRaCIS.Core.Infrastructure.ExpressionExtend;
 | ||
| //using IRaCIS.Core.Infra.EFCore;
 | ||
| //using IRaCIS.Core.Domain.Models;
 | ||
| //using IRaCIS.Core.Domain.Share;
 | ||
| //using IRaCIS.Core.Infrastructure.Extention;
 | ||
| //using Microsoft.AspNetCore.Mvc;
 | ||
| 
 | ||
| //namespace IRaCIS.Core.Application.Services
 | ||
| //{
 | ||
| //    /// <summary>
 | ||
| //    /// TP、Global、AD 工作量分配查看
 | ||
| //    /// </summary>
 | ||
| //    [ ApiExplorerSettings(GroupName = "Trial")]
 | ||
| //#pragma warning disable
 | ||
| //    public class WorkloadDistributionService : BaseService, IWorkloadDistributionService
 | ||
| //    {
 | ||
| //        private readonly IWorkloadTPRepository _workloadTpRepository;
 | ||
| //        private readonly IWorkloadGlobalRepository _workloadGlobalRepository;
 | ||
| //        private readonly IWorkloadADRepository _workloadAdRepository;
 | ||
| //        private readonly IRepository<SubjectVisit> _subjectVisitRepository;
 | ||
| //        private readonly IRepository<DicomStudy> _studyRepository;
 | ||
| //        private readonly IRepository<Doctor> _doctorRepository;
 | ||
| //        private readonly IRepository<Subject> _subjectRepository;
 | ||
| //        private readonly IRepository<Site> _siteRepository;
 | ||
| //        private readonly IWorkloadDetailRepository _workloadDetailRepository;
 | ||
|        
 | ||
| 
 | ||
| //        public WorkloadDistributionService(IWorkloadTPRepository workloadTpRepository,
 | ||
| //            IWorkloadGlobalRepository workloadGlobalRepository,
 | ||
| //            IWorkloadADRepository workloadAdRepository,
 | ||
| //            IRepository<SubjectVisit> subjectVisitRepository, IRepository<DicomStudy> studyRepository,
 | ||
| //            IRepository<Doctor> doctorRepository, IRepository<Subject> subjectRepository,
 | ||
| //            IRepository<Site> siteRepository,
 | ||
| //            IWorkloadDetailRepository workloadDetailRepository,
 | ||
| //            IUserInfo userInfo)
 | ||
| //        {
 | ||
| //            _workloadTpRepository = workloadTpRepository;
 | ||
| //            _workloadGlobalRepository = workloadGlobalRepository;
 | ||
| //            _workloadAdRepository = workloadAdRepository;
 | ||
| //            _subjectVisitRepository = subjectVisitRepository;
 | ||
| //            _studyRepository = studyRepository;
 | ||
| //            _doctorRepository = doctorRepository;
 | ||
| //            _subjectRepository = subjectRepository;
 | ||
| //            _siteRepository = siteRepository;
 | ||
| //            _workloadDetailRepository = workloadDetailRepository;
 | ||
|             
 | ||
| //        }
 | ||
| 
 | ||
| //        /// <summary>
 | ||
| //        /// 批量分配Tp
 | ||
| //        /// </summary>
 | ||
| //        /// <param name="workloadTPCommand"></param>
 | ||
| //        /// <returns></returns>
 | ||
| //        [HttpPost]
 | ||
| //        public IResponseOutput DistributeTP(WorkloadTPCommand workloadTPCommand)
 | ||
| //        {
 | ||
| //            //当前采用的是没有提示到具体的TP,如有需要在修改下
 | ||
| //            var studyIdList = workloadTPCommand.TpList.Select(u => u.StudyId);
 | ||
| //            var temp = _workloadTpRepository.Where(u => studyIdList.Contains(u.StudyId) && u.ReviewerId == workloadTPCommand.ReviewerId);
 | ||
| //            if (temp.Any() )
 | ||
| //            {
 | ||
| //                return ResponseOutput.NotOk("The TPs of different Arms of the same subject couldn't be assigned to the same reviewer.");
 | ||
| //            }
 | ||
| //            var success = false;
 | ||
| //            workloadTPCommand.TpList.ForEach(t =>
 | ||
| //            {
 | ||
| //                _workloadDetailRepository.Add(new WorkloadDetail
 | ||
| //                {
 | ||
| //                    WorkloadId = t.Id,
 | ||
| //                    OptUserName = _userInfo.RealName,
 | ||
| //                    OptTime = DateTime.Now,
 | ||
| //                    Status = (int)WorkloadStatus.Distributed,
 | ||
| //                    ReviewerId = workloadTPCommand.ReviewerId
 | ||
| //                });
 | ||
| //                _workloadDetailRepository.SaveChanges();
 | ||
| //                success = _workloadTpRepository.Update(u => u.Id == t.Id, k => new WorkloadTP()
 | ||
| //                {
 | ||
| //                    ReviewerId = workloadTPCommand.ReviewerId,
 | ||
| //                    Status = (int)WorkloadStatus.Distributed
 | ||
| //                });
 | ||
| //            });
 | ||
| //            return ResponseOutput.Result(success);
 | ||
| //        }
 | ||
| 
 | ||
| 
 | ||
| //        /// <summary>
 | ||
| //        /// 批量分配AD
 | ||
| //        /// </summary>
 | ||
| //        /// <param name="workloadTPCommand"></param>
 | ||
| //        /// <returns></returns>
 | ||
| //        [HttpPost]
 | ||
| //        public IResponseOutput DistributeAD(WorkloadAdCommand workloadTPCommand)
 | ||
| //        {
 | ||
| //            var success = false;
 | ||
| //            workloadTPCommand.IdList.ForEach(t =>
 | ||
| //            {
 | ||
| //                _workloadDetailRepository.Add(new WorkloadDetail
 | ||
| //                {
 | ||
| //                    WorkloadId = t,
 | ||
| //                    OptUserName = _userInfo.RealName,
 | ||
| //                    OptTime = DateTime.Now,
 | ||
| //                    Status = (int)WorkloadStatus.Distributed,
 | ||
| //                    ReviewerId = workloadTPCommand.ReviewerId
 | ||
| //                });
 | ||
| //                _workloadDetailRepository.SaveChanges();
 | ||
| //                success = _workloadAdRepository.Update(u => u.Id == t, k => new WorkloadAD()
 | ||
| //                {
 | ||
| //                    ReviewerId = workloadTPCommand.ReviewerId,
 | ||
| //                    Status = (int)WorkloadStatus.Distributed
 | ||
| //                });
 | ||
| //            });
 | ||
| //            return ResponseOutput.Result(success);
 | ||
| //        }
 | ||
| 
 | ||
| //        /// <summary>
 | ||
| //        /// 批量分配Global
 | ||
| //        /// </summary>
 | ||
| //        /// <param name="workloadGCommand"></param>
 | ||
| //        /// <returns></returns>
 | ||
| //        [HttpPost]
 | ||
| //        public IResponseOutput DistributeGlobal(WorkloadGlobalCommand workloadGCommand)
 | ||
| //        {
 | ||
| //            var temp = _workloadGlobalRepository.Where(u => workloadGCommand.GlobalList.Select(s => s.SubjectId).Contains(u.SubjectId)
 | ||
| //            && workloadGCommand.GlobalList.Select(s => s.VisitNum).Contains(u.VisitNum) &&
 | ||
| //            u.ReviewerId == workloadGCommand.ReviewerId);
 | ||
| //            if (temp.Any())
 | ||
| //            {
 | ||
| //                return ResponseOutput.NotOk("The Globals of different Arms of the same subject couldn't be assigned to the same reviewer.");
 | ||
| //            }
 | ||
| 
 | ||
| //            var success = false;
 | ||
| //            workloadGCommand.GlobalList.ForEach(t =>
 | ||
| //            {
 | ||
| //                _workloadDetailRepository.Add(new WorkloadDetail
 | ||
| //                {
 | ||
| //                    WorkloadId = t.Id,
 | ||
| //                    OptUserName = _userInfo.RealName,
 | ||
| //                    OptTime = DateTime.Now,
 | ||
| //                    Status = (int)WorkloadStatus.Distributed,
 | ||
| //                    ReviewerId = workloadGCommand.ReviewerId
 | ||
| //                });
 | ||
| //                _workloadDetailRepository.SaveChanges();
 | ||
| //                success = _workloadGlobalRepository.Update(u => u.Id == t.Id, k => new WorkloadGlobal()
 | ||
| //                {
 | ||
| //                    ReviewerId = workloadGCommand.ReviewerId,
 | ||
| //                    Status = (int)WorkloadStatus.Distributed
 | ||
| //                });
 | ||
| //            });
 | ||
| //            return ResponseOutput.Result(success);
 | ||
| //        }
 | ||
| 
 | ||
| //        [HttpPost]
 | ||
| //        public PageOutput<WorkloadGlobalDTO> GetWorkloadGlobalList(WorkloadDistributionQueryParam param)
 | ||
| //        {
 | ||
| //            IQueryable<WorkloadGlobalDTO> query = null;
 | ||
| //            Expression<Func<WorkloadGlobal, bool>> workloadTPLambda = x => x.TrialId == param.TrialId;
 | ||
| //            if (param.SiteId != null)
 | ||
| //            {
 | ||
| //                workloadTPLambda = workloadTPLambda.And(t => t.SiteId == param.SiteId);
 | ||
| //            }
 | ||
| 
 | ||
| //            if (param.Status != null)
 | ||
| //            {
 | ||
| //                workloadTPLambda = workloadTPLambda.And(t => t.Status == param.Status);
 | ||
| //            }
 | ||
| //            if (!string.IsNullOrEmpty(param.WorkloadCode))
 | ||
| //            {
 | ||
| //                var globalCode = param.WorkloadCode.Trim();
 | ||
| //                workloadTPLambda = workloadTPLambda.And(t => t.GlobalCode.Contains(globalCode));
 | ||
| //            }
 | ||
| //            if (param.GroupId != null && param.GroupId > 0)
 | ||
| //            {
 | ||
| //                var groupCode = "G0" + param.GroupId;
 | ||
| //                workloadTPLambda = workloadTPLambda.And(t => t.GlobalCode.Contains(groupCode));
 | ||
| //            }
 | ||
| 
 | ||
| //            Expression<Func<Subject, bool>> subjectLambda = x => x.TrialId == param.TrialId;
 | ||
| //            if (!string.IsNullOrEmpty(param.SubjectCode))
 | ||
| //            {
 | ||
| //                var subjectCode = param.SubjectCode.Trim();
 | ||
| //                subjectLambda = subjectLambda.And(t => t.Code.Contains(subjectCode));
 | ||
| //            }
 | ||
| //            Expression<Func<Doctor, bool>> doctorLambda = x => true;
 | ||
| //            if (!string.IsNullOrEmpty(param.Reviewer))
 | ||
| //            {
 | ||
| //                var reviewer = param.Reviewer.Trim();
 | ||
| 
 | ||
| //                doctorLambda = doctorLambda.And(t => t.ChineseName.Contains(reviewer)
 | ||
| //                                                     || t.FirstName.Contains(reviewer) || t.LastName.Contains(reviewer));
 | ||
| //                query = from workloadG in _workloadGlobalRepository.Where(workloadTPLambda)
 | ||
| //                        join subject in _subjectRepository.Where(subjectLambda) on workloadG.SubjectId equals subject.Id
 | ||
| //                        join site in _siteRepository.AsQueryable() on workloadG.SiteId equals site.Id
 | ||
| //                        join doctor in _doctorRepository.Where(doctorLambda) on workloadG.ReviewerId equals doctor.Id
 | ||
| //                        select new WorkloadGlobalDTO()
 | ||
| //                        {
 | ||
| //                            Id = workloadG.Id,
 | ||
| //                            ReviewerCode = doctor.ReviewerCode,
 | ||
| //                            ReviewerChineseName = doctor.ChineseName,
 | ||
| //                            ReviewerFirstName = doctor.FirstName,
 | ||
| //                            ReviewerId = doctor.Id,
 | ||
| //                            ReviewerLastName = doctor.LastName,
 | ||
| //                            SiteId = workloadG.SiteId,
 | ||
| //                            SiteName = site.SiteName,
 | ||
| //                            Status = workloadG.Status,
 | ||
| //                            GlobalCode = workloadG.GlobalCode,
 | ||
| //                            SubjectCode = subject.Code,
 | ||
| //                            VisitId = workloadG.VisitId,
 | ||
| //                            UpdateTime = workloadG.UpdateTime,
 | ||
| //                            SubjectId = workloadG.SubjectId,
 | ||
| //                            VisitNum = workloadG.VisitNum,
 | ||
| //                            VisitName = workloadG.VisitName
 | ||
| //                        };
 | ||
| //            }
 | ||
| //            else
 | ||
| //            {
 | ||
| //                query = from workloadG in _workloadGlobalRepository.Where(workloadTPLambda)
 | ||
| //                        join subject in _subjectRepository.Where(subjectLambda) on workloadG.SubjectId equals subject.Id
 | ||
| //                        join site in _siteRepository.AsQueryable() on workloadG.SiteId equals site.Id
 | ||
| //                        join doctor in _doctorRepository.Where(doctorLambda) on workloadG.ReviewerId equals doctor.Id into cc
 | ||
| //                        from doctor in cc.DefaultIfEmpty()
 | ||
| //                        select new WorkloadGlobalDTO()
 | ||
| //                        {
 | ||
| //                            Id = workloadG.Id,
 | ||
| //                            ReviewerCode = doctor.ReviewerCode,
 | ||
| //                            ReviewerChineseName = doctor.ChineseName,
 | ||
| //                            ReviewerFirstName = doctor.FirstName,
 | ||
| //                            ReviewerId = doctor.Id,
 | ||
| //                            ReviewerLastName = doctor.LastName,
 | ||
| //                            SiteId = workloadG.SiteId,
 | ||
| //                            SiteName = site.SiteName,
 | ||
| //                            Status = workloadG.Status,
 | ||
| //                            GlobalCode = workloadG.GlobalCode,
 | ||
| //                            SubjectCode = subject.Code,
 | ||
| //                            VisitId = workloadG.VisitId,
 | ||
| //                            UpdateTime = workloadG.UpdateTime,
 | ||
| //                            SubjectId = workloadG.SubjectId,
 | ||
| //                            VisitNum = workloadG.VisitNum,
 | ||
| //                            VisitName = workloadG.VisitName
 | ||
| //                        };
 | ||
| //            }
 | ||
| 
 | ||
| //            var count = query.Count();
 | ||
| 
 | ||
| //            var propName = param.SortField == string.Empty ? "GlobalCode" : param.SortField;
 | ||
| 
 | ||
| //            query = param.Asc
 | ||
| //                ? query.OrderBy(propName).ThenBy(t => t.SiteName).ThenBy(t => t.SubjectCode)
 | ||
| //                : query.OrderByDescending(propName).ThenBy(t => t.SiteName).ThenBy(t => t.SubjectCode);
 | ||
| 
 | ||
| //            query = query.Skip((param.PageIndex - 1) * param.PageSize).Take(param.PageSize);
 | ||
| //            var list = query.ToList();
 | ||
| 
 | ||
| //            return new PageOutput<WorkloadGlobalDTO>(param.PageIndex,
 | ||
| //                param.PageSize, count, list);
 | ||
| //        }
 | ||
| 
 | ||
| //        [HttpPost]
 | ||
| //        public PageOutput<WorkloadADDTO> GetWorkloadADList(WorkloadDistributionQueryParam param)
 | ||
| //        {
 | ||
| //            IQueryable<WorkloadADDTO> query = null;
 | ||
| //            Expression<Func<WorkloadAD, bool>> workloadAdLambda = x => x.TrialId == param.TrialId;
 | ||
| //            if (param.SiteId != null)
 | ||
| //            {
 | ||
| //                workloadAdLambda = workloadAdLambda.And(t => t.SiteId == param.SiteId);
 | ||
| //            }
 | ||
| 
 | ||
| //            if (param.Status != null)
 | ||
| //            {
 | ||
| //                workloadAdLambda = workloadAdLambda.And(t => t.Status == param.Status);
 | ||
| //            }
 | ||
| //            if (!string.IsNullOrEmpty(param.WorkloadCode))
 | ||
| //            {
 | ||
| //                var adCode = param.WorkloadCode.Trim();
 | ||
| //                workloadAdLambda = workloadAdLambda.And(t => t.ADCode.Contains(adCode));
 | ||
| //            }
 | ||
| 
 | ||
| //            Expression<Func<Subject, bool>> subjectLambda = x => x.TrialId == param.TrialId;
 | ||
| //            if (!string.IsNullOrEmpty(param.SubjectCode))
 | ||
| //            {
 | ||
| //                var subjectCode = param.SubjectCode.Trim();
 | ||
| //                subjectLambda = subjectLambda.And(t => t.Code.Contains(subjectCode));
 | ||
| 
 | ||
| //            }
 | ||
| //            Expression<Func<Doctor, bool>> doctorLambda = x => true;
 | ||
| //            if (!string.IsNullOrEmpty(param.Reviewer))
 | ||
| //            {
 | ||
| //                var reviewer = param.Reviewer.Trim();
 | ||
| //                doctorLambda = doctorLambda.And(t => t.ChineseName.Contains(reviewer)
 | ||
| //                                                     || t.FirstName.Contains(reviewer) || t.LastName.Contains(reviewer));
 | ||
| //                query = from workloadAd in _workloadAdRepository.Where(workloadAdLambda)
 | ||
| //                        join subject in _subjectRepository.Where(subjectLambda) on workloadAd.SubjectId equals subject.Id
 | ||
| //                        join site in _siteRepository.AsQueryable() on workloadAd.SiteId equals site.Id
 | ||
| //                        join doctor in _doctorRepository.Where(doctorLambda) on workloadAd.ReviewerId equals doctor.Id
 | ||
| //                        select new WorkloadADDTO()
 | ||
| //                        {
 | ||
| //                            Id = workloadAd.Id,
 | ||
| //                            ReviewerCode = doctor.ReviewerCode,
 | ||
| //                            ReviewerChineseName = doctor.ChineseName,
 | ||
| //                            ReviewerFirstName = doctor.FirstName,
 | ||
| //                            ReviewerId = doctor.Id,
 | ||
| //                            ReviewerLastName = doctor.LastName,
 | ||
| //                            SiteId = workloadAd.SiteId,
 | ||
| //                            SiteName = site.SiteName,
 | ||
| //                            Status = workloadAd.Status,
 | ||
| //                            ADCode = workloadAd.ADCode,
 | ||
| //                            SubjectCode = subject.Code,
 | ||
| //                            SubjectId = workloadAd.SubjectId,
 | ||
| //                            UpdateTime = workloadAd.UpdateTime
 | ||
| //                        };
 | ||
| //            }
 | ||
| //            else
 | ||
| //            {
 | ||
| //                query = from workloadAd in _workloadAdRepository.Where(workloadAdLambda)
 | ||
| //                        join subject in _subjectRepository.Where(subjectLambda) on workloadAd.SubjectId equals subject.Id
 | ||
| 
 | ||
| //                        join site in _siteRepository.AsQueryable() on workloadAd.SiteId equals site.Id
 | ||
| //                        join doctor in _doctorRepository.Where(doctorLambda) on workloadAd.ReviewerId equals doctor.Id into cc
 | ||
| //                        from doctor in cc.DefaultIfEmpty()
 | ||
| //                        select new WorkloadADDTO()
 | ||
| //                        {
 | ||
| //                            Id = workloadAd.Id,
 | ||
| //                            ReviewerCode = doctor.ReviewerCode,
 | ||
| //                            ReviewerChineseName = doctor.ChineseName,
 | ||
| //                            ReviewerFirstName = doctor.FirstName,
 | ||
| //                            ReviewerId = doctor.Id,
 | ||
| //                            ReviewerLastName = doctor.LastName,
 | ||
| //                            SiteId = workloadAd.SiteId,
 | ||
| //                            SiteName = site.SiteName,
 | ||
| //                            Status = workloadAd.Status,
 | ||
| //                            ADCode = workloadAd.ADCode,
 | ||
| //                            SubjectCode = subject.Code,
 | ||
| //                            SubjectId = workloadAd.SubjectId,
 | ||
| //                            UpdateTime = workloadAd.UpdateTime
 | ||
| //                        };
 | ||
| 
 | ||
| //            }
 | ||
| //            var count = query.Count();
 | ||
| 
 | ||
| //            var propName = param.SortField == string.Empty ? "ADCode" : param.SortField;
 | ||
| 
 | ||
| //            query = param.Asc
 | ||
| //                ? query.OrderBy(propName).ThenBy(t => t.SiteName).ThenBy(t => t.SubjectCode)
 | ||
| //                : query.OrderByDescending(propName).ThenBy(t => t.SiteName).ThenBy(t => t.SubjectCode);
 | ||
| 
 | ||
| //            query = query.Skip((param.PageIndex - 1) * param.PageSize).Take(param.PageSize);
 | ||
| //            var list = query.ToList();
 | ||
| 
 | ||
| //            return new PageOutput<WorkloadADDTO>(param.PageIndex,
 | ||
| //                param.PageSize, count, list);
 | ||
| //        }
 | ||
| 
 | ||
| //        [HttpPost]
 | ||
| //        public PageOutput<WorkloadTPDTO> GetWorkloadTPList(WorkloadDistributionQueryParam param)
 | ||
| //        {
 | ||
| //            IQueryable<WorkloadTPDTO> query = null;
 | ||
| //            Expression<Func<WorkloadTP, bool>> workloadTPLambda = x => x.TrialId == param.TrialId;
 | ||
| //            if (param.SiteId != null)
 | ||
| //            {
 | ||
| //                workloadTPLambda = workloadTPLambda.And(t => t.SiteId == param.SiteId);
 | ||
| //            }
 | ||
| 
 | ||
| //            if (param.Status != null)
 | ||
| //            {
 | ||
| //                workloadTPLambda = workloadTPLambda.And(t => t.Status == param.Status);
 | ||
| //            }
 | ||
| //            if (!string.IsNullOrEmpty(param.WorkloadCode))
 | ||
| //            {
 | ||
| //                var timepoint = param.WorkloadCode.Trim();
 | ||
| 
 | ||
| //                workloadTPLambda = workloadTPLambda.And(t => t.TimepointCode.Contains(timepoint));
 | ||
| //            }
 | ||
| //            if (param.GroupId != null && param.GroupId > 0)
 | ||
| //            {
 | ||
| //                var groupCode = "T0" + param.GroupId;
 | ||
| //                workloadTPLambda = workloadTPLambda.And(t => t.TimepointCode.Contains(groupCode));
 | ||
| //            }
 | ||
| 
 | ||
| //            Expression<Func<Subject, bool>> subjectLambda = x => x.TrialId == param.TrialId;
 | ||
| //            if (!string.IsNullOrEmpty(param.SubjectCode))
 | ||
| //            {
 | ||
| //                var subjectCode = param.SubjectCode.Trim();
 | ||
| //                subjectLambda = subjectLambda.And(t => t.Code.Contains(subjectCode));
 | ||
| //            }
 | ||
| //            Expression<Func<Doctor, bool>> doctorLambda = x => true;
 | ||
| //            if (!string.IsNullOrEmpty(param.Reviewer))
 | ||
| //            {
 | ||
| //                var reviewer = param.Reviewer.Trim();
 | ||
| //                doctorLambda = doctorLambda.And(t => t.ChineseName.Contains(reviewer)
 | ||
| //                                                     || t.FirstName.Contains(reviewer) || t.LastName.Contains(reviewer));
 | ||
| //                query = from workloadTp in _workloadTpRepository.Where(workloadTPLambda)
 | ||
| //                        join subject in _subjectRepository.Where(subjectLambda) on workloadTp.SubjectId equals subject.Id
 | ||
| //                        join subjectVisit in _subjectVisitRepository.AsQueryable() on workloadTp.SubjectVisitId equals subjectVisit.Id
 | ||
| //                        join study in _studyRepository.AsQueryable() on workloadTp.StudyId equals study.Id
 | ||
| //                        join site in _siteRepository.AsQueryable() on workloadTp.SiteId equals site.Id
 | ||
| //                        join doctor in _doctorRepository.Where(doctorLambda) on workloadTp.ReviewerId equals doctor.Id
 | ||
| 
 | ||
| //                        select new WorkloadTPDTO()
 | ||
| //                        {
 | ||
| //                            Id = workloadTp.Id,
 | ||
| //                            ReviewerCode = doctor.ReviewerCode,
 | ||
| //                            ReviewerChineseName = doctor.ChineseName,
 | ||
| //                            ReviewerFirstName = doctor.FirstName,
 | ||
| //                            ReviewerId = doctor.Id,
 | ||
| //                            ReviewerLastName = doctor.LastName,
 | ||
| //                            SiteId = workloadTp.SiteId,
 | ||
| //                            SiteName = site.SiteName,
 | ||
| //                            Status = workloadTp.Status,
 | ||
| //                            StudyCode = study.StudyCode,
 | ||
| //                            StudyId = workloadTp.StudyId,
 | ||
| //                            TimepointCode = workloadTp.TimepointCode,
 | ||
| //                            SubjectCode = subject.Code,
 | ||
| //                            SubjectVisitId = workloadTp.SubjectVisitId,
 | ||
| //                            SubjectId = workloadTp.SubjectId,
 | ||
| //                            VisitNum = subjectVisit.VisitNum,
 | ||
| //                            VisitName = subjectVisit.VisitName,
 | ||
| //                            UpdateTime = workloadTp.UpdateTime
 | ||
| //                        };
 | ||
| //            }
 | ||
| //            else
 | ||
| //            {
 | ||
| //                query = from workloadTp in _workloadTpRepository.Where(workloadTPLambda)
 | ||
| //                        join subject in _subjectRepository.Where(subjectLambda) on workloadTp.SubjectId equals subject.Id
 | ||
| //                        join subjectVisit in _subjectVisitRepository.AsQueryable() on workloadTp.SubjectVisitId equals subjectVisit.Id
 | ||
| //                        join study in _studyRepository.AsQueryable() on workloadTp.StudyId equals study.Id
 | ||
| //                        join site in _siteRepository.AsQueryable() on workloadTp.SiteId equals site.Id
 | ||
| //                        join doctor in _doctorRepository.Where(doctorLambda) on workloadTp.ReviewerId equals doctor.Id into cc
 | ||
| //                        from doctor in cc.DefaultIfEmpty()
 | ||
| //                        select new WorkloadTPDTO()
 | ||
| //                        {
 | ||
| //                            Id = workloadTp.Id,
 | ||
| //                            ReviewerCode = doctor.ReviewerCode,
 | ||
| //                            ReviewerChineseName = doctor.ChineseName,
 | ||
| //                            ReviewerFirstName = doctor.FirstName,
 | ||
| //                            ReviewerId = doctor.Id,
 | ||
| //                            ReviewerLastName = doctor.LastName,
 | ||
| //                            SiteId = workloadTp.SiteId,
 | ||
| //                            SiteName = site.SiteName,
 | ||
| //                            Status = workloadTp.Status,
 | ||
| //                            StudyCode = study.StudyCode,
 | ||
| //                            StudyId = workloadTp.StudyId,
 | ||
| //                            TimepointCode = workloadTp.TimepointCode,
 | ||
| //                            SubjectCode = subject.Code,
 | ||
| //                            SubjectVisitId = workloadTp.SubjectVisitId,
 | ||
| //                            SubjectId = workloadTp.SubjectId,
 | ||
| //                            VisitNum = subjectVisit.VisitNum,
 | ||
| //                            VisitName = subjectVisit.VisitName,
 | ||
| //                            UpdateTime = workloadTp.UpdateTime
 | ||
| //                        };
 | ||
| 
 | ||
| //            }
 | ||
| //            var count = query.Count();
 | ||
| 
 | ||
| //            var propName = param.SortField == string.Empty ? "TimepointCode" : param.SortField;
 | ||
| //            query = param.Asc
 | ||
| //                ? query.OrderBy(propName).ThenBy(t => t.SiteName).ThenBy(t => t.SubjectCode)
 | ||
| //                : query.OrderByDescending(propName).ThenBy(t => t.SiteName).ThenBy(t => t.SubjectCode);
 | ||
| //            query = query.Skip((param.PageIndex - 1) * param.PageSize).Take(param.PageSize);
 | ||
| //            var list = query.ToList();
 | ||
| 
 | ||
| //            return new PageOutput<WorkloadTPDTO>(param.PageIndex,
 | ||
| //                param.PageSize, count, list);
 | ||
| //        }
 | ||
| 
 | ||
| //        //修改单个TP
 | ||
| //        [HttpPost("{tpId:guid}/{reviewerId:guid}")]
 | ||
| //        public IResponseOutput UpdateDistributeAD(Guid tpId, Guid reviewerId)
 | ||
| //        {
 | ||
| //            _workloadDetailRepository.Add(new WorkloadDetail
 | ||
| //            {
 | ||
| //                WorkloadId = tpId,
 | ||
| //                OptUserName = _userInfo.RealName,
 | ||
| //                OptTime = DateTime.Now,
 | ||
| //                Status = (int)WorkloadStatus.Distributed,
 | ||
| //                ReviewerId = reviewerId
 | ||
| //            });
 | ||
| //            _workloadDetailRepository.SaveChanges();
 | ||
| //            var success= _workloadAdRepository.Update(t => t.Id == tpId, u => new WorkloadAD()
 | ||
| //            {
 | ||
| //                ReviewerId = reviewerId,
 | ||
| //                Status = (int)WorkloadStatus.Distributed
 | ||
| //            });
 | ||
| 
 | ||
| //            return ResponseOutput.Result(success);
 | ||
| //        }
 | ||
| 
 | ||
| //        //修改单个Global
 | ||
| //        [HttpPost("{tpId:guid}/{reviewerId:guid}/{subjectId:guid}/{visitNum}")]
 | ||
| //        public IResponseOutput UpdateDistributeGlobal(Guid tpId, Guid reviewerId, Guid subjectId, decimal visitNum)
 | ||
| //        {
 | ||
| //            var temp = _workloadGlobalRepository.Where(u => u.SubjectId == subjectId &&
 | ||
| //            u.VisitNum == visitNum &&
 | ||
| //            u.ReviewerId == reviewerId && u.Id != tpId);
 | ||
| //            if (temp.Any())
 | ||
| //            {
 | ||
| //                return ResponseOutput.NotOk("The Global of the other arm of this subject has already been assigned to this reviewer, and the assignment couldn't be performed.");
 | ||
| //            }
 | ||
| 
 | ||
| //            _workloadDetailRepository.Add(new WorkloadDetail
 | ||
| //            {
 | ||
| //                WorkloadId = tpId,
 | ||
| //                OptUserName = _userInfo.RealName,
 | ||
| //                OptTime = DateTime.Now,
 | ||
| //                Status = (int)WorkloadStatus.Distributed,
 | ||
| //                ReviewerId = reviewerId
 | ||
| //            });
 | ||
| //            _workloadDetailRepository.SaveChanges();
 | ||
| //            return ResponseOutput.Result(_workloadGlobalRepository.Update(t => t.Id == tpId, u => new WorkloadGlobal()
 | ||
| //            {
 | ||
| //                ReviewerId = reviewerId,
 | ||
| //                Status = (int)WorkloadStatus.Distributed
 | ||
| //            }));
 | ||
| //        }
 | ||
| 
 | ||
| //        //修改单个TP
 | ||
| //        [HttpPost("{tpId:guid}/{reviewerId:guid}/{studyId:guid}")]
 | ||
| //        public IResponseOutput UpdateDistributeTP(Guid tpId, Guid reviewerId, Guid studyId)
 | ||
| //        {
 | ||
| //            var temp = _workloadTpRepository.Where(u => u.StudyId == studyId && u.ReviewerId == reviewerId && u.Id != tpId);
 | ||
| //            if (temp.Any())
 | ||
| //            {
 | ||
| //                return ResponseOutput.NotOk("The TP of the other arm of this subject has already been assigned to this reviewer, and the assignment couldn't be performed.");
 | ||
| //            }
 | ||
| 
 | ||
| //            _workloadDetailRepository.Add(new WorkloadDetail
 | ||
| //            {
 | ||
| //                WorkloadId = tpId,
 | ||
| //                OptUserName = _userInfo.RealName,
 | ||
| //                OptTime = DateTime.Now,
 | ||
| //                Status = (int)WorkloadStatus.Distributed,
 | ||
| //                ReviewerId = reviewerId
 | ||
| //            });
 | ||
| //            _workloadDetailRepository.SaveChanges();
 | ||
| //            return ResponseOutput.Result(_workloadTpRepository.Update(t => t.Id == tpId, u => new WorkloadTP()
 | ||
| //            {
 | ||
| //                ReviewerId = reviewerId,
 | ||
| //                Status = (int)WorkloadStatus.Distributed
 | ||
| //            }));
 | ||
| //        }
 | ||
| 
 | ||
| //        [HttpGet("{workloadId:guid}")]
 | ||
| //        public IResponseOutput<List<WorkloadDetailDTO>> GetWorkloadDetail(Guid workloadId)
 | ||
| //        {
 | ||
| //            IQueryable<WorkloadDetailDTO> query = null;
 | ||
| //            query = from detail in _workloadDetailRepository.Where(u => u.WorkloadId == workloadId)
 | ||
| //                    join doctor in _doctorRepository.AsQueryable() on detail.ReviewerId equals doctor.Id into cc
 | ||
| //                    from doctor in cc.DefaultIfEmpty()
 | ||
| //                    select new WorkloadDetailDTO()
 | ||
| //                    {
 | ||
| //                        OptTime = detail.OptTime,
 | ||
| //                        OptUserName = detail.OptUserName,
 | ||
| //                        ReviewerChineseName = doctor.ChineseName,
 | ||
| //                        ReviewerFirstName = doctor.FirstName,
 | ||
| //                        ReviewerLastName = doctor.LastName,
 | ||
| //                        Status = detail.Status
 | ||
| //                    };
 | ||
| //            var list = query.OrderByDescending(u => u.OptTime).ToList();
 | ||
| //            return ResponseOutput.Ok(list);
 | ||
| //        }
 | ||
| 
 | ||
| //        [HttpPost("UpdateGlobalStatus/{globalId:guid}")]
 | ||
| //        public IResponseOutput UpdateGlobalStatus(Guid globalId)
 | ||
| //        {
 | ||
| //            return ResponseOutput.Result(_workloadGlobalRepository.Update(u => u.Id == globalId, t => new WorkloadGlobal()
 | ||
| //            {
 | ||
| //                Status = 0
 | ||
| //            }));
 | ||
| //        }
 | ||
| 
 | ||
| //    }
 | ||
| //}
 |