CrazyIter_Bin 1 年之前
父節點
當前提交
795cefaba3

+ 5 - 1
TEAMModelOS.SDK/Models/Service/BI/BIStats.cs

@@ -402,7 +402,11 @@ namespace TEAMModelOS.SDK.Models.Service.BI
                                 }
                                 }
                                 else
                                 else
                                 {
                                 {
-                                    term += ((int)matris.SubMatrix(termDayS.DayOfYear - 1, termDayE.DayOfYear - termDayS.DayOfYear + 1, 0, matris.ColumnCount).ColumnSums().Sum());
+
+                                    // 判定计算出的数据是否为负数 如果为负数 当前时间减去学期开始时间  否则是 本学期时间 减去 本学期开始时间天数  
+                                    // (termDayE.DayOfYear - termDayS.DayOfYear + 1) < 0 ? dateOff.DayOfYear - termDayS.DayOfYear + 1 : termDayE.DayOfYear - termDayS.DayOfYear + 1
+                                    term += ((int)matris.SubMatrix(termDayS.DayOfYear - 1, (termDayE.DayOfYear - termDayS.DayOfYear + 1) < 0 ? dateOff.DayOfYear - termDayS.DayOfYear + 1 : termDayE.DayOfYear - termDayS.DayOfYear + 1, 0, matris.ColumnCount).ColumnSums().Sum());
+                                    //term += ((int)matris.SubMatrix(termDayS.DayOfYear - 1, termDayE.DayOfYear - termDayS.DayOfYear + 1, 0, matris.ColumnCount).ColumnSums().Sum());
                                 }
                                 }
                             }
                             }
                             statsInfo.activity.term = term;
                             statsInfo.activity.term = term;

+ 63 - 0
TEAMModelOS.SDK/Models/Service/Common/ActivityService.cs

@@ -1,6 +1,7 @@
 using Azure.Cosmos;
 using Azure.Cosmos;
 using Azure.Storage.Blobs.Models;
 using Azure.Storage.Blobs.Models;
 using Azure.Storage.Sas;
 using Azure.Storage.Sas;
+using DocumentFormat.OpenXml.Bibliography;
 using DocumentFormat.OpenXml.Drawing;
 using DocumentFormat.OpenXml.Drawing;
 using DocumentFormat.OpenXml.Drawing.Charts;
 using DocumentFormat.OpenXml.Drawing.Charts;
 using DocumentFormat.OpenXml.Math;
 using DocumentFormat.OpenXml.Math;
@@ -44,6 +45,7 @@ namespace TEAMModelOS.SDK
                 var subject = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("subject"));
                 var subject = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("subject"));
                 string periodSubjectKey =string.Empty;
                 string periodSubjectKey =string.Empty;
                 int count = 0;
                 int count = 0;
+
                 if (enroll.upload != null && enroll.upload.sokrates.IsNotEmpty())
                 if (enroll.upload != null && enroll.upload.sokrates.IsNotEmpty())
                 {
                 {
                     count += enroll.upload.sokrates.Count;
                     count += enroll.upload.sokrates.Count;
@@ -322,6 +324,63 @@ namespace TEAMModelOS.SDK
             }
             }
             return (expertContestTasks, activityEnrollsInvalid, expertContestTasksDB);
             return (expertContestTasks, activityEnrollsInvalid, expertContestTasksDB);
         }
         }
+
+
+
+        public static (int available, string periodSubjectKey) CheckPeriodSubject(string distribute , EnrollInfo period, EnrollInfo subject, HashSet<string> periodSubjectKeys) {
+            int available = -1;
+            string periodSubjectKey= string.Empty;
+            if (distribute.Equals("period"))
+            {
+                if (period != null)
+                {
+                    periodSubjectKey = $"{period.val}-";
+                }
+                else
+                {
+                    available = 2;
+                }
+            }
+            else if (distribute.Equals("subject"))
+            {
+
+                if (subject != null)
+                {
+                    periodSubjectKey = $"-{subject.val}";
+                }
+                else
+                {
+                    available = 3;
+                }
+            }
+            else if (distribute.Equals("periodAndSubject"))
+            {
+                if (period != null && subject != null)
+                {
+                    periodSubjectKey = $"{period.val}-{subject.val}";
+                }
+                else
+                {
+                   available = 4;
+                }
+            }
+            else
+            {
+                periodSubjectKey = "-";
+            }
+            if (!string.IsNullOrWhiteSpace(periodSubjectKey)) {
+                if (periodSubjectKeys.Contains(periodSubjectKey))
+                {
+                    available = 0;
+                }
+                else
+                {
+                    //学段学科不匹配
+                    available = 6;
+                }
+            }
+            return (available, periodSubjectKey);
+        }
         /// <summary>
         /// <summary>
         /// 将作品按分配次数,分配给不同的专家
         /// 将作品按分配次数,分配给不同的专家
         /// </summary>
         /// </summary>
@@ -576,6 +635,10 @@ namespace TEAMModelOS.SDK
                 {
                 {
                     reviewRule.code="ReviewRule-template";
                     reviewRule.code="ReviewRule-template";
                     reviewRule.type="template";
                     reviewRule.type="template";
+                    reviewRule.taskCount = reviewRuleTree.taskCount;
+                    reviewRule.scoreRule = reviewRuleTree.scoreRule;
+                    reviewRule.distribute = reviewRuleTree.distribute;
+                    reviewRule.scoreDetail = reviewRuleTree.scoreDetail;
                     await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).UpsertItemAsync(reviewRule, new Azure.Cosmos.PartitionKey(reviewRule.code));
                     await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Normal).UpsertItemAsync(reviewRule, new Azure.Cosmos.PartitionKey(reviewRule.code));
                 }
                 }
             }
             }

+ 187 - 3
TEAMModelOS/Controllers/Common/ActivityController.cs

@@ -34,6 +34,8 @@ using Microsoft.Azure.Amqp.Framing;
 using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Authorization;
 using DocumentFormat.OpenXml.Drawing.Charts;
 using DocumentFormat.OpenXml.Drawing.Charts;
 using static SKIT.FlurlHttpClient.Wechat.TenpayV3.Models.CreateApplyForSubjectApplymentRequest.Types;
 using static SKIT.FlurlHttpClient.Wechat.TenpayV3.Models.CreateApplyForSubjectApplymentRequest.Types;
+using static TEAMModelOS.Controllers.FixDataController;
+using DocumentFormat.OpenXml.Spreadsheet;
 namespace TEAMModelOS.Controllers
 namespace TEAMModelOS.Controllers
 {
 {
 
 
@@ -949,7 +951,11 @@ namespace TEAMModelOS.Controllers
                                     owner= item.owner,
                                     owner= item.owner,
                                     sourceName= item.sourceName,
                                     sourceName= item.sourceName,
                                     trees=tree,
                                     trees=tree,
-                                    upsertAsTemplate=1
+                                    upsertAsTemplate=1,
+                                    taskCount=item.taskCount,
+                                    scoreRule=item.scoreRule,
+                                    distribute=item.distribute,
+                                    scoreDetail=item.scoreDetail
                                 };
                                 };
                                 reviewRules.Add(reviewRule);
                                 reviewRules.Add(reviewRule);
                             }
                             }
@@ -1959,7 +1965,8 @@ namespace TEAMModelOS.Controllers
                                     responses.Add(_azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(contestTask, new PartitionKey($"ActivityExpertTask-{_activityId}")));
                                     responses.Add(_azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(contestTask, new PartitionKey($"ActivityExpertTask-{_activityId}")));
                                 }
                                 }
                                 if (responses.IsNotEmpty()) {
                                 if (responses.IsNotEmpty()) {
-                                    await Task.WhenAll(responses);
+                                   await responses.TaskPage(10);
+                                    //await Task.WhenAll(responses);
                                 }
                                 }
                                 await _azureRedis.GetRedisClient(8).KeyDeleteAsync(_taskKey.GetString());
                                 await _azureRedis.GetRedisClient(8).KeyDeleteAsync(_taskKey.GetString());
                                 return Ok(new { code=200});
                                 return Ok(new { code=200});
@@ -1969,6 +1976,8 @@ namespace TEAMModelOS.Controllers
                     //分配评审作品任务-手动
                     //分配评审作品任务-手动
                     case bool when $"{grant_type}".Equals("allocation-task-manual-save", StringComparison.OrdinalIgnoreCase):
                     case bool when $"{grant_type}".Equals("allocation-task-manual-save", StringComparison.OrdinalIgnoreCase):
                         {
                         {
+                            if (!request.TryGetProperty("activityId", out JsonElement _activityId)) return BadRequest();
+
                             break;
                             break;
                         }
                         }
                 }
                 }
@@ -3190,7 +3199,182 @@ namespace TEAMModelOS.Controllers
             }
             }
             return Ok();
             return Ok();
         }
         }
-        
+        public static async Task<(List<ExpertContestTaskDto> expertContestTasks, List<ExpertContestTaskDto> activityEnrollsInvalid, List<ExpertContestTaskDto> expertContestTasksDB)> AllocationTask(AzureCosmosFactory _azureCosmos, IEnumerable<ExpertPeriodSubjectDto> experts, Contest contest, HashSet<string> periodSubjectKeys, string distribute, int taskCount)
+        {
+            //检查报名,学段和科目是否匹配
+            string enrollSQL = "select value  c from c where c.pk='ActivityEnroll'";
+            var resultActivityEnroll = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<ActivityEnroll>(enrollSQL, $"ActivityEnroll-{contest.id}");
+            List<ExpertContestTaskDto> expertContestTasks = new List<ExpertContestTaskDto>();
+            foreach (ActivityEnroll enroll in resultActivityEnroll.list) {
+               
+                //如果是队长统一上传
+                if (contest.upload.captainUpload == 1 && !string.IsNullOrWhiteSpace(enroll.contest?.cipher))
+                {
+                    var team = resultActivityEnroll.list.FindAll(z => z.contest != null && z.contest.type == 1 && enroll.contest?.type == 1 && z.contest.cipher.Equals(enroll.contest.cipher));
+                    //获取队长信息
+                    var leaders = team.FindAll(z => z.contest.leader == 1);
+                    if (leaders .IsNotEmpty())
+                    {
+                        leaders = new List<ActivityEnroll>() { enroll}; 
+                    }
+                    List<IdNameCode> members = team.Select(z => new IdNameCode { id = z.id, code = z.schoolId, picture = z.tmdPicture, nickname = z.tmdName, name = z.contest?.enrollInfos?.Find(e => e.code.Equals("name")).val }).ToList();
+                    //队长的报名信息
+                    var leader = leaders?.First();
+                    string name = leader.contest?.teamName;
+                    var period = leader.contest?.enrollInfos?.Find(z => z.code.Equals("period"));
+                    var subject = leader.contest?.enrollInfos?.Find(z => z.code.Equals("subject"));
+                    string uploadId = string.Empty;
+                    if (string.IsNullOrEmpty(name))
+                    {
+                        name = $"{leader.contest?.enrollInfos?.Find(z => z.code.Equals("name"))?.val}({team.Count})";
+                    }
+                    int count = 0;
+                    int available = -1;
+
+                    var checkResult = ActivityService.CheckPeriodSubject(distribute, period, subject, periodSubjectKeys);
+                    if (checkResult.available == 0)
+                    {
+
+                        if (leader.upload != null && leader.upload.sokrates.IsNotEmpty())
+                        {
+                            count += leader.upload.sokrates.Count;
+                        }
+                        if (leader.upload != null && leader.upload.files.IsNotEmpty())
+                        {
+                            count += leader.upload.files.Count;
+                        }
+                        if (count <= 0)
+                        {
+                            uploadId = enroll.contest.cipher;
+                            available = 5;
+                        }
+                        else
+                        {
+                            uploadId = leader.upload?.uploadId;
+                            available = checkResult.available;
+                        }
+                    }
+                    else
+                    {
+                        uploadId = enroll.contest.cipher;
+                        available = checkResult.available;
+                    }
+                    ExpertContestTaskDto expertContestTask = expertContestTasks.Find(z => !string.IsNullOrWhiteSpace(z.uploadId) && z.uploadId.Equals(leader.upload));
+                    if (expertContestTask == null)
+                    {
+                        expertContestTasks.Add(new ExpertContestTaskDto
+                        {
+                            uploadId = leader.upload?.uploadId,
+                            name = $"{leader.schoolName}-{name}",
+                            uploadTypes = new List<string> { leader?.upload.type },
+                            count = count,
+                            cipher = leader.contest?.cipher,
+                            type = 1,
+                            leader = 1,
+                            tmdid = leader.id,
+                            status = -1,
+                            score = -1,
+                            //detailScore=new List<RuleConfig>()
+                            members = members,
+                            periodSubjectKey = checkResult.periodSubjectKey,
+                            period = period?.val,
+                            subject = subject?.val,
+                            available = available
+                        });
+                    }
+                    else
+                    {
+                        expertContestTask.available = available;
+                        expertContestTask.name = name;
+                        expertContestTask.count = count;
+                        expertContestTask.members = members;
+                        expertContestTask.periodSubjectKey = checkResult.periodSubjectKey;
+                    }
+                }
+                else {
+                    //如果不是队长统一上传
+                    //学段
+                    var period = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("period"));
+                    //科目
+                    var subject = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("subject"));
+                    string periodSubjectKey = string.Empty;
+                    string name = enroll.contest?.enrollInfos?.Find(z => z.code.Equals("name"))?.val;
+                    string uploadId = string.Empty;
+                    if (!string.IsNullOrEmpty(name))
+                    {
+                        name = $"({name})";
+                    }
+                    else
+                    {
+                        name = string.Empty;
+                    }
+                    int count = 0;
+                    int available = -1;
+
+                    var checkResult = ActivityService.CheckPeriodSubject(distribute, period, subject, periodSubjectKeys);
+                    if (checkResult.available == 0)
+                    {
+
+                        if (enroll.upload != null && enroll.upload.sokrates.IsNotEmpty())
+                        {
+                            count += enroll.upload.sokrates.Count;
+                        }
+                        if (enroll.upload != null && enroll.upload.files.IsNotEmpty())
+                        {
+                            count += enroll.upload.files.Count;
+                        }
+                        if (count <= 0)
+                        {
+                            available = 5;
+                            uploadId = enroll.id;
+                        }
+                        else
+                        {
+                            available = checkResult.available;
+                            uploadId = enroll.upload.uploadId;
+                        }
+                    }
+                    else
+                    {
+                        uploadId = enroll.id;
+                        available = checkResult.available;
+                    }
+                    ExpertContestTaskDto expertContestTask = expertContestTasks.Find(z => !string.IsNullOrWhiteSpace(z.uploadId) && z.uploadId.Equals(enroll.upload));
+                    if (expertContestTask == null)
+                    {
+                        expertContestTasks.Add(new ExpertContestTaskDto
+                        {
+                            uploadId = uploadId,
+                            name = $"{enroll.schoolName}-{name}",
+                            uploadTypes = new List<string> { enroll.upload?.type },
+                            count = count,
+                            cipher = enroll.contest?.cipher,
+                            type = 1,
+                            leader = 1,
+                            tmdid = enroll.id,
+                            status = -1,
+                            score = -1,
+                            periodSubjectKey = checkResult.periodSubjectKey,
+                            period = period?.val,
+                            subject = subject?.val,
+                            available = available
+                        });
+                    }
+                    else
+                    {
+                        expertContestTask.available = available;
+                        expertContestTask.name = name;
+                        expertContestTask.count = count;
+                        expertContestTask.periodSubjectKey = checkResult.periodSubjectKey;
+                    }
+                }
+            }
+            return (null, null, null);
+        }
+
+
+
+
         /// <summary>
         /// <summary>
         /// portal站的
         /// portal站的
         /// </summary>
         /// </summary>

+ 11 - 9
TEAMModelOS/Controllers/XTest/TestController.cs

@@ -110,6 +110,8 @@ namespace TEAMModelOS.Controllers
         public async Task<IActionResult> RemoveStuCourse([FromForm] IFormFile[] file, [FromForm] string periodId)
         public async Task<IActionResult> RemoveStuCourse([FromForm] IFormFile[] file, [FromForm] string periodId)
         {
         {
 
 
+            await BIStats.SetTypeAddStats(_azureCosmos.GetCosmosClient(), _dingDing, "zjaz", "Exam", 1, 0, 0, 1703663934180);
+
             //            var schoolResult = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetList<string>("select value c.id from c ", "Base");
             //            var schoolResult = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetList<string>("select value c.id from c ", "Base");
             //            if (schoolResult.list.IsNotEmpty()) 
             //            if (schoolResult.list.IsNotEmpty()) 
             //            {
             //            {
@@ -123,15 +125,15 @@ namespace TEAMModelOS.Controllers
             //                    }
             //                    }
             //                }
             //                }
             //            }
             //            }
-            string sql = "select value c from c where contains(c.code,'StuCourse-')";
-            var courseResult = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student).GetList<IdCode>(sql);
-            if (courseResult.list.IsNotEmpty())
-            {
-                foreach (var course in courseResult.list)
-                {
-                    await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student).DeleteItemStreamAsync(course.id, new PartitionKey(course.code));
-                }
-            }
+            //string sql = "select value c from c where contains(c.code,'StuCourse-')";
+            //var courseResult = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student).GetList<IdCode>(sql);
+            //if (courseResult.list.IsNotEmpty())
+            //{
+            //    foreach (var course in courseResult.list)
+            //    {
+            //        await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Student).DeleteItemStreamAsync(course.id, new PartitionKey(course.code));
+            //    }
+            //}
             return Ok();
             return Ok();
         }
         }