diff --git a/src/main/java/com/gxwebsoft/glt/controller/GltTicketOrderController.java b/src/main/java/com/gxwebsoft/glt/controller/GltTicketOrderController.java index d8d7a76..4c660e3 100644 --- a/src/main/java/com/gxwebsoft/glt/controller/GltTicketOrderController.java +++ b/src/main/java/com/gxwebsoft/glt/controller/GltTicketOrderController.java @@ -9,6 +9,9 @@ import com.gxwebsoft.common.system.entity.User; import com.gxwebsoft.glt.entity.GltTicketOrder; import com.gxwebsoft.glt.param.GltTicketOrderParam; import com.gxwebsoft.glt.service.GltTicketOrderService; +import com.gxwebsoft.shop.entity.ShopUserAddress; +import com.gxwebsoft.shop.service.ShopUserAddressService; +import cn.hutool.core.util.StrUtil; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.security.access.prepost.PreAuthorize; @@ -29,6 +32,8 @@ import java.util.List; public class GltTicketOrderController extends BaseController { @Resource private GltTicketOrderService gltTicketOrderService; + @Resource + private ShopUserAddressService shopUserAddressService; @Operation(summary = "分页查询送水订单") @GetMapping("/page") @@ -59,10 +64,53 @@ public class GltTicketOrderController extends BaseController { if (loginUser == null) { return fail("请先登录"); } + if (gltTicketOrder == null) { + return fail("订单参数不能为空"); + } + + // 地址快照:把用户关联的“详细地址”落到 glt_ticket_order.address,避免用户后续修改地址导致历史订单丢失 + ShopUserAddress userAddress = null; + if (gltTicketOrder.getAddressId() != null) { + userAddress = shopUserAddressService.getByIdRel(gltTicketOrder.getAddressId()); + } else { + userAddress = shopUserAddressService.getDefaultAddress(loginUser.getUserId()); + } + if (userAddress == null) { + return fail("请先添加收货地址"); + } + if (!loginUser.getUserId().equals(userAddress.getUserId())) { + return fail("收货地址不存在或无权限"); + } + if (loginUser.getTenantId() != null && userAddress.getTenantId() != null + && !loginUser.getTenantId().equals(userAddress.getTenantId())) { + return fail("收货地址不存在或无权限"); + } + gltTicketOrder.setAddressId(userAddress.getId()); + gltTicketOrder.setAddress(buildAddressSnapshot(userAddress)); + gltTicketOrderService.createWithWriteOff(gltTicketOrder, loginUser.getUserId(), loginUser.getTenantId()); return success("下单成功"); } + private String buildAddressSnapshot(ShopUserAddress addr) { + if (addr == null) { + return null; + } + if (StrUtil.isNotBlank(addr.getFullAddress())) { + return addr.getFullAddress(); + } + // 兼容旧数据:fullAddress 为空时,拼接省市区 + 详细地址 + return StrUtil.blankToDefault( + StrUtil.join("", + StrUtil.nullToEmpty(addr.getProvince()), + StrUtil.nullToEmpty(addr.getCity()), + StrUtil.nullToEmpty(addr.getRegion()), + StrUtil.nullToEmpty(addr.getAddress()) + ), + addr.getAddress() + ); + } + @PreAuthorize("hasAuthority('glt:gltTicketOrder:update')") @OperationLog @Operation(summary = "修改送水订单") diff --git a/src/main/java/com/gxwebsoft/glt/entity/GltTicketOrder.java b/src/main/java/com/gxwebsoft/glt/entity/GltTicketOrder.java index 805ea4b..afb9438 100644 --- a/src/main/java/com/gxwebsoft/glt/entity/GltTicketOrder.java +++ b/src/main/java/com/gxwebsoft/glt/entity/GltTicketOrder.java @@ -44,7 +44,6 @@ public class GltTicketOrder implements Serializable { private Integer addressId; @Schema(description = "收货地址") - @TableField(exist = false) private String address; @Schema(description = "省")