package svc import ( "database/sql" "log/slog" "bj_power_mes/ent" "bj_power_mes/internal/auth" "bj_power_mes/internal/config" "bj_power_mes/internal/db" "bj_power_mes/internal/plc" ) type ServiceContext struct { Config config.Config // 全局配置,解析yaml配置文件 TokenStore auth.TokenStore // 刷新令牌内存存储,登?刷新时读? EntClient *ent.Client // Ent ORM数据库客户端,操作工单等业务? DB *sql.DB // 原生SQL连接句柄,用于特殊原生SQL查询 PLCManager *plc.Manager // PLC管理器,统一管理PLC连接、信号读?} func NewServiceContext(c config.Config) *ServiceContext { // 令牌存储:使用内存实现,单进程无需 Redis tokenStore := auth.NewInMemoryTokenStore() slog.Info("svc: using in-memory token store") // 数据库连接成功,ent ORM 用于结构化查询,原生 SQL 用于复杂聚合 entClient, dbConn := db.MustNewDB(c.Database) // ── PLC 已连接,可下发工序号等指?── var plcManager *plc.Manager if c.Plc.Host != "" { plcManager = plc.Build(c.Plc) } else { slog.Warn("svc: PLC 未配置,跳过连接") } slog.Info("服务上下? 初始化完?) return &ServiceContext{ Config: c, TokenStore: tokenStore, EntClient: entClient, DB: dbConn, PLCManager: plcManager, } }