diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
index 9cedfdf43..3df8bcf2e 100644
--- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
+++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml
@@ -1297,6 +1297,11 @@
阅片期ID
+
+
+ 阅片范围
+
+
中心ID
diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs
index 603e320db..f509e0eb0 100644
--- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs
+++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskService.cs
@@ -319,7 +319,7 @@ namespace IRaCIS.Core.Application.Service
{
//自动分配的话,需要把手动分配的给删掉
- throw new BusinessValidationFailedException("自动分配算法正在开发,还未完成");
+ //throw new BusinessValidationFailedException("自动分配算法正在开发,还未完成");
var trialId = autoSubjectAssignCommand.TrialId;
@@ -384,7 +384,19 @@ namespace IRaCIS.Core.Application.Service
//eg : 10个Sujbect 都是1/4 先分配整数 再分配 10%4=2个
//特殊: 不够分的subject数量 适用于 2个Subject 4个医生 这种
- var specialSubjectCount = subjectCount % waitAllocationDoctorList.Count();
+
+
+ var integerPlan = 0;
+
+ waitAllocationDoctorList.ForEach(doctor =>
+ {
+
+ integerPlan += (int)Math.Floor((double)(subjectCount * doctor.PlanReadingRatio ) / 100);
+
+ });
+
+
+ var specialSubjectCount = subjectCount - integerPlan;
//按照医生维度 分配Subject
foreach (var doctor in waitAllocationDoctorList)
@@ -401,7 +413,7 @@ namespace IRaCIS.Core.Application.Service
var planSubjectCount = (int)Math.Ceiling((double)(subjectCount * doctor.PlanReadingRatio) / 100);
//权重大的,将特殊的分配
- if (doctor.Weight >= 50)
+ if (doctor.Weight != 50)
{
if (specialSubjectCount > 0)
{
@@ -443,8 +455,17 @@ namespace IRaCIS.Core.Application.Service
}
if (trialConfig.ReadingType == ReadingMethod.Double)
{
+ var integerPlan = 0;
- var specialSubjectCount = subjectCount % waitAllocationDoctorList.Count();
+ waitAllocationDoctorList.ForEach(doctor =>
+ {
+
+ integerPlan += (int)Math.Floor((double)(subjectCount * doctor.PlanReadingRatio * 2) / 100);
+
+ });
+
+
+ var specialSubjectCount = (subjectCount * 2) - integerPlan;
//按照医生维度 分配Subject
foreach (var doctor in waitAllocationDoctorList)
@@ -458,10 +479,13 @@ namespace IRaCIS.Core.Application.Service
var hasAssignedSubjectCount = hasAssignedSubjectIdList.Count();
//该医生计划分配到的Subject 最接近的整数数量
- var planSubjectCount = (int)Math.Floor((double)(subjectCount * doctor.PlanReadingRatio *2) / 100);
+ var planSubjectCount = (int)Math.Floor((double)(subjectCount * doctor.PlanReadingRatio * 2) / 100);
- //权重大的,将特殊的分配
- if (doctor.Weight >= 50)
+ //判断是否能整除
+
+ var yuShu = (subjectCount * doctor.PlanReadingRatio * 2) % 100;
+
+ if ( yuShu != 0)
{
if (specialSubjectCount > 0)
{
@@ -469,14 +493,11 @@ namespace IRaCIS.Core.Application.Service
planSubjectCount++;
}
- else
- {
- planSubjectCount++;
-
- }
-
}
+
+
+
//如果计划的数量 大于已经分配的数量 那么该医生 可以分配新的Subject
if (planSubjectCount > hasAssignedSubjectCount)
{
@@ -488,13 +509,13 @@ namespace IRaCIS.Core.Application.Service
//取需要分配的数量 并且没有分配给其他医生的包括自己
var assignSubjectIdList = subjectList.Where(t => !hasAssignedSubjectIdList.Contains(t.SubjectId) && !otherExceptDoctorIdList.Contains(t.SubjectId))
- .Select(t => t.SubjectId).Take((planSubjectCount - hasAssignedSubjectCount) * 2).ToList();
+ .Select(t => t.SubjectId).Take((planSubjectCount - hasAssignedSubjectCount) ).ToList();
foreach (var assignSubjectId in assignSubjectIdList)
{
- var otherHaveAssignedSubject= assignedSubjectDoctorList.Where(t => t.SubjectId == assignSubjectId).FirstOrDefault();
+ var otherHaveAssignedSubject = assignedSubjectDoctorList.Where(t => t.SubjectId == assignSubjectId).FirstOrDefault();
if (otherHaveAssignedSubject != null)
{
@@ -506,7 +527,7 @@ namespace IRaCIS.Core.Application.Service
await _subjectUserRepository.AddAsync(new SubjectUser() { TrialId = trialId, SubjectId = assignSubjectId, DoctorUserId = doctor.DoctorUserId, ArmEnum = 2, AssignTime = DateTime.Now });
}
- else if(otherHaveAssignedSubject.ArmEnum == 2)
+ else if (otherHaveAssignedSubject.ArmEnum == 2)
{
assignedSubjectDoctorList.Add(new { SubjectId = assignSubjectId, DoctorUserId = doctor.DoctorUserId, ArmEnum = 1 });
@@ -521,7 +542,7 @@ namespace IRaCIS.Core.Application.Service
await _subjectUserRepository.AddAsync(new SubjectUser() { TrialId = trialId, SubjectId = assignSubjectId, DoctorUserId = doctor.DoctorUserId, ArmEnum = 1, AssignTime = DateTime.Now });
}
-
+
}
}