前台系统中H5页面已经写好了前端请求,后端的数据库表实体类也已经有了,我们只需要补充后端业务逻辑即可
目录
UserAddressController
@Tag(name = "用户地址接口")
@RestController
@RequestMapping(value="/api/user")
@SuppressWarnings({"unchecked", "rawtypes"})
public class UserAddressController {
@Autowired
private UserAddressService userAddressService;
@Autowired
private UserRegionService userRegionService;
@Operation(summary = "获取用户地址列表")
@GetMapping("userAddress/auth/findUserAddressList")
public Result<List<UserAddress>> findUserAddressList() {
List<UserAddress> list = userAddressService.findUserAddressList();
return Result.build(list , ResultCodeEnum.SUCCESS) ;
}
@Operation(summary = "收货地址省市区显示")
@GetMapping ("region/findByParentCode/{code}")
public Result register(@PathVariable("code") Integer code) {
List<Region> regionList = userRegionService.selectByParentCode(code);
return Result.build(regionList , ResultCodeEnum.SUCCESS) ;
}
@Operation(summary = "用户收货地址修改")
@PutMapping("userAddress/auth/updateById")
public Result updateById(@RequestBody UserAddress userAddress) {
userAddressService.updateByid(userAddress);
return Result.build(null , ResultCodeEnum.SUCCESS) ;
}
@Operation(summary = "用户收货地址新增")
@PostMapping("userAddress/auth/save")
public Result save(@RequestBody UserAddress userAddress) {
userAddressService.save(userAddress);
return Result.build(null , ResultCodeEnum.SUCCESS) ;
}
@Operation(summary = "用户删除收货地址")
@DeleteMapping("userAddress/auth/removeById/{id}")
public Result removeById(@PathVariable Long id) {
userAddressService.removeById(id);
return Result.build(null , ResultCodeEnum.SUCCESS) ;
}
}
UserAddressService
public interface UserAddressService {
//获取用户地址列表
List<UserAddress> findUserAddressList();
//用户收货地址修改
void updateByid(UserAddress userAddress);
//用户收货地址新增
void save(UserAddress userAddress);
//用户收货地址刪除
void removeById(Long id);
}
UserAddressServiceImpl
@Service
public class UserAddressServiceImpl implements UserAddressService {
@Autowired
private UserAddressMapper userAddressMapper;
@Autowired
private UserRegionMapper userRegionMapper;
//获取用户地址列表
@Override
public List<UserAddress> findUserAddressList() {
Long userId = AuthContextUtil.getUserInfo().getId();
return userAddressMapper.findByUserId(userId);
}
//用户收货地址修改
@Override
public void updateByid(UserAddress userAddress) {
String provinceCode = userRegionMapper.selectByCode(userAddress.getProvinceCode());
String cityCode = userRegionMapper.selectByCode(userAddress.getCityCode());
String districtCode = userRegionMapper.selectByCode(userAddress.getDistrictCode());
StringBuilder fullAddressBuilder = new StringBuilder();
fullAddressBuilder.append(provinceCode)
.append(cityCode)
.append(districtCode);
String fullAddress = fullAddressBuilder.toString();
userAddress.setFullAddress(fullAddress);
userAddressMapper.updateByid(userAddress);
}
//用户收货地址新增
@Override
public void save(UserAddress userAddress) {
//获取用户userID
Long userId = AuthContextUtil.getUserInfo().getId();
userAddress.setUserId(userId);
//拼接全部地址
String provinceCode = userRegionMapper.selectByCode(userAddress.getProvinceCode());
String cityCode = userRegionMapper.selectByCode(userAddress.getCityCode());
String districtCode = userRegionMapper.selectByCode(userAddress.getDistrictCode());
StringBuilder fullAddressBuilder = new StringBuilder();
fullAddressBuilder.append(provinceCode)
.append(cityCode)
.append(districtCode);
String fullAddress = fullAddressBuilder.toString();
userAddress.setFullAddress(fullAddress);
userAddressMapper.save(userAddress);
}
//用户收货地址刪除
@Override
public void removeById(Long id) {
userAddressMapper.removeById(id);
}
}
UserAddressMapper
@Mapper
public interface UserAddressMapper {
List<UserAddress> findByUserId(Long userId);
void updateByid(UserAddress userAddress);
void save(UserAddress userAddress);
void removeById(Long id);
}
UserAddressMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.spzx.user.mapper.UserAddressMapper">
<resultMap id="userAddressMap" type="com.atguigu.spzx.model.entity.user.UserAddress" autoMapping="true">
</resultMap>
<!-- 用于select查询公用抽取的列 -->
<sql id="columns">
id,user_id,name,phone,tag_name,province_code,city_code,district_code,address,full_address,is_default,create_time,update_time,is_deleted
</sql>
<update id="removeById" parameterType="Long">
update user_address set update_time = now(),
is_deleted = 1
where id = #{id}
</update>
<select id="findByUserId" resultMap="userAddressMap">
select <include refid="columns" />
from user_address
where
user_id = #{userId} and is_deleted = 0
</select>
<update id="updateByid" parameterType="com.atguigu.spzx.model.entity.user.UserAddress">
UPDATE user_address
<set>
<!-- 使用动态SQL判断字段是否为空,如果不为空则进行更新 -->
<if test="name != null">
name = #{name},
</if>
<if test="phone != null">
phone = #{phone},
</if>
<if test="tagName != null">
tag_name = #{tagName},
</if>
<if test="provinceCode != null">
province_code = #{provinceCode},
</if>
<if test="cityCode != null">
city_code = #{cityCode},
</if>
<if test="districtCode != null">
district_code = #{districtCode},
</if>
<if test="address != null">
address = #{address},
</if>
<if test="fullAddress != null">
full_address = #{fullAddress},
</if>
<if test="isDefault != null">
is_default = #{isDefault},
</if>
update_time = now()
</set>
WHERE user_id = #{userId} and id = #{id}
</update>
<insert id="save" parameterType="com.atguigu.spzx.model.entity.user.UserAddress">
insert into user_address
(
user_id,
name,
phone,
tag_name,
province_code,
city_code,
district_code,
address,
full_address,
is_default,
create_time,
update_time,
is_deleted
)
values
(
#{userId},
#{name},
#{phone},
#{tagName},
#{provinceCode},
#{cityCode},
#{districtCode},
#{address},
#{fullAddress},
#{isDefault},
now(),
now(),
0
)
</insert>
</mapper>
UserRegionService
public interface UserRegionService {
/**
* @Description: 收货地址省市区显示
* @param code
*/
List<Region> selectByParentCode(Integer code);
}
UserRegionServiceimpl
@Service
public class UserRegionServiceimpl implements UserRegionService {
@Autowired
private UserRegionMapper userRegionMapper;
@Override
public List<Region> selectByParentCode(Integer code) {
List<Region> regions = userRegionMapper.selectByParentCode(code);
return regions;
}
}
UserRegionMapper
@Mapper
public interface UserRegionMapper {
List<Region> selectByParentCode(Integer code);
String selectByCode(String Code);
}
UserRegionMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--保证映射文件的命名空间和mapper接口的全类名保持一致-->
<mapper namespace="com.atguigu.spzx.user.mapper.UserRegionMapper">
<!-- 用于select查询公用抽取的列 -->
<sql id="columns">
id,code,parent_code,name,level,create_time,update_time,is_deleted
</sql>
<select id="selectByParentCode" resultType="com.atguigu.spzx.model.entity.base.Region">
select <include refid="columns" />
from region where parent_code = #{code}
</select>
<select id="selectByCode" resultType="java.lang.String">
select name
from region where code = #{code}
</select>
</mapper>