|
@@ -25,7 +25,6 @@ import (
|
|
|
|
|
|
var (
|
|
|
defaultTime = time.Date(2006, time.January, 2, 15, 4, 5, 0, time.Local)
|
|
|
- cacheMutex sync.Mutex
|
|
|
cacheTeamName sync.Map
|
|
|
heartBeatTimeThreshold = 5 * time.Second
|
|
|
InitialPositionX = 565266.0482367771
|
|
@@ -169,85 +168,79 @@ func ExamEndTicker() {
|
|
|
select {
|
|
|
|
|
|
case <-ticker.C:
|
|
|
- cacheMutex.Lock()
|
|
|
- defer cacheMutex.Unlock()
|
|
|
- {
|
|
|
- var keysToDelete []string
|
|
|
- cacheTeamName.Range(func(teamName, heartBeatTimeAny interface{}) bool {
|
|
|
- heartBeatTime, _ := util.AnyToTime(heartBeatTimeAny)
|
|
|
- if time.Since(heartBeatTime) > heartBeatTimeThreshold {
|
|
|
- c_log.GlobalLogger.Infof("队伍 %v 心跳超时,比赛结束。", teamName)
|
|
|
- keysToDelete = append(keysToDelete, fmt.Sprintf("%v", teamName))
|
|
|
- }
|
|
|
- return true
|
|
|
- })
|
|
|
+ var keysToDelete []string
|
|
|
+ cacheTeamName.Range(func(teamName, heartBeatTimeAny interface{}) bool {
|
|
|
+ heartBeatTime, _ := util.AnyToTime(heartBeatTimeAny)
|
|
|
+ if time.Since(heartBeatTime) > heartBeatTimeThreshold {
|
|
|
+ c_log.GlobalLogger.Infof("队伍 %v 心跳超时,比赛结束。", teamName)
|
|
|
+ keysToDelete = append(keysToDelete, fmt.Sprintf("%v", teamName))
|
|
|
+ }
|
|
|
+ return true
|
|
|
+ })
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- for _, teamName := range keysToDelete {
|
|
|
- cacheTeamName.Delete(teamName)
|
|
|
-
|
|
|
-
|
|
|
- var result []webServerEntity.ExamPo
|
|
|
- selectSql, err := util.ReadFile(c_db.SqlFilesMap["exam-select-latest-by-team_name.sql"])
|
|
|
- if err != nil {
|
|
|
- c_log.GlobalLogger.Error("读取sql文件报错:", err)
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- if err = c_db.MysqlDb.Select(&result, selectSql, teamName); err != nil {
|
|
|
- c_log.GlobalLogger.Error("数据库查询报错:", err)
|
|
|
- return
|
|
|
- }
|
|
|
- if !result[0].EndTime.Equal(defaultTime) {
|
|
|
- c_log.GlobalLogger.Error("赛队", teamName, "考试已结束!")
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- stage := ""
|
|
|
- if time.Now().Before(trialBegin) {
|
|
|
- stage = "表演赛"
|
|
|
- } else if time.Now().After(trialBegin) && time.Now().Before(trialEnd) {
|
|
|
- stage = "预赛"
|
|
|
- } else {
|
|
|
- stage = "决赛"
|
|
|
- }
|
|
|
-
|
|
|
- selectSql, err = util.ReadFile(c_db.SqlFilesMap["exam-select-max-id-by-team_name-and-topic.sql"])
|
|
|
- if err != nil {
|
|
|
- c_log.GlobalLogger.Error("读取sql文件报错:", err)
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- var resultId []int
|
|
|
- if err = c_db.MysqlDb.Select(&resultId, selectSql, teamName, stage); err != nil {
|
|
|
- c_log.GlobalLogger.Error("数据库查询报错:", err)
|
|
|
- return
|
|
|
- }
|
|
|
- if len(resultId) == 1 {
|
|
|
- c_log.GlobalLogger.Info("更新数据结束时间,id为:", resultId)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ for _, teamName := range keysToDelete {
|
|
|
+ cacheTeamName.Delete(teamName)
|
|
|
+
|
|
|
+
|
|
|
+ var result []webServerEntity.ExamPo
|
|
|
+ selectSql, err := util.ReadFile(c_db.SqlFilesMap["exam-select-latest-by-team_name.sql"])
|
|
|
+ if err != nil {
|
|
|
+ c_log.GlobalLogger.Error("读取sql文件报错:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if err = c_db.MysqlDb.Select(&result, selectSql, teamName); err != nil {
|
|
|
+ c_log.GlobalLogger.Error("数据库查询报错:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if !result[0].EndTime.Equal(defaultTime) {
|
|
|
+ c_log.GlobalLogger.Error("赛队", teamName, "考试已结束!")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ stage := ""
|
|
|
+ if time.Now().Before(trialBegin) {
|
|
|
+ stage = "表演赛"
|
|
|
+ } else if time.Now().After(trialBegin) && time.Now().Before(trialEnd) {
|
|
|
+ stage = "预赛"
|
|
|
+ } else {
|
|
|
+ stage = "决赛"
|
|
|
+ }
|
|
|
+
|
|
|
+ selectSql, err = util.ReadFile(c_db.SqlFilesMap["exam-select-max-id-by-team_name-and-topic.sql"])
|
|
|
+ if err != nil {
|
|
|
+ c_log.GlobalLogger.Error("读取sql文件报错:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ var resultId []int
|
|
|
+ if err = c_db.MysqlDb.Select(&resultId, selectSql, teamName, stage); err != nil {
|
|
|
+ c_log.GlobalLogger.Error("数据库查询报错:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(resultId) == 1 {
|
|
|
+ c_log.GlobalLogger.Info("更新数据结束时间,id为:", resultId)
|
|
|
|
|
|
- sqlTemplate, _ := util.ReadFile(c_db.SqlFilesMap["exam-update-end_time-by-id.sql"])
|
|
|
- if err := c_db.DoTx(sqlTemplate, []any{
|
|
|
- time.Now(),
|
|
|
- resultId[0],
|
|
|
- }); err != nil {
|
|
|
- c_log.GlobalLogger.Error("插入数据报错:", err)
|
|
|
- return
|
|
|
- }
|
|
|
- } else {
|
|
|
- c_log.GlobalLogger.Error("查询id失败:", resultId)
|
|
|
+ sqlTemplate, _ := util.ReadFile(c_db.SqlFilesMap["exam-update-end_time-by-id.sql"])
|
|
|
+ if err := c_db.DoTx(sqlTemplate, []any{
|
|
|
+ time.Now(),
|
|
|
+ resultId[0],
|
|
|
+ }); err != nil {
|
|
|
+ c_log.GlobalLogger.Error("插入数据报错:", err)
|
|
|
+ return
|
|
|
}
|
|
|
- c_log.GlobalLogger.Infof("队伍 %v 的考试结束。", teamName)
|
|
|
-
|
|
|
+ } else {
|
|
|
+ c_log.GlobalLogger.Error("查询id失败:", resultId)
|
|
|
}
|
|
|
+ c_log.GlobalLogger.Infof("队伍 %v 的考试结束。", teamName)
|
|
|
}
|
|
|
- cacheMutex.Unlock()
|
|
|
}
|
|
|
}
|
|
|
}
|