CrazyIter_Bin 1 سال پیش
والد
کامیت
9a1c303ca7

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 1791 - 0
TEAMModelOS.SDK/Helper/Common/JsonHelper/JsonParser.cs


+ 1 - 1
TEAMModelOS.SDK/Models/Cosmos/Common/Activity.cs

@@ -707,7 +707,7 @@ namespace TEAMModelOS.SDK.Models
         public string expertId { get; set; }
         public string periodSubjectKey { get; set; }
         /// <summary>
-        /// 0,默认未分配,1已经匹配,2学段未选择,3学科未选择,4 学段或学科未选择,5未上传,6学科或学段不匹配,7未匹配到符合的专家
+        /// 0,默认未分配,1已经匹配,2学段未选择,3学科未选择,4 学段或学科未选择,5未上传,6学科或学段不匹配,7未匹配到符合的专家,8分配次数不足
         /// </summary>
         public int available { get; set; }
         /// <summary>

+ 24 - 7
TEAMModelOS.SDK/Models/Service/Common/ActivityService.cs

@@ -91,13 +91,13 @@ namespace TEAMModelOS.SDK
                     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 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})";
+                        name = $"{leader?.contest?.enrollInfos?.Find(z => z.code.Equals("name"))?.val}({team.Count})";
                     }
                     int count = 0;
                     int available = -1;
@@ -105,11 +105,11 @@ namespace TEAMModelOS.SDK
                     if (checkResult.available == 0)
                     {
 
-                        if (leader.upload != null && leader.upload.sokrates.IsNotEmpty())
+                        if (leader?.upload != null && leader.upload.sokrates.IsNotEmpty())
                         {
                             count += leader.upload.sokrates.Count;
                         }
-                        if (leader.upload != null && leader.upload.files.IsNotEmpty())
+                        if (leader?.upload != null && leader.upload.files.IsNotEmpty())
                         {
                             count += leader.upload.files.Count;
                         }
@@ -120,7 +120,7 @@ namespace TEAMModelOS.SDK
                         }
                         else
                         {
-                            uploadId = leader.upload?.uploadId;
+                            uploadId = leader?.upload?.uploadId;
                             available = checkResult.available;
                         }
                     }
@@ -247,6 +247,23 @@ namespace TEAMModelOS.SDK
             if (invalids.IsNotEmpty()) {
                 invalids.AddRange(data.assignmentsInvalid);
             }
+            List<ExpertContestTaskDto> okTask = new List<ExpertContestTaskDto>();
+            okTask.AddRange(data.assignmentsAdd);
+            okTask.AddRange(worksDB);
+            var groups= okTask.GroupBy(z => z.uploadId).Select(x => new { key = x.Key, list = x.ToList() });
+            foreach (var item in groups) {
+                if (item.list.Count()<taskCount) {
+
+                    ExpertContestTaskDto taskDto=  item.list.First().ToJsonString().ToObject<ExpertContestTaskDto>();
+                    taskDto.expertName=null;
+                    taskDto.expertId=null;
+                    taskDto.expertPicture=null;
+                    taskDto.expertTmdname=null;
+                    //,8分配次数不足
+                    taskDto.available=8;
+                    invalids.Add(taskDto);
+                }
+            }
             return (data.assignmentsAdd, invalids, worksDB);
         }
         public static (int available, string periodSubjectKey) CheckPeriodSubject(string distribute , EnrollInfo period, EnrollInfo subject, HashSet<string> periodSubjectKeys) {

+ 183 - 5
TEAMModelOS/Controllers/Common/ActivityController.cs

@@ -2118,22 +2118,200 @@ namespace TEAMModelOS.Controllers
                             if (!request.TryGetProperty("activityId", out JsonElement _activityId)) return BadRequest();
                             if (!request.TryGetProperty("uploadId", out JsonElement _uploadId)) return BadRequest();
                             if (!request.TryGetProperty("expertId", out JsonElement _expertId)) return BadRequest();
-                         //   if (!request.TryGetProperty("expertId", out JsonElement _expertId)) return BadRequest();
+                            request.TryGetProperty("expertIdOld", out JsonElement _expertIdOld);
                             string sql = $"select value c from c where c.upload.uploadId='{_uploadId}' and c.pk='ActivityEnroll'";
                             var result =  await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<ActivityEnroll>(sql, $"ActivityEnroll-{_activityId}");
                             if (result.list.IsNotEmpty())
                             {
+                                ActivityExpertTask expertTask = null;
+
+                                ExpertContestTask contestTask = new ExpertContestTask
+                                {
+                                    uploadId=_uploadId.GetString(),
+
+                                };
+                                string name = string.Empty;
+                                int count = 0;
+                                if (result.list.Count>1)
+                                {
+                                    var leaders = result.list.FindAll(z => z.contest.leader == 1);
+                                    var leader = leaders?.First();
+                                    if (leader!=null)
+                                    {
+                                        name = leader?.contest?.teamName;
+                                        if (string.IsNullOrEmpty(name))
+                                        {
+                                            name = $"{leader?.contest?.enrollInfos?.Find(z => z.code.Equals("name"))?.val}({result.list.Count})";
+                                        }
+                                        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;
+                                        }
+                                        List<IdNameCode> members = result.list.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 period = leader?.contest?.enrollInfos?.Find(z => z.code.Equals("period"));
+                                        var subject = leader?.contest?.enrollInfos?.Find(z => z.code.Equals("subject"));
+                                        contestTask.name= $"{leader?.schoolName}-{name}";
+                                        contestTask.uploadTypes=new List<string> { leader.upload?.type };
+                                        contestTask.count=count;
+                                        contestTask.cipher=leader.contest?.cipher;
+                                        contestTask.type=leader.contest.type;
+                                        contestTask.leader=leader.contest.leader;
+                                        contestTask.members= members;
+                                        contestTask.tmdid=leader.id;
+                                        contestTask.period=period?.val;
+                                        contestTask.subject=subject?.val;
+
+                                    }
+                                    else
+                                    {
+                                        return Ok(new { code = 3, msg = "该队伍没有队长!" });
+                                    }
+                                }
+                                else if (result.list.Count==1)
+                                {
+                                    var leader = result.list[0];
+                                    name = leader?.contest?.enrollInfos?.Find(z => z.code.Equals("name"))?.val;
+                                    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;
+                                    }
+                                    var period = leader?.contest?.enrollInfos?.Find(z => z.code.Equals("period"));
+                                    var subject = leader?.contest?.enrollInfos?.Find(z => z.code.Equals("subject"));
+                                    contestTask.name= $"{leader?.schoolName}-{name}";
+                                    contestTask.uploadTypes=new List<string> { leader.upload?.type };
+                                    contestTask.count=count;
+                                    contestTask.type=leader.contest.type;
+                                    contestTask.tmdid=leader.id;
+                                    contestTask.period=period?.val;
+                                    contestTask.subject=subject?.val;
+                                }
+
                                 ActivityExpert activityExpert = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).ReadItemAsync<ActivityExpert>(_activityId.GetString(), new PartitionKey("ActivityExpert"));
                                 Expert expert=  activityExpert.experts.Find(z => !string.IsNullOrWhiteSpace(z.id)  &&   z.id.Equals(_expertId.GetString()));
-                                if (expert!=null) { 
-                                    
-                                }
+                                if (expert!=null) {
+                                    //作品是否有分配过
+                                    string taskSQL = $"select value c from c  join b in c.contestTasks where b.uploadId='{_uploadId}' and c.pk='ActivityExpertTask' " ;
+                                    var resultTask = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<ActivityExpertTask>(taskSQL, $"ActivityExpertTask-{_activityId}");
+                                    if (resultTask.list.IsNotEmpty())
+                                    {
+                                        if (!string.IsNullOrWhiteSpace($"{_expertIdOld}")) {
 
+                                            if (!expert.id.Equals(_expertIdOld.GetString()))
+                                            {
+                                                //从旧的分配中移除
+                                                var oldTaskExpert = resultTask.list.Find(z => z.id.Equals(_expertIdOld.GetString()));
+                                                if (oldTaskExpert!=null)
+                                                {
+                                                    var changeCount = oldTaskExpert.contestTasks.RemoveAll(z => z.uploadId.Equals(_uploadId.GetString()));
+                                                    if (changeCount>0)
+                                                    {
+                                                        await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(oldTaskExpert, new PartitionKey(oldTaskExpert.code));
+                                                    }
+                                                }
+                                                else
+                                                {
+                                                    return Ok(new { code = 2, msg = "未找到该作品已经分配的专家!" });
+                                                }
+                                            }
+                                            else {
+                                                return Ok(new { code = 4, msg = "作品变更评审专家,调整后的专家不能与已分配的专家相同!" });
+                                            }
+                                        }
+                                        // 除去被调整的专家(oldExpert),(resultTask)可能还有别的专家已分配的,但是不影响该作品继续被分配到新的专家, 可以理解为,作品分配次数+1,
+                                        //作品未被分配的情况、
+                                        string expTaskSQL = $"select value c from c  where c.id='{expert.id}' and c.pk='ActivityExpertTask' ";
+                                        var resultExpTask = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<ActivityExpertTask>(expTaskSQL, $"ActivityExpertTask-{_activityId}");
+                                      
+                                        if (resultExpTask.list.IsNotEmpty())
+                                        {
+                                            var task = resultExpTask.list[0].contestTasks.Find(z => z.uploadId.Equals(_uploadId.GetString()));
+                                            if (task!=null)
+                                            {
+                                                task=contestTask;
+                                            }
+                                            else
+                                            {
+                                                resultExpTask.list[0].contestTasks.Add(contestTask);
+                                            }
+                                            expertTask=resultExpTask.list[0];
+                                        }
+                                        else
+                                        {
+                                            //专家没有任何被分配的作品
+                                             expertTask = new ActivityExpertTask()
+                                            {
+                                                id= expert.id,
+                                                code=$"ActivityExpertTask-{_activityId}",
+                                                pk="ActivityExpertTask",
+                                                ttl=-1,
+                                                name=expert.iname,
+                                                tmdname=expert.name,
+                                                picture=expert.picture,
+                                                contestTasks= new List<ExpertContestTask> { contestTask }
+                                            };
+                                        }
+                                        if (expertTask!=null) {
+                                            await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(expertTask, new PartitionKey(expertTask.code));
+                                        }
+                                    }
+                                    else {
+                                        //旧专家,和作品没有匹配的情况,未分配过,不能调整。
+                                        if (!string.IsNullOrWhiteSpace($"{_expertIdOld}"))
+                                        {
+                                            return Ok(new { code = 2, msg = "未找到该作品已经分配的专家!" });
+                                        }
+                                       
+                                        //作品未被分配的情况、
+                                        string expTaskSQL = $"select value c from c  where c.id='{expert.id}' and c.pk='ActivityExpertTask' ";
+                                        var resultExpTask = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).GetList<ActivityExpertTask>(expTaskSQL, $"ActivityExpertTask-{_activityId}");
+                                      
+                                        if (resultExpTask.list.IsNotEmpty())
+                                        {
+                                            var task = resultExpTask.list[0].contestTasks.Find(z => z.uploadId.Equals(_uploadId.GetString()));
+                                            if (task!=null)
+                                            {
+                                                task=contestTask;
+                                            }
+                                            else {
+                                                resultExpTask.list[0].contestTasks.Add(contestTask);
+                                            }
+                                            expertTask=resultExpTask.list[0];
+                                        }
+                                        else {
+                                            //专家没有任何被分配的作品
+
+                                            expertTask = new ActivityExpertTask() 
+                                            {
+                                                id= expert.id,
+                                                code=$"ActivityExpertTask-{_activityId}",
+                                                pk="ActivityExpertTask",
+                                                ttl=-1,
+                                                name=expert.iname,
+                                                tmdname=expert.name,
+                                                picture=expert.picture,
+                                                contestTasks= new List<ExpertContestTask> { contestTask }
+                                            };
+                                        }
+                                        if (expertTask!=null)
+                                        {
+                                            await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher).UpsertItemAsync(expertTask, new PartitionKey(expertTask.code));
+                                        }
+                                    }   
+                                }
+                                return Ok(new { code = 200, expertTask });
                             }
                             else {
                                 return Ok(new { code=1,msg ="作品不存在!"});
                             }
-                            break;
+                          
                         }
                 }
             }

+ 3 - 0
TEAMModelOS/Controllers/XTest/FixLessonRecordController.cs

@@ -40,6 +40,7 @@ using DocumentFormat.OpenXml.Bibliography;
 using System.Formats.Asn1;
 using Microsoft.Azure.SignalR.Protocol;
 using System.Collections;
+using System.Text.Json.Nodes;
 
 namespace TEAMModelOS.Controllers.XTest
 {
@@ -78,6 +79,8 @@ namespace TEAMModelOS.Controllers.XTest
         [HttpPost("fix-overall-education")]
         public async Task<IActionResult> FixOverallEducation(JsonElement json)
         {
+
+           
             var client = _azureCosmos.GetCosmosClient();
             string sql = " SELECT distinct value(c)  FROM c  where c.pk='OverallEducation' and contains(c.code,'OverallEducation-ydzt-') ";
             List<OverallEducation> overallEducations = new List<OverallEducation>();

+ 23 - 2
TEAMModelOS/Controllers/XTest/TestController.cs

@@ -12,9 +12,12 @@ using DocumentFormat.OpenXml.Drawing.Wordprocessing;
 using DocumentFormat.OpenXml.Office2010.Excel;
 using DocumentFormat.OpenXml.Office2016.Excel;
 using DocumentFormat.OpenXml.Presentation;
+using DocumentFormat.OpenXml.Spreadsheet;
 using DocumentFormat.OpenXml.Wordprocessing;
+using FastJSON;
 using HTEXLib.COMM.Helpers;
 using HTEXLib.Helpers.ShapeHelpers;
+using Json.Path;
 using MathNet.Numerics.Distributions;
 using Microsoft.AspNetCore.Hosting;
 using Microsoft.AspNetCore.Http;
@@ -38,6 +41,7 @@ using System.Runtime.Intrinsics.X86;
 using System.Security.Policy;
 using System.Text;
 using System.Text.Json;
+using System.Text.Json.Nodes;
 using System.Text.RegularExpressions;
 using System.Threading.Tasks;
 using System.Web;
@@ -45,11 +49,13 @@ using TEAMModelOS.Controllers.Analysis;
 using TEAMModelOS.Controllers.Core;
 using TEAMModelOS.Controllers.Third.LePei;
 using TEAMModelOS.Filter;
+using TEAMModelOS.Helper.Common.FileHelper;
 using TEAMModelOS.Models;
 using TEAMModelOS.SDK;
 using TEAMModelOS.SDK.DI;
 using TEAMModelOS.SDK.Extension;
 using TEAMModelOS.SDK.Helper.Common.DateTimeHelper;
+using TEAMModelOS.SDK.Helper.Common.JsonHelper.JsonPath;
 using TEAMModelOS.SDK.Models;
 using TEAMModelOS.SDK.Models.Cosmos.Common;
 using TEAMModelOS.SDK.Models.Cosmos.OpenEntity;
@@ -99,6 +105,10 @@ namespace TEAMModelOS.Controllers
             _httpTrigger = httpTrigger;
             _azureService=azureService;
         }
+
+
+
+
         /// <summary>
         /// 移除已经废弃的StuCourse 数据
         /// </summary>
@@ -107,10 +117,21 @@ namespace TEAMModelOS.Controllers
         /// <returns></returns>
         [HttpPost("remove-stucourse")]
         [RequestSizeLimit(102_400_000_00)] //最大10000m左右
-        public async Task<IActionResult> RemoveStuCourse([FromForm] IFormFile[] file, [FromForm] string periodId)
+        public async Task<IActionResult> RemoveStuCourse(JsonElement json)
         {
 
-            await BIStats.SetTypeAddStats(_azureCosmos.GetCosmosClient(), _dingDing, "zjaz", "Exam", 1, 0, 0, 1703663934180);
+            JsonNode jsonNode = JsonObject.Parse(json.ToString());
+            var path= JsonPath.Parse("$.groupLists[*].groupList.members[*]");
+            var d = path.Evaluate(jsonNode);
+            JsonPathContext context = new JsonPathContext
+            { ValueSystem = new JsonApiValueSystem() };
+            //解析试卷作答详情
+            var datas = context.SelectNodes(json,
+            "$.groupLists[*].groupList.members[*]").Select(node => node.Value).ToList();
+        
+
+            return Ok(datas);
+
 
             //            var schoolResult = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetList<string>("select value c.id from c ", "Base");
             //            if (schoolResult.list.IsNotEmpty()) 

+ 1 - 0
TEAMModelOS/TEAMModelOS.csproj

@@ -7,6 +7,7 @@
     <PackageReference Include="DotNetZip" Version="1.16.0" />
 	<PackageReference Include="DinkToPdf" Version="1.0.8" />
 	<PackageReference Include="EPPlus" Version="6.2.6" />
+	<PackageReference Include="JsonPath.Net" Version="0.7.1" />
     <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
 	<PackageReference Include="SKIT.FlurlHttpClient.Wechat.TenpayV3" Version="2.20.0" />
 	<PackageReference Include="System.Security.Cryptography.Algorithms" Version="4.3.1" />