EdenX 1 rok temu
rodzic
commit
68304a1f68

+ 1 - 1
TEAMModelOS.FunctionV4/CosmosDB/TriggerArt.cs

@@ -374,7 +374,7 @@ namespace TEAMModelOS.FunctionV4.CosmosDB
                                 };
                                 var period = scInfo.period.Where(x => x.id.Equals(art.period.id)).FirstOrDefault();
                                 //获取学期信息
-                                var (currSemester, studyYear, date, nextSemester) = SchoolService.GetSemester(period, art.startTime);
+                                var (currSemester, studyYear, currSemesterDate, date, nextSemester) = SchoolService.GetSemester(period, art.startTime);
                                 //总分的占比情况
 
                                 foreach (var rs in studentArtResults)

+ 1 - 1
TEAMModelOS.FunctionV4/CosmosDB/TriggerExam.cs

@@ -458,7 +458,7 @@ namespace TEAMModelOS.FunctionV4
                                     var period = sc.period.Where(x => x.id.Equals(info.period.id)).FirstOrDefault();
                                     //获取学期信息
                                     if (null != period && persent >= 60) {
-                                        var (currSemester, studyYear, date, nextSemester) = SchoolService.GetSemester(period, info.startTime);
+                                        var (currSemester, studyYear, currSemesterDate, date, nextSemester) = SchoolService.GetSemester(period, info.startTime);
                                         //获取学生信息
                                         (List<RMember> rmembers, List<RGroupList> groups) = await GroupListService.GetMemberByListids(_coreAPIHttpService, client, _dingDing, info.classes, info.school);
                                         foreach (var member in rmembers)

+ 1 - 1
TEAMModelOS.SDK/Models/Service/LessonService.cs

@@ -219,7 +219,7 @@ namespace TEAMModelOS.SDK.Models.Service
                     }
                 }
               
-                (Semester currSemester, int studyYear, DateTimeOffset date, DateTimeOffset nextSemester) dataSemester = new(null,-1, DateTimeOffset.UtcNow, DateTimeOffset.UtcNow) ;
+                (Semester currSemester, int studyYear, DateTimeOffset currSemesterDate, DateTimeOffset date, DateTimeOffset nextSemester) dataSemester = new(null,-1, DateTimeOffset.UtcNow, DateTimeOffset.UtcNow, DateTimeOffset.UtcNow) ;
                 if (!string.IsNullOrWhiteSpace(school)) {
                      schoolBase = await client.GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>(school, new PartitionKey("Base"));
                      period = schoolBase.period.Find(x => x.id.Equals($"{lessonRecord.periodId}"));

+ 121 - 6
TEAMModelOS.SDK/Models/Service/SchoolService.cs

@@ -288,12 +288,117 @@ namespace TEAMModelOS.SDK
             return (yearGrades, yearGrades.Select(z=>z.Value).ToHashSet());
         }
 
+        public static (Semester currSemester, int studyYear, DateTimeOffset date, DateTimeOffset nextSemester) GetSemesterNew(Period period, long timestamp = 0, string time = null)
+        {
+            //string time = "2023/05-11";
+            DateTimeOffset date = DateTimeOffset.Now;
+            if (timestamp > 1000000000)
+            {
+                //毫秒级
+                if (timestamp > 1000000000000)
+                {
+                    date = DateTimeOffset.FromUnixTimeMilliseconds(timestamp);
+                }
+                //秒级
+                else
+                {
+                    date = DateTimeOffset.FromUnixTimeSeconds(timestamp);
+                }
+            }
+            if (!(!string.IsNullOrWhiteSpace(time) && DateTimeOffset.TryParse(time, out date)))
+            {
+                date = DateTimeOffset.UtcNow;
+            }
+
+
+            int Day = date.Day;
+            int Month = date.Month;
+            int Year = date.Year;
+            string sm = "09";
+            string sd = "01";
+            int start = int.Parse($"{Year}{sm}{sd}");
+            var se = period.semesters.Find(x => x.start == 1);
+            if (se == null)
+            {
+                se = period.semesters.First();
+            }
+
+            if (se != null)
+            {
+                sm = se.month >= 10 ? $"{se.month}" : $"0{se.month}";
+                sd = se.day >= 10 ? $"{se.day}" : $"0{se.day}";
+                start = int.Parse($"{Year}{sm}{sd}");
+            }
+            int curr = int.Parse(date.ToString("yyyyMMdd"));
+            //新学年开学时间大于当前时间,计算年级需要减1   20220901-20220408 > 0 则当前20220408是2021年入学的,
+            //当前时间大于新学年开学时间,计算年级则不需要  20220901-20221203 < 0 则当前20221203是2022年入学的,
+            //20230901-20230101 > 0 则当前20230101是2022年入学的,
+            int dis = start - curr;
+            //学年
+            int studyYear = date.Year;
+            if (dis > 0)
+            {
+                studyYear = Year - 1;
+            }
+            else
+            {
+                studyYear = Year;
+            }
+            Semester semester = null;
+            //当前学期的下一个学期,默认加180天
+            DateTimeOffset nextSemester = date.AddDays(180);
+            var sortSemesters = SortSemester(period.semesters);
+            int len = sortSemesters.Count;
+            for (int i = 0; i < len; i++)
+            {
+                int next = i + 1;
+                if (next>= len)
+                {
+                    semester = sortSemesters[i];
+                    nextSemester = DateTimeOffset.Parse($"{studyYear+1}/{sortSemesters[0].month}/{sortSemesters[0].day}");
+                    break;
+                }
+                else
+                {
+
+                    var fdate = DateTimeOffset.Parse($"{studyYear}/{sortSemesters[i].month}/{sortSemesters[i].day}");
+                    long lf = fdate.ToUnixTimeSeconds();
+                    var ndate = DateTimeOffset.Parse($"{studyYear}/{sortSemesters[next].month}/{sortSemesters[next].day}");
+                    long ln = ndate.ToUnixTimeSeconds();
+                    //代表有跨年
+                    if (lf > ln)
+                    {
+                        ndate = DateTimeOffset.Parse($"{studyYear+1}/{sortSemesters[next].month}/{sortSemesters[next].day}");
+                        ln = ndate.ToUnixTimeSeconds();
+                    }
+                    var cdate = DateTimeOffset.Parse($"{Year}/{Month}/{Day}");
+                    long lc = cdate.ToUnixTimeSeconds();
+                    if (lc >= lf && lc < ln)
+                    {
+                        semester = sortSemesters[i];
+                        nextSemester = DateTimeOffset.Parse($"{studyYear+1}/{sortSemesters[next].month}/{sortSemesters[next].day}");
+                        //nextSemester = sortSemesters[next];
+                        break;
+                    }
+                    //if (sortSemesters[i].month <=Month && sortSemesters[i].day >= Day && sortSemesters[next].month < Month && sortSemesters[next].day < Day) 
+                    //{
+
+                    //    semester = sortSemesters[i];
+                    //    nextSemester = DateTimeOffset.Parse($"{studyYear}/{sortSemesters[next].month}/{sortSemesters[next].day}");
+                    //    break; 
+                    //}
+                }
+            }
+            return (semester, studyYear, date, nextSemester);
+        }
+
+
         /// <summary>
         /// 根据指定时间或者当前时间获取学期信息
         /// </summary>
         /// <param name="semesterList"></param>
         /// <returns></returns>
-        public static (Semester currSemester,  int studyYear, DateTimeOffset date, DateTimeOffset nextSemester) GetSemester(  Period period, long timestamp = 0,  string time =null) {
+        public static (Semester currSemester,  int studyYear, DateTimeOffset currSemesterDate, DateTimeOffset date, DateTimeOffset nextSemester) GetSemester(  Period period, long timestamp = 0,  string time =null) {
             //string time = "2023/05-11";
             DateTimeOffset date = default;
             if (timestamp > 1000000000) {
@@ -309,9 +414,7 @@ namespace TEAMModelOS.SDK
             }
             if (!(!string.IsNullOrWhiteSpace(time) && DateTimeOffset.TryParse(time, out date)))
             {
-                //date = DateTimeOffset.FromUnixTimeSeconds(1672506061);
-               //date = DateTimeOffset.UtcNow;
-                date = DateTimeOffset.FromUnixTimeSeconds(1662688000);
+               date = DateTimeOffset.UtcNow;
             }
             //年级算法
             //var period = school.period.Find(x => x.id.Equals(periodId));
@@ -352,14 +455,21 @@ namespace TEAMModelOS.SDK
             Semester semester= null;
             //当前学期的下一个学期,默认加180天
             DateTimeOffset nextSemester = date.AddDays(180);
+            DateTimeOffset currSemesterDate = default;
             var sortSemesters= SortSemester(period.semesters);
             int len = sortSemesters.Count;
+            int currSemesterYear = studyYear;
             for (int i = 0; i < len; i++) {
                 int next=  i + 1;
                 if (next>= len)
                 {
                     semester = sortSemesters[i];
+                   
                     nextSemester = DateTimeOffset.Parse($"{studyYear+1}/{sortSemesters[0].month}/{sortSemesters[0].day}");
+                    currSemesterDate=DateTimeOffset.Parse($"{currSemesterYear}/{semester.month}/{semester.day}");
+                    if (currSemesterDate.Subtract(nextSemester).TotalDays>0) {
+                        currSemesterDate=DateTimeOffset.Parse($"{currSemesterYear-1}/{semester.month}/{semester.day}");
+                    }
                     break;
                 }
                 else {
@@ -370,6 +480,7 @@ namespace TEAMModelOS.SDK
                     long ln = ndate.ToUnixTimeSeconds();
                     //代表有跨年
                     if (lf > ln) {
+                        currSemesterYear=studyYear+1;
                         ndate = DateTimeOffset.Parse($"{studyYear+1}/{sortSemesters[next].month}/{sortSemesters[next].day}");
                         ln = ndate.ToUnixTimeSeconds();
                     }
@@ -378,7 +489,11 @@ namespace TEAMModelOS.SDK
                     if (lc >= lf && lc < ln) {
                         semester = sortSemesters[i];
                         nextSemester = DateTimeOffset.Parse($"{studyYear+1}/{sortSemesters[next].month}/{sortSemesters[next].day}");
-                        //nextSemester = sortSemesters[next];
+                        currSemesterDate=DateTimeOffset.Parse($"{currSemesterYear}/{semester.month}/{semester.day}");
+                        if (currSemesterDate.Subtract(nextSemester).TotalDays>0)
+                        {
+                            currSemesterDate=DateTimeOffset.Parse($"{currSemesterYear-1}/{semester.month}/{semester.day}");
+                        }
                         break;
                     }
                     //if (sortSemesters[i].month <=Month && sortSemesters[i].day >= Day && sortSemesters[next].month < Month && sortSemesters[next].day < Day) 
@@ -390,7 +505,7 @@ namespace TEAMModelOS.SDK
                     //}
                 }
             }
-            return (semester,studyYear,date, nextSemester); 
+            return (semester,studyYear, currSemesterDate, date, nextSemester); 
         }
 
         /// <summary>

+ 1 - 1
TEAMModelOS/Controllers/Both/CourseBaseController.cs

@@ -427,7 +427,7 @@ namespace TEAMModelOS.Controllers.Both
                                 if (!request.TryGetProperty("year", out JsonElement _year) || !request.TryGetProperty("semesterId", out JsonElement _semesterId))
                                 {
                                     //如果没传,则以当前时间获取学年和学期信息
-                                    (Semester currSemester, int studyYear, DateTimeOffset date, DateTimeOffset nextSemester) info = SchoolService.GetSemester(period);
+                                    (Semester currSemester, int studyYear, DateTimeOffset currSemesterDate, DateTimeOffset date, DateTimeOffset nextSemester) info = SchoolService.GetSemester(period);
                                     semesterId = info.currSemester.id;
                                     studyYear = info.studyYear;
                                 }

+ 2 - 0
TEAMModelOS/Controllers/Both/GroupListController.cs

@@ -1620,6 +1620,8 @@ namespace TEAMModelOS.Controllers
             return BadRequest();
         }
 
+   
+
         /// <
         /// summary>
         /// 处理名单审核

+ 1 - 1
TEAMModelOS/Controllers/Client/HiTeachController.cs

@@ -807,7 +807,7 @@ namespace TEAMModelOS.Controllers.Client
                 foreach (string periodId in periodIdList)
                 {
                     var period = school_base.period.Find(x => x.id.Equals(periodId));
-                    (Semester currSemester, int studyYear, DateTimeOffset date, DateTimeOffset nextSemester) info = SchoolService.GetSemester(period, 0, nowDate.ToString());
+                    (Semester currSemester, int studyYear, DateTimeOffset currSemesterDate, DateTimeOffset date, DateTimeOffset nextSemester) info = SchoolService.GetSemester(period, 0, nowDate.ToString());
                     int studyYear = (request.TryGetProperty("year", out JsonElement _year)) ? _year.GetInt32() : info.studyYear;
                     string semesterId = (request.TryGetProperty("semesterId", out JsonElement _semesterId)) ? _semesterId.GetString() : info.currSemester.id;
                     //string date = SchoolService.GetOpensByStudyYearAndSemester(period.semesters, int.Parse($"{_year}"), $"{_semesterId}");

+ 2 - 2
TEAMModelOS/Controllers/School/ImportExamController.cs

@@ -144,10 +144,10 @@ namespace TEAMModelOS.Controllers
                 List<ResultImportStudent> examImportStudents = new List<ResultImportStudent>();
                 //学生
                 await ExamImportStudent(importExamDaily.students, rightStudents, school, period, examImportStudents, error, warn, classes, subjectName);
-                List<KeyValuePair<string, (Semester currSemester, int studyYear, DateTimeOffset date, DateTimeOffset nextSemester)>> semesterDatas = new List<KeyValuePair<string, (Semester currSemester, int studyYear, DateTimeOffset date, DateTimeOffset nextSemester)>>();
+                List<KeyValuePair<string, (Semester currSemester, int studyYear, DateTimeOffset currSemesterDate, DateTimeOffset date, DateTimeOffset nextSemester)>> semesterDatas = new List<KeyValuePair<string, (Semester currSemester, int studyYear, DateTimeOffset currSemesterDate, DateTimeOffset date, DateTimeOffset nextSemester)>>();
                 importExamDaily.students.GroupBy(x => x.time).Select(y => y.Key).ToList().ForEach(time => {
                     var semesterData = SchoolService.GetSemester(period, time: time);
-                    semesterDatas.Add(new KeyValuePair<string, (Semester currSemester, int studyYear, DateTimeOffset date, DateTimeOffset nextSemester)>(time, semesterData));
+                    semesterDatas.Add(new KeyValuePair<string, (Semester currSemester, int studyYear, DateTimeOffset currSemesterDate, DateTimeOffset date, DateTimeOffset nextSemester)>(time, semesterData));
                 });
                 var group = examImportStudents.GroupBy(x => new { classId = x.classId, date = x.date }).Select(y => new { key = y.Key, list = y.ToList() });
                 List<string> ids = new List<string>();

+ 69 - 2
TEAMModelOS/Controllers/School/SchoolController.cs

@@ -2094,7 +2094,7 @@ namespace TEAMModelOS.Controllers
                 string schType = schoolBase.code;
                 var period = (!string.IsNullOrWhiteSpace(periodId)) ? schoolBase.period.Find(x => x.id.Equals($"{periodId}")) : schoolBase.period[0];
                 if(period == null) period = schoolBase.period[0];
-                (Semester currSemester, int studyYear, DateTimeOffset date, DateTimeOffset nextSemester) info = SchoolService.GetSemester(period);
+                (Semester currSemester, int studyYear, DateTimeOffset curr, DateTimeOffset date, DateTimeOffset nextSemester) info = SchoolService.GetSemester(period);
                 string semesterId = info.currSemester.id;
                 var datetime = DateTimeOffset.UtcNow;
                 int studyYear = info.studyYear;
@@ -2275,7 +2275,7 @@ namespace TEAMModelOS.Controllers
                     string schType = school.code;
                     Period period = (schPeriodDic.ContainsKey(school.id)) ? school.period.Find(x => x.id.Equals($"{schPeriodDic[school.id]}")) : school.period[0];
                     if (period == null) period = school.period[0];
-                    (Semester currSemester, int studyYear, DateTimeOffset date, DateTimeOffset nextSemester) info = SchoolService.GetSemester(period);
+                    (Semester currSemester, int studyYear, DateTimeOffset curr, DateTimeOffset date, DateTimeOffset nextSemester) info = SchoolService.GetSemester(period);
                     string semesterId = info.currSemester.id;
                     var datetime = DateTimeOffset.UtcNow;
                     int studyYear = info.studyYear;
@@ -2422,6 +2422,73 @@ namespace TEAMModelOS.Controllers
                 return BadRequest();
             }
         }
+        /// <
+        /// summary>
+        /// 检查当前学期的开学时间和学期结束时间 
+        /// </summary>
+        /// <param name="json"></param>
+        /// <returns></returns>
+        [ProducesDefaultResponseType]
+
+        [HttpPost("check-semesters")]
+#if !DEBUG
+[AuthToken(Roles = "teacher,admin")]
+        [Authorize(Roles = "IES")]
+#endif
+        public async Task<IActionResult> CheckSemesters(JsonElement json)
+        {
+            if (!json.TryGetProperty("schoolId", out JsonElement _schoolId)) { return BadRequest(); }
+            if (!json.TryGetProperty("periodId", out JsonElement _periodId)) { return BadRequest(); }
+            School school = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School).ReadItemAsync<School>(_schoolId.GetString(), new PartitionKey("Base"));
+            var period=  school.period.Find(z => z.id.Equals(_periodId.GetString()));
+            if (period!=null) {
+                var semesterInfo = SchoolService.GetSemester(period,DateTimeOffset.Now.ToUnixTimeMilliseconds());
+                var start = period.semesters.Where(z => z.start==1).FirstOrDefault();
+                if (start!=null) {
+
+                    var alreadySemester = DateTimeOffset.Now.Subtract(semesterInfo.currSemesterDate);
+                    var soonSemester = semesterInfo.nextSemester.Subtract(DateTimeOffset.Now);
+                    var semesterStarted = Math.Abs((int)alreadySemester.TotalDays);
+                    var semesterEnding = Math.Abs((int)soonSemester.TotalDays);
+                    //开始天数小于60天
+                    if (semesterStarted<=30)
+                    {
+
+                    }
+                    //结束天数小于60天
+                    if (semesterEnding<=30)
+                    {
+
+                    }
+
+
+                    string currStudyYear = $"{semesterInfo.studyYear}-{start.month}-{start.day}";
+                    string nextStudyYear = $"{(semesterInfo.studyYear+1)}-{start.month}-{start.day}";
+                    DateTimeOffset.TryParse(currStudyYear, out DateTimeOffset currYear);
+                    DateTimeOffset.TryParse(nextStudyYear, out DateTimeOffset nextYear);
+                    var alreadyYear= DateTimeOffset.Now .Subtract(currYear);
+                    var soonYear = nextYear.Subtract(DateTimeOffset.Now);
+                    var studyYearStarted = Math.Abs((int)alreadyYear.TotalDays);
+                    var studyYearEnding = Math.Abs((int)soonYear.TotalDays);
+                    //开始天数小于60天
+                    if (studyYearStarted<=60) { 
+                        
+                    }
+                    //结束天数小于60天
+                    if (studyYearEnding<=60)
+                    {
+
+                    }
+
+                  
+                   
+
+                    return Ok(new { code = 1, studyYearStarted, studyYearEnding,semesterStarted, semesterEnding });
+                }
+            }
+            return Ok(new { code=-1,msg="不需要提示"});
+        }
+
         //取得序號產品准許使用產品代碼列表
         public static List<string> getSerialPermitProdcodeList()
         {

+ 1 - 1
TEAMModelOS/Controllers/XTest/TestController.cs

@@ -189,7 +189,7 @@ namespace TEAMModelOS.Controllers
                     var  period = schoolBase.period.Find(x => x.id.Equals($"{studentBase.periodId}"));
                     foreach (var record in sturecord.lessonRecords) {
                         if (record.time > 1000000000000) {
-                            (Semester currSemester, int studyYear, DateTimeOffset date, DateTimeOffset nextSemester) dataSemester = SchoolService.GetSemester(period, record.time);
+                            (Semester currSemester, int studyYear, DateTimeOffset currSemesterDate, DateTimeOffset date, DateTimeOffset nextSemester) dataSemester = SchoolService.GetSemester(period, record.time);
                             string oid = $"{dataSemester.studyYear}-{dataSemester.currSemester.id}-{sturecord.stuid}";
                             string ocode = $"OverallEducation-{sturecord.school}";
                             OverallEducation overallEducation =  overallEducations.Where(o => o.id.Equals(oid, StringComparison.OrdinalIgnoreCase) && o.code.Equals(ocode, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();