2 Commits cbf03f612b ... fc2d8a5f19

Author SHA1 Message Date
  duyong mac fc2d8a5f19 修改bug 1 year ago
  duyong mac 6f9ef7215a 修改bug 1 year ago

+ 17 - 3
internal/pcmserver/bus/service/home_client.go

@@ -71,6 +71,20 @@ func (hc *HomeClient) ReadMessage() {
 			sendData := &HomeMsg{DeptID: 0, MsgType: pong}
 
 			hc.send <- sendData
+		case wsLeaveReq:
+			// 解析数据
+			var leaveReq WSLeaveReq
+			err = json.Unmarshal([]byte(receiveData.Data), &leaveReq)
+			if err != nil {
+				log.Error(code.ErrCodeMap[code.ErrTokenInvalidCode].Error())
+				continue
+			}
+			// 发送请假详情
+			err = sendLeaveInfo(leaveReq.StaffID)
+			if err != nil {
+				log.Error(err.Error())
+				continue
+			}
 		case clientToken:
 			// 解析客户端发来的token
 			claims, err := global.JWT.ParseToken(receiveData.Data)
@@ -79,19 +93,19 @@ func (hc *HomeClient) ReadMessage() {
 					sendData := &HomeMsg{DeptID: 0, MsgType: clientToken, Data: code.ErrCodeMap[code.ErrTokenExpiredCode].Error()}
 					hc.send <- sendData
 					log.Error(code.ErrCodeMap[code.ErrTokenExpiredCode].Error())
-					return
+					continue
 				}
 				sendData := &HomeMsg{DeptID: 0, MsgType: clientToken, Data: code.ErrCodeMap[code.ErrTokenInvalidCode].Error()}
 				hc.send <- sendData
 				log.Error(code.ErrCodeMap[code.ErrTokenInvalidCode].Error())
-				return
+				continue
 			}
 			deptIds, err := systemService.ServicesGroupApp.GetSonDeptIds(claims.DeptID)
 			if err != nil {
 				sendData := &HomeMsg{DeptID: 0, MsgType: clientToken, Data: err.Error()}
 				hc.send <- sendData
 				log.Error(err.Error())
-				return
+				continue
 			}
 			deptMap := make(map[int]struct{})
 			for _, dep := range deptIds {

+ 29 - 2
internal/pcmserver/bus/service/home_client_proto.go

@@ -89,7 +89,16 @@ type WSGridUpdate struct {
 
 // WSLeaveReq 请假请求
 type WSLeaveReq struct {
-	StaffID int
+	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 推送左侧部门树,每次新连接推送一次,期间有更新或者删除无法重新推送
@@ -253,7 +262,25 @@ func sendUpdateGrid(deptId int, cabinetId int, gridDeviceId int, update bool) er
 	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
+	}
+	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: 0, Update: false, MsgType: wstLeaveRes, Data: string(dataMsg)})
+}
 
 func pushWsClients(homeMessages ...*HomeMsg) error {
 	if len(homeMessages) == 0 {

+ 13 - 0
internal/pcmserver/bus/service/leave_log.go

@@ -289,6 +289,19 @@ func (lls *LeaveLogService) GetLeaveLogList(info request.LeaveLogRecordSearch, d
 	return
 }
 
+func (lls *LeaveLogService) getLeaveByStaffID(staffId int) (leaveLog *model.LeaveLog, err error) {
+	var record model.LeaveLog
+	err = global.DB.Where("staff_id = ?", staffId).Where("status = ?", model.StatusExecuting).First(&record).Error
+	if err != nil {
+		if err != gorm.ErrRecordNotFound {
+			return nil, rescode.RegisterErrorWithCause(err, code.ErrCodeMap[code.ErrDatabaseCode])
+		} else {
+			return nil, nil
+		}
+	}
+	return &record, nil
+}
+
 func parseLeaveCronTab(db *gorm.DB, leaveLog model.LeaveLog) error {
 	// 删除原来的定时任务
 	leaveJobName := strconv.Itoa(leaveLog.ID) + "-" + strconv.Itoa(int(LeaveJob))

+ 13 - 3
scripts/home-client/main.go

@@ -2,14 +2,24 @@ package main
 
 import (
 	"encoding/json"
+	"flag"
 	"fmt"
 	"github.com/gorilla/websocket"
 	"github.com/sirupsen/logrus"
 	"time"
 )
 
+var token = flag.String("token", "", "user  token")
+
 func main() {
 
+	flag.Parse()
+	fmt.Println(token)
+	if *token == "" {
+		fmt.Println("请输入token")
+		return
+	}
+
 	wsURL := "ws://10.0.0.3:12090/bus/v1/homePage"
 	d := websocket.Dialer{}
 	conn, _, err := d.Dial(wsURL, nil)
@@ -17,15 +27,15 @@ func main() {
 		panic(err.Error())
 	}
 	go clientReadMessage(conn)
-	writeToken(conn)
+	writeToken(conn, *token)
 
 	go clientWriteMessage(conn)
 
 	select {}
 }
 
-func writeToken(conn *websocket.Conn) {
-	token := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVVUlEIjoiYWM3NzgyMDMtNTg3ZC00ZjBjLWEzZDktYzgwNDA1NTBjNDllIiwiVXNlcklEIjoyLCJVc2VybmFtZSI6Inl1bmxvbmciLCJOaWNrTmFtZSI6IuadjuS6kem-mSIsIlJvbGVJRHMiOlszXSwiRGVwdElEIjoxLCJSb2xlTmFtZXMiOm51bGwsImlzcyI6IkpXVCIsImV4cCI6MTY3MzQxNjA1MSwibmJmIjoxNjczMzI5NjUxfQ.QxEgaPcTBmP8JTn0d7CVRs0aXl1C3M3Dynh4KFqMWh8"
+func writeToken(conn *websocket.Conn, token string) {
+
 	homeMsg := HomeMsg{
 		MsgType: 11,
 		Data:    token,