From 6f7262ca3ebb86a3783dde92f327f2a8e070b63f Mon Sep 17 00:00:00 2001 From: yovinchen Date: Sat, 20 Jan 2024 23:24:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=81=E8=A3=85=E8=AF=B7=E6=B1=82=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E4=BB=A5=E5=8F=8A=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../train/common/aspect/LogAspect.java | 2 +- .../common/exception/BusinessException.java | 34 ++++++++++ .../exception/BusinessExceptionEnum.java | 29 +++++++++ .../yovinchen/train/common/req/PageReq.java | 23 +++++++ .../train/common/resp/CommonResp.java | 35 ++++++++++ .../yovinchen/train/common/resp/PageResp.java | 27 ++++++++ .../yovinchen/train/common/util/SnowUtil.java | 31 +++++++++ .../train/member/MemberApplication.java | 2 +- .../member/controller/MemberController.java | 19 +++--- .../yovinchen/train/member/entity/Member.java | 6 +- .../train/member/entity/Passenger.java | 6 +- .../train/member/req/MemberLoginReq.java | 29 +++++++++ .../train/member/req/MemberRegisterReq.java | 26 ++++++++ .../train/member/req/MemberSendCodeReq.java | 26 ++++++++ .../train/member/req/PassengerQueryReq.java | 20 ++++++ .../train/member/req/PassengerSaveReq.java | 64 +++++++++++++++++++ .../train/member/service/MemberService.java | 2 + .../service/impl/MemberServiceImpl.java | 20 ++++++ 18 files changed, 383 insertions(+), 18 deletions(-) create mode 100644 common/src/main/java/com/yovinchen/train/common/exception/BusinessException.java create mode 100644 common/src/main/java/com/yovinchen/train/common/exception/BusinessExceptionEnum.java create mode 100644 common/src/main/java/com/yovinchen/train/common/req/PageReq.java create mode 100644 common/src/main/java/com/yovinchen/train/common/resp/CommonResp.java create mode 100644 common/src/main/java/com/yovinchen/train/common/resp/PageResp.java create mode 100644 common/src/main/java/com/yovinchen/train/common/util/SnowUtil.java create mode 100644 member/src/main/java/com/yovinchen/train/member/req/MemberLoginReq.java create mode 100644 member/src/main/java/com/yovinchen/train/member/req/MemberRegisterReq.java create mode 100644 member/src/main/java/com/yovinchen/train/member/req/MemberSendCodeReq.java create mode 100644 member/src/main/java/com/yovinchen/train/member/req/PassengerQueryReq.java create mode 100644 member/src/main/java/com/yovinchen/train/member/req/PassengerSaveReq.java diff --git a/common/src/main/java/com/yovinchen/train/common/aspect/LogAspect.java b/common/src/main/java/com/yovinchen/train/common/aspect/LogAspect.java index 50c1272..f4dbe19 100644 --- a/common/src/main/java/com/yovinchen/train/common/aspect/LogAspect.java +++ b/common/src/main/java/com/yovinchen/train/common/aspect/LogAspect.java @@ -74,7 +74,7 @@ public class LogAspect { arguments[i] = args[i]; } // 排除字段,敏感字段或太长的字段不显示:身份证、手机号、邮箱、密码等 - String[] excludeProperties = {"mobile"}; + String[] excludeProperties = {}; PropertyPreFilters filters = new PropertyPreFilters(); PropertyPreFilters.MySimplePropertyPreFilter excludefilter = filters.addFilter(); excludefilter.addExcludes(excludeProperties); diff --git a/common/src/main/java/com/yovinchen/train/common/exception/BusinessException.java b/common/src/main/java/com/yovinchen/train/common/exception/BusinessException.java new file mode 100644 index 0000000..4631c39 --- /dev/null +++ b/common/src/main/java/com/yovinchen/train/common/exception/BusinessException.java @@ -0,0 +1,34 @@ +package com.yovinchen.train.common.exception; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * ClassName: BusinessException + * Package: com.yovinchen.train.common.exception + * + * @author yovinchen + * @Create 2024/1/20 16:37 + */ +@EqualsAndHashCode(callSuper = true) +@Data +//@AllArgsConstructor //生成全参数构造函数 +public class BusinessException extends RuntimeException { + + private BusinessExceptionEnum e; + + public BusinessException(BusinessExceptionEnum e) { + this.e = e; + } + + + /** + * 不写入堆栈信息,提高性能 + */ + @Override + public Throwable fillInStackTrace() { + return this; + } + + +} diff --git a/common/src/main/java/com/yovinchen/train/common/exception/BusinessExceptionEnum.java b/common/src/main/java/com/yovinchen/train/common/exception/BusinessExceptionEnum.java new file mode 100644 index 0000000..5747666 --- /dev/null +++ b/common/src/main/java/com/yovinchen/train/common/exception/BusinessExceptionEnum.java @@ -0,0 +1,29 @@ +package com.yovinchen.train.common.exception; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * ClassName: BusinessExceptionEnum + * Package: com.yovinchen.train.common.exception + * + * @author yovinchen + * @Create 2024/1/20 16:36 + */ +@Getter +@AllArgsConstructor //生成全参数构造函数 +public enum BusinessExceptionEnum { + + MEMBER_MOBILE_EXIST("手机号已注册"), + MEMBER_MOBILE_NOT_EXIST("请先获取短信验证码"), + MEMBER_MOBILE_CODE_ERROR("短信验证码错误"), + + BUSINESS_STATION_NAME_UNIQUE_ERROR("车站已存在"), + BUSINESS_TRAIN_CODE_UNIQUE_ERROR("车次编号已存在"), + BUSINESS_TRAIN_STATION_INDEX_UNIQUE_ERROR("同车次站序已存在"), + BUSINESS_TRAIN_STATION_NAME_UNIQUE_ERROR("同车次站名已存在"), + BUSINESS_TRAIN_CARRIAGE_INDEX_UNIQUE_ERROR("同车次厢号已存在"); + + private String desc; +} + diff --git a/common/src/main/java/com/yovinchen/train/common/req/PageReq.java b/common/src/main/java/com/yovinchen/train/common/req/PageReq.java new file mode 100644 index 0000000..e5bdae3 --- /dev/null +++ b/common/src/main/java/com/yovinchen/train/common/req/PageReq.java @@ -0,0 +1,23 @@ +package com.yovinchen.train.common.req; + +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * ClassName: PageReq + * Package: com.yovinchen.train.common.req + * + * @author yovinchen + * @Create 2024/1/20 13:40 + */ +@Data +public class PageReq { + + @NotNull(message = "【页码】不能为空") + private Integer page; + + @NotNull(message = "【每页条数】不能为空") + @Max(value = 100, message = "【每页条数】不能超过100") + private Integer size; +} diff --git a/common/src/main/java/com/yovinchen/train/common/resp/CommonResp.java b/common/src/main/java/com/yovinchen/train/common/resp/CommonResp.java new file mode 100644 index 0000000..218e227 --- /dev/null +++ b/common/src/main/java/com/yovinchen/train/common/resp/CommonResp.java @@ -0,0 +1,35 @@ +package com.yovinchen.train.common.resp; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * ClassName: CommonResp + * Package: com.yovinchen.train.common.resp + * + * @author yovinchen + * @Create 2024/1/19 22:52 + */ +@Data +@AllArgsConstructor //生成全参数构造函数 +@NoArgsConstructor//生成无参构造函数 +@Builder +public class CommonResp { + + /** + * 业务上的成功或失败 + */ + private boolean success = true; + + /** + * 返回信息 + */ + private String message; + + /** + * 返回泛型数据,自定义类型 + */ + private T content; +} diff --git a/common/src/main/java/com/yovinchen/train/common/resp/PageResp.java b/common/src/main/java/com/yovinchen/train/common/resp/PageResp.java new file mode 100644 index 0000000..108a7c2 --- /dev/null +++ b/common/src/main/java/com/yovinchen/train/common/resp/PageResp.java @@ -0,0 +1,27 @@ +package com.yovinchen.train.common.resp; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * ClassName: PageResp + * Package: com.yovinchen.train.common.resp + * + * @author yovinchen + * @Create 2024/1/20 13:37 + */ +@Data +public class PageResp implements Serializable { + /** + * 总条数 + */ + private Long total; + + /** + * 当前页的列表 + */ + private List list; + +} diff --git a/common/src/main/java/com/yovinchen/train/common/util/SnowUtil.java b/common/src/main/java/com/yovinchen/train/common/util/SnowUtil.java new file mode 100644 index 0000000..22f7ecb --- /dev/null +++ b/common/src/main/java/com/yovinchen/train/common/util/SnowUtil.java @@ -0,0 +1,31 @@ +package com.yovinchen.train.common.util; + +import cn.hutool.core.util.IdUtil; + +/** + * ClassName: SnowUtil + * Package: com.yovinchen.train.common.util + * 封装 hutool 雪花算法 + * + * @author yovinchen + * @Create 2024/1/20 16:43 + */ + +public class SnowUtil { + //数据中心 + private static final long dataCenterId = 1; + + //机器标识 + private static final long workerId = 1; + + public static long getSnowflakeNextId() { + return IdUtil.getSnowflake(workerId, dataCenterId) + .nextId(); + } + + public static String getSnowflakeNextIdStr() { + return IdUtil.getSnowflake(workerId, dataCenterId) + .nextIdStr(); + } +} + diff --git a/member/src/main/java/com/yovinchen/train/member/MemberApplication.java b/member/src/main/java/com/yovinchen/train/member/MemberApplication.java index 9d62947..4860ead 100644 --- a/member/src/main/java/com/yovinchen/train/member/MemberApplication.java +++ b/member/src/main/java/com/yovinchen/train/member/MemberApplication.java @@ -26,7 +26,7 @@ public class MemberApplication { Environment env = app.run(args) .getEnvironment(); LOG.info("启动成功!!"); - LOG.info("测试地址: \thttp://127.0.0.1:{}{}/test/test", env.getProperty("server.port"), env.getProperty("server.servlet.context-path")); + LOG.info("测试地址: \thttp://127.0.0.1:{}{}/doc.html", env.getProperty("server.port"), env.getProperty("server.servlet.context-path")); } } diff --git a/member/src/main/java/com/yovinchen/train/member/controller/MemberController.java b/member/src/main/java/com/yovinchen/train/member/controller/MemberController.java index e2cd937..f1518f7 100644 --- a/member/src/main/java/com/yovinchen/train/member/controller/MemberController.java +++ b/member/src/main/java/com/yovinchen/train/member/controller/MemberController.java @@ -1,14 +1,15 @@ package com.yovinchen.train.member.controller; -import com.yovinchen.train.member.entity.Member; +import com.yovinchen.train.common.resp.CommonResp; +import com.yovinchen.train.member.req.MemberRegisterReq; import com.yovinchen.train.member.service.MemberService; +import jakarta.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.List; - /** *

* 会员 前端控制器 @@ -24,9 +25,11 @@ public class MemberController { @Autowired MemberService memberService; - @GetMapping("/test") - public List test() { - return memberService.list(); + @PostMapping("/register") + public CommonResp register(@Valid @RequestBody MemberRegisterReq req) { + long register = memberService.register(req); + CommonResp longCommonResp = new CommonResp<>(); + longCommonResp.setContent(register); + return longCommonResp; } - } diff --git a/member/src/main/java/com/yovinchen/train/member/entity/Member.java b/member/src/main/java/com/yovinchen/train/member/entity/Member.java index 8665691..1e5790d 100644 --- a/member/src/main/java/com/yovinchen/train/member/entity/Member.java +++ b/member/src/main/java/com/yovinchen/train/member/entity/Member.java @@ -6,8 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; /** *

@@ -17,8 +16,7 @@ import lombok.Setter; * @author yovinchen * @since 2024-01-19 09:53:20 */ -@Getter -@Setter +@Data @TableName("member") @ApiModel(value = "Member对象", description = "会员") public class Member { diff --git a/member/src/main/java/com/yovinchen/train/member/entity/Passenger.java b/member/src/main/java/com/yovinchen/train/member/entity/Passenger.java index 429fd66..043cb9a 100644 --- a/member/src/main/java/com/yovinchen/train/member/entity/Passenger.java +++ b/member/src/main/java/com/yovinchen/train/member/entity/Passenger.java @@ -6,8 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; -import lombok.Getter; -import lombok.Setter; +import lombok.Data; import java.util.Date; @@ -19,8 +18,7 @@ import java.util.Date; * @author yovinchen * @since 2024-01-19 09:53:20 */ -@Getter -@Setter +@Data @TableName("passenger") @ApiModel(value = "Passenger对象", description = "乘车人") public class Passenger { diff --git a/member/src/main/java/com/yovinchen/train/member/req/MemberLoginReq.java b/member/src/main/java/com/yovinchen/train/member/req/MemberLoginReq.java new file mode 100644 index 0000000..71fa830 --- /dev/null +++ b/member/src/main/java/com/yovinchen/train/member/req/MemberLoginReq.java @@ -0,0 +1,29 @@ +package com.yovinchen.train.member.req; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * ClassName: MemberLoginReq + * Package: com.yovinchen.train.member.req + * + * @author yovinchen + * @Create 2024/1/19 22:55 + */ +@Data +@AllArgsConstructor //生成全参数构造函数 +@NoArgsConstructor//生成无参构造函数 +@Builder +public class MemberLoginReq { + + @NotBlank(message = "【手机号】不能为空") + @Pattern(regexp = "^1\\d{10}$", message = "手机号码格式错误") + private String mobile; + + @NotBlank(message = "【短信验证码】不能为空") + private String code; +} diff --git a/member/src/main/java/com/yovinchen/train/member/req/MemberRegisterReq.java b/member/src/main/java/com/yovinchen/train/member/req/MemberRegisterReq.java new file mode 100644 index 0000000..c9e4ffa --- /dev/null +++ b/member/src/main/java/com/yovinchen/train/member/req/MemberRegisterReq.java @@ -0,0 +1,26 @@ +package com.yovinchen.train.member.req; + +import io.swagger.annotations.ApiModelProperty; +import jakarta.validation.constraints.NotBlank; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * ClassName: MemberRegisterReq + * Package: com.yovinchen.train.member.req + * + * @author yovinchen + * @Create 2024/1/19 22:55 + */ +@Data +@AllArgsConstructor //生成全参数构造函数 +@NoArgsConstructor//生成无参构造函数 +@Builder +public class MemberRegisterReq { + + @NotBlank(message = "【手机号】不能为空") + @ApiModelProperty("手机号") + private String mobile; +} diff --git a/member/src/main/java/com/yovinchen/train/member/req/MemberSendCodeReq.java b/member/src/main/java/com/yovinchen/train/member/req/MemberSendCodeReq.java new file mode 100644 index 0000000..b9e1763 --- /dev/null +++ b/member/src/main/java/com/yovinchen/train/member/req/MemberSendCodeReq.java @@ -0,0 +1,26 @@ +package com.yovinchen.train.member.req; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * ClassName: MemberSendCodeReq + * Package: com.yovinchen.train.member.req + * + * @author yovinchen + * @Create 2024/1/20 11:57 + */ +@Data +@AllArgsConstructor //生成全参数构造函数 +@NoArgsConstructor//生成无参构造函数 +@Builder +public class MemberSendCodeReq { + + @NotBlank(message = "【手机号】不能为空") + @Pattern(regexp = "^1\\d{10}$", message = "手机号码格式错误") + private String mobile; +} diff --git a/member/src/main/java/com/yovinchen/train/member/req/PassengerQueryReq.java b/member/src/main/java/com/yovinchen/train/member/req/PassengerQueryReq.java new file mode 100644 index 0000000..0690665 --- /dev/null +++ b/member/src/main/java/com/yovinchen/train/member/req/PassengerQueryReq.java @@ -0,0 +1,20 @@ +package com.yovinchen.train.member.req; + +import com.yovinchen.train.common.req.PageReq; +import lombok.*; + +/** + * ClassName: PassengerQueryReq + * Package: com.yovinchen.train.member.req + * + * @author yovinchen + * @Create 2024/1/20 11:58 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@AllArgsConstructor //生成全参数构造函数 +@NoArgsConstructor//生成无参构造函数 +@Builder +public class PassengerQueryReq extends PageReq { + private Long memberId; +} diff --git a/member/src/main/java/com/yovinchen/train/member/req/PassengerSaveReq.java b/member/src/main/java/com/yovinchen/train/member/req/PassengerSaveReq.java new file mode 100644 index 0000000..572f7dc --- /dev/null +++ b/member/src/main/java/com/yovinchen/train/member/req/PassengerSaveReq.java @@ -0,0 +1,64 @@ +package com.yovinchen.train.member.req; + +import com.fasterxml.jackson.annotation.JsonFormat; +import jakarta.validation.constraints.NotBlank; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * ClassName: PassengerSaveReq + * Package: com.yovinchen.train.member.req + * + * @author yovinchen + * @Create 2024/1/20 13:40 + */ +@Data +@AllArgsConstructor //生成全参数构造函数 +@NoArgsConstructor//生成无参构造函数 +@Builder +public class PassengerSaveReq { + + /** + * id + */ + private Long id; + + /** + * 会员id + */ + private Long memberId; + + /** + * 姓名 + */ + @NotBlank(message = "【姓名】不能为空") + private String name; + + /** + * 身份证 + */ + @NotBlank(message = "【身份证】不能为空") + private String idCard; + + /** + * 旅客类型|枚举[PassengerTypeEnum] + */ + @NotBlank(message = "【旅客类型】不能为空") + private String type; + + /** + * 新增时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createTime; + + /** + * 修改时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date updateTime; +} diff --git a/member/src/main/java/com/yovinchen/train/member/service/MemberService.java b/member/src/main/java/com/yovinchen/train/member/service/MemberService.java index cb9988f..b65b119 100644 --- a/member/src/main/java/com/yovinchen/train/member/service/MemberService.java +++ b/member/src/main/java/com/yovinchen/train/member/service/MemberService.java @@ -2,6 +2,7 @@ package com.yovinchen.train.member.service; import com.baomidou.mybatisplus.extension.service.IService; import com.yovinchen.train.member.entity.Member; +import com.yovinchen.train.member.req.MemberRegisterReq; /** *

@@ -13,4 +14,5 @@ import com.yovinchen.train.member.entity.Member; */ public interface MemberService extends IService { + long register(MemberRegisterReq req); } diff --git a/member/src/main/java/com/yovinchen/train/member/service/impl/MemberServiceImpl.java b/member/src/main/java/com/yovinchen/train/member/service/impl/MemberServiceImpl.java index f9cb44a..e193557 100644 --- a/member/src/main/java/com/yovinchen/train/member/service/impl/MemberServiceImpl.java +++ b/member/src/main/java/com/yovinchen/train/member/service/impl/MemberServiceImpl.java @@ -1,8 +1,13 @@ package com.yovinchen.train.member.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.yovinchen.train.common.exception.BusinessException; +import com.yovinchen.train.common.exception.BusinessExceptionEnum; +import com.yovinchen.train.common.util.SnowUtil; import com.yovinchen.train.member.entity.Member; import com.yovinchen.train.member.mapper.MemberMapper; +import com.yovinchen.train.member.req.MemberRegisterReq; import com.yovinchen.train.member.service.MemberService; import org.springframework.stereotype.Service; @@ -17,4 +22,19 @@ import org.springframework.stereotype.Service; @Service public class MemberServiceImpl extends ServiceImpl implements MemberService { + @Override + public long register(MemberRegisterReq req) { + String mobile = req.getMobile(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(Member::getMobile, mobile); + if (baseMapper.selectCount(queryWrapper) != 0) { + throw new BusinessException(BusinessExceptionEnum.MEMBER_MOBILE_EXIST); + } + + Member newMember = new Member(); + newMember.setId(SnowUtil.getSnowflakeNextId()); + newMember.setMobile(mobile); + baseMapper.insert(newMember); + return newMember.getId(); + } }