From 5a4c0fb4fcb12734f34a3a2134ebc7bba95e80c8 Mon Sep 17 00:00:00 2001 From: chenghuan Date: Mon, 27 Jul 2026 11:38:06 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=A2=9E=E5=8A=A0APP=E7=AB=AF?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9C=B0=E5=9D=80=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../book/controller/BuyOrderController.java | 98 +++++++++++++++++-- .../request/ModifyOrderAddressRequestVo.java | 4 + 2 files changed, 93 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/peanut/modules/book/controller/BuyOrderController.java b/src/main/java/com/peanut/modules/book/controller/BuyOrderController.java index 6d254ad..52daa49 100644 --- a/src/main/java/com/peanut/modules/book/controller/BuyOrderController.java +++ b/src/main/java/com/peanut/modules/book/controller/BuyOrderController.java @@ -881,26 +881,30 @@ public class BuyOrderController { * @param addressRequestVo 地址请求 value object * @return R */ - @RequestMapping(value = "/modifyConsigneeAddress", method = RequestMethod.POST) - public R modifyOrderAddress(@RequestBody ModifyOrderAddressRequestVo addressRequestVo) { - QueryWrapper buyOrderQueryWrapper = new QueryWrapper<>(); - buyOrderQueryWrapper.eq("order_sn", addressRequestVo.getOrderSn()); - BuyOrder buyOrder = buyOrderService.getOne(buyOrderQueryWrapper); - String provinceCode = addressRequestVo.getProvinceCode(); - QueryWrapper provinceQueryWrapper = new QueryWrapper<>(); - provinceQueryWrapper.eq("region_code", provinceCode); - Province province = provinceService.getOne(provinceQueryWrapper); + private R saveConsigneeAddress(ModifyOrderAddressRequestVo addressRequestVo, BuyOrder buyOrder, Province province) { + if (province == null) { + String provinceCode = addressRequestVo.getProvinceCode(); + QueryWrapper provinceQueryWrapper = new QueryWrapper<>(); + provinceQueryWrapper.eq("region_code", provinceCode); + province = provinceService.getOne(provinceQueryWrapper); + } + if (province == null) return R.error(500, "省份信息不存在"); buyOrder.setProvince(province.getProvName()); + String cityCode = addressRequestVo.getCityCode(); QueryWrapper cityQueryWrapper = new QueryWrapper<>(); cityQueryWrapper.eq("region_code", cityCode); City city = cityService.getOne(cityQueryWrapper); + if (city == null) return R.error(500, "城市信息不存在"); buyOrder.setCity(city.getCityName()); + String countyCode = addressRequestVo.getCountyCode(); QueryWrapper countyQueryWrapper = new QueryWrapper<>(); countyQueryWrapper.eq("region_code", countyCode); County county = countyService.getOne(countyQueryWrapper); + if (county == null) return R.error(500, "区县信息不存在"); buyOrder.setDistrict(county.getCountyName()); + buyOrder.setShippingUser(addressRequestVo.getConsigneeName()); buyOrder.setUserPhone(addressRequestVo.getConsigneeMobile()); buyOrder.setAddress(addressRequestVo.getAddress()); @@ -908,10 +912,86 @@ public class BuyOrderController { if (str.contains("+")||str.contains("&")) { return R.error(500, "信息中不能含有“+”、“&”符号!"); } + buyOrderService.updateById(buyOrder); return R.ok(); } + /** + * 修改订单地址 + * + * @param addressRequestVo 地址请求 value object + * @return R + */ + @RequestMapping(value = "/modifyConsigneeAddress", method = RequestMethod.POST) + public R modifyOrderAddress(@RequestBody ModifyOrderAddressRequestVo addressRequestVo) { + QueryWrapper buyOrderQueryWrapper = new QueryWrapper<>(); + buyOrderQueryWrapper.eq("order_sn", addressRequestVo.getOrderSn()); + BuyOrder buyOrder = buyOrderService.getOne(buyOrderQueryWrapper); + if (buyOrder == null) { + return R.error(500,"订单不存在"); + } + + // 后台修改地址时,addressId 设为 0 + buyOrder.setAddressId(0); + + return saveConsigneeAddress(addressRequestVo, buyOrder, null); + } + + /** + * APP修改订单地址 + * + * @param addressRequestVo 地址请求 value object + * @return R + */ + @RequestMapping(value = "/modifyConsigneeAddressApp", method = RequestMethod.POST) + public R modifyOrderAddressApp(@RequestBody ModifyOrderAddressRequestVo addressRequestVo) { + QueryWrapper buyOrderQueryWrapper = new QueryWrapper<>(); + buyOrderQueryWrapper.eq("order_sn", addressRequestVo.getOrderSn()); + BuyOrder buyOrder = buyOrderService.getOne(buyOrderQueryWrapper); + if (buyOrder == null) { + return R.error(500,"订单不存在"); + } + + MyUserEntity userEntity = myUserService.getById(ShiroUtils.getUId()); + if (userEntity == null) return R.error(500, "用户不存在"); + + Integer currentUserId = userEntity.getId(); + if (!currentUserId.equals(buyOrder.getUserId())) { + return R.error(500, "无权修改该订单地址"); + } + + String provinceCode = addressRequestVo.getProvinceCode(); + QueryWrapper provinceQueryWrapper = new QueryWrapper<>(); + provinceQueryWrapper.eq("region_code", provinceCode); + Province province = provinceService.getOne(provinceQueryWrapper); + if (province == null) { + return R.error(500, "省份信息不存在"); + } + + // 仅 App 用户:已支付运费时,新地址省份 code 必须与原订单省份 code 相同;无运费可改任意省 + if (buyOrder.getShippingMoney() != null && buyOrder.getShippingMoney().compareTo(BigDecimal.ZERO) > 0) { + QueryWrapper oldProvinceQueryWrapper = new QueryWrapper<>(); + oldProvinceQueryWrapper.eq("prov_name", buyOrder.getProvince()); + Province oldProvince = provinceService.getOne(oldProvinceQueryWrapper); + if (oldProvince == null || !provinceCode.equals(oldProvince.getRegionCode())) { + return R.error(500, "该订单已支付运费,只能修改为同省份地址"); + } + } + + // App 传入 addressId 时更新 + if (addressRequestVo.getAddressId() != null) { + buyOrder.setAddressId(addressRequestVo.getAddressId()); + } else { + buyOrder.setAddressId(0); + } + // 仅 App 用户修改时 addressModified 每次 +1;后台修改不加 + buyOrder.setAddressModified(buyOrder.getAddressModified() + 1); + + + return saveConsigneeAddress(addressRequestVo, buyOrder, province); + } + /** * 获取订单地址 * diff --git a/src/main/java/com/peanut/modules/book/vo/request/ModifyOrderAddressRequestVo.java b/src/main/java/com/peanut/modules/book/vo/request/ModifyOrderAddressRequestVo.java index 80fcd15..d565644 100644 --- a/src/main/java/com/peanut/modules/book/vo/request/ModifyOrderAddressRequestVo.java +++ b/src/main/java/com/peanut/modules/book/vo/request/ModifyOrderAddressRequestVo.java @@ -37,4 +37,8 @@ public class ModifyOrderAddressRequestVo { * 详细地址 */ private String address; + /** + * 用户地址 ID(App 从地址列表选择时传入;后台管理员修改时会将订单 addressId 置为 null) + */ + private Integer addressId; }