散户地址业务功能开发v1

wxpay
LI-CCONG\李聪聪 7 months ago
parent aa309d80bf
commit b3495b88e9

@ -0,0 +1,74 @@
package cc.yunxi.controller;
import cc.yunxi.common.domain.CommonResult;
import cc.yunxi.common.utils.BeanUtils;
import cc.yunxi.domain.dto.LocationDTO;
import cc.yunxi.domain.dto.UserDTO;
import cc.yunxi.domain.po.Client;
import cc.yunxi.domain.po.ClientAddress;
import cc.yunxi.domain.vo.client.ClientRespVO;
import cc.yunxi.domain.vo.client.ClientUpdateVO;
import cc.yunxi.domain.vo.clientaddress.ClientAddressReqVO;
import cc.yunxi.service.IClientAddressService;
import cc.yunxi.utils.UserContext;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author ccongli
* @since 2024-03-14 10:26:03
*/
@Api(tags = "散户地址接口")
@RestController
@RequestMapping("/client-address")
@RequiredArgsConstructor
public class ClientAddressController {
private final IClientAddressService addressService;
@ApiOperation("散户地址列表")
@GetMapping("/list")
public CommonResult<List<ClientAddressReqVO>> queryClientByPage(@RequestParam("clientId") String clientId) {
List<ClientAddress> clientAddresses = addressService.queryAddressList(clientId);
List<ClientAddressReqVO> addressRespVOList = BeanUtils.copyList(clientAddresses, ClientAddressReqVO.class, (s, t) -> {
t.setLocationDTO(new LocationDTO(s.getLongitude(), s.getLatitude()));
});
return CommonResult.success(addressRespVOList);
}
@ApiOperation("添加地址")
@GetMapping("/info")
public CommonResult<String> getClientInfo(@RequestBody ClientAddressReqVO reqVO) {
UserDTO userDTO = UserContext.getUser();
reqVO.setClientId(userDTO.getId());
String addressId = addressService.addAddress(reqVO);
return CommonResult.success(addressId);
}
@ApiOperation("更新地址")
@PostMapping("/update")
public CommonResult<Boolean> updateClientInfo(@RequestBody ClientAddressReqVO reqVO) {
addressService.updateAddress(reqVO);
return CommonResult.success(true);
}
@ApiOperation("删除地址")
@PostMapping("/remove")
public CommonResult<Boolean> updateClientInfo(@RequestParam("addressId") String addressId) {
addressService.deleteAddress(addressId);
return CommonResult.success(true);
}
}

@ -0,0 +1,74 @@
package cc.yunxi.domain.po;
import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDateTime;
import java.util.Date;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
*
* </p>
*
* @author ccongli
* @since 2024-03-14 10:26:03
*/
@Getter
@Setter
@TableName("nx_client_address")
@ApiModel(value = "ClientAddress", description = "散户地址信息")
public class ClientAddress {
@ApiModelProperty("主键id")
@TableId(value = "id", type = IdType.ASSIGN_ID)
private String id;
@ApiModelProperty("散户id")
@TableField("client_id")
private String clientId;
@ApiModelProperty("联系人姓名")
@TableField("receive_user_name")
private String receiveUserName;
@ApiModelProperty("联系人手机号")
@TableField("receive_mobile_phone")
private String receiveMobilePhone;
@ApiModelProperty("城市")
@TableField("receive_city")
private String receiveCity;
@ApiModelProperty("地址")
@TableField("receive_street")
private String receiveStreet;
@ApiModelProperty("门牌号")
@TableField("receive_house_number")
private String receiveHouseNumber;
@ApiModelProperty("是否默认1是0否")
@TableField("is_default")
private Integer isDefault;
@ApiModelProperty("位置-经度")
@TableField("longitude")
private String longitude;
@ApiModelProperty("位置-纬度")
@TableField("latitude")
private String latitude;
@ApiModelProperty("创建时间")
@TableField("f_creator_time")
private LocalDateTime creatorTime;
@ApiModelProperty("修改时间")
@TableField("f_last_modify_time")
private LocalDateTime updateTime;
}

@ -0,0 +1,55 @@
package cc.yunxi.domain.vo.clientaddress;
import cc.yunxi.domain.dto.LocationDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@ApiModel(description = "添加散户地址 Request VO")
@Data
public class ClientAddressReqVO {
interface addAddress {}
interface updateAddress {}
@ApiModelProperty("id")
@NotBlank(message = "id不能为空", groups = updateAddress.class)
private String id;
@ApiModelProperty("散户id")
@NotBlank(message = "散户id不能为空", groups = addAddress.class)
private String clientId;
@ApiModelProperty("联系人姓名")
@NotBlank(message = "联系人姓名不能为空")
private String receiveUserName;
@ApiModelProperty("联系人手机号")
@NotBlank(message = "联系人手机号不能为空")
private String receiveMobilePhone;
@ApiModelProperty("城市")
@NotBlank(message = "城市不能为空")
private String receiveCity;
@ApiModelProperty("地址")
@NotBlank(message = "地址不能为空")
private String receiveStreet;
@ApiModelProperty("门牌号")
@NotBlank(message = "门牌号不能为空")
private String receiveHouseNumber;
@ApiModelProperty("位置信息")
@NotNull(message = "位置信息不能为空")
private LocationDTO locationDTO;
@ApiModelProperty("是否默认1是0否")
@NotNull(message = "默认地址不能为空")
private Integer isDefault;
}

@ -0,0 +1,39 @@
package cc.yunxi.domain.vo.clientaddress;
import cc.yunxi.domain.dto.LocationDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel(description = "添加散户地址 Request VO")
@Data
public class ClientAddressRespVO {
@ApiModelProperty("id")
private String id;
@ApiModelProperty("散户id")
private String clientId;
@ApiModelProperty("联系人姓名")
private String receiveUserName;
@ApiModelProperty("联系人手机号")
private String receiveMobilePhone;
@ApiModelProperty("城市")
private String receiveCity;
@ApiModelProperty("地址")
private String receiveStreet;
@ApiModelProperty("门牌号")
private String receiveHouseNumber;
@ApiModelProperty("位置信息")
private LocationDTO locationDTO;
@ApiModelProperty("是否默认1是0否")
private Integer isDefault;
}

@ -0,0 +1,18 @@
package cc.yunxi.mapper;
import cc.yunxi.domain.po.ClientAddress;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* Mapper
* </p>
*
* @author ccongli
* @since 2024-03-14 10:26:03
*/
@Mapper
public interface ClientAddressMapper extends BaseMapper<ClientAddress> {
}

@ -0,0 +1,56 @@
package cc.yunxi.service;
import cc.yunxi.domain.po.ClientAddress;
import cc.yunxi.domain.vo.clientaddress.ClientAddressReqVO;
import cc.yunxi.domain.vo.clientaddress.ClientAddressRespVO;
import com.baomidou.mybatisplus.extension.service.IService;
import javax.validation.Valid;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author ccongli
* @since 2024-03-14 10:26:03
*/
public interface IClientAddressService extends IService<ClientAddress> {
/**
*
* @param clientId
* @return clientId
*/
List<ClientAddress> queryAddressList(String clientId);
/**
*
* @param addressId
* @return ClientAddress
*/
ClientAddress getAddressInfo(String addressId);
/**
*
*/
String addAddress(@Valid ClientAddressReqVO addressCreateVO);
/**
*
*/
void updateAddress(@Valid ClientAddressReqVO addressUpdateVO);
/**
*
*/
void deleteAddress(String addressId);
}

@ -0,0 +1,101 @@
package cc.yunxi.service.impl;
import cc.yunxi.common.domain.LambdaQueryWrapperX;
import cc.yunxi.common.exception.BizIllegalException;
import cc.yunxi.common.utils.BeanUtils;
import cc.yunxi.domain.po.Client;
import cc.yunxi.domain.po.ClientAddress;
import cc.yunxi.domain.vo.clientaddress.ClientAddressReqVO;
import cc.yunxi.domain.vo.clientaddress.ClientAddressRespVO;
import cc.yunxi.mapper.ClientAddressMapper;
import cc.yunxi.service.IClientAddressService;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.validation.Valid;
import java.time.LocalDateTime;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author ccongli
* @since 2024-03-14 10:26:03
*/
@Service
@Validated
public class ClientAddressServiceImpl extends ServiceImpl<ClientAddressMapper, ClientAddress> implements IClientAddressService {
private static final Integer LIMIT = 3; // 限制条数
@Override
public List<ClientAddress> queryAddressList(String clientId) {
LambdaQueryWrapperX<ClientAddress> wrapperX = new LambdaQueryWrapperX<>();
wrapperX.eq(ClientAddress::getClientId, clientId).orderByDesc(ClientAddress::getIsDefault);
return list(wrapperX);
}
@Override
public ClientAddress getAddressInfo(String addressId) {
if (StrUtil.isEmpty(addressId)) {
throw new BizIllegalException("请求参数缺失");
}
ClientAddress clientAddress = this.getById(addressId);
if (clientAddress == null) {
throw new BizIllegalException("散户地址不存在");
}
return clientAddress;
}
@Override
@Transactional(rollbackFor = Exception.class)
public String addAddress(ClientAddressReqVO addressCreateVO) {
ClientAddress clientAddress = BeanUtils.copyBean(addressCreateVO, ClientAddress.class);
if (addressCreateVO.getIsDefault() == 1) { // 添加为默认地址
this.changeDefaultAddress(addressCreateVO.getClientId());
}
clientAddress.setCreatorTime(LocalDateTime.now());
this.save(clientAddress);
return clientAddress.getId();
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateAddress(@Valid ClientAddressReqVO addressUpdateVO) {
ClientAddress addressInfo = getAddressInfo(addressUpdateVO.getId());
if (addressUpdateVO.getIsDefault() == 1) { // 修改为默认地址
this.changeDefaultAddress(addressInfo.getClientId());
}
ClientAddress clientAddress = BeanUtils.copyBean(addressUpdateVO, ClientAddress.class);
clientAddress.setUpdateTime(LocalDateTime.now());
this.updateById(clientAddress);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteAddress(String addressId) {
ClientAddress addressInfo = getAddressInfo(addressId);
if (addressInfo.getIsDefault() == 1) {
throw new BizIllegalException("默认地址不能删除");
}
this.removeById(addressId);
}
// 动态切换默认地址
private void changeDefaultAddress(String clientId) {
List<ClientAddress> clientAddresses = queryAddressList(clientId);
LocalDateTime now = LocalDateTime.now();
clientAddresses.forEach(v -> {
v.setIsDefault(0);
v.setUpdateTime(now);
});
this.updateBatchById(clientAddresses);
}
}

@ -0,0 +1,5 @@
<?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="cc.yunxi.mapper.ClientAddressMapper">
</mapper>
Loading…
Cancel
Save