worker.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. package manager
  2. import (
  3. "Wine-Server/utils"
  4. "Wine-Server/utils/tables"
  5. "errors"
  6. "github.com/gorilla/websocket"
  7. )
  8. func keepAlive(conn *websocket.Conn) {
  9. _ = conn.WriteJSON(utils.WsEvent("pon", nil))
  10. }
  11. func getSecrets(conn *websocket.Conn) {
  12. _ = conn.WriteJSON(utils.WsEvent("secrets", utils.JsonType{
  13. "public": utils.ClientPub, "private": utils.ClientPri,
  14. }))
  15. }
  16. func userLogin(conn *websocket.Conn, data any) (string, error) {
  17. var param loginParam
  18. err := utils.AnyTrans(data, &param)
  19. if err != nil {
  20. _ = conn.WriteJSON(utils.WsError("param error"))
  21. return "", err
  22. }
  23. password, err := utils.Decrypt(param.Password)
  24. manager := tables.ManagerTable{Account: param.Account}
  25. err = manager.GetByAcc()
  26. if err != nil {
  27. _ = conn.WriteJSON(utils.WsEvent("loginResult", utils.JsonType{"status": false, "msg": "用户不存在"}))
  28. utils.Logger.Println(err)
  29. return "", err
  30. }
  31. if utils.IsPasswordMatch(manager.Password, password) {
  32. var token string
  33. utils.ManagerLock.Lock()
  34. if _, exist := utils.ManagerWss[manager.Id]; exist {
  35. utils.ManagerLock.Unlock()
  36. _ = conn.WriteJSON(utils.WsEvent("loginResult", utils.JsonType{"status": false, "msg": "账户已在别处登录"}))
  37. return "", errors.New("login other where")
  38. }
  39. for {
  40. token = utils.Format("ManagerToken_%s", utils.RandomString(19, utils.AlphaNumPatten))
  41. exist, _ := utils.Redis.Exists(utils.WxPayCli, token).Result()
  42. if exist != 1 {
  43. _ = utils.Redis.Set(utils.WxPayCli, token, manager.Id, utils.Duration(7*24*60*60)).Err()
  44. break
  45. }
  46. }
  47. utils.ManagerLock.Unlock()
  48. _ = conn.WriteJSON(utils.WsEvent("loginResult", utils.Success(utils.JsonType{"token": token, "super": manager.Super})))
  49. return manager.Id, nil
  50. } else {
  51. utils.Logger.Println(utils.HashPassword(password))
  52. _ = conn.WriteJSON(utils.WsEvent("loginResult", utils.Fail("密码错误")))
  53. return "", errors.New("password error")
  54. }
  55. }
  56. func getUserInfo(conn *websocket.Conn, manager *tables.ManagerTable) {
  57. _ = conn.WriteJSON(utils.WsEvent("userInfo", utils.JsonType{
  58. "id": manager.Id, "super": manager.Super, "name": manager.Name,
  59. "order": manager.Order, "income": manager.Income,
  60. }))
  61. }
  62. func userLogout(conn *websocket.Conn, data any) {
  63. utils.Redis.Del(utils.WxPayCli, data.(string))
  64. _ = conn.WriteJSON(utils.WsEvent("logoutResult", nil))
  65. }
  66. func superQueryManager(conn *websocket.Conn, manager *tables.ManagerTable, data any) {
  67. if !manager.Super {
  68. _ = conn.WriteJSON(utils.WsError("auth failed."))
  69. return
  70. }
  71. name, _ := data.(string)
  72. res, err := tables.QueryManager(name)
  73. if err != nil {
  74. utils.Logger.Println(err)
  75. _ = conn.WriteJSON(utils.WsError("query manager failed"))
  76. return
  77. }
  78. _ = conn.WriteJSON(utils.WsEvent("superQueryManagerRes", res))
  79. }
  80. func superQueryDevice(conn *websocket.Conn, manager *tables.ManagerTable, data any) {
  81. if !manager.Super {
  82. _ = conn.WriteJSON(utils.WsError("auth failed."))
  83. return
  84. }
  85. var param superQueryDeviceParam
  86. err := utils.AnyTrans(data, &param)
  87. if err != nil {
  88. _ = conn.WriteJSON(utils.WsError("param error"))
  89. return
  90. }
  91. total, devices, err := tables.QueryDevices(param.Manager, param.Cond, param.Limit, param.Page)
  92. if err != nil {
  93. utils.Logger.Println(err)
  94. _ = conn.WriteJSON(utils.WsError("query devices failed"))
  95. return
  96. }
  97. _ = conn.WriteJSON(utils.WsEvent("superQueryDeviceRes", utils.JsonType{"total": total, "devices": devices}))
  98. }
  99. func superUpdateDevice(conn *websocket.Conn, manager *tables.ManagerTable, data any) {
  100. if !manager.Super {
  101. _ = conn.WriteJSON(utils.WsError("auth failed."))
  102. return
  103. }
  104. var param superUpdateDeviceParam
  105. err := utils.AnyTrans(data, &param)
  106. if err != nil {
  107. _ = conn.WriteJSON(utils.WsError("param error"))
  108. return
  109. }
  110. device := tables.DeviceTable{Id: param.Did}
  111. err = device.Update(utils.JsonType{"manager": param.Mid, "addr": param.Addr, "mark": param.Mark})
  112. if err != nil {
  113. utils.Logger.Println(err)
  114. _ = conn.WriteJSON(utils.WsEvent("superUpdateDeviceRes", utils.Fail("更新失败")))
  115. return
  116. }
  117. _ = conn.WriteJSON(utils.WsEvent("superUpdateDeviceRes", utils.Success(nil)))
  118. }
  119. func superBatchAssign(conn *websocket.Conn, manager *tables.ManagerTable, data any) {
  120. if !manager.Super {
  121. _ = conn.WriteJSON(utils.WsError("auth failed."))
  122. return
  123. }
  124. var param superBatchAssignParam
  125. err := utils.AnyTrans(data, &param)
  126. if err != nil {
  127. _ = conn.WriteJSON(utils.WsError("param error"))
  128. return
  129. }
  130. err = tables.BatchAssignDeviceManager(param.Devices, param.Manager)
  131. if err != nil {
  132. utils.Logger.Println(err)
  133. _ = conn.WriteJSON(utils.WsEvent("superBatchAssignRes", utils.Fail("分配失败")))
  134. return
  135. }
  136. _ = conn.WriteJSON(utils.WsEvent("superBatchAssignRes", utils.Success(nil)))
  137. }
  138. func superQueryWine(conn *websocket.Conn, manager *tables.ManagerTable, data any) {
  139. if !manager.Super {
  140. _ = conn.WriteJSON(utils.WsError("auth failed."))
  141. return
  142. }
  143. var param superQueryWineParam
  144. err := utils.AnyTrans(data, &param)
  145. if err != nil {
  146. _ = conn.WriteJSON(utils.WsError("param error"))
  147. return
  148. }
  149. total, wines, err := tables.QueryWines(param.Cond, param.Limit, param.Page)
  150. if err != nil {
  151. utils.Logger.Println(err)
  152. _ = conn.WriteJSON(utils.WsError("query wines failed"))
  153. return
  154. }
  155. _ = conn.WriteJSON(utils.WsEvent("superQueryWineRes", utils.JsonType{"total": total, "wines": wines}))
  156. }
  157. func superDeleteWine(conn *websocket.Conn, manager *tables.ManagerTable, data any) {
  158. if !manager.Super {
  159. _ = conn.WriteJSON(utils.WsError("auth failed."))
  160. return
  161. }
  162. var ids []uint16
  163. err := utils.AnyTrans(data, &ids)
  164. if err != nil {
  165. _ = conn.WriteJSON(utils.WsError("param error"))
  166. return
  167. }
  168. err = tables.BatchDeleteWine(ids)
  169. if err != nil {
  170. utils.Logger.Println(err)
  171. _ = conn.WriteJSON(utils.WsEvent("superDeleteWineRes", utils.Fail("删除失败")))
  172. return
  173. }
  174. _ = conn.WriteJSON(utils.WsEvent("superDeleteWineRes", utils.Success(nil)))
  175. }