package Ġcn . st arr ah . th u _ course _ helper . data . decl ares . school Ċ Ċ import Ġcn . st arr ah . th u _ course _ helper . data . utils . Ver ifiable Ċ import Ġcn . st arr ah . th u _ course _ helper . data . utils . assert Data System Ċ import Ġcn . st arr ah . th u _ course _ helper . data . utils . to Term Day Id Ċ import Ġcom . alibaba . fastjson . annotation . JSON Field Ċ import Ġjava . time . DayOfWeek Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . Local Time Ċ import Ġjava . time . Period Ċ import Ġjava . time . temporal . Ch rono Unit Ċ Ċ data Ġclass ĠSchool Term ( ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åŃ¦ æł¡ åĲįç§° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġschool Name : ĠString Ġ= Ġ"", ĊĊĠĠĠ Ġ/** Ġ åŃ¦ å¹´ åº¦ çļĦ å¼Ģå§ĭ å¹´ ä»½ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ ä¾ĭå¦Ĥ 2 0 1 9 - 2 0 2 0 åŃ¦ å¹´ åº¦ ç§ ĭ åŃ £ åŃ¦ æľŁ ï¼Į åĪĻ æŃ¤ åŃĹæ®µ ä¸º 2 0 1 9 ãĢĤ Ġ*/ ĊĠĠĠ Ġval Ġbegin Year : ĠInt Ġ= Ġ 0 , ĊĊĠĠĠ Ġ/** Ġ åŃ¦ æľŁ çļĦ ç±»åŀĭ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ ä¾ĭå¦Ĥ 2 0 1 9 - 2 0 2 0 åŃ¦ å¹´ åº¦ ç§ ĭ åŃ £ åŃ¦ æľŁ ï¼Į åĪĻ æŃ¤ åŃĹæ®µ ä¸º [ School Term Type . AUT UMN ] ãĢĤ Ġ*/ ĊĠĠĠ Ġval Ġtype : ĠSchool Term Type Ġ= ĠSchool Term Type . AUT UMN , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åŃ¦ æľŁ å¼Ģå§ĭ æĹ¥æľŁ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠstartDate : ĠLocalDate Ġ= ĠLocalDate . now (), ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åŃ¦ æľŁ æŃ£å¸¸ åĳ¨ æķ° ï¼Ī ä¸į åĲ« èĢĥ è¯ķ åĳ¨ ï¼ī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġnormal Week Count : ĠInt Ġ= Ġ 0 , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åŃ¦ æľŁ èĢĥ è¯ķ åĳ¨ æķ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġexam Week Count : ĠInt Ġ= Ġ 0 , ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¯¥ åŃ¦ æľŁ è°ĥ è¯¾ çļĦ å®ī æİĴ ãĢĤ æ¯ıä¸ª åıĹ å½±åĵį çļĦ æĹ¥ åŃĲ æĺ¯ List ä¸ŃçļĦ ä¸Ģä¸ª åħĥç´ł ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġh olidays : ĠList < H oliday Day Level Re arrange > Ġ= Ġmutable ListOf (), ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ¯ı å¤© çļĦ è¯¾ç¨ĭ å¤§å°ı èĬĤ æĹ¶éĹ´ å®ī æİĴ è¡¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtime Rule : ĠSchool Time Rule Ġ= ĠSchool Time Rule ( listOf ()) Ċ ) Ġ: ĠVer ifiable Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å½¢ å¦Ĥ " 2 0 1 9 - 2 0 2 0 åŃ¦ å¹´ åº¦ ç§ ĭ åŃ £ åŃ¦ æľŁ " æł¼å¼ı çļĦ ä¸Ńæĸĩ åĲįç§° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġch inese Name : ĠString ĊĠĠĠĠĠĠĠ Ġ@ JSON Field ( serialize Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"${ begin Year }-${ begin Year Ġ+ Ġ 1 } åŃ¦ å¹´ åº¦ ${ type . chinese Name }" ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å½¢ å¦Ĥ " 1 9 - 2 0 ç§ ĭ " æł¼å¼ı çļĦ ä¸Ńæĸĩ åĲįç§° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġch inese ShortName : ĠString ĊĠĠĠĠĠĠĠ Ġ@ JSON Field ( serialize Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"${ begin Year Ġ% Ġ 1 0 0 }-${ ( begin Year Ġ% Ġ 1 0 0 ) Ġ+ Ġ 1 }${ type . one Char Chinese Name }" ĊĊĠĠĠ Ġval Ġterm Id : ĠString ĊĠĠĠĠĠĠĠ Ġ@ JSON Field ( serialize Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"${ school Name }, ${ begin Year }, ${ type }" ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æķ°æį®åºĵ ä¸Ń ä½¿çĶ¨çļĦ åĲįç§° ï¼Į å½¢ å¦Ĥ " CAL 1 9 AUT " ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġdb Name : ĠString ĊĠĠĠĠĠĠĠ Ġ@ JSON Field ( serialize Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ" CAL ${ begin Year Ġ% Ġ 1 0 0 }${ type . name . substring ( 0 Ġuntil Ġ 3 )}" ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åŃ¦ æľŁ æĢ» åĳ¨ æķ° ï¼Ī æŃ£å¸¸ åĳ¨ + èĢĥ è¯ķ åĳ¨ ï¼ī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtotal Week Count : ĠInt ĊĠĠĠĠĠĠĠ Ġ@ JSON Field ( serialize Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġnormal Week Count Ġ+ Ġexam Week Count ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç»ĵæĿŁ æĹ¥æľŁ çļĦ [ LocalDate ] ç±»åŀĭ å¯¹è±¡ ãĢĤ æĮĩ åŃ¦ æľŁ çļĦ æľĢåĲİ ä¸Ģ å¤© ï¼Ī åį³ æľĢåĲİ ä¸Ģ åĳ¨ çļĦ åĳ¨ æĹ¥ ï¼ī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġend Inclusive Date : ĠLocalDate ĊĠĠĠĠĠĠĠ Ġ@ JSON Field ( serialize Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠstartDate Ġ+ ĠPeriod . of Days (( total Week Count Ġ* Ġ 7 Ġ- Ġ 1 )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ èĢĥ è¯ķ åĳ¨ å¼Ģå§ĭ æĹ¥æľŁ çļĦ [ LocalDate ] ç±»åŀĭ å¯¹è±¡ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġexam Week StartDate : ĠLocalDate ĊĠĠĠĠĠĠĠ Ġ@ JSON Field ( serialize Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠstartDate Ġ+ ĠPeriod . of Days (( normal Week Count Ġ* Ġ 7 )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ æīĢ ç»Ļ æĹ¥æľŁ æĺ¯åĲ¦ åľ¨ åŃ¦ æľŁ åĨħ ãĢĤ ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ date ] Ġ æĹ¥æľŁ å¯¹è±¡ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Date In Term ( date : ĠLocalDate ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġweek Number Ġ= Ġ( Ch rono Unit . DAYS . between ( startDate , Ġdate ). toInt () Ġ/ Ġ 7 ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġreturn Ġweek Number Ġin Ġ 1 .. total Week Count ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ æīĢ ç»Ļ åĳ¨ æĺ¯åĲ¦ åľ¨ åŃ¦ æľŁ åĨħ ãĢĤ ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ week Number ] Ġ åĳ¨ æķ° ï¼Į ä»İ 1 å¼Ģå§ĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġis Week In Term ( week Number : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġweek Number Ġin Ġ 1 .. total Week Count ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæĬ Ĭ æĹ¥æľŁ è½¬æį¢ ä¸º åŃ¦ æľŁ çļĦ åĳ¨ æķ° ãĢĤ ĊĠĠĠĠ Ġ* Ġ@ return Ġ åĳ¨ æķ° Ġä»İ 1 å¼Ģå§ĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdate To Week Number ( date : ĠLocalDate ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġweek Number Ġ= Ġ( Ch rono Unit . DAYS . between ( startDate , Ġdate ). toInt () Ġ/ Ġ 7 ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( week Number Ġin Ġ 1 .. total Week Count ) Ġweek Number Ġelse Ġthrow ĠRuntimeException (" æĹ¥æľŁ ä¸į åľ¨ æľ¬ åŃ¦ æľŁ åĨħ ï¼ģ ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ æŁĲ ä¸Ģä¸ª åĳ¨ æķ° å¯¹åºĶçļĦ æīĢæľī æĹ¥æľŁ æŀĦ æĪĲ çļĦ åĪĹè¡¨ ãĢĤ ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ week Number ] Ġ åĳ¨ æķ° Ġä»İ 1 å¼Ģå§ĭ ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ only MON To FR I ] Ġå¦Ĥæŀľ ä¸º true ï¼Į åĪĻ åıª è¿ĶåĽŀ åĳ¨ ä¸Ģ åĪ° åĳ¨ äºĶ äºĶ å¤© ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdates In AW eek ( week Number : ĠInt , Ġonly MON To FR I : ĠBoolean Ġ= Ġfalse ): ĠList < LocalDate > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( week Number Ġ! in Ġ 1 .. total Week Count ) Ġthrow ĠRuntimeException (" åĳ¨ æķ° ä¸į åĲĪ æ³ķ ï¼ģ ") ĊĠĠĠĠĠĠĠ Ġval Ġrange Ġ= Ġif Ġ( only MON To FR I ) Ġ 0 Ġuntil Ġ 5 Ġelse Ġ 0 Ġuntil Ġ 7 ĊĠĠĠĠĠĠĠ Ġreturn Ġrange . map Ġ{ ĠstartDate . plus Days (((( week Number Ġ- Ġ 1 ) Ġ* Ġ 7 ) Ġ+ Ġit ). to Long ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ æŁĲ ä¸Ģä¸ª åĳ¨ æķ° æŁĲ ä¸Ģ æĺŁ æľŁ å¯¹åºĶçļĦ æĹ¥æľŁ ãĢĤ ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ week Number ] Ġ åĳ¨ æķ° Ġä»İ 1 å¼Ģå§ĭ ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ day OfWeek ] Ġ æĺŁ æľŁ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdate OfWeek And Day ( week Number : ĠInt , Ġday OfWeek : ĠDay OfWeek ): ĠLocalDate Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdates In AW eek ( week Number )[ day OfWeek . value Ġ- Ġ 1 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ æŁĲ ä¸Ģ åĳ¨ æĺ¯åĲ¦ æĺ¯ èĢĥ è¯ķ åĳ¨ ãĢĤ ĊĠĠĠĠ Ġ* Ġ@ param Ġ[ week Number ] Ġ åĳ¨ æķ° Ġä»İ 1 å¼Ģå§ĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠisIn Exam Week ( week Number : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( week Number ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 1 .. normal Week Count Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ( normal Week Count Ġ+ Ġ 1 ) .. total Week Count Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠRuntimeException (" åĳ¨ æķ° ä¸į åĲĪ æ³ķ ï¼ģ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ æŁĲ ä¸Ģ å¤© æĺ¯åĲ¦ åľ¨ èĢĥ è¯ķ åĳ¨ åĨħ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠisIn Exam Week ( date : ĠLocalDate ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠisIn Exam Week ( date To Week Number ( date )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ å¸®åĬ© èĬĤ åģĩ æĹ¥ è®¡ç®Ĺ ä½¿çĶ¨ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġ_ holiday Cal Help Map : ĠMutable Map < Int , ĠInt > Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġh olidays . forEach Ġ{ Ġ_ holiday Cal Help Map [ it . date . to Term Day Id ( this )] Ġ= Ġit . to ?. to Term Day Id ( this ) ?: Ġ 0 Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. ( total Week Count Ġ* Ġ 7 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv Ġ= Ġ_ holiday Cal Help Map [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v Ġ== Ġnull ) Ġ_ holiday Cal Help Map [ i ] Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( v Ġ== Ġ 0 ) Ġ_ holiday Cal Help Map . remove ( i ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġapply H oliday Re arrange ( day Ids : ĠList < Int >): ĠList < Int > Ġ= ĊĠĠĠĠĠĠĠ Ġday Ids . map NotNull Ġ{ Ġ_ holiday Cal Help Map [ it ] Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġassert Valid () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Data System (_ holiday Cal Help Map . values . toSet (). size Ġ== Ġ_ holiday Cal Help Map . size , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" èĬĤ åģĩ æĹ¥ è®¾ç½® éĶĻè¯¯ ï¼ģ ") ĊĊĠĠĠĠĠĠĠ Ġassert Data System ( startDate . year Ġin Ġbegin Year .. begin Year + 1 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Inclusive Date . year Ġin Ġbegin Year .. begin Year + 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" åŃ¦ æľŁ çļĦ çļĦ æĹ¥æľŁ ä¸İ åŃ¦ å¹´ åº¦ çļĦ è®¾ç½® ä¸į åĮ¹éħį ï¼ģ ") ĊĊĠĠĠĠĠĠĠ Ġassert Data System ( normal Week Count Ġ+ Ġexam Week Count Ġ> Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" åŃ¦ æľŁ çļĦ åĳ¨ æķ° è®¾ç½® ä¸į åĲĪ æ³ķ ï¼ģ ") ĊĊĠĠĠĠĠĠĠ Ġvar Ġlast End Ġ= ĠLocal Time . of ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġassert Data System ( time Rule . big s . isNotEmpty (), Ġ" ä¸Ĭ è¯¾ æĹ¶éĹ´ è¡¨ è®¾ç½® ä¸į åĲĪ æ³ķ ï¼ģ ") ĊĠĠĠĠĠĠĠ Ġfor Ġ( big Ġin Ġtime Rule . big s ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Data System ( big . small s . isNotEmpty (), Ġ" ä¸Ĭ è¯¾ æĹ¶éĹ´ è¡¨ è®¾ç½® ä¸į åĲĪ æ³ķ ï¼ģ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( small Ġin Ġbig . small s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Data System ( small . startTime Ġ>= Ġlast End Ġ&& Ġsmall . endTime Ġ> Ġsmall . startTime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ä¸Ĭ è¯¾ æĹ¶éĹ´ è¡¨ è®¾ç½® ä¸į åĲĪ æ³ķ ï¼ģ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast End Ġ= Ġsmall . endTime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }