123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 |
- package service
- import (
- "dy-admin/internal/pcmserver/bus/model"
- systemService "dy-admin/internal/pcmserver/sys/service"
- "encoding/json"
- "github.com/pkg/errors"
- )
- const (
- ping = iota + 1 //ping
- pong //pong
- // 登录用户的部门树
- wsDeptTree
- // 各部门对应的所有柜子
- wsDeptCabinets
- // 个部门柜子的连接数
- wsDeptConnectInfo
- // 各部门对应的存物信息
- wsDeptStoneInfo
- // 各部的预警信息
- wsDeptWarnInfo
- // 柜子连接信息更新
- wsCabinetConnectUpdate
- // 柜子开门状态更新
- wsCabinetOpenStatusUpdate
- // 格子状态修改
- wsGridUpdate
- // 客户端token
- clientToken
- // 请假的请求
- wsLeaveReq
- // 请假的响应
- wstLeaveRes
- )
- type HomeMsg struct {
- DeptID int `json:"deptId"` // 0的时候代表为通用消息,所有连接都要推送
- MsgType uint8 `json:"msgType"`
- Update bool `json:"update"`
- Data string `json:"data"`
- }
- type CabinetWithGrids struct {
- Cabinet model.Cabinet `json:"cabinet"`
- Grids []model.Grid `json:"grids"`
- }
- // WSCabinetInfo 部门的柜子信息
- type WSCabinetInfo struct {
- Cabinets []CabinetWithGrids `json:"cabinets"`
- }
- // WSDeptConnectInfo 各部门柜子连接数
- type WSDeptConnectInfo struct {
- ConnectYes int64 `json:"connectYes"`
- ConnectNo int64 `json:"connectNo"`
- }
- // WSDeptStoneInfo 各部门及子部门的存物信息
- type WSDeptStoneInfo struct {
- StoneYes int64 `json:"stoneYes"`
- StoneNo int64 `json:"stoneNo"`
- }
- // WSDeptWarnInfo 各部门及子部门的预警信息
- type WSDeptWarnInfo struct {
- WarnCount int64 `json:"warnCount"`
- WarnLog []model.GridWarnLog `json:"warnLog"`
- }
- // WSCabinetConnectUpdate 连接状态修改
- type WSCabinetConnectUpdate struct {
- CabinetID int `json:"cabinetId"`
- Connect string `json:"connect"`
- }
- // WSCabinetOpenStatusUpdate 开启状态推送
- type WSCabinetOpenStatusUpdate struct {
- CabinetID int `json:"cabinetId"`
- OpenStatus string `json:"openStatus"`
- }
- // WSGridUpdate 格子状态修改
- type WSGridUpdate struct {
- CabinetID int `json:"cabinetId"`
- Grid *model.Grid `json:"grid"`
- }
- // WSLeaveReq 请假请求
- type WSLeaveReq struct {
- StaffID int `json:"StaffId"`
- }
- // WSLeaveRes 请假响应
- type WSLeaveRes struct {
- Type string `json:"type"`
- StartTimeStr string `json:"startTimeStr" `
- EndTimeStr string `json:"endTimeStr" `
- Duration float32 `json:"duration"`
- Reason string `json:"reason"`
- }
- // sendDeptTree 推送左侧部门树,每次新连接推送一次,期间有更新或者删除无法重新推送
- func sendDeptTree(deptId int, update bool, hc *HomeClient) error {
- deptTree, err := systemService.ServicesGroupApp.DeptService.GetDeptById(deptId)
- if err != nil {
- return err
- }
- dataMsg, err := json.Marshal(deptTree)
- if err != nil {
- return err
- }
- sendMsg := &HomeMsg{DeptID: deptId, Update: update, MsgType: wsDeptTree, Data: string(dataMsg)}
- if hc != nil {
- hc.send <- sendMsg
- } else {
- return pushWsClients(sendMsg)
- }
- return nil
- }
- // sendCabinetInfo 推送各部门的柜子信息。连接后就推送,只推送一次
- func sendCabinetInfo(deptId int, update bool, hc *HomeClient) error {
- cabinets, err := ServicesGroupApp.CabinetService.GetCabinetsByDeptID(deptId)
- if err != nil {
- return err
- }
- cwg := WSCabinetInfo{Cabinets: make([]CabinetWithGrids, 0)}
- for _, cabinet := range cabinets {
- grids, err := ServicesGroupApp.GridService.GetGridListByCabinetID(cabinet.ID)
- if err != nil {
- return err
- }
- cwg.Cabinets = append(cwg.Cabinets, CabinetWithGrids{Cabinet: cabinet, Grids: grids})
- }
- dataMsg, err := json.Marshal(cwg)
- if err != nil {
- return err
- }
- sendMsg := &HomeMsg{DeptID: deptId, Update: update, MsgType: wsDeptCabinets, Data: string(dataMsg)}
- if hc != nil {
- hc.send <- sendMsg
- } else {
- return pushWsClients(sendMsg)
- }
- return nil
- }
- // sendCabinetConnect 各部门的柜子连接统计
- func sendCabinetConnect(deptId int, update bool, hc *HomeClient) error {
- yes, no, err := ServicesGroupApp.CabinetService.GetCabinetConnectByDeptID(deptId)
- if err != nil {
- return err
- }
- info := WSDeptConnectInfo{ConnectYes: yes, ConnectNo: no}
- dataMsg, err := json.Marshal(info)
- if err != nil {
- return err
- }
- sendMsg := &HomeMsg{DeptID: deptId, Update: update, MsgType: wsDeptConnectInfo, Data: string(dataMsg)}
- if hc != nil {
- hc.send <- sendMsg
- } else {
- return pushWsClients(sendMsg)
- }
- return nil
- }
- // sendDeptStoneInfo 各部门的存物统计
- func sendDeptStoneInfo(deptId int, update bool, hc *HomeClient) error {
- cabinetIds, err := ServicesGroupApp.CabinetService.GetCabinetIDsByDeptID(deptId)
- if err != nil {
- return err
- }
- use, noUse, err := ServicesGroupApp.GridService.GetGridUseInfo(cabinetIds)
- if err != nil {
- return err
- }
- stoneInfo := WSDeptStoneInfo{StoneYes: use, StoneNo: noUse}
- dataMsg, err := json.Marshal(stoneInfo)
- if err != nil {
- return err
- }
- sendMsg := &HomeMsg{DeptID: deptId, Update: update, MsgType: wsDeptStoneInfo, Data: string(dataMsg)}
- if hc != nil {
- hc.send <- sendMsg
- } else {
- return pushWsClients(sendMsg)
- }
- return nil
- }
- // sendDeptWarnLog 各部门今日的预警信息
- func sendDeptWarnLog(deptId int, update bool, hc *HomeClient) error {
- logs, total, err := ServicesGroupApp.GridWarnLogService.GetDayGridWarnLogByDeptId(deptId)
- if err != nil {
- return err
- }
- info := WSDeptWarnInfo{
- WarnCount: total,
- WarnLog: logs,
- }
- dataMsg, err := json.Marshal(info)
- if err != nil {
- return err
- }
- sendMsg := &HomeMsg{DeptID: deptId, Update: update, MsgType: wsDeptWarnInfo, Data: string(dataMsg)}
- if hc != nil {
- hc.send <- sendMsg
- } else {
- return pushWsClients(sendMsg)
- }
- return nil
- }
- // sendUpdateCabinetConnect 连接状态修改
- func sendUpdateCabinetConnect(deptId int, cabinetId int, connect string, update bool) error {
- updateInfo := WSCabinetConnectUpdate{
- CabinetID: cabinetId,
- Connect: connect,
- }
- dataMsg, err := json.Marshal(updateInfo)
- if err != nil {
- return err
- }
- return pushWsClients(&HomeMsg{DeptID: deptId, Update: update, MsgType: wsCabinetConnectUpdate, Data: string(dataMsg)})
- }
- // sendUpdateCabinetOpenStatus 开门状态更新
- func sendUpdateCabinetOpenStatus(deptId int, cabinetId int, openStatus string, update bool) error {
- updateInfo := WSCabinetOpenStatusUpdate{
- CabinetID: cabinetId,
- OpenStatus: openStatus,
- }
- dataMsg, err := json.Marshal(updateInfo)
- if err != nil {
- return err
- }
- return pushWsClients(&HomeMsg{DeptID: deptId, Update: update, MsgType: wsCabinetOpenStatusUpdate, Data: string(dataMsg)})
- }
- // sendUpdateGrid 格子状态修改
- func sendUpdateGrid(deptId int, cabinetId int, gridDeviceId int, update bool) error {
- grid, err := ServicesGroupApp.GridService.GetGridByCabinetIDAndGridID(cabinetId, gridDeviceId)
- if err != nil {
- return err
- }
- updateInfo := WSGridUpdate{
- CabinetID: cabinetId,
- Grid: &grid,
- }
- dataMsg, err := json.Marshal(updateInfo)
- if err != nil {
- return err
- }
- return pushWsClients(&HomeMsg{DeptID: deptId, Update: update, MsgType: wsGridUpdate, Data: string(dataMsg)})
- }
- // sendLeaveInfo 请假信息推送
- func sendLeaveInfo(staffId int) error {
- leaveLog, err := ServicesGroupApp.LeaveLogService.getLeaveByStaffID(staffId)
- if err != nil {
- return err
- }
- if leaveLog == nil {
- return errors.New("请假消息为空")
- }
- leaveInfo := WSLeaveRes{
- Type: leaveLog.Type,
- StartTimeStr: leaveLog.StartTimeStr,
- EndTimeStr: leaveLog.EndTimeStr,
- Duration: leaveLog.Duration,
- Reason: leaveLog.Reason,
- }
- dataMsg, err := json.Marshal(leaveInfo)
- if err != nil {
- return err
- }
- return pushWsClients(&HomeMsg{DeptID: leaveLog.DepartmentID, Update: false, MsgType: wstLeaveRes, Data: string(dataMsg)})
- }
- func pushWsClients(homeMessages ...*HomeMsg) error {
- if len(homeMessages) == 0 {
- return nil
- }
- for _, homeMessage := range homeMessages {
- homeClientHub.broadcast <- homeMessage
- }
- return nil
- }
|