CrazyIter_Bin 2 年之前
父节点
当前提交
29b71819bb
共有 2 个文件被更改,包括 169 次插入33 次删除
  1. 77 0
      TEAMModelOS.SDK/Models/Cosmos/School/CourseBase.cs
  2. 92 33
      TEAMModelOS/Controllers/Both/CourseBaseController.cs

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

@@ -7,6 +7,35 @@ using System.Threading.Tasks;
 
 namespace TEAMModelOS.SDK.Models 
 {
+    /*
+     //课程基础信息
+    "courseBase": {
+        "id": " uuid1",
+        "code": "CourseBase-hbcn",
+        "pk": "CourseBase",
+        "name": "语文课",
+        "subject": {
+            "id": "科目id1",
+            "name": "高数"
+        },
+        "period": {
+            "id": "学段id1",
+            "name": "大学"
+        },
+        "major": { //专业信息在K12可不设置。
+            "id": "专业id1",
+            "name": "软件工程"
+        },
+        "scope": "school",
+        "desc": "软件工程专业-高等数学",
+        "no": "A101",
+        "creatorId": "1595321354",
+        "school": "hbcn",
+        "color": "red", //用于标记课程表的排课颜色
+        "gradeId": 1, //年级
+        "status": 1
+    }
+     */
     /// <summary>
     /// 课程基础信息
     /// </summary>
@@ -49,7 +78,54 @@ namespace TEAMModelOS.SDK.Models
         /// 颜色,课表标记颜色
         /// </summary>
         public string color { get; set; }
+        /// <summary>
+        /// 年级
+        /// </summary>
+        public int gradeId { get; set; } = -1;
+
+        /// <summary>
+        /// 状态
+        /// </summary>
+
+        public int status { get; set; } = 1;
+    }
+    /*
+     //课程任务
+    "courseTask": {
+        //年份+学期,2022-2023第一学期
+        "id": " 2022-semesterId",
+        "code": "CourseTask-hbcn-courseIduuid1",
+        "pk": "CourseTask",
+        "expire": 1577808000000,//默认-1 永不过期,学校的课程则自动根据学期的时间进行设置。
+        "courseId": "courseIduuid1",//课程id
+        "year": 2022,//课程所属年份
+        "semesterId": "学期id",
+        "weekCount": 20,//课程持续多少周,-1未设定
+        "timeCount": 10,//课程一周有多少堂课,-1未设定
+        "schedules": [
+            {
+                "roomId": "物理教室id",
+                "groupId": "名单id",
+                "type": "名单类型-class行政班,teach教学班",
+                "teacherId": "1595321354",
+                //times可不设置,不设置也不影响HiTeach使用,只是不能展示为课表模式,只能是课程任务列表模式。
+                "times": [
+                    {
+                        "id": "学校作息时间id",
+                        "week": "MON",//星期几
+                        "mode": "all全部,single单周,double双周,custom自定义",
+                        "index": [
+                            1,
+                            5,
+                            8,
+                            15
+                        ]
+                    }
+                ]
+            }
+        ]
     }
+     */
     /// <summary>
     /// 课程任务
     /// </summary>
@@ -136,4 +212,5 @@ namespace TEAMModelOS.SDK.Models
         public string id { get; set; }
         public string name { get; set; }
     }
+    
 }

+ 92 - 33
TEAMModelOS/Controllers/Both/CourseBaseController.cs

@@ -77,48 +77,107 @@ namespace TEAMModelOS.Controllers.Both
                 switch (true)
                 {
                     case bool when $"{option}".Equals("insert", StringComparison.OrdinalIgnoreCase) || $"{option}".Equals("update", StringComparison.OrdinalIgnoreCase):
-                        if (!request.TryGetProperty("course", out JsonElement _course)) {
-                            return BadRequest();
-                        }
-                        CourseBase courseBase = _course.ToObject<CourseBase>();
-                        courseBase.pk = "CourseBase";
-                        if (string.IsNullOrWhiteSpace(courseBase.id))
-                        {
-                            courseBase.id = Guid.NewGuid().ToString();
-                        }
-                        string tbname = "";
-                        if (courseBase.scope.Equals("school", StringComparison.OrdinalIgnoreCase))
-                        {
-                            tbname = Constant.School;
-                            courseBase.school = school;
-                            courseBase.creatorId = id;
-                            courseBase.code = $"CourseBase-{school}";
-                        }
-                        else
                         {
-                            tbname = Constant.Teacher;
-                            courseBase.creatorId = id;
-                            courseBase.code = $"CourseBase-{id}";
+                            if (!request.TryGetProperty("course", out JsonElement _course))
+                            {
+                                return BadRequest();
+                            }
+                            CourseBase courseBase = _course.ToObject<CourseBase>();
+                            courseBase.pk = "CourseBase";
+                            if (string.IsNullOrWhiteSpace(courseBase.id))
+                            {
+                                courseBase.id = Guid.NewGuid().ToString();
+                            }
+                            string tbname = "";
+                            if (courseBase.scope.Equals("school", StringComparison.OrdinalIgnoreCase))
+                            {
+                                tbname = Constant.School;
+                                courseBase.school = school;
+                                courseBase.creatorId = id;
+                                courseBase.code = $"CourseBase-{school}";
+                            }
+                            else
+                            {
+                                tbname = Constant.Teacher;
+                                courseBase.creatorId = id;
+                                courseBase.code = $"CourseBase-{id}";
+                            }
+                            var response = await client.GetContainer(Constant.TEAMModelOS, tbname).ReadItemStreamAsync(courseBase.id, new PartitionKey(courseBase.code));
+                            if (response.Status == 200)
+                            {
+                                await client.GetContainer(Constant.TEAMModelOS, tbname).ReplaceItemAsync(courseBase, courseBase.id, new PartitionKey(courseBase.code));
+                            }
+                            else
+                            {
+                                await client.GetContainer(Constant.TEAMModelOS, tbname).CreateItemAsync(courseBase, new PartitionKey(courseBase.code));
+                            }
+                            return Ok(new { course = courseBase });
                         }
-                        var response = await client.GetContainer(Constant.TEAMModelOS, tbname).ReadItemStreamAsync(courseBase.id, new PartitionKey(courseBase.code));
-                        if (response.Status == 200)
+                    case bool when $"{option}".Equals("import", StringComparison.OrdinalIgnoreCase) && $"{scope}".Equals("school", StringComparison.OrdinalIgnoreCase):
                         {
-                            await client.GetContainer(Constant.TEAMModelOS, tbname).ReplaceItemAsync(courseBase,courseBase.id, new PartitionKey(courseBase.code));
-                        }
-                        else {
-                            await client.GetContainer(Constant.TEAMModelOS, tbname).CreateItemAsync(courseBase, new PartitionKey(courseBase.code));
+                            if (!request.TryGetProperty("courseBaseImports", out JsonElement _courseBaseImports)) return BadRequest();
+                            List<CourseBaseImport> courseBaseImports = _courseBaseImports.ToObject<List<CourseBaseImport>>();
+                            foreach (var courseBaseImport in courseBaseImports)
+                            {
+                                courseBaseImport.courseBase.pk = "CourseBase";
+                                courseBaseImport.courseBase.scope = "school";
+                                courseBaseImport.courseBase.school = school;
+                                courseBaseImport.courseBase.creatorId = id;
+                                courseBaseImport.courseBase.code = $"CourseBase-{school}";
+                                StringBuilder sql = new StringBuilder(" select top 1  value c from c ");
+                                if (!string.IsNullOrWhiteSpace(courseBaseImport.courseBase.name)
+                                    && !string.IsNullOrWhiteSpace(courseBaseImport.courseBase?.period?.id)
+                                    && !string.IsNullOrWhiteSpace(courseBaseImport.courseBase?.subject?.id))
+                                {
+                                    sql.Append($" where c.name ='{courseBaseImport.courseBase.name}' and c.period.id='{courseBaseImport.courseBase.period.id}' and c.subject.id='{courseBaseImport.courseBase.subject.id}' ");
+                                    if (!string.IsNullOrWhiteSpace(courseBaseImport.courseBase?.major?.id))
+                                    {
+                                        sql.Append($" and c.major.id='{courseBaseImport.courseBase.major.id}'");
+                                    }
+
+                                    CourseBase courseBaseDb = null;
+                                    await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School)
+                                    .GetItemQueryIterator<CourseBase>(queryText: sql.ToString(), requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey(courseBaseImport.courseBase.code) }))
+                                    {
+                                        courseBaseDb = item;
+                                        break;
+                                    }
+                                    if (courseBaseDb != null)
+                                    {
+                                        if (!string.IsNullOrWhiteSpace(courseBaseImport.courseBase?.desc)) {
+                                            courseBaseDb.desc=courseBaseImport.courseBase.desc;
+                                        }
+                                        if (!string.IsNullOrWhiteSpace(courseBaseImport.courseBase?.color))
+                                        {
+                                            courseBaseDb.color = courseBaseImport.courseBase.color;
+                                        }
+                                        if (!string.IsNullOrWhiteSpace(courseBaseImport.courseBase?.no))
+                                        {
+                                            courseBaseDb.no = courseBaseImport.courseBase.no;
+                                        }
+                                        if (courseBaseImport.courseBase?.gradeId != -1) {
+                                            courseBaseDb.gradeId = courseBaseImport.courseBase.gradeId;
+                                        }
+                                        courseBaseDb = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReplaceItemAsync(courseBaseDb, courseBaseDb.id, new PartitionKey(courseBaseDb.code));
+                                    }
+                                    else
+                                    {
+                                        courseBaseImport.courseBase.id= Guid.NewGuid().ToString();
+                                        courseBaseDb = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).CreateItemAsync(courseBaseImport.courseBase, new PartitionKey(courseBaseImport.courseBase.code));
+                                    }
+                                }
+                            }
+                            break;
                         }
-                        return Ok(new { course = courseBase });
-                    case bool when $"{option}".Equals("import", StringComparison.OrdinalIgnoreCase) && $"{scope}".Equals("school", StringComparison.OrdinalIgnoreCase):
-                        if (!request.TryGetProperty("courses", out JsonElement _courses)) return BadRequest();
-                        List<CourseBase> courses = _courses.ToObject<List<CourseBase>>();
-                        break;
+                        
                 }
             } catch (Exception ex) { 
             }
             return Ok();
         }
     }
-    public class CourseBaseImport { 
+    public class CourseBaseImport {
+        public CourseBase courseBase { get; set; } = new CourseBase();
+        public List<CourseTask> courseTasks { get; set; } = new List<CourseTask>();
     }
 }