CrazyIter_Bin 1 ano atrás
pai
commit
8b8fee34eb

+ 9 - 0
TEAMModelOS.SDK/Models/Cosmos/School/CourseBase.cs

@@ -287,6 +287,8 @@ namespace TEAMModelOS.SDK.Models
         /// 课程名称 必填,导入课程的名称,需要与课程列表名称匹配才能导入
         /// </summary>
         public string name { get; set; }
+        public int grade { get; set; }
+        public string courseNo { get; set; }
         /// <summary>
         /// 名单类型
         /// 必填,    行政班=>class   教学班=>teach
@@ -299,10 +301,13 @@ namespace TEAMModelOS.SDK.Models
         /// 当名单类型为teach教学班时:教学班唯一名称=>高一2022物理班
         /// </summary>
         public string list { get; set; }
+        public string listName { get; set; }
         /// <summary>
         /// 教师醍摩豆ID
         /// </summary>
         public string tmdid { get; set; }
+        public string tmdName { get; set; }
+
         /// <summary>
         /// 教室编号 选题,表示网课或不确定上课教室,编号需要与现有教室列表的编号匹配,才能导入
         /// </summary>
@@ -327,6 +332,10 @@ namespace TEAMModelOS.SDK.Models
         /// </summary>
         public string assistants { get; set; }
         /// <summary>
+        /// 助教
+        /// </summary>
+        public string assistantNames { get; set; }
+        /// <summary>
         /// -1未验证的,0.验证通过的,1.课程名称无效的,2.醍摩豆ID无效的,3.教学班名称无效的,4.教室编号无效的,5.开学日期无效的,6.课程结束日期无效的,
         /// 7.排课时间格式不满足[1-n]-[1|2|3|4|5|6|7]-[A|D|C],8.没有对应的上课时间段,9.上课时间不在星期一至星期日,10.自定义模式下,需要配置对应的上课周,11.自定义模式下,上课周不在1-20周
         /// 12.班级入学年-编号不存在,13.导入的班级入学年-编号在系统中重复,请检查行政班设置,14.班级入学年-编号格式错误,15根据开学时间无法获取学期信息

+ 65 - 0
TEAMModelOS.SDK/Models/Service/SchoolService.cs

@@ -425,6 +425,71 @@ namespace TEAMModelOS.SDK
                 return semesterList;
             }
         }
+
+        /// <summary>
+        /// 获取指定学年,指定学期的开学时间。
+        /// </summary>
+        /// <param name="semesterList"></param>
+        /// <returns></returns>
+        public static string GetOpensByStudyYearAndSemester(List<Semester> semesterList,int year ,string semesterId)
+        {
+            int Year = DateTimeOffset.UtcNow.Year;
+            List<KeyValuePair<int, Semester>> pairs = new List<KeyValuePair<int, Semester>>();
+            semesterList.ForEach(se => {
+                string sm = se.month >= 10 ? $"{se.month}" : $"0{se.month}";
+                string sd = se.day >= 10 ? $"{se.day}" : $"0{se.day}";
+                int order = int.Parse($"{Year}{sm}{sd}");
+                pairs.Add(new KeyValuePair<int, Semester>(order, se));
+            });
+            var orderPairs = pairs.OrderBy(z => z.Key);
+            semesterList = orderPairs.Select(z => z.Value).ToList();
+            int startIndex = semesterList.FindIndex(z => z.start == 1);
+            if (startIndex == -1)
+            {
+                //未设置学期的情况默认9月份开始的。
+                startIndex = semesterList.FindIndex(z => z.month == 9);
+                //如果还未找到,就以排序结果为准
+                if (startIndex == -1)
+                {
+                    startIndex = 0;
+                }
+            }
+            if (startIndex > 0)
+            {
+                List<Semester> before = semesterList.Take(startIndex).ToList();
+                List<Semester> after = semesterList.Skip(startIndex).ToList();
+                semesterList = new List<Semester>();
+                semesterList.AddRange(after);
+                semesterList.AddRange(before);
+                 
+            }
+            string time = string.Empty;
+            for (int i = 0; i<semesterList.Count; i++) {
+                if (semesterList[i].id.Equals(semesterId)) {
+                    if (i==0)
+                    {
+                        time=$"{year}-{semesterList[i].month}-{semesterList[i].day}";
+                    }
+                    else {
+                        string sm1 = semesterList[i-1].month >= 10 ? $"{semesterList[i-1].month}" : $"0{semesterList[i-1].month}";
+                        string sd1 = semesterList[i-1].day >= 10 ? $"{semesterList[i-1].day}" : $"0{semesterList[i - 1].day}";
+                        int order1 = int.Parse($"{Year}{sm1}{sd1}");
+
+                        string sm2 = semesterList[i].month >= 10 ? $"{semesterList[i].month}" : $"0{semesterList[i].month}";
+                        string sd2 = semesterList[i].day >= 10 ? $"{semesterList[i].day}" : $"0{semesterList[i].day}";
+                        int order2 = int.Parse($"{Year}{sm2}{sd2}");
+                        if (order2<order1)
+                        {
+                            time=$"{(year+1)}-{semesterList[i].month}-{semesterList[i].day}";
+                        }
+                        else {
+                            time=$"{year}-{semesterList[i].month}-{semesterList[i].day}";
+                        }
+                    }
+                }
+            }
+            return time;
+        }
         /// <summary>
         /// 校验
         /// </summary>

+ 31 - 11
TEAMModelOS/Controllers/Both/CourseBaseController.cs

@@ -27,6 +27,7 @@ using FastJSON;
 using OpenXmlPowerTools;
 using DocumentFormat.OpenXml.Drawing.Spreadsheet;
 using System.Text.RegularExpressions;
+using System.Security.Claims;
 
 namespace TEAMModelOS.Controllers.Both
 {
@@ -137,7 +138,8 @@ namespace TEAMModelOS.Controllers.Both
                             }
                             School schoolBase = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>(school, new PartitionKey("Base"));
                             var period = schoolBase.period.Find(x => x.id.Equals($"{_periodId}"));
-                            if (period != null) {
+                            if (period != null)
+                            {
                                 foreach (var item in courseBases)
                                 {
                                     item.pk = "CourseBase";
@@ -162,7 +164,8 @@ namespace TEAMModelOS.Controllers.Both
                                             return Ok(new { code = 1, msg = "科目不存在", course = item });
                                         }
                                     }
-                                    else {
+                                    else
+                                    {
                                         return Ok(new { code = 1, msg = "科目不存在", course = item });
                                     }
                                     if (!string.IsNullOrWhiteSpace(item.major?.id))
@@ -177,7 +180,7 @@ namespace TEAMModelOS.Controllers.Both
                                             return Ok(new { code = 2, msg = "专业不存在", course = item });
                                         }
                                     }
-                                    var dbcoursebase = courseBasesDB.Find(x => x.name.Equals(item.name)   && x.grade == item.grade );
+                                    var dbcoursebase = courseBasesDB.Find(x => x.name.Equals(item.name)   && x.grade == item.grade);
                                     if (dbcoursebase != null)
                                     {
                                         item.id = dbcoursebase.id;
@@ -187,9 +190,11 @@ namespace TEAMModelOS.Controllers.Both
                                         item.no = string.IsNullOrWhiteSpace(item.no) ? dbcoursebase.no : item.no;
                                         item.grade =item.grade<0 ? dbcoursebase.grade : item.grade;
                                     }
-                                    await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, tbname).UpsertItemAsync(item,new PartitionKey(item.code));
+                                    await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, tbname).UpsertItemAsync(item, new PartitionKey(item.code));
                                 }
                             }
+                            else { return Ok(new { code = 3, msg = "学段不存在", }); 
+                            }
                             return Ok(new { course = courseBases });
                         }
                     case bool when $"{grant_type}".Equals("upsert", StringComparison.OrdinalIgnoreCase) :
@@ -1357,9 +1362,13 @@ namespace TEAMModelOS.Controllers.Both
                             {
                                 return BadRequest();
                             }
+                            School schoolBase = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>(school, new PartitionKey("Base"));
+                            var period = schoolBase.period.Find(x => x.id.Equals($"{_periodId}"));
+                            string date =  SchoolService.GetOpensByStudyYearAndSemester(period.semesters, int.Parse($"{_year}"),$"{_semesterId}");
                             string sql = $"select value c from c where c.year={_year} and c.semesterId='{_semesterId}'";
                             string code = $"CourseTask-{school}";
                             var  result = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).GetList<CourseTask>(sql, code);
+                            List<CourseCheckImport> imports = new List<CourseCheckImport>();
                             if (result.list.IsNotEmpty()) {
                                 string courseIdSQL = $"select value c from c where c.id in({string.Join(",",result.list.Select(z=>$"'{z.courseId}'"))})";
                                 List<CourseBase> courseBases = new List<CourseBase>();
@@ -1391,7 +1400,6 @@ namespace TEAMModelOS.Controllers.Both
                                         groupLists.AddRange(resultGroupList.list);
                                     }
                                 }
-                              
                                 List<string> tmdids = new List<string>();
                                 if (teacherIds!=null  && teacherIds.Count()>0) {
                                     tmdids.AddRange(teacherIds);
@@ -1409,31 +1417,43 @@ namespace TEAMModelOS.Controllers.Both
                                         teachers.AddRange(resultTmdid.list);
                                     }
                                 }
-                                List<CourseCheckImport> imports= new List<CourseCheckImport>();
                                 foreach (var item in result.list) {
                                     var courseBase=  courseBases.Find(z => z.id.Equals(item.courseId));
                                     item.schedules.ForEach(z => {
-                                        
-                                        CourseCheckImport courseCheckImport = new CourseCheckImport {name=courseBase?.name };
-                                        if (z.type.Equals("class")) {
+                                        CourseCheckImport courseCheckImport = new CourseCheckImport {name=courseBase?.name,stime=date ,grade=courseBase.grade,courseNo=courseBase.no};
+                                        if (z.type.Equals("class") &&!string.IsNullOrWhiteSpace(z.groupId)) {
                                           var clazz=   classes.Find(x => x.id.Equals(z.groupId));
                                             courseCheckImport.type=z.type;
                                             courseCheckImport.list=$"{clazz.year}-{clazz.no}";
+                                            courseCheckImport.listName=clazz.name;
                                         }
-                                        if (z.type.Equals("teach"))
+                                        if (z.type.Equals("teach")&&!string.IsNullOrWhiteSpace(z.groupId))
                                         {
                                             var groupList = groupLists.Find(x => x.id.Equals(z.groupId));
                                             courseCheckImport.type=z.type;
                                             courseCheckImport.list=$"{groupList.name}";
+                                            courseCheckImport.listName=groupList.name;
+                                        }
+                                        if (!string.IsNullOrWhiteSpace(z.teacherId)) {
+                                            var teacher=  teachers.Find(x => x.id.Equals(z.teacherId));
+                                            courseCheckImport.tmdid=teacher.id;
+                                            courseCheckImport.tmdName=teacher?.name;
+                                        }
+                                        if (z.assistants!=null  && z.assistants.Count>0) {
+                                            var teacher_assistants = teachers.FindAll(x =>z.assistants.Contains(x.id));
+                                            courseCheckImport.assistants=string.Join(",", z.assistants);
+                                            courseCheckImport.assistantNames=string.Join(",", teacher_assistants.Select(x => x.name));
                                         }
+                                        imports.Add(courseCheckImport);
                                     });
                                 }
                             }
-                            break;
+                            return Ok(new { export=imports,code=200 });
                         }
                 }
             } catch (Exception ex) {
                await _dingDing.SendBotMsg($"{_option.Location},课程处理异常,{ex.Message}\n{ex.StackTrace}", GroupNames.成都开发測試群組);
+                return Ok(new { code = 500, msg = ex.Message });
             }
             return Ok();
         }