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; }