feat(ticket): 添加订单状态字段并完善水票订单关联逻辑

- 在GltTicketOrder实体中添加orderStatus字段用于存储订单状态
- 更新GltTicketOrderMapper.xml查询语句以包含orderStatus字段
- 在GltTicketOrderParam参数类中添加orderStatus查询条件支持
- 实现resolveShopOrderNo方法用于关联商城订单号的获取逻辑
- 添加测试方法testOrderData用于处理已退款订单相关的水票撤销操作
- 增加findTicketsByOrder和findTicketsByOrderGoodsFallback辅助方法
- 完善水票订单与商城订单的关联关系处理机制
This commit is contained in:
2026-03-01 21:12:14 +08:00
parent 1c1c341bb9
commit f7334021e0
5 changed files with 184 additions and 1 deletions

View File

@@ -34,6 +34,10 @@ public class GltTicketOrder implements Serializable {
@Schema(description = "订单编号")
private String orderNo;
@Schema(description = "订单状态")
@TableField(exist = false)
private Integer orderStatus;
@Schema(description = "门店ID")
private Integer storeId;

View File

@@ -11,7 +11,7 @@
d.name as receiverName, d.phone as receiverPhone,
d.province as receiverProvince, d.city as receiverCity, d.region as receiverRegion,
d.address as receiverAddress, d.full_address as receiverFullAddress, d.lat as receiverLat, d.lng as receiverLng,
COALESCE(o.order_no, f.order_no) as orderNo
COALESCE(o.order_no, f.order_no) as orderNo, o.order_status as orderStatus
FROM glt_ticket_order a
LEFT JOIN shop_store b ON a.store_id = b.id
LEFT JOIN shop_store_warehouse w ON a.warehouse_id = w.id

View File

@@ -87,4 +87,8 @@ public class GltTicketOrderParam extends BaseParam {
@QueryField(type = QueryType.EQ)
private Integer deleted;
@Schema(description = "订单状态")
@QueryField(type = QueryType.EQ)
private Integer orderStatus;
}

View File

@@ -155,6 +155,8 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
gltTicketOrder.setStatus(0);
gltTicketOrder.setDeleted(0);
gltTicketOrder.setTenantId(tenantId);
// 关联商城订单号(用于后台/对账/追踪);优先取水票上的 orderNo缺失则按 orderId/orderGoodsId 兜底反查。
gltTicketOrder.setOrderNo(resolveShopOrderNo(userTicket, tenantId));
if (gltTicketOrder.getDeliveryStatus() == null) {
gltTicketOrder.setDeliveryStatus(DELIVERY_STATUS_WAITING);
}
@@ -203,6 +205,43 @@ public class GltTicketOrderServiceImpl extends ServiceImpl<GltTicketOrderMapper,
return gltTicketOrder;
}
private String resolveShopOrderNo(GltUserTicket userTicket, Integer tenantId) {
if (userTicket == null || tenantId == null) {
return null;
}
if (StringUtils.hasText(userTicket.getOrderNo())) {
return userTicket.getOrderNo();
}
Integer orderId = userTicket.getOrderId();
// 兜底:历史数据可能只写了 orderGoodsId未写 orderId/orderNo
if (orderId == null && userTicket.getOrderGoodsId() != null) {
ShopOrderGoods og = shopOrderGoodsService.getOne(
new LambdaQueryWrapper<ShopOrderGoods>()
.select(ShopOrderGoods::getOrderId)
.eq(ShopOrderGoods::getTenantId, tenantId)
.eq(ShopOrderGoods::getId, userTicket.getOrderGoodsId())
.last("limit 1")
);
if (og != null) {
orderId = og.getOrderId();
}
}
if (orderId == null) {
return null;
}
ShopOrder order = shopOrderService.getOne(
new LambdaQueryWrapper<ShopOrder>()
.select(ShopOrder::getOrderNo)
.eq(ShopOrder::getTenantId, tenantId)
.eq(ShopOrder::getDeleted, 0)
.eq(ShopOrder::getOrderId, orderId)
.last("limit 1")
);
return order == null ? null : order.getOrderNo();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void accept(Integer id, Integer riderId, Integer tenantId) {