zhuyifan

fix

1 +package com.infoloop.tianting.server;
2 +
3 +import com.infoloop.tianting.server.session.UserTypeEnum;
4 +import lombok.Builder;
5 +import lombok.Data;
6 +
7 +@Data
8 +@Builder
9 +public class UserAuthData {
10 + private int operatorId;
11 + private UserTypeEnum userType;
12 +}
...@@ -80,10 +80,10 @@ public class WebSocketServer extends TextWebSocketHandler { ...@@ -80,10 +80,10 @@ public class WebSocketServer extends TextWebSocketHandler {
80 sendMessageToUsers(keys, socketMessage); 80 sendMessageToUsers(keys, socketMessage);
81 } 81 }
82 82
83 - public static <T> void sendMessageByUserTypes(List<UserTypeEnum> userTypes, List<String> authUserIds, SocketMessage<T> socketMessage) throws IOException { 83 + public static <T> void sendMessageByUserTypes(List<UserTypeEnum> userTypes, List<UserAuthData> userAuthData, SocketMessage<T> socketMessage) throws IOException {
84 final var keys = userSessions.keySet().stream() 84 final var keys = userSessions.keySet().stream()
85 .filter(userSessionData -> userTypes.contains(userSessionData.getUserType())) 85 .filter(userSessionData -> userTypes.contains(userSessionData.getUserType()))
86 - .filter(userSessionData -> authUserIds.contains(userSessionData.getUserId())) 86 + .filter(userSessionData -> userAuthData.isEmpty() || (userAuthData.stream().anyMatch(data -> String.valueOf(data.getOperatorId()).equals(userSessionData.getUserId()) && data.getUserType().equals(userSessionData.getUserType()))))
87 .collect(Collectors.toList()); 87 .collect(Collectors.toList());
88 sendMessageToUsers(keys, socketMessage); 88 sendMessageToUsers(keys, socketMessage);
89 } 89 }
......
1 package com.infoloop.tianting.service.client; 1 package com.infoloop.tianting.service.client;
2 2
3 import com.infoloop.tianting.enterpriseresourcetagservice.EnterpriseResourceTagServiceRpcGrpc; 3 import com.infoloop.tianting.enterpriseresourcetagservice.EnterpriseResourceTagServiceRpcGrpc;
4 +import com.infoloop.tianting.enterpriseresourcetagservice.GetOperatorIdsByStallIdRpcRequest;
4 import com.infoloop.tianting.enterpriseresourcetagservice.UserTagsAndResourcesGetRequest; 5 import com.infoloop.tianting.enterpriseresourcetagservice.UserTagsAndResourcesGetRequest;
5 import com.infoloop.tianting.enterpriseresourcetagservice.UserTagsAndResourcesGetResponse; 6 import com.infoloop.tianting.enterpriseresourcetagservice.UserTagsAndResourcesGetResponse;
6 import lombok.RequiredArgsConstructor; 7 import lombok.RequiredArgsConstructor;
7 import org.springframework.beans.factory.annotation.Autowired; 8 import org.springframework.beans.factory.annotation.Autowired;
8 import org.springframework.stereotype.Service; 9 import org.springframework.stereotype.Service;
9 10
11 +import java.util.List;
12 +
10 @Service 13 @Service
11 @RequiredArgsConstructor(onConstructor = @__(@Autowired)) 14 @RequiredArgsConstructor(onConstructor = @__(@Autowired))
12 public class EnterpriseResourceServiceRpcClient { 15 public class EnterpriseResourceServiceRpcClient {
...@@ -21,4 +24,12 @@ public class EnterpriseResourceServiceRpcClient { ...@@ -21,4 +24,12 @@ public class EnterpriseResourceServiceRpcClient {
21 .build(); 24 .build();
22 return enterpriseResourceTagServiceRpcBlockingStub.getUserResources(request); 25 return enterpriseResourceTagServiceRpcBlockingStub.getUserResources(request);
23 } 26 }
27 +
28 + public List<Integer> getOperatorIdsByStallId(int enterpriseId, int stallId) {
29 + final var request = GetOperatorIdsByStallIdRpcRequest.newBuilder()
30 + .setEnterpriseId(enterpriseId)
31 + .setStallId(stallId)
32 + .build();
33 + return enterpriseResourceTagServiceRpcBlockingStub.getOperatorIdsByStallId(request).getOperatorIdsList();
34 + }
24 } 35 }
......
...@@ -67,6 +67,7 @@ import com.infoloop.tianting.model.dto.OrderDbDTO.OrderDetailOperationDto; ...@@ -67,6 +67,7 @@ import com.infoloop.tianting.model.dto.OrderDbDTO.OrderDetailOperationDto;
67 import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByConditionDto; 67 import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByConditionDto;
68 import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByPaginationDto; 68 import com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByPaginationDto;
69 import com.infoloop.tianting.model.dto.OrderDbDTO.UpdateOrderDto; 69 import com.infoloop.tianting.model.dto.OrderDbDTO.UpdateOrderDto;
70 +import com.infoloop.tianting.server.UserAuthData;
70 import com.infoloop.tianting.server.WebSocketServer; 71 import com.infoloop.tianting.server.WebSocketServer;
71 import com.infoloop.tianting.server.message.MessageTypeEnum; 72 import com.infoloop.tianting.server.message.MessageTypeEnum;
72 import com.infoloop.tianting.server.message.NoticeTypeEnum; 73 import com.infoloop.tianting.server.message.NoticeTypeEnum;
...@@ -105,6 +106,7 @@ public class OrderServiceRpcClient { ...@@ -105,6 +106,7 @@ public class OrderServiceRpcClient {
105 private final SkuServiceRpcClient skuServiceRpcClient; 106 private final SkuServiceRpcClient skuServiceRpcClient;
106 private final OperatorServiceRpcClient operatorServiceRpcClient; 107 private final OperatorServiceRpcClient operatorServiceRpcClient;
107 private final ClientResourceTagServiceRpcClient clientResourceTagServiceRpcClient; 108 private final ClientResourceTagServiceRpcClient clientResourceTagServiceRpcClient;
109 + private final EnterpriseResourceServiceRpcClient enterpriseResourceServiceRpcClient;
108 private final RedissonClient redissonClient; 110 private final RedissonClient redissonClient;
109 private final DelayedQueue<AutoCancelParam> delayedQueue; 111 private final DelayedQueue<AutoCancelParam> delayedQueue;
110 112
...@@ -605,7 +607,6 @@ public class OrderServiceRpcClient { ...@@ -605,7 +607,6 @@ public class OrderServiceRpcClient {
605 if (orderResponse.getIsCreated()) { 607 if (orderResponse.getIsCreated()) {
606 // 用餐时间为当天,并且非在线支付餐单,发送消息给客户端 608 // 用餐时间为当天,并且非在线支付餐单,发送消息给客户端
607 if (createOrderDto.getMealTime().toLocalDate().equals(LocalDate.now()) && menuById.getResponse().getOrderRuleJson().getModeOfPayment() != ModeOfPaymentEnum.ONLINE) { 609 if (createOrderDto.getMealTime().toLocalDate().equals(LocalDate.now()) && menuById.getResponse().getOrderRuleJson().getModeOfPayment() != ModeOfPaymentEnum.ONLINE) {
608 - final var userIds = clientResourceTagServiceRpcClient.getOperatorIdsByStallIds(List.of(createOrderDto.getStallId())).stream().map(SingleResourceLabelEntityRefsResponse::getEntityId).distinct().map(String::valueOf).collect(Collectors.toList());
609 final var orderCreateSuccessData = OrderCreateSuccessData.builder() 610 final var orderCreateSuccessData = OrderCreateSuccessData.builder()
610 .orderId(orderResponse.getId()) 611 .orderId(orderResponse.getId())
611 .build(); 612 .build();
...@@ -616,8 +617,14 @@ public class OrderServiceRpcClient { ...@@ -616,8 +617,14 @@ public class OrderServiceRpcClient {
616 .message("有新的订单下单成功啦,快去查看吧~") 617 .message("有新的订单下单成功啦,快去查看吧~")
617 .data(orderCreateSuccessData) 618 .data(orderCreateSuccessData)
618 .build(); 619 .build();
620 + final var clientOperatorIds = clientResourceTagServiceRpcClient.getOperatorIdsByStallIds(List.of(createOrderDto.getStallId())).stream().map(SingleResourceLabelEntityRefsResponse::getEntityId).distinct().collect(Collectors.toList());
621 + final var enterpriseOperatorIds = enterpriseResourceServiceRpcClient.getOperatorIdsByStallId(createOrderDto.getEnterpriseId(), createOrderDto.getStallId());
622 + final var userAuthData = new ArrayList<UserAuthData>();
623 + userAuthData.addAll(clientOperatorIds.stream().map(e -> UserAuthData.builder().operatorId(e).userType(UserTypeEnum.CLIENT).build()).collect(Collectors.toList()));
624 + userAuthData.addAll(enterpriseOperatorIds.stream().map(e -> UserAuthData.builder().operatorId(e).userType(UserTypeEnum.KDS).build()).collect(Collectors.toList()));
625 + log.info("received userAuthData:{}", userAuthData);
619 try { 626 try {
620 - WebSocketServer.sendMessageByUserTypes(List.of(UserTypeEnum.CLIENT, UserTypeEnum.KDS), userIds, data); 627 + WebSocketServer.sendMessageByUserTypes(List.of(UserTypeEnum.CLIENT, UserTypeEnum.KDS), userAuthData, data);
621 } catch (IOException e) { 628 } catch (IOException e) {
622 log.error("Failed to send message to user", e); 629 log.error("Failed to send message to user", e);
623 } 630 }
......
...@@ -19,6 +19,7 @@ service EnterpriseResourceTagServiceRpc { ...@@ -19,6 +19,7 @@ service EnterpriseResourceTagServiceRpc {
19 rpc GetUsersByTagId (UsersGetByTagIdRequest) returns (UsersGetByTagIdResponse) {} 19 rpc GetUsersByTagId (UsersGetByTagIdRequest) returns (UsersGetByTagIdResponse) {}
20 rpc CreateTag (TagCreationRpcRequest) returns (TagCreationRpcResponse) {} 20 rpc CreateTag (TagCreationRpcRequest) returns (TagCreationRpcResponse) {}
21 rpc AddResourcesToTag (AddResourcesToTagRpcRequest) returns (AddResourcesToTagRpcResponse) {} 21 rpc AddResourcesToTag (AddResourcesToTagRpcRequest) returns (AddResourcesToTagRpcResponse) {}
22 + rpc GetOperatorIdsByStallId (GetOperatorIdsByStallIdRpcRequest) returns (GetOperatorIdsByStallIdRpcResponse) {}
22 } 23 }
23 24
24 message TagCreationRpcRequest { 25 message TagCreationRpcRequest {
...@@ -202,4 +203,13 @@ message AddResourcesToTagRpcRequest { ...@@ -202,4 +203,13 @@ message AddResourcesToTagRpcRequest {
202 203
203 message AddResourcesToTagRpcResponse { 204 message AddResourcesToTagRpcResponse {
204 bool isSuccess = 1; 205 bool isSuccess = 1;
206 +}
207 +
208 +message GetOperatorIdsByStallIdRpcRequest {
209 + int32 enterpriseId = 1;
210 + int32 stallId = 2;
211 +}
212 +
213 +message GetOperatorIdsByStallIdRpcResponse {
214 + repeated int32 operatorIds = 1;
205 } 215 }
...\ No newline at end of file ...\ No newline at end of file
......