68 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
using EntityFrameworkCore.Triggered;
 | 
						||
using IRaCIS.Core.Domain.Share;
 | 
						||
using IRaCIS.Core.Infrastructure;
 | 
						||
using Microsoft.Extensions.Localization;
 | 
						||
using System;
 | 
						||
using System.Collections.Generic;
 | 
						||
using System.Linq;
 | 
						||
using System.Text;
 | 
						||
using System.Threading.Tasks;
 | 
						||
 | 
						||
namespace IRaCIS.Core.Application.Triggers
 | 
						||
{
 | 
						||
 | 
						||
    // 统一处理  外部用户、中心调研(先添加 再发送邮件)、参与医生加入到项目  ----废弃
 | 
						||
    public class AddlTrialUserTrigger :IBeforeSaveTrigger<TrialUser>
 | 
						||
 | 
						||
    {
 | 
						||
        public IStringLocalizer _localizer;
 | 
						||
        private readonly IRepository<Trial> _trialRepository;
 | 
						||
        private readonly IRepository<User> _userRepository;
 | 
						||
 | 
						||
        public AddlTrialUserTrigger(IRepository<Trial> trialRepository, IRepository<User> userRepository, IStringLocalizer localizer)
 | 
						||
        {
 | 
						||
            _trialRepository = trialRepository;
 | 
						||
 | 
						||
            _userRepository = userRepository;
 | 
						||
            _localizer = localizer;
 | 
						||
        }
 | 
						||
        public async Task BeforeSave(ITriggerContext<TrialUser> context, CancellationToken cancellationToken)
 | 
						||
        {
 | 
						||
            var trialUser = context.Entity;
 | 
						||
 | 
						||
            if (context.ChangeType == ChangeType.Added)
 | 
						||
            {
 | 
						||
                //批量添加的时候,使用Find   不会多次查询,优先从跟踪的内存中查找
 | 
						||
                var trialInfo = await _trialRepository.FindAsync(trialUser.TrialId);
 | 
						||
 | 
						||
                // 必须包在同一个事务,有的时候是数据库还没用户,不能直接查询数据库
 | 
						||
                var user = await _userRepository.FindAsync(trialUser.UserId);
 | 
						||
 | 
						||
                if (trialInfo.TrialType == Domain.Share.TrialType.OfficialTrial || trialInfo.TrialType == Domain.Share.TrialType.Training)
 | 
						||
                {
 | 
						||
 | 
						||
                    if (user.IsTestUser)
 | 
						||
                    {
 | 
						||
                //---正式类型 、培训类型的项目 不允许加入测试用户
 | 
						||
                        throw new BusinessValidationFailedException(_localizer["AddlTrialUser_NoTestUser"]);
 | 
						||
 | 
						||
                    }
 | 
						||
                }
 | 
						||
 | 
						||
                if (trialInfo.TrialType == TrialType.NoneOfficial)
 | 
						||
                {
 | 
						||
 | 
						||
                    if (user.IsTestUser == false )
 | 
						||
                    {
 | 
						||
                //---测试项目  不允许加入正式用户
 | 
						||
                        throw new BusinessValidationFailedException(_localizer["AddlTrialUser_NoFormalUser"]);
 | 
						||
 | 
						||
                    }
 | 
						||
                }
 | 
						||
            }
 | 
						||
        }
 | 
						||
    }
 | 
						||
 | 
						||
 | 
						||
}
 |