zhuyifan

feat(order): add support for partial order refund and not serve status

......@@ -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
......
......@@ -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;
}
......
......@@ -240,6 +240,7 @@ 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 modifications = orderDetailBatchUpdateDto.getDetails().stream().map(d -> {
......@@ -280,9 +281,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 +322,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 +361,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()
......@@ -396,7 +400,7 @@ public class OrderServiceRpcClient {
// 替换菜品的操作记录
List<SingleOperationDto> operations = new ArrayList<>();
for (OrderDetailDto originalDetail : originalOrderDetails) {
if (!idsOfNeedUpdateMenuDetails.contains(originalDetail.getId()) && !idsOfAddCount.contains(originalDetail.getId())) {
if (!totalIds.contains(originalDetail.getId())) {
continue;
}
OrderOperationType orderOperationType = OrderOperationType.UNKNOWN_OPERATION_TYPE;
......@@ -404,6 +408,8 @@ public class OrderServiceRpcClient {
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 = "";
......