zhangyong
2024-09-06 9e47d1426f494d68726de1d5cf7e704221a3fe3a
hangzhoumesParent/moduleService/UnLoadGlassModule/src/main/java/com/mes/job/Downpush.java
@@ -1,6 +1,7 @@
package com.mes.job;
import cn.hutool.json.JSONObject;
import cn.smallbun.screw.core.util.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mes.common.config.Const;
@@ -13,15 +14,21 @@
import com.mes.downstorage.service.DownStorageCageService;
import com.mes.downworkstation.entity.DownWorkstation;
import com.mes.downworkstation.service.DownWorkstationService;
import com.mes.glassinfo.entity.GlassInfo;
import com.mes.glassinfo.service.GlassInfoService;
import com.mes.tools.DateUtil;
import com.mes.tools.SocketUtil;
import com.mes.tools.WebSocketServer;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -40,7 +47,14 @@
    @Autowired
    private DownGlassTaskService downGlassTaskService;
    @Autowired
    SocketUtil socketUtil;
    private GlassInfoService glassInfoService;
    @Value("${mes.scan.ip}")
    private String scanIp;
    @Value("${mes.scan.port}")
    private Integer scanPort;
    @Autowired
    private RedisUtil redisUtil;
@@ -154,8 +168,8 @@
                new QueryWrapper<DownGlassTask>()
                        .select("Top 1 *")
                        .eq("end_cell", Const.G13_WORK_STATION)
                        .lt("task_status", Const.UNLOAD_GLASS_DOWN)
                        .orderByDesc("id")
        );
        jsonObject4.append("takeGlass", takeGlass);
@@ -192,30 +206,62 @@
    @Scheduled(fixedDelay = Long.MAX_VALUE)
    public void scanCodeTask() {
        log.info("扫描任务已启动");
        while (true) {
            try {
                if (socketUtil.openSocket()) {
                    String data = socketUtil.receiveData();
                    if (StringUtils.isNotBlank(data)) {
                        log.info("扫描数据:" + data);
                        //发送扫描数据
                        //todo:按照玻璃id获取玻璃信息返回给前端界面,具体需要哪些数据待确认
                        ArrayList<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("scanCode");
                        if (sendwServer != null) {
                            for (WebSocketServer webserver : sendwServer) {
                                if (webserver != null && webserver.session.isOpen()) {
                                    webserver.sendMessage(data);
                                }
            new Thread(() -> {
                try (Socket socket = new Socket(scanIp, scanPort);
                     BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
                    // 接收服务器响应
                    String response;
                    log.info("等待扫码中......");
                    while ((response = in.readLine()) != null) {
                        log.info("扫描到的玻璃id:{}", response);
                        List<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("scanCode");
                        if (CollectionUtils.isNotEmpty(sendwServer)) {
                            //按照玻璃id获取玻璃信息返回给前端界面,具体需要哪些数据待确认
                            GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
                                    .eq(GlassInfo::getGlassId, response).last("limit 1"));
                            if (null == glassInfo) {
                                log.info("按照玻璃id:{},无法找到玻璃信息", response);
                            } else {
                                sendwServer.get(0).sendMessage(glassInfo.toString());
                            }
                        }
                    }
                } else {
                    log.info("socket连接失败");
                } catch (Exception exception) {
                    log.info("读取异常,原因为{}", exception.getMessage());
                }
            } catch (Exception e) {
                log.info("socke执行过程中发生异常");
            }
            }).start();
        }
    }
    @Scheduled(fixedDelay = Long.MAX_VALUE)
    public void scanCodeTaskCopy()
    {
        log.info("扫描任务已启动");
        try {
            BarcodeReadThread brt=new BarcodeReadThread(scanIp,scanPort,this);
            brt.start();
        }catch (Exception exception) {
            log.info("扫描任务启动异常,原因为{}", exception.getMessage());
        }
    }
    //socket读取到消息后会调用这个函数
    public void barcodeCheckin(String response)
    {
        log.info("扫描到的玻璃id:{}", response);
        List<WebSocketServer> sendwServer = WebSocketServer.sessionMap.get("scanCode");
        if (CollectionUtils.isNotEmpty(sendwServer)) {
            //按照玻璃id获取玻璃信息返回给前端界面,具体需要哪些数据待确认
            GlassInfo glassInfo = glassInfoService.getOne(new LambdaQueryWrapper<GlassInfo>()
                    .eq(GlassInfo::getGlassId, response).last("limit 1"));
            if (null == glassInfo) {
                log.info("按照玻璃id:{},无法找到玻璃信息", response);
            } else {
                sendwServer.get(0).sendMessage(glassInfo.toString());
            }
        }
    }
}