zhuyifan

fix(service): 修复订单创建时的时区问题

......@@ -588,7 +588,7 @@ public class OrderServiceRpcClient {
.setShouldCreateCustomerId(createOrderDto.getShouldCreateCustomerId())
.setShouldCreateCustomerId(true).setCustomerId(createOrderDto.getCustomerId())
.setStallId(createOrderDto.getStallId())
.setStatus(orderStatus)
.setStatus(createOrderDto.getStatus() == null ? orderStatus : createOrderDto.getStatus())
.setAddress(createOrderDto.getAddress())
.setClientId(createOrderDto.getClientId())
.setShouldCreateOpenId(!LoginContextHolder.getOpenId().isEmpty()).setOpenId(LoginContextHolder.getOpenId())
......@@ -599,7 +599,7 @@ public class OrderServiceRpcClient {
.setMenuId(createOrderDto.getMenuId())
.setTotalNum(createOrderDto.getTotalNum())
.setShouldCreatePayPrice(createOrderDto.getOnlinePay() == OnlinePayEnum.LEAVE_HOSPITAL).setPayPrice(createOrderDto.getPayPrice())
.setMealTime(createOrderDto.getMealTime().toLocalDate().atStartOfDay().toInstant(ZoneOffset.UTC).toEpochMilli())
.setMealTime(createOrderDto.getMealTime().toLocalDate().atStartOfDay(DateUtil.CHINA_ZONE).toInstant().toEpochMilli())
.setShouldCreatePickupCode(createOrderDto.getCloseTimeType().equals(CloseTimeType.IMMEDIATELY)).setPickupCode(generatePickupCode())
.setShouldCreateOrderType(true).setOrderType(menuById.getResponse().getOrderRuleJson().getCloseTimeType() == CloseTimeTypeEnum.RESERVATION ? OrderTypeEnum.DELIVERY : OrderTypeEnum.DINE_IN)
.setShouldCreateRemark(true).setRemark(createOrderDto.getRemark())
......@@ -607,6 +607,7 @@ public class OrderServiceRpcClient {
.setCloseTimeType(createOrderDto.getCloseTimeType())
.setShouldCreateOrderDetails(true).addAllOrderDetails(orderDetails)
.build();
log.info("createOrder mealTime:{}", createOrderDto.getMealTime());
if (menuById.getResponse().getOrderRuleJson().getCloseTimeType() == CloseTimeTypeEnum.IMMEDIATELY) {
final var skuIds = createOrderDto.getOrderDetailDtos().stream().map(CreateOrderDetailDto::getSkuId).collect(Collectors.toList());
......
......@@ -54,6 +54,7 @@ import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.text.MessageFormat;
import java.text.ParseException;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
......@@ -161,6 +162,7 @@ public class PayServiceClient {
log.error("Order not found, orderId: {}", orderId);
return false;
}
log.info("Order callback, orderId: {}", orderId);
final var transType = paymentCallbackResult.getTransType();
if (transType.equals("00")) {
......@@ -205,12 +207,20 @@ public class PayServiceClient {
orderServiceRpcClient.updateClientCustomerOrderPaymentResult(orderById, build);
log.info("callback updateClientCustomerOrder result: {}", updateResponse.getIsUpdated());
if (updateResponse.getIsUpdated()) {
String createdAt = Instant.ofEpochMilli(orderById.getCreatedAt())
.atZone(DateUtil.CHINA_ZONE)
.minusHours(8)
.format(DateUtil.Y_M_D_H_M_S);
String payTimed = Instant.ofEpochMilli(orderById.getPayTime())
.atZone(DateUtil.CHINA_ZONE)
.minusHours(8)
.format(DateUtil.Y_M_D_H_M_S);
final var orderPaymentSuccessData =
OrderPaymentSuccessData.builder()
.orderId(orderById.getId())
.orderCode(orderById.getOrderCode())
.createTime(DateUtil.formatDate(orderById.getCreatedAt(), DateUtil.Y_M_D_H_M_S))
.payTime(DateUtil.formatDate(orderById.getPayTime(), DateUtil.Y_M_D_H_M_S))
.createTime(createdAt)
.payTime(payTimed)
.build();
final var data =
SocketMessage.<OrderPaymentSuccessData>builder()
......@@ -340,7 +350,10 @@ public class PayServiceClient {
String appId = businessConfig.getPayClientId();
// 构建paycontent
String payTime = DateUtil.formatDate(orderById.getPayTime(), DateUtil.YMDHMS);
String payTime = Instant.ofEpochMilli(orderById.getPayTime())
.atZone(DateUtil.CHINA_ZONE)
.minusHours(8)
.format(DateUtil.YMDHMS);
BigDecimal price =
new BigDecimal(orderById.getPayPrice())
......
......@@ -98,8 +98,7 @@ public class OrderServiceImpl implements OrderService {
createOrderDto.setCustomerId(operatorCreateOrderDto.getCustomerId());
createOrderDto.setStallId(operatorCreateOrderDto.getStallId());
createOrderDto.setMenuId(operatorCreateOrderDto.getMenuId());
final var mealTime = operatorCreateOrderDto.getMealTime().toLocalDate().atStartOfDay();
createOrderDto.setMealTime(mealTime);
createOrderDto.setMealTime(operatorCreateOrderDto.getMealTime());
createOrderDto.setRemark(operatorCreateOrderDto.getRemark());
createOrderDto.setCreatedBy(operatorLoginInfo.getId());
createOrderDto.setClientId(operator.getClientId());
......