610 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			610 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			C#
		
	
	
using Castle.Core.Internal;
 | 
						|
using IRaCIS.Core.Application.Contracts;
 | 
						|
using IRaCIS.Core.Application.Service.Inspection.DTO;
 | 
						|
using IRaCIS.Core.Application.Service.Inspection.Interface;
 | 
						|
using IRaCIS.Core.Domain.Share;
 | 
						|
using IRaCIS.Core.Infrastructure;
 | 
						|
using Newtonsoft.Json;
 | 
						|
using Newtonsoft.Json.Converters;
 | 
						|
using Newtonsoft.Json.Linq;
 | 
						|
using Panda.DynamicWebApi.Attributes;
 | 
						|
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Linq;
 | 
						|
using System.Text;
 | 
						|
using System.Threading.Tasks;
 | 
						|
 | 
						|
namespace IRaCIS.Core.Application.Service.Inspection
 | 
						|
{
 | 
						|
    [NonDynamicWebApi]
 | 
						|
    public class InspectionService : BaseService, IInspectionService
 | 
						|
    {
 | 
						|
        private readonly IRepository<DataInspection> _dataInspectionRepository;
 | 
						|
        private readonly IRepository<FrontAuditConfig> _frontAuditConfigRepository;
 | 
						|
 | 
						|
        public InspectionService(IRepository<DataInspection> dataInspectionRepository,
 | 
						|
            IRepository<FrontAuditConfig> frontAuditConfigRepository
 | 
						|
            )
 | 
						|
        {
 | 
						|
            this._dataInspectionRepository = dataInspectionRepository;
 | 
						|
            this._frontAuditConfigRepository = frontAuditConfigRepository;
 | 
						|
        }
 | 
						|
        public async Task<PageOutput<GetDataInspectionOutDto>> GetInspectionData(GetDataInspectionDto dto)
 | 
						|
        {
 | 
						|
            //_repository.GetQueryable.GetQueryable < DataInspection >
 | 
						|
 | 
						|
            #region 逻辑代码
 | 
						|
            var query = from data in _repository.GetQueryable<DataInspection>()
 | 
						|
                        join trial in _repository.GetQueryable<Trial>() on data.TrialId equals trial.Id into trialtemp
 | 
						|
                        from leftrial in trialtemp.DefaultIfEmpty()
 | 
						|
                        join site in _repository.GetQueryable<Site>() on data.SiteId equals site.Id into sitetemp
 | 
						|
                        from leftsite in sitetemp.DefaultIfEmpty()
 | 
						|
                        join subject in _repository.GetQueryable<Subject>() on data.SubjectId equals subject.Id into subtemp
 | 
						|
                        from leftsubject in subtemp.DefaultIfEmpty()
 | 
						|
                        join subjectVisit in _repository.GetQueryable<SubjectVisit>() on data.SubjectVisitId equals subjectVisit.Id into subjectVisittemp
 | 
						|
                        from leftsubjectVisit in subjectVisittemp.DefaultIfEmpty()
 | 
						|
                        join parent in _repository.GetQueryable<DataInspection>() on data.ParentId equals parent.Id into parenttemp
 | 
						|
                        from leftparent in parenttemp.DefaultIfEmpty()
 | 
						|
                        join user in _repository.GetQueryable<User>() on data.CreateUserId equals user.Id into usertemp
 | 
						|
                        from leftuser in usertemp.DefaultIfEmpty()
 | 
						|
 | 
						|
                     
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
                            //join moduleTyped in _repository.GetQueryable<Dictionary>().Where(x => x.Code == "ModuleType") on 1 equals 1
 | 
						|
                            //join moduleTypec in _repository.GetQueryable<Dictionary>() on new { ParentId = moduleTyped.Id, ModuleType = data.ModuleType } equals new { ParentId = moduleTypec.ParentId.Value, ModuleType = moduleTypec.Value } into moduleTypectemp
 | 
						|
 | 
						|
                            //join childrenTyped in _repository.GetQueryable<Dictionary>().Where(x => x.Code == "ChildrenType") on 1 equals 1
 | 
						|
                            //join childrenTypec in _repository.GetQueryable<Dictionary>() on new { ParentId = childrenTyped.Id, ModuleType = data.ChildrenType } equals new { ParentId = childrenTypec.ParentId.Value, ModuleType = childrenTypec.Value } into childrenTypectemp
 | 
						|
                            //from leftchildrenTypec in childrenTypectemp.DefaultIfEmpty()
 | 
						|
 | 
						|
                            //join ObjectTyped in _repository.GetQueryable<Dictionary>().Where(x => x.Code == "ObjectType") on 1 equals 1
 | 
						|
                            //join ObjectTypec in _repository.GetQueryable<Dictionary>() on new { ParentId = ObjectTyped.Id, ModuleType = data.ObjectType } equals new { ParentId = ObjectTypec.ParentId.Value, ModuleType = ObjectTypec.Value } into objectTypetemp
 | 
						|
                            //from leftObjectType in objectTypetemp.DefaultIfEmpty()
 | 
						|
 | 
						|
                            //join OptTyped in _repository.GetQueryable<Dictionary>().Where(x => x.Code == "OptType") on 1 equals 1
 | 
						|
                            //join OptTypec in _repository.GetQueryable<Dictionary>() on new { ParentId = OptTyped.Id, ModuleType = data.OptType } equals new { ParentId = OptTypec.ParentId.Value, ModuleType = OptTypec.Value } into optTypetemp
 | 
						|
                            //from leftOptType in optTypetemp.DefaultIfEmpty()
 | 
						|
 | 
						|
 | 
						|
                        join trialSign in _repository.GetQueryable<TrialSign>() on data.SignId equals trialSign.Id into trialSigntemp
 | 
						|
                        from lefttrialSign in trialSigntemp.DefaultIfEmpty()
 | 
						|
 | 
						|
 | 
						|
                        join frontAuditConfig in _repository.GetQueryable<FrontAuditConfig>().Where(x=>x.ConfigType=="M"&&x.Identification!=null) on new
 | 
						|
                        {
 | 
						|
                            data.Identification
 | 
						|
                        } equals new
 | 
						|
                        {
 | 
						|
                            frontAuditConfig.Identification,
 | 
						|
 | 
						|
                        } into frontAuditConfigtemp
 | 
						|
                        from leftfrontAuditConfig in frontAuditConfigtemp.DefaultIfEmpty()
 | 
						|
 | 
						|
                      
 | 
						|
                        join moduleTypec in _repository.GetQueryable<Dictionary>() on new { ModuleType = leftfrontAuditConfig.ModuleTypeId } equals new { ModuleType = moduleTypec.Id.ToString() } into moduleTypectemp
 | 
						|
                        from leftmoduleTypec in moduleTypectemp.DefaultIfEmpty()
 | 
						|
 | 
						|
 | 
						|
                      
 | 
						|
                        join OptTypec in _repository.GetQueryable<Dictionary>() on new { ModuleType = leftfrontAuditConfig.OptTypeId } equals new { ModuleType = OptTypec.Id.ToString() } into optTypetemp
 | 
						|
                        from leftOptType in optTypetemp.DefaultIfEmpty()
 | 
						|
 | 
						|
                        select new GetDataInspectionOutDto()
 | 
						|
                        {
 | 
						|
                            CreateTime = data.CreateTime,
 | 
						|
                            CreateUserId = data.CreateUserId,
 | 
						|
                            ModuleType = leftmoduleTypec.Id.ToString(),
 | 
						|
                            BlindName = data.BlindName,
 | 
						|
                            TrialId = data.TrialId,
 | 
						|
                            SiteId = data.SiteId,
 | 
						|
                            SubjectId = data.SubjectId,
 | 
						|
                            SubjectVisitId = data.SubjectVisitId,
 | 
						|
                            //OptType = data.OptType,
 | 
						|
                            IP = data.IP,
 | 
						|
                            Reason = data.Reason,
 | 
						|
                            IsSign = data.IsSign,
 | 
						|
                            SignId = data.SignId,
 | 
						|
                            ParentId = data.ParentId,
 | 
						|
                            ChildrenType = data.ChildrenType,
 | 
						|
                            JsonDetail = data.JsonDetail,
 | 
						|
                            SiteName = data.SiteName,
 | 
						|
                            ExperimentName = data.TrialName,
 | 
						|
                            FirstName = leftsubject.FirstName,
 | 
						|
                            LastName = leftsubject.LastName,
 | 
						|
                            Id = data.Id,
 | 
						|
                            ParentJson = leftparent.JsonDetail,
 | 
						|
                            VisitName = data.SubjectVisitName,
 | 
						|
                            CreateUser = leftuser.UserName,
 | 
						|
                            UserFirstName = leftuser.FirstName,
 | 
						|
                            UserLastName = leftuser.LastName,
 | 
						|
                            //SubjectCode=leftsubject.Code,
 | 
						|
                            SubjectCode =data.SubjectCode,
 | 
						|
                            SubjectVisitName=data.SubjectVisitName,
 | 
						|
                            CreateUserName = data.CreateUserName,
 | 
						|
                            RoleName=data.RoleName,
 | 
						|
                            TrialName=data.TrialName,
 | 
						|
                            SiteCode=data.SiteCode,
 | 
						|
                            ResearchProgramNo=data.ResearchProgramNo,
 | 
						|
                            ObjectType=data.ObjectType,
 | 
						|
                            Description=leftfrontAuditConfig.Description,
 | 
						|
                            ModuleTypeName= leftmoduleTypec.ValueCN,
 | 
						|
                            SignText= lefttrialSign.SignText,
 | 
						|
                            Identification= leftfrontAuditConfig.Identification,
 | 
						|
                            OptType= leftOptType.Value,
 | 
						|
                            VisitNum=leftsubjectVisit.VisitNum,
 | 
						|
                            IsFrontAdd=data.IsFrontAdd
 | 
						|
 | 
						|
                        };
 | 
						|
 | 
						|
            query = query.WhereIf(dto.TrialId != null, x => x.TrialId == dto.TrialId)
 | 
						|
                 .WhereIf(dto.SiteId != null, x => x.SiteId == dto.SiteId)
 | 
						|
                 .WhereIf(!dto.SubjectInfo.IsNullOrEmpty(), x => x.SubjectCode.Contains(dto.SubjectInfo))
 | 
						|
                 .WhereIf(dto.VisitPlanInfo != null, x => x.VisitNum == dto.VisitPlanInfo)
 | 
						|
                 .WhereIf(dto.StartTime != null, x => x.CreateTime >= dto.StartTime)
 | 
						|
                 .WhereIf(dto.EndTime != null, x => x.CreateTime <= dto.EndTime)
 | 
						|
                 .WhereIf(!dto.ModuleType.IsNullOrEmpty(), x => x.ModuleType == dto.ModuleType)
 | 
						|
                 .WhereIf(!dto.Description.IsNullOrEmpty(), x => x.Description == dto.Description)
 | 
						|
                 .WhereIf(!dto.OpByUserName.IsNullOrEmpty(), x => x.CreateUserName.Contains(dto.OpByUserName))
 | 
						|
                 //.WhereIf(!dto.SubjectInfo.IsNullOrEmpty(), x => x.SubjectCode.Contains(dto.SubjectInfo))
 | 
						|
                 .WhereIf(dto.IsSign != null, x => x.IsSign == dto.IsSign);
 | 
						|
 | 
						|
 | 
						|
            #endregion
 | 
						|
 | 
						|
 | 
						|
 | 
						|
            dto.Asc = false;
 | 
						|
            return await query.ToPagedListAsync(dto.PageIndex, dto.PageSize, "CreateTime", dto.Asc);
 | 
						|
        }
 | 
						|
 | 
						|
        //public async Task<string> 
 | 
						|
     
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 通用逻辑封装
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="OptCommand">方法参数</param>
 | 
						|
        /// <param name="AuditInfo">添加稽查</param>
 | 
						|
        /// <param name="SignInfo">用户签名</param>
 | 
						|
        /// <param name="fun">委托</param>
 | 
						|
        /// <param name="response">方法返回的结果</param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public async Task<dynamic> Enforcement(dynamic OptCommand, DataInspectionAddDTO AuditInfo, SignDTO SignInfo, dynamic fun, IResponseOutput? response=null)
 | 
						|
        {
 | 
						|
            if (response!=null&&response.IsSuccess == false)
 | 
						|
            {
 | 
						|
                return response;
 | 
						|
            }
 | 
						|
            Guid? signId = null;
 | 
						|
            MapData(OptCommand, AuditInfo);
 | 
						|
            if (AuditInfo.IsSign)
 | 
						|
            {
 | 
						|
                // 验证用户签名信息
 | 
						|
                var verifyResult = await VerifySignatureAsync(SignInfo);
 | 
						|
                signId = await AddSignRecordAsync(SignInfo);
 | 
						|
                if (verifyResult.IsSuccess == false)
 | 
						|
                {
 | 
						|
                    return verifyResult; 
 | 
						|
                }
 | 
						|
                //await AddSignRecordAsync(SignInfo);
 | 
						|
            }
 | 
						|
 | 
						|
            IResponseOutput bResult;
 | 
						|
 | 
						|
            if (response != null)
 | 
						|
            {
 | 
						|
                bResult = response;
 | 
						|
            }
 | 
						|
            else
 | 
						|
            {
 | 
						|
                bResult = await fun(OptCommand);
 | 
						|
            }
 | 
						|
 | 
						|
            // 用户 签名某个文档  
 | 
						|
            if (bResult.IsSuccess == false)
 | 
						|
            {
 | 
						|
                return bResult;
 | 
						|
            }
 | 
						|
 | 
						|
            if (AuditInfo.IsSign)
 | 
						|
            {
 | 
						|
                var signSuccess = await _repository.BatchUpdateAsync<TrialSign>(t => t.Id == signId, u => new TrialSign() { IsCompleted = true });
 | 
						|
            }
 | 
						|
 | 
						|
            // 判断是否需要前面
 | 
						|
            if (AuditInfo.NeedSava)
 | 
						|
            {
 | 
						|
                await AddInspectionRecordAsync(AuditInfo, signId);
 | 
						|
            }
 | 
						|
        
 | 
						|
            return bResult;
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        ///  映射 SiteId  SubjectId  SubjectVisitId  TrialId  最开始没有  需要特殊处理
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="data"></param>
 | 
						|
        /// <param name="mapData"></param>
 | 
						|
        public void MapData(dynamic data, dynamic mapData)
 | 
						|
        {
 | 
						|
            List<string> column = new List<string>() { "TrialId", "SiteId", "SubjectId", "SubjectVisitId" };
 | 
						|
            foreach (var item in column)
 | 
						|
            {
 | 
						|
                try
 | 
						|
                {
 | 
						|
                    var i = mapData.GetType().GetProperty(item).GetValue(mapData);
 | 
						|
                    if (i == null)
 | 
						|
                    {
 | 
						|
                        var value = data.GetType().GetProperty(item).GetValue(data);
 | 
						|
                        mapData.GetType().GetProperty(item).SetValue(mapData, value);
 | 
						|
                    }
 | 
						|
                  
 | 
						|
                }
 | 
						|
                catch (Exception)
 | 
						|
                {
 | 
						|
                    continue;
 | 
						|
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary> 验证用户签名信息 </summary> ///  
 | 
						|
        public async Task<IResponseOutput> VerifySignatureAsync(SignDTO signDTO)
 | 
						|
        {
 | 
						|
            var user = await _repository.FirstOrDefaultAsync<User>(u => u.UserName == signDTO.UserName && u.Password == signDTO.PassWord);
 | 
						|
            if (user == null)
 | 
						|
            {
 | 
						|
                throw new BusinessValidationFailedException("password error");
 | 
						|
            }
 | 
						|
            else if (user.Status == UserStateEnum.Disable)
 | 
						|
            {
 | 
						|
                throw new BusinessValidationFailedException("The user has been disabled!");
 | 
						|
            }
 | 
						|
            return ResponseOutput.Ok();
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary> 添加签名记录 </summary> ///  
 | 
						|
        public async Task<Guid> AddSignRecordAsync(SignDTO signDTO)
 | 
						|
        {
 | 
						|
            var add = await _repository.AddAsync(_mapper.Map<TrialSign>(signDTO));
 | 
						|
 | 
						|
            var success = await _repository.SaveChangesAsync();
 | 
						|
 | 
						|
            return add.Id;
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 添加稽查记录
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="addDto">添加对象</param>
 | 
						|
        /// <param name="signId">签名Id</param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public async Task<IResponseOutput> AddInspectionRecordAsync(DataInspectionAddDTO addDto, Guid? signId = null)
 | 
						|
        {
 | 
						|
            if (addDto == new DataInspectionAddDTO())
 | 
						|
            {
 | 
						|
                return ResponseOutput.Ok();
 | 
						|
            }
 | 
						|
            await SetEnum(addDto);
 | 
						|
            var add = _mapper.Map<DataInspection>(addDto);
 | 
						|
            await SetInspectionNameValue(add);
 | 
						|
            Guid? parentId = null;
 | 
						|
            parentId = (await _repository.GetQueryable<DataInspection>().Where(x => x.TrialId == add.TrialId && x.SubjectVisitId == add.SubjectVisitId && x.SubjectId == add.SubjectId && x.SiteId == add.SiteId && x.ChildrenType == add.ChildrenType && x.ObjectType == add.ObjectType && x.VisitStageId == add.VisitStageId && x.GeneralId == add.GeneralId).OrderByDescending(x => x.CreateTime).FirstOrDefaultAsync())?.Id;
 | 
						|
            add.ParentId = parentId;
 | 
						|
 | 
						|
            if (add.CreateTime == default(DateTime))
 | 
						|
            {
 | 
						|
                add.CreateTime = DateTime.Now;
 | 
						|
            }
 | 
						|
           
 | 
						|
            add.CreateUserId = _userInfo.Id;
 | 
						|
            add.SignId = signId;
 | 
						|
            add.IP = _userInfo.IP;
 | 
						|
 | 
						|
 | 
						|
            add =await _dataInspectionRepository.SetDataInspectionDateType(add);
 | 
						|
 | 
						|
 | 
						|
            await _repository.AddAsync(add);
 | 
						|
 | 
						|
 | 
						|
            var success = await _repository.SaveChangesAsync();
 | 
						|
            return ResponseOutput.Ok(success);
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
     
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 批量添加稽查记录
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="datas"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public async Task AddListInspectionRecordAsync(List<DataInspection> datas)
 | 
						|
        {
 | 
						|
            //var trialIds= datas.Select(x=>x.TrialId).Distinct().ToList();
 | 
						|
            //var subjectVisitIds= datas.Select(x=>x.SubjectVisitId).Distinct().ToList();
 | 
						|
            //var subjectIds = datas.Select(x => x.SubjectId).Distinct().ToList();
 | 
						|
            //var siteIds = datas.Select(x => x.SiteId).Distinct().ToList();
 | 
						|
            //var childrenTypes= datas.Select(x => x.ChildrenType).Distinct().ToList();
 | 
						|
            //var objectTypes = datas.Select(x => x.ObjectType).Distinct().ToList();
 | 
						|
 | 
						|
 | 
						|
            await _dataInspectionRepository.AddListInspectionRecordAsync(datas);
 | 
						|
 | 
						|
            await _dataInspectionRepository.SaveChangesAsync();
 | 
						|
 | 
						|
            //foreach (var add in datas)
 | 
						|
            //{
 | 
						|
            //    await SetInspectionNameValue(add);
 | 
						|
            //    add.ParentId = (await _repository.GetQueryable<DataInspection>().Where(x => x.TrialId == add.TrialId && x.SubjectVisitId == add.SubjectVisitId && x.SubjectId == add.SubjectId && x.SiteId == add.SiteId && x.ChildrenType == add.ChildrenType && x.ObjectType == add.ObjectType&&x.VisitStageId==add.VisitStageId&& x.GeneralId == add.GeneralId).OrderByDescending(x => x.CreateTime).FirstOrDefaultAsync())?.Id;
 | 
						|
            //    add.CreateUserId = _userInfo.Id;
 | 
						|
            //    add.IP = _userInfo.IP;
 | 
						|
 | 
						|
 | 
						|
            //    var JsonData = JsonConvert.DeserializeObject<IDictionary<string, object>>(add.JsonDetail);
 | 
						|
 | 
						|
            //    foreach (var item in JsonData.Keys)
 | 
						|
            //    {
 | 
						|
            //        if (JsonData[item].ToString().ToLower() == "true".ToLower())
 | 
						|
            //        {
 | 
						|
            //            JsonData[item] = "是";
 | 
						|
            //        } else if (JsonData[item].ToString().ToLower() == "false".ToLower())
 | 
						|
            //        {
 | 
						|
            //            JsonData[item] = "否";
 | 
						|
            //        }
 | 
						|
 | 
						|
            //    }
 | 
						|
            //    add.JsonDetail= JsonConvert.SerializeObject(JsonData);
 | 
						|
            //}
 | 
						|
 | 
						|
            //await _dataInspectionRepository.AddRangeAsync(datas);
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 往json里面添加属性
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="json">json</param>
 | 
						|
        /// <param name="keyValues">字典</param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public string AddJsonItem(string json, Dictionary<string,object> keyValues)
 | 
						|
        {
 | 
						|
          
 | 
						|
            var JsonData = JsonConvert.DeserializeObject<IDictionary<string, object>>(json);
 | 
						|
 | 
						|
            foreach (var item in keyValues)
 | 
						|
            {
 | 
						|
                if (JsonData.ContainsKey(item.Key))
 | 
						|
                {
 | 
						|
                    JsonData[item.Key] = item.Value;
 | 
						|
                }
 | 
						|
                else {
 | 
						|
                    JsonData.Add(item.Key, item.Value);
 | 
						|
                }
 | 
						|
              
 | 
						|
            }
 | 
						|
            return JsonConvert.SerializeObject(JsonData);
 | 
						|
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 处理枚举
 | 
						|
        /// </summary>
 | 
						|
        /// <returns></returns>
 | 
						|
 | 
						|
        public async Task SetEnum(DataInspectionAddDTO Data)
 | 
						|
        {
 | 
						|
            Data.JsonDetail= await _dataInspectionRepository.SetEnum(Data.TrialId.Value, Data.Identification, Data.JsonDetail);
 | 
						|
            #region 枚举
 | 
						|
            //try
 | 
						|
            //{
 | 
						|
            //    var JsonData = JsonConvert.DeserializeObject<IDictionary<string, object>>(Data.JsonDetail);
 | 
						|
            //    foreach (var item in Data.EnumList)
 | 
						|
            //    {
 | 
						|
            //        if (!JsonData.ContainsKey(item.Key))
 | 
						|
            //        {
 | 
						|
            //            continue;
 | 
						|
            //        }
 | 
						|
            //        var value = JsonData[item.Key];
 | 
						|
            //        if (value.GetType() == typeof(JArray))
 | 
						|
            //        {
 | 
						|
            //            JArray arrays = (JArray)value;
 | 
						|
            //            if (item.Type.ToLower() == "id".ToLower())
 | 
						|
            //            {
 | 
						|
            //                List<Guid> guids = new List<Guid>();
 | 
						|
            //                arrays.ForEach(x =>
 | 
						|
            //                {
 | 
						|
            //                    guids.Add(Guid.Parse(x.ToString()));
 | 
						|
            //                });
 | 
						|
            //                JsonData[item.Key] = string.Join(',', await _repository.GetQueryable<Dictionary>().Where(x => guids.Contains(x.Id)).Select(x => x.ValueCN).ToListAsync());
 | 
						|
            //            }
 | 
						|
            //            else if (item.Type.ToLower() == "ChildGroup".ToLower())
 | 
						|
            //            {
 | 
						|
            //                List<string> guids = new List<string>();
 | 
						|
            //                arrays.ForEach(x =>
 | 
						|
            //                {
 | 
						|
            //                    guids.Add(x.ToString());
 | 
						|
            //                });
 | 
						|
            //                JsonData[item.Key] = string.Join(',', await
 | 
						|
            //                    _repository.GetQueryable<Dictionary>().Where(x => x.Code == item.Code).GroupJoin(
 | 
						|
            //                         _repository.GetQueryable<Dictionary>().Where(x => guids.Contains(x.ChildGroup)), a => a.Id, b => b.ParentId, (a, b) => new
 | 
						|
            //                         {
 | 
						|
            //                             parent = b
 | 
						|
            //                         }).SelectMany(a => a.parent, (m, n) => new
 | 
						|
            //                         {
 | 
						|
            //                             value = n.ValueCN
 | 
						|
            //                         }).Select(x => x.value).ToListAsync()
 | 
						|
            //                        );
 | 
						|
            //            }
 | 
						|
            //            else
 | 
						|
            //            {
 | 
						|
            //                List<string> guids =new List<string>();
 | 
						|
            //                arrays.ForEach(x =>
 | 
						|
            //                {
 | 
						|
            //                    guids.Add(x.ToString());
 | 
						|
            //                });
 | 
						|
            //                JsonData[item.Key] = string.Join(',', await
 | 
						|
            //                    _repository.GetQueryable<Dictionary>().Where(x => x.Code == item.Code).GroupJoin(
 | 
						|
            //                         _repository.GetQueryable<Dictionary>().Where(x=>guids.Contains(x.Code)), a => a.Id, b => b.ParentId, (a, b) => new
 | 
						|
            //                         {
 | 
						|
            //                             parent = b
 | 
						|
            //                         }).SelectMany(a => a.parent, (m, n) => new
 | 
						|
            //                         {
 | 
						|
            //                             value = n.ValueCN
 | 
						|
            //                         }).Select(x => x.value).ToListAsync()
 | 
						|
            //                        );
 | 
						|
            //            }
 | 
						|
            //        }
 | 
						|
            //        else
 | 
						|
            //        {
 | 
						|
            //            if (item.Type.ToLower() == "id".ToLower())
 | 
						|
            //            {
 | 
						|
            //                Guid guid = Guid.Parse(value.ToString());
 | 
						|
            //                JsonData[item.Key] = await _repository.GetQueryable<Dictionary>().Where(x => guid == x.Id).Select(x => x.ValueCN).FirstOrDefaultAsync();
 | 
						|
            //            }
 | 
						|
            //            else if (item.Type.ToLower() == "ChildGroup".ToLower())
 | 
						|
            //            {
 | 
						|
            //                JsonData[item.Key] = await _repository.GetQueryable<Dictionary>().Where(x => x.Code == item.Code).Join(_repository.GetQueryable<Dictionary>().Where(x => x.ChildGroup == value.ToString()), a => a.Id, b => b.ParentId, (a, b) => new
 | 
						|
            //                {
 | 
						|
            //                    value = b.ValueCN
 | 
						|
            //                }).Select(x => x.value).FirstOrDefaultAsync();
 | 
						|
            //            }
 | 
						|
            //            else
 | 
						|
            //            {
 | 
						|
            //                JsonData[item.Key] = await _repository.GetQueryable<Dictionary>().Where(x=>x.Code==item.Code).Join(_repository.GetQueryable<Dictionary>().Where(x=>x.Code== value.ToString()), a => a.Id, b => b.ParentId, (a, b) => new
 | 
						|
            //                {
 | 
						|
            //                   value=b.ValueCN
 | 
						|
            //                }).Select(x=>x.value).FirstOrDefaultAsync();
 | 
						|
 | 
						|
            //            }
 | 
						|
            //        }
 | 
						|
            //    }
 | 
						|
 | 
						|
              
 | 
						|
           
 | 
						|
            //    Data.JsonDetail = JsonConvert.SerializeObject(JsonData);
 | 
						|
              
 | 
						|
            //}
 | 
						|
            //catch (Exception)
 | 
						|
            //{
 | 
						|
 | 
						|
            //    throw new BusinessValidationFailedException("Json 对象枚举异常");
 | 
						|
            //}
 | 
						|
        
 | 
						|
 | 
						|
 | 
						|
            #endregion
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 设置项目以及名称
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="Data"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        public async Task SetInspectionNameValue(DataInspection Data)
 | 
						|
        {
 | 
						|
 | 
						|
            await _dataInspectionRepository.SetInspectionNameValue(Data);
 | 
						|
 | 
						|
            //#region 项目名称
 | 
						|
 | 
						|
            //var trialdata = await _repository.GetQueryable<Trial>().FirstOrDefaultAsync(x => x.Id == Data.TrialId);
 | 
						|
            //Data.ResearchProgramNo = trialdata?.ResearchProgramNo;
 | 
						|
            //if (Data.TrialName.IsNullOrEmpty())
 | 
						|
            //{
 | 
						|
            //    Data.TrialName = trialdata?.ExperimentName;
 | 
						|
            //}
 | 
						|
            //#endregion
 | 
						|
 | 
						|
            //#region 测试中心名称
 | 
						|
 | 
						|
 | 
						|
            //Data.SiteCode = (await _repository.GetQueryable<TrialSite>().FirstOrDefaultAsync(x => x.TrialId == Data.TrialId && x.SiteId == Data.SiteId))?.TrialSiteCode;
 | 
						|
 | 
						|
            //var sitedata = await _repository.GetQueryable<Site>().FirstOrDefaultAsync(x => x.Id == Data.SiteId);
 | 
						|
 | 
						|
            //if (Data.SiteName.IsNullOrEmpty())
 | 
						|
            //{
 | 
						|
            //    Data.SiteName = sitedata?.SiteName;
 | 
						|
            //}
 | 
						|
            //#endregion
 | 
						|
 | 
						|
            //#region 受试者
 | 
						|
 | 
						|
 | 
						|
            //if (Data.SubjectCode.IsNullOrEmpty())
 | 
						|
            //{
 | 
						|
 | 
						|
            //    Data.SubjectCode = (await _repository.GetQueryable<Subject>().FirstOrDefaultAsync(x => x.Id == Data.SubjectId))?.Code;
 | 
						|
            //}
 | 
						|
            //#endregion
 | 
						|
 | 
						|
            //#region 访视
 | 
						|
            //if (Data.SubjectVisitName.IsNullOrEmpty())
 | 
						|
            //{
 | 
						|
            //    Data.SubjectVisitName = (await _repository.GetQueryable<SubjectVisit>().FirstOrDefaultAsync(x => x.Id == Data.SubjectVisitId))?.VisitName;
 | 
						|
            //}
 | 
						|
            //#endregion
 | 
						|
 | 
						|
            //#region 创建者
 | 
						|
            //if (Data.CreateUserName.IsNullOrEmpty() || Data.RoleName.IsNullOrEmpty())
 | 
						|
            //{
 | 
						|
            //    var userdata = await _repository.GetQueryable<User>().Where(x => x.Id == Data.CreateUserId).GroupJoin(_repository.GetQueryable<UserType>(), a => a.UserTypeId, b => b.Id, (a, b) => new
 | 
						|
            //    {
 | 
						|
            //        UserName = a.FirstName + a.LastName,
 | 
						|
            //        Role = b
 | 
						|
            //    }).SelectMany(a => a.Role, (m, n) => new
 | 
						|
            //    {
 | 
						|
            //        UserName = m.UserName,
 | 
						|
            //        RoleName = n.UserTypeShortName
 | 
						|
            //    }).FirstOrDefaultAsync();
 | 
						|
 | 
						|
            //    if (userdata != null)
 | 
						|
            //    {
 | 
						|
            //        if (Data.CreateUserName.IsNullOrEmpty())
 | 
						|
            //        {
 | 
						|
            //            Data.CreateUserName = userdata?.UserName;
 | 
						|
            //        }
 | 
						|
 | 
						|
 | 
						|
            //        if (Data.RoleName.IsNullOrEmpty())
 | 
						|
            //        {
 | 
						|
            //            Data.RoleName = userdata?.RoleName;
 | 
						|
            //        }
 | 
						|
            //    }
 | 
						|
            //}
 | 
						|
            //#endregion
 | 
						|
 | 
						|
            //#region 取操作类型
 | 
						|
            //try
 | 
						|
            //{
 | 
						|
            //    var from = await _frontAuditConfigRepository.FirstOrDefaultAsync(x => x.Identification == Data.Identification);
 | 
						|
            //    Data.ObjectType = from.ObjectTypeId;
 | 
						|
            //    Data.OptType = from.OptTypeId;
 | 
						|
            //    Data.ChildrenType = from.ChildrenTypeId;
 | 
						|
            //    Data.ModuleType = from.ModuleTypeId;
 | 
						|
            //}
 | 
						|
            //catch (Exception)
 | 
						|
            //{
 | 
						|
 | 
						|
            //    throw new BusinessValidationFailedException("操作标识异常");
 | 
						|
            //}
 | 
						|
        
 | 
						|
 | 
						|
            //#endregion
 | 
						|
 | 
						|
        }
 | 
						|
     
 | 
						|
    
 | 
						|
    }
 | 
						|
}
 |