Browse Source

修改socket、供应商、产品信息bug

1021934019@qq.com 4 years ago
parent
commit
8dae467bbb

+ 1 - 1
blade-service/blade-client/src/main/java/org/springblade/client/ClientApplication.java

@@ -23,7 +23,7 @@ import org.springframework.web.socket.server.standard.ServerEndpointExporter;
 @EnableBladeFeign
 @SpringCloudApplication
 @EnableFeignClients({"org.springblade"})
-@ComponentScan(value = {"org.springblade.client.*"})
+@ComponentScan(value = {"org.springblade.client.**"})
 @MapperScan({"org.springblade.client.**.mapper.**", "org.springblade.client.**.assemble.mapstruct.**"})
 @SeataCloudApplication
 public class ClientApplication {

+ 6 - 2
blade-service/blade-client/src/main/java/org/springblade/client/Interceptor/WebSocketInterceptor.java

@@ -1,3 +1,4 @@
+/*
 package org.springblade.client.Interceptor;
 
 import org.springframework.http.server.ServerHttpRequest;
@@ -10,9 +11,11 @@ import java.util.Map;
 
 public class WebSocketInterceptor implements HandshakeInterceptor {
 
-	/**
+	*/
+/**
 	 * handler处理前调用,attributes属性最终在WebSocketSession里,可能通过webSocketSession.getAttributes().get(key值)获得
-	 */
+	 *//*
+
 	@Override
 	public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) {
 		if (request instanceof ServletServerHttpRequest) {
@@ -31,3 +34,4 @@ public class WebSocketInterceptor implements HandshakeInterceptor {
 
 	}
 }
+*/

+ 2 - 0
blade-service/blade-client/src/main/java/org/springblade/client/config/WebSocketAutoConfig.java

@@ -1,3 +1,4 @@
+/*
 package org.springblade.client.config;
 
 import org.springblade.client.Interceptor.WebSocketInterceptor;
@@ -28,3 +29,4 @@ public class WebSocketAutoConfig implements WebSocketConfigurer {
 			.withSockJS();
 	}
 }
+*/

+ 6 - 1
blade-service/blade-client/src/main/java/org/springblade/client/goods/service/impl/GoodsDescServiceImpl.java

@@ -454,8 +454,13 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, GoodsDesc
 				GoodsDesc goodsDesc=new GoodsDesc();
 				BeanUtils.copyProperties(e,goodsDesc);
 
+				R<CorpsDesc> corpByName = corpsDescClient.getCorpByName(e.getCorpName(), AuthUtil.getTenantId());
+				if(corpByName.isSuccess())
+				{
+					goodsDesc.setCorpName(e.getCorpName());
+					goodsDesc.setCorpId(corpByName.getData().getId());
+				}
 				//获取供应商
-				goodsDesc.setCorpName(e.getCorpName());
 				goodsDesc.setCntrVolumn(e.getCntrVolumn());
 				goodsDesc.setCartonWeight(e.getCartonWeight());
 				goodsDesc.setType(0L);

+ 43 - 29
blade-service/blade-client/src/main/java/org/springblade/client/handler/WebSocketHandler.java

@@ -1,12 +1,15 @@
+/*
 package org.springblade.client.handler;
-
 import java.io.IOException;
 import java.util.Map;
-import java.util.Random;
 import java.util.concurrent.ConcurrentHashMap;
 
+import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.reflect.FieldUtils;
+import org.springblade.client.message.service.IMessageService;
+import org.springblade.client.message.service.impl.MessageServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.web.socket.*;
 import org.springframework.web.socket.handler.AbstractWebSocketHandler;
@@ -14,18 +17,23 @@ import org.springframework.web.socket.sockjs.transport.session.WebSocketServerSo
 @Slf4j
 @Component
 public class WebSocketHandler extends AbstractWebSocketHandler {
-
-	/**
+    @Autowired
+	private MessageServiceImpl messageService;
+	*/
+/**
 	 * 存储sessionId和webSocketSession
 	 * 需要注意的是,webSocketSession没有提供无参构造,不能进行序列化,也就不能通过redis存储
 	 * 在分布式系统中,要想别的办法实现webSocketSession共享
-	 */
+	 *//*
+
 	private static Map<String, WebSocketSession> sessionMap = new ConcurrentHashMap<>();
 	private static Map<String, String> userMap = new ConcurrentHashMap<>();
 
-	/**
+	*/
+/**
 	 * 获取sessionId
-	 */
+	 *//*
+
 	private String getSessionId(WebSocketSession session) {
 		if (session instanceof WebSocketServerSockJsSession) {
 			// sock js 连接
@@ -38,23 +46,27 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 		return session.getId();
 	}
 
-	/**
+	*/
+/**
 	 * webSocket连接创建后调用
-	 */
+	 *//*
+
 	@Override
 	public void afterConnectionEstablished(WebSocketSession session) {
 		// 获取参数
-		String user = String.valueOf(session.getAttributes().get("user"));
+		String userId = String.valueOf(session.getAttributes().get("user"));
 		String sessionId = getSessionId(session);
-		userMap.put(user, getSessionId(session));
+		userMap.put(userId, getSessionId(session));
 		sessionMap.put(sessionId, session);
 		log.info("【当前socket链接人数】:==>"+sessionMap.size());
-		send(user);
+		send(userId);
 	}
 
-	/**
+	*/
+/**
 	 * 接收到消息会调用
-	 */
+	 *//*
+
 	@Override
 	public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
 		if (message instanceof TextMessage) {
@@ -68,17 +80,21 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 		}
 	}
 
-	/**
+	*/
+/**
 	 * 连接出错会调用
-	 */
+	 *//*
+
 	@Override
 	public void handleTransportError(WebSocketSession session, Throwable exception) {
 		sessionMap.remove(getSessionId(session));
 	}
 
-	/**
+	*/
+/**
 	 * 连接关闭会调用
-	 */
+	 *//*
+
 	@Override
 	public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
 		sessionMap.remove(getSessionId(session));
@@ -89,9 +105,11 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 		return false;
 	}
 
-	/**
+	*/
+/**
 	 * 后端发送消息
-	 */
+	 *//*
+
 	public void sendMessage(String user, String message) {
 		String sessionId = userMap.get(user);
 		WebSocketSession session = sessionMap.get(sessionId);
@@ -103,20 +121,15 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 		}
 	}
 
-	public void send(String user)
+	public void send(String userId)
 	{
 		try
 		{
 			while(true)
 			{
-				int max=175;
-				int min=10;
-				Random random = new Random();
-				int x = random.nextInt(max) % (max - min + 1) + min;
-				int y = random.nextInt(max) % (max - min + 1) + min;
-				String mark="["+x+","+y+"]";
-				sendMessage(user,mark);
-				Thread.sleep(6000);
+				Map<String, Object> userMessage = messageService.getUserMessage(Long.valueOf(userId));
+				sendMessage(userId,userMessage.toString());
+				Thread.sleep(30000);
 			}
 		}
 		catch (InterruptedException e)
@@ -125,3 +138,4 @@ public class WebSocketHandler extends AbstractWebSocketHandler {
 		}
 	}
 }
+*/

+ 33 - 0
blade-service/blade-client/src/main/java/org/springblade/client/message/Interceptor/WebSocketInterceptor.java

@@ -0,0 +1,33 @@
+package org.springblade.client.message.Interceptor;
+
+import org.springframework.http.server.ServerHttpRequest;
+import org.springframework.http.server.ServerHttpResponse;
+import org.springframework.http.server.ServletServerHttpRequest;
+import org.springframework.web.socket.WebSocketHandler;
+import org.springframework.web.socket.server.HandshakeInterceptor;
+
+import java.util.Map;
+
+public class WebSocketInterceptor implements HandshakeInterceptor {
+
+	/**
+	 * handler处理前调用,attributes属性最终在WebSocketSession里,可能通过webSocketSession.getAttributes().get(key值)获得
+	 */
+	@Override
+	public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) {
+		if (request instanceof ServletServerHttpRequest) {
+			ServletServerHttpRequest serverHttpRequest = (ServletServerHttpRequest) request;
+			// 获取请求路径携带的参数
+			String user = serverHttpRequest.getServletRequest().getParameter("user");
+			attributes.put("user", user);
+			return true;
+		} else {
+			return false;
+		}
+	}
+
+	@Override
+	public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {
+
+	}
+}

+ 31 - 0
blade-service/blade-client/src/main/java/org/springblade/client/message/config/WebSocketAutoConfig.java

@@ -0,0 +1,31 @@
+package org.springblade.client.message.config;
+
+
+import org.springblade.client.message.Interceptor.WebSocketInterceptor;
+import org.springblade.client.message.handler.WebSocketHandler;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.config.annotation.EnableWebSocket;
+import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
+import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
+
+@Configuration
+@EnableWebSocket
+public class WebSocketAutoConfig implements WebSocketConfigurer {
+
+	@Override
+	public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
+		// webSocket通道
+		// 指定处理器和路径
+		registry.addHandler(new WebSocketHandler(), "/websocket")
+			// 指定自定义拦截器
+			.addInterceptors(new WebSocketInterceptor())
+			// 允许跨域
+			.setAllowedOrigins("*");
+		// sockJs通道
+		registry.addHandler(new WebSocketHandler(), "/sock-js")
+			.addInterceptors(new WebSocketInterceptor())
+			.setAllowedOrigins("*")
+			// 开启sockJs支持
+			.withSockJS();
+	}
+}

+ 128 - 0
blade-service/blade-client/src/main/java/org/springblade/client/message/handler/WebSocketHandler.java

@@ -0,0 +1,128 @@
+package org.springblade.client.message.handler;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.reflect.FieldUtils;
+import org.springblade.client.message.service.impl.MessageServiceImpl;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.system.feign.IApiScopeClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.socket.*;
+import org.springframework.web.socket.handler.AbstractWebSocketHandler;
+import org.springframework.web.socket.sockjs.transport.session.WebSocketServerSockJsSession;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Slf4j
+@Component
+public class WebSocketHandler extends AbstractWebSocketHandler {
+
+
+	/**
+	 * 存储sessionId和webSocketSession
+	 * 需要注意的是,webSocketSession没有提供无参构造,不能进行序列化,也就不能通过redis存储
+	 * 在分布式系统中,要想别的办法实现webSocketSession共享
+	 */
+	private static Map<String, WebSocketSession> sessionMap = new ConcurrentHashMap<>();
+	private static Map<String, String> userMap = new ConcurrentHashMap<>();
+
+	/**
+	 * 获取sessionId
+	 */
+	private String getSessionId(WebSocketSession session) {
+		if (session instanceof WebSocketServerSockJsSession) {
+			// sock js 连接
+			try {
+				return  ((WebSocketSession) FieldUtils.readField(session, "webSocketSession", true)).getId();
+			} catch (IllegalAccessException e) {
+				throw new RuntimeException("get sessionId error");
+			}
+		}
+		return session.getId();
+	}
+
+	/**
+	 * webSocket连接创建后调用
+	 */
+	@Override
+	public void afterConnectionEstablished(WebSocketSession session) {
+		// 获取参数
+		String userId = String.valueOf(session.getAttributes().get("user"));
+		String sessionId = getSessionId(session);
+		userMap.put(userId, getSessionId(session));
+		sessionMap.put(sessionId, session);
+		log.info("【当前socket链接人数】:==>"+sessionMap.size());
+		send(userId);
+	}
+
+	/**
+	 * 接收到消息会调用
+	 */
+	@Override
+	public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
+		if (message instanceof TextMessage) {
+
+		} else if (message instanceof BinaryMessage) {
+
+		} else if (message instanceof PongMessage) {
+
+		} else {
+			System.out.println("Unexpected WebSocket message type: " + message);
+		}
+	}
+
+	/**
+	 * 连接出错会调用
+	 */
+	@Override
+	public void handleTransportError(WebSocketSession session, Throwable exception) {
+		sessionMap.remove(getSessionId(session));
+	}
+
+	/**
+	 * 连接关闭会调用
+	 */
+	@Override
+	public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
+		sessionMap.remove(getSessionId(session));
+	}
+
+	@Override
+	public boolean supportsPartialMessages() {
+		return false;
+	}
+
+	/**
+	 * 后端发送消息
+	 */
+	public void sendMessage(String user, String message) {
+		String sessionId = userMap.get(user);
+		WebSocketSession session = sessionMap.get(sessionId);
+		try {
+			log.info("【websocket消息】 单点消息:"+message);
+			session.sendMessage(new TextMessage(message));
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+
+	public void send(String userId)
+	{
+		try
+		{
+			while(true)
+			{
+				MessageServiceImpl messageService = SpringUtil.getBean(MessageServiceImpl.class);
+				Map<String, Object> userMessage = messageService.getUserMessage(Long.valueOf(userId));
+				sendMessage(userId,userMessage.toString());
+				Thread.sleep(60000);
+			}
+		}
+		catch (InterruptedException e)
+		{
+			e.printStackTrace();
+		}
+	}
+}

+ 7 - 0
blade-service/blade-client/src/main/java/org/springblade/client/message/service/IMessageService.java

@@ -19,8 +19,12 @@ package org.springblade.client.message.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.AllArgsConstructor;
 import org.springblade.client.entity.Message;
 import org.springblade.client.vo.MessageVO;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
 
 /**
  *  服务类
@@ -43,4 +47,7 @@ public interface IMessageService extends IService<Message> {
 	void pushByUserId(Long userId,String Message,Integer MessageType);
 	//通过用户角色推送
 	void pushByUserRole(String role,String Message,Integer MessageType);
+
+	Map<String,Object> getUserMessage(Long userId);
+
 }

+ 32 - 0
blade-service/blade-client/src/main/java/org/springblade/client/message/service/impl/MessageServiceImpl.java

@@ -15,6 +15,7 @@
  *  Author: Chill 庄骞 (smallchill@163.com)
  */
 package org.springblade.client.message.service.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
@@ -27,12 +28,15 @@ import org.springblade.core.tool.api.R;
 import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
+import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -115,4 +119,32 @@ public class MessageServiceImpl extends ServiceImpl<MessageMapper, Message> impl
 
 	}
 
+	@Override
+	public Map<String, Object> getUserMessage(Long userId)
+	{
+		//消息列表
+	/*	LambdaQueryWrapper<Message> messageLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		messageLambdaQueryWrapper
+			.eq(Message::getToUserId,userId)
+			.eq(Message::getIsDeleted,0)
+			.eq(Message::getMessageType,MessageType)
+		    .orderByDesc(Message::getCreateTime);
+		IPage<Message> page = baseMapper.selectPage(iPage, messageLambdaQueryWrapper);
+		List<Message> records = page.getRecords();*/
+		//是否未读
+		LambdaQueryWrapper<Message> readMessageLambdaQueryWrapper=new LambdaQueryWrapper<>();
+		readMessageLambdaQueryWrapper
+			.eq(Message::getToUserId,userId)
+			.eq(Message::getIsDeleted,0)
+			.eq(Message::getIsRead,0);
+		Integer count = baseMapper.selectCount(readMessageLambdaQueryWrapper);
+		Map map=new HashMap();
+		map.put("unRead",count!=null&&count>0?true:false);
+		map.put("unReadNum",count!=null&&count>0?count:0);
+		/*map.put("list",records);*/
+     return map;
+	}
+
+
+
 }