yaojianjun il y a 9 mois
Parent
commit
024a1786ed

+ 3 - 0
.gitignore

@@ -18,3 +18,6 @@ Tech/log/app.log
 Tech/log/info.log
 
 *.md
+*.exe
+*.rar
+Tech/__debug_bin.exe2256990408

+ 1 - 11
Tech/build.bat

@@ -1,11 +1 @@
-@echo off
-cd /d %~dp0
-echo 开始编译...
-go build -o Tech.exe
-if %errorlevel% equ 0 (
-    echo 编译成功!
-) else (
-    echo 编译失败!
-    pause
-)
-pause
+go build -o Tech.exe

+ 2 - 2
Tech/conf/app.conf

@@ -11,8 +11,8 @@ ElectricalPort = 7314
 
 # 数据库配置
 DB.Adapter = mysql
-# DB.URL = dbadmin:dbadmin@987@(124.222.28.5:7312)/CCGD_project?charset=utf8
-DB.URL = root:wl110@(127.0.0.1:3306)/ccgd_project?charset=utf8
+DB.URL = dbadmin:dbadmin@987@(124.222.28.5:7312)/CCGD_project?charset=utf8
+# DB.URL = root:wl110@(127.0.0.1:3306)/ccgd_project?charset=utf8
 
 # 信息化服务器和地址
 ESYSIP = 124.222.28.5

+ 4 - 3
Tech/controllers/电子考评.go

@@ -657,9 +657,10 @@ func (c *EvaLogController) Update() {
 
 	// 评价来源始终使用现有记录中的值(保留原始来源)
 	eva.EvaSource = existingEva.EvaSource
-	if eva.DisqualificationItem == 0 {
-		eva.DisqualificationItem = existingEva.DisqualificationItem
-	}
+	// 修改为允许修改为失格项
+	// if eva.DisqualificationItem == 0 {
+	// 	eva.DisqualificationItem = existingEva.DisqualificationItem
+	// }
 
 	// 使用原生SQL更新记录
 	_, err = o.Raw("UPDATE CourseEvaLog SET 评价目标角色=?, 评价名称=?, 评价映射ID=?, 评价类型=?, 评价赋分=?, 评价失分=?, 评价来源=?, 失格项=? WHERE 运行记录编号=? AND 序号=?",

+ 16 - 0
Tech/controllers/电调.go

@@ -500,6 +500,21 @@ func (c *EDispatchController) Addctrllog() {
 		return
 	}
 
+	var curTemplateID = 0
+	// 根据req.CtrlType和req.CtrlSubType查询TemplateOperation表获取模板ID
+	var templateOp models.TemplateOperation
+	err = o.QueryTable(new(models.TemplateOperation)).
+		Filter("Category", req.CtrlType).
+		Filter("SubCategory", req.CtrlSubType).
+		One(&templateOp)
+	if err == nil {
+		curTemplateID = templateOp.TemplateID
+	} else {
+
+		// 如果没有找到模板操作记录,则使用默认模板ID
+		curTemplateID = 0
+	}
+
 	// 计算从课程开始到现在的秒数,减去暂停累计时间
 	operTime := int(time.Since(runDateTime).Seconds()) - runningCourse.PauseTotalTime
 
@@ -508,6 +523,7 @@ func (c *EDispatchController) Addctrllog() {
 		RunLogID:    runningCourse.RunLogID,
 		RunCourseID: runningCourse.RunCourseID,
 		RunOperID:   runOperID,
+		TemplateID:  curTemplateID,
 		OperName:    req.CtrlUser,
 		OperTime:    operTime,
 		OperScore:   0, // 默认分数为0

+ 66 - 25
Tech/controllers/课程运行.go

@@ -1164,37 +1164,78 @@ func (c *CourseRunController) OperRunRecordList() {
 		return
 	}
 
-	// 为每个操作日志添加课程名称
+	// 一次性查询所有模板信息到内存中
+	var allTemplates []models.TemplateOperation
+	_, err = o.QueryTable(new(models.TemplateOperation)).All(&allTemplates)
+	if err != nil && err != orm.ErrNoRows {
+		c.Data["json"] = map[string]interface{}{
+			"code": 500,
+			"msg":  "查询模板信息失败: " + err.Error(),
+		}
+		c.ServeJSON()
+		return
+	}
+
+	// 建立模板ID到模板信息的映射
+	templateMap := make(map[int]models.TemplateOperation)
+	for _, tmpl := range allTemplates {
+		templateMap[tmpl.TemplateID] = tmpl
+	}
+
+	// 为每个操作日志添加课程名称和模板信息
 	type OperLogWithCourseName struct {
-		RunLogID    int     `json:"runLogID"`
-		RunCourseID int     `json:"runCourseID"`
-		RunOperID   int     `json:"runOperID"`
-		OperName    string  `json:"operName"`
-		OperTime    int     `json:"operTime"`
-		OperScore   float64 `json:"operScore"`
-		OperParam1  string  `json:"operParam1"`
-		OperParam2  string  `json:"operParam2"`
-		OperParam3  string  `json:"operParam3"`
-		OperParam4  string  `json:"operParam4"`
-		OperParam5  string  `json:"operParam5"`
-		CourseName  string  `json:"courseName"`
+		RunLogID         int     `json:"runLogID"`
+		RunCourseID      int     `json:"runCourseID"`
+		RunOperID        int     `json:"runOperID"`
+		TemplateID       int     `json:"templateID"`
+		CategoryName     string  `json:"categoryName"`
+		SubCategoryName  string  `json:"subCategoryName"`
+		TemplateName     string  `json:"templateName"`
+		TemplateType     int     `json:"templateType"`
+		OperName         string  `json:"operName"`
+		OperTime         int     `json:"operTime"`
+		OperScore        float64 `json:"operScore"`
+		OperParam1       string  `json:"operParam1"`
+		OperParam2       string  `json:"operParam2"`
+		OperParam3       string  `json:"operParam3"`
+		OperParam4       string  `json:"operParam4"`
+		OperParam5       string  `json:"operParam5"`
+		CourseName       string  `json:"courseName"`
 	}
 
 	operLogsWithCourseName := make([]OperLogWithCourseName, len(operLogs))
 	for i, log := range operLogs {
+		// 从内存中获取模板信息
+		categoryName := ""
+		subCategoryName := ""
+		templateName := ""
+		templateType := 0
+
+		if template, exists := templateMap[log.TemplateID]; exists {
+			categoryName = template.CategoryName
+			subCategoryName = template.SubCategoryName
+			templateName = template.TemplateName
+			templateType = template.TemplateType
+		}
+
 		operLogsWithCourseName[i] = OperLogWithCourseName{
-			RunLogID:    log.RunLogID,
-			RunCourseID: log.RunCourseID,
-			RunOperID:   log.RunOperID,
-			OperName:    log.OperName,
-			OperTime:    log.OperTime,
-			OperScore:   log.OperScore,
-			OperParam1:  log.OperParam1,
-			OperParam2:  log.OperParam2,
-			OperParam3:  log.OperParam3,
-			OperParam4:  log.OperParam4,
-			OperParam5:  log.OperParam5,
-			CourseName:  latestCourseRun.RunCourseName,
+			RunLogID:         log.RunLogID,
+			RunCourseID:      log.RunCourseID,
+			RunOperID:        log.RunOperID,
+			TemplateID:       log.TemplateID,
+			CategoryName:     categoryName,
+			SubCategoryName:  subCategoryName,
+			TemplateName:     templateName,
+			TemplateType:     templateType,
+			OperName:         log.OperName,
+			OperTime:         log.OperTime,
+			OperScore:        log.OperScore,
+			OperParam1:       log.OperParam1,
+			OperParam2:       log.OperParam2,
+			OperParam3:       log.OperParam3,
+			OperParam4:       log.OperParam4,
+			OperParam5:       log.OperParam5,
+			CourseName:       latestCourseRun.RunCourseName,
 		}
 	}
 

+ 248 - 0
Tech/log/app.log

@@ -679,3 +679,251 @@
 {"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2025-12-28 19:21:26"}
 {"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2025-12-28 19:21:56"}
 {"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2025-12-28 19:22:26"}
+{"event":"system_startup","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:87","func":"Tech/common.InitLogger","level":"info","msg":"SCADA培训系统启动","pid":33032,"time":"2026-01-01 20:49:27"}
+{"event":"system_startup","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:87","func":"Tech/common.InitLogger","level":"info","msg":"SCADA培训系统启动","pid":33032,"time":"2026-01-01 20:49:27"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"日志系统初始化成功","time":"2026-01-01 20:49:27"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"数据库连接监控任务已启动,间隔10秒","time":"2026-01-01 20:49:27"}
+{"action":"cache_init","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:333","func":"Tech/common.LogInfo","level":"info","module":"user","msg":"开始初始化用户信息缓存...","time":"2026-01-01 20:49:27"}
+{"action":"cache_init_complete","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:333","func":"Tech/common.LogInfo","level":"info","module":"user","msg":"用户信息缓存初始化完成","time":"2026-01-01 20:49:29","user_count":3574}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"心跳发送任务已启动,间隔30秒","time":"2026-01-01 20:49:29"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"电调数据定时获取任务已启动,间隔 5 秒","time":"2026-01-01 20:49:29"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"SCADA培训系统服务启动中...","time":"2026-01-01 20:49:29"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:49:35"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:49:40"}
+{"event":"system_startup","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:87","func":"Tech/common.InitLogger","level":"info","msg":"SCADA培训系统启动","pid":22496,"time":"2026-01-01 20:49:51"}
+{"event":"system_startup","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:87","func":"Tech/common.InitLogger","level":"info","msg":"SCADA培训系统启动","pid":22496,"time":"2026-01-01 20:49:51"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"日志系统初始化成功","time":"2026-01-01 20:49:51"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"数据库连接监控任务已启动,间隔10秒","time":"2026-01-01 20:49:51"}
+{"action":"cache_init","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:333","func":"Tech/common.LogInfo","level":"info","module":"user","msg":"开始初始化用户信息缓存...","time":"2026-01-01 20:49:51"}
+{"action":"cache_init_complete","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:333","func":"Tech/common.LogInfo","level":"info","module":"user","msg":"用户信息缓存初始化完成","time":"2026-01-01 20:49:56","user_count":3574}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"心跳发送任务已启动,间隔30秒","time":"2026-01-01 20:49:56"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"电调数据定时获取任务已启动,间隔 5 秒","time":"2026-01-01 20:49:56"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"SCADA培训系统服务启动中...","time":"2026-01-01 20:49:56"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:50:02"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:50:07"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:50:12"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:50:17"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:50:22"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:50:27"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:50:27"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:50:32"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:50:37"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:50:42"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:50:47"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:50:52"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:50:57"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:50:57"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:51:02"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:51:07"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:51:12"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:51:17"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:51:22"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:51:27"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:51:27"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:51:32"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:51:37"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:51:42"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:51:47"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:51:52"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:51:57"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:51:57"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:52:02"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:52:07"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:52:12"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:52:17"}
+{"event":"system_startup","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:87","func":"Tech/common.InitLogger","level":"info","msg":"SCADA培训系统启动","pid":34320,"time":"2026-01-01 20:52:36"}
+{"event":"system_startup","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:87","func":"Tech/common.InitLogger","level":"info","msg":"SCADA培训系统启动","pid":34320,"time":"2026-01-01 20:52:36"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"数据库连接监控任务已启动,间隔10秒","time":"2026-01-01 20:52:36"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"日志系统初始化成功","time":"2026-01-01 20:52:36"}
+{"action":"cache_init","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:333","func":"Tech/common.LogInfo","level":"info","module":"user","msg":"开始初始化用户信息缓存...","time":"2026-01-01 20:52:36"}
+{"action":"cache_init_complete","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:333","func":"Tech/common.LogInfo","level":"info","module":"user","msg":"用户信息缓存初始化完成","time":"2026-01-01 20:52:43","user_count":3574}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"电调数据定时获取任务已启动,间隔 5 秒","time":"2026-01-01 20:52:43"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"心跳发送任务已启动,间隔30秒","time":"2026-01-01 20:52:43"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"SCADA培训系统服务启动中...","time":"2026-01-01 20:52:43"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:52:49"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:52:54"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:52:59"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:53:04"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:53:09"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:53:13"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:53:14"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:53:19"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:53:24"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:53:29"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:53:34"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:53:39"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:53:43"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:53:44"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:53:49"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:53:54"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:53:59"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:54:04"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:54:09"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:54:13"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:54:14"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:54:19"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:54:24"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:54:29"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:54:34"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:54:39"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:54:43"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:54:44"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:54:49"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:54:54"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:54:59"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:55:04"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:55:09"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:55:13"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:55:14"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:55:19"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:55:24"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:55:40"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:55:47"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:55:47"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:55:48"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:55:49"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"数据库连接监控任务已启动,间隔10秒","time":"2026-01-01 20:55:53"}
+{"event":"system_startup","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:87","func":"Tech/common.InitLogger","level":"info","msg":"SCADA培训系统启动","pid":39432,"time":"2026-01-01 20:55:53"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"日志系统初始化成功","time":"2026-01-01 20:55:53"}
+{"action":"cache_init","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:333","func":"Tech/common.LogInfo","level":"info","module":"user","msg":"开始初始化用户信息缓存...","time":"2026-01-01 20:55:53"}
+{"action":"cache_init_complete","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:333","func":"Tech/common.LogInfo","level":"info","module":"user","msg":"用户信息缓存初始化完成","time":"2026-01-01 20:56:00","user_count":3574}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"电调数据定时获取任务已启动,间隔 5 秒","time":"2026-01-01 20:56:00"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"SCADA培训系统服务启动中...","time":"2026-01-01 20:56:00"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"心跳发送任务已启动,间隔30秒","time":"2026-01-01 20:56:00"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:56:14"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:56:16"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:56:21"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:56:26"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:56:30"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:56:31"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:56:36"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:56:41"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:56:46"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:56:51"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:56:56"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:57:00"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:57:01"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:57:06"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:57:11"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:57:16"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 20:57:21"}
+{"event":"system_startup","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:87","func":"Tech/common.InitLogger","level":"info","msg":"SCADA培训系统启动","pid":17416,"time":"2026-01-01 22:59:04"}
+{"event":"system_startup","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:87","func":"Tech/common.InitLogger","level":"info","msg":"SCADA培训系统启动","pid":17416,"time":"2026-01-01 22:59:04"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"日志系统初始化成功","time":"2026-01-01 22:59:04"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"数据库连接监控任务已启动,间隔10秒","time":"2026-01-01 22:59:04"}
+{"action":"cache_init","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:333","func":"Tech/common.LogInfo","level":"info","module":"user","msg":"开始初始化用户信息缓存...","time":"2026-01-01 22:59:04"}
+{"action":"cache_init_complete","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:333","func":"Tech/common.LogInfo","level":"info","module":"user","msg":"用户信息缓存初始化完成","time":"2026-01-01 22:59:10","user_count":3574}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"电调数据定时获取任务已启动,间隔 5 秒","time":"2026-01-01 22:59:10"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"SCADA培训系统服务启动中...","time":"2026-01-01 22:59:10"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"心跳发送任务已启动,间隔30秒","time":"2026-01-01 22:59:10"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 22:59:16"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 22:59:21"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"接收到关闭信号,正在优雅关闭服务...","time":"2026-01-01 22:59:21"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:559","func":"Tech/common.CloseLogger","level":"info","msg":"SCADA培训系统关闭","time":"2026-01-01 22:59:21"}
+{"event":"system_startup","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:87","func":"Tech/common.InitLogger","level":"info","msg":"SCADA培训系统启动","pid":12444,"time":"2026-01-01 23:03:06"}
+{"event":"system_startup","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:87","func":"Tech/common.InitLogger","level":"info","msg":"SCADA培训系统启动","pid":12444,"time":"2026-01-01 23:03:06"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"日志系统初始化成功","time":"2026-01-01 23:03:06"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"数据库连接监控任务已启动,间隔10秒","time":"2026-01-01 23:03:06"}
+{"action":"cache_init","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:333","func":"Tech/common.LogInfo","level":"info","module":"user","msg":"开始初始化用户信息缓存...","time":"2026-01-01 23:03:06"}
+{"action":"cache_init_complete","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:333","func":"Tech/common.LogInfo","level":"info","module":"user","msg":"用户信息缓存初始化完成","time":"2026-01-01 23:03:14","user_count":3574}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"电调数据定时获取任务已启动,间隔 5 秒","time":"2026-01-01 23:03:14"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"心跳发送任务已启动,间隔30秒","time":"2026-01-01 23:03:14"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"SCADA培训系统服务启动中...","time":"2026-01-01 23:03:14"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:03:19"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:03:24"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:03:29"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:03:34"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:03:39"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 23:03:44"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:03:44"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:03:49"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:03:54"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:03:59"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:04:04"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:04:09"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 23:04:14"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:04:14"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:04:19"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:04:24"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:04:29"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:04:34"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:04:39"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 23:04:44"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:04:44"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:04:49"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:04:54"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:04:59"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:05:04"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:05:09"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 23:05:14"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:05:14"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:05:19"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:05:24"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:05:29"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:05:34"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:05:39"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 23:05:44"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:05:44"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:05:49"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:05:55"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:05:59"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:06:04"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:06:09"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 23:06:14"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:06:14"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:06:19"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:06:24"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:06:29"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:06:34"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:06:39"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 23:06:44"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:06:44"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-01 23:06:49"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"接收到关闭信号,正在优雅关闭服务...","time":"2026-01-01 23:06:50"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:559","func":"Tech/common.CloseLogger","level":"info","msg":"SCADA培训系统关闭","time":"2026-01-01 23:06:50"}
+{"event":"system_startup","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:87","func":"Tech/common.InitLogger","level":"info","msg":"SCADA培训系统启动","pid":7132,"time":"2026-01-02 10:23:13"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"日志系统初始化成功","time":"2026-01-02 10:23:13"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"数据库连接监控任务已启动,间隔10秒","time":"2026-01-02 10:23:13"}
+{"action":"cache_init","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:333","func":"Tech/common.LogInfo","level":"info","module":"user","msg":"开始初始化用户信息缓存...","time":"2026-01-02 10:23:13"}
+{"action":"cache_init_complete","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:333","func":"Tech/common.LogInfo","level":"info","module":"user","msg":"用户信息缓存初始化完成","time":"2026-01-02 10:23:21","user_count":3574}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"电调数据定时获取任务已启动,间隔 5 秒","time":"2026-01-02 10:23:21"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"SCADA培训系统服务启动中...","time":"2026-01-02 10:23:21"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"心跳发送任务已启动,间隔30秒","time":"2026-01-02 10:23:21"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-02 10:23:52"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-02 10:24:12"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-02 10:24:22"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-02 10:24:52"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-02 10:25:22"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-02 10:25:42"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-02 10:25:52"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-02 10:25:57"}
+{"event":"system_startup","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:87","func":"Tech/common.InitLogger","level":"info","msg":"SCADA培训系统启动","pid":28524,"time":"2026-01-02 21:36:05"}
+{"event":"system_startup","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:87","func":"Tech/common.InitLogger","level":"info","msg":"SCADA培训系统启动","pid":28524,"time":"2026-01-02 21:36:05"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"数据库连接监控任务已启动,间隔10秒","time":"2026-01-02 21:36:05"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"日志系统初始化成功","time":"2026-01-02 21:36:05"}
+{"action":"cache_init","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:333","func":"Tech/common.LogInfo","level":"info","module":"user","msg":"开始初始化用户信息缓存...","time":"2026-01-02 21:36:05"}
+{"action":"cache_init_complete","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:333","func":"Tech/common.LogInfo","level":"info","module":"user","msg":"用户信息缓存初始化完成","time":"2026-01-02 21:36:11","user_count":3574}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"心跳发送任务已启动,间隔30秒","time":"2026-01-02 21:36:11"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"电调数据定时获取任务已启动,间隔 5 秒","time":"2026-01-02 21:36:11"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"SCADA培训系统服务启动中...","time":"2026-01-02 21:36:11"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"电调服务响应中没有data字段","time":"2026-01-02 21:36:37"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"电调服务响应中没有data字段","time":"2026-01-02 21:36:38"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-02 21:36:45"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"电调服务响应中没有data字段","time":"2026-01-02 21:36:49"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"电调服务响应中没有data字段","time":"2026-01-02 21:36:50"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"电调服务响应中没有data字段","time":"2026-01-02 21:36:52"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"电调服务响应中没有data字段","time":"2026-01-02 21:36:57"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"电调服务响应中没有data字段","time":"2026-01-02 21:37:02"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"电调服务响应中没有data字段","time":"2026-01-02 21:37:07"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-02 21:37:12"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"电调服务响应中没有data字段","time":"2026-01-02 21:37:12"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-02 21:37:17"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"电调服务响应中没有data字段","time":"2026-01-02 21:37:22"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"电调服务响应中没有data字段","time":"2026-01-02 21:37:27"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-02 21:37:32"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"电调服务响应中没有data字段","time":"2026-01-02 21:37:37"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-02 21:37:42"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"电调服务响应中没有data字段","time":"2026-01-02 21:37:42"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"电调服务响应中没有data字段","time":"2026-01-02 21:37:47"}
+{"error":"Post \"http://124.222.28.5:7314/ServerCtrl/AllEqpmtList\": EOF","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"调用电调服务获取所有设备列表接口失败","time":"2026-01-02 21:37:52"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:375","func":"Tech/common.LogError","level":"error","msg":"电调服务响应中没有data字段","time":"2026-01-02 21:37:57"}

+ 85 - 0
Tech/log/info.log

@@ -231,3 +231,88 @@
 {"level":"info","msg":"成功发送心跳到信息化服务器","time":"2025-12-28 19:21:26"}
 {"level":"info","msg":"成功发送心跳到信息化服务器","time":"2025-12-28 19:21:56"}
 {"level":"info","msg":"成功发送心跳到信息化服务器","time":"2025-12-28 19:22:26"}
+{"level":"info","msg":"日志系统初始化成功","time":"2026-01-01 20:49:27"}
+{"level":"info","msg":"数据库连接监控任务已启动,间隔10秒","time":"2026-01-01 20:49:27"}
+{"action":"cache_init","level":"info","module":"user","msg":"开始初始化用户信息缓存...","time":"2026-01-01 20:49:27"}
+{"action":"cache_init_complete","level":"info","module":"user","msg":"用户信息缓存初始化完成","time":"2026-01-01 20:49:29","user_count":3574}
+{"level":"info","msg":"心跳发送任务已启动,间隔30秒","time":"2026-01-01 20:49:29"}
+{"level":"info","msg":"电调数据定时获取任务已启动,间隔 5 秒","time":"2026-01-01 20:49:29"}
+{"level":"info","msg":"SCADA培训系统服务启动中...","time":"2026-01-01 20:49:29"}
+{"level":"info","msg":"日志系统初始化成功","time":"2026-01-01 20:49:51"}
+{"level":"info","msg":"数据库连接监控任务已启动,间隔10秒","time":"2026-01-01 20:49:51"}
+{"action":"cache_init","level":"info","module":"user","msg":"开始初始化用户信息缓存...","time":"2026-01-01 20:49:51"}
+{"action":"cache_init_complete","level":"info","module":"user","msg":"用户信息缓存初始化完成","time":"2026-01-01 20:49:56","user_count":3574}
+{"level":"info","msg":"心跳发送任务已启动,间隔30秒","time":"2026-01-01 20:49:56"}
+{"level":"info","msg":"电调数据定时获取任务已启动,间隔 5 秒","time":"2026-01-01 20:49:56"}
+{"level":"info","msg":"SCADA培训系统服务启动中...","time":"2026-01-01 20:49:56"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:50:27"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:50:57"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:51:27"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:51:57"}
+{"level":"info","msg":"数据库连接监控任务已启动,间隔10秒","time":"2026-01-01 20:52:36"}
+{"level":"info","msg":"日志系统初始化成功","time":"2026-01-01 20:52:36"}
+{"action":"cache_init","level":"info","module":"user","msg":"开始初始化用户信息缓存...","time":"2026-01-01 20:52:36"}
+{"action":"cache_init_complete","level":"info","module":"user","msg":"用户信息缓存初始化完成","time":"2026-01-01 20:52:43","user_count":3574}
+{"level":"info","msg":"电调数据定时获取任务已启动,间隔 5 秒","time":"2026-01-01 20:52:43"}
+{"level":"info","msg":"心跳发送任务已启动,间隔30秒","time":"2026-01-01 20:52:43"}
+{"level":"info","msg":"SCADA培训系统服务启动中...","time":"2026-01-01 20:52:43"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:53:13"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:53:43"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:54:13"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:54:43"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:55:13"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:55:47"}
+{"level":"info","msg":"数据库连接监控任务已启动,间隔10秒","time":"2026-01-01 20:55:53"}
+{"level":"info","msg":"日志系统初始化成功","time":"2026-01-01 20:55:53"}
+{"action":"cache_init","level":"info","module":"user","msg":"开始初始化用户信息缓存...","time":"2026-01-01 20:55:53"}
+{"action":"cache_init_complete","level":"info","module":"user","msg":"用户信息缓存初始化完成","time":"2026-01-01 20:56:00","user_count":3574}
+{"level":"info","msg":"电调数据定时获取任务已启动,间隔 5 秒","time":"2026-01-01 20:56:00"}
+{"level":"info","msg":"SCADA培训系统服务启动中...","time":"2026-01-01 20:56:00"}
+{"level":"info","msg":"心跳发送任务已启动,间隔30秒","time":"2026-01-01 20:56:00"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:56:30"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 20:57:00"}
+{"level":"info","msg":"日志系统初始化成功","time":"2026-01-01 22:59:04"}
+{"level":"info","msg":"数据库连接监控任务已启动,间隔10秒","time":"2026-01-01 22:59:04"}
+{"action":"cache_init","level":"info","module":"user","msg":"开始初始化用户信息缓存...","time":"2026-01-01 22:59:04"}
+{"action":"cache_init_complete","level":"info","module":"user","msg":"用户信息缓存初始化完成","time":"2026-01-01 22:59:10","user_count":3574}
+{"level":"info","msg":"电调数据定时获取任务已启动,间隔 5 秒","time":"2026-01-01 22:59:10"}
+{"level":"info","msg":"SCADA培训系统服务启动中...","time":"2026-01-01 22:59:10"}
+{"level":"info","msg":"心跳发送任务已启动,间隔30秒","time":"2026-01-01 22:59:10"}
+{"level":"info","msg":"接收到关闭信号,正在优雅关闭服务...","time":"2026-01-01 22:59:21"}
+{"level":"info","msg":"日志系统初始化成功","time":"2026-01-01 23:03:06"}
+{"level":"info","msg":"数据库连接监控任务已启动,间隔10秒","time":"2026-01-01 23:03:06"}
+{"action":"cache_init","level":"info","module":"user","msg":"开始初始化用户信息缓存...","time":"2026-01-01 23:03:06"}
+{"action":"cache_init_complete","level":"info","module":"user","msg":"用户信息缓存初始化完成","time":"2026-01-01 23:03:14","user_count":3574}
+{"level":"info","msg":"电调数据定时获取任务已启动,间隔 5 秒","time":"2026-01-01 23:03:14"}
+{"level":"info","msg":"心跳发送任务已启动,间隔30秒","time":"2026-01-01 23:03:14"}
+{"level":"info","msg":"SCADA培训系统服务启动中...","time":"2026-01-01 23:03:14"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 23:03:44"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 23:04:14"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 23:04:44"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 23:05:14"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 23:05:44"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 23:06:14"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-01 23:06:44"}
+{"level":"info","msg":"接收到关闭信号,正在优雅关闭服务...","time":"2026-01-01 23:06:50"}
+{"level":"info","msg":"日志系统初始化成功","time":"2026-01-02 10:23:13"}
+{"level":"info","msg":"数据库连接监控任务已启动,间隔10秒","time":"2026-01-02 10:23:13"}
+{"action":"cache_init","level":"info","module":"user","msg":"开始初始化用户信息缓存...","time":"2026-01-02 10:23:13"}
+{"action":"cache_init_complete","level":"info","module":"user","msg":"用户信息缓存初始化完成","time":"2026-01-02 10:23:21","user_count":3574}
+{"level":"info","msg":"电调数据定时获取任务已启动,间隔 5 秒","time":"2026-01-02 10:23:21"}
+{"level":"info","msg":"SCADA培训系统服务启动中...","time":"2026-01-02 10:23:21"}
+{"level":"info","msg":"心跳发送任务已启动,间隔30秒","time":"2026-01-02 10:23:21"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-02 10:23:52"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-02 10:24:22"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-02 10:24:52"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-02 10:25:22"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-02 10:25:52"}
+{"level":"info","msg":"数据库连接监控任务已启动,间隔10秒","time":"2026-01-02 21:36:05"}
+{"level":"info","msg":"日志系统初始化成功","time":"2026-01-02 21:36:05"}
+{"action":"cache_init","level":"info","module":"user","msg":"开始初始化用户信息缓存...","time":"2026-01-02 21:36:05"}
+{"action":"cache_init_complete","level":"info","module":"user","msg":"用户信息缓存初始化完成","time":"2026-01-02 21:36:11","user_count":3574}
+{"level":"info","msg":"心跳发送任务已启动,间隔30秒","time":"2026-01-02 21:36:11"}
+{"level":"info","msg":"电调数据定时获取任务已启动,间隔 5 秒","time":"2026-01-02 21:36:11"}
+{"level":"info","msg":"SCADA培训系统服务启动中...","time":"2026-01-02 21:36:11"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-02 21:36:45"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-02 21:37:12"}
+{"level":"info","msg":"成功发送心跳到信息化服务器","time":"2026-01-02 21:37:42"}

+ 1 - 0
Tech/models/教员模型.go

@@ -237,6 +237,7 @@ type CourseOperLog struct {
 	RunLogID    int     `orm:"column(运行记录编号);pk;" json:"runLogID"`
 	RunCourseID int     `orm:"column(运行课程ID)" json:"runCourseID"`
 	RunOperID   int     `orm:"column(运行操作ID)" json:"runOperID"`
+	TemplateID  int     `orm:"column(操作模板ID)" json:"templateID"`
 	OperName    string  `orm:"column(操作名称);type(text)" json:"operName"`
 	OperTime    int     `orm:"column(操作时间)" json:"operTime"`
 	OperScore   float64 `orm:"column(操作得分)" json:"operScore"`

Fichier diff supprimé car celui-ci est trop grand
+ 5771 - 0
发布/CCGD_project.sql


+ 46 - 0
发布/conf/app.conf

@@ -0,0 +1,46 @@
+appname = Tech
+httpport = 8080
+runmode = dev
+
+
+copyrequestbody = true
+
+# 电调服务IP和端口
+ElectricalIP = 124.222.28.5
+ElectricalPort = 7314
+
+# 数据库配置
+DB.Adapter = mysql
+# DB.URL = dbadmin:dbadmin@987@(124.222.28.5:7312)/CCGD_project?charset=utf8
+DB.URL = root:wl110@(127.0.0.1:3306)/ccgd_project?charset=utf8
+
+# 信息化服务器和地址
+ESYSIP = 124.222.28.5
+ESYSPort = 7321
+
+# 信息化请求的TOKEN
+SYSTOKEN = 6000-0009-8720-2301
+# 设备号
+SYSDEVICEID = M0026
+
+SYSCLLX = 牵引变电实训室
+SYSSYCX = 牵引变电实训系统
+
+# 配电实训设备-设备号:M0007 token:6000-0009-8720-2301
+# 牵引变电实训设备-设备号:M0026 token:6000-0009-8720-2301
+
+
+maxmemory = 32 << 20  # 32MB
+maxUploadSize = 32 << 20  # 10MB
+
+
+EGetAllDataInterval = 10 #电调获取全量数据的间隔时间
+
+
+# HTTPS配置
+EnableHTTPS = true
+EnableHttpTLS = true  
+HTTPSPort = 8443
+HTTPSCertFile = "conf/server.crt"
+HTTPSKeyFile = "conf/server.key"
+

+ 23 - 0
发布/conf/server.crt

@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIIDxzCCAq+gAwIBAgIUUi7k+1mGVeA9uxvb6/FJ/La7MdkwDQYJKoZIhvcNAQEL
+BQAwczELMAkGA1UEBhMCTVkxCzAJBgNVBAgMAk1ZMQswCQYDVQQHDAJNWTELMAkG
+A1UECgwCTVkxCzAJBgNVBAsMAk1ZMRUwEwYDVQQDDAwxMjQuMjIyLjI4LjUxGTAX
+BgkqhkiG9w0BCQEWCmFiY0BxcS5jb20wHhcNMjUxMTA3MDU0MzQ3WhcNMzUxMTA1
+MDU0MzQ3WjBzMQswCQYDVQQGEwJNWTELMAkGA1UECAwCTVkxCzAJBgNVBAcMAk1Z
+MQswCQYDVQQKDAJNWTELMAkGA1UECwwCTVkxFTATBgNVBAMMDDEyNC4yMjIuMjgu
+NTEZMBcGCSqGSIb3DQEJARYKYWJjQHFxLmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD
+ggEPADCCAQoCggEBALVHPSa1EAX5+gwlkKGLv4Zrc/vpRsxoBJIo6mibjNDciVyb
+XhFvWLEOXBlbKEwc360jfGhNEFssy7K9HqLSDZKgTly9k9tw3vOmffSUw2bRokpb
+JE3OG91GQLloTm1hd/XpWtNbKkTrKjwZ90GTNDqbJyp36EPRRjqy7X5ktu9vGAst
+REiCjErWiAZYHp6kgkY03S75ARktQkrRadJBtOkMvEghdeQNP47Ce+yI5kZpO2jJ
+RugyGQpA0mI9WS8WGO+3Fcgn3nCzhCI0t90FZa6cFhHgurY0i6GvfWrOEhb9fiNg
+LqcmgHj6Mn/EIq+FGWheW/g0ijm0MS4YiQDQSxMCAwEAAaNTMFEwHQYDVR0OBBYE
+FBiHjjehnUvKodN8Q7VsvGB7+F6eMB8GA1UdIwQYMBaAFBiHjjehnUvKodN8Q7Vs
+vGB7+F6eMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAChgnjr3
+DbbJQRvL/0RO6Bd5i47WxPsWegc7djrznCgTLTSe5sjdYqa7ZlcKeILLSdo53i2Z
+QFMnZIhonvp3FkMgR0LxRldBhnTXJBachVp7Xqw8fil8ig+Iq/AWJSPTSWi5Z2x1
+wWJDtY1tS7WEhBO+aHKo7JfwpL0pYPbnc+nzX3pAKlhbAEcNzcxu0W4JM4b3QIij
+pmQ8555s8KpWW7qpj74FM+vbGWCYkQdrETOOA0r+X9GwE+riWE2NtkpntUf1oqsA
+Qsr2rgJ+RX2WaKJ+AnqgKpWKG63CY3xUwSwj+zTVBWxC0AETGhfGvefuWZ1e2W9a
+MwWjDikVim/tIeA=
+-----END CERTIFICATE-----

+ 28 - 0
发布/conf/server.key

@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC1Rz0mtRAF+foM
+JZChi7+Ga3P76UbMaASSKOpom4zQ3Ilcm14Rb1ixDlwZWyhMHN+tI3xoTRBbLMuy
+vR6i0g2SoE5cvZPbcN7zpn30lMNm0aJKWyRNzhvdRkC5aE5tYXf16VrTWypE6yo8
+GfdBkzQ6mycqd+hD0UY6su1+ZLbvbxgLLURIgoxK1ogGWB6epIJGNN0u+QEZLUJK
+0WnSQbTpDLxIIXXkDT+OwnvsiOZGaTtoyUboMhkKQNJiPVkvFhjvtxXIJ95ws4Qi
+NLfdBWWunBYR4Lq2NIuhr31qzhIW/X4jYC6nJoB4+jJ/xCKvhRloXlv4NIo5tDEu
+GIkA0EsTAgMBAAECggEAVa1GTymLWa/EiQImIdv5WPAnQLwH3Ksa4fOZmnhOLRbW
+iyDZbFcabZBSYh+N469P3jZj4a3umZEJ8z/kH2M0zASdFML7A1+M2E5rwHGhCtLw
+p8D83xMXY1UFWTvduV+0QVMZvMQdLbaR3xcMn/8RU9Opxq4mZgsebLbNfYvfVDj5
+4WlZCPNLmcyf+L59cV+S4yP9QuytjrehBgVQnzWVqh0EERhiKrZxLNN02UG1QKEc
+JsQYRxfPRInDwZPKAtFmCtPXO8hQkaegDHp3VY/I9tuBoElBxt9ceMUk3UlFR4n/
+6RSxg3exUyu8VNdOVbO2My/B8VjXmoHqFyDqq2Uv3QKBgQDy/LJraD/RUQU3zjJw
+KUe3jLRns9+ZMyJwbySoXKSOlbfve2B4ghMpL3+8HEdd33Q1N/McZBzM3V2w27dx
+suPt2/eEEPWaZWArx3CgXrQE//U5F4BUM+Y58y3+DrTsIyLLW0rsYHYM9OFwYrkz
+cFhyX1I1LLQSW9zNIxTFoYb91wKBgQC+/IbV9t3Q46yYLrzrLWmd5wm/UvDWghTS
+h8vLECC+cE1fXjQWleuw4JvgSM18XaGhH/p1+xnDATHcD4RVS5yZpp/JQjPjDmtN
+pHaxYG5f7c/oGaGQcJGCcoj40h1/yPDZPt5yDt/78wkUbT1bZpS2SOw9ZgHH2utq
+bnDhts3dJQKBgG6JH80Whnl85ufFCFLXpIVOH79RJzV0+oS1OrLQOheW6i6qLG+F
+lJvWvL/hCWIdxap0Akb3D9buGLHcsa2qWF+bAhT09hU/aqlft89sZW4k1fQbycgE
+OAZCprh9DjahoTFrHUE8fFdWirtqXZ+VytZ0oFwKMvxrB53WCJwC5/rPAoGAOfaG
+LZXYyDbxANbeezmzHjsqWCih81hTXXndPenNJj8LHHCIunoRqALjC/TMeHwqO65q
+4zesH+TS7wi+jux9wJwzTm+LM9QCePP7GeY8WVzhhn2Q7Tdc0gxUyb9rOIcRob1U
+4aTmEZ83GD33KzA83f3PxOqai79DR2/xTm+elwkCgYB0HbM3+F/K6jw8cJPJTVcJ
+MN/f1VwW9HcreWDvW3m2sHiNDcw1OJDG2qHx+hQkzpNWrpnbXgzME7WLdOVhS0Ra
+I3mKC56YqzjwVDRMBT4WkspPR5dG97oqfXZ4pzr8gj7SpSM0CdW1L/U59SfMLFZQ
+sy4T1QmUy8qnY9GYFgWv5w==
+-----END PRIVATE KEY-----

+ 25 - 0
发布/frpc.toml

@@ -0,0 +1,25 @@
+serverAddr = "124.222.28.5"
+serverPort = 7000
+
+[[proxies]]
+name = "test-tcp-winaaa-8527_2"
+type = "tcp"
+localIP = "127.0.0.1"
+localPort = 3306
+remotePort = 7322
+
+[[proxies]]
+name = "test-tcp-winaaa-7070_2"
+type = "tcp"
+localIP = "127.0.0.1"
+localPort = 7070
+remotePort = 7323
+
+
+[[proxies]]
+name = "test-tcp-winaaa-6090_2"
+type = "tcp"
+localIP = "127.0.0.1"
+localPort = 6090
+remotePort = 7324
+

+ 10 - 0
发布/log/app.log

@@ -0,0 +1,10 @@
+{"event":"system_startup","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:87","func":"Tech/common.InitLogger","level":"info","msg":"SCADA培训系统启动","pid":37712,"time":"2025-12-28 21:55:12"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"日志系统初始化成功","time":"2025-12-28 21:55:12"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"数据库连接监控任务已启动,间隔10秒","time":"2025-12-28 21:55:12"}
+{"action":"cache_init","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:333","func":"Tech/common.LogInfo","level":"info","module":"user","msg":"开始初始化用户信息缓存...","time":"2025-12-28 21:55:12"}
+{"action":"cache_init_complete","file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:333","func":"Tech/common.LogInfo","level":"info","module":"user","msg":"用户信息缓存初始化完成","time":"2025-12-28 21:55:15","user_count":3574}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"心跳发送任务已启动,间隔30秒","time":"2025-12-28 21:55:15"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"电调数据定时获取任务已启动,间隔 5 秒","time":"2025-12-28 21:55:15"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"SCADA培训系统服务启动中...","time":"2025-12-28 21:55:15"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:337","func":"Tech/common.LogInfo","level":"info","msg":"接收到关闭信号,正在优雅关闭服务...","time":"2025-12-28 21:55:23"}
+{"file":"D:/Work/教员/SCADATrainSys/Tech/common/logger.go:559","func":"Tech/common.CloseLogger","level":"info","msg":"SCADA培训系统关闭","time":"2025-12-28 21:55:23"}

+ 8 - 0
发布/log/info.log

@@ -0,0 +1,8 @@
+{"level":"info","msg":"日志系统初始化成功","time":"2025-12-28 21:55:12"}
+{"level":"info","msg":"数据库连接监控任务已启动,间隔10秒","time":"2025-12-28 21:55:12"}
+{"action":"cache_init","level":"info","module":"user","msg":"开始初始化用户信息缓存...","time":"2025-12-28 21:55:12"}
+{"action":"cache_init_complete","level":"info","module":"user","msg":"用户信息缓存初始化完成","time":"2025-12-28 21:55:15","user_count":3574}
+{"level":"info","msg":"心跳发送任务已启动,间隔30秒","time":"2025-12-28 21:55:15"}
+{"level":"info","msg":"电调数据定时获取任务已启动,间隔 5 秒","time":"2025-12-28 21:55:15"}
+{"level":"info","msg":"SCADA培训系统服务启动中...","time":"2025-12-28 21:55:15"}
+{"level":"info","msg":"接收到关闭信号,正在优雅关闭服务...","time":"2025-12-28 21:55:23"}

+ 249 - 0
发布/static/equipment_monitor.html

@@ -0,0 +1,249 @@
+<!DOCTYPE html>
+<html lang="zh-CN">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>设备监控</title>
+    <style>
+        body {
+            font-family: Arial, sans-serif;
+            margin: 20px;
+            background-color: #f5f5f5;
+        }
+        .container {
+            max-width: 1400px;
+            margin: 0 auto;
+            background-color: white;
+            padding: 20px;
+            border-radius: 8px;
+            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
+        }
+        .header {
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            margin-bottom: 20px;
+            padding-bottom: 20px;
+            border-bottom: 2px solid #007bff;
+        }
+        .status {
+            display: inline-block;
+            padding: 5px 15px;
+            border-radius: 4px;
+            font-weight: bold;
+        }
+        .status.connected {
+            background-color: #28a745;
+            color: white;
+        }
+        .status.disconnected {
+            background-color: #dc3545;
+            color: white;
+        }
+        .equipment-grid {
+            display: grid;
+            grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
+            gap: 15px;
+        }
+        .equipment-card {
+            background-color: #f9f9f9;
+            border: 2px solid #ddd;
+            border-radius: 8px;
+            padding: 15px;
+            transition: all 0.3s ease;
+        }
+        .equipment-card.changed {
+            background-color: #fff3cd;
+            border-color: #ffc107;
+            transform: scale(1.05);
+        }
+        .equipment-name {
+            font-size: 14px;
+            color: #666;
+            margin-bottom: 10px;
+        }
+        .equipment-value {
+            font-size: 24px;
+            font-weight: bold;
+            color: #007bff;
+            margin-bottom: 5px;
+        }
+        .equipment-id {
+            font-size: 12px;
+            color: #999;
+        }
+        .info-bar {
+            display: flex;
+            gap: 30px;
+            margin-bottom: 20px;
+            padding: 10px;
+            background-color: #e9ecef;
+            border-radius: 4px;
+        }
+        .info-item {
+            display: flex;
+            flex-direction: column;
+        }
+        .info-label {
+            font-size: 12px;
+            color: #666;
+        }
+        .info-value {
+            font-size: 18px;
+            font-weight: bold;
+            color: #007bff;
+        }
+    </style>
+</head>
+<body>
+    <div class="container">
+        <div class="header">
+            <h1>实时设备监控系统</h1>
+            <div id="status" class="status disconnected">未连接</div>
+        </div>
+
+        <div class="info-bar">
+            <div class="info-item">
+                <span class="info-label">设备数量</span>
+                <span class="info-value" id="equipmentCount">0</span>
+            </div>
+            <div class="info-item">
+                <span class="info-label">线路号</span>
+                <span class="info-value" id="lineID">0</span>
+            </div>
+            <div class="info-item">
+                <span class="info-label">最后更新</span>
+                <span class="info-value" id="lastUpdate">-</span>
+            </div>
+        </div>
+
+        <div id="equipmentGrid" class="equipment-grid"></div>
+    </div>
+
+    <script>
+        let ws = null;
+        let equipmentData = {};
+
+        function connect() {
+            const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
+            const host = window.location.host;
+            const url = `${protocol}//${host}/ws/equipment`;
+
+            console.log('正在连接到WebSocket:', url);
+
+            ws = new WebSocket(url);
+
+            ws.onopen = function(event) {
+                console.log('WebSocket连接成功');
+                updateStatus(true);
+            };
+
+        ws.onmessage = function(event) {
+            try {
+                const message = JSON.parse(event.data);
+
+                if (message.event === 'connected') {
+                    console.log('已连接,客户端ID:', message.data.clientID);
+                    document.getElementById('lineID').textContent = message.data.lineID || 0;
+                } else if (Array.isArray(message)) {
+                    // 直接处理设备数组
+                    console.log('收到设备数据,数量:', message.length);
+                    updateEquipmentList(message);
+                    document.getElementById('equipmentCount').textContent = message.length;
+                    document.getElementById('lastUpdate').textContent = new Date().toLocaleTimeString();
+                }
+            } catch (e) {
+                console.error('解析消息失败:', e);
+            }
+        };
+
+            ws.onerror = function(error) {
+                console.error('WebSocket错误:', error);
+            };
+
+            ws.onclose = function(event) {
+                console.log('WebSocket连接已关闭');
+                updateStatus(false);
+                // 自动重连
+                setTimeout(connect, 3000);
+            };
+        }
+
+        function updateStatus(connected) {
+            const statusDiv = document.getElementById('status');
+            if (connected) {
+                statusDiv.className = 'status connected';
+                statusDiv.textContent = '已连接';
+            } else {
+                statusDiv.className = 'status disconnected';
+                statusDiv.textContent = '未连接';
+            }
+        }
+
+        function updateEquipmentList(equipments) {
+            const container = document.getElementById('equipmentGrid');
+
+            // 标记现有设备
+            const existingElements = {};
+            container.querySelectorAll('.equipment-card').forEach(element => {
+                existingElements[element.dataset.id] = element;
+            });
+
+            // 更新或添加设备
+            equipments.forEach(equip => {
+                let element = existingElements[equip.id];
+                const oldValue = equipmentData[equip.id];
+
+                // 检查值是否变化
+                const valueChanged = oldValue !== undefined && oldValue !== equip.value;
+
+                if (element) {
+                    // 更新现有设备
+                    const valueElement = element.querySelector('.equipment-value');
+                    valueElement.textContent = equip.value;
+
+                    if (valueChanged) {
+                        element.classList.add('changed');
+                        setTimeout(() => {
+                            element.classList.remove('changed');
+                        }, 1000);
+                    }
+
+                    // 移除已处理标记
+                    delete existingElements[equip.id];
+                } else {
+                    // 添加新设备
+                    element = document.createElement('div');
+                    element.className = 'equipment-card changed';
+                    element.dataset.id = equip.id;
+                    element.innerHTML = `
+                        <div class="equipment-name">${equip.dataName}</div>
+                        <div class="equipment-value">${equip.value}</div>
+                        <div class="equipment-id">ID: ${equip.dataId}</div>
+                    `;
+                    container.appendChild(element);
+
+                    setTimeout(() => {
+                        element.classList.remove('changed');
+                    }, 1000);
+                }
+
+                // 更新数据缓存
+                equipmentData[equip.id] = equip.value;
+            });
+
+            // 移除不存在的设备
+            Object.values(existingElements).forEach(element => {
+                element.remove();
+                const id = element.dataset.id;
+                delete equipmentData[id];
+            });
+        }
+
+        // 页面加载时自动连接
+        window.onload = function() {
+            connect();
+        };
+    </script>
+</body>
+</html>

BIN
发布/static/fonts/NotoSansSC-Regular.ttf


BIN
发布/static/fonts/arial.ttf


+ 1 - 0
发布/static/js/reload.min.js

@@ -0,0 +1 @@
+function b(a){var c=new WebSocket(a);c.onclose=function(){setTimeout(function(){b(a)},2E3)};c.onmessage=function(){location.reload()}}try{if(window.WebSocket)try{b("ws://localhost:12450/reload")}catch(a){console.error(a)}else console.log("Your browser does not support WebSockets.")}catch(a){console.error("Exception during connecting to Reload:",a)};

BIN
发布/static/testStatus.json


Fichier diff supprimé car celui-ci est trop grand
+ 16491 - 0
发布/static/upload/1/2/供电实训教员系统、场景编辑系统、故障管理系统、评价系统需求说明书.doc


Fichier diff supprimé car celui-ci est trop grand
+ 16491 - 0
发布/static/upload/1/供电实训教员系统、场景编辑系统、故障管理系统、评价系统需求说明书.doc


BIN
发布/static/upload/1759584234_


+ 657 - 0
发布/static/upload/1759584234_根据UI重新定义课程表结构汇总.docx

@@ -0,0 +1,657 @@
+表汇总
+--------------------------------------------------------------------------------
+表名
+                                 功能说明
+--------------------------------------------------------------------------------
+CourseType
+课程分类表
+--------------------------------------------------------------------------------
+CourseInfo
+课程数据表:主要存储课程数据
+--------------------------------------------------------------------------------
+CourseActionNode
+课程节点:主要存储基础节点信息(所属角色)
+--------------------------------------------------------------------------------
+CourseOperationNode
+课程操作类型节点
+--------------------------------------------------------------------------------
+CourseFaultNode
+课程故障类型节点
+--------------------------------------------------------------------------------
+CourseVoiceNode
+课程语音节点
+--------------------------------------------------------------------------------
+CourseNodeTrigger
+课程节点触发条件
+--------------------------------------------------------------------------------
+TemplateOperation
+操作类模板
+--------------------------------------------------------------------------------
+TemplateFault
+故障类模板
+--------------------------------------------------------------------------------
+TemplateVoice
+语音类模板
+--------------------------------------------------------------------------------
+NodePicPath
+节点图片数据
+--------------------------------------------------------------------------------
+CourseRunLog
+课程运行记录
+--------------------------------------------------------------------------------
+CourseOperLog
+课程操作记录
+--------------------------------------------------------------------------------
+SystemLink
+系统链接目标
+--------------------------------------------------------------------------------
+RoleInfo
+角色数据表:主要存储角色信息
+--------------------------------------------------------------------------------
+UserData
+用户信息所属信息表:主要存储用户个人信息用户密码等数据
+--------------------------------------------------------------------------------
+UserType
+用户分类信息表:主要存储用户的分类数据
+
+1.0.1. 表CourseType
+--------------------------------------------------------------------------------
+表名
+CourseType
+                                   字段名
+                        数据类型(精度范围)
+                                 字段说明
+分类ID
+int
+分类项ID
+分类名称
+Text
+分类名称
+父类ID
+int
+
+类型参数
+int
+
+--------------------------------------------------------------------------------
+补充说明
+
+
+2.0.2. 表CourseInfo
+--------------------------------------------------------------------------------
+表名
+CourseType
+                                   字段名
+                        数据类型(精度范围)
+                                 字段说明
+课程ID
+int
+
+课程GUID
+Text
+
+课程名称
+Text
+
+分类ID
+int
+
+外部分类ID
+int
+
+虚拟起始时间
+int
+
+课程总时长
+Int
+
+线路号
+Int
+
+运行图
+Int
+
+课程描述
+Text
+
+创建人
+Text
+
+创建时间
+Text
+
+修改时间
+Text
+
+流程数据
+Text
+
+--------------------------------------------------------------------------------
+补充说明
+
+3.0.3. 表CourseActionNode
+--------------------------------------------------------------------------------
+表名
+CourseActionNode
+                                   字段名
+                        数据类型(精度范围)
+                                 字段说明
+课程ID
+int
+
+节点ID
+int
+
+节点名称
+Text
+
+节点类型
+int
+
+父节点
+Text
+
+子节点
+Text
+
+绑定角色
+Int
+映射角色数据表
+节点详细信息
+Text
+
+延时跳过
+int
+
+失格项
+int
+
+节点接入与或关系
+Int
+0无关系1或关系2与关系
+指导描述
+Text
+
+指导文件地址
+Text
+
+虚拟操作
+Int
+1虚拟角色0真实角色
+--------------------------------------------------------------------------------
+补充说明
+
+4.0.4. 表CourseOperationNode
+--------------------------------------------------------------------------------
+表名
+CourseOperationNode
+                                   字段名
+                        数据类型(精度范围)
+                                 字段说明
+课程ID
+int
+映射课程表
+节点ID
+int
+映射节点表
+模板号
+int
+
+文本参数1
+Text
+
+文本参数2
+Text
+
+文本参数3
+Text
+
+文本参数4
+Text
+
+文本参数5
+Text
+
+赋分
+Int
+
+失分
+Int
+
+--------------------------------------------------------------------------------
+补充说明
+
+5.0.5. 表CourseFaultNode
+--------------------------------------------------------------------------------
+表名
+CourseFaultNode
+                                   字段名
+                        数据类型(精度范围)
+                                 字段说明
+课程ID
+int
+映射课程表
+节点ID
+int
+映射节点表
+模板号
+int
+
+文本参数1
+Text
+
+文本参数2
+Text
+
+文本参数3
+Text
+
+文本参数4
+Text
+
+文本参数5
+Text
+
+规则编号
+Int
+映射故障类型
+--------------------------------------------------------------------------------
+补充说明
+
+6.0.6. 表CourseVoiceNode
+--------------------------------------------------------------------------------
+表名
+CourseVoiceNode
+                                   字段名
+                        数据类型(精度范围)
+                                 字段说明
+课程ID
+int
+映射课程表
+节点ID
+Int
+映射节点表
+通讯角色目标
+int
+映射角色表
+语音内容
+Text
+
+评价内容
+Text
+(AAA,BBB);CCC 映射(AAA∪BBB)∩CCC
+--------------------------------------------------------------------------------
+补充说明
+
+7.0.7. 表CourseNodeTrigger
+--------------------------------------------------------------------------------
+表名
+CourseNodeTrigger
+                                   字段名
+                        数据类型(精度范围)
+                                 字段说明
+课程ID
+int
+映射课程表
+节点ID
+Int
+映射节点表
+触发方式
+int
+
+文本参数1
+Text
+
+文本参数2
+Text
+
+触发延时
+Int
+
+--------------------------------------------------------------------------------
+补充说明
+
+8.0.8. 表TemplateOperation
+--------------------------------------------------------------------------------
+表名
+TemplateOperation
+                                   字段名
+                        数据类型(精度范围)
+                                 字段说明
+模板ID
+Int
+
+分类
+Int
+
+分类名称
+Text
+
+子分类
+Int
+
+子分类名称
+Text
+
+操作模板名称
+Text
+
+操作模板类型
+Int
+
+参数1类型
+Int
+
+参数1说明
+Text
+
+参数2类型
+Int
+
+参数2说明
+Text
+
+参数31类型
+Int
+
+参数3说明
+Text
+
+参数4类型
+Int
+
+参数4说明
+Text
+
+参数5类型
+Int
+
+参数5说明
+Text
+
+--------------------------------------------------------------------------------
+补充说明
+
+9.0.9. 表TemplateFault
+--------------------------------------------------------------------------------
+表名
+TemplateFault
+                                   字段名
+                        数据类型(精度范围)
+                                 字段说明
+模板ID
+Int
+
+分类
+Int
+
+分类名称
+Text
+
+子分类
+Int
+
+子分类名称
+Text
+
+模板名称
+Text
+
+故障逻辑映射
+Int
+
+参数1类型
+Int
+
+参数1说明
+Text
+
+参数2类型
+Int
+
+参数2说明
+Text
+
+参数3类型
+Int
+
+参数3说明
+Text
+
+参数4类型
+Int
+
+参数4说明
+Text
+
+参数5类型
+Int
+
+参数5说明
+Text
+
+--------------------------------------------------------------------------------
+补充说明
+
+10.0.10. 表TemplateVoice
+--------------------------------------------------------------------------------
+表名
+TemplateVoice
+                                   字段名
+                        数据类型(精度范围)
+                                 字段说明
+模板ID
+Int
+
+分类
+Int
+
+分类名称
+Text
+
+子分类
+Int
+
+子分类名称
+Text
+
+模板名称
+Text
+
+语音内容
+Text
+
+评价模板
+Text
+
+--------------------------------------------------------------------------------
+补充说明
+
+11.0.11. 表NodePicPath
+--------------------------------------------------------------------------------
+表名
+NodePicPath
+                                   字段名
+                        数据类型(精度范围)
+                                 字段说明
+节点类型
+Int
+
+节点名称
+Text
+
+节点状态
+Int
+
+节点图片地址
+Text
+
+--------------------------------------------------------------------------------
+补充说明
+
+--------------------------------------------------------------------------------
+
+
+12.0.12. 表CourseRunLog
+--------------------------------------------------------------------------------
+表名
+CourseRunLog
+                                   字段名
+                        数据类型(精度范围)
+                                 字段说明
+运行记录编号
+Text
+
+运行课程ID
+Int
+
+运行课程名称
+Text
+
+运行日期时间
+Text
+
+课程用时
+Int
+
+课程得分
+Double
+
+
+
+
+--------------------------------------------------------------------------------
+补充说明
+
+13.0.13. 表CourseOperLog
+--------------------------------------------------------------------------------
+表名
+CourseOperLog
+                                   字段名
+                        数据类型(精度范围)
+                                 字段说明
+运行记录编号
+Text
+
+运行课程ID
+Int
+
+运行操作ID
+Text
+
+操作名称
+Text
+
+操作时间
+Int
+
+操作得分
+Double
+
+操作参数1
+Text
+
+操作参数2
+Text
+
+操作参数3
+Text
+
+操作参数4
+Text
+
+操作参数5
+Text
+
+--------------------------------------------------------------------------------
+补充说明
+
+14.0.14. 表SystemLink
+--------------------------------------------------------------------------------
+表名
+SystemLink
+                                   字段名
+                        数据类型(精度范围)
+                                 字段说明
+设备ID
+Int
+
+设备名称
+Int
+
+IP
+Text
+
+Port
+Text
+
+设备类型
+Int
+
+--------------------------------------------------------------------------------
+补充说明
+
+15.0.15. 表RoleInfo
+--------------------------------------------------------------------------------
+表名
+RoleInfo
+                                   字段名
+                        数据类型(精度范围)
+                                 字段说明
+角色ID
+Int
+
+角色名称
+Text
+
+角色类型
+Int
+
+角色数据
+Text
+
+--------------------------------------------------------------------------------
+补充说明
+
+16.0.16. 表UserData
+--------------------------------------------------------------------------------
+表名
+UserData
+                                   字段名
+                        数据类型(精度范围)
+                                 字段说明
+用户ID
+Int
+
+用户名称
+Text
+
+用户所属分组
+Int
+
+用户类型
+Int
+
+--------------------------------------------------------------------------------
+补充说明
+
+17.0.17. 表UserType
+--------------------------------------------------------------------------------
+表名
+UserType
+                                   字段名
+                        数据类型(精度范围)
+                                 字段说明
+分组ID
+Int
+
+分组名称
+Text
+
+父分组ID
+Int
+
+--------------------------------------------------------------------------------
+补充说明
+
+

Fichier diff supprimé car celui-ci est trop grand
+ 16491 - 0
发布/static/upload/供电实训教员系统、场景编辑系统、故障管理系统、评价系统需求说明书.doc


BIN
发布/views/apitest.tpl


+ 144 - 0
发布/views/index.html

@@ -0,0 +1,144 @@
+#pragma checksum "..\..\..\..\Pages\Recipe\Page_ImageShow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "B32FF5E6F151AA754C927F23E2AD68F94EED21D5"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     此代码由工具生成。
+//     运行时版本:4.0.30319.42000
+//
+//     对此文件的更改可能会导致不正确的行为,并且如果
+//     重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using HondaEngineApp.Pages.Recipe;
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Forms.Integration;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using Wpf.Ui;
+using Wpf.Ui.Controls;
+using Wpf.Ui.Converters;
+using Wpf.Ui.Markup;
+
+
+namespace HondaEngineApp.Pages.Recipe {
+    
+    
+    /// <summary>
+    /// Page_ImageShow
+    /// </summary>
+    public partial class Page_ImageShow : System.Windows.Controls.Page, System.Windows.Markup.IComponentConnector {
+        
+        
+        #line 45 "..\..\..\..\Pages\Recipe\Page_ImageShow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal Wpf.Ui.Controls.TextBox edt_FileName;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 73 "..\..\..\..\Pages\Recipe\Page_ImageShow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.Image RubberBandImageControl;
+        
+        #line default
+        #line hidden
+        
+        private bool _contentLoaded;
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.8.0")]
+        public void InitializeComponent() {
+            if (_contentLoaded) {
+                return;
+            }
+            _contentLoaded = true;
+            System.Uri resourceLocater = new System.Uri("/HondaEngineApp;component/pages/recipe/page_imageshow.xaml", System.UriKind.Relative);
+            
+            #line 1 "..\..\..\..\Pages\Recipe\Page_ImageShow.xaml"
+            System.Windows.Application.LoadComponent(this, resourceLocater);
+            
+            #line default
+            #line hidden
+        }
+        
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.8.0")]
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+        void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+            switch (connectionId)
+            {
+            case 1:
+            this.edt_FileName = ((Wpf.Ui.Controls.TextBox)(target));
+            return;
+            case 2:
+            
+            #line 47 "..\..\..\..\Pages\Recipe\Page_ImageShow.xaml"
+            ((Wpf.Ui.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.SelectIamgeFileName_Click);
+            
+            #line default
+            #line hidden
+            return;
+            case 3:
+            
+            #line 69 "..\..\..\..\Pages\Recipe\Page_ImageShow.xaml"
+            ((Wpf.Ui.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.SelectROI_Click);
+            
+            #line default
+            #line hidden
+            return;
+            case 4:
+            this.RubberBandImageControl = ((System.Windows.Controls.Image)(target));
+            
+            #line 73 "..\..\..\..\Pages\Recipe\Page_ImageShow.xaml"
+            this.RubberBandImageControl.PreviewMouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.RubberBandImageControl_PreviewMouseLeftButtonDown);
+            
+            #line default
+            #line hidden
+            
+            #line 73 "..\..\..\..\Pages\Recipe\Page_ImageShow.xaml"
+            this.RubberBandImageControl.PreviewMouseLeftButtonUp += new System.Windows.Input.MouseButtonEventHandler(this.RubberBandImageControl_PreviewMouseLeftButtonUp);
+            
+            #line default
+            #line hidden
+            
+            #line 73 "..\..\..\..\Pages\Recipe\Page_ImageShow.xaml"
+            this.RubberBandImageControl.MouseMove += new System.Windows.Input.MouseEventHandler(this.RubberBandImageControl_MouseMove);
+            
+            #line default
+            #line hidden
+            return;
+            case 5:
+            
+            #line 81 "..\..\..\..\Pages\Recipe\Page_ImageShow.xaml"
+            ((Wpf.Ui.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.Save_Click);
+            
+            #line default
+            #line hidden
+            return;
+            }
+            this._contentL

Fichier diff supprimé car celui-ci est trop grand
+ 200 - 0
发布/views/index.tpl