Commit ecd06eebe4fec7db8ea8a753d0b08f977720e849

Authored by guzijian
1 parent 9c55c468

feat: 新增地址管理模块

trash-garbage/src/main/java/com/trash/garbage/controller/GarbageUserController.java
... ... @@ -9,6 +9,7 @@ import com.trash.garbage.service.GarUserService;
9 9 import io.swagger.annotations.Api;
10 10 import io.swagger.annotations.ApiOperation;
11 11 import org.springframework.beans.factory.annotation.Autowired;
  12 +import org.springframework.validation.annotation.Validated;
12 13 import org.springframework.web.bind.annotation.*;
13 14  
14 15 import java.util.List;
... ... @@ -50,13 +51,29 @@ public class GarbageUserController {
50 51  
51 52 @ApiOperation("用户接口-获取用户地址")
52 53 @GetMapping("/query/address/{type}")
53   - public Result<List<GarAddress>> queryAddress(@PathVariable("type") String type){
  54 + public Result<List<GarAddress>> queryAddress(@PathVariable("type") String type) {
54 55 return Result.OK(garUserService.queryAddress(type));
55 56 }
56 57  
57 58 @ApiOperation("用户接口-新增地址")
58 59 @PostMapping("/save/address")
59   - public Result<String> saveAddress(@RequestBody AddressDto dto){
60   - return Result.OK(garUserService.saveAddress(dto));
  60 + public Result<String> saveAddress(@Validated @RequestBody AddressDto dto) {
  61 + return Result.OK(null, garUserService.saveAddress(dto));
61 62 }
  63 +
  64 +
  65 + @ApiOperation("用户接口-编辑地址")
  66 + @PostMapping("/update/address")
  67 + public Result<String> updateAddress(@Validated @RequestBody AddressDto dto) {
  68 + return Result.OK(null, garUserService.updateAddress(dto));
  69 + }
  70 +
  71 +
  72 + @ApiOperation("用户接口-删除地址")
  73 + @DeleteMapping("/delete/address/{addressId}")
  74 + public Result<String> deleteAddress(@PathVariable("addressId") String addressId) {
  75 + return Result.OK(null, garUserService.deleteAddress(addressId));
  76 + }
  77 +
  78 +
62 79 }
... ...
trash-garbage/src/main/java/com/trash/garbage/global/GlobalStatus.java
... ... @@ -51,8 +51,7 @@ public class GlobalStatus {
51 51 */
52 52 public enum GarAddressStatus {
53 53 NORMAL_ADDRESS(0,"地址"),
54   - DEFAULT_ADDRESS(1,"默认地址"),
55   - CURRENT_ADDRESS(2,"当前选中地址");
  54 + CURRENT_ADDRESS(1,"当前地址");
56 55 GarAddressStatus(Integer status,String description){
57 56 this.status = status;
58 57 this.description = description;
... ...
trash-garbage/src/main/java/com/trash/garbage/global/Result.java
... ... @@ -39,15 +39,6 @@ public class Result&lt;T extends Object&gt; {
39 39 return r;
40 40 }
41 41  
42   - public static <T> Result<T> OK(ResultCode code,T data){
43   - Result r = new Result();
44   - r.setSuccess(true);
45   - r.setCode(code.getCode());
46   - r.setMsg("部分成功");
47   - r.setData(data);
48   - return r;
49   - }
50   -
51 42 /** 成功静态方法 */
52 43 public static <T> Result<T> OK(T data) {
53 44 Result r = new Result();
... ...
trash-garbage/src/main/java/com/trash/garbage/pojo/domain/GarAddress.java
... ... @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
8 8 import java.io.Serializable;
9 9 import java.util.Date;
10 10  
  11 +import com.fasterxml.jackson.annotation.JsonFormat;
11 12 import lombok.Data;
12 13  
13 14  
... ... @@ -24,11 +25,12 @@ public class GarAddress implements Serializable {
24 25 * 地址id
25 26 */
26 27 @TableId
27   - private Long garAddressId;
  28 + private String garAddressId;
28 29  
29 30 /**
30 31 * 用户id
31 32 */
  33 + @TableField(select = false)
32 34 private String garUserId;
33 35  
34 36 /**
... ... @@ -44,13 +46,15 @@ public class GarAddress implements Serializable {
44 46 /**
45 47 * 创建时间
46 48 */
47   - @TableField(fill = FieldFill.INSERT)
  49 + @TableField(fill = FieldFill.INSERT, select = false)
  50 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:dd")
48 51 private Date garCreateTime;
49 52  
50 53 /**
51 54 * 修改时间
52 55 */
53   - @TableField(fill = FieldFill.INSERT_UPDATE)
  56 + @TableField(fill = FieldFill.INSERT_UPDATE, select = false)
  57 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:dd")
54 58 private Date garUpdateTime;
55 59  
56 60 /**
... ...
trash-garbage/src/main/java/com/trash/garbage/pojo/domain/GarUser.java
... ... @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
7 7 import java.io.Serializable;
8 8 import java.util.Date;
9 9  
  10 +import com.fasterxml.jackson.annotation.JsonFormat;
10 11 import com.trash.garbage.security.UserAbstract;
11 12 import lombok.Data;
12 13  
... ... @@ -53,12 +54,14 @@ public class GarUser extends UserAbstract implements Serializable {
53 54 */
54 55  
55 56 @TableField(fill = FieldFill.INSERT)
  57 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:dd")
56 58 private Date garCreateTime;
57 59  
58 60 /**
59 61 * 修改时间
60 62 */
61 63 @TableField(fill = FieldFill.INSERT_UPDATE)
  64 + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:dd")
62 65 private Date garUpdateTime;
63 66  
64 67 /**
... ...
trash-garbage/src/main/java/com/trash/garbage/pojo/dto/AddressDto.java
... ... @@ -2,14 +2,24 @@ package com.trash.garbage.pojo.dto;
2 2  
3 3 import lombok.Data;
4 4  
  5 +import javax.validation.constraints.NotBlank;
  6 +import javax.validation.constraints.NotEmpty;
  7 +import javax.validation.constraints.NotNull;
  8 +
5 9 /**
6 10 * @author 20412
7 11 */
8 12 @Data
9 13 public class AddressDto {
10   - private String address;
11   - private String details;
12   - private String contactName;
13   - private String contactTel;
14   - private Integer defaultFlag;
  14 + private String garAddressId;
  15 + @NotBlank(message = "所在地区不能为空")
  16 + private String addressArea;
  17 + @NotBlank(message = "详细地址不能为空")
  18 + private String addressDetail;
  19 + @NotBlank(message = "联系人不能为空")
  20 + private String contactPerson;
  21 + @NotBlank(message = "联系电话不能为空")
  22 + private String contactIphoneNumber;
  23 + @NotNull(message = "defaultFlag不能为空")
  24 + private Boolean defaultFlag;
15 25 }
... ...
trash-garbage/src/main/java/com/trash/garbage/pojo/dto/LoginDto.java
... ... @@ -13,7 +13,7 @@ public class LoginDto {
13 13 @ApiModelProperty(value = "登录vo-手机号")
14 14 private String tel;
15 15 @ApiModelProperty(value = "登录vo-验证码")
16   - private Integer code;
  16 + private String code;
17 17 @ApiModelProperty(value = "登录vo-用户昵称")
18 18 private String nickname;
19 19 @ApiModelProperty(value = "登录vo-wxCode")
... ...
trash-garbage/src/main/java/com/trash/garbage/service/GarUserService.java
... ... @@ -23,4 +23,8 @@ public interface GarUserService extends IService&lt;GarUser&gt; {
23 23 List<GarAddress> queryAddress(String type);
24 24  
25 25 String saveAddress(AddressDto dto);
  26 +
  27 + String updateAddress(AddressDto dto);
  28 +
  29 + String deleteAddress(String addressId);
26 30 }
... ...
trash-garbage/src/main/java/com/trash/garbage/service/impl/GarUserServiceImpl.java
... ... @@ -4,6 +4,7 @@ import cn.hutool.http.HttpUtil;
4 4 import com.alibaba.fastjson.JSONObject;
5 5 import com.aliyuncs.exceptions.ClientException;
6 6 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  7 +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
7 8 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
8 9 import com.trash.garbage.config.WxConfig;
9 10 import com.trash.garbage.custom.BizException;
... ... @@ -33,6 +34,7 @@ import javax.crypto.Cipher;
33 34 import javax.crypto.spec.IvParameterSpec;
34 35 import javax.crypto.spec.SecretKeySpec;
35 36 import java.security.spec.AlgorithmParameterSpec;
  37 +import java.util.ArrayList;
36 38 import java.util.Arrays;
37 39 import java.util.List;
38 40 import java.util.Objects;
... ... @@ -77,8 +79,8 @@ public class GarUserServiceImpl extends ServiceImpl&lt;GarUserMapper, GarUser&gt;
77 79 }
78 80 }
79 81 // 验证码验证
80   - Integer code = (Integer) redisUtils.get(GlobalRedisProperties.REDIS_USER_CODE.getValue() + user.getTel());
81   - if (!code.equals(user.getCode())) {
  82 + String code = (String) redisUtils.get(GlobalRedisProperties.REDIS_USER_CODE.getValue() + user.getTel());
  83 + if (user.getCode() == null || !user.getCode().equals(code)) {
82 84 throw new BizException(ResultCode.CODE_400, "验证码错误!!");
83 85 }
84 86 // 封装成authentication对象
... ... @@ -98,7 +100,7 @@ public class GarUserServiceImpl extends ServiceImpl&lt;GarUserMapper, GarUser&gt;
98 100 @Override
99 101 public void sendVerify(String tel) throws ClientException {
100 102 //随机生成6位数字验证码
101   - Integer validateCode = ValidateCodeUtil.generatorCode(4);
  103 + String validateCode = ValidateCodeUtil.generatorCode(4);
102 104 //给用户发送验证码
103 105 // SMSUtils.sendMessage("", tel, validateCode.toString(), "");
104 106 // 保存redis
... ... @@ -115,29 +117,72 @@ public class GarUserServiceImpl extends ServiceImpl&lt;GarUserMapper, GarUser&gt;
115 117 String garUserId = userCustom.getUser().getGarUserId();
116 118 LambdaQueryWrapper<GarAddress> qw = new LambdaQueryWrapper<>();
117 119 qw.eq(GarAddress::getGarUserId, garUserId);
118   - List<GarAddress> addressList = garAddressService.list(qw);
119 120 if (GlobalStatus.QUERY_ADDRESS_TYPE_CURRENT.equals(type)) {
120   - for (GarAddress garAddress : addressList) {
121   - if (GlobalStatus.GarAddressStatus.CURRENT_ADDRESS.getValue().equals(garAddress.getGarUserDefault())) {
122   - return Arrays.asList(garAddress);
123   - }
124   - }
  121 + qw.eq(GarAddress::getGarUserDefault, GlobalStatus.GarAddressStatus.CURRENT_ADDRESS.getValue());
  122 + GarAddress one = garAddressService.getOne(qw);
  123 + return Arrays.asList(one);
125 124 }
126   - return addressList;
  125 + return garAddressService.list(qw);
127 126 }
128 127  
129 128 @Override
130 129 public String saveAddress(AddressDto dto) {
131 130 UserCustom userCustom = SecurityUtil.getUserCustom();
132   - GarAddress garAddress = new GarAddress();
133   - garAddress.setGarUserId(userCustom.getUser().getGarUserId());
134   - garAddress.setGarUserAddress(dto.getAddress());
135   - garAddress.setGarUserDefault(dto.getDefaultFlag());
136   - garAddress.setGarUserContactName(dto.getContactName());
137   - garAddress.setGarUserContactTel(dto.getContactTel());
138   - garAddress.setGarRemark(dto.getDetails());
139   - garAddressService.save(garAddress);
140   - return "新增地址成功";
  131 + // 限制地址数
  132 + LambdaQueryWrapper<GarAddress> qw = new LambdaQueryWrapper<>();
  133 + qw.eq(GarAddress::getGarUserId, userCustom.getUser().getGarUserId());
  134 + List<GarAddress> list = garAddressService.list(qw);
  135 + if (list.size() > 19) {
  136 + throw new BizException(ResultCode.CODE_201, "新增地址数已达上线,请删除地址后新增地址或编辑已有地址!");
  137 + }
  138 + GarAddress address = new GarAddress();
  139 + address.setGarUserId(userCustom.getUser().getGarUserId());
  140 + address.setGarUserAddress(dto.getAddressArea());
  141 + address.setGarUserDefault(dto.getDefaultFlag() ? GlobalStatus.GarAddressStatus.CURRENT_ADDRESS.getValue() : GlobalStatus.GarAddressStatus.NORMAL_ADDRESS.getValue());
  142 + address.setGarUserContactName(dto.getContactPerson());
  143 + address.setGarUserContactTel(dto.getContactIphoneNumber());
  144 + address.setGarRemark(dto.getAddressDetail());
  145 + handleCurrentAddress(address);
  146 + garAddressService.save(address);
  147 + return "新增地址成功!";
  148 + }
  149 +
  150 + @Override
  151 + public String updateAddress(AddressDto dto) {
  152 + GarAddress address = new GarAddress();
  153 + String userId = SecurityUtil.getUserCustom().getUser().getGarUserId();
  154 + address.setGarAddressId(dto.getGarAddressId());
  155 + address.setGarUserId(userId);
  156 + address.setGarUserAddress(dto.getAddressArea());
  157 + address.setGarRemark(dto.getAddressDetail());
  158 + address.setGarUserDefault(dto.getDefaultFlag() ? GlobalStatus.GarAddressStatus.CURRENT_ADDRESS.getValue() : GlobalStatus.GarAddressStatus.NORMAL_ADDRESS.getValue());
  159 + handleCurrentAddress(address);
  160 + address.setGarUserContactName(dto.getContactPerson());
  161 + address.setGarUserContactTel(dto.getContactIphoneNumber());
  162 + LambdaUpdateWrapper<GarAddress> up = new LambdaUpdateWrapper<>();
  163 + up.eq(GarAddress::getGarUserId, address.getGarUserId())
  164 + .eq(GarAddress::getGarAddressId, address.getGarAddressId());
  165 + garAddressService.update(address, up);
  166 + return "地址修改成功!";
  167 + }
  168 +
  169 + private void handleCurrentAddress(GarAddress address) {
  170 + if (address.getGarUserDefault().equals(GlobalStatus.GarAddressStatus.CURRENT_ADDRESS.getValue())) {
  171 + LambdaUpdateWrapper<GarAddress> wrapper = new LambdaUpdateWrapper<>();
  172 + wrapper.eq(GarAddress::getGarUserId, address.getGarUserId())
  173 + .set(GarAddress::getGarUserDefault, GlobalStatus.GarAddressStatus.NORMAL_ADDRESS.getValue());
  174 + garAddressService.update(wrapper);
  175 + }
  176 + }
  177 +
  178 + @Override
  179 + public String deleteAddress(String addressId) {
  180 + String garUserId = SecurityUtil.getUserCustom().getUser().getGarUserId();
  181 + LambdaQueryWrapper<GarAddress> qw = new LambdaQueryWrapper<>();
  182 + qw.eq(GarAddress::getGarUserId, garUserId)
  183 + .eq(GarAddress::getGarAddressId, addressId);
  184 + garAddressService.remove(qw);
  185 + return "删除成功!";
141 186 }
142 187  
143 188  
... ...
trash-garbage/src/main/java/com/trash/garbage/utils/ValidateCodeUtil.java
... ... @@ -3,11 +3,11 @@ package com.trash.garbage.utils;
3 3 import java.util.Random;
4 4  
5 5 public class ValidateCodeUtil {
6   - public static Integer generatorCode(int bit){
7   - int code = 0;
  6 + public static String generatorCode(int bit){
  7 + StringBuilder code = new StringBuilder();
8 8 for (int i = 0; i < bit; i++) {
9   - code = code * 10 + new Random().nextInt(10);
  9 + code = code.append(new Random().nextInt(10));
10 10 }
11   - return code;
  11 + return code.toString();
12 12 }
13 13 }
... ...
trash-garbage/src/main/resources/application-dev.yml
... ... @@ -71,9 +71,9 @@ spring:
71 71 # #连接池最大阻塞等待时间(使用负值表示没有限制)
72 72 max-wait: -1ms
73 73 #返回json的全局时间格式
74   - jackson:
75   - date-format: yyyy-MM-dd HH:mm:ss
76   - time-zone: GMT+8
  74 + jackson:
  75 + date-format: yyyy-MM-dd HH:mm:ss
  76 + time-zone: GMT+8
77 77  
78 78 # mybaits 配置
79 79 mybatis-plus:
... ...
trash-garbage/src/main/resources/mapper/GarAddressMapper.xml
... ... @@ -5,7 +5,7 @@
5 5 <mapper namespace="com.trash.garbage.mapper.GarAddressMapper">
6 6  
7 7 <resultMap id="BaseResultMap" type="com.trash.garbage.pojo.domain.GarAddress">
8   - <id property="garAddressId" column="gar_address_id" jdbcType="BIGINT"/>
  8 + <id property="garAddressId" column="gar_address_id" jdbcType="VARCHAR"/>
9 9 <result property="garUserId" column="gar_user_id" jdbcType="VARCHAR"/>
10 10 <result property="garUserAddress" column="gar_user_address" jdbcType="VARCHAR"/>
11 11 <result property="garUserDefault" column="gar_user_default" jdbcType="TINYINT"/>
... ...