Переглянути джерело

add(operation-backend & SQL )
[增加登录和公众号列表]

wangxiao 4 роки тому
батько
коміт
870d10e046
17 змінених файлів з 808 додано та 1 видалено
  1. 12 0
      operation-backend/pom.xml
  2. 3 0
      operation-backend/src/main/java/com/idiot/operationbackend/OperationBackendApplication.java
  3. 117 0
      operation-backend/src/main/java/com/idiot/operationbackend/config/ExceptionHandlerConfiguration.java
  4. 61 0
      operation-backend/src/main/java/com/idiot/operationbackend/controller/AuthController.java
  5. 110 0
      operation-backend/src/main/java/com/idiot/operationbackend/entity/AuthUser.java
  6. 156 0
      operation-backend/src/main/java/com/idiot/operationbackend/entity/OfficialAccount.java
  7. 11 0
      operation-backend/src/main/java/com/idiot/operationbackend/mappers/AuthUserMapper.java
  8. 11 0
      operation-backend/src/main/java/com/idiot/operationbackend/mappers/OfficialAccountMapper.java
  9. 21 0
      operation-backend/src/main/java/com/idiot/operationbackend/service/facade/AuthUserService.java
  10. 11 0
      operation-backend/src/main/java/com/idiot/operationbackend/service/facade/OfficialAccountService.java
  11. 29 0
      operation-backend/src/main/java/com/idiot/operationbackend/service/impl/AuthUserServiceImpl.java
  12. 16 0
      operation-backend/src/main/java/com/idiot/operationbackend/service/impl/OfficialAccountServiceImpl.java
  13. 39 0
      operation-backend/src/main/java/com/idiot/operationbackend/support/AccountState.java
  14. 50 0
      operation-backend/src/main/java/com/idiot/operationbackend/support/CustomException.java
  15. 100 0
      operation-backend/src/main/java/com/idiot/operationbackend/support/JsonResult.java
  16. 21 1
      operation-backend/src/main/resources/application-dev.yml
  17. 40 0
      sql/t_auth_user.sql

+ 12 - 0
operation-backend/pom.xml

@@ -20,6 +20,10 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
         <!--mysql  mybatis-plus   start-->
         <dependency>
             <groupId>com.baomidou</groupId>
@@ -41,6 +45,14 @@
         </dependency>
         <!-- swagger2  start -->
 
+
+        <!--kaptcha start-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>kaptcha-spring-boot-starter</artifactId>
+            <version>1.1.0</version>
+        </dependency>
+        <!--kaptcha end-->
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>

+ 3 - 0
operation-backend/src/main/java/com/idiot/operationbackend/OperationBackendApplication.java

@@ -1,5 +1,7 @@
 package com.idiot.operationbackend;
 
+import org.mybatis.spring.annotation.MapperScan;
+import org.mybatis.spring.annotation.MapperScans;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@@ -9,6 +11,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
  * @date 2020-09-09
  */
 @SpringBootApplication
+@MapperScans(value = {@MapperScan("com.idiot.operationbackend.mappers")})
 public class OperationBackendApplication {
 
     public static void main(String[] args) {

+ 117 - 0
operation-backend/src/main/java/com/idiot/operationbackend/config/ExceptionHandlerConfiguration.java

@@ -0,0 +1,117 @@
+package com.idiot.operationbackend.config;
+
+import com.baomidou.kaptcha.exception.KaptchaException;
+import com.idiot.operationbackend.support.CustomException;
+import com.idiot.operationbackend.support.JsonResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.ResponseEntity;
+import org.springframework.http.converter.HttpMessageConversionException;
+import org.springframework.validation.ObjectError;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.MissingRequestHeaderException;
+import org.springframework.web.bind.MissingServletRequestParameterException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author wang xiao
+ * @date Created in 15:38 2020/9/10
+ */
+@RestControllerAdvice
+public class ExceptionHandlerConfiguration {
+
+    private final Logger log = LoggerFactory.getLogger("ExceptionHandler");
+
+    @ExceptionHandler(value = CustomException.class)
+    public ResponseEntity<JsonResult<String>> orderingExceptionHandler(CustomException e) {
+        JsonResult<String> jsonResult = JsonResult.build(e.getCode());
+        jsonResult.message(e.getMessage());
+        log.error("发生业务异常==========>异常code:{},异常原因:{}", e.getCode(), e.getMessage());
+        e.printStackTrace();
+        return ResponseEntity.ok(jsonResult);
+    }
+
+    @ExceptionHandler(value = KaptchaException.class)
+    public ResponseEntity<JsonResult<String>> orderingExceptionHandler(KaptchaException e) {
+        JsonResult<String> jsonResult = JsonResult.build(500);
+        jsonResult.message("验证码错误或者已经过期!");
+        log.warn("发生验证码异常==========>异常code:{},异常原因:{}", 500, "验证码错误或者已经过期!");
+        e.printStackTrace();
+        return ResponseEntity.ok(jsonResult);
+    }
+
+    @ExceptionHandler(value = RuntimeException.class)
+    public ResponseEntity<JsonResult<String>> exceptionHandler(RuntimeException e) {
+        JsonResult<String> jsonResult = JsonResult.build(500);
+        jsonResult.message(e.getMessage());
+        log.error("发系统异常==========>异常code: 500,异常原因:{}", e.getMessage());
+        for (StackTraceElement stackTraceElement : e.getStackTrace()) {
+            log.error("500=========>{}",stackTraceElement.toString());
+        }
+        return ResponseEntity.ok(jsonResult);
+    }
+
+    /**
+     * Bean 校验异常
+     * @param ex
+     * @return ResponseEntity<JsonResult>
+     */
+    @ExceptionHandler(MethodArgumentNotValidException.class)
+    public ResponseEntity<JsonResult<String>> validationErrorHandler(MethodArgumentNotValidException ex) {
+        List<String> errorInformation = ex.getBindingResult().getAllErrors()
+                .stream()
+                .map(ObjectError::getDefaultMessage)
+                .collect(Collectors.toList());
+        JsonResult<String> jsonResult = JsonResult.build(400);
+        jsonResult.message(errorInformation.toString());
+        log.warn("检测到校验参数异常==========>异常code: 400,异常原因:{}", errorInformation.toString());
+        return ResponseEntity.ok(jsonResult);
+    }
+
+
+    /**
+     * 参数类型转换错误
+     * @param e 错误
+     * @return 错误信息
+     */
+    @ExceptionHandler(HttpMessageConversionException.class)
+    public ResponseEntity<JsonResult<String>> parameterTypeException(HttpMessageConversionException e) {
+        log.error("参数类型异常==========>异常code: 400,异常原因:{}", e.getCause().getLocalizedMessage());
+        JsonResult<String> jsonResult = JsonResult.build(400);
+        jsonResult.message(e.getCause().getLocalizedMessage());
+        return ResponseEntity.ok(jsonResult);
+    }
+
+
+    /**
+     * 参数类型转换错误
+     * @param e 错误
+     * @return 错误信息
+     */
+    @ExceptionHandler(MissingServletRequestParameterException.class)
+    public ResponseEntity<JsonResult<String>> parameterTypeException(MissingServletRequestParameterException e) {
+        log.error("参数类型异常==========>异常code: 400,异常原因:{}", e.getMessage());
+        JsonResult<String> jsonResult = JsonResult.build(400);
+        jsonResult.message(e.getMessage());
+        return ResponseEntity.ok(jsonResult);
+    }
+
+    /**
+     * 参数类型转换错误
+     * @param e 错误
+     * @return 错误信息
+     */
+    @ExceptionHandler(MissingRequestHeaderException.class)
+    public ResponseEntity<JsonResult<String>> parameterTypeException(MissingRequestHeaderException e) {
+        log.error("参数类型异常==========>异常code: 400,异常原因:{}", e.getMessage());
+        JsonResult<String> jsonResult = JsonResult.build(400);
+        jsonResult.message(e.getMessage());
+        return ResponseEntity.ok(jsonResult);
+    }
+
+
+}

+ 61 - 0
operation-backend/src/main/java/com/idiot/operationbackend/controller/AuthController.java

@@ -0,0 +1,61 @@
+package com.idiot.operationbackend.controller;
+
+import com.baomidou.kaptcha.Kaptcha;
+import com.idiot.operationbackend.entity.AuthUser;
+import com.idiot.operationbackend.service.facade.AuthUserService;
+import com.idiot.operationbackend.support.CustomException;
+import com.idiot.operationbackend.support.JsonResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.Objects;
+
+/**
+ * @author wang xiao
+ * @date Created in 15:06 2020/9/10
+ */
+@RestController
+@RequestMapping("/auth")
+@Api(value = "AuthController", tags ="认证、授权登录")
+public class AuthController {
+
+
+    private final Logger logger = LoggerFactory.getLogger(AuthController.class);
+
+    @Autowired
+    private Kaptcha kaptcha;
+
+    @Autowired
+    private AuthUserService userService;
+
+
+    @GetMapping("/captcha")
+    @ApiOperation(value = "获取验证码")
+    public void getCaptcha() {
+        kaptcha.render();
+    }
+
+
+
+    @PostMapping("/login")
+    @ApiOperation(value = "账号登录")
+    @ApiImplicitParam(value = "authUser",paramType = "body",dataTypeClass = AuthUser.class)
+    public ResponseEntity<JsonResult<AuthUser>> login(@RequestBody @Valid AuthUser authUser) {
+        logger.info("用户:{}账号密码登录",authUser.getUserCode());
+        String captchaCode = authUser.getCaptchaCode();
+        kaptcha.validate(captchaCode);
+        authUser =userService.queryByUserCodeAndPassword(authUser.getPassword(),authUser.getUserCode());
+        if (Objects.isNull(authUser)) {
+            throw new CustomException(500,"账号或者密码错误!请检查大小写");
+        }
+        authUser.setPassword("");
+        return ResponseEntity.ok(JsonResult.success(authUser));
+    }
+}

+ 110 - 0
operation-backend/src/main/java/com/idiot/operationbackend/entity/AuthUser.java

@@ -0,0 +1,110 @@
+package com.idiot.operationbackend.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * @author wang xiao
+ * @date Created in 14:45 2020/9/10
+ */
+@TableName("t_auth_user")
+public class AuthUser {
+
+    @TableId
+    private String id;
+
+    @NotEmpty(message = "账号不能为空")
+    private String userCode;
+
+    @NotEmpty(message = "密码不能为空")
+    private String password;
+
+    private String openId;
+
+    private String nikeName;
+
+    private String avatarUrl;
+
+    private String parentUerId;
+
+    private String createTime;
+
+    @TableField(exist = false)
+    @NotEmpty(message = "验证码不能为空")
+    private String captchaCode;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getUserCode() {
+        return userCode;
+    }
+
+    public void setUserCode(String userCode) {
+        this.userCode = userCode;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getOpenId() {
+        return openId;
+    }
+
+    public void setOpenId(String openId) {
+        this.openId = openId;
+    }
+
+    public String getNikeName() {
+        return nikeName;
+    }
+
+    public void setNikeName(String nikeName) {
+        this.nikeName = nikeName;
+    }
+
+    public String getAvatarUrl() {
+        return avatarUrl;
+    }
+
+    public void setAvatarUrl(String avatarUrl) {
+        this.avatarUrl = avatarUrl;
+    }
+
+    public String getParentUerId() {
+        return parentUerId;
+    }
+
+    public void setParentUerId(String parentUerId) {
+        this.parentUerId = parentUerId;
+    }
+
+    public String getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(String createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getCaptchaCode() {
+        return captchaCode;
+    }
+
+    public void setCaptchaCode(String captchaCode) {
+        this.captchaCode = captchaCode;
+    }
+}

+ 156 - 0
operation-backend/src/main/java/com/idiot/operationbackend/entity/OfficialAccount.java

@@ -0,0 +1,156 @@
+package com.idiot.operationbackend.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.idiot.operationbackend.support.AccountState;
+
+/**
+ * 公众号
+ * @author wang xiao
+ * @date Created in 17:51 2020/9/10
+ */
+@TableName("t_official_account")
+public class OfficialAccount {
+
+    @TableId
+    private String id;
+
+    private String nickName;
+
+    private String headImg;
+
+    private String serviceTypeInfo;
+
+    private String verifyTypeInfo;
+
+    private String userName;
+
+    private String principalName;
+
+    private String alias;
+
+    private String businessInfo;
+
+    private String qrcodeUrl;
+
+    private AccountState state;
+
+
+    /**
+     * 粉丝数量
+     */
+    @TableField(exist = false)
+    private Integer fansNum;
+
+    /**
+     * 互动粉丝数量
+     */
+    @TableField(exist = false)
+    private Integer interactFansNum;
+
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getNickName() {
+        return nickName;
+    }
+
+    public void setNickName(String nickName) {
+        this.nickName = nickName;
+    }
+
+    public String getHeadImg() {
+        return headImg;
+    }
+
+    public void setHeadImg(String headImg) {
+        this.headImg = headImg;
+    }
+
+    public String getServiceTypeInfo() {
+        return serviceTypeInfo;
+    }
+
+    public void setServiceTypeInfo(String serviceTypeInfo) {
+        this.serviceTypeInfo = serviceTypeInfo;
+    }
+
+    public String getVerifyTypeInfo() {
+        return verifyTypeInfo;
+    }
+
+    public void setVerifyTypeInfo(String verifyTypeInfo) {
+        this.verifyTypeInfo = verifyTypeInfo;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getPrincipalName() {
+        return principalName;
+    }
+
+    public void setPrincipalName(String principalName) {
+        this.principalName = principalName;
+    }
+
+    public String getAlias() {
+        return alias;
+    }
+
+    public void setAlias(String alias) {
+        this.alias = alias;
+    }
+
+    public String getBusinessInfo() {
+        return businessInfo;
+    }
+
+    public void setBusinessInfo(String businessInfo) {
+        this.businessInfo = businessInfo;
+    }
+
+    public String getQrcodeUrl() {
+        return qrcodeUrl;
+    }
+
+    public void setQrcodeUrl(String qrcodeUrl) {
+        this.qrcodeUrl = qrcodeUrl;
+    }
+
+    public AccountState getState() {
+        return state;
+    }
+
+    public void setState(AccountState state) {
+        this.state = state;
+    }
+
+    public Integer getFansNum() {
+        return fansNum;
+    }
+
+    public void setFansNum(Integer fansNum) {
+        this.fansNum = fansNum;
+    }
+
+    public Integer getInteractFansNum() {
+        return interactFansNum;
+    }
+
+    public void setInteractFansNum(Integer interactFansNum) {
+        this.interactFansNum = interactFansNum;
+    }
+}

+ 11 - 0
operation-backend/src/main/java/com/idiot/operationbackend/mappers/AuthUserMapper.java

@@ -0,0 +1,11 @@
+package com.idiot.operationbackend.mappers;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.idiot.operationbackend.entity.AuthUser;
+
+/**
+ * @author wang xiao
+ * @date Created in 15:45 2020/9/10
+ */
+public interface AuthUserMapper extends BaseMapper<AuthUser> {
+}

+ 11 - 0
operation-backend/src/main/java/com/idiot/operationbackend/mappers/OfficialAccountMapper.java

@@ -0,0 +1,11 @@
+package com.idiot.operationbackend.mappers;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.idiot.operationbackend.entity.OfficialAccount;
+
+/**
+ * @author wang xiao
+ * @date Created in 17:55 2020/9/10
+ */
+public interface OfficialAccountMapper extends BaseMapper<OfficialAccount> {
+}

+ 21 - 0
operation-backend/src/main/java/com/idiot/operationbackend/service/facade/AuthUserService.java

@@ -0,0 +1,21 @@
+package com.idiot.operationbackend.service.facade;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.idiot.operationbackend.entity.AuthUser;
+
+/**
+ * @author wang xiao
+ * @date Created in 15:47 2020/9/10
+ */
+public interface AuthUserService extends IService<AuthUser> {
+
+    /**
+     *  查询用户
+     * @author wangxiao
+     * @date 16:17 2020/9/10
+     * @param password
+     * @param userCode
+     * @return com.idiot.operationbackend.entity.AuthUser
+     */
+    AuthUser queryByUserCodeAndPassword(String password,String userCode);
+}

+ 11 - 0
operation-backend/src/main/java/com/idiot/operationbackend/service/facade/OfficialAccountService.java

@@ -0,0 +1,11 @@
+package com.idiot.operationbackend.service.facade;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.idiot.operationbackend.entity.OfficialAccount;
+
+/**
+ * @author wang xiao
+ * @date Created in 17:56 2020/9/10
+ */
+public interface OfficialAccountService extends IService<OfficialAccount> {
+}

+ 29 - 0
operation-backend/src/main/java/com/idiot/operationbackend/service/impl/AuthUserServiceImpl.java

@@ -0,0 +1,29 @@
+package com.idiot.operationbackend.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.idiot.operationbackend.entity.AuthUser;
+import com.idiot.operationbackend.mappers.AuthUserMapper;
+import com.idiot.operationbackend.service.facade.AuthUserService;
+import org.springframework.stereotype.Service;
+import org.springframework.util.DigestUtils;
+
+
+/**
+ * @author wang xiao
+ * @date Created in 15:48 2020/9/10
+ */
+@Service
+public class AuthUserServiceImpl extends ServiceImpl<AuthUserMapper, AuthUser>
+        implements AuthUserService {
+
+
+    @Override
+    public AuthUser queryByUserCodeAndPassword(String password, String userCode) {
+        password = DigestUtils.md5DigestAsHex(password.getBytes());
+        AuthUser authUser = getOne(Wrappers.<AuthUser>lambdaQuery()
+                .eq(AuthUser::getUserCode,userCode)
+                .eq(AuthUser::getPassword,password),false);
+        return authUser;
+    }
+}

+ 16 - 0
operation-backend/src/main/java/com/idiot/operationbackend/service/impl/OfficialAccountServiceImpl.java

@@ -0,0 +1,16 @@
+package com.idiot.operationbackend.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.idiot.operationbackend.entity.OfficialAccount;
+import com.idiot.operationbackend.mappers.OfficialAccountMapper;
+import com.idiot.operationbackend.service.facade.OfficialAccountService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author wang xiao
+ * @date Created in 17:56 2020/9/10
+ */
+@Service
+public class OfficialAccountServiceImpl extends ServiceImpl<OfficialAccountMapper, OfficialAccount>
+        implements OfficialAccountService {
+}

+ 39 - 0
operation-backend/src/main/java/com/idiot/operationbackend/support/AccountState.java

@@ -0,0 +1,39 @@
+package com.idiot.operationbackend.support;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * @author wang xiao
+ * @date Created in 18:08 2020/9/10
+ */
+public enum AccountState {
+
+    /**
+     *  公众号认证成功
+     * @author wangxiao
+     * @date 18:10 2020/9/10
+     */
+    SUCCESS(0,"认证成功"),
+
+    /**
+     *  公众号认证成功
+     * @author wangxiao
+     * @date 18:10 2020/9/10
+     */
+    FAIL(-1,"认证失败");
+
+
+    @EnumValue
+    private final int value;
+
+    @JsonValue
+    private final String label;
+
+    AccountState(int value, String label) {
+        this.value = value;
+        this.label = label;
+    }
+
+
+}

+ 50 - 0
operation-backend/src/main/java/com/idiot/operationbackend/support/CustomException.java

@@ -0,0 +1,50 @@
+package com.idiot.operationbackend.support;
+
+/**
+ * @author wang xiao
+ * @date Created in 15:40 2020/9/10
+ */
+public class CustomException  extends RuntimeException{
+    private int code;
+
+    private String message;
+
+
+    public CustomException(int code, String message) {
+        super(message);
+        this.message = message;
+        this.code = code;
+    }
+
+    public CustomException(String message) {
+        this.code = 500;
+        this.message = message;
+    }
+
+
+    /**
+     * avoid the expensive and useless stack trace for api exceptions
+     * 避免对堆栈无效追踪 导致性能下降严重
+     */
+    @Override
+    public  Throwable fillInStackTrace() {
+        return this;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    @Override
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+}

+ 100 - 0
operation-backend/src/main/java/com/idiot/operationbackend/support/JsonResult.java

@@ -0,0 +1,100 @@
+package com.idiot.operationbackend.support;
+
+/**
+ * 返回json 统一实体类
+ * @author wang xiao
+ * @date Created in 14:35 2020/9/10
+ */
+public class JsonResult<T> {
+
+    /**
+     * 状态码
+     */
+    private int code;
+    /**
+     * 提示消息
+     */
+    private String message;
+    /**
+     * 数据
+     */
+    private T data;
+
+    public JsonResult<T> code (int status){
+        this.code = status;
+        return this;
+    }
+    public JsonResult<T> message (String message){
+        this.message = message;
+        return this;
+    }
+    public JsonResult<T> data (T data){
+        this.data = data;
+        return this;
+    }
+
+    private JsonResult(int code) {
+        this.code = code;
+    }
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+    public static <T> JsonResult<T> build (int code) {
+        return new JsonResult<>(code);
+    }
+
+    public static <T> JsonResult<T> build (int code,T data,String message) {
+        JsonResult<T> jsonResult  = JsonResult.build(code);
+        return jsonResult.data(data).message(message);
+    }
+
+    public static <T> JsonResult<T> success (T data) {
+        JsonResult<T> jsonResult  = JsonResult.build(200);
+        return jsonResult.data(data);
+    }
+    public static <T> JsonResult<T> success (int code, T data) {
+        JsonResult<T> jsonResult  = JsonResult.build(code);
+        return jsonResult.data(data);
+    }
+    public static <T> JsonResult<T> success (T data, String message) {
+        JsonResult<T> jsonResult  = JsonResult.build(200);
+        return jsonResult.data(data).message(message);
+    }
+
+    public static <T> JsonResult<T> fail (String message) {
+        JsonResult<T> jsonResult  = JsonResult.build(500);
+        return jsonResult.message(message);
+    }
+
+    public static <T> JsonResult<T> fail (String message, T data) {
+        JsonResult<T> jsonResult  = JsonResult.build(500);
+        return jsonResult.message(message).data(data);
+    }
+
+
+
+
+
+}

+ 21 - 1
operation-backend/src/main/resources/application-dev.yml

@@ -1,7 +1,8 @@
 spring:
+  #  datasource
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://192.168.1.142:3307/luojigou_game_contest?serverTimezone=UTC&characterEncoding=utf8
+    url: jdbc:mysql://192.168.1.142:3307/db_operation?serverTimezone=UTC&characterEncoding=utf8
     username: root
     password: asdfg12345
     type: com.zaxxer.hikari.HikariDataSource
@@ -14,6 +15,7 @@ spring:
       idle-timeout: 60000
       login-timeout: 5
       max-lifetime: 60000
+#  mybatis-plus
 mybatis-plus:
   global-config:
     db-config:
@@ -21,9 +23,27 @@ mybatis-plus:
   configuration:
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
     map-underscore-to-camel-case: true
+# logging
 logging:
   file:
     name: ./log/gameContest.log
   level:
     root: info
     org.mybatis: debug
+#kaptcha 图形验证码配置
+kaptcha:
+  height: 50
+  width: 150
+  content:
+    length: 4
+    source: 0123456789abcdefghijklmnopqrstuvwxyz
+    space: 10
+  font:
+    color: blue
+    name: 宋体,楷体,微软雅黑
+    size: 40
+  background-color:
+    from: lightGray
+    to: white
+  border:
+    enabled: false

+ 40 - 0
sql/t_auth_user.sql

@@ -0,0 +1,40 @@
+
+SET NAMES utf8mb4;
+-- ----------------------------
+-- Table structure for 用户认证
+-- ----------------------------
+DROP TABLE IF EXISTS `t_auth_user`;
+CREATE TABLE `t_auth_user`  (
+  `id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'id',
+  `user_code` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户登录账号',
+  `password` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '密码',
+  `open_id` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT 'openid',
+  `nike_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '昵称',
+  `avatar_url` varchar(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '头像',
+  `parent_user_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '父账号',
+  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '登录用户' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Table structure for 公众号列表
+-- ----------------------------
+DROP TABLE IF EXISTS `t_official_account`;
+CREATE TABLE `t_official_account`  (
+  `id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '主键',
+  `nick_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '昵称',
+  `head_img` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '头像',
+  `service_type_info` json NULL COMMENT '公众号类型',
+  `verify_type_info` json NULL COMMENT '公众号认证类型',
+  `user_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '原始 ID',
+  `principal_name` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '主体名称',
+  `alias` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '公众号所设置的微信号,可能为空',
+  `business_info` json NULL COMMENT '用以了解功能的开通状况(0代表未开通,1代表已开通)',
+  `qrcode_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '二维码图片的 URL',
+  `state` tinyint(0) NULL DEFAULT NULL COMMENT '状态',
+  `create_time` datetime(0) NULL DEFAULT NULL,
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '公众号' ROW_FORMAT = Dynamic;
+
+
+