worker.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. package seller
  2. import (
  3. "Wine-Server/utils"
  4. "Wine-Server/utils/tables"
  5. "fmt"
  6. "github.com/gin-gonic/gin"
  7. "github.com/gorilla/websocket"
  8. )
  9. func VersionHandler(ctx *gin.Context) {
  10. version := tables.VersionTable{}
  11. err := version.GetLatest()
  12. if err != nil {
  13. ctx.JSON(utils.HttpError, utils.Fail("Get latest version failed"))
  14. return
  15. }
  16. ctx.JSON(utils.HttpOk, utils.Success(version))
  17. }
  18. func infoOfDevice(device *tables.DeviceTable, conn *websocket.Conn) {
  19. _ = conn.WriteJSON(utils.WsEvent("locationResult", utils.JsonType{
  20. "val": device.Addr, "close": false,
  21. }))
  22. var err error
  23. for i := 0; i < 4; i++ {
  24. err = device.Wines[i].Get()
  25. if err != nil {
  26. _ = conn.WriteJSON(utils.WsError("Query wine info failed"))
  27. return
  28. }
  29. }
  30. _ = conn.WriteJSON(utils.WsEvent("wineResult", device.Wines))
  31. var advList []tables.AdvertiseTable
  32. advList, err = tables.AdvListAll()
  33. if err != nil {
  34. _ = conn.WriteJSON(utils.WsError("Query advertise failed"))
  35. return
  36. }
  37. _ = conn.WriteJSON(utils.WsEvent("advResult", advList))
  38. var runParams []tables.ParamsTable
  39. runParams, err = tables.ParamsListAll()
  40. if err != nil {
  41. _ = conn.WriteJSON(utils.WsError("Query running params failed"))
  42. return
  43. }
  44. _ = conn.WriteJSON(utils.WsEvent("runParamResult", runParams))
  45. _ = conn.WriteJSON(utils.WsEvent("initFinish", nil))
  46. }
  47. func updateLocation(device *tables.DeviceTable, conn *websocket.Conn, data any) {
  48. if data == "" {
  49. _ = conn.WriteJSON(utils.WsError("Blank address is not allowed"))
  50. return
  51. }
  52. if device.Addr != data {
  53. err := device.Update(utils.JsonType{"addr": data})
  54. if err != nil {
  55. _ = conn.WriteJSON(utils.WsError("Update location failed"))
  56. return
  57. }
  58. _ = conn.WriteJSON(utils.WsEvent("locationResult", utils.JsonType{
  59. "val": data, "close": true,
  60. }))
  61. return
  62. }
  63. _ = conn.WriteJSON(utils.WsError("same location"))
  64. }
  65. type wineParam struct {
  66. Id uint16 `json:"id"`
  67. Weight int `json:"weight"`
  68. }
  69. func getQrcode(conn *websocket.Conn, data any) {
  70. var list []wineParam
  71. err := utils.AnyTrans(data, &list)
  72. if err != nil {
  73. _ = conn.WriteJSON(utils.WsError("param error"))
  74. return
  75. }
  76. sum := 0
  77. for _, item := range list {
  78. wine := tables.WineTable{Id: item.Id}
  79. err = wine.Get()
  80. if err != nil {
  81. _ = conn.WriteJSON(utils.WsError(fmt.Sprintf("no such wine: %d", item.Id)))
  82. return
  83. }
  84. sum += item.Weight * int(wine.Price)
  85. }
  86. fmt.Println(sum)
  87. _ = conn.WriteJSON(utils.WsEvent("qrcodeOkayed", "/seller/icon/qrcode.svg"))
  88. }
  89. type authParam struct {
  90. Type string `json:"type"`
  91. Wid string `json:"wid"`
  92. Code string `json:"code"`
  93. }
  94. func checkAuthCode(conn *websocket.Conn, did string, data any) {
  95. var param authParam
  96. err := utils.AnyTrans(data, &param)
  97. if err != nil {
  98. _ = conn.WriteJSON(utils.WsError("params error"))
  99. return
  100. }
  101. fmt.Printf("checkAuthCode: device[%s], code[%s]\n", did, data)
  102. switch param.Type {
  103. case "Changing":
  104. // TODO: check redis `Change_${did}_${param.wid}` === param.code, query real work
  105. _ = conn.WriteJSON(utils.WsEvent("authCodeResult", utils.JsonType{
  106. "type": param.Type, "ok": true, "work": []utils.JsonType{
  107. {
  108. "cell": 1,
  109. "old": utils.JsonType{"id": 13026, "name": "某一款酒名-1", "remain": 300},
  110. "new": utils.JsonType{"id": 13026, "name": "某一款酒名-1", "remain": 15000},
  111. },
  112. {
  113. "cell": 2,
  114. "old": utils.JsonType{"id": 13027, "name": "某一款酒名-2", "remain": 286},
  115. "new": utils.JsonType{"id": 13029, "name": "某一款酒名-3", "remain": 15000},
  116. },
  117. {
  118. "cell": 3,
  119. "old": utils.JsonType{"id": 13027, "name": "某一款酒名-2", "remain": 286},
  120. "new": utils.JsonType{"id": 13029, "name": "某一款酒名-3", "remain": 15000},
  121. },
  122. {
  123. "cell": 4,
  124. "old": utils.JsonType{"id": 13027, "name": "某一款酒名-2", "remain": 286},
  125. "new": utils.JsonType{"id": 13029, "name": "某一款酒名-3", "remain": 15000},
  126. },
  127. },
  128. }))
  129. break
  130. case "Fixing":
  131. // TODO: check redis `Fix_${did}_${param.wid}` === param.code
  132. _ = conn.WriteJSON(utils.WsEvent("authCodeResult", utils.JsonType{
  133. "type": param.Type, "ok": true,
  134. }))
  135. break
  136. default:
  137. _ = conn.WriteJSON(utils.WsError("unrecognized open type"))
  138. }
  139. }
  140. type resultParam struct {
  141. Type string `json:"type"`
  142. Wid string `json:"wid"`
  143. Result bool `json:"result"`
  144. }
  145. func openResult(conn *websocket.Conn, data any) {
  146. var param resultParam
  147. err := utils.AnyTrans(data, &param)
  148. if err != nil {
  149. _ = conn.WriteJSON(utils.WsError("params error"))
  150. return
  151. }
  152. if worker, win := utils.WorkerWss[param.Wid]; win {
  153. _ = worker.WriteJSON(utils.WsEvent("openResult", utils.JsonType{
  154. "type": param.Type, "result": param.Result,
  155. }))
  156. return
  157. }
  158. _ = conn.WriteJSON(utils.WsError("no such worker"))
  159. }
  160. type finishParam struct {
  161. Type string `json:"type"`
  162. Wid string `json:"wid"`
  163. }
  164. func workFinished(conn *websocket.Conn, data any) {
  165. var param finishParam
  166. err := utils.AnyTrans(data, &param)
  167. if err != nil {
  168. _ = conn.WriteJSON(utils.WsError("params error"))
  169. return
  170. }
  171. if worker, win := utils.WorkerWss[param.Wid]; win {
  172. _ = worker.WriteJSON(utils.WsEvent("workFinished", param.Type))
  173. } else {
  174. _ = conn.WriteJSON(utils.WsError("no such worker"))
  175. }
  176. }