Browse Source

对接拼团数据1

master
wangfukang 17 hours ago
parent
commit
9974c22c79
  1. 16
      hiver-admin/test-output/test-report.html
  2. 24
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallOrderController.java
  3. 2
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/mq/OrderDelayConsumer.java
  4. 7
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallOrderService.java
  5. 120
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderGroupServiceImpl.java
  6. 112
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderServiceImpl.java
  7. 27
      hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/DaQuReceiptRenderUtil.java

16
hiver-admin/test-output/test-report.html

@ -35,7 +35,7 @@
<a href="#"><span class="badge badge-primary">Hiver</span></a>
</li>
<li class="m-r-10">
<a href="#"><span class="badge badge-primary">十一月 10, 2026 14:35:16</span></a>
<a href="#"><span class="badge badge-primary">十一月 11, 2026 00:26:01</span></a>
</li>
</ul>
</div>
@ -84,7 +84,7 @@
<div class="test-detail">
<span class="meta text-white badge badge-sm"></span>
<p class="name">passTest</p>
<p class="text-sm"><span>14:35:17 下午</span> / <span>0.03 secs</span></p>
<p class="text-sm"><span>00:26:02 上午</span> / <span>0.033 secs</span></p>
</div>
<div class="test-contents d-none">
<div class="detail-head">
@ -92,9 +92,9 @@
<div class="info">
<div class='float-right'><span class='badge badge-default'>#test-id=1</span></div>
<h5 class="test-status text-pass">passTest</h5>
<span class='badge badge-success'>11.10.2026 14:35:17</span>
<span class='badge badge-danger'>11.10.2026 14:35:17</span>
<span class='badge badge-default'>0.03 secs</span>
<span class='badge badge-success'>11.11.2026 00:26:02</span>
<span class='badge badge-danger'>11.11.2026 00:26:02</span>
<span class='badge badge-default'>0.033 secs</span>
</div>
<div class="m-t-10 m-l-5"></div>
</div>
@ -104,7 +104,7 @@
<tbody>
<tr class="event-row">
<td><span class="badge log pass-bg">Pass</span></td>
<td>14:35:17</td>
<td>0:26:02</td>
<td>
Test passed
</td>
@ -128,13 +128,13 @@
<div class="col-md-3">
<div class="card"><div class="card-body">
<p class="m-b-0">Started</p>
<h3>十一月 10, 2026 14:35:16</h3>
<h3>十一月 11, 2026 00:26:01</h3>
</div></div>
</div>
<div class="col-md-3">
<div class="card"><div class="card-body">
<p class="m-b-0">Ended</p>
<h3>十一月 10, 2026 14:35:17</h3>
<h3>十一月 11, 2026 00:26:02</h3>
</div></div>
</div>
<div class="col-md-3">

24
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/controller/MallOrderController.java

@ -23,6 +23,9 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -239,15 +242,32 @@ public class MallOrderController {
*/
@PostMapping("/userRequireMake")
@ApiOperation(value = "用户点击出餐")
public Result userRequireMake(@ApiParam("订单ID") @RequestParam String orderId) {
public Result userRequireMake(@ApiParam("订单ID") @RequestParam String orderId,
@ApiParam("预约用餐时间") @RequestParam(required = false) String userRequireMakeTime) {
try {
mallOrderService.userRequireMake(orderId);
mallOrderService.userRequireMake(orderId, parseUserRequireMakeTime(userRequireMakeTime));
return ResultUtil.success("通知商家成功");
} catch (Exception e) {
log.error("出餐失败: {}", e.getMessage(), e);
return ResultUtil.error(e.getMessage());
}
}
private Date parseUserRequireMakeTime(String value) {
if (value == null || value.trim().isEmpty()) {
return null;
}
String text = value.trim().replace(' ', 'T');
if (text.length() == 16) {
text = text + ":00";
}
try {
return Date.from(LocalDateTime.parse(text).atZone(ZoneId.systemDefault()).toInstant());
} catch (Exception e) {
throw new RuntimeException("用餐时间格式不正确");
}
}
/**
* 商家拒单
*/

2
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/mq/OrderDelayConsumer.java

@ -275,7 +275,6 @@ public class OrderDelayConsumer {
MallOrder order = mallOrderMapper.selectById(orderId);
if (order == null
|| !Integer.valueOf(2).equals(order.getDeliveryType())
|| Integer.valueOf(1).equals(order.getUserRequireMake())
|| order.getUserRequireMakeTime() == null
|| order.getShopMakeTime() != null
|| order.getStatus() == null
@ -288,6 +287,7 @@ public class OrderDelayConsumer {
jPushService.sendPushNotification(shop.getClientId(), "您有一笔预约到店订单可以出餐啦!", orderId);
}
orderAsyncProducer.sendCloudPrint(orderId, "SHOP_APPOINTMENT_MAKE");
mallOrderService.scheduleStorePickupCookTimeout(orderId);
}
private void handleTransferArriveTimeout(String orderId) {

7
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/service/mybatis/MallOrderService.java

@ -85,7 +85,12 @@ public interface MallOrderService extends IService<MallOrder> {
/**
* 用户要求出餐
*/
void userRequireMake(String orderId);
void userRequireMake(String orderId, java.util.Date userRequireMakeTime);
/**
* 到店订单通知商家出餐后,按取餐时间和商家出餐时长设置出餐超时提醒。
*/
void scheduleStorePickupCookTimeout(String orderId);
void updateSaleCacheIncrementalViaMq(String shopId, String regionId, java.util.List<cc.hiver.mall.pojo.dto.CreateOrderDTO.OrderItemDTO> items, Integer shopSaleCount);

120
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderGroupServiceImpl.java

@ -161,13 +161,19 @@ public class MallOrderGroupServiceImpl extends ServiceImpl<MallOrderGroupMapper,
// 通过 head_order_id 找到团长订单,再通过 groupUserIds 关联
// 策略:查所有 orderId 在 groupOrderIds 中、shopId 相同、status=待成团的订单
// 更简洁:直接查 mall_order 中 id in (groupOrderIds split) AND shop_id = ? AND status = 10
List<String> orderIdList = Arrays.asList(group.getGroupOrderIds().split(","));
List<String> orderIdList = parseGroupOrderIds(group);
List<MallOrderGoods> goodsList = new ArrayList<>();
LambdaQueryWrapper<MallOrder> oqw = new LambdaQueryWrapper<>();
oqw.eq(MallOrder::getShopId, group.getShopId())
.eq(MallOrder::getStatus, ORDER_STATUS_WAIT_GROUP)
oqw.eq(MallOrder::getStatus, ORDER_STATUS_WAIT_GROUP)
.in(MallOrder::getId, orderIdList);
List<MallOrder> waitingOrders = mallOrderService.list(oqw);
List<MallOrder> waitingOrders = orderIdList.isEmpty()
? new ArrayList<>()
: mallOrderService.list(oqw);
if (waitingOrders.size() < orderIdList.size()) {
log.warn("成团时有订单未处于待成团,groupId={},groupOrderIds={},命中={}",
groupId, group.getGroupOrderIds(),
waitingOrders.stream().map(MallOrder::getId).collect(java.util.stream.Collectors.toList()));
}
boolean isFace2Face = group.getIsFace() != null && group.getIsFace() == 1;
List<MallOrder> deliveryOrders = new ArrayList<>();
@ -177,9 +183,10 @@ public class MallOrderGroupServiceImpl extends ServiceImpl<MallOrderGroupMapper,
for (MallOrder order : waitingOrders) {
int targetStatus = (order.getDeliveryType() != null && order.getDeliveryType() == 1) ? 2 : 3;
LambdaUpdateWrapper<MallOrder> ouw = new LambdaUpdateWrapper<>();
String latestSeq = null;
//代表该拼团子订单订单选择到店
if(targetStatus == 3){
String latestSeq = String.format("%s-%s",
latestSeq = String.format("%s-%s",
LocalDate.now().format(DateTimeFormatter.ofPattern("MMdd")),
merchantOrderSeqUtil.generateOrderSequence(order.getShopId(), 2));
ouw.eq(MallOrder::getId, order.getId())
@ -192,12 +199,21 @@ public class MallOrderGroupServiceImpl extends ServiceImpl<MallOrderGroupMapper,
.set(MallOrder::getStatus, targetStatus);
}
if (!mallOrderService.update(ouw)) {
log.warn("成团激活订单失败,状态已变化 groupId={} orderId={}", groupId, order.getId());
continue;
}
if (targetStatus == 2) {
notifyShopDeliveryOrder(order);
} else if (targetStatus == 3) {
notifyOrScheduleStorePickupMake(order);
order.setStatus(targetStatus);
if (latestSeq != null) {
order.setNumberCode(latestSeq);
}
try {
if (targetStatus == 2) {
notifyShopDeliveryOrder(order);
} else if (targetStatus == 3) {
notifyOrScheduleStorePickupMake(order);
}
} catch (Exception e) {
log.error("成团通知或打印失败 groupId={} orderId={}", groupId, order.getId(), e);
}
MallOrderVO orderVO = buildVO(order, null, null, null);
orderVO.setStatus(targetStatus);
@ -362,30 +378,44 @@ public class MallOrderGroupServiceImpl extends ServiceImpl<MallOrderGroupMapper,
if (order == null || !Integer.valueOf(DELIVERY_TYPE_SELF).equals(order.getDeliveryType())) {
return;
}
if (Integer.valueOf(1).equals(order.getUserRequireMake())) {
notifyAndPrintStorePickupMake(order, "SHOP_INSTANT_MAKE");
triggerShopCookTimeoutEvent(order);
log.info("到店成团出餐判断 orderId={} deliveryType={} userRequireMake={} userRequireMakeTime={}",
order.getId(), order.getDeliveryType(), order.getUserRequireMake(), order.getUserRequireMakeTime());
if (order.getUserRequireMakeTime() != null) {
Date now = new Date();
boolean alreadyDue = !order.getUserRequireMakeTime().after(now);
long delayMillis = order.getUserRequireMakeTime().getTime()
- STORE_PICKUP_NOTIFY_BEFORE_MILLIS
- now.getTime();
if (alreadyDue || delayMillis <= 0) {
notifyAndPrintStorePickupMake(order, "SHOP_APPOINTMENT_MAKE");
triggerShopCookTimeoutQuietly(order);
} else {
orderAsyncProducer.sendDelayMessage(order.getId(), DELAY_TYPE_STORE_PICKUP_COOK_NOTIFY, delayMillis);
}
return;
}
if (order.getUserRequireMakeTime() == null) {
return;
if (Integer.valueOf(1).equals(order.getUserRequireMake())) {
notifyAndPrintStorePickupMake(order, "SHOP_INSTANT_MAKE");
triggerShopCookTimeoutQuietly(order);
}
long delayMillis = order.getUserRequireMakeTime().getTime()
- STORE_PICKUP_NOTIFY_BEFORE_MILLIS
- System.currentTimeMillis();
if (delayMillis <= 0) {
notifyAndPrintStorePickupMake(order, "SHOP_APPOINTMENT_MAKE");
}
private void triggerShopCookTimeoutQuietly(MallOrder order) {
try {
triggerShopCookTimeoutEvent(order);
return;
} catch (Exception e) {
log.warn("到店出餐超时监听发送失败 orderId={}: {}", order == null ? null : order.getId(), e.getMessage());
}
orderAsyncProducer.sendDelayMessage(order.getId(), DELAY_TYPE_STORE_PICKUP_COOK_NOTIFY, delayMillis);
}
private void notifyAndPrintStorePickupMake(MallOrder order, String printReason) {
try {
Shop shop = getShopFromCache(order.getRegionId(), order.getShopId());
if (shop != null && StringUtils.isNotBlank(shop.getClientId())) {
jPushService.sendPushNotification(shop.getClientId(), "您有一笔新的到店订单", order.getId());
String message = StringUtils.isNotBlank(order.getNumberCode())
? "您有一笔新的到店订单 " + order.getNumberCode()
: "您有一笔新的到店订单";
jPushService.sendPushNotification(shop.getClientId(), message, order.getId());
}
} catch (Exception e) {
log.warn("到店订单推送失败 orderId={}: {}", order.getId(), e.getMessage());
@ -474,18 +504,44 @@ public class MallOrderGroupServiceImpl extends ServiceImpl<MallOrderGroupMapper,
}
private void triggerShopCookTimeoutEvent(MallOrder order) {
if (order != null) {
long cookTimeMins = 15; // default
try {
int cachedCookTime = safeMinutes(getCookingTime(order.getRegionId(), order.getShopId()));
if (cachedCookTime > 0) {
cookTimeMins = cachedCookTime;
}
} catch (Exception e) {
log.error("获取店铺出餐时间缓存异常: {}", e.getMessage());
if (order == null || StringUtils.isBlank(order.getId())) {
return;
}
long delayMillis = resolveStorePickupCookTimeoutDelay(order);
log.info("到店出餐超时提醒 orderId={} userRequireMakeTime={} delayMillis={}",
order.getId(), order.getUserRequireMakeTime(), delayMillis);
orderAsyncProducer.sendDelayMessage(order.getId(), "Shop_Cook_Timeout", delayMillis);
}
/**
* 超时提醒时刻 = 取餐时间 - 商家出餐时长。
* 这个时刻已经过了时,从当前起按商家出餐时长计时,避免立刻判超时。
* 若商家出餐时长长于通知后的剩余时间,则等通知后再给足出餐时长。
*/
private long resolveStorePickupCookTimeoutDelay(MallOrder order) {
long cookMillis = 15L * 60 * 1000L;
try {
int cachedCookTime = safeMinutes(getCookingTime(order.getRegionId(), order.getShopId()));
if (cachedCookTime > 0) {
cookMillis = cachedCookTime * 60L * 1000L;
}
orderAsyncProducer.sendDelayMessage(order.getId(), "Shop_Cook_Timeout", cookTimeMins * 60 * 1000L);
} catch (Exception e) {
log.error("获取店铺出餐时间缓存异常: {}", e.getMessage());
}
long now = System.currentTimeMillis();
Date pickupTime = order.getUserRequireMakeTime();
if (pickupTime == null) {
return cookMillis;
}
long pickupAt = pickupTime.getTime();
long startAt = Math.max(now, pickupAt - STORE_PICKUP_NOTIFY_BEFORE_MILLIS);
long timeoutAt = pickupAt - cookMillis;
if (timeoutAt <= now) {
timeoutAt = now + cookMillis;
} else {
timeoutAt = Math.max(timeoutAt, startAt + cookMillis);
}
return Math.max(1000L, timeoutAt - now);
}
/**

112
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/serviceimpl/mybatis/MallOrderServiceImpl.java

@ -805,7 +805,7 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder
LambdaUpdateWrapper<MallOrderGroup> guw = new LambdaUpdateWrapper<>();
guw.eq(MallOrderGroup::getId, group.getId())
.set(MallOrderGroup::getCurrentMembers, newMembers);
mallOrderGroupMapper.update(group,guw);
mallOrderGroupMapper.update(null, guw);
//缓存更新
group.setCurrentMembers(newMembers);
shopGroupOrderCacheUtil.update(group.getShopId(), group);
@ -816,7 +816,7 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder
LambdaUpdateWrapper<MallOrderGroup> guw = new LambdaUpdateWrapper<>();
guw.eq(MallOrderGroup::getId, group.getId())
.set(MallOrderGroup::getStatus, GROUP_STATUS_FORMING).set(MallOrderGroup::getCurrentMembers, newMembers);
mallOrderGroupMapper.update(group,guw);
mallOrderGroupMapper.update(null, guw);
//普通拼团团长发起拼团进缓存
if(order.getOrderType() == ORDER_TYPE_GROUP){
group.setCurrentMembers(newMembers);
@ -831,7 +831,7 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder
LambdaUpdateWrapper<MallOrderGroup> guw = new LambdaUpdateWrapper<>();
guw.eq(MallOrderGroup::getId, group.getId())
.set(MallOrderGroup::getCurrentMembers, newMembers);
mallOrderGroupMapper.update(group,guw);
mallOrderGroupMapper.update(null, guw);
}
}
if (group != null) {
@ -918,20 +918,51 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder
@Autowired
private cc.hiver.mall.dao.mapper.ShopTakeawayMapper shopTakeawayMapper;
@Override
public void scheduleStorePickupCookTimeout(String orderId) {
triggerShopCookTimeoutEvent(orderId);
}
private void triggerShopCookTimeoutEvent(String orderId) {
MallOrder order = this.getById(orderId);
if (order != null) {
long cookTimeMins = 15; // default
try {
int cachedCookTime = safeMinutes(getCookingTime(order.getRegionId(), order.getShopId()));
if (cachedCookTime > 0) {
cookTimeMins = cachedCookTime;
}
} catch (Exception e) {
log.error("获取店铺出餐时间缓存异常: {}", e.getMessage());
if (order == null) {
return;
}
long delayMillis = resolveStorePickupCookTimeoutDelay(order);
log.info("到店出餐超时提醒 orderId={} userRequireMakeTime={} delayMillis={}",
orderId, order.getUserRequireMakeTime(), delayMillis);
orderAsyncProducer.sendDelayMessage(orderId, "Shop_Cook_Timeout", delayMillis);
}
/**
* 超时提醒时刻 = 取餐时间 - 商家出餐时长。
* 这个时刻已经过了时,从当前起按商家出餐时长计时,避免立刻判超时。
* 若商家出餐时长长于通知后的剩余时间,则等通知后再给足出餐时长。
*/
private long resolveStorePickupCookTimeoutDelay(MallOrder order) {
long cookMillis = 15L * 60 * 1000L;
try {
int cachedCookTime = safeMinutes(getCookingTime(order.getRegionId(), order.getShopId()));
if (cachedCookTime > 0) {
cookMillis = cachedCookTime * 60L * 1000L;
}
orderAsyncProducer.sendDelayMessage(orderId, "Shop_Cook_Timeout", cookTimeMins * 60 * 1000L);
} catch (Exception e) {
log.error("获取店铺出餐时间缓存异常: {}", e.getMessage());
}
long now = System.currentTimeMillis();
Date pickupTime = order.getUserRequireMakeTime();
if (pickupTime == null) {
return cookMillis;
}
long pickupAt = pickupTime.getTime();
long startAt = Math.max(now, pickupAt - STORE_PICKUP_NOTIFY_BEFORE_MILLIS);
long timeoutAt = pickupAt - cookMillis;
if (timeoutAt <= now) {
timeoutAt = now + cookMillis;
} else {
timeoutAt = Math.max(timeoutAt, startAt + cookMillis);
}
return Math.max(1000L, timeoutAt - now);
}
@Override
@ -1586,19 +1617,26 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder
//自取订单用户点击立即出餐
@Override
@Transactional(rollbackFor = Exception.class)
public void userRequireMake(String orderId) {
public void userRequireMake(String orderId, Date userRequireMakeTime) {
MallOrder order = this.getById(orderId);
if (order == null) {
throw new RuntimeException("订单不存在");
}
if (!Integer.valueOf(DELIVERY_TYPE_SELF).equals(order.getDeliveryType()) || order.getOtherOrder() != null) {
throw new RuntimeException("仅外卖到店订单可以预约出餐");
}
if (Integer.valueOf(1).equals(order.getUserRequireMake()) || order.getUserRequireMakeTime() != null) {
throw new RuntimeException("已通知或预约商家出餐");
}
LambdaUpdateWrapper<MallOrder> uw = new LambdaUpdateWrapper<>();
uw.eq(MallOrder::getId, orderId).set(MallOrder::getUserRequireMake,1);
this.update(uw);
Shop shop = getShopFromCache(order.getRegionId(), order.getShopId());
if (shop != null && StringUtils.isNotBlank(shop.getClientId())) {
jPushService.sendPushNotification(shop.getClientId(), "您有一笔新的到店订单",orderId);
uw.eq(MallOrder::getId, orderId).set(MallOrder::getUserRequireMake, 1);
order.setUserRequireMake(1);
if (userRequireMakeTime != null) {
uw.set(MallOrder::getUserRequireMakeTime, userRequireMakeTime);
order.setUserRequireMakeTime(userRequireMakeTime);
}
orderAsyncProducer.sendCloudPrint(orderId, "SHOP_INSTANT_MAKE");
// 触发商家出餐超时监听
triggerShopCookTimeoutEvent(orderId);
this.update(uw);
notifyOrScheduleStorePickupMake(order);
}
@Override
@ -2146,6 +2184,7 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder
}
if (DELIVERY_TYPE_SELF == (dto.getDeliveryType() == null ? 0 : dto.getDeliveryType())
&& dto.getUserRequireMakeTime() != null) {
order.setUserRequireMake(1);
order.setUserRequireMakeTime(dto.getUserRequireMakeTime());
}
@ -2236,23 +2275,24 @@ public class MallOrderServiceImpl extends ServiceImpl<MallOrderMapper, MallOrder
if (order == null || !Integer.valueOf(DELIVERY_TYPE_SELF).equals(order.getDeliveryType())) {
return;
}
if (Integer.valueOf(1).equals(order.getUserRequireMake())) {
notifyAndPrintStorePickupMake(order, "SHOP_INSTANT_MAKE");
triggerShopCookTimeoutEvent(order.getId());
return;
}
if (order.getUserRequireMakeTime() == null) {
if (order.getUserRequireMakeTime() != null) {
Date now = new Date();
boolean alreadyDue = !order.getUserRequireMakeTime().after(now);
long delayMillis = order.getUserRequireMakeTime().getTime()
- STORE_PICKUP_NOTIFY_BEFORE_MILLIS
- now.getTime();
if (alreadyDue || delayMillis <= 0) {
notifyAndPrintStorePickupMake(order, "SHOP_APPOINTMENT_MAKE");
triggerShopCookTimeoutEvent(order.getId());
} else {
orderAsyncProducer.sendDelayMessage(order.getId(), DELAY_TYPE_STORE_PICKUP_COOK_NOTIFY, delayMillis);
}
return;
}
long delayMillis = order.getUserRequireMakeTime().getTime()
- STORE_PICKUP_NOTIFY_BEFORE_MILLIS
- System.currentTimeMillis();
if (delayMillis <= 0) {
notifyAndPrintStorePickupMake(order, "SHOP_APPOINTMENT_MAKE");
if (Integer.valueOf(1).equals(order.getUserRequireMake())) {
notifyAndPrintStorePickupMake(order, "SHOP_INSTANT_MAKE");
triggerShopCookTimeoutEvent(order.getId());
return;
}
orderAsyncProducer.sendDelayMessage(order.getId(), DELAY_TYPE_STORE_PICKUP_COOK_NOTIFY, delayMillis);
}
private void notifyAndPrintStorePickupMake(MallOrder order, String printReason) {

27
hiver-modules/hiver-mall/src/main/java/cc/hiver/mall/utils/DaQuReceiptRenderUtil.java

@ -29,7 +29,11 @@ public final class DaQuReceiptRenderUtil {
boolean targetSocialDeliveryOrder = isTargetSocialDeliveryOrder(order, delivery);
centerLarge(sb, orderNo(order));
centerLarge(sb, orderTypeText(order, delivery, refundPrint, forcedOrderPrint, scanVerifyPrint));
String typeText = orderTypeText(order, delivery, refundPrint, forcedOrderPrint, scanVerifyPrint);
centerLarge(sb, typeText);
if (!StringUtils.contains(typeText, "堂食") && !StringUtils.contains(typeText, "打包")) {
appendDineInMode(sb, order);
}
if (isSelfPickupAppointment(order)) {
largeLeft(sb, "实际取餐时间:");
largeLeft(sb, formatAppointmentTime(order.getUserRequireMakeTime()));
@ -45,11 +49,15 @@ public final class DaQuReceiptRenderUtil {
if (!hasRefund) {
if (Integer.valueOf(1).equals(order.getDeliveryType()) && (delivery == null || !Integer.valueOf(1).equals(delivery.getAppointmentDelivery()))) {
left(sb, "预计送达时间:" + formatTime(delivery == null ? null : delivery.getMustFinishTime()));
} else if (Integer.valueOf(2).equals(order.getDeliveryType()) && Integer.valueOf(1).equals(order.getUserRequireMake())) {
} else if (Integer.valueOf(2).equals(order.getDeliveryType())
&& Integer.valueOf(1).equals(order.getUserRequireMake())
&& !isSelfPickupAppointment(order)) {
left(sb, "出餐方式:立即出餐");
}
} else {
if (Integer.valueOf(1).equals(order.getUserRequireMake()) && Integer.valueOf(2).equals(order.getDeliveryType())) {
if (Integer.valueOf(1).equals(order.getUserRequireMake())
&& Integer.valueOf(2).equals(order.getDeliveryType())
&& !isSelfPickupAppointment(order)) {
left(sb, "出餐方式:立即出餐");
}
left(sb, "申请退款时间:" + formatTime(refunds.get(0).getCreateTime()));
@ -236,6 +244,19 @@ public final class DaQuReceiptRenderUtil {
&& Integer.valueOf(3).equals(order.getOrderType());
}
private static void appendDineInMode(StringBuilder sb, MallOrderVO order) {
if (order == null || !Integer.valueOf(2).equals(order.getDeliveryType()) || order.getOtherOrder() != null) {
return;
}
if (Integer.valueOf(0).equals(order.getIsPack())) {
largeLeft(sb, "用餐方式:堂食");
return;
}
if (Integer.valueOf(1).equals(order.getIsPack())) {
largeLeft(sb, "用餐方式:打包");
}
}
private static boolean isSelfPickupAppointment(MallOrderVO order) {
return order != null
&& Integer.valueOf(2).equals(order.getDeliveryType())

Loading…
Cancel
Save