feat:增加APP端修改地址接口

This commit is contained in:
2026-07-27 11:38:06 +08:00
parent d8fbdcc67a
commit 5a4c0fb4fc
2 changed files with 93 additions and 9 deletions

View File

@@ -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<BuyOrder> buyOrderQueryWrapper = new QueryWrapper<>();
buyOrderQueryWrapper.eq("order_sn", addressRequestVo.getOrderSn());
BuyOrder buyOrder = buyOrderService.getOne(buyOrderQueryWrapper);
String provinceCode = addressRequestVo.getProvinceCode();
QueryWrapper<Province> 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<Province> 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<City> 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<County> 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<BuyOrder> 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<BuyOrder> 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<Province> 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<Province> 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);
}
/**
* 获取订单地址
*

View File

@@ -37,4 +37,8 @@ public class ModifyOrderAddressRequestVo {
* 详细地址
*/
private String address;
/**
* 用户地址 IDApp 从地址列表选择时传入;后台管理员修改时会将订单 addressId 置为 null
*/
private Integer addressId;
}