feat(order): 实现订单地址快照功能
- 移除 GltTicketOrder 实体中 address 字段的 @TableField(exist = false) 注解 - 添加 ShopUserAddress 和 ShopUserAddressService 的依赖注入 - 在订单创建时实现地址快照逻辑,将用户地址信息保存到订单表 - 添加地址验证和权限检查功能 - 实现默认地址获取和地址拼接功能 - 添加订单参数空值校验
This commit is contained in:
@@ -9,6 +9,9 @@ import com.gxwebsoft.common.system.entity.User;
|
|||||||
import com.gxwebsoft.glt.entity.GltTicketOrder;
|
import com.gxwebsoft.glt.entity.GltTicketOrder;
|
||||||
import com.gxwebsoft.glt.param.GltTicketOrderParam;
|
import com.gxwebsoft.glt.param.GltTicketOrderParam;
|
||||||
import com.gxwebsoft.glt.service.GltTicketOrderService;
|
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.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
@@ -29,6 +32,8 @@ import java.util.List;
|
|||||||
public class GltTicketOrderController extends BaseController {
|
public class GltTicketOrderController extends BaseController {
|
||||||
@Resource
|
@Resource
|
||||||
private GltTicketOrderService gltTicketOrderService;
|
private GltTicketOrderService gltTicketOrderService;
|
||||||
|
@Resource
|
||||||
|
private ShopUserAddressService shopUserAddressService;
|
||||||
|
|
||||||
@Operation(summary = "分页查询送水订单")
|
@Operation(summary = "分页查询送水订单")
|
||||||
@GetMapping("/page")
|
@GetMapping("/page")
|
||||||
@@ -59,10 +64,53 @@ public class GltTicketOrderController extends BaseController {
|
|||||||
if (loginUser == null) {
|
if (loginUser == null) {
|
||||||
return fail("请先登录");
|
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());
|
gltTicketOrderService.createWithWriteOff(gltTicketOrder, loginUser.getUserId(), loginUser.getTenantId());
|
||||||
return success("下单成功");
|
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')")
|
@PreAuthorize("hasAuthority('glt:gltTicketOrder:update')")
|
||||||
@OperationLog
|
@OperationLog
|
||||||
@Operation(summary = "修改送水订单")
|
@Operation(summary = "修改送水订单")
|
||||||
|
|||||||
@@ -44,7 +44,6 @@ public class GltTicketOrder implements Serializable {
|
|||||||
private Integer addressId;
|
private Integer addressId;
|
||||||
|
|
||||||
@Schema(description = "收货地址")
|
@Schema(description = "收货地址")
|
||||||
@TableField(exist = false)
|
|
||||||
private String address;
|
private String address;
|
||||||
|
|
||||||
@Schema(description = "省")
|
@Schema(description = "省")
|
||||||
|
|||||||
Reference in New Issue
Block a user