547 lines
25 KiB
C#
547 lines
25 KiB
C#
using AutoMapper;
|
|
using AutoMapper.QueryableExtensions;
|
|
using IRaCIS.Application.ExpressionExtend;
|
|
using IRaCIS.Application.Interfaces;
|
|
using IRaCIS.Application.ViewModels;
|
|
using IRaCIS.Core.Application.Contracts.RequestAndResponse;
|
|
using IRaCIS.Core.Domain.Interfaces;
|
|
using IRaCIS.Core.Domain.Models;
|
|
using IRaCIS.Infra.Data.ExpressionExtend;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Linq.Expressions;
|
|
using IRaCIS.Core.Domain.Share;
|
|
using IRaCIS.Core.Domain.Share.AuthUser;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace IRaCIS.Application.Servicess
|
|
{
|
|
public class UserTrialService : IUserTrialService
|
|
{
|
|
private readonly IUserTrialRepository _userTrialRepository;
|
|
private readonly IDictionaryRepository _dictionaryRepository;
|
|
private readonly IUserRepository _userRepository;
|
|
private readonly ISiteRepository _siteRepository;
|
|
private readonly IMapper _mapper;
|
|
private readonly IUserInfo _userInfo;
|
|
private readonly ISubjectRepository _subjectRepository;
|
|
private readonly IDicomStudyRepository _studyRepository;
|
|
private readonly ISubjectVisitRepository _subjectVisitRepository;
|
|
|
|
public UserTrialService(IUserTrialRepository userTrialRepository,
|
|
IDictionaryRepository dictionaryRepository,
|
|
IUserRepository userRepository,
|
|
ISiteRepository researchCenterRepository, IMapper mapper, IUserInfo userInfo,ISubjectRepository subjectRepository,IDicomStudyRepository studyRepository,ISubjectVisitRepository subjectVisitRepository)
|
|
{
|
|
_userTrialRepository = userTrialRepository;
|
|
_dictionaryRepository = dictionaryRepository;
|
|
_userRepository = userRepository;
|
|
_siteRepository = researchCenterRepository;
|
|
_mapper = mapper;
|
|
_userInfo = userInfo;
|
|
_subjectRepository = subjectRepository;
|
|
_studyRepository = studyRepository;
|
|
_subjectVisitRepository = subjectVisitRepository;
|
|
}
|
|
|
|
public IEnumerable<TrialSiteSelect> GetTrialSiteSelect(Guid trialId)
|
|
{
|
|
var userId = _userInfo.Id;
|
|
var exist = _userRepository.GetAll()
|
|
.Any(t => t.Id == userId && t.UserType.Contains(StaticData.CRC));
|
|
IQueryable<TrialSiteSelect> query = default;
|
|
|
|
if (exist)
|
|
{
|
|
query = from userTrial in _userTrialRepository.GetAll()
|
|
.Where(t => t.TrialId == trialId && t.SiteId != Guid.Empty && t.UserId == userId)
|
|
join site in _siteRepository.GetAll() on userTrial.SiteId equals site.Id
|
|
select new TrialSiteSelect()
|
|
{
|
|
Id = site.Id,
|
|
SiteName = site.SiteName
|
|
};
|
|
|
|
}
|
|
else
|
|
{
|
|
query = (from userTrial in _userTrialRepository.GetAll()
|
|
.Where(t => t.TrialId == trialId && t.SiteId != Guid.Empty)
|
|
join site in _siteRepository.GetAll() on userTrial.SiteId equals site.Id
|
|
select new TrialSiteSelect()
|
|
{
|
|
Id = site.Id,
|
|
SiteName = site.SiteName
|
|
}).Distinct();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return query.OrderBy(t => t.SiteName).ToList();
|
|
}
|
|
|
|
public IEnumerable<UserTrialDTO> GetMaintenanceUserList(TrialMaintenanceQuery param)
|
|
{
|
|
Expression<Func<UserTrial, bool>> userTrialLambda = x => x.SiteId == Guid.Empty;
|
|
|
|
|
|
if (param.UserTypeId != Guid.Empty && param.UserTypeId != null)
|
|
{
|
|
userTrialLambda = userTrialLambda.And(t => t.UserTypeId == param.UserTypeId);
|
|
}
|
|
|
|
Expression<Func<User, bool>> userLambda = x => true;
|
|
if (!string.IsNullOrWhiteSpace(param.UserName))
|
|
{
|
|
userLambda = userLambda.And(t => t.UserName.Contains(param.UserName.Trim()));
|
|
}
|
|
|
|
var query = from userTrial in _userTrialRepository.Find(t => t.TrialId == param.TrialId).Where(userTrialLambda)
|
|
join user in _userRepository.GetAll().Where(userLambda) on userTrial.UserId equals user.Id
|
|
|
|
select new UserTrialDTO()
|
|
{
|
|
Id = userTrial.Id,
|
|
UserId = userTrial.UserId,
|
|
UserRealName = user.RealName,
|
|
UserName = user.UserName,
|
|
|
|
TrialId = userTrial.TrialId,
|
|
|
|
UserTypeId = userTrial.UserTypeId,
|
|
|
|
OrganizationTypeId = userTrial.OrganizationTypeId,
|
|
OrganizationType = userTrial.OrganizationType,
|
|
|
|
OrganizationId = userTrial.OrganizationId,
|
|
OrganizationName = userTrial.OrganizationName,
|
|
UpdateTime = userTrial.UpdateTime,
|
|
UserType = userTrial.UserType
|
|
};
|
|
|
|
return query.OrderBy(t => t.UpdateTime).ToList();
|
|
}
|
|
|
|
public PageOutput<UserTrialDTO> GetUserTrialList(UserTrialListQueryDTO param)
|
|
{
|
|
|
|
Expression<Func<UserTrial, bool>> userTrialLambda = x => x.SiteId == Guid.Empty;
|
|
|
|
if (param.UserTypeId != Guid.Empty && param.UserTypeId != null)
|
|
{
|
|
userTrialLambda = userTrialLambda.And(t => t.UserTypeId == param.UserTypeId);
|
|
}
|
|
|
|
Expression<Func<User, bool>> userLambda = x => true;
|
|
if (!string.IsNullOrWhiteSpace(param.UserName))
|
|
{
|
|
userLambda = userLambda.And(t => t.UserName.Contains(param.UserName.Trim()));
|
|
}
|
|
|
|
var query = from userTrial in _userTrialRepository.Find(t => t.TrialId == param.TrialId).Where(userTrialLambda)
|
|
join user in _userRepository.GetAll().Where(userLambda) on userTrial.UserId equals user.Id
|
|
|
|
select new UserTrialDTO()
|
|
{
|
|
Id = userTrial.Id,
|
|
UserId = userTrial.UserId,
|
|
UserRealName = user.RealName,
|
|
|
|
TrialId = userTrial.TrialId,
|
|
|
|
UserTypeId = userTrial.UserTypeId,
|
|
|
|
OrganizationId = userTrial.OrganizationId,
|
|
OrganizationName = userTrial.OrganizationName,
|
|
UpdateTime = userTrial.UpdateTime,
|
|
UserType = userTrial.UserType
|
|
|
|
//OrganizationTypeId = userTrial.OrganizationTypeId,
|
|
//OrganizationType = userTrial.OrganizationType,
|
|
};
|
|
var count = query.Count();
|
|
var propName = string.IsNullOrWhiteSpace(param.SortField) ? "UserRealName" : param.SortField;
|
|
|
|
query = param.Asc
|
|
? query.OrderBy(propName)
|
|
: query.OrderByDescending(propName);
|
|
query = query.Skip((param.PageIndex - 1) * param.PageSize).Take(param.PageSize);
|
|
var list = query.ToList();
|
|
|
|
return new PageOutput<UserTrialDTO>(param.PageIndex,
|
|
param.PageSize, count, list);
|
|
|
|
}
|
|
|
|
public IEnumerable<UserSelectionModel> GetUserSelectionList(Guid userTypeId, Guid institutionId)
|
|
{
|
|
var query = _userRepository.Find(u => u.UserTypeId == userTypeId && u.OrganizationId == institutionId).ProjectTo<UserSelectionModel>(_mapper.ConfigurationProvider);
|
|
|
|
return query.ToList();
|
|
|
|
}
|
|
|
|
|
|
/// <summary> 添加或更新运维人员</summary>
|
|
public IResponseOutput AddOrUpdateUserTrial(UserTrialCommand param)
|
|
{
|
|
|
|
if (param.Id == Guid.Empty || param.Id == null)//新增
|
|
{
|
|
|
|
if (_userTrialRepository.GetAll().Any(u => u.UserId == param.UserId
|
|
&& u.TrialId == param.TrialId && u.SiteId == Guid.Empty))
|
|
{
|
|
|
|
return ResponseOutput.NotOk("Trial participants already exist");
|
|
}
|
|
|
|
if (param.UserType == "PM" && param.OrganizationName == "ZhiZhun")
|
|
{
|
|
//&& t.OrganizationType == param.OrganizationType)
|
|
if (_userTrialRepository.GetAll().Any(t => t.TrialId == param.TrialId && t.UserType == "PM" && t.OrganizationName == "ZhiZhun" && t.SiteId == Guid.Empty))
|
|
{
|
|
|
|
return ResponseOutput.NotOk("Trial can only have one ZhiZhun PM");
|
|
}
|
|
}
|
|
|
|
|
|
var temp = _mapper.Map<UserTrial>(param);
|
|
temp.SiteId = Guid.Empty;
|
|
|
|
|
|
var result = _userTrialRepository.Add(temp);
|
|
bool isSuccess = _userTrialRepository.SaveChanges();
|
|
|
|
return ResponseOutput.Result(isSuccess);
|
|
|
|
}
|
|
else //更新
|
|
{
|
|
//此处过滤一定要加上 u.SiteId==Guid.Empty 一个用户可能负责多个site 不加过滤 会存在提示出问题
|
|
if (_userTrialRepository.GetAll().Any(u => u.UserId == param.UserId
|
|
&& u.TrialId == param.TrialId && u.Id != param.Id && u.SiteId == Guid.Empty))
|
|
{
|
|
return ResponseOutput.NotOk("Trial participants already exist");
|
|
}
|
|
|
|
if (param.UserType == "PM" && param.OrganizationName == "ZhiZhun")
|
|
{
|
|
//&& t.OrganizationType == param.OrganizationType
|
|
if (_userTrialRepository.GetAll().Any(t => t.Id != param.Id && t.UserType == "PM" && t.TrialId == param.TrialId && t.OrganizationName == "ZhiZhun" && t.SiteId == Guid.Empty))
|
|
{
|
|
return ResponseOutput.NotOk("Trial can only have one ZhiZhun PM");
|
|
}
|
|
|
|
}
|
|
|
|
var isSuccess = _userTrialRepository.Update(u => u.Id == param.Id, t => new UserTrial
|
|
{
|
|
TrialId = param.TrialId,
|
|
UserId = param.UserId,
|
|
UserTypeId = param.UserTypeId,
|
|
UserType = param.UserType,
|
|
SiteId = Guid.Empty,
|
|
OrganizationTypeId = param.OrganizationTypeId,
|
|
OrganizationType = param.OrganizationType,
|
|
OrganizationId = param.OrganizationId,
|
|
OrganizationName = param.OrganizationName,
|
|
UserRealName = param.UserRealName,
|
|
UpdateTime = DateTime.Now
|
|
});
|
|
|
|
|
|
return ResponseOutput.Result(isSuccess);
|
|
}
|
|
}
|
|
|
|
/// <summary> 删除运维人员</summary>
|
|
public IResponseOutput DeleteUserTrial(Guid id)
|
|
{
|
|
|
|
var user= _userTrialRepository.GetAll().FirstOrDefault(t => t.Id == id);
|
|
|
|
if (_userTrialRepository.GetAll().Any(t => t.UserId == user.UserId&&t.SiteId!=Guid.Empty&&t.TrialId==user.TrialId))
|
|
{
|
|
return ResponseOutput.NotOk("Participant has participated in site maintenance");
|
|
}
|
|
|
|
var isSuccess = _userTrialRepository.Delete(u => u.Id == id);
|
|
return ResponseOutput.Result(isSuccess);
|
|
}
|
|
|
|
public PageOutput<SiteStatDTO> GetSiteCRCList(SiteCrcQueryDTO param)
|
|
{
|
|
|
|
|
|
Expression<Func<User, bool>> userLambda = x => true;
|
|
if (!string.IsNullOrWhiteSpace(param.UserRealName))
|
|
{
|
|
userLambda = userLambda.And(t => t.RealName.Contains(param.UserRealName.Trim()));
|
|
}
|
|
|
|
Expression<Func<Site, bool>> siteLambda = x => true;
|
|
if (!string.IsNullOrWhiteSpace(param.SiteName))
|
|
{
|
|
siteLambda = siteLambda.And(t => t.SiteName.Contains(param.SiteName.Trim()));
|
|
}
|
|
|
|
#region before
|
|
|
|
//var query = from userTrial in _userTrialRepository.Find(t => t.TrialId == param.TrialId && t.SiteId != Guid.Empty)/*.Where(userTrialLambda)*/
|
|
// join user in _userRepository.GetAll().Where(userLambda) on userTrial.UserId equals user.Id
|
|
// join site in _siteRepository.GetAll().Where(siteLambda) on userTrial.SiteId equals site.Id
|
|
// select new SiteCrcDTO()
|
|
// {
|
|
// Id = userTrial.Id,
|
|
// UserId = userTrial.UserId,
|
|
// UserRealName = user.RealName,
|
|
// UserName = user.UserName,
|
|
|
|
// TrialId = userTrial.TrialId,
|
|
// Phone = user.Phone,
|
|
// UserTypeId = userTrial.UserTypeId,
|
|
// UserType = userTrial.UserType,
|
|
// OrganizationTypeId = userTrial.OrganizationTypeId,
|
|
// OrganizationType = userTrial.OrganizationType,
|
|
// OrganizationId = userTrial.OrganizationId,
|
|
// OrganizationName = userTrial.OrganizationName,
|
|
// UpdateTime = userTrial.UpdateTime,
|
|
// SiteId = site.Id,
|
|
// Site = site.SiteName,
|
|
// City = site.City,
|
|
// Country = site.Country
|
|
// };
|
|
|
|
#endregion
|
|
|
|
IQueryable<SiteStatDTO> siteStatQuery = default;
|
|
|
|
var requestUser = _userRepository.GetAll().First(t => t.Id == _userInfo.Id);
|
|
|
|
if (requestUser.SuperAdmin|| requestUser.UserType == StaticData.CROCoordinator|| requestUser.UserType == StaticData.PM|| requestUser.UserType == StaticData.QC)
|
|
{
|
|
siteStatQuery = from site in _siteRepository.GetAll().Where(siteLambda)
|
|
|
|
join userTrialStat in _userTrialRepository
|
|
.Find(t => t.TrialId == param.TrialId && t.SiteId != Guid.Empty).GroupBy(u => u.SiteId)
|
|
.Select(g => new { SiteId = g.Key, UserCount = g.Count() }) on site.Id equals userTrialStat.SiteId
|
|
|
|
join subjectStat in _subjectRepository.Find(t => t.TrialId == param.TrialId).GroupBy(u => u.SiteId)
|
|
.Select(g => new { SiteId = g.Key, SubjectCount = g.Count() }) on site.Id equals subjectStat
|
|
.SiteId
|
|
into ST
|
|
from subjectStatItem in ST.DefaultIfEmpty()
|
|
|
|
////加入 Visit统计 通过site下的受试者过滤visit 加入siteId 后修改 不用通过site下的用户过滤
|
|
//join subjectVisitStat in _subjectVisitRepository.Find(t=>t.TrialId==param.TrialId).GroupBy(t => t.SiteId).Select(g => new { SiteId = g.Key, VisitCount = g.Count() }) on site.Id equals subjectVisitStat.SiteId into SSV
|
|
//from subjectVisitStatItem in SSV.DefaultIfEmpty()
|
|
|
|
//join subjectVisitStat2 in _subjectVisitRepository.Find(t => t.TrialId == param.TrialId&&t.StudyUploaded).GroupBy(t => t.SiteId).Select(g => new { SiteId = g.Key, VisitCount = g.Count() }) on site.Id equals subjectVisitStat2.SiteId into SSV2
|
|
//from subjectVisitStatItem2 in SSV2.DefaultIfEmpty()
|
|
|
|
join studyStat in _studyRepository.Find(t => t.TrialId == param.TrialId && t.Status != (int)StudyStatus.Abandon).GroupBy(u => u.SiteId).Select(g => new { SiteId = g.Key, StudyCount = g.Count() }) on site.Id equals studyStat.SiteId into STT
|
|
from studyStatItem in STT.DefaultIfEmpty()
|
|
select new SiteStatDTO()
|
|
{
|
|
SiteId = site.Id,
|
|
Site = site.SiteName,
|
|
City = site.City,
|
|
Country = site.Country,
|
|
|
|
//VisitCount = subjectVisitStatItem2.VisitCount,
|
|
//PlanVisitCount = subjectVisitStatItem.VisitCount,
|
|
StudyCount = studyStatItem.StudyCount,
|
|
UserCount = userTrialStat.UserCount,
|
|
SubjectCount = subjectStatItem.SubjectCount
|
|
};
|
|
}
|
|
else //CRC 或者其他的
|
|
{
|
|
|
|
|
|
//CRC 只能看到他负责得site下的用户、访视、study 这种情况得到的siteId 不准确 因为 这个SiteId 有可能是因为他是其他项目对接人产生的 因而要加入trialId过滤 这里不用 自连接过滤 因为 指定了trialId
|
|
//var userId = requestUser.Id;
|
|
//var siteQuery = _userTrialRepository.Find(t => t.SiteId != Guid.Empty && t.UserId == userId).Join(_userTrialRepository.Find(t => t.SiteId == Guid.Empty && t.UserId == userId), p => p.TrialId, q => q.TrialId, (p, q) => p.SiteId).Distinct();
|
|
|
|
// CRC 只能看到他负责得site下的用户、访视、study
|
|
var siteQuery = _userTrialRepository.Find(t => t.SiteId != Guid.Empty && t.UserId == requestUser.Id)
|
|
.Select(t => t.SiteId).Distinct();
|
|
|
|
//通过site过滤受试者
|
|
//var subjectQuery = _subjectRepository.Find(t => siteQuery.Contains(t.SiteId)).Select(u => u.Id);
|
|
|
|
|
|
//过滤site
|
|
siteLambda = siteLambda.And(t => siteQuery.Contains(t.Id));
|
|
|
|
siteStatQuery = from site in _siteRepository.GetAll().Where(siteLambda)
|
|
join userTrialStat in _userTrialRepository
|
|
.Find(t => t.TrialId == param.TrialId && t.SiteId != Guid.Empty && t.UserId == requestUser.Id).GroupBy(u => u.SiteId)
|
|
.Select(g => new { SiteId = g.Key, UserCount = g.Count() }) on site.Id equals userTrialStat.SiteId
|
|
|
|
// subject 过滤site
|
|
join subjectStat in _subjectRepository.Find(t => t.TrialId == param.TrialId&& siteQuery.Contains(t.SiteId)).GroupBy(u => u.SiteId)
|
|
.Select(g => new { SiteId = g.Key, SubjectCount = g.Count() }) on site.Id equals subjectStat
|
|
.SiteId
|
|
into ST
|
|
from subjectStatItem in ST.DefaultIfEmpty()
|
|
|
|
////加入 Visit统计 通过site下的受试者过滤visit 加入siteId 后修改 不用通过site下的用户过滤
|
|
//join subjectVisitStat in _subjectVisitRepository.Find(t => siteQuery.Contains(t.SiteId)&& t.TrialId == param.TrialId).GroupBy(t => t.SiteId).Select(g => new { SiteId = g.Key, VisitCount = g.Count() }) on site.Id equals subjectVisitStat.SiteId into SSV
|
|
//from subjectVisitStatItem in SSV.DefaultIfEmpty()
|
|
|
|
//join subjectVisitStat2 in _subjectVisitRepository.Find(t => t.TrialId == param.TrialId && t.StudyUploaded&& siteQuery.Contains(t.SiteId)).GroupBy(t => t.SiteId).Select(g => new { SiteId = g.Key, VisitCount = g.Count() }) on site.Id equals subjectVisitStat2.SiteId into SSV2
|
|
//from subjectVisitStatItem2 in SSV2.DefaultIfEmpty()
|
|
|
|
// study 过滤site
|
|
join studyStat in _studyRepository.Find(t => t.TrialId == param.TrialId && t.Status != (int)StudyStatus.Abandon && siteQuery.Contains(t.SiteId)).GroupBy(u => u.SiteId)
|
|
.Select(g => new { SiteId = g.Key, StudyCount = g.Count() }) on site.Id equals studyStat.SiteId
|
|
into
|
|
STT
|
|
from studyStatItem in STT.DefaultIfEmpty()
|
|
select new SiteStatDTO()
|
|
{
|
|
SiteId = site.Id,
|
|
Site = site.SiteName,
|
|
City = site.City,
|
|
Country = site.Country,
|
|
|
|
//VisitCount = subjectVisitStatItem2.VisitCount,
|
|
//PlanVisitCount = subjectVisitStatItem.VisitCount,
|
|
|
|
StudyCount = studyStatItem.StudyCount,
|
|
UserCount = userTrialStat.UserCount,
|
|
SubjectCount = subjectStatItem.SubjectCount
|
|
};
|
|
}
|
|
|
|
|
|
|
|
|
|
var count = siteStatQuery.Count();
|
|
var propName = string.IsNullOrWhiteSpace(param.SortField) ? "Site" : param.SortField;
|
|
|
|
siteStatQuery = param.Asc
|
|
? siteStatQuery.OrderBy(propName)
|
|
: siteStatQuery.OrderByDescending(propName);
|
|
siteStatQuery = siteStatQuery.Skip((param.PageIndex - 1) * param.PageSize).Take(param.PageSize);
|
|
var list = siteStatQuery.ToList();
|
|
|
|
var siteIds = list.Select(t => t.SiteId).ToList();
|
|
|
|
var userQuery = from userTrial in _userTrialRepository
|
|
.Find(t => t.TrialId == param.TrialId && siteIds.Contains(t.SiteId))
|
|
join user in _userRepository.GetAll().Where(userLambda) on userTrial.UserId equals user.Id
|
|
select new
|
|
{
|
|
Id = userTrial.Id,
|
|
SiteId = userTrial.SiteId,
|
|
Phone = user.Phone,
|
|
UserId = userTrial.UserId,
|
|
UserRealName = user.RealName,
|
|
UserName = user.UserName,
|
|
TrialId = userTrial.TrialId,
|
|
UserTypeId = userTrial.UserTypeId,
|
|
UserType = userTrial.UserType,
|
|
OrganizationTypeId = userTrial.OrganizationTypeId,
|
|
OrganizationType = userTrial.OrganizationType,
|
|
OrganizationId = userTrial.OrganizationId,
|
|
OrganizationName = userTrial.OrganizationName,
|
|
UpdateTime = userTrial.UpdateTime,
|
|
};
|
|
var userList = userQuery.ToList();
|
|
|
|
list.ForEach(t=> t.UserList= userList.Where(u=>u.SiteId==t.SiteId).Select(userTrial=>new UserTrialDTO()
|
|
{
|
|
Id = userTrial.Id,
|
|
SiteId = t.SiteId,
|
|
Phone = userTrial.Phone,
|
|
UserId = userTrial.UserId,
|
|
UserRealName = userTrial.UserRealName,
|
|
UserName = userTrial.UserName,
|
|
TrialId = userTrial.TrialId,
|
|
UserTypeId = userTrial.UserTypeId,
|
|
UserType = userTrial.UserType,
|
|
OrganizationTypeId = userTrial.OrganizationTypeId,
|
|
OrganizationType = userTrial.OrganizationType,
|
|
OrganizationId = userTrial.OrganizationId,
|
|
OrganizationName = userTrial.OrganizationName,
|
|
UpdateTime = userTrial.UpdateTime,
|
|
}).ToList());
|
|
|
|
|
|
|
|
return new PageOutput<SiteStatDTO>(param.PageIndex,
|
|
param.PageSize, count, list);
|
|
|
|
}
|
|
|
|
public IResponseOutput AddOrUpdateSiteCRC(SiteCRCCommand param)
|
|
{
|
|
if (param.Id == Guid.Empty || param.Id == null)//新增
|
|
{
|
|
|
|
if (_userTrialRepository.GetAll().Any(u => u.UserId == param.UserId
|
|
&& u.TrialId == param.TrialId && u.SiteId == param.SiteId))
|
|
{
|
|
|
|
return ResponseOutput.NotOk("the same Site already exist the same CRC participants ");
|
|
}
|
|
|
|
var temp = _mapper.Map<UserTrial>(param);
|
|
temp.UpdateTime = DateTime.Now;
|
|
|
|
var result = _userTrialRepository.Add(temp);
|
|
bool isSuccess = _userTrialRepository.SaveChanges();
|
|
|
|
|
|
return ResponseOutput.Result(isSuccess);
|
|
}
|
|
else //更新
|
|
{
|
|
|
|
if (_userTrialRepository.GetAll().Any(u => u.UserId == param.UserId
|
|
&& u.TrialId == param.TrialId && u.SiteId == param.SiteId && u.Id != param.Id))
|
|
{
|
|
|
|
return ResponseOutput.NotOk("the same Site already exist the same CRC participants ");
|
|
}
|
|
|
|
var isSuccess = _userTrialRepository.Update(u => u.Id == param.Id, t => new UserTrial
|
|
{
|
|
TrialId = param.TrialId,
|
|
UserId = param.UserId,
|
|
UserTypeId = param.UserTypeId,
|
|
UserType = param.UserType,
|
|
SiteId = param.SiteId,
|
|
|
|
OrganizationTypeId = param.OrganizationTypeId,
|
|
OrganizationType = param.OrganizationType,
|
|
OrganizationId = param.OrganizationId,
|
|
OrganizationName = param.OrganizationName,
|
|
UserRealName = param.UserRealName,
|
|
UpdateTime = DateTime.Now
|
|
});
|
|
|
|
return ResponseOutput.Result(isSuccess);
|
|
|
|
}
|
|
}
|
|
|
|
public IResponseOutput DeleteSiteCRC(Guid id)
|
|
{
|
|
var isSuccess = _userTrialRepository.Delete(u => u.Id == id);
|
|
|
|
return ResponseOutput.Result(isSuccess);
|
|
|
|
}
|
|
|
|
|
|
}
|
|
}
|