Browse Source

Merge pull request '添加eods获取工位加工数据的websocket接口功能' (#345) from feature_portal into develop

Reviewed-on: http://101.201.121.115:3000/leo/LAPP_GAAS_GFrame_BACKEND/pulls/345
Reviewed-by: weichenglei <chenglei.wei@le-it.com.cn>
pull/346/head
weichenglei 3 years ago
parent
commit
22cdefdce1
5 changed files with 84 additions and 36 deletions
  1. +6
    -0
      global/global.go
  2. +7
    -0
      models/base/ws.go
  3. +49
    -36
      services/api/implments/Screw.service.impl.go
  4. +20
    -0
      web/controllers/ws/ws.go
  5. +2
    -0
      web/routes/routes.go

+ 6
- 0
global/global.go View File

@ -0,0 +1,6 @@
package global
import "LAPP_GAAS_GFrame_BACKEND/messaging"
// websocket的全局Context
var WebsocketContext *messaging.Contexts

+ 7
- 0
models/base/ws.go View File

@ -0,0 +1,7 @@
package base
const (
// websocket 属性
NAMESPACE_EODS = "EODS"
EVENT_STN_DATA = "STN_DATA"
)

+ 49
- 36
services/api/implments/Screw.service.impl.go View File

@ -3,11 +3,14 @@ package implments
import (
"LAPP_GAAS_GFrame_BACKEND/dao/pdc"
"LAPP_GAAS_GFrame_BACKEND/db"
"LAPP_GAAS_GFrame_BACKEND/global"
"LAPP_GAAS_GFrame_BACKEND/grmi"
"LAPP_GAAS_GFrame_BACKEND/infra/logger"
model "LAPP_GAAS_GFrame_BACKEND/models/api"
baseModel "LAPP_GAAS_GFrame_BACKEND/models/base"
"LAPP_GAAS_GFrame_BACKEND/web/models"
"encoding/json"
"errors"
"strconv"
)
@ -57,44 +60,54 @@ func (impl *ScrewServiceImplement) Receive(screw *model.Screw) (err error) {
return err
}
log.Info("SCREW Receive:" + string(recData))
// 全局变量初始化
model.ScrewGlobalArtId.Lock.Lock()
model.ScrewGlobalMap.Lock.Lock()
model.ScrewGlobalNewest.Lock.Lock()
defer func() {
model.ScrewGlobalArtId.Lock.Unlock()
model.ScrewGlobalMap.Lock.Unlock()
model.ScrewGlobalNewest.Lock.Unlock()
}()
if model.ScrewGlobalArtId.Map == nil {
model.ScrewGlobalArtId.Map = make(map[string]string)
}
if model.ScrewGlobalNewest.Map == nil {
model.ScrewGlobalNewest.Map = make(map[string]model.ScrewWithData)
conn := global.WebsocketContext.Get(screw.STN)
if conn == nil {
log.Error("该工位和程序未建立连接")
return errors.New("该工位和程序未建立连接")
}
if model.ScrewGlobalMap.Map == nil {
model.ScrewGlobalMap.Map = make(map[string]map[int]model.ScrewWithData)
}
// 给当前工作的最新screw data赋值
var screwWithData model.ScrewWithData
screwWithData.Screw = *screw
model.ScrewGlobalNewest.Map[screw.STN] = screwWithData
// 校验当前工位的零件号
preScrewPartNo, exist := model.ScrewGlobalArtId.Map[screw.STN]
if !exist {
model.ScrewGlobalArtId.Map[screw.STN] = screw.PARTNO
preScrewPartNo = screw.PARTNO
res := conn.Emit(baseModel.EVENT_STN_DATA, recData)
if !res {
log.Error("像前端发送工位数据失败")
}
// 初始化当前工位的全局map
_, exist = model.ScrewGlobalMap.Map[screw.STN]
if !exist {
model.ScrewGlobalMap.Map[screw.STN] = make(map[int]model.ScrewWithData)
}
if preScrewPartNo != screw.PARTNO {
model.ScrewGlobalMap.Map[screw.STN] = make(map[int]model.ScrewWithData)
}
model.ScrewGlobalMap.Map[screw.STN][screw.SCREW_POS] = screwWithData
model.ScrewGlobalArtId.Map[screw.STN] = screw.PARTNO
// 全局变量初始化
//model.ScrewGlobalArtId.Lock.Lock()
//model.ScrewGlobalMap.Lock.Lock()
//model.ScrewGlobalNewest.Lock.Lock()
//defer func() {
// model.ScrewGlobalArtId.Lock.Unlock()
// model.ScrewGlobalMap.Lock.Unlock()
// model.ScrewGlobalNewest.Lock.Unlock()
//}()
//if model.ScrewGlobalArtId.Map == nil {
// model.ScrewGlobalArtId.Map = make(map[string]string)
//}
//if model.ScrewGlobalNewest.Map == nil {
// model.ScrewGlobalNewest.Map = make(map[string]model.ScrewWithData)
//}
//if model.ScrewGlobalMap.Map == nil {
// model.ScrewGlobalMap.Map = make(map[string]map[int]model.ScrewWithData)
//}
//// 给当前工作的最新screw data赋值
//var screwWithData model.ScrewWithData
//screwWithData.Screw = *screw
//model.ScrewGlobalNewest.Map[screw.STN] = screwWithData
//// 校验当前工位的零件号
//preScrewPartNo, exist := model.ScrewGlobalArtId.Map[screw.STN]
//if !exist {
// model.ScrewGlobalArtId.Map[screw.STN] = screw.PARTNO
// preScrewPartNo = screw.PARTNO
//}
//// 初始化当前工位的全局map
//_, exist = model.ScrewGlobalMap.Map[screw.STN]
//if !exist {
// model.ScrewGlobalMap.Map[screw.STN] = make(map[int]model.ScrewWithData)
//}
//if preScrewPartNo != screw.PARTNO {
// model.ScrewGlobalMap.Map[screw.STN] = make(map[int]model.ScrewWithData)
//}
//model.ScrewGlobalMap.Map[screw.STN][screw.SCREW_POS] = screwWithData
//model.ScrewGlobalArtId.Map[screw.STN] = screw.PARTNO
return nil
}


+ 20
- 0
web/controllers/ws/ws.go View File

@ -0,0 +1,20 @@
package ws
import (
"LAPP_GAAS_GFrame_BACKEND/global"
"LAPP_GAAS_GFrame_BACKEND/messaging"
baseModel "LAPP_GAAS_GFrame_BACKEND/models/base"
"errors"
"github.com/kataras/neffos"
)
func init() {
global.WebsocketContext = messaging.Register(baseModel.NAMESPACE_EODS, neffos.Events {})
global.WebsocketContext.SetAuthenticator(func(headers map[string]string) (string, error) {
stn, ok := headers["STN"]
if !ok || stn == "" {
return "", errors.New("未获取到工位信息")
}
return stn, nil
})
}

+ 2
- 0
web/routes/routes.go View File

@ -21,6 +21,7 @@ import (
_ "LAPP_GAAS_GFrame_BACKEND/web/controllers/pm"
_ "LAPP_GAAS_GFrame_BACKEND/web/controllers/qm"
_ "LAPP_GAAS_GFrame_BACKEND/web/controllers/report"
_ "LAPP_GAAS_GFrame_BACKEND/web/controllers/ws"
"LAPP_GAAS_GFrame_BACKEND/web/middleware"
"LAPP_GAAS_GFrame_BACKEND/web/middleware/cors"
"github.com/kataras/iris/v12"
@ -289,6 +290,7 @@ func Hub(app *iris.Application) {
etcdtab.Put("/upinfo", controllers.UpdateEtcdtab)
messaging.BindRoutes(admin)
grmi.BindRoutes(admin)
transactionHandlerFactory := container.NewTransactionHandlerFactory(db.Eloquent.Master())
container.RegisterRoutes(admin, rpc.DefaultMethodInvokerBuilder.Build, container.GlobalInformations, transactionHandlerFactory)


Loading…
Cancel
Save