Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api
						commit
						c403951050
					
				| 
						 | 
					@ -477,7 +477,6 @@ namespace IRaCIS.Application.Services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return await userQueryable.ToPagedListAsync(param.PageIndex, param.PageSize, param.SortField == string.Empty ? "UserName" : param.SortField, param.Asc);
 | 
					            return await userQueryable.ToPagedListAsync(param.PageIndex, param.PageSize, param.SortField == string.Empty ? "UserName" : param.SortField, param.Asc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -192,8 +192,8 @@ namespace IRaCIS.Core.Application
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    ToBeCheckedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.ToCheck).Count(),
 | 
					                    ToBeCheckedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.ToCheck).Count(),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    ToBeRepliedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.ToCheck &&
 | 
					                    ToBeRepliedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng &&
 | 
				
			||||||
                    u.CheckChallengeDialogList.Any(t => t.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator)).Count(),
 | 
					                    u.CheckChallengeDialogList.OrderByDescending(t=>t.CreateTime).First().UserTypeEnum== UserTypeEnum.ClinicalResearchCoordinator).Count(),
 | 
				
			||||||
                });
 | 
					                });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -204,8 +204,8 @@ namespace IRaCIS.Core.Application
 | 
				
			||||||
                .Where(u => u.CheckState == CheckStateEnum.ToCheck).CountAsync();
 | 
					                .Where(u => u.CheckState == CheckStateEnum.ToCheck).CountAsync();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var totalToBeRepliedCount = await _subjectVisitRepository.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
 | 
					            var totalToBeRepliedCount = await _subjectVisitRepository.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
 | 
				
			||||||
                .Where(u => u.CheckState == CheckStateEnum.ToCheck &&
 | 
					                .Where(u => u.CheckState == CheckStateEnum.CVIng &&
 | 
				
			||||||
                    u.CheckChallengeDialogList.Any(t => t.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator)).CountAsync();
 | 
					                    u.CheckChallengeDialogList.OrderByDescending(t => t.CreateTime).First().UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).CountAsync();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return ResponseOutput.Ok(result, new { TotalToBeCheckedCount = totalToBeCheckedCount, TotalToBeRepliedCount = totalToBeRepliedCount });
 | 
					            return ResponseOutput.Ok(result, new { TotalToBeCheckedCount = totalToBeCheckedCount, TotalToBeRepliedCount = totalToBeRepliedCount });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -892,7 +892,7 @@ namespace IRaCIS.Core.Application
 | 
				
			||||||
              [FromServices] IRepository<TaskMedicalReview> _taskMedicalReviewRepository)
 | 
					              [FromServices] IRepository<TaskMedicalReview> _taskMedicalReviewRepository)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var isPM = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager;
 | 
					            var isPM = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager|| _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM;
 | 
				
			||||||
            var isCRC = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator;
 | 
					            var isCRC = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator;
 | 
				
			||||||
            var isIQC = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC;
 | 
					            var isIQC = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC;
 | 
				
			||||||
            var isMIM = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.MIM;
 | 
					            var isMIM = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.MIM;
 | 
				
			||||||
| 
						 | 
					@ -917,9 +917,13 @@ namespace IRaCIS.Core.Application
 | 
				
			||||||
                 TrialStatusStr=t.TrialStatusStr,
 | 
					                 TrialStatusStr=t.TrialStatusStr,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                 ExpetiedTaskCount= isPM ?   t.VisitTaskList.Where(t=>t.IsUrgent).Count():0,
 | 
					                 ExpetiedTaskCount= isPM ?   t.VisitTaskList.Where(t=>t.IsUrgent).Count():0,
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
                 ReReadingApprovalCount= isPM? t.VisitTaskReReadingList.Where(t=>t.OriginalReReadingTask.ReReadingApplyState==ReReadingApplyState.DocotorHaveApplyed).Count():0,
 | 
					                 ReReadingApprovalCount= isPM? t.VisitTaskReReadingList.Where(t=>t.OriginalReReadingTask.ReReadingApplyState==ReReadingApplyState.DocotorHaveApplyed).Count():0,
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
                 PendingReconciliationCount=isPM?  t.SubjectVisitList.Where(t=>t.CheckState==CheckStateEnum.ToCheck).Count():0,
 | 
					                 PendingReconciliationCount=isPM?  t.SubjectVisitList.Where(t=>t.CheckState==CheckStateEnum.ToCheck).Count():0,
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                 PendingResponseCount=isPM? t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng &&
 | 
				
			||||||
 | 
					                    u.CheckChallengeDialogList.OrderByDescending(t => t.CreateTime).First().UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count() : 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -934,6 +938,9 @@ namespace IRaCIS.Core.Application
 | 
				
			||||||
            return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = 0 });
 | 
					            return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = 0 });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,28 +17,32 @@ using Microsoft.EntityFrameworkCore.ValueGeneration;
 | 
				
			||||||
using UserTypeGroup = IRaCIS.Core.Domain.Models.UserTypeGroup;
 | 
					using UserTypeGroup = IRaCIS.Core.Domain.Models.UserTypeGroup;
 | 
				
			||||||
using IRaCIS.Core.Infra.EFCore.Common;
 | 
					using IRaCIS.Core.Infra.EFCore.Common;
 | 
				
			||||||
using IRaCIS.Core.Infra.EFCore.Common.Dto;
 | 
					using IRaCIS.Core.Infra.EFCore.Common.Dto;
 | 
				
			||||||
 | 
					using Microsoft.Identity.Client;
 | 
				
			||||||
 | 
					using EntityFramework.Exceptions.Common;
 | 
				
			||||||
 | 
					using System.Data;
 | 
				
			||||||
 | 
					using IRaCIS.Core.Infrastructure;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace IRaCIS.Core.Infra.EFCore
 | 
					namespace IRaCIS.Core.Infra.EFCore
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public class IRaCISDBContext : DbContext
 | 
					    public class IRaCISDBContext : DbContext
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public readonly IUserInfo _userInfo;
 | 
					        public readonly IUserInfo _userInfo;
 | 
				
			||||||
        //private readonly IAuditingData _auditingData;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public readonly ILogger<IRaCISDBContext> _logger;
 | 
				
			||||||
        // 在控制台
 | 
					        // 在控制台
 | 
				
			||||||
        //public static readonly ILoggerFactory MyLoggerFactory    = LoggerFactory.Create(builder => { builder.AddConsole(); });
 | 
					        //public static readonly ILoggerFactory MyLoggerFactory    = LoggerFactory.Create(builder => { builder.AddConsole(); });
 | 
				
			||||||
        // 调试窗口
 | 
					        // 调试窗口
 | 
				
			||||||
        public static readonly ILoggerFactory MyLoggerFactory = LoggerFactory.Create(builder => { builder.AddDebug(); });
 | 
					        public static readonly ILoggerFactory MyLoggerFactory = LoggerFactory.Create(builder => { builder.AddDebug(); });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public IRaCISDBContext(DbContextOptions<IRaCISDBContext> options, IUserInfo userInfo
 | 
					        public IRaCISDBContext(DbContextOptions<IRaCISDBContext> options, IUserInfo userInfo, ILogger<IRaCISDBContext> logger
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //IAuditingData auditingData
 | 
					        //IAuditingData auditingData
 | 
				
			||||||
            ) : base(options)
 | 
					            ) : base(options)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            _logger= logger;
 | 
				
			||||||
            _userInfo = userInfo;
 | 
					            _userInfo = userInfo;
 | 
				
			||||||
            //this._auditingData = auditingData;
 | 
					
 | 
				
			||||||
            //_configuration = configuration;
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -496,12 +500,69 @@ namespace IRaCIS.Core.Infra.EFCore
 | 
				
			||||||
            return base.SaveChanges();
 | 
					            return base.SaveChanges();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken())
 | 
					        public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken())
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            //  采用触发器的方式 设置 CreateUserId CreateTime UpdateTime UpdateUserId    稽查实体里面没有这四个字段的值 因为先后顺序的原因
 | 
					            //  采用触发器的方式 设置 CreateUserId CreateTime UpdateTime UpdateUserId    稽查实体里面没有这四个字段的值 因为先后顺序的原因
 | 
				
			||||||
            SetCommonEntityAuditInfo();
 | 
					            SetCommonEntityAuditInfo();
 | 
				
			||||||
            await AddAudit();
 | 
					            await AddAudit();
 | 
				
			||||||
            return await base.SaveChangesAsync(cancellationToken);
 | 
					
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return await base.SaveChangesAsync(cancellationToken);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (UniqueConstraintException ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                _logger.LogError(ex.Message);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                throw new DBSaveFailedException("该唯一键已经存在于数据库中。");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (TimeoutException ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                _logger.LogError(ex.Message);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                throw new DBSaveFailedException("数据库操作已经超时,请稍后重试。");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (CannotInsertNullException ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                _logger.LogError(ex.Message);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                throw new DBSaveFailedException("无法在非空列上插入空值。");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (MaxLengthExceededException ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                _logger.LogError(ex.Message);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                throw new DBSaveFailedException("字符串超过了数据库列的最大长度。");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (NumericOverflowException ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                _logger.LogError(ex.Message);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                throw new DBSaveFailedException("数值超过了数据类型的范围。");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (SyntaxErrorException ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                _logger.LogError(ex.Message);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                throw new DBSaveFailedException("SQL 查询中存在语法错误。");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (ReferenceConstraintException ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                _logger.LogError(ex.Message);
 | 
				
			||||||
 | 
					                throw new DBSaveFailedException("无法进行当前操作,当前数据不符合外键约束。");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (DbUpdateConcurrencyException ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                _logger.LogError(ex.Message);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                throw new DBSaveFailedException("SQL 事务失败,请检查环境。");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -670,7 +731,6 @@ namespace IRaCIS.Core.Infra.EFCore
 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #endregion
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public virtual DbSet<TaskAllocationRule> TaskAllocationRule { get; set; }
 | 
					        public virtual DbSet<TaskAllocationRule> TaskAllocationRule { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,21 @@
 | 
				
			||||||
 | 
					using System;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace IRaCIS.Core.Infrastructure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public class DBSaveFailedException : Exception
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public DBSaveFailedException()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public DBSaveFailedException(string message) : base(message)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue