feat(ticket): 添加订单状态字段并完善水票订单关联逻辑
- 在GltTicketOrder实体中添加orderStatus字段用于存储订单状态 - 更新GltTicketOrderMapper.xml查询语句以包含orderStatus字段 - 在GltTicketOrderParam参数类中添加orderStatus查询条件支持 - 实现resolveShopOrderNo方法用于关联商城订单号的获取逻辑 - 添加测试方法testOrderData用于处理已退款订单相关的水票撤销操作 - 增加findTicketsByOrder和findTicketsByOrderGoodsFallback辅助方法 - 完善水票订单与商城订单的关联关系处理机制
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user