Toggle navigation
Toggle navigation
This project
Loading...
Sign in
jiujian
/
client-customer-order-api
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
zhuyifan
2025-03-08 13:08:20 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
8004c79ad39ee9f776bde3aa267679b27b9665b5
8004c79a
1 parent
9663659a
fix
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
83 additions
and
4 deletions
src/main/java/com/infoloop/tianting/server/UserAuthData.java
src/main/java/com/infoloop/tianting/server/WebSocketServer.java
src/main/java/com/infoloop/tianting/service/client/EnterpriseResourceServiceRpcClient.java
src/main/java/com/infoloop/tianting/service/client/OrderServiceRpcClient.java
src/main/java/com/infoloop/tianting/service/client/PayServiceClient.java
src/main/java/com/infoloop/tianting/utils/DateUtil.java
src/main/proto/TiantingEnterpriseResourceTagService.proto
src/main/java/com/infoloop/tianting/server/UserAuthData.java
0 → 100644
View file @
8004c79
package
com
.
infoloop
.
tianting
.
server
;
import
com.infoloop.tianting.server.session.UserTypeEnum
;
import
lombok.Builder
;
import
lombok.Data
;
@Data
@Builder
public
class
UserAuthData
{
private
int
operatorId
;
private
UserTypeEnum
userType
;
}
src/main/java/com/infoloop/tianting/server/WebSocketServer.java
View file @
8004c79
...
...
@@ -80,10 +80,10 @@ public class WebSocketServer extends TextWebSocketHandler {
sendMessageToUsers
(
keys
,
socketMessage
);
}
public
static
<
T
>
void
sendMessageByUserTypes
(
List
<
UserTypeEnum
>
userTypes
,
List
<
String
>
authUserIds
,
SocketMessage
<
T
>
socketMessage
)
throws
IOException
{
public
static
<
T
>
void
sendMessageByUserTypes
(
List
<
UserTypeEnum
>
userTypes
,
List
<
UserAuthData
>
userAuthData
,
SocketMessage
<
T
>
socketMessage
)
throws
IOException
{
final
var
keys
=
userSessions
.
keySet
().
stream
()
.
filter
(
userSessionData
->
userTypes
.
contains
(
userSessionData
.
getUserType
()))
.
filter
(
userSessionData
->
authUserIds
.
contains
(
userSessionData
.
getUserId
(
)))
.
filter
(
userSessionData
->
userAuthData
.
isEmpty
()
||
(
userAuthData
.
stream
().
anyMatch
(
data
->
String
.
valueOf
(
data
.
getOperatorId
()).
equals
(
userSessionData
.
getUserId
())
&&
data
.
getUserType
().
equals
(
userSessionData
.
getUserType
())
)))
.
collect
(
Collectors
.
toList
());
sendMessageToUsers
(
keys
,
socketMessage
);
}
...
...
src/main/java/com/infoloop/tianting/service/client/EnterpriseResourceServiceRpcClient.java
View file @
8004c79
package
com
.
infoloop
.
tianting
.
service
.
client
;
import
com.infoloop.tianting.enterpriseresourcetagservice.EnterpriseResourceTagServiceRpcGrpc
;
import
com.infoloop.tianting.enterpriseresourcetagservice.GetOperatorIdsByStallIdRpcRequest
;
import
com.infoloop.tianting.enterpriseresourcetagservice.UserTagsAndResourcesGetRequest
;
import
com.infoloop.tianting.enterpriseresourcetagservice.UserTagsAndResourcesGetResponse
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
@Service
@RequiredArgsConstructor
(
onConstructor
=
@__
(
@Autowired
))
public
class
EnterpriseResourceServiceRpcClient
{
...
...
@@ -21,4 +24,12 @@ public class EnterpriseResourceServiceRpcClient {
.
build
();
return
enterpriseResourceTagServiceRpcBlockingStub
.
getUserResources
(
request
);
}
public
List
<
Integer
>
getOperatorIdsByStallId
(
int
enterpriseId
,
int
stallId
)
{
final
var
request
=
GetOperatorIdsByStallIdRpcRequest
.
newBuilder
()
.
setEnterpriseId
(
enterpriseId
)
.
setStallId
(
stallId
)
.
build
();
return
enterpriseResourceTagServiceRpcBlockingStub
.
getOperatorIdsByStallId
(
request
).
getOperatorIdsList
();
}
}
...
...
src/main/java/com/infoloop/tianting/service/client/OrderServiceRpcClient.java
View file @
8004c79
...
...
@@ -67,6 +67,7 @@ import com.infoloop.tianting.model.dto.OrderDbDTO.OrderDetailOperationDto;
import
com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByConditionDto
;
import
com.infoloop.tianting.model.dto.OrderDbDTO.QueryOrderByPaginationDto
;
import
com.infoloop.tianting.model.dto.OrderDbDTO.UpdateOrderDto
;
import
com.infoloop.tianting.server.UserAuthData
;
import
com.infoloop.tianting.server.WebSocketServer
;
import
com.infoloop.tianting.server.message.MessageTypeEnum
;
import
com.infoloop.tianting.server.message.NoticeTypeEnum
;
...
...
@@ -105,6 +106,7 @@ public class OrderServiceRpcClient {
private
final
SkuServiceRpcClient
skuServiceRpcClient
;
private
final
OperatorServiceRpcClient
operatorServiceRpcClient
;
private
final
ClientResourceTagServiceRpcClient
clientResourceTagServiceRpcClient
;
private
final
EnterpriseResourceServiceRpcClient
enterpriseResourceServiceRpcClient
;
private
final
RedissonClient
redissonClient
;
private
final
DelayedQueue
<
AutoCancelParam
>
delayedQueue
;
...
...
@@ -605,7 +607,6 @@ public class OrderServiceRpcClient {
if
(
orderResponse
.
getIsCreated
())
{
// 用餐时间为当天,并且非在线支付餐单,发送消息给客户端
if
(
createOrderDto
.
getMealTime
().
toLocalDate
().
equals
(
LocalDate
.
now
())
&&
menuById
.
getResponse
().
getOrderRuleJson
().
getModeOfPayment
()
!=
ModeOfPaymentEnum
.
ONLINE
)
{
final
var
userIds
=
clientResourceTagServiceRpcClient
.
getOperatorIdsByStallIds
(
List
.
of
(
createOrderDto
.
getStallId
())).
stream
().
map
(
SingleResourceLabelEntityRefsResponse:
:
getEntityId
).
distinct
().
map
(
String:
:
valueOf
).
collect
(
Collectors
.
toList
());
final
var
orderCreateSuccessData
=
OrderCreateSuccessData
.
builder
()
.
orderId
(
orderResponse
.
getId
())
.
build
();
...
...
@@ -616,8 +617,14 @@ public class OrderServiceRpcClient {
.
message
(
"有新的订单下单成功啦,快去查看吧~"
)
.
data
(
orderCreateSuccessData
)
.
build
();
final
var
clientOperatorIds
=
clientResourceTagServiceRpcClient
.
getOperatorIdsByStallIds
(
List
.
of
(
createOrderDto
.
getStallId
())).
stream
().
map
(
SingleResourceLabelEntityRefsResponse:
:
getEntityId
).
distinct
().
collect
(
Collectors
.
toList
());
final
var
enterpriseOperatorIds
=
enterpriseResourceServiceRpcClient
.
getOperatorIdsByStallId
(
createOrderDto
.
getEnterpriseId
(),
createOrderDto
.
getStallId
());
final
var
userAuthData
=
new
ArrayList
<
UserAuthData
>();
userAuthData
.
addAll
(
clientOperatorIds
.
stream
().
map
(
e
->
UserAuthData
.
builder
().
operatorId
(
e
).
userType
(
UserTypeEnum
.
CLIENT
).
build
()).
collect
(
Collectors
.
toList
()));
userAuthData
.
addAll
(
enterpriseOperatorIds
.
stream
().
map
(
e
->
UserAuthData
.
builder
().
operatorId
(
e
).
userType
(
UserTypeEnum
.
KDS
).
build
()).
collect
(
Collectors
.
toList
()));
log
.
info
(
"received userAuthData:{}"
,
userAuthData
);
try
{
WebSocketServer
.
sendMessageByUserTypes
(
List
.
of
(
UserTypeEnum
.
CLIENT
,
UserTypeEnum
.
KDS
),
user
Ids
,
data
);
WebSocketServer
.
sendMessageByUserTypes
(
List
.
of
(
UserTypeEnum
.
CLIENT
,
UserTypeEnum
.
KDS
),
user
AuthData
,
data
);
}
catch
(
IOException
e
)
{
log
.
error
(
"Failed to send message to user"
,
e
);
}
...
...
src/main/java/com/infoloop/tianting/service/client/PayServiceClient.java
View file @
8004c79
...
...
@@ -10,6 +10,7 @@ import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import
com.infoloop.tianting.clientcustomerorderservice.ClientCustomerOrderModification
;
import
com.infoloop.tianting.clientcustomerorderservice.OrderStatusEnum
;
import
com.infoloop.tianting.clientcustomerorderservice.PayStatusEnum
;
import
com.infoloop.tianting.clientresourcetagservice.SingleResourceLabelEntityRefsResponse
;
import
com.infoloop.tianting.config.BusinessConfig
;
import
com.infoloop.tianting.context.LoginContextHolder
;
import
com.infoloop.tianting.exception.ClientEndExceptions
;
...
...
@@ -19,10 +20,12 @@ import com.infoloop.tianting.model.dto.PayDTO.PayResponseDto;
import
com.infoloop.tianting.model.dto.PayDTO.ThirdPartyPayInformRequestDto
;
import
com.infoloop.tianting.model.dto.PaymentCallbackDTO
;
import
com.infoloop.tianting.model.dto.PaymentCallbackResult
;
import
com.infoloop.tianting.server.UserAuthData
;
import
com.infoloop.tianting.server.WebSocketServer
;
import
com.infoloop.tianting.server.message.MessageTypeEnum
;
import
com.infoloop.tianting.server.message.NoticeTypeEnum
;
import
com.infoloop.tianting.server.message.SocketMessage
;
import
com.infoloop.tianting.server.message.data.OrderCreateSuccessData
;
import
com.infoloop.tianting.server.message.data.OrderPaymentSuccessData
;
import
com.infoloop.tianting.server.session.UserSessionKey
;
import
com.infoloop.tianting.server.session.UserTypeEnum
;
...
...
@@ -39,10 +42,15 @@ import org.springframework.http.ResponseEntity;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.client.RestTemplate
;
import
java.io.IOException
;
import
java.math.BigDecimal
;
import
java.text.MessageFormat
;
import
java.text.ParseException
;
import
java.time.LocalDate
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.stream.Collectors
;
@Slf4j
...
...
@@ -56,6 +64,10 @@ public class PayServiceClient {
private
final
OrderServiceRpcClient
orderServiceRpcClient
;
private
final
ClientResourceTagServiceRpcClient
clientResourceTagServiceRpcClient
;
private
final
EnterpriseResourceServiceRpcClient
enterpriseResourceServiceRpcClient
;
private
final
XmlMapper
xmlMapper
=
new
XmlMapper
();
public
PayResponseDto
payInform
(
PayInformRequestDto
payRequestDto
)
{
...
...
@@ -180,6 +192,29 @@ public class PayServiceClient {
.
userId
(
orderById
.
getOpenId
())
.
userType
(
UserTypeEnum
.
MICRO
)
.
build
(),
data
);
if
(
LocalDate
.
now
().
equals
(
DateUtil
.
toLocalDate
(
orderById
.
getMealTime
())))
{
final
var
orderCreateSuccessData
=
OrderCreateSuccessData
.
builder
()
.
orderId
(
orderById
.
getId
())
.
build
();
final
var
createOrderData
=
SocketMessage
.<
OrderCreateSuccessData
>
builder
()
.
type
(
MessageTypeEnum
.
ORDER
)
.
noticeType
(
NoticeTypeEnum
.
ORDER_CREATED
)
.
subject
(
NoticeTypeEnum
.
ORDER_CREATED
.
getDescription
())
.
message
(
"有新的订单下单成功啦,快去查看吧~"
)
.
data
(
orderCreateSuccessData
)
.
build
();
final
var
clientOperatorIds
=
clientResourceTagServiceRpcClient
.
getOperatorIdsByStallIds
(
List
.
of
(
orderById
.
getStallId
())).
stream
().
map
(
SingleResourceLabelEntityRefsResponse:
:
getEntityId
).
distinct
().
collect
(
Collectors
.
toList
());
final
var
enterpriseOperatorIds
=
enterpriseResourceServiceRpcClient
.
getOperatorIdsByStallId
(
orderById
.
getEnterpriseId
(),
orderById
.
getStallId
());
final
var
userAuthData
=
new
ArrayList
<
UserAuthData
>();
userAuthData
.
addAll
(
clientOperatorIds
.
stream
().
map
(
e
->
UserAuthData
.
builder
().
operatorId
(
e
).
userType
(
UserTypeEnum
.
CLIENT
).
build
()).
collect
(
Collectors
.
toList
()));
userAuthData
.
addAll
(
enterpriseOperatorIds
.
stream
().
map
(
e
->
UserAuthData
.
builder
().
operatorId
(
e
).
userType
(
UserTypeEnum
.
KDS
).
build
()).
collect
(
Collectors
.
toList
()));
log
.
info
(
"received userAuthData:{}"
,
userAuthData
);
try
{
WebSocketServer
.
sendMessageByUserTypes
(
List
.
of
(
UserTypeEnum
.
CLIENT
,
UserTypeEnum
.
KDS
),
userAuthData
,
createOrderData
);
}
catch
(
IOException
e
)
{
log
.
error
(
"Failed to send message to user"
,
e
);
}
}
}
return
updateResponse
.
getIsUpdated
();
}
catch
(
JsonProcessingException
e
)
{
...
...
src/main/java/com/infoloop/tianting/utils/DateUtil.java
View file @
8004c79
...
...
@@ -154,4 +154,8 @@ public final class DateUtil extends DateUtils {
return
toDate
(
localDateTime
);
}
public
static
LocalDate
toLocalDate
(
long
timestamp
)
{
return
Instant
.
ofEpochMilli
(
timestamp
).
atZone
(
CHINA_ZONE
).
toLocalDate
();
}
}
\ No newline at end of file
...
...
src/main/proto/TiantingEnterpriseResourceTagService.proto
View file @
8004c79
...
...
@@ -19,6 +19,7 @@ service EnterpriseResourceTagServiceRpc {
rpc
GetUsersByTagId
(
UsersGetByTagIdRequest
)
returns
(
UsersGetByTagIdResponse
)
{}
rpc
CreateTag
(
TagCreationRpcRequest
)
returns
(
TagCreationRpcResponse
)
{}
rpc
AddResourcesToTag
(
AddResourcesToTagRpcRequest
)
returns
(
AddResourcesToTagRpcResponse
)
{}
rpc
GetOperatorIdsByStallId
(
GetOperatorIdsByStallIdRpcRequest
)
returns
(
GetOperatorIdsByStallIdRpcResponse
)
{}
}
message
TagCreationRpcRequest
{
...
...
@@ -202,4 +203,13 @@ message AddResourcesToTagRpcRequest {
message
AddResourcesToTagRpcResponse
{
bool
isSuccess
=
1
;
}
message
GetOperatorIdsByStallIdRpcRequest
{
int32
enterpriseId
=
1
;
int32
stallId
=
2
;
}
message
GetOperatorIdsByStallIdRpcResponse
{
repeated
int32
operatorIds
=
1
;
}
\ No newline at end of file
...
...
Please
register
or
login
to post a comment