Newspaper 1 年之前
父节点
当前提交
a851897ae0

+ 11 - 0
src/main/java/com/huimv/wine/entity/vo/WorkerQueryParam.java

@@ -0,0 +1,11 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class WorkerQueryParam {
+    private String cond;
+    private int status;
+    private int page;
+    private int limit;
+}

+ 16 - 0
src/main/java/com/huimv/wine/entity/vo/WorkerQueryResult.java

@@ -0,0 +1,16 @@
+package com.huimv.wine.entity.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class WorkerQueryResult {
+    private int id;
+    private class device{
+        private String id;
+        private String addr;
+    }
+    private int status;
+    private Date publish,finish;
+}

+ 5 - 0
src/main/java/com/huimv/wine/mapper/WorkerMapper.java

@@ -1,7 +1,9 @@
 package com.huimv.wine.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.huimv.wine.entity.Worker;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.wine.entity.vo.WorkerQueryResult;
 
 /**
  * <p>
@@ -13,4 +15,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface WorkerMapper extends BaseMapper<Worker> {
 
+    Worker login(String account, String realPassword);
+
+    Page<WorkerQueryResult> ChangesQueryForWorker(Page<WorkerQueryResult> page, int status,String like ,String worker);
 }

+ 0 - 2
src/main/java/com/huimv/wine/utils/Result.java

@@ -16,8 +16,6 @@ public class Result implements Serializable {
         this.data = data;
         this.msg = msg;
     }
-    public Result() {
-    }
     public static Result success(Object data){
         return new Result(true,data,"success");
     }

+ 77 - 37
src/main/java/com/huimv/wine/ws/WorkerController.java

@@ -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) {

+ 8 - 0
src/main/resources/com/huimv/wine/mapper/WorkerMapper.xml

@@ -16,5 +16,13 @@
         <result column="avg_cost" property="avgCost" />
         <result column="max_cost" property="maxCost" />
     </resultMap>
+    <select id="login" resultType="com.huimv.wine.entity.Worker">
+        select *  FROM `worker` WHERE phone=#{account} AND password = #{password}
+    </select>
+    <select id="ChangesQueryForWorker" resultType="com.huimv.wine.entity.vo.WorkerQueryResult">
+        SELECT c.`id` as 'id',d.`id` as 'device.id',d.`addr` as 'device.addr',c.`status` as 'status',c.`publish` as 'publish',c.`finish` as 'finish'
+                FROM `change` AS c LEFT JOIN `device` AS d ON c.`device`=d.`id`
+				WHERE c.`status`=#{status} AND c.`worker`=#{worker} AND (d.`id` LIKE #{like} OR d.`addr` LIKE #{like})
+    </select>
 
 </mapper>