diff --git a/global/global.go b/global/global.go index baa4a56..c168d0d 100644 --- a/global/global.go +++ b/global/global.go @@ -1,10 +1,6 @@ -/****************************************************************************** - * @Function Name : - *----------------------------------------------------------------------------- - * @Description : - * @Function Parameters: - * @Return Value : - * @Author : Zhang Xin - * @Date : 2021/3/3 11:02 - ******************************************************************************/ - package global \ No newline at end of file +package global + +import "LAPP_GAAS_GFrame_BACKEND/messaging" + +// websocket的全局Context +var WebsocketContext *messaging.Contexts diff --git a/services/api/implments/Screw.service.impl.go b/services/api/implments/Screw.service.impl.go index da19359..9849380 100644 --- a/services/api/implments/Screw.service.impl.go +++ b/services/api/implments/Screw.service.impl.go @@ -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 } diff --git a/web/controllers/ws/ws.go b/web/controllers/ws/ws.go index d1e5ce0..8b02023 100644 --- a/web/controllers/ws/ws.go +++ b/web/controllers/ws/ws.go @@ -1,10 +1,20 @@ -/****************************************************************************** - * @Function Name : - *----------------------------------------------------------------------------- - * @Description : - * @Function Parameters: - * @Return Value : - * @Author : Zhang Xin - * @Date : 2021/3/3 11:02 - ******************************************************************************/ - package ws \ No newline at end of file +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 + }) +} diff --git a/web/routes/routes.go b/web/routes/routes.go index e283240..040389a 100644 --- a/web/routes/routes.go +++ b/web/routes/routes.go @@ -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)