fix: rebuild MES as compilable go-zero+ent backend (renamed bj_power_mes), restore 3 workstation projects from pristine original, align naming; all Go projects go build clean

This commit is contained in:
SunYF
2026-08-27 10:56:41 +08:00
parent 380715f8a9
commit 371b494c54
523 changed files with 67923 additions and 24758 deletions
+78
View File
@@ -0,0 +1,78 @@
package robot
import (
"sync"
"time"
"bj_power_mes/internal/alarm"
"bj_power_mes/internal/sse"
"bj_power_mes/ent"
goplc "bjhardman.cn/bjhardman/goplc"
)
type Controller struct {
plcClient goplc.Client
entClient *ent.Client
sseHandler *sse.Handler
alarmSvc *alarm.Service
maxRetries int
checkSignalDuration time.Duration
mtx sync.Mutex
activity string // 当前持有锁的Action名称
waitingQueue []string // 等待队列
queueLock sync.Mutex // 保护等待队列的锁
}
func NewRobotController(plcClient goplc.Client, entClient *ent.Client, sseHandler *sse.Handler, alarmSvc *alarm.Service) *Controller {
return &Controller{
plcClient: plcClient,
entClient: entClient,
sseHandler: sseHandler,
alarmSvc: alarmSvc,
maxRetries: 3,
checkSignalDuration: 1 * time.Second,
}
}
func (c *Controller) Lock(activity string) {
c.queueLock.Lock()
c.waitingQueue = append(c.waitingQueue, activity)
c.queueLock.Unlock()
c.mtx.Lock()
c.queueLock.Lock()
defer c.queueLock.Unlock()
// 从等待队列移除
for i, name := range c.waitingQueue {
if name == activity {
c.waitingQueue = append(c.waitingQueue[:i], c.waitingQueue[i+1:]...)
break
}
}
c.activity = activity
}
func (c *Controller) UnLock() {
c.queueLock.Lock()
defer c.queueLock.Unlock()
c.activity = ""
c.mtx.Unlock()
}
// Status 获取当前锁状态
func (c *Controller) Status() (current string, queue []string) {
c.queueLock.Lock()
defer c.queueLock.Unlock()
return c.activity, append([]string(nil), c.waitingQueue...) // 返回副本
}
func (c *Controller) SetAction(activity string) {
c.activity = activity
}
func (c *Controller) ClearAction() {
c.activity = ""
}