package com.qianwen.smartman.common.websocket.realtime; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import com.qianwen.smartman.common.cache.cps.WorkstationCache; import com.qianwen.core.tool.utils.Func; import com.qianwen.core.websocket.config.WebSocketMessageSender; import com.qianwen.core.websocket.handler.JsonMessageHandler; //import com.qianwen.smartman.modules.coproduction.entity.OrderWorkstation; //import com.qianwen.smartman.modules.coproduction.service.IOrderWorkstationService; import com.qianwen.smartman.modules.mdc.service.RealTimeDataService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.socket.WebSocketSession; /** * 实现了websocket模块中的JsonMessageHandler,实时看板使用该处理器,payload中应该携带type:"realTimeData"属性 */ @Component public class RealTimeDataJsonMessageHandler implements JsonMessageHandler { private Logger log = LoggerFactory.getLogger(this.getClass()); //private final IOrderWorkstationService orderWorkstationService; @Autowired private RealTimeDataService realTimeDataService; /* public RealTimeDataJsonMessageHandler(final IOrderWorkstationService orderWorkstationService) { this.orderWorkstationService = orderWorkstationService; }*/ public void handle(WebSocketSession session, RealTimeDataRequestJsonWebSocketMessage message) { List workstationIdList = message.getWorkstationIdList(); log.info("收到websocket消息,message.workstationidList={}",message.getWorkstationIdList()); //从blade_order_xxx表获取正在加工的工位, //List workstationInProcess = this.orderWorkstationService.getWorkstationInProcess(workstationIdList.stream().map(Long::valueOf).collect(Collectors.toSet())); //生成 工位id -> 工单号的map //Map orderWorkstationMap = workstationInProcess.stream().collect(Collectors.toMap(OrderWorkstation::getWorkstationId, OrderWorkstation::getOrderCode)); if (Func.isNotEmpty(workstationIdList)) { for (String workstationId : workstationIdList) { RealTimeDaraResponseJsonWebSocketMessage jsonWebSocketMessage = new RealTimeDaraResponseJsonWebSocketMessage(); Map map = WorkstationCache.getWorkstationRealTime(workstationId);//TODO:这就是返回给前端的数据,我需要在这里查询,里面缓存没有,实际上就是直接查询 if("1656819188967653378".equals(workstationId)) { log.info(workstationId+"收到:"+map); } long wid = Long.parseLong(workstationId); realTimeDataService.addPreTimeInDeviceStatus(wid, map); //map.put("orderCode", Func.isEmpty(orderWorkstationMap.get(Long.valueOf(workstationId))) ? "-" : orderWorkstationMap.get(Long.valueOf(workstationId))); jsonWebSocketMessage.setData(map); jsonWebSocketMessage.setId(workstationId); WebSocketMessageSender.send(session, jsonWebSocketMessage); } } } @Override public String type() { return "realTimeData"; } @Override public Class getMessageClass() { return RealTimeDataRequestJsonWebSocketMessage.class; } }