package com.yc.MaintenanceFee.controller; import com.yc.MaintenanceFee.entiy.PayCallBack; import com.yc.action.grid.GridUtils; import com.yc.factory.FactoryBean; import com.yc.im.service.RedisDAO; import org.springframework.web.bind.annotation.RestController; import javax.websocket.*; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * WebSocket,获取微信或支付宝的回调信息返回到系统界面 * @USER: xinyb_ * @DATE: 2021-11-10 17:44 */ @RestController @ServerEndpoint("/ws/maintain/{skCode}") public class MaintainWebSocket { private static final String ONBUS_MAINTAIN = "Onbus_Maintain";//订阅的频道 public static Map> mpay = new ConcurrentHashMap<>(); /*** * 打开连接 * * @throws Exception */ @OnOpen public void onOpen(@PathParam("skCode") String skCode, Session session) { try { List listPay = mpay.get(skCode); if (listPay == null) { listPay = new ArrayList<>(); } listPay.add(session); mpay.put(skCode, listPay); } catch (Exception e) { e.printStackTrace(); } } /** * 断开连接 */ @OnClose public void onClose(@PathParam("skCode") String skCode, Session session) { PayCallBack pcb=new PayCallBack(); pcb.setSkCode(skCode); pcb.setState("false"); setRedis(pcb); } /** * 接收信息 * * @param message * @param session * @throws Exception */ @SuppressWarnings("unchecked") @OnMessage public void onMessage(Session session, String message) { try { } catch (Exception e) { } } /** * 发生错误的信息 * * @param session * @param error */ @OnError public void onError(Session session, Throwable error) { error.printStackTrace(); } public static void setRedis(PayCallBack pcb) { // 发送消息 RedisDAO redisDAO = (RedisDAO) FactoryBean.getBean("redisDAO"); redisDAO.publishMessage(ONBUS_MAINTAIN, GridUtils.toJsonNotNull(pcb)); } }