From b3495b88e97252b0452aa5f29808d2165a5f1811 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?LI-CCONG=5C=E6=9D=8E=E8=81=AA=E8=81=AA?= <1441652193@qq.com> Date: Thu, 14 Mar 2024 14:36:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=A3=E6=88=B7=E5=9C=B0=E5=9D=80=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91v1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ClientAddressController.java | 74 +++++++++++++ .../cc/yunxi/domain/po/ClientAddress.java | 74 +++++++++++++ .../vo/clientaddress/ClientAddressReqVO.java | 55 ++++++++++ .../vo/clientaddress/ClientAddressRespVO.java | 39 +++++++ .../cc/yunxi/mapper/ClientAddressMapper.java | 18 ++++ .../yunxi/service/IClientAddressService.java | 56 ++++++++++ .../impl/ClientAddressServiceImpl.java | 101 ++++++++++++++++++ .../resources/mapper/ClientAddressMapper.xml | 5 + 8 files changed, 422 insertions(+) create mode 100644 nxhs-service/src/main/java/cc/yunxi/controller/ClientAddressController.java create mode 100644 nxhs-service/src/main/java/cc/yunxi/domain/po/ClientAddress.java create mode 100644 nxhs-service/src/main/java/cc/yunxi/domain/vo/clientaddress/ClientAddressReqVO.java create mode 100644 nxhs-service/src/main/java/cc/yunxi/domain/vo/clientaddress/ClientAddressRespVO.java create mode 100644 nxhs-service/src/main/java/cc/yunxi/mapper/ClientAddressMapper.java create mode 100644 nxhs-service/src/main/java/cc/yunxi/service/IClientAddressService.java create mode 100644 nxhs-service/src/main/java/cc/yunxi/service/impl/ClientAddressServiceImpl.java create mode 100644 nxhs-service/src/main/resources/mapper/ClientAddressMapper.xml diff --git a/nxhs-service/src/main/java/cc/yunxi/controller/ClientAddressController.java b/nxhs-service/src/main/java/cc/yunxi/controller/ClientAddressController.java new file mode 100644 index 0000000..dfae025 --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/controller/ClientAddressController.java @@ -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; + +/** + *

+ * 散户地址信息 前端控制器 + *

+ * + * @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> queryClientByPage(@RequestParam("clientId") String clientId) { + List clientAddresses = addressService.queryAddressList(clientId); + List 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 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 updateClientInfo(@RequestBody ClientAddressReqVO reqVO) { + addressService.updateAddress(reqVO); + return CommonResult.success(true); + } + + + @ApiOperation("删除地址") + @PostMapping("/remove") + public CommonResult updateClientInfo(@RequestParam("addressId") String addressId) { + addressService.deleteAddress(addressId); + return CommonResult.success(true); + } + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/po/ClientAddress.java b/nxhs-service/src/main/java/cc/yunxi/domain/po/ClientAddress.java new file mode 100644 index 0000000..7cd1974 --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/domain/po/ClientAddress.java @@ -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; + +/** + *

+ * 散户地址信息 + *

+ * + * @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; + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/clientaddress/ClientAddressReqVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/clientaddress/ClientAddressReqVO.java new file mode 100644 index 0000000..6a6a825 --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/clientaddress/ClientAddressReqVO.java @@ -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; + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/domain/vo/clientaddress/ClientAddressRespVO.java b/nxhs-service/src/main/java/cc/yunxi/domain/vo/clientaddress/ClientAddressRespVO.java new file mode 100644 index 0000000..d260ecb --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/domain/vo/clientaddress/ClientAddressRespVO.java @@ -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; + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/mapper/ClientAddressMapper.java b/nxhs-service/src/main/java/cc/yunxi/mapper/ClientAddressMapper.java new file mode 100644 index 0000000..46014c9 --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/mapper/ClientAddressMapper.java @@ -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; + +/** + *

+ * 散户地址信息 Mapper 接口 + *

+ * + * @author ccongli + * @since 2024-03-14 10:26:03 + */ +@Mapper +public interface ClientAddressMapper extends BaseMapper { + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/service/IClientAddressService.java b/nxhs-service/src/main/java/cc/yunxi/service/IClientAddressService.java new file mode 100644 index 0000000..720a2da --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/service/IClientAddressService.java @@ -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; + +/** + *

+ * 散户地址信息 服务类 + *

+ * + * @author ccongli + * @since 2024-03-14 10:26:03 + */ +public interface IClientAddressService extends IService { + + + /** + * 获取地址列表 + * @param clientId + * @return clientId + */ + List 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); + + +} diff --git a/nxhs-service/src/main/java/cc/yunxi/service/impl/ClientAddressServiceImpl.java b/nxhs-service/src/main/java/cc/yunxi/service/impl/ClientAddressServiceImpl.java new file mode 100644 index 0000000..78ee677 --- /dev/null +++ b/nxhs-service/src/main/java/cc/yunxi/service/impl/ClientAddressServiceImpl.java @@ -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; + +/** + *

+ * 散户地址信息 服务实现类 + *

+ * + * @author ccongli + * @since 2024-03-14 10:26:03 + */ +@Service +@Validated +public class ClientAddressServiceImpl extends ServiceImpl implements IClientAddressService { + + + private static final Integer LIMIT = 3; // 限制条数 + + @Override + public List queryAddressList(String clientId) { + LambdaQueryWrapperX 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 clientAddresses = queryAddressList(clientId); + LocalDateTime now = LocalDateTime.now(); + clientAddresses.forEach(v -> { + v.setIsDefault(0); + v.setUpdateTime(now); + }); + this.updateBatchById(clientAddresses); + } +} diff --git a/nxhs-service/src/main/resources/mapper/ClientAddressMapper.xml b/nxhs-service/src/main/resources/mapper/ClientAddressMapper.xml new file mode 100644 index 0000000..0ed3a3c --- /dev/null +++ b/nxhs-service/src/main/resources/mapper/ClientAddressMapper.xml @@ -0,0 +1,5 @@ + + + + +