|
@@ -3,8 +3,15 @@ package com.huimv.wine.ws;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.fasterxml.jackson.annotation.JsonFormat;
|
|
|
+import com.huimv.wine.common.EventWsErrUtil;
|
|
|
+import com.huimv.wine.entity.Change;
|
|
|
import com.huimv.wine.entity.Worker;
|
|
|
+import com.huimv.wine.entity.vo.WorkerQueryParam;
|
|
|
+import com.huimv.wine.entity.vo.WorkerQueryResult;
|
|
|
import com.huimv.wine.entity.vo.WsEvent;
|
|
|
+import com.huimv.wine.mapper.ChangeMapper;
|
|
|
import com.huimv.wine.mapper.WorkerMapper;
|
|
|
import com.huimv.wine.utils.*;
|
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
@@ -17,6 +24,7 @@ import javax.websocket.*;
|
|
|
import javax.websocket.server.PathParam;
|
|
|
import javax.websocket.server.ServerEndpoint;
|
|
|
import java.io.IOException;
|
|
|
+import java.time.Duration;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
|
|
|
@@ -68,66 +76,98 @@ public class WorkerController extends TextWebSocketHandler {
|
|
|
String msg = "[" + token + "]:" + message;
|
|
|
System.out.println("接收到信息:" + msg);
|
|
|
|
|
|
+ WorkerMapper workerMapper = SpringContextUtil.getBean(WorkerMapper.class);
|
|
|
+ ChangeMapper changeMapper = SpringContextUtil.getBean(ChangeMapper.class);
|
|
|
+ RedisTemplate redisTemplate = SpringContextUtil.getBean(RedisTemplate.class);
|
|
|
JSONObject jsonObject = JSON.parseObject(message);
|
|
|
String event = jsonObject.getString("event");
|
|
|
JSONObject data = jsonObject.getJSONObject("data");
|
|
|
|
|
|
if ("login".equals(event)){
|
|
|
- login(session,token,data);
|
|
|
+ login(workerMapper,session,token,data);
|
|
|
+ }else if ("pin".equals(event)){
|
|
|
+ keepAlive(session);
|
|
|
+ }else {
|
|
|
+ if (!redisTemplate.hasKey(token)) {
|
|
|
+ WebsocketWorkerUtil.sendMessage(session,new WsEvent("tokenExpired",null));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ String worker = (String)redisTemplate.opsForValue().get(token);
|
|
|
+ switch (event){
|
|
|
+ case "query":
|
|
|
+ query(workerMapper,session,worker, data);
|
|
|
+ break;
|
|
|
+ case "detail":
|
|
|
+ detail(workerMapper,session,data);
|
|
|
+ break;
|
|
|
+ case "ready":
|
|
|
+ ready(changeMapper,session, jsonObject.getInteger("data"));
|
|
|
+ break;
|
|
|
+ case "finish":
|
|
|
+ finish(changeMapper,session,jsonObject.getInteger("data"));
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ WebsocketWorkerUtil.sendMessage(session, EventWsErrUtil.getWsErr("unrecognized event"));
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- RedisTemplate redisTemplate = SpringContextUtil.getBean(RedisTemplate.class);
|
|
|
- if (!redisTemplate.hasKey(token)){
|
|
|
- WsEvent wsEvent = new WsEvent("tokenExpired",null);
|
|
|
- WebsocketWorkerUtil.sendMessage(session,wsEvent);
|
|
|
- }else {
|
|
|
-// switch (event){
|
|
|
-// case ""
|
|
|
-// }
|
|
|
+ private void finish(ChangeMapper changeMapper, Session session, Integer id) {
|
|
|
+ Change change = changeMapper.selectById(id);
|
|
|
+ if (ObjectUtil.isEmpty(change)){
|
|
|
+ WebsocketWorkerUtil.sendMessage(session,new WsEvent("finishResult",Result.fail("订单不存在")));
|
|
|
+ }
|
|
|
+ if (change.getStatus() != 1){
|
|
|
+ WebsocketWorkerUtil.sendMessage(session,new WsEvent("finishResult",Result.fail("请先完成上酒动作")));
|
|
|
}
|
|
|
|
|
|
+ }
|
|
|
|
|
|
+ private void ready(ChangeMapper changeMapper, Session session, Integer id) {
|
|
|
+ Change change = changeMapper.selectById(id);
|
|
|
+ if (ObjectUtil.isEmpty(change)){
|
|
|
+ WebsocketWorkerUtil.sendMessage(session,new WsEvent("finishResult",Result.fail("订单不存在")));
|
|
|
+ }
|
|
|
+ if (change.getStatus() != 0){
|
|
|
+ WebsocketWorkerUtil.sendMessage(session,new WsEvent("finishResult",Result.fail("订单状态异常")));
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ private void detail(WorkerMapper WorkerMapper, Session session, JSONObject data) {
|
|
|
|
|
|
+ }
|
|
|
|
|
|
-// switch (event) {
|
|
|
-// case "pin":
|
|
|
-// keepAlive(session);
|
|
|
-// break;
|
|
|
-// case "query":
|
|
|
-// query(session, data);
|
|
|
-// break;
|
|
|
-// case "detail":
|
|
|
-// detail(data);
|
|
|
-// break;
|
|
|
-// case "ready":
|
|
|
-// ready(session, data);
|
|
|
-// break;
|
|
|
-// case "finish":
|
|
|
-// finish(session, data);
|
|
|
-// break;
|
|
|
-// default:
|
|
|
-// sendError(session, "unrecognized event");
|
|
|
-// break;
|
|
|
-// }
|
|
|
+ private void query(WorkerMapper WorkerMapper, Session session,String worker, JSONObject data) {
|
|
|
+ WorkerQueryParam workerQueryParam = JSONObject.toJavaObject(data, WorkerQueryParam.class);
|
|
|
+ Page<WorkerQueryResult> page = new Page<>(workerQueryParam.getPage(),workerQueryParam.getLimit());
|
|
|
+ String like = "%"+ workerQueryParam.getCond() +"%";
|
|
|
+ Page<WorkerQueryResult> workerQueryResultPage = WorkerMapper.ChangesQueryForWorker(page,workerQueryParam.getStatus(),like,worker);
|
|
|
+ WebsocketWorkerUtil.sendMessage(session,new WsEvent("queryResult",Result.success(workerQueryResultPage)));
|
|
|
}
|
|
|
|
|
|
- private void login(Session session, String token, JSONObject data) {
|
|
|
- WorkerMapper WorkerMapper = SpringContextUtil.getBean(WorkerMapper.class);
|
|
|
+ private void login(WorkerMapper WorkerMapper, Session session, String token, JSONObject data) {
|
|
|
+ RedisTemplate redisTemplate = SpringContextUtil.getBean(RedisTemplate.class);
|
|
|
|
|
|
String account = data.getString("account");
|
|
|
String password = data.getString("password");
|
|
|
|
|
|
String serverPrivate = KeyUtil.getServerPrivate();
|
|
|
String realPassword = RSAUtil.decrypt1(password, serverPrivate);
|
|
|
-// Worker worker = WorkerMapper.login(account,realPassword);
|
|
|
-// if (ObjectUtil.isEmpty(worker)){
|
|
|
-// WsEvent wsEvent = new WsEvent("loginResult",new Result());
|
|
|
-// WebsocketWorkerUtil.sendMessage(session,wsEvent);
|
|
|
-// }
|
|
|
-
|
|
|
+ Worker worker = WorkerMapper.login(account,realPassword);
|
|
|
+ if (ObjectUtil.isEmpty(worker)){
|
|
|
+ WsEvent wsEvent = new WsEvent("loginResult",Result.fail("用户名或密码错误"));
|
|
|
+ WebsocketWorkerUtil.sendMessage(session,wsEvent);
|
|
|
+ }else {
|
|
|
+ redisTemplate.opsForValue().set(token,worker.getId(), Duration.ofDays(7));
|
|
|
+ WsEvent wsEvent = new WsEvent("loginResult",Result.success(token));
|
|
|
+ WebsocketWorkerUtil.sendMessage(session,wsEvent);
|
|
|
+ }
|
|
|
|
|
|
+ }
|
|
|
|
|
|
+ private void keepAlive(Session session) {
|
|
|
+ WebsocketSellerUtil.sendMessage(session,new WsEvent("pon",null));
|
|
|
}
|
|
|
|
|
|
private void loginSocket(String message, Session session) {
|