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-06 11:06:21 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
db43305bf1cbd2cdd9d9b9b15517237d1d8a6049
db43305b
1 parent
5ce457eb
fix
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
44 additions
and
15 deletions
src/main/java/com/infoloop/tianting/model/dto/OrderDbDTO.java
src/main/java/com/infoloop/tianting/server/WebSocketServer.java
src/main/java/com/infoloop/tianting/service/client/OrderServiceRpcClient.java
src/main/java/com/infoloop/tianting/service/impl/KdsServiceImpl.java
src/main/java/com/infoloop/tianting/model/dto/OrderDbDTO.java
View file @
db43305
...
...
@@ -17,6 +17,8 @@ import lombok.NoArgsConstructor;
import
lombok.ToString
;
import
javax.validation.Valid
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
import
java.time.LocalDateTime
;
import
java.util.ArrayList
;
import
java.util.List
;
...
...
@@ -117,6 +119,10 @@ public class OrderDbDTO {
private
Boolean
shouldFilterMenuId
=
false
;
@Builder
.
Default
private
Integer
menuId
=
0
;
@Builder
.
Default
private
Boolean
shouldFilterPayStatus
=
false
;
@Builder
.
Default
private
PayStatusEnum
payStatus
=
PayStatusEnum
.
UNKNOWN_PAY_STATUS
;
}
@Data
...
...
@@ -206,15 +212,19 @@ public class OrderDbDTO {
@RequestKeyParam
@ApiModelProperty
(
value
=
"档口 ID"
)
@NotNull
(
message
=
"档口 ID不能为空"
)
private
Integer
stallId
;
@ApiModelProperty
(
value
=
"客户 ID"
)
@NotNull
(
message
=
"客户 ID不能为空"
)
private
Integer
customerId
;
@ApiModelProperty
(
value
=
"餐单 id"
)
@NotNull
(
message
=
"餐单 id不能为空"
)
private
Integer
menuId
;
@ApiModelProperty
(
value
=
"用餐日期"
)
@NotNull
(
message
=
"用餐日期不能为空"
)
private
LocalDateTime
mealTime
;
@ApiModelProperty
(
value
=
"桌号"
)
...
...
@@ -224,9 +234,11 @@ public class OrderDbDTO {
private
String
remark
;
@ApiModelProperty
(
value
=
"支付方式"
)
@NotNull
(
message
=
"支付方式不能为空"
)
private
OnlinePayEnum
onlinePay
;
@ApiModelProperty
(
value
=
"订单菜品详情列表"
)
@NotEmpty
(
message
=
"订单菜品详情列表不能为空"
)
private
List
<
OperatorCreateOrderDetailDto
>
orderDetailDtos
;
}
...
...
@@ -240,10 +252,12 @@ public class OrderDbDTO {
private
Integer
enterpriseId
;
@ApiModelProperty
(
value
=
"院区 ID"
)
@NotNull
(
message
=
"院区 ID不能为空"
)
private
Integer
clientId
;
@RequestKeyParam
@ApiModelProperty
(
value
=
"档口 ID"
)
@NotNull
(
message
=
"档口 ID不能为空"
)
private
Integer
stallId
;
@ApiModelProperty
(
value
=
"需要创建客户 ID"
)
...
...
@@ -256,6 +270,7 @@ public class OrderDbDTO {
private
Integer
status
;
@ApiModelProperty
(
value
=
"餐单 id"
)
@NotNull
(
message
=
"餐单 id不能为空"
)
private
Integer
menuId
;
@ApiModelProperty
(
value
=
"订单商品总数"
)
...
...
@@ -265,6 +280,7 @@ public class OrderDbDTO {
private
Integer
payPrice
;
@ApiModelProperty
(
value
=
"支付方式"
)
@NotNull
(
message
=
"支付方式不能为空"
)
private
OnlinePayEnum
onlinePay
;
@ApiModelProperty
(
value
=
"支付时间"
)
...
...
@@ -280,6 +296,7 @@ public class OrderDbDTO {
private
String
transactionId
;
@ApiModelProperty
(
value
=
"用餐日期"
)
@NotNull
(
message
=
"用餐日期不能为空"
)
private
LocalDateTime
mealTime
;
@ApiModelProperty
(
value
=
"订餐地址"
)
...
...
@@ -309,7 +326,6 @@ public class OrderDbDTO {
@ApiModelProperty
(
value
=
"修改人 ID,修改人可能是院区端登陆的用户,也可能是 KDS 端登陆用户"
)
private
Integer
updatedBy
;
@ApiModelProperty
(
value
=
"更新来源:小程序点餐=1;院区端=2;kds=3;业务中台 = 4"
)
private
Integer
updateSource
;
...
...
@@ -317,6 +333,7 @@ public class OrderDbDTO {
private
CloseTimeType
closeTimeType
;
@ApiModelProperty
(
value
=
"订单菜品详情列表"
)
@NotEmpty
(
message
=
"订单菜品详情列表不能为空"
)
private
List
<
CreateOrderDetailDto
>
orderDetailDtos
;
}
...
...
src/main/java/com/infoloop/tianting/server/WebSocketServer.java
View file @
db43305
...
...
@@ -24,7 +24,7 @@ import java.util.stream.Collectors;
public
class
WebSocketServer
extends
TextWebSocketHandler
{
private
static
final
ConcurrentHashMap
<
UserSessionKey
,
UserSessionData
>
userSessions
=
new
ConcurrentHashMap
<>();
private
static
final
long
INACTIVITY_TIMEOUT
=
2
*
60
*
60
*
1000
;
private
static
final
long
INACTIVITY_TIMEOUT
=
60
*
60
*
1000
;
private
static
final
ScheduledExecutorService
scheduler
=
Executors
.
newScheduledThreadPool
(
1
);
static
{
...
...
@@ -34,6 +34,7 @@ public class WebSocketServer extends TextWebSocketHandler {
private
static
void
cleanInactiveSessions
()
{
final
var
currentTime
=
System
.
currentTimeMillis
();
final
var
iterator
=
userSessions
.
entrySet
().
iterator
();
log
.
info
(
"cleanInactiveSessions; sessions:{}"
,
userSessions
.
keySet
());
while
(
iterator
.
hasNext
())
{
final
var
entry
=
iterator
.
next
();
final
var
key
=
entry
.
getKey
();
...
...
@@ -108,8 +109,17 @@ public class WebSocketServer extends TextWebSocketHandler {
public
void
afterConnectionEstablished
(
WebSocketSession
session
)
{
final
var
key
=
getUserSessionKey
(
session
);
if
(
key
!=
null
)
{
final
var
existingSession
=
userSessions
.
remove
(
key
);
if
(
existingSession
!=
null
)
{
try
{
existingSession
.
closeSession
();
log
.
info
(
"WebSocket old connect closed,userId : {}, userType : {}"
,
key
.
getUserId
(),
key
.
getUserType
());
}
catch
(
IOException
e
)
{
log
.
error
(
"old WebSocket close failed,userId : {}, userType : {}"
,
key
.
getUserId
(),
key
.
getUserType
(),
e
);
}
}
userSessions
.
put
(
key
,
new
UserSessionData
(
session
));
log
.
info
(
"WebSocket connect success
:
userId : {}, userType : {}"
,
key
.
getUserId
(),
key
.
getUserType
());
log
.
info
(
"WebSocket connect success
,
userId : {}, userType : {}"
,
key
.
getUserId
(),
key
.
getUserType
());
}
else
{
log
.
warn
(
"WebSocket connect failed,unable to get valid user information"
);
}
...
...
src/main/java/com/infoloop/tianting/service/client/OrderServiceRpcClient.java
View file @
db43305
...
...
@@ -145,6 +145,8 @@ public class OrderServiceRpcClient {
.
addAllMenuIds
(
List
.
of
(
queryOrderDto
.
getMenuId
()))
.
setShouldFilterOpenIds
(
queryOrderDto
.
getShouldFilterOpenId
())
.
addAllOpenIds
(
List
.
of
(
queryOrderDto
.
getOpenId
()))
.
setShouldFilterPayStatus
(
queryOrderDto
.
getShouldFilterPayStatus
())
.
setPayStatus
(
queryOrderDto
.
getPayStatus
())
.
build
();
return
orderServiceRpcBlockingStub
.
queryClientCustomerOrdersByCondition
(
request
).
getResponsesList
();
}
...
...
@@ -539,9 +541,12 @@ public class OrderServiceRpcClient {
.
build
();
final
var
menuById
=
menuServiceRpcClient
.
getMenuById
(
createOrderDto
.
getEnterpriseId
(),
createOrderDto
.
getMenuId
());
OrderStatusEnum
orderStatus
=
OrderStatusEnum
.
TO_PREPARE
;
if
(
menuById
.
getResponse
().
getOrderRuleJson
().
getModeOfPayment
()
==
ModeOfPaymentEnum
.
ONLINE
&&
menuById
.
getResponse
().
getOrderRuleJson
().
getCloseTimeType
()
==
CloseTimeTypeEnum
.
IMMEDIATELY
)
{
if
(
createOrderDto
.
getOnlinePay
()
!=
OnlinePayEnum
.
ONLINE
)
{
var
orderRuleJson
=
menuById
.
getResponse
().
getOrderRuleJson
();
if
(
orderRuleJson
.
getModeOfPayment
()
==
ModeOfPaymentEnum
.
ONLINE
&&
orderRuleJson
.
getCloseTimeType
()
==
CloseTimeTypeEnum
.
IMMEDIATELY
)
{
orderStatus
=
OrderStatusEnum
.
PREPARING
;
}
}
final
var
creation
=
ClientCustomerOrderCreation
.
newBuilder
()
.
setShouldCreateCustomerId
(
createOrderDto
.
getShouldCreateCustomerId
())
.
setShouldCreateCustomerId
(
true
).
setCustomerId
(
createOrderDto
.
getCustomerId
())
...
...
@@ -553,7 +558,7 @@ public class OrderServiceRpcClient {
.
setShouldCreateRoomNo
(!
createOrderDto
.
getRoomNo
().
isEmpty
()).
setRoomNo
(
createOrderDto
.
getRoomNo
())
.
setShouldCreateTableCode
(
createOrderDto
.
getCloseTimeType
().
equals
(
CloseTimeType
.
IMMEDIATELY
)
||
StringUtils
.
isNotEmpty
(
createOrderDto
.
getTableCode
())).
setTableCode
(
createOrderDto
.
getTableCode
()
==
null
?
""
:
createOrderDto
.
getTableCode
())
.
setShouldCreateOnlinePay
(
true
).
setOnlinePay
(
createOrderDto
.
getOnlinePay
())
.
setShouldCreatePayStatus
(
true
).
setPayStatus
(
createOrderDto
.
getOnlinePay
()
==
OnlinePayEnum
.
ONLINE
||
createOrderDto
.
getOnlinePay
()
==
OnlinePayEnum
.
LEAVE_HOSPITAL
?
PayStatusEnum
.
TO_PAY
:
PayStatusEnum
.
SUCCEED
)
.
setShouldCreatePayStatus
(
true
).
setPayStatus
(
createOrderDto
.
getOnlinePay
()
==
OnlinePayEnum
.
ONLINE
?
PayStatusEnum
.
TO_PAY
:
PayStatusEnum
.
SUCCEED
)
.
setMenuId
(
createOrderDto
.
getMenuId
())
.
setTotalNum
(
createOrderDto
.
getTotalNum
())
.
setShouldCreatePayPrice
(
createOrderDto
.
getOnlinePay
()
==
OnlinePayEnum
.
LEAVE_HOSPITAL
).
setPayPrice
(
createOrderDto
.
getPayPrice
())
...
...
@@ -571,13 +576,10 @@ public class OrderServiceRpcClient {
final
var
skuSellQuantities
=
this
.
querySkuSellQuantitiesByStallAndSkuIds
(
createOrderDto
.
getEnterpriseId
(),
createOrderDto
.
getStallId
(),
skuIds
);
final
var
skuSellQuantityMap
=
skuSellQuantities
.
stream
().
collect
(
Collectors
.
toMap
(
SingleSkuSellQuantityRpcResponse:
:
getSkuId
,
Function
.
identity
()));
final
var
skuMap
=
skuServiceRpcClient
.
getSkusByIds
(
skuIds
).
stream
().
collect
(
Collectors
.
toMap
(
SingleSkuResponse:
:
getId
,
Function
.
identity
()));
final
var
soldOutSkus
=
new
ArrayList
<
String
>();
final
var
skuStockMap
=
new
HashMap
<
String
,
Integer
>();
for
(
var
orderDetail
:
createOrderDto
.
getOrderDetailDtos
())
{
final
var
skuSellQuantityRpcResponse
=
skuSellQuantityMap
.
get
(
orderDetail
.
getSkuId
());
if
(
skuSellQuantityRpcResponse
==
null
)
{
log
.
error
(
"skuSellQuantityRpcResponse is null; stallId:{}, skuId:{}"
,
createOrderDto
.
getStallId
(),
orderDetail
.
getSkuId
());
soldOutSkus
.
add
(
skuMap
.
get
(
orderDetail
.
getSkuId
()).
getName
());
continue
;
}
if
((
skuSellQuantityRpcResponse
.
getTodaySellQuantity
()
+
orderDetail
.
getCount
())
>
skuSellQuantityRpcResponse
.
getMaxSellQuantity
())
{
...
...
@@ -585,9 +587,6 @@ public class OrderServiceRpcClient {
skuStockMap
.
put
(
skuMap
.
get
(
orderDetail
.
getSkuId
()).
getName
(),
skuSellQuantityRpcResponse
.
getMaxSellQuantity
()
-
skuSellQuantityRpcResponse
.
getTodaySellQuantity
());
}
}
if
(!
soldOutSkus
.
isEmpty
())
{
throw
ClientEndExceptions
.
BusinessException
.
build
(
ErrorCodeEnum
.
SKUS_SOLD_OUT_TODAY
,
String
.
join
(
","
,
soldOutSkus
));
}
if
(!
skuStockMap
.
isEmpty
())
{
final
var
noEnoughSkus
=
String
.
join
(
", "
,
skuStockMap
.
keySet
());
throw
ClientEndExceptions
.
BusinessException
.
build
(
ErrorCodeEnum
.
SKUS_STOCK_NO_ENOUGH_TODAY
,
noEnoughSkus
);
...
...
@@ -609,7 +608,7 @@ public class OrderServiceRpcClient {
.
type
(
MessageTypeEnum
.
ORDER
)
.
noticeType
(
NoticeTypeEnum
.
ORDER_CREATED
)
.
subject
(
NoticeTypeEnum
.
ORDER_CREATED
.
getDescription
())
.
message
(
"
您
下单成功啦,快去查看吧~"
)
.
message
(
"
有新的订单
下单成功啦,快去查看吧~"
)
.
data
(
orderCreateSuccessData
)
.
build
();
try
{
...
...
src/main/java/com/infoloop/tianting/service/impl/KdsServiceImpl.java
View file @
db43305
package
com
.
infoloop
.
tianting
.
service
.
impl
;
import
com.infoloop.tianting.clientcustomerorderservice.OrderStatusEnum
;
import
com.infoloop.tianting.clientcustomerorderservice.PayStatusEnum
;
import
com.infoloop.tianting.clientcustomerorderservice.ServeStatusEnum
;
import
com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderDetailRpcResponse
;
import
com.infoloop.tianting.clientcustomerorderservice.SingleClientCustomerOrderRpcResponse
;
...
...
@@ -51,7 +52,6 @@ public class KdsServiceImpl implements KdsService {
@Override
public
List
<
KdsOrderSkuDto
>
getOrderDetailBySku
(
KdsOrderSkuQueryDto
queryDto
)
{
// 获取当日所有的订单 和 订单明细
LocalDate
today
=
LocalDate
.
now
();
LocalDateTime
todayZero
=
today
.
atStartOfDay
();
...
...
@@ -64,8 +64,7 @@ public class KdsServiceImpl implements KdsService {
final
var
operator
=
wOperatorServiceRpcClient
.
getWOperatorById
(
operatorLoginInfo
.
getId
()).
getResponse
();
if
(!
operator
.
getIsSuper
())
{
shouldFilterStallIds
=
true
;
final
var
userResource
=
enterpriseResourceServiceRpcClient
.
getUserResources
(
operatorLoginInfo
.
getEnterpriseId
(),
operatorLoginInfo
.
getId
());
final
var
userResource
=
enterpriseResourceServiceRpcClient
.
getUserResources
(
operatorLoginInfo
.
getEnterpriseId
(),
operatorLoginInfo
.
getId
());
stallIds
.
addAll
(
userResource
.
getStallIdsList
());
}
...
...
@@ -77,6 +76,8 @@ public class KdsServiceImpl implements KdsService {
.
mealTimeStart
(
todayZero
)
.
shouldFilterMealTimeEnd
(
true
)
.
mealTimeEnd
(
tomorrowZero
)
.
shouldFilterPayStatus
(
true
)
.
payStatus
(
PayStatusEnum
.
SUCCEED
)
.
build
();
final
var
orderList
=
orderServiceRpcClient
.
getOrdersByCondition
(
queryOrderDto
);
List
<
Integer
>
orderIds
=
orderList
.
stream
()
...
...
@@ -309,6 +310,8 @@ public class KdsServiceImpl implements KdsService {
.
mealTimeEnd
(
tomorrowZero
)
.
shouldFilterStatus
(
true
)
.
status
(
queryDto
.
getOrderStatus
())
.
shouldFilterPayStatus
(
true
)
.
payStatus
(
PayStatusEnum
.
SUCCEED
)
.
build
();
final
var
orderList
=
orderServiceRpcClient
.
getOrdersByCondition
(
queryOrderDto
);
...
...
Please
register
or
login
to post a comment