新增润阳项目后端框架

This commit is contained in:
chenhaojie 2024-06-19 16:18:41 +08:00
parent 6585828171
commit 140d418a32
11 changed files with 79 additions and 80 deletions

View File

@ -31,6 +31,8 @@
<org.projectlombok.version>1.18.20</org.projectlombok.version> <org.projectlombok.version>1.18.20</org.projectlombok.version>
<google.guava.version>29.0-jre</google.guava.version> <google.guava.version>29.0-jre</google.guava.version>
<apache.commons.text>1.9</apache.commons.text> <apache.commons.text>1.9</apache.commons.text>
<postgresql.version>42.2.24</postgresql.version>
<sa.version>1.34.0</sa.version>
</properties> </properties>
<!--锁定版本--> <!--锁定版本-->
@ -76,25 +78,25 @@
<dependency> <dependency>
<groupId>org.postgresql</groupId> <groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId> <artifactId>postgresql</artifactId>
<version>42.2.24</version> <version>${postgresql.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-core</artifactId> <artifactId>sa-token-core</artifactId>
<version>1.34.0</version> <version>${sa.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId> <artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.34.0</version> <version>${sa.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis</artifactId> <artifactId>sa-token-dao-redis</artifactId>
<version>1.34.0</version> <version>${sa.version}</version>
</dependency> </dependency>
<!-- 验证码 --> <!-- 验证码 -->

View File

@ -1,6 +1,5 @@
package com.das.common.captcha; package com.das.common.captcha;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@ -17,10 +16,8 @@ public class CaptchaVO {
this.img = img; this.img = img;
} }
@ApiModelProperty("唯一值")
private String key; private String key;
@ApiModelProperty("图像的base64")
private String img; private String img;
} }

View File

@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
@ -21,26 +20,34 @@ import java.util.Date;
@Data @Data
public class BaseEntity implements Serializable { public class BaseEntity implements Serializable {
/**
* 创建人
*/
@JsonSerialize(using = ToStringSerializer.class) @JsonSerialize(using = ToStringSerializer.class)
@TableField(fill = FieldFill.INSERT) @TableField(fill = FieldFill.INSERT)
@ApiModelProperty("创建人")
private Long createdBy; private Long createdBy;
/**
* 创建时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT) @TableField(fill = FieldFill.INSERT)
@ApiModelProperty("创建时间")
private Date createdTime; private Date createdTime;
/**
* 更新人
*/
@JsonSerialize(using = ToStringSerializer.class) @JsonSerialize(using = ToStringSerializer.class)
@TableField(fill = FieldFill.INSERT_UPDATE) @TableField(fill = FieldFill.INSERT_UPDATE)
@ApiModelProperty("更新人")
private Long updatedBy; private Long updatedBy;
/**
* 更新时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT_UPDATE) @TableField(fill = FieldFill.INSERT_UPDATE)
@ApiModelProperty("更新时间")
private Date updatedTime; private Date updatedTime;
} }

View File

@ -1,7 +1,5 @@
package com.das.common.result; package com.das.common.result;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.lang.Nullable; import org.springframework.lang.Nullable;
import java.io.Serializable; import java.io.Serializable;
@ -11,7 +9,6 @@ import java.util.Optional;
* @author chenhaojie * @author chenhaojie
* @Description 公共返回信息 * @Description 公共返回信息
*/ */
@ApiModel("统一响应结果")
public class R<T> implements Serializable { public class R<T> implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ -19,25 +16,21 @@ public class R<T> implements Serializable {
/** /**
* 状态码 * 状态码
*/ */
@ApiModelProperty("状态码")
private int code; private int code;
/** /**
* 是否成功 * 是否成功
*/ */
@ApiModelProperty("是否成功")
private boolean success; private boolean success;
/** /**
* 承载数据 * 承载数据
*/ */
@ApiModelProperty("承载数据")
private T data; private T data;
/** /**
* 返回消息 * 返回消息
*/ */
@ApiModelProperty("返回消息")
private String msg; private String msg;
private R(IResultCode resultCode) { private R(IResultCode resultCode) {

View File

@ -11,7 +11,6 @@ import com.das.modules.auth.domain.vo.LoginVO;
import com.das.modules.auth.service.ILoginService; import com.das.modules.auth.service.ILoginService;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.google.code.kaptcha.Producer; import com.google.code.kaptcha.Producer;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
@ -43,9 +42,8 @@ public class CaptchaImageController {
private AdminRedisTemplate adminRedisTemplate; private AdminRedisTemplate adminRedisTemplate;
/** /**
* 限制频率在 5 秒钟 3次 * 获取验证码
*/ */
@ApiOperation("获取验证码")
@PostMapping("/captchaImage") @PostMapping("/captchaImage")
public R<CaptchaVO> getCaptcha() { public R<CaptchaVO> getCaptcha() {
String uuid = IdUtil.fastSimpleUUID(); String uuid = IdUtil.fastSimpleUUID();

View File

@ -1,24 +1,16 @@
package com.das.modules.auth.controller; package com.das.modules.auth.controller;
import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.util.IdUtil;
import com.das.common.captcha.CaptchaProperties;
import com.das.common.captcha.CaptchaUtil;
import com.das.common.captcha.CaptchaVO;
import com.das.common.result.R; import com.das.common.result.R;
import com.das.common.utils.AESUtil;
import com.das.common.utils.AdminRedisTemplate;
import com.das.modules.auth.domain.LoginUserDetails; import com.das.modules.auth.domain.LoginUserDetails;
import com.das.modules.auth.domain.vo.LoginVO; import com.das.modules.auth.domain.vo.LoginVO;
import com.das.modules.auth.domain.vo.TokenVo;
import com.das.modules.auth.service.ILoginService; import com.das.modules.auth.service.ILoginService;
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.JsonProcessingException;
import com.google.code.kaptcha.Producer;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -39,8 +31,11 @@ public class LoginController {
String key; String key;
/**
* 登录接口
* @return 退出结果提示信息
*/
@PostMapping("/login") @PostMapping("/login")
@ApiOperation("登录接口")
public R<LoginUserDetails> login(@RequestParam String param, HttpServletRequest request, HttpServletResponse response) throws JsonProcessingException { public R<LoginUserDetails> login(@RequestParam String param, HttpServletRequest request, HttpServletResponse response) throws JsonProcessingException {
LoginUserDetails loginInfo = loginService.login(param,request, response); LoginUserDetails loginInfo = loginService.login(param,request, response);
return R.success(loginInfo); return R.success(loginInfo);
@ -60,7 +55,6 @@ public class LoginController {
} }
@PostMapping("/refreshToken") @PostMapping("/refreshToken")
@ApiOperation("刷新token接口")
public R<LoginVO> refreshToken(@NotEmpty(message = "刷新token不允许为空") @RequestParam("refreshToken")String refreshToken){ public R<LoginVO> refreshToken(@NotEmpty(message = "刷新token不允许为空") @RequestParam("refreshToken")String refreshToken){
LoginVO loginVO = loginService.refreshToken(refreshToken); LoginVO loginVO = loginService.refreshToken(refreshToken);
return R.data(loginVO); return R.data(loginVO);

View File

@ -1,6 +1,5 @@
package com.das.modules.auth.domain.request; package com.das.modules.auth.domain.request;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
@ -12,24 +11,34 @@ import javax.validation.constraints.NotBlank;
@Data @Data
public class LoginRequest { public class LoginRequest {
/**
* * 用户账号
*/
@NotBlank(message = "用户名不允许为空") @NotBlank(message = "用户名不允许为空")
@ApiModelProperty("用户账号")
private String username; private String username;
/**
* 密码
*/
@NotBlank(message = "密码不允许为空") @NotBlank(message = "密码不允许为空")
@ApiModelProperty("密码")
private String password; private String password;
/**
* 是否记住
*/
@NotBlank(message = "是否记住") @NotBlank(message = "是否记住")
@ApiModelProperty("是否记住")
private boolean keep; private boolean keep;
/**
* 验证码
*/
@NotBlank(message = "验证码不允许为空") @NotBlank(message = "验证码不允许为空")
@ApiModelProperty("验证码")
private String code; private String code;
/**
* 验证码唯一标识
*/
@NotBlank(message = "验证码唯一标识不允许为空") @NotBlank(message = "验证码唯一标识不允许为空")
@ApiModelProperty("验证码唯一标识")
private String uuid; private String uuid;

View File

@ -1,6 +1,5 @@
package com.das.modules.auth.domain.vo; package com.das.modules.auth.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
@ -14,13 +13,19 @@ public class LoginVO implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty("accessToken") /**
*
*/
private String accessToken; private String accessToken;
@ApiModelProperty("刷新token") /**
*刷新token
*/
private String refreshToken; private String refreshToken;
@ApiModelProperty("过期时间,单位秒") /**
*过期时间
*/
private Integer expire; private Integer expire;
public LoginVO(){} public LoginVO(){}

View File

@ -1,11 +1,6 @@
package com.das.modules.auth.domain.vo; package com.das.modules.auth.domain.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.io.Serializable; import java.io.Serializable;
@ -20,38 +15,32 @@ public class SysUserVo implements Serializable {
/** /**
* 账号ID * 账号ID
*/ */
@ApiModelProperty("账号ID")
private Long id; private Long id;
/** /**
* 账号名 * 账号名
*/ */
@ApiModelProperty("账号名")
private String account; private String account;
/** /**
* 账号本地名 * 账号本地名
*/ */
@ApiModelProperty("账号本地名")
private String userName; private String userName;
/** /**
* 手机号 * 手机号
*/ */
@ApiModelProperty("手机号")
private String phone; private String phone;
/** /**
* E-Mail地址 * E-Mail地址
*/ */
@ApiModelProperty("E-Mail地址")
private String email; private String email;
/** /**
* 所属机构 * 所属机构
*/ */
@ApiModelProperty("组织机构")
private Long orgId; private Long orgId;

View File

@ -1,34 +1,27 @@
package com.das.modules.auth.domain.vo; package com.das.modules.auth.domain.vo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
/** /**
* 令牌实体 * 令牌实体
* @author Administrator * @author Administrator
*/ */
@Api(description = "令牌实体")
@Data @Data
public class TokenVo { public class TokenVo {
/** /**
* 令牌 * 令牌
*/ */
@ApiModelProperty("令牌值")
private String token; private String token;
/** /**
* 令牌超时时间单位() * 令牌超时时间单位()
*/ */
@ApiModelProperty("令牌超时时间,单位(秒)")
public long tokenTimeout; public long tokenTimeout;
/** /**
* 令牌活动超时间隔单位() * 令牌活动超时间隔单位()
*/ */
@ApiModelProperty("令牌活动超时间隔,单位(秒)")
public long tokenActivityTimeout; public long tokenActivityTimeout;
/** /**
* 账号ID * 账号ID
*/ */
@ApiModelProperty("账号ID")
public long accountId; public long accountId;
} }

View File

@ -1,19 +1,14 @@
package com.das.modules.auth.entity; package com.das.modules.auth.entity;
import com.das.common.constant.BaseEntity;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat; import com.das.common.constant.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate;
import java.util.Date; import java.util.Date;
/** /**
@ -25,40 +20,57 @@ import java.util.Date;
*/ */
@Data @Data
@TableName("sys_user") @TableName("sys_user")
@ApiModel(value = "SysUser对象", description = "用户信息")
@ToString(callSuper = true) @ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
public class SysUser extends BaseEntity { public class SysUser extends BaseEntity {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty("用户ID") /**
* 用户ID
*/
@TableId(value = "id", type = IdType.ASSIGN_ID) @TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id; private Long id;
@ApiModelProperty("登录账号") /**
* 登录账号
*/
private String account; private String account;
@ApiModelProperty("加密后的密码") /**
* 加密后的密码
*/
private String password; private String password;
@ApiModelProperty("职员名称") /**
* 职员名称
*/
private String userName; private String userName;
@ApiModelProperty("职员邮箱") /**
* 职员邮箱
*/
private String email; private String email;
@ApiModelProperty("职员联系电话") /**
* 职员联系电话
*/
private String phone; private String phone;
@ApiModelProperty("所属机构id") /**
* 所属机构id
*/
private Long orgId; private Long orgId;
/**
* 最近一次登录时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty("最近一次登录时间")
private Date lastLogin; private Date lastLogin;
@ApiModelProperty("乐观锁") /**
* 乐观锁
*/
private int revision; private int revision;
} }