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-11-17 10:44:09 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
de053f16b1e3d577663c60c8951724dfb0edbc7a
de053f16
1 parent
32dce8b4
fix(order): optimize dish replacement logic and update payment transaction ID
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
94 additions
and
10 deletions
src/main/java/com/infoloop/tianting/controller/PayController.java
src/main/java/com/infoloop/tianting/model/bo/OrderDetailBO.java
src/main/java/com/infoloop/tianting/model/dto/OrderDbDTO.java
src/main/java/com/infoloop/tianting/model/dto/PayDTO.java
src/main/java/com/infoloop/tianting/model/dto/PaymentCallbackResult.java
src/main/java/com/infoloop/tianting/model/dto/SettlementDTO.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/service/impl/SettlementServiceImpl.java
src/main/java/com/infoloop/tianting/utils/JsonUtil.java
src/main/proto/ClientCustomerOrderService.proto
src/main/java/com/infoloop/tianting/controller/PayController.java
View file @
de053f1
...
...
@@ -60,4 +60,5 @@ public class PayController {
public
String
cancel
(
@Valid
@RequestBody
PayDTO
.
PayRefundRequestDto
payRefundRequestDto
)
{
return
payServiceClient
.
orderPayRefund
(
payRefundRequestDto
);
}
}
\ No newline at end of file
...
...
src/main/java/com/infoloop/tianting/model/bo/OrderDetailBO.java
0 → 100644
View file @
de053f1
package
com
.
infoloop
.
tianting
.
model
.
bo
;
import
com.infoloop.tianting.clientcustomerorderservice.ServeStatusEnum
;
import
lombok.Data
;
@Data
public
class
OrderDetailBO
{
private
int
id
;
public
int
skuId
;
private
String
skuName
;
private
Integer
price
;
private
int
count
;
private
String
adjustSkuRemark
;
private
ServeStatusEnum
serveStatus
;
}
src/main/java/com/infoloop/tianting/model/dto/OrderDbDTO.java
View file @
de053f1
...
...
@@ -520,6 +520,7 @@ public class OrderDbDTO {
private
Integer
count
;
private
String
adjustSkuRemark
;
private
String
serveStatus
;
private
Integer
price
;
}
...
...
@@ -730,6 +731,10 @@ public class OrderDbDTO {
@Builder
.
Default
private
Boolean
shouldUpdateServeStatus
=
false
;
@ApiModelProperty
(
value
=
"价格"
)
@Builder
.
Default
private
Integer
price
=
null
;
@ApiModelProperty
(
value
=
"出餐状态: 默认未出餐=1; 不出餐=2; 已出餐=3"
)
@Builder
.
Default
private
ServeStatusEnum
serveStatus
=
ServeStatusEnum
.
SERVE_NOT_START
;
...
...
src/main/java/com/infoloop/tianting/model/dto/PayDTO.java
View file @
de053f1
...
...
@@ -9,6 +9,8 @@ import lombok.Builder;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.List
;
@Data
@ApiModel
(
description
=
"支付DTO"
)
public
class
PayDTO
{
...
...
@@ -31,6 +33,7 @@ public class PayDTO {
@AllArgsConstructor
public
static
class
PayRefundRequestDto
{
private
Integer
orderId
;
private
List
<
Integer
>
orderDetailIds
;
private
String
hospitalCode
;
}
...
...
src/main/java/com/infoloop/tianting/model/dto/PaymentCallbackResult.java
View file @
de053f1
...
...
@@ -18,6 +18,9 @@ public class PaymentCallbackResult {
@JacksonXmlProperty
(
localName
=
"TransSN"
)
private
String
transSN
;
@JacksonXmlProperty
(
localName
=
"TradeReferenceNo"
)
private
String
tradeReferenceNo
;
@JacksonXmlProperty
(
localName
=
"TransType"
)
private
String
transType
;
...
...
src/main/java/com/infoloop/tianting/model/dto/SettlementDTO.java
View file @
de053f1
...
...
@@ -103,6 +103,8 @@ public class SettlementDTO {
private
String
remark
;
private
String
avoidRemark
;
private
String
onlinePay
;
private
String
operationType
;
private
String
transactionId
;
}
@Data
...
...
src/main/java/com/infoloop/tianting/service/client/OrderServiceRpcClient.java
View file @
de053f1
...
...
@@ -22,6 +22,8 @@ import com.infoloop.tianting.clientcustomerorderservice.GetClientCustomerOrderBy
import
com.infoloop.tianting.clientcustomerorderservice.GetClientCustomerOrderDetailsByIdsRpcRequest
;
import
com.infoloop.tianting.clientcustomerorderservice.GetClientCustomerOrderDetailsByOrderIdsRpcRequest
;
import
com.infoloop.tianting.clientcustomerorderservice.GetClientCustomerOrdersByCustomerIdRpcRequest
;
import
com.infoloop.tianting.clientcustomerorderservice.GetOrderOperationRecordsByOrderIdsRequest
;
import
com.infoloop.tianting.clientcustomerorderservice.GetOrderOperationRecordsByOrderIdsResponse
;
import
com.infoloop.tianting.clientcustomerorderservice.MealDetail
;
import
com.infoloop.tianting.clientcustomerorderservice.OnlinePayEnum
;
import
com.infoloop.tianting.clientcustomerorderservice.OrderOperationRecordCreation
;
...
...
@@ -240,8 +242,10 @@ public class OrderServiceRpcClient {
final
var
operator
=
operatorServiceRpcClient
.
getCOperatorById
(
operatorLoginInfo
.
getId
());
final
var
idsOfNeedUpdateMenuDetails
=
new
ArrayList
<
Integer
>();
final
var
idsOfAddCount
=
new
ArrayList
<
Integer
>();
final
var
idsOfNoReject
=
new
ArrayList
<
Integer
>();
List
<
OrderDetailDto
>
originalOrderDetails
=
new
ArrayList
<>();
List
<
OrderDetailDto
>
newOrderDetails
;
final
var
orderDetailsMap
=
orderDetailBatchUpdateDto
.
getDetails
().
stream
().
collect
(
Collectors
.
toMap
(
OrderDbDTO
.
OrderDetailUpdateDto
::
getId
,
Function
.
identity
()));
final
var
modifications
=
orderDetailBatchUpdateDto
.
getDetails
().
stream
().
map
(
d
->
{
var
mealDetail
=
MealDetail
.
newBuilder
().
build
();
Integer
menuDetailId
=
0
;
...
...
@@ -280,9 +284,11 @@ public class OrderServiceRpcClient {
.
build
();
}
}
ServeStatusEnum
serveStatus
=
ServeStatusEnum
.
UNKNOWN_SERVE_STATUS
;
if
(
d
.
getShouldUpdateServeStatus
())
{
if
(
d
.
getServeStatus
()
==
ServeStatusEnum
.
SERVE_REJECT
)
{
idsOfNoReject
.
add
(
d
.
getId
());
}
serveStatus
=
d
.
getServeStatus
();
}
Integer
count
=
0
;
...
...
@@ -319,7 +325,8 @@ public class OrderServiceRpcClient {
.
build
();
final
var
totalIds
=
new
ArrayList
<>(
idsOfNeedUpdateMenuDetails
);
totalIds
.
addAll
(
idsOfAddCount
);
if
(!
idsOfNeedUpdateMenuDetails
.
isEmpty
()
||
!
idsOfAddCount
.
isEmpty
())
{
totalIds
.
addAll
(
idsOfNoReject
);
if
(!
totalIds
.
isEmpty
())
{
final
var
orgionalResponseList
=
getClientCustomerOrderDetailsByIds
(
totalIds
);
originalOrderDetails
=
orgionalResponseList
.
stream
().
map
(
d
->
OrderDetailDto
.
builder
()
.
id
(
d
.
getId
())
...
...
@@ -357,7 +364,7 @@ public class OrderServiceRpcClient {
}
final
var
res
=
orderServiceRpcBlockingStub
.
batchUpdateClientCustomerOrderDetails
(
request
);
if
(
res
.
getIsUpdated
())
{
if
(!
idsOfNeedUpdateMenuDetails
.
isEmpty
()
||
!
idsOfAddCount
.
isEmpty
())
{
if
(!
totalIds
.
isEmpty
())
{
final
var
newResponseList
=
getClientCustomerOrderDetailsByIds
(
totalIds
);
newOrderDetails
=
newResponseList
.
stream
().
map
(
d
->
OrderDetailDto
.
builder
()
...
...
@@ -392,15 +399,21 @@ public class OrderServiceRpcClient {
.
updateSource
(
d
.
getUpdateSource
().
getNumber
())
.
updatedAt
(
DateUtil
.
formatDate
(
d
.
getUpdatedAt
()))
.
updatedBy
(
d
.
getUpdatedBy
())
.
build
()).
collect
(
Collectors
.
toList
()
);
.
build
()).
toList
(
);
// 替换菜品的操作记录
List
<
SingleOperationDto
>
operations
=
new
ArrayList
<>();
for
(
OrderDetailDto
originalDetail
:
originalOrderDetails
)
{
if
(!
totalIds
.
contains
(
originalDetail
.
getId
()))
{
continue
;
}
final
var
orderDetailUpdateDto
=
orderDetailsMap
.
get
(
originalDetail
.
getId
());
OrderOperationType
orderOperationType
=
OrderOperationType
.
UNKNOWN_OPERATION_TYPE
;
if
(
idsOfNeedUpdateMenuDetails
.
contains
(
originalDetail
.
getId
()))
{
orderOperationType
=
OrderOperationType
.
REPLACE_DISHES
;
}
else
if
(
idsOfAddCount
.
contains
(
originalDetail
.
getId
()))
{
orderOperationType
=
OrderOperationType
.
ADD_DISHES
;
}
else
if
(
idsOfNoReject
.
contains
(
originalDetail
.
getId
()))
{
orderOperationType
=
OrderOperationType
.
NOT_SERVE
;
}
String
originalDetailStr
;
String
newDetailStr
=
""
;
...
...
@@ -413,6 +426,7 @@ public class OrderServiceRpcClient {
.
count
(
newDetail
.
get
().
getCount
())
.
adjustSkuRemark
(
newDetail
.
get
().
getAdjustSkuRemark
())
.
serveStatus
(
newDetail
.
get
().
getServeStatus
().
name
())
.
price
(
orderDetailUpdateDto
.
getPrice
()
==
null
?
newDetail
.
get
().
getPrice
()
:
orderDetailUpdateDto
.
getPrice
())
.
build
();
newDetailStr
=
JsonUtil
.
writeAsJson
(
List
.
of
(
newOrderDetailOperation
));
}
...
...
@@ -423,6 +437,7 @@ public class OrderServiceRpcClient {
.
count
(
originalDetail
.
getCount
())
.
adjustSkuRemark
(
originalDetail
.
getAdjustSkuRemark
())
.
serveStatus
(
originalDetail
.
getServeStatus
().
name
())
.
price
(
originalDetail
.
getPrice
())
.
build
();
originalDetailStr
=
JsonUtil
.
writeAsJson
(
List
.
of
(
originalOrderDetailOperation
));
final
var
operation
=
SingleOperationDto
.
builder
()
...
...
@@ -471,7 +486,6 @@ public class OrderServiceRpcClient {
.
setCreationSource
(
batchOperationDto
.
getCreationSource
())
.
build
();
return
orderServiceRpcBlockingStub
.
batchCreateOrderOperationRecords
(
request
);
}
public
QueryClientCustomerOrdersByPaginationRpcResponse
queryClientCustomerOrdersByPagination
(
QueryOrderByPaginationDto
queryOrderDto
)
{
...
...
@@ -489,6 +503,14 @@ public class OrderServiceRpcClient {
return
orderServiceRpcBlockingStub
.
queryClientCustomerOrdersByPagination
(
request
);
}
public
GetOrderOperationRecordsByOrderIdsResponse
getOrderOperationRecordsByOrderIds
(
int
enterpriseId
,
List
<
Integer
>
orderIds
)
{
final
var
request
=
GetOrderOperationRecordsByOrderIdsRequest
.
newBuilder
()
.
setEnterpriseId
(
enterpriseId
)
.
addAllOrderIds
(
orderIds
)
.
build
();
return
orderServiceRpcBlockingStub
.
getOrderOperationRecordsByOrderIds
(
request
);
}
public
QueryClientCustomerOrdersByConditionRpcResponse
queryClientCustomerOrdersByCondition
(
OrderDbDTO
.
QueryOrderDto
queryOrderDto
)
{
final
var
request
=
QueryClientCustomerOrdersByConditionRpcRequest
.
newBuilder
()
.
setShouldFilterStatus
(
true
)
...
...
src/main/java/com/infoloop/tianting/service/client/PayServiceClient.java
View file @
de053f1
...
...
@@ -38,6 +38,8 @@ import lombok.RequiredArgsConstructor;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.codec.binary.Base64
;
import
org.apache.commons.codec.digest.DigestUtils
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.HttpEntity
;
import
org.springframework.http.HttpHeaders
;
...
...
@@ -200,8 +202,8 @@ public class PayServiceClient {
.
setPayStatus
(
PayStatusEnum
.
SUCCEED
)
.
setShouldUpdateStatus
(
true
)
.
setStatus
(
OrderStatusEnum
.
PREPARING
)
.
setShouldUpdateTransactionId
(
true
)
.
setTransactionId
(
paymentCallbackResult
.
getTransSN
()
)
.
setShouldUpdateTransactionId
(
StringUtils
.
isNotEmpty
(
paymentCallbackResult
.
getTradeReferenceNo
())
)
.
setTransactionId
(
StringUtils
.
isNotEmpty
(
paymentCallbackResult
.
getTradeReferenceNo
())
?
paymentCallbackResult
.
getTradeReferenceNo
()
:
""
)
.
build
();
final
var
updateResponse
=
orderServiceRpcClient
.
updateClientCustomerOrderPaymentResult
(
orderById
,
build
);
...
...
@@ -346,6 +348,11 @@ public class PayServiceClient {
log
.
info
(
"Order {} pay is beyond cancel time."
,
orderId
);
throw
ClientEndExceptions
.
BusinessException
.
build
(
ErrorCodeEnum
.
ORDER_PAY_REFUND_FAILED
);
}
BigDecimal
detailPrice
=
BigDecimal
.
ZERO
;
if
(
CollectionUtils
.
isNotEmpty
(
payRefundRequestDto
.
getOrderDetailIds
()))
{
final
var
orderDetails
=
orderServiceRpcClient
.
getClientCustomerOrderDetailsByIds
(
payRefundRequestDto
.
getOrderDetailIds
());
detailPrice
=
orderDetails
.
stream
().
filter
(
e
->
e
.
getPrice
()
>
0
).
map
(
e
->
new
BigDecimal
(
e
.
getPrice
()).
divide
(
new
BigDecimal
(
100
),
2
,
RoundingMode
.
HALF_UP
)).
reduce
(
BigDecimal
.
ZERO
,
BigDecimal:
:
add
);
}
String
appId
=
businessConfig
.
getPayClientId
();
...
...
@@ -355,9 +362,9 @@ public class PayServiceClient {
.
minusHours
(
8
)
.
format
(
DateUtil
.
YMDHMS
);
BigDecimal
price
=
new
BigDecimal
(
orderById
.
getPayPrice
()
)
.
divide
(
new
BigDecimal
(
100
),
2
,
RoundingMode
.
HALF_UP
)
.
negate
();
BigDecimal
price
=
detailPrice
.
compareTo
(
BigDecimal
.
ZERO
)
==
0
?
new
BigDecimal
(
orderById
.
getPayPrice
()).
divide
(
new
BigDecimal
(
100
),
2
,
RoundingMode
.
HALF_UP
).
negate
(
)
:
detailPrice
.
negate
();
String
payContentStr
=
orderById
.
getId
()
...
...
src/main/java/com/infoloop/tianting/service/impl/SettlementServiceImpl.java
View file @
de053f1
This diff is collapsed. Click to expand it.
src/main/java/com/infoloop/tianting/utils/JsonUtil.java
View file @
de053f1
...
...
@@ -2,6 +2,7 @@ package com.infoloop.tianting.utils;
import
com.fasterxml.jackson.annotation.JsonInclude
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
com.fasterxml.jackson.databind.DeserializationFeature
;
import
com.fasterxml.jackson.databind.JsonNode
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
...
...
@@ -41,6 +42,14 @@ public class JsonUtil {
}
}
public
static
<
T
>
T
readJsonAs
(
final
String
json
,
final
TypeReference
<
T
>
typeRef
)
{
try
{
return
OBJECT_MAPPER
.
readValue
(
json
,
typeRef
);
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
e
);
}
}
public
static
<
T
>
T
convertValue
(
final
Object
object
,
final
Class
<
T
>
clazz
)
{
return
OBJECT_MAPPER
.
convertValue
(
object
,
clazz
);
}
...
...
src/main/proto/ClientCustomerOrderService.proto
View file @
de053f1
...
...
@@ -32,6 +32,7 @@ service ClientCustomerOrderServiceRpc {
// 操作记录
rpc
GetOrderOperationRecordsByOrderId
(
GetOrderOperationRecordsByOrderIdRequest
)
returns
(
GetOrderOperationRecordsByOrderIdResponse
)
{}
rpc
GetOrderOperationRecordsByOrderIds
(
GetOrderOperationRecordsByOrderIdsRequest
)
returns
(
GetOrderOperationRecordsByOrderIdsResponse
)
{}
rpc
BatchCreateOrderOperationRecords
(
BatchCreateOrderOperationRecordsRequest
)
returns
(
BatchCreateOrderOperationRecordsResponse
)
{}
...
...
@@ -624,6 +625,15 @@ message GetOrderOperationRecordsByOrderIdResponse {
repeated
OrderOperationRecord
responses
=
1
;
}
message
GetOrderOperationRecordsByOrderIdsRequest
{
int32
enterpriseId
=
1
;
repeated
int32
orderIds
=
2
;
}
message
GetOrderOperationRecordsByOrderIdsResponse
{
repeated
OrderOperationRecord
responses
=
1
;
}
message
OrderOperationRecordCreation
{
int32
orderId
=
1
;
OrderOperationType
type
=
2
;
...
...
Please
register
or
login
to post a comment