123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- package worker
- import (
- "Wine-Server/utils"
- "Wine-Server/utils/tables"
- "errors"
- "github.com/gorilla/websocket"
- )
- func keepAlive(conn *websocket.Conn) {
- _ = conn.WriteJSON(utils.WsEvent("pon", nil))
- }
- func getSecrets(conn *websocket.Conn) {
- _ = conn.WriteJSON(utils.WsEvent("secrets", utils.JsonType{
- "public": utils.ClientPub, "private": utils.ClientPri,
- }))
- }
- func login(conn *websocket.Conn, data any) (string, error) {
- var param loginParam
- err := utils.AnyTrans(data, ¶m)
- if err != nil {
- utils.Logger.Println(err)
- _ = conn.WriteJSON(utils.WsEvent("loginResult", utils.Fail("参数错误")))
- return "", err
- }
- var pass string
- pass, err = utils.Decrypt(param.Password)
- if err != nil {
- utils.Logger.Println(err)
- _ = conn.WriteJSON(utils.WsEvent("loginResult", utils.Fail("解密失败")))
- return "", err
- }
- worker := &tables.WorkerTable{Phone: param.Account, Password: utils.HashPassword(pass)}
- err = worker.Login()
- if err != nil {
- utils.Logger.Println(err)
- _ = conn.WriteJSON(utils.WsEvent("loginResult", utils.Fail("用户名或密码错误")))
- return "", err
- }
- var token string
- utils.WorkerLock.Lock()
- if _, exist := utils.WorkerWss[worker.Id]; exist {
- utils.WorkerLock.Unlock()
- _ = conn.WriteJSON(utils.WsEvent("loginResult", utils.Fail("账户已在别处登录")))
- return "", errors.New("login other where")
- }
- for {
- token = utils.Format("WorkerToken_%s", utils.RandomString(20, utils.AlphaNumPatten))
- exist, _ := utils.Redis.Exists(utils.WxPayCli, token).Result()
- if exist != 1 {
- utils.Redis.Set(utils.WxPayCli, token, worker.Id, utils.Duration(7*24*60*60))
- break
- }
- }
- utils.WorkerLock.Unlock()
- _ = conn.WriteJSON(utils.WsEvent("loginResult", utils.Success(token)))
- return worker.Id, nil
- }
- func info(conn *websocket.Conn, worker *tables.WorkerTable) {
- manager := tables.ManagerTable{Id: worker.Manager}
- _ = manager.Get()
- _ = conn.WriteJSON(utils.WsEvent("workerInfo", utils.JsonType{
- "first": worker.First, "last": worker.Last, "name": worker.Name,
- "phone": worker.Phone, "manager": manager.Name, "count": worker.Count,
- "todo": worker.Todo, "avg": worker.Avg, "max": worker.Max,
- }))
- }
- func query(conn *websocket.Conn, wid string, data any) {
- var param queryParam
- err := utils.AnyTrans(data, ¶m)
- if err != nil {
- utils.Logger.Println(err)
- _ = conn.WriteJSON(utils.WsEvent("queryResult", utils.Fail("参数错误")))
- return
- }
- total, orders, err := tables.ChangesQueryForWorker(wid, param.Cond, param.Status, param.Limit, param.Page)
- if err != nil {
- utils.Logger.Println(err)
- _ = conn.WriteJSON(utils.WsEvent("queryResult", utils.Fail("查询信息失败")))
- return
- }
- _ = conn.WriteJSON(utils.WsEvent(
- "queryResult",
- utils.Success(utils.JsonType{"total": total, "list": orders}),
- ))
- }
- func detail(conn *websocket.Conn, data any) {
- cid, ok := data.(float64)
- if !ok {
- _ = conn.WriteJSON(utils.WsEvent("detailResult", utils.Fail("参数错误")))
- return
- }
- change, err := tables.ChangeDetail(uint32(cid))
- if err != nil {
- utils.Logger.Println(err)
- _ = conn.WriteJSON(utils.WsEvent("detailResult", utils.Fail("查询信息失败")))
- return
- }
- _ = conn.WriteJSON(utils.WsEvent("detailResult", utils.Success(change)))
- }
- func ready(conn *websocket.Conn, wid string, data any) {
- cid, ok := data.(float64)
- if !ok {
- _ = conn.WriteJSON(utils.WsEvent("readyResult", utils.Fail("参数错误")))
- return
- }
- change := tables.ChangeTable{Id: uint32(cid)}
- err := change.Get()
- if err != nil {
- utils.Logger.Println(err)
- _ = conn.WriteJSON(utils.WsEvent("readyResult", utils.Fail("订单不存在")))
- return
- }
- if change.Status != 0 {
- _ = conn.WriteJSON(utils.WsEvent("readyResult", utils.Fail("订单状态异常")))
- return
- }
- if device, din := utils.SellerDevices[change.Device]; din && device.Online {
- err = utils.Redis.Set(
- utils.WxPayCli, utils.Format("Change_%s_%s", change.Device, wid), cid, utils.Duration(300),
- ).Err()
- if err != nil {
- utils.Logger.Println(err)
- _ = conn.WriteJSON(utils.WsEvent("readyResult", utils.Fail("授权码存储失败")))
- return
- }
- _ = device.Conn.WriteJSON(utils.WsEvent("openGate", utils.JsonType{
- "type": "Changing", "user_type": "worker", "user_id": wid,
- }))
- _ = conn.WriteJSON(utils.WsEvent("readyResult", utils.Success(nil)))
- return
- }
- _ = conn.WriteJSON(utils.WsEvent("readyResult", utils.Fail("设备离线")))
- }
- func finish(conn *websocket.Conn, worker *tables.WorkerTable, data any) {
- cid, ok := data.(float64)
- if !ok {
- _ = conn.WriteJSON(utils.WsEvent("finishResult", utils.Fail("参数错误")))
- return
- }
- change := &tables.ChangeTable{Id: uint32(cid)}
- err := change.Get()
- if err != nil {
- utils.Logger.Println(err)
- _ = conn.WriteJSON(utils.WsEvent("finishResult", utils.Fail("订单不存在")))
- return
- }
- if change.Status != 1 {
- _ = conn.WriteJSON(utils.WsEvent("finishResult", utils.Fail("请先完成上酒动作")))
- return
- }
- device := tables.DeviceTable{Id: change.Device}
- err = device.Get()
- if err != nil {
- utils.Logger.Println(err)
- _ = conn.WriteJSON(utils.WsEvent("finishResult", utils.Fail("设备查询失败")))
- return
- }
- device.Wines[0].Id, device.Wines[0].Remain = change.New[0].Id, change.New[0].Remain
- device.Wines[1].Id, device.Wines[1].Remain = change.New[1].Id, change.New[1].Remain
- device.Wines[2].Id, device.Wines[2].Remain = change.New[2].Id, change.New[2].Remain
- device.Wines[3].Id, device.Wines[3].Remain = change.New[3].Id, change.New[3].Remain
- err = device.UpdateSelf()
- if err != nil {
- utils.Logger.Println(err)
- _ = conn.WriteJSON(utils.WsEvent("finishResult", utils.Fail("更新设备失败")))
- return
- }
- change.Status, change.Finish = 2, utils.TimeNow()
- err = change.UpdateSelf()
- if err != nil {
- utils.Logger.Println(err)
- _ = conn.WriteJSON(utils.WsEvent("finishResult", utils.Fail("更新订单失败")))
- return
- }
- this := uint32(change.Finish.Unix() - change.Finish.Unix())
- sum := worker.Avg*worker.Count + this
- worker.Count++
- worker.Todo--
- if this > worker.Max {
- worker.Max = this
- }
- worker.Avg = sum / worker.Count
- _ = worker.UpdateSelf()
- operate := tables.OperationTable{
- UserType: 1, UserId: worker.Id, OpType: 1, Level: 0, Describe: "完成上酒订单",
- }
- _ = operate.Insert()
- }
|